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

Version Description

  • 18 February 2021 =

  • New: Text stroke feature

  • New: Event Calendar widget

  • New: Happy particle effects disable option

  • Tweak: Updated kses function to support more attributes

  • Tweak: Added html tag support in Data Table widget

  • Tweak: Added slider widget dots size control

  • Tweak: Added carousel widget dots size control

  • Fix: Shape divider spell

  • Fix: Chart widgets console error

  • Fix: Widget background overlay class mismatch issue

  • Fix: Data Table widget compatibility issue with WPML

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

Code changes from version 2.19.0 to 2.20.0

Files changed (45) hide show
  1. assets/admin/css/dashboard.css +10 -4
  2. assets/admin/css/dashboard.min.css +1 -1
  3. assets/css/main.css +1 -0
  4. assets/css/main.min.css +1 -0
  5. assets/css/widgets/event-calendar.min.css +1 -0
  6. assets/imgs/shape-divider/{abstruct-web.svg → abstract-web.svg} +0 -0
  7. assets/imgs/shape-divider/{multi-web.svg → multi-wave.svg} +0 -0
  8. assets/js/happy-addons.js +166 -1
  9. assets/js/happy-addons.min.js +1 -1
  10. assets/vendor/aesthetic-icon-picker/icons/font-awesome.js +22 -0
  11. assets/vendor/aesthetic-icon-picker/icons/font-awesome.min.js +1 -0
  12. assets/vendor/fullcalendar/fullcalendar.min.css +1 -0
  13. assets/vendor/fullcalendar/fullcalendar.min.js +6 -0
  14. assets/vendor/fullcalendar/locales-all.min.js +1 -0
  15. base.php +4 -0
  16. changelog.txt +16 -2
  17. classes/assets-manager.php +26 -0
  18. classes/extensions-manager.php +9 -0
  19. classes/finder-edit.php +169 -169
  20. classes/widgets-manager.php +10 -0
  21. classes/wpml-manager.php +50 -9
  22. controls/foreground.php +252 -252
  23. controls/text-stroke.php +97 -0
  24. extensions/shape-divider.php +8 -8
  25. extensions/widgets-extended.php +200 -148
  26. inc/functions.php +104 -16
  27. plugin.php +4 -4
  28. readme.txt +22 -7
  29. templates/admin/dashboard-home.php +160 -160
  30. templates/admin/dashboard-main.php +71 -71
  31. templates/admin/dashboard-pro.php +93 -93
  32. widgets/bar-chart/classes/data-map.php +178 -178
  33. widgets/bar-chart/widget.php +1 -1
  34. widgets/calderaform/widget.php +559 -559
  35. widgets/carousel/widget.php +33 -39
  36. widgets/cf7/widget.php +543 -543
  37. widgets/data-table/widget.php +20 -24
  38. widgets/event-calendar/widget.php +2270 -0
  39. widgets/ninjaform/widget.php +551 -551
  40. widgets/number/widget.php +369 -369
  41. widgets/slider/widget.php +33 -29
  42. widgets/weform/widget.php +713 -713
  43. widgets/wpform/widget.php +646 -646
  44. wpml/data-table.php +106 -0
  45. wpml/horizontal-timeline.php +75 -0
assets/admin/css/dashboard.css CHANGED
@@ -129,7 +129,14 @@
129
  border-top: 1px dashed #e8e8e8;
130
  }
131
  .ha-dashboard-widgets {
132
- margin-right: -10px;
 
 
 
 
 
 
 
133
  margin-left: -10px;
134
  }
135
  .ha-dashboard-widgets__item {
@@ -138,7 +145,6 @@
138
  display: -webkit-flex;
139
  display: -ms-flexbox;
140
  display: flex;
141
- float: left;
142
  overflow: hidden;
143
  -webkit-box-align: center;
144
  -webkit-align-items: center;
@@ -157,12 +163,12 @@
157
  width: calc(50% - 20px);
158
  }
159
  }
160
- @media (min-width: 1100px) {
161
  .ha-dashboard-widgets__item {
162
  width: calc(33.33% - 20px);
163
  }
164
  }
165
- @media (min-width: 1350px) {
166
  .ha-dashboard-widgets__item {
167
  width: calc(25% - 20px);
168
  }
129
  border-top: 1px dashed #e8e8e8;
130
  }
131
  .ha-dashboard-widgets {
132
+ display: -webkit-box;
133
+ display: -webkit-flex;
134
+ display: -ms-flexbox;
135
+ display: flex;
136
+ -webkit-flex-wrap: wrap;
137
+ -ms-flex-wrap: wrap;
138
+ flex-wrap: wrap;
139
+ margin-right: -10px;
140
  margin-left: -10px;
141
  }
142
  .ha-dashboard-widgets__item {
145
  display: -webkit-flex;
146
  display: -ms-flexbox;
147
  display: flex;
 
148
  overflow: hidden;
149
  -webkit-box-align: center;
150
  -webkit-align-items: center;
163
  width: calc(50% - 20px);
164
  }
165
  }
166
+ @media (min-width: 1350px) {
167
  .ha-dashboard-widgets__item {
168
  width: calc(33.33% - 20px);
169
  }
170
  }
171
+ @media (min-width: 1500px) {
172
  .ha-dashboard-widgets__item {
173
  width: calc(25% - 20px);
174
  }
assets/admin/css/dashboard.min.css CHANGED
@@ -1 +1 @@
1
- .ha-dashboard-tabs__content-item:after,.ha-dashboard-tabs__nav:after,.ha-dashboard-widgets:after{display:block;clear:both;content:""}.ha-dashboard{padding-top:20px}.ha-dashboard,.ha-dashboard *{box-sizing:border-box;font-family:"Nunito",sans-serif}.ha-dashboard-btn{display:inline-block;padding:15px 25px;border:0;border-radius:5px;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;text-decoration:none;font-weight:700;font-size:13px;line-height:1;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.ha-dashboard-btn:active,.ha-dashboard-btn:focus,.ha-dashboard-btn:hover{outline:0;box-shadow:none}.ha-dashboard-btn--lg{padding:15px 30px;font-size:14px}.ha-dashboard-btn--save{width:13em;background-color:#5db429;color:#fff}.ha-dashboard-btn--save:active,.ha-dashboard-btn--save:focus,.ha-dashboard-btn--save:hover{background-color:#488a20;color:#fff}.ha-dashboard-btn--save.disabled,.ha-dashboard-btn--save:disabled{background-color:#b3b3b3;box-shadow:none;opacity:.7;cursor:not-allowed}.ha-dashboard-tabs__nav-btn{float:right}.ha-dashboard-tabs__nav-item{display:block;float:left;padding:15px 40px;border-top:3px solid #bbb;border-radius:5px 5px 0 0;background-color:#e8e8e8;color:#888;text-decoration:none;text-transform:uppercase;font-weight:700;font-size:14px}.ha-dashboard-tabs__nav-item--pro{border-color:#d6226e;background-color:#e2498a;color:#fff}.ha-dashboard-tabs__nav-item.tab--is-active,.ha-dashboard-tabs__nav-item:active,.ha-dashboard-tabs__nav-item:focus,.ha-dashboard-tabs__nav-item:hover{outline:none;border-color:#562dd4;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);color:#562dd4;-webkit-transition:all .3s;transition:all .3s}.ha-dashboard-tabs__nav-item--pro.tab--is-active,.ha-dashboard-tabs__nav-item--pro:active,.ha-dashboard-tabs__nav-item--pro:focus,.ha-dashboard-tabs__nav-item--pro:hover{border-color:#e2498a;color:#e2498a}.ha-dashboard-tabs__nav-item:not(:last-child){margin-right:10px}.ha-dashboard-tabs__content-item{display:none;padding:40px;border-radius:0 0 5px 5px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.ha-dashboard-tabs__content-item.tab--is-active{position:relative;z-index:1;display:block}.ha-dashboard-panel__header{padding-bottom:40px}.ha-dashboard-panel__header-content>h2{margin:0 0 20px;font-size:2em}.ha-dashboard-panel__header-content>p{margin:0;color:#8c8c8c}.ha-dashboard-panel__footer{margin-top:20px;padding-top:20px;border-top:1px dashed #e8e8e8}.ha-dashboard-widgets{margin-right:-10px;margin-left:-10px}.ha-dashboard-widgets__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;float:left;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;margin-right:10px;margin-bottom:20px;margin-left:10px;padding:30px 20px;width:calc(100% - 20px);border:1px solid #e8e8e8;border-radius:5px}@media (min-width:650px){.ha-dashboard-widgets__item{width:calc(50% - 20px)}}@media (min-width:1100px){.ha-dashboard-widgets__item{width:calc(33.33% - 20px)}}@media (min-width:1350px){.ha-dashboard-widgets__item{width:calc(25% - 20px)}}.ha-dashboard-widgets__item.item--is-placeholder{opacity:.7}.ha-dashboard-widgets__item-icon{display:inline-block;margin-right:10px;width:30px;text-align:center;font-size:20px}.ha-dashboard-widgets__item:hover .ha-dashboard-widgets__item-icon{background-image:-webkit-linear-gradient(315deg,#e2498a 25%,#562dd4 100%);background-image:linear-gradient(135deg,#e2498a 25%,#562dd4 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.ha-dashboard-widgets__item-title{display:inline-block;margin:0;color:#444;font-weight:400;font-size:13px}.ha-dashboard-widgets__item-title>label{font-weight:700}.ha-dashboard-widgets__item-preview{display:inline-block;margin-left:5px;color:#c2cbd2;font-size:10px;-webkit-transition:all .2s;transition:all .2s}.ha-dashboard-widgets__item-preview:active,.ha-dashboard-widgets__item-preview:focus,.ha-dashboard-widgets__item-preview:hover{box-shadow:none;color:#8799a7}.ha-dashboard-widgets__item-badge{position:absolute;top:-2px;left:-18px;padding:6px 8px 3px;width:50px;background-color:#e2498a;color:#fff;text-align:center;text-transform:uppercase;font-weight:700;font-size:7px;line-height:1;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.ha-dashboard-widgets__item-toggle{position:absolute!important;right:20px}.ha-dashboard .ha-toggle{position:relative;display:block;overflow:hidden;width:40px;height:24px;border-radius:100px;background-color:#e8e8e8;box-shadow:inset 0 0 2px 1px rgba(0,0,0,.05)}.ha-dashboard .ha-toggle__check,.ha-dashboard .ha-toggle__switch,.ha-dashboard .ha-toggle__track{position:absolute;display:block}.ha-dashboard .ha-toggle__check{top:0;left:0;z-index:6;width:100%;height:100%;opacity:0;cursor:pointer}.ha-dashboard .ha-toggle__check.disabled,.ha-dashboard .ha-toggle__check:disabled{z-index:0;opacity:0}.ha-dashboard .ha-toggle__check:checked~.ha-toggle__track{box-shadow:inset 0 0 0 20px #562dd4}.ha-dashboard .ha-toggle__check:checked~.ha-toggle__switch{right:2px;left:18px;-webkit-transition:.35s cubic-bezier(.785,.135,.15,.86);transition:.35s cubic-bezier(.785,.135,.15,.86);-webkit-transition-delay:.05s,0s;transition-delay:.05s,0s;-webkit-transition-property:left,right;transition-property:left,right}.ha-dashboard .ha-toggle__switch,.ha-dashboard .ha-toggle__track{-webkit-transition:.35s cubic-bezier(.785,.135,.15,.86);transition:.35s cubic-bezier(.785,.135,.15,.86)}.ha-dashboard .ha-toggle__switch{z-index:1;background-color:#fff;-webkit-transition-delay:0s,.05s;transition-delay:0s,.05s;-webkit-transition-property:left,right;transition-property:left,right;top:2px;right:18px;bottom:2px;left:2px;border-radius:36px;box-shadow:0 1px 2px rgba(0,0,0,.2)}.ha-dashboard .ha-toggle__track{top:0;right:0;bottom:0;left:0;border-radius:40px;box-shadow:inset 0 0 0 2px rgba(0,0,0,.01)}@-webkit-keyframes animateTextIndent{0%,to{letter-spacing:15px}50%{letter-spacing:0}}@keyframes animateTextIndent{0%,to{letter-spacing:15px}50%{letter-spacing:0}}.ha-action-list{margin:-4px;padding-top:20px;font-weight:700;font-size:14px;opacity:.7}.ha-action--divider{padding-right:10px;padding-left:10px;color:#e8e8e8}.ha-action--btn{display:inline-block;margin:4px;padding:5px 10px 4px;outline:none;border:1px solid;border-radius:3px;background:0 0;box-shadow:none;font-weight:700;line-height:1;cursor:pointer}.ha-action--btn[data-filter="*"]{color:#666}.ha-action--btn[data-filter="*"]:focus,.ha-action--btn[data-filter="*"]:hover{border-color:#666;background-color:#666;color:#fff}.ha-action--btn[data-filter=free]{color:#562dd4}.ha-action--btn[data-filter=free]:focus,.ha-action--btn[data-filter=free]:hover{border-color:#562dd4;background-color:#562dd4;color:#fff}.ha-action--btn[data-filter=pro]{color:#e2498a}.ha-action--btn[data-filter=pro]:focus,.ha-action--btn[data-filter=pro]:hover{border-color:#e2498a;background-color:#e2498a;color:#fff}.ha-action--btn[data-action=enable],.ha-action--btn[data-action=enable_feature]{color:#5db429}.ha-action--btn[data-action=enable]:focus,.ha-action--btn[data-action=enable]:hover,.ha-action--btn[data-action=enable_feature]:focus,.ha-action--btn[data-action=enable_feature]:hover{border-color:#5db429;background-color:#5db429;color:#fff}.ha-action--btn[data-action=disable],.ha-action--btn[data-action=disable_feature]{color:#e63d3d}.ha-action--btn[data-action=disable]:focus,.ha-action--btn[data-action=disable]:hover,.ha-action--btn[data-action=disable_feature]:focus,.ha-action--btn[data-action=disable_feature]:hover{border-color:#e63d3d;background-color:#e63d3d;color:#fff}.ha-home-banner{position:relative;padding-top:25.2%;border-radius:5px;background:url(../../imgs/admin/dashboard-header.png) no-repeat center center/cover}.ha-home-banner__content{position:absolute;top:50%;left:50%;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-right:15px;padding-left:15px;max-width:1000px;width:100%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-home-banner__logo{position:relative;top:-8px;margin-right:50px;width:150px;height:auto}.ha-home-banner__divider{width:4px;height:60px;border-radius:10px;background-color:#fff}.ha-home-banner h2{float:left;margin:0;padding-left:50px;color:#fff;font-size:28px;line-height:1.1}.ha-home-banner h2>span{font-weight:400}.ha-home-body{margin-right:auto;margin-left:auto;padding-right:15px;padding-left:15px;max-width:1000px}.ha-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.ha-feature-title{margin-bottom:1rem;font-weight:700;font-size:28px}.ha-feature-sub-title-a{color:#242424;text-decoration:none}.ha-feature-sub-title-a:hover{color:#e2498a}.ha-feature-sub-title{margin-bottom:1rem;font-weight:700;font-size:18px;line-height:1.4}.ha-btn{display:inline-block;padding:.95rem 1.5rem;border-radius:4px;text-decoration:none;font-weight:700;font-size:14px}.ha-btn:focus,.ha-btn:hover{outline:none;box-shadow:none}.ha-btn-primary{background:#5e3bc4;color:#fff}.ha-btn-primary:focus,.ha-btn-primary:hover{background:#4b2f9d;color:#fff}.ha-btn-secondary{background:#e2498a;color:#fff}.ha-btn-secondary:focus,.ha-btn-secondary:hover{background:#d6226e;color:#fff}.btn-more:hover,.ha-text-primary{color:#5e3bc4}.ha-media h3 a:hover,.ha-text-secondary{color:#e2498a}.btn-more,.ha-btn-view{color:#e2498a;text-decoration:none;font-size:16px}.ha-btn-view{color:#835ef1}.ha-cta{padding:2.5rem 3rem;background:#e2498a;background-image:-webkit-linear-gradient(320deg,#e05da4 0%,#7249cf 100%);background-image:linear-gradient(130deg,#e05da4 0%,#7249cf 100%);color:#fff}.ha-cta .ha-feature-title{margin-top:0;color:#fff}.ha-cta p{margin-bottom:1rem;color:#daacdd}.ha-cta .link{color:#fff;text-decoration:underline;font-size:16px}.ha-cta .link:hover,.ha-media h3 a{text-decoration:none}.ha-cta .btn-contribute{display:inline-block;padding:.95rem 1.5rem;border-radius:4px;background:#fff;color:#7f4bca;text-decoration:none;font-size:15px}.ha-cta .btn-contribute:hover{background:#e2498a;color:#fff}.ha-section-title{margin:0;font-size:48px;line-height:1}.ha-badge{display:inline-block;margin-bottom:.3rem;padding:.6rem 1rem;border-radius:5px;background:#e2498a;background-image:-webkit-linear-gradient(320deg,#e05da4 0%,#7249cf 100%);background-image:linear-gradient(130deg,#e05da4 0%,#7249cf 100%);color:#fff;font-weight:700;font-size:24px}.ha-sub-title-sm{margin:.3rem 0 0;font-size:16px}.ha-border-box{padding:3rem;border:1px solid #ececec;border-radius:5px;box-shadow:10px 0 20px rgba(0,0,0,.05)}.ha-media{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-media img{width:180px;height:auto}.ha-media h3 a{color:#242424;line-height:1.4}.ha-media .ha-date{color:#8c8c8c}.ha-media-body{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-pro-widget{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;margin-bottom:25px;padding:1.5rem 1rem;border-radius:4px;background:#7c58e5;color:#fff;text-decoration:none;font-weight:700;font-size:13px}.ha-pro-widget:focus,.ha-pro-widget:hover{background:#df4b89;color:#fff}.ha-pro-widget i{padding-right:15px;font-weight:700;font-size:20px}.ha-dashboard .f18{font-size:18px}.ha-dashboard .f16{font-size:16px}.ha-dashboard .ha-py-5{padding-top:4rem;padding-bottom:4rem}.ha-dashboard .ha-pt-0{padding-top:0}.ha-dashboard .ha-pb-0{padding-bottom:0}.ha-dashboard .ha-pb-3{margin-bottom:3rem}.ha-dashboard .ha-pt-2{padding-top:2rem}.ha-dashboard .ha-pt-3{padding-top:3rem}.ha-dashboard .ha-pr-2{padding-right:2rem}.ha-dashboard .ha-pl-2{padding-left:2rem}.ha-dashboard .ha-mt-0{margin-top:0}.ha-dashboard .ha-mb-0{margin-bottom:0}.ha-dashboard .ha-mb-2{margin-bottom:2rem}.ha-dashboard .ha-mb-3{margin-bottom:3rem}.ha-dashboard .ha-mr-3{margin-right:1.5rem}.ha-dashboard p{margin-bottom:2.5rem}.ha-dashboard a,.ha-dashboard a:hover{-webkit-transition:all .3s;transition:all .3s}.ha-dashboard .ha-rounded{border-radius:5px}.ha-dashboard .ha-align-center{text-align:center}.ha-dashboard .ha-align-right{text-align:right}.ha-dashboard .ha-img-fluid{max-width:100%;height:auto}.ha-dashboard .ha-align-items-center{-webkit-box-align:center!important;-webkit-align-items:center!important;align-items:center!important;-ms-flex-align:center!important}.ha-dashboard .ha-align-items-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;align-items:flex-end!important;-ms-flex-align:end!important}.ha-dashboard .ha-min-height-455{min-height:455px}.ha-dashboard .ha-title-icon-size{width:48px;height:auto}@media (min-width:768px){.ha-col{position:relative;padding-right:15px;padding-left:15px;width:100%}.ha-col-11,.ha-col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.ha-col-11{-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.ha-col-10,.ha-col-9{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.ha-col-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.ha-col-7,.ha-col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.ha-col-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.ha-col-5,.ha-col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-col-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.ha-col-3,.ha-col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.ha-col-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.ha-col-1,.ha-col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.ha-col-1{-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}}[data-tooltip]{position:relative;z-index:2;cursor:pointer}[data-tooltip]:after,[data-tooltip]:before{visibility:hidden;opacity:0;pointer-events:none}[data-tooltip]:before{position:absolute;bottom:140%;left:50%;padding:5px;width:140px;border-radius:3px;background-color:#000;background-color:rgba(51,51,51,.9);color:#fff;content:attr(data-tooltip);text-align:center;font-size:12px;line-height:1.2;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}[data-tooltip]:after{position:absolute;left:50%;margin-top:-8px;margin-left:-5px;width:0;border-top:5px solid #000;border-top:5px solid rgba(51,51,51,.9);border-right:5px solid transparent;border-left:5px solid transparent;content:" ";font-size:0;line-height:0}[data-tooltip]:hover:after,[data-tooltip]:hover:before{visibility:visible;opacity:1}
1
+ .ha-dashboard-tabs__content-item:after,.ha-dashboard-tabs__nav:after,.ha-dashboard-widgets:after{display:block;clear:both;content:""}.ha-dashboard{padding-top:20px}.ha-dashboard,.ha-dashboard *{box-sizing:border-box;font-family:"Nunito",sans-serif}.ha-dashboard-btn{display:inline-block;padding:15px 25px;border:0;border-radius:5px;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);text-align:center;text-decoration:none;font-weight:700;font-size:13px;line-height:1;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.ha-dashboard-btn:active,.ha-dashboard-btn:focus,.ha-dashboard-btn:hover{outline:0;box-shadow:none}.ha-dashboard-btn--lg{padding:15px 30px;font-size:14px}.ha-dashboard-btn--save{width:13em;background-color:#5db429;color:#fff}.ha-dashboard-btn--save:active,.ha-dashboard-btn--save:focus,.ha-dashboard-btn--save:hover{background-color:#488a20;color:#fff}.ha-dashboard-btn--save.disabled,.ha-dashboard-btn--save:disabled{background-color:#b3b3b3;box-shadow:none;opacity:.7;cursor:not-allowed}.ha-dashboard-tabs__nav-btn{float:right}.ha-dashboard-tabs__nav-item{display:block;float:left;padding:15px 40px;border-top:3px solid #bbb;border-radius:5px 5px 0 0;background-color:#e8e8e8;color:#888;text-decoration:none;text-transform:uppercase;font-weight:700;font-size:14px}.ha-dashboard-tabs__nav-item--pro{border-color:#d6226e;background-color:#e2498a;color:#fff}.ha-dashboard-tabs__nav-item.tab--is-active,.ha-dashboard-tabs__nav-item:active,.ha-dashboard-tabs__nav-item:focus,.ha-dashboard-tabs__nav-item:hover{outline:none;border-color:#562dd4;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);color:#562dd4;-webkit-transition:all .3s;transition:all .3s}.ha-dashboard-tabs__nav-item--pro.tab--is-active,.ha-dashboard-tabs__nav-item--pro:active,.ha-dashboard-tabs__nav-item--pro:focus,.ha-dashboard-tabs__nav-item--pro:hover{border-color:#e2498a;color:#e2498a}.ha-dashboard-tabs__nav-item:not(:last-child){margin-right:10px}.ha-dashboard-tabs__content-item{display:none;padding:40px;border-radius:0 0 5px 5px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.ha-dashboard-tabs__content-item.tab--is-active{position:relative;z-index:1;display:block}.ha-dashboard-panel__header{padding-bottom:40px}.ha-dashboard-panel__header-content>h2{margin:0 0 20px;font-size:2em}.ha-dashboard-panel__header-content>p{margin:0;color:#8c8c8c}.ha-dashboard-panel__footer{margin-top:20px;padding-top:20px;border-top:1px dashed #e8e8e8}.ha-dashboard-widgets,.ha-dashboard-widgets__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-dashboard-widgets{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.ha-dashboard-widgets__item{position:relative;overflow:hidden;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-ms-flex-align:center;margin-right:10px;margin-bottom:20px;margin-left:10px;padding:30px 20px;width:calc(100% - 20px);border:1px solid #e8e8e8;border-radius:5px}@media (min-width:650px){.ha-dashboard-widgets__item{width:calc(50% - 20px)}}@media (min-width:1350px){.ha-dashboard-widgets__item{width:calc(33.33% - 20px)}}@media (min-width:1500px){.ha-dashboard-widgets__item{width:calc(25% - 20px)}}.ha-dashboard-widgets__item.item--is-placeholder{opacity:.7}.ha-dashboard-widgets__item-icon{display:inline-block;margin-right:10px;width:30px;text-align:center;font-size:20px}.ha-dashboard-widgets__item:hover .ha-dashboard-widgets__item-icon{background-image:-webkit-linear-gradient(315deg,#e2498a 25%,#562dd4 100%);background-image:linear-gradient(135deg,#e2498a 25%,#562dd4 100%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.ha-dashboard-widgets__item-title{display:inline-block;margin:0;color:#444;font-weight:400;font-size:13px}.ha-dashboard-widgets__item-title>label{font-weight:700}.ha-dashboard-widgets__item-preview{display:inline-block;margin-left:5px;color:#c2cbd2;font-size:10px;-webkit-transition:all .2s;transition:all .2s}.ha-dashboard-widgets__item-preview:active,.ha-dashboard-widgets__item-preview:focus,.ha-dashboard-widgets__item-preview:hover{box-shadow:none;color:#8799a7}.ha-dashboard-widgets__item-badge{position:absolute;top:-2px;left:-18px;padding:6px 8px 3px;width:50px;background-color:#e2498a;color:#fff;text-align:center;text-transform:uppercase;font-weight:700;font-size:7px;line-height:1;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.ha-dashboard-widgets__item-toggle{position:absolute!important;right:20px}.ha-dashboard .ha-toggle{position:relative;display:block;overflow:hidden;width:40px;height:24px;border-radius:100px;background-color:#e8e8e8;box-shadow:inset 0 0 2px 1px rgba(0,0,0,.05)}.ha-dashboard .ha-toggle__check,.ha-dashboard .ha-toggle__switch,.ha-dashboard .ha-toggle__track{position:absolute;display:block}.ha-dashboard .ha-toggle__check{top:0;left:0;z-index:6;width:100%;height:100%;opacity:0;cursor:pointer}.ha-dashboard .ha-toggle__check.disabled,.ha-dashboard .ha-toggle__check:disabled{z-index:0;opacity:0}.ha-dashboard .ha-toggle__check:checked~.ha-toggle__track{box-shadow:inset 0 0 0 20px #562dd4}.ha-dashboard .ha-toggle__check:checked~.ha-toggle__switch{right:2px;left:18px;-webkit-transition:.35s cubic-bezier(.785,.135,.15,.86);transition:.35s cubic-bezier(.785,.135,.15,.86);-webkit-transition-delay:.05s,0s;transition-delay:.05s,0s;-webkit-transition-property:left,right;transition-property:left,right}.ha-dashboard .ha-toggle__switch,.ha-dashboard .ha-toggle__track{-webkit-transition:.35s cubic-bezier(.785,.135,.15,.86);transition:.35s cubic-bezier(.785,.135,.15,.86)}.ha-dashboard .ha-toggle__switch{z-index:1;background-color:#fff;-webkit-transition-delay:0s,.05s;transition-delay:0s,.05s;-webkit-transition-property:left,right;transition-property:left,right;top:2px;right:18px;bottom:2px;left:2px;border-radius:36px;box-shadow:0 1px 2px rgba(0,0,0,.2)}.ha-dashboard .ha-toggle__track{top:0;right:0;bottom:0;left:0;border-radius:40px;box-shadow:inset 0 0 0 2px rgba(0,0,0,.01)}@-webkit-keyframes animateTextIndent{0%,to{letter-spacing:15px}50%{letter-spacing:0}}@keyframes animateTextIndent{0%,to{letter-spacing:15px}50%{letter-spacing:0}}.ha-action-list{margin:-4px;padding-top:20px;font-weight:700;font-size:14px;opacity:.7}.ha-action--divider{padding-right:10px;padding-left:10px;color:#e8e8e8}.ha-action--btn{display:inline-block;margin:4px;padding:5px 10px 4px;outline:none;border:1px solid;border-radius:3px;background:0 0;box-shadow:none;font-weight:700;line-height:1;cursor:pointer}.ha-action--btn[data-filter="*"]{color:#666}.ha-action--btn[data-filter="*"]:focus,.ha-action--btn[data-filter="*"]:hover{border-color:#666;background-color:#666;color:#fff}.ha-action--btn[data-filter=free]{color:#562dd4}.ha-action--btn[data-filter=free]:focus,.ha-action--btn[data-filter=free]:hover{border-color:#562dd4;background-color:#562dd4;color:#fff}.ha-action--btn[data-filter=pro]{color:#e2498a}.ha-action--btn[data-filter=pro]:focus,.ha-action--btn[data-filter=pro]:hover{border-color:#e2498a;background-color:#e2498a;color:#fff}.ha-action--btn[data-action=enable],.ha-action--btn[data-action=enable_feature]{color:#5db429}.ha-action--btn[data-action=enable]:focus,.ha-action--btn[data-action=enable]:hover,.ha-action--btn[data-action=enable_feature]:focus,.ha-action--btn[data-action=enable_feature]:hover{border-color:#5db429;background-color:#5db429;color:#fff}.ha-action--btn[data-action=disable],.ha-action--btn[data-action=disable_feature]{color:#e63d3d}.ha-action--btn[data-action=disable]:focus,.ha-action--btn[data-action=disable]:hover,.ha-action--btn[data-action=disable_feature]:focus,.ha-action--btn[data-action=disable_feature]:hover{border-color:#e63d3d;background-color:#e63d3d;color:#fff}.ha-home-banner{position:relative;padding-top:25.2%;border-radius:5px;background:url(../../imgs/admin/dashboard-header.png) no-repeat center center/cover}.ha-home-banner__content{position:absolute;top:50%;left:50%;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-right:15px;padding-left:15px;max-width:1000px;width:100%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ha-home-banner__logo{position:relative;top:-8px;margin-right:50px;width:150px;height:auto}.ha-home-banner__divider{width:4px;height:60px;border-radius:10px;background-color:#fff}.ha-home-banner h2{float:left;margin:0;padding-left:50px;color:#fff;font-size:28px;line-height:1.1}.ha-home-banner h2>span{font-weight:400}.ha-home-body{margin-right:auto;margin-left:auto;padding-right:15px;padding-left:15px;max-width:1000px}.ha-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.ha-feature-title{margin-bottom:1rem;font-weight:700;font-size:28px}.ha-feature-sub-title-a{color:#242424;text-decoration:none}.ha-feature-sub-title-a:hover{color:#e2498a}.ha-feature-sub-title{margin-bottom:1rem;font-weight:700;font-size:18px;line-height:1.4}.ha-btn{display:inline-block;padding:.95rem 1.5rem;border-radius:4px;text-decoration:none;font-weight:700;font-size:14px}.ha-btn:focus,.ha-btn:hover{outline:none;box-shadow:none}.ha-btn-primary{background:#5e3bc4;color:#fff}.ha-btn-primary:focus,.ha-btn-primary:hover{background:#4b2f9d;color:#fff}.ha-btn-secondary{background:#e2498a;color:#fff}.ha-btn-secondary:focus,.ha-btn-secondary:hover{background:#d6226e;color:#fff}.btn-more:hover,.ha-text-primary{color:#5e3bc4}.ha-media h3 a:hover,.ha-text-secondary{color:#e2498a}.btn-more,.ha-btn-view{color:#e2498a;text-decoration:none;font-size:16px}.ha-btn-view{color:#835ef1}.ha-cta{padding:2.5rem 3rem;background:#e2498a;background-image:-webkit-linear-gradient(320deg,#e05da4 0%,#7249cf 100%);background-image:linear-gradient(130deg,#e05da4 0%,#7249cf 100%);color:#fff}.ha-cta .ha-feature-title{margin-top:0;color:#fff}.ha-cta p{margin-bottom:1rem;color:#daacdd}.ha-cta .link{color:#fff;text-decoration:underline;font-size:16px}.ha-cta .link:hover,.ha-media h3 a{text-decoration:none}.ha-cta .btn-contribute{display:inline-block;padding:.95rem 1.5rem;border-radius:4px;background:#fff;color:#7f4bca;text-decoration:none;font-size:15px}.ha-cta .btn-contribute:hover{background:#e2498a;color:#fff}.ha-section-title{margin:0;font-size:48px;line-height:1}.ha-badge{display:inline-block;margin-bottom:.3rem;padding:.6rem 1rem;border-radius:5px;background:#e2498a;background-image:-webkit-linear-gradient(320deg,#e05da4 0%,#7249cf 100%);background-image:linear-gradient(130deg,#e05da4 0%,#7249cf 100%);color:#fff;font-weight:700;font-size:24px}.ha-sub-title-sm{margin:.3rem 0 0;font-size:16px}.ha-border-box{padding:3rem;border:1px solid #ececec;border-radius:5px;box-shadow:10px 0 20px rgba(0,0,0,.05)}.ha-media{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start;-ms-flex-align:start}.ha-media img{width:180px;height:auto}.ha-media h3 a{color:#242424;line-height:1.4}.ha-media .ha-date{color:#8c8c8c}.ha-media-body{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.ha-pro-widget{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;margin-bottom:25px;padding:1.5rem 1rem;border-radius:4px;background:#7c58e5;color:#fff;text-decoration:none;font-weight:700;font-size:13px}.ha-pro-widget:focus,.ha-pro-widget:hover{background:#df4b89;color:#fff}.ha-pro-widget i{padding-right:15px;font-weight:700;font-size:20px}.ha-dashboard .f18{font-size:18px}.ha-dashboard .f16{font-size:16px}.ha-dashboard .ha-py-5{padding-top:4rem;padding-bottom:4rem}.ha-dashboard .ha-pt-0{padding-top:0}.ha-dashboard .ha-pb-0{padding-bottom:0}.ha-dashboard .ha-pb-3{margin-bottom:3rem}.ha-dashboard .ha-pt-2{padding-top:2rem}.ha-dashboard .ha-pt-3{padding-top:3rem}.ha-dashboard .ha-pr-2{padding-right:2rem}.ha-dashboard .ha-pl-2{padding-left:2rem}.ha-dashboard .ha-mt-0{margin-top:0}.ha-dashboard .ha-mb-0{margin-bottom:0}.ha-dashboard .ha-mb-2{margin-bottom:2rem}.ha-dashboard .ha-mb-3{margin-bottom:3rem}.ha-dashboard .ha-mr-3{margin-right:1.5rem}.ha-dashboard p{margin-bottom:2.5rem}.ha-dashboard a,.ha-dashboard a:hover{-webkit-transition:all .3s;transition:all .3s}.ha-dashboard .ha-rounded{border-radius:5px}.ha-dashboard .ha-align-center{text-align:center}.ha-dashboard .ha-align-right{text-align:right}.ha-dashboard .ha-img-fluid{max-width:100%;height:auto}.ha-dashboard .ha-align-items-center{-webkit-box-align:center!important;-webkit-align-items:center!important;align-items:center!important;-ms-flex-align:center!important}.ha-dashboard .ha-align-items-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;align-items:flex-end!important;-ms-flex-align:end!important}.ha-dashboard .ha-min-height-455{min-height:455px}.ha-dashboard .ha-title-icon-size{width:48px;height:auto}@media (min-width:768px){.ha-col{position:relative;padding-right:15px;padding-left:15px;width:100%}.ha-col-11,.ha-col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.ha-col-11{-webkit-flex:0 0 91.666667%;-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.ha-col-10,.ha-col-9{-webkit-box-flex:0;-webkit-flex:0 0 83.333333%;-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.ha-col-9{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.ha-col-7,.ha-col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.666667%;-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.ha-col-7{-webkit-flex:0 0 58.333333%;-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.ha-col-5,.ha-col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.ha-col-5{-webkit-flex:0 0 41.666667%;-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.ha-col-3,.ha-col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.333333%;-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.ha-col-3{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.ha-col-1,.ha-col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.666667%;-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.ha-col-1{-webkit-flex:0 0 8.333333%;-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}}[data-tooltip]{position:relative;z-index:2;cursor:pointer}[data-tooltip]:after,[data-tooltip]:before{visibility:hidden;opacity:0;pointer-events:none}[data-tooltip]:before{position:absolute;bottom:140%;left:50%;padding:5px;width:140px;border-radius:3px;background-color:#000;background-color:rgba(51,51,51,.9);color:#fff;content:attr(data-tooltip);text-align:center;font-size:12px;line-height:1.2;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}[data-tooltip]:after{position:absolute;left:50%;margin-top:-8px;margin-left:-5px;width:0;border-top:5px solid #000;border-top:5px solid rgba(51,51,51,.9);border-right:5px solid transparent;border-left:5px solid transparent;content:" ";font-size:0;line-height:0}[data-tooltip]:hover:after,[data-tooltip]:hover:before{visibility:visible;opacity:1}
assets/css/main.css CHANGED
@@ -4,6 +4,7 @@
4
  .ha-css-transform-yes{-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))}.ha-css-transform-yes:hover{-webkit-transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,0)));transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,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 p:empty{display:none}.happy-addon .elementor-inline-editing{min-height:auto!important}.happy-addon-pro img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.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-bg-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-bg-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}
5
  .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__head-column-cell-icon img{width:40px;-o-object-fit:cover;object-fit:cover}.ha-data-table .ha-table__body-row-cell-icon svg,.ha-data-table .ha-table__head-column-cell-icon svg{width:40px;height:auto;fill:currentColor}.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}}
6
  .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.3rem 2.3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px;line-height:1}.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;vertical-align:top;fill:currentColor}.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{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{-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}}
 
7
  .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;fill:currentColor}.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 i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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;-o-object-fit:cover;object-fit:cover}.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;color:#fff;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;fill:currentColor}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative}.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)}
8
  .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;-o-object-fit:cover;object-fit:cover}.ha-fun-factor__media--icon{font-size:3rem}.ha-fun-factor__media--icon i,.ha-fun-factor__media--icon svg{position:relative;display:block;width:1em;height:1em;fill:currentColor}.ha-fun-factor__media--icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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}
9
  .ha-filter{margin-bottom:20px}.ha-filter__item{display:inline-block;overflow:hidden;margin-bottom:10px;padding:8px 20px;max-width:100%;border:2px solid #885cff;border-radius:3px;background-color:transparent;color:#885cff;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;line-height:1.2;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-filter__item:focus,.ha-filter__item:hover{outline:0;background-color:#885cff;color:#fff}.ha-filter__item--active,.ha-filter__item:active{background-color:#885cff;color:#fff}.ha-filter__item:not(:last-child){margin-right:10px}
4
  .ha-css-transform-yes{-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))}.ha-css-transform-yes:hover{-webkit-transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,0)));transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,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 p:empty{display:none}.happy-addon .elementor-inline-editing{min-height:auto!important}.happy-addon-pro img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.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-bg-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-bg-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}
5
  .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__head-column-cell-icon img{width:40px;-o-object-fit:cover;object-fit:cover}.ha-data-table .ha-table__body-row-cell-icon svg,.ha-data-table .ha-table__head-column-cell-icon svg{width:40px;height:auto;fill:currentColor}.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}}
6
  .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.3rem 2.3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px;line-height:1}.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;vertical-align:top;fill:currentColor}.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{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{-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}}
7
+ .ha-ec-popup-wrapper,.ha-ec-popup-wrapper.ha-ec-popup-ready:before{top:0;left:0;width:100%;height:100%;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.ha-ec-popup-wrapper{--ha-ec-popup-image-width:16.666667%;z-index:-1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;-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;position:fixed}.ha-ec-popup-wrapper.ha-ec-popup-ready{z-index:99999;visibility:visible;opacity:1}.ha-ec-popup-wrapper.ha-ec-popup-ready:before{position:absolute;background:rgba(0,0,0,.7);content:""}.ha-ec-popup{position:relative;display:block;padding:40px;width:900px;background:#fff;box-shadow:0 3px 13px 0 rgba(0,0,0,.08);-webkit-transition:all ease .4s;transition:all ease .4s;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.ha-ec-popup-wrapper.ha-ec-popup-ready .ha-ec-popup{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.ha-ec-popup-body,.ha-ec-popup-close{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-ec-popup-close{position:absolute;top:-18px;right:-15px;z-index:9999;overflow:visible;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#fff;box-shadow:2px 0 12px 3px rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);color:#000;text-align:center;font-size:24px;cursor:pointer;-webkit-transition:all ease .4s;transition:all ease .4s}.ha-ec-popup-body{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-ec-popup-content,.ha-ec-popup-image,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button{position:relative}.ha-ec-popup-image{overflow:hidden;-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-ec-popup-image-width,16.66667%);-ms-flex:0 0 var(--ha-ec-popup-image-width,16.66667%);flex:0 0 var(--ha-ec-popup-image-width,16.66667%);margin-right:15px;max-width:var(--ha-ec-popup-image-width,16.66667%)}.ha-ec-popup-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));-ms-flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));max-width:calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)))}.ha-ec-popup-image img{max-width:100%;height:auto;border:none;border-radius:5px 5px 5px 5px;box-shadow:none}.ha-ec-popup-content h3{margin-top:0;margin-bottom:10px;font-weight:700;font-size:24px}.ha-ec-popup-content p.ha-ec-popup-desc{margin-bottom:15px;color:#666;font-size:16px}.ha-ec-popup-content p.ha-ec-popup-desc p{margin-bottom:0}.ha-ec-popup-content ul,.ha-ec-popup-content ul li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-ec-popup-content ul{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;width:100%;list-style:none}.ha-ec-popup-content ul li{position:relative;float:left;-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end;margin-right:15px;margin-bottom:30px;line-height:1}.ha-ec-popup-content ul li:last-child{margin-right:0}.ha-ec-popup-content .ha-ec-guest-icon,.ha-ec-popup-content .ha-ec-location-icon,.ha-ec-popup-content .ha-ec-time-icon{font-size:18px}.ha-ec-popup-content ul li .ha-ec-guest-title,.ha-ec-popup-content ul li .ha-ec-location-title,.ha-ec-popup-content ul li .ha-ec-time-title{display:block;margin-bottom:10px;color:#666;font-style:italic;font-size:12px;line-height:1}.ha-ec-popup-content ul li .ha-ec-event-guest,.ha-ec-popup-content ul li .ha-ec-event-location,.ha-ec-popup-content ul li .ha-ec-event-time{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;color:#666;font-weight:700;font-size:16px;line-height:1}.ha-ec-popup-content ul li svg{padding-right:5px;width:auto;height:.9em;fill:currentColor}.ha-ec-popup-content .ha-ec-popup-readmore{display:block;overflow:hidden}.ha-ec-popup-content .ha-ec-popup-readmore a.ha-ec-popup-readmore-link{display:inline-block}span.ha-ec-error-message{display:block;margin:5px 0;padding:10px;border-left-width:5px;border-left-style:solid;border-left-color:#ffb900}.ha-ec-wrapper .fc table{overflow:auto;margin:auto}.ha-ec-wrapper table tbody tr td,.ha-ec-wrapper table tbody tr td:not(.fc-timegrid-slot):not(.fc-timegrid-col),.ha-ec-wrapper table tbody tr th{background-color:transparent}.ha-ec-wrapper table tbody tr td.fc-timegrid-slot{background:0 0!important}.ha-ec-wrapper .fc-theme-standard .fc-list,.ha-ec-wrapper .fc-theme-standard .fc-scrollgrid,.ha-ec-wrapper .fc-theme-standard td,.ha-ec-wrapper .fc-theme-standard th,.ha-ec-wrapper table thead:first-child tr:first-child th{border-color:#b0b0b0}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group .fc-button-primary{-webkit-box-flex:0;-webkit-flex:none;-ms-flex:none;flex:none}.ha-ec-wrapper .fc .fc-daygrid-day.fc-day-today,.ha-ec-wrapper .fc .fc-timegrid-col.fc-day-today{background-color:#f5f5f5}.ha-ec-wrapper .fc .fc-list-table tr>*{border-right:0!important;border-left:0!important}.ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion,.ha-ec-wrapper th.fc-col-header-cell.fc-day{color:#fff}.ha-ec-wrapper th.fc-col-header-cell.fc-day{padding:15px;background-color:#6d39ef}.ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion{background-color:#fff}.ha-ec-wrapper .fc-timegrid-slot-label-cushion.fc-scrollgrid-shrink-cushion,.ha-ec-wrapper span.fc-timegrid-axis-cushion.fc-scrollgrid-shrink-cushion.fc-scrollgrid-sync-inner{color:#222}.ha-ec-wrapper .fc .fc-daygrid-day-top{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;color:#222;font-size:1em}.ha-ec-wrapper .fc-daygrid-block-event .fc-event-time,.ha-ec-wrapper .fc-daygrid-block-event .fc-event-title{padding:0}.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-block-event,.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-dot-event{padding:10px}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-timegrid-event{border:0!important}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-list-event,.ha-ec-wrapper .fc-timegrid-event{background:#ac89ff}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-daygrid-event .fc-event-main,.ha-ec-wrapper .fc-list-event,.ha-ec-wrapper .fc-timegrid-event,.ha-ec-wrapper .fc-timegrid-event .fc-event-main,.ha-ec-wrapper a.fc-daygrid-event,.ha-ec-wrapper a.fc-daygrid-event .fc-event-main,.ha-ec-wrapper a.fc-daygrid-event:hover{color:#fff;font-size:14px}.ha-ec-wrapper .fc-daygrid-event .fc-daygrid-event-dot,.ha-ec-wrapper .fc-list-event .fc-list-event-dot{border-color:#fff}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-toolbar-title{color:#242424;font-size:1.5em}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button .fc-icon{font-size:1em}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group button:not(:first-child){margin-left:5px}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button:before{display:inline-block;padding-right:5px;padding-left:0;font-weight:900;font-size:1em;font-family:"Font Awesome 5 Free"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button:before{left:8px;content:"\f03a"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button:before{left:21px;content:"\f0c9"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button:before{content:"\f00a"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button:before{content:"\f00b"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary{float:none;padding:8px 12px;width:auto;height:auto;border:none;border-radius:3px;background:#f7f7fb;box-shadow:none;color:#242424;text-transform:capitalize;text-shadow:none;font-weight:400;font-size:1em;line-height:19px}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary.fc-state-active,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:focus,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:hover,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:visited{background:#e2498a;box-shadow:none;color:#fff}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary.fc-button-active{background:#e2498a;color:#fff}@media (max-width:575px){.ha-ec-wrapper .fc-header-toolbar.fc-toolbar .fc-toolbar-chunk{margin-bottom:10px;width:100%;text-align:center}.ha-ec-popup-content,.ha-ec-popup-image{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.ha-ec-popup-body .ha-ec-popup-image{margin-right:0;margin-bottom:15px}.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-block-event,.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-dot-event{padding:0}}
8
  .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;fill:currentColor}.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 i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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;-o-object-fit:cover;object-fit:cover}.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;color:#fff;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;fill:currentColor}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative}.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)}
9
  .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;-o-object-fit:cover;object-fit:cover}.ha-fun-factor__media--icon{font-size:3rem}.ha-fun-factor__media--icon i,.ha-fun-factor__media--icon svg{position:relative;display:block;width:1em;height:1em;fill:currentColor}.ha-fun-factor__media--icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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}
10
  .ha-filter{margin-bottom:20px}.ha-filter__item{display:inline-block;overflow:hidden;margin-bottom:10px;padding:8px 20px;max-width:100%;border:2px solid #885cff;border-radius:3px;background-color:transparent;color:#885cff;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;line-height:1.2;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-filter__item:focus,.ha-filter__item:hover{outline:0;background-color:#885cff;color:#fff}.ha-filter__item--active,.ha-filter__item:active{background-color:#885cff;color:#fff}.ha-filter__item:not(:last-child){margin-right:10px}
assets/css/main.min.css CHANGED
@@ -4,6 +4,7 @@
4
  .ha-css-transform-yes{-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))}.ha-css-transform-yes:hover{-webkit-transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,0)));transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,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 p:empty{display:none}.happy-addon .elementor-inline-editing{min-height:auto!important}.happy-addon-pro img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.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-bg-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-bg-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}
5
  .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__head-column-cell-icon img{width:40px;-o-object-fit:cover;object-fit:cover}.ha-data-table .ha-table__body-row-cell-icon svg,.ha-data-table .ha-table__head-column-cell-icon svg{width:40px;height:auto;fill:currentColor}.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}}
6
  .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.3rem 2.3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px;line-height:1}.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;vertical-align:top;fill:currentColor}.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{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{-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}}
 
7
  .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;fill:currentColor}.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 i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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;-o-object-fit:cover;object-fit:cover}.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;color:#fff;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;fill:currentColor}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative}.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)}
8
  .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;-o-object-fit:cover;object-fit:cover}.ha-fun-factor__media--icon{font-size:3rem}.ha-fun-factor__media--icon i,.ha-fun-factor__media--icon svg{position:relative;display:block;width:1em;height:1em;fill:currentColor}.ha-fun-factor__media--icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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}
9
  .ha-filter{margin-bottom:20px}.ha-filter__item{display:inline-block;overflow:hidden;margin-bottom:10px;padding:8px 20px;max-width:100%;border:2px solid #885cff;border-radius:3px;background-color:transparent;color:#885cff;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;line-height:1.2;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-filter__item:focus,.ha-filter__item:hover{outline:0;background-color:#885cff;color:#fff}.ha-filter__item--active,.ha-filter__item:active{background-color:#885cff;color:#fff}.ha-filter__item:not(:last-child){margin-right:10px}
4
  .ha-css-transform-yes{-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))}.ha-css-transform-yes:hover{-webkit-transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,0)));transform:translate(var(--ha-tfx-translate-x-hover,var(--ha-tfx-translate-x,0)),var(--ha-tfx-translate-y-hover,var(--ha-tfx-translate-y,0))) scale(var(--ha-tfx-scale-x-hover,var(--ha-tfx-scale-x,1)),var(--ha-tfx-scale-y-hover,var(--ha-tfx-scale-y,1))) skew(var(--ha-tfx-skew-x-hover,var(--ha-tfx-skew-x,0)),var(--ha-tfx-skew-y-hover,var(--ha-tfx-skew-y,0))) rotateX(var(--ha-tfx-rotate-x-hover,var(--ha-tfx-rotate-x,0))) rotateY(var(--ha-tfx-rotate-y-hover,var(--ha-tfx-rotate-y,0))) rotateZ(var(--ha-tfx-rotate-z-hover,var(--ha-tfx-rotate-z,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 p:empty{display:none}.happy-addon .elementor-inline-editing{min-height:auto!important}.happy-addon-pro img{max-width:100%;height:auto;-o-object-fit:cover;object-fit:cover}.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-bg-overlay>.elementor-widget-container{position:relative;z-index:1}.ha-has-bg-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}
5
  .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__head-column-cell-icon img{width:40px;-o-object-fit:cover;object-fit:cover}.ha-data-table .ha-table__body-row-cell-icon svg,.ha-data-table .ha-table__head-column-cell-icon svg{width:40px;height:auto;fill:currentColor}.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}}
6
  .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.3rem 2.3rem;max-width:100%;color:#fff;text-decoration:none;font-size:14px;line-height:1}.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;vertical-align:top;fill:currentColor}.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{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{-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}}
7
+ .ha-ec-popup-wrapper,.ha-ec-popup-wrapper.ha-ec-popup-ready:before{top:0;left:0;width:100%;height:100%;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.ha-ec-popup-wrapper{--ha-ec-popup-image-width:16.666667%;z-index:-1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;-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;position:fixed}.ha-ec-popup-wrapper.ha-ec-popup-ready{z-index:99999;visibility:visible;opacity:1}.ha-ec-popup-wrapper.ha-ec-popup-ready:before{position:absolute;background:rgba(0,0,0,.7);content:""}.ha-ec-popup{position:relative;display:block;padding:40px;width:900px;background:#fff;box-shadow:0 3px 13px 0 rgba(0,0,0,.08);-webkit-transition:all ease .4s;transition:all ease .4s;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.ha-ec-popup-wrapper.ha-ec-popup-ready .ha-ec-popup{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.ha-ec-popup-body,.ha-ec-popup-close{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-ec-popup-close{position:absolute;top:-18px;right:-15px;z-index:9999;overflow:visible;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#fff;box-shadow:2px 0 12px 3px rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);color:#000;text-align:center;font-size:24px;cursor:pointer;-webkit-transition:all ease .4s;transition:all ease .4s}.ha-ec-popup-body{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-ec-popup-content,.ha-ec-popup-image,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button{position:relative}.ha-ec-popup-image{overflow:hidden;-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-ec-popup-image-width,16.66667%);-ms-flex:0 0 var(--ha-ec-popup-image-width,16.66667%);flex:0 0 var(--ha-ec-popup-image-width,16.66667%);margin-right:15px;max-width:var(--ha-ec-popup-image-width,16.66667%)}.ha-ec-popup-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));-ms-flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));max-width:calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)))}.ha-ec-popup-image img{max-width:100%;height:auto;border:none;border-radius:5px 5px 5px 5px;box-shadow:none}.ha-ec-popup-content h3{margin-top:0;margin-bottom:10px;font-weight:700;font-size:24px}.ha-ec-popup-content p.ha-ec-popup-desc{margin-bottom:15px;color:#666;font-size:16px}.ha-ec-popup-content p.ha-ec-popup-desc p{margin-bottom:0}.ha-ec-popup-content ul,.ha-ec-popup-content ul li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-ec-popup-content ul{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;width:100%;list-style:none}.ha-ec-popup-content ul li{position:relative;float:left;-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end;margin-right:15px;margin-bottom:30px;line-height:1}.ha-ec-popup-content ul li:last-child{margin-right:0}.ha-ec-popup-content .ha-ec-guest-icon,.ha-ec-popup-content .ha-ec-location-icon,.ha-ec-popup-content .ha-ec-time-icon{font-size:18px}.ha-ec-popup-content ul li .ha-ec-guest-title,.ha-ec-popup-content ul li .ha-ec-location-title,.ha-ec-popup-content ul li .ha-ec-time-title{display:block;margin-bottom:10px;color:#666;font-style:italic;font-size:12px;line-height:1}.ha-ec-popup-content ul li .ha-ec-event-guest,.ha-ec-popup-content ul li .ha-ec-event-location,.ha-ec-popup-content ul li .ha-ec-event-time{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;color:#666;font-weight:700;font-size:16px;line-height:1}.ha-ec-popup-content ul li svg{padding-right:5px;width:auto;height:.9em;fill:currentColor}.ha-ec-popup-content .ha-ec-popup-readmore{display:block;overflow:hidden}.ha-ec-popup-content .ha-ec-popup-readmore a.ha-ec-popup-readmore-link{display:inline-block}span.ha-ec-error-message{display:block;margin:5px 0;padding:10px;border-left-width:5px;border-left-style:solid;border-left-color:#ffb900}.ha-ec-wrapper .fc table{overflow:auto;margin:auto}.ha-ec-wrapper table tbody tr td,.ha-ec-wrapper table tbody tr td:not(.fc-timegrid-slot):not(.fc-timegrid-col),.ha-ec-wrapper table tbody tr th{background-color:transparent}.ha-ec-wrapper table tbody tr td.fc-timegrid-slot{background:0 0!important}.ha-ec-wrapper .fc-theme-standard .fc-list,.ha-ec-wrapper .fc-theme-standard .fc-scrollgrid,.ha-ec-wrapper .fc-theme-standard td,.ha-ec-wrapper .fc-theme-standard th,.ha-ec-wrapper table thead:first-child tr:first-child th{border-color:#b0b0b0}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group .fc-button-primary{-webkit-box-flex:0;-webkit-flex:none;-ms-flex:none;flex:none}.ha-ec-wrapper .fc .fc-daygrid-day.fc-day-today,.ha-ec-wrapper .fc .fc-timegrid-col.fc-day-today{background-color:#f5f5f5}.ha-ec-wrapper .fc .fc-list-table tr>*{border-right:0!important;border-left:0!important}.ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion,.ha-ec-wrapper th.fc-col-header-cell.fc-day{color:#fff}.ha-ec-wrapper th.fc-col-header-cell.fc-day{padding:15px;background-color:#6d39ef}.ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion{background-color:#fff}.ha-ec-wrapper .fc-timegrid-slot-label-cushion.fc-scrollgrid-shrink-cushion,.ha-ec-wrapper span.fc-timegrid-axis-cushion.fc-scrollgrid-shrink-cushion.fc-scrollgrid-sync-inner{color:#222}.ha-ec-wrapper .fc .fc-daygrid-day-top{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;color:#222;font-size:1em}.ha-ec-wrapper .fc-daygrid-block-event .fc-event-time,.ha-ec-wrapper .fc-daygrid-block-event .fc-event-title{padding:0}.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-block-event,.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-dot-event{padding:10px}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-timegrid-event{border:0!important}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-list-event,.ha-ec-wrapper .fc-timegrid-event{background:#ac89ff}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-daygrid-event .fc-event-main,.ha-ec-wrapper .fc-list-event,.ha-ec-wrapper .fc-timegrid-event,.ha-ec-wrapper .fc-timegrid-event .fc-event-main,.ha-ec-wrapper a.fc-daygrid-event,.ha-ec-wrapper a.fc-daygrid-event .fc-event-main,.ha-ec-wrapper a.fc-daygrid-event:hover{color:#fff;font-size:14px}.ha-ec-wrapper .fc-daygrid-event .fc-daygrid-event-dot,.ha-ec-wrapper .fc-list-event .fc-list-event-dot{border-color:#fff}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-toolbar-title{color:#242424;font-size:1.5em}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button .fc-icon{font-size:1em}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group button:not(:first-child){margin-left:5px}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button:before{display:inline-block;padding-right:5px;padding-left:0;font-weight:900;font-size:1em;font-family:"Font Awesome 5 Free"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button:before{left:8px;content:"\f03a"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button:before{left:21px;content:"\f0c9"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button:before{content:"\f00a"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button:before{content:"\f00b"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary{float:none;padding:8px 12px;width:auto;height:auto;border:none;border-radius:3px;background:#f7f7fb;box-shadow:none;color:#242424;text-transform:capitalize;text-shadow:none;font-weight:400;font-size:1em;line-height:19px}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary.fc-state-active,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:focus,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:hover,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:visited{background:#e2498a;box-shadow:none;color:#fff}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary.fc-button-active{background:#e2498a;color:#fff}@media (max-width:575px){.ha-ec-wrapper .fc-header-toolbar.fc-toolbar .fc-toolbar-chunk{margin-bottom:10px;width:100%;text-align:center}.ha-ec-popup-content,.ha-ec-popup-image{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.ha-ec-popup-body .ha-ec-popup-image{margin-right:0;margin-bottom:15px}.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-block-event,.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-dot-event{padding:0}}
8
  .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;fill:currentColor}.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 i:before,.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-front-inner .ha-flip-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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;-o-object-fit:cover;object-fit:cover}.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;color:#fff;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;fill:currentColor}.ha-flip-box-container .ha-flip-box-inner .ha-flip-box-back-inner .ha-flip-icon i{position:relative}.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)}
9
  .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;-o-object-fit:cover;object-fit:cover}.ha-fun-factor__media--icon{font-size:3rem}.ha-fun-factor__media--icon i,.ha-fun-factor__media--icon svg{position:relative;display:block;width:1em;height:1em;fill:currentColor}.ha-fun-factor__media--icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.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}
10
  .ha-filter{margin-bottom:20px}.ha-filter__item{display:inline-block;overflow:hidden;margin-bottom:10px;padding:8px 20px;max-width:100%;border:2px solid #885cff;border-radius:3px;background-color:transparent;color:#885cff;text-transform:uppercase;text-overflow:ellipsis;font-size:14px;line-height:1.2;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ha-filter__item:focus,.ha-filter__item:hover{outline:0;background-color:#885cff;color:#fff}.ha-filter__item--active,.ha-filter__item:active{background-color:#885cff;color:#fff}.ha-filter__item:not(:last-child){margin-right:10px}
assets/css/widgets/event-calendar.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .ha-ec-popup-wrapper,.ha-ec-popup-wrapper.ha-ec-popup-ready:before{top:0;left:0;width:100%;height:100%;-webkit-transition:all .3s ease-out;transition:all .3s ease-out}.ha-ec-popup-wrapper{--ha-ec-popup-image-width:16.666667%;z-index:-1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;visibility:hidden;-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;position:fixed}.ha-ec-popup-wrapper.ha-ec-popup-ready{z-index:99999;visibility:visible;opacity:1}.ha-ec-popup-wrapper.ha-ec-popup-ready:before{position:absolute;background:rgba(0,0,0,.7);content:""}.ha-ec-popup{position:relative;display:block;padding:40px;width:900px;background:#fff;box-shadow:0 3px 13px 0 rgba(0,0,0,.08);-webkit-transition:all ease .4s;transition:all ease .4s;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0)}.ha-ec-popup-wrapper.ha-ec-popup-ready .ha-ec-popup{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.ha-ec-popup-body,.ha-ec-popup-close{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-ec-popup-close{position:absolute;top:-18px;right:-15px;z-index:9999;overflow:visible;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:#fff;box-shadow:2px 0 12px 3px rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);color:#000;text-align:center;font-size:24px;cursor:pointer;-webkit-transition:all ease .4s;transition:all ease .4s}.ha-ec-popup-body{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-ec-popup-content,.ha-ec-popup-image,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button{position:relative}.ha-ec-popup-image{overflow:hidden;-webkit-box-flex:0;-webkit-flex:0 0 var(--ha-ec-popup-image-width,16.66667%);-ms-flex:0 0 var(--ha-ec-popup-image-width,16.66667%);flex:0 0 var(--ha-ec-popup-image-width,16.66667%);margin-right:15px;max-width:var(--ha-ec-popup-image-width,16.66667%)}.ha-ec-popup-content{-webkit-box-flex:0;-webkit-flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));-ms-flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));flex:0 0 calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)));max-width:calc(100% - (15px + var(--ha-ec-popup-image-width,16.666667%)))}.ha-ec-popup-image img{max-width:100%;height:auto;border:none;border-radius:5px 5px 5px 5px;box-shadow:none}.ha-ec-popup-content h3{margin-top:0;margin-bottom:10px;font-weight:700;font-size:24px}.ha-ec-popup-content p.ha-ec-popup-desc{margin-bottom:15px;color:#666;font-size:16px}.ha-ec-popup-content p.ha-ec-popup-desc p{margin-bottom:0}.ha-ec-popup-content ul,.ha-ec-popup-content ul li{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.ha-ec-popup-content ul{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;width:100%;list-style:none}.ha-ec-popup-content ul li{position:relative;float:left;-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end;-ms-flex-align:end;margin-right:15px;margin-bottom:30px;line-height:1}.ha-ec-popup-content ul li:last-child{margin-right:0}.ha-ec-popup-content .ha-ec-guest-icon,.ha-ec-popup-content .ha-ec-location-icon,.ha-ec-popup-content .ha-ec-time-icon{font-size:18px}.ha-ec-popup-content ul li .ha-ec-guest-title,.ha-ec-popup-content ul li .ha-ec-location-title,.ha-ec-popup-content ul li .ha-ec-time-title{display:block;margin-bottom:10px;color:#666;font-style:italic;font-size:12px;line-height:1}.ha-ec-popup-content ul li .ha-ec-event-guest,.ha-ec-popup-content ul li .ha-ec-event-location,.ha-ec-popup-content ul li .ha-ec-event-time{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;color:#666;font-weight:700;font-size:16px;line-height:1}.ha-ec-popup-content ul li svg{padding-right:5px;width:auto;height:.9em;fill:currentColor}.ha-ec-popup-content .ha-ec-popup-readmore{display:block;overflow:hidden}.ha-ec-popup-content .ha-ec-popup-readmore a.ha-ec-popup-readmore-link{display:inline-block}span.ha-ec-error-message{display:block;margin:5px 0;padding:10px;border-left-width:5px;border-left-style:solid;border-left-color:#ffb900}.ha-ec-wrapper .fc table{overflow:auto;margin:auto}.ha-ec-wrapper table tbody tr td,.ha-ec-wrapper table tbody tr td:not(.fc-timegrid-slot):not(.fc-timegrid-col),.ha-ec-wrapper table tbody tr th{background-color:transparent}.ha-ec-wrapper table tbody tr td.fc-timegrid-slot{background:0 0!important}.ha-ec-wrapper .fc-theme-standard .fc-list,.ha-ec-wrapper .fc-theme-standard .fc-scrollgrid,.ha-ec-wrapper .fc-theme-standard td,.ha-ec-wrapper .fc-theme-standard th,.ha-ec-wrapper table thead:first-child tr:first-child th{border-color:#b0b0b0}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group .fc-button-primary{-webkit-box-flex:0;-webkit-flex:none;-ms-flex:none;flex:none}.ha-ec-wrapper .fc .fc-daygrid-day.fc-day-today,.ha-ec-wrapper .fc .fc-timegrid-col.fc-day-today{background-color:#f5f5f5}.ha-ec-wrapper .fc .fc-list-table tr>*{border-right:0!important;border-left:0!important}.ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion,.ha-ec-wrapper th.fc-col-header-cell.fc-day{color:#fff}.ha-ec-wrapper th.fc-col-header-cell.fc-day{padding:15px;background-color:#6d39ef}.ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion{background-color:#fff}.ha-ec-wrapper .fc-timegrid-slot-label-cushion.fc-scrollgrid-shrink-cushion,.ha-ec-wrapper span.fc-timegrid-axis-cushion.fc-scrollgrid-shrink-cushion.fc-scrollgrid-sync-inner{color:#222}.ha-ec-wrapper .fc .fc-daygrid-day-top{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;color:#222;font-size:1em}.ha-ec-wrapper .fc-daygrid-block-event .fc-event-time,.ha-ec-wrapper .fc-daygrid-block-event .fc-event-title{padding:0}.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-block-event,.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-dot-event{padding:10px}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-timegrid-event{border:0!important}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-list-event,.ha-ec-wrapper .fc-timegrid-event{background:#ac89ff}.ha-ec-wrapper .fc-daygrid-event,.ha-ec-wrapper .fc-daygrid-event .fc-event-main,.ha-ec-wrapper .fc-list-event,.ha-ec-wrapper .fc-timegrid-event,.ha-ec-wrapper .fc-timegrid-event .fc-event-main,.ha-ec-wrapper a.fc-daygrid-event,.ha-ec-wrapper a.fc-daygrid-event .fc-event-main,.ha-ec-wrapper a.fc-daygrid-event:hover{color:#fff;font-size:14px}.ha-ec-wrapper .fc-daygrid-event .fc-daygrid-event-dot,.ha-ec-wrapper .fc-list-event .fc-list-event-dot{border-color:#fff}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-toolbar-title{color:#242424;font-size:1.5em}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button .fc-icon{font-size:1em}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group button:not(:first-child){margin-left:5px}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button:before{display:inline-block;padding-right:5px;padding-left:0;font-weight:900;font-size:1em;font-family:"Font Awesome 5 Free"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridWeek-button:before{left:8px;content:"\f03a"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-timeGridDay-button:before{left:21px;content:"\f0c9"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-dayGridMonth-button:before{content:"\f00a"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listMonth-button:before,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-listWeek-button:before{content:"\f00b"}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary{float:none;padding:8px 12px;width:auto;height:auto;border:none;border-radius:3px;background:#f7f7fb;box-shadow:none;color:#242424;text-transform:capitalize;text-shadow:none;font-weight:400;font-size:1em;line-height:19px}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary.fc-state-active,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:focus,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:hover,.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary:visited{background:#e2498a;box-shadow:none;color:#fff}.ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-primary.fc-button-active{background:#e2498a;color:#fff}@media (max-width:575px){.ha-ec-wrapper .fc-header-toolbar.fc-toolbar .fc-toolbar-chunk{margin-bottom:10px;width:100%;text-align:center}.ha-ec-popup-content,.ha-ec-popup-image{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.ha-ec-popup-body .ha-ec-popup-image{margin-right:0;margin-bottom:15px}.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-block-event,.ha-ec-wrapper .fc-daygrid-day-events .fc-daygrid-event.fc-daygrid-dot-event{padding:0}}
assets/imgs/shape-divider/{abstruct-web.svg → abstract-web.svg} RENAMED
File without changes
assets/imgs/shape-divider/{multi-web.svg → multi-wave.svg} RENAMED
File without changes
assets/js/happy-addons.js CHANGED
@@ -650,6 +650,170 @@
650
 
651
  };
652
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
653
  // Slider
654
  elementorFrontend.hooks.addAction(
655
  'frontend/element_ready/ha-slider.default',
@@ -711,7 +875,7 @@
711
 
712
  // Background overlay extension
713
  var BackgroundOverlay = function($scope) {
714
- $scope.hasClass('elementor-element-edit-mode') && $scope.addClass('has-bg-overlay');
715
  }
716
 
717
  var fnHanlders = {
@@ -724,6 +888,7 @@
724
  'ha-threesixty-rotation.default': Threesixty_Rotation,
725
  'ha-data-table.default' : DataTable,
726
  'widget' : BackgroundOverlay,
 
727
  };
728
 
729
  $.each( fnHanlders, function( widgetName, handlerFn ) {
650
 
651
  };
652
 
653
+ //Event Calendar
654
+ var Event_Calendar = function($scope) {
655
+ var calendarEl = $scope.find('.ha-ec');
656
+ var popup = $scope.find('.ha-ec-popup-wrapper');
657
+ var popupClose = $scope.find(".ha-ec-popup-close");
658
+ var events = calendarEl.data('events');
659
+ var initialview = calendarEl.data('initialview');
660
+ var firstday = calendarEl.data('firstday');
661
+ var locale = calendarEl.data('locale');
662
+ var showPopup = calendarEl.data('show-popup');
663
+ var allday_text = calendarEl.data('allday-text');
664
+
665
+ if( 'undefined' == typeof events){
666
+ return;
667
+ }
668
+
669
+ var option = {
670
+ stickyHeaderDates: false,
671
+ locale: locale,
672
+ headerToolbar: {
673
+ left: "prev,next today",
674
+ center: "title",
675
+ right: "dayGridMonth,timeGridWeek,timeGridDay,listMonth"
676
+ },
677
+ initialView: initialview,
678
+ firstDay: firstday,
679
+ eventTimeFormat: { // like '7pm'
680
+ hour: 'numeric',
681
+ minute: '2-digit',
682
+ meridiem: 'short'
683
+ },
684
+ events: events,
685
+
686
+ height: 'auto',
687
+
688
+ eventClick: function (info) {
689
+ info.jsEvent.preventDefault(); // don't let the browser navigate
690
+
691
+ if( 'yes' != showPopup){
692
+ return;
693
+ }
694
+
695
+ function getTheDate(timeString) {
696
+ return new Date(timeString);
697
+ }
698
+
699
+ function timeFormat(date) {
700
+ var hours = date.getHours();
701
+ var minutes = date.getMinutes();
702
+ var ampm = hours >= 12 ? 'pm' : 'am';
703
+ hours = hours % 12;
704
+ hours = hours ? hours : 12; // the hour '0' should be '12'
705
+ minutes = minutes < 10 ? '0' + minutes : minutes;
706
+ var strTime = hours + ':' + minutes + '' + ampm;
707
+ return strTime;
708
+ }
709
+
710
+ var todayDateString = info.view.calendar.currentData.currentDate.toString(),
711
+ allDay = info.event.allDay,
712
+ title = info.event.title,
713
+ startDate = info.event.startStr,
714
+ endDate = info.event.endStr,
715
+ guest = info.event.extendedProps.guest,
716
+ location = info.event.extendedProps.location,
717
+ description = info.event.extendedProps.description,
718
+ detailsUrl = info.event.url,
719
+ imageUrl = info.event.extendedProps.image;
720
+
721
+ var titleWrap = popup.find('.ha-ec-event-title'),
722
+ timeWrap = popup.find('.ha-ec-event-time-wrap'),
723
+ guestWrap = popup.find('.ha-ec-event-guest-wrap'),
724
+ locationWrap = popup.find('.ha-ec-event-location-wrap'),
725
+ descWrap = popup.find('.ha-ec-popup-desc'),
726
+ detailsWrap = popup.find('.ha-ec-popup-readmore-link'),
727
+ imageWrap = popup.find('.ha-ec-popup-image');
728
+
729
+ // display none
730
+ imageWrap.css('display', 'none');
731
+ titleWrap.css('display', 'none');
732
+ timeWrap.css('display', 'none');
733
+ guestWrap.css('display', 'none');
734
+ locationWrap.css('display', 'none');
735
+ descWrap.css('display', 'none');
736
+ detailsWrap.css('display', 'none');
737
+
738
+ popup.addClass("ha-ec-popup-ready");
739
+
740
+ // image markup
741
+ if (imageUrl) {
742
+ imageWrap.removeAttr("style");
743
+ imageWrap.find('img').attr("src", imageUrl );
744
+ imageWrap.find('img').attr("alt", title );
745
+ }
746
+
747
+ // title markup
748
+ if (title) {
749
+ titleWrap.removeAttr("style");
750
+ titleWrap.html(title);
751
+ }
752
+
753
+ // guest markup
754
+ if (guest) {
755
+ guestWrap.removeAttr("style");
756
+ guestWrap.find('span.ha-ec-event-guest').html( guest );
757
+ }
758
+
759
+ // location markup
760
+ if (location) {
761
+ locationWrap.removeAttr("style");
762
+ locationWrap.find('span.ha-ec-event-location').html( location );
763
+ }
764
+
765
+ // description markup
766
+ if (description) {
767
+ descWrap.removeAttr("style");
768
+ descWrap.html(description);
769
+ }
770
+
771
+ // time markup
772
+ if (allDay !== true) {
773
+ timeWrap.removeAttr("style");
774
+ startDate = Date.parse(getTheDate(startDate));
775
+ endDate = Date.parse(getTheDate(endDate));
776
+ var startTimeText = timeFormat(getTheDate(startDate));
777
+ var endTimeText = 'Invalid Data';
778
+ if (startDate < endDate) {
779
+ endTimeText = timeFormat(getTheDate(endDate));
780
+ }
781
+ timeWrap.find('span.ha-ec-event-time').html(startTimeText + ' - ' + endTimeText);
782
+ }else{
783
+ timeWrap.removeAttr("style");
784
+ timeWrap.find('span.ha-ec-event-time').html(allday_text);
785
+ }
786
+
787
+ // read more markup
788
+ if (detailsUrl) {
789
+ detailsWrap.removeAttr("style");
790
+ detailsWrap.attr("href", detailsUrl);
791
+ if ("on" === info.event.extendedProps.external) {
792
+ detailsWrap.attr("target", "_blank");
793
+ }
794
+ if ("on" === info.event.extendedProps.nofollow) {
795
+ detailsWrap.attr("rel", "nofollow");
796
+ }
797
+ }
798
+ },
799
+ dateClick: function (arg) {
800
+ itemDate = arg.date.toUTCString();
801
+ }
802
+ }
803
+
804
+ var calendar = new FullCalendar.Calendar( calendarEl[0], option );
805
+ calendar.render();
806
+
807
+ $scope.find(".ha-ec-popup-wrapper").on("click", function (e) {
808
+ e.stopPropagation();
809
+
810
+ if(e.target === e.currentTarget || e.target == popupClose[0] || e.target == popupClose.find(".eicon-editor-close")[0]){
811
+ popup.addClass("ha-ec-popup-removing").removeClass("ha-ec-popup-ready");
812
+ }
813
+ });
814
+
815
+ };
816
+
817
  // Slider
818
  elementorFrontend.hooks.addAction(
819
  'frontend/element_ready/ha-slider.default',
875
 
876
  // Background overlay extension
877
  var BackgroundOverlay = function($scope) {
878
+ $scope.hasClass('elementor-element-edit-mode') && $scope.addClass('ha-has-bg-overlay');
879
  }
880
 
881
  var fnHanlders = {
888
  'ha-threesixty-rotation.default': Threesixty_Rotation,
889
  'ha-data-table.default' : DataTable,
890
  'widget' : BackgroundOverlay,
891
+ 'ha-event-calendar.default' : Event_Calendar,
892
  };
893
 
894
  $.each( fnHanlders, function( widgetName, handlerFn ) {
assets/js/happy-addons.min.js CHANGED
@@ -1 +1 @@
1
- !function(e){"use strict";function t(e,t,n){var i;return function(){var a=this,o=arguments,r=function(){i=null,n||e.apply(a,o)},s=n&&!i;clearTimeout(i),i=setTimeout(r,t),s&&e.apply(a,o)}}function n(t,n){var i=t.find(".hajs-filter"),a=i.data("default-filter");i.length&&(i.on("click.onFilterNav","button",function(t){t.stopPropagation();var i=e(this);i.addClass("ha-filter__item--active").siblings().removeClass("ha-filter__item--active"),n(i.data("filter"))}),i.find('[data-filter="'+a+'"]').click())}function i(t){if(t.$element.on("click",t.selector,function(e){e.preventDefault()}),e.fn.magnificPopup){if(!t.isEnabled)return void e.magnificPopup.close();var n=e(window).width(),i=elementorFrontendConfig.breakpoints.md,a=elementorFrontendConfig.breakpoints.lg;t.$element.find(t.selector).magnificPopup({key:t.key,type:"image",image:{titleSrc:function(e){return e.el.attr("title")?e.el.attr("title"):e.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(e){return e.is("img")?e:e.find("img")}},disableOn:function(){return!(t.disableOnMobile&&n<i)&&!(t.disableOnTablet&&n>=i&&n<a)}})}}var a=e(window);e.fn.getHappySettings=function(){return this.data("happy-settings")};var o=function(e){var t=e.find(".hajs-image-comparison"),n=t.getHappySettings();n[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[n.move_handle||"on_swipe"]]=!0,delete n.move_handle,t.imagesLoaded().done(function(){t.twentytwenty(n);var e=setTimeout(function(){a.trigger("resize.twentytwenty"),clearTimeout(e)},400)})};a.on("elementor/frontend/init",function(){var r=elementorModules.frontend.handlers.Base,s=r.extend({bindEvents:function(){this.removeArrows(),this.run()},removeArrows:function(){var e=this;this.elements.$container.on("init",function(){e.elements.$container.siblings().hide()})},getDefaultSettings:function(){return{autoplay:!0,arrows:!1,checkVisible:!1,container:".hajs-slick",dots:!1,infinite:!0,rows:0,slidesToShow:1,prevArrow:e("<div />").append(this.findElement(".slick-prev").clone().show()).html(),nextArrow:e("<div />").append(this.findElement(".slick-next").clone().show()).html()}},getDefaultElements:function(){return{$container:this.findElement(this.getSettings("container"))}},onElementChange:t(function(){this.elements.$container.slick("unslick"),this.run()},200),getSlickSettings:function(){var t={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":t.arrows=!0;break;case"dots":t.dots=!0;break;case"both":t.arrows=!0,t.dots=!0}return t.slidesToShow=parseInt(this.getElementSettings("slides_to_show"))||1,t.responsive=[{breakpoint:elementorFrontend.config.breakpoints.lg,settings:{slidesToShow:parseInt(this.getElementSettings("slides_to_show_tablet"))||t.slidesToShow}},{breakpoint:elementorFrontend.config.breakpoints.md,settings:{slidesToShow:parseInt(this.getElementSettings("slides_to_show_mobile"))||parseInt(this.getElementSettings("slides_to_show_tablet"))||t.slidesToShow}}],e.extend({},this.getSettings(),t)},run:function(){this.elements.$container.slick(this.getSlickSettings())}}),l=function(e){elementorFrontend.waypoint(e,function(){var t=e.find(".ha-number-text");t.numerator(t.data("animation"))})},d=function(t){elementorFrontend.waypoint(t,function(){t.find(".ha-skill-level").each(function(){var t=e(this),n=t.find(".ha-skill-level-text"),i=t.data("level");t.animate({width:i+"%"},500),n.numerator({toValue:i+"%",duration:1300,onStep:function(){n.append("%")}})})})},c=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.run(),this.runFilter(),a.on("resize",t(this.run.bind(this),100))},getLayoutMode:function(){var e=this.getElementSettings("layout");return"even"===e?"masonry":e},getDefaultSettings:function(){return{itemSelector:".ha-image-grid__item",percentPosition:!0,layoutMode:this.getLayoutMode()}},getDefaultElements:function(){return{$container:this.findElement(".hajs-isotope")}},getLightBoxSettings:function(){return{key:"imagegrid",$element:this.$element,selector:".ha-js-lightbox",isEnabled:!!this.getElementSettings("enable_popup"),disableOnTablet:!!this.getElementSettings("disable_lightbox_on_tablet"),disableOnMobile:!!this.getElementSettings("disable_lightbox_on_mobile")}},runFilter:function(){var e=this,t=this.getLightBoxSettings();n(this.$element,function(n){e.elements.$container.isotope({filter:n}),"*"!==n&&(t.selector=n),i(t)})},onElementChange:function(e){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(e)&&this.run()},run:function(){var e=this;e.elements.$container.isotope(e.getDefaultSettings()).imagesLoaded().progress(function(){e.elements.$container.isotope("layout")}),i(e.getLightBoxSettings())}}),h=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.run(),this.runFilter(),a.on("resize",t(this.run.bind(this),100))},getDefaultSettings:function(){return{rowHeight:+this.getElementSettings("row_height.size")||150,lastRow:this.getElementSettings("last_row"),margins:+this.getElementSettings("margins.size"),captions:!!this.getElementSettings("show_caption")}},getDefaultElements:function(){return{$container:this.findElement(".hajs-justified-grid")}},getLightBoxSettings:function(){return{key:"justifiedgallery",$element:this.$element,selector:".ha-js-lightbox",isEnabled:!!this.getElementSettings("enable_popup"),disableOnTablet:!!this.getElementSettings("disable_lightbox_on_tablet"),disableOnMobile:!!this.getElementSettings("disable_lightbox_on_mobile")}},runFilter:function(){var e=this,t=this.getLightBoxSettings(),a={lastRow:this.getElementSettings("last_row")};n(e.$element,function(n){"*"!==n&&(a.lastRow="nojustify",t.selector=n),a.filter=n,e.elements.$container.justifiedGallery(a),i(t)})},onElementChange:function(e){-1!==["row_height","last_row","margins","show_caption","enable_popup"].indexOf(e)&&this.run()},run:function(){this.elements.$container.justifiedGallery(this.getDefaultSettings()),i(this.getLightBoxSettings())}}),u=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-news-ticker-wrapper"),this.run()},onElementChange:function(e){"item_space"!==e&&"title_typography_font_size"!==e||this.run()},run:function(){var t=this.wrapper.innerHeight(),n=this.wrapper.innerWidth(),i=this.wrapper.find(".ha-news-ticker-container"),a=i.find(".ha-news-ticker-item"),o=this.wrapper.data("scroll-direction"),r="scroll"+o+t+n,s=this.wrapper.data("duration"),l="normal",d=10,c={transform:"translateX(0"+n+"px)"},h={transform:"translateX(-101%)"};"right"===o&&(l="reverse"),a.each(function(){d+=e(this).outerWidth(!0)}),i.css({width:d,display:"flex"}),e.keyframe.define([{name:r,"0%":c,"100%":h}]),i.playKeyframe({name:r,duration:s+"ms",timingFunction:"linear",delay:"0s",iterationCount:"infinite",direction:l,fillMode:"none",complete:function(){}})}}),f=function(e){elementorFrontend.waypoint(e,function(){var t=e.find(".ha-fun-factor__content-number");t.numerator(t.data("animation"))})},m=function(t){elementorFrontend.waypoint(t,function(){var t=e(this),n=t.find(".ha-bar-chart-container"),i=t.find("#ha-bar-chart"),a=n.data("settings");n.length&&new Chart(i,a)})},p=function(t){var n=t.find(".ha-twitter-load-more"),i=t.find(".ha-tweet-items");n.on("click",function(n){n.preventDefault();var a=e(this),o=a.data("settings"),r=a.data("total"),s=t.find(".ha-tweet-item").length;e.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_twitter_feed_action",security:HappyLocalize.nonce,query_settings:o,loaded_item:s},success:function(t){r>s?e(t).appendTo(i):(a.text("All Loaded").addClass("loaded"),setTimeout(function(){a.css({display:"none"})},800))},error:function(e){}})})},g=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-post-tab"),this.run()},run:function(){var n=this.wrapper.find(".ha-post-tab-filter"),i=n.find("li"),a=this.wrapper.data("event"),o=this.wrapper.data("query-args");i.on(a,t(function(t){t.preventDefault();var n=e(this),a=n.data("term"),r=n.closest(".ha-post-tab"),s=r.find(".ha-post-tab-content"),l=s.find(".ha-post-tab-loading"),d=s.find(".ha-post-tab-item-wrapper"),c=!1;0===l.length&&(i.removeClass("active"),d.removeClass("active"),n.addClass("active"),d.each(function(){var t=e(this),n=t.data("term");a===n&&(t.addClass("active"),c=!0)}),!1===c&&e.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(){s.append('<span class="ha-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>')},success:function(e){s.find(".ha-post-tab-loading").remove(),s.append(e)},error:function(e){}}))},200))}}),y=function(t){var n=t.find(".ha-table__head-column-cell");t.find(".ha-table__body-row").each(function(t,i){e(i).find(".ha-table__body-row-cell").each(function(t,i){e(i).prepend('<div class="ha-table__head-column-cell">'+n.eq(t).html()+"</div>")})})},_=function(t){var n=t.find(".ha-threesixty-rotation-inner"),i=n.data("selector"),a=n.data("autoplay"),o=t.find(".ha-threesixty-rotation-magnify"),r=t.find(".ha-threesixty-rotation-360img"),s=o.data("zoom"),l=t.find(".ha-threesixty-rotation-play"),d=circlr(i,{play:!0});if("on"===a){var c=t.find(".ha-threesixty-rotation-autoplay");c.on("click",function(e){e.preventDefault(),d.play(),r.remove()}),setTimeout(function(){c.trigger("click"),c.remove()},1e3)}else l.on("click",function(t){t.preventDefault();var n=e(this),i=n.find("i");i.hasClass("hm-play-button")?(i.removeClass("hm-play-button"),i.addClass("hm-stop"),d.play()):(i.removeClass("hm-stop"),i.addClass("hm-play-button"),d.stop()),r.remove()});o.on("click",function(n){t.find("img").each(function(){-1!==e(this).attr("style").indexOf("block")&&(HappySimplaMagnify(e(this)[0],s),o.css("display","none"),r.remove())})}),e(document).on("click",function(i){var a=e(i.target),s=t.find(".ha-img-magnifier-glass"),l=o.find("i");s.length&&a[0]!==l[0]&&(s.remove(),o.removeAttr("style")),a[0]===n[0]&&r.remove()}),n.on("mouseup mousedown",function(e){r.remove()})};elementorFrontend.hooks.addAction("frontend/element_ready/ha-slider.default",function(e){elementorFrontend.elementsHandler.addHandler(s,{$element:e})}),elementorFrontend.hooks.addAction("frontend/element_ready/ha-carousel.default",function(e){elementorFrontend.elementsHandler.addHandler(s,{$element:e})}),elementorFrontend.hooks.addAction("frontend/element_ready/ha-horizontal-timeline.default",function(e){elementorFrontend.elementsHandler.addHandler(s,{$element:e,autoplay:!1,container:".ha-horizontal-timeline-wrapper",navigation:"arrow",arrows:!0})}),e("[data-ha-element-link]").on("click.onWrapperLink",function(){var t,n,i=e(this),a=i.data("ha-element-link"),o=i.data("id"),r=document.createElement("a");r.id="happy-addons-wrapper-link-"+o,r.href=a.url,r.target=a.is_external?"_blank":"_self",r.rel=a.nofollow?"nofollow noreferer":"",r.style.display="none",document.body.appendChild(r),t=document.getElementById(r.id),t.click(),n=setTimeout(function(){document.body.removeChild(t),clearTimeout(n)})});var v=function(e){e.hasClass("elementor-element-edit-mode")&&e.addClass("has-bg-overlay")},b={"ha-image-compare.default":o,"ha-number.default":l,"ha-skills.default":d,"ha-fun-factor.default":f,"ha-bar-chart.default":m,"ha-twitter-feed.default":p,"ha-threesixty-rotation.default":_,"ha-data-table.default":y,widget:v};e.each(b,function(e,t){elementorFrontend.hooks.addAction("frontend/element_ready/"+e,t)});var w={"ha-image-grid.default":c,"ha-justified-gallery.default":h,"ha-news-ticker.default":u,"ha-post-tab.default":g};e.each(w,function(e,t){elementorFrontend.hooks.addAction("frontend/element_ready/"+e,function(e){elementorFrontend.elementsHandler.addHandler(t,{$element:e})})})})}(jQuery);
1
+ !function(e){"use strict";function t(e,t,n){var i;return function(){var a=this,o=arguments,r=function(){i=null,n||e.apply(a,o)},s=n&&!i;clearTimeout(i),i=setTimeout(r,t),s&&e.apply(a,o)}}function n(t,n){var i=t.find(".hajs-filter"),a=i.data("default-filter");i.length&&(i.on("click.onFilterNav","button",function(t){t.stopPropagation();var i=e(this);i.addClass("ha-filter__item--active").siblings().removeClass("ha-filter__item--active"),n(i.data("filter"))}),i.find('[data-filter="'+a+'"]').click())}function i(t){if(t.$element.on("click",t.selector,function(e){e.preventDefault()}),e.fn.magnificPopup){if(!t.isEnabled)return void e.magnificPopup.close();var n=e(window).width(),i=elementorFrontendConfig.breakpoints.md,a=elementorFrontendConfig.breakpoints.lg;t.$element.find(t.selector).magnificPopup({key:t.key,type:"image",image:{titleSrc:function(e){return e.el.attr("title")?e.el.attr("title"):e.el.find("img").attr("alt")}},gallery:{enabled:!0,preload:[1,2]},zoom:{enabled:!0,duration:300,easing:"ease-in-out",opener:function(e){return e.is("img")?e:e.find("img")}},disableOn:function(){return!(t.disableOnMobile&&n<i)&&!(t.disableOnTablet&&n>=i&&n<a)}})}}var a=e(window);e.fn.getHappySettings=function(){return this.data("happy-settings")};var o=function(e){var t=e.find(".hajs-image-comparison"),n=t.getHappySettings();n[{on_hover:"move_slider_on_hover",on_swipe:"move_with_handle_only",on_click:"click_to_move"}[n.move_handle||"on_swipe"]]=!0,delete n.move_handle,t.imagesLoaded().done(function(){t.twentytwenty(n);var e=setTimeout(function(){a.trigger("resize.twentytwenty"),clearTimeout(e)},400)})};a.on("elementor/frontend/init",function(){var r=elementorModules.frontend.handlers.Base,s=r.extend({bindEvents:function(){this.removeArrows(),this.run()},removeArrows:function(){var e=this;this.elements.$container.on("init",function(){e.elements.$container.siblings().hide()})},getDefaultSettings:function(){return{autoplay:!0,arrows:!1,checkVisible:!1,container:".hajs-slick",dots:!1,infinite:!0,rows:0,slidesToShow:1,prevArrow:e("<div />").append(this.findElement(".slick-prev").clone().show()).html(),nextArrow:e("<div />").append(this.findElement(".slick-next").clone().show()).html()}},getDefaultElements:function(){return{$container:this.findElement(this.getSettings("container"))}},onElementChange:t(function(){this.elements.$container.slick("unslick"),this.run()},200),getSlickSettings:function(){var t={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":t.arrows=!0;break;case"dots":t.dots=!0;break;case"both":t.arrows=!0,t.dots=!0}return t.slidesToShow=parseInt(this.getElementSettings("slides_to_show"))||1,t.responsive=[{breakpoint:elementorFrontend.config.breakpoints.lg,settings:{slidesToShow:parseInt(this.getElementSettings("slides_to_show_tablet"))||t.slidesToShow}},{breakpoint:elementorFrontend.config.breakpoints.md,settings:{slidesToShow:parseInt(this.getElementSettings("slides_to_show_mobile"))||parseInt(this.getElementSettings("slides_to_show_tablet"))||t.slidesToShow}}],e.extend({},this.getSettings(),t)},run:function(){this.elements.$container.slick(this.getSlickSettings())}}),l=function(e){elementorFrontend.waypoint(e,function(){var t=e.find(".ha-number-text");t.numerator(t.data("animation"))})},d=function(t){elementorFrontend.waypoint(t,function(){t.find(".ha-skill-level").each(function(){var t=e(this),n=t.find(".ha-skill-level-text"),i=t.data("level");t.animate({width:i+"%"},500),n.numerator({toValue:i+"%",duration:1300,onStep:function(){n.append("%")}})})})},c=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.run(),this.runFilter(),a.on("resize",t(this.run.bind(this),100))},getLayoutMode:function(){var e=this.getElementSettings("layout");return"even"===e?"masonry":e},getDefaultSettings:function(){return{itemSelector:".ha-image-grid__item",percentPosition:!0,layoutMode:this.getLayoutMode()}},getDefaultElements:function(){return{$container:this.findElement(".hajs-isotope")}},getLightBoxSettings:function(){return{key:"imagegrid",$element:this.$element,selector:".ha-js-lightbox",isEnabled:!!this.getElementSettings("enable_popup"),disableOnTablet:!!this.getElementSettings("disable_lightbox_on_tablet"),disableOnMobile:!!this.getElementSettings("disable_lightbox_on_mobile")}},runFilter:function(){var e=this,t=this.getLightBoxSettings();n(this.$element,function(n){e.elements.$container.isotope({filter:n}),"*"!==n&&(t.selector=n),i(t)})},onElementChange:function(e){-1!==["layout","image_height","columns","image_margin","enable_popup"].indexOf(e)&&this.run()},run:function(){var e=this;e.elements.$container.isotope(e.getDefaultSettings()).imagesLoaded().progress(function(){e.elements.$container.isotope("layout")}),i(e.getLightBoxSettings())}}),h=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.run(),this.runFilter(),a.on("resize",t(this.run.bind(this),100))},getDefaultSettings:function(){return{rowHeight:+this.getElementSettings("row_height.size")||150,lastRow:this.getElementSettings("last_row"),margins:+this.getElementSettings("margins.size"),captions:!!this.getElementSettings("show_caption")}},getDefaultElements:function(){return{$container:this.findElement(".hajs-justified-grid")}},getLightBoxSettings:function(){return{key:"justifiedgallery",$element:this.$element,selector:".ha-js-lightbox",isEnabled:!!this.getElementSettings("enable_popup"),disableOnTablet:!!this.getElementSettings("disable_lightbox_on_tablet"),disableOnMobile:!!this.getElementSettings("disable_lightbox_on_mobile")}},runFilter:function(){var e=this,t=this.getLightBoxSettings(),a={lastRow:this.getElementSettings("last_row")};n(e.$element,function(n){"*"!==n&&(a.lastRow="nojustify",t.selector=n),a.filter=n,e.elements.$container.justifiedGallery(a),i(t)})},onElementChange:function(e){-1!==["row_height","last_row","margins","show_caption","enable_popup"].indexOf(e)&&this.run()},run:function(){this.elements.$container.justifiedGallery(this.getDefaultSettings()),i(this.getLightBoxSettings())}}),u=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-news-ticker-wrapper"),this.run()},onElementChange:function(e){"item_space"!==e&&"title_typography_font_size"!==e||this.run()},run:function(){var t=this.wrapper.innerHeight(),n=this.wrapper.innerWidth(),i=this.wrapper.find(".ha-news-ticker-container"),a=i.find(".ha-news-ticker-item"),o=this.wrapper.data("scroll-direction"),r="scroll"+o+t+n,s=this.wrapper.data("duration"),l="normal",d=10,c={transform:"translateX(0"+n+"px)"},h={transform:"translateX(-101%)"};"right"===o&&(l="reverse"),a.each(function(){d+=e(this).outerWidth(!0)}),i.css({width:d,display:"flex"}),e.keyframe.define([{name:r,"0%":c,"100%":h}]),i.playKeyframe({name:r,duration:s+"ms",timingFunction:"linear",delay:"0s",iterationCount:"infinite",direction:l,fillMode:"none",complete:function(){}})}}),f=function(e){elementorFrontend.waypoint(e,function(){var t=e.find(".ha-fun-factor__content-number");t.numerator(t.data("animation"))})},p=function(t){elementorFrontend.waypoint(t,function(){var t=e(this),n=t.find(".ha-bar-chart-container"),i=t.find("#ha-bar-chart"),a=n.data("settings");n.length&&new Chart(i,a)})},m=function(t){var n=t.find(".ha-twitter-load-more"),i=t.find(".ha-tweet-items");n.on("click",function(n){n.preventDefault();var a=e(this),o=a.data("settings"),r=a.data("total"),s=t.find(".ha-tweet-item").length;e.ajax({url:HappyLocalize.ajax_url,type:"POST",data:{action:"ha_twitter_feed_action",security:HappyLocalize.nonce,query_settings:o,loaded_item:s},success:function(t){r>s?e(t).appendTo(i):(a.text("All Loaded").addClass("loaded"),setTimeout(function(){a.css({display:"none"})},800))},error:function(e){}})})},g=r.extend({onInit:function(){r.prototype.onInit.apply(this,arguments),this.wrapper=this.$element.find(".ha-post-tab"),this.run()},run:function(){var n=this.wrapper.find(".ha-post-tab-filter"),i=n.find("li"),a=this.wrapper.data("event"),o=this.wrapper.data("query-args");i.on(a,t(function(t){t.preventDefault();var n=e(this),a=n.data("term"),r=n.closest(".ha-post-tab"),s=r.find(".ha-post-tab-content"),l=s.find(".ha-post-tab-loading"),d=s.find(".ha-post-tab-item-wrapper"),c=!1;0===l.length&&(i.removeClass("active"),d.removeClass("active"),n.addClass("active"),d.each(function(){var t=e(this),n=t.data("term");a===n&&(t.addClass("active"),c=!0)}),!1===c&&e.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(){s.append('<span class="ha-post-tab-loading"><i class="eicon-spinner eicon-animation-spin"></i></span>')},success:function(e){s.find(".ha-post-tab-loading").remove(),s.append(e)},error:function(e){}}))},200))}}),v=function(t){var n=t.find(".ha-table__head-column-cell");t.find(".ha-table__body-row").each(function(t,i){e(i).find(".ha-table__body-row-cell").each(function(t,i){e(i).prepend('<div class="ha-table__head-column-cell">'+n.eq(t).html()+"</div>")})})},y=function(t){var n=t.find(".ha-threesixty-rotation-inner"),i=n.data("selector"),a=n.data("autoplay"),o=t.find(".ha-threesixty-rotation-magnify"),r=t.find(".ha-threesixty-rotation-360img"),s=o.data("zoom"),l=t.find(".ha-threesixty-rotation-play"),d=circlr(i,{play:!0});if("on"===a){var c=t.find(".ha-threesixty-rotation-autoplay");c.on("click",function(e){e.preventDefault(),d.play(),r.remove()}),setTimeout(function(){c.trigger("click"),c.remove()},1e3)}else l.on("click",function(t){t.preventDefault();var n=e(this),i=n.find("i");i.hasClass("hm-play-button")?(i.removeClass("hm-play-button"),i.addClass("hm-stop"),d.play()):(i.removeClass("hm-stop"),i.addClass("hm-play-button"),d.stop()),r.remove()});o.on("click",function(n){t.find("img").each(function(){-1!==e(this).attr("style").indexOf("block")&&(HappySimplaMagnify(e(this)[0],s),o.css("display","none"),r.remove())})}),e(document).on("click",function(i){var a=e(i.target),s=t.find(".ha-img-magnifier-glass"),l=o.find("i");s.length&&a[0]!==l[0]&&(s.remove(),o.removeAttr("style")),a[0]===n[0]&&r.remove()}),n.on("mouseup mousedown",function(e){r.remove()})},w=function(e){var t=e.find(".ha-ec"),n=e.find(".ha-ec-popup-wrapper"),i=e.find(".ha-ec-popup-close"),a=t.data("events"),o=t.data("initialview"),r=t.data("firstday"),s=t.data("locale"),l=t.data("show-popup"),d=t.data("allday-text");if(void 0!==a){var c={stickyHeaderDates:!1,locale:s,headerToolbar:{left:"prev,next today",center:"title",right:"dayGridMonth,timeGridWeek,timeGridDay,listMonth"},initialView:o,firstDay:r,eventTimeFormat:{hour:"numeric",minute:"2-digit",meridiem:"short"},events:a,height:"auto",eventClick:function(e){function t(e){return new Date(e)}function i(e){var t=e.getHours(),n=e.getMinutes(),i=t>=12?"pm":"am";return t%=12,t=t||12,n=n<10?"0"+n:n,t+":"+n+i}if(e.jsEvent.preventDefault(),"yes"==l){var a=(e.view.calendar.currentData.currentDate.toString(),e.event.allDay),o=e.event.title,r=e.event.startStr,s=e.event.endStr,c=e.event.extendedProps.guest,h=e.event.extendedProps.location,u=e.event.extendedProps.description,f=e.event.url,p=e.event.extendedProps.image,m=n.find(".ha-ec-event-title"),g=n.find(".ha-ec-event-time-wrap"),v=n.find(".ha-ec-event-guest-wrap"),y=n.find(".ha-ec-event-location-wrap"),w=n.find(".ha-ec-popup-desc"),_=n.find(".ha-ec-popup-readmore-link"),b=n.find(".ha-ec-popup-image");if(b.css("display","none"),m.css("display","none"),g.css("display","none"),v.css("display","none"),y.css("display","none"),w.css("display","none"),_.css("display","none"),n.addClass("ha-ec-popup-ready"),p&&(b.removeAttr("style"),b.find("img").attr("src",p),b.find("img").attr("alt",o)),o&&(m.removeAttr("style"),m.html(o)),c&&(v.removeAttr("style"),v.find("span.ha-ec-event-guest").html(c)),h&&(y.removeAttr("style"),y.find("span.ha-ec-event-location").html(h)),u&&(w.removeAttr("style"),w.html(u)),!0!==a){g.removeAttr("style"),r=Date.parse(t(r)),s=Date.parse(t(s));var S=i(t(r)),k="Invalid Data";r<s&&(k=i(t(s))),g.find("span.ha-ec-event-time").html(S+" - "+k)}else g.removeAttr("style"),g.find("span.ha-ec-event-time").html(d);f&&(_.removeAttr("style"),_.attr("href",f),"on"===e.event.extendedProps.external&&_.attr("target","_blank"),"on"===e.event.extendedProps.nofollow&&_.attr("rel","nofollow"))}},dateClick:function(e){itemDate=e.date.toUTCString()}};new FullCalendar.Calendar(t[0],c).render(),e.find(".ha-ec-popup-wrapper").on("click",function(e){e.stopPropagation(),e.target!==e.currentTarget&&e.target!=i[0]&&e.target!=i.find(".eicon-editor-close")[0]||n.addClass("ha-ec-popup-removing").removeClass("ha-ec-popup-ready")})}};elementorFrontend.hooks.addAction("frontend/element_ready/ha-slider.default",function(e){elementorFrontend.elementsHandler.addHandler(s,{$element:e})}),elementorFrontend.hooks.addAction("frontend/element_ready/ha-carousel.default",function(e){elementorFrontend.elementsHandler.addHandler(s,{$element:e})}),elementorFrontend.hooks.addAction("frontend/element_ready/ha-horizontal-timeline.default",function(e){elementorFrontend.elementsHandler.addHandler(s,{$element:e,autoplay:!1,container:".ha-horizontal-timeline-wrapper",navigation:"arrow",arrows:!0})}),e("[data-ha-element-link]").on("click.onWrapperLink",function(){var t,n,i=e(this),a=i.data("ha-element-link"),o=i.data("id"),r=document.createElement("a");r.id="happy-addons-wrapper-link-"+o,r.href=a.url,r.target=a.is_external?"_blank":"_self",r.rel=a.nofollow?"nofollow noreferer":"",r.style.display="none",document.body.appendChild(r),t=document.getElementById(r.id),t.click(),n=setTimeout(function(){document.body.removeChild(t),clearTimeout(n)})});var _=function(e){e.hasClass("elementor-element-edit-mode")&&e.addClass("ha-has-bg-overlay")},b={"ha-image-compare.default":o,"ha-number.default":l,"ha-skills.default":d,"ha-fun-factor.default":f,"ha-bar-chart.default":p,"ha-twitter-feed.default":m,"ha-threesixty-rotation.default":y,"ha-data-table.default":v,widget:_,"ha-event-calendar.default":w};e.each(b,function(e,t){elementorFrontend.hooks.addAction("frontend/element_ready/"+e,t)});var S={"ha-image-grid.default":c,"ha-justified-gallery.default":h,"ha-news-ticker.default":u,"ha-post-tab.default":g};e.each(S,function(e,t){elementorFrontend.hooks.addAction("frontend/element_ready/"+e,function(e){elementorFrontend.elementsHandler.addHandler(t,{$element:e})})})})}(jQuery);
assets/vendor/aesthetic-icon-picker/icons/font-awesome.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ return {
2
+ "font-awesome":{
3
+ "regular":{
4
+ "prefix": "far fa-",
5
+ "icon-style": "fa-regular",
6
+ "list-icon":"fab fa-font-awesome-alt",
7
+ "icons":["far fa-address-book", "far fa-address-card", "far fa-angry", "far fa-arrow-alt-circle-down", "far fa-arrow-alt-circle-left", "far fa-arrow-alt-circle-right", "far fa-arrow-alt-circle-up", "far fa-bell", "far fa-bell-slash", "far fa-bookmark", "far fa-building", "far fa-calendar", "far fa-calendar-alt", "far fa-calendar-check", "far fa-calendar-minus", "far fa-calendar-plus", "far fa-calendar-times", "far fa-caret-square-down", "far fa-caret-square-left", "far fa-caret-square-right", "far fa-caret-square-up", "far fa-chart-bar", "far fa-check-circle", "far fa-check-square", "far fa-circle", "far fa-clipboard", "far fa-clock", "far fa-clone", "far fa-closed-captioning", "far fa-comment", "far fa-comment-alt", "far fa-comment-dots", "far fa-comments", "far fa-compass", "far fa-copy", "far fa-copyright", "far fa-credit-card", "far fa-dizzy", "far fa-dot-circle", "far fa-edit", "far fa-envelope", "far fa-envelope-open", "far fa-eye", "far fa-eye-slash", "far fa-file", "far fa-file-alt", "far fa-file-archive", "far fa-file-audio", "far fa-file-code", "far fa-file-excel", "far fa-file-image", "far fa-file-pdf", "far fa-file-powerpoint", "far fa-file-video", "far fa-file-word", "far fa-flag", "far fa-flushed", "far fa-folder", "far fa-folder-open", "far fa-frown", "far fa-frown-open", "far fa-futbol", "far fa-gem", "far fa-grimace", "far fa-grin", "far fa-grin-alt", "far fa-grin-beam", "far fa-grin-beam-sweat", "far fa-grin-hearts", "far fa-grin-squint", "far fa-grin-squint-tears", "far fa-grin-stars", "far fa-grin-tears", "far fa-grin-tongue", "far fa-grin-tongue-squint", "far fa-grin-tongue-wink", "far fa-grin-wink", "far fa-hand-lizard", "far fa-hand-paper", "far fa-hand-peace", "far fa-hand-point-down", "far fa-hand-point-left", "far fa-hand-point-right", "far fa-hand-point-up", "far fa-hand-pointer", "far fa-hand-rock", "far fa-hand-scissors", "far fa-hand-spock", "far fa-handshake", "far fa-hdd", "far fa-heart", "far fa-hospital", "far fa-hourglass", "far fa-id-badge", "far fa-id-card", "far fa-image", "far fa-images", "far fa-keyboard", "far fa-kiss", "far fa-kiss-beam", "far fa-kiss-wink-heart", "far fa-laugh", "far fa-laugh-beam", "far fa-laugh-squint", "far fa-laugh-wink", "far fa-lemon", "far fa-life-ring", "far fa-lightbulb", "far fa-list-alt", "far fa-map", "far fa-meh", "far fa-meh-blank", "far fa-meh-rolling-eyes", "far fa-minus-square", "far fa-money-bill-alt", "far fa-moon", "far fa-newspaper", "far fa-object-group", "far fa-object-ungroup", "far fa-paper-plane", "far fa-pause-circle", "far fa-play-circle", "far fa-plus-square", "far fa-question-circle", "far fa-registered", "far fa-sad-cry", "far fa-sad-tear", "far fa-save", "far fa-share-square", "far fa-smile", "far fa-smile-beam", "far fa-smile-wink", "far fa-snowflake", "far fa-square", "far fa-star", "far fa-star-half", "far fa-sticky-note", "far fa-stop-circle", "far fa-sun", "far fa-surprise", "far fa-thumbs-down", "far fa-thumbs-up", "far fa-times-circle", "far fa-tired", "far fa-trash-alt", "far fa-user", "far fa-user-circle", "far fa-window-close", "far fa-window-maximize", "far fa-window-minimize", "far fa-window-restore"]
8
+ },
9
+ "solid":{
10
+ "prefix": "fas fa-",
11
+ "icon-style": "fa-solid",
12
+ "list-icon":"fab fa-font-awesome",
13
+ "icons":["fas fa-ad", "fas fa-address-book", "fas fa-address-card", "fas fa-adjust", "fas fa-air-freshener", "fas fa-align-center", "fas fa-align-justify", "fas fa-align-left", "fas fa-align-right", "fas fa-allergies", "fas fa-ambulance", "fas fa-american-sign-language-interpreting", "fas fa-anchor", "fas fa-angle-double-down", "fas fa-angle-double-left", "fas fa-angle-double-right", "fas fa-angle-double-up", "fas fa-angle-down", "fas fa-angle-left", "fas fa-angle-right", "fas fa-angle-up", "fas fa-angry", "fas fa-ankh", "fas fa-apple-alt", "fas fa-archive", "fas fa-archway", "fas fa-arrow-alt-circle-down", "fas fa-arrow-alt-circle-left", "fas fa-arrow-alt-circle-right", "fas fa-arrow-alt-circle-up", "fas fa-arrow-circle-down", "fas fa-arrow-circle-left", "fas fa-arrow-circle-right", "fas fa-arrow-circle-up", "fas fa-arrow-down", "fas fa-arrow-left", "fas fa-arrow-right", "fas fa-arrow-up", "fas fa-arrows-alt", "fas fa-arrows-alt-h", "fas fa-arrows-alt-v", "fas fa-assistive-listening-systems", "fas fa-asterisk", "fas fa-at", "fas fa-atlas", "fas fa-atom", "fas fa-audio-description", "fas fa-award", "fas fa-baby", "fas fa-baby-carriage", "fas fa-backspace", "fas fa-backward", "fas fa-bacon", "fas fa-bahai", "fas fa-balance-scale", "fas fa-balance-scale-left", "fas fa-balance-scale-right", "fas fa-ban", "fas fa-band-aid", "fas fa-barcode", "fas fa-bars", "fas fa-baseball-ball", "fas fa-basketball-ball", "fas fa-bath", "fas fa-battery-empty", "fas fa-battery-full", "fas fa-battery-half", "fas fa-battery-quarter", "fas fa-battery-three-quarters", "fas fa-bed", "fas fa-beer", "fas fa-bell", "fas fa-bell-slash", "fas fa-bezier-curve", "fas fa-bible", "fas fa-bicycle", "fas fa-biking", "fas fa-binoculars", "fas fa-biohazard", "fas fa-birthday-cake", "fas fa-blender", "fas fa-blender-phone", "fas fa-blind", "fas fa-blog", "fas fa-bold", "fas fa-bolt", "fas fa-bomb", "fas fa-bone", "fas fa-bong", "fas fa-book", "fas fa-book-dead", "fas fa-book-medical", "fas fa-book-open", "fas fa-book-reader", "fas fa-bookmark", "fas fa-border-all", "fas fa-border-none", "fas fa-border-style", "fas fa-bowling-ball", "fas fa-box", "fas fa-box-open", "fas fa-boxes", "fas fa-braille", "fas fa-brain", "fas fa-bread-slice", "fas fa-briefcase", "fas fa-briefcase-medical", "fas fa-broadcast-tower", "fas fa-broom", "fas fa-brush", "fas fa-bug", "fas fa-building", "fas fa-bullhorn", "fas fa-bullseye", "fas fa-burn", "fas fa-bus", "fas fa-bus-alt", "fas fa-business-time", "fas fa-calculator", "fas fa-calendar", "fas fa-calendar-alt", "fas fa-calendar-check", "fas fa-calendar-day", "fas fa-calendar-minus", "fas fa-calendar-plus", "fas fa-calendar-times", "fas fa-calendar-week", "fas fa-camera", "fas fa-camera-retro", "fas fa-campground", "fas fa-candy-cane", "fas fa-cannabis", "fas fa-capsules", "fas fa-car", "fas fa-car-alt", "fas fa-car-battery", "fas fa-car-crash", "fas fa-car-side", "fas fa-caravan", "fas fa-caret-down", "fas fa-caret-left", "fas fa-caret-right", "fas fa-caret-square-down", "fas fa-caret-square-left", "fas fa-caret-square-right", "fas fa-caret-square-up", "fas fa-caret-up", "fas fa-carrot", "fas fa-cart-arrow-down", "fas fa-cart-plus", "fas fa-cash-register", "fas fa-cat", "fas fa-certificate", "fas fa-chair", "fas fa-chalkboard", "fas fa-chalkboard-teacher", "fas fa-charging-station", "fas fa-chart-area", "fas fa-chart-bar", "fas fa-chart-line", "fas fa-chart-pie", "fas fa-check", "fas fa-check-circle", "fas fa-check-double", "fas fa-check-square", "fas fa-cheese", "fas fa-chess", "fas fa-chess-bishop", "fas fa-chess-board", "fas fa-chess-king", "fas fa-chess-knight", "fas fa-chess-pawn", "fas fa-chess-queen", "fas fa-chess-rook", "fas fa-chevron-circle-down", "fas fa-chevron-circle-left", "fas fa-chevron-circle-right", "fas fa-chevron-circle-up", "fas fa-chevron-down", "fas fa-chevron-left", "fas fa-chevron-right", "fas fa-chevron-up", "fas fa-child", "fas fa-church", "fas fa-circle", "fas fa-circle-notch", "fas fa-city", "fas fa-clinic-medical", "fas fa-clipboard", "fas fa-clipboard-check", "fas fa-clipboard-list", "fas fa-clock", "fas fa-clone", "fas fa-closed-captioning", "fas fa-cloud", "fas fa-cloud-download-alt", "fas fa-cloud-meatball", "fas fa-cloud-moon", "fas fa-cloud-moon-rain", "fas fa-cloud-rain", "fas fa-cloud-showers-heavy", "fas fa-cloud-sun", "fas fa-cloud-sun-rain", "fas fa-cloud-upload-alt", "fas fa-cocktail", "fas fa-code", "fas fa-code-branch", "fas fa-coffee", "fas fa-cog", "fas fa-cogs", "fas fa-coins", "fas fa-columns", "fas fa-comment", "fas fa-comment-alt", "fas fa-comment-dollar", "fas fa-comment-dots", "fas fa-comment-medical", "fas fa-comment-slash", "fas fa-comments", "fas fa-comments-dollar", "fas fa-compact-disc", "fas fa-compass", "fas fa-compress", "fas fa-compress-alt", "fas fa-compress-arrows-alt", "fas fa-concierge-bell", "fas fa-cookie", "fas fa-cookie-bite", "fas fa-copy", "fas fa-copyright", "fas fa-couch", "fas fa-credit-card", "fas fa-crop", "fas fa-crop-alt", "fas fa-cross", "fas fa-crosshairs", "fas fa-crow", "fas fa-crown", "fas fa-crutch", "fas fa-cube", "fas fa-cubes", "fas fa-cut", "fas fa-database", "fas fa-deaf", "fas fa-democrat", "fas fa-desktop", "fas fa-dharmachakra", "fas fa-diagnoses", "fas fa-dice", "fas fa-dice-d20", "fas fa-dice-d6", "fas fa-dice-five", "fas fa-dice-four", "fas fa-dice-one", "fas fa-dice-six", "fas fa-dice-three", "fas fa-dice-two", "fas fa-digital-tachograph", "fas fa-directions", "fas fa-divide", "fas fa-dizzy", "fas fa-dna", "fas fa-dog", "fas fa-dollar-sign", "fas fa-dolly", "fas fa-dolly-flatbed", "fas fa-donate", "fas fa-door-closed", "fas fa-door-open", "fas fa-dot-circle", "fas fa-dove", "fas fa-download", "fas fa-drafting-compass", "fas fa-dragon", "fas fa-draw-polygon", "fas fa-drum", "fas fa-drum-steelpan", "fas fa-drumstick-bite", "fas fa-dumbbell", "fas fa-dumpster", "fas fa-dumpster-fire", "fas fa-dungeon", "fas fa-edit", "fas fa-egg", "fas fa-eject", "fas fa-ellipsis-h", "fas fa-ellipsis-v", "fas fa-envelope", "fas fa-envelope-open", "fas fa-envelope-open-text", "fas fa-envelope-square", "fas fa-equals", "fas fa-eraser", "fas fa-ethernet", "fas fa-euro-sign", "fas fa-exchange-alt", "fas fa-exclamation", "fas fa-exclamation-circle", "fas fa-exclamation-triangle", "fas fa-expand", "fas fa-expand-alt", "fas fa-expand-arrows-alt", "fas fa-external-link-alt", "fas fa-external-link-square-alt", "fas fa-eye", "fas fa-eye-dropper", "fas fa-eye-slash", "fas fa-fan", "fas fa-fast-backward", "fas fa-fast-forward", "fas fa-fax", "fas fa-feather", "fas fa-feather-alt", "fas fa-female", "fas fa-fighter-jet", "fas fa-file", "fas fa-file-alt", "fas fa-file-archive", "fas fa-file-audio", "fas fa-file-code", "fas fa-file-contract", "fas fa-file-csv", "fas fa-file-download", "fas fa-file-excel", "fas fa-file-export", "fas fa-file-image", "fas fa-file-import", "fas fa-file-invoice", "fas fa-file-invoice-dollar", "fas fa-file-medical", "fas fa-file-medical-alt", "fas fa-file-pdf", "fas fa-file-powerpoint", "fas fa-file-prescription", "fas fa-file-signature", "fas fa-file-upload", "fas fa-file-video", "fas fa-file-word", "fas fa-fill", "fas fa-fill-drip", "fas fa-film", "fas fa-filter", "fas fa-fingerprint", "fas fa-fire", "fas fa-fire-alt", "fas fa-fire-extinguisher", "fas fa-first-aid", "fas fa-fish", "fas fa-fist-raised", "fas fa-flag", "fas fa-flag-checkered", "fas fa-flag-usa", "fas fa-flask", "fas fa-flushed", "fas fa-folder", "fas fa-folder-minus", "fas fa-folder-open", "fas fa-folder-plus", "fas fa-font", "fas fa-football-ball", "fas fa-forward", "fas fa-frog", "fas fa-frown", "fas fa-frown-open", "fas fa-funnel-dollar", "fas fa-futbol", "fas fa-gamepad", "fas fa-gas-pump", "fas fa-gavel", "fas fa-gem", "fas fa-genderless", "fas fa-ghost", "fas fa-gift", "fas fa-gifts", "fas fa-glass-cheers", "fas fa-glass-martini", "fas fa-glass-martini-alt", "fas fa-glass-whiskey", "fas fa-glasses", "fas fa-globe", "fas fa-globe-africa", "fas fa-globe-americas", "fas fa-globe-asia", "fas fa-globe-europe", "fas fa-golf-ball", "fas fa-gopuram", "fas fa-graduation-cap", "fas fa-greater-than", "fas fa-greater-than-equal", "fas fa-grimace", "fas fa-grin", "fas fa-grin-alt", "fas fa-grin-beam", "fas fa-grin-beam-sweat", "fas fa-grin-hearts", "fas fa-grin-squint", "fas fa-grin-squint-tears", "fas fa-grin-stars", "fas fa-grin-tears", "fas fa-grin-tongue", "fas fa-grin-tongue-squint", "fas fa-grin-tongue-wink", "fas fa-grin-wink", "fas fa-grip-horizontal", "fas fa-grip-lines", "fas fa-grip-lines-vertical", "fas fa-grip-vertical", "fas fa-guitar", "fas fa-h-square", "fas fa-hamburger", "fas fa-hammer", "fas fa-hamsa", "fas fa-hand-holding", "fas fa-hand-holding-heart", "fas fa-hand-holding-usd", "fas fa-hand-lizard", "fas fa-hand-middle-finger", "fas fa-hand-paper", "fas fa-hand-peace", "fas fa-hand-point-down", "fas fa-hand-point-left", "fas fa-hand-point-right", "fas fa-hand-point-up", "fas fa-hand-pointer", "fas fa-hand-rock", "fas fa-hand-scissors", "fas fa-hand-spock", "fas fa-hands", "fas fa-hands-helping", "fas fa-handshake", "fas fa-hanukiah", "fas fa-hard-hat", "fas fa-hashtag", "fas fa-hat-cowboy", "fas fa-hat-cowboy-side", "fas fa-hat-wizard", "fas fa-hdd", "fas fa-heading", "fas fa-headphones", "fas fa-headphones-alt", "fas fa-headset", "fas fa-heart", "fas fa-heart-broken", "fas fa-heartbeat", "fas fa-helicopter", "fas fa-highlighter", "fas fa-hiking", "fas fa-hippo", "fas fa-history", "fas fa-hockey-puck", "fas fa-holly-berry", "fas fa-home", "fas fa-horse", "fas fa-horse-head", "fas fa-hospital", "fas fa-hospital-alt", "fas fa-hospital-symbol", "fas fa-hot-tub", "fas fa-hotdog", "fas fa-hotel", "fas fa-hourglass", "fas fa-hourglass-end", "fas fa-hourglass-half", "fas fa-hourglass-start", "fas fa-house-damage", "fas fa-hryvnia", "fas fa-i-cursor", "fas fa-ice-cream", "fas fa-icicles", "fas fa-icons", "fas fa-id-badge", "fas fa-id-card", "fas fa-id-card-alt", "fas fa-igloo", "fas fa-image", "fas fa-images", "fas fa-inbox", "fas fa-indent", "fas fa-industry", "fas fa-infinity", "fas fa-info", "fas fa-info-circle", "fas fa-italic", "fas fa-jedi", "fas fa-joint", "fas fa-journal-whills", "fas fa-kaaba", "fas fa-key", "fas fa-keyboard", "fas fa-khanda", "fas fa-kiss", "fas fa-kiss-beam", "fas fa-kiss-wink-heart", "fas fa-kiwi-bird", "fas fa-landmark", "fas fa-language", "fas fa-laptop", "fas fa-laptop-code", "fas fa-laptop-medical", "fas fa-laugh", "fas fa-laugh-beam", "fas fa-laugh-squint", "fas fa-laugh-wink", "fas fa-layer-group", "fas fa-leaf", "fas fa-lemon", "fas fa-less-than", "fas fa-less-than-equal", "fas fa-level-down-alt", "fas fa-level-up-alt", "fas fa-life-ring", "fas fa-lightbulb", "fas fa-link", "fas fa-lira-sign", "fas fa-list", "fas fa-list-alt", "fas fa-list-ol", "fas fa-list-ul", "fas fa-location-arrow", "fas fa-lock", "fas fa-lock-open", "fas fa-long-arrow-alt-down", "fas fa-long-arrow-alt-left", "fas fa-long-arrow-alt-right", "fas fa-long-arrow-alt-up", "fas fa-low-vision", "fas fa-luggage-cart", "fas fa-magic", "fas fa-magnet", "fas fa-mail-bulk", "fas fa-male", "fas fa-map", "fas fa-map-marked", "fas fa-map-marked-alt", "fas fa-map-marker", "fas fa-map-marker-alt", "fas fa-map-pin", "fas fa-map-signs", "fas fa-marker", "fas fa-mars", "fas fa-mars-double", "fas fa-mars-stroke", "fas fa-mars-stroke-h", "fas fa-mars-stroke-v", "fas fa-mask", "fas fa-medal", "fas fa-medkit", "fas fa-meh", "fas fa-meh-blank", "fas fa-meh-rolling-eyes", "fas fa-memory", "fas fa-menorah", "fas fa-mercury", "fas fa-meteor", "fas fa-microchip", "fas fa-microphone", "fas fa-microphone-alt", "fas fa-microphone-alt-slash", "fas fa-microphone-slash", "fas fa-microscope", "fas fa-minus", "fas fa-minus-circle", "fas fa-minus-square", "fas fa-mitten", "fas fa-mobile", "fas fa-mobile-alt", "fas fa-money-bill", "fas fa-money-bill-alt", "fas fa-money-bill-wave", "fas fa-money-bill-wave-alt", "fas fa-money-check", "fas fa-money-check-alt", "fas fa-monument", "fas fa-moon", "fas fa-mortar-pestle", "fas fa-mosque", "fas fa-motorcycle", "fas fa-mountain", "fas fa-mouse", "fas fa-mouse-pointer", "fas fa-mug-hot", "fas fa-music", "fas fa-network-wired", "fas fa-neuter", "fas fa-newspaper", "fas fa-not-equal", "fas fa-notes-medical", "fas fa-object-group", "fas fa-object-ungroup", "fas fa-oil-can", "fas fa-om", "fas fa-otter", "fas fa-outdent", "fas fa-pager", "fas fa-paint-brush", "fas fa-paint-roller", "fas fa-palette", "fas fa-pallet", "fas fa-paper-plane", "fas fa-paperclip", "fas fa-parachute-box", "fas fa-paragraph", "fas fa-parking", "fas fa-passport", "fas fa-pastafarianism", "fas fa-paste", "fas fa-pause", "fas fa-pause-circle", "fas fa-paw", "fas fa-peace", "fas fa-pen", "fas fa-pen-alt", "fas fa-pen-fancy", "fas fa-pen-nib", "fas fa-pen-square", "fas fa-pencil-alt", "fas fa-pencil-ruler", "fas fa-people-carry", "fas fa-pepper-hot", "fas fa-percent", "fas fa-percentage", "fas fa-person-booth", "fas fa-phone", "fas fa-phone-alt", "fas fa-phone-slash", "fas fa-phone-square", "fas fa-phone-square-alt", "fas fa-phone-volume", "fas fa-photo-video", "fas fa-piggy-bank", "fas fa-pills", "fas fa-pizza-slice", "fas fa-place-of-worship", "fas fa-plane", "fas fa-plane-arrival", "fas fa-plane-departure", "fas fa-play", "fas fa-play-circle", "fas fa-plug", "fas fa-plus", "fas fa-plus-circle", "fas fa-plus-square", "fas fa-podcast", "fas fa-poll", "fas fa-poll-h", "fas fa-poo", "fas fa-poo-storm", "fas fa-poop", "fas fa-portrait", "fas fa-pound-sign", "fas fa-power-off", "fas fa-pray", "fas fa-praying-hands", "fas fa-prescription", "fas fa-prescription-bottle", "fas fa-prescription-bottle-alt", "fas fa-print", "fas fa-procedures", "fas fa-project-diagram", "fas fa-puzzle-piece", "fas fa-qrcode", "fas fa-question", "fas fa-question-circle", "fas fa-quidditch", "fas fa-quote-left", "fas fa-quote-right", "fas fa-quran", "fas fa-radiation", "fas fa-radiation-alt", "fas fa-rainbow", "fas fa-random", "fas fa-receipt", "fas fa-record-vinyl", "fas fa-recycle", "fas fa-redo", "fas fa-redo-alt", "fas fa-registered", "fas fa-remove-format", "fas fa-reply", "fas fa-reply-all", "fas fa-republican", "fas fa-restroom", "fas fa-retweet", "fas fa-ribbon", "fas fa-ring", "fas fa-road", "fas fa-robot", "fas fa-rocket", "fas fa-route", "fas fa-rss", "fas fa-rss-square", "fas fa-ruble-sign", "fas fa-ruler", "fas fa-ruler-combined", "fas fa-ruler-horizontal", "fas fa-ruler-vertical", "fas fa-running", "fas fa-rupee-sign", "fas fa-sad-cry", "fas fa-sad-tear", "fas fa-satellite", "fas fa-satellite-dish", "fas fa-save", "fas fa-school", "fas fa-screwdriver", "fas fa-scroll", "fas fa-sd-card", "fas fa-search", "fas fa-search-dollar", "fas fa-search-location", "fas fa-search-minus", "fas fa-search-plus", "fas fa-seedling", "fas fa-server", "fas fa-shapes", "fas fa-share", "fas fa-share-alt", "fas fa-share-alt-square", "fas fa-share-square", "fas fa-shekel-sign", "fas fa-shield-alt", "fas fa-ship", "fas fa-shipping-fast", "fas fa-shoe-prints", "fas fa-shopping-bag", "fas fa-shopping-basket", "fas fa-shopping-cart", "fas fa-shower", "fas fa-shuttle-van", "fas fa-sign", "fas fa-sign-in-alt", "fas fa-sign-language", "fas fa-sign-out-alt", "fas fa-signal", "fas fa-signature", "fas fa-sim-card", "fas fa-sitemap", "fas fa-skating", "fas fa-skiing", "fas fa-skiing-nordic", "fas fa-skull", "fas fa-skull-crossbones", "fas fa-slash", "fas fa-sleigh", "fas fa-sliders-h", "fas fa-smile", "fas fa-smile-beam", "fas fa-smile-wink", "fas fa-smog", "fas fa-smoking", "fas fa-smoking-ban", "fas fa-sms", "fas fa-snowboarding", "fas fa-snowflake", "fas fa-snowman", "fas fa-snowplow", "fas fa-socks", "fas fa-solar-panel", "fas fa-sort", "fas fa-sort-alpha-down", "fas fa-sort-alpha-down-alt", "fas fa-sort-alpha-up", "fas fa-sort-alpha-up-alt", "fas fa-sort-amount-down", "fas fa-sort-amount-down-alt", "fas fa-sort-amount-up", "fas fa-sort-amount-up-alt", "fas fa-sort-down", "fas fa-sort-numeric-down", "fas fa-sort-numeric-down-alt", "fas fa-sort-numeric-up", "fas fa-sort-numeric-up-alt", "fas fa-sort-up", "fas fa-spa", "fas fa-space-shuttle", "fas fa-spell-check", "fas fa-spider", "fas fa-spinner", "fas fa-splotch", "fas fa-spray-can", "fas fa-square", "fas fa-square-full", "fas fa-square-root-alt", "fas fa-stamp", "fas fa-star", "fas fa-star-and-crescent", "fas fa-star-half", "fas fa-star-half-alt", "fas fa-star-of-david", "fas fa-star-of-life", "fas fa-step-backward", "fas fa-step-forward", "fas fa-stethoscope", "fas fa-sticky-note", "fas fa-stop", "fas fa-stop-circle", "fas fa-stopwatch", "fas fa-store", "fas fa-store-alt", "fas fa-stream", "fas fa-street-view", "fas fa-strikethrough", "fas fa-stroopwafel", "fas fa-subscript", "fas fa-subway", "fas fa-suitcase", "fas fa-suitcase-rolling", "fas fa-sun", "fas fa-superscript", "fas fa-surprise", "fas fa-swatchbook", "fas fa-swimmer", "fas fa-swimming-pool", "fas fa-synagogue", "fas fa-sync", "fas fa-sync-alt", "fas fa-syringe", "fas fa-table", "fas fa-table-tennis", "fas fa-tablet", "fas fa-tablet-alt", "fas fa-tablets", "fas fa-tachometer-alt", "fas fa-tag", "fas fa-tags", "fas fa-tape", "fas fa-tasks", "fas fa-taxi", "fas fa-teeth", "fas fa-teeth-open", "fas fa-temperature-high", "fas fa-temperature-low", "fas fa-tenge", "fas fa-terminal", "fas fa-text-height", "fas fa-text-width", "fas fa-th", "fas fa-th-large", "fas fa-th-list", "fas fa-theater-masks", "fas fa-thermometer", "fas fa-thermometer-empty", "fas fa-thermometer-full", "fas fa-thermometer-half", "fas fa-thermometer-quarter", "fas fa-thermometer-three-quarters", "fas fa-thumbs-down", "fas fa-thumbs-up", "fas fa-thumbtack", "fas fa-ticket-alt", "fas fa-times", "fas fa-times-circle", "fas fa-tint", "fas fa-tint-slash", "fas fa-tired", "fas fa-toggle-off", "fas fa-toggle-on", "fas fa-toilet", "fas fa-toilet-paper", "fas fa-toolbox", "fas fa-tools", "fas fa-tooth", "fas fa-torah", "fas fa-torii-gate", "fas fa-tractor", "fas fa-trademark", "fas fa-traffic-light", "fas fa-trailer", "fas fa-train", "fas fa-tram", "fas fa-transgender", "fas fa-transgender-alt", "fas fa-trash", "fas fa-trash-alt", "fas fa-trash-restore", "fas fa-trash-restore-alt", "fas fa-tree", "fas fa-trophy", "fas fa-truck", "fas fa-truck-loading", "fas fa-truck-monster", "fas fa-truck-moving", "fas fa-truck-pickup", "fas fa-tshirt", "fas fa-tty", "fas fa-tv", "fas fa-umbrella", "fas fa-umbrella-beach", "fas fa-underline", "fas fa-undo", "fas fa-undo-alt", "fas fa-universal-access", "fas fa-university", "fas fa-unlink", "fas fa-unlock", "fas fa-unlock-alt", "fas fa-upload", "fas fa-user", "fas fa-user-alt", "fas fa-user-alt-slash", "fas fa-user-astronaut", "fas fa-user-check", "fas fa-user-circle", "fas fa-user-clock", "fas fa-user-cog", "fas fa-user-edit", "fas fa-user-friends", "fas fa-user-graduate", "fas fa-user-injured", "fas fa-user-lock", "fas fa-user-md", "fas fa-user-minus", "fas fa-user-ninja", "fas fa-user-nurse", "fas fa-user-plus", "fas fa-user-secret", "fas fa-user-shield", "fas fa-user-slash", "fas fa-user-tag", "fas fa-user-tie", "fas fa-user-times", "fas fa-users", "fas fa-users-cog", "fas fa-utensil-spoon", "fas fa-utensils", "fas fa-vector-square", "fas fa-venus", "fas fa-venus-double", "fas fa-venus-mars", "fas fa-vial", "fas fa-vials", "fas fa-video", "fas fa-video-slash", "fas fa-vihara", "fas fa-voicemail", "fas fa-volleyball-ball", "fas fa-volume-down", "fas fa-volume-mute", "fas fa-volume-off", "fas fa-volume-up", "fas fa-vote-yea", "fas fa-vr-cardboard", "fas fa-walking", "fas fa-wallet", "fas fa-warehouse", "fas fa-water", "fas fa-wave-square", "fas fa-weight", "fas fa-weight-hanging", "fas fa-wheelchair", "fas fa-wifi", "fas fa-wind", "fas fa-window-close", "fas fa-window-maximize", "fas fa-window-minimize", "fas fa-window-restore", "fas fa-wine-bottle", "fas fa-wine-glass", "fas fa-wine-glass-alt", "fas fa-won-sign", "fas fa-wrench", "fas fa-x-ray", "fas fa-yen-sign", "fas fa-yin-yang"]
14
+ },
15
+ "brands":{
16
+ "prefix": "fab fa-",
17
+ "icon-style": "fa-brands",
18
+ "list-icon":"fab fa-font-awesome-flag",
19
+ "icons":["fab fa-500px", "fab fa-accessible-icon", "fab fa-accusoft", "fab fa-acquisitions-incorporated", "fab fa-adn", "fab fa-adobe", "fab fa-adversal", "fab fa-affiliatetheme", "fab fa-airbnb", "fab fa-algolia", "fab fa-alipay", "fab fa-amazon", "fab fa-amazon-pay", "fab fa-amilia", "fab fa-android", "fab fa-angellist", "fab fa-angrycreative", "fab fa-angular", "fab fa-app-store", "fab fa-app-store-ios", "fab fa-apper", "fab fa-apple", "fab fa-apple-pay", "fab fa-artstation", "fab fa-asymmetrik", "fab fa-atlassian", "fab fa-audible", "fab fa-autoprefixer", "fab fa-avianex", "fab fa-aviato", "fab fa-aws", "fab fa-bandcamp", "fab fa-battle-net", "fab fa-behance", "fab fa-behance-square", "fab fa-bimobject", "fab fa-bitbucket", "fab fa-bitcoin", "fab fa-bity", "fab fa-black-tie", "fab fa-blackberry", "fab fa-blogger", "fab fa-blogger-b", "fab fa-bluetooth", "fab fa-bluetooth-b", "fab fa-bootstrap", "fab fa-btc", "fab fa-buffer", "fab fa-buromobelexperte", "fab fa-buy-n-large", "fab fa-buysellads", "fab fa-canadian-maple-leaf", "fab fa-cc-amazon-pay", "fab fa-cc-amex", "fab fa-cc-apple-pay", "fab fa-cc-diners-club", "fab fa-cc-discover", "fab fa-cc-jcb", "fab fa-cc-mastercard", "fab fa-cc-paypal", "fab fa-cc-stripe", "fab fa-cc-visa", "fab fa-centercode", "fab fa-centos", "fab fa-chrome", "fab fa-chromecast", "fab fa-cloudscale", "fab fa-cloudsmith", "fab fa-cloudversify", "fab fa-codepen", "fab fa-codiepie", "fab fa-confluence", "fab fa-connectdevelop", "fab fa-contao", "fab fa-cotton-bureau", "fab fa-cpanel", "fab fa-creative-commons", "fab fa-creative-commons-by", "fab fa-creative-commons-nc", "fab fa-creative-commons-nc-eu", "fab fa-creative-commons-nc-jp", "fab fa-creative-commons-nd", "fab fa-creative-commons-pd", "fab fa-creative-commons-pd-alt", "fab fa-creative-commons-remix", "fab fa-creative-commons-sa", "fab fa-creative-commons-sampling", "fab fa-creative-commons-sampling-plus", "fab fa-creative-commons-share", "fab fa-creative-commons-zero", "fab fa-critical-role", "fab fa-css3", "fab fa-css3-alt", "fab fa-cuttlefish", "fab fa-d-and-d", "fab fa-d-and-d-beyond", "fab fa-dashcube", "fab fa-delicious", "fab fa-deploydog", "fab fa-deskpro", "fab fa-dev", "fab fa-deviantart", "fab fa-dhl", "fab fa-diaspora", "fab fa-digg", "fab fa-digital-ocean", "fab fa-discord", "fab fa-discourse", "fab fa-dochub", "fab fa-docker", "fab fa-draft2digital", "fab fa-dribbble", "fab fa-dribbble-square", "fab fa-dropbox", "fab fa-drupal", "fab fa-dyalog", "fab fa-earlybirds", "fab fa-ebay", "fab fa-edge", "fab fa-elementor", "fab fa-ello", "fab fa-ember", "fab fa-empire", "fab fa-envira", "fab fa-erlang", "fab fa-ethereum", "fab fa-etsy", "fab fa-evernote", "fab fa-expeditedssl", "fab fa-facebook", "fab fa-facebook-f", "fab fa-facebook-messenger", "fab fa-facebook-square", "fab fa-fantasy-flight-games", "fab fa-fedex", "fab fa-fedora", "fab fa-figma", "fab fa-firefox", "fab fa-firefox-browser", "fab fa-first-order", "fab fa-first-order-alt", "fab fa-firstdraft", "fab fa-flickr", "fab fa-flipboard", "fab fa-fly", "fab fa-font-awesome", "fab fa-font-awesome-alt", "fab fa-font-awesome-flag", "fab fa-fonticons", "fab fa-fonticons-fi", "fab fa-fort-awesome", "fab fa-fort-awesome-alt", "fab fa-forumbee", "fab fa-foursquare", "fab fa-free-code-camp", "fab fa-freebsd", "fab fa-fulcrum", "fab fa-galactic-republic", "fab fa-galactic-senate", "fab fa-get-pocket", "fab fa-gg", "fab fa-gg-circle", "fab fa-git", "fab fa-git-alt", "fab fa-git-square", "fab fa-github", "fab fa-github-alt", "fab fa-github-square", "fab fa-gitkraken", "fab fa-gitlab", "fab fa-gitter", "fab fa-glide", "fab fa-glide-g", "fab fa-gofore", "fab fa-goodreads", "fab fa-goodreads-g", "fab fa-google", "fab fa-google-drive", "fab fa-google-play", "fab fa-google-plus", "fab fa-google-plus-g", "fab fa-google-plus-square", "fab fa-google-wallet", "fab fa-gratipay", "fab fa-grav", "fab fa-gripfire", "fab fa-grunt", "fab fa-gulp", "fab fa-hacker-news", "fab fa-hacker-news-square", "fab fa-hackerrank", "fab fa-hips", "fab fa-hire-a-helper", "fab fa-hooli", "fab fa-hornbill", "fab fa-hotjar", "fab fa-houzz", "fab fa-html5", "fab fa-hubspot", "fab fa-ideal", "fab fa-imdb", "fab fa-instagram", "fab fa-intercom", "fab fa-internet-explorer", "fab fa-invision", "fab fa-ioxhost", "fab fa-itch-io", "fab fa-itunes", "fab fa-itunes-note", "fab fa-java", "fab fa-jedi-order", "fab fa-jenkins", "fab fa-jira", "fab fa-joget", "fab fa-joomla", "fab fa-js", "fab fa-js-square", "fab fa-jsfiddle", "fab fa-kaggle", "fab fa-keybase", "fab fa-keycdn", "fab fa-kickstarter", "fab fa-kickstarter-k", "fab fa-korvue", "fab fa-laravel", "fab fa-lastfm", "fab fa-lastfm-square", "fab fa-leanpub", "fab fa-less", "fab fa-line", "fab fa-linkedin", "fab fa-linkedin-in", "fab fa-linode", "fab fa-linux", "fab fa-lyft", "fab fa-magento", "fab fa-mailchimp", "fab fa-mandalorian", "fab fa-markdown", "fab fa-mastodon", "fab fa-maxcdn", "fab fa-mdb", "fab fa-medapps", "fab fa-medium", "fab fa-medium-m", "fab fa-medrt", "fab fa-meetup", "fab fa-megaport", "fab fa-mendeley", "fab fa-microblog", "fab fa-microsoft", "fab fa-mix", "fab fa-mixcloud", "fab fa-mizuni", "fab fa-modx", "fab fa-monero", "fab fa-napster", "fab fa-neos", "fab fa-nimblr", "fab fa-node", "fab fa-node-js", "fab fa-npm", "fab fa-ns8", "fab fa-nutritionix", "fab fa-odnoklassniki", "fab fa-odnoklassniki-square", "fab fa-old-republic", "fab fa-opencart", "fab fa-openid", "fab fa-opera", "fab fa-optin-monster", "fab fa-orcid", "fab fa-osi", "fab fa-page4", "fab fa-pagelines", "fab fa-palfed", "fab fa-patreon", "fab fa-paypal", "fab fa-penny-arcade", "fab fa-periscope", "fab fa-phabricator", "fab fa-phoenix-framework", "fab fa-phoenix-squadron", "fab fa-php", "fab fa-pied-piper", "fab fa-pied-piper-alt", "fab fa-pied-piper-hat", "fab fa-pied-piper-pp", "fab fa-pied-piper-square", "fab fa-pinterest", "fab fa-pinterest-p", "fab fa-pinterest-square", "fab fa-playstation", "fab fa-product-hunt", "fab fa-pushed", "fab fa-python", "fab fa-qq", "fab fa-quinscape", "fab fa-quora", "fab fa-r-project", "fab fa-raspberry-pi", "fab fa-ravelry", "fab fa-react", "fab fa-reacteurope", "fab fa-readme", "fab fa-rebel", "fab fa-red-river", "fab fa-reddit", "fab fa-reddit-alien", "fab fa-reddit-square", "fab fa-redhat", "fab fa-renren", "fab fa-replyd", "fab fa-researchgate", "fab fa-resolving", "fab fa-rev", "fab fa-rocketchat", "fab fa-rockrms", "fab fa-safari", "fab fa-salesforce", "fab fa-sass", "fab fa-schlix", "fab fa-scribd", "fab fa-searchengin", "fab fa-sellcast", "fab fa-sellsy", "fab fa-servicestack", "fab fa-shirtsinbulk", "fab fa-shopware", "fab fa-simplybuilt", "fab fa-sistrix", "fab fa-sith", "fab fa-sketch", "fab fa-skyatlas", "fab fa-skype", "fab fa-slack", "fab fa-slack-hash", "fab fa-slideshare", "fab fa-snapchat", "fab fa-snapchat-ghost", "fab fa-snapchat-square", "fab fa-soundcloud", "fab fa-sourcetree", "fab fa-speakap", "fab fa-speaker-deck", "fab fa-spotify", "fab fa-squarespace", "fab fa-stack-exchange", "fab fa-stack-overflow", "fab fa-stackpath", "fab fa-staylinked", "fab fa-steam", "fab fa-steam-square", "fab fa-steam-symbol", "fab fa-sticker-mule", "fab fa-strava", "fab fa-stripe", "fab fa-stripe-s", "fab fa-studiovinari", "fab fa-stumbleupon", "fab fa-stumbleupon-circle", "fab fa-superpowers", "fab fa-supple", "fab fa-suse", "fab fa-swift", "fab fa-symfony", "fab fa-teamspeak", "fab fa-telegram", "fab fa-telegram-plane", "fab fa-tencent-weibo", "fab fa-the-red-yeti", "fab fa-themeco", "fab fa-themeisle", "fab fa-think-peaks", "fab fa-trade-federation", "fab fa-trello", "fab fa-tripadvisor", "fab fa-tumblr", "fab fa-tumblr-square", "fab fa-twitch", "fab fa-twitter", "fab fa-twitter-square", "fab fa-typo3", "fab fa-uber", "fab fa-ubuntu", "fab fa-uikit", "fab fa-umbraco", "fab fa-uniregistry", "fab fa-unity", "fab fa-untappd", "fab fa-ups", "fab fa-usb", "fab fa-usps", "fab fa-ussunnah", "fab fa-vaadin", "fab fa-viacoin", "fab fa-viadeo", "fab fa-viadeo-square", "fab fa-viber", "fab fa-vimeo", "fab fa-vimeo-square", "fab fa-vimeo-v", "fab fa-vine", "fab fa-vk", "fab fa-vnv", "fab fa-vuejs", "fab fa-waze", "fab fa-weebly", "fab fa-weibo", "fab fa-weixin", "fab fa-whatsapp", "fab fa-whatsapp-square", "fab fa-whmcs", "fab fa-wikipedia-w", "fab fa-windows", "fab fa-wix", "fab fa-wizards-of-the-coast", "fab fa-wolf-pack-battalion", "fab fa-wordpress", "fab fa-wordpress-simple", "fab fa-wpbeginner", "fab fa-wpexplorer", "fab fa-wpforms", "fab fa-wpressr", "fab fa-xbox", "fab fa-xing", "fab fa-xing-square", "fab fa-y-combinator", "fab fa-yahoo", "fab fa-yammer", "fab fa-yandex", "fab fa-yandex-international", "fab fa-yarn", "fab fa-yelp", "fab fa-yoast", "fab fa-youtube", "fab fa-youtube-square", "fab fa-zhihu"]
20
+ }
21
+ }
22
+ }
assets/vendor/aesthetic-icon-picker/icons/font-awesome.min.js ADDED
@@ -0,0 +1 @@
 
1
+ return{"font-awesome":{regular:{prefix:"far fa-","icon-style":"fa-regular","list-icon":"fab fa-font-awesome-alt",icons:["far fa-address-book","far fa-address-card","far fa-angry","far fa-arrow-alt-circle-down","far fa-arrow-alt-circle-left","far fa-arrow-alt-circle-right","far fa-arrow-alt-circle-up","far fa-bell","far fa-bell-slash","far fa-bookmark","far fa-building","far fa-calendar","far fa-calendar-alt","far fa-calendar-check","far fa-calendar-minus","far fa-calendar-plus","far fa-calendar-times","far fa-caret-square-down","far fa-caret-square-left","far fa-caret-square-right","far fa-caret-square-up","far fa-chart-bar","far fa-check-circle","far fa-check-square","far fa-circle","far fa-clipboard","far fa-clock","far fa-clone","far fa-closed-captioning","far fa-comment","far fa-comment-alt","far fa-comment-dots","far fa-comments","far fa-compass","far fa-copy","far fa-copyright","far fa-credit-card","far fa-dizzy","far fa-dot-circle","far fa-edit","far fa-envelope","far fa-envelope-open","far fa-eye","far fa-eye-slash","far fa-file","far fa-file-alt","far fa-file-archive","far fa-file-audio","far fa-file-code","far fa-file-excel","far fa-file-image","far fa-file-pdf","far fa-file-powerpoint","far fa-file-video","far fa-file-word","far fa-flag","far fa-flushed","far fa-folder","far fa-folder-open","far fa-frown","far fa-frown-open","far fa-futbol","far fa-gem","far fa-grimace","far fa-grin","far fa-grin-alt","far fa-grin-beam","far fa-grin-beam-sweat","far fa-grin-hearts","far fa-grin-squint","far fa-grin-squint-tears","far fa-grin-stars","far fa-grin-tears","far fa-grin-tongue","far fa-grin-tongue-squint","far fa-grin-tongue-wink","far fa-grin-wink","far fa-hand-lizard","far fa-hand-paper","far fa-hand-peace","far fa-hand-point-down","far fa-hand-point-left","far fa-hand-point-right","far fa-hand-point-up","far fa-hand-pointer","far fa-hand-rock","far fa-hand-scissors","far fa-hand-spock","far fa-handshake","far fa-hdd","far fa-heart","far fa-hospital","far fa-hourglass","far fa-id-badge","far fa-id-card","far fa-image","far fa-images","far fa-keyboard","far fa-kiss","far fa-kiss-beam","far fa-kiss-wink-heart","far fa-laugh","far fa-laugh-beam","far fa-laugh-squint","far fa-laugh-wink","far fa-lemon","far fa-life-ring","far fa-lightbulb","far fa-list-alt","far fa-map","far fa-meh","far fa-meh-blank","far fa-meh-rolling-eyes","far fa-minus-square","far fa-money-bill-alt","far fa-moon","far fa-newspaper","far fa-object-group","far fa-object-ungroup","far fa-paper-plane","far fa-pause-circle","far fa-play-circle","far fa-plus-square","far fa-question-circle","far fa-registered","far fa-sad-cry","far fa-sad-tear","far fa-save","far fa-share-square","far fa-smile","far fa-smile-beam","far fa-smile-wink","far fa-snowflake","far fa-square","far fa-star","far fa-star-half","far fa-sticky-note","far fa-stop-circle","far fa-sun","far fa-surprise","far fa-thumbs-down","far fa-thumbs-up","far fa-times-circle","far fa-tired","far fa-trash-alt","far fa-user","far fa-user-circle","far fa-window-close","far fa-window-maximize","far fa-window-minimize","far fa-window-restore"]},solid:{prefix:"fas fa-","icon-style":"fa-solid","list-icon":"fab fa-font-awesome",icons:["fas fa-ad","fas fa-address-book","fas fa-address-card","fas fa-adjust","fas fa-air-freshener","fas fa-align-center","fas fa-align-justify","fas fa-align-left","fas fa-align-right","fas fa-allergies","fas fa-ambulance","fas fa-american-sign-language-interpreting","fas fa-anchor","fas fa-angle-double-down","fas fa-angle-double-left","fas fa-angle-double-right","fas fa-angle-double-up","fas fa-angle-down","fas fa-angle-left","fas fa-angle-right","fas fa-angle-up","fas fa-angry","fas fa-ankh","fas fa-apple-alt","fas fa-archive","fas fa-archway","fas fa-arrow-alt-circle-down","fas fa-arrow-alt-circle-left","fas fa-arrow-alt-circle-right","fas fa-arrow-alt-circle-up","fas fa-arrow-circle-down","fas fa-arrow-circle-left","fas fa-arrow-circle-right","fas fa-arrow-circle-up","fas fa-arrow-down","fas fa-arrow-left","fas fa-arrow-right","fas fa-arrow-up","fas fa-arrows-alt","fas fa-arrows-alt-h","fas fa-arrows-alt-v","fas fa-assistive-listening-systems","fas fa-asterisk","fas fa-at","fas fa-atlas","fas fa-atom","fas fa-audio-description","fas fa-award","fas fa-baby","fas fa-baby-carriage","fas fa-backspace","fas fa-backward","fas fa-bacon","fas fa-bahai","fas fa-balance-scale","fas fa-balance-scale-left","fas fa-balance-scale-right","fas fa-ban","fas fa-band-aid","fas fa-barcode","fas fa-bars","fas fa-baseball-ball","fas fa-basketball-ball","fas fa-bath","fas fa-battery-empty","fas fa-battery-full","fas fa-battery-half","fas fa-battery-quarter","fas fa-battery-three-quarters","fas fa-bed","fas fa-beer","fas fa-bell","fas fa-bell-slash","fas fa-bezier-curve","fas fa-bible","fas fa-bicycle","fas fa-biking","fas fa-binoculars","fas fa-biohazard","fas fa-birthday-cake","fas fa-blender","fas fa-blender-phone","fas fa-blind","fas fa-blog","fas fa-bold","fas fa-bolt","fas fa-bomb","fas fa-bone","fas fa-bong","fas fa-book","fas fa-book-dead","fas fa-book-medical","fas fa-book-open","fas fa-book-reader","fas fa-bookmark","fas fa-border-all","fas fa-border-none","fas fa-border-style","fas fa-bowling-ball","fas fa-box","fas fa-box-open","fas fa-boxes","fas fa-braille","fas fa-brain","fas fa-bread-slice","fas fa-briefcase","fas fa-briefcase-medical","fas fa-broadcast-tower","fas fa-broom","fas fa-brush","fas fa-bug","fas fa-building","fas fa-bullhorn","fas fa-bullseye","fas fa-burn","fas fa-bus","fas fa-bus-alt","fas fa-business-time","fas fa-calculator","fas fa-calendar","fas fa-calendar-alt","fas fa-calendar-check","fas fa-calendar-day","fas fa-calendar-minus","fas fa-calendar-plus","fas fa-calendar-times","fas fa-calendar-week","fas fa-camera","fas fa-camera-retro","fas fa-campground","fas fa-candy-cane","fas fa-cannabis","fas fa-capsules","fas fa-car","fas fa-car-alt","fas fa-car-battery","fas fa-car-crash","fas fa-car-side","fas fa-caravan","fas fa-caret-down","fas fa-caret-left","fas fa-caret-right","fas fa-caret-square-down","fas fa-caret-square-left","fas fa-caret-square-right","fas fa-caret-square-up","fas fa-caret-up","fas fa-carrot","fas fa-cart-arrow-down","fas fa-cart-plus","fas fa-cash-register","fas fa-cat","fas fa-certificate","fas fa-chair","fas fa-chalkboard","fas fa-chalkboard-teacher","fas fa-charging-station","fas fa-chart-area","fas fa-chart-bar","fas fa-chart-line","fas fa-chart-pie","fas fa-check","fas fa-check-circle","fas fa-check-double","fas fa-check-square","fas fa-cheese","fas fa-chess","fas fa-chess-bishop","fas fa-chess-board","fas fa-chess-king","fas fa-chess-knight","fas fa-chess-pawn","fas fa-chess-queen","fas fa-chess-rook","fas fa-chevron-circle-down","fas fa-chevron-circle-left","fas fa-chevron-circle-right","fas fa-chevron-circle-up","fas fa-chevron-down","fas fa-chevron-left","fas fa-chevron-right","fas fa-chevron-up","fas fa-child","fas fa-church","fas fa-circle","fas fa-circle-notch","fas fa-city","fas fa-clinic-medical","fas fa-clipboard","fas fa-clipboard-check","fas fa-clipboard-list","fas fa-clock","fas fa-clone","fas fa-closed-captioning","fas fa-cloud","fas fa-cloud-download-alt","fas fa-cloud-meatball","fas fa-cloud-moon","fas fa-cloud-moon-rain","fas fa-cloud-rain","fas fa-cloud-showers-heavy","fas fa-cloud-sun","fas fa-cloud-sun-rain","fas fa-cloud-upload-alt","fas fa-cocktail","fas fa-code","fas fa-code-branch","fas fa-coffee","fas fa-cog","fas fa-cogs","fas fa-coins","fas fa-columns","fas fa-comment","fas fa-comment-alt","fas fa-comment-dollar","fas fa-comment-dots","fas fa-comment-medical","fas fa-comment-slash","fas fa-comments","fas fa-comments-dollar","fas fa-compact-disc","fas fa-compass","fas fa-compress","fas fa-compress-alt","fas fa-compress-arrows-alt","fas fa-concierge-bell","fas fa-cookie","fas fa-cookie-bite","fas fa-copy","fas fa-copyright","fas fa-couch","fas fa-credit-card","fas fa-crop","fas fa-crop-alt","fas fa-cross","fas fa-crosshairs","fas fa-crow","fas fa-crown","fas fa-crutch","fas fa-cube","fas fa-cubes","fas fa-cut","fas fa-database","fas fa-deaf","fas fa-democrat","fas fa-desktop","fas fa-dharmachakra","fas fa-diagnoses","fas fa-dice","fas fa-dice-d20","fas fa-dice-d6","fas fa-dice-five","fas fa-dice-four","fas fa-dice-one","fas fa-dice-six","fas fa-dice-three","fas fa-dice-two","fas fa-digital-tachograph","fas fa-directions","fas fa-divide","fas fa-dizzy","fas fa-dna","fas fa-dog","fas fa-dollar-sign","fas fa-dolly","fas fa-dolly-flatbed","fas fa-donate","fas fa-door-closed","fas fa-door-open","fas fa-dot-circle","fas fa-dove","fas fa-download","fas fa-drafting-compass","fas fa-dragon","fas fa-draw-polygon","fas fa-drum","fas fa-drum-steelpan","fas fa-drumstick-bite","fas fa-dumbbell","fas fa-dumpster","fas fa-dumpster-fire","fas fa-dungeon","fas fa-edit","fas fa-egg","fas fa-eject","fas fa-ellipsis-h","fas fa-ellipsis-v","fas fa-envelope","fas fa-envelope-open","fas fa-envelope-open-text","fas fa-envelope-square","fas fa-equals","fas fa-eraser","fas fa-ethernet","fas fa-euro-sign","fas fa-exchange-alt","fas fa-exclamation","fas fa-exclamation-circle","fas fa-exclamation-triangle","fas fa-expand","fas fa-expand-alt","fas fa-expand-arrows-alt","fas fa-external-link-alt","fas fa-external-link-square-alt","fas fa-eye","fas fa-eye-dropper","fas fa-eye-slash","fas fa-fan","fas fa-fast-backward","fas fa-fast-forward","fas fa-fax","fas fa-feather","fas fa-feather-alt","fas fa-female","fas fa-fighter-jet","fas fa-file","fas fa-file-alt","fas fa-file-archive","fas fa-file-audio","fas fa-file-code","fas fa-file-contract","fas fa-file-csv","fas fa-file-download","fas fa-file-excel","fas fa-file-export","fas fa-file-image","fas fa-file-import","fas fa-file-invoice","fas fa-file-invoice-dollar","fas fa-file-medical","fas fa-file-medical-alt","fas fa-file-pdf","fas fa-file-powerpoint","fas fa-file-prescription","fas fa-file-signature","fas fa-file-upload","fas fa-file-video","fas fa-file-word","fas fa-fill","fas fa-fill-drip","fas fa-film","fas fa-filter","fas fa-fingerprint","fas fa-fire","fas fa-fire-alt","fas fa-fire-extinguisher","fas fa-first-aid","fas fa-fish","fas fa-fist-raised","fas fa-flag","fas fa-flag-checkered","fas fa-flag-usa","fas fa-flask","fas fa-flushed","fas fa-folder","fas fa-folder-minus","fas fa-folder-open","fas fa-folder-plus","fas fa-font","fas fa-football-ball","fas fa-forward","fas fa-frog","fas fa-frown","fas fa-frown-open","fas fa-funnel-dollar","fas fa-futbol","fas fa-gamepad","fas fa-gas-pump","fas fa-gavel","fas fa-gem","fas fa-genderless","fas fa-ghost","fas fa-gift","fas fa-gifts","fas fa-glass-cheers","fas fa-glass-martini","fas fa-glass-martini-alt","fas fa-glass-whiskey","fas fa-glasses","fas fa-globe","fas fa-globe-africa","fas fa-globe-americas","fas fa-globe-asia","fas fa-globe-europe","fas fa-golf-ball","fas fa-gopuram","fas fa-graduation-cap","fas fa-greater-than","fas fa-greater-than-equal","fas fa-grimace","fas fa-grin","fas fa-grin-alt","fas fa-grin-beam","fas fa-grin-beam-sweat","fas fa-grin-hearts","fas fa-grin-squint","fas fa-grin-squint-tears","fas fa-grin-stars","fas fa-grin-tears","fas fa-grin-tongue","fas fa-grin-tongue-squint","fas fa-grin-tongue-wink","fas fa-grin-wink","fas fa-grip-horizontal","fas fa-grip-lines","fas fa-grip-lines-vertical","fas fa-grip-vertical","fas fa-guitar","fas fa-h-square","fas fa-hamburger","fas fa-hammer","fas fa-hamsa","fas fa-hand-holding","fas fa-hand-holding-heart","fas fa-hand-holding-usd","fas fa-hand-lizard","fas fa-hand-middle-finger","fas fa-hand-paper","fas fa-hand-peace","fas fa-hand-point-down","fas fa-hand-point-left","fas fa-hand-point-right","fas fa-hand-point-up","fas fa-hand-pointer","fas fa-hand-rock","fas fa-hand-scissors","fas fa-hand-spock","fas fa-hands","fas fa-hands-helping","fas fa-handshake","fas fa-hanukiah","fas fa-hard-hat","fas fa-hashtag","fas fa-hat-cowboy","fas fa-hat-cowboy-side","fas fa-hat-wizard","fas fa-hdd","fas fa-heading","fas fa-headphones","fas fa-headphones-alt","fas fa-headset","fas fa-heart","fas fa-heart-broken","fas fa-heartbeat","fas fa-helicopter","fas fa-highlighter","fas fa-hiking","fas fa-hippo","fas fa-history","fas fa-hockey-puck","fas fa-holly-berry","fas fa-home","fas fa-horse","fas fa-horse-head","fas fa-hospital","fas fa-hospital-alt","fas fa-hospital-symbol","fas fa-hot-tub","fas fa-hotdog","fas fa-hotel","fas fa-hourglass","fas fa-hourglass-end","fas fa-hourglass-half","fas fa-hourglass-start","fas fa-house-damage","fas fa-hryvnia","fas fa-i-cursor","fas fa-ice-cream","fas fa-icicles","fas fa-icons","fas fa-id-badge","fas fa-id-card","fas fa-id-card-alt","fas fa-igloo","fas fa-image","fas fa-images","fas fa-inbox","fas fa-indent","fas fa-industry","fas fa-infinity","fas fa-info","fas fa-info-circle","fas fa-italic","fas fa-jedi","fas fa-joint","fas fa-journal-whills","fas fa-kaaba","fas fa-key","fas fa-keyboard","fas fa-khanda","fas fa-kiss","fas fa-kiss-beam","fas fa-kiss-wink-heart","fas fa-kiwi-bird","fas fa-landmark","fas fa-language","fas fa-laptop","fas fa-laptop-code","fas fa-laptop-medical","fas fa-laugh","fas fa-laugh-beam","fas fa-laugh-squint","fas fa-laugh-wink","fas fa-layer-group","fas fa-leaf","fas fa-lemon","fas fa-less-than","fas fa-less-than-equal","fas fa-level-down-alt","fas fa-level-up-alt","fas fa-life-ring","fas fa-lightbulb","fas fa-link","fas fa-lira-sign","fas fa-list","fas fa-list-alt","fas fa-list-ol","fas fa-list-ul","fas fa-location-arrow","fas fa-lock","fas fa-lock-open","fas fa-long-arrow-alt-down","fas fa-long-arrow-alt-left","fas fa-long-arrow-alt-right","fas fa-long-arrow-alt-up","fas fa-low-vision","fas fa-luggage-cart","fas fa-magic","fas fa-magnet","fas fa-mail-bulk","fas fa-male","fas fa-map","fas fa-map-marked","fas fa-map-marked-alt","fas fa-map-marker","fas fa-map-marker-alt","fas fa-map-pin","fas fa-map-signs","fas fa-marker","fas fa-mars","fas fa-mars-double","fas fa-mars-stroke","fas fa-mars-stroke-h","fas fa-mars-stroke-v","fas fa-mask","fas fa-medal","fas fa-medkit","fas fa-meh","fas fa-meh-blank","fas fa-meh-rolling-eyes","fas fa-memory","fas fa-menorah","fas fa-mercury","fas fa-meteor","fas fa-microchip","fas fa-microphone","fas fa-microphone-alt","fas fa-microphone-alt-slash","fas fa-microphone-slash","fas fa-microscope","fas fa-minus","fas fa-minus-circle","fas fa-minus-square","fas fa-mitten","fas fa-mobile","fas fa-mobile-alt","fas fa-money-bill","fas fa-money-bill-alt","fas fa-money-bill-wave","fas fa-money-bill-wave-alt","fas fa-money-check","fas fa-money-check-alt","fas fa-monument","fas fa-moon","fas fa-mortar-pestle","fas fa-mosque","fas fa-motorcycle","fas fa-mountain","fas fa-mouse","fas fa-mouse-pointer","fas fa-mug-hot","fas fa-music","fas fa-network-wired","fas fa-neuter","fas fa-newspaper","fas fa-not-equal","fas fa-notes-medical","fas fa-object-group","fas fa-object-ungroup","fas fa-oil-can","fas fa-om","fas fa-otter","fas fa-outdent","fas fa-pager","fas fa-paint-brush","fas fa-paint-roller","fas fa-palette","fas fa-pallet","fas fa-paper-plane","fas fa-paperclip","fas fa-parachute-box","fas fa-paragraph","fas fa-parking","fas fa-passport","fas fa-pastafarianism","fas fa-paste","fas fa-pause","fas fa-pause-circle","fas fa-paw","fas fa-peace","fas fa-pen","fas fa-pen-alt","fas fa-pen-fancy","fas fa-pen-nib","fas fa-pen-square","fas fa-pencil-alt","fas fa-pencil-ruler","fas fa-people-carry","fas fa-pepper-hot","fas fa-percent","fas fa-percentage","fas fa-person-booth","fas fa-phone","fas fa-phone-alt","fas fa-phone-slash","fas fa-phone-square","fas fa-phone-square-alt","fas fa-phone-volume","fas fa-photo-video","fas fa-piggy-bank","fas fa-pills","fas fa-pizza-slice","fas fa-place-of-worship","fas fa-plane","fas fa-plane-arrival","fas fa-plane-departure","fas fa-play","fas fa-play-circle","fas fa-plug","fas fa-plus","fas fa-plus-circle","fas fa-plus-square","fas fa-podcast","fas fa-poll","fas fa-poll-h","fas fa-poo","fas fa-poo-storm","fas fa-poop","fas fa-portrait","fas fa-pound-sign","fas fa-power-off","fas fa-pray","fas fa-praying-hands","fas fa-prescription","fas fa-prescription-bottle","fas fa-prescription-bottle-alt","fas fa-print","fas fa-procedures","fas fa-project-diagram","fas fa-puzzle-piece","fas fa-qrcode","fas fa-question","fas fa-question-circle","fas fa-quidditch","fas fa-quote-left","fas fa-quote-right","fas fa-quran","fas fa-radiation","fas fa-radiation-alt","fas fa-rainbow","fas fa-random","fas fa-receipt","fas fa-record-vinyl","fas fa-recycle","fas fa-redo","fas fa-redo-alt","fas fa-registered","fas fa-remove-format","fas fa-reply","fas fa-reply-all","fas fa-republican","fas fa-restroom","fas fa-retweet","fas fa-ribbon","fas fa-ring","fas fa-road","fas fa-robot","fas fa-rocket","fas fa-route","fas fa-rss","fas fa-rss-square","fas fa-ruble-sign","fas fa-ruler","fas fa-ruler-combined","fas fa-ruler-horizontal","fas fa-ruler-vertical","fas fa-running","fas fa-rupee-sign","fas fa-sad-cry","fas fa-sad-tear","fas fa-satellite","fas fa-satellite-dish","fas fa-save","fas fa-school","fas fa-screwdriver","fas fa-scroll","fas fa-sd-card","fas fa-search","fas fa-search-dollar","fas fa-search-location","fas fa-search-minus","fas fa-search-plus","fas fa-seedling","fas fa-server","fas fa-shapes","fas fa-share","fas fa-share-alt","fas fa-share-alt-square","fas fa-share-square","fas fa-shekel-sign","fas fa-shield-alt","fas fa-ship","fas fa-shipping-fast","fas fa-shoe-prints","fas fa-shopping-bag","fas fa-shopping-basket","fas fa-shopping-cart","fas fa-shower","fas fa-shuttle-van","fas fa-sign","fas fa-sign-in-alt","fas fa-sign-language","fas fa-sign-out-alt","fas fa-signal","fas fa-signature","fas fa-sim-card","fas fa-sitemap","fas fa-skating","fas fa-skiing","fas fa-skiing-nordic","fas fa-skull","fas fa-skull-crossbones","fas fa-slash","fas fa-sleigh","fas fa-sliders-h","fas fa-smile","fas fa-smile-beam","fas fa-smile-wink","fas fa-smog","fas fa-smoking","fas fa-smoking-ban","fas fa-sms","fas fa-snowboarding","fas fa-snowflake","fas fa-snowman","fas fa-snowplow","fas fa-socks","fas fa-solar-panel","fas fa-sort","fas fa-sort-alpha-down","fas fa-sort-alpha-down-alt","fas fa-sort-alpha-up","fas fa-sort-alpha-up-alt","fas fa-sort-amount-down","fas fa-sort-amount-down-alt","fas fa-sort-amount-up","fas fa-sort-amount-up-alt","fas fa-sort-down","fas fa-sort-numeric-down","fas fa-sort-numeric-down-alt","fas fa-sort-numeric-up","fas fa-sort-numeric-up-alt","fas fa-sort-up","fas fa-spa","fas fa-space-shuttle","fas fa-spell-check","fas fa-spider","fas fa-spinner","fas fa-splotch","fas fa-spray-can","fas fa-square","fas fa-square-full","fas fa-square-root-alt","fas fa-stamp","fas fa-star","fas fa-star-and-crescent","fas fa-star-half","fas fa-star-half-alt","fas fa-star-of-david","fas fa-star-of-life","fas fa-step-backward","fas fa-step-forward","fas fa-stethoscope","fas fa-sticky-note","fas fa-stop","fas fa-stop-circle","fas fa-stopwatch","fas fa-store","fas fa-store-alt","fas fa-stream","fas fa-street-view","fas fa-strikethrough","fas fa-stroopwafel","fas fa-subscript","fas fa-subway","fas fa-suitcase","fas fa-suitcase-rolling","fas fa-sun","fas fa-superscript","fas fa-surprise","fas fa-swatchbook","fas fa-swimmer","fas fa-swimming-pool","fas fa-synagogue","fas fa-sync","fas fa-sync-alt","fas fa-syringe","fas fa-table","fas fa-table-tennis","fas fa-tablet","fas fa-tablet-alt","fas fa-tablets","fas fa-tachometer-alt","fas fa-tag","fas fa-tags","fas fa-tape","fas fa-tasks","fas fa-taxi","fas fa-teeth","fas fa-teeth-open","fas fa-temperature-high","fas fa-temperature-low","fas fa-tenge","fas fa-terminal","fas fa-text-height","fas fa-text-width","fas fa-th","fas fa-th-large","fas fa-th-list","fas fa-theater-masks","fas fa-thermometer","fas fa-thermometer-empty","fas fa-thermometer-full","fas fa-thermometer-half","fas fa-thermometer-quarter","fas fa-thermometer-three-quarters","fas fa-thumbs-down","fas fa-thumbs-up","fas fa-thumbtack","fas fa-ticket-alt","fas fa-times","fas fa-times-circle","fas fa-tint","fas fa-tint-slash","fas fa-tired","fas fa-toggle-off","fas fa-toggle-on","fas fa-toilet","fas fa-toilet-paper","fas fa-toolbox","fas fa-tools","fas fa-tooth","fas fa-torah","fas fa-torii-gate","fas fa-tractor","fas fa-trademark","fas fa-traffic-light","fas fa-trailer","fas fa-train","fas fa-tram","fas fa-transgender","fas fa-transgender-alt","fas fa-trash","fas fa-trash-alt","fas fa-trash-restore","fas fa-trash-restore-alt","fas fa-tree","fas fa-trophy","fas fa-truck","fas fa-truck-loading","fas fa-truck-monster","fas fa-truck-moving","fas fa-truck-pickup","fas fa-tshirt","fas fa-tty","fas fa-tv","fas fa-umbrella","fas fa-umbrella-beach","fas fa-underline","fas fa-undo","fas fa-undo-alt","fas fa-universal-access","fas fa-university","fas fa-unlink","fas fa-unlock","fas fa-unlock-alt","fas fa-upload","fas fa-user","fas fa-user-alt","fas fa-user-alt-slash","fas fa-user-astronaut","fas fa-user-check","fas fa-user-circle","fas fa-user-clock","fas fa-user-cog","fas fa-user-edit","fas fa-user-friends","fas fa-user-graduate","fas fa-user-injured","fas fa-user-lock","fas fa-user-md","fas fa-user-minus","fas fa-user-ninja","fas fa-user-nurse","fas fa-user-plus","fas fa-user-secret","fas fa-user-shield","fas fa-user-slash","fas fa-user-tag","fas fa-user-tie","fas fa-user-times","fas fa-users","fas fa-users-cog","fas fa-utensil-spoon","fas fa-utensils","fas fa-vector-square","fas fa-venus","fas fa-venus-double","fas fa-venus-mars","fas fa-vial","fas fa-vials","fas fa-video","fas fa-video-slash","fas fa-vihara","fas fa-voicemail","fas fa-volleyball-ball","fas fa-volume-down","fas fa-volume-mute","fas fa-volume-off","fas fa-volume-up","fas fa-vote-yea","fas fa-vr-cardboard","fas fa-walking","fas fa-wallet","fas fa-warehouse","fas fa-water","fas fa-wave-square","fas fa-weight","fas fa-weight-hanging","fas fa-wheelchair","fas fa-wifi","fas fa-wind","fas fa-window-close","fas fa-window-maximize","fas fa-window-minimize","fas fa-window-restore","fas fa-wine-bottle","fas fa-wine-glass","fas fa-wine-glass-alt","fas fa-won-sign","fas fa-wrench","fas fa-x-ray","fas fa-yen-sign","fas fa-yin-yang"]},brands:{prefix:"fab fa-","icon-style":"fa-brands","list-icon":"fab fa-font-awesome-flag",icons:["fab fa-500px","fab fa-accessible-icon","fab fa-accusoft","fab fa-acquisitions-incorporated","fab fa-adn","fab fa-adobe","fab fa-adversal","fab fa-affiliatetheme","fab fa-airbnb","fab fa-algolia","fab fa-alipay","fab fa-amazon","fab fa-amazon-pay","fab fa-amilia","fab fa-android","fab fa-angellist","fab fa-angrycreative","fab fa-angular","fab fa-app-store","fab fa-app-store-ios","fab fa-apper","fab fa-apple","fab fa-apple-pay","fab fa-artstation","fab fa-asymmetrik","fab fa-atlassian","fab fa-audible","fab fa-autoprefixer","fab fa-avianex","fab fa-aviato","fab fa-aws","fab fa-bandcamp","fab fa-battle-net","fab fa-behance","fab fa-behance-square","fab fa-bimobject","fab fa-bitbucket","fab fa-bitcoin","fab fa-bity","fab fa-black-tie","fab fa-blackberry","fab fa-blogger","fab fa-blogger-b","fab fa-bluetooth","fab fa-bluetooth-b","fab fa-bootstrap","fab fa-btc","fab fa-buffer","fab fa-buromobelexperte","fab fa-buy-n-large","fab fa-buysellads","fab fa-canadian-maple-leaf","fab fa-cc-amazon-pay","fab fa-cc-amex","fab fa-cc-apple-pay","fab fa-cc-diners-club","fab fa-cc-discover","fab fa-cc-jcb","fab fa-cc-mastercard","fab fa-cc-paypal","fab fa-cc-stripe","fab fa-cc-visa","fab fa-centercode","fab fa-centos","fab fa-chrome","fab fa-chromecast","fab fa-cloudscale","fab fa-cloudsmith","fab fa-cloudversify","fab fa-codepen","fab fa-codiepie","fab fa-confluence","fab fa-connectdevelop","fab fa-contao","fab fa-cotton-bureau","fab fa-cpanel","fab fa-creative-commons","fab fa-creative-commons-by","fab fa-creative-commons-nc","fab fa-creative-commons-nc-eu","fab fa-creative-commons-nc-jp","fab fa-creative-commons-nd","fab fa-creative-commons-pd","fab fa-creative-commons-pd-alt","fab fa-creative-commons-remix","fab fa-creative-commons-sa","fab fa-creative-commons-sampling","fab fa-creative-commons-sampling-plus","fab fa-creative-commons-share","fab fa-creative-commons-zero","fab fa-critical-role","fab fa-css3","fab fa-css3-alt","fab fa-cuttlefish","fab fa-d-and-d","fab fa-d-and-d-beyond","fab fa-dashcube","fab fa-delicious","fab fa-deploydog","fab fa-deskpro","fab fa-dev","fab fa-deviantart","fab fa-dhl","fab fa-diaspora","fab fa-digg","fab fa-digital-ocean","fab fa-discord","fab fa-discourse","fab fa-dochub","fab fa-docker","fab fa-draft2digital","fab fa-dribbble","fab fa-dribbble-square","fab fa-dropbox","fab fa-drupal","fab fa-dyalog","fab fa-earlybirds","fab fa-ebay","fab fa-edge","fab fa-elementor","fab fa-ello","fab fa-ember","fab fa-empire","fab fa-envira","fab fa-erlang","fab fa-ethereum","fab fa-etsy","fab fa-evernote","fab fa-expeditedssl","fab fa-facebook","fab fa-facebook-f","fab fa-facebook-messenger","fab fa-facebook-square","fab fa-fantasy-flight-games","fab fa-fedex","fab fa-fedora","fab fa-figma","fab fa-firefox","fab fa-firefox-browser","fab fa-first-order","fab fa-first-order-alt","fab fa-firstdraft","fab fa-flickr","fab fa-flipboard","fab fa-fly","fab fa-font-awesome","fab fa-font-awesome-alt","fab fa-font-awesome-flag","fab fa-fonticons","fab fa-fonticons-fi","fab fa-fort-awesome","fab fa-fort-awesome-alt","fab fa-forumbee","fab fa-foursquare","fab fa-free-code-camp","fab fa-freebsd","fab fa-fulcrum","fab fa-galactic-republic","fab fa-galactic-senate","fab fa-get-pocket","fab fa-gg","fab fa-gg-circle","fab fa-git","fab fa-git-alt","fab fa-git-square","fab fa-github","fab fa-github-alt","fab fa-github-square","fab fa-gitkraken","fab fa-gitlab","fab fa-gitter","fab fa-glide","fab fa-glide-g","fab fa-gofore","fab fa-goodreads","fab fa-goodreads-g","fab fa-google","fab fa-google-drive","fab fa-google-play","fab fa-google-plus","fab fa-google-plus-g","fab fa-google-plus-square","fab fa-google-wallet","fab fa-gratipay","fab fa-grav","fab fa-gripfire","fab fa-grunt","fab fa-gulp","fab fa-hacker-news","fab fa-hacker-news-square","fab fa-hackerrank","fab fa-hips","fab fa-hire-a-helper","fab fa-hooli","fab fa-hornbill","fab fa-hotjar","fab fa-houzz","fab fa-html5","fab fa-hubspot","fab fa-ideal","fab fa-imdb","fab fa-instagram","fab fa-intercom","fab fa-internet-explorer","fab fa-invision","fab fa-ioxhost","fab fa-itch-io","fab fa-itunes","fab fa-itunes-note","fab fa-java","fab fa-jedi-order","fab fa-jenkins","fab fa-jira","fab fa-joget","fab fa-joomla","fab fa-js","fab fa-js-square","fab fa-jsfiddle","fab fa-kaggle","fab fa-keybase","fab fa-keycdn","fab fa-kickstarter","fab fa-kickstarter-k","fab fa-korvue","fab fa-laravel","fab fa-lastfm","fab fa-lastfm-square","fab fa-leanpub","fab fa-less","fab fa-line","fab fa-linkedin","fab fa-linkedin-in","fab fa-linode","fab fa-linux","fab fa-lyft","fab fa-magento","fab fa-mailchimp","fab fa-mandalorian","fab fa-markdown","fab fa-mastodon","fab fa-maxcdn","fab fa-mdb","fab fa-medapps","fab fa-medium","fab fa-medium-m","fab fa-medrt","fab fa-meetup","fab fa-megaport","fab fa-mendeley","fab fa-microblog","fab fa-microsoft","fab fa-mix","fab fa-mixcloud","fab fa-mizuni","fab fa-modx","fab fa-monero","fab fa-napster","fab fa-neos","fab fa-nimblr","fab fa-node","fab fa-node-js","fab fa-npm","fab fa-ns8","fab fa-nutritionix","fab fa-odnoklassniki","fab fa-odnoklassniki-square","fab fa-old-republic","fab fa-opencart","fab fa-openid","fab fa-opera","fab fa-optin-monster","fab fa-orcid","fab fa-osi","fab fa-page4","fab fa-pagelines","fab fa-palfed","fab fa-patreon","fab fa-paypal","fab fa-penny-arcade","fab fa-periscope","fab fa-phabricator","fab fa-phoenix-framework","fab fa-phoenix-squadron","fab fa-php","fab fa-pied-piper","fab fa-pied-piper-alt","fab fa-pied-piper-hat","fab fa-pied-piper-pp","fab fa-pied-piper-square","fab fa-pinterest","fab fa-pinterest-p","fab fa-pinterest-square","fab fa-playstation","fab fa-product-hunt","fab fa-pushed","fab fa-python","fab fa-qq","fab fa-quinscape","fab fa-quora","fab fa-r-project","fab fa-raspberry-pi","fab fa-ravelry","fab fa-react","fab fa-reacteurope","fab fa-readme","fab fa-rebel","fab fa-red-river","fab fa-reddit","fab fa-reddit-alien","fab fa-reddit-square","fab fa-redhat","fab fa-renren","fab fa-replyd","fab fa-researchgate","fab fa-resolving","fab fa-rev","fab fa-rocketchat","fab fa-rockrms","fab fa-safari","fab fa-salesforce","fab fa-sass","fab fa-schlix","fab fa-scribd","fab fa-searchengin","fab fa-sellcast","fab fa-sellsy","fab fa-servicestack","fab fa-shirtsinbulk","fab fa-shopware","fab fa-simplybuilt","fab fa-sistrix","fab fa-sith","fab fa-sketch","fab fa-skyatlas","fab fa-skype","fab fa-slack","fab fa-slack-hash","fab fa-slideshare","fab fa-snapchat","fab fa-snapchat-ghost","fab fa-snapchat-square","fab fa-soundcloud","fab fa-sourcetree","fab fa-speakap","fab fa-speaker-deck","fab fa-spotify","fab fa-squarespace","fab fa-stack-exchange","fab fa-stack-overflow","fab fa-stackpath","fab fa-staylinked","fab fa-steam","fab fa-steam-square","fab fa-steam-symbol","fab fa-sticker-mule","fab fa-strava","fab fa-stripe","fab fa-stripe-s","fab fa-studiovinari","fab fa-stumbleupon","fab fa-stumbleupon-circle","fab fa-superpowers","fab fa-supple","fab fa-suse","fab fa-swift","fab fa-symfony","fab fa-teamspeak","fab fa-telegram","fab fa-telegram-plane","fab fa-tencent-weibo","fab fa-the-red-yeti","fab fa-themeco","fab fa-themeisle","fab fa-think-peaks","fab fa-trade-federation","fab fa-trello","fab fa-tripadvisor","fab fa-tumblr","fab fa-tumblr-square","fab fa-twitch","fab fa-twitter","fab fa-twitter-square","fab fa-typo3","fab fa-uber","fab fa-ubuntu","fab fa-uikit","fab fa-umbraco","fab fa-uniregistry","fab fa-unity","fab fa-untappd","fab fa-ups","fab fa-usb","fab fa-usps","fab fa-ussunnah","fab fa-vaadin","fab fa-viacoin","fab fa-viadeo","fab fa-viadeo-square","fab fa-viber","fab fa-vimeo","fab fa-vimeo-square","fab fa-vimeo-v","fab fa-vine","fab fa-vk","fab fa-vnv","fab fa-vuejs","fab fa-waze","fab fa-weebly","fab fa-weibo","fab fa-weixin","fab fa-whatsapp","fab fa-whatsapp-square","fab fa-whmcs","fab fa-wikipedia-w","fab fa-windows","fab fa-wix","fab fa-wizards-of-the-coast","fab fa-wolf-pack-battalion","fab fa-wordpress","fab fa-wordpress-simple","fab fa-wpbeginner","fab fa-wpexplorer","fab fa-wpforms","fab fa-wpressr","fab fa-xbox","fab fa-xing","fab fa-xing-square","fab fa-y-combinator","fab fa-yahoo","fab fa-yammer","fab fa-yandex","fab fa-yandex-international","fab fa-yarn","fab fa-yelp","fab fa-yoast","fab fa-youtube","fab fa-youtube-square","fab fa-zhihu"]}}};
assets/vendor/fullcalendar/fullcalendar.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .fc-icon,.fc-unselectable{-moz-user-select:none;-ms-user-select:none}.fc .fc-button,.fc-icon{text-transform:none;text-align:center}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc .fc-button:not(:disabled),.fc a[data-navlink],.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-unselectable{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc{display:flex;flex-direction:column;font-size:1em}.fc .fc-button,.fc-icon{display:inline-block;font-weight:400}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{vertical-align:top;padding:0}.fc .fc-button,.fc .fc-button .fc-icon,.fc .fc-button-group,.fc .fc-timegrid-slot-label{vertical-align:middle}.fc a[data-navlink]:hover{text-decoration:underline}.fc .fc-button:hover,.fc .fc-list-event-title a,a.fc-event,a.fc-event:hover{text-decoration:none}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format('truetype');font-weight:400;font-style:normal}.fc-icon{width:1em;height:1em;-webkit-user-select:none;user-select:none;font-family:fcicons!important;speak:none;font-style:normal;font-variant:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fc-icon-chevron-left:before{content:"\e900"}.fc-icon-chevron-right:before{content:"\e901"}.fc-icon-chevrons-left:before{content:"\e902"}.fc-icon-chevrons-right:before{content:"\e903"}.fc-icon-minus-square:before{content:"\e904"}.fc-icon-plus-square:before{content:"\e905"}.fc-icon-x:before{content:"\e906"}.fc .fc-button{overflow:visible;text-transform:none;margin:0;font-family:inherit}.fc .fc-button::-moz-focus-inner{padding:0;border-style:none}.fc .fc-button{-webkit-appearance:button;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc .fc-button:focus{outline:0;box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc .fc-button-primary:focus,.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#2C3E50;background-color:var(--fc-button-bg-color,#2C3E50);border-color:#2C3E50;border-color:var(--fc-button-border-color,#2C3E50)}.fc .fc-button-primary:hover{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#1e2b37;background-color:var(--fc-button-hover-bg-color,#1e2b37);border-color:#1a252f;border-color:var(--fc-button-hover-border-color,#1a252f)}.fc .fc-button-primary:disabled{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#2C3E50;background-color:var(--fc-button-bg-color,#2C3E50);border-color:#2C3E50;border-color:var(--fc-button-border-color,#2C3E50)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{color:#fff;color:var(--fc-button-text-color,#fff);background-color:#1a252f;background-color:var(--fc-button-active-bg-color,#1a252f);border-color:#151e27;border-color:var(--fc-button-active-border-color,#151e27)}.fc .fc-button .fc-icon{font-size:1.5em}.fc .fc-button-group{position:relative;display:inline-flex}.fc .fc-button-group>.fc-button{position:relative;flex:1 1 auto}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.fc .fc-toolbar{display:flex;justify-content:space-between;align-items:center}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{position:absolute;top:0;right:0;left:0;bottom:0}.fc .fc-scroller-harness{position:relative;overflow:hidden;direction:ltr}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc .fc-scrollgrid,.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{width:100%;table-layout:fixed}.fc .fc-scrollgrid table{border-top-style:hidden;border-left-style:hidden;border-right-style:hidden}.fc .fc-scrollgrid{border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid{height:auto}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-top-width:0;border-left-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color,#fff);position:-webkit-sticky;position:sticky;z-index:2}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:-webkit-sticky;position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business,.fc .fc-view-harness-active>.fc-view{position:absolute;top:0;left:0;right:0;bottom:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-non-business{background:rgba(215,215,215,.3);background:var(--fc-non-business-color,rgba(215,215,215,.3))}.fc .fc-bg-event{background:var(--fc-bg-event-color,#8fdf82);opacity:.3;opacity:var(--fc-bg-event-opacity,.3)}.fc .fc-bg-event .fc-event-title{margin:.5em;font-size:.85em;font-size:var(--fc-small-font-size,.85em);font-style:italic}.fc .fc-highlight{background:rgba(188,232,241,.3);background:var(--fc-highlight-color,rgba(188,232,241,.3))}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:rgba(208,208,208,.3);background:var(--fc-neutral-bg-color,rgba(208,208,208,.3))}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer,.fc-h-event{display:block}.fc-event-selected .fc-event-resizer{border-radius:4px;border-radius:calc(var(--fc-event-resizer-dot-total-width,8px)/ 2);border-width:1px;border-width:var(--fc-event-resizer-dot-border-width,1px);width:8px;width:var(--fc-event-resizer-dot-total-width,8px);height:8px;height:var(--fc-event-resizer-dot-total-width,8px);border-style:solid;border-color:inherit;background:var(--fc-page-bg-color,#fff)}.fc-event-selected .fc-event-resizer:before{content:'';position:absolute;top:-20px;left:-20px;right:-20px;bottom:-20px}.fc-event-selected{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before{content:"";position:absolute;z-index:3;top:0;left:0;right:0;bottom:0}.fc-event-selected:after{content:"";background:rgba(0,0,0,.25);background:var(--fc-event-selected-overlay-color,rgba(0,0,0,.25));position:absolute;z-index:1;top:-1px;left:-1px;right:-1px;bottom:-1px}.fc-h-event{border:1px solid #3788d8;border:1px solid var(--fc-event-border-color,#3788d8);background-color:#3788d8;background-color:var(--fc-event-bg-color,#3788d8)}.fc-h-event .fc-event-main{color:#fff;color:var(--fc-event-text-color,#fff)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;vertical-align:top;left:0;right:0;max-width:100%;overflow:hidden}.fc-h-event.fc-event-selected:before{top:-10px;bottom:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-top-left-radius:0;border-bottom-left-radius:0;border-left-width:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-top-right-radius:0;border-bottom-right-radius:0;border-right-width:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{top:0;bottom:0;width:8px;width:var(--fc-event-resizer-thickness,8px)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:-4px;left:calc(var(--fc-event-resizer-thickness,8px)/ -2)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:-4px;right:calc(var(--fc-event-resizer-thickness,8px)/ -2)}.fc-h-event.fc-event-selected .fc-event-resizer{top:50%;margin-top:-4px;margin-top:calc(var(--fc-event-resizer-dot-total-width,8px)/ -2)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:-4px;left:calc(var(--fc-event-resizer-dot-total-width,8px)/ -2)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:-4px;right:calc(var(--fc-event-resizer-dot-total-width,8px)/ -2)}:root{--fc-daygrid-event-dot-width:8px;--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc .fc-popover{position:fixed;top:0;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc .fc-popover-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;opacity:.65;font-size:1.1em}.fc-theme-standard .fc-popover{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd);background:var(--fc-page-bg-color,#fff)}.fc-theme-standard .fc-popover-header{background:rgba(208,208,208,.3);background:var(--fc-neutral-bg-color,rgba(208,208,208,.3))}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{content:"";clear:both;display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:rgba(255,220,40,.15);background-color:var(--fc-today-bg-color,rgba(255,220,40,.15))}.fc .fc-daygrid-day-frame{position:relative;min-height:100%}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{position:relative;z-index:4;padding:4px}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{position:absolute;left:0;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{position:relative;min-height:2em}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{position:absolute;top:0;left:0;right:0}.fc .fc-daygrid-bg-harness{position:absolute;top:0;bottom:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{z-index:6;margin-top:1px}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:2px 3px 0}.fc .fc-daygrid-more-link{position:relative;z-index:4;cursor:pointer}.fc .fc-daygrid-week-number{position:absolute;z-index:5;top:0;padding:2px;min-width:1.5em;text-align:center;background-color:rgba(208,208,208,.3);background-color:var(--fc-neutral-bg-color,rgba(208,208,208,.3));color:grey;color:var(--fc-neutral-text-color,grey)}.fc .fc-more-popover{z-index:8}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-week-number{left:0;border-radius:0 0 3px}.fc-direction-rtl .fc-daygrid-week-number{right:0;border-radius:0 0 0 3px}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{position:relative;white-space:nowrap;border-radius:3px;font-size:.85em;font-size:var(--fc-small-font-size,.85em)}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{display:flex;align-items:center;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;min-width:0;overflow:hidden;font-weight:700}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{top:-10px;bottom:-10px}.fc-daygrid-event-dot{margin:0 4px;box-sizing:content-box;width:0;height:0;border:4px solid #3788d8;border:calc(var(--fc-daygrid-event-dot-width,8px)/ 2) solid var(--fc-event-border-color,#3788d8);border-radius:4px;border-radius:calc(var(--fc-daygrid-event-dot-width,8px)/ 2)}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}.fc-v-event{display:block;border:1px solid #3788d8;border:1px solid var(--fc-event-border-color,#3788d8);background-color:#3788d8;background-color:var(--fc-event-bg-color,#3788d8)}.fc-v-event .fc-event-main{color:#fff;color:var(--fc-event-text-color,#fff);height:100%}.fc-v-event .fc-event-main-frame{height:100%;display:flex;flex-direction:column}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{top:0;bottom:0;max-height:100%;overflow:hidden}.fc-v-event:not(.fc-event-start){border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.fc-v-event:not(.fc-event-end){border-bottom-width:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:8px;height:var(--fc-event-resizer-thickness,8px);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:-4px;top:calc(var(--fc-event-resizer-thickness,8px)/ -2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:-4px;bottom:calc(var(--fc-event-resizer-thickness,8px)/ -2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:-4px;margin-left:calc(var(--fc-event-resizer-dot-total-width,8px)/ -2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:-4px;top:calc(var(--fc-event-resizer-dot-total-width,8px)/ -2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:-4px;bottom:calc(var(--fc-event-resizer-dot-total-width,8px)/ -2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-body,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-slot{height:1.5em;border-bottom:0}.fc .fc-timegrid-slot:empty:before{content:'\00a0'}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{overflow:hidden;display:flex;align-items:center;justify-content:flex-end}.fc .fc-timegrid-axis-cushion{max-width:60px;flex-shrink:0}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{height:auto;position:absolute;top:0;right:0;bottom:0;left:0}.fc .fc-timegrid-col.fc-day-today{background-color:rgba(255,220,40,.15);background-color:var(--fc-today-bg-color,rgba(255,220,40,.15))}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-liquid-hack .fc-timegrid-col-frame{height:auto;position:absolute;top:0;right:0;bottom:0;left:0}.fc-media-screen .fc-timegrid-cols{position:absolute;top:0;left:0;right:0;bottom:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{position:absolute;top:0;left:0;right:0}.fc-media-screen .fc-timegrid-event-harness{position:absolute}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight,.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-bg-harness{position:absolute;left:0;right:0}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror{box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px var(--fc-page-bg-color,#fff)}.fc-timegrid-event{font-size:.85em;font-size:var(--fc-small-font-size,.85em);border-radius:3px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{white-space:nowrap;font-size:.85em;font-size:var(--fc-small-font-size,.85em);margin-bottom:1px}.fc-timegrid-event-condensed .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-condensed .fc-event-time:after{content:'\00a0-\00a0'}.fc-timegrid-event-condensed .fc-event-title{font-size:.85em;font-size:var(--fc-small-font-size,.85em)}.fc-media-screen .fc-timegrid-event{position:absolute;top:0;bottom:1px;left:0;right:0}.fc .fc-timegrid-now-indicator-line{position:absolute;z-index:4;left:0;right:0;border-style:solid;border-color:red;border-color:var(--fc-now-indicator-color,red);border-width:1px 0 0}.fc .fc-timegrid-now-indicator-arrow{position:absolute;z-index:4;margin-top:-5px;border-style:solid;border-color:red;border-color:var(--fc-now-indicator-color,red)}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent}.fc-theme-standard .fc-list{border:1px solid #ddd;border:1px solid var(--fc-border-color,#ddd)}.fc .fc-list-empty{background-color:rgba(208,208,208,.3);background-color:var(--fc-neutral-bg-color,rgba(208,208,208,.3));height:100%;display:flex;justify-content:center;align-items:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{width:100%;border-style:hidden}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{position:-webkit-sticky;position:sticky;top:0;background:var(--fc-page-bg-color,#fff)}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{content:"";clear:both;display:table}.fc-theme-standard .fc-list-day-cushion{background-color:rgba(208,208,208,.3);background-color:var(--fc-neutral-bg-color,rgba(208,208,208,.3))}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:#f5f5f5;background-color:var(--fc-list-event-hover-bg-color,#f5f5f5)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{display:inline-block;box-sizing:content-box;width:0;height:0;border:5px solid #3788d8;border:calc(var(--fc-list-event-dot-width,10px)/ 2) solid var(--fc-event-border-color,#3788d8);border-radius:5px;border-radius:calc(var(--fc-list-event-dot-width,10px)/ 2)}.fc .fc-list-event-title a{color:inherit}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}.fc-theme-bootstrap a:not([href]){color:inherit}
assets/vendor/fullcalendar/fullcalendar.min.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ /*!
2
+ FullCalendar v5.3.1
3
+ Docs & License: https://fullcalendar.io/
4
+ (c) 2020 Adam Shaw
5
+ */
6
+ var FullCalendar=function(e){"use strict";var t=function(e,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,n)};function n(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var r=function(){return(r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function o(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var i=arguments[t],a=0,s=i.length;a<s;a++,o++)r[o]=i[a];return r}var i,a,s,l,u,c,d,p={},f=[],h=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord/i;function v(e,t){for(var n in t)e[n]=t[n];return e}function g(e){var t=e.parentNode;t&&t.removeChild(e)}function m(e,t,n){var r,o=arguments,i={};for(r in t)"key"!==r&&"ref"!==r&&(i[r]=t[r]);if(arguments.length>3)for(n=[n],r=3;r<arguments.length;r++)n.push(o[r]);if(null!=n&&(i.children=n),"function"==typeof e&&null!=e.defaultProps)for(r in e.defaultProps)void 0===i[r]&&(i[r]=e.defaultProps[r]);return y(e,i,t&&t.key,t&&t.ref,null)}function y(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:o};return null==o&&(a.__v=a),i.vnode&&i.vnode(a),a}function E(e){return e.children}function S(e,t){this.props=e,this.context=t}function D(e,t){if(null==t)return e.__?D(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?D(e):null}function b(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return b(e)}}function C(e){(!e.__d&&(e.__d=!0)&&a.push(e)&&!s++||u!==i.debounceRendering)&&((u=i.debounceRendering)||l)(w)}function w(){for(var e;s=a.length;)e=a.sort((function(e,t){return e.__v.__b-t.__v.__b})),a=[],e.some((function(e){var t,n,r,o,i,a,s;e.__d&&(a=(i=(t=e).__v).__e,(s=t.__P)&&(n=[],(r=v({},i)).__v=r,o=_(s,i,r,t.__n,void 0!==s.ownerSVGElement,null,n,null==a?D(i):a),I(n,i),o!=a&&b(i)))}))}function R(e,t,n,r,o,i,a,s,l){var u,c,d,h,v,m,y,E=n&&n.__k||f,S=E.length;if(s==p&&(s=null!=i?i[0]:S?D(n,0):null),u=0,t.__k=T(t.__k,(function(n){if(null!=n){if(n.__=t,n.__b=t.__b+1,null===(d=E[u])||d&&n.key==d.key&&n.type===d.type)E[u]=void 0;else for(c=0;c<S;c++){if((d=E[c])&&n.key==d.key&&n.type===d.type){E[c]=void 0;break}d=null}if(h=_(e,n,d=d||p,r,o,i,a,s,l),(c=n.ref)&&d.ref!=c&&(y||(y=[]),d.ref&&y.push(d.ref,null,n),y.push(c,n.__c||h,n)),null!=h){var f;if(null==m&&(m=h),void 0!==n.__d)f=n.__d,n.__d=void 0;else if(i==d||h!=s||null==h.parentNode){e:if(null==s||s.parentNode!==e)e.appendChild(h),f=null;else{for(v=s,c=0;(v=v.nextSibling)&&c<S;c+=2)if(v==h)break e;e.insertBefore(h,s),f=s}"option"==t.type&&(e.value="")}s=void 0!==f?f:h.nextSibling,"function"==typeof t.type&&(t.__d=s)}else s&&d.__e==s&&s.parentNode!=e&&(s=D(d))}return u++,n})),t.__e=m,null!=i&&"function"!=typeof t.type)for(u=i.length;u--;)null!=i[u]&&g(i[u]);for(u=S;u--;)null!=E[u]&&H(E[u],E[u]);if(y)for(u=0;u<y.length;u++)N(y[u],y[++u],y[++u])}function T(e,t,n){if(null==n&&(n=[]),null==e||"boolean"==typeof e)t&&n.push(t(null));else if(Array.isArray(e))for(var r=0;r<e.length;r++)T(e[r],t,n);else n.push(t?t("string"==typeof e||"number"==typeof e?y(null,e,null,null,e):null!=e.__e||null!=e.__c?y(e.type,e.props,e.key,null,e.__v):e):e);return n}function k(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]="number"==typeof n&&!1===h.test(t)?n+"px":null==n?"":n}function M(e,t,n,r,o){var i,a,s,l,u;if(o?"className"===t&&(t="class"):"class"===t&&(t="className"),"style"===t)if(i=e.style,"string"==typeof n)i.cssText=n;else{if("string"==typeof r&&(i.cssText="",r=null),r)for(l in r)n&&l in n||k(i,l,"");if(n)for(u in n)r&&n[u]===r[u]||k(i,u,n[u])}else"o"===t[0]&&"n"===t[1]?(a=t!==(t=t.replace(/Capture$/,"")),s=t.toLowerCase(),t=(s in e?s:t).slice(2),n?(r||e.addEventListener(t,x,a),(e.l||(e.l={}))[t]=n):e.removeEventListener(t,x,a)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&!o&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(t!==(t=t.replace(/^xlink:?/,""))?null==n||!1===n?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),n):null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function x(e){this.l[e.type](i.event?i.event(e):e)}function _(e,t,n,r,o,a,s,l,u){var c,d,p,f,h,g,m,y,D,b,C=t.type;if(void 0!==t.constructor)return null;(c=i.__b)&&c(t);try{e:if("function"==typeof C){if(y=t.props,D=(c=C.contextType)&&r[c.__c],b=c?D?D.props.value:c.__:r,n.__c?m=(d=t.__c=n.__c).__=d.__E:("prototype"in C&&C.prototype.render?t.__c=d=new C(y,b):(t.__c=d=new S(y,b),d.constructor=C,d.render=O),D&&D.sub(d),d.props=y,d.state||(d.state={}),d.context=b,d.__n=r,p=d.__d=!0,d.__h=[]),null==d.__s&&(d.__s=d.state),null!=C.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=v({},d.__s)),v(d.__s,C.getDerivedStateFromProps(y,d.__s))),f=d.props,h=d.state,p)null==C.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==C.getDerivedStateFromProps&&y!==f&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(y,b),!d.__e&&null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(y,d.__s,b)||t.__v===n.__v&&!d.__){for(d.props=y,d.state=d.__s,t.__v!==n.__v&&(d.__d=!1),d.__v=t,t.__e=n.__e,t.__k=n.__k,d.__h.length&&s.push(d),c=0;c<t.__k.length;c++)t.__k[c]&&(t.__k[c].__=t);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(y,d.__s,b),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(f,h,g)}))}d.context=b,d.props=y,d.state=d.__s,(c=i.__r)&&c(t),d.__d=!1,d.__v=t,d.__P=e,c=d.render(d.props,d.state,d.context),t.__k=null!=c&&c.type==E&&null==c.key?c.props.children:Array.isArray(c)?c:[c],null!=d.getChildContext&&(r=v(v({},r),d.getChildContext())),p||null==d.getSnapshotBeforeUpdate||(g=d.getSnapshotBeforeUpdate(f,h)),R(e,t,n,r,o,a,s,l,u),d.base=t.__e,d.__h.length&&s.push(d),m&&(d.__E=d.__=null),d.__e=!1}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=P(n.__e,t,n,r,o,a,s,u);(c=i.diffed)&&c(t)}catch(e){t.__v=null,i.__e(e,t,n)}return t.__e}function I(e,t){i.__c&&i.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){i.__e(e,t.__v)}}))}function P(e,t,n,r,o,i,a,s){var l,u,c,d,h,v=n.props,g=t.props;if(o="svg"===t.type||o,null!=i)for(l=0;l<i.length;l++)if(null!=(u=i[l])&&((null===t.type?3===u.nodeType:u.localName===t.type)||e==u)){e=u,i[l]=null;break}if(null==e){if(null===t.type)return document.createTextNode(g);e=o?document.createElementNS("http://www.w3.org/2000/svg",t.type):document.createElement(t.type,g.is&&{is:g.is}),i=null,s=!1}if(null===t.type)v!==g&&e.data!=g&&(e.data=g);else{if(null!=i&&(i=f.slice.call(e.childNodes)),c=(v=n.props||p).dangerouslySetInnerHTML,d=g.dangerouslySetInnerHTML,!s){if(v===p)for(v={},h=0;h<e.attributes.length;h++)v[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&c&&d.__html==c.__html||(e.innerHTML=d&&d.__html||""))}(function(e,t,n,r,o){var i;for(i in n)"children"===i||"key"===i||i in t||M(e,i,null,n[i],r);for(i in t)o&&"function"!=typeof t[i]||"children"===i||"key"===i||"value"===i||"checked"===i||n[i]===t[i]||M(e,i,t[i],n[i],r)})(e,g,v,o,s),d?t.__k=[]:(t.__k=t.props.children,R(e,t,n,r,"foreignObject"!==t.type&&o,i,a,p,s)),s||("value"in g&&void 0!==(l=g.value)&&l!==e.value&&M(e,"value",l,v.value,!1),"checked"in g&&void 0!==(l=g.checked)&&l!==e.checked&&M(e,"checked",l,v.checked,!1))}return e}function N(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){i.__e(e,n)}}function H(e,t,n){var r,o,a;if(i.unmount&&i.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||N(r,null,t)),n||"function"==typeof e.type||(n=null!=(o=e.__e)),e.__e=e.__d=void 0,null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){i.__e(e,t)}r.base=r.__P=null}if(r=e.__k)for(a=0;a<r.length;a++)r[a]&&H(r[a],t,n);null!=o&&g(o)}function O(e,t,n){return this.constructor(e,n)}function A(e,t,n){var r,o,a;i.__&&i.__(e,t),o=(r=n===c)?null:n&&n.__k||t.__k,e=m(E,null,[e]),a=[],_(t,(r?t:n||t).__k=e,o||p,p,void 0!==t.ownerSVGElement,n&&!r?[n]:o?null:f.slice.call(t.childNodes),a,n||p,r),I(a,e)}i={__e:function(e,t){for(var n,r;t=t.__;)if((n=t.__c)&&!n.__)try{if(n.constructor&&null!=n.constructor.getDerivedStateFromError&&(r=!0,n.setState(n.constructor.getDerivedStateFromError(e))),null!=n.componentDidCatch&&(r=!0,n.componentDidCatch(e)),r)return C(n.__E=n)}catch(t){e=t}throw e}},S.prototype.setState=function(e,t){var n;n=this.__s!==this.state?this.__s:this.__s=v({},this.state),"function"==typeof e&&(e=e(n,this.props)),e&&v(n,e),null!=e&&this.__v&&(t&&this.__h.push(t),C(this))},S.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),C(this))},S.prototype.render=E,a=[],s=0,l="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=p,d=0,("undefined"!=typeof globalThis?globalThis:window).FullCalendarVDom={Component:S,createElement:m,render:A,createRef:function(){return{}},Fragment:E,createContext:function(e){var t=function(e){var t={},n={__c:"__cC"+d++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var r,o=this;return this.getChildContext||(r=[],this.getChildContext=function(){return t[n.__c]=o,t},this.shouldComponentUpdate=function(e){o.props.value!==e.value&&r.some((function(t){t.context=e.value,C(t)}))},this.sub=function(e){r.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){r.splice(r.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Consumer.contextType=n,n.Provider.__=n,n}(e),n=t.Provider;return t.Provider=function(){var e=this,t=!this.getChildContext,r=n.apply(this,arguments);if(t){var o=[];this.shouldComponentUpdate=function(t){e.props.value!==t.value&&o.some((function(e){e.context=t.value,e.forceUpdate()}))},this.sub=function(e){o.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){o.splice(o.indexOf(e),1),t&&t.call(e)}}}return r},t},flushToDom:function(){var e=i.debounceRendering,t=[];i.debounceRendering=function(e){t.push(e)},A(m(U,{}),document.createElement("div"));for(;t.length;)t.shift()();i.debounceRendering=e}};var U=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){return m("div",{})},t.prototype.componentDidMount=function(){this.setState({})},t}(S);var L=function(){function e(e,t){this.context=e,this.internalEventSource=t}return e.prototype.remove=function(){this.context.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:this.internalEventSource.sourceId})},e.prototype.refetch=function(){this.context.dispatch({type:"FETCH_EVENT_SOURCES",sourceIds:[this.internalEventSource.sourceId]})},Object.defineProperty(e.prototype,"id",{get:function(){return this.internalEventSource.publicId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this.internalEventSource.meta.url},enumerable:!1,configurable:!0}),e}();function W(e){e.parentNode&&e.parentNode.removeChild(e)}function V(e,t){if(e.closest)return e.closest(t);if(!document.documentElement.contains(e))return null;do{if(z(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function z(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector).call(e,t)}function F(e,t){for(var n=e instanceof HTMLElement?[e]:e,r=[],o=0;o<n.length;o++)for(var i=n[o].querySelectorAll(t),a=0;a<i.length;a++)r.push(i[a]);return r}var B=/(top|left|right|bottom|width|height)$/i;function j(e,t){for(var n in t)G(e,n,t[n])}function G(e,t,n){null==n?e.style[t]="":"number"==typeof n&&B.test(t)?e.style[t]=n+"px":e.style[t]=n}function q(e){e.preventDefault()}function Y(e,t){return function(n){var r=V(n.target,e);r&&t.call(r,n,r)}}function Z(e,t,n,r){var o=Y(n,r);return e.addEventListener(t,o),function(){e.removeEventListener(t,o)}}var X=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function K(e,t){var n=function(r){t(r),X.forEach((function(t){e.removeEventListener(t,n)}))};X.forEach((function(t){e.addEventListener(t,n)}))}var J=0;function $(){return String(J++)}function Q(){document.body.classList.add("fc-not-allowed")}function ee(){document.body.classList.remove("fc-not-allowed")}function te(e){e.classList.add("fc-unselectable"),e.addEventListener("selectstart",q)}function ne(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",q)}function re(e){e.addEventListener("contextmenu",q)}function oe(e){e.removeEventListener("contextmenu",q)}function ie(e){var t,n,r=[],o=[];for("string"==typeof e?o=e.split(/\s*,\s*/):"function"==typeof e?o=[e]:Array.isArray(e)&&(o=e),t=0;t<o.length;t++)"string"==typeof(n=o[t])?r.push("-"===n.charAt(0)?{field:n.substring(1),order:-1}:{field:n,order:1}):"function"==typeof n&&r.push({func:n});return r}function ae(e,t,n){var r,o;for(r=0;r<n.length;r++)if(o=se(e,t,n[r]))return o;return 0}function se(e,t,n){return n.func?n.func(e,t):le(e[n.field],t[n.field])*(n.order||1)}function le(e,t){return e||t?null==t?-1:null==e?1:"string"==typeof e||"string"==typeof t?String(e).localeCompare(String(t)):e-t:0}function ue(e,t){var n=String(e);return"000".substr(0,t-n.length)+n}function ce(e,t){return e-t}function de(e){return e%1==0}function pe(e){var t=e.querySelector(".fc-scrollgrid-shrink-frame"),n=e.querySelector(".fc-scrollgrid-shrink-cushion");if(!t)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!n)throw new Error("needs fc-scrollgrid-shrink-cushion className");return e.getBoundingClientRect().width-t.getBoundingClientRect().width+n.getBoundingClientRect().width}var fe=["sun","mon","tue","wed","thu","fri","sat"];function he(e,t){var n=ke(e);return n[2]+=7*t,Me(n)}function ve(e,t){var n=ke(e);return n[2]+=t,Me(n)}function ge(e,t){var n=ke(e);return n[6]+=t,Me(n)}function me(e,t){return ye(e,t)/7}function ye(e,t){return(t.valueOf()-e.valueOf())/864e5}function Ee(e,t){var n=be(e),r=be(t);return{years:0,months:0,days:Math.round(ye(n,r)),milliseconds:t.valueOf()-r.valueOf()-(e.valueOf()-n.valueOf())}}function Se(e,t){var n=De(e,t);return null!==n&&n%7==0?n/7:null}function De(e,t){return _e(e)===_e(t)?Math.round(ye(e,t)):null}function be(e){return Me([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function Ce(e,t,n,r){var o=Me([t,0,1+we(t,n,r)]),i=be(e),a=Math.round(ye(o,i));return Math.floor(a/7)+1}function we(e,t,n){var r=7+t-n;return-((7+Me([e,0,r]).getUTCDay()-t)%7)+r-1}function Re(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function Te(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function ke(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function Me(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC.apply(Date,e))}function xe(e){return!isNaN(e.valueOf())}function _e(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}function Ie(e,t,n,r){return{instanceId:$(),defId:e,range:t,forcedStartTzo:null==n?null:n,forcedEndTzo:null==r?null:r}}var Pe=Object.prototype.hasOwnProperty;function Ne(e,t){var n={};if(t)for(var r in t){for(var o=[],i=e.length-1;i>=0;i--){var a=e[i][r];if("object"==typeof a&&a)o.unshift(a);else if(void 0!==a){n[r]=a;break}}o.length&&(n[r]=Ne(o))}for(i=e.length-1;i>=0;i--){var s=e[i];for(var l in s)l in n||(n[l]=s[l])}return n}function He(e,t){var n={};for(var r in e)t(e[r],r)&&(n[r]=e[r]);return n}function Oe(e,t){var n={};for(var r in e)n[r]=t(e[r],r);return n}function Ae(e){for(var t={},n=0,r=e;n<r.length;n++){t[r[n]]=!0}return t}function Ue(e){var t=[];for(var n in e)t.push(e[n]);return t}function Le(e,t){if(e===t)return!0;for(var n in e)if(Pe.call(e,n)&&!(n in t))return!1;for(var n in t)if(Pe.call(t,n)&&e[n]!==t[n])return!1;return!0}function We(e,t){var n=[];for(var r in e)Pe.call(e,r)&&(r in t||n.push(r));for(var r in t)Pe.call(t,r)&&e[r]!==t[r]&&n.push(r);return n}function Ve(e,t,n){if(void 0===n&&(n={}),e===t)return!0;for(var r in t)if(!(r in e)||!ze(e[r],t[r],n[r]))return!1;for(var r in e)if(!(r in t))return!1;return!0}function ze(e,t,n){return e===t||!0===n||!!n&&n(e,t)}function Fe(e,t,n,r){void 0===t&&(t=0),void 0===r&&(r=1);var o=[];null==n&&(n=Object.keys(e).length);for(var i=t;i<n;i+=r){var a=e[i];void 0!==a&&o.push(a)}return o}function Be(e,t,n){var r=n.dateEnv,o=n.pluginHooks,i=n.options,a=e.defs,s=e.instances;for(var l in s=He(s,(function(e){return!a[e.defId].recurringDef})),a){var u=a[l];if(u.recurringDef){var c=u.recurringDef.duration;c||(c=u.allDay?i.defaultAllDayEventDuration:i.defaultTimedEventDuration);for(var d=0,p=je(u,c,t,r,o.recurringTypes);d<p.length;d++){var f=p[d],h=Ie(l,{start:f,end:r.add(f,c)});s[h.instanceId]=h}}}return{defs:a,instances:s}}function je(e,t,n,r,o){var i=o[e.recurringDef.typeId].expand(e.recurringDef.typeData,{start:r.subtract(n.start,t),end:n.end},r);return e.allDay&&(i=i.map(be)),i}var Ge=["years","months","days","milliseconds"],qe=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function Ye(e,t){var n;return"string"==typeof e?function(e){var t=qe.exec(e);if(t){var n=t[1]?-1:1;return{years:0,months:0,days:n*(t[2]?parseInt(t[2],10):0),milliseconds:n*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}(e):"object"==typeof e&&e?Ze(e):"number"==typeof e?Ze(((n={})[t||"milliseconds"]=e,n)):null}function Ze(e){var t={years:e.years||e.year||0,months:e.months||e.month||0,days:e.days||e.day||0,milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)},n=e.weeks||e.week;return n&&(t.days+=7*n,t.specifiedWeeks=!0),t}function Xe(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}}function Ke(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}}function Je(e){return $e(e)/864e5}function $e(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function Qe(e,t){for(var n=null,r=0;r<Ge.length;r++){var o=Ge[r];if(t[o]){var i=e[o]/t[o];if(!de(i)||null!==n&&n!==i)return null;n=i}else if(e[o])return null}return n}function et(e){var t=e.milliseconds;if(t){if(t%1e3!=0)return{unit:"millisecond",value:t};if(t%6e4!=0)return{unit:"second",value:t/1e3};if(t%36e5!=0)return{unit:"minute",value:t/6e4};if(t)return{unit:"hour",value:t/36e5}}return e.days?e.specifiedWeeks&&e.days%7==0?{unit:"week",value:e.days/7}:{unit:"day",value:e.days}:e.months?{unit:"month",value:e.months}:e.years?{unit:"year",value:e.years}:{unit:"millisecond",value:0}}function tt(e){return e.toISOString().replace(/T.*$/,"")}function nt(e){return ue(e.getUTCHours(),2)+":"+ue(e.getUTCMinutes(),2)+":"+ue(e.getUTCSeconds(),2)}function rt(e,t){void 0===t&&(t=!1);var n=e<0?"-":"+",r=Math.abs(e),o=Math.floor(r/60),i=Math.round(r%60);return t?n+ue(o,2)+":"+ue(i,2):"GMT"+n+o+(i?":"+ue(i,2):"")}function ot(e,t,n){if(e===t)return!0;var r,o=e.length;if(o!==t.length)return!1;for(r=0;r<o;r++)if(!(n?n(e[r],t[r]):e[r]===t[r]))return!1;return!0}function it(e,t,n){var r,o;return function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];if(r){if(!ot(r,i)){n&&n(o);var s=e.apply(this,i);t&&t(s,o)||(o=s)}}else o=e.apply(this,i);return r=i,o}}function at(e,t,n){var r,o;return function(i){if(r){if(!Le(r,i)){n&&n(o);var a=e.call(this,i);t&&t(a,o)||(o=a)}}else o=e.call(this,i);return r=i,o}}var st={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0},lt={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},ut=/\s*([ap])\.?m\.?/i,ct=/,/g,dt=/\s+/g,pt=/\u200e/g,ft=/UTC|GMT/,ht=function(){function e(e){var t={},n={},r=0;for(var o in e)o in st?(n[o]=e[o],r=Math.max(st[o],r)):(t[o]=e[o],o in lt&&(r=Math.max(lt[o],r)));this.standardDateProps=t,this.extendedSettings=n,this.severity=r,this.buildFormattingFunc=it(vt)}return e.prototype.format=function(e,t){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,t)(e)},e.prototype.formatRange=function(e,t,n,r){var o=this.standardDateProps,i=this.extendedSettings,a=function(e,t,n){if(n.getMarkerYear(e)!==n.getMarkerYear(t))return 5;if(n.getMarkerMonth(e)!==n.getMarkerMonth(t))return 4;if(n.getMarkerDay(e)!==n.getMarkerDay(t))return 2;if(_e(e)!==_e(t))return 1;return 0}(e.marker,t.marker,n.calendarSystem);if(!a)return this.format(e,n);var s=a;!(s>1)||"numeric"!==o.year&&"2-digit"!==o.year||"numeric"!==o.month&&"2-digit"!==o.month||"numeric"!==o.day&&"2-digit"!==o.day||(s=1);var l=this.format(e,n),u=this.format(t,n);if(l===u)return l;var c=vt(function(e,t){var n={};for(var r in e)(!(r in lt)||lt[r]<=t)&&(n[r]=e[r]);return n}(o,s),i,n),d=c(e),p=c(t),f=function(e,t,n,r){var o=0;for(;o<e.length;){var i=e.indexOf(t,o);if(-1===i)break;var a=e.substr(0,i);o=i+t.length;for(var s=e.substr(o),l=0;l<n.length;){var u=n.indexOf(r,l);if(-1===u)break;var c=n.substr(0,u);l=u+r.length;var d=n.substr(l);if(a===c&&s===d)return{before:a,after:s}}}return null}(l,d,u,p),h=i.separator||r||n.defaultSeparator||"";return f?f.before+d+h+p+f.after:l+h+u},e.prototype.getLargestUnit=function(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";case 2:return"day";default:return"time"}},e}();function vt(e,t,n){var o=Object.keys(e).length;return 1===o&&"short"===e.timeZoneName?function(e){return rt(e.timeZoneOffset)}:0===o&&t.week?function(e){return function(e,t,n,r){var o=[];"narrow"===r?o.push(t):"short"===r&&o.push(t," ");o.push(n.simpleNumberFormat.format(e)),"rtl"===n.options.direction&&o.reverse();return o.join("")}(n.computeWeekNumber(e.marker),n.weekText,n.locale,t.week)}:function(e,t,n){e=r({},e),t=r({},t),function(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit"));"long"===e.timeZoneName&&(e.timeZoneName="short");t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}(e,t),e.timeZone="UTC";var o,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){var a=r({},e);delete a.minute,o=new Intl.DateTimeFormat(n.locale.codes,a)}return function(r){var a=r.marker;return function(e,t,n,r,o){e=e.replace(pt,""),"short"===n.timeZoneName&&(e=function(e,t){var n=!1;e=e.replace(ft,(function(){return n=!0,t})),n||(e+=" "+t);return e}(e,"UTC"===o.timeZone||null==t.timeZoneOffset?"UTC":rt(t.timeZoneOffset)));r.omitCommas&&(e=e.replace(ct,"").trim());r.omitZeroMinute&&(e=e.replace(":00",""));!1===r.meridiem?e=e.replace(ut,"").trim():"narrow"===r.meridiem?e=e.replace(ut,(function(e,t){return t.toLocaleLowerCase()})):"short"===r.meridiem?e=e.replace(ut,(function(e,t){return t.toLocaleLowerCase()+"m"})):"lowercase"===r.meridiem&&(e=e.replace(ut,(function(e){return e.toLocaleLowerCase()})));return e=(e=e.replace(dt," ")).trim()}((o&&!a.getUTCMinutes()?o:i).format(a),r,e,t,n)}}(e,t,n)}function gt(e,t){var n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}function mt(e,t,n,r){var o=gt(e,n.calendarSystem);return{date:o,start:o,end:t?gt(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,defaultSeparator:r||n.defaultSeparator}}var yt=function(){function e(e){this.cmdStr=e}return e.prototype.format=function(e,t,n){return t.cmdFormatter(this.cmdStr,mt(e,null,t,n))},e.prototype.formatRange=function(e,t,n,r){return n.cmdFormatter(this.cmdStr,mt(e,t,n,r))},e}(),Et=function(){function e(e){this.func=e}return e.prototype.format=function(e,t,n){return this.func(mt(e,null,t,n))},e.prototype.formatRange=function(e,t,n,r){return this.func(mt(e,t,n,r))},e}();function St(e){return"object"==typeof e&&e?new ht(e):"string"==typeof e?new yt(e):"function"==typeof e?new Et(e):void 0}var Dt={navLinkDayClick:_t,navLinkWeekClick:_t,duration:Ye,bootstrapFontAwesome:_t,buttonIcons:_t,customButtons:_t,defaultAllDayEventDuration:Ye,defaultTimedEventDuration:Ye,nextDayThreshold:Ye,scrollTime:Ye,slotMinTime:Ye,slotMaxTime:Ye,dayPopoverFormat:St,slotDuration:Ye,snapDuration:Ye,headerToolbar:_t,footerToolbar:_t,defaultRangeSeparator:String,titleRangeSeparator:String,forceEventDuration:Boolean,dayHeaders:Boolean,dayHeaderFormat:St,dayHeaderClassNames:_t,dayHeaderContent:_t,dayHeaderDidMount:_t,dayHeaderWillUnmount:_t,dayCellClassNames:_t,dayCellContent:_t,dayCellDidMount:_t,dayCellWillUnmount:_t,initialView:String,aspectRatio:Number,weekends:Boolean,weekNumberCalculation:_t,weekNumbers:Boolean,weekNumberClassNames:_t,weekNumberContent:_t,weekNumberDidMount:_t,weekNumberWillUnmount:_t,editable:Boolean,viewClassNames:_t,viewDidMount:_t,viewWillUnmount:_t,nowIndicator:Boolean,nowIndicatorClassNames:_t,nowIndicatorContent:_t,nowIndicatorDidMount:_t,nowIndicatorWillUnmount:_t,showNonCurrentDates:Boolean,lazyFetching:Boolean,startParam:String,endParam:String,timeZoneParam:String,timeZone:String,locales:_t,locale:_t,themeSystem:String,dragRevertDuration:Number,dragScroll:Boolean,allDayMaintainDuration:Boolean,unselectAuto:Boolean,dropAccept:_t,eventOrder:ie,handleWindowResize:Boolean,windowResizeDelay:Number,longPressDelay:Number,eventDragMinDistance:Number,expandRows:Boolean,height:_t,contentHeight:_t,direction:String,weekNumberFormat:St,eventResizableFromStart:Boolean,displayEventTime:Boolean,displayEventEnd:Boolean,weekText:String,progressiveEventRendering:Boolean,businessHours:_t,initialDate:_t,now:_t,eventDataTransform:_t,stickyHeaderDates:_t,stickyFooterScrollbar:_t,viewHeight:_t,defaultAllDay:Boolean,eventSourceFailure:_t,eventSourceSuccess:_t,eventDisplay:String,eventStartEditable:Boolean,eventDurationEditable:Boolean,eventOverlap:_t,eventConstraint:_t,eventAllow:_t,eventBackgroundColor:String,eventBorderColor:String,eventTextColor:String,eventColor:String,eventClassNames:_t,eventContent:_t,eventDidMount:_t,eventWillUnmount:_t,selectConstraint:_t,selectOverlap:_t,selectAllow:_t,droppable:Boolean,unselectCancel:String,slotLabelFormat:_t,slotLaneClassNames:_t,slotLaneContent:_t,slotLaneDidMount:_t,slotLaneWillUnmount:_t,slotLabelClassNames:_t,slotLabelContent:_t,slotLabelDidMount:_t,slotLabelWillUnmount:_t,dayMaxEvents:_t,dayMaxEventRows:_t,dayMinWidth:Number,slotLabelInterval:Ye,allDayText:String,allDayClassNames:_t,allDayContent:_t,allDayDidMount:_t,allDayWillUnmount:_t,slotMinWidth:Number,navLinks:Boolean,eventTimeFormat:St,rerenderDelay:Number,moreLinkText:_t,selectMinDistance:Number,selectable:Boolean,selectLongPressDelay:Number,eventLongPressDelay:Number,selectMirror:Boolean,eventMinHeight:Number,slotEventOverlap:Boolean,plugins:_t,firstDay:Number,dayCount:Number,dateAlignment:String,dateIncrement:Ye,hiddenDays:_t,monthMode:Boolean,fixedWeekCount:Boolean,validRange:_t,visibleRange:_t,titleFormat:_t,noEventsText:String},bt={eventDisplay:"auto",defaultRangeSeparator:" - ",titleRangeSeparator:" – ",defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00",dayHeaders:!0,initialView:"",aspectRatio:1.35,headerToolbar:{start:"title",center:"",end:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,nowIndicator:!1,scrollTime:"06:00:00",slotMinTime:"00:00:00",slotMaxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",locales:[],locale:"",themeSystem:"standard",dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5,expandRows:!1,navLinks:!1,selectable:!1},Ct={datesSet:_t,eventsSet:_t,eventAdd:_t,eventChange:_t,eventRemove:_t,windowResize:_t,eventClick:_t,eventMouseEnter:_t,eventMouseLeave:_t,select:_t,unselect:_t,loading:_t,_unmount:_t,_beforeprint:_t,_afterprint:_t,_noEventDrop:_t,_noEventResize:_t,_resize:_t,_scrollRequest:_t},wt={buttonText:_t,views:_t,plugins:_t,initialEvents:_t,events:_t,eventSources:_t},Rt={headerToolbar:Tt,footerToolbar:Tt,buttonText:Tt,buttonIcons:Tt};function Tt(e,t){return"object"==typeof e&&"object"==typeof t&&e&&t?Le(e,t):e===t}var kt={type:String,component:_t,buttonText:String,buttonTextKey:String,dateProfileGeneratorClass:_t,usesMinMaxTime:Boolean,classNames:_t,content:_t,didMount:_t,willUnmount:_t};function Mt(e){return Ne(e,Rt)}function xt(e,t){var n={},r={};for(var o in t)o in e&&(n[o]=t[o](e[o]));for(var o in e)o in t||(r[o]=e[o]);return{refined:n,extra:r}}function _t(e){return e}function It(e,t,n,r){for(var o={defs:{},instances:{}},i=Zt(n),a=0,s=e;a<s.length;a++){var l=qt(s[a],t,n,r,i);l&&Pt(l,o)}return o}function Pt(e,t){return void 0===t&&(t={defs:{},instances:{}}),t.defs[e.def.defId]=e.def,e.instance&&(t.instances[e.instance.instanceId]=e.instance),t}function Nt(e,t){var n=e.instances[t];if(n){var r=e.defs[n.defId],o=At(e,(function(e){return t=r,n=e,Boolean(t.groupId&&t.groupId===n.groupId);var t,n}));return o.defs[r.defId]=r,o.instances[n.instanceId]=n,o}return{defs:{},instances:{}}}function Ht(){return{defs:{},instances:{}}}function Ot(e,t){return{defs:r(r({},e.defs),t.defs),instances:r(r({},e.instances),t.instances)}}function At(e,t){var n=He(e.defs,t),r=He(e.instances,(function(e){return n[e.defId]}));return{defs:n,instances:r}}function Ut(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}var Lt={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:_t,overlap:_t,allow:_t,className:Ut,classNames:Ut,color:String,backgroundColor:String,borderColor:String,textColor:String};function Wt(e,t){var n=function(e,t){return Array.isArray(e)?It(e,null,t,!0):"object"==typeof e&&e?It([e],null,t,!0):null!=e?String(e):null}(e.constraint,t);return{display:e.display||null,startEditable:null!=e.startEditable?e.startEditable:e.editable,durationEditable:null!=e.durationEditable?e.durationEditable:e.editable,constraints:null!=n?[n]:[],overlap:null!=e.overlap?e.overlap:null,allows:null!=e.allow?[e.allow]:[],backgroundColor:e.backgroundColor||e.color||"",borderColor:e.borderColor||e.color||"",textColor:e.textColor||"",classNames:(e.className||[]).concat(e.classNames||[])}}function Vt(e){return e.reduce(zt,Ft)}function zt(e,t){return{display:null!=t.display?t.display:e.display,startEditable:null!=t.startEditable?t.startEditable:e.startEditable,durationEditable:null!=t.durationEditable?t.durationEditable:e.durationEditable,constraints:e.constraints.concat(t.constraints),overlap:"boolean"==typeof t.overlap?t.overlap:e.overlap,allows:e.allows.concat(t.allows),backgroundColor:t.backgroundColor||e.backgroundColor,borderColor:t.borderColor||e.borderColor,textColor:t.textColor||e.textColor,classNames:e.classNames.concat(t.classNames)}}var Ft={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]},Bt={id:String,groupId:String,title:String,url:String},jt={start:_t,end:_t,date:_t,allDay:Boolean},Gt=r(r(r({},Bt),jt),{extendedProps:_t});function qt(e,t,n,r,o){void 0===o&&(o=Zt(n));var i=Yt(e,n,o),a=i.refined,s=i.extra,l=function(e,t){var n=null;e&&(n=e.defaultAllDay);null==n&&(n=t.options.defaultAllDay);return n}(t,n),u=function(e,t,n,r){for(var o=0;o<r.length;o++){var i=r[o].parse(e,n);if(i){var a=e.allDay;return null==a&&null==(a=t)&&null==(a=i.allDayGuess)&&(a=!1),{allDay:a,duration:i.duration,typeData:i.typeData,typeId:o}}}return null}(a,l,n.dateEnv,n.pluginHooks.recurringTypes);if(u)return(c=Xt(a,s,t?t.sourceId:"",u.allDay,Boolean(u.duration),n)).recurringDef={typeId:u.typeId,typeData:u.typeData,duration:u.duration},{def:c,instance:null};var c,d=function(e,t,n,r){var o,i,a=e.allDay,s=null,l=!1,u=null,c=null!=e.start?e.start:e.date;if(o=n.dateEnv.createMarkerMeta(c))s=o.marker;else if(!r)return null;null!=e.end&&(i=n.dateEnv.createMarkerMeta(e.end));null==a&&(a=null!=t?t:(!o||o.isTimeUnspecified)&&(!i||i.isTimeUnspecified));a&&s&&(s=be(s));i&&(u=i.marker,a&&(u=be(u)),s&&u<=s&&(u=null));u?l=!0:r||(l=n.options.forceEventDuration||!1,u=n.dateEnv.add(s,a?n.options.defaultAllDayEventDuration:n.options.defaultTimedEventDuration));return{allDay:a,hasEnd:l,range:{start:s,end:u},forcedStartTzo:o?o.forcedTzo:null,forcedEndTzo:i?i.forcedTzo:null}}(a,l,n,r);return d?{def:c=Xt(a,s,t?t.sourceId:"",d.allDay,d.hasEnd,n),instance:Ie(c.defId,d.range,d.forcedStartTzo,d.forcedEndTzo)}:null}function Yt(e,t,n){return void 0===n&&(n=Zt(t)),xt(e,n)}function Zt(e){return r(r(r({},Lt),Gt),e.pluginHooks.eventRefiners)}function Xt(e,t,n,o,i,a){for(var s={title:e.title||"",groupId:e.groupId||"",publicId:e.id||"",url:e.url||"",recurringDef:null,defId:$(),sourceId:n,allDay:o,hasEnd:i,ui:Wt(e,a),extendedProps:r(r({},e.extendedProps||{}),t)},l=0,u=a.pluginHooks.eventDefMemberAdders;l<u.length;l++){var c=u[l];r(s,c(e))}return Object.freeze(s.ui.classNames),Object.freeze(s.extendedProps),s}function Kt(e){var t=Math.floor(ye(e.start,e.end))||1,n=be(e.start);return{start:n,end:ve(n,t)}}function Jt(e,t){void 0===t&&(t=Ye(0));var n=null,r=null;if(e.end){r=be(e.end);var o=e.end.valueOf()-r.valueOf();o&&o>=$e(t)&&(r=ve(r,1))}return e.start&&(n=be(e.start),r&&r<=n&&(r=ve(n,1))),{start:n,end:r}}function $t(e){var t=Jt(e);return ye(t.start,t.end)>1}function Qt(e,t,n,r){return"year"===r?Ye(n.diffWholeYears(e,t),"year"):"month"===r?Ye(n.diffWholeMonths(e,t),"month"):Ee(e,t)}function en(e,t){var n,r,o=[],i=t.start;for(e.sort(tn),n=0;n<e.length;n++)(r=e[n]).start>i&&o.push({start:i,end:r.start}),r.end>i&&(i=r.end);return i<t.end&&o.push({start:i,end:t.end}),o}function tn(e,t){return e.start.valueOf()-t.start.valueOf()}function nn(e,t){var n=e.start,r=e.end,o=null;return null!==t.start&&(n=null===n?t.start:new Date(Math.max(n.valueOf(),t.start.valueOf()))),null!=t.end&&(r=null===r?t.end:new Date(Math.min(r.valueOf(),t.end.valueOf()))),(null===n||null===r||n<r)&&(o={start:n,end:r}),o}function rn(e,t){return(null===e.start?null:e.start.valueOf())===(null===t.start?null:t.start.valueOf())&&(null===e.end?null:e.end.valueOf())===(null===t.end?null:t.end.valueOf())}function on(e,t){return(null===e.end||null===t.start||e.end>t.start)&&(null===e.start||null===t.end||e.start<t.end)}function an(e,t){return(null===e.start||null!==t.start&&t.start>=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function sn(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t<e.end)}function ln(e,t,n,r){var o={},i={},a={},s=[],l=[],u=pn(e.defs,t);for(var c in e.defs){"inverse-background"===(f=u[(S=e.defs[c]).defId]).display&&(S.groupId?(o[S.groupId]=[],a[S.groupId]||(a[S.groupId]=S)):i[c]=[])}for(var d in e.instances){var p=e.instances[d],f=u[(S=e.defs[p.defId]).defId],h=p.range,v=!S.allDay&&r?Jt(h,r):h,g=nn(v,n);g&&("inverse-background"===f.display?S.groupId?o[S.groupId].push(g):i[p.defId].push(g):"none"!==f.display&&("background"===f.display?s:l).push({def:S,ui:f,instance:p,range:g,isStart:v.start&&v.start.valueOf()===g.start.valueOf(),isEnd:v.end&&v.end.valueOf()===g.end.valueOf()}))}for(var m in o)for(var y=0,E=en(o[m],n);y<E.length;y++){var S,D=E[y];f=u[(S=a[m]).defId];s.push({def:S,ui:f,instance:null,range:D,isStart:!1,isEnd:!1})}for(var c in i)for(var b=0,C=en(i[c],n);b<C.length;b++){D=C[b];s.push({def:e.defs[c],ui:u[c],instance:null,range:D,isStart:!1,isEnd:!1})}return{bg:s,fg:l}}function un(e){return"background"===e.ui.display||"inverse-background"===e.ui.display}function cn(e,t){e.fcSeg=t}function dn(e){return e.fcSeg||e.parentNode.fcSeg||null}function pn(e,t){return Oe(e,(function(e){return fn(e,t)}))}function fn(e,t){var n=[];return t[""]&&n.push(t[""]),t[e.defId]&&n.push(t[e.defId]),n.push(e.ui),Vt(n)}function hn(e,t){var n=e.map(vn);return n.sort((function(e,n){return ae(e,n,t)})),n.map((function(e){return e._seg}))}function vn(e){var t=e.eventRange,n=t.def,o=t.instance?t.instance.range:t.range,i=o.start?o.start.valueOf():0,a=o.end?o.end.valueOf():0;return r(r(r({},n.extendedProps),n),{id:n.publicId,start:i,end:a,duration:a-i,allDay:Number(n.allDay),_seg:e})}function gn(e,t){for(var n=t.pluginHooks.isDraggableTransformers,r=e.eventRange,o=r.def,i=r.ui,a=i.startEditable,s=0,l=n;s<l.length;s++){a=(0,l[s])(a,o,i,t)}return a}function mn(e,t){return e.isStart&&e.eventRange.ui.durationEditable&&t.options.eventResizableFromStart}function yn(e,t){return e.isEnd&&e.eventRange.ui.durationEditable}function En(e,t,n,r,o,i,a){var s=n.dateEnv,l=n.options,u=l.displayEventTime,c=l.displayEventEnd,d=e.eventRange.def,p=e.eventRange.instance;if(null==u&&(u=!1!==r),null==c&&(c=!1!==o),u&&!d.allDay&&(e.isStart||e.isEnd)){var f=i||(e.isStart?p.range.start:e.start||e.eventRange.range.start),h=a||(e.isEnd?p.range.end:e.end||e.eventRange.range.end);return c&&d.hasEnd?s.formatRange(f,h,t,{forcedStartTzo:i?null:p.forcedStartTzo,forcedEndTzo:a?null:p.forcedEndTzo}):s.format(f,t,{forcedTzo:i?null:p.forcedStartTzo})}return""}function Sn(e,t,n){var r=e.eventRange.range;return{isPast:r.end<(n||t.start),isFuture:r.start>=(n||t.end),isToday:t&&sn(t,r.start)}}function Dn(e){var t=["fc-event"];return e.isMirror&&t.push("fc-event-mirror"),e.isDraggable&&t.push("fc-event-draggable"),(e.isStartResizable||e.isEndResizable)&&t.push("fc-event-resizable"),e.isDragging&&t.push("fc-event-dragging"),e.isResizing&&t.push("fc-event-resizing"),e.isSelected&&t.push("fc-event-selected"),e.isStart&&t.push("fc-event-start"),e.isEnd&&t.push("fc-event-end"),e.isPast&&t.push("fc-event-past"),e.isToday&&t.push("fc-event-today"),e.isFuture&&t.push("fc-event-future"),t}function bn(e){return e.instance?e.instance.instanceId:e.def.defId+":"+e.range.start.toISOString()}var Cn={start:_t,end:_t,allDay:Boolean};function wn(e,t,n){var o=function(e,t){var n=xt(e,Cn),o=n.refined,i=n.extra,a=o.start?t.createMarkerMeta(o.start):null,s=o.end?t.createMarkerMeta(o.end):null,l=o.allDay;null==l&&(l=a&&a.isTimeUnspecified&&(!s||s.isTimeUnspecified));return r({range:{start:a?a.marker:null,end:s?s.marker:null},allDay:l},i)}(e,t),i=o.range;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return o}function Rn(e,t){return rn(e.range,t.range)&&e.allDay===t.allDay&&function(e,t){for(var n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(var n in e)if(!(n in t))return!1;return!0}(e,t)}function Tn(e,t,n){return r(r({},kn(e,t,n)),{timeZone:t.timeZone})}function kn(e,t,n){return{start:t.toDate(e.start),end:t.toDate(e.end),startStr:t.formatIso(e.start,{omitTime:n}),endStr:t.formatIso(e.end,{omitTime:n})}}function Mn(e,t,n){var r=Yt({editable:!1},n),o=Xt(r.refined,r.extra,"",e.allDay,!0,n);return{def:o,ui:fn(o,t),instance:Ie(o.defId,e.range),range:e.range,isStart:!0,isEnd:!0}}function xn(e,t,n){n.emitter.trigger("select",r(r({},_n(e,n)),{jsEvent:t?t.origEvent:null,view:n.viewApi||n.calendarApi.view}))}function _n(e,t){for(var n,o,i={},a=0,s=t.pluginHooks.dateSpanTransforms;a<s.length;a++){var l=s[a];r(i,l(e,t))}return r(i,(n=e,o=t.dateEnv,r(r({},kn(n.range,o,n.allDay)),{allDay:n.allDay}))),i}function In(e,t,n){var r=n.dateEnv,o=n.options,i=t;return e?(i=be(i),i=r.add(i,o.defaultAllDayEventDuration)):i=r.add(i,o.defaultTimedEventDuration),i}function Pn(e,t,n,r){var o=pn(e.defs,t),i={defs:{},instances:{}};for(var a in e.defs){var s=e.defs[a];i.defs[a]=Nn(s,o[a],n,r)}for(var l in e.instances){var u=e.instances[l];s=i.defs[u.defId];i.instances[l]=Hn(u,s,o[u.defId],n,r)}return i}function Nn(e,t,n,o){var i=n.standardProps||{};null==i.hasEnd&&t.durationEditable&&(n.startDelta||n.endDelta)&&(i.hasEnd=!0);var a=r(r(r({},e),i),{ui:r(r({},e.ui),i.ui)});n.extendedProps&&(a.extendedProps=r(r({},a.extendedProps),n.extendedProps));for(var s=0,l=o.pluginHooks.eventDefMutationAppliers;s<l.length;s++){(0,l[s])(a,n,o)}return!a.hasEnd&&o.options.forceEventDuration&&(a.hasEnd=!0),a}function Hn(e,t,n,o,i){var a=i.dateEnv,s=o.standardProps&&!0===o.standardProps.allDay,l=o.standardProps&&!1===o.standardProps.hasEnd,u=r({},e);return s&&(u.range=Kt(u.range)),o.datesDelta&&n.startEditable&&(u.range={start:a.add(u.range.start,o.datesDelta),end:a.add(u.range.end,o.datesDelta)}),o.startDelta&&n.durationEditable&&(u.range={start:a.add(u.range.start,o.startDelta),end:u.range.end}),o.endDelta&&n.durationEditable&&(u.range={start:u.range.start,end:a.add(u.range.end,o.endDelta)}),l&&(u.range={start:u.range.start,end:In(t.allDay,u.range.start,i)}),t.allDay&&(u.range={start:be(u.range.start),end:be(u.range.end)}),u.range.end<u.range.start&&(u.range.end=In(t.allDay,u.range.start,i)),u}var On=function(){function e(e,t,n){this.type=e,this.getCurrentData=t,this.dateEnv=n}return Object.defineProperty(e.prototype,"calendar",{get:function(){return this.getCurrentData().calendarApi},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this.getCurrentData().viewTitle},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeStart",{get:function(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"activeEnd",{get:function(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentStart",{get:function(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"currentEnd",{get:function(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)},enumerable:!1,configurable:!0}),e.prototype.getOption=function(e){return this.getCurrentData().options[e]},e}(),An={id:String,defaultAllDay:Boolean,url:String,events:_t,eventDataTransform:_t,success:_t,failure:_t};function Un(e,t,n){var r;if(void 0===n&&(n=Ln(t)),"string"==typeof e?r={url:e}:"function"==typeof e||Array.isArray(e)?r={events:e}:"object"==typeof e&&e&&(r=e),r){var o=xt(r,n),i=o.refined,a=o.extra,s=function(e,t){for(var n=t.pluginHooks.eventSourceDefs,r=n.length-1;r>=0;r--){var o=n[r].parseMeta(e);if(o)return{sourceDefId:r,meta:o}}return null}(i,t);if(s)return{_raw:e,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:i.defaultAllDay,eventDataTransform:i.eventDataTransform,success:i.success,failure:i.failure,publicId:i.id||"",sourceId:$(),sourceDefId:s.sourceDefId,meta:s.meta,ui:Wt(i,t),extendedProps:a}}return null}function Ln(e){return r(r(r({},Lt),An),e.pluginHooks.eventSourceRefiners)}function Wn(e,t){return"function"==typeof e&&(e=e()),null==e?t.createNowMarker():t.createMarker(e)}var Vn=function(){function e(){}return e.prototype.getCurrentData=function(){return this.currentDataManager.getCurrentData()},e.prototype.dispatch=function(e){return this.currentDataManager.dispatch(e)},Object.defineProperty(e.prototype,"view",{get:function(){return this.getCurrentData().viewApi},enumerable:!1,configurable:!0}),e.prototype.batchRendering=function(e){e()},e.prototype.updateSize=function(){this.trigger("_resize",!0)},e.prototype.setOption=function(e,t){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:t})},e.prototype.getOption=function(e){return this.currentDataManager.currentCalendarOptionsInput[e]},e.prototype.getAvailableLocaleCodes=function(){return Object.keys(this.getCurrentData().availableRawLocales)},e.prototype.on=function(e,t){var n=this.currentDataManager;n.currentCalendarOptionsRefiners[e]?n.emitter.on(e,t):console.warn("Unknown listener name '"+e+"'")},e.prototype.off=function(e,t){this.currentDataManager.emitter.off(e,t)},e.prototype.trigger=function(e){for(var t,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];(t=this.currentDataManager.emitter).trigger.apply(t,o([e],n))},e.prototype.changeView=function(e,t){var n=this;this.batchRendering((function(){if(n.unselect(),t)if(t.start&&t.end)n.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e}),n.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:t});else{var r=n.getCurrentData().dateEnv;n.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e,dateMarker:r.createMarker(t)})}else n.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e})}))},e.prototype.zoomTo=function(e,t){var n;t=t||"day",n=this.getCurrentData().viewSpecs[t]||this.getUnitViewSpec(t),this.unselect(),n?this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:n.type,dateMarker:e}):this.dispatch({type:"CHANGE_DATE",dateMarker:e})},e.prototype.getUnitViewSpec=function(e){var t,n,r=this.getCurrentData(),o=r.viewSpecs,i=r.toolbarConfig,a=[].concat(i.viewsWithButtons);for(var s in o)a.push(s);for(t=0;t<a.length;t++)if((n=o[a[t]])&&n.singleUnit===e)return n},e.prototype.prev=function(){this.unselect(),this.dispatch({type:"PREV"})},e.prototype.next=function(){this.unselect(),this.dispatch({type:"NEXT"})},e.prototype.prevYear=function(){var e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:e.dateEnv.addYears(e.currentDate,-1)})},e.prototype.nextYear=function(){var e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:e.dateEnv.addYears(e.currentDate,1)})},e.prototype.today=function(){var e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:Wn(e.calendarOptions.now,e.dateEnv)})},e.prototype.gotoDate=function(e){var t=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:t.dateEnv.createMarker(e)})},e.prototype.incrementDate=function(e){var t=this.getCurrentData(),n=Ye(e);n&&(this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:t.dateEnv.add(t.currentDate,n)}))},e.prototype.getDate=function(){var e=this.getCurrentData();return e.dateEnv.toDate(e.currentDate)},e.prototype.formatDate=function(e,t){var n=this.getCurrentData().dateEnv;return n.format(n.createMarker(e),St(t))},e.prototype.formatRange=function(e,t,n){var r=this.getCurrentData().dateEnv;return r.formatRange(r.createMarker(e),r.createMarker(t),St(n),n)},e.prototype.formatIso=function(e,t){var n=this.getCurrentData().dateEnv;return n.formatIso(n.createMarker(e),{omitTime:t})},e.prototype.select=function(e,t){var n;n=null==t?null!=e.start?e:{start:e,end:null}:{start:e,end:t};var r=this.getCurrentData(),o=wn(n,r.dateEnv,Ye({days:1}));o&&(this.dispatch({type:"SELECT_DATES",selection:o}),xn(o,null,r))},e.prototype.unselect=function(e){var t=this.getCurrentData();t.dateSelection&&(this.dispatch({type:"UNSELECT_DATES"}),function(e,t){t.emitter.trigger("unselect",{jsEvent:e?e.origEvent:null,view:t.viewApi||t.calendarApi.view})}(e,t))},e.prototype.addEvent=function(e,t){if(e instanceof zn){var n=e._def,r=e._instance;return this.getCurrentData().eventStore.defs[n.defId]||(this.dispatch({type:"ADD_EVENTS",eventStore:Pt({def:n,instance:r})}),this.triggerEventAdd(e)),e}var o,i=this.getCurrentData();if(t instanceof L)o=t.internalEventSource;else if("boolean"==typeof t)t&&(o=Ue(i.eventSources)[0]);else if(null!=t){var a=this.getEventSourceById(t);if(!a)return console.warn('Could not find an event source with ID "'+t+'"'),null;o=a.internalEventSource}var s=qt(e,o,i,!1);if(s){var l=new zn(i,s.def,s.def.recurringDef?null:s.instance);return this.dispatch({type:"ADD_EVENTS",eventStore:Pt(s)}),this.triggerEventAdd(l),l}return null},e.prototype.triggerEventAdd=function(e){var t=this;this.getCurrentData().emitter.trigger("eventAdd",{event:e,relatedEvents:[],revert:function(){t.dispatch({type:"REMOVE_EVENTS",eventStore:Fn(e)})}})},e.prototype.getEventById=function(e){var t=this.getCurrentData(),n=t.eventStore,r=n.defs,o=n.instances;for(var i in e=String(e),r){var a=r[i];if(a.publicId===e){if(a.recurringDef)return new zn(t,a,null);for(var s in o){var l=o[s];if(l.defId===a.defId)return new zn(t,a,l)}}}return null},e.prototype.getEvents=function(){var e=this.getCurrentData();return Bn(e.eventStore,e)},e.prototype.removeAllEvents=function(){this.dispatch({type:"REMOVE_ALL_EVENTS"})},e.prototype.getEventSources=function(){var e=this.getCurrentData(),t=e.eventSources,n=[];for(var r in t)n.push(new L(e,t[r]));return n},e.prototype.getEventSourceById=function(e){var t=this.getCurrentData(),n=t.eventSources;for(var r in e=String(e),n)if(n[r].publicId===e)return new L(t,n[r]);return null},e.prototype.addEventSource=function(e){var t=this.getCurrentData();if(e instanceof L)return t.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;var n=Un(e,t);return n?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[n]}),new L(t,n)):null},e.prototype.removeAllEventSources=function(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})},e.prototype.refetchEvents=function(){this.dispatch({type:"FETCH_EVENT_SOURCES"})},e.prototype.scrollToTime=function(e){var t=Ye(e);t&&this.trigger("_scrollRequest",{time:t})},e}(),zn=function(){function e(e,t,n){this._context=e,this._def=t,this._instance=n||null}return e.prototype.setProp=function(e,t){var n,r;if(e in jt)console.warn("Could not set date-related prop 'name'. Use one of the date-related methods instead.");else if(e in Bt)t=Bt[e](t),this.mutate({standardProps:(n={},n[e]=t,n)});else if(e in Lt){var o=Lt[e](t);"color"===e?o={backgroundColor:t,borderColor:t}:"editable"===e?o={startEditable:t,durationEditable:t}:((r={})[e]=t,o=r),this.mutate({standardProps:{ui:o}})}else console.warn("Could not set prop '"+e+"'. Use setExtendedProp instead.")},e.prototype.setExtendedProp=function(e,t){var n;this.mutate({extendedProps:(n={},n[e]=t,n)})},e.prototype.setStart=function(e,t){void 0===t&&(t={});var n=this._context.dateEnv,r=n.createMarker(e);if(r&&this._instance){var o=Qt(this._instance.range.start,r,n,t.granularity);t.maintainDuration?this.mutate({datesDelta:o}):this.mutate({startDelta:o})}},e.prototype.setEnd=function(e,t){void 0===t&&(t={});var n,r=this._context.dateEnv;if((null==e||(n=r.createMarker(e)))&&this._instance)if(n){var o=Qt(this._instance.range.end,n,r,t.granularity);this.mutate({endDelta:o})}else this.mutate({standardProps:{hasEnd:!1}})},e.prototype.setDates=function(e,t,n){void 0===n&&(n={});var r,o,i,a=this._context.dateEnv,s={allDay:n.allDay},l=a.createMarker(e);if(l&&((null==t||(r=a.createMarker(t)))&&this._instance)){var u=this._instance.range;!0===n.allDay&&(u=Kt(u));var c=Qt(u.start,l,a,n.granularity);if(r){var d=Qt(u.end,r,a,n.granularity);i=d,(o=c).years===i.years&&o.months===i.months&&o.days===i.days&&o.milliseconds===i.milliseconds?this.mutate({datesDelta:c,standardProps:s}):this.mutate({startDelta:c,endDelta:d,standardProps:s})}else s.hasEnd=!1,this.mutate({datesDelta:c,standardProps:s})}},e.prototype.moveStart=function(e){var t=Ye(e);t&&this.mutate({startDelta:t})},e.prototype.moveEnd=function(e){var t=Ye(e);t&&this.mutate({endDelta:t})},e.prototype.moveDates=function(e){var t=Ye(e);t&&this.mutate({datesDelta:t})},e.prototype.setAllDay=function(e,t){void 0===t&&(t={});var n={allDay:e},r=t.maintainDuration;null==r&&(r=this._context.options.allDayMaintainDuration),this._def.allDay!==e&&(n.hasEnd=r),this.mutate({standardProps:n})},e.prototype.formatRange=function(e){var t=this._context.dateEnv,n=this._instance,r=St(e);return this._def.hasEnd?t.formatRange(n.range.start,n.range.end,r,{forcedStartTzo:n.forcedStartTzo,forcedEndTzo:n.forcedEndTzo}):t.format(n.range.start,r,{forcedTzo:n.forcedStartTzo})},e.prototype.mutate=function(t){var n=this._instance;if(n){var r=this._def,o=this._context,i=Nt(o.getCurrentData().eventStore,n.instanceId);i=Pn(i,{"":{display:"",startEditable:!0,durationEditable:!0,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]}},t,o);var a=new e(o,r,n);this._def=i.defs[r.defId],this._instance=i.instances[n.instanceId],o.dispatch({type:"MERGE_EVENTS",eventStore:i}),o.emitter.trigger("eventChange",{oldEvent:a,event:this,relatedEvents:Bn(i,o,n),revert:function(){o.dispatch({type:"REMOVE_EVENTS",eventStore:i})}})}},e.prototype.remove=function(){var e=this._context,t=Fn(this);e.dispatch({type:"REMOVE_EVENTS",eventStore:t}),e.emitter.trigger("eventRemove",{event:this,relatedEvents:[],revert:function(){e.dispatch({type:"MERGE_EVENTS",eventStore:t})}})},Object.defineProperty(e.prototype,"source",{get:function(){var e=this._def.sourceId;return e?new L(this._context,this._context.getCurrentData().eventSources[e]):null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"start",{get:function(){return this._instance?this._context.dateEnv.toDate(this._instance.range.start):null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this._instance&&this._def.hasEnd?this._context.dateEnv.toDate(this._instance.range.end):null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"startStr",{get:function(){var e=this._instance;return e?this._context.dateEnv.formatIso(e.range.start,{omitTime:this._def.allDay,forcedTzo:e.forcedStartTzo}):""},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"endStr",{get:function(){var e=this._instance;return e&&this._def.hasEnd?this._context.dateEnv.formatIso(e.range.end,{omitTime:this._def.allDay,forcedTzo:e.forcedEndTzo}):""},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return this._def.publicId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"groupId",{get:function(){return this._def.groupId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"allDay",{get:function(){return this._def.allDay},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._def.title},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._def.url},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"display",{get:function(){return this._def.ui.display||"auto"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"startEditable",{get:function(){return this._def.ui.startEditable},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"durationEditable",{get:function(){return this._def.ui.durationEditable},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"constraint",{get:function(){return this._def.ui.constraints[0]||null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"overlap",{get:function(){return this._def.ui.overlap},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"allow",{get:function(){return this._def.ui.allows[0]||null},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"backgroundColor",{get:function(){return this._def.ui.backgroundColor},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"borderColor",{get:function(){return this._def.ui.borderColor},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._def.ui.textColor},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"classNames",{get:function(){return this._def.ui.classNames},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"extendedProps",{get:function(){return this._def.extendedProps},enumerable:!1,configurable:!0}),e.prototype.toPlainObject=function(e){void 0===e&&(e={});var t=this._def,n=t.ui,o=this.startStr,i=this.endStr,a={};return t.title&&(a.title=t.title),o&&(a.start=o),i&&(a.end=i),t.publicId&&(a.id=t.publicId),t.groupId&&(a.groupId=t.groupId),t.url&&(a.url=t.url),n.display&&"auto"!==n.display&&(a.display=n.display),e.collapseColor&&n.backgroundColor&&n.backgroundColor===n.borderColor?a.color=n.backgroundColor:(n.backgroundColor&&(a.backgroundColor=n.backgroundColor),n.borderColor&&(a.borderColor=n.borderColor)),n.textColor&&(a.textColor=n.textColor),n.classNames.length&&(a.classNames=n.classNames),Object.keys(t.extendedProps).length&&(e.collapseExtendedProps?r(a,t.extendedProps):a.extendedProps=t.extendedProps),a},e.prototype.toJSON=function(){return this.toPlainObject()},e}();function Fn(e){var t,n,r=e._def,o=e._instance;return{defs:(t={},t[r.defId]=r,t),instances:o?(n={},n[o.instanceId]=o,n):{}}}function Bn(e,t,n){var r=e.defs,o=e.instances,i=[],a=n?n.instanceId:"";for(var s in o){var l=o[s],u=r[l.defId];l.instanceId!==a&&i.push(new zn(t,u,l))}return i}var jn={};var Gn,qn=function(){function e(){}return e.prototype.getMarkerYear=function(e){return e.getUTCFullYear()},e.prototype.getMarkerMonth=function(e){return e.getUTCMonth()},e.prototype.getMarkerDay=function(e){return e.getUTCDate()},e.prototype.arrayToMarker=function(e){return Me(e)},e.prototype.markerToArray=function(e){return ke(e)},e}();Gn=qn,jn["gregory"]=Gn;var Yn=/^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;function Zn(e){var t=Yn.exec(e);if(t){var n=new Date(Date.UTC(Number(t[1]),t[3]?Number(t[3])-1:0,Number(t[5]||1),Number(t[7]||0),Number(t[8]||0),Number(t[10]||0),t[12]?1e3*Number("0."+t[12]):0));if(xe(n)){var r=null;return t[13]&&(r=("-"===t[15]?-1:1)*(60*Number(t[16]||0)+Number(t[18]||0))),{marker:n,isTimeUnspecified:!t[6],timeZoneOffset:r}}}return null}var Xn=function(){function e(e){var t=this.timeZone=e.timeZone,n="local"!==t&&"UTC"!==t;e.namedTimeZoneImpl&&n&&(this.namedTimeZoneImpl=new e.namedTimeZoneImpl(t)),this.canComputeOffset=Boolean(!n||this.namedTimeZoneImpl),this.calendarSystem=function(e){return new jn[e]}(e.calendarSystem),this.locale=e.locale,this.weekDow=e.locale.week.dow,this.weekDoy=e.locale.week.doy,"ISO"===e.weekNumberCalculation&&(this.weekDow=1,this.weekDoy=4),"number"==typeof e.firstDay&&(this.weekDow=e.firstDay),"function"==typeof e.weekNumberCalculation&&(this.weekNumberFunc=e.weekNumberCalculation),this.weekText=null!=e.weekText?e.weekText:e.locale.options.weekText,this.cmdFormatter=e.cmdFormatter,this.defaultSeparator=e.defaultSeparator}return e.prototype.createMarker=function(e){var t=this.createMarkerMeta(e);return null===t?null:t.marker},e.prototype.createNowMarker=function(){return this.canComputeOffset?this.timestampToMarker((new Date).valueOf()):Me(Re(new Date))},e.prototype.createMarkerMeta=function(e){if("string"==typeof e)return this.parse(e);var t=null;return"number"==typeof e?t=this.timestampToMarker(e):e instanceof Date?(e=e.valueOf(),isNaN(e)||(t=this.timestampToMarker(e))):Array.isArray(e)&&(t=Me(e)),null!==t&&xe(t)?{marker:t,isTimeUnspecified:!1,forcedTzo:null}:null},e.prototype.parse=function(e){var t=Zn(e);if(null===t)return null;var n=t.marker,r=null;return null!==t.timeZoneOffset&&(this.canComputeOffset?n=this.timestampToMarker(n.valueOf()-60*t.timeZoneOffset*1e3):r=t.timeZoneOffset),{marker:n,isTimeUnspecified:t.isTimeUnspecified,forcedTzo:r}},e.prototype.getYear=function(e){return this.calendarSystem.getMarkerYear(e)},e.prototype.getMonth=function(e){return this.calendarSystem.getMarkerMonth(e)},e.prototype.add=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]+=t.years,n[1]+=t.months,n[2]+=t.days,n[6]+=t.milliseconds,this.calendarSystem.arrayToMarker(n)},e.prototype.subtract=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]-=t.years,n[1]-=t.months,n[2]-=t.days,n[6]-=t.milliseconds,this.calendarSystem.arrayToMarker(n)},e.prototype.addYears=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]+=t,this.calendarSystem.arrayToMarker(n)},e.prototype.addMonths=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[1]+=t,this.calendarSystem.arrayToMarker(n)},e.prototype.diffWholeYears=function(e,t){var n=this.calendarSystem;return _e(e)===_e(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)&&n.getMarkerMonth(e)===n.getMarkerMonth(t)?n.getMarkerYear(t)-n.getMarkerYear(e):null},e.prototype.diffWholeMonths=function(e,t){var n=this.calendarSystem;return _e(e)===_e(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)?n.getMarkerMonth(t)-n.getMarkerMonth(e)+12*(n.getMarkerYear(t)-n.getMarkerYear(e)):null},e.prototype.greatestWholeUnit=function(e,t){var n=this.diffWholeYears(e,t);return null!==n?{unit:"year",value:n}:null!==(n=this.diffWholeMonths(e,t))?{unit:"month",value:n}:null!==(n=Se(e,t))?{unit:"week",value:n}:null!==(n=De(e,t))?{unit:"day",value:n}:de(n=function(e,t){return(t.valueOf()-e.valueOf())/36e5}(e,t))?{unit:"hour",value:n}:de(n=function(e,t){return(t.valueOf()-e.valueOf())/6e4}(e,t))?{unit:"minute",value:n}:de(n=function(e,t){return(t.valueOf()-e.valueOf())/1e3}(e,t))?{unit:"second",value:n}:{unit:"millisecond",value:t.valueOf()-e.valueOf()}},e.prototype.countDurationsBetween=function(e,t,n){var r;return n.years&&null!==(r=this.diffWholeYears(e,t))?r/(Je(n)/365):n.months&&null!==(r=this.diffWholeMonths(e,t))?r/function(e){return Je(e)/30}(n):n.days&&null!==(r=De(e,t))?r/Je(n):(t.valueOf()-e.valueOf())/$e(n)},e.prototype.startOf=function(e,t){return"year"===t?this.startOfYear(e):"month"===t?this.startOfMonth(e):"week"===t?this.startOfWeek(e):"day"===t?be(e):"hour"===t?function(e){return Me([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours()])}(e):"minute"===t?function(e){return Me([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes()])}(e):"second"===t?function(e){return Me([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()])}(e):void 0},e.prototype.startOfYear=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e)])},e.prototype.startOfMonth=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e)])},e.prototype.startOfWeek=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e),e.getUTCDate()-(e.getUTCDay()-this.weekDow+7)%7])},e.prototype.computeWeekNumber=function(e){return this.weekNumberFunc?this.weekNumberFunc(this.toDate(e)):function(e,t,n){var r=e.getUTCFullYear(),o=Ce(e,r,t,n);if(o<1)return Ce(e,r-1,t,n);var i=Ce(e,r+1,t,n);return i>=1?Math.min(o,i):o}(e,this.weekDow,this.weekDoy)},e.prototype.format=function(e,t,n){return void 0===n&&(n={}),t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)},e.prototype.formatRange=function(e,t,n,r){return void 0===r&&(r={}),r.isEndExclusive&&(t=ge(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this,r.defaultSeparator)},e.prototype.formatIso=function(e,t){void 0===t&&(t={});var n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),function(e,t,n){void 0===n&&(n=!1);var r=e.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",rt(t,!0)))),r}(e,n,t.omitTime)},e.prototype.timestampToMarker=function(e){return"local"===this.timeZone?Me(Re(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?Me(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)},e.prototype.offsetForMarker=function(e){return"local"===this.timeZone?-Te(ke(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(ke(e)):null},e.prototype.toDate=function(e,t){return"local"===this.timeZone?Te(ke(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(ke(e))*60):new Date(e.valueOf()-(t||0))},e}(),Kn=[],Jn={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"};function $n(e){for(var t=e.length>0?e[0].code:"en",n=Kn.concat(e),r={en:Jn},o=0,i=n;o<i.length;o++){var a=i[o];r[a.code]=a}return{map:r,defaultCode:t}}function Qn(e,t){return"object"!=typeof e||Array.isArray(e)?function(e,t){var n=[].concat(e||[]),r=function(e,t){for(var n=0;n<e.length;n++)for(var r=e[n].toLocaleLowerCase().split("-"),o=r.length;o>0;o--){var i=r.slice(0,o).join("-");if(t[i])return t[i]}return null}(n,t)||Jn;return er(e,n,r)}(e,t):er(e.code,[e.code],e)}function er(e,t,n){var r=Ne([Jn,n],["buttonText"]);delete r.code;var o=r.week;return delete r.week,{codeArg:e,codes:t,week:o,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}function tr(e){var t=Qn(e.locale||"en",$n([]).map);return new Xn(r(r({timeZone:bt.timeZone,calendarSystem:"gregory"},e),{locale:t}))}var nr,rr={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function or(e,t){return It(function(e){var t;t=!0===e?[{}]:Array.isArray(e)?e.filter((function(e){return e.daysOfWeek})):"object"==typeof e&&e?[e]:[];return t=t.map((function(e){return r(r({},rr),e)}))}(e),null,t)}function ir(e,t){return e.left>=t.left&&e.left<t.right&&e.top>=t.top&&e.top<t.bottom}function ar(e,t){var n={left:Math.max(e.left,t.left),right:Math.min(e.right,t.right),top:Math.max(e.top,t.top),bottom:Math.min(e.bottom,t.bottom)};return n.left<n.right&&n.top<n.bottom&&n}function sr(e,t){return{left:Math.min(Math.max(e.left,t.left),t.right),top:Math.min(Math.max(e.top,t.top),t.bottom)}}function lr(e){return{left:(e.left+e.right)/2,top:(e.top+e.bottom)/2}}function ur(e,t){return{left:e.left-t.left,top:e.top-t.top}}function cr(){return null==nr&&(nr=function(){if("undefined"==typeof document)return!0;var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.innerHTML="<table><tr><td><div></div></td></tr></table>",e.querySelector("table").style.height="100px",e.querySelector("div").style.height="100%",document.body.appendChild(e);var t=e.querySelector("div").offsetHeight>0;return document.body.removeChild(e),t}()),nr}var dr={defs:{},instances:{}},pr=function(){function e(){this.getKeysForEventDefs=it(this._getKeysForEventDefs),this.splitDateSelection=it(this._splitDateSpan),this.splitEventStore=it(this._splitEventStore),this.splitIndividualUi=it(this._splitIndividualUi),this.splitEventDrag=it(this._splitInteraction),this.splitEventResize=it(this._splitInteraction),this.eventUiBuilders={}}return e.prototype.splitProps=function(e){var t=this,n=this.getKeyInfo(e),r=this.getKeysForEventDefs(e.eventStore),o=this.splitDateSelection(e.dateSelection),i=this.splitIndividualUi(e.eventUiBases,r),a=this.splitEventStore(e.eventStore,r),s=this.splitEventDrag(e.eventDrag),l=this.splitEventResize(e.eventResize),u={};for(var c in this.eventUiBuilders=Oe(n,(function(e,n){return t.eventUiBuilders[n]||it(fr)})),n){var d=n[c],p=a[c]||dr,f=this.eventUiBuilders[c];u[c]={businessHours:d.businessHours||e.businessHours,dateSelection:o[c]||null,eventStore:p,eventUiBases:f(e.eventUiBases[""],d.ui,i[c]),eventSelection:p.instances[e.eventSelection]?e.eventSelection:"",eventDrag:s[c]||null,eventResize:l[c]||null}}return u},e.prototype._splitDateSpan=function(e){var t={};if(e)for(var n=0,r=this.getKeysForDateSpan(e);n<r.length;n++){t[r[n]]=e}return t},e.prototype._getKeysForEventDefs=function(e){var t=this;return Oe(e.defs,(function(e){return t.getKeysForEventDef(e)}))},e.prototype._splitEventStore=function(e,t){var n=e.defs,r=e.instances,o={};for(var i in n)for(var a=0,s=t[i];a<s.length;a++){o[p=s[a]]||(o[p]={defs:{},instances:{}}),o[p].defs[i]=n[i]}for(var l in r)for(var u=r[l],c=0,d=t[u.defId];c<d.length;c++){var p;o[p=d[c]]&&(o[p].instances[l]=u)}return o},e.prototype._splitIndividualUi=function(e,t){var n={};for(var r in e)if(r)for(var o=0,i=t[r];o<i.length;o++){var a=i[o];n[a]||(n[a]={}),n[a][r]=e[r]}return n},e.prototype._splitInteraction=function(e){var t={};if(e){var n=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),r=this._getKeysForEventDefs(e.mutatedEvents),o=this._splitEventStore(e.mutatedEvents,r),i=function(r){t[r]||(t[r]={affectedEvents:n[r]||dr,mutatedEvents:o[r]||dr,isEvent:e.isEvent})};for(var a in n)i(a);for(var a in o)i(a)}return t},e}();function fr(e,t,n){var o=[];e&&o.push(e),t&&o.push(t);var i={"":Vt(o)};return n&&r(i,n),i}function hr(e,t,n,r){return{dow:e.getUTCDay(),isDisabled:Boolean(r&&!sn(r.activeRange,e)),isOther:Boolean(r&&!sn(r.currentRange,e)),isToday:Boolean(t&&sn(t,e)),isPast:Boolean(n?e<n:!!t&&e<t.start),isFuture:Boolean(n?e>n:!!t&&e>=t.end)}}function vr(e,t){var n=["fc-day","fc-day-"+fe[e.dow]];return e.isDisabled?n.push("fc-day-disabled"):(e.isToday&&(n.push("fc-day-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-day-past"),e.isFuture&&n.push("fc-day-future"),e.isOther&&n.push("fc-day-other")),n}function gr(e,t){return void 0===t&&(t="day"),JSON.stringify({date:tt(e),type:t})}var mr,yr=null;function Er(){return null===yr&&(yr=function(){var e=document.createElement("div");j(e,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),e.innerHTML="<div></div>",document.body.appendChild(e);var t=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return W(e),t}()),yr}function Sr(){return mr||(mr=function(){var e=document.createElement("div");e.style.overflow="scroll",document.body.appendChild(e);var t=Dr(e);return document.body.removeChild(e),t}()),mr}function Dr(e){return{x:e.offsetHeight-e.clientHeight,y:e.offsetWidth-e.clientWidth}}function br(e,t){void 0===t&&(t=!1);var n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,o=parseInt(n.borderRightWidth,10)||0,i=parseInt(n.borderTopWidth,10)||0,a=parseInt(n.borderBottomWidth,10)||0,s=Dr(e),l=s.y-r-o,u={borderLeft:r,borderRight:o,borderTop:i,borderBottom:a,scrollbarBottom:s.x-i-a,scrollbarLeft:0,scrollbarRight:0};return Er()&&"rtl"===n.direction?u.scrollbarLeft=l:u.scrollbarRight=l,t&&(u.paddingLeft=parseInt(n.paddingLeft,10)||0,u.paddingRight=parseInt(n.paddingRight,10)||0,u.paddingTop=parseInt(n.paddingTop,10)||0,u.paddingBottom=parseInt(n.paddingBottom,10)||0),u}function Cr(e,t,n){void 0===t&&(t=!1);var r=n?e.getBoundingClientRect():wr(e),o=br(e,t),i={left:r.left+o.borderLeft+o.scrollbarLeft,right:r.right-o.borderRight-o.scrollbarRight,top:r.top+o.borderTop,bottom:r.bottom-o.borderBottom-o.scrollbarBottom};return t&&(i.left+=o.paddingLeft,i.right-=o.paddingRight,i.top+=o.paddingTop,i.bottom-=o.paddingBottom),i}function wr(e){var t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function Rr(e){for(var t=[];e instanceof HTMLElement;){var n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}function Tr(e,t,n){var r=!1,o=function(){r||(r=!0,t.apply(this,arguments))},i=function(){r||(r=!0,n&&n.apply(this,arguments))},a=e(o,i);a&&"function"==typeof a.then&&a.then(o,i)}var kr=function(){function e(){this.handlers={},this.thisContext=null}return e.prototype.setThisContext=function(e){this.thisContext=e},e.prototype.setOptions=function(e){this.options=e},e.prototype.on=function(e,t){!function(e,t,n){(e[t]||(e[t]=[])).push(n)}(this.handlers,e,t)},e.prototype.off=function(e,t){!function(e,t,n){n?e[t]&&(e[t]=e[t].filter((function(e){return e!==n}))):delete e[t]}(this.handlers,e,t)},e.prototype.trigger=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];for(var r=this.handlers[e]||[],o=this.options&&this.options[e],i=[].concat(o||[],r),a=0,s=i;a<s.length;a++){var l=s[a];l.apply(this.thisContext,t)}},e.prototype.hasHandlers=function(e){return this.handlers[e]&&this.handlers[e].length||this.options&&this.options[e]},e}();var Mr=function(){function e(e,t,n,r){this.els=t;var o=this.originClientRect=e.getBoundingClientRect();n&&this.buildElHorizontals(o.left),r&&this.buildElVerticals(o.top)}return e.prototype.buildElHorizontals=function(e){for(var t=[],n=[],r=0,o=this.els;r<o.length;r++){var i=o[r].getBoundingClientRect();t.push(i.left-e),n.push(i.right-e)}this.lefts=t,this.rights=n},e.prototype.buildElVerticals=function(e){for(var t=[],n=[],r=0,o=this.els;r<o.length;r++){var i=o[r].getBoundingClientRect();t.push(i.top-e),n.push(i.bottom-e)}this.tops=t,this.bottoms=n},e.prototype.leftToIndex=function(e){var t,n=this.lefts,r=this.rights,o=n.length;for(t=0;t<o;t++)if(e>=n[t]&&e<r[t])return t},e.prototype.topToIndex=function(e){var t,n=this.tops,r=this.bottoms,o=n.length;for(t=0;t<o;t++)if(e>=n[t]&&e<r[t])return t},e.prototype.getWidth=function(e){return this.rights[e]-this.lefts[e]},e.prototype.getHeight=function(e){return this.bottoms[e]-this.tops[e]},e}(),xr=function(){function e(){}return e.prototype.getMaxScrollTop=function(){return this.getScrollHeight()-this.getClientHeight()},e.prototype.getMaxScrollLeft=function(){return this.getScrollWidth()-this.getClientWidth()},e.prototype.canScrollVertically=function(){return this.getMaxScrollTop()>0},e.prototype.canScrollHorizontally=function(){return this.getMaxScrollLeft()>0},e.prototype.canScrollUp=function(){return this.getScrollTop()>0},e.prototype.canScrollDown=function(){return this.getScrollTop()<this.getMaxScrollTop()},e.prototype.canScrollLeft=function(){return this.getScrollLeft()>0},e.prototype.canScrollRight=function(){return this.getScrollLeft()<this.getMaxScrollLeft()},e}(),_r=function(e){function t(t){var n=e.call(this)||this;return n.el=t,n}return n(t,e),t.prototype.getScrollTop=function(){return this.el.scrollTop},t.prototype.getScrollLeft=function(){return this.el.scrollLeft},t.prototype.setScrollTop=function(e){this.el.scrollTop=e},t.prototype.setScrollLeft=function(e){this.el.scrollLeft=e},t.prototype.getScrollWidth=function(){return this.el.scrollWidth},t.prototype.getScrollHeight=function(){return this.el.scrollHeight},t.prototype.getClientHeight=function(){return this.el.clientHeight},t.prototype.getClientWidth=function(){return this.el.clientWidth},t}(xr),Ir=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.getScrollTop=function(){return window.pageYOffset},t.prototype.getScrollLeft=function(){return window.pageXOffset},t.prototype.setScrollTop=function(e){window.scroll(window.pageXOffset,e)},t.prototype.setScrollLeft=function(e){window.scroll(e,window.pageYOffset)},t.prototype.getScrollWidth=function(){return document.documentElement.scrollWidth},t.prototype.getScrollHeight=function(){return document.documentElement.scrollHeight},t.prototype.getClientHeight=function(){return document.documentElement.clientHeight},t.prototype.getClientWidth=function(){return document.documentElement.clientWidth},t}(xr),Pr=function(){function e(e){this.iconOverrideOption&&this.setIconOverride(e[this.iconOverrideOption])}return e.prototype.setIconOverride=function(e){var t,n;if("object"==typeof e&&e){for(n in t=r({},this.iconClasses),e)t[n]=this.applyIconOverridePrefix(e[n]);this.iconClasses=t}else!1===e&&(this.iconClasses={})},e.prototype.applyIconOverridePrefix=function(e){var t=this.iconOverridePrefix;return t&&0!==e.indexOf(t)&&(e=t+e),e},e.prototype.getClass=function(e){return this.classes[e]||""},e.prototype.getIconClass=function(e,t){var n;return(n=t&&this.rtlIconClasses&&this.rtlIconClasses[e]||this.iconClasses[e])?this.baseIconClass+" "+n:""},e.prototype.getCustomButtonIconClass=function(e){var t;return this.iconOverrideCustomButtonOption&&(t=e[this.iconOverrideCustomButtonOption])?this.baseIconClass+" "+this.applyIconOverridePrefix(t):""},e}();if(Pr.prototype.classes={},Pr.prototype.iconClasses={},Pr.prototype.baseIconClass="",Pr.prototype.iconOverridePrefix="","undefined"==typeof FullCalendarVDom)throw new Error("Please import the top-level fullcalendar lib before attempting to import a plugin.");var Nr=FullCalendarVDom.Component,Hr=FullCalendarVDom.createElement,Or=FullCalendarVDom.render,Ar=FullCalendarVDom.createRef,Ur=FullCalendarVDom.Fragment,Lr=FullCalendarVDom.createContext,Wr=FullCalendarVDom.flushToDom,Vr=function(){function e(e,t,n){var o=this;this.execFunc=e,this.emitter=t,this.scrollTime=n,this.handleScrollRequest=function(e){o.queuedRequest=r({},o.queuedRequest||{},e),o.drain()},t.on("_scrollRequest",this.handleScrollRequest),this.fireInitialScroll()}return e.prototype.detach=function(){this.emitter.off("_scrollRequest",this.handleScrollRequest)},e.prototype.update=function(e){e?this.fireInitialScroll():this.drain()},e.prototype.fireInitialScroll=function(){this.handleScrollRequest({time:this.scrollTime})},e.prototype.drain=function(){this.queuedRequest&&this.execFunc(this.queuedRequest)&&(this.queuedRequest=null)},e}(),zr=Lr({});function Fr(e,t,n,r,o,i,a,s,l,u,c,d,p){return{dateEnv:o,options:n,pluginHooks:a,emitter:u,dispatch:s,getCurrentData:l,calendarApi:c,viewSpec:e,viewApi:t,dateProfileGenerator:r,theme:i,isRtl:"rtl"===n.direction,addResizeHandler:function(e){u.on("_resize",e)},removeResizeHandler:function(e){u.off("_resize",e)},createScrollResponder:function(e){return new Vr(e,u,Ye(n.scrollTime))},registerInteractiveComponent:d,unregisterInteractiveComponent:p}}var Br=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.shouldComponentUpdate=function(e,t){return this.debug&&console.log(We(e,this.props),We(t,this.state)),!Ve(this.props,e,this.propEquality)||!Ve(this.state,t,this.stateEquality)},t.addPropsEquality=Gr,t.addStateEquality=qr,t.contextType=zr,t}(Nr);Br.prototype.propEquality={},Br.prototype.stateEquality={};var jr=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.contextType=zr,t}(Br);function Gr(e){var t=Object.create(this.prototype.propEquality);r(t,e),this.prototype.propEquality=t}function qr(e){var t=Object.create(this.prototype.stateEquality);r(t,e),this.prototype.stateEquality=t}function Yr(e,t){"function"==typeof e?e(t):e&&(e.current=t)}function Zr(e,t,n,r,o){switch(t.type){case"RECEIVE_EVENTS":return function(e,t,n,r,o,i){if(t&&n===t.latestFetchId){var a=It(function(e,t,n){var r=n.options.eventDataTransform,o=t?t.eventDataTransform:null;o&&(e=Xr(e,o));r&&(e=Xr(e,r));return e}(o,t,i),t,i);return r&&(a=Be(a,r,i)),Ot(Kr(e,t.sourceId),a)}return e}(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,o);case"ADD_EVENTS":return function(e,t,n,r){n&&(t=Be(t,n,r));return Ot(e,t)}(e,t.eventStore,r?r.activeRange:null,o);case"MERGE_EVENTS":return Ot(e,t.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return r?Be(e,r.activeRange,o):e;case"REMOVE_EVENTS":return function(e,t){var n=e.defs,r=e.instances,o={},i={};for(var a in n)t.defs[a]||(o[a]=n[a]);for(var s in r)!t.instances[s]&&o[r[s].defId]&&(i[s]=r[s]);return{defs:o,instances:i}}(e,t.eventStore);case"REMOVE_EVENT_SOURCE":return Kr(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return At(e,(function(e){return!e.sourceId}));case"REMOVE_ALL_EVENTS":return{defs:{},instances:{}};default:return e}}function Xr(e,t){var n;if(t){n=[];for(var r=0,o=e;r<o.length;r++){var i=o[r],a=t(i);a?n.push(a):null==a&&n.push(i)}}else n=e;return n}function Kr(e,t){return At(e,(function(e){return e.sourceId!==t}))}function Jr(e,t){return $r({eventDrag:e},t)}function $r(e,t){var n=t.getCurrentData(),o=r({businessHours:n.businessHours,dateSelection:"",eventStore:n.eventStore,eventUiBases:n.eventUiBases,eventSelection:"",eventDrag:null,eventResize:null},e);return(t.pluginHooks.isPropsValid||Qr)(o,t)}function Qr(e,t,n,o){return void 0===n&&(n={}),!(e.eventDrag&&!function(e,t,n,o){var i=t.getCurrentData(),a=e.eventDrag,s=a.mutatedEvents,l=s.defs,u=s.instances,c=pn(l,a.isEvent?e.eventUiBases:{"":i.selectionConfig});o&&(c=Oe(c,o));var d=(v=e.eventStore,g=a.affectedEvents.instances,{defs:v.defs,instances:He(v.instances,(function(e){return!g[e.instanceId]}))}),p=d.defs,f=d.instances,h=pn(p,e.eventUiBases);var v,g;for(var m in u){var y=u[m],E=y.range,S=c[y.defId],D=l[y.defId];if(!eo(S.constraints,E,d,e.businessHours,t))return!1;var b=t.options.eventOverlap,C="function"==typeof b?b:null;for(var w in f){var R=f[w];if(on(E,R.range)){if(!1===h[R.defId].overlap&&a.isEvent)return!1;if(!1===S.overlap)return!1;if(C&&!C(new zn(t,p[R.defId],R),new zn(t,D,y)))return!1}}for(var T=i.eventStore,k=0,M=S.allows;k<M.length;k++){var x=M[k],_=r(r({},n),{range:y.range,allDay:D.allDay}),I=T.defs[D.defId],P=T.instances[m],N=void 0;if(N=I?new zn(t,I,P):new zn(t,D),!x(_n(_,t),N))return!1}}return!0}(e,t,n,o))&&!(e.dateSelection&&!function(e,t,n,o){var i=e.eventStore,a=i.defs,s=i.instances,l=e.dateSelection,u=l.range,c=t.getCurrentData().selectionConfig;o&&(c=o(c));if(!eo(c.constraints,u,i,e.businessHours,t))return!1;var d=t.options.selectOverlap,p="function"==typeof d?d:null;for(var f in s){var h=s[f];if(on(u,h.range)){if(!1===c.overlap)return!1;if(p&&!p(new zn(t,a[h.defId],h),null))return!1}}for(var v=0,g=c.allows;v<g.length;v++){var m=g[v],y=r(r({},n),l);if(!m(_n(y,t),null))return!1}return!0}(e,t,n,o))}function eo(e,t,n,r,o){for(var i=0,a=e;i<a.length;i++){if(!ro(to(a[i],t,n,r,o),t))return!1}return!0}function to(e,t,n,r,o){return"businessHours"===e?no(Be(r,t,o)):"string"==typeof e?no(At(n,(function(t){return t.groupId===e}))):"object"==typeof e&&e?no(Be(e,t,o)):[]}function no(e){var t=e.instances,n=[];for(var r in t)n.push(t[r].range);return n}function ro(e,t){for(var n=0,r=e;n<r.length;n++){if(an(r[n],t))return!0}return!1}var oo=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.uid=$(),t}return n(t,e),t.prototype.prepareHits=function(){},t.prototype.queryHit=function(e,t,n,r){return null},t.prototype.isInteractionValid=function(e){var t=this.props.dateProfile,n=e.mutatedEvents.instances;if(t)for(var r in n)if(!an(t.validRange,n[r].range))return!1;return Jr(e,this.context)},t.prototype.isDateSelectionValid=function(e){var t,n,r=this.props.dateProfile;return!(r&&!an(r.validRange,e.range))&&(t=e,n=this.context,$r({dateSelection:t},n))},t.prototype.isValidSegDownEl=function(e){return!this.props.eventDrag&&!this.props.eventResize&&!V(e,".fc-event-mirror")&&(this.isPopover()||!this.isInPopover(e))},t.prototype.isValidDateDownEl=function(e){return!(V(e,".fc-event:not(.fc-bg-event)")||V(e,".fc-daygrid-more-link")||V(e,"a[data-navlink]")||this.isInPopover(e))},t.prototype.isPopover=function(){return!1},t.prototype.isInPopover=function(e){return Boolean(V(e,".fc-popover"))},t}(jr);function io(e){return{id:$(),deps:e.deps||[],reducers:e.reducers||[],contextInit:[].concat(e.contextInit||[]),eventRefiners:e.eventRefiners||{},eventDefMemberAdders:e.eventDefMemberAdders||[],eventSourceRefiners:e.eventSourceRefiners||{},isDraggableTransformers:e.isDraggableTransformers||[],eventDragMutationMassagers:e.eventDragMutationMassagers||[],eventDefMutationAppliers:e.eventDefMutationAppliers||[],dateSelectionTransformers:e.dateSelectionTransformers||[],datePointTransforms:e.datePointTransforms||[],dateSpanTransforms:e.dateSpanTransforms||[],views:e.views||{},viewPropsTransformers:e.viewPropsTransformers||[],isPropsValid:e.isPropsValid||null,externalDefTransforms:e.externalDefTransforms||[],eventResizeJoinTransforms:e.eventResizeJoinTransforms||[],viewContainerAppends:e.viewContainerAppends||[],eventDropTransformers:e.eventDropTransformers||[],componentInteractions:e.componentInteractions||[],calendarInteractions:e.calendarInteractions||[],themeClasses:e.themeClasses||{},eventSourceDefs:e.eventSourceDefs||[],cmdFormatter:e.cmdFormatter,recurringTypes:e.recurringTypes||[],namedTimeZonedImpl:e.namedTimeZonedImpl,initialView:e.initialView||"",elementDraggingImpl:e.elementDraggingImpl,optionChangeHandlers:e.optionChangeHandlers||{},scrollGridImpl:e.scrollGridImpl||null,contentTypeHandlers:e.contentTypeHandlers||{},listenerRefiners:e.listenerRefiners||{},optionRefiners:e.optionRefiners||{},propSetHandlers:e.propSetHandlers||{}}}function ao(){var e,t=[],n=[];return function(o,i){return e&&ot(o,t)&&ot(i,n)||(e=function(e,t){var n={},o={reducers:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],eventResizeJoinTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,contentTypeHandlers:{},listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function i(e){for(var t=0,a=e;t<a.length;t++){var s=a[t];n[s.id]||(n[s.id]=!0,i(s.deps),u=s,o={reducers:(l=o).reducers.concat(u.reducers),contextInit:l.contextInit.concat(u.contextInit),eventRefiners:r(r({},l.eventRefiners),u.eventRefiners),eventDefMemberAdders:l.eventDefMemberAdders.concat(u.eventDefMemberAdders),eventSourceRefiners:r(r({},l.eventSourceRefiners),u.eventSourceRefiners),isDraggableTransformers:l.isDraggableTransformers.concat(u.isDraggableTransformers),eventDragMutationMassagers:l.eventDragMutationMassagers.concat(u.eventDragMutationMassagers),eventDefMutationAppliers:l.eventDefMutationAppliers.concat(u.eventDefMutationAppliers),dateSelectionTransformers:l.dateSelectionTransformers.concat(u.dateSelectionTransformers),datePointTransforms:l.datePointTransforms.concat(u.datePointTransforms),dateSpanTransforms:l.dateSpanTransforms.concat(u.dateSpanTransforms),views:r(r({},l.views),u.views),viewPropsTransformers:l.viewPropsTransformers.concat(u.viewPropsTransformers),isPropsValid:u.isPropsValid||l.isPropsValid,externalDefTransforms:l.externalDefTransforms.concat(u.externalDefTransforms),eventResizeJoinTransforms:l.eventResizeJoinTransforms.concat(u.eventResizeJoinTransforms),viewContainerAppends:l.viewContainerAppends.concat(u.viewContainerAppends),eventDropTransformers:l.eventDropTransformers.concat(u.eventDropTransformers),calendarInteractions:l.calendarInteractions.concat(u.calendarInteractions),componentInteractions:l.componentInteractions.concat(u.componentInteractions),themeClasses:r(r({},l.themeClasses),u.themeClasses),eventSourceDefs:l.eventSourceDefs.concat(u.eventSourceDefs),cmdFormatter:u.cmdFormatter||l.cmdFormatter,recurringTypes:l.recurringTypes.concat(u.recurringTypes),namedTimeZonedImpl:u.namedTimeZonedImpl||l.namedTimeZonedImpl,initialView:l.initialView||u.initialView,elementDraggingImpl:l.elementDraggingImpl||u.elementDraggingImpl,optionChangeHandlers:r(r({},l.optionChangeHandlers),u.optionChangeHandlers),scrollGridImpl:u.scrollGridImpl||l.scrollGridImpl,contentTypeHandlers:r(r({},l.contentTypeHandlers),u.contentTypeHandlers),listenerRefiners:r(r({},l.listenerRefiners),u.listenerRefiners),optionRefiners:r(r({},l.optionRefiners),u.optionRefiners),propSetHandlers:r(r({},l.propSetHandlers),u.propSetHandlers)})}var l,u}return e&&i(e),i(t),o}(o,i)),t=o,n=i,e}}var so=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(Pr);function lo(e,t,n,o){if(t[e])return t[e];var i=function(e,t,n,o){var i=n[e],a=o[e],s=function(e){return i&&null!==i[e]?i[e]:a&&null!==a[e]?a[e]:null},l=s("component"),u=s("superType"),c=null;if(u){if(u===e)throw new Error("Can't have a custom view type that references itself");c=lo(u,t,n,o)}!l&&c&&(l=c.component);if(!l)return null;return{type:e,component:l,defaults:r(r({},c?c.defaults:{}),i?i.rawOptions:{}),overrides:r(r({},c?c.overrides:{}),a?a.rawOptions:{})}}(e,t,n,o);return i&&(t[e]=i),i}so.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"},so.prototype.baseIconClass="fc-icon",so.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"},so.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"},so.prototype.iconOverrideOption="buttonIcons",so.prototype.iconOverrideCustomButtonOption="icon",so.prototype.iconOverridePrefix="fc-icon-";var uo=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.rootElRef=Ar(),t.handleRootEl=function(e){Yr(t.rootElRef,e),t.props.elRef&&Yr(t.props.elRef,e)},t}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=t.hookProps;return Hr(ho,{hookProps:n,didMount:t.didMount,willUnmount:t.willUnmount,elRef:this.handleRootEl},(function(r){return Hr(po,{hookProps:n,content:t.content,defaultContent:t.defaultContent,backupElRef:e.rootElRef},(function(e,o){return t.children(r,go(t.classNames,n),e,o)}))}))},t}(jr),co=Lr(0);function po(e){return Hr(co.Consumer,null,(function(t){return Hr(fo,r({renderId:t},e))}))}var fo=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.innerElRef=Ar(),t}return n(t,e),t.prototype.render=function(){return this.props.children(this.innerElRef,this.renderInnerContent())},t.prototype.componentDidMount=function(){this.updateCustomContent()},t.prototype.componentDidUpdate=function(){this.updateCustomContent()},t.prototype.renderInnerContent=function(){var e=this.context.pluginHooks.contentTypeHandlers,t=this.props,n=this.customContentInfo,r=mo(t.content,t.hookProps),o=null;if(void 0===r&&(r=mo(t.defaultContent,t.hookProps)),void 0!==r){if(n)n.contentVal=r[n.contentKey];else if("object"==typeof r)for(var i in e)if(void 0!==r[i]){n=this.customContentInfo={contentKey:i,contentVal:r[i],handler:e[i]()};break}o=n?[]:r}return o},t.prototype.updateCustomContent=function(){this.customContentInfo&&this.customContentInfo.handler(this.innerElRef.current||this.props.backupElRef.current,this.customContentInfo.contentVal)},t}(jr),ho=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleRootEl=function(e){t.rootEl=e,t.props.elRef&&Yr(t.props.elRef,e)},t}return n(t,e),t.prototype.render=function(){return this.props.children(this.handleRootEl)},t.prototype.componentDidMount=function(){var e=this.props.didMount;e&&e(r(r({},this.props.hookProps),{el:this.rootEl}))},t.prototype.componentWillUnmount=function(){var e=this.props.willUnmount;e&&e(r(r({},this.props.hookProps),{el:this.rootEl}))},t}(jr);function vo(){var e,t,n=[];return function(r,o){return t&&Le(t,o)&&r===e||(e=r,t=o,n=go(r,o)),n}}function go(e,t){return"function"==typeof e&&(e=e(t)),Ut(e)}function mo(e,t){return"function"==typeof e?e(t,Hr):e}var yo=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.normalizeClassNames=vo(),t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.options,r={view:t.viewApi},o=this.normalizeClassNames(n.viewClassNames,r);return Hr(ho,{hookProps:r,didMount:n.viewDidMount,willUnmount:n.viewWillUnmount,elRef:e.elRef},(function(t){return e.children(t,["fc-"+e.viewSpec.type+"-view","fc-view"].concat(o))}))},t}(jr);function Eo(e){return Oe(e,So)}function So(e){var t,n="function"==typeof e?{component:e}:e,o=n.component;return n.content&&(t=n,o=function(e){return Hr(zr.Consumer,null,(function(n){return Hr(yo,{viewSpec:n.viewSpec},(function(o,i){var a=r(r({},e),{nextDayThreshold:n.options.nextDayThreshold});return Hr(uo,{hookProps:a,classNames:t.classNames,content:t.content,didMount:t.didMount,willUnmount:t.willUnmount,elRef:o},(function(e,t,n,r){return Hr("div",{className:i.concat(t).join(" "),ref:e},r)}))}))}))}),{superType:n.type,component:o,rawOptions:n}}function Do(e,t,n,o){var i=Eo(e),a=Eo(t.views);return Oe(function(e,t){var n,r={};for(n in e)lo(n,r,e,t);for(n in t)lo(n,r,e,t);return r}(i,a),(function(e){return function(e,t,n,o,i){var a=e.overrides.duration||e.defaults.duration||o.duration||n.duration,s=null,l="",u="",c={};if(a&&(s=function(e){var t=JSON.stringify(e),n=bo[t];void 0===n&&(n=Ye(e),bo[t]=n);return n}(a))){var d=et(s);l=d.unit,1===d.value&&(u=l,c=t[l]?t[l].rawOptions:{})}var p=function(t){var n=t.buttonText||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[u]?n[u]:void 0};return{type:e.type,component:e.component,duration:s,durationUnit:l,singleUnit:u,optionDefaults:e.defaults,optionOverrides:r(r({},c),e.overrides),buttonTextOverride:p(o)||p(n)||e.overrides.buttonText,buttonTextDefault:p(i)||e.defaults.buttonText||p(bt)||e.type}}(e,a,t,n,o)}))}var bo={};var Co=function(){function e(e){this.props=e,this.nowDate=Wn(e.nowInput,e.dateEnv),this.initHiddenDays()}return e.prototype.buildPrev=function(e,t,n){var r=this.props.dateEnv,o=r.subtract(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(o,-1,n)},e.prototype.buildNext=function(e,t,n){var r=this.props.dateEnv,o=r.add(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(o,1,n)},e.prototype.build=function(e,t,n){void 0===n&&(n=!0);var r,o,i,a,s,l,u,c,d=this.props;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(u=e,e=null!=(c=r).start&&u<c.start?c.start:null!=c.end&&u>=c.end?new Date(c.end.valueOf()-1):u),o=this.buildCurrentRangeInfo(e,t),i=/^(year|month|week|day)$/.test(o.unit),a=this.buildRenderRange(this.trimHiddenDays(o.range),o.unit,i),s=a=this.trimHiddenDays(a),d.showNonCurrentDates||(s=nn(s,o.range)),s=nn(s=this.adjustActiveRange(s),r),l=on(o.range,r),{validRange:r,currentRange:o.range,currentRangeUnit:o.unit,isRangeAllDay:i,activeRange:s,renderRange:a,slotMinTime:d.slotMinTime,slotMaxTime:d.slotMaxTime,isValid:l,dateIncrement:this.buildDateIncrement(o.duration)}},e.prototype.buildValidRange=function(){var e=this.props.validRangeInput,t="function"==typeof e?e.call(this.props.calendarApi,this.nowDate):e;return this.refineRange(t)||{start:null,end:null}},e.prototype.buildCurrentRangeInfo=function(e,t){var n,r=this.props,o=null,i=null,a=null;return r.duration?(o=r.duration,i=r.durationUnit,a=this.buildRangeFromDuration(e,t,o,i)):(n=this.props.dayCount)?(i="day",a=this.buildRangeFromDayCount(e,t,n)):(a=this.buildCustomVisibleRange(e))?i=r.dateEnv.greatestWholeUnit(a.start,a.end).unit:(i=et(o=this.getFallbackDuration()).unit,a=this.buildRangeFromDuration(e,t,o,i)),{duration:o,unit:i,range:a}},e.prototype.getFallbackDuration=function(){return Ye({day:1})},e.prototype.adjustActiveRange=function(e){var t=this.props,n=t.dateEnv,r=t.usesMinMaxTime,o=t.slotMinTime,i=t.slotMaxTime,a=e.start,s=e.end;return r&&(Je(o)<0&&(a=be(a),a=n.add(a,o)),Je(i)>1&&(s=ve(s=be(s),-1),s=n.add(s,i))),{start:a,end:s}},e.prototype.buildRangeFromDuration=function(e,t,n,r){var o,i,a,s=this.props,l=s.dateEnv,u=s.dateAlignment;if(!u){var c=this.props.dateIncrement;u=c&&$e(c)<$e(n)?et(c).unit:r}function d(){o=l.startOf(e,u),i=l.add(o,n),a={start:o,end:i}}return Je(n)<=1&&this.isHiddenDay(o)&&(o=be(o=this.skipHiddenDays(o,t))),d(),this.trimHiddenDays(a)||(e=this.skipHiddenDays(e,t),d()),a},e.prototype.buildRangeFromDayCount=function(e,t,n){var r,o=this.props,i=o.dateEnv,a=o.dateAlignment,s=0,l=e;a&&(l=i.startOf(l,a)),l=be(l),r=l=this.skipHiddenDays(l,t);do{r=ve(r,1),this.isHiddenDay(r)||s++}while(s<n);return{start:l,end:r}},e.prototype.buildCustomVisibleRange=function(e){var t=this.props,n=t.visibleRangeInput,r="function"==typeof n?n.call(t.calendarApi,t.dateEnv.toDate(e)):n,o=this.refineRange(r);return!o||null!=o.start&&null!=o.end?o:null},e.prototype.buildRenderRange=function(e,t,n){return e},e.prototype.buildDateIncrement=function(e){var t,n=this.props.dateIncrement;return n||((t=this.props.dateAlignment)?Ye(1,t):e||Ye({days:1}))},e.prototype.refineRange=function(e){if(e){var t=(n=e,r=this.props.dateEnv,o=null,i=null,n.start&&(o=r.createMarker(n.start)),n.end&&(i=r.createMarker(n.end)),o||i?o&&i&&i<o?null:{start:o,end:i}:null);return t&&(t=Jt(t)),t}var n,r,o,i;return null},e.prototype.initHiddenDays=function(){var e,t=this.props.hiddenDays||[],n=[],r=0;for(!1===this.props.weekends&&t.push(0,6),e=0;e<7;e++)(n[e]=-1!==t.indexOf(e))||r++;if(!r)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n},e.prototype.trimHiddenDays=function(e){var t=e.start,n=e.end;return t&&(t=this.skipHiddenDays(t)),n&&(n=this.skipHiddenDays(n,-1,!0)),null==t||null==n||t<n?{start:t,end:n}:null},e.prototype.isHiddenDay=function(e){return e instanceof Date&&(e=e.getUTCDay()),this.isHiddenDayHash[e]},e.prototype.skipHiddenDays=function(e,t,n){for(void 0===t&&(t=1),void 0===n&&(n=!1);this.isHiddenDayHash[(e.getUTCDay()+(n?t:0)+7)%7];)e=ve(e,t);return e},e}();function wo(e,t,n){var r=t?t.activeRange:null;return ko({},function(e,t){var n=Ln(t),r=[].concat(e.eventSources||[]),o=[];e.initialEvents&&r.unshift(e.initialEvents);e.events&&r.unshift(e.events);for(var i=0,a=r;i<a.length;i++){var s=Un(a[i],t,n);s&&o.push(s)}return o}(e,n),r,n)}function Ro(e,t,n,o){var i,a,s=n?n.activeRange:null;switch(t.type){case"ADD_EVENT_SOURCES":return ko(e,t.sources,s,o);case"REMOVE_EVENT_SOURCE":return i=e,a=t.sourceId,He(i,(function(e){return e.sourceId!==a}));case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return n?Mo(e,s,o):e;case"FETCH_EVENT_SOURCES":return xo(e,t.sourceIds?Ae(t.sourceIds):Io(e,o),s,o);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return function(e,t,n,o){var i,a=e[t];if(a&&n===a.latestFetchId)return r(r({},e),((i={})[t]=r(r({},a),{isFetching:!1,fetchRange:o}),i));return e}(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}}function To(e){var t=0;for(var n in e)e[n].isFetching&&t++;return t}function ko(e,t,n,o){for(var i={},a=0,s=t;a<s.length;a++){var l=s[a];i[l.sourceId]=l}return n&&(i=Mo(i,n,o)),r(r({},e),i)}function Mo(e,t,n){return xo(e,He(e,(function(e){return function(e,t,n){return Po(e,n)?!n.options.lazyFetching||!e.fetchRange||e.isFetching||t.start<e.fetchRange.start||t.end>e.fetchRange.end:!e.latestFetchId}(e,t,n)})),t,n)}function xo(e,t,n,r){var o={};for(var i in e){var a=e[i];t[i]?o[i]=_o(a,n,r):o[i]=a}return o}function _o(e,t,n){var o=n.options,i=n.calendarApi,a=n.pluginHooks.eventSourceDefs[e.sourceDefId],s=$();return a.fetch({eventSource:e,range:t,context:n},(function(r){var a=r.rawEvents;o.eventSourceSuccess&&(a=o.eventSourceSuccess.call(i,a,r.xhr)||a),e.success&&(a=e.success.call(i,a,r.xhr)||a),n.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:s,fetchRange:t,rawEvents:a})}),(function(r){console.warn(r.message,r),o.eventSourceFailure&&o.eventSourceFailure.call(i,r),e.failure&&e.failure(r),n.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:s,fetchRange:t,error:r})})),r(r({},e),{isFetching:!0,latestFetchId:s})}function Io(e,t){return He(e,(function(e){return Po(e,t)}))}function Po(e,t){return!t.pluginHooks.eventSourceDefs[e.sourceDefId].ignoreRange}function No(e,t){switch(t.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return t.selection;default:return e}}function Ho(e,t){switch(t.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return t.eventInstanceId;default:return e}}function Oo(e,t){var n;switch(t.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":return{affectedEvents:(n=t.state).affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function Ao(e,t){var n;switch(t.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":return{affectedEvents:(n=t.state).affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function Uo(e,t,n,r,o){var i=[];return{headerToolbar:e.headerToolbar?Lo(e.headerToolbar,e,t,n,r,o,i):null,footerToolbar:e.footerToolbar?Lo(e.footerToolbar,e,t,n,r,o,i):null,viewsWithButtons:i}}function Lo(e,t,n,r,o,i,a){return Oe(e,(function(e){return function(e,t,n,r,o,i,a){var s="rtl"===t.direction,l=t.customButtons||{},u=n.buttonText||{},c=t.buttonText||{};return(e?e.split(" "):[]).map((function(e){return e.split(",").map((function(e){if("title"===e)return{buttonName:e};var t,n=void 0,d=void 0,p=void 0,f=void 0;return(t=l[e])?(d=function(e){t.click&&t.click.call(e.target,e,e.target)},(p=r.getCustomButtonIconClass(t))||(p=r.getIconClass(e,s))||(f=t.text)):(n=o[e])?(a.push(e),d=function(){i.changeView(e)},(f=n.buttonTextOverride)||(p=r.getIconClass(e,s))||(f=n.buttonTextDefault)):i[e]&&(d=function(){i[e]()},(f=u[e])||(p=r.getIconClass(e,s))||(f=c[e])),{buttonName:e,buttonClick:d,buttonIcon:p,buttonText:f}}))}))}(e,t,n,r,o,i,a)}))}function Wo(e,t,n,r,o){var i=null;"GET"===(e=e.toUpperCase())?t=function(e,t){return e+(-1===e.indexOf("?")?"?":"&")+Vo(t)}(t,n):i=Vo(n);var a=new XMLHttpRequest;a.open(e,t,!0),"GET"!==e&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.onload=function(){if(a.status>=200&&a.status<400){var e=!1,t=void 0;try{t=JSON.parse(a.responseText),e=!0}catch(e){}e?r(t,a):o("Failure parsing JSON",a)}else o("Request failed",a)},a.onerror=function(){o("Request failed",a)},a.send(i)}function Vo(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}function zo(e,t){for(var n=Ue(t.getCurrentData().eventSources),r=[],o=0,i=e;o<i.length;o++){for(var a=i[o],s=!1,l=0;l<n.length;l++)if(n[l]._raw===a){n.splice(l,1),s=!0;break}s||r.push(a)}for(var u=0,c=n;u<c.length;u++){var d=c[u];t.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:d.sourceId})}for(var p=0,f=r;p<f.length;p++){var h=f[p];t.calendarApi.addEventSource(h)}}var Fo=[io({eventSourceDefs:[{ignoreRange:!0,parseMeta:function(e){return Array.isArray(e.events)?e.events:null},fetch:function(e,t){t({rawEvents:e.eventSource.meta})}}]}),io({eventSourceDefs:[{parseMeta:function(e){return"function"==typeof e.events?e.events:null},fetch:function(e,t,n){var r=e.context.dateEnv;Tr(e.eventSource.meta.bind(null,Tn(e.range,r)),(function(e){t({rawEvents:e})}),n)}}]}),io({eventSourceRefiners:{method:String,extraParams:_t,startParam:String,endParam:String,timeZoneParam:String},eventSourceDefs:[{parseMeta:function(e){return e.url?{url:e.url,method:(e.method||"GET").toUpperCase(),extraParams:e.extraParams,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam}:null},fetch:function(e,t,n){var o=e.eventSource.meta,i=function(e,t,n){var o,i,a,s,l=n.dateEnv,u=n.options,c={};null==(o=e.startParam)&&(o=u.startParam);null==(i=e.endParam)&&(i=u.endParam);null==(a=e.timeZoneParam)&&(a=u.timeZoneParam);s="function"==typeof e.extraParams?e.extraParams():e.extraParams||{};r(c,s),c[o]=l.formatIso(t.start),c[i]=l.formatIso(t.end),"local"!==l.timeZone&&(c[a]=l.timeZone);return c}(o,e.range,e.context);Wo(o.method,o.url,i,(function(e,n){t({rawEvents:e,xhr:n})}),(function(e,t){n({message:e,xhr:t})}))}}]}),io({recurringTypes:[{parse:function(e,t){if(e.daysOfWeek||e.startTime||e.endTime||e.startRecur||e.endRecur){var n={daysOfWeek:e.daysOfWeek||null,startTime:e.startTime||null,endTime:e.endTime||null,startRecur:e.startRecur?t.createMarker(e.startRecur):null,endRecur:e.endRecur?t.createMarker(e.endRecur):null},r=void 0;return e.duration&&(r=e.duration),!r&&e.startTime&&e.endTime&&(o=e.endTime,i=e.startTime,r={years:o.years-i.years,months:o.months-i.months,days:o.days-i.days,milliseconds:o.milliseconds-i.milliseconds}),{allDayGuess:Boolean(!e.startTime&&!e.endTime),duration:r,typeData:n}}var o,i;return null},expand:function(e,t,n){var r=nn(t,{start:e.startRecur,end:e.endRecur});return r?function(e,t,n,r){var o=e?Ae(e):null,i=be(n.start),a=n.end,s=[];for(;i<a;){var l=void 0;o&&!o[i.getUTCDay()]||(l=t?r.add(i,t):i,s.push(l)),i=ve(i,1)}return s}(e.daysOfWeek,e.startTime,r,n):[]}}],eventRefiners:{daysOfWeek:_t,startTime:Ye,endTime:Ye,duration:Ye,startRecur:_t,endRecur:_t}}),io({optionChangeHandlers:{events:function(e,t){zo([e],t)},eventSources:zo}}),io({contentTypeHandlers:{html:function(){return Bo},domNodes:function(){return jo}},propSetHandlers:{dateProfile:function(e,t){t.emitter.trigger("datesSet",r(r({},Tn(e.activeRange,t.dateEnv)),{view:t.viewApi}))},eventStore:function(e,t){var n=t.emitter;n.hasHandlers("eventsSet")&&n.trigger("eventsSet",Bn(e,t))}}})];function Bo(e,t){e.innerHTML=t}function jo(e,t){var n=Array.prototype.slice.call(e.childNodes),r=Array.prototype.slice.call(t);if(!ot(n,r)){for(var o=0,i=r;o<i.length;o++){var a=i[o];e.appendChild(a)}n.forEach(W)}}var Go=function(){function e(e){this.drainedOption=e,this.isRunning=!1,this.isDirty=!1,this.pauseDepths={},this.timeoutId=0}return e.prototype.request=function(e){this.isDirty=!0,this.isPaused()||(this.clearTimeout(),null==e?this.tryDrain():this.timeoutId=setTimeout(this.tryDrain.bind(this),e))},e.prototype.pause=function(e){void 0===e&&(e="");var t=this.pauseDepths;t[e]=(t[e]||0)+1,this.clearTimeout()},e.prototype.resume=function(e,t){void 0===e&&(e="");var n=this.pauseDepths;if(e in n){if(t)delete n[e];else--n[e]<=0&&delete n[e];this.tryDrain()}},e.prototype.isPaused=function(){return Object.keys(this.pauseDepths).length},e.prototype.tryDrain=function(){if(!this.isRunning&&!this.isPaused()){for(this.isRunning=!0;this.isDirty;)this.isDirty=!1,this.drained();this.isRunning=!1}},e.prototype.clear=function(){this.clearTimeout(),this.isDirty=!1,this.pauseDepths={}},e.prototype.clearTimeout=function(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=0)},e.prototype.drained=function(){this.drainedOption&&this.drainedOption()},e}(),qo=function(){function e(e,t){this.runTaskOption=e,this.drainedOption=t,this.queue=[],this.delayedRunner=new Go(this.drain.bind(this))}return e.prototype.request=function(e,t){this.queue.push(e),this.delayedRunner.request(t)},e.prototype.pause=function(e){this.delayedRunner.pause(e)},e.prototype.resume=function(e,t){this.delayedRunner.resume(e,t)},e.prototype.drain=function(){for(var e=this.queue;e.length;){for(var t=[],n=void 0;n=e.shift();)this.runTask(n),t.push(n);this.drained(t)}},e.prototype.runTask=function(e){this.runTaskOption&&this.runTaskOption(e)},e.prototype.drained=function(e){this.drainedOption&&this.drainedOption(e)},e}();function Yo(e,t,n){var r;return r=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,n.formatRange(r.start,r.end,St(t.titleFormat||function(e){var t=e.currentRangeUnit;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};var n=De(e.currentRange.start,e.currentRange.end);return null!==n&&n>1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}}(e)),{isEndExclusive:e.isRangeAllDay,defaultSeparator:t.titleRangeSeparator})}var Zo=function(){function e(e){var t=this;this.computeOptionsData=it(this._computeOptionsData),this.computeCurrentViewData=it(this._computeCurrentViewData),this.organizeRawLocales=it($n),this.buildLocale=it(Qn),this.buildPluginHooks=ao(),this.buildDateEnv=it(Xo),this.buildTheme=it(Ko),this.parseToolbars=it(Uo),this.buildViewSpecs=it(Do),this.buildDateProfileGenerator=at(Jo),this.buildViewApi=it($o),this.buildViewUiProps=at(ti),this.buildEventUiBySource=it(Qo,Le),this.buildEventUiBases=it(ei),this.parseContextBusinessHours=at(ni),this.buildTitle=it(Yo),this.emitter=new kr,this.actionRunner=new qo(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.getCurrentData=function(){return t.data},this.dispatch=function(e){t.actionRunner.request(e)},this.props=e,this.actionRunner.pause();var n={},o=this.computeOptionsData(e.optionOverrides,n,e.calendarApi),i=o.calendarOptions.initialView||o.pluginHooks.initialView,a=this.computeCurrentViewData(i,o,e.optionOverrides,n);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(a.options);var s,l,u,c=(s=o.calendarOptions,l=o.dateEnv,null!=(u=s.initialDate)?l.createMarker(u):Wn(s.now,l)),d=a.dateProfileGenerator.build(c);sn(d.activeRange,c)||(c=d.currentRange.start);for(var p={dateEnv:o.dateEnv,options:o.calendarOptions,pluginHooks:o.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},f=0,h=o.pluginHooks.contextInit;f<h.length;f++){(0,h[f])(p)}for(var v=wo(o.calendarOptions,d,p),g={dynamicOptionOverrides:n,currentViewType:i,currentDate:c,dateProfile:d,businessHours:this.parseContextBusinessHours(p),eventSources:v,eventUiBases:{},loadingLevel:To(v),eventStore:{defs:{},instances:{}},renderableEventStore:{defs:{},instances:{}},dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(p).selectionConfig},m=r(r({},p),g),y=0,E=o.pluginHooks.reducers;y<E.length;y++){var S=E[y];r(g,S(null,null,m))}g.loadingLevel&&this.emitter.trigger("loading",!0),this.state=g,this.updateData(),this.actionRunner.resume()}return e.prototype.resetOptions=function(e,t){var n=this.props;n.optionOverrides=t?r(r({},n.optionOverrides),e):e,this.actionRunner.request({type:"NOTHING"})},e.prototype._handleAction=function(e){var t=this.props,n=this.state,o=this.emitter,i=function(e,t){var n;switch(t.type){case"SET_OPTION":return r(r({},e),((n={})[t.optionName]=t.rawOptionValue,n));default:return e}}(n.dynamicOptionOverrides,e),a=this.computeOptionsData(t.optionOverrides,i,t.calendarApi),s=function(e,t){switch(t.type){case"CHANGE_VIEW_TYPE":return t.viewType}return e}(n.currentViewType,e),l=this.computeCurrentViewData(s,a,t.optionOverrides,i);t.calendarApi.currentDataManager=this,o.setThisContext(t.calendarApi),o.setOptions(l.options);var u={dateEnv:a.dateEnv,options:a.calendarOptions,pluginHooks:a.pluginHooks,calendarApi:t.calendarApi,dispatch:this.dispatch,emitter:o,getCurrentData:this.getCurrentData},c=n.currentDate,d=n.dateProfile;this.data&&this.data.dateProfileGenerator!==l.dateProfileGenerator&&(d=l.dateProfileGenerator.build(c)),d=function(e,t,n,r){var o;switch(t.type){case"CHANGE_VIEW_TYPE":return r.build(t.dateMarker||n);case"CHANGE_DATE":if(!e.activeRange||!sn(e.currentRange,t.dateMarker))return r.build(t.dateMarker);break;case"PREV":if((o=r.buildPrev(e,n)).isValid)return o;break;case"NEXT":if((o=r.buildNext(e,n)).isValid)return o}return e}(d,e,c=function(e,t){switch(t.type){case"CHANGE_DATE":return t.dateMarker;default:return e}}(c,e),l.dateProfileGenerator),sn(d.currentRange,c)||(c=d.currentRange.start);for(var p=Ro(n.eventSources,e,d,u),f=To(p),h=Zr(n.eventStore,e,p,d,u),v=f&&!l.options.progressiveEventRendering&&n.renderableEventStore||h,g=this.buildViewUiProps(u),m=g.eventUiSingleBase,y=g.selectionConfig,E=this.buildEventUiBySource(p),S=this.buildEventUiBases(v.defs,m,E),D=n.loadingLevel||0,b=f,C={dynamicOptionOverrides:i,currentViewType:s,currentDate:c,dateProfile:d,eventSources:p,eventStore:h,renderableEventStore:v,selectionConfig:y,eventUiBases:S,loadingLevel:b,businessHours:this.parseContextBusinessHours(u),dateSelection:No(n.dateSelection,e),eventSelection:Ho(n.eventSelection,e),eventDrag:Oo(n.eventDrag,e),eventResize:Ao(n.eventResize,e)},w=r(r({},u),C),R=0,T=a.pluginHooks.reducers;R<T.length;R++){var k=T[R];r(C,k(n,e,w))}!D&&b?o.trigger("loading",!0):D&&!b&&o.trigger("loading",!1),this.state=C,t.onAction&&t.onAction(e)},e.prototype.updateData=function(){var e,t,n,o,i,a,s,l,u,c=this.props,d=this.state,p=this.data,f=this.computeOptionsData(c.optionOverrides,d.dynamicOptionOverrides,c.calendarApi),h=this.computeCurrentViewData(d.currentViewType,f,c.optionOverrides,d.dynamicOptionOverrides),v=this.data=r(r(r({viewTitle:this.buildTitle(d.dateProfile,h.options,f.dateEnv),calendarApi:c.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},f),h),d),g=f.pluginHooks.optionChangeHandlers,m=p&&p.calendarOptions,y=f.calendarOptions;if(m&&m!==y)for(var E in m.timeZone!==y.timeZone&&(d.eventSources=v.eventSources=(a=v.eventSources,s=d.dateProfile,l=v,u=s?s.activeRange:null,xo(a,Io(a,l),u,l)),d.eventStore=v.eventStore=(e=v.eventStore,t=p.dateEnv,n=v.dateEnv,o=e.defs,i=Oe(e.instances,(function(e){var i=o[e.defId];return i.allDay||i.recurringDef?e:r(r({},e),{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo})})),{defs:o,instances:i})),g)m[E]!==y[E]&&g[E](y[E],v);c.onData&&c.onData(v)},e.prototype._computeOptionsData=function(e,t,n){var r=this.processRawCalendarOptions(e,t),o=r.refinedOptions,i=r.pluginHooks,a=r.localeDefaults,s=r.availableLocaleData;ri(r.extra);var l=this.buildDateEnv(o.timeZone,o.locale,o.weekNumberCalculation,o.firstDay,o.weekText,i,s,o.defaultRangeSeparator),u=this.buildViewSpecs(i.views,e,t,a),c=this.buildTheme(o,i);return{calendarOptions:o,pluginHooks:i,dateEnv:l,viewSpecs:u,theme:c,toolbarConfig:this.parseToolbars(o,e,c,u,n),localeDefaults:a,availableRawLocales:s.map}},e.prototype.processRawCalendarOptions=function(e,t){var n=Mt([bt,e,t]),o=n.locales,i=n.locale,a=this.organizeRawLocales(o),s=a.map,l=this.buildLocale(i||a.defaultCode,s).options,u=this.buildPluginHooks(e.plugins||[],Fo),c=this.currentCalendarOptionsRefiners=r(r(r(r(r({},Dt),Ct),wt),u.listenerRefiners),u.optionRefiners),d={},p=Mt([bt,l,e,t]),f={},h=this.currentCalendarOptionsInput,v=this.currentCalendarOptionsRefined,g=!1;for(var m in p)"plugins"!==m&&(p[m]===h[m]||Rt[m]&&m in h&&Rt[m](h[m],p[m])?f[m]=v[m]:c[m]?(f[m]=c[m](p[m]),g=!0):d[m]=h[m]);return g&&(this.currentCalendarOptionsInput=p,this.currentCalendarOptionsRefined=f),{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:u,availableLocaleData:a,localeDefaults:l,extra:d}},e.prototype._computeCurrentViewData=function(e,t,n,r){var o=t.viewSpecs[e];if(!o)throw new Error('viewType "'+e+"\" is not available. Please make sure you've loaded all neccessary plugins");var i=this.processRawViewOptions(o,t.pluginHooks,t.localeDefaults,n,r),a=i.refinedOptions;return ri(i.extra),{viewSpec:o,options:a,dateProfileGenerator:this.buildDateProfileGenerator({dateProfileGeneratorClass:o.optionDefaults.dateProfileGeneratorClass,duration:o.duration,durationUnit:o.durationUnit,usesMinMaxTime:o.optionDefaults.usesMinMaxTime,dateEnv:t.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:a.slotMinTime,slotMaxTime:a.slotMaxTime,showNonCurrentDates:a.showNonCurrentDates,dayCount:a.dayCount,dateAlignment:a.dateAlignment,dateIncrement:a.dateIncrement,hiddenDays:a.hiddenDays,weekends:a.weekends,nowInput:a.now,validRangeInput:a.validRange,visibleRangeInput:a.visibleRange,monthMode:a.monthMode,fixedWeekCount:a.fixedWeekCount}),viewApi:this.buildViewApi(e,this.getCurrentData,t.dateEnv)}},e.prototype.processRawViewOptions=function(e,t,n,o,i){var a=Mt([bt,e.optionDefaults,n,o,e.optionOverrides,i]),s=r(r(r(r(r(r({},Dt),Ct),wt),kt),t.listenerRefiners),t.optionRefiners),l={},u=this.currentViewOptionsInput,c=this.currentViewOptionsRefined,d=!1,p={};for(var f in a)a[f]===u[f]?l[f]=c[f]:(a[f]===this.currentCalendarOptionsInput[f]?f in this.currentCalendarOptionsRefined&&(l[f]=this.currentCalendarOptionsRefined[f]):s[f]?l[f]=s[f](a[f]):p[f]=a[f],d=!0);return d&&(this.currentViewOptionsInput=a,this.currentViewOptionsRefined=l),{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:p}},e}();function Xo(e,t,n,r,o,i,a,s){var l=Qn(t||a.defaultCode,a.map);return new Xn({calendarSystem:"gregory",timeZone:e,namedTimeZoneImpl:i.namedTimeZonedImpl,locale:l,weekNumberCalculation:n,firstDay:r,weekText:o,cmdFormatter:i.cmdFormatter,defaultSeparator:s})}function Ko(e,t){return new(t.themeClasses[e.themeSystem]||so)(e)}function Jo(e){return new(e.dateProfileGeneratorClass||Co)(e)}function $o(e,t,n){return new On(e,t,n)}function Qo(e){return Oe(e,(function(e){return e.ui}))}function ei(e,t,n){var r={"":t};for(var o in e){var i=e[o];i.sourceId&&n[i.sourceId]&&(r[o]=n[i.sourceId])}return r}function ti(e){var t=e.options;return{eventUiSingleBase:Wt({display:t.eventDisplay,editable:t.editable,startEditable:t.eventStartEditable,durationEditable:t.eventDurationEditable,constraint:t.eventConstraint,overlap:"boolean"==typeof t.eventOverlap?t.eventOverlap:void 0,allow:t.eventAllow,backgroundColor:t.eventBackgroundColor,borderColor:t.eventBorderColor,textColor:t.eventTextColor,color:t.eventColor},e),selectionConfig:Wt({constraint:t.selectConstraint,overlap:"boolean"==typeof t.selectOverlap?t.selectOverlap:void 0,allow:t.selectAllow},e)}}function ni(e){return or(e.options.businessHours,e)}function ri(e,t){for(var n in e)console.warn("Unknown option '"+n+"'"+(t?" for view '"+t+"'":""))}var oi=function(e){function t(t){var n=e.call(this,t)||this;return n.handleData=function(e){n.dataManager?n.setState(e):n.state=e},n.dataManager=new Zo({optionOverrides:t.optionOverrides,calendarApi:t.calendarApi,onData:n.handleData}),n}return n(t,e),t.prototype.render=function(){return this.props.children(this.state)},t.prototype.componentDidUpdate=function(e){var t=this.props.optionOverrides;t!==e.optionOverrides&&this.dataManager.resetOptions(t)},t}(Nr);var ii=function(e){this.timeZoneName=e},ai=function(){function e(e){this.component=e.component}return e.prototype.destroy=function(){},e}();function si(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter}}function li(e){var t;return(t={})[e.component.uid]=e,t}var ui={},ci=function(){function e(e,t){this.emitter=new kr}return e.prototype.destroy=function(){},e.prototype.setMirrorIsVisible=function(e){},e.prototype.setMirrorNeedsRevert=function(e){},e.prototype.setAutoScrollEnabled=function(e){},e}(),di={},pi={startTime:Ye,duration:Ye,create:Boolean,sourceId:String};function fi(e){var t=xt(e,pi),n=t.refined,r=t.extra;return{startTime:n.startTime||null,duration:n.duration||null,create:null==n.create||n.create,sourceId:n.sourceId,leftoverProps:r}}var hi=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e,t,n=this.props,r=n.model,o=n.extraClassName,i=!1,a=r.center;return r.left?(i=!0,e=r.left):e=r.start,r.right?(i=!0,t=r.right):t=r.end,Hr("div",{className:[o||"","fc-toolbar",i?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",e||[]),this.renderSection("center",a||[]),this.renderSection("end",t||[]))},t.prototype.renderSection=function(e,t){var n=this.props;return Hr(vi,{key:e,widgetGroups:t,title:n.title,activeButton:n.activeButton,isTodayEnabled:n.isTodayEnabled,isPrevEnabled:n.isPrevEnabled,isNextEnabled:n.isNextEnabled})},t}(jr),vi=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this,t=this.props.widgetGroups.map((function(t){return e.renderWidgetGroup(t)}));return Hr.apply(void 0,o(["div",{className:"fc-toolbar-chunk"}],t))},t.prototype.renderWidgetGroup=function(e){for(var t=this.props,n=this.context.theme,i=[],a=!0,s=0,l=e;s<l.length;s++){var u=l[s],c=u.buttonName,d=u.buttonClick,p=u.buttonText,f=u.buttonIcon;if("title"===c)a=!1,i.push(Hr("h2",{className:"fc-toolbar-title"},t.title));else{var h=f?{"aria-label":c}:{},v=["fc-"+c+"-button",n.getClass("button")];c===t.activeButton&&v.push(n.getClass("buttonActive"));var g=!t.isTodayEnabled&&"today"===c||!t.isPrevEnabled&&"prev"===c||!t.isNextEnabled&&"next"===c;i.push(Hr("button",r({disabled:g,className:v.join(" "),onClick:d,type:"button"},h),p||(f?Hr("span",{className:f}):"")))}}if(i.length>1){var m=a&&n.getClass("buttonGroup")||"";return Hr.apply(void 0,o(["div",{className:m}],i))}return i[0]},t}(jr),gi=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={availableWidth:null},t.handleEl=function(e){t.el=e,Yr(t.props.elRef,e),t.updateAvailableWidth()},t.handleResize=function(){t.updateAvailableWidth()},t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.state,n=e.aspectRatio,r=["fc-view-harness",n||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],o="",i="";return n?null!==t.availableWidth?o=t.availableWidth/n:i=1/n*100+"%":o=e.height||"",Hr("div",{ref:this.handleEl,onClick:e.onClick,className:r.join(" "),style:{height:o,paddingBottom:i}},e.children)},t.prototype.componentDidMount=function(){this.context.addResizeHandler(this.handleResize)},t.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleResize)},t.prototype.updateAvailableWidth=function(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})},t}(jr),mi=function(e){function t(t){var n=e.call(this,t)||this;return n.handleSegClick=function(e,t){var r=n.component,o=r.context,i=dn(t);if(i&&r.isValidSegDownEl(e.target)){var a=V(e.target,".fc-event-forced-url"),s=a?a.querySelector("a[href]").href:"";o.emitter.trigger("eventClick",{el:t,event:new zn(r.context,i.eventRange.def,i.eventRange.instance),jsEvent:e,view:o.viewApi}),s&&!e.defaultPrevented&&(window.location.href=s)}},n.destroy=Z(t.el,"click",".fc-event",n.handleSegClick),n}return n(t,e),t}(ai),yi=function(e){function t(t){var n,r,o,i,a,s=e.call(this,t)||this;return s.handleEventElRemove=function(e){e===s.currentSegEl&&s.handleSegLeave(null,s.currentSegEl)},s.handleSegEnter=function(e,t){dn(t)&&(s.currentSegEl=t,s.triggerEvent("eventMouseEnter",e,t))},s.handleSegLeave=function(e,t){s.currentSegEl&&(s.currentSegEl=null,s.triggerEvent("eventMouseLeave",e,t))},s.removeHoverListeners=(n=t.el,r=".fc-event",o=s.handleSegEnter,i=s.handleSegLeave,Z(n,"mouseover",r,(function(e,t){if(t!==a){a=t,o(e,t);var n=function(e){a=null,i(e,t),t.removeEventListener("mouseleave",n)};t.addEventListener("mouseleave",n)}}))),s}return n(t,e),t.prototype.destroy=function(){this.removeHoverListeners()},t.prototype.triggerEvent=function(e,t,n){var r=this.component,o=r.context,i=dn(n);t&&!r.isValidSegDownEl(t.target)||o.emitter.trigger(e,{el:n,event:new zn(o,i.eventRange.def,i.eventRange.instance),jsEvent:t,view:o.viewApi})},t}(ai),Ei=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.buildViewContext=it(Fr),t.buildViewPropTransformers=it(Di),t.buildToolbarProps=it(Si),t.handleNavLinkClick=Y("a[data-navlink]",t._handleNavLinkClick.bind(t)),t.headerRef=Ar(),t.footerRef=Ar(),t.interactionsStore={},t.registerInteractiveComponent=function(e,n){var r=si(e,n),o=[mi,yi].concat(t.props.pluginHooks.componentInteractions).map((function(e){return new e(r)}));t.interactionsStore[e.uid]=o,ui[e.uid]=r},t.unregisterInteractiveComponent=function(e){for(var n=0,r=t.interactionsStore[e.uid];n<r.length;n++){r[n].destroy()}delete t.interactionsStore[e.uid],delete ui[e.uid]},t.resizeRunner=new Go((function(){t.props.emitter.trigger("_resize",!0),t.props.emitter.trigger("windowResize",{view:t.props.viewApi})})),t.handleWindowResize=function(e){var n=t.props.options;n.handleWindowResize&&e.target===window&&t.resizeRunner.request(n.windowResizeDelay)},t}return n(t,e),t.prototype.render=function(){var e,t=this.props,n=t.toolbarConfig,o=t.options,i=this.buildToolbarProps(t.viewSpec,t.dateProfile,t.dateProfileGenerator,t.currentDate,Wn(t.options.now,t.dateEnv),t.viewTitle),a=!1,s="";t.isHeightAuto||t.forPrint?s="":null!=o.height?a=!0:null!=o.contentHeight?s=o.contentHeight:e=Math.max(o.aspectRatio,.5);var l=this.buildViewContext(t.viewSpec,t.viewApi,t.options,t.dateProfileGenerator,t.dateEnv,t.theme,t.pluginHooks,t.dispatch,t.getCurrentData,t.emitter,t.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent);return Hr(zr.Provider,{value:l},n.headerToolbar&&Hr(hi,r({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:n.headerToolbar},i)),Hr(gi,{liquid:a,height:s,aspectRatio:e,onClick:this.handleNavLinkClick},this.renderView(t),this.buildAppendContent()),n.footerToolbar&&Hr(hi,r({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:n.footerToolbar},i)))},t.prototype.componentDidMount=function(){var e=this.props;this.calendarInteractions=e.pluginHooks.calendarInteractions.map((function(t){return new t(e)})),window.addEventListener("resize",this.handleWindowResize);var t=e.pluginHooks.propSetHandlers;for(var n in t)t[n](e[n],e)},t.prototype.componentDidUpdate=function(e){var t=this.props,n=t.pluginHooks.propSetHandlers;for(var r in n)t[r]!==e[r]&&n[r](t[r],t)},t.prototype.componentWillUnmount=function(){window.removeEventListener("resize",this.handleWindowResize),this.resizeRunner.clear();for(var e=0,t=this.calendarInteractions;e<t.length;e++){t[e].destroy()}this.props.emitter.trigger("_unmount")},t.prototype._handleNavLinkClick=function(e,t){var n=this.props,r=n.dateEnv,o=n.options,i=n.calendarApi,a=t.getAttribute("data-navlink");a=a?JSON.parse(a):{};var s=r.createMarker(a.date),l=a.type,u="day"===l?o.navLinkDayClick:"week"===l?o.navLinkWeekClick:null;"function"==typeof u?u.call(i,r.toDate(s),e):("string"==typeof u&&(l=u),i.zoomTo(s,l))},t.prototype.buildAppendContent=function(){var e=this.props,t=e.pluginHooks.viewContainerAppends.map((function(t){return t(e)}));return Hr.apply(void 0,o([Ur,{}],t))},t.prototype.renderView=function(e){for(var t=e.pluginHooks,n=e.viewSpec,o={dateProfile:e.dateProfile,businessHours:e.businessHours,eventStore:e.renderableEventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,isHeightAuto:e.isHeightAuto,forPrint:e.forPrint},i=0,a=this.buildViewPropTransformers(t.viewPropsTransformers);i<a.length;i++){var s=a[i];r(o,s.transform(o,e))}var l=n.component;return Hr(l,r({},o))},t}(Br);function Si(e,t,n,r,o,i){var a=n.build(o,void 0,!1),s=n.buildPrev(t,r,!1),l=n.buildNext(t,r,!1);return{title:i,activeButton:e.type,isTodayEnabled:a.isValid&&!sn(t.currentRange,o),isPrevEnabled:s.isValid,isNextEnabled:l.isValid}}function Di(e){return e.map((function(e){return new e}))}var bi=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={forPrint:!1},t.handleBeforePrint=function(){t.setState({forPrint:!0})},t.handleAfterPrint=function(){t.setState({forPrint:!1})},t}return n(t,e),t.prototype.render=function(){var e=this.props,t=e.options,n=this.state.forPrint,r=n||"auto"===t.height||"auto"===t.contentHeight,o=r||null==t.height?"":t.height,i=["fc",n?"fc-media-print":"fc-media-screen","fc-direction-"+t.direction,e.theme.getClass("root")];return cr()||i.push("fc-liquid-hack"),e.children(i,o,r,n)},t.prototype.componentDidMount=function(){var e=this.props.emitter;e.on("_beforeprint",this.handleBeforePrint),e.on("_afterprint",this.handleAfterPrint)},t.prototype.componentWillUnmount=function(){var e=this.props.emitter;e.off("_beforeprint",this.handleBeforePrint),e.off("_afterprint",this.handleAfterPrint)},t}(jr);function Ci(e,t){return St(!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"})}var wi="fc-col-header-cell",Ri=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.context,t=e.dateEnv,n=e.options,o=e.theme,i=e.viewApi,a=this.props,s=a.date,l=a.dateProfile,u=hr(s,a.todayRange,null,l),c=[wi].concat(vr(u,o)),d=t.format(s,a.dayHeaderFormat),p=n.navLinks&&!u.isDisabled&&a.colCnt>1?{"data-navlink":gr(s),tabIndex:0}:{},f=r(r(r({date:t.toDate(s),view:i},a.extraHookProps),{text:d}),u);return Hr(uo,{hookProps:f,classNames:n.dayHeaderClassNames,content:n.dayHeaderContent,defaultContent:ki,didMount:n.dayHeaderDidMount,willUnmount:n.dayHeaderWillUnmount},(function(e,t,n,o){return Hr("th",r({ref:e,className:c.concat(t).join(" "),"data-date":u.isDisabled?void 0:tt(s),colSpan:a.colSpan},a.extraDataAttrs),Hr("div",{className:"fc-scrollgrid-sync-inner"},!u.isDisabled&&Hr("a",r({ref:n,className:["fc-col-header-cell-cushion",a.isSticky?"fc-sticky":""].join(" ")},p),o)))}))},t}(jr),Ti=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.dateEnv,o=t.theme,i=t.viewApi,a=t.options,s=ve(new Date(2592e5),e.dow),l={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},u=[wi].concat(vr(l,o),e.extraClassNames||[]),c=n.format(s,e.dayHeaderFormat),d=r(r(r(r({date:s},l),{view:i}),e.extraHookProps),{text:c});return Hr(uo,{hookProps:d,classNames:a.dayHeaderClassNames,content:a.dayHeaderContent,defaultContent:ki,didMount:a.dayHeaderDidMount,willUnmount:a.dayHeaderWillUnmount},(function(t,n,o,i){return Hr("th",r({ref:t,className:u.concat(n).join(" "),colSpan:e.colSpan},e.extraDataAttrs),Hr("div",{className:"fc-scrollgrid-sync-inner"},Hr("a",{className:["fc-col-header-cell-cushion",e.isSticky?"fc-sticky":""].join(" "),ref:o},i)))}))},t}(jr);function ki(e){return e.text}var Mi=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.initialNowDate=Wn(n.options.now,n.dateEnv),r.initialNowQueriedMs=(new Date).valueOf(),r.state=r.computeTiming().currentState,r}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.state;return e.children(t.nowDate,t.todayRange)},t.prototype.componentDidMount=function(){this.setTimeout()},t.prototype.componentDidUpdate=function(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())},t.prototype.componentWillUnmount=function(){this.clearTimeout()},t.prototype.computeTiming=function(){var e=this.props,t=this.context,n=ge(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs),r=t.dateEnv.startOf(n,e.unit),o=t.dateEnv.add(r,Ye(1,e.unit)),i=o.valueOf()-n.valueOf();return{currentState:{nowDate:r,todayRange:xi(r)},nextState:{nowDate:o,todayRange:xi(o)},waitMs:i}},t.prototype.setTimeout=function(){var e=this,t=this.computeTiming(),n=t.nextState,r=t.waitMs;this.timeoutId=setTimeout((function(){e.setState(n,(function(){e.setTimeout()}))}),r)},t.prototype.clearTimeout=function(){this.timeoutId&&clearTimeout(this.timeoutId)},t.contextType=zr,t}(Nr);function xi(e){var t=be(e);return{start:t,end:ve(t,1)}}var _i=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.createDayHeaderFormatter=it(Ii),t}return n(t,e),t.prototype.render=function(){var e=this.context,t=this.props,n=t.dates,r=t.dateProfile,o=t.datesRepDistinctDays,i=t.renderIntro,a=this.createDayHeaderFormatter(e.options.dayHeaderFormat,o,n.length);return Hr(Mi,{unit:"day"},(function(e,t){return Hr("tr",null,i&&i(),n.map((function(e){return o?Hr(Ri,{key:e.toISOString(),date:e,dateProfile:r,todayRange:t,colCnt:n.length,dayHeaderFormat:a}):Hr(Ti,{key:e.getUTCDay(),dow:e.getUTCDay(),dayHeaderFormat:a})})))}))},t}(jr);function Ii(e,t,n){return e||Ci(t,n)}var Pi=function(){function e(e,t){for(var n=e.start,r=e.end,o=[],i=[],a=-1;n<r;)t.isHiddenDay(n)?o.push(a+.5):(a++,o.push(a),i.push(n)),n=ve(n,1);this.dates=i,this.indices=o,this.cnt=i.length}return e.prototype.sliceRange=function(e){var t=this.getDateDayIndex(e.start),n=this.getDateDayIndex(ve(e.end,-1)),r=Math.max(0,t),o=Math.min(this.cnt-1,n);return(r=Math.ceil(r))<=(o=Math.floor(o))?{firstIndex:r,lastIndex:o,isStart:t===r,isEnd:n===o}:null},e.prototype.getDateDayIndex=function(e){var t=this.indices,n=Math.floor(ye(this.dates[0],e));return n<0?t[0]-1:n>=t.length?t[t.length-1]+1:t[n]},e}(),Ni=function(){function e(e,t){var n,r,o,i=e.dates;if(t){for(r=i[0].getUTCDay(),n=1;n<i.length&&i[n].getUTCDay()!==r;n++);o=Math.ceil(i.length/n)}else o=1,n=i.length;this.rowCnt=o,this.colCnt=n,this.daySeries=e,this.cells=this.buildCells(),this.headerDates=this.buildHeaderDates()}return e.prototype.buildCells=function(){for(var e=[],t=0;t<this.rowCnt;t++){for(var n=[],r=0;r<this.colCnt;r++)n.push(this.buildCell(t,r));e.push(n)}return e},e.prototype.buildCell=function(e,t){var n=this.daySeries.dates[e*this.colCnt+t];return{key:n.toISOString(),date:n}},e.prototype.buildHeaderDates=function(){for(var e=[],t=0;t<this.colCnt;t++)e.push(this.cells[0][t].date);return e},e.prototype.sliceRange=function(e){var t=this.colCnt,n=this.daySeries.sliceRange(e),r=[];if(n)for(var o=n.firstIndex,i=n.lastIndex,a=o;a<=i;){var s=Math.floor(a/t),l=Math.min((s+1)*t,i+1);r.push({row:s,firstCol:a%t,lastCol:(l-1)%t,isStart:n.isStart&&a===o,isEnd:n.isEnd&&l-1===i}),a=l}return r},e}(),Hi=function(){function e(){this.sliceBusinessHours=it(this._sliceBusinessHours),this.sliceDateSelection=it(this._sliceDateSpan),this.sliceEventStore=it(this._sliceEventStore),this.sliceEventDrag=it(this._sliceInteraction),this.sliceEventResize=it(this._sliceInteraction),this.forceDayIfListItem=!1}return e.prototype.sliceProps=function(e,t,n,r){for(var i=[],a=4;a<arguments.length;a++)i[a-4]=arguments[a];var s=e.eventUiBases,l=this.sliceEventStore.apply(this,o([e.eventStore,s,t,n],i));return{dateSelectionSegs:this.sliceDateSelection.apply(this,o([e.dateSelection,s,r],i)),businessHourSegs:this.sliceBusinessHours.apply(this,o([e.businessHours,t,n,r],i)),fgEventSegs:l.fg,bgEventSegs:l.bg,eventDrag:this.sliceEventDrag.apply(this,o([e.eventDrag,s,t,n],i)),eventResize:this.sliceEventResize.apply(this,o([e.eventResize,s,t,n],i)),eventSelection:e.eventSelection}},e.prototype.sliceNowDate=function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return this._sliceDateSpan.apply(this,o([{range:{start:e,end:ge(e,1)},allDay:!1},{},t],n))},e.prototype._sliceBusinessHours=function(e,t,n,r){for(var i=[],a=4;a<arguments.length;a++)i[a-4]=arguments[a];return e?this._sliceEventStore.apply(this,o([Be(e,Oi(t,Boolean(n)),r),{},t,n],i)).bg:[]},e.prototype._sliceEventStore=function(e,t,n,r){for(var o=[],i=4;i<arguments.length;i++)o[i-4]=arguments[i];if(e){var a=ln(e,t,Oi(n,Boolean(r)),r);return{bg:this.sliceEventRanges(a.bg,o),fg:this.sliceEventRanges(a.fg,o)}}return{bg:[],fg:[]}},e.prototype._sliceInteraction=function(e,t,n,r){for(var o=[],i=4;i<arguments.length;i++)o[i-4]=arguments[i];if(!e)return null;var a=ln(e.mutatedEvents,t,Oi(n,Boolean(r)),r);return{segs:this.sliceEventRanges(a.fg,o),affectedInstances:e.affectedEvents.instances,isEvent:e.isEvent}},e.prototype._sliceDateSpan=function(e,t,n){for(var r=[],i=3;i<arguments.length;i++)r[i-3]=arguments[i];if(!e)return[];for(var a=Mn(e,t,n),s=this.sliceRange.apply(this,o([e.range],r)),l=0,u=s;l<u.length;l++){var c=u[l];c.eventRange=a}return s},e.prototype.sliceEventRanges=function(e,t){for(var n=[],r=0,o=e;r<o.length;r++){var i=o[r];n.push.apply(n,this.sliceEventRange(i,t))}return n},e.prototype.sliceEventRange=function(e,t){var n=e.range;this.forceDayIfListItem&&"list-item"===e.ui.display&&(n={start:n.start,end:ve(n.start,1)});for(var r=this.sliceRange.apply(this,o([n],t)),i=0,a=r;i<a.length;i++){var s=a[i];s.eventRange=e,s.isStart=e.isStart&&s.isStart,s.isEnd=e.isEnd&&s.isEnd}return r},e}();function Oi(e,t){var n=e.activeRange;return t?n:{start:ge(n.start,e.slotMinTime.milliseconds),end:ge(n.end,e.slotMaxTime.milliseconds-864e5)}}var Ai=/^(visible|hidden)$/,Ui=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleEl=function(e){t.el=e,Yr(t.props.elRef,e)},t}return n(t,e),t.prototype.render=function(){var e=this.props,t=e.liquid,n=e.liquidIsAbsolute,r=t&&n,o=["fc-scroller"];return t&&(n?o.push("fc-scroller-liquid-absolute"):o.push("fc-scroller-liquid")),Hr("div",{ref:this.handleEl,className:o.join(" "),style:{overflowX:e.overflowX,overflowY:e.overflowY,left:r&&-(e.overcomeLeft||0)||"",right:r&&-(e.overcomeRight||0)||"",bottom:r&&-(e.overcomeBottom||0)||"",marginLeft:!r&&-(e.overcomeLeft||0)||"",marginRight:!r&&-(e.overcomeRight||0)||"",marginBottom:!r&&-(e.overcomeBottom||0)||"",maxHeight:e.maxHeight||""}},e.children)},t.prototype.needsXScrolling=function(){if(Ai.test(this.props.overflowX))return!1;for(var e=this.el,t=this.el.getBoundingClientRect().width-this.getYScrollbarWidth(),n=e.children,r=0;r<n.length;r++){if(n[r].getBoundingClientRect().width>t)return!0}return!1},t.prototype.needsYScrolling=function(){if(Ai.test(this.props.overflowY))return!1;for(var e=this.el,t=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),n=e.children,r=0;r<n.length;r++){if(n[r].getBoundingClientRect().height>t)return!0}return!1},t.prototype.getXScrollbarWidth=function(){return Ai.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight},t.prototype.getYScrollbarWidth=function(){return Ai.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth},t}(jr),Li=function(){function e(e){var t=this;this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=function(e,n){var r=t,o=r.depths,i=r.currentMap,a=!1,s=!1;null!==e?(a=n in i,i[n]=e,o[n]=(o[n]||0)+1,s=!0):0==--o[n]&&(delete i[n],delete t.callbackMap[n],a=!0),t.masterCallback&&(a&&t.masterCallback(null,String(n)),s&&t.masterCallback(e,String(n)))}}return e.prototype.createRef=function(e){var t=this,n=this.callbackMap[e];return n||(n=this.callbackMap[e]=function(n){t.handleValue(n,String(e))}),n},e.prototype.collect=function(e,t,n){return Fe(this.currentMap,e,t,n)},e.prototype.getAll=function(){return Ue(this.currentMap)},e}();function Wi(e){for(var t=0,n=0,r=F(e,".fc-scrollgrid-shrink");n<r.length;n++){var o=r[n];t=Math.max(t,pe(o))}return Math.ceil(t)}function Vi(e,t){return e.liquid&&t.liquid}function zi(e,t){return null!=t.maxHeight||Vi(e,t)}function Fi(e,t,n){var r=n.expandRows;return"function"==typeof t.content?t.content(n):Hr("table",{className:[t.tableClassName,e.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:n.tableMinWidth,width:n.clientWidth,height:r?n.clientHeight:""}},n.tableColGroupNode,Hr("tbody",{},"function"==typeof t.rowContent?t.rowContent(n):t.rowContent))}function Bi(e,t){return ot(e,t,Le)}function ji(e,t){for(var n=[],r=0,i=e;r<i.length;r++)for(var a=i[r],s=a.span||1,l=0;l<s;l++)n.push(Hr("col",{style:{width:"shrink"===a.width?Gi(t):a.width||"",minWidth:a.minWidth||""}}));return Hr.apply(void 0,o(["colgroup",{}],n))}function Gi(e){return null==e?4:e}function qi(e){for(var t=0,n=e;t<n.length;t++){if("shrink"===n[t].width)return!0}return!1}function Yi(e,t){var n=["fc-scrollgrid",t.theme.getClass("table")];return e&&n.push("fc-scrollgrid-liquid"),n}function Zi(e,t){var n=["fc-scrollgrid-section","fc-scrollgrid-section-"+e.type,e.className];return t&&e.liquid&&null==e.maxHeight&&n.push("fc-scrollgrid-section-liquid"),e.isSticky&&n.push("fc-scrollgrid-section-sticky"),n}function Xi(e){return Hr("div",{className:"fc-scrollgrid-sticky-shim",style:{width:e.clientWidth,minWidth:e.tableMinWidth}})}function Ki(e){var t=e.stickyHeaderDates;return null!=t&&"auto"!==t||(t="auto"===e.height||"auto"===e.viewHeight),t}function Ji(e){var t=e.stickyFooterScrollbar;return null!=t&&"auto"!==t||(t="auto"===e.height||"auto"===e.viewHeight),t}var $i=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.processCols=it((function(e){return e}),Bi),t.renderMicroColGroup=it(ji),t.scrollerRefs=new Li,t.scrollerElRefs=new Li(t._handleScrollerEl.bind(t)),t.state={shrinkWidth:null,forceYScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{}},t.handleSizing=function(){t.setState(r({shrinkWidth:t.computeShrinkWidth()},t.computeScrollerDims()))},t}return n(t,e),t.prototype.render=function(){for(var e,t=this.props,n=this.state,r=this.context,i=t.sections||[],a=this.processCols(t.cols),s=this.renderMicroColGroup(a,n.shrinkWidth),l=Yi(t.liquid,r),u=i.length,c=0,d=[],p=[],f=[];c<u&&"header"===(e=i[c]).type;)d.push(this.renderSection(e,c,s)),c++;for(;c<u&&"body"===(e=i[c]).type;)p.push(this.renderSection(e,c,s)),c++;for(;c<u&&"footer"===(e=i[c]).type;)f.push(this.renderSection(e,c,s)),c++;var h=!cr();return Hr("table",{className:l.join(" "),style:{height:t.height}},Boolean(!h&&d.length)&&Hr.apply(void 0,o(["thead",{}],d)),Boolean(!h&&p.length)&&Hr.apply(void 0,o(["tbody",{}],p)),Boolean(!h&&f.length)&&Hr.apply(void 0,o(["tfoot",{}],f)),h&&Hr.apply(void 0,o(["tbody",{}],d,p,f)))},t.prototype.renderSection=function(e,t,n){return"outerContent"in e?Hr(Ur,{key:e.key},e.outerContent):Hr("tr",{key:e.key,className:Zi(e,this.props.liquid).join(" ")},this.renderChunkTd(e,t,n,e.chunk))},t.prototype.renderChunkTd=function(e,t,n,r){if("outerContent"in r)return r.outerContent;var o=this.props,i=this.state,a=i.forceYScrollbars,s=i.scrollerClientWidths,l=i.scrollerClientHeights,u=zi(o,e),c=Vi(o,e),d=o.liquid?a?"scroll":u?"auto":"hidden":"visible",p=Fi(e,r,{tableColGroupNode:n,tableMinWidth:"",clientWidth:void 0!==s[t]?s[t]:null,clientHeight:void 0!==l[t]?l[t]:null,expandRows:e.expandRows,syncRowHeights:!1,rowSyncHeights:[],reportRowHeightChange:function(){}});return Hr("td",{ref:r.elRef},Hr("div",{className:"fc-scroller-harness"+(c?" fc-scroller-harness-liquid":"")},Hr(Ui,{ref:this.scrollerRefs.createRef(t),elRef:this.scrollerElRefs.createRef(t),overflowY:d,overflowX:o.liquid?"hidden":"visible",maxHeight:e.maxHeight,liquid:c,liquidIsAbsolute:!0},p)))},t.prototype._handleScrollerEl=function(e,t){var n=parseInt(t,10);Yr(this.props.sections[n].chunk.scrollerElRef,e)},t.prototype.componentDidMount=function(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)},t.prototype.componentDidUpdate=function(){this.handleSizing()},t.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleSizing)},t.prototype.computeShrinkWidth=function(){return qi(this.props.cols)?Wi(this.scrollerElRefs.getAll()):0},t.prototype.computeScrollerDims=function(){for(var e=Sr(),t=this.props.sections.length,n=this.scrollerRefs,r=this.scrollerElRefs,o=!1,i={},a={},s=0;s<t;s++){var l=n.currentMap[s];if(l&&l.needsYScrolling()){o=!0;break}}for(s=0;s<t;s++){var u=r.currentMap[s];if(u){var c=u.parentNode;i[s]=Math.floor(c.getBoundingClientRect().width-(o?e.y:0)),a[s]=Math.floor(c.getBoundingClientRect().height)}}return{forceYScrollbars:o,scrollerClientWidths:i,scrollerClientHeights:a}},t}(jr);$i.addStateEquality({scrollerClientWidths:Le,scrollerClientHeights:Le});var Qi=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.elRef=Ar(),t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.options,r=e.seg,o=r.eventRange,i=o.ui,a={event:new zn(t,o.def,o.instance),view:t.viewApi,timeText:e.timeText,textColor:i.textColor,backgroundColor:i.backgroundColor,borderColor:i.borderColor,isDraggable:!e.disableDragging&&gn(r,t),isStartResizable:!e.disableResizing&&mn(r,t),isEndResizable:!e.disableResizing&&yn(r),isMirror:Boolean(e.isDragging||e.isResizing||e.isDateSelecting),isStart:Boolean(r.isStart),isEnd:Boolean(r.isEnd),isPast:Boolean(e.isPast),isFuture:Boolean(e.isFuture),isToday:Boolean(e.isToday),isSelected:Boolean(e.isSelected),isDragging:Boolean(e.isDragging),isResizing:Boolean(e.isResizing)},s=Dn(a).concat(i.classNames);return Hr(uo,{hookProps:a,classNames:n.eventClassNames,content:n.eventContent,defaultContent:e.defaultContent,didMount:n.eventDidMount,willUnmount:n.eventWillUnmount,elRef:this.elRef},(function(t,n,r,o){return e.children(t,s.concat(n),r,o,a)}))},t.prototype.componentDidMount=function(){cn(this.elRef.current,this.props.seg)},t.prototype.componentDidUpdate=function(e){var t=this.props.seg;t!==e.seg&&cn(this.elRef.current,t)},t}(jr),ea=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=e.seg,o=t.options.eventTimeFormat||e.defaultTimeFormat,i=En(n,o,t,e.defaultDisplayEventTime,e.defaultDisplayEventEnd);return Hr(Qi,{seg:n,timeText:i,disableDragging:e.disableDragging,disableResizing:e.disableResizing,defaultContent:e.defaultContent||ta,isDragging:e.isDragging,isResizing:e.isResizing,isDateSelecting:e.isDateSelecting,isSelected:e.isSelected,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday},(function(t,o,i,a,s){return Hr("a",r({className:e.extraClassNames.concat(o).join(" "),style:{borderColor:s.borderColor,backgroundColor:s.backgroundColor},ref:t},function(e){var t=e.eventRange.def.url;return t?{href:t}:{}}(n)),Hr("div",{className:"fc-event-main",ref:i,style:{color:s.textColor}},a),s.isStartResizable&&Hr("div",{className:"fc-event-resizer fc-event-resizer-start"}),s.isEndResizable&&Hr("div",{className:"fc-event-resizer fc-event-resizer-end"}))}))},t}(jr);function ta(e){return Hr("div",{className:"fc-event-main-frame"},e.timeText&&Hr("div",{className:"fc-event-time"},e.timeText),Hr("div",{className:"fc-event-title-container"},Hr("div",{className:"fc-event-title fc-sticky"},e.event.title||Hr(Ur,null," "))))}var na=function(e){return Hr(zr.Consumer,null,(function(t){var n=t.options,r={isAxis:e.isAxis,date:t.dateEnv.toDate(e.date),view:t.viewApi};return Hr(uo,{hookProps:r,classNames:n.nowIndicatorClassNames,content:n.nowIndicatorContent,didMount:n.nowIndicatorDidMount,willUnmount:n.nowIndicatorWillUnmount},e.children)}))},ra=St({day:"numeric"}),oa=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.refineHookProps=at(aa),t.normalizeClassNames=vo(),t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.options,r=this.refineHookProps({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,extraProps:e.extraHookProps,viewApi:t.viewApi,dateEnv:t.dateEnv}),o=vr(r,t.theme).concat(r.isDisabled?[]:this.normalizeClassNames(n.dayCellClassNames,r)),i=r.isDisabled?{}:{"data-date":tt(e.date)};return Hr(ho,{hookProps:r,didMount:n.dayCellDidMount,willUnmount:n.dayCellWillUnmount,elRef:e.elRef},(function(t){return e.children(t,o,i,r.isDisabled)}))},t}(jr),ia=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.options,r=aa({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,extraProps:e.extraHookProps,viewApi:t.viewApi,dateEnv:t.dateEnv});return Hr(po,{hookProps:r,content:n.dayCellContent,defaultContent:e.defaultContent},e.children)},t}(jr);function aa(e){var t=e.date,n=e.dateEnv,o=hr(t,e.todayRange,null,e.dateProfile);return r(r(r({date:n.toDate(t),view:e.viewApi},o),{dayNumberText:e.showDayNumber?n.format(t,ra):""}),e.extraProps)}function sa(e){return Hr("div",{className:"fc-"+e})}var la=function(e){return Hr(Qi,{defaultContent:ua,seg:e.seg,timeText:"",disableDragging:!0,disableResizing:!0,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday},(function(e,t,n,r,o){return Hr("div",{ref:e,className:["fc-bg-event"].concat(t).join(" "),style:{backgroundColor:o.backgroundColor}},r)}))};function ua(e){return e.event.title&&Hr("div",{className:"fc-event-title"},e.event.title)}var ca=function(e){return Hr(zr.Consumer,null,(function(t){var n=t.dateEnv,r=t.options,o=e.date,i=r.weekNumberFormat||e.defaultFormat,a=n.computeWeekNumber(o),s=n.format(o,i);return Hr(uo,{hookProps:{num:a,text:s,date:o},classNames:r.weekNumberClassNames,content:r.weekNumberContent,defaultContent:da,didMount:r.weekNumberDidMount,willUnmount:r.weekNumberWillUnmount},e.children)}))};function da(e){return e.text}var pa=function(e){function t(t,n){void 0===n&&(n={});var o=e.call(this)||this;return o.isRendering=!1,o.isRendered=!1,o.currentClassNames=[],o.customContentRenderId=0,o.handleAction=function(e){switch(e.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":o.renderRunner.tryDrain()}},o.handleData=function(e){o.currentData=e,o.renderRunner.request(e.calendarOptions.rerenderDelay)},o.handleRenderRequest=function(){if(o.isRendering){o.isRendered=!0;var e=o.currentData;Or(Hr(bi,{options:e.calendarOptions,theme:e.theme,emitter:e.emitter},(function(t,n,i,a){return o.setClassNames(t),o.setHeight(n),Hr(co.Provider,{value:o.customContentRenderId},Hr(Ei,r({isHeightAuto:i,forPrint:a},e)))})),o.el)}else o.isRendered&&(o.isRendered=!1,Or(null,o.el),o.setClassNames([]),o.setHeight(""));Wr()},o.el=t,o.renderRunner=new Go(o.handleRenderRequest),new Zo({optionOverrides:n,calendarApi:o,onAction:o.handleAction,onData:o.handleData}),o}return n(t,e),Object.defineProperty(t.prototype,"view",{get:function(){return this.currentData.viewApi},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e=this.isRendering;e?this.customContentRenderId++:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()},t.prototype.destroy=function(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())},t.prototype.updateSize=function(){e.prototype.updateSize.call(this),Wr()},t.prototype.batchRendering=function(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")},t.prototype.pauseRendering=function(){this.renderRunner.pause("pauseRendering")},t.prototype.resumeRendering=function(){this.renderRunner.resume("pauseRendering",!0)},t.prototype.resetOptions=function(e,t){this.currentDataManager.resetOptions(e,t)},t.prototype.setClassNames=function(e){if(!ot(e,this.currentClassNames)){for(var t=this.el.classList,n=0,r=this.currentClassNames;n<r.length;n++){var o=r[n];t.remove(o)}for(var i=0,a=e;i<a.length;i++){o=a[i];t.add(o)}this.currentClassNames=e}},t.prototype.setHeight=function(e){G(this.el,"height",e)},t}(Vn);di.touchMouseIgnoreWait=500;var fa=0,ha=0,va=!1,ga=function(){function e(e){var t=this;this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=function(e){if(!t.shouldIgnoreMouse()&&function(e){return 0===e.button&&!e.ctrlKey}(e)&&t.tryStart(e)){var n=t.createEventFromMouse(e,!0);t.emitter.trigger("pointerdown",n),t.initScrollWatch(n),t.shouldIgnoreMove||document.addEventListener("mousemove",t.handleMouseMove),document.addEventListener("mouseup",t.handleMouseUp)}},this.handleMouseMove=function(e){var n=t.createEventFromMouse(e);t.recordCoords(n),t.emitter.trigger("pointermove",n)},this.handleMouseUp=function(e){document.removeEventListener("mousemove",t.handleMouseMove),document.removeEventListener("mouseup",t.handleMouseUp),t.emitter.trigger("pointerup",t.createEventFromMouse(e)),t.cleanup()},this.handleTouchStart=function(e){if(t.tryStart(e)){t.isTouchDragging=!0;var n=t.createEventFromTouch(e,!0);t.emitter.trigger("pointerdown",n),t.initScrollWatch(n);var r=e.target;t.shouldIgnoreMove||r.addEventListener("touchmove",t.handleTouchMove),r.addEventListener("touchend",t.handleTouchEnd),r.addEventListener("touchcancel",t.handleTouchEnd),window.addEventListener("scroll",t.handleTouchScroll,!0)}},this.handleTouchMove=function(e){var n=t.createEventFromTouch(e);t.recordCoords(n),t.emitter.trigger("pointermove",n)},this.handleTouchEnd=function(e){if(t.isDragging){var n=e.target;n.removeEventListener("touchmove",t.handleTouchMove),n.removeEventListener("touchend",t.handleTouchEnd),n.removeEventListener("touchcancel",t.handleTouchEnd),window.removeEventListener("scroll",t.handleTouchScroll,!0),t.emitter.trigger("pointerup",t.createEventFromTouch(e)),t.cleanup(),t.isTouchDragging=!1,fa++,setTimeout((function(){fa--}),di.touchMouseIgnoreWait)}},this.handleTouchScroll=function(){t.wasTouchScroll=!0},this.handleScroll=function(e){if(!t.shouldIgnoreMove){var n=window.pageXOffset-t.prevScrollX+t.prevPageX,r=window.pageYOffset-t.prevScrollY+t.prevPageY;t.emitter.trigger("pointermove",{origEvent:e,isTouch:t.isTouchDragging,subjectEl:t.subjectEl,pageX:n,pageY:r,deltaX:n-t.origPageX,deltaY:r-t.origPageY})}},this.containerEl=e,this.emitter=new kr,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),ha++||window.addEventListener("touchmove",ma,{passive:!1})}return e.prototype.destroy=function(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),--ha||window.removeEventListener("touchmove",ma,{passive:!1})},e.prototype.tryStart=function(e){var t=this.querySubjectEl(e),n=e.target;return!(!t||this.handleSelector&&!V(n,this.handleSelector))&&(this.subjectEl=t,this.isDragging=!0,this.wasTouchScroll=!1,!0)},e.prototype.cleanup=function(){va=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()},e.prototype.querySubjectEl=function(e){return this.selector?V(e.target,this.selector):this.containerEl},e.prototype.shouldIgnoreMouse=function(){return fa||this.isTouchDragging},e.prototype.cancelTouchScroll=function(){this.isDragging&&(va=!0)},e.prototype.initScrollWatch=function(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))},e.prototype.recordCoords=function(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)},e.prototype.destroyScrollWatch=function(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)},e.prototype.createEventFromMouse=function(e,t){var n=0,r=0;return t?(this.origPageX=e.pageX,this.origPageY=e.pageY):(n=e.pageX-this.origPageX,r=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:n,deltaY:r}},e.prototype.createEventFromTouch=function(e,t){var n,r,o=e.touches,i=0,a=0;return o&&o.length?(n=o[0].pageX,r=o[0].pageY):(n=e.pageX,r=e.pageY),t?(this.origPageX=n,this.origPageY=r):(i=n-this.origPageX,a=r-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:n,pageY:r,deltaX:i,deltaY:a}},e}();function ma(e){va&&e.preventDefault()}var ya=function(){function e(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}return e.prototype.start=function(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.pageXOffset,this.origScreenY=n-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()},e.prototype.handleMove=function(e,t){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=t-window.pageYOffset-this.origScreenY,this.updateElPosition()},e.prototype.setIsVisible=function(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)},e.prototype.stop=function(e,t){var n=this,r=function(){n.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(r,this.revertDuration):setTimeout(r,0)},e.prototype.doRevertAnimation=function(e,t){var n=this.mirrorEl,r=this.sourceEl.getBoundingClientRect();n.style.transition="top "+t+"ms,left "+t+"ms",j(n,{left:r.left,top:r.top}),K(n,(function(){n.style.transition="",e()}))},e.prototype.cleanup=function(){this.mirrorEl&&(W(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null},e.prototype.updateElPosition=function(){this.sourceEl&&this.isVisible&&j(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})},e.prototype.getMirrorEl=function(){var e=this.sourceElRect,t=this.mirrorEl;return t||((t=this.mirrorEl=this.sourceEl.cloneNode(!0)).classList.add("fc-unselectable"),t.classList.add("fc-event-dragging"),j(t,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(t)),t},e}(),Ea=function(e){function t(t,n){var r=e.call(this)||this;return r.handleScroll=function(){r.scrollTop=r.scrollController.getScrollTop(),r.scrollLeft=r.scrollController.getScrollLeft(),r.handleScrollChange()},r.scrollController=t,r.doesListening=n,r.scrollTop=r.origScrollTop=t.getScrollTop(),r.scrollLeft=r.origScrollLeft=t.getScrollLeft(),r.scrollWidth=t.getScrollWidth(),r.scrollHeight=t.getScrollHeight(),r.clientWidth=t.getClientWidth(),r.clientHeight=t.getClientHeight(),r.clientRect=r.computeClientRect(),r.doesListening&&r.getEventTarget().addEventListener("scroll",r.handleScroll),r}return n(t,e),t.prototype.destroy=function(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)},t.prototype.getScrollTop=function(){return this.scrollTop},t.prototype.getScrollLeft=function(){return this.scrollLeft},t.prototype.setScrollTop=function(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())},t.prototype.setScrollLeft=function(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())},t.prototype.getClientWidth=function(){return this.clientWidth},t.prototype.getClientHeight=function(){return this.clientHeight},t.prototype.getScrollWidth=function(){return this.scrollWidth},t.prototype.getScrollHeight=function(){return this.scrollHeight},t.prototype.handleScrollChange=function(){},t}(xr),Sa=function(e){function t(t,n){return e.call(this,new _r(t),n)||this}return n(t,e),t.prototype.getEventTarget=function(){return this.scrollController.el},t.prototype.computeClientRect=function(){return Cr(this.scrollController.el)},t}(Ea),Da=function(e){function t(t){return e.call(this,new Ir,t)||this}return n(t,e),t.prototype.getEventTarget=function(){return window},t.prototype.computeClientRect=function(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}},t.prototype.handleScrollChange=function(){this.clientRect=this.computeClientRect()},t}(Ea),ba="function"==typeof performance?performance.now:Date.now,Ca=function(){function e(){var e=this;this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=function(){if(e.isAnimating){var t=e.computeBestEdge(e.pointerScreenX+window.pageXOffset,e.pointerScreenY+window.pageYOffset);if(t){var n=ba();e.handleSide(t,(n-e.msSinceRequest)/1e3),e.requestAnimation(n)}else e.isAnimating=!1}}}return e.prototype.start=function(e,t){this.isEnabled&&(this.scrollCaches=this.buildCaches(),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))},e.prototype.handleMove=function(e,t){if(this.isEnabled){var n=e-window.pageXOffset,r=t-window.pageYOffset,o=null===this.pointerScreenY?0:r-this.pointerScreenY,i=null===this.pointerScreenX?0:n-this.pointerScreenX;o<0?this.everMovedUp=!0:o>0&&(this.everMovedDown=!0),i<0?this.everMovedLeft=!0:i>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(ba()))}},e.prototype.stop=function(){if(this.isEnabled){this.isAnimating=!1;for(var e=0,t=this.scrollCaches;e<t.length;e++){t[e].destroy()}this.scrollCaches=null}},e.prototype.requestAnimation=function(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)},e.prototype.handleSide=function(e,t){var n=e.scrollCache,r=this.edgeThreshold,o=r-e.distance,i=o*o/(r*r)*this.maxVelocity*t,a=1;switch(e.name){case"left":a=-1;case"right":n.setScrollLeft(n.getScrollLeft()+i*a);break;case"top":a=-1;case"bottom":n.setScrollTop(n.getScrollTop()+i*a)}},e.prototype.computeBestEdge=function(e,t){for(var n=this.edgeThreshold,r=null,o=0,i=this.scrollCaches;o<i.length;o++){var a=i[o],s=a.clientRect,l=e-s.left,u=s.right-e,c=t-s.top,d=s.bottom-t;l>=0&&u>=0&&c>=0&&d>=0&&(c<=n&&this.everMovedUp&&a.canScrollUp()&&(!r||r.distance>c)&&(r={scrollCache:a,name:"top",distance:c}),d<=n&&this.everMovedDown&&a.canScrollDown()&&(!r||r.distance>d)&&(r={scrollCache:a,name:"bottom",distance:d}),l<=n&&this.everMovedLeft&&a.canScrollLeft()&&(!r||r.distance>l)&&(r={scrollCache:a,name:"left",distance:l}),u<=n&&this.everMovedRight&&a.canScrollRight()&&(!r||r.distance>u)&&(r={scrollCache:a,name:"right",distance:u}))}return r},e.prototype.buildCaches=function(){return this.queryScrollEls().map((function(e){return e===window?new Da(!1):new Sa(e,!1)}))},e.prototype.queryScrollEls=function(){for(var e=[],t=0,n=this.scrollQuery;t<n.length;t++){var r=n[t];"object"==typeof r?e.push(r):e.push.apply(e,Array.prototype.slice.call(document.querySelectorAll(r)))}return e},e}(),wa=function(e){function t(t,n){var r=e.call(this,t)||this;r.delay=null,r.minDistance=0,r.touchScrollAllowed=!0,r.mirrorNeedsRevert=!1,r.isInteracting=!1,r.isDragging=!1,r.isDelayEnded=!1,r.isDistanceSurpassed=!1,r.delayTimeoutId=null,r.onPointerDown=function(e){r.isDragging||(r.isInteracting=!0,r.isDelayEnded=!1,r.isDistanceSurpassed=!1,te(document.body),re(document.body),e.isTouch||e.origEvent.preventDefault(),r.emitter.trigger("pointerdown",e),r.isInteracting&&!r.pointer.shouldIgnoreMove&&(r.mirror.setIsVisible(!1),r.mirror.start(e.subjectEl,e.pageX,e.pageY),r.startDelay(e),r.minDistance||r.handleDistanceSurpassed(e)))},r.onPointerMove=function(e){if(r.isInteracting){if(r.emitter.trigger("pointermove",e),!r.isDistanceSurpassed){var t=r.minDistance,n=e.deltaX,o=e.deltaY;n*n+o*o>=t*t&&r.handleDistanceSurpassed(e)}r.isDragging&&("scroll"!==e.origEvent.type&&(r.mirror.handleMove(e.pageX,e.pageY),r.autoScroller.handleMove(e.pageX,e.pageY)),r.emitter.trigger("dragmove",e))}},r.onPointerUp=function(e){r.isInteracting&&(r.isInteracting=!1,ne(document.body),oe(document.body),r.emitter.trigger("pointerup",e),r.isDragging&&(r.autoScroller.stop(),r.tryStopDrag(e)),r.delayTimeoutId&&(clearTimeout(r.delayTimeoutId),r.delayTimeoutId=null))};var o=r.pointer=new ga(t);return o.emitter.on("pointerdown",r.onPointerDown),o.emitter.on("pointermove",r.onPointerMove),o.emitter.on("pointerup",r.onPointerUp),n&&(o.selector=n),r.mirror=new ya,r.autoScroller=new Ca,r}return n(t,e),t.prototype.destroy=function(){this.pointer.destroy(),this.onPointerUp({})},t.prototype.startDelay=function(e){var t=this;"number"==typeof this.delay?this.delayTimeoutId=setTimeout((function(){t.delayTimeoutId=null,t.handleDelayEnd(e)}),this.delay):this.handleDelayEnd(e)},t.prototype.handleDelayEnd=function(e){this.isDelayEnded=!0,this.tryStartDrag(e)},t.prototype.handleDistanceSurpassed=function(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)},t.prototype.tryStartDrag=function(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))},t.prototype.tryStopDrag=function(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))},t.prototype.stopDrag=function(e){this.isDragging=!1,this.emitter.trigger("dragend",e)},t.prototype.setIgnoreMove=function(e){this.pointer.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){this.mirror.setIsVisible(e)},t.prototype.setMirrorNeedsRevert=function(e){this.mirrorNeedsRevert=e},t.prototype.setAutoScrollEnabled=function(e){this.autoScroller.isEnabled=e},t}(ci),Ra=function(){function e(e){this.origRect=wr(e),this.scrollCaches=Rr(e).map((function(e){return new Sa(e,!0)}))}return e.prototype.destroy=function(){for(var e=0,t=this.scrollCaches;e<t.length;e++){t[e].destroy()}},e.prototype.computeLeft=function(){for(var e=this.origRect.left,t=0,n=this.scrollCaches;t<n.length;t++){var r=n[t];e+=r.origScrollLeft-r.getScrollLeft()}return e},e.prototype.computeTop=function(){for(var e=this.origRect.top,t=0,n=this.scrollCaches;t<n.length;t++){var r=n[t];e+=r.origScrollTop-r.getScrollTop()}return e},e.prototype.isWithinClipping=function(e,t){for(var n,r,o={left:e,top:t},i=0,a=this.scrollCaches;i<a.length;i++){var s=a[i];if(n=s.getEventTarget(),r=void 0,"HTML"!==(r=n.tagName)&&"BODY"!==r&&!ir(o,s.clientRect))return!1}return!0},e}();var Ta=function(){function e(e,t){var n=this;this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=function(e){var t=n.dragging;n.initialHit=null,n.movingHit=null,n.finalHit=null,n.prepareHits(),n.processFirstCoord(e),n.initialHit||!n.requireInitial?(t.setIgnoreMove(!1),n.emitter.trigger("pointerdown",e)):t.setIgnoreMove(!0)},this.handleDragStart=function(e){n.emitter.trigger("dragstart",e),n.handleMove(e,!0)},this.handleDragMove=function(e){n.emitter.trigger("dragmove",e),n.handleMove(e)},this.handlePointerUp=function(e){n.releaseHits(),n.emitter.trigger("pointerup",e)},this.handleDragEnd=function(e){n.movingHit&&n.emitter.trigger("hitupdate",null,!0,e),n.finalHit=n.movingHit,n.movingHit=null,n.emitter.trigger("dragend",e)},this.droppableStore=t,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new kr}return e.prototype.processFirstCoord=function(e){var t,n={left:e.pageX,top:e.pageY},r=n,o=e.subjectEl;o!==document&&(r=sr(r,t=wr(o)));var i=this.initialHit=this.queryHitForOffset(r.left,r.top);if(i){if(this.useSubjectCenter&&t){var a=ar(t,i.rect);a&&(r=lr(a))}this.coordAdjust=ur(r,n)}else this.coordAdjust={left:0,top:0}},e.prototype.handleMove=function(e,t){var n=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);!t&&ka(this.movingHit,n)||(this.movingHit=n,this.emitter.trigger("hitupdate",n,!1,e))},e.prototype.prepareHits=function(){this.offsetTrackers=Oe(this.droppableStore,(function(e){return e.component.prepareHits(),new Ra(e.el)}))},e.prototype.releaseHits=function(){var e=this.offsetTrackers;for(var t in e)e[t].destroy();this.offsetTrackers={}},e.prototype.queryHitForOffset=function(e,t){var n=this.droppableStore,r=this.offsetTrackers,o=null;for(var i in n){var a=n[i].component,s=r[i];if(s&&s.isWithinClipping(e,t)){var l=s.computeLeft(),u=s.computeTop(),c=e-l,d=t-u,p=s.origRect,f=p.right-p.left,h=p.bottom-p.top;if(c>=0&&c<f&&d>=0&&d<h){var v=a.queryHit(c,d,f,h),g=a.context.getCurrentData().dateProfile;v&&an(g.activeRange,v.dateSpan.range)&&(!o||v.layer>o.layer)&&(v.rect.left+=l,v.rect.right+=l,v.rect.top+=u,v.rect.bottom+=u,o=v)}}}return o},e}();function ka(e,t){return!e&&!t||Boolean(e)===Boolean(t)&&Rn(e.dateSpan,t.dateSpan)}function Ma(e,t){for(var n,o,i={},a=0,s=t.pluginHooks.datePointTransforms;a<s.length;a++){var l=s[a];r(i,l(e,t))}return r(i,(n=e,{date:(o=t.dateEnv).toDate(n.range.start),dateStr:o.formatIso(n.range.start,{omitTime:n.allDay}),allDay:n.allDay})),i}var xa=function(e){function t(t){var n=e.call(this,t)||this;n.handlePointerDown=function(e){var t=n.dragging,r=e.origEvent.target;t.setIgnoreMove(!n.component.isValidDateDownEl(r))},n.handleDragEnd=function(e){var t=n.component;if(!n.dragging.pointer.wasTouchScroll){var o=n.hitDragging,i=o.initialHit,a=o.finalHit;if(i&&a&&ka(i,a)){var s=t.context,l=r(r({},Ma(i.dateSpan,s)),{dayEl:i.dayEl,jsEvent:e.origEvent,view:s.viewApi||s.calendarApi.view});s.emitter.trigger("dateClick",l)}}},n.dragging=new wa(t.el),n.dragging.autoScroller.isEnabled=!1;var o=n.hitDragging=new Ta(n.dragging,li(t));return o.emitter.on("pointerdown",n.handlePointerDown),o.emitter.on("dragend",n.handleDragEnd),n}return n(t,e),t.prototype.destroy=function(){this.dragging.destroy()},t}(ai),_a=function(e){function t(t){var n=e.call(this,t)||this;n.dragSelection=null,n.handlePointerDown=function(e){var t=n,r=t.component,o=t.dragging,i=r.context.options.selectable&&r.isValidDateDownEl(e.origEvent.target);o.setIgnoreMove(!i),o.delay=e.isTouch?function(e){var t=e.context.options,n=t.selectLongPressDelay;null==n&&(n=t.longPressDelay);return n}(r):null},n.handleDragStart=function(e){n.component.context.calendarApi.unselect(e)},n.handleHitUpdate=function(e,t){var o=n.component.context,i=null,a=!1;e&&((i=function(e,t,n){var o=e.dateSpan,i=t.dateSpan,a=[o.range.start,o.range.end,i.range.start,i.range.end];a.sort(ce);for(var s={},l=0,u=n;l<u.length;l++){var c=(0,u[l])(e,t);if(!1===c)return null;c&&r(s,c)}return s.range={start:a[0],end:a[3]},s.allDay=o.allDay,s}(n.hitDragging.initialHit,e,o.pluginHooks.dateSelectionTransformers))&&n.component.isDateSelectionValid(i)||(a=!0,i=null)),i?o.dispatch({type:"SELECT_DATES",selection:i}):t||o.dispatch({type:"UNSELECT_DATES"}),a?Q():ee(),t||(n.dragSelection=i)},n.handlePointerUp=function(e){n.dragSelection&&(xn(n.dragSelection,e,n.component.context),n.dragSelection=null)};var o=t.component.context.options,i=n.dragging=new wa(t.el);i.touchScrollAllowed=!1,i.minDistance=o.selectMinDistance||0,i.autoScroller.isEnabled=o.dragScroll;var a=n.hitDragging=new Ta(n.dragging,li(t));return a.emitter.on("pointerdown",n.handlePointerDown),a.emitter.on("dragstart",n.handleDragStart),a.emitter.on("hitupdate",n.handleHitUpdate),a.emitter.on("pointerup",n.handlePointerUp),n}return n(t,e),t.prototype.destroy=function(){this.dragging.destroy()},t}(ai);var Ia=function(e){function t(n){var o=e.call(this,n)||this;o.subjectEl=null,o.subjectSeg=null,o.isDragging=!1,o.eventRange=null,o.relevantEvents=null,o.receivingContext=null,o.validMutation=null,o.mutatedRelevantEvents=null,o.handlePointerDown=function(e){var t=e.origEvent.target,n=o,r=n.component,i=n.dragging,a=i.mirror,s=r.context.options,l=r.context;o.subjectEl=e.subjectEl;var u=o.subjectSeg=dn(e.subjectEl),c=(o.eventRange=u.eventRange).instance.instanceId;o.relevantEvents=Nt(l.getCurrentData().eventStore,c),i.minDistance=e.isTouch?0:s.eventDragMinDistance,i.delay=e.isTouch&&c!==r.props.eventSelection?function(e){var t=e.context.options,n=t.eventLongPressDelay;null==n&&(n=t.longPressDelay);return n}(r):null,a.parentNode=V(t,".fc"),a.revertDuration=s.dragRevertDuration;var d=r.isValidSegDownEl(t)&&!V(t,".fc-event-resizer");i.setIgnoreMove(!d),o.isDragging=d&&e.subjectEl.classList.contains("fc-event-draggable")},o.handleDragStart=function(e){var t=o.component.context,n=o.eventRange,r=n.instance.instanceId;e.isTouch?r!==o.component.props.eventSelection&&t.dispatch({type:"SELECT_EVENT",eventInstanceId:r}):t.dispatch({type:"UNSELECT_EVENT"}),o.isDragging&&(t.calendarApi.unselect(e),t.emitter.trigger("eventDragStart",{el:o.subjectEl,event:new zn(t,n.def,n.instance),jsEvent:e.origEvent,view:t.viewApi}))},o.handleHitUpdate=function(e,t){if(o.isDragging){var n=o.relevantEvents,r=o.hitDragging.initialHit,i=o.component.context,a=null,s=null,l=null,u=!1,c={affectedEvents:n,mutatedEvents:{defs:{},instances:{}},isEvent:!0};if(e){var d=e.component,p=(a=d.context).options;i===a||p.editable&&p.droppable?(s=function(e,t,n){var r=e.dateSpan,o=t.dateSpan,i=r.range.start,a=o.range.start,s={};r.allDay!==o.allDay&&(s.allDay=o.allDay,s.hasEnd=t.component.context.options.allDayMaintainDuration,o.allDay&&(i=be(i)));var l=Qt(i,a,e.component.context.dateEnv,e.component===t.component?e.component.largeUnit:null);l.milliseconds&&(s.allDay=!1);for(var u={datesDelta:l,standardProps:s},c=0,d=n;c<d.length;c++){(0,d[c])(u,e,t)}return u}(r,e,a.getCurrentData().pluginHooks.eventDragMutationMassagers))&&(l=Pn(n,a.getCurrentData().eventUiBases,s,a),c.mutatedEvents=l,d.isInteractionValid(c)||(u=!0,s=null,l=null,c.mutatedEvents={defs:{},instances:{}})):a=null}o.displayDrag(a,c),u?Q():ee(),t||(i===a&&ka(r,e)&&(s=null),o.dragging.setMirrorNeedsRevert(!s),o.dragging.setMirrorIsVisible(!e||!document.querySelector(".fc-event-mirror")),o.receivingContext=a,o.validMutation=s,o.mutatedRelevantEvents=l)}},o.handlePointerUp=function(){o.isDragging||o.cleanup()},o.handleDragEnd=function(e){if(o.isDragging){var t=o.component.context,n=t.viewApi,i=o,a=i.receivingContext,s=i.validMutation,l=o.eventRange.def,u=o.eventRange.instance,c=new zn(t,l,u),d=o.relevantEvents,p=o.mutatedRelevantEvents,f=o.hitDragging.finalHit;if(o.clearDrag(),t.emitter.trigger("eventDragStop",{el:o.subjectEl,event:c,jsEvent:e.origEvent,view:n}),s){if(a===t){var h=new zn(t,p.defs[l.defId],u?p.instances[u.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:p});for(var v={oldEvent:c,event:h,relatedEvents:Bn(p,t,u),revert:function(){t.dispatch({type:"MERGE_EVENTS",eventStore:d})}},g={},m=0,y=t.getCurrentData().pluginHooks.eventDropTransformers;m<y.length;m++){var E=y[m];r(g,E(s,t))}t.emitter.trigger("eventDrop",r(r(r({},v),g),{el:e.subjectEl,delta:s.datesDelta,jsEvent:e.origEvent,view:n})),t.emitter.trigger("eventChange",v)}else if(a){var S={event:c,relatedEvents:Bn(d,t,u),revert:function(){t.dispatch({type:"MERGE_EVENTS",eventStore:d})}};t.emitter.trigger("eventLeave",r(r({},S),{draggedEl:e.subjectEl,view:n})),t.dispatch({type:"REMOVE_EVENTS",eventStore:d}),t.emitter.trigger("eventRemove",S);var D=p.defs[l.defId],b=p.instances[u.instanceId],C=new zn(a,D,b);a.dispatch({type:"MERGE_EVENTS",eventStore:p});var w={event:C,relatedEvents:Bn(p,a,b),revert:function(){a.dispatch({type:"REMOVE_EVENTS",eventStore:p})}};a.emitter.trigger("eventAdd",w),e.isTouch&&a.dispatch({type:"SELECT_EVENT",eventInstanceId:u.instanceId}),a.emitter.trigger("drop",r(r({},Ma(f.dateSpan,a)),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:f.component.context.viewApi})),a.emitter.trigger("eventReceive",r(r({},w),{draggedEl:e.subjectEl,view:f.component.context.viewApi}))}}else t.emitter.trigger("_noEventDrop")}o.cleanup()};var i=o.component.context.options,a=o.dragging=new wa(n.el);a.pointer.selector=t.SELECTOR,a.touchScrollAllowed=!1,a.autoScroller.isEnabled=i.dragScroll;var s=o.hitDragging=new Ta(o.dragging,ui);return s.useSubjectCenter=n.useEventCenter,s.emitter.on("pointerdown",o.handlePointerDown),s.emitter.on("dragstart",o.handleDragStart),s.emitter.on("hitupdate",o.handleHitUpdate),s.emitter.on("pointerup",o.handlePointerUp),s.emitter.on("dragend",o.handleDragEnd),o}return n(t,e),t.prototype.destroy=function(){this.dragging.destroy()},t.prototype.displayDrag=function(e,t){var n=this.component.context,r=this.receivingContext;r&&r!==e&&(r===n?r.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:t.affectedEvents,mutatedEvents:{defs:{},instances:{}},isEvent:!0}}):r.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})},t.prototype.clearDrag=function(){var e=this.component.context,t=this.receivingContext;t&&t.dispatch({type:"UNSET_EVENT_DRAG"}),e!==t&&e.dispatch({type:"UNSET_EVENT_DRAG"})},t.prototype.cleanup=function(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null},t.SELECTOR=".fc-event-draggable, .fc-event-resizable",t}(ai);var Pa=function(e){function t(t){var n=e.call(this,t)||this;n.draggingSegEl=null,n.draggingSeg=null,n.eventRange=null,n.relevantEvents=null,n.validMutation=null,n.mutatedRelevantEvents=null,n.handlePointerDown=function(e){var t=n.component,r=dn(n.querySegEl(e)),o=n.eventRange=r.eventRange;n.dragging.minDistance=t.context.options.eventDragMinDistance,n.dragging.setIgnoreMove(!n.component.isValidSegDownEl(e.origEvent.target)||e.isTouch&&n.component.props.eventSelection!==o.instance.instanceId)},n.handleDragStart=function(e){var t=n.component.context,r=n.eventRange;n.relevantEvents=Nt(t.getCurrentData().eventStore,n.eventRange.instance.instanceId);var o=n.querySegEl(e);n.draggingSegEl=o,n.draggingSeg=dn(o),t.calendarApi.unselect(),t.emitter.trigger("eventResizeStart",{el:o,event:new zn(t,r.def,r.instance),jsEvent:e.origEvent,view:t.viewApi})},n.handleHitUpdate=function(e,t,o){var i=n.component.context,a=n.relevantEvents,s=n.hitDragging.initialHit,l=n.eventRange.instance,u=null,c=null,d=!1,p={affectedEvents:a,mutatedEvents:{defs:{},instances:{}},isEvent:!0};e&&(u=function(e,t,n,o,i){for(var a=e.component.context.dateEnv,s=e.dateSpan.range.start,l=t.dateSpan.range.start,u=Qt(s,l,a,e.component.largeUnit),c={},d=0,p=i;d<p.length;d++){var f=(0,p[d])(e,t);if(!1===f)return null;f&&r(c,f)}if(n){if(a.add(o.start,u)<o.end)return c.startDelta=u,c}else if(a.add(o.end,u)>o.start)return c.endDelta=u,c;return null}(s,e,o.subjectEl.classList.contains("fc-event-resizer-start"),l.range,i.pluginHooks.eventResizeJoinTransforms)),u&&(c=Pn(a,i.getCurrentData().eventUiBases,u,i),p.mutatedEvents=c,n.component.isInteractionValid(p)||(d=!0,u=null,c=null,p.mutatedEvents=null)),c?i.dispatch({type:"SET_EVENT_RESIZE",state:p}):i.dispatch({type:"UNSET_EVENT_RESIZE"}),d?Q():ee(),t||(u&&ka(s,e)&&(u=null),n.validMutation=u,n.mutatedRelevantEvents=c)},n.handleDragEnd=function(e){var t=n.component.context,o=n.eventRange.def,i=n.eventRange.instance,a=new zn(t,o,i),s=n.relevantEvents,l=n.mutatedRelevantEvents;if(t.emitter.trigger("eventResizeStop",{el:n.draggingSegEl,event:a,jsEvent:e.origEvent,view:t.viewApi}),n.validMutation){var u=new zn(t,l.defs[o.defId],i?l.instances[i.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:l});var c={oldEvent:a,event:u,relatedEvents:Bn(l,t,i),revert:function(){t.dispatch({type:"MERGE_EVENTS",eventStore:s})}};t.emitter.trigger("eventResize",r(r({},c),{el:n.draggingSegEl,startDelta:n.validMutation.startDelta||Ye(0),endDelta:n.validMutation.endDelta||Ye(0),jsEvent:e.origEvent,view:t.viewApi})),t.emitter.trigger("eventChange",c)}else t.emitter.trigger("_noEventResize");n.draggingSeg=null,n.relevantEvents=null,n.validMutation=null};var o=t.component,i=n.dragging=new wa(t.el);i.pointer.selector=".fc-event-resizer",i.touchScrollAllowed=!1,i.autoScroller.isEnabled=o.context.options.dragScroll;var a=n.hitDragging=new Ta(n.dragging,li(t));return a.emitter.on("pointerdown",n.handlePointerDown),a.emitter.on("dragstart",n.handleDragStart),a.emitter.on("hitupdate",n.handleHitUpdate),a.emitter.on("dragend",n.handleDragEnd),n}return n(t,e),t.prototype.destroy=function(){this.dragging.destroy()},t.prototype.querySegEl=function(e){return V(e.subjectEl,".fc-event")},t}(ai);var Na=function(){function e(e){var t=this;this.context=e,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=function(e){e.jsEvent&&(t.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=function(e){var n=t.context.options.unselectCancel,r=e.origEvent.target;t.matchesCancel=!!V(r,n),t.matchesEvent=!!V(r,Ia.SELECTOR)},this.onDocumentPointerUp=function(e){var n=t.context,r=t.documentPointer,o=n.getCurrentData();if(!r.wasTouchScroll){if(o.dateSelection&&!t.isRecentPointerDateSelect){var i=n.options.unselectAuto;!i||i&&t.matchesCancel||n.calendarApi.unselect(e)}o.eventSelection&&!t.matchesEvent&&n.dispatch({type:"UNSELECT_EVENT"})}t.isRecentPointerDateSelect=!1};var n=this.documentPointer=new ga(document);n.shouldIgnoreMove=!0,n.shouldWatchScroll=!1,n.emitter.on("pointerdown",this.onDocumentPointerDown),n.emitter.on("pointerup",this.onDocumentPointerUp),e.emitter.on("select",this.onSelect)}return e.prototype.destroy=function(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()},e}(),Ha={dateClick:_t,eventDragStart:_t,eventDragStop:_t,eventDrop:_t,eventResizeStart:_t,eventResizeStop:_t,eventResize:_t,drop:_t,eventReceive:_t,eventLeave:_t},Oa=function(){function e(e,t){var n=this;this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=function(e){n.dragMeta=n.buildDragMeta(e.subjectEl)},this.handleHitUpdate=function(e,t,o){var i=n.hitDragging.dragging,a=null,s=null,l=!1,u={affectedEvents:{defs:{},instances:{}},mutatedEvents:{defs:{},instances:{}},isEvent:n.dragMeta.create};e&&(a=e.component.context,n.canDropElOnCalendar(o.subjectEl,a)&&(s=function(e,t,n){for(var o=r({},t.leftoverProps),i=0,a=n.pluginHooks.externalDefTransforms;i<a.length;i++){var s=a[i];r(o,s(e,t))}var l=Yt(o,n),u=l.refined,c=l.extra,d=Xt(u,c,t.sourceId,e.allDay,n.options.forceEventDuration||Boolean(t.duration),n),p=e.range.start;e.allDay&&t.startTime&&(p=n.dateEnv.add(p,t.startTime));var f=t.duration?n.dateEnv.add(p,t.duration):In(e.allDay,p,n),h=Ie(d.defId,{start:p,end:f});return{def:d,instance:h}}(e.dateSpan,n.dragMeta,a),u.mutatedEvents=Pt(s),(l=!Jr(u,a))&&(u.mutatedEvents={defs:{},instances:{}},s=null))),n.displayDrag(a,u),i.setMirrorIsVisible(t||!s||!document.querySelector(".fc-event-mirror")),l?Q():ee(),t||(i.setMirrorNeedsRevert(!s),n.receivingContext=a,n.droppableEvent=s)},this.handleDragEnd=function(e){var t=n,o=t.receivingContext,i=t.droppableEvent;if(n.clearDrag(),o&&i){var a=n.hitDragging.finalHit,s=a.component.context.viewApi,l=n.dragMeta;if(o.emitter.trigger("drop",r(r({},Ma(a.dateSpan,o)),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:s})),l.create){var u=Pt(i);o.dispatch({type:"MERGE_EVENTS",eventStore:u}),e.isTouch&&o.dispatch({type:"SELECT_EVENT",eventInstanceId:i.instance.instanceId}),o.emitter.trigger("eventReceive",{event:new zn(o,i.def,i.instance),relatedEvents:[],revert:function(){o.dispatch({type:"REMOVE_EVENTS",eventStore:u})},draggedEl:e.subjectEl,view:s})}}n.receivingContext=null,n.droppableEvent=null};var o=this.hitDragging=new Ta(e,ui);o.requireInitial=!1,o.emitter.on("dragstart",this.handleDragStart),o.emitter.on("hitupdate",this.handleHitUpdate),o.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=t}return e.prototype.buildDragMeta=function(e){return"object"==typeof this.suppliedDragMeta?fi(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?fi(this.suppliedDragMeta(e)):fi((t=function(e,t){var n=di.dataAttrPrefix,r=(n?n+"-":"")+t;return e.getAttribute("data-"+r)||""}(e,"event"))?JSON.parse(t):{create:!1});var t},e.prototype.displayDrag=function(e,t){var n=this.receivingContext;n&&n!==e&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})},e.prototype.clearDrag=function(){this.receivingContext&&this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})},e.prototype.canDropElOnCalendar=function(e,t){var n=t.options.dropAccept;return"function"==typeof n?n.call(t.calendarApi,e):"string"!=typeof n||!n||Boolean(z(e,n))},e}();di.dataAttrPrefix="";var Aa=function(){function e(e,t){var n=this;void 0===t&&(t={}),this.handlePointerDown=function(e){var t=n.dragging,r=n.settings,o=r.minDistance,i=r.longPressDelay;t.minDistance=null!=o?o:e.isTouch?0:bt.eventDragMinDistance,t.delay=e.isTouch?null!=i?i:bt.longPressDelay:0},this.handleDragStart=function(e){e.isTouch&&n.dragging.delay&&e.subjectEl.classList.contains("fc-event")&&n.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")},this.settings=t;var r=this.dragging=new wa(e);r.touchScrollAllowed=!1,null!=t.itemSelector&&(r.pointer.selector=t.itemSelector),null!=t.appendTo&&(r.mirror.parentNode=t.appendTo),r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),new Oa(r,t.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}(),Ua=function(e){function t(t){var n=e.call(this,t)||this;n.shouldIgnoreMove=!1,n.mirrorSelector="",n.currentMirrorEl=null,n.handlePointerDown=function(e){n.emitter.trigger("pointerdown",e),n.shouldIgnoreMove||n.emitter.trigger("dragstart",e)},n.handlePointerMove=function(e){n.shouldIgnoreMove||n.emitter.trigger("dragmove",e)},n.handlePointerUp=function(e){n.emitter.trigger("pointerup",e),n.shouldIgnoreMove||n.emitter.trigger("dragend",e)};var r=n.pointer=new ga(t);return r.emitter.on("pointerdown",n.handlePointerDown),r.emitter.on("pointermove",n.handlePointerMove),r.emitter.on("pointerup",n.handlePointerUp),n}return n(t,e),t.prototype.destroy=function(){this.pointer.destroy()},t.prototype.setIgnoreMove=function(e){this.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){if(e)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{var t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}},t}(ci),La=function(){function e(e,t){var n=document;e===document||e instanceof Element?(n=e,t=t||{}):t=e||{};var r=this.dragging=new Ua(n);"string"==typeof t.itemSelector?r.pointer.selector=t.itemSelector:n===document&&(r.pointer.selector="[data-event]"),"string"==typeof t.mirrorSelector&&(r.mirrorSelector=t.mirrorSelector),new Oa(r,t.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}(),Wa=io({componentInteractions:[xa,_a,Ia,Pa],calendarInteractions:[Na],elementDraggingImpl:wa,listenerRefiners:Ha}),Va=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.headerElRef=Ar(),t}return n(t,e),t.prototype.renderSimpleLayout=function(e,t){var n=this.props,r=this.context,o=[],i=Ki(r.options);return e&&o.push({type:"header",key:"header",isSticky:i,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),o.push({type:"body",key:"body",liquid:!0,chunk:{content:t}}),Hr(yo,{viewSpec:r.viewSpec},(function(e,t){return Hr("div",{ref:e,className:["fc-daygrid"].concat(t).join(" ")},Hr($i,{liquid:!n.isHeightAuto&&!n.forPrint,cols:[],sections:o}))}))},t.prototype.renderHScrollLayout=function(e,t,n,r){var o=this.context.pluginHooks.scrollGridImpl;if(!o)throw new Error("No ScrollGrid implementation");var i=this.props,a=this.context,s=!i.forPrint&&Ki(a.options),l=!i.forPrint&&Ji(a.options),u=[];return e&&u.push({type:"header",key:"header",isSticky:s,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),u.push({type:"body",key:"body",liquid:!0,chunks:[{key:"main",content:t}]}),l&&u.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"main",content:Xi}]}),Hr(yo,{viewSpec:a.viewSpec},(function(e,t){return Hr("div",{ref:e,className:["fc-daygrid"].concat(t).join(" ")},Hr(o,{liquid:!i.isHeightAuto&&!i.forPrint,colGroups:[{cols:[{span:n,minWidth:r}]}],sections:u}))}))},t}(oo);function za(e,t){for(var n=[],r=0;r<t;r++)n[r]=[];for(var o=0,i=e;o<i.length;o++){var a=i[o];n[a.row].push(a)}return n}function Fa(e,t){for(var n=[],r=0;r<t;r++)n[r]=[];for(var o=0,i=e;o<i.length;o++){var a=i[o];n[a.firstCol].push(a)}return n}function Ba(e,t){var n=[];if(e){for(a=0;a<t;a++)n[a]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(var r=0,o=e.segs;r<o.length;r++){var i=o[r];n[i.row].segs.push(i)}}else for(var a=0;a<t;a++)n[a]=null;return n}var ja=St({week:"narrow"}),Ga=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleRootEl=function(e){t.rootEl=e,Yr(t.props.elRef,e)},t.handleMoreLinkClick=function(e){var n=t.props;if(n.onMoreClick){var r=n.segsByEachCol,o=r.filter((function(e){return n.segIsHidden[e.eventRange.instance.instanceId]}));n.onMoreClick({date:n.date,allSegs:r,hiddenSegs:o,moreCnt:n.moreCnt,dayEl:t.rootEl,ev:e})}},t}return n(t,e),t.prototype.render=function(){var e=this,t=this.context,n=t.options,o=t.viewApi,i=this.props,a=i.date,s=i.dateProfile,l={num:i.moreCnt,text:i.buildMoreLinkText(i.moreCnt),view:o},u=n.navLinks?{"data-navlink":gr(a,"week"),tabIndex:0}:{};return Hr(oa,{date:a,dateProfile:s,todayRange:i.todayRange,showDayNumber:i.showDayNumber,extraHookProps:i.extraHookProps,elRef:this.handleRootEl},(function(t,o,c,d){return Hr("td",r({ref:t,className:["fc-daygrid-day"].concat(o,i.extraClassNames||[]).join(" ")},c,i.extraDataAttrs),Hr("div",{className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",ref:i.innerElRef},i.showWeekNumber&&Hr(ca,{date:a,defaultFormat:ja},(function(e,t,n,o){return Hr("a",r({ref:e,className:["fc-daygrid-week-number"].concat(t).join(" ")},u),o)})),!d&&Hr(Za,{date:a,dateProfile:s,showDayNumber:i.showDayNumber,forceDayTop:i.forceDayTop,todayRange:i.todayRange,extraHookProps:i.extraHookProps}),Hr("div",{className:"fc-daygrid-day-events",ref:i.fgContentElRef,style:{paddingBottom:i.fgPaddingBottom}},i.fgContent,Boolean(i.moreCnt)&&Hr("div",{className:"fc-daygrid-day-bottom",style:{marginTop:i.moreMarginTop}},Hr(uo,{hookProps:l,classNames:n.moreLinkClassNames,content:n.moreLinkContent,defaultContent:Ya,didMount:n.moreLinkDidMount,willUnmount:n.moreLinkWillUnmount},(function(t,n,r,o){return Hr("a",{onClick:e.handleMoreLinkClick,ref:t,className:["fc-daygrid-more-link"].concat(n).join(" ")},o)})))),Hr("div",{className:"fc-daygrid-day-bg"},i.bgContent)))}))},t}(oo);function qa(e){return e.dayNumberText}function Ya(e){return e.text}var Za=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context.options.navLinks?{"data-navlink":gr(e.date),tabIndex:0}:{};return Hr(ia,{date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,extraHookProps:e.extraHookProps,defaultContent:qa},(function(n,o){return(o||e.forceDayTop)&&Hr("div",{className:"fc-daygrid-day-top",ref:n},Hr("a",r({className:"fc-daygrid-day-number"},t),o||Hr(Ur,null," ")))}))},t}(jr),Xa=St({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function Ka(e){var t=e.eventRange.ui.display;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.firstCol===e.lastCol&&e.isStart&&e.isEnd}var Ja=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.options.eventTimeFormat||Xa,o=En(e.seg,n,t,!0,e.defaultDisplayEventEnd);return Hr(Qi,{seg:e.seg,timeText:o,defaultContent:$a,isDragging:e.isDragging,isResizing:!1,isDateSelecting:!1,isSelected:e.isSelected,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday},(function(t,n,o,i){return Hr("a",r({className:["fc-daygrid-event","fc-daygrid-dot-event"].concat(n).join(" "),ref:t},(a=e.seg,(s=a.eventRange.def.url)?{href:s}:{})),i);var a,s}))},t}(jr);function $a(e){return Hr(Ur,null,Hr("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&Hr("div",{className:"fc-event-time"},e.timeText),Hr("div",{className:"fc-event-title"},e.event.title||Hr(Ur,null," ")))}var Qa=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props;return Hr(ea,r({},e,{extraClassNames:["fc-daygrid-event","fc-daygrid-block-event","fc-h-event"],defaultTimeFormat:Xa,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.seg.eventRange.def.allDay}))},t}(jr);function es(e,t,n,o,i,a,s,l){for(var u=[],c=[],d={},p={},f={},h={},v={},g=0;g<s;g++)u.push([]),c.push(0);for(var m=0,y=t=hn(t,l);m<y.length;m++){T(w=y[m],i[w.eventRange.instance.instanceId+":"+w.firstCol]||0)}!0===n||!0===o?function(e,t,n,r){ns(e,t,n,!0,(function(e){return e.bottom<=r}))}(c,d,u,a):"number"==typeof n?function(e,t,n,r){ns(e,t,n,!1,(function(e,t){return t<r}))}(c,d,u,n):"number"==typeof o&&function(e,t,n,r){ns(e,t,n,!0,(function(e,t){return t<r}))}(c,d,u,o);for(var E=0;E<s;E++){for(var S=0,D=0,b=0,C=u[E];b<C.length;b++){var w,R=C[b];d[(w=R.seg).eventRange.instance.instanceId]||(p[w.eventRange.instance.instanceId]=R.top,w.firstCol===w.lastCol&&w.isStart&&w.isEnd?(f[w.eventRange.instance.instanceId]=R.top-S,D=0,S=R.bottom):D+=R.bottom-R.top)}D&&(c[E]?h[E]=D:v[E]=D)}function T(e,t){if(!k(e,t,0))for(var n=e.firstCol;n<=e.lastCol;n++)for(var r=0,o=u[n];r<o.length;r++){if(k(e,t,o[r].bottom))return}}function k(e,t,n){if(function(e,t,n){for(var r=e.firstCol;r<=e.lastCol;r++)for(var o=0,i=u[r];o<i.length;o++){var a=i[o];if(n<a.bottom&&n+t>a.top)return!1}return!0}(e,t,n)){for(var r=e.firstCol;r<=e.lastCol;r++){for(var o=u[r],i=0;i<o.length&&n>=o[i].top;)i++;o.splice(i,0,{seg:e,top:n,bottom:n+t})}return!0}return!1}for(var M in i)i[M]||(d[M.split(":")[0]]=!0);return{segsByFirstCol:u.map(ts),segsByEachCol:u.map((function(t,n){var o=function(e){for(var t=[],n=0,r=e;n<r.length;n++){var o=r[n];t.push(o.seg)}return t}(t);return o=function(e,t,n){for(var o=t,i=ve(o,1),a={start:o,end:i},s=[],l=0,u=e;l<u.length;l++){var c=u[l],d=c.eventRange,p=d.range,f=nn(p,a);f&&s.push(r(r({},c),{firstCol:n,lastCol:n,eventRange:{def:d.def,ui:r(r({},d.ui),{durationEditable:!1}),instance:d.instance,range:f},isStart:c.isStart&&f.start.valueOf()===p.start.valueOf(),isEnd:c.isEnd&&f.end.valueOf()===p.end.valueOf()}))}return s}(o,e[n].date,n)})),segIsHidden:d,segTops:p,segMarginTops:f,moreCnts:c,moreTops:h,paddingBottoms:v}}function ts(e,t){for(var n=[],r=0,o=e;r<o.length;r++){var i=o[r];i.seg.firstCol===t&&n.push(i.seg)}return n}function ns(e,t,n,r,o){for(var i=e.length,a={},s=[],l=0;l<i;l++)s.push([]);for(l=0;l<i;l++)for(var u=0,c=0,d=n[l];c<d.length;c++){var p=d[c];o(p,u)?f(p):h(p,u,r),p.top!==p.bottom&&u++}function f(e){var t=e.seg,n=t.eventRange.instance.instanceId;if(!a[n]){a[n]=!0;for(var r=t.firstCol;r<=t.lastCol;r++)s[r].push(e)}}function h(n,r,o){var i=n.seg,a=i.eventRange.instance.instanceId;if(!t[a]){t[a]=!0;for(var l=i.firstCol;l<=i.lastCol;l++){var u=++e[l];if(o&&1===u)for(var c=r-1;s[l].length>c;)h(s[l].pop(),s[l].length,!1)}}}}var rs=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.cellElRefs=new Li,t.frameElRefs=new Li,t.fgElRefs=new Li,t.segHarnessRefs=new Li,t.rootElRef=Ar(),t.state={framePositions:null,maxContentHeight:null,segHeights:{}},t}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=this.state,r=this.context,o=t.cells.length,i=Fa(t.businessHourSegs,o),a=Fa(t.bgEventSegs,o),s=Fa(this.getHighlightSegs(),o),l=Fa(this.getMirrorSegs(),o),u=es(t.cells,t.fgEventSegs,t.dayMaxEvents,t.dayMaxEventRows,n.segHeights,n.maxContentHeight,o,r.options.eventOrder),c=u.paddingBottoms,d=u.segsByFirstCol,p=u.segsByEachCol,f=u.segIsHidden,h=u.segTops,v=u.segMarginTops,g=u.moreCnts,m=u.moreTops,y=t.eventDrag&&t.eventDrag.affectedInstances||t.eventResize&&t.eventResize.affectedInstances||{};return Hr("tr",{ref:this.rootElRef},t.renderIntro&&t.renderIntro(),t.cells.map((function(n,r){var o=e.renderFgSegs(d[r],f,h,v,y,t.todayRange),u=e.renderFgSegs(l[r],{},h,{},{},t.todayRange,Boolean(t.eventDrag),Boolean(t.eventResize),!1);return Hr(Ga,{key:n.key,elRef:e.cellElRefs.createRef(n.key),innerElRef:e.frameElRefs.createRef(n.key),dateProfile:t.dateProfile,date:n.date,showDayNumber:t.showDayNumbers,showWeekNumber:t.showWeekNumbers&&0===r,forceDayTop:t.showWeekNumbers,todayRange:t.todayRange,extraHookProps:n.extraHookProps,extraDataAttrs:n.extraDataAttrs,extraClassNames:n.extraClassNames,moreCnt:g[r],buildMoreLinkText:t.buildMoreLinkText,onMoreClick:t.onMoreClick,segIsHidden:f,moreMarginTop:m[r],segsByEachCol:p[r],fgPaddingBottom:c[r],fgContentElRef:e.fgElRefs.createRef(n.key),fgContent:Hr(Ur,null,Hr(Ur,null,o),Hr(Ur,null,u)),bgContent:Hr(Ur,null,e.renderFillSegs(s[r],"highlight"),e.renderFillSegs(i[r],"non-business"),e.renderFillSegs(a[r],"bg-event"))})})))},t.prototype.componentDidMount=function(){this.updateSizing(!0)},t.prototype.componentDidUpdate=function(e,t){var n=this.props;this.updateSizing(!Le(e,n))},t.prototype.getHighlightSegs=function(){var e=this.props;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs},t.prototype.getMirrorSegs=function(){var e=this.props;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]},t.prototype.renderFgSegs=function(e,t,n,o,i,a,s,l,u){var c=this.context,d=this.props.eventSelection,p=this.state.framePositions,f=1===this.props.cells.length,h=[];if(p)for(var v=0,g=e;v<g.length;v++){var m=g[v],y=m.eventRange.instance.instanceId,E=s||l||u,S=i[y],D=t[y]||S,b=t[y]||E||m.firstCol!==m.lastCol||!m.isStart||!m.isEnd,C=void 0,w=void 0,R=void 0,T=void 0;b?(w=n[y],c.isRtl?(T=0,R=p.lefts[m.lastCol]-p.lefts[m.firstCol]):(R=0,T=p.rights[m.firstCol]-p.rights[m.lastCol])):C=o[y],h.push(Hr("div",{className:"fc-daygrid-event-harness"+(b?" fc-daygrid-event-harness-abs":""),key:y,ref:E?null:this.segHarnessRefs.createRef(y+":"+m.firstCol),style:{visibility:D?"hidden":"",marginTop:C||"",top:w||"",left:R||"",right:T||""}},Ka(m)?Hr(Ja,r({seg:m,isDragging:s,isSelected:y===d,defaultDisplayEventEnd:f},Sn(m,a))):Hr(Qa,r({seg:m,isDragging:s,isResizing:l,isDateSelecting:u,isSelected:y===d,defaultDisplayEventEnd:f},Sn(m,a)))))}return h},t.prototype.renderFillSegs=function(e,t){var n=this.context.isRtl,i=this.props.todayRange,a=this.state.framePositions,s=[];if(a)for(var l=0,u=e;l<u.length;l++){var c=u[l],d=n?{right:0,left:a.lefts[c.lastCol]-a.lefts[c.firstCol]}:{left:0,right:a.rights[c.firstCol]-a.rights[c.lastCol]};s.push(Hr("div",{key:bn(c.eventRange),className:"fc-daygrid-bg-harness",style:d},"bg-event"===t?Hr(la,r({seg:c},Sn(c,i))):sa(t)))}return Hr.apply(void 0,o([Ur,{}],s))},t.prototype.updateSizing=function(e){var t=this.props,n=this.frameElRefs;if(null!==t.clientWidth){if(e){var r=t.cells.map((function(e){return n.currentMap[e.key]}));if(r.length){var o=this.rootElRef.current;this.setState({framePositions:new Mr(o,r,!0,!1)})}}var i=!0===t.dayMaxEvents||!0===t.dayMaxEventRows;this.setState({segHeights:this.computeSegHeights(),maxContentHeight:i?this.computeMaxContentHeight():null})}},t.prototype.computeSegHeights=function(){return Oe(this.segHarnessRefs.currentMap,(function(e){return e.getBoundingClientRect().height}))},t.prototype.computeMaxContentHeight=function(){var e=this.props.cells[0].key,t=this.cellElRefs.currentMap[e],n=this.fgElRefs.currentMap[e];return t.getBoundingClientRect().bottom-n.getBoundingClientRect().top},t.prototype.getCellEls=function(){var e=this.cellElRefs.currentMap;return this.props.cells.map((function(t){return e[t.key]}))},t}(oo);rs.addStateEquality({segHeights:Le});var os=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.repositioner=new Go(t.updateSize.bind(t)),t.handleRootEl=function(e){t.rootEl=e,t.props.elRef&&Yr(t.props.elRef,e)},t.handleDocumentMousedown=function(e){var n=t.props.onClose;n&&!t.rootEl.contains(e.target)&&n()},t.handleDocumentScroll=function(){t.repositioner.request(10)},t.handleCloseClick=function(){var e=t.props.onClose;e&&e()},t}return n(t,e),t.prototype.render=function(){var e=this.context.theme,t=this.props,n=["fc-popover",e.getClass("popover")].concat(t.extraClassNames||[]);return Hr("div",r({className:n.join(" ")},t.extraAttrs,{ref:this.handleRootEl}),Hr("div",{className:"fc-popover-header "+e.getClass("popoverHeader")},Hr("span",{className:"fc-popover-title"},t.title),Hr("span",{className:"fc-popover-close "+e.getIconClass("close"),onClick:this.handleCloseClick})),Hr("div",{className:"fc-popover-body "+e.getClass("popoverContent")},t.children))},t.prototype.componentDidMount=function(){document.addEventListener("mousedown",this.handleDocumentMousedown),document.addEventListener("scroll",this.handleDocumentScroll),this.updateSize()},t.prototype.componentWillUnmount=function(){document.removeEventListener("mousedown",this.handleDocumentMousedown),document.removeEventListener("scroll",this.handleDocumentScroll)},t.prototype.updateSize=function(){var e=this.props,t=e.alignmentEl,n=e.topAlignmentEl,r=this.rootEl;if(r){var o,i=r.getBoundingClientRect(),a=t.getBoundingClientRect(),s=n?n.getBoundingClientRect().top:a.top;s=Math.min(s,window.innerHeight-i.height-10),s=Math.max(s,10),o=this.context.isRtl?a.right-i.width:a.left,o=Math.min(o,window.innerWidth-i.width-10),j(r,{top:s,left:o=Math.max(o,10)})}},t}(jr),is=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handlePopoverEl=function(e){t.popoverEl=e,e?t.context.registerInteractiveComponent(t,{el:e,useEventCenter:!1}):t.context.unregisterInteractiveComponent(t)},t}return n(t,e),t.prototype.render=function(){var e=this.context,t=e.options,n=e.dateEnv,o=this.props,i=o.date,a=o.hiddenInstances,s=o.todayRange,l=o.dateProfile,u=o.selectedInstanceId,c=n.format(i,t.dayPopoverFormat);return Hr(oa,{date:i,dateProfile:l,todayRange:s,elRef:this.handlePopoverEl},(function(e,t,n){return Hr(os,{elRef:e,title:c,extraClassNames:["fc-more-popover"].concat(t),extraAttrs:n,onClose:o.onCloseClick,alignmentEl:o.alignmentEl,topAlignmentEl:o.topAlignmentEl},Hr(ia,{date:i,dateProfile:l,todayRange:s},(function(e,t){return t&&Hr("div",{className:"fc-more-popover-misc",ref:e},t)})),o.segs.map((function(e){var t=e.eventRange.instance.instanceId;return Hr("div",{className:"fc-daygrid-event-harness",key:t,style:{visibility:a[t]?"hidden":""}},Ka(e)?Hr(Ja,r({seg:e,isDragging:!1,isSelected:t===u,defaultDisplayEventEnd:!1},Sn(e,s))):Hr(Qa,r({seg:e,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:t===u,defaultDisplayEventEnd:!1},Sn(e,s))))})))}))},t.prototype.queryHit=function(e,t,n,r){var o=this.props.date;if(e<n&&t<r)return{component:this,dateSpan:{allDay:!0,range:{start:o,end:ve(o,1)}},dayEl:this.popoverEl,rect:{left:0,top:0,right:n,bottom:r},layer:1}},t.prototype.isPopover=function(){return!0},t}(oo),as=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.splitBusinessHourSegs=it(za),t.splitBgEventSegs=it(za),t.splitFgEventSegs=it(za),t.splitDateSelectionSegs=it(za),t.splitEventDrag=it(Ba),t.splitEventResize=it(Ba),t.buildBuildMoreLinkText=it(ss),t.rowRefs=new Li,t.state={morePopoverState:null},t.handleRootEl=function(e){t.rootEl=e,Yr(t.props.elRef,e)},t.handleMoreLinkClick=function(e){var n=t.context,o=n.dateEnv,i=n.options.moreLinkClick;function a(e){var t=e.eventRange,r=t.def,i=t.instance,a=t.range;return{event:new zn(n,r,i),start:o.toDate(a.start),end:o.toDate(a.end),isStart:e.isStart,isEnd:e.isEnd}}"function"==typeof i&&(i=i({date:o.toDate(e.date),allDay:!0,allSegs:e.allSegs.map(a),hiddenSegs:e.hiddenSegs.map(a),jsEvent:e.ev,view:n.viewApi})),i&&"popover"!==i?"string"==typeof i&&n.calendarApi.zoomTo(e.date,i):t.setState({morePopoverState:r(r({},e),{currentFgEventSegs:t.props.fgEventSegs})})},t.handleMorePopoverClose=function(){t.setState({morePopoverState:null})},t}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=t.dateProfile,r=t.dayMaxEventRows,o=t.dayMaxEvents,i=t.expandRows,a=this.state.morePopoverState,s=t.cells.length,l=this.splitBusinessHourSegs(t.businessHourSegs,s),u=this.splitBgEventSegs(t.bgEventSegs,s),c=this.splitFgEventSegs(t.fgEventSegs,s),d=this.splitDateSelectionSegs(t.dateSelectionSegs,s),p=this.splitEventDrag(t.eventDrag,s),f=this.splitEventResize(t.eventResize,s),h=this.buildBuildMoreLinkText(this.context.options.moreLinkText),v=!0===o||!0===r;return v&&!i&&(v=!1,r=null,o=null),Hr("div",{className:["fc-daygrid-body",v?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",i?"":"fc-daygrid-body-natural"].join(" "),ref:this.handleRootEl,style:{width:t.clientWidth,minWidth:t.tableMinWidth}},Hr(Mi,{unit:"day"},(function(v,g){return Hr(Ur,null,Hr("table",{className:"fc-scrollgrid-sync-table",style:{width:t.clientWidth,minWidth:t.tableMinWidth,height:i?t.clientHeight:""}},t.colGroupNode,Hr("tbody",null,t.cells.map((function(i,a){return Hr(rs,{ref:e.rowRefs.createRef(a),key:i.length?i[0].date.toISOString():a,showDayNumbers:s>1,showWeekNumbers:t.showWeekNumbers,todayRange:g,dateProfile:n,cells:i,renderIntro:t.renderRowIntro,businessHourSegs:l[a],eventSelection:t.eventSelection,bgEventSegs:u[a].filter(ls),fgEventSegs:c[a],dateSelectionSegs:d[a],eventDrag:p[a],eventResize:f[a],dayMaxEvents:o,dayMaxEventRows:r,clientWidth:t.clientWidth,clientHeight:t.clientHeight,buildMoreLinkText:h,onMoreClick:e.handleMoreLinkClick})})))),!t.forPrint&&a&&a.currentFgEventSegs===t.fgEventSegs&&Hr(is,{date:a.date,dateProfile:n,segs:a.allSegs,alignmentEl:a.dayEl,topAlignmentEl:1===s?t.headerAlignElRef.current:null,onCloseClick:e.handleMorePopoverClose,selectedInstanceId:t.eventSelection,hiddenInstances:(t.eventDrag?t.eventDrag.affectedInstances:null)||(t.eventResize?t.eventResize.affectedInstances:null)||{},todayRange:g}))})))},t.prototype.prepareHits=function(){this.rowPositions=new Mr(this.rootEl,this.rowRefs.collect().map((function(e){return e.getCellEls()[0]})),!1,!0),this.colPositions=new Mr(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)},t.prototype.positionToHit=function(e,t){var n=this.colPositions,r=this.rowPositions,o=n.leftToIndex(e),i=r.topToIndex(t);if(null!=i&&null!=o)return{row:i,col:o,dateSpan:{range:this.getCellRange(i,o),allDay:!0},dayEl:this.getCellEl(i,o),relativeRect:{left:n.lefts[o],right:n.rights[o],top:r.tops[i],bottom:r.bottoms[i]}}},t.prototype.getCellEl=function(e,t){return this.rowRefs.currentMap[e].getCellEls()[t]},t.prototype.getCellRange=function(e,t){var n=this.props.cells[e][t].date;return{start:n,end:ve(n,1)}},t}(oo);function ss(e){return"function"==typeof e?e:function(t){return"+"+t+" "+e}}function ls(e){return e.eventRange.def.allDay}var us=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.slicer=new cs,t.tableRef=Ar(),t.handleRootEl=function(e){e?t.context.registerInteractiveComponent(t,{el:e}):t.context.unregisterInteractiveComponent(t)},t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context;return Hr(as,r({ref:this.tableRef,elRef:this.handleRootEl},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,t,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))},t.prototype.prepareHits=function(){this.tableRef.current.prepareHits()},t.prototype.queryHit=function(e,t){var n=this.tableRef.current.positionToHit(e,t);if(n)return{component:this,dateSpan:n.dateSpan,dayEl:n.dayEl,rect:{left:n.relativeRect.left,right:n.relativeRect.right,top:n.relativeRect.top,bottom:n.relativeRect.bottom},layer:0}},t}(oo),cs=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.forceDayIfListItem=!0,t}return n(t,e),t.prototype.sliceRange=function(e,t){return t.sliceRange(e)},t}(Hi),ds=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.buildDayTableModel=it(ps),t.headerRef=Ar(),t.tableRef=Ar(),t}return n(t,e),t.prototype.render=function(){var e=this,t=this.context,n=t.options,r=t.dateProfileGenerator,o=this.props,i=this.buildDayTableModel(o.dateProfile,r),a=n.dayHeaders&&Hr(_i,{ref:this.headerRef,dateProfile:o.dateProfile,dates:i.headerDates,datesRepDistinctDays:1===i.rowCnt}),s=function(t){return Hr(us,{ref:e.tableRef,dateProfile:o.dateProfile,dayTableModel:i,businessHours:o.businessHours,dateSelection:o.dateSelection,eventStore:o.eventStore,eventUiBases:o.eventUiBases,eventSelection:o.eventSelection,eventDrag:o.eventDrag,eventResize:o.eventResize,nextDayThreshold:n.nextDayThreshold,colGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,dayMaxEvents:n.dayMaxEvents,dayMaxEventRows:n.dayMaxEventRows,showWeekNumbers:n.weekNumbers,expandRows:!o.isHeightAuto,headerAlignElRef:e.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:o.forPrint})};return n.dayMinWidth?this.renderHScrollLayout(a,s,i.colCnt,n.dayMinWidth):this.renderSimpleLayout(a,s)},t}(Va);function ps(e,t){var n=new Pi(e.renderRange,t);return new Ni(n,/year|month|week/.test(e.currentRangeUnit))}var fs=io({initialView:"dayGridMonth",optionRefiners:{moreLinkClick:_t,moreLinkClassNames:_t,moreLinkContent:_t,moreLinkDidMount:_t,moreLinkWillUnmount:_t},views:{dayGrid:{component:ds,dateProfileGeneratorClass:function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.buildRenderRange=function(t,n,r){var o,i=this.props.dateEnv,a=e.prototype.buildRenderRange.call(this,t,n,r),s=a.start,l=a.end;(/^(year|month)$/.test(n)&&(s=i.startOfWeek(s),(o=i.startOfWeek(l)).valueOf()!==l.valueOf()&&(l=he(o,1))),this.props.monthMode&&this.props.fixedWeekCount)&&(l=he(l,6-Math.ceil(me(s,l))));return{start:s,end:l}},t}(Co)},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}}),hs=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.getKeyInfo=function(){return{allDay:{},timed:{}}},t.prototype.getKeysForDateSpan=function(e){return e.allDay?["allDay"]:["timed"]},t.prototype.getKeysForEventDef=function(e){return e.allDay?un(e)?["timed","allDay"]:["allDay"]:["timed"]},t}(pr),vs=function(){function e(e,t,n){this.positions=e,this.dateProfile=t,this.slatMetas=n}return e.prototype.safeComputeTop=function(e){var t=this.dateProfile;if(sn(t.currentRange,e)){var n=be(e),r=e.valueOf()-n.valueOf();if(r>=$e(t.slotMinTime)&&r<$e(t.slotMaxTime))return this.computeTimeTop(Ye(r))}},e.prototype.computeDateTop=function(e,t){return t||(t=be(e)),this.computeTimeTop(Ye(e.valueOf()-t.valueOf()))},e.prototype.computeTimeTop=function(e){var t,n,r=this.positions,o=this.dateProfile,i=this.slatMetas,a=r.els.length,s=i[1].date.valueOf()-i[0].date.valueOf(),l=(e.milliseconds-$e(o.slotMinTime))/s;return l=Math.max(0,l),l=Math.min(a,l),t=Math.floor(l),n=l-(t=Math.min(t,a-1)),r.tops[t]+r.getHeight(t)*n},e}(),gs=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}],ms=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.rootElRef=Ar(),t.slatElRefs=new Li,t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context;return Hr("div",{className:"fc-timegrid-slots",ref:this.rootElRef},Hr("table",{className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},e.tableColGroupNode,Hr(ys,{slatElRefs:this.slatElRefs,axis:e.axis,slatMetas:e.slatMetas})))},t.prototype.componentDidMount=function(){this.updateSizing()},t.prototype.componentDidUpdate=function(){this.updateSizing()},t.prototype.componentWillUnmount=function(){this.props.onCoords&&this.props.onCoords(null)},t.prototype.updateSizing=function(){var e,t=this.props;t.onCoords&&null!==t.clientWidth&&(this.rootElRef.current.offsetHeight&&t.onCoords(new vs(new Mr(this.rootElRef.current,(e=this.slatElRefs.currentMap,t.slatMetas.map((function(t){return e[t.key]}))),!1,!0),this.props.dateProfile,t.slatMetas)))},t}(jr);var ys=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.options,o=e.slatElRefs;return Hr("tbody",null,e.slatMetas.map((function(i,a){var s={time:i.time,date:t.dateEnv.toDate(i.date),view:t.viewApi},l=["fc-timegrid-slot","fc-timegrid-slot-lane",i.isLabeled?"":"fc-timegrid-slot-minor"];return Hr("tr",{key:i.key,ref:o.createRef(i.key)},e.axis&&Hr(Ss,r({},i)),Hr(uo,{hookProps:s,classNames:n.slotLaneClassNames,content:n.slotLaneContent,didMount:n.slotLaneDidMount,willUnmount:n.slotLaneWillUnmount},(function(e,t,n,r){return Hr("td",{ref:e,className:l.concat(t).join(" "),"data-time":i.isoTimeStr},r)})))})))},t}(jr),Es=St({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function Ss(e){var t=["fc-timegrid-slot","fc-timegrid-slot-label",e.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return Hr(zr.Consumer,null,(function(n){if(e.isLabeled){var r=n.dateEnv,o=n.options,i=n.viewApi,a=null==o.slotLabelFormat?Es:Array.isArray(o.slotLabelFormat)?St(o.slotLabelFormat[0]):St(o.slotLabelFormat),s={level:0,time:e.time,date:r.toDate(e.date),view:i,text:r.format(e.date,a)};return Hr(uo,{hookProps:s,classNames:o.slotLabelClassNames,content:o.slotLabelContent,defaultContent:Ds,didMount:o.slotLabelDidMount,willUnmount:o.slotLabelWillUnmount},(function(n,r,o,i){return Hr("td",{ref:n,className:t.concat(r).join(" "),"data-time":e.isoTimeStr},Hr("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},Hr("div",{className:"fc-timegrid-slot-label-cushion fc-scrollgrid-shrink-cushion",ref:o},i)))}))}return Hr("td",{className:t.join(" "),"data-time":e.isoTimeStr})}))}function Ds(e){return e.text}function bs(e,t,n,r,o){for(var i=new Date(0),a=e,s=Ye(0),l=n||function(e){var t,n,r;for(t=gs.length-1;t>=0;t--)if(n=Ye(gs[t]),null!==(r=Qe(n,e))&&r>1)return n;return e}(r),u=[];$e(a)<$e(t);){var c=o.add(i,a),d=null!==Qe(s,l);u.push({date:c,time:a,key:c.toISOString(),isoTimeStr:nt(c),isLabeled:d}),a=Xe(a,r),s=Xe(s,r)}return u}var Cs=St({week:"short"}),ws=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.allDaySplitter=new hs,t.headerElRef=Ar(),t.rootElRef=Ar(),t.scrollerElRef=Ar(),t.state={slatCoords:null},t.handleScrollTopRequest=function(e){var n=t.scrollerElRef.current;n&&(n.scrollTop=e)},t.renderHeadAxis=function(e){void 0===e&&(e="");var n=t.context.options,o=t.props.dateProfile.renderRange,i=ye(o.start,o.end),a=n.navLinks&&1===i?{"data-navlink":gr(o.start,"week"),tabIndex:0}:{};return n.weekNumbers?Hr(ca,{date:o.start,defaultFormat:Cs},(function(t,n,o,i){return Hr("th",{ref:t,className:["fc-timegrid-axis","fc-scrollgrid-shrink"].concat(n).join(" ")},Hr("div",{className:"fc-timegrid-axis-frame fc-scrollgrid-shrink-frame fc-timegrid-axis-frame-liquid",style:{height:e}},Hr("a",r({ref:o,className:"fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion fc-scrollgrid-sync-inner"},a),i)))})):Hr("th",{className:"fc-timegrid-axis"},Hr("div",{className:"fc-timegrid-axis-frame",style:{height:e}}))},t.renderTableRowAxis=function(e){var n=t.context,r=n.options,o=n.viewApi,i={text:r.allDayText,view:o};return Hr(uo,{hookProps:i,classNames:r.allDayClassNames,content:r.allDayContent,defaultContent:Rs,didMount:r.allDayDidMount,willUnmount:r.allDayWillUnmount},(function(t,n,r,o){return Hr("td",{ref:t,className:["fc-timegrid-axis","fc-scrollgrid-shrink"].concat(n).join(" ")},Hr("div",{className:"fc-timegrid-axis-frame fc-scrollgrid-shrink-frame"+(null==e?" fc-timegrid-axis-frame-liquid":""),style:{height:e}},Hr("span",{className:"fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion fc-scrollgrid-sync-inner",ref:r},o)))}))},t.handleSlatCoords=function(e){t.setState({slatCoords:e})},t}return n(t,e),t.prototype.renderSimpleLayout=function(e,t,n){var r=this.context,o=this.props,i=[],a=Ki(r.options);return e&&i.push({type:"header",key:"header",isSticky:a,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),t&&(i.push({type:"body",key:"all-day",chunk:{content:t}}),i.push({type:"body",key:"all-day-divider",outerContent:Hr("tr",{className:"fc-scrollgrid-section"},Hr("td",{className:"fc-timegrid-divider "+r.theme.getClass("tableCellShaded")}))})),i.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(r.options.expandRows),chunk:{scrollerElRef:this.scrollerElRef,content:n}}),Hr(yo,{viewSpec:r.viewSpec,elRef:this.rootElRef},(function(e,t){return Hr("div",{className:["fc-timegrid"].concat(t).join(" "),ref:e},Hr($i,{liquid:!o.isHeightAuto&&!o.forPrint,cols:[{width:"shrink"}],sections:i}))}))},t.prototype.renderHScrollLayout=function(e,t,n,r,o,i,a){var s=this,l=this.context.pluginHooks.scrollGridImpl;if(!l)throw new Error("No ScrollGrid implementation");var u=this.context,c=this.props,d=!c.forPrint&&Ki(u.options),p=!c.forPrint&&Ji(u.options),f=[];e&&f.push({type:"header",key:"header",isSticky:d,syncRowHeights:!0,chunks:[{key:"axis",rowContent:function(e){return Hr("tr",null,s.renderHeadAxis(e.rowSyncHeights[0]))}},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),t&&(f.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:function(e){return Hr("tr",null,s.renderTableRowAxis(e.rowSyncHeights[0]))}},{key:"cols",content:t}]}),f.push({key:"all-day-divider",type:"body",outerContent:Hr("tr",{className:"fc-scrollgrid-section"},Hr("td",{colSpan:2,className:"fc-timegrid-divider "+u.theme.getClass("tableCellShaded")}))}));var h=u.options.nowIndicator;return f.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(u.options.expandRows),chunks:[{key:"axis",content:function(e){return Hr("div",{className:"fc-timegrid-axis-chunk"},Hr("table",{style:{height:e.expandRows?e.clientHeight:""}},e.tableColGroupNode,Hr("tbody",null,Hr(Ts,{slatMetas:i}))),Hr("div",{className:"fc-timegrid-now-indicator-container"},Hr(Mi,{unit:h?"minute":"day"},(function(e){var t=h&&a&&a.safeComputeTop(e);return"number"==typeof t?Hr(na,{isAxis:!0,date:e},(function(e,n,r,o){return Hr("div",{ref:e,className:["fc-timegrid-now-indicator-arrow"].concat(n).join(" "),style:{top:t}},o)})):null}))))}},{key:"cols",scrollerElRef:this.scrollerElRef,content:n}]}),p&&f.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:Xi},{key:"cols",content:Xi}]}),Hr(yo,{viewSpec:u.viewSpec,elRef:this.rootElRef},(function(e,t){return Hr("div",{className:["fc-timegrid"].concat(t).join(" "),ref:e},Hr(l,{liquid:!c.isHeightAuto&&!c.forPrint,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:r,minWidth:o}]}],sections:f}))}))},t.prototype.getAllDayMaxEventProps=function(){var e=this.context.options,t=e.dayMaxEvents,n=e.dayMaxEventRows;return!0!==t&&!0!==n||(t=void 0,n=5),{dayMaxEvents:t,dayMaxEventRows:n}},t}(oo);function Rs(e){return e.text}var Ts=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){return this.props.slatMetas.map((function(e){return Hr("tr",{key:e.key},Hr(Ss,r({},e)))}))},t}(jr);function ks(e,t){var n,r=[];for(n=0;n<t;n++)r.push([]);if(e)for(n=0;n<e.length;n++)r[e[n].col].push(e[n]);return r}function Ms(e,t){var n=[];if(e){for(a=0;a<t;a++)n[a]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(var r=0,o=e.segs;r<o.length;r++){var i=o[r];n[i.col].segs.push(i)}}else for(var a=0;a<t;a++)n[a]=null;return n}function xs(e,t,n,r,o){return _s(e,t,n,r),function(e,t){for(var n=0,r=e;n<r.length;n++){(c=r[n]).level=null,c.forwardCoord=null,c.backwardCoord=null,c.forwardPressure=null}var o,i=function(e){var t,n,r,o=[];for(t=0;t<e.length;t++){for(n=e[t],r=0;r<o.length&&Is(n,o[r]).length;r++);n.level=r,(o[r]||(o[r]=[])).push(n)}return o}(e=hn(e,t));if(function(e){var t,n,r,o,i;for(t=0;t<e.length;t++)for(n=e[t],r=0;r<n.length;r++)for((o=n[r]).forwardSegs=[],i=t+1;i<e.length;i++)Is(o,e[i],o.forwardSegs)}(i),o=i[0]){for(var a=0,s=o;a<s.length;a++){Ps(c=s[a])}for(var l=0,u=o;l<u.length;l++){var c;Ns(c=u[l],0,0,t)}}return e}(e,o)}function _s(e,t,n,r){for(var o=0,i=e;o<i.length;o++){var a=i[o];a.top=n.computeDateTop(a.start,t),a.bottom=Math.max(a.top+(r||0),n.computeDateTop(a.end,t))}}function Is(e,t,n){void 0===n&&(n=[]);for(var r=0;r<t.length;r++)o=e,i=t[r],o.bottom>i.top&&o.top<i.bottom&&n.push(t[r]);var o,i;return n}function Ps(e){var t,n,r=e.forwardSegs,o=0;if(null==e.forwardPressure){for(t=0;t<r.length;t++)Ps(n=r[t]),o=Math.max(o,1+n.forwardPressure);e.forwardPressure=o}}function Ns(e,t,n,r){var o,i=e.forwardSegs;if(null==e.forwardCoord)for(i.length?(!function(e,t){var n=e.map(Hs),r=[{field:"forwardPressure",order:-1},{field:"backwardCoord",order:1}].concat(t);n.sort((function(e,t){return ae(e,t,r)})),n.map((function(e){return e._seg}))}(i,r),Ns(i[0],t+1,n,r),e.forwardCoord=i[0].backwardCoord):e.forwardCoord=1,e.backwardCoord=e.forwardCoord-(e.forwardCoord-n)/(t+1),o=0;o<i.length;o++)Ns(i[o],0,e.forwardCoord,r)}function Hs(e){var t=vn(e);return t.forwardPressure=e.forwardPressure,t.backwardCoord=e.backwardCoord,t}var Os=St({hour:"numeric",minute:"2-digit",meridiem:!1}),As=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=["fc-timegrid-event","fc-v-event"];return this.props.isCondensed&&e.push("fc-timegrid-event-condensed"),Hr(ea,r({},this.props,{defaultTimeFormat:Os,extraClassNames:e}))},t}(jr);di.timeGridEventCondensedHeight=30;var Us=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=this.context.options.selectMirror,o=t.eventDrag&&t.eventDrag.segs||t.eventResize&&t.eventResize.segs||n&&t.dateSelectionSegs||[],i=t.eventDrag&&t.eventDrag.affectedInstances||t.eventResize&&t.eventResize.affectedInstances||{};return Hr(oa,{elRef:t.elRef,date:t.date,dateProfile:t.dateProfile,todayRange:t.todayRange,extraHookProps:t.extraHookProps},(function(a,s,l){return Hr("td",r({ref:a,className:["fc-timegrid-col"].concat(s,t.extraClassNames||[]).join(" ")},l,t.extraDataAttrs),Hr("div",{className:"fc-timegrid-col-frame"},Hr("div",{className:"fc-timegrid-col-bg"},e.renderFillSegs(t.businessHourSegs,"non-business"),e.renderFillSegs(t.bgEventSegs,"bg-event"),e.renderFillSegs(t.dateSelectionSegs,"highlight")),Hr("div",{className:"fc-timegrid-col-events"},e.renderFgSegs(t.fgEventSegs,i)),Hr("div",{className:"fc-timegrid-col-events"},e.renderFgSegs(o,{},Boolean(t.eventDrag),Boolean(t.eventResize),Boolean(n))),Hr("div",{className:"fc-timegrid-now-indicator-container"},e.renderNowIndicator(t.nowIndicatorSegs)),Hr(Ls,{date:t.date,dateProfile:t.dateProfile,todayRange:t.todayRange,extraHookProps:t.extraHookProps})))}))},t.prototype.renderFgSegs=function(e,t,n,r,o){var i=this.props;return i.forPrint?this.renderPrintFgSegs(e):i.slatCoords?this.renderPositionedFgSegs(e,t,n,r,o):void 0},t.prototype.renderPrintFgSegs=function(e){var t=this.props;return(e=hn(e,this.context.options.eventOrder)).map((function(e){return Hr("div",{className:"fc-timegrid-event-harness",key:e.eventRange.instance.instanceId},Hr(As,r({seg:e,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isCondensed:!1},Sn(e,t.todayRange,t.nowDate))))}))},t.prototype.renderPositionedFgSegs=function(e,t,n,o,i){var a=this,s=this.context,l=this.props;return(e=xs(e,l.date,l.slatCoords,s.options.eventMinHeight,s.options.eventOrder)).map((function(e){var s=e.eventRange.instance.instanceId,u=n||o||i?r({left:0,right:0},a.computeSegTopBottomCss(e)):a.computeFgSegPositionCss(e);return Hr("div",{className:"fc-timegrid-event-harness"+(e.level>0?" fc-timegrid-event-harness-inset":""),key:s,style:r({visibility:t[s]?"hidden":""},u)},Hr(As,r({seg:e,isDragging:n,isResizing:o,isDateSelecting:i,isSelected:s===l.eventSelection,isCondensed:e.bottom-e.top<di.timeGridEventCondensedHeight},Sn(e,l.todayRange,l.nowDate))))}))},t.prototype.renderFillSegs=function(e,t){var n=this,o=this.context,i=this.props;if(i.slatCoords){_s(e,i.date,i.slatCoords,o.options.eventMinHeight);var a=e.map((function(e){return Hr("div",{key:bn(e.eventRange),className:"fc-timegrid-bg-harness",style:n.computeSegTopBottomCss(e)},"bg-event"===t?Hr(la,r({seg:e},Sn(e,i.todayRange,i.nowDate))):sa(t))}));return Hr(Ur,null,a)}},t.prototype.renderNowIndicator=function(e){var t=this.props,n=t.slatCoords,r=t.date;if(n)return e.map((function(e,t){return Hr(na,{isAxis:!1,date:r,key:t},(function(t,o,i,a){return Hr("div",{ref:t,className:["fc-timegrid-now-indicator-line"].concat(o).join(" "),style:{top:n.computeDateTop(e.start,r)}},a)}))}))},t.prototype.computeFgSegPositionCss=function(e){var t,n,o=this.context,i=o.isRtl,a=o.options.slotEventOverlap,s=e.backwardCoord,l=e.forwardCoord;a&&(l=Math.min(1,s+2*(l-s))),i?(t=1-l,n=s):(t=s,n=1-l);var u={zIndex:e.level+1,left:100*t+"%",right:100*n+"%"};return a&&e.forwardPressure&&(u[i?"marginLeft":"marginRight"]=20),r(r({},u),this.computeSegTopBottomCss(e))},t.prototype.computeSegTopBottomCss=function(e){return{top:e.top,bottom:-e.bottom}},t}(jr),Ls=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props;return Hr(ia,{date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,extraHookProps:e.extraHookProps},(function(e,t){return t&&Hr("div",{className:"fc-timegrid-col-misc",ref:e},t)}))},t}(jr),Ws=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.splitFgEventSegs=it(ks),t.splitBgEventSegs=it(ks),t.splitBusinessHourSegs=it(ks),t.splitNowIndicatorSegs=it(ks),t.splitDateSelectionSegs=it(ks),t.splitEventDrag=it(Ms),t.splitEventResize=it(Ms),t.rootElRef=Ar(),t.cellElRefs=new Li,t}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=this.context.options.nowIndicator&&t.slatCoords&&t.slatCoords.safeComputeTop(t.nowDate),r=t.cells.length,o=this.splitFgEventSegs(t.fgEventSegs,r),i=this.splitBgEventSegs(t.bgEventSegs,r),a=this.splitBusinessHourSegs(t.businessHourSegs,r),s=this.splitNowIndicatorSegs(t.nowIndicatorSegs,r),l=this.splitDateSelectionSegs(t.dateSelectionSegs,r),u=this.splitEventDrag(t.eventDrag,r),c=this.splitEventResize(t.eventResize,r);return Hr("div",{className:"fc-timegrid-cols",ref:this.rootElRef},Hr("table",{style:{minWidth:t.tableMinWidth,width:t.clientWidth}},t.tableColGroupNode,Hr("tbody",null,Hr("tr",null,t.axis&&Hr("td",{className:"fc-timegrid-col fc-timegrid-axis"},Hr("div",{className:"fc-timegrid-col-frame"},Hr("div",{className:"fc-timegrid-now-indicator-container"},"number"==typeof n&&Hr(na,{isAxis:!0,date:t.nowDate},(function(e,t,r,o){return Hr("div",{ref:e,className:["fc-timegrid-now-indicator-arrow"].concat(t).join(" "),style:{top:n}},o)}))))),t.cells.map((function(n,r){return Hr(Us,{key:n.key,elRef:e.cellElRefs.createRef(n.key),dateProfile:t.dateProfile,date:n.date,nowDate:t.nowDate,todayRange:t.todayRange,extraHookProps:n.extraHookProps,extraDataAttrs:n.extraDataAttrs,extraClassNames:n.extraClassNames,fgEventSegs:o[r],bgEventSegs:i[r],businessHourSegs:a[r],nowIndicatorSegs:s[r],dateSelectionSegs:l[r],eventDrag:u[r],eventResize:c[r],slatCoords:t.slatCoords,eventSelection:t.eventSelection,forPrint:t.forPrint})}))))))},t.prototype.componentDidMount=function(){this.updateCoords()},t.prototype.componentDidUpdate=function(){this.updateCoords()},t.prototype.updateCoords=function(){var e,t=this.props;t.onColCoords&&null!==t.clientWidth&&t.onColCoords(new Mr(this.rootElRef.current,(e=this.cellElRefs.currentMap,t.cells.map((function(t){return e[t.key]}))),!0,!1))},t}(jr);var Vs=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.processSlotOptions=it(zs),t.state={slatCoords:null},t.handleScrollRequest=function(e){var n=t.props.onScrollTopRequest,r=t.state.slatCoords;if(n&&r){if(e.time){var o=r.computeTimeTop(e.time);(o=Math.ceil(o))&&o++,n(o)}return!0}},t.handleColCoords=function(e){t.colCoords=e},t.handleSlatCoords=function(e){t.setState({slatCoords:e}),t.props.onSlatCoords&&t.props.onSlatCoords(e)},t}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.state;return Hr("div",{className:"fc-timegrid-body",ref:e.rootElRef,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},Hr(ms,{axis:e.axis,dateProfile:e.dateProfile,slatMetas:e.slatMetas,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,tableColGroupNode:e.axis?e.tableColGroupNode:null,onCoords:this.handleSlatCoords}),Hr(Ws,{cells:e.cells,axis:e.axis,dateProfile:e.dateProfile,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange,nowDate:e.nowDate,nowIndicatorSegs:e.nowIndicatorSegs,clientWidth:e.clientWidth,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,slatCoords:t.slatCoords,onColCoords:this.handleColCoords,forPrint:e.forPrint}))},t.prototype.componentDidMount=function(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)},t.prototype.componentDidUpdate=function(e){this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)},t.prototype.componentWillUnmount=function(){this.scrollResponder.detach()},t.prototype.positionToHit=function(e,t){var n=this.context,r=n.dateEnv,o=n.options,i=this.colCoords,a=this.props.dateProfile,s=this.state.slatCoords,l=this.processSlotOptions(this.props.slotDuration,o.snapDuration),u=l.snapDuration,c=l.snapsPerSlot,d=i.leftToIndex(e),p=s.positions.topToIndex(t);if(null!=d&&null!=p){var f=s.positions.tops[p],h=s.positions.getHeight(p),v=(t-f)/h,g=p*c+Math.floor(v*c),m=this.props.cells[d].date,y=Xe(a.slotMinTime,Ke(u,g)),E=r.add(m,y);return{col:d,dateSpan:{range:{start:E,end:r.add(E,u)},allDay:!1},dayEl:i.els[d],relativeRect:{left:i.lefts[d],right:i.rights[d],top:f,bottom:f+h}}}},t}(jr);function zs(e,t){var n=t||e,r=Qe(e,n);return null===r&&(n=e,r=1),{snapDuration:n,snapsPerSlot:r}}var Fs=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.buildDayRanges=it(Bs),t.slicer=new js,t.timeColsRef=Ar(),t.handleRootEl=function(e){e?t.context.registerInteractiveComponent(t,{el:e}):t.context.unregisterInteractiveComponent(t)},t}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=this.context,o=t.dateProfile,i=t.dayTableModel,a=n.options.nowIndicator,s=this.buildDayRanges(i,o,n.dateEnv);return Hr(Mi,{unit:a?"minute":"day"},(function(l,u){return Hr(Vs,r({ref:e.timeColsRef,rootElRef:e.handleRootEl},e.slicer.sliceProps(t,o,null,n,s),{forPrint:t.forPrint,axis:t.axis,dateProfile:o,slatMetas:t.slatMetas,slotDuration:t.slotDuration,cells:i.cells[0],tableColGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,clientWidth:t.clientWidth,clientHeight:t.clientHeight,expandRows:t.expandRows,nowDate:l,nowIndicatorSegs:a&&e.slicer.sliceNowDate(l,n,s),todayRange:u,onScrollTopRequest:t.onScrollTopRequest,onSlatCoords:t.onSlatCoords}))}))},t.prototype.queryHit=function(e,t){var n=this.timeColsRef.current.positionToHit(e,t);if(n)return{component:this,dateSpan:n.dateSpan,dayEl:n.dayEl,rect:{left:n.relativeRect.left,right:n.relativeRect.right,top:n.relativeRect.top,bottom:n.relativeRect.bottom},layer:0}},t}(oo);function Bs(e,t,n){for(var r=[],o=0,i=e.headerDates;o<i.length;o++){var a=i[o];r.push({start:n.add(a,t.slotMinTime),end:n.add(a,t.slotMaxTime)})}return r}var js=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.sliceRange=function(e,t){for(var n=[],r=0;r<t.length;r++){var o=nn(e,t[r]);o&&n.push({start:o.start,end:o.end,isStart:o.start.valueOf()===e.start.valueOf(),isEnd:o.end.valueOf()===e.end.valueOf(),col:r})}return n},t}(Hi),Gs=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.buildTimeColsModel=it(qs),t.buildSlatMetas=it(bs),t}return n(t,e),t.prototype.render=function(){var e=this,t=this.context,n=t.options,o=t.dateEnv,i=t.dateProfileGenerator,a=this.props,s=a.dateProfile,l=this.buildTimeColsModel(s,i),u=this.allDaySplitter.splitProps(a),c=this.buildSlatMetas(s.slotMinTime,s.slotMaxTime,n.slotLabelInterval,n.slotDuration,o),d=n.dayMinWidth,p=!d,f=d,h=n.dayHeaders&&Hr(_i,{dates:l.headerDates,dateProfile:s,datesRepDistinctDays:!0,renderIntro:p?this.renderHeadAxis:null}),v=!1!==n.allDaySlot&&function(t){return Hr(us,r({},u.allDay,{dateProfile:s,dayTableModel:l,nextDayThreshold:n.nextDayThreshold,tableMinWidth:t.tableMinWidth,colGroupNode:t.tableColGroupNode,renderRowIntro:p?e.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:e.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:a.forPrint},e.getAllDayMaxEventProps()))},g=function(t){return Hr(Fs,r({},u.timed,{dayTableModel:l,dateProfile:s,axis:p,slotDuration:n.slotDuration,slatMetas:c,forPrint:a.forPrint,tableColGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,clientWidth:t.clientWidth,clientHeight:t.clientHeight,onSlatCoords:e.handleSlatCoords,expandRows:t.expandRows,onScrollTopRequest:e.handleScrollTopRequest}))};return f?this.renderHScrollLayout(h,v,g,l.colCnt,d,c,this.state.slatCoords):this.renderSimpleLayout(h,v,g)},t}(ws);function qs(e,t){var n=new Pi(e.renderRange,t);return new Ni(n,!1)}var Ys=io({initialView:"timeGridWeek",optionRefiners:{allDaySlot:Boolean},views:{timeGrid:{component:Gs,usesMinMaxTime:!0,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}}),Zs=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=e.dayDate,n=e.todayRange,o=this.context,i=o.theme,a=o.dateEnv,s=o.options,l=o.viewApi,u=hr(t,n),c=s.listDayFormat?a.format(t,s.listDayFormat):"",d=s.listDaySideFormat?a.format(t,s.listDaySideFormat):"",p=s.navLinks?gr(t):null,f=r({date:a.toDate(t),view:l,text:c,sideText:d,navLinkData:p},u),h=["fc-list-day"].concat(vr(u,i));return Hr(uo,{hookProps:f,classNames:s.dayHeaderClassNames,content:s.dayHeaderContent,defaultContent:Xs,didMount:s.dayHeaderDidMount,willUnmount:s.dayHeaderWillUnmount},(function(e,n,r,o){return Hr("tr",{ref:e,className:h.concat(n).join(" "),"data-date":tt(t)},Hr("th",{colSpan:3},Hr("div",{className:"fc-list-day-cushion "+i.getClass("tableCellShaded"),ref:r},o)))}))},t}(jr);function Xs(e){var t=e.navLinkData?{"data-navlink":e.navLinkData,tabIndex:0}:{};return Hr(Ur,null,e.text&&Hr("a",r({className:"fc-list-day-text"},t),e.text),e.sideText&&Hr("a",r({className:"fc-list-day-side-text"},t),e.sideText))}var Ks=St({hour:"numeric",minute:"2-digit",meridiem:"short"}),Js=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=e.seg,r=t.options.eventTimeFormat||Ks;return Hr(Qi,{seg:n,timeText:"",disableDragging:!0,disableResizing:!0,defaultContent:$s,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday,isSelected:e.isSelected,isDragging:e.isDragging,isResizing:e.isResizing,isDateSelecting:e.isDateSelecting},(function(e,o,i,a,s){return Hr("tr",{className:["fc-list-event",s.event.url?"fc-event-forced-url":""].concat(o).join(" "),ref:e},function(e,t,n){var r=n.options;if(!1!==r.displayEventTime){var o=e.eventRange.def,i=e.eventRange.instance,a=!1,s=void 0;if(o.allDay?a=!0:$t(e.eventRange.range)?e.isStart?s=En(e,t,n,null,null,i.range.start,e.end):e.isEnd?s=En(e,t,n,null,null,e.start,i.range.end):a=!0:s=En(e,t,n),a){var l={text:n.options.allDayText,view:n.viewApi};return Hr(uo,{hookProps:l,classNames:r.allDayClassNames,content:r.allDayContent,defaultContent:Qs,didMount:r.allDayDidMount,willUnmount:r.allDayWillUnmount},(function(e,t,n,r){return Hr("td",{className:["fc-list-event-time"].concat(t).join(" "),ref:e},r)}))}return Hr("td",{className:"fc-list-event-time"},s)}return null}(n,r,t),Hr("td",{className:"fc-list-event-graphic"},Hr("span",{className:"fc-list-event-dot",style:{borderColor:s.borderColor||s.backgroundColor}})),Hr("td",{className:"fc-list-event-title",ref:i},a))}))},t}(jr);function $s(e){var t=e.event,n=t.url;return Hr("a",r({},n?{href:n}:{}),t.title)}function Qs(e){return e.text}var el=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.computeDateVars=it(nl),t.eventStoreToSegs=it(t._eventStoreToSegs),t.setRootEl=function(e){e?t.context.registerInteractiveComponent(t,{el:e}):t.context.unregisterInteractiveComponent(t)},t}return n(t,e),t.prototype.render=function(){var e=this,t=this.props,n=this.context,r=["fc-list",n.theme.getClass("table"),!1!==n.options.stickyHeaderDates?"fc-list-sticky":""],o=this.computeDateVars(t.dateProfile),i=o.dayDates,a=o.dayRanges,s=this.eventStoreToSegs(t.eventStore,t.eventUiBases,a);return Hr(yo,{viewSpec:n.viewSpec,elRef:this.setRootEl},(function(n,o){return Hr("div",{ref:n,className:r.concat(o).join(" ")},Hr(Ui,{liquid:!t.isHeightAuto,overflowX:t.isHeightAuto?"visible":"hidden",overflowY:t.isHeightAuto?"visible":"auto"},s.length>0?e.renderSegList(s,i):e.renderEmptyMessage()))}))},t.prototype.renderEmptyMessage=function(){var e=this.context,t=e.options,n=e.viewApi,r={text:t.noEventsText,view:n};return Hr(uo,{hookProps:r,classNames:t.noEventsClassNames,content:t.noEventsContent,defaultContent:tl,didMount:t.noEventsDidMount,willUnmount:t.noEventsWillUnmount},(function(e,t,n,r){return Hr("div",{className:["fc-list-empty"].concat(t).join(" "),ref:e},Hr("div",{className:"fc-list-empty-cushion",ref:n},r))}))},t.prototype.renderSegList=function(e,t){var n=this.context,o=n.theme,i=n.options,a=function(e){var t,n,r=[];for(t=0;t<e.length;t++)n=e[t],(r[n.dayIndex]||(r[n.dayIndex]=[])).push(n);return r}(e);return Hr(Mi,{unit:"day"},(function(e,n){for(var s=[],l=0;l<a.length;l++){var u=a[l];if(u){var c=t[l].toISOString();s.push(Hr(Zs,{key:c,dayDate:t[l],todayRange:n}));for(var d=0,p=u=hn(u,i.eventOrder);d<p.length;d++){var f=p[d];s.push(Hr(Js,r({key:c+":"+f.eventRange.instance.instanceId,seg:f,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1},Sn(f,n,e))))}}}return Hr("table",{className:"fc-list-table "+o.getClass("table")},Hr("tbody",null,s))}))},t.prototype._eventStoreToSegs=function(e,t,n){return this.eventRangesToSegs(ln(e,t,this.props.dateProfile.activeRange,this.context.options.nextDayThreshold).fg,n)},t.prototype.eventRangesToSegs=function(e,t){for(var n=[],r=0,o=e;r<o.length;r++){var i=o[r];n.push.apply(n,this.eventRangeToSegs(i,t))}return n},t.prototype.eventRangeToSegs=function(e,t){var n,r,o,i=this.context.dateEnv,a=this.context.options.nextDayThreshold,s=e.range,l=e.def.allDay,u=[];for(n=0;n<t.length;n++)if((r=nn(s,t[n]))&&(o={component:this,eventRange:e,start:r.start,end:r.end,isStart:e.isStart&&r.start.valueOf()===s.start.valueOf(),isEnd:e.isEnd&&r.end.valueOf()===s.end.valueOf(),dayIndex:n},u.push(o),!o.isEnd&&!l&&n+1<t.length&&s.end<i.add(t[n+1].start,a))){o.end=s.end,o.isEnd=!0;break}return u},t}(oo);function tl(e){return e.text}function nl(e){for(var t=be(e.renderRange.start),n=e.renderRange.end,r=[],o=[];t<n;)r.push(t),o.push({start:t,end:ve(t,1)}),t=ve(t,1);return{dayDates:r,dayRanges:o}}function rl(e){return!1===e?null:St(e)}var ol=io({optionRefiners:{listDayFormat:rl,listDaySideFormat:rl,noEventsClassNames:_t,noEventsContent:_t,noEventsDidMount:_t,noEventsWillUnmount:_t},views:{list:{component:el,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDaySideFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDaySideFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDaySideFormat:{weekday:"long"}}}}),il=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(Pr);il.prototype.classes={root:"fc-theme-bootstrap",table:"table-bordered",tableCellShaded:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",popover:"popover",popoverHeader:"popover-header",popoverContent:"popover-body"},il.prototype.baseIconClass="fa",il.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},il.prototype.rtlIconClasses={prev:"fa-chevron-right",next:"fa-chevron-left",prevYear:"fa-angle-double-right",nextYear:"fa-angle-double-left"},il.prototype.iconOverrideOption="bootstrapFontAwesome",il.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",il.prototype.iconOverridePrefix="fa-";var al=io({themeClasses:{bootstrap:il}});var sl=io({eventSourceDefs:[{parseMeta:function(e){var t=e.googleCalendarId;return!t&&e.url&&(t=function(e){var t;if(/^[^/]+@([^/.]+\.)*(google|googlemail|gmail)\.com$/.test(e))return e;if((t=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^/]*)/.exec(e))||(t=/^https?:\/\/www.google.com\/calendar\/feeds\/([^/]*)/.exec(e)))return decodeURIComponent(t[1])}(e.url)),t?{googleCalendarId:t,googleCalendarApiKey:e.googleCalendarApiKey,googleCalendarApiBase:e.googleCalendarApiBase,extraParams:e.extraParams}:null},fetch:function(e,t,n){var o=e.context,i=o.dateEnv,a=o.options,s=e.eventSource.meta,l=s.googleCalendarApiKey||a.googleCalendarApiKey;if(l){var u=function(e){var t=e.googleCalendarApiBase;t||(t="https://www.googleapis.com/calendar/v3/calendars");return t+"/"+encodeURIComponent(e.googleCalendarId)+"/events"}(s),c=s.extraParams,d="function"==typeof c?c():c,p=function(e,t,n,o){var i,a,s;o.canComputeOffset?(a=o.formatIso(e.start),s=o.formatIso(e.end)):(a=ve(e.start,-1).toISOString(),s=ve(e.end,1).toISOString());i=r(r({},n||{}),{key:t,timeMin:a,timeMax:s,singleEvents:!0,maxResults:9999}),"local"!==o.timeZone&&(i.timeZone=o.timeZone);return i}(e.range,l,d,i);Wo("GET",u,p,(function(e,r){var o,i;e.error?n({message:"Google Calendar API: "+e.error.message,errors:e.error.errors,xhr:r}):t({rawEvents:(o=e.items,i=p.timeZone,o.map((function(e){return function(e,t){var n=e.htmlLink||null;n&&t&&(n=function(e,t){return e.replace(/(\?.*?)?(#|$)/,(function(e,n,r){return(n?n+"&":"?")+t+r}))}(n,"ctz="+t));return{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:n,location:e.location,description:e.description}}(e,i)}))),xhr:r})}),(function(e,t){n({message:e,xhr:t})}))}else n({message:"Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"})}}],optionRefiners:{googleCalendarApiKey:String},eventSourceRefiners:{googleCalendarApiKey:String,googleCalendarId:String,googleCalendarApiBase:String,extraParams:_t}});return Fo.push(Wa,fs,Ys,ol,al,sl),e.BASE_OPTION_DEFAULTS=bt,e.BASE_OPTION_REFINERS=Dt,e.BaseComponent=jr,e.BgEvent=la,e.BootstrapTheme=il,e.Calendar=pa,e.CalendarApi=Vn,e.CalendarContent=Ei,e.CalendarDataManager=Zo,e.CalendarDataProvider=oi,e.CalendarRoot=bi,e.Component=Nr,e.ContentHook=po,e.CustomContentRenderContext=co,e.DateComponent=oo,e.DateEnv=Xn,e.DateProfileGenerator=Co,e.DayCellContent=ia,e.DayCellRoot=oa,e.DayGridView=ds,e.DayHeader=_i,e.DaySeriesModel=Pi,e.DayTable=us,e.DayTableModel=Ni,e.DayTableSlicer=cs,e.DayTimeCols=Fs,e.DayTimeColsSlicer=js,e.DayTimeColsView=Gs,e.DelayedRunner=Go,e.Draggable=Aa,e.ElementDragging=ci,e.ElementScrollController=_r,e.Emitter=kr,e.EventApi=zn,e.EventRoot=Qi,e.EventSourceApi=L,e.FeaturefulElementDragging=wa,e.Fragment=Ur,e.Interaction=ai,e.ListView=el,e.MountHook=ho,e.NamedTimeZoneImpl=ii,e.NowIndicatorRoot=na,e.NowTimer=Mi,e.PointerDragging=ga,e.PositionCache=Mr,e.RefMap=Li,e.RenderHook=uo,e.ScrollController=xr,e.ScrollResponder=Vr,e.Scroller=Ui,e.SimpleScrollGrid=$i,e.Slicer=Hi,e.Splitter=pr,e.StandardEvent=ea,e.Table=as,e.TableDateCell=Ri,e.TableDowCell=Ti,e.TableView=Va,e.Theme=Pr,e.ThirdPartyDraggable=La,e.TimeCols=Vs,e.TimeColsSlatsCoords=vs,e.TimeColsView=ws,e.ViewApi=On,e.ViewContextType=zr,e.ViewRoot=yo,e.WeekNumberRoot=ca,e.WindowScrollController=Ir,e.addDays=ve,e.addDurations=Xe,e.addMs=ge,e.addWeeks=he,e.allowContextMenu=oe,e.allowSelection=ne,e.applyMutationToEventStore=Pn,e.applyStyle=j,e.applyStyleProp=G,e.asCleanDays=function(e){return e.years||e.months||e.milliseconds?0:e.days},e.asRoughMinutes=function(e){return $e(e)/6e4},e.asRoughMs=$e,e.asRoughSeconds=function(e){return $e(e)/1e3},e.buildClassNameNormalizer=vo,e.buildDayRanges=Bs,e.buildDayTableModel=ps,e.buildEventApis=Bn,e.buildEventRangeKey=bn,e.buildHashFromArray=function(e,t){for(var n={},r=0;r<e.length;r++){var o=t(e[r],r);n[o[0]]=o[1]}return n},e.buildNavLinkData=gr,e.buildSegCompareObj=vn,e.buildSegTimeText=En,e.buildSlatMetas=bs,e.buildTimeColsModel=qs,e.collectFromHash=Fe,e.combineEventUis=Vt,e.compareByFieldSpec=se,e.compareByFieldSpecs=ae,e.compareNumbers=ce,e.compareObjs=Ve,e.computeEdges=br,e.computeFallbackHeaderFormat=Ci,e.computeHeightAndMargins=function(e){return e.getBoundingClientRect().height+function(e){var t=window.getComputedStyle(e);return parseInt(t.marginTop,10)+parseInt(t.marginBottom,10)}(e)},e.computeInnerRect=Cr,e.computeRect=wr,e.computeSegDraggable=gn,e.computeSegEndResizable=yn,e.computeSegStartResizable=mn,e.computeShrinkWidth=Wi,e.computeSmallestCellWidth=pe,e.computeVisibleDayRange=Jt,e.config=di,e.constrainPoint=sr,e.createContext=Lr,e.createDuration=Ye,e.createElement=Hr,e.createEmptyEventStore=Ht,e.createEventInstance=Ie,e.createEventUi=Wt,e.createFormatter=St,e.createPlugin=io,e.createRef=Ar,e.diffDates=Qt,e.diffDayAndTime=Ee,e.diffDays=ye,e.diffPoints=ur,e.diffWeeks=me,e.diffWholeDays=De,e.diffWholeWeeks=Se,e.disableCursor=Q,e.elementClosest=V,e.elementMatches=z,e.enableCursor=ee,e.eventTupleToStore=Pt,e.filterEventStoreDefs=At,e.filterHash=He,e.findDirectChildren=function(e,t){for(var n=e instanceof HTMLElement?[e]:e,r=[],o=0;o<n.length;o++)for(var i=n[o].children,a=0;a<i.length;a++){var s=i[a];t&&!z(s,t)||r.push(s)}return r},e.findElements=F,e.flexibleCompare=le,e.flushToDom=Wr,e.formatDate=function(e,t){void 0===t&&(t={});var n=tr(t),r=St(t),o=n.createMarkerMeta(e);return o?n.format(o.marker,r,{forcedTzo:o.forcedTzo}):""},e.formatDayString=tt,e.formatIsoTimeString=nt,e.formatRange=function(e,t,n){var r=tr("object"==typeof n&&n?n:{}),o=St(n),i=r.createMarkerMeta(e),a=r.createMarkerMeta(t);return i&&a?r.formatRange(i.marker,a.marker,o,{forcedStartTzo:i.forcedTzo,forcedEndTzo:a.forcedTzo,isEndExclusive:n.isEndExclusive,defaultSeparator:bt.defaultRangeSeparator}):""},e.getAllowYScrolling=zi,e.getCanVGrowWithinCell=cr,e.getClippingParents=Rr,e.getDateMeta=hr,e.getDayClassNames=vr,e.getDefaultEventEnd=In,e.getElSeg=dn,e.getEventClassNames=Dn,e.getIsRtlScrollbarOnLeft=Er,e.getRectCenter=lr,e.getRelevantEvents=Nt,e.getScrollGridClassNames=Yi,e.getScrollbarWidths=Sr,e.getSectionClassNames=Zi,e.getSectionHasLiquidHeight=Vi,e.getSegMeta=Sn,e.getSlotClassNames=function(e,t){var n=["fc-slot","fc-slot-"+fe[e.dow]];return e.isDisabled?n.push("fc-slot-disabled"):(e.isToday&&(n.push("fc-slot-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-slot-past"),e.isFuture&&n.push("fc-slot-future")),n},e.getStickyFooterScrollbar=Ji,e.getStickyHeaderDates=Ki,e.getUnequalProps=We,e.globalLocales=Kn,e.globalPlugins=Fo,e.greatestDurationDenominator=et,e.guid=$,e.hasBgRendering=un,e.hasShrinkWidth=qi,e.identity=_t,e.interactionSettingsStore=ui,e.interactionSettingsToStore=li,e.intersectRanges=nn,e.intersectRects=ar,e.isArraysEqual=ot,e.isColPropsEqual=Bi,e.isDateSpansEqual=Rn,e.isInt=de,e.isInteractionValid=Jr,e.isMultiDayRange=$t,e.isPropsEqual=Le,e.isPropsValid=Qr,e.isValidDate=xe,e.listenBySelector=Z,e.mapHash=Oe,e.memoize=it,e.memoizeArraylike=function(e,t,n){var r=[],o=[];return function(i){for(var a=r.length,s=i.length,l=0;l<a;l++)if(i[l]){if(!ot(r[l],i[l])){n&&n(o[l]);var u=e.apply(this,i[l]);t&&t(u,o[l])||(o[l]=u)}}else n&&n(o[l]);for(;l<s;l++)o[l]=e.apply(this,i[l]);return r=i,o.splice(s),o}},e.memoizeHashlike=function(e,t,n){var r={},o={};return function(i){var a={};for(var s in i)if(o[s])if(ot(r[s],i[s]))a[s]=o[s];else{n&&n(o[s]);var l=e.apply(this,i[s]);a[s]=t&&t(l,o[s])?o[s]:l}else a[s]=e.apply(this,i[s]);return r=i,o=a,a}},e.memoizeObjArg=at,e.mergeEventStores=Ot,e.multiplyDuration=Ke,e.padStart=ue,e.parseBusinessHours=or,e.parseClassNames=Ut,e.parseDragMeta=fi,e.parseEventDef=Xt,e.parseFieldSpecs=ie,e.parseMarker=Zn,e.pointInsideRect=ir,e.preventContextMenu=re,e.preventDefault=q,e.preventSelection=te,e.rangeContainsMarker=sn,e.rangeContainsRange=an,e.rangesEqual=rn,e.rangesIntersect=on,e.refineEventDef=Yt,e.refineProps=xt,e.removeElement=W,e.removeExact=function(e,t){for(var n=0,r=0;r<e.length;)e[r]===t?(e.splice(r,1),n++):r++;return n},e.render=Or,e.renderChunkContent=Fi,e.renderFill=sa,e.renderMicroColGroup=ji,e.renderScrollShim=Xi,e.requestJson=Wo,e.sanitizeShrinkWidth=Gi,e.setElSeg=cn,e.setRef=Yr,e.sliceEventStore=ln,e.sliceEvents=function(e,t){return ln(e.eventStore,e.eventUiBases,e.dateProfile.activeRange,t?e.nextDayThreshold:null).fg},e.sortEventSegs=hn,e.startOfDay=be,e.translateRect=function(e,t,n){return{left:e.left+t,right:e.right+t,top:e.top+n,bottom:e.bottom+n}},e.triggerDateSelect=xn,e.unpromisify=Tr,e.version="5.3.1",e.whenTransitionDone=K,e.wholeDivideDurations=Qe,e}({});
assets/vendor/fullcalendar/locales-all.min.js ADDED
@@ -0,0 +1 @@
 
1
+ [].push.apply(FullCalendar.globalLocales,function(){"use strict";return[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Heeldag",moreLinkText:"Addisionele",noEventsText:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekText:"Həftə",allDayText:"Bütün Gün",moreLinkText:function(e){return"+ daha çox "+e},noEventsText:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",moreLinkText:function(e){return"+още "+e},noEventsText:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekText:"Sed",allDayText:"Cijeli dan",moreLinkText:function(e){return"+ još "+e},noEventsText:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekText:"Set",allDayText:"Tot el dia",moreLinkText:"més",noEventsText:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekText:"Týd",allDayText:"Celý den",moreLinkText:function(e){return"+další: "+e},noEventsText:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekText:"Uge",allDayText:"Hele dagen",moreLinkText:"flere",noEventsText:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekText:"KW",allDayText:"Ganztägig",moreLinkText:function(e){return"+ weitere "+e},noEventsText:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekText:"Εβδ",allDayText:"Ολοήμερο",moreLinkText:"περισσότερα",noEventsText:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekText:"Sm",allDayText:"Todo el día",moreLinkText:"más",noEventsText:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekText:"Sm",allDayText:"Todo el día",moreLinkText:"más",noEventsText:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekText:"näd",allDayText:"Kogu päev",moreLinkText:function(e){return"+ veel "+e},noEventsText:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekText:"As",allDayText:"Egun osoa",moreLinkText:"gehiago",noEventsText:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekText:"هف",allDayText:"تمام روز",moreLinkText:function(e){return"بیش از "+e},noEventsText:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekText:"Vk",allDayText:"Koko päivä",moreLinkText:"lisää",noEventsText:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sem.",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sm",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekText:"Sem.",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekText:"Sm",allDayText:"Todo o día",moreLinkText:"máis",noEventsText:"Non hai eventos para amosar"},{code:"he",direction:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",moreLinkText:"אחר",noEventsText:"אין אירועים להצגה",weekText:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekText:"हफ्ता",allDayText:"सभी दिन",moreLinkText:function(e){return"+अधिक "+e},noEventsText:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekText:"Tje",allDayText:"Cijeli dan",moreLinkText:function(e){return"+ još "+e},noEventsText:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekText:"Hét",allDayText:"Egész nap",moreLinkText:"további",noEventsText:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sehari penuh",moreLinkText:"lebih",noEventsText:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekText:"Vika",allDayText:"Allan daginn",moreLinkText:"meira",noEventsText:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekText:"Sm",allDayText:"Tutto il giorno",moreLinkText:function(e){return"+altri "+e},noEventsText:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekText:"週",allDayText:"終日",moreLinkText:function(e){return"他 "+e+" 件"},noEventsText:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekText:"კვ",allDayText:"მთელი დღე",moreLinkText:function(e){return"+ კიდევ "+e},noEventsText:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekText:"Не",allDayText:"Күні бойы",moreLinkText:function(e){return"+ тағы "+e},noEventsText:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekText:"주",allDayText:"종일",moreLinkText:"개",noEventsText:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekText:"W",allDayText:"Ganzen Dag",moreLinkText:"méi",noEventsText:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekText:"SAV",allDayText:"Visą dieną",moreLinkText:"daugiau",noEventsText:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekText:"Ned.",allDayText:"Visu dienu",moreLinkText:function(e){return"+vēl "+e},noEventsText:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekText:"Сед",allDayText:"Цел ден",moreLinkText:function(e){return"+повеќе "+e},noEventsText:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sepanjang hari",moreLinkText:function(e){return"masih ada "+e+" acara"},noEventsText:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekText:"Uke",allDayText:"Hele dagen",moreLinkText:"til",noEventsText:"Ingen hendelser å vise"},{code:"ne",week:{dow:7,doy:1},buttonText:{prev:"अघिल्लो",next:"अर्को",today:"आज",month:"महिना",week:"हप्ता",day:"दिन",list:"सूची"},weekText:"हप्ता",allDayText:"दिनभरि",moreLinkText:"थप लिंक",noEventsText:"देखाउनको लागि कुनै घटनाहरू छैनन्"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",moreLinkText:"extra",noEventsText:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekText:"Veke",allDayText:"Heile dagen",moreLinkText:"til",noEventsText:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekText:"Tydz",allDayText:"Cały dzień",moreLinkText:"więcej",noEventsText:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekText:"Sm",allDayText:"dia inteiro",moreLinkText:function(e){return"mais +"+e},noEventsText:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekText:"Sem",allDayText:"Todo o dia",moreLinkText:"mais",noEventsText:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekText:"Săpt",allDayText:"Toată ziua",moreLinkText:function(e){return"+alte "+e},noEventsText:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekText:"Нед",allDayText:"Весь день",moreLinkText:function(e){return"+ ещё "+e},noEventsText:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekText:"Ty",allDayText:"Celý deň",moreLinkText:function(e){return"+ďalšie: "+e},noEventsText:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekText:"Teden",allDayText:"Ves dan",moreLinkText:"več",noEventsText:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekText:"Ja",allDayText:"Gjithë ditën",moreLinkText:function(e){return"+më tepër "+e},noEventsText:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekText:"Сед",allDayText:"Цео дан",moreLinkText:function(e){return"+ још "+e},noEventsText:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekText:"Sed",allDayText:"Cеo dan",moreLinkText:function(e){return"+ još "+e},noEventsText:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekText:"v.",allDayText:"Heldag",moreLinkText:"till",noEventsText:"Inga händelser att visa"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekText:"สัปดาห์",allDayText:"ตลอดวัน",moreLinkText:"เพิ่มเติม",noEventsText:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekText:"Hf",allDayText:"Tüm gün",moreLinkText:"daha fazla",noEventsText:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekText:"Тиж",allDayText:"Увесь день",moreLinkText:function(e){return"+ще "+e+"..."},noEventsText:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",moreLinkText:function(e){return"+ yana "+e},noEventsText:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekText:"Tu",allDayText:"Cả ngày",moreLinkText:function(e){return"+ thêm "+e},noEventsText:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekText:"周",allDayText:"全天",moreLinkText:function(e){return"另外 "+e+" 个"},noEventsText:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekText:"周",allDayText:"整天",moreLinkText:"顯示更多",noEventsText:"没有任何活動"}]}());
base.php CHANGED
@@ -132,6 +132,7 @@ class Base {
132
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/foreground.php' );
133
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/select2.php' );
134
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/widget-list.php' );
 
135
 
136
  $Foreground = __NAMESPACE__ . '\Controls\Group_Control_Foreground';
137
  $controls_Manager->add_group_control( $Foreground::get_type(), new $Foreground() );
@@ -141,5 +142,8 @@ class Base {
141
 
142
  $Widget_List = __NAMESPACE__ . '\Controls\Widget_List';
143
  ha_elementor()->controls_manager->register_control( $Widget_List::TYPE, new $Widget_List() );
 
 
 
144
  }
145
  }
132
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/foreground.php' );
133
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/select2.php' );
134
  include_once( HAPPY_ADDONS_DIR_PATH . 'controls/widget-list.php' );
135
+ include_once( HAPPY_ADDONS_DIR_PATH . 'controls/text-stroke.php' );
136
 
137
  $Foreground = __NAMESPACE__ . '\Controls\Group_Control_Foreground';
138
  $controls_Manager->add_group_control( $Foreground::get_type(), new $Foreground() );
142
 
143
  $Widget_List = __NAMESPACE__ . '\Controls\Widget_List';
144
  ha_elementor()->controls_manager->register_control( $Widget_List::TYPE, new $Widget_List() );
145
+
146
+ $Text_Stroke = __NAMESPACE__ . '\Controls\Group_Control_Text_Stroke';
147
+ $controls_Manager->add_group_control( $Text_Stroke::get_type(), new $Text_Stroke() );
148
  }
149
  }
changelog.txt CHANGED
@@ -1,11 +1,25 @@
1
- = 2.19.0 - 20 January 2020 =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  - New: Features control panel
4
  - New: Section Shape Divider - 18 custom shapes (Happy Shapes)
5
  - Tweak: Improved elementor missing notice
6
  - Fix: Misc css bug resolved
7
 
8
- = 2.18.0 - 5 January 2020 =
9
 
10
  - New: Tabs are sortable in Post Tab widget
11
  - Tweak: Added Post tab widget tab hover cursor
1
+ = 2.20.0 - 18 February 2021 =
2
+
3
+ - New: Text stroke feature
4
+ - New: Event Calendar widget
5
+ - New: Happy particle effects disable option
6
+ - Tweak: Updated kses function to support more attributes
7
+ - Tweak: Added html tag support in Data Table widget
8
+ - Tweak: Added slider widget dots size control
9
+ - Tweak: Added carousel widget dots size control
10
+ - Fix: Shape divider spell
11
+ - Fix: Chart widgets console error
12
+ - Fix: Widget background overlay class mismatch issue
13
+ - Fix: Data Table widget compatibility issue with WPML
14
+
15
+ = 2.19.0 - 20 January 2021 =
16
 
17
  - New: Features control panel
18
  - New: Section Shape Divider - 18 custom shapes (Happy Shapes)
19
  - Tweak: Improved elementor missing notice
20
  - Fix: Misc css bug resolved
21
 
22
+ = 2.18.0 - 5 January 2021 =
23
 
24
  - New: Tabs are sortable in Post Tab widget
25
  - Tweak: Added Post tab widget tab hover cursor
classes/assets-manager.php CHANGED
@@ -214,6 +214,32 @@ class Assets_Manager {
214
  true
215
  );
216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  // Hover css
218
  wp_register_style(
219
  'hover-css',
214
  true
215
  );
216
 
217
+ // fullcalendar js
218
+ wp_register_script(
219
+ 'ha-fullcalendar',
220
+ HAPPY_ADDONS_ASSETS . 'vendor/fullcalendar/fullcalendar.min.js',
221
+ ['jquery'],
222
+ HAPPY_ADDONS_VERSION,
223
+ true
224
+ );
225
+
226
+ // fullcalendar language js
227
+ wp_register_script(
228
+ 'ha-fullcalendar-locales',
229
+ HAPPY_ADDONS_ASSETS . 'vendor/fullcalendar/locales-all.min.js',
230
+ ['jquery'],
231
+ HAPPY_ADDONS_VERSION,
232
+ true
233
+ );
234
+
235
+ // fullcalendar css
236
+ wp_register_style(
237
+ 'ha-fullcalendar',
238
+ HAPPY_ADDONS_ASSETS . 'vendor/fullcalendar/fullcalendar.min.css',
239
+ null,
240
+ HAPPY_ADDONS_VERSION
241
+ );
242
+
243
  // Hover css
244
  wp_register_style(
245
  'hover-css',
classes/extensions-manager.php CHANGED
@@ -69,6 +69,11 @@ class Extensions_Manager {
69
  'title' => __( 'Image Masking', 'happy-elementor-addons' ),
70
  'icon' => 'hm hm-image-masking',
71
  'is_pro' => true,
 
 
 
 
 
72
  ]
73
  ];
74
  }
@@ -148,6 +153,10 @@ class Extensions_Manager {
148
  case 'image-masking':
149
  add_filter( 'happyaddons/extensions/image_masking', '__return_false' );
150
  break;
 
 
 
 
151
  }
152
  }
153
  }
69
  'title' => __( 'Image Masking', 'happy-elementor-addons' ),
70
  'icon' => 'hm hm-image-masking',
71
  'is_pro' => true,
72
+ ],
73
+ 'happy-particle-effects' => [
74
+ 'title' => __( 'Happy Particle Effects', 'happy-elementor-addons' ),
75
+ 'icon' => 'hm hm-spark',
76
+ 'is_pro' => true,
77
  ]
78
  ];
79
  }
153
  case 'image-masking':
154
  add_filter( 'happyaddons/extensions/image_masking', '__return_false' );
155
  break;
156
+
157
+ case 'happy-particle-effects':
158
+ add_filter( 'happyaddons/extensions/happy_particle_effects', '__return_false' );
159
+ break;
160
  }
161
  }
162
  }
classes/finder-edit.php CHANGED
@@ -1,169 +1,169 @@
1
- <?php
2
- /**
3
- * Finder tools class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor;
8
-
9
- use Elementor\Core\Base\Document;
10
- use Elementor\Core\Common\Modules\Finder\Base_Category as Finder_Category;
11
- use Elementor\TemplateLibrary\Source_Local;
12
- use Happy_Addons\Elementor\Clone_Handler as Cloner;
13
-
14
- defined( 'ABSPATH' ) || die();
15
-
16
- class Finder_Edit extends Finder_Category {
17
-
18
- const SLUG = 'edit';
19
-
20
- /**
21
- * Get title.
22
- *
23
- * @access public
24
- *
25
- * @return string
26
- */
27
- public function get_title() {
28
- return __( 'Edit + Happy Clone', 'happy-elementor-addons' );
29
- }
30
-
31
- /**
32
- * Set category as dynamic
33
- *
34
- * @return bool
35
- */
36
- public function is_dynamic() {
37
- return true;
38
- }
39
-
40
- /**
41
- * Get category items.
42
- *
43
- * @access public
44
- *
45
- * @param array $options
46
- *
47
- * @return array
48
- */
49
- public function get_category_items( array $options = [] ) {
50
- $post_types = get_post_types( [
51
- 'exclude_from_search' => false,
52
- ] );
53
-
54
- $post_types[] = Source_Local::CPT;
55
-
56
- $document_types = ha_elementor()->documents->get_document_types( [
57
- 'is_editable' => true,
58
- ] );
59
-
60
- $query_args = [
61
- 'post_type' => $post_types,
62
- 'post_status' => [ 'publish', 'draft', 'private', 'pending', 'future' ],
63
- 'posts_per_page' => '10',
64
- 'meta_query' => [
65
- [
66
- 'key' => '_elementor_edit_mode',
67
- 'value' => 'builder',
68
- ],
69
- [
70
- 'relation' => 'or',
71
- [
72
- 'key' => Document::TYPE_META_KEY,
73
- 'compare' => 'NOT EXISTS',
74
- ],
75
- [
76
- 'key' => Document::TYPE_META_KEY,
77
- 'value' => array_keys( $document_types ),
78
- ],
79
- ],
80
- ],
81
- 'orderby' => 'modified',
82
- 's' => $options['filter'],
83
- ];
84
-
85
-
86
- if ( Cloner::can_clone() ) {
87
- $editor_post_id = isset( $options['editor_post_id'] ) ? $options['editor_post_id'] : 0;
88
- $editor_document = ha_elementor()->documents->get( $editor_post_id );
89
- $items = [];
90
-
91
- $ref = 'list';
92
-
93
- if ( $editor_document ) {
94
- $description = $editor_document->get_title();
95
- $icon = 'document-file';
96
- $ref = 'editor';
97
-
98
- if ( $editor_document->get_post()->post_type === Source_Local::CPT ) {
99
- $description = __( 'Template', 'happy-elementor-addons' ) . ' / ' . $description;
100
- $icon = 'post-title';
101
- }
102
-
103
- $url = Cloner::get_url( $editor_document->get_id(), $ref );
104
- $items[] = [
105
- 'icon' => $icon,
106
- 'title' => __( 'Clone / Duplicate This', 'happy-elementor-addons' ),
107
- 'description' => $description,
108
- 'url' => $url,
109
- 'actions' => [
110
- [
111
- 'name' => 'clone',
112
- 'url' => $url,
113
- 'icon' => 'clone',
114
- ]
115
- ]
116
- ];
117
- }
118
- }
119
-
120
-
121
- $posts_query = new \WP_Query( $query_args );
122
-
123
- foreach ( $posts_query->posts as $post ) {
124
- $document = ha_elementor()->documents->get( $post->ID );
125
-
126
- if ( ! $document ) {
127
- continue;
128
- }
129
-
130
- $is_template = Source_Local::CPT === $post->post_type;
131
-
132
- $description = $document->get_title();
133
-
134
- $icon = 'document-file';
135
-
136
- if ( $is_template ) {
137
- $description = __( 'Template', 'happy-elementor-addons' ) . ' / ' . $description;
138
-
139
- $icon = 'post-title';
140
- }
141
-
142
- $actions = [
143
- [
144
- 'name' => 'view',
145
- 'url' => $document->get_permalink(),
146
- 'icon' => 'eye',
147
- ],
148
- ];
149
-
150
- if ( Cloner::can_clone() ) {
151
- $actions[] = [
152
- 'name' => 'clone',
153
- 'url' => Cloner::get_url( $document->get_id(), $ref ),
154
- 'icon' => 'clone',
155
- ];
156
- }
157
-
158
- $items[] = [
159
- 'icon' => $icon,
160
- 'title' => $post->post_title,
161
- 'description' => $description,
162
- 'url' => $document->get_edit_url(),
163
- 'actions' => $actions,
164
- ];
165
- }
166
-
167
- return $items;
168
- }
169
- }
1
+ <?php
2
+ /**
3
+ * Finder tools class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor;
8
+
9
+ use Elementor\Core\Base\Document;
10
+ use Elementor\Core\Common\Modules\Finder\Base_Category as Finder_Category;
11
+ use Elementor\TemplateLibrary\Source_Local;
12
+ use Happy_Addons\Elementor\Clone_Handler as Cloner;
13
+
14
+ defined( 'ABSPATH' ) || die();
15
+
16
+ class Finder_Edit extends Finder_Category {
17
+
18
+ const SLUG = 'edit';
19
+
20
+ /**
21
+ * Get title.
22
+ *
23
+ * @access public
24
+ *
25
+ * @return string
26
+ */
27
+ public function get_title() {
28
+ return __( 'Edit + Happy Clone', 'happy-elementor-addons' );
29
+ }
30
+
31
+ /**
32
+ * Set category as dynamic
33
+ *
34
+ * @return bool
35
+ */
36
+ public function is_dynamic() {
37
+ return true;
38
+ }
39
+
40
+ /**
41
+ * Get category items.
42
+ *
43
+ * @access public
44
+ *
45
+ * @param array $options
46
+ *
47
+ * @return array
48
+ */
49
+ public function get_category_items( array $options = [] ) {
50
+ $post_types = get_post_types( [
51
+ 'exclude_from_search' => false,
52
+ ] );
53
+
54
+ $post_types[] = Source_Local::CPT;
55
+
56
+ $document_types = ha_elementor()->documents->get_document_types( [
57
+ 'is_editable' => true,
58
+ ] );
59
+
60
+ $query_args = [
61
+ 'post_type' => $post_types,
62
+ 'post_status' => [ 'publish', 'draft', 'private', 'pending', 'future' ],
63
+ 'posts_per_page' => '10',
64
+ 'meta_query' => [
65
+ [
66
+ 'key' => '_elementor_edit_mode',
67
+ 'value' => 'builder',
68
+ ],
69
+ [
70
+ 'relation' => 'or',
71
+ [
72
+ 'key' => Document::TYPE_META_KEY,
73
+ 'compare' => 'NOT EXISTS',
74
+ ],
75
+ [
76
+ 'key' => Document::TYPE_META_KEY,
77
+ 'value' => array_keys( $document_types ),
78
+ ],
79
+ ],
80
+ ],
81
+ 'orderby' => 'modified',
82
+ 's' => $options['filter'],
83
+ ];
84
+
85
+
86
+ if ( Cloner::can_clone() ) {
87
+ $editor_post_id = isset( $options['editor_post_id'] ) ? $options['editor_post_id'] : 0;
88
+ $editor_document = ha_elementor()->documents->get( $editor_post_id );
89
+ $items = [];
90
+
91
+ $ref = 'list';
92
+
93
+ if ( $editor_document ) {
94
+ $description = $editor_document->get_title();
95
+ $icon = 'document-file';
96
+ $ref = 'editor';
97
+
98
+ if ( $editor_document->get_post()->post_type === Source_Local::CPT ) {
99
+ $description = __( 'Template', 'happy-elementor-addons' ) . ' / ' . $description;
100
+ $icon = 'post-title';
101
+ }
102
+
103
+ $url = Cloner::get_url( $editor_document->get_id(), $ref );
104
+ $items[] = [
105
+ 'icon' => $icon,
106
+ 'title' => __( 'Clone / Duplicate This', 'happy-elementor-addons' ),
107
+ 'description' => $description,
108
+ 'url' => $url,
109
+ 'actions' => [
110
+ [
111
+ 'name' => 'clone',
112
+ 'url' => $url,
113
+ 'icon' => 'clone',
114
+ ]
115
+ ]
116
+ ];
117
+ }
118
+ }
119
+
120
+
121
+ $posts_query = new \WP_Query( $query_args );
122
+
123
+ foreach ( $posts_query->posts as $post ) {
124
+ $document = ha_elementor()->documents->get( $post->ID );
125
+
126
+ if ( ! $document ) {
127
+ continue;
128
+ }
129
+
130
+ $is_template = Source_Local::CPT === $post->post_type;
131
+
132
+ $description = $document->get_title();
133
+
134
+ $icon = 'document-file';
135
+
136
+ if ( $is_template ) {
137
+ $description = __( 'Template', 'happy-elementor-addons' ) . ' / ' . $description;
138
+
139
+ $icon = 'post-title';
140
+ }
141
+
142
+ $actions = [
143
+ [
144
+ 'name' => 'view',
145
+ 'url' => $document->get_permalink(),
146
+ 'icon' => 'eye',
147
+ ],
148
+ ];
149
+
150
+ if ( Cloner::can_clone() ) {
151
+ $actions[] = [
152
+ 'name' => 'clone',
153
+ 'url' => Cloner::get_url( $document->get_id(), $ref ),
154
+ 'icon' => 'clone',
155
+ ];
156
+ }
157
+
158
+ $items[] = [
159
+ 'icon' => $icon,
160
+ 'title' => $post->post_title,
161
+ 'description' => $description,
162
+ 'url' => $document->get_edit_url(),
163
+ 'actions' => $actions,
164
+ ];
165
+ }
166
+
167
+ return $items;
168
+ }
169
+ }
classes/widgets-manager.php CHANGED
@@ -589,6 +589,16 @@ class Widgets_Manager {
589
  'js' => ['sharer-js'],
590
  ]
591
  ],
 
 
 
 
 
 
 
 
 
 
592
  ];
593
  }
594
 
589
  'js' => ['sharer-js'],
590
  ]
591
  ],
592
+ 'event-calendar' => [
593
+ 'title' => __( 'Event Calendar', 'happy-elementor-addons' ),
594
+ 'icon' => 'hm hm-calendar2',
595
+ 'css' => ['event-calendar'],
596
+ 'js' => [],
597
+ 'vendor' => [
598
+ 'css' => ['ha-fullcalendar'],
599
+ 'js' => ['ha-fullcalendar','ha-fullcalendar-locales'],
600
+ ],
601
+ ],
602
  ];
603
  }
604
 
classes/wpml-manager.php CHANGED
@@ -43,6 +43,8 @@ class WPML_Manager {
43
  include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/skills.php' );
44
  include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/slider.php' );
45
  include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/social-icons.php' );
 
 
46
  }
47
 
48
  public static function add_widgets_to_translate( $widgets ) {
@@ -65,7 +67,9 @@ class WPML_Manager {
65
  'editor_type' => 'LINE',
66
  ],
67
  ],
68
- 'integration-class' => __NAMESPACE__ . '\\WPML_Bar_Chart',
 
 
69
  ],
70
 
71
  /**
@@ -106,7 +110,9 @@ class WPML_Manager {
106
  */
107
  'carousel' => [
108
  'fields' => [],
109
- 'integration-class' => __NAMESPACE__ . '\\WPML_Carousel',
 
 
110
  ],
111
 
112
  /**
@@ -253,7 +259,9 @@ class WPML_Manager {
253
  'editor_type' => 'LINE',
254
  ],
255
  ],
256
- 'integration-class' => __NAMESPACE__ . '\\WPML_Image_Grid',
 
 
257
  ],
258
 
259
  /**
@@ -295,7 +303,9 @@ class WPML_Manager {
295
  'editor_type' => 'LINE',
296
  ],
297
  ],
298
- 'integration-class' => __NAMESPACE__ . '\\WPML_Justified_Gallery',
 
 
299
  ],
300
 
301
  /**
@@ -303,7 +313,9 @@ class WPML_Manager {
303
  */
304
  'logo-grid' => [
305
  'fields' => [],
306
- 'integration-class' => __NAMESPACE__ . '\\WPML_Logo_Grid',
 
 
307
  ],
308
 
309
  /**
@@ -396,7 +408,9 @@ class WPML_Manager {
396
  'editor_type' => 'LINE',
397
  ],
398
  ],
399
- 'integration-class' => __NAMESPACE__ . '\\WPML_Pricing_Table',
 
 
400
  ],
401
 
402
  /**
@@ -427,7 +441,9 @@ class WPML_Manager {
427
  */
428
  'skills' => [
429
  'fields' => [],
430
- 'integration-class' => __NAMESPACE__ . '\\WPML_Skills',
 
 
431
  ],
432
 
433
  /**
@@ -435,7 +451,9 @@ class WPML_Manager {
435
  */
436
  'slider' => [
437
  'fields' => [],
438
- 'integration-class' => __NAMESPACE__ . '\\WPML_Slider',
 
 
439
  ],
440
 
441
  /**
@@ -443,7 +461,9 @@ class WPML_Manager {
443
  */
444
  'social-icons' => [
445
  'fields' => [],
446
- 'integration-class' => __NAMESPACE__ . '\\WPML_Social_Icons',
 
 
447
  ],
448
 
449
  /**
@@ -514,6 +534,27 @@ class WPML_Manager {
514
  ],
515
  ],
516
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
517
  ];
518
 
519
  foreach ( $widgets_map as $key => $data ) {
43
  include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/skills.php' );
44
  include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/slider.php' );
45
  include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/social-icons.php' );
46
+ include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/data-table.php' );
47
+ include_once( HAPPY_ADDONS_DIR_PATH . 'wpml/horizontal-timeline.php' );
48
  }
49
 
50
  public static function add_widgets_to_translate( $widgets ) {
67
  'editor_type' => 'LINE',
68
  ],
69
  ],
70
+ 'integration-class' => [
71
+ __NAMESPACE__ . '\\WPML_Bar_Chart',
72
+ ]
73
  ],
74
 
75
  /**
110
  */
111
  'carousel' => [
112
  'fields' => [],
113
+ 'integration-class' => [
114
+ __NAMESPACE__ . '\\WPML_Carousel',
115
+ ]
116
  ],
117
 
118
  /**
259
  'editor_type' => 'LINE',
260
  ],
261
  ],
262
+ 'integration-class' => [
263
+ __NAMESPACE__ . '\\WPML_Image_Grid',
264
+ ]
265
  ],
266
 
267
  /**
303
  'editor_type' => 'LINE',
304
  ],
305
  ],
306
+ 'integration-class' => [
307
+ __NAMESPACE__ . '\\WPML_Justified_Gallery',
308
+ ]
309
  ],
310
 
311
  /**
313
  */
314
  'logo-grid' => [
315
  'fields' => [],
316
+ 'integration-class' => [
317
+ __NAMESPACE__ . '\\WPML_Logo_Grid',
318
+ ]
319
  ],
320
 
321
  /**
408
  'editor_type' => 'LINE',
409
  ],
410
  ],
411
+ 'integration-class' => [
412
+ __NAMESPACE__ . '\\WPML_Pricing_Table',
413
+ ]
414
  ],
415
 
416
  /**
441
  */
442
  'skills' => [
443
  'fields' => [],
444
+ 'integration-class' => [
445
+ __NAMESPACE__ . '\\WPML_Skills',
446
+ ]
447
  ],
448
 
449
  /**
451
  */
452
  'slider' => [
453
  'fields' => [],
454
+ 'integration-class' => [
455
+ __NAMESPACE__ . '\\WPML_Slider',
456
+ ]
457
  ],
458
 
459
  /**
461
  */
462
  'social-icons' => [
463
  'fields' => [],
464
+ 'integration-class' => [
465
+ __NAMESPACE__ . '\\WPML_Social_Icons',
466
+ ]
467
  ],
468
 
469
  /**
534
  ],
535
  ],
536
  ],
537
+
538
+ /**
539
+ * Data table
540
+ */
541
+ 'data-table' => [
542
+ 'fields' => [],
543
+ 'integration-class' => [
544
+ __NAMESPACE__ . '\\WPML_Data_Table_Column_Data',
545
+ __NAMESPACE__ . '\\WPML_Data_Table_Row_Data',
546
+ ]
547
+ ],
548
+
549
+ /**
550
+ * Horizontal Timeline
551
+ */
552
+ 'horizontal-timeline' => [
553
+ 'fields' => [],
554
+ 'integration-class' => [
555
+ __NAMESPACE__ . '\\WPML_Horizontal_Timeline',
556
+ ]
557
+ ],
558
  ];
559
 
560
  foreach ( $widgets_map as $key => $data ) {
controls/foreground.php CHANGED
@@ -1,252 +1,252 @@
1
- <?php
2
- /**
3
- * Foreground control class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Controls;
8
-
9
- use Elementor\Group_Control_Base;
10
- use Elementor\Controls_Manager;
11
-
12
- defined( 'ABSPATH' ) || die();
13
-
14
- class Group_Control_Foreground extends Group_Control_Base {
15
-
16
- /**
17
- * Fields.
18
- *
19
- * Holds all the background control fields.
20
- *
21
- * @access protected
22
- * @static
23
- *
24
- * @var array Background control fields.
25
- */
26
- protected static $fields;
27
-
28
- /**
29
- * Get background control type.
30
- *
31
- * Retrieve the control type, in this case `ha_text_color`.
32
- *
33
- * @since 1.0.0
34
- * @access public
35
- * @static
36
- *
37
- * @return string Control type.
38
- */
39
- public static function get_type() {
40
- return 'foreground';
41
- }
42
-
43
- /**
44
- * Init fields.
45
- *
46
- * Initialize background control fields.
47
- *
48
- * @since 1.2.2
49
- * @access public
50
- *
51
- * @return array Control fields.
52
- */
53
- public function init_fields() {
54
- $fields = [];
55
-
56
- $fields['color_type'] = [
57
- 'label' => _x( 'Text Color', 'Background Control', 'happy-elementor-addons' ),
58
- 'type' => Controls_Manager::CHOOSE,
59
- 'label_block' => false,
60
- 'render_type' => 'ui',
61
- 'options' => [
62
- 'classic' => [
63
- 'title' => _x( 'Classic', 'Text Color Control', 'happy-elementor-addons' ),
64
- 'icon' => 'fa fa-paint-brush',
65
- ],
66
- 'gradient' => [
67
- 'title' => _x( 'Gradient', 'Text Color Control', 'happy-elementor-addons' ),
68
- 'icon' => 'fa fa-barcode',
69
- ],
70
- ],
71
- 'default' => 'classic'
72
- ];
73
-
74
- $fields['color'] = [
75
- 'label' => _x( 'Color', 'Background Control', 'happy-elementor-addons' ),
76
- 'type' => Controls_Manager::COLOR,
77
- 'default' => '',
78
- 'title' => _x( 'Text Color', 'Background Control', 'happy-elementor-addons' ),
79
- 'selectors' => [
80
- '{{SELECTOR}}' => 'color: {{VALUE}};',
81
- ],
82
- 'condition' => [
83
- 'color_type' => [ 'classic', 'gradient' ],
84
- ],
85
- ];
86
-
87
- $fields['color_stop'] = [
88
- 'label' => _x( 'Location', 'Background Control', 'happy-elementor-addons' ),
89
- 'type' => Controls_Manager::SLIDER,
90
- 'size_units' => [ '%' ],
91
- 'default' => [
92
- 'unit' => '%',
93
- 'size' => 0,
94
- ],
95
- 'render_type' => 'ui',
96
- 'condition' => [
97
- 'color_type' => [ 'gradient' ],
98
- ],
99
- 'of_type' => 'gradient',
100
- ];
101
-
102
- $fields['color_b'] = [
103
- 'label' => _x( 'Second Color', 'Background Control', 'happy-elementor-addons' ),
104
- 'type' => Controls_Manager::COLOR,
105
- 'default' => '#f2295b',
106
- 'render_type' => 'ui',
107
- 'condition' => [
108
- 'color_type' => [ 'gradient' ],
109
- ],
110
- 'of_type' => 'gradient',
111
- ];
112
-
113
- $fields['color_b_stop'] = [
114
- 'label' => _x( 'Location', 'Background Control', 'happy-elementor-addons' ),
115
- 'type' => Controls_Manager::SLIDER,
116
- 'size_units' => [ '%' ],
117
- 'default' => [
118
- 'unit' => '%',
119
- 'size' => 100,
120
- ],
121
- 'render_type' => 'ui',
122
- 'condition' => [
123
- 'color_type' => [ 'gradient' ],
124
- ],
125
- 'of_type' => 'gradient',
126
- ];
127
-
128
- $fields['gradient_type'] = [
129
- 'label' => _x( 'Type', 'Background Control', 'happy-elementor-addons' ),
130
- 'type' => Controls_Manager::SELECT,
131
- 'options' => [
132
- 'linear' => _x( 'Linear', 'Background Control', 'happy-elementor-addons' ),
133
- 'radial' => _x( 'Radial', 'Background Control', 'happy-elementor-addons' ),
134
- ],
135
- 'default' => 'linear',
136
- 'render_type' => 'ui',
137
- 'condition' => [
138
- 'color_type' => [ 'gradient' ],
139
- ],
140
- 'of_type' => 'gradient',
141
- ];
142
-
143
- $fields['gradient_angle'] = [
144
- 'label' => _x( 'Angle', 'Background Control', 'happy-elementor-addons' ),
145
- 'type' => Controls_Manager::SLIDER,
146
- 'size_units' => [ 'deg' ],
147
- 'default' => [
148
- 'unit' => 'deg',
149
- 'size' => 180,
150
- ],
151
- 'range' => [
152
- 'deg' => [
153
- 'step' => 10,
154
- ],
155
- ],
156
- 'selectors' => [
157
- '{{SELECTOR}}' => '-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-color: transparent; background-image: linear-gradient({{SIZE}}{{UNIT}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})',
158
- ],
159
- 'condition' => [
160
- 'color_type' => [ 'gradient' ],
161
- 'gradient_type' => 'linear',
162
- ],
163
- 'of_type' => 'gradient',
164
- ];
165
-
166
- $fields['gradient_position'] = [
167
- 'label' => _x( 'Position', 'Background Control', 'happy-elementor-addons' ),
168
- 'type' => Controls_Manager::SELECT,
169
- 'options' => [
170
- 'center center' => _x( 'Center Center', 'Background Control', 'happy-elementor-addons' ),
171
- 'center left' => _x( 'Center Left', 'Background Control', 'happy-elementor-addons' ),
172
- 'center right' => _x( 'Center Right', 'Background Control', 'happy-elementor-addons' ),
173
- 'top center' => _x( 'Top Center', 'Background Control', 'happy-elementor-addons' ),
174
- 'top left' => _x( 'Top Left', 'Background Control', 'happy-elementor-addons' ),
175
- 'top right' => _x( 'Top Right', 'Background Control', 'happy-elementor-addons' ),
176
- 'bottom center' => _x( 'Bottom Center', 'Background Control', 'happy-elementor-addons' ),
177
- 'bottom left' => _x( 'Bottom Left', 'Background Control', 'happy-elementor-addons' ),
178
- 'bottom right' => _x( 'Bottom Right', 'Background Control', 'happy-elementor-addons' ),
179
- ],
180
- 'default' => 'center center',
181
- 'selectors' => [
182
- '{{SELECTOR}}' => '-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-color: transparent; background-image: radial-gradient(at {{VALUE}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})',
183
- ],
184
- 'condition' => [
185
- 'color_type' => [ 'gradient' ],
186
- 'gradient_type' => 'radial',
187
- ],
188
- 'of_type' => 'gradient',
189
- ];
190
-
191
- return $fields;
192
- }
193
-
194
- /**
195
- * Get child default args.
196
- *
197
- * Retrieve the default arguments for all the child controls for a specific group
198
- * control.
199
- *
200
- * @since 1.2.2
201
- * @access protected
202
- *
203
- * @return array Default arguments for all the child controls.
204
- */
205
- protected function get_child_default_args() {
206
- return [
207
- 'types' => [ 'classic', 'gradient' ],
208
- ];
209
- }
210
-
211
- /**
212
- * Filter fields.
213
- *
214
- * Filter which controls to display, using `include`, `exclude`, `condition`
215
- * and `of_type` arguments.
216
- *
217
- * @since 1.2.2
218
- * @access protected
219
- *
220
- * @return array Control fields.
221
- */
222
- protected function filter_fields() {
223
- $fields = parent::filter_fields();
224
-
225
- $args = $this->get_args();
226
-
227
- foreach ( $fields as &$field ) {
228
- if ( isset( $field['of_type'] ) && ! in_array( $field['of_type'], $args['types'] ) ) {
229
- unset( $field );
230
- }
231
- }
232
-
233
- return $fields;
234
- }
235
-
236
- /**
237
- * Get default options.
238
- *
239
- * Retrieve the default options of the background control. Used to return the
240
- * default options while initializing the background control.
241
- *
242
- * @since 1.9.0
243
- * @access protected
244
- *
245
- * @return array Default background control options.
246
- */
247
- protected function get_default_options() {
248
- return [
249
- 'popover' => false,
250
- ];
251
- }
252
- }
1
+ <?php
2
+ /**
3
+ * Foreground control class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Controls;
8
+
9
+ use Elementor\Group_Control_Base;
10
+ use Elementor\Controls_Manager;
11
+
12
+ defined( 'ABSPATH' ) || die();
13
+
14
+ class Group_Control_Foreground extends Group_Control_Base {
15
+
16
+ /**
17
+ * Fields.
18
+ *
19
+ * Holds all the background control fields.
20
+ *
21
+ * @access protected
22
+ * @static
23
+ *
24
+ * @var array Background control fields.
25
+ */
26
+ protected static $fields;
27
+
28
+ /**
29
+ * Get background control type.
30
+ *
31
+ * Retrieve the control type, in this case `ha_text_color`.
32
+ *
33
+ * @since 1.0.0
34
+ * @access public
35
+ * @static
36
+ *
37
+ * @return string Control type.
38
+ */
39
+ public static function get_type() {
40
+ return 'foreground';
41
+ }
42
+
43
+ /**
44
+ * Init fields.
45
+ *
46
+ * Initialize background control fields.
47
+ *
48
+ * @since 1.2.2
49
+ * @access public
50
+ *
51
+ * @return array Control fields.
52
+ */
53
+ public function init_fields() {
54
+ $fields = [];
55
+
56
+ $fields['color_type'] = [
57
+ 'label' => _x( 'Text Color', 'Background Control', 'happy-elementor-addons' ),
58
+ 'type' => Controls_Manager::CHOOSE,
59
+ 'label_block' => false,
60
+ 'render_type' => 'ui',
61
+ 'options' => [
62
+ 'classic' => [
63
+ 'title' => _x( 'Classic', 'Text Color Control', 'happy-elementor-addons' ),
64
+ 'icon' => 'fa fa-paint-brush',
65
+ ],
66
+ 'gradient' => [
67
+ 'title' => _x( 'Gradient', 'Text Color Control', 'happy-elementor-addons' ),
68
+ 'icon' => 'fa fa-barcode',
69
+ ],
70
+ ],
71
+ 'default' => 'classic'
72
+ ];
73
+
74
+ $fields['color'] = [
75
+ 'label' => _x( 'Color', 'Background Control', 'happy-elementor-addons' ),
76
+ 'type' => Controls_Manager::COLOR,
77
+ 'default' => '',
78
+ 'title' => _x( 'Text Color', 'Background Control', 'happy-elementor-addons' ),
79
+ 'selectors' => [
80
+ '{{SELECTOR}}' => 'color: {{VALUE}};',
81
+ ],
82
+ 'condition' => [
83
+ 'color_type' => [ 'classic', 'gradient' ],
84
+ ],
85
+ ];
86
+
87
+ $fields['color_stop'] = [
88
+ 'label' => _x( 'Location', 'Background Control', 'happy-elementor-addons' ),
89
+ 'type' => Controls_Manager::SLIDER,
90
+ 'size_units' => [ '%' ],
91
+ 'default' => [
92
+ 'unit' => '%',
93
+ 'size' => 0,
94
+ ],
95
+ 'render_type' => 'ui',
96
+ 'condition' => [
97
+ 'color_type' => [ 'gradient' ],
98
+ ],
99
+ 'of_type' => 'gradient',
100
+ ];
101
+
102
+ $fields['color_b'] = [
103
+ 'label' => _x( 'Second Color', 'Background Control', 'happy-elementor-addons' ),
104
+ 'type' => Controls_Manager::COLOR,
105
+ 'default' => '#f2295b',
106
+ 'render_type' => 'ui',
107
+ 'condition' => [
108
+ 'color_type' => [ 'gradient' ],
109
+ ],
110
+ 'of_type' => 'gradient',
111
+ ];
112
+
113
+ $fields['color_b_stop'] = [
114
+ 'label' => _x( 'Location', 'Background Control', 'happy-elementor-addons' ),
115
+ 'type' => Controls_Manager::SLIDER,
116
+ 'size_units' => [ '%' ],
117
+ 'default' => [
118
+ 'unit' => '%',
119
+ 'size' => 100,
120
+ ],
121
+ 'render_type' => 'ui',
122
+ 'condition' => [
123
+ 'color_type' => [ 'gradient' ],
124
+ ],
125
+ 'of_type' => 'gradient',
126
+ ];
127
+
128
+ $fields['gradient_type'] = [
129
+ 'label' => _x( 'Type', 'Background Control', 'happy-elementor-addons' ),
130
+ 'type' => Controls_Manager::SELECT,
131
+ 'options' => [
132
+ 'linear' => _x( 'Linear', 'Background Control', 'happy-elementor-addons' ),
133
+ 'radial' => _x( 'Radial', 'Background Control', 'happy-elementor-addons' ),
134
+ ],
135
+ 'default' => 'linear',
136
+ 'render_type' => 'ui',
137
+ 'condition' => [
138
+ 'color_type' => [ 'gradient' ],
139
+ ],
140
+ 'of_type' => 'gradient',
141
+ ];
142
+
143
+ $fields['gradient_angle'] = [
144
+ 'label' => _x( 'Angle', 'Background Control', 'happy-elementor-addons' ),
145
+ 'type' => Controls_Manager::SLIDER,
146
+ 'size_units' => [ 'deg' ],
147
+ 'default' => [
148
+ 'unit' => 'deg',
149
+ 'size' => 180,
150
+ ],
151
+ 'range' => [
152
+ 'deg' => [
153
+ 'step' => 10,
154
+ ],
155
+ ],
156
+ 'selectors' => [
157
+ '{{SELECTOR}}' => '-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-color: transparent; background-image: linear-gradient({{SIZE}}{{UNIT}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})',
158
+ ],
159
+ 'condition' => [
160
+ 'color_type' => [ 'gradient' ],
161
+ 'gradient_type' => 'linear',
162
+ ],
163
+ 'of_type' => 'gradient',
164
+ ];
165
+
166
+ $fields['gradient_position'] = [
167
+ 'label' => _x( 'Position', 'Background Control', 'happy-elementor-addons' ),
168
+ 'type' => Controls_Manager::SELECT,
169
+ 'options' => [
170
+ 'center center' => _x( 'Center Center', 'Background Control', 'happy-elementor-addons' ),
171
+ 'center left' => _x( 'Center Left', 'Background Control', 'happy-elementor-addons' ),
172
+ 'center right' => _x( 'Center Right', 'Background Control', 'happy-elementor-addons' ),
173
+ 'top center' => _x( 'Top Center', 'Background Control', 'happy-elementor-addons' ),
174
+ 'top left' => _x( 'Top Left', 'Background Control', 'happy-elementor-addons' ),
175
+ 'top right' => _x( 'Top Right', 'Background Control', 'happy-elementor-addons' ),
176
+ 'bottom center' => _x( 'Bottom Center', 'Background Control', 'happy-elementor-addons' ),
177
+ 'bottom left' => _x( 'Bottom Left', 'Background Control', 'happy-elementor-addons' ),
178
+ 'bottom right' => _x( 'Bottom Right', 'Background Control', 'happy-elementor-addons' ),
179
+ ],
180
+ 'default' => 'center center',
181
+ 'selectors' => [
182
+ '{{SELECTOR}}' => '-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-color: transparent; background-image: radial-gradient(at {{VALUE}}, {{color.VALUE}} {{color_stop.SIZE}}{{color_stop.UNIT}}, {{color_b.VALUE}} {{color_b_stop.SIZE}}{{color_b_stop.UNIT}})',
183
+ ],
184
+ 'condition' => [
185
+ 'color_type' => [ 'gradient' ],
186
+ 'gradient_type' => 'radial',
187
+ ],
188
+ 'of_type' => 'gradient',
189
+ ];
190
+
191
+ return $fields;
192
+ }
193
+
194
+ /**
195
+ * Get child default args.
196
+ *
197
+ * Retrieve the default arguments for all the child controls for a specific group
198
+ * control.
199
+ *
200
+ * @since 1.2.2
201
+ * @access protected
202
+ *
203
+ * @return array Default arguments for all the child controls.
204
+ */
205
+ protected function get_child_default_args() {
206
+ return [
207
+ 'types' => [ 'classic', 'gradient' ],
208
+ ];
209
+ }
210
+
211
+ /**
212
+ * Filter fields.
213
+ *
214
+ * Filter which controls to display, using `include`, `exclude`, `condition`
215
+ * and `of_type` arguments.
216
+ *
217
+ * @since 1.2.2
218
+ * @access protected
219
+ *
220
+ * @return array Control fields.
221
+ */
222
+ protected function filter_fields() {
223
+ $fields = parent::filter_fields();
224
+
225
+ $args = $this->get_args();
226
+
227
+ foreach ( $fields as &$field ) {
228
+ if ( isset( $field['of_type'] ) && ! in_array( $field['of_type'], $args['types'] ) ) {
229
+ unset( $field );
230
+ }
231
+ }
232
+
233
+ return $fields;
234
+ }
235
+
236
+ /**
237
+ * Get default options.
238
+ *
239
+ * Retrieve the default options of the background control. Used to return the
240
+ * default options while initializing the background control.
241
+ *
242
+ * @since 1.9.0
243
+ * @access protected
244
+ *
245
+ * @return array Default background control options.
246
+ */
247
+ protected function get_default_options() {
248
+ return [
249
+ 'popover' => false,
250
+ ];
251
+ }
252
+ }
controls/text-stroke.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Text stroke control class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Controls;
8
+
9
+ use Elementor\Group_Control_Base;
10
+ use Elementor\Controls_Manager;
11
+
12
+ defined( 'ABSPATH' ) || die();
13
+
14
+ class Group_Control_Text_Stroke extends Group_Control_Base {
15
+
16
+ /**
17
+ * Fields.
18
+ *
19
+ * Holds all the background control fields.
20
+ *
21
+ * @access protected
22
+ * @static
23
+ *
24
+ * @var array Background control fields.
25
+ */
26
+ protected static $fields;
27
+
28
+ /**
29
+ * Get background control type.
30
+ *
31
+ * Retrieve the control type, in this case `ha_text_color`.
32
+ *
33
+ * @since 1.0.0
34
+ * @access public
35
+ * @static
36
+ *
37
+ * @return string Control type.
38
+ */
39
+ public static function get_type() {
40
+ return 'ha-text-stroke';
41
+ }
42
+
43
+ /**
44
+ * Init fields.
45
+ *
46
+ * Initialize background control fields.
47
+ *
48
+ * @since 1.2.2
49
+ * @access public
50
+ *
51
+ * @return array Control fields.
52
+ */
53
+ public function init_fields() {
54
+ $fields = [];
55
+
56
+ $fields['color'] = [
57
+ 'label' => _x( 'Stroke Color', 'Text Stroke', 'happy-elementor-addons' ),
58
+ 'type' => Controls_Manager::COLOR,
59
+ 'render_type' => 'ui',
60
+ ];
61
+
62
+ $fields['width'] = [
63
+ 'label' => _x( 'Stroke Width', 'Text Stroke', 'happy-elementor-addons' ),
64
+ 'type' => Controls_Manager::SLIDER,
65
+ 'responsive' => true,
66
+ 'size_units' => [ 'px', 'em' ],
67
+ 'selectors' => [
68
+ '{{SELECTOR}}' => '-webkit-text-stroke: {{SIZE}}{{UNIT}} {{color.VALUE}}; text-stroke: {{SIZE}}{{UNIT}} {{color.VALUE}};',
69
+ ],
70
+ ];
71
+
72
+ return $fields;
73
+ }
74
+
75
+ /**
76
+ * Get default options.
77
+ *
78
+ * Retrieve the default options of the background control. Used to return the
79
+ * default options while initializing the background control.
80
+ *
81
+ * @since 1.9.0
82
+ * @access protected
83
+ *
84
+ * @return array Default background control options.
85
+ */
86
+ protected function get_default_options() {
87
+ return [
88
+ 'popover' => [
89
+ 'starter_name' => 'ha-text-stroke',
90
+ 'starter_title' => _x( 'Text Stroke ', 'Text Stroke', 'happy-elementor-addons' ) . '&nbsp;<i style="color: #d5dadf;" class="hm hm-happyaddons"></i>',
91
+ 'settings' => [
92
+ 'render_type' => 'ui',
93
+ ],
94
+ ],
95
+ ];
96
+ }
97
+ }
extensions/shape-divider.php CHANGED
@@ -84,10 +84,10 @@ class Shape_Divider {
84
  */
85
  public static function additional_shape_divider( $shape_list ) {
86
  $shape_list = [
87
- 'abstruct-web' => [
88
- 'title' => _x( 'Abstruct Web', 'Shapes', 'happy-elementor-addons' ),
89
- 'path' => HAPPY_ADDONS_DIR_PATH . 'assets/imgs/shape-divider/abstruct-web.svg',
90
- 'url' => HAPPY_ADDONS_ASSETS . 'imgs/shape-divider/abstruct-web.svg',
91
  'has_flip' => true,
92
  'has_negative' => false,
93
  'ha_shape' => true,
@@ -140,10 +140,10 @@ class Shape_Divider {
140
  'has_negative' => false,
141
  'ha_shape' => true,
142
  ],
143
- 'multi-web' => [
144
- 'title' => _x( 'Multi Web', 'Shapes', 'happy-elementor-addons' ),
145
- 'path' => HAPPY_ADDONS_DIR_PATH . 'assets/imgs/shape-divider/multi-web.svg',
146
- 'url' => HAPPY_ADDONS_ASSETS . 'imgs/shape-divider/multi-web.svg',
147
  'has_flip' => true,
148
  'has_negative' => false,
149
  'ha_shape' => true,
84
  */
85
  public static function additional_shape_divider( $shape_list ) {
86
  $shape_list = [
87
+ 'abstract-web' => [
88
+ 'title' => _x( 'Abstract Web', 'Shapes', 'happy-elementor-addons' ),
89
+ 'path' => HAPPY_ADDONS_DIR_PATH . 'assets/imgs/shape-divider/abstract-web.svg',
90
+ 'url' => HAPPY_ADDONS_ASSETS . 'imgs/shape-divider/abstract-web.svg',
91
  'has_flip' => true,
92
  'has_negative' => false,
93
  'ha_shape' => true,
140
  'has_negative' => false,
141
  'ha_shape' => true,
142
  ],
143
+ 'multi-wave' => [
144
+ 'title' => _x( 'Multi Wave', 'Shapes', 'happy-elementor-addons' ),
145
+ 'path' => HAPPY_ADDONS_DIR_PATH . 'assets/imgs/shape-divider/multi-wave.svg',
146
+ 'url' => HAPPY_ADDONS_ASSETS . 'imgs/shape-divider/multi-wave.svg',
147
  'has_flip' => true,
148
  'has_negative' => false,
149
  'ha_shape' => true,
extensions/widgets-extended.php CHANGED
@@ -8,159 +8,211 @@ namespace Happy_Addons\Elementor\Extension;
8
 
9
  use Elementor\Controls_Manager;
10
  use Elementor\Widget_Base;
 
11
 
12
  defined('ABSPATH') || die();
13
 
14
  class Widgets_Extended {
15
 
16
- public static function init() {
17
- add_action( 'elementor/element/button/section_style/after_section_start', [ __CLASS__, 'add_button_controls' ] );
18
- }
19
-
20
- public static function add_button_controls( Widget_Base $widget ) {
21
- $widget->add_control(
22
- 'ha_fixed_size_toggle',
23
- [
24
- 'label' => __( 'Fixed Size', 'happy-elementor-addons' ),
25
- 'type' => Controls_Manager::POPOVER_TOGGLE,
26
- 'return_value' => 'yes',
27
- ]
28
- );
29
-
30
- $widget->start_popover();
31
-
32
- $widget->add_responsive_control(
33
- 'ha_height',
34
- [
35
- 'label' => __( 'Height', 'happy-elementor-addons' ),
36
- 'type' => Controls_Manager::SLIDER,
37
- 'default' => [
38
- 'unit' => 'px',
39
- ],
40
- 'range' => [
41
- 'px' => [
42
- 'max' => 500,
43
- ]
44
- ],
45
- 'selectors' => [
46
- '{{WRAPPER}} .elementor-button' => 'height: {{SIZE}}{{UNIT}};'
47
- ],
48
- 'condition' => [
49
- 'ha_fixed_size_toggle' => 'yes',
50
- ]
51
- ]
52
- );
53
-
54
- $widget->add_responsive_control(
55
- 'ha_width',
56
- [
57
- 'label' => __( 'Width', 'happy-elementor-addons' ),
58
- 'type' => Controls_Manager::SLIDER,
59
- 'default' => [
60
- 'unit' => 'px',
61
- ],
62
- 'range' => [
63
- 'px' => [
64
- 'max' => 500,
65
- ]
66
- ],
67
- 'selectors' => [
68
- '{{WRAPPER}} .elementor-button' => 'width: {{SIZE}}{{UNIT}};'
69
- ],
70
- 'condition' => [
71
- 'ha_fixed_size_toggle' => 'yes',
72
- ]
73
- ]
74
- );
75
-
76
- $widget->add_control(
77
- 'ha_align_x',
78
- [
79
- 'type' => Controls_Manager::CHOOSE,
80
- 'label' => __( 'Horizontal Align', 'happy-elementor-addons' ),
81
- 'default' => 'center',
82
- 'toggle' => false,
83
- 'options' => [
84
- 'left' => [
85
- 'title' => __( 'Left', 'happy-elementor-addons' ),
86
- 'icon' => 'eicon-h-align-left',
87
- ],
88
- 'center' => [
89
- 'title' => __( 'Center', 'happy-elementor-addons' ),
90
- 'icon' => 'eicon-h-align-center',
91
- ],
92
- 'right' => [
93
- 'title' => __( 'Right', 'happy-elementor-addons' ),
94
- 'icon' => 'eicon-h-align-right',
95
- ],
96
- ],
97
- 'selectors' => [
98
- '{{WRAPPER}} .elementor-button' => '{{VALUE}}'
99
- ],
100
- 'selectors_dictionary' => [
101
- 'left' => '-webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start;',
102
- 'center' => '-webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;',
103
- 'right' => '-webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end;',
104
- ],
105
- 'condition' => [
106
- 'ha_fixed_size_toggle' => 'yes',
107
- ],
108
- ]
109
- );
110
-
111
- $widget->add_control(
112
- 'ha_align_y',
113
- [
114
- 'type' => Controls_Manager::CHOOSE,
115
- 'label' => __( 'Vertical Align', 'happy-elementor-addons' ),
116
- 'default' => 'center',
117
- 'toggle' => false,
118
- 'options' => [
119
- 'top' => [
120
- 'title' => __( 'Top', 'happy-elementor-addons' ),
121
- 'icon' => 'eicon-v-align-top',
122
- ],
123
- 'center' => [
124
- 'title' => __( 'Center', 'happy-elementor-addons' ),
125
- 'icon' => 'eicon-v-align-middle',
126
- ],
127
- 'bottom' => [
128
- 'title' => __( 'Right', 'happy-elementor-addons' ),
129
- 'icon' => 'eicon-v-align-bottom',
130
- ],
131
- ],
132
- 'selectors' => [
133
- '{{WRAPPER}} .elementor-button' => '{{VALUE}}',
134
- ],
135
- 'selectors_dictionary' => [
136
- 'top' => '-webkit-box-align: start; -ms-flex-align: start; align-items: flex-start;',
137
- 'center' => '-webkit-box-align: center; -ms-flex-align: center; align-items: center;',
138
- 'bottom' => '-webkit-box-align: end; -ms-flex-align: end; align-items: flex-end;',
139
- ],
140
- 'condition' => [
141
- 'ha_fixed_size_toggle' => 'yes',
142
- ],
143
- ]
144
- );
145
-
146
- $widget->add_control(
147
- 'ha_flex_display',
148
- [
149
- 'type' => Controls_Manager::HIDDEN,
150
- 'default' => 'inline-flex',
151
- 'selectors' => [
152
- '{{WRAPPER}} .elementor-button' => 'display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex;',
153
- ],
154
- 'condition' => [
155
- 'ha_fixed_size_toggle' => 'yes',
156
- 'ha_align_x!' => '',
157
- 'ha_align_y!' => '',
158
- ],
159
- ]
160
- );
161
-
162
- $widget->end_popover();
163
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
166
  Widgets_Extended::init();
8
 
9
  use Elementor\Controls_Manager;
10
  use Elementor\Widget_Base;
11
+ use Happy_Addons\Elementor\Controls\Group_Control_Text_Stroke;
12
 
13
  defined('ABSPATH') || die();
14
 
15
  class Widgets_Extended {
16
 
17
+ public static function init() {
18
+ add_action( 'elementor/element/button/section_style/after_section_start', [ __CLASS__, 'add_button_controls' ] );
19
+
20
+ add_action( 'elementor/element/heading/section_title_style/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
21
+ add_action( 'elementor/element/theme-page-title/section_title_style/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
22
+ add_action( 'elementor/element/theme-site-title/section_title_style/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
23
+ add_action( 'elementor/element/theme-post-title/section_title_style/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
24
+ add_action( 'elementor/element/woocommerce-product-title/section_title_style/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
25
+
26
+ add_action( 'elementor/element/animated-headline/section_style_text/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
27
+
28
+ add_action( 'elementor/element/ha-gradient-heading/_section_style_title/after_section_end', [ __CLASS__, 'add_text_stroke' ] );
29
+ }
30
+
31
+ public static function add_text_stroke( Widget_Base $widget ) {
32
+ $common = [
33
+ 'of' => 'blend_mode',
34
+ 'target' => '.elementor-heading-title',
35
+ ];
36
+
37
+ $map = [
38
+ 'heading' => $common,
39
+ 'theme-page-title' => $common,
40
+ 'theme-site-title' => $common,
41
+ 'theme-post-title' => $common,
42
+ 'woocommerce-product-title' => $common,
43
+ 'animated-headline' => [
44
+ 'of' => 'title_color',
45
+ 'target' => '.elementor-headline',
46
+ ],
47
+ 'ha-gradient-heading' => [
48
+ 'of' => 'blend_mode',
49
+ 'target' => '.ha-gradient-heading',
50
+ ],
51
+ ];
52
+
53
+ $of = $map[ $widget->get_name() ]['of'];
54
+ $target = $map[ $widget->get_name() ]['target'];
55
+
56
+ $widget->start_injection( [
57
+ 'at' => 'after',
58
+ 'of' => $of,
59
+ ] );
60
+
61
+ $widget->add_group_control(
62
+ Group_Control_Text_Stroke::get_type(),
63
+ [
64
+ 'name' => 'text_stroke',
65
+ 'selector' => '{{WRAPPER}} ' . $target,
66
+ ]
67
+ );
68
+
69
+ $widget->end_injection();
70
+ }
71
+
72
+ public static function add_button_controls( Widget_Base $widget ) {
73
+ $widget->add_control(
74
+ 'ha_fixed_size_toggle',
75
+ [
76
+ 'label' => __( 'Fixed Size', 'happy-elementor-addons' ),
77
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
78
+ 'return_value' => 'yes',
79
+ ]
80
+ );
81
+
82
+ $widget->start_popover();
83
+
84
+ $widget->add_responsive_control(
85
+ 'ha_height',
86
+ [
87
+ 'label' => __( 'Height', 'happy-elementor-addons' ),
88
+ 'type' => Controls_Manager::SLIDER,
89
+ 'default' => [
90
+ 'unit' => 'px',
91
+ ],
92
+ 'range' => [
93
+ 'px' => [
94
+ 'max' => 500,
95
+ ]
96
+ ],
97
+ 'selectors' => [
98
+ '{{WRAPPER}} .elementor-button' => 'height: {{SIZE}}{{UNIT}};'
99
+ ],
100
+ 'condition' => [
101
+ 'ha_fixed_size_toggle' => 'yes',
102
+ ]
103
+ ]
104
+ );
105
+
106
+ $widget->add_responsive_control(
107
+ 'ha_width',
108
+ [
109
+ 'label' => __( 'Width', 'happy-elementor-addons' ),
110
+ 'type' => Controls_Manager::SLIDER,
111
+ 'default' => [
112
+ 'unit' => 'px',
113
+ ],
114
+ 'range' => [
115
+ 'px' => [
116
+ 'max' => 500,
117
+ ]
118
+ ],
119
+ 'selectors' => [
120
+ '{{WRAPPER}} .elementor-button' => 'width: {{SIZE}}{{UNIT}};'
121
+ ],
122
+ 'condition' => [
123
+ 'ha_fixed_size_toggle' => 'yes',
124
+ ]
125
+ ]
126
+ );
127
+
128
+ $widget->add_control(
129
+ 'ha_align_x',
130
+ [
131
+ 'type' => Controls_Manager::CHOOSE,
132
+ 'label' => __( 'Horizontal Align', 'happy-elementor-addons' ),
133
+ 'default' => 'center',
134
+ 'toggle' => false,
135
+ 'options' => [
136
+ 'left' => [
137
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
138
+ 'icon' => 'eicon-h-align-left',
139
+ ],
140
+ 'center' => [
141
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
142
+ 'icon' => 'eicon-h-align-center',
143
+ ],
144
+ 'right' => [
145
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
146
+ 'icon' => 'eicon-h-align-right',
147
+ ],
148
+ ],
149
+ 'selectors' => [
150
+ '{{WRAPPER}} .elementor-button' => '{{VALUE}}'
151
+ ],
152
+ 'selectors_dictionary' => [
153
+ 'left' => '-webkit-box-pack: start; -ms-flex-pack: start; justify-content: flex-start;',
154
+ 'center' => '-webkit-box-pack: center; -ms-flex-pack: center; justify-content: center;',
155
+ 'right' => '-webkit-box-pack: end; -ms-flex-pack: end; justify-content: flex-end;',
156
+ ],
157
+ 'condition' => [
158
+ 'ha_fixed_size_toggle' => 'yes',
159
+ ],
160
+ ]
161
+ );
162
+
163
+ $widget->add_control(
164
+ 'ha_align_y',
165
+ [
166
+ 'type' => Controls_Manager::CHOOSE,
167
+ 'label' => __( 'Vertical Align', 'happy-elementor-addons' ),
168
+ 'default' => 'center',
169
+ 'toggle' => false,
170
+ 'options' => [
171
+ 'top' => [
172
+ 'title' => __( 'Top', 'happy-elementor-addons' ),
173
+ 'icon' => 'eicon-v-align-top',
174
+ ],
175
+ 'center' => [
176
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
177
+ 'icon' => 'eicon-v-align-middle',
178
+ ],
179
+ 'bottom' => [
180
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
181
+ 'icon' => 'eicon-v-align-bottom',
182
+ ],
183
+ ],
184
+ 'selectors' => [
185
+ '{{WRAPPER}} .elementor-button' => '{{VALUE}}',
186
+ ],
187
+ 'selectors_dictionary' => [
188
+ 'top' => '-webkit-box-align: start; -ms-flex-align: start; align-items: flex-start;',
189
+ 'center' => '-webkit-box-align: center; -ms-flex-align: center; align-items: center;',
190
+ 'bottom' => '-webkit-box-align: end; -ms-flex-align: end; align-items: flex-end;',
191
+ ],
192
+ 'condition' => [
193
+ 'ha_fixed_size_toggle' => 'yes',
194
+ ],
195
+ ]
196
+ );
197
+
198
+ $widget->add_control(
199
+ 'ha_flex_display',
200
+ [
201
+ 'type' => Controls_Manager::HIDDEN,
202
+ 'default' => 'inline-flex',
203
+ 'selectors' => [
204
+ '{{WRAPPER}} .elementor-button' => 'display: -webkit-inline-box; display: -ms-inline-flexbox; display: inline-flex;',
205
+ ],
206
+ 'condition' => [
207
+ 'ha_fixed_size_toggle' => 'yes',
208
+ 'ha_align_x!' => '',
209
+ 'ha_align_y!' => '',
210
+ ],
211
+ ]
212
+ );
213
+
214
+ $widget->end_popover();
215
+ }
216
  }
217
 
218
  Widgets_Extended::init();
inc/functions.php CHANGED
@@ -206,27 +206,92 @@ function ha_elementor() {
206
  */
207
  function ha_get_allowed_html_tags( $level = 'basic' ) {
208
  $allowed_html = [
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
  ],
226
  'span' => [
227
  'class' => [],
 
 
 
 
 
 
 
228
  ],
229
- 'strong' => [],
230
  ];
231
 
232
  if ( $level === 'intermediate' ) {
@@ -236,29 +301,52 @@ function ha_get_allowed_html_tags( $level = 'basic' ) {
236
  'title' => [],
237
  'class' => [],
238
  'id' => [],
 
239
  ],
240
  'q' => [
241
  'cite' => [],
 
 
 
242
  ],
243
  'img' => [
244
  'src' => [],
245
  'alt' => [],
246
  'height' => [],
247
  'width' => [],
 
 
 
248
  ],
249
  'dfn' => [
250
  'title' => [],
 
 
 
251
  ],
252
  'time' => [
253
  'datetime' => [],
 
 
 
254
  ],
255
  'cite' => [
256
  'title' => [],
 
 
 
257
  ],
258
  'acronym' => [
259
  'title' => [],
 
 
 
 
 
 
 
 
260
  ],
261
- 'hr' => [],
262
  ];
263
 
264
  $allowed_html = array_merge( $allowed_html, $tags );
206
  */
207
  function ha_get_allowed_html_tags( $level = 'basic' ) {
208
  $allowed_html = [
209
+ 'b' => [
210
+ 'class' => [],
211
+ 'id' => [],
212
+ 'style' => []
213
+ ],
214
+ 'i' => [
215
+ 'class' => [],
216
+ 'id' => [],
217
+ 'style' => []
218
+ ],
219
+ 'u' => [
220
+ 'class' => [],
221
+ 'id' => [],
222
+ 'style' => []
223
+ ],
224
+ 's' => [
225
+ 'class' => [],
226
+ 'id' => [],
227
+ 'style' => []
228
+ ],
229
+ 'br' => [
230
+ 'class' => [],
231
+ 'id' => [],
232
+ 'style' => []
233
+ ],
234
+ 'em' => [
235
+ 'class' => [],
236
+ 'id' => [],
237
+ 'style' => []
238
+ ],
239
+ 'del' => [
240
+ 'class' => [],
241
+ 'id' => [],
242
+ 'style' => []
243
+ ],
244
+ 'ins' => [
245
+ 'class' => [],
246
+ 'id' => [],
247
+ 'style' => []
248
+ ],
249
+ 'sub' => [
250
+ 'class' => [],
251
+ 'id' => [],
252
+ 'style' => []
253
+ ],
254
+ 'sup' => [
255
+ 'class' => [],
256
+ 'id' => [],
257
+ 'style' => []
258
+ ],
259
+ 'code' => [
260
+ 'class' => [],
261
+ 'id' => [],
262
+ 'style' => []
263
+ ],
264
+ 'mark' => [
265
+ 'class' => [],
266
+ 'id' => [],
267
+ 'style' => []
268
+ ],
269
+ 'small' => [
270
+ 'class' => [],
271
+ 'id' => [],
272
+ 'style' => []
273
+ ],
274
+ 'strike' => [
275
+ 'class' => [],
276
+ 'id' => [],
277
+ 'style' => []
278
+ ],
279
  'abbr' => [
280
  'title' => [],
281
+ 'class' => [],
282
+ 'id' => [],
283
+ 'style' => []
284
  ],
285
  'span' => [
286
  'class' => [],
287
+ 'id' => [],
288
+ 'style' => []
289
+ ],
290
+ 'strong' => [
291
+ 'class' => [],
292
+ 'id' => [],
293
+ 'style' => []
294
  ],
 
295
  ];
296
 
297
  if ( $level === 'intermediate' ) {
301
  'title' => [],
302
  'class' => [],
303
  'id' => [],
304
+ 'style' => []
305
  ],
306
  'q' => [
307
  'cite' => [],
308
+ 'class' => [],
309
+ 'id' => [],
310
+ 'style' => []
311
  ],
312
  'img' => [
313
  'src' => [],
314
  'alt' => [],
315
  'height' => [],
316
  'width' => [],
317
+ 'class' => [],
318
+ 'id' => [],
319
+ 'style' => []
320
  ],
321
  'dfn' => [
322
  'title' => [],
323
+ 'class' => [],
324
+ 'id' => [],
325
+ 'style' => []
326
  ],
327
  'time' => [
328
  'datetime' => [],
329
+ 'class' => [],
330
+ 'id' => [],
331
+ 'style' => []
332
  ],
333
  'cite' => [
334
  'title' => [],
335
+ 'class' => [],
336
+ 'id' => [],
337
+ 'style' => []
338
  ],
339
  'acronym' => [
340
  'title' => [],
341
+ 'class' => [],
342
+ 'id' => [],
343
+ 'style' => []
344
+ ],
345
+ 'hr' => [
346
+ 'class' => [],
347
+ 'id' => [],
348
+ 'style' => []
349
  ],
 
350
  ];
351
 
352
  $allowed_html = array_merge( $allowed_html, $tags );
plugin.php CHANGED
@@ -3,11 +3,11 @@
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.19.0
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
- * Elementor tested up to: 3.0.16
10
- * Elementor Pro tested up to: 3.0.10
11
  * License: GPLv2
12
  * License URI: https://www.gnu.org/licenses/gpl-2.0.html
13
  * Text Domain: happy-elementor-addons
@@ -36,7 +36,7 @@ Copyright 2019 HappyMonster <http://happymonster.me>
36
 
37
  defined( 'ABSPATH' ) || die();
38
 
39
- define( 'HAPPY_ADDONS_VERSION', '2.19.0' );
40
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
41
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
42
  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.20.0
7
  * Author: weDevs
8
  * Author URI: https://happyaddons.com/
9
+ * Elementor tested up to: 3.1.1
10
+ * Elementor Pro tested up to: 3.1.0
11
  * License: GPLv2
12
  * License URI: https://www.gnu.org/licenses/gpl-2.0.html
13
  * Text Domain: happy-elementor-addons
36
 
37
  defined( 'ABSPATH' ) || die();
38
 
39
+ define( 'HAPPY_ADDONS_VERSION', '2.20.0' );
40
  define( 'HAPPY_ADDONS__FILE__', __FILE__ );
41
  define( 'HAPPY_ADDONS_DIR_PATH', plugin_dir_path( HAPPY_ADDONS__FILE__ ) );
42
  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.19.0
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, mrokon, shshouvo, obiplabon
@@ -58,8 +58,9 @@ Unlike most other Elementor addons, Happy Addons offers itself with many robust
58
  - [**Post Tab**](https://demo.happyaddons.com/elementor-post-tab-widget-demo/) – Enable users to present your post in multiple workable tabs ideally useful for grouped and related content.
59
  - [**Post List**](https://demo.happyaddons.com/elementor-post-list-widget-demo/) – List any post elegantly using this widget displaying them in a creative and innovative manner with multiple options to play with.
60
  - [**Taxonomy List**](https://demo.happyaddons.com/elementor-taxonomy-widget-demo/) - This widget will help you to create a list of posts by sorting categories, tags, post formats.
61
- - [**Horizontal TimeLine**]
62
- - [**Social Share**]
 
63
  - [**Contact Form 7**](https://demo.happyaddons.com/elementor-contact-form-7-widget-demo/) – This utility widget helps you to integrate existing forms built using CF7 plugin across your web pages without spending too much time.
64
  - [**Caldera Forms**](https://demo.happyaddons.com/elementor-caldera-forms-widget-demo/) – This widget can help you to display your caldera forms to display on your web pages designed with Elementor.
65
  - [**weForms**](https://demo.happyaddons.com/elementor-we-forms-widget-demo/) – Designed forms using weForms plugin and looking for a way to display those on your Elementor powered pages? This is the answer to that.
@@ -283,14 +284,28 @@ For a more detailed explanation check out the following documentation
283
 
284
  == Changelog ==
285
 
286
- = 2.19.0 - 20 January 2020 =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
  - New: Features control panel
289
  - New: Section Shape Divider - 18 custom shapes (Happy Shapes)
290
  - Tweak: Improved elementor missing notice
291
  - Fix: Misc css bug resolved
292
 
293
- = 2.18.0 - 5 January 2020 =
294
 
295
  - New: Tabs are sortable in Post Tab widget
296
  - Tweak: Added Post tab widget tab hover cursor
@@ -345,7 +360,7 @@ For a more detailed explanation check out the following documentation
345
  - New: Horizontal TimeLine widget
346
  - New: Social Share widget
347
  - New: Happy Icons v4 (44 new icons)
348
- - Tweak: Data Table row-cell text link option
349
  - Fix: On Demand Assets Loading compatibility with WPML
350
  - Fix: Post Tab widget compatibility with WPML
351
  - Fix: News Ticker widget compatibility with WPML
@@ -379,7 +394,7 @@ For a more detailed explanation check out the following documentation
379
 
380
  - New: Updated compatibility with WP 5.5.x
381
  - New: Updated compatibility with Elementor 3.x.x
382
- - New: Twitter feed timestamp settings
383
  - Tweak: Removed unnecessary Elementor kit assets enqueue
384
  - Tweak: Removed common image styles, instead added widget wise
385
  - Fix: Templates compatibility issue with Elementor 3.x.x
1
  === Happy Addons for Elementor ===
2
  Plugin Name: Happy Addons for Elementor
3
+ Version: 2.20.0
4
  Author: weDevs
5
  Author URI: https://happyaddons.com/
6
  Contributors: thehappymonster, happyaddons, hasinhayder, mosaddek73, tareq1988, sourav926, wedevs, iqbalrony, mrokon, shshouvo, obiplabon
58
  - [**Post Tab**](https://demo.happyaddons.com/elementor-post-tab-widget-demo/) – Enable users to present your post in multiple workable tabs ideally useful for grouped and related content.
59
  - [**Post List**](https://demo.happyaddons.com/elementor-post-list-widget-demo/) – List any post elegantly using this widget displaying them in a creative and innovative manner with multiple options to play with.
60
  - [**Taxonomy List**](https://demo.happyaddons.com/elementor-taxonomy-widget-demo/) - This widget will help you to create a list of posts by sorting categories, tags, post formats.
61
+ - [**Horizontal TimeLine**](https://demo.happyaddons.com/elementor-horizontal-timeline-widget-demo/) – Design your storyline horizontally using the Horizontal Timeline Widget by HappyAddons. It’s absolutely free!
62
+ - [**Social Share**](https://demo.happyaddons.com/elementor-social-share-widget-demo/) – No need to buy a social share plugin anymore. Get many of the premium features of social share plugins within HappyAddons Social Share widget for free!
63
+ - [**Event Calender**](https://demo.happyaddons.com/elementor-event-calendar-widget-demo/) – Are you struggling to incorporate an event calendar on your website with the help of Elementor? Don’t worry; we have added an amazing Event Calendar Widget in the HappyAddons Free Version for you! You can create your own personalized calendar manually or use your Google calendar or the Events Calendar Plugin’s calendar to showcase your events.
64
  - [**Contact Form 7**](https://demo.happyaddons.com/elementor-contact-form-7-widget-demo/) – This utility widget helps you to integrate existing forms built using CF7 plugin across your web pages without spending too much time.
65
  - [**Caldera Forms**](https://demo.happyaddons.com/elementor-caldera-forms-widget-demo/) – This widget can help you to display your caldera forms to display on your web pages designed with Elementor.
66
  - [**weForms**](https://demo.happyaddons.com/elementor-we-forms-widget-demo/) – Designed forms using weForms plugin and looking for a way to display those on your Elementor powered pages? This is the answer to that.
284
 
285
  == Changelog ==
286
 
287
+ = 2.20.0 - 18 February 2021 =
288
+
289
+ - New: Text stroke feature
290
+ - New: Event Calendar widget
291
+ - New: Happy particle effects disable option
292
+ - Tweak: Updated kses function to support more attributes
293
+ - Tweak: Added html tag support in Data Table widget
294
+ - Tweak: Added slider widget dots size control
295
+ - Tweak: Added carousel widget dots size control
296
+ - Fix: Shape divider spell
297
+ - Fix: Chart widgets console error
298
+ - Fix: Widget background overlay class mismatch issue
299
+ - Fix: Data Table widget compatibility issue with WPML
300
+
301
+ = 2.19.0 - 20 January 2021 =
302
 
303
  - New: Features control panel
304
  - New: Section Shape Divider - 18 custom shapes (Happy Shapes)
305
  - Tweak: Improved elementor missing notice
306
  - Fix: Misc css bug resolved
307
 
308
+ = 2.18.0 - 5 January 2021 =
309
 
310
  - New: Tabs are sortable in Post Tab widget
311
  - Tweak: Added Post tab widget tab hover cursor
360
  - New: Horizontal TimeLine widget
361
  - New: Social Share widget
362
  - New: Happy Icons v4 (44 new icons)
363
+ - Tweak: Data Table row-cell text link option
364
  - Fix: On Demand Assets Loading compatibility with WPML
365
  - Fix: Post Tab widget compatibility with WPML
366
  - Fix: News Ticker widget compatibility with WPML
394
 
395
  - New: Updated compatibility with WP 5.5.x
396
  - New: Updated compatibility with Elementor 3.x.x
397
+ - New: Twitter feed timestamp settings
398
  - Tweak: Removed unnecessary Elementor kit assets enqueue
399
  - Tweak: Removed common image styles, instead added widget wise
400
  - Fix: Templates compatibility issue with Elementor 3.x.x
templates/admin/dashboard-home.php CHANGED
@@ -1,160 +1,160 @@
1
- <?php
2
- /**
3
- * Dashboard home tab template
4
- */
5
-
6
- defined( 'ABSPATH' ) || die();
7
- ?>
8
- <div class="ha-dashboard-panel">
9
- <div class="ha-home-banner">
10
- <div class="ha-home-banner__content">
11
- <img class="ha-home-banner__logo" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/halogo.svg" alt="">
12
- <span class="ha-home-banner__divider"></span>
13
- <h2>Thanks a lot <br><span>for choosing HappyAddons</span></h2>
14
- </div>
15
- </div>
16
- <div class="ha-home-body">
17
- <div class="ha-row ha-py-5 ha-align-items-center">
18
- <div class="ha-col ha-col-6">
19
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/knowledge.svg" alt="">
20
- <h3 class="ha-feature-title">Knowledge & Wiki</h3>
21
- <p class="f18">We have created full-proof documentation for you. It will help you to understand how our plugin works.</p>
22
- <a class="ha-btn ha-btn-primary" target="_blank" rel="noopener" href="https://happyaddons.com/go/docs">Take Me to The Knowledge Page</a>
23
- </div>
24
- <div class="ha-col ha-col-6">
25
- <img class="ha-img-fluid" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/art1.png" alt="">
26
- </div>
27
- </div>
28
- <div class="ha-row ha-py-5 ha-pt-0">
29
- <div class="ha-col ha-col-12">
30
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/film.svg" alt="">
31
- <h3 class="ha-feature-title">Video Tutorial</h3>
32
- <p class="f16">How to use Floating Effects and manage CSS Transform?</p>
33
- </div>
34
- <div class="ha-col ha-col-4">
35
- <a href="https://www.youtube.com/watch?v=KSRaUaD30Jc" class="ha-feature-sub-title-a">
36
- <img class="ha-img-fluid ha-rounded" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/crossdomain-video-cover.jpg" alt="">
37
- <h4 class="ha-feature-sub-title">Cross Domain Copy Paste (Pro)</h4>
38
- </a>
39
- </div>
40
- <div class="ha-col ha-col-4">
41
- <a href="https://www.youtube.com/watch?v=LmtacsLcFPU" class="ha-feature-sub-title-a">
42
- <img class="ha-img-fluid ha-rounded" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/translate-video-cover.jpg" alt="">
43
- <h4 class="ha-feature-sub-title">Happy Effects - CSS Transform</h4>
44
- </a>
45
- </div>
46
- <div class="ha-col ha-col-4">
47
- <a href="https://www.youtube.com/watch?v=F33g3zqkeog" class="ha-feature-sub-title-a">
48
- <img class="ha-img-fluid ha-rounded" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/floating-video-cover.jpg" alt="">
49
- <h4 class="ha-feature-sub-title">Happy Effects - Floating Effects</h4>
50
- </a>
51
- </div>
52
- <div class="ha-col ha-col-12 ha-align-center ha-pt-2">
53
- <a class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://www.youtube.com/channel/UC1-e7ewkKB1Dao1U90QFQFA">View more videos</a>
54
- </div>
55
- </div>
56
- <div class="ha-row ha-align-items-end ha-py-5 ha-pt-0">
57
- <div class="ha-col ha-col-9">
58
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/faq.svg" alt="">
59
- <h3 class="ha-feature-title ha-text-primary">FAQ</h3>
60
- <p class="f16 ha-mb-0">Frequently Asked Questions</p>
61
- </div>
62
- <div class="ha-col ha-col-3 ha-align-right">
63
- <a class="btn-more" target="_blank" rel="noopener" href="https://happyaddons.com/go/faq">Get More FAQ ></a>
64
- </div>
65
- <div class="ha-col ha-col-12">
66
- <div class="ha-row">
67
- <div class="ha-col ha-col-6 ha-pt-3">
68
- <h4 class="f18">Can I use these addons in my client project?</h4>
69
- <p class="ha-mb-0 f16">Yes, absolutely, no holds barred. Use it to bring colorful moments to your customers. And don’t forget to check out our premium features.</p>
70
- </div>
71
- <div class="ha-col ha-col-6 ha-pt-3">
72
- <h4 class="f18">Is there any support policy available for the free users?</h4>
73
- <p class="ha-mb-0 f16">Free or pro version, both comes with excellent support from us. However, pro users will get priority support.</p>
74
- </div>
75
- </div>
76
- </div>
77
- </div>
78
-
79
- <?php
80
- $appsero = \Happy_Addons\Elementor\Base::instance()->appsero;
81
- $margin_top = '';
82
- if ( $appsero ) :
83
- if ( ! $appsero->insights()->notice_dismissed() && ! $appsero->insights()->tracking_allowed() ) :
84
- $optin_url = add_query_arg( $appsero->slug . '_tracker_optin', 'true' );
85
- $margin_top = 'ha-py-5';
86
- ?>
87
- <div class="ha-row">
88
- <div class="ha-col ha-col-12">
89
- <div class="ha-cta ha-rounded">
90
- <div class="ha-row ha-align-items-center">
91
- <div class="ha-col-8">
92
- <h3 class="ha-feature-title">Call for Contributors</h3>
93
- <p class="f16">Are you interested to contribute to making this plugin more awesome?</p>
94
- <a class="link btn-how-to-contribute" href="#">How am I going to contribute?</a>
95
- <p class="ha-mb-0" style="display: none;">By allow Happy Elementor Addons to collect non-sensitive diagnostic data and usage information so that we can make sure optimum compatibility.
96
- Happy Elementor Addons collect - Server environment details (php, mysql, server, WordPress versions), Number of users in your site, Site language, Number of active and inactive plugins, Site name and url, Your name and email address. We are using Appsero to collect your data. <a href="https://appsero.com/privacy-policy/" target="_blank" style="color:#fff">Learn more</a> about how Appsero collects and handle your data.</p>
97
- </div>
98
- <div class="ha-cta-action ha-col-4 ha-align-right">
99
- <a class="btn-contribute" href="<?php echo esc_url( $optin_url ); ?>">I like to contribute</a>
100
- </div>
101
- </div>
102
- </div>
103
- </div>
104
- </div>
105
- <?php
106
- endif;
107
- endif;
108
- ?>
109
-
110
- <div class="ha-row <?php echo $margin_top; ?>">
111
- <div class="ha-col ha-col-6">
112
- <div class="ha-border-box ha-min-height-455">
113
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/support-call.svg" alt="">
114
- <h3 class="ha-feature-title ha-text-secondary">Support And Feedback</h3>
115
- <p class="f16">Feeling like to consult with an expert? Take live Chat support immediately from <a href="https://happyaddons.com/" target="_blank" rel="noopener">HappyAddons</a>. We are always ready to help you 24/7.</p>
116
- <p class="f16 ha-mb-2"><strong>Or if you’re facing technical issues with our plugin, then please create a support ticket</strong></p>
117
- <a class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://happyaddons.com/go/contact-support">Get Support</a>
118
- </div>
119
- </div>
120
- <div class="ha-col ha-col-6">
121
- <div class="ha-border-box ha-min-height-455">
122
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/newspaper.svg" alt="">
123
- <h3 class="ha-feature-title ha-text-primary">Newsletter Subscription</h3>
124
- <p class="f16">To get updated news, current offers, deals, and tips please subscribe to our Newsletters.</p>
125
- <a class="ha-btn ha-btn-primary" target="_blank" rel="noopener" href="https://happyaddons.com/go/subscribe">Subscribe Now</a>
126
- </div>
127
- </div>
128
- </div>
129
-
130
- <div class="ha-row ha-py-5 ha-align-items-center">
131
- <div class="ha-col ha-col-6">
132
- <img class="ha-img-fluid" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/art2.png" alt="">
133
- </div>
134
- <div class="ha-col ha-col-6">
135
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/cross-game.svg" alt="">
136
- <h3 class="ha-feature-title">Missing Any Feature?</h3>
137
- <p class="f16">Are you in need of a feature that’s not available in our plugin? Feel free to do a
138
- feature request from here,</p>
139
- <a class="ha-btn ha-btn-primary" target="_blank" rel="noopener" href="https://happyaddons.com/go/contact-support">Request Feature</a>
140
- </div>
141
- </div>
142
-
143
- <div class="ha-row ha-py-5">
144
- <div class="ha-col ha-col-12">
145
- <div class="ha-border-box">
146
- <div class="ha-row ha-align-items-center">
147
- <div class="ha-col ha-col-3" >
148
- <img class="ha-img-fluid ha-pr-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/c-icon.png" alt="">
149
- </div>
150
- <div class="ha-col ha-col-8">
151
- <h3 class="ha-feature-title ha-text-secondary ha-mt-0">Happy with Our Work?</h3>
152
- <p class="f16 ha-mb-2">We are really thankful to you that you have chosen our plugin. If our plugin brings a smile in your face while working, please share your happiness by giving us a 5***** rating in WordPress Org. It will make us happy and won’t take more than 2 mins.</p>
153
- <a class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://wordpress.org/support/plugin/happy-elementor-addons/reviews/?filter=5">I’m Happy to Give You 5*</a>
154
- </div>
155
- </div>
156
- </div>
157
- </div>
158
- </div>
159
- </div>
160
- </div>
1
+ <?php
2
+ /**
3
+ * Dashboard home tab template
4
+ */
5
+
6
+ defined( 'ABSPATH' ) || die();
7
+ ?>
8
+ <div class="ha-dashboard-panel">
9
+ <div class="ha-home-banner">
10
+ <div class="ha-home-banner__content">
11
+ <img class="ha-home-banner__logo" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/halogo.svg" alt="">
12
+ <span class="ha-home-banner__divider"></span>
13
+ <h2>Thanks a lot <br><span>for choosing HappyAddons</span></h2>
14
+ </div>
15
+ </div>
16
+ <div class="ha-home-body">
17
+ <div class="ha-row ha-py-5 ha-align-items-center">
18
+ <div class="ha-col ha-col-6">
19
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/knowledge.svg" alt="">
20
+ <h3 class="ha-feature-title">Knowledge & Wiki</h3>
21
+ <p class="f18">We have created full-proof documentation for you. It will help you to understand how our plugin works.</p>
22
+ <a class="ha-btn ha-btn-primary" target="_blank" rel="noopener" href="https://happyaddons.com/go/docs">Take Me to The Knowledge Page</a>
23
+ </div>
24
+ <div class="ha-col ha-col-6">
25
+ <img class="ha-img-fluid" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/art1.png" alt="">
26
+ </div>
27
+ </div>
28
+ <div class="ha-row ha-py-5 ha-pt-0">
29
+ <div class="ha-col ha-col-12">
30
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/film.svg" alt="">
31
+ <h3 class="ha-feature-title">Video Tutorial</h3>
32
+ <p class="f16">How to use Floating Effects and manage CSS Transform?</p>
33
+ </div>
34
+ <div class="ha-col ha-col-4">
35
+ <a href="https://www.youtube.com/watch?v=KSRaUaD30Jc" class="ha-feature-sub-title-a">
36
+ <img class="ha-img-fluid ha-rounded" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/crossdomain-video-cover.jpg" alt="">
37
+ <h4 class="ha-feature-sub-title">Cross Domain Copy Paste (Pro)</h4>
38
+ </a>
39
+ </div>
40
+ <div class="ha-col ha-col-4">
41
+ <a href="https://www.youtube.com/watch?v=LmtacsLcFPU" class="ha-feature-sub-title-a">
42
+ <img class="ha-img-fluid ha-rounded" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/translate-video-cover.jpg" alt="">
43
+ <h4 class="ha-feature-sub-title">Happy Effects - CSS Transform</h4>
44
+ </a>
45
+ </div>
46
+ <div class="ha-col ha-col-4">
47
+ <a href="https://www.youtube.com/watch?v=F33g3zqkeog" class="ha-feature-sub-title-a">
48
+ <img class="ha-img-fluid ha-rounded" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/floating-video-cover.jpg" alt="">
49
+ <h4 class="ha-feature-sub-title">Happy Effects - Floating Effects</h4>
50
+ </a>
51
+ </div>
52
+ <div class="ha-col ha-col-12 ha-align-center ha-pt-2">
53
+ <a class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://www.youtube.com/channel/UC1-e7ewkKB1Dao1U90QFQFA">View more videos</a>
54
+ </div>
55
+ </div>
56
+ <div class="ha-row ha-align-items-end ha-py-5 ha-pt-0">
57
+ <div class="ha-col ha-col-9">
58
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/faq.svg" alt="">
59
+ <h3 class="ha-feature-title ha-text-primary">FAQ</h3>
60
+ <p class="f16 ha-mb-0">Frequently Asked Questions</p>
61
+ </div>
62
+ <div class="ha-col ha-col-3 ha-align-right">
63
+ <a class="btn-more" target="_blank" rel="noopener" href="https://happyaddons.com/go/faq">Get More FAQ ></a>
64
+ </div>
65
+ <div class="ha-col ha-col-12">
66
+ <div class="ha-row">
67
+ <div class="ha-col ha-col-6 ha-pt-3">
68
+ <h4 class="f18">Can I use these addons in my client project?</h4>
69
+ <p class="ha-mb-0 f16">Yes, absolutely, no holds barred. Use it to bring colorful moments to your customers. And don’t forget to check out our premium features.</p>
70
+ </div>
71
+ <div class="ha-col ha-col-6 ha-pt-3">
72
+ <h4 class="f18">Is there any support policy available for the free users?</h4>
73
+ <p class="ha-mb-0 f16">Free or pro version, both comes with excellent support from us. However, pro users will get priority support.</p>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ </div>
78
+
79
+ <?php
80
+ $appsero = \Happy_Addons\Elementor\Base::instance()->appsero;
81
+ $margin_top = '';
82
+ if ( $appsero ) :
83
+ if ( ! $appsero->insights()->notice_dismissed() && ! $appsero->insights()->tracking_allowed() ) :
84
+ $optin_url = add_query_arg( $appsero->slug . '_tracker_optin', 'true' );
85
+ $margin_top = 'ha-py-5';
86
+ ?>
87
+ <div class="ha-row">
88
+ <div class="ha-col ha-col-12">
89
+ <div class="ha-cta ha-rounded">
90
+ <div class="ha-row ha-align-items-center">
91
+ <div class="ha-col-8">
92
+ <h3 class="ha-feature-title">Call for Contributors</h3>
93
+ <p class="f16">Are you interested to contribute to making this plugin more awesome?</p>
94
+ <a class="link btn-how-to-contribute" href="#">How am I going to contribute?</a>
95
+ <p class="ha-mb-0" style="display: none;">By allow Happy Elementor Addons to collect non-sensitive diagnostic data and usage information so that we can make sure optimum compatibility.
96
+ Happy Elementor Addons collect - Server environment details (php, mysql, server, WordPress versions), Number of users in your site, Site language, Number of active and inactive plugins, Site name and url, Your name and email address. We are using Appsero to collect your data. <a href="https://appsero.com/privacy-policy/" target="_blank" style="color:#fff">Learn more</a> about how Appsero collects and handle your data.</p>
97
+ </div>
98
+ <div class="ha-cta-action ha-col-4 ha-align-right">
99
+ <a class="btn-contribute" href="<?php echo esc_url( $optin_url ); ?>">I like to contribute</a>
100
+ </div>
101
+ </div>
102
+ </div>
103
+ </div>
104
+ </div>
105
+ <?php
106
+ endif;
107
+ endif;
108
+ ?>
109
+
110
+ <div class="ha-row <?php echo $margin_top; ?>">
111
+ <div class="ha-col ha-col-6">
112
+ <div class="ha-border-box ha-min-height-455">
113
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/support-call.svg" alt="">
114
+ <h3 class="ha-feature-title ha-text-secondary">Support And Feedback</h3>
115
+ <p class="f16">Feeling like to consult with an expert? Take live Chat support immediately from <a href="https://happyaddons.com/" target="_blank" rel="noopener">HappyAddons</a>. We are always ready to help you 24/7.</p>
116
+ <p class="f16 ha-mb-2"><strong>Or if you’re facing technical issues with our plugin, then please create a support ticket</strong></p>
117
+ <a class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://happyaddons.com/go/contact-support">Get Support</a>
118
+ </div>
119
+ </div>
120
+ <div class="ha-col ha-col-6">
121
+ <div class="ha-border-box ha-min-height-455">
122
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/newspaper.svg" alt="">
123
+ <h3 class="ha-feature-title ha-text-primary">Newsletter Subscription</h3>
124
+ <p class="f16">To get updated news, current offers, deals, and tips please subscribe to our Newsletters.</p>
125
+ <a class="ha-btn ha-btn-primary" target="_blank" rel="noopener" href="https://happyaddons.com/go/subscribe">Subscribe Now</a>
126
+ </div>
127
+ </div>
128
+ </div>
129
+
130
+ <div class="ha-row ha-py-5 ha-align-items-center">
131
+ <div class="ha-col ha-col-6">
132
+ <img class="ha-img-fluid" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/art2.png" alt="">
133
+ </div>
134
+ <div class="ha-col ha-col-6">
135
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/cross-game.svg" alt="">
136
+ <h3 class="ha-feature-title">Missing Any Feature?</h3>
137
+ <p class="f16">Are you in need of a feature that’s not available in our plugin? Feel free to do a
138
+ feature request from here,</p>
139
+ <a class="ha-btn ha-btn-primary" target="_blank" rel="noopener" href="https://happyaddons.com/go/contact-support">Request Feature</a>
140
+ </div>
141
+ </div>
142
+
143
+ <div class="ha-row ha-py-5">
144
+ <div class="ha-col ha-col-12">
145
+ <div class="ha-border-box">
146
+ <div class="ha-row ha-align-items-center">
147
+ <div class="ha-col ha-col-3" >
148
+ <img class="ha-img-fluid ha-pr-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/c-icon.png" alt="">
149
+ </div>
150
+ <div class="ha-col ha-col-8">
151
+ <h3 class="ha-feature-title ha-text-secondary ha-mt-0">Happy with Our Work?</h3>
152
+ <p class="f16 ha-mb-2">We are really thankful to you that you have chosen our plugin. If our plugin brings a smile in your face while working, please share your happiness by giving us a 5***** rating in WordPress Org. It will make us happy and won’t take more than 2 mins.</p>
153
+ <a class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://wordpress.org/support/plugin/happy-elementor-addons/reviews/?filter=5">I’m Happy to Give You 5*</a>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </div>
templates/admin/dashboard-main.php CHANGED
@@ -1,71 +1,71 @@
1
- <?php
2
- /**
3
- * Dashboard main template
4
- */
5
-
6
- defined( 'ABSPATH' ) || die();
7
- ?>
8
- <div class="wrap">
9
- <h1 class="screen-reader-text"><?php esc_html_e( 'Happy Elementor Addons', 'happy-elementor-addons' ); ?></h1>
10
- <form class="ha-dashboard" id="ha-dashboard-form">
11
- <div class="ha-dashboard-tabs" role="tablist">
12
- <div class="ha-dashboard-tabs__nav">
13
- <?php
14
- $tab_count = 1;
15
- foreach ( self::get_tabs() as $slug => $data ) :
16
- $slug = esc_attr( strtolower( $slug ) );
17
- $class = 'ha-dashboard-tabs__nav-item ha-dashboard-tabs__nav-item--' . $slug;
18
-
19
- if ( empty( $data['renderer'] ) || ! is_callable( $data['renderer'] ) ) {
20
- $class .= ' nav-item-is--link';
21
- }
22
-
23
- if ( $tab_count === 1 ) {
24
- $class .= ' tab--is-active';
25
- }
26
-
27
- if ( ! empty( $data['href'] ) ) {
28
- $href = esc_url( $data['href'] );
29
- } else {
30
- $href = '#' . $slug;
31
- }
32
-
33
- printf( '<a href="%1$s" aria-controls="tab-content-%2$s" id="tab-nav-%2$s" class="%3$s" role="tab">%4$s</a>',
34
- $href,
35
- $slug,
36
- $class,
37
- isset( $data['title'] ) ? $data['title'] : sprintf( esc_html__( 'Tab %s', 'happy-elementor-addons' ), $tab_count )
38
- );
39
-
40
- ++$tab_count;
41
- endforeach;
42
- ?>
43
-
44
- <button disabled class="ha-dashboard-tabs__nav-btn ha-dashboard-btn ha-dashboard-btn--lg ha-dashboard-btn--save" type="submit"><?php esc_html_e( 'Save Settings', 'happy-elementor-addons' ); ?></button>
45
- </div>
46
- <div class="ha-dashboard-tabs__content">
47
- <?php
48
- $tab_count = 1;
49
- foreach ( self::get_tabs() as $slug => $data ) :
50
- if ( empty( $data['renderer'] ) || ! is_callable( $data['renderer'] ) ) {
51
- continue;
52
- }
53
-
54
- $class = 'ha-dashboard-tabs__content-item';
55
- if ( $tab_count === 1 ) {
56
- $class .= ' tab--is-active';
57
- }
58
-
59
- $slug = esc_attr( strtolower( $slug ) );
60
- ?>
61
- <div class="<?php echo $class; ?>" id="tab-content-<?php echo $slug; ?>" role="tabpanel" aria-labelledby="tab-nav-<?php echo $slug; ?>">
62
- <?php call_user_func( $data['renderer'], $slug, $data ); ?>
63
- </div>
64
- <?php
65
- ++$tab_count;
66
- endforeach;
67
- ?>
68
- </div>
69
- </div>
70
- </form>
71
- </div>
1
+ <?php
2
+ /**
3
+ * Dashboard main template
4
+ */
5
+
6
+ defined( 'ABSPATH' ) || die();
7
+ ?>
8
+ <div class="wrap">
9
+ <h1 class="screen-reader-text"><?php esc_html_e( 'Happy Elementor Addons', 'happy-elementor-addons' ); ?></h1>
10
+ <form class="ha-dashboard" id="ha-dashboard-form">
11
+ <div class="ha-dashboard-tabs" role="tablist">
12
+ <div class="ha-dashboard-tabs__nav">
13
+ <?php
14
+ $tab_count = 1;
15
+ foreach ( self::get_tabs() as $slug => $data ) :
16
+ $slug = esc_attr( strtolower( $slug ) );
17
+ $class = 'ha-dashboard-tabs__nav-item ha-dashboard-tabs__nav-item--' . $slug;
18
+
19
+ if ( empty( $data['renderer'] ) || ! is_callable( $data['renderer'] ) ) {
20
+ $class .= ' nav-item-is--link';
21
+ }
22
+
23
+ if ( $tab_count === 1 ) {
24
+ $class .= ' tab--is-active';
25
+ }
26
+
27
+ if ( ! empty( $data['href'] ) ) {
28
+ $href = esc_url( $data['href'] );
29
+ } else {
30
+ $href = '#' . $slug;
31
+ }
32
+
33
+ printf( '<a href="%1$s" aria-controls="tab-content-%2$s" id="tab-nav-%2$s" class="%3$s" role="tab">%4$s</a>',
34
+ $href,
35
+ $slug,
36
+ $class,
37
+ isset( $data['title'] ) ? $data['title'] : sprintf( esc_html__( 'Tab %s', 'happy-elementor-addons' ), $tab_count )
38
+ );
39
+
40
+ ++$tab_count;
41
+ endforeach;
42
+ ?>
43
+
44
+ <button disabled class="ha-dashboard-tabs__nav-btn ha-dashboard-btn ha-dashboard-btn--lg ha-dashboard-btn--save" type="submit"><?php esc_html_e( 'Save Settings', 'happy-elementor-addons' ); ?></button>
45
+ </div>
46
+ <div class="ha-dashboard-tabs__content">
47
+ <?php
48
+ $tab_count = 1;
49
+ foreach ( self::get_tabs() as $slug => $data ) :
50
+ if ( empty( $data['renderer'] ) || ! is_callable( $data['renderer'] ) ) {
51
+ continue;
52
+ }
53
+
54
+ $class = 'ha-dashboard-tabs__content-item';
55
+ if ( $tab_count === 1 ) {
56
+ $class .= ' tab--is-active';
57
+ }
58
+
59
+ $slug = esc_attr( strtolower( $slug ) );
60
+ ?>
61
+ <div class="<?php echo $class; ?>" id="tab-content-<?php echo $slug; ?>" role="tabpanel" aria-labelledby="tab-nav-<?php echo $slug; ?>">
62
+ <?php call_user_func( $data['renderer'], $slug, $data ); ?>
63
+ </div>
64
+ <?php
65
+ ++$tab_count;
66
+ endforeach;
67
+ ?>
68
+ </div>
69
+ </div>
70
+ </form>
71
+ </div>
templates/admin/dashboard-pro.php CHANGED
@@ -1,93 +1,93 @@
1
- <?php
2
- /**
3
- * Dashboard pro tab template
4
- */
5
-
6
- defined( 'ABSPATH' ) || die();
7
- ?>
8
- <div class="ha-dashboard-panel">
9
- <div class="ha-home-banner">
10
- <div class="ha-home-banner__content">
11
- <img class="ha-home-banner__logo" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/halogo.svg" alt="">
12
- <span class="ha-home-banner__divider"></span>
13
- <h2><span>What's Inside </span><br>The HappyAddons Pro</h2>
14
- </div>
15
- </div>
16
- <div class="ha-home-body">
17
- <div class="ha-row ha-py-5 ha-align-items-center ha-align-center">
18
- <div class="ha-col ha-col-12">
19
- <div class="ha-badge">PRO</div>
20
- <h2 class="ha-section-title ha-text-primary">Features</h2>
21
- </div>
22
- </div>
23
-
24
- <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center">
25
- <div class="ha-col ha-col-6">
26
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/cross-domain.svg" alt="">
27
- <h3 class="ha-feature-title">Cross Domain Copy Paste</h3>
28
- <p class="f18">Do Cross-Domain Widget Copy Paste within different websites!
29
- You can easily copy any widgets from your previously designed website and paste it to your newly created website.
30
- </p>
31
- </div>
32
- <div class="ha-col ha-col-6">
33
- <img class="ha-img-fluid ha-pl-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/pa-1.png" alt="">
34
- </div>
35
- </div>
36
-
37
- <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center">
38
- <div class="ha-col ha-col-6">
39
- <img class="ha-img-fluid ha-pr-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/pa-2.png" alt="">
40
- </div>
41
- <div class="ha-col ha-col-6">
42
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/preset.svg" alt="">
43
- <h3 class="ha-feature-title">Preset</h3>
44
- <p class="f16">400+ Preset Library for Widgets with Drop Down facility. Experience the Instagram Photo Editing like experience in Elementor!</p>
45
- </div>
46
- </div>
47
-
48
- <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center">
49
- <div class="ha-col ha-col-6">
50
- <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/nesting.svg" alt="">
51
- <h3 class="ha-feature-title">Unlimited Section Nesting</h3>
52
- <p class="f18">Don’t you wish to use multiple sections at the same time in Elementor? With HappyAddons, now you can. Create as many sections as you want and organize your elements more effectively.</p>
53
- </div>
54
- <div class="ha-col ha-col-6">
55
- <img class="ha-img-fluid ha-pl-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/pa-3.png" alt="">
56
- </div>
57
- </div>
58
-
59
- <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center ha-align-center">
60
- <div class="ha-col ha-col-12">
61
- <div class="ha-badge">PRO</div>
62
- <h2 class="ha-section-title ha-text-primary">Widgets</h2>
63
- </div>
64
- </div>
65
-
66
- <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center ha-align-center">
67
- <?php
68
- $pro_widgets = \Happy_Addons\Elementor\Widgets_Manager::get_pro_widget_map();
69
-
70
- foreach ( $pro_widgets as $widget ) :
71
- $title = isset( $widget['title'] ) ? $widget['title'] : 'Widget Title';
72
- $icon = isset( $widget['icon'] ) ? $widget['icon'] : 'hm hm-happyaddons';
73
- $demo = isset( $widget['demo'] ) ? $widget['demo'] : 'https://happyaddons.com/go/get-pro';
74
- ?>
75
- <div class="ha-col ha-col-3">
76
- <a class="ha-pro-widget" href="<?php echo esc_url( $demo ); ?>" target="_blank" rel="noopener"><i class="<?php echo $icon; ?>"></i> <?php echo $title; ?></a>
77
- </div>
78
- <?php
79
- endforeach;
80
- ?>
81
- </div>
82
-
83
- <hr>
84
-
85
- <div class="ha-row ha-py-5 ha-pt-0- ha-align-items-center ha-align-center">
86
- <div class="ha-col ha-col-12">
87
- <h2 class="ha-feature-title ha-mb-3">Get Pro and Experience all those exciting features and widgets</h2>
88
- <a style="padding: 20px 40px" class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://happyaddons.com/go/get-pro">GET PRO</a>
89
- </div>
90
- </div>
91
-
92
- </div>
93
- </div>
1
+ <?php
2
+ /**
3
+ * Dashboard pro tab template
4
+ */
5
+
6
+ defined( 'ABSPATH' ) || die();
7
+ ?>
8
+ <div class="ha-dashboard-panel">
9
+ <div class="ha-home-banner">
10
+ <div class="ha-home-banner__content">
11
+ <img class="ha-home-banner__logo" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/halogo.svg" alt="">
12
+ <span class="ha-home-banner__divider"></span>
13
+ <h2><span>What's Inside </span><br>The HappyAddons Pro</h2>
14
+ </div>
15
+ </div>
16
+ <div class="ha-home-body">
17
+ <div class="ha-row ha-py-5 ha-align-items-center ha-align-center">
18
+ <div class="ha-col ha-col-12">
19
+ <div class="ha-badge">PRO</div>
20
+ <h2 class="ha-section-title ha-text-primary">Features</h2>
21
+ </div>
22
+ </div>
23
+
24
+ <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center">
25
+ <div class="ha-col ha-col-6">
26
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/cross-domain.svg" alt="">
27
+ <h3 class="ha-feature-title">Cross Domain Copy Paste</h3>
28
+ <p class="f18">Do Cross-Domain Widget Copy Paste within different websites!
29
+ You can easily copy any widgets from your previously designed website and paste it to your newly created website.
30
+ </p>
31
+ </div>
32
+ <div class="ha-col ha-col-6">
33
+ <img class="ha-img-fluid ha-pl-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/pa-1.png" alt="">
34
+ </div>
35
+ </div>
36
+
37
+ <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center">
38
+ <div class="ha-col ha-col-6">
39
+ <img class="ha-img-fluid ha-pr-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/pa-2.png" alt="">
40
+ </div>
41
+ <div class="ha-col ha-col-6">
42
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/preset.svg" alt="">
43
+ <h3 class="ha-feature-title">Preset</h3>
44
+ <p class="f16">400+ Preset Library for Widgets with Drop Down facility. Experience the Instagram Photo Editing like experience in Elementor!</p>
45
+ </div>
46
+ </div>
47
+
48
+ <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center">
49
+ <div class="ha-col ha-col-6">
50
+ <img class="ha-img-fluid ha-title-icon-size" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/nesting.svg" alt="">
51
+ <h3 class="ha-feature-title">Unlimited Section Nesting</h3>
52
+ <p class="f18">Don’t you wish to use multiple sections at the same time in Elementor? With HappyAddons, now you can. Create as many sections as you want and organize your elements more effectively.</p>
53
+ </div>
54
+ <div class="ha-col ha-col-6">
55
+ <img class="ha-img-fluid ha-pl-2" src="<?php echo HAPPY_ADDONS_ASSETS; ?>imgs/admin/pa-3.png" alt="">
56
+ </div>
57
+ </div>
58
+
59
+ <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center ha-align-center">
60
+ <div class="ha-col ha-col-12">
61
+ <div class="ha-badge">PRO</div>
62
+ <h2 class="ha-section-title ha-text-primary">Widgets</h2>
63
+ </div>
64
+ </div>
65
+
66
+ <div class="ha-row ha-py-5 ha-pt-0 ha-align-items-center ha-align-center">
67
+ <?php
68
+ $pro_widgets = \Happy_Addons\Elementor\Widgets_Manager::get_pro_widget_map();
69
+
70
+ foreach ( $pro_widgets as $widget ) :
71
+ $title = isset( $widget['title'] ) ? $widget['title'] : 'Widget Title';
72
+ $icon = isset( $widget['icon'] ) ? $widget['icon'] : 'hm hm-happyaddons';
73
+ $demo = isset( $widget['demo'] ) ? $widget['demo'] : 'https://happyaddons.com/go/get-pro';
74
+ ?>
75
+ <div class="ha-col ha-col-3">
76
+ <a class="ha-pro-widget" href="<?php echo esc_url( $demo ); ?>" target="_blank" rel="noopener"><i class="<?php echo $icon; ?>"></i> <?php echo $title; ?></a>
77
+ </div>
78
+ <?php
79
+ endforeach;
80
+ ?>
81
+ </div>
82
+
83
+ <hr>
84
+
85
+ <div class="ha-row ha-py-5 ha-pt-0- ha-align-items-center ha-align-center">
86
+ <div class="ha-col ha-col-12">
87
+ <h2 class="ha-feature-title ha-mb-3">Get Pro and Experience all those exciting features and widgets</h2>
88
+ <a style="padding: 20px 40px" class="ha-btn ha-btn-secondary" target="_blank" rel="noopener" href="https://happyaddons.com/go/get-pro">GET PRO</a>
89
+ </div>
90
+ </div>
91
+
92
+ </div>
93
+ </div>
widgets/bar-chart/classes/data-map.php CHANGED
@@ -1,178 +1,178 @@
1
- <?php
2
- /**
3
- * Chart widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Widget\Bar_Chart;
8
-
9
- defined( 'ABSPATH' ) || die();
10
-
11
-
12
- class Data_Map {
13
-
14
- public static function initial($settings) {
15
- $data_settings = json_encode(
16
- [
17
- 'type' => $settings['chart_position'],
18
- 'data' => [
19
- 'labels' => explode(',', esc_html( $settings['labels'] ) ),
20
- 'datasets' => self::chart_dataset($settings),
21
- ],
22
- 'options' => self::chart_options($settings)
23
- ]
24
- );
25
- return $data_settings;
26
- }
27
-
28
- public static function chart_dataset($settings) {
29
-
30
- $datasets = [];
31
- $items = $settings['chart_data'];
32
-
33
- if ( !empty( $items ) ) {
34
- foreach ( $items as $item ) {
35
- $item['label'] = !empty( $item['label'] ) ? esc_html( $item['label'] ) : '';
36
- $item['data'] = !empty( $item['data'] ) ? array_map( 'trim', explode(',', $item['data'] ) ) : '';
37
- $item['backgroundColor'] = !empty( $item['background_color'] ) ? $item['background_color'] : 'rgba(86, 45, 212, 0.7)';
38
- $item['hoverBackgroundColor'] = !empty( $item['background_hover_color'] ) ? $item['background_hover_color'] : '#562dd4';
39
- $item['borderColor'] = !empty( $item['border_color'] ) ? $item['border_color'] : '#602edc';
40
- $item['hoverBorderColor'] = !empty( $item['border_hover_color'] ) ? $item['border_hover_color'] : '#602edc';
41
- $item['borderWidth'] = ( $settings['bar_border_width']['size'] !== '' ) ? $settings['bar_border_width']['size'] : 1;
42
-
43
- $datasets[] = $item;
44
- }
45
- }
46
-
47
- return $datasets;
48
- }
49
-
50
-
51
- public static function chart_options($settings) {
52
-
53
- $xaxes_labels_display = $settings['xaxes_labels_display'] == 'yes' ? true : false;
54
- $yaxes_labels_display = $settings['yaxes_labels_display'] == 'yes' ? true : false;
55
- $tooltips_display = $settings['tooltip_display'] == 'yes' ? true : false;
56
- $legend_display = $settings['legend_display'] == 'yes' ? true : false;
57
- $xaxes_grid_display = $settings['xaxes_grid_display'] == 'yes' ? true : false;
58
- $yaxes_grid_display = $settings['yaxes_grid_display'] == 'yes' ? true : false;
59
- $title_display = $settings['title_display'] == 'yes' ? true : false;
60
-
61
- $legend_style = [
62
- 'boxWidth' => !empty( $settings['legend_box_width']['size'] ) ? $settings['legend_box_width']['size'] : 45,
63
- 'fontFamily' => !empty( $settings['legend_font_family'] ) ? $settings['legend_font_family'] : 'auto',
64
- 'fontSize' => !empty( $settings['legend_font_size']['size'] ) ? $settings['legend_font_size']['size'] : 12,
65
- 'fontStyle' => (!empty( $settings['legend_font_style'] ) ? $settings['legend_font_style'] : '') . ' ' . (!empty( $settings['legend_font_weight'] ) ? $settings['legend_font_weight'] : ''),
66
- 'fontColor' => !empty( $settings['legend_font_color'] ) ? $settings['legend_font_color'] : '#222',
67
- ];
68
-
69
- $tooltip = [
70
- 'enabled' => $tooltips_display,
71
- 'backgroundColor' => !empty( $settings['tooltip_background_color'] ) ? $settings['tooltip_background_color'] : 'rgba(0, 0, 0, .7)',
72
- 'borderWidth' => !empty( $settings['tooltip_border_width']['size'] ) ? $settings['tooltip_border_width']['size'] : 0,
73
- 'borderColor' => !empty( $settings['tooltip_border_color'] ) ? $settings['tooltip_border_color'] : 'rgba(0, 0, 0, 0.1)',
74
- 'titleFontFamily' => !empty( $settings['tooltip_title_font_family'] ) ? $settings['tooltip_title_font_family'] : 'auto',
75
- 'titleFontSize' => !empty( $settings['tooltip_title_font_size']['size'] ) ? $settings['tooltip_title_font_size']['size'] : 12,
76
- 'titleFontStyle' => (!empty( $settings['tooltip_title_font_style'] ) ? $settings['tooltip_title_font_style'] : '') . ' ' . (!empty( $settings['tooltip_title_font_weight'] ) ? $settings['tooltip_title_font_weight'] : ''),
77
- 'titleFontColor' => !empty( $settings['tooltip_title_font_color'] ) ? $settings['tooltip_title_font_color'] : '#fff',
78
- 'bodyFontFamily' => !empty( $settings['tooltip_body_font_family'] ) ? $settings['tooltip_body_font_family'] : 'auto',
79
- 'bodyFontSize' => !empty( $settings['tooltip_body_font_size']['size'] ) ? $settings['tooltip_body_font_size']['size'] : 11,
80
- 'bodyFontStyle' => (!empty( $settings['tooltip_body_font_style'] ) ? $settings['tooltip_body_font_style'] : '') . ' ' . (!empty( $settings['tooltip_body_font_weight'] ) ? $settings['tooltip_body_font_weight'] : ''),
81
- 'bodyFontColor' => !empty( $settings['tooltip_body_font_color'] ) ? $settings['tooltip_body_font_color'] : '#f7f7f7',
82
- 'cornerRadius' => !empty( $settings['tooltip_border_radius']['size'] ) ? $settings['tooltip_border_radius']['size'] : 6,
83
- 'xPadding' => !empty( $settings['tooltip_padding']['size'] ) ? $settings['tooltip_padding']['size'] : 6,
84
- 'yPadding' => !empty( $settings['tooltip_padding']['size'] ) ? $settings['tooltip_padding']['size'] : 6,
85
- 'caretSize' => !empty( $settings['tooltip_caret_size']['size'] ) ? $settings['tooltip_caret_size']['size'] : 5,
86
- 'mode' => !empty( $settings['tooltip_mode'] ) ? $settings['tooltip_mode'] : 'nearest',
87
- ];
88
-
89
- if ( $xaxes_grid_display == 'yes' ) {
90
- $xaxes_gridLines = [
91
- 'drawBorder' => false,
92
- 'color' => isset( $settings['grid_color'] ) ? $settings['grid_color'] : '#eeeeee',
93
- ];
94
- } else {
95
- $xaxes_gridLines = [];
96
- }
97
-
98
- if ( $yaxes_grid_display == 'yes' ) {
99
- $yaxes_gridLines = [
100
- 'drawBorder' => false,
101
- 'color' => isset( $settings['grid_color'] ) ? $settings['grid_color'] : '#eeeeee',
102
- ];
103
- } else {
104
- $yaxes_gridLines = [];
105
- }
106
-
107
- $options = [
108
- 'title' => [
109
- 'display' => $title_display,
110
- 'text' => $settings['chart_title'],
111
- 'fontFamily' => !empty( $settings['title_font_family'] ) ? $settings['title_font_family'] : 'auto',
112
- 'fontSize' => !empty( $settings['title_font_size']['size'] ) ? $settings['title_font_size']['size'] : 18,
113
- 'fontStyle' => (!empty( $settings['title_font_style'] ) ? $settings['title_font_style'] : '') . ' ' . (!empty( $settings['title_font_weight'] ) ? $settings['title_font_weight'] : ''),
114
- 'fontColor' => !empty( $settings['title_font_color'] ) ? $settings['title_font_color'] : '#222',
115
- ],
116
- 'tooltips' => $tooltip,
117
- 'legend' => [
118
- 'display' => $legend_display,
119
- 'position' => !empty( $settings['legend_position'] ) ? $settings['legend_position'] : 'top',
120
- 'reverse' => $settings['legend_reverse'] == 'yes' ? true : false,
121
- 'labels' => $legend_style,
122
- ],
123
- 'animation' => [
124
- 'easing' => $settings['animation_options'],
125
- 'duration' => $settings['chart_animation_duration'],
126
- ],
127
- 'layout' => [
128
- 'padding' => [
129
- 'top' => $settings['layout_padding']['top'],
130
- 'right' => $settings['layout_padding']['right'],
131
- 'bottom' => $settings['layout_padding']['bottom'],
132
- 'left' => $settings['layout_padding']['left']
133
- ]
134
- ],
135
- 'maintainAspectRatio' => false,
136
- 'scales' => [
137
- 'xAxes' => [
138
- [
139
- 'ticks' => [
140
- 'display' => $xaxes_labels_display,
141
- 'beginAtZero' => true,
142
- 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 10,
143
- 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 1,
144
- 'fontFamily' => !empty( $settings['labels_xaxes_font_family'] ) ? $settings['labels_xaxes_font_family'] : 'auto',
145
- 'fontSize' => !empty( $settings['labels_xaxes_font_size']['size'] ) ? $settings['labels_xaxes_font_size']['size'] : 12,
146
- 'fontStyle' => (!empty( $settings['labels_xaxes_font_style'] ) ? $settings['labels_xaxes_font_style'] : '') . ' ' . (!empty( $settings['labels_xaxes_font_weight'] ) ? $settings['labels_xaxes_font_weight'] : ''),
147
- 'fontColor' => !empty( $settings['labels_xaxes_font_color'] ) ? $settings['labels_xaxes_font_color'] : '#222',
148
- 'padding' => !empty( $settings['labels_padding']['size'] ) ? $settings['labels_padding']['size'] : 10,
149
- ],
150
- 'gridLines' => $xaxes_gridLines,
151
- 'barPercentage' => ( $settings['bar_width']['size'] !== '' ) ? $settings['bar_width']['size'] / 100 : '',
152
- 'categoryPercentage' => ( $settings['category_width']['size'] !== '' ) ? $settings['category_width']['size'] / 100 : '',
153
- ]
154
- ],
155
- 'yAxes' => [
156
- [
157
- 'ticks' => [
158
- 'display' => $yaxes_labels_display,
159
- 'beginAtZero' => true,
160
- 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 10,
161
- 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 1,
162
- 'fontFamily' => !empty( $settings['labels_yaxes_font_family'] ) ? $settings['labels_yaxes_font_family'] : 'auto',
163
- 'fontSize' => !empty( $settings['labels_yaxes_font_size']['size'] ) ? $settings['labels_yaxes_font_size']['size'] : 12,
164
- 'fontStyle' => (!empty( $settings['labels_yaxes_font_style'] ) ? $settings['labels_yaxes_font_style'] : '') . ' ' . (!empty( $settings['labels_yaxes_font_weight'] ) ? $settings['labels_yaxes_font_weight'] : ''),
165
- 'fontColor' => !empty( $settings['labels_yaxes_font_color'] ) ? $settings['labels_yaxes_font_color'] : '#222',
166
- 'padding' => !empty( $settings['labels_padding']['size'] ) ? $settings['labels_padding']['size'] : 10,
167
- ],
168
- 'gridLines' => $yaxes_gridLines,
169
- 'barPercentage' => ( $settings['bar_width']['size'] !== '' ) ? $settings['bar_width']['size'] / 100 : '',
170
- 'categoryPercentage' => ( $settings['category_width']['size'] !== '' ) ? $settings['category_width']['size'] / 100 : '',
171
- ]
172
- ],
173
- ],
174
- ];
175
-
176
- return $options;
177
- }
178
- }
1
+ <?php
2
+ /**
3
+ * Chart widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget\Bar_Chart;
8
+
9
+ defined( 'ABSPATH' ) || die();
10
+
11
+
12
+ class Data_Map {
13
+
14
+ public static function initial($settings) {
15
+ $data_settings = json_encode(
16
+ [
17
+ 'type' => $settings['chart_position'],
18
+ 'data' => [
19
+ 'labels' => explode(',', esc_html( $settings['labels'] ) ),
20
+ 'datasets' => self::chart_dataset($settings),
21
+ ],
22
+ 'options' => self::chart_options($settings)
23
+ ]
24
+ );
25
+ return $data_settings;
26
+ }
27
+
28
+ public static function chart_dataset($settings) {
29
+
30
+ $datasets = [];
31
+ $items = $settings['chart_data'];
32
+
33
+ if ( !empty( $items ) ) {
34
+ foreach ( $items as $item ) {
35
+ $item['label'] = !empty( $item['label'] ) ? esc_html( $item['label'] ) : '';
36
+ $item['data'] = !empty( $item['data'] ) ? array_map( 'trim', explode(',', $item['data'] ) ) : '';
37
+ $item['backgroundColor'] = !empty( $item['background_color'] ) ? $item['background_color'] : 'rgba(86, 45, 212, 0.7)';
38
+ $item['hoverBackgroundColor'] = !empty( $item['background_hover_color'] ) ? $item['background_hover_color'] : '#562dd4';
39
+ $item['borderColor'] = !empty( $item['border_color'] ) ? $item['border_color'] : '#602edc';
40
+ $item['hoverBorderColor'] = !empty( $item['border_hover_color'] ) ? $item['border_hover_color'] : '#602edc';
41
+ $item['borderWidth'] = ( $settings['bar_border_width']['size'] !== '' ) ? $settings['bar_border_width']['size'] : 1;
42
+
43
+ $datasets[] = $item;
44
+ }
45
+ }
46
+
47
+ return $datasets;
48
+ }
49
+
50
+
51
+ public static function chart_options($settings) {
52
+
53
+ $xaxes_labels_display = $settings['xaxes_labels_display'] == 'yes' ? true : false;
54
+ $yaxes_labels_display = $settings['yaxes_labels_display'] == 'yes' ? true : false;
55
+ $tooltips_display = $settings['tooltip_display'] == 'yes' ? true : false;
56
+ $legend_display = $settings['legend_display'] == 'yes' ? true : false;
57
+ $xaxes_grid_display = $settings['xaxes_grid_display'] == 'yes' ? true : false;
58
+ $yaxes_grid_display = $settings['yaxes_grid_display'] == 'yes' ? true : false;
59
+ $title_display = $settings['title_display'] == 'yes' ? true : false;
60
+
61
+ $legend_style = [
62
+ 'boxWidth' => !empty( $settings['legend_box_width']['size'] ) ? $settings['legend_box_width']['size'] : 45,
63
+ 'fontFamily' => !empty( $settings['legend_font_family'] ) ? $settings['legend_font_family'] : 'auto',
64
+ 'fontSize' => !empty( $settings['legend_font_size']['size'] ) ? $settings['legend_font_size']['size'] : 12,
65
+ 'fontStyle' => (!empty( $settings['legend_font_style'] ) ? $settings['legend_font_style'] : '') . ' ' . (!empty( $settings['legend_font_weight'] ) ? $settings['legend_font_weight'] : ''),
66
+ 'fontColor' => !empty( $settings['legend_font_color'] ) ? $settings['legend_font_color'] : '#222',
67
+ ];
68
+
69
+ $tooltip = [
70
+ 'enabled' => $tooltips_display,
71
+ 'backgroundColor' => !empty( $settings['tooltip_background_color'] ) ? $settings['tooltip_background_color'] : 'rgba(0, 0, 0, .7)',
72
+ 'borderWidth' => !empty( $settings['tooltip_border_width']['size'] ) ? $settings['tooltip_border_width']['size'] : 0,
73
+ 'borderColor' => !empty( $settings['tooltip_border_color'] ) ? $settings['tooltip_border_color'] : 'rgba(0, 0, 0, 0.1)',
74
+ 'titleFontFamily' => !empty( $settings['tooltip_title_font_family'] ) ? $settings['tooltip_title_font_family'] : 'auto',
75
+ 'titleFontSize' => !empty( $settings['tooltip_title_font_size']['size'] ) ? $settings['tooltip_title_font_size']['size'] : 12,
76
+ 'titleFontStyle' => (!empty( $settings['tooltip_title_font_style'] ) ? $settings['tooltip_title_font_style'] : '') . ' ' . (!empty( $settings['tooltip_title_font_weight'] ) ? $settings['tooltip_title_font_weight'] : ''),
77
+ 'titleFontColor' => !empty( $settings['tooltip_title_font_color'] ) ? $settings['tooltip_title_font_color'] : '#fff',
78
+ 'bodyFontFamily' => !empty( $settings['tooltip_body_font_family'] ) ? $settings['tooltip_body_font_family'] : 'auto',
79
+ 'bodyFontSize' => !empty( $settings['tooltip_body_font_size']['size'] ) ? $settings['tooltip_body_font_size']['size'] : 11,
80
+ 'bodyFontStyle' => (!empty( $settings['tooltip_body_font_style'] ) ? $settings['tooltip_body_font_style'] : '') . ' ' . (!empty( $settings['tooltip_body_font_weight'] ) ? $settings['tooltip_body_font_weight'] : ''),
81
+ 'bodyFontColor' => !empty( $settings['tooltip_body_font_color'] ) ? $settings['tooltip_body_font_color'] : '#f7f7f7',
82
+ 'cornerRadius' => !empty( $settings['tooltip_border_radius']['size'] ) ? $settings['tooltip_border_radius']['size'] : 6,
83
+ 'xPadding' => !empty( $settings['tooltip_padding']['size'] ) ? $settings['tooltip_padding']['size'] : 6,
84
+ 'yPadding' => !empty( $settings['tooltip_padding']['size'] ) ? $settings['tooltip_padding']['size'] : 6,
85
+ 'caretSize' => !empty( $settings['tooltip_caret_size']['size'] ) ? $settings['tooltip_caret_size']['size'] : 5,
86
+ 'mode' => !empty( $settings['tooltip_mode'] ) ? $settings['tooltip_mode'] : 'nearest',
87
+ ];
88
+
89
+ if ( $xaxes_grid_display == 'yes' ) {
90
+ $xaxes_gridLines = [
91
+ 'drawBorder' => false,
92
+ 'color' => isset( $settings['grid_color'] ) ? $settings['grid_color'] : '#eeeeee',
93
+ ];
94
+ } else {
95
+ $xaxes_gridLines = [];
96
+ }
97
+
98
+ if ( $yaxes_grid_display == 'yes' ) {
99
+ $yaxes_gridLines = [
100
+ 'drawBorder' => false,
101
+ 'color' => isset( $settings['grid_color'] ) ? $settings['grid_color'] : '#eeeeee',
102
+ ];
103
+ } else {
104
+ $yaxes_gridLines = [];
105
+ }
106
+
107
+ $options = [
108
+ 'title' => [
109
+ 'display' => $title_display,
110
+ 'text' => $settings['chart_title'],
111
+ 'fontFamily' => !empty( $settings['title_font_family'] ) ? $settings['title_font_family'] : 'auto',
112
+ 'fontSize' => !empty( $settings['title_font_size']['size'] ) ? $settings['title_font_size']['size'] : 18,
113
+ 'fontStyle' => (!empty( $settings['title_font_style'] ) ? $settings['title_font_style'] : '') . ' ' . (!empty( $settings['title_font_weight'] ) ? $settings['title_font_weight'] : ''),
114
+ 'fontColor' => !empty( $settings['title_font_color'] ) ? $settings['title_font_color'] : '#222',
115
+ ],
116
+ 'tooltips' => $tooltip,
117
+ 'legend' => [
118
+ 'display' => $legend_display,
119
+ 'position' => !empty( $settings['legend_position'] ) ? $settings['legend_position'] : 'top',
120
+ 'reverse' => $settings['legend_reverse'] == 'yes' ? true : false,
121
+ 'labels' => $legend_style,
122
+ ],
123
+ 'animation' => [
124
+ 'easing' => $settings['animation_options'],
125
+ 'duration' => $settings['chart_animation_duration'],
126
+ ],
127
+ 'layout' => [
128
+ 'padding' => [
129
+ 'top' => $settings['layout_padding']['top'],
130
+ 'right' => $settings['layout_padding']['right'],
131
+ 'bottom' => $settings['layout_padding']['bottom'],
132
+ 'left' => $settings['layout_padding']['left']
133
+ ]
134
+ ],
135
+ 'maintainAspectRatio' => false,
136
+ 'scales' => [
137
+ 'xAxes' => [
138
+ [
139
+ 'ticks' => [
140
+ 'display' => $xaxes_labels_display,
141
+ 'beginAtZero' => true,
142
+ 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 10,
143
+ 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 1,
144
+ 'fontFamily' => !empty( $settings['labels_xaxes_font_family'] ) ? $settings['labels_xaxes_font_family'] : 'auto',
145
+ 'fontSize' => !empty( $settings['labels_xaxes_font_size']['size'] ) ? $settings['labels_xaxes_font_size']['size'] : 12,
146
+ 'fontStyle' => (!empty( $settings['labels_xaxes_font_style'] ) ? $settings['labels_xaxes_font_style'] : '') . ' ' . (!empty( $settings['labels_xaxes_font_weight'] ) ? $settings['labels_xaxes_font_weight'] : ''),
147
+ 'fontColor' => !empty( $settings['labels_xaxes_font_color'] ) ? $settings['labels_xaxes_font_color'] : '#222',
148
+ 'padding' => !empty( $settings['labels_padding']['size'] ) ? $settings['labels_padding']['size'] : 10,
149
+ ],
150
+ 'gridLines' => $xaxes_gridLines,
151
+ 'barPercentage' => ( $settings['bar_width']['size'] !== '' ) ? $settings['bar_width']['size'] / 100 : '',
152
+ 'categoryPercentage' => ( $settings['category_width']['size'] !== '' ) ? $settings['category_width']['size'] / 100 : '',
153
+ ]
154
+ ],
155
+ 'yAxes' => [
156
+ [
157
+ 'ticks' => [
158
+ 'display' => $yaxes_labels_display,
159
+ 'beginAtZero' => true,
160
+ 'max' => isset( $settings['axis_range'] ) ? $settings['axis_range'] : 10,
161
+ 'stepSize' => isset( $settings['step_size'] ) ? $settings['step_size'] : 1,
162
+ 'fontFamily' => !empty( $settings['labels_yaxes_font_family'] ) ? $settings['labels_yaxes_font_family'] : 'auto',
163
+ 'fontSize' => !empty( $settings['labels_yaxes_font_size']['size'] ) ? $settings['labels_yaxes_font_size']['size'] : 12,
164
+ 'fontStyle' => (!empty( $settings['labels_yaxes_font_style'] ) ? $settings['labels_yaxes_font_style'] : '') . ' ' . (!empty( $settings['labels_yaxes_font_weight'] ) ? $settings['labels_yaxes_font_weight'] : ''),
165
+ 'fontColor' => !empty( $settings['labels_yaxes_font_color'] ) ? $settings['labels_yaxes_font_color'] : '#222',
166
+ 'padding' => !empty( $settings['labels_padding']['size'] ) ? $settings['labels_padding']['size'] : 10,
167
+ ],
168
+ 'gridLines' => $yaxes_gridLines,
169
+ 'barPercentage' => ( $settings['bar_width']['size'] !== '' ) ? $settings['bar_width']['size'] / 100 : '',
170
+ 'categoryPercentage' => ( $settings['category_width']['size'] !== '' ) ? $settings['category_width']['size'] / 100 : '',
171
+ ]
172
+ ],
173
+ ],
174
+ ];
175
+
176
+ return $options;
177
+ }
178
+ }
widgets/bar-chart/widget.php CHANGED
@@ -154,7 +154,7 @@ class Bar_Chart extends Base {
154
  'chart_data',
155
  [
156
  'type' => Controls_Manager::REPEATER,
157
- 'fields' => array_values( $repeater->get_controls() ),
158
  'title_field' => '{{{ label }}}',
159
  'default' => [
160
  [
154
  'chart_data',
155
  [
156
  'type' => Controls_Manager::REPEATER,
157
+ 'fields' => $repeater->get_controls(),
158
  'title_field' => '{{{ label }}}',
159
  'default' => [
160
  [
widgets/calderaform/widget.php CHANGED
@@ -1,559 +1,559 @@
1
- <?php
2
- /**
3
- * Caldera Form widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Widget;
8
-
9
- use Elementor\Controls_Manager;
10
- use Elementor\Group_Control_Border;
11
- use Elementor\Group_Control_Box_Shadow;
12
- use Elementor\Group_Control_Typography;
13
-
14
- defined( 'ABSPATH' ) || die();
15
-
16
- class CalderaForm extends Base {
17
-
18
- /**
19
- * Get widget title.
20
- *
21
- * @since 1.0.0
22
- * @access public
23
- *
24
- * @return string Widget title.
25
- */
26
- public function get_title() {
27
- return __( 'Caldera Forms', 'happy-elementor-addons' );
28
- }
29
-
30
- public function get_custom_help_url() {
31
- return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/caldera-forms/';
32
- }
33
-
34
- /**
35
- * Get widget icon.
36
- *
37
- * @since 1.0.0
38
- * @access public
39
- *
40
- * @return string Widget icon.
41
- */
42
- public function get_icon() {
43
- return 'hm hm-form';
44
- }
45
-
46
- public function get_keywords() {
47
- return [ 'caldera', 'wpf', 'wpform' , 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
48
- }
49
-
50
- protected function register_content_controls() {
51
- $this->start_controls_section(
52
- '_section_calderaf',
53
- [
54
- 'label' => ha_is_calderaforms_activated() ? __( 'Caldera Forms', 'happy-elementor-addons' ) : __( 'Missing Notice', 'happy-elementor-addons' ),
55
- ]
56
- );
57
-
58
- if ( ! ha_is_calderaforms_activated() ) {
59
- $this->add_control(
60
- '_calderaforms_missing_notice',
61
- [
62
- 'type' => Controls_Manager::RAW_HTML,
63
- 'raw' => sprintf(
64
- __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
65
- '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Caldera+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Caldera Forms</a>',
66
- ha_get_current_user_display_name()
67
- ),
68
- 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
69
- ]
70
- );
71
-
72
- $this->add_control(
73
- '_calderaforms_install',
74
- [
75
- 'type' => Controls_Manager::RAW_HTML,
76
- 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Caldera+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate Caldera Forms</a>',
77
- ]
78
- );
79
-
80
- $this->end_controls_section();
81
- return;
82
- }
83
-
84
- $this->add_control(
85
- 'form_id',
86
- [
87
- 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
88
- 'type' => Controls_Manager::SELECT,
89
- 'label_block' => true,
90
- 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_caldera_form(),
91
- ]
92
- );
93
-
94
- $this->end_controls_section();
95
- }
96
-
97
- protected function register_style_controls() {
98
- $this->start_controls_section(
99
- '_section_fields_style',
100
- [
101
- 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
102
- 'tab' => Controls_Manager::TAB_STYLE,
103
- ]
104
- );
105
-
106
- $this->add_responsive_control(
107
- 'field_margin',
108
- [
109
- 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
110
- 'type' => Controls_Manager::DIMENSIONS,
111
- 'size_units' => [ 'px', '%' ],
112
- 'selectors' => [
113
- '{{WRAPPER}} .form-group:not(.btn)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
114
- ],
115
- ]
116
- );
117
-
118
- $this->add_responsive_control(
119
- 'field_padding',
120
- [
121
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
122
- 'type' => Controls_Manager::DIMENSIONS,
123
- 'size_units' => [ 'px', 'em', '%' ],
124
- 'selectors' => [
125
- '{{WRAPPER}} .form-group input:not(.btn)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
126
- ],
127
- ]
128
- );
129
-
130
- $this->add_responsive_control(
131
- 'field_border_radius',
132
- [
133
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
134
- 'type' => Controls_Manager::DIMENSIONS,
135
- 'size_units' => [ 'px', '%' ],
136
- 'selectors' => [
137
- '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
138
- ],
139
- ]
140
- );
141
-
142
- $this->add_group_control(
143
- Group_Control_Typography::get_type(),
144
- [
145
- 'name' => 'field_typography',
146
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
147
- 'selector' => '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea',
148
- ]
149
- );
150
-
151
- $this->add_control(
152
- 'field_textcolor',
153
- [
154
- 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
155
- 'type' => Controls_Manager::COLOR,
156
- 'selectors' => [
157
- '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea' => 'color: {{VALUE}}',
158
- ],
159
- ]
160
- );
161
-
162
- $this->add_control(
163
- 'field_placeholder_color',
164
- [
165
- 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
166
- 'type' => Controls_Manager::COLOR,
167
- 'selectors' => [
168
- '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
169
- '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
170
- '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
171
- ],
172
- ]
173
- );
174
-
175
- $this->start_controls_tabs( 'tabs_field_state' );
176
-
177
- $this->start_controls_tab(
178
- 'tab_field_normal',
179
- [
180
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
181
- ]
182
- );
183
-
184
- $this->add_group_control(
185
- Group_Control_Border::get_type(),
186
- [
187
- 'name' => 'field_border',
188
- 'selector' => '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea',
189
- ]
190
- );
191
-
192
- $this->add_group_control(
193
- Group_Control_Box_Shadow::get_type(),
194
- [
195
- 'name' => 'field_box_shadow',
196
- 'selector' => '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea',
197
- ]
198
- );
199
-
200
- $this->add_control(
201
- 'field_bg_color',
202
- [
203
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
204
- 'type' => Controls_Manager::COLOR,
205
- 'selectors' => [
206
- '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea' => 'background-color: {{VALUE}}',
207
- ],
208
- ]
209
- );
210
-
211
- $this->end_controls_tab();
212
-
213
- $this->start_controls_tab(
214
- 'tab_field_focus',
215
- [
216
- 'label' => __( 'Focus', 'happy-elementor-addons' ),
217
- ]
218
- );
219
-
220
- $this->add_group_control(
221
- Group_Control_Border::get_type(),
222
- [
223
- 'name' => 'field_focus_border',
224
- 'selector' => '{{WRAPPER}} .form-group input:focus:not(.btn), {{WRAPPER}} .form-group textarea:focus',
225
- ]
226
- );
227
-
228
- $this->add_group_control(
229
- Group_Control_Box_Shadow::get_type(),
230
- [
231
- 'name' => 'field_focus_box_shadow',
232
- 'exclude' => [
233
- 'box_shadow_position',
234
- ],
235
- 'selector' => '{{WRAPPER}} .form-group input:focus:not(.btn), {{WRAPPER}} .form-group textarea:focus',
236
- ]
237
- );
238
-
239
- $this->add_control(
240
- 'field_focus_bg_color',
241
- [
242
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
243
- 'type' => Controls_Manager::COLOR,
244
- 'selectors' => [
245
- '{{WRAPPER}} .form-group input:focus:not(.btn), {{WRAPPER}} .form-group textarea:focus' => 'background-color: {{VALUE}}',
246
- ],
247
- ]
248
- );
249
-
250
- $this->end_controls_tab();
251
- $this->end_controls_tabs();
252
-
253
- $this->end_controls_section();
254
-
255
-
256
- $this->start_controls_section(
257
- 'caldera-form-label',
258
- [
259
- 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
260
- 'tab' => Controls_Manager::TAB_STYLE,
261
- ]
262
- );
263
-
264
- $this->add_responsive_control(
265
- 'label_margin',
266
- [
267
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
268
- 'type' => Controls_Manager::DIMENSIONS,
269
- 'size_units' => [ 'px', '%' ],
270
- 'selectors' => [
271
- '{{WRAPPER}} .caldera-grid label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
272
- ],
273
- ]
274
- );
275
-
276
- $this->add_responsive_control(
277
- 'label_padding',
278
- [
279
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
280
- 'type' => Controls_Manager::DIMENSIONS,
281
- 'size_units' => [ 'px', 'em', '%' ],
282
- 'selectors' => [
283
- '{{WRAPPER}} .caldera-grid label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
284
- ],
285
- ]
286
- );
287
-
288
- $this->add_control(
289
- 'hr3',
290
- [
291
- 'type' => Controls_Manager::DIVIDER,
292
- 'style' => 'thick',
293
- ]
294
- );
295
-
296
- $this->add_group_control(
297
- Group_Control_Typography::get_type(),
298
- [
299
- 'name' => 'label_typography',
300
- 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
301
- 'selector' => '{{WRAPPER}} .caldera-grid label',
302
- ]
303
- );
304
-
305
- $this->add_group_control(
306
- Group_Control_Typography::get_type(),
307
- [
308
- 'name' => 'desc_typography',
309
- 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
310
- 'selector' => '{{WRAPPER}} .caldera-grid .help-block',
311
- ]
312
- );
313
-
314
- $this->add_control(
315
- 'label_color',
316
- [
317
- 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
318
- 'type' => Controls_Manager::COLOR,
319
- 'selectors' => [
320
- '{{WRAPPER}} .caldera-grid label' => 'color: {{VALUE}}',
321
- ],
322
- ]
323
- );
324
-
325
- $this->add_control(
326
- 'requered_label',
327
- [
328
- 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
329
- 'type' => Controls_Manager::COLOR,
330
- 'selectors' => [
331
- '{{WRAPPER}} .field_required' => 'color: {{VALUE}} !important',
332
- ],
333
- ]
334
- );
335
-
336
- $this->add_control(
337
- 'desc_color',
338
- [
339
- 'label' => __( 'Description Text Color', 'happy-elementor-addons' ),
340
- 'type' => Controls_Manager::COLOR,
341
- 'selectors' => [
342
- '{{WRAPPER}} .caldera-grid .help-block' => 'color: {{VALUE}}',
343
- ],
344
- ]
345
- );
346
-
347
- $this->end_controls_section();
348
-
349
- $this->start_controls_section(
350
- 'submit',
351
- [
352
- 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
353
- 'tab' => Controls_Manager::TAB_STYLE,
354
- ]
355
- );
356
-
357
- $this->add_control(
358
- 'submit_btn_width',
359
- [
360
- 'label' => __( 'Button Full Width?', 'happy-elementor-addons' ),
361
- 'type' => Controls_Manager::SWITCHER,
362
- 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
363
- 'label_off' => __( 'No', 'happy-elementor-addons' ),
364
- 'return_value' => 'yes',
365
- 'default' => 'yes',
366
- ]
367
- );
368
-
369
- $this->add_responsive_control(
370
- 'button_width',
371
- [
372
- 'label' => __( 'Button Width', 'happy-elementor-addons' ),
373
- 'type' => Controls_Manager::SLIDER,
374
- 'size_units' => [ 'px', '%' ],
375
- 'condition' => [
376
- 'submit_btn_width' => 'yes'
377
- ],
378
- 'default' => [
379
- 'unit' => '%',
380
- 'size' => 100
381
- ],
382
- 'range' => [
383
- '%' => [
384
- 'min' => 1,
385
- 'max' => 100,
386
- ],
387
- 'px' => [
388
- 'min' => 1,
389
- 'max' => 800,
390
- ],
391
- ],
392
- 'selectors' => [
393
- '{{WRAPPER}} .form-group .btn' => 'display: block; width: {{SIZE}}{{UNIT}};',
394
- ],
395
- ]
396
- );
397
-
398
- $this->add_responsive_control(
399
- 'submit_margin',
400
- [
401
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
402
- 'type' => Controls_Manager::DIMENSIONS,
403
- 'size_units' => [ 'px', '%' ],
404
- 'selectors' => [
405
- '{{WRAPPER}} .form-group .btn' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
406
- ],
407
- ]
408
- );
409
-
410
- $this->add_responsive_control(
411
- 'submit_padding',
412
- [
413
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
414
- 'type' => Controls_Manager::DIMENSIONS,
415
- 'size_units' => [ 'px', 'em', '%' ],
416
- 'selectors' => [
417
- '{{WRAPPER}} .form-group .btn' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
418
- ],
419
- ]
420
- );
421
-
422
- $this->add_group_control(
423
- Group_Control_Typography::get_type(),
424
- [
425
- 'name' => 'submit_typography',
426
- 'selector' => '{{WRAPPER}} .form-group .btn',
427
- ]
428
- );
429
-
430
- $this->add_group_control(
431
- Group_Control_Border::get_type(),
432
- [
433
- 'name' => 'submit_border',
434
- 'selector' => '{{WRAPPER}} .form-group .btn',
435
- ]
436
- );
437
-
438
- $this->add_control(
439
- 'submit_border_radius',
440
- [
441
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
442
- 'type' => Controls_Manager::DIMENSIONS,
443
- 'size_units' => [ 'px', '%' ],
444
- 'selectors' => [
445
- '{{WRAPPER}} .form-group .btn' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
446
- ],
447
- ]
448
- );
449
-
450
- $this->add_group_control(
451
- Group_Control_Box_Shadow::get_type(),
452
- [
453
- 'name' => 'submit_box_shadow',
454
- 'selector' => '{{WRAPPER}} .form-group .btn',
455
- ]
456
- );
457
-
458
- $this->add_control(
459
- 'hr4',
460
- [
461
- 'type' => Controls_Manager::DIVIDER,
462
- 'style' => 'thick',
463
- ]
464
- );
465
-
466
- $this->start_controls_tabs( 'tabs_button_style' );
467
-
468
- $this->start_controls_tab(
469
- 'tab_button_normal',
470
- [
471
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
472
- ]
473
- );
474
-
475
- $this->add_control(
476
- 'submit_color',
477
- [
478
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
479
- 'type' => Controls_Manager::COLOR,
480
- 'default' => '',
481
- 'selectors' => [
482
- '{{WRAPPER}} .form-group .btn' => 'color: {{VALUE}};',
483
- ],
484
- ]
485
- );
486
-
487
- $this->add_control(
488
- 'submit_bg_color',
489
- [
490
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
491
- 'type' => Controls_Manager::COLOR,
492
- 'selectors' => [
493
- '{{WRAPPER}} .form-group .btn' => 'background-color: {{VALUE}};',
494
- ],
495
- ]
496
- );
497
-
498
- $this->end_controls_tab();
499
-
500
- $this->start_controls_tab(
501
- 'tab_button_hover',
502
- [
503
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
504
- ]
505
- );
506
-
507
- $this->add_control(
508
- 'submit_hover_color',
509
- [
510
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
511
- 'type' => Controls_Manager::COLOR,
512
- 'selectors' => [
513
- '{{WRAPPER}} .form-group .btn:hover, {{WRAPPER}} .form-group .btn:focus' => 'color: {{VALUE}};',
514
- ],
515
- ]
516
- );
517
-
518
- $this->add_control(
519
- 'submit_hover_bg_color',
520
- [
521
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
522
- 'type' => Controls_Manager::COLOR,
523
- 'selectors' => [
524
- '{{WRAPPER}} .form-group .btn:hover, {{WRAPPER}} .form-group .btn:focus' => 'background-color: {{VALUE}};',
525
- ],
526
- ]
527
- );
528
-
529
- $this->add_control(
530
- 'submit_hover_border_color',
531
- [
532
- 'label' => __( 'Border Color', 'happy-elementor-addons' ),
533
- 'type' => Controls_Manager::COLOR,
534
- 'selectors' => [
535
- '{{WRAPPER}} .form-group .btn:hover, {{WRAPPER}} .form-group .btn:focus' => 'border-color: {{VALUE}};',
536
- ],
537
- ]
538
- );
539
-
540
- $this->end_controls_tab();
541
- $this->end_controls_tabs();
542
-
543
- $this->end_controls_section();
544
- }
545
-
546
- protected function render() {
547
- if ( ! ha_is_calderaforms_activated() ) {
548
- return;
549
- }
550
-
551
- $settings = $this->get_settings_for_display();
552
-
553
- if ( ! empty( $settings['form_id'] ) ) {
554
- echo ha_do_shortcode( 'caldera_form', [
555
- 'id' => $settings['form_id'],
556
- ] );
557
- }
558
- }
559
- }
1
+ <?php
2
+ /**
3
+ * Caldera Form widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Controls_Manager;
10
+ use Elementor\Group_Control_Border;
11
+ use Elementor\Group_Control_Box_Shadow;
12
+ use Elementor\Group_Control_Typography;
13
+
14
+ defined( 'ABSPATH' ) || die();
15
+
16
+ class CalderaForm extends Base {
17
+
18
+ /**
19
+ * Get widget title.
20
+ *
21
+ * @since 1.0.0
22
+ * @access public
23
+ *
24
+ * @return string Widget title.
25
+ */
26
+ public function get_title() {
27
+ return __( 'Caldera Forms', 'happy-elementor-addons' );
28
+ }
29
+
30
+ public function get_custom_help_url() {
31
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/caldera-forms/';
32
+ }
33
+
34
+ /**
35
+ * Get widget icon.
36
+ *
37
+ * @since 1.0.0
38
+ * @access public
39
+ *
40
+ * @return string Widget icon.
41
+ */
42
+ public function get_icon() {
43
+ return 'hm hm-form';
44
+ }
45
+
46
+ public function get_keywords() {
47
+ return [ 'caldera', 'wpf', 'wpform' , 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
48
+ }
49
+
50
+ protected function register_content_controls() {
51
+ $this->start_controls_section(
52
+ '_section_calderaf',
53
+ [
54
+ 'label' => ha_is_calderaforms_activated() ? __( 'Caldera Forms', 'happy-elementor-addons' ) : __( 'Missing Notice', 'happy-elementor-addons' ),
55
+ ]
56
+ );
57
+
58
+ if ( ! ha_is_calderaforms_activated() ) {
59
+ $this->add_control(
60
+ '_calderaforms_missing_notice',
61
+ [
62
+ 'type' => Controls_Manager::RAW_HTML,
63
+ 'raw' => sprintf(
64
+ __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
65
+ '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Caldera+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Caldera Forms</a>',
66
+ ha_get_current_user_display_name()
67
+ ),
68
+ 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
69
+ ]
70
+ );
71
+
72
+ $this->add_control(
73
+ '_calderaforms_install',
74
+ [
75
+ 'type' => Controls_Manager::RAW_HTML,
76
+ 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Caldera+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate Caldera Forms</a>',
77
+ ]
78
+ );
79
+
80
+ $this->end_controls_section();
81
+ return;
82
+ }
83
+
84
+ $this->add_control(
85
+ 'form_id',
86
+ [
87
+ 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
88
+ 'type' => Controls_Manager::SELECT,
89
+ 'label_block' => true,
90
+ 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_caldera_form(),
91
+ ]
92
+ );
93
+
94
+ $this->end_controls_section();
95
+ }
96
+
97
+ protected function register_style_controls() {
98
+ $this->start_controls_section(
99
+ '_section_fields_style',
100
+ [
101
+ 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
102
+ 'tab' => Controls_Manager::TAB_STYLE,
103
+ ]
104
+ );
105
+
106
+ $this->add_responsive_control(
107
+ 'field_margin',
108
+ [
109
+ 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
110
+ 'type' => Controls_Manager::DIMENSIONS,
111
+ 'size_units' => [ 'px', '%' ],
112
+ 'selectors' => [
113
+ '{{WRAPPER}} .form-group:not(.btn)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
114
+ ],
115
+ ]
116
+ );
117
+
118
+ $this->add_responsive_control(
119
+ 'field_padding',
120
+ [
121
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
122
+ 'type' => Controls_Manager::DIMENSIONS,
123
+ 'size_units' => [ 'px', 'em', '%' ],
124
+ 'selectors' => [
125
+ '{{WRAPPER}} .form-group input:not(.btn)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
126
+ ],
127
+ ]
128
+ );
129
+
130
+ $this->add_responsive_control(
131
+ 'field_border_radius',
132
+ [
133
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
134
+ 'type' => Controls_Manager::DIMENSIONS,
135
+ 'size_units' => [ 'px', '%' ],
136
+ 'selectors' => [
137
+ '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
138
+ ],
139
+ ]
140
+ );
141
+
142
+ $this->add_group_control(
143
+ Group_Control_Typography::get_type(),
144
+ [
145
+ 'name' => 'field_typography',
146
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
147
+ 'selector' => '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea',
148
+ ]
149
+ );
150
+
151
+ $this->add_control(
152
+ 'field_textcolor',
153
+ [
154
+ 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
155
+ 'type' => Controls_Manager::COLOR,
156
+ 'selectors' => [
157
+ '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea' => 'color: {{VALUE}}',
158
+ ],
159
+ ]
160
+ );
161
+
162
+ $this->add_control(
163
+ 'field_placeholder_color',
164
+ [
165
+ 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
166
+ 'type' => Controls_Manager::COLOR,
167
+ 'selectors' => [
168
+ '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
169
+ '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
170
+ '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
171
+ ],
172
+ ]
173
+ );
174
+
175
+ $this->start_controls_tabs( 'tabs_field_state' );
176
+
177
+ $this->start_controls_tab(
178
+ 'tab_field_normal',
179
+ [
180
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
181
+ ]
182
+ );
183
+
184
+ $this->add_group_control(
185
+ Group_Control_Border::get_type(),
186
+ [
187
+ 'name' => 'field_border',
188
+ 'selector' => '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea',
189
+ ]
190
+ );
191
+
192
+ $this->add_group_control(
193
+ Group_Control_Box_Shadow::get_type(),
194
+ [
195
+ 'name' => 'field_box_shadow',
196
+ 'selector' => '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea',
197
+ ]
198
+ );
199
+
200
+ $this->add_control(
201
+ 'field_bg_color',
202
+ [
203
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
204
+ 'type' => Controls_Manager::COLOR,
205
+ 'selectors' => [
206
+ '{{WRAPPER}} .form-group input:not(.btn), {{WRAPPER}} .form-group textarea' => 'background-color: {{VALUE}}',
207
+ ],
208
+ ]
209
+ );
210
+
211
+ $this->end_controls_tab();
212
+
213
+ $this->start_controls_tab(
214
+ 'tab_field_focus',
215
+ [
216
+ 'label' => __( 'Focus', 'happy-elementor-addons' ),
217
+ ]
218
+ );
219
+
220
+ $this->add_group_control(
221
+ Group_Control_Border::get_type(),
222
+ [
223
+ 'name' => 'field_focus_border',
224
+ 'selector' => '{{WRAPPER}} .form-group input:focus:not(.btn), {{WRAPPER}} .form-group textarea:focus',
225
+ ]
226
+ );
227
+
228
+ $this->add_group_control(
229
+ Group_Control_Box_Shadow::get_type(),
230
+ [
231
+ 'name' => 'field_focus_box_shadow',
232
+ 'exclude' => [
233
+ 'box_shadow_position',
234
+ ],
235
+ 'selector' => '{{WRAPPER}} .form-group input:focus:not(.btn), {{WRAPPER}} .form-group textarea:focus',
236
+ ]
237
+ );
238
+
239
+ $this->add_control(
240
+ 'field_focus_bg_color',
241
+ [
242
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
243
+ 'type' => Controls_Manager::COLOR,
244
+ 'selectors' => [
245
+ '{{WRAPPER}} .form-group input:focus:not(.btn), {{WRAPPER}} .form-group textarea:focus' => 'background-color: {{VALUE}}',
246
+ ],
247
+ ]
248
+ );
249
+
250
+ $this->end_controls_tab();
251
+ $this->end_controls_tabs();
252
+
253
+ $this->end_controls_section();
254
+
255
+
256
+ $this->start_controls_section(
257
+ 'caldera-form-label',
258
+ [
259
+ 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
260
+ 'tab' => Controls_Manager::TAB_STYLE,
261
+ ]
262
+ );
263
+
264
+ $this->add_responsive_control(
265
+ 'label_margin',
266
+ [
267
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
268
+ 'type' => Controls_Manager::DIMENSIONS,
269
+ 'size_units' => [ 'px', '%' ],
270
+ 'selectors' => [
271
+ '{{WRAPPER}} .caldera-grid label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
272
+ ],
273
+ ]
274
+ );
275
+
276
+ $this->add_responsive_control(
277
+ 'label_padding',
278
+ [
279
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
280
+ 'type' => Controls_Manager::DIMENSIONS,
281
+ 'size_units' => [ 'px', 'em', '%' ],
282
+ 'selectors' => [
283
+ '{{WRAPPER}} .caldera-grid label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
284
+ ],
285
+ ]
286
+ );
287
+
288
+ $this->add_control(
289
+ 'hr3',
290
+ [
291
+ 'type' => Controls_Manager::DIVIDER,
292
+ 'style' => 'thick',
293
+ ]
294
+ );
295
+
296
+ $this->add_group_control(
297
+ Group_Control_Typography::get_type(),
298
+ [
299
+ 'name' => 'label_typography',
300
+ 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
301
+ 'selector' => '{{WRAPPER}} .caldera-grid label',
302
+ ]
303
+ );
304
+
305
+ $this->add_group_control(
306
+ Group_Control_Typography::get_type(),
307
+ [
308
+ 'name' => 'desc_typography',
309
+ 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
310
+ 'selector' => '{{WRAPPER}} .caldera-grid .help-block',
311
+ ]
312
+ );
313
+
314
+ $this->add_control(
315
+ 'label_color',
316
+ [
317
+ 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
318
+ 'type' => Controls_Manager::COLOR,
319
+ 'selectors' => [
320
+ '{{WRAPPER}} .caldera-grid label' => 'color: {{VALUE}}',
321
+ ],
322
+ ]
323
+ );
324
+
325
+ $this->add_control(
326
+ 'requered_label',
327
+ [
328
+ 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
329
+ 'type' => Controls_Manager::COLOR,
330
+ 'selectors' => [
331
+ '{{WRAPPER}} .field_required' => 'color: {{VALUE}} !important',
332
+ ],
333
+ ]
334
+ );
335
+
336
+ $this->add_control(
337
+ 'desc_color',
338
+ [
339
+ 'label' => __( 'Description Text Color', 'happy-elementor-addons' ),
340
+ 'type' => Controls_Manager::COLOR,
341
+ 'selectors' => [
342
+ '{{WRAPPER}} .caldera-grid .help-block' => 'color: {{VALUE}}',
343
+ ],
344
+ ]
345
+ );
346
+
347
+ $this->end_controls_section();
348
+
349
+ $this->start_controls_section(
350
+ 'submit',
351
+ [
352
+ 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
353
+ 'tab' => Controls_Manager::TAB_STYLE,
354
+ ]
355
+ );
356
+
357
+ $this->add_control(
358
+ 'submit_btn_width',
359
+ [
360
+ 'label' => __( 'Button Full Width?', 'happy-elementor-addons' ),
361
+ 'type' => Controls_Manager::SWITCHER,
362
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
363
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
364
+ 'return_value' => 'yes',
365
+ 'default' => 'yes',
366
+ ]
367
+ );
368
+
369
+ $this->add_responsive_control(
370
+ 'button_width',
371
+ [
372
+ 'label' => __( 'Button Width', 'happy-elementor-addons' ),
373
+ 'type' => Controls_Manager::SLIDER,
374
+ 'size_units' => [ 'px', '%' ],
375
+ 'condition' => [
376
+ 'submit_btn_width' => 'yes'
377
+ ],
378
+ 'default' => [
379
+ 'unit' => '%',
380
+ 'size' => 100
381
+ ],
382
+ 'range' => [
383
+ '%' => [
384
+ 'min' => 1,
385
+ 'max' => 100,
386
+ ],
387
+ 'px' => [
388
+ 'min' => 1,
389
+ 'max' => 800,
390
+ ],
391
+ ],
392
+ 'selectors' => [
393
+ '{{WRAPPER}} .form-group .btn' => 'display: block; width: {{SIZE}}{{UNIT}};',
394
+ ],
395
+ ]
396
+ );
397
+
398
+ $this->add_responsive_control(
399
+ 'submit_margin',
400
+ [
401
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
402
+ 'type' => Controls_Manager::DIMENSIONS,
403
+ 'size_units' => [ 'px', '%' ],
404
+ 'selectors' => [
405
+ '{{WRAPPER}} .form-group .btn' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
406
+ ],
407
+ ]
408
+ );
409
+
410
+ $this->add_responsive_control(
411
+ 'submit_padding',
412
+ [
413
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
414
+ 'type' => Controls_Manager::DIMENSIONS,
415
+ 'size_units' => [ 'px', 'em', '%' ],
416
+ 'selectors' => [
417
+ '{{WRAPPER}} .form-group .btn' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
418
+ ],
419
+ ]
420
+ );
421
+
422
+ $this->add_group_control(
423
+ Group_Control_Typography::get_type(),
424
+ [
425
+ 'name' => 'submit_typography',
426
+ 'selector' => '{{WRAPPER}} .form-group .btn',
427
+ ]
428
+ );
429
+
430
+ $this->add_group_control(
431
+ Group_Control_Border::get_type(),
432
+ [
433
+ 'name' => 'submit_border',
434
+ 'selector' => '{{WRAPPER}} .form-group .btn',
435
+ ]
436
+ );
437
+
438
+ $this->add_control(
439
+ 'submit_border_radius',
440
+ [
441
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
442
+ 'type' => Controls_Manager::DIMENSIONS,
443
+ 'size_units' => [ 'px', '%' ],
444
+ 'selectors' => [
445
+ '{{WRAPPER}} .form-group .btn' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
446
+ ],
447
+ ]
448
+ );
449
+
450
+ $this->add_group_control(
451
+ Group_Control_Box_Shadow::get_type(),
452
+ [
453
+ 'name' => 'submit_box_shadow',
454
+ 'selector' => '{{WRAPPER}} .form-group .btn',
455
+ ]
456
+ );
457
+
458
+ $this->add_control(
459
+ 'hr4',
460
+ [
461
+ 'type' => Controls_Manager::DIVIDER,
462
+ 'style' => 'thick',
463
+ ]
464
+ );
465
+
466
+ $this->start_controls_tabs( 'tabs_button_style' );
467
+
468
+ $this->start_controls_tab(
469
+ 'tab_button_normal',
470
+ [
471
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
472
+ ]
473
+ );
474
+
475
+ $this->add_control(
476
+ 'submit_color',
477
+ [
478
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
479
+ 'type' => Controls_Manager::COLOR,
480
+ 'default' => '',
481
+ 'selectors' => [
482
+ '{{WRAPPER}} .form-group .btn' => 'color: {{VALUE}};',
483
+ ],
484
+ ]
485
+ );
486
+
487
+ $this->add_control(
488
+ 'submit_bg_color',
489
+ [
490
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
491
+ 'type' => Controls_Manager::COLOR,
492
+ 'selectors' => [
493
+ '{{WRAPPER}} .form-group .btn' => 'background-color: {{VALUE}};',
494
+ ],
495
+ ]
496
+ );
497
+
498
+ $this->end_controls_tab();
499
+
500
+ $this->start_controls_tab(
501
+ 'tab_button_hover',
502
+ [
503
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
504
+ ]
505
+ );
506
+
507
+ $this->add_control(
508
+ 'submit_hover_color',
509
+ [
510
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
511
+ 'type' => Controls_Manager::COLOR,
512
+ 'selectors' => [
513
+ '{{WRAPPER}} .form-group .btn:hover, {{WRAPPER}} .form-group .btn:focus' => 'color: {{VALUE}};',
514
+ ],
515
+ ]
516
+ );
517
+
518
+ $this->add_control(
519
+ 'submit_hover_bg_color',
520
+ [
521
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
522
+ 'type' => Controls_Manager::COLOR,
523
+ 'selectors' => [
524
+ '{{WRAPPER}} .form-group .btn:hover, {{WRAPPER}} .form-group .btn:focus' => 'background-color: {{VALUE}};',
525
+ ],
526
+ ]
527
+ );
528
+
529
+ $this->add_control(
530
+ 'submit_hover_border_color',
531
+ [
532
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
533
+ 'type' => Controls_Manager::COLOR,
534
+ 'selectors' => [
535
+ '{{WRAPPER}} .form-group .btn:hover, {{WRAPPER}} .form-group .btn:focus' => 'border-color: {{VALUE}};',
536
+ ],
537
+ ]
538
+ );
539
+
540
+ $this->end_controls_tab();
541
+ $this->end_controls_tabs();
542
+
543
+ $this->end_controls_section();
544
+ }
545
+
546
+ protected function render() {
547
+ if ( ! ha_is_calderaforms_activated() ) {
548
+ return;
549
+ }
550
+
551
+ $settings = $this->get_settings_for_display();
552
+
553
+ if ( ! empty( $settings['form_id'] ) ) {
554
+ echo ha_do_shortcode( 'caldera_form', [
555
+ 'id' => $settings['form_id'],
556
+ ] );
557
+ }
558
+ }
559
+ }
widgets/carousel/widget.php CHANGED
@@ -116,6 +116,12 @@ class Carousel extends Base {
116
  ]
117
  );
118
 
 
 
 
 
 
 
119
  $this->add_control(
120
  'slides',
121
  [
@@ -123,43 +129,7 @@ class Carousel extends Base {
123
  'type' => Controls_Manager::REPEATER,
124
  'fields' => $repeater->get_controls(),
125
  'title_field' => '<# print(title || "Carousel Item"); #>',
126
- 'default' => [
127
- [
128
- 'image' => [
129
- 'url' => Utils::get_placeholder_image_src(),
130
- ],
131
- ],
132
- [
133
- 'image' => [
134
- 'url' => Utils::get_placeholder_image_src(),
135
- ],
136
- ],
137
- [
138
- 'image' => [
139
- 'url' => Utils::get_placeholder_image_src(),
140
- ],
141
- ],
142
- [
143
- 'image' => [
144
- 'url' => Utils::get_placeholder_image_src(),
145
- ],
146
- ],
147
- [
148
- 'image' => [
149
- 'url' => Utils::get_placeholder_image_src(),
150
- ],
151
- ],
152
- [
153
- 'image' => [
154
- 'url' => Utils::get_placeholder_image_src(),
155
- ],
156
- ],
157
- [
158
- 'image' => [
159
- 'url' => Utils::get_placeholder_image_src(),
160
- ],
161
- ]
162
- ]
163
  ]
164
  );
165
 
@@ -500,7 +470,7 @@ class Carousel extends Base {
500
  $this->start_controls_section(
501
  '_section_style_arrow',
502
  [
503
- 'label' => __( 'Navigation - Arrow', 'happy-elementor-addons' ),
504
  'tab' => Controls_Manager::TAB_STYLE,
505
  ]
506
  );
@@ -688,7 +658,7 @@ class Carousel extends Base {
688
  $this->start_controls_section(
689
  '_section_style_dots',
690
  [
691
- 'label' => __( 'Navigation - Dots', 'happy-elementor-addons' ),
692
  'tab' => Controls_Manager::TAB_STYLE,
693
  ]
694
  );
@@ -758,6 +728,18 @@ class Carousel extends Base {
758
  ]
759
  );
760
 
 
 
 
 
 
 
 
 
 
 
 
 
761
  $this->add_control(
762
  'dots_nav_color',
763
  [
@@ -798,6 +780,18 @@ class Carousel extends Base {
798
  ]
799
  );
800
 
 
 
 
 
 
 
 
 
 
 
 
 
801
  $this->add_control(
802
  'dots_nav_active_color',
803
  [
116
  ]
117
  );
118
 
119
+ $placeholder = [
120
+ 'image' => [
121
+ 'url' => Utils::get_placeholder_image_src(),
122
+ ],
123
+ ];
124
+
125
  $this->add_control(
126
  'slides',
127
  [
129
  'type' => Controls_Manager::REPEATER,
130
  'fields' => $repeater->get_controls(),
131
  'title_field' => '<# print(title || "Carousel Item"); #>',
132
+ 'default' => array_fill( 0, 7, $placeholder )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  ]
134
  );
135
 
470
  $this->start_controls_section(
471
  '_section_style_arrow',
472
  [
473
+ 'label' => __( 'Navigation :: Arrow', 'happy-elementor-addons' ),
474
  'tab' => Controls_Manager::TAB_STYLE,
475
  ]
476
  );
658
  $this->start_controls_section(
659
  '_section_style_dots',
660
  [
661
+ 'label' => __( 'Navigation :: Dots', 'happy-elementor-addons' ),
662
  'tab' => Controls_Manager::TAB_STYLE,
663
  ]
664
  );
728
  ]
729
  );
730
 
731
+ $this->add_control(
732
+ 'dots_nav_size',
733
+ [
734
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
735
+ 'type' => Controls_Manager::SLIDER,
736
+ 'size_units' => ['px'],
737
+ 'selectors' => [
738
+ '{{WRAPPER}} .slick-dots li button:before' => 'font-size: {{SIZE}}{{UNIT}};',
739
+ ],
740
+ ]
741
+ );
742
+
743
  $this->add_control(
744
  'dots_nav_color',
745
  [
780
  ]
781
  );
782
 
783
+ $this->add_control(
784
+ 'dots_nav_active_size',
785
+ [
786
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
787
+ 'type' => Controls_Manager::SLIDER,
788
+ 'size_units' => ['px'],
789
+ 'selectors' => [
790
+ '{{WRAPPER}} .slick-dots li.slick-active button:before' => 'font-size: {{SIZE}}{{UNIT}};',
791
+ ],
792
+ ]
793
+ );
794
+
795
  $this->add_control(
796
  'dots_nav_active_color',
797
  [
widgets/cf7/widget.php CHANGED
@@ -1,543 +1,543 @@
1
- <?php
2
- /**
3
- * Contact form 7 widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Widget;
8
-
9
- use Elementor\Controls_Manager;
10
- use Elementor\Group_Control_Border;
11
- use Elementor\Group_Control_Box_Shadow;
12
- use Elementor\Group_Control_Typography;
13
- use Elementor\Scheme_Typography;
14
-
15
- defined( 'ABSPATH' ) || die();
16
-
17
- class CF7 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 __( 'Contact Form 7', 'happy-elementor-addons' );
29
- }
30
-
31
- public function get_custom_help_url() {
32
- return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/contact-7-form/';
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-form';
45
- }
46
-
47
- public function get_keywords() {
48
- return [ 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
49
- }
50
-
51
- protected function register_content_controls() {
52
- $this->start_controls_section(
53
- '_section_cf7',
54
- [
55
- 'label' => ha_is_cf7_activated() ? __( 'Contact Form 7', 'happy-elementor-addons' ) : __( 'Missing Notice', 'happy-elementor-addons' ),
56
- 'tab' => Controls_Manager::TAB_CONTENT,
57
- ]
58
- );
59
-
60
- if ( ! ha_is_cf7_activated() ) {
61
- $this->add_control(
62
- '_cf7_missing_notice',
63
- [
64
- 'type' => Controls_Manager::RAW_HTML,
65
- 'raw' => sprintf(
66
- __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
67
- '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Contact+Form+7&tab=search&type=term' ) )
68
- .'" target="_blank" rel="noopener">Contact Form 7</a>',
69
- ha_get_current_user_display_name()
70
- ),
71
- 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
72
- ]
73
- );
74
-
75
- $this->add_control(
76
- '_cf7_install',
77
- [
78
- 'type' => Controls_Manager::RAW_HTML,
79
- 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Contact+Form+7&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate Contact Form 7</a>',
80
- ]
81
- );
82
- $this->end_controls_section();
83
- return;
84
- }
85
-
86
- $this->add_control(
87
- 'form_id',
88
- [
89
- 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
90
- 'type' => Controls_Manager::SELECT,
91
- 'label_block' => true,
92
- 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_cf7_forms(),
93
- ]
94
- );
95
-
96
- $this->add_control(
97
- 'html_class',
98
- [
99
- 'label' => __( 'HTML Class', 'happy-elementor-addons' ),
100
- 'type' => Controls_Manager::TEXT,
101
- 'label_block' => true,
102
- 'description' => __( 'Add CSS custom class to the form.', 'happy-elementor-addons' ),
103
- ]
104
- );
105
-
106
- $this->end_controls_section();
107
- }
108
-
109
- protected function register_style_controls() {
110
- $this->start_controls_section(
111
- '_section_fields_style',
112
- [
113
- 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
114
- 'tab' => Controls_Manager::TAB_STYLE,
115
- ]
116
- );
117
-
118
- $this->add_responsive_control(
119
- 'field_width',
120
- [
121
- 'label' => __( 'Width', 'happy-elementor-addons' ),
122
- 'type' => Controls_Manager::SLIDER,
123
- 'default' => [
124
- 'unit' => '%',
125
- ],
126
- 'tablet_default' => [
127
- 'unit' => '%',
128
- ],
129
- 'mobile_default' => [
130
- 'unit' => '%',
131
- ],
132
- 'size_units' => [ '%', 'px' ],
133
- 'range' => [
134
- '%' => [
135
- 'min' => 1,
136
- 'max' => 100,
137
- ],
138
- 'px' => [
139
- 'min' => 1,
140
- 'max' => 500,
141
- ],
142
- ],
143
- 'selectors' => [
144
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'width: {{SIZE}}{{UNIT}};',
145
- '{{WRAPPER}} .ha-cf7-form label' => 'width: {{SIZE}}{{UNIT}};',
146
- ],
147
- ]
148
- );
149
-
150
- $this->add_responsive_control(
151
- 'field_margin',
152
- [
153
- 'label' => __( 'Spacing Bottom', 'happy-elementor-addons' ),
154
- 'type' => Controls_Manager::SLIDER,
155
- 'size_units' => [ 'px' ],
156
- 'range' => [
157
- 'px' => [
158
- 'min' => 0,
159
- 'max' => 100,
160
- ],
161
- ],
162
- 'selectors' => [
163
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'margin-bottom: {{SIZE}}{{UNIT}};',
164
- ],
165
- ]
166
- );
167
-
168
- $this->add_responsive_control(
169
- 'field_padding',
170
- [
171
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
172
- 'type' => Controls_Manager::DIMENSIONS,
173
- 'size_units' => [ 'px', 'em', '%' ],
174
- 'selectors' => [
175
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
176
- ],
177
- ]
178
- );
179
-
180
- $this->add_responsive_control(
181
- 'field_border_radius',
182
- [
183
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
184
- 'type' => Controls_Manager::DIMENSIONS,
185
- 'size_units' => [ 'px', '%' ],
186
- 'selectors' => [
187
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
188
- ],
189
- ]
190
- );
191
-
192
- $this->add_control(
193
- 'hr',
194
- [
195
- 'type' => Controls_Manager::DIVIDER,
196
- 'style' => 'thick',
197
- ]
198
- );
199
-
200
- $this->add_group_control(
201
- Group_Control_Typography::get_type(),
202
- [
203
- 'name' => 'field_typography',
204
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
205
- 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
206
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
207
- ]
208
- );
209
-
210
- $this->add_control(
211
- 'field_color',
212
- [
213
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
214
- 'type' => Controls_Manager::COLOR,
215
- 'selectors' => [
216
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'color: {{VALUE}}',
217
- ],
218
- ]
219
- );
220
-
221
- $this->add_control(
222
- 'field_placeholder_color',
223
- [
224
- 'label' => __( 'Placeholder Text Color', 'happy-elementor-addons' ),
225
- 'type' => Controls_Manager::COLOR,
226
- 'selectors' => [
227
- '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
228
- '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
229
- '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
230
- ],
231
- ]
232
- );
233
-
234
- $this->start_controls_tabs( 'tabs_field_state' );
235
-
236
- $this->start_controls_tab(
237
- 'tab_field_normal',
238
- [
239
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
240
- ]
241
- );
242
-
243
- $this->add_group_control(
244
- Group_Control_Border::get_type(),
245
- [
246
- 'name' => 'field_border',
247
- 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
248
- ]
249
- );
250
-
251
- $this->add_group_control(
252
- Group_Control_Box_Shadow::get_type(),
253
- [
254
- 'name' => 'field_box_shadow',
255
- 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
256
- ]
257
- );
258
-
259
- $this->add_control(
260
- 'field_bg_color',
261
- [
262
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
263
- 'type' => Controls_Manager::COLOR,
264
- 'selectors' => [
265
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'background-color: {{VALUE}}',
266
- ],
267
- ]
268
- );
269
-
270
- $this->end_controls_tab();
271
-
272
- $this->start_controls_tab(
273
- 'tab_field_focus',
274
- [
275
- 'label' => __( 'Focus', 'happy-elementor-addons' ),
276
- ]
277
- );
278
-
279
- $this->add_group_control(
280
- Group_Control_Border::get_type(),
281
- [
282
- 'name' => 'field_focus_border',
283
- 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit):focus',
284
- ]
285
- );
286
-
287
- $this->add_group_control(
288
- Group_Control_Box_Shadow::get_type(),
289
- [
290
- 'name' => 'field_focus_box_shadow',
291
- 'exclude' => [
292
- 'box_shadow_position',
293
- ],
294
- 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit):focus',
295
- ]
296
- );
297
-
298
- $this->add_control(
299
- 'field_focus_bg_color',
300
- [
301
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
302
- 'type' => Controls_Manager::COLOR,
303
- 'selectors' => [
304
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit):focus' => 'background-color: {{VALUE}}',
305
- ],
306
- ]
307
- );
308
-
309
- $this->end_controls_tab();
310
- $this->end_controls_tabs();
311
-
312
- $this->end_controls_section();
313
-
314
-
315
- $this->start_controls_section(
316
- 'cf7-form-label',
317
- [
318
- 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
319
- 'tab' => Controls_Manager::TAB_STYLE,
320
- ]
321
- );
322
-
323
- $this->add_responsive_control(
324
- 'label_margin',
325
- [
326
- 'label' => __( 'Spacing Bottom', 'happy-elementor-addons' ),
327
- 'type' => Controls_Manager::SLIDER,
328
- 'size_units' => [ 'px' ],
329
- 'range' => [
330
- 'px' => [
331
- 'min' => 0,
332
- 'max' => 100,
333
- ],
334
- ],
335
- 'selectors' => [
336
- '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'margin-top: {{SIZE}}{{UNIT}};',
337
- ],
338
- ]
339
- );
340
-
341
- $this->add_control(
342
- 'hr3',
343
- [
344
- 'type' => Controls_Manager::DIVIDER,
345
- 'style' => 'thick',
346
- ]
347
- );
348
-
349
- $this->add_group_control(
350
- Group_Control_Typography::get_type(),
351
- [
352
- 'name' => 'label_typography',
353
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
354
- 'selector' => '{{WRAPPER}} label',
355
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
356
- ]
357
- );
358
-
359
- $this->add_control(
360
- 'label_color',
361
- [
362
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
363
- 'type' => Controls_Manager::COLOR,
364
- 'selectors' => [
365
- '{{WRAPPER}} label' => 'color: {{VALUE}}',
366
- ],
367
- ]
368
- );
369
-
370
- $this->end_controls_section();
371
-
372
- $this->start_controls_section(
373
- 'submit',
374
- [
375
- 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
376
- 'tab' => Controls_Manager::TAB_STYLE,
377
- ]
378
- );
379
-
380
- $this->add_responsive_control(
381
- 'submit_margin',
382
- [
383
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
384
- 'type' => Controls_Manager::DIMENSIONS,
385
- 'size_units' => [ 'px', '%' ],
386
- 'selectors' => [
387
- '{{WRAPPER}} .wpcf7-submit' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
388
- ],
389
- ]
390
- );
391
-
392
- $this->add_responsive_control(
393
- 'submit_padding',
394
- [
395
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
396
- 'type' => Controls_Manager::DIMENSIONS,
397
- 'size_units' => [ 'px', 'em', '%' ],
398
- 'selectors' => [
399
- '{{WRAPPER}} .wpcf7-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
400
- ],
401
- ]
402
- );
403
-
404
- $this->add_group_control(
405
- Group_Control_Typography::get_type(),
406
- [
407
- 'name' => 'submit_typography',
408
- 'selector' => '{{WRAPPER}} .wpcf7-submit',
409
- 'scheme' => Scheme_Typography::TYPOGRAPHY_4
410
- ]
411
- );
412
-
413
- $this->add_group_control(
414
- Group_Control_Border::get_type(),
415
- [
416
- 'name' => 'submit_border',
417
- 'selector' => '{{WRAPPER}} .wpcf7-submit',
418
- ]
419
- );
420
-
421
- $this->add_control(
422
- 'submit_border_radius',
423
- [
424
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
425
- 'type' => Controls_Manager::DIMENSIONS,
426
- 'size_units' => [ 'px', '%' ],
427
- 'selectors' => [
428
- '{{WRAPPER}} .wpcf7-submit' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
429
- ],
430
- ]
431
- );
432
-
433
- $this->add_group_control(
434
- Group_Control_Box_Shadow::get_type(),
435
- [
436
- 'name' => 'submit_box_shadow',
437
- 'selector' => '{{WRAPPER}} .wpcf7-submit',
438
- ]
439
- );
440
-
441
- $this->add_control(
442
- 'hr4',
443
- [
444
- 'type' => Controls_Manager::DIVIDER,
445
- 'style' => 'thick',
446
- ]
447
- );
448
-
449
- $this->start_controls_tabs( 'tabs_button_style' );
450
-
451
- $this->start_controls_tab(
452
- 'tab_button_normal',
453
- [
454
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
455
- ]
456
- );
457
-
458
- $this->add_control(
459
- 'submit_color',
460
- [
461
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
462
- 'type' => Controls_Manager::COLOR,
463
- 'default' => '',
464
- 'selectors' => [
465
- '{{WRAPPER}} .wpcf7-submit' => 'color: {{VALUE}};',
466
- ],
467
- ]
468
- );
469
-
470
- $this->add_control(
471
- 'submit_bg_color',
472
- [
473
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
474
- 'type' => Controls_Manager::COLOR,
475
- 'selectors' => [
476
- '{{WRAPPER}} .wpcf7-submit' => 'background-color: {{VALUE}};',
477
- ],
478
- ]
479
- );
480
-
481
- $this->end_controls_tab();
482
-
483
- $this->start_controls_tab(
484
- 'tab_button_hover',
485
- [
486
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
487
- ]
488
- );
489
-
490
- $this->add_control(
491
- 'submit_hover_color',
492
- [
493
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
494
- 'type' => Controls_Manager::COLOR,
495
- 'selectors' => [
496
- '{{WRAPPER}} .wpcf7-submit:hover, {{WRAPPER}} .wpcf7-submit:focus' => 'color: {{VALUE}};',
497
- ],
498
- ]
499
- );
500
-
501
- $this->add_control(
502
- 'submit_hover_bg_color',
503
- [
504
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
505
- 'type' => Controls_Manager::COLOR,
506
- 'selectors' => [
507
- '{{WRAPPER}} .wpcf7-submit:hover, {{WRAPPER}} .wpcf7-submit:focus' => 'background-color: {{VALUE}};',
508
- ],
509
- ]
510
- );
511
-
512
- $this->add_control(
513
- 'submit_hover_border_color',
514
- [
515
- 'label' => __( 'Border Color', 'happy-elementor-addons' ),
516
- 'type' => Controls_Manager::COLOR,
517
- 'selectors' => [
518
- '{{WRAPPER}} .wpcf7-submit:hover, {{WRAPPER}} .wpcf7-submit:focus' => 'border-color: {{VALUE}};',
519
- ],
520
- ]
521
- );
522
-
523
- $this->end_controls_tab();
524
- $this->end_controls_tabs();
525
-
526
- $this->end_controls_section();
527
- }
528
-
529
- protected function render() {
530
- if ( ! ha_is_cf7_activated() ) {
531
- return;
532
- }
533
-
534
- $settings = $this->get_settings_for_display();
535
-
536
- if ( ! empty( $settings['form_id'] ) ) {
537
- echo ha_do_shortcode( 'contact-form-7', [
538
- 'id' => $settings['form_id'],
539
- 'html_class' => 'ha-cf7-form ' . ha_sanitize_html_class_param( $settings['html_class'] ),
540
- ] );
541
- }
542
- }
543
- }
1
+ <?php
2
+ /**
3
+ * Contact form 7 widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Controls_Manager;
10
+ use Elementor\Group_Control_Border;
11
+ use Elementor\Group_Control_Box_Shadow;
12
+ use Elementor\Group_Control_Typography;
13
+ use Elementor\Scheme_Typography;
14
+
15
+ defined( 'ABSPATH' ) || die();
16
+
17
+ class CF7 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 __( 'Contact Form 7', 'happy-elementor-addons' );
29
+ }
30
+
31
+ public function get_custom_help_url() {
32
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/contact-7-form/';
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-form';
45
+ }
46
+
47
+ public function get_keywords() {
48
+ return [ 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
49
+ }
50
+
51
+ protected function register_content_controls() {
52
+ $this->start_controls_section(
53
+ '_section_cf7',
54
+ [
55
+ 'label' => ha_is_cf7_activated() ? __( 'Contact Form 7', 'happy-elementor-addons' ) : __( 'Missing Notice', 'happy-elementor-addons' ),
56
+ 'tab' => Controls_Manager::TAB_CONTENT,
57
+ ]
58
+ );
59
+
60
+ if ( ! ha_is_cf7_activated() ) {
61
+ $this->add_control(
62
+ '_cf7_missing_notice',
63
+ [
64
+ 'type' => Controls_Manager::RAW_HTML,
65
+ 'raw' => sprintf(
66
+ __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
67
+ '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Contact+Form+7&tab=search&type=term' ) )
68
+ .'" target="_blank" rel="noopener">Contact Form 7</a>',
69
+ ha_get_current_user_display_name()
70
+ ),
71
+ 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
72
+ ]
73
+ );
74
+
75
+ $this->add_control(
76
+ '_cf7_install',
77
+ [
78
+ 'type' => Controls_Manager::RAW_HTML,
79
+ 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Contact+Form+7&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate Contact Form 7</a>',
80
+ ]
81
+ );
82
+ $this->end_controls_section();
83
+ return;
84
+ }
85
+
86
+ $this->add_control(
87
+ 'form_id',
88
+ [
89
+ 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
90
+ 'type' => Controls_Manager::SELECT,
91
+ 'label_block' => true,
92
+ 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_cf7_forms(),
93
+ ]
94
+ );
95
+
96
+ $this->add_control(
97
+ 'html_class',
98
+ [
99
+ 'label' => __( 'HTML Class', 'happy-elementor-addons' ),
100
+ 'type' => Controls_Manager::TEXT,
101
+ 'label_block' => true,
102
+ 'description' => __( 'Add CSS custom class to the form.', 'happy-elementor-addons' ),
103
+ ]
104
+ );
105
+
106
+ $this->end_controls_section();
107
+ }
108
+
109
+ protected function register_style_controls() {
110
+ $this->start_controls_section(
111
+ '_section_fields_style',
112
+ [
113
+ 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
114
+ 'tab' => Controls_Manager::TAB_STYLE,
115
+ ]
116
+ );
117
+
118
+ $this->add_responsive_control(
119
+ 'field_width',
120
+ [
121
+ 'label' => __( 'Width', 'happy-elementor-addons' ),
122
+ 'type' => Controls_Manager::SLIDER,
123
+ 'default' => [
124
+ 'unit' => '%',
125
+ ],
126
+ 'tablet_default' => [
127
+ 'unit' => '%',
128
+ ],
129
+ 'mobile_default' => [
130
+ 'unit' => '%',
131
+ ],
132
+ 'size_units' => [ '%', 'px' ],
133
+ 'range' => [
134
+ '%' => [
135
+ 'min' => 1,
136
+ 'max' => 100,
137
+ ],
138
+ 'px' => [
139
+ 'min' => 1,
140
+ 'max' => 500,
141
+ ],
142
+ ],
143
+ 'selectors' => [
144
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'width: {{SIZE}}{{UNIT}};',
145
+ '{{WRAPPER}} .ha-cf7-form label' => 'width: {{SIZE}}{{UNIT}};',
146
+ ],
147
+ ]
148
+ );
149
+
150
+ $this->add_responsive_control(
151
+ 'field_margin',
152
+ [
153
+ 'label' => __( 'Spacing Bottom', 'happy-elementor-addons' ),
154
+ 'type' => Controls_Manager::SLIDER,
155
+ 'size_units' => [ 'px' ],
156
+ 'range' => [
157
+ 'px' => [
158
+ 'min' => 0,
159
+ 'max' => 100,
160
+ ],
161
+ ],
162
+ 'selectors' => [
163
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'margin-bottom: {{SIZE}}{{UNIT}};',
164
+ ],
165
+ ]
166
+ );
167
+
168
+ $this->add_responsive_control(
169
+ 'field_padding',
170
+ [
171
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
172
+ 'type' => Controls_Manager::DIMENSIONS,
173
+ 'size_units' => [ 'px', 'em', '%' ],
174
+ 'selectors' => [
175
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
176
+ ],
177
+ ]
178
+ );
179
+
180
+ $this->add_responsive_control(
181
+ 'field_border_radius',
182
+ [
183
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
184
+ 'type' => Controls_Manager::DIMENSIONS,
185
+ 'size_units' => [ 'px', '%' ],
186
+ 'selectors' => [
187
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
188
+ ],
189
+ ]
190
+ );
191
+
192
+ $this->add_control(
193
+ 'hr',
194
+ [
195
+ 'type' => Controls_Manager::DIVIDER,
196
+ 'style' => 'thick',
197
+ ]
198
+ );
199
+
200
+ $this->add_group_control(
201
+ Group_Control_Typography::get_type(),
202
+ [
203
+ 'name' => 'field_typography',
204
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
205
+ 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
206
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
207
+ ]
208
+ );
209
+
210
+ $this->add_control(
211
+ 'field_color',
212
+ [
213
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
214
+ 'type' => Controls_Manager::COLOR,
215
+ 'selectors' => [
216
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'color: {{VALUE}}',
217
+ ],
218
+ ]
219
+ );
220
+
221
+ $this->add_control(
222
+ 'field_placeholder_color',
223
+ [
224
+ 'label' => __( 'Placeholder Text Color', 'happy-elementor-addons' ),
225
+ 'type' => Controls_Manager::COLOR,
226
+ 'selectors' => [
227
+ '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
228
+ '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
229
+ '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
230
+ ],
231
+ ]
232
+ );
233
+
234
+ $this->start_controls_tabs( 'tabs_field_state' );
235
+
236
+ $this->start_controls_tab(
237
+ 'tab_field_normal',
238
+ [
239
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
240
+ ]
241
+ );
242
+
243
+ $this->add_group_control(
244
+ Group_Control_Border::get_type(),
245
+ [
246
+ 'name' => 'field_border',
247
+ 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
248
+ ]
249
+ );
250
+
251
+ $this->add_group_control(
252
+ Group_Control_Box_Shadow::get_type(),
253
+ [
254
+ 'name' => 'field_box_shadow',
255
+ 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)',
256
+ ]
257
+ );
258
+
259
+ $this->add_control(
260
+ 'field_bg_color',
261
+ [
262
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
263
+ 'type' => Controls_Manager::COLOR,
264
+ 'selectors' => [
265
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'background-color: {{VALUE}}',
266
+ ],
267
+ ]
268
+ );
269
+
270
+ $this->end_controls_tab();
271
+
272
+ $this->start_controls_tab(
273
+ 'tab_field_focus',
274
+ [
275
+ 'label' => __( 'Focus', 'happy-elementor-addons' ),
276
+ ]
277
+ );
278
+
279
+ $this->add_group_control(
280
+ Group_Control_Border::get_type(),
281
+ [
282
+ 'name' => 'field_focus_border',
283
+ 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit):focus',
284
+ ]
285
+ );
286
+
287
+ $this->add_group_control(
288
+ Group_Control_Box_Shadow::get_type(),
289
+ [
290
+ 'name' => 'field_focus_box_shadow',
291
+ 'exclude' => [
292
+ 'box_shadow_position',
293
+ ],
294
+ 'selector' => '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit):focus',
295
+ ]
296
+ );
297
+
298
+ $this->add_control(
299
+ 'field_focus_bg_color',
300
+ [
301
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
302
+ 'type' => Controls_Manager::COLOR,
303
+ 'selectors' => [
304
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit):focus' => 'background-color: {{VALUE}}',
305
+ ],
306
+ ]
307
+ );
308
+
309
+ $this->end_controls_tab();
310
+ $this->end_controls_tabs();
311
+
312
+ $this->end_controls_section();
313
+
314
+
315
+ $this->start_controls_section(
316
+ 'cf7-form-label',
317
+ [
318
+ 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
319
+ 'tab' => Controls_Manager::TAB_STYLE,
320
+ ]
321
+ );
322
+
323
+ $this->add_responsive_control(
324
+ 'label_margin',
325
+ [
326
+ 'label' => __( 'Spacing Bottom', 'happy-elementor-addons' ),
327
+ 'type' => Controls_Manager::SLIDER,
328
+ 'size_units' => [ 'px' ],
329
+ 'range' => [
330
+ 'px' => [
331
+ 'min' => 0,
332
+ 'max' => 100,
333
+ ],
334
+ ],
335
+ 'selectors' => [
336
+ '{{WRAPPER}} .wpcf7-form-control:not(.wpcf7-submit)' => 'margin-top: {{SIZE}}{{UNIT}};',
337
+ ],
338
+ ]
339
+ );
340
+
341
+ $this->add_control(
342
+ 'hr3',
343
+ [
344
+ 'type' => Controls_Manager::DIVIDER,
345
+ 'style' => 'thick',
346
+ ]
347
+ );
348
+
349
+ $this->add_group_control(
350
+ Group_Control_Typography::get_type(),
351
+ [
352
+ 'name' => 'label_typography',
353
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
354
+ 'selector' => '{{WRAPPER}} label',
355
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
356
+ ]
357
+ );
358
+
359
+ $this->add_control(
360
+ 'label_color',
361
+ [
362
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
363
+ 'type' => Controls_Manager::COLOR,
364
+ 'selectors' => [
365
+ '{{WRAPPER}} label' => 'color: {{VALUE}}',
366
+ ],
367
+ ]
368
+ );
369
+
370
+ $this->end_controls_section();
371
+
372
+ $this->start_controls_section(
373
+ 'submit',
374
+ [
375
+ 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
376
+ 'tab' => Controls_Manager::TAB_STYLE,
377
+ ]
378
+ );
379
+
380
+ $this->add_responsive_control(
381
+ 'submit_margin',
382
+ [
383
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
384
+ 'type' => Controls_Manager::DIMENSIONS,
385
+ 'size_units' => [ 'px', '%' ],
386
+ 'selectors' => [
387
+ '{{WRAPPER}} .wpcf7-submit' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
388
+ ],
389
+ ]
390
+ );
391
+
392
+ $this->add_responsive_control(
393
+ 'submit_padding',
394
+ [
395
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
396
+ 'type' => Controls_Manager::DIMENSIONS,
397
+ 'size_units' => [ 'px', 'em', '%' ],
398
+ 'selectors' => [
399
+ '{{WRAPPER}} .wpcf7-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
400
+ ],
401
+ ]
402
+ );
403
+
404
+ $this->add_group_control(
405
+ Group_Control_Typography::get_type(),
406
+ [
407
+ 'name' => 'submit_typography',
408
+ 'selector' => '{{WRAPPER}} .wpcf7-submit',
409
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
410
+ ]
411
+ );
412
+
413
+ $this->add_group_control(
414
+ Group_Control_Border::get_type(),
415
+ [
416
+ 'name' => 'submit_border',
417
+ 'selector' => '{{WRAPPER}} .wpcf7-submit',
418
+ ]
419
+ );
420
+
421
+ $this->add_control(
422
+ 'submit_border_radius',
423
+ [
424
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
425
+ 'type' => Controls_Manager::DIMENSIONS,
426
+ 'size_units' => [ 'px', '%' ],
427
+ 'selectors' => [
428
+ '{{WRAPPER}} .wpcf7-submit' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
429
+ ],
430
+ ]
431
+ );
432
+
433
+ $this->add_group_control(
434
+ Group_Control_Box_Shadow::get_type(),
435
+ [
436
+ 'name' => 'submit_box_shadow',
437
+ 'selector' => '{{WRAPPER}} .wpcf7-submit',
438
+ ]
439
+ );
440
+
441
+ $this->add_control(
442
+ 'hr4',
443
+ [
444
+ 'type' => Controls_Manager::DIVIDER,
445
+ 'style' => 'thick',
446
+ ]
447
+ );
448
+
449
+ $this->start_controls_tabs( 'tabs_button_style' );
450
+
451
+ $this->start_controls_tab(
452
+ 'tab_button_normal',
453
+ [
454
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
455
+ ]
456
+ );
457
+
458
+ $this->add_control(
459
+ 'submit_color',
460
+ [
461
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
462
+ 'type' => Controls_Manager::COLOR,
463
+ 'default' => '',
464
+ 'selectors' => [
465
+ '{{WRAPPER}} .wpcf7-submit' => 'color: {{VALUE}};',
466
+ ],
467
+ ]
468
+ );
469
+
470
+ $this->add_control(
471
+ 'submit_bg_color',
472
+ [
473
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
474
+ 'type' => Controls_Manager::COLOR,
475
+ 'selectors' => [
476
+ '{{WRAPPER}} .wpcf7-submit' => 'background-color: {{VALUE}};',
477
+ ],
478
+ ]
479
+ );
480
+
481
+ $this->end_controls_tab();
482
+
483
+ $this->start_controls_tab(
484
+ 'tab_button_hover',
485
+ [
486
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
487
+ ]
488
+ );
489
+
490
+ $this->add_control(
491
+ 'submit_hover_color',
492
+ [
493
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
494
+ 'type' => Controls_Manager::COLOR,
495
+ 'selectors' => [
496
+ '{{WRAPPER}} .wpcf7-submit:hover, {{WRAPPER}} .wpcf7-submit:focus' => 'color: {{VALUE}};',
497
+ ],
498
+ ]
499
+ );
500
+
501
+ $this->add_control(
502
+ 'submit_hover_bg_color',
503
+ [
504
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
505
+ 'type' => Controls_Manager::COLOR,
506
+ 'selectors' => [
507
+ '{{WRAPPER}} .wpcf7-submit:hover, {{WRAPPER}} .wpcf7-submit:focus' => 'background-color: {{VALUE}};',
508
+ ],
509
+ ]
510
+ );
511
+
512
+ $this->add_control(
513
+ 'submit_hover_border_color',
514
+ [
515
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
516
+ 'type' => Controls_Manager::COLOR,
517
+ 'selectors' => [
518
+ '{{WRAPPER}} .wpcf7-submit:hover, {{WRAPPER}} .wpcf7-submit:focus' => 'border-color: {{VALUE}};',
519
+ ],
520
+ ]
521
+ );
522
+
523
+ $this->end_controls_tab();
524
+ $this->end_controls_tabs();
525
+
526
+ $this->end_controls_section();
527
+ }
528
+
529
+ protected function render() {
530
+ if ( ! ha_is_cf7_activated() ) {
531
+ return;
532
+ }
533
+
534
+ $settings = $this->get_settings_for_display();
535
+
536
+ if ( ! empty( $settings['form_id'] ) ) {
537
+ echo ha_do_shortcode( 'contact-form-7', [
538
+ 'id' => $settings['form_id'],
539
+ 'html_class' => 'ha-cf7-form ' . ha_sanitize_html_class_param( $settings['html_class'] ),
540
+ ] );
541
+ }
542
+ }
543
+ }
widgets/data-table/widget.php CHANGED
@@ -1042,8 +1042,9 @@ class Data_Table extends Base {
1042
  protected function data_table_render() {
1043
  $settings = $this->get_settings_for_display();
1044
 
1045
- $table_row = [];
1046
  $table_cell = [];
 
1047
  foreach ( $settings['rows_data'] as $row ) {
1048
  $row_id = uniqid();
1049
 
@@ -1059,38 +1060,38 @@ class Data_Table extends Base {
1059
  $cell_key = end($table_row_keys );
1060
 
1061
  $table_cell[] = [
1062
- 'repeater_id' => $row['_id'],
1063
- 'row_id' => $table_row[$cell_key]['id'],
1064
- 'title' => $row['cell_name'],
1065
- 'row_span' => $row['row_span'],
1066
- 'row_column_span' => $row['row_column_span'],
1067
- 'row_icon' => ! empty( $row['row_icon'] ) ? $row['row_icon'] : '',
1068
- 'row_icons' => ! empty( $row['row_icons']['value'] ) ? $row['row_icons'] : '',
1069
- 'row_icon_show' => ! empty( $row['row_icon_show'] ) ? $row['row_icon_show'] : '',
1070
- 'row_image' => array_key_exists( 'row_image', $row ) ? $row['row_image'] : '',
1071
  'row_thumbnail_size' => !empty( $row['row_thumbnail_size'] ) ? $row['row_thumbnail_size'] : '',
1072
- 'cell_link' => !empty( $row['cell_link']['url'] ) ? $row['cell_link'] : '',
1073
  ];
1074
  }
1075
-
1076
  }
1077
  ?>
1078
 
1079
  <table class="ha-table">
1080
-
1081
  <thead class="ha-table__head">
1082
  <tr class="ha-table__head-column">
1083
  <?php foreach ( $settings['columns_data'] as $index => $column_cell ) :
1084
  $column_repeater_key = $this->get_repeater_setting_key( 'column_span', 'columns_data', $index );
 
1085
  $this->add_render_attribute( $column_repeater_key, 'class', 'ha-table__head-column-cell' );
1086
  $this->add_render_attribute( $column_repeater_key, 'class', 'elementor-repeater-item-' . $column_cell['_id'] );
 
1087
  if ( $column_cell['column_span'] ) {
1088
  $this->add_render_attribute( $column_repeater_key, 'colspan', $column_cell['column_span'] );
1089
  }
1090
  ?>
1091
  <th <?php echo $this->get_render_attribute_string( $column_repeater_key ); ?>>
1092
  <div class="ha-table__head-column-cell-wrap">
1093
- <div class="ha-table__head-column-cell-text"><?php echo esc_html( $column_cell['column_name'] ); ?></div>
1094
  <?php if ( $column_cell['column_media'] == 'icon' && ! empty( $column_cell['column_icons'] ) ) : ?>
1095
  <div class="ha-table__head-column-cell-icon">
1096
  <?php Icons_Manager::render_icon( $column_cell['column_icons'] ); ?>
@@ -1138,14 +1139,12 @@ class Data_Table extends Base {
1138
  <td <?php echo $this->get_render_attribute_string( $row_span_repeater_key ); ?>>
1139
  <div class="ha-table__body-row-cell-wrap">
1140
  <div class="ha-table__body-row-cell-text">
1141
- <?php
1142
- if ( ! empty( $table_cell[$j]['cell_link']['url'] ) ) :
1143
- ?>
1144
- <a <?php $this->print_render_attribute_string( $row_link_key ); ?>>
1145
- <?php echo esc_html( $table_cell[$j]['title'] ); ?>
1146
  </a>
1147
- <?php
1148
- else: echo esc_html( $table_cell[$j]['title'] );
1149
  endif;
1150
  ?>
1151
  </div>
@@ -1176,11 +1175,8 @@ class Data_Table extends Base {
1176
  </tr>
1177
  <?php endfor; ?>
1178
  </tbody>
1179
-
1180
  </table>
1181
 
1182
  <?php
1183
-
1184
  }
1185
-
1186
  }
1042
  protected function data_table_render() {
1043
  $settings = $this->get_settings_for_display();
1044
 
1045
+ $table_row = [];
1046
  $table_cell = [];
1047
+
1048
  foreach ( $settings['rows_data'] as $row ) {
1049
  $row_id = uniqid();
1050
 
1060
  $cell_key = end($table_row_keys );
1061
 
1062
  $table_cell[] = [
1063
+ 'repeater_id' => $row['_id'],
1064
+ 'row_id' => $table_row[$cell_key]['id'],
1065
+ 'title' => $row['cell_name'],
1066
+ 'row_span' => $row['row_span'],
1067
+ 'row_column_span' => $row['row_column_span'],
1068
+ 'row_icon' => ! empty( $row['row_icon'] ) ? $row['row_icon'] : '',
1069
+ 'row_icons' => ! empty( $row['row_icons']['value'] ) ? $row['row_icons'] : '',
1070
+ 'row_icon_show' => ! empty( $row['row_icon_show'] ) ? $row['row_icon_show'] : '',
1071
+ 'row_image' => array_key_exists( 'row_image', $row ) ? $row['row_image'] : '',
1072
  'row_thumbnail_size' => !empty( $row['row_thumbnail_size'] ) ? $row['row_thumbnail_size'] : '',
1073
+ 'cell_link' => !empty( $row['cell_link']['url'] ) ? $row['cell_link'] : '',
1074
  ];
1075
  }
 
1076
  }
1077
  ?>
1078
 
1079
  <table class="ha-table">
 
1080
  <thead class="ha-table__head">
1081
  <tr class="ha-table__head-column">
1082
  <?php foreach ( $settings['columns_data'] as $index => $column_cell ) :
1083
  $column_repeater_key = $this->get_repeater_setting_key( 'column_span', 'columns_data', $index );
1084
+
1085
  $this->add_render_attribute( $column_repeater_key, 'class', 'ha-table__head-column-cell' );
1086
  $this->add_render_attribute( $column_repeater_key, 'class', 'elementor-repeater-item-' . $column_cell['_id'] );
1087
+
1088
  if ( $column_cell['column_span'] ) {
1089
  $this->add_render_attribute( $column_repeater_key, 'colspan', $column_cell['column_span'] );
1090
  }
1091
  ?>
1092
  <th <?php echo $this->get_render_attribute_string( $column_repeater_key ); ?>>
1093
  <div class="ha-table__head-column-cell-wrap">
1094
+ <div class="ha-table__head-column-cell-text"><?php echo ha_kses_basic( $column_cell['column_name'] ); ?></div>
1095
  <?php if ( $column_cell['column_media'] == 'icon' && ! empty( $column_cell['column_icons'] ) ) : ?>
1096
  <div class="ha-table__head-column-cell-icon">
1097
  <?php Icons_Manager::render_icon( $column_cell['column_icons'] ); ?>
1139
  <td <?php echo $this->get_render_attribute_string( $row_span_repeater_key ); ?>>
1140
  <div class="ha-table__body-row-cell-wrap">
1141
  <div class="ha-table__body-row-cell-text">
1142
+ <?php if ( ! empty( $table_cell[$j]['cell_link']['url'] ) ) : ?>
1143
+ <a <?php $this->print_render_attribute_string( $row_link_key ); ?>>
1144
+ <?php echo ha_kses_basic( $table_cell[$j]['title'] ); ?>
 
 
1145
  </a>
1146
+ <?php else:
1147
+ echo ha_kses_basic( $table_cell[$j]['title'] );
1148
  endif;
1149
  ?>
1150
  </div>
1175
  </tr>
1176
  <?php endfor; ?>
1177
  </tbody>
 
1178
  </table>
1179
 
1180
  <?php
 
1181
  }
 
1182
  }
widgets/event-calendar/widget.php ADDED
@@ -0,0 +1,2270 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Event Calendar widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+
8
+ namespace Happy_Addons\Elementor\Widget;
9
+
10
+ use Elementor\Controls_Manager;
11
+ use Elementor\Group_Control_Border;
12
+ use Elementor\Group_Control_Box_Shadow;
13
+ use Elementor\Group_Control_Text_Shadow;
14
+ use Elementor\Group_Control_Typography;
15
+ use Elementor\Scheme_Typography;
16
+ use Elementor\Group_Control_Background;
17
+ use Elementor\Group_Control_Image_Size;
18
+ use Elementor\Utils;
19
+ use Elementor\Repeater;
20
+
21
+ defined( 'ABSPATH' ) || die();
22
+
23
+ class Event_Calendar extends Base {
24
+
25
+ /**
26
+ * Get widget title.
27
+ *
28
+ * @return string Widget title.
29
+ * @since 1.0.0
30
+ * @access public
31
+ *
32
+ */
33
+ public function get_title () {
34
+ return __( 'Event Calendar', 'happy-elementor-addons' );
35
+ }
36
+
37
+ public function get_custom_help_url() {
38
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/event-calendar/';
39
+ }
40
+
41
+ /**
42
+ * Get widget icon.
43
+ *
44
+ * @return string Widget icon.
45
+ * @since 1.0.0
46
+ * @access public
47
+ *
48
+ */
49
+ public function get_icon () {
50
+ return 'hm hm-calendar2';
51
+ }
52
+
53
+ public function get_keywords () {
54
+ return [ 'event-calendar', 'event', 'calender', 'time', 'shedule', 'google-calender' ];
55
+ }
56
+
57
+ /**
58
+ * Get a list of all WPForms
59
+ *
60
+ * @return array
61
+ */
62
+ public static function get_events () {
63
+ if (!function_exists('tribe_get_events')) {
64
+ return [];
65
+ }
66
+ $posts = [];
67
+ // $_posts = get_posts( [
68
+ // 'post_type' => 'post',
69
+ // 'post_status' => 'publish',
70
+ // 'posts_per_page' => -1,
71
+ // 'orderby' => 'title',
72
+ // 'order' => 'ASC',
73
+ // ] );
74
+
75
+ $_posts = tribe_get_events();
76
+
77
+ if ( ! empty( $_posts ) ) {
78
+ $posts = wp_list_pluck( $_posts, 'post_title', 'ID' );
79
+ }
80
+ return $posts;
81
+
82
+ }
83
+
84
+ /**
85
+ * Get the event calender category list
86
+ *
87
+ * @return array
88
+ */
89
+ public static function get_the_event_calendar_cat() {
90
+ if (!function_exists('tribe_get_events')) {
91
+ return [];
92
+ }
93
+ $args = [
94
+ 'taxonomy' => 'tribe_events_cat',
95
+ 'hide_empty' => false
96
+ ];
97
+ $options = [];
98
+ $tags = get_tags($args);
99
+
100
+ if (is_wp_error($tags)) {
101
+ return [];
102
+ }
103
+
104
+ foreach ($tags as $tag) {
105
+ $options[$tag->term_id] = $tag->name;
106
+ }
107
+ return $options;
108
+ }
109
+
110
+ /**
111
+ * Get a language code
112
+ *
113
+ * @return array
114
+ */
115
+ protected function language_code_list() {
116
+ return [
117
+ 'af' => 'Afrikaans',
118
+ 'sq' => 'Albanian',
119
+ 'ar' => 'Arabic',
120
+ 'eu' => 'Basque',
121
+ 'bn' => 'Bengali',
122
+ 'bs' => 'Bosnian',
123
+ 'bg' => 'Bulgarian',
124
+ 'ca' => 'Catalan',
125
+ 'zh-cn' => 'Chinese',
126
+ 'zh-tw' => 'Chinese-tw',
127
+ 'hr' => 'Croatian',
128
+ 'cs' => 'Czech',
129
+ 'da' => 'Danish',
130
+ 'nl' => 'Dutch',
131
+ 'en' => 'English',
132
+ 'et' => 'Estonian',
133
+ 'fi' => 'Finnish',
134
+ 'fr' => 'French',
135
+ 'gl' => 'Galician',
136
+ 'ka' => 'Georgian',
137
+ 'de' => 'German',
138
+ 'el' => 'Greek (Modern)',
139
+ 'he' => 'Hebrew',
140
+ 'hi' => 'Hindi',
141
+ 'hu' => 'Hungarian',
142
+ 'is' => 'Icelandic',
143
+ 'io' => 'Ido',
144
+ 'id' => 'Indonesian',
145
+ 'it' => 'Italian',
146
+ 'ja' => 'Japanese',
147
+ 'kk' => 'Kazakh',
148
+ 'ko' => 'Korean',
149
+ 'lv' => 'Latvian',
150
+ 'lb' => 'Letzeburgesch',
151
+ 'lt' => 'Lithuanian',
152
+ 'lu' => 'Luba-Katanga',
153
+ 'mk' => 'Macedonian',
154
+ 'mg' => 'Malagasy',
155
+ 'ms' => 'Malay',
156
+ 'ro' => 'Moldovan, Moldavian, Romanian',
157
+ 'nb' => 'Norwegian Bokmål',
158
+ 'nn' => 'Norwegian Nynorsk',
159
+ 'fa' => 'Persian',
160
+ 'pl' => 'Polish',
161
+ 'pt' => 'Portuguese',
162
+ 'ru' => 'Russian',
163
+ 'sr' => 'Serbian',
164
+ 'sk' => 'Slovak',
165
+ 'sl' => 'Slovenian',
166
+ 'es' => 'Spanish',
167
+ 'sv' => 'Swedish',
168
+ 'tr' => 'Turkish',
169
+ 'uk' => 'Ukrainian',
170
+ 'vi' => 'Vietnamese',
171
+ ];
172
+ }
173
+
174
+ protected function register_content_controls () {
175
+
176
+ $this->event_content_controls();
177
+
178
+ $this->event_google_content_controls();
179
+
180
+ $this->the_event_calendar_content_controls();
181
+
182
+ $this->event_settings_content_controls();
183
+ }
184
+
185
+ protected function event_content_controls () {
186
+
187
+ $this->start_controls_section(
188
+ '_section_event',
189
+ [
190
+ 'label' => __( 'Event', 'happy-elementor-addons' ),
191
+ 'tab' => Controls_Manager::TAB_CONTENT,
192
+ ]
193
+ );
194
+
195
+ $this->add_control(
196
+ 'event_calendar_type',
197
+ [
198
+ 'label' => __( 'Source', 'happy-elementor-addons' ),
199
+ 'label_block' => false,
200
+ 'type' => Controls_Manager::SELECT,
201
+ 'default' => 'manual',
202
+ 'options' => [
203
+ 'manual' => __( 'Manual', 'happy-elementor-addons' ),
204
+ 'google_calendar' => __( 'Google Calendar', 'happy-elementor-addons' ),
205
+ 'the_events_calendar' => __( 'The Event Calendar', 'happy-elementor-addons' ),
206
+ ],
207
+ // 'multiple' => true,
208
+ ]
209
+ );
210
+
211
+ $repeater = new Repeater();
212
+ $repeater->start_controls_tabs('event_calendar_tabs');
213
+
214
+ $repeater->start_controls_tab(
215
+ 'event_calendar_content_tab',
216
+ [
217
+ 'label' => __('Content', 'happy-elementor-addons'),
218
+ ]
219
+ );
220
+
221
+ $repeater->add_control(
222
+ 'title',
223
+ [
224
+ 'label' => __('Title', 'happy-elementor-addons'),
225
+ 'type' => Controls_Manager::TEXT,
226
+ 'label_block' => true,
227
+ 'default' => __('Event Title', 'happy-elementor-addons'),
228
+ 'dynamic' => [
229
+ 'active' => true,
230
+ ]
231
+ ]
232
+ );
233
+
234
+ $repeater->add_control(
235
+ 'guest',
236
+ [
237
+ 'label' => __('Guest/Speaker', 'happy-elementor-addons'),
238
+ 'type' => Controls_Manager::TEXT,
239
+ 'label_block' => true,
240
+ 'default' => __('Hasin Hayder', 'happy-elementor-addons'),
241
+ 'dynamic' => [
242
+ 'active' => true,
243
+ ]
244
+ ]
245
+ );
246
+
247
+ $repeater->add_control(
248
+ 'location',
249
+ [
250
+ 'label' => __('Location', 'happy-elementor-addons'),
251
+ 'type' => Controls_Manager::TEXT,
252
+ 'label_block' => true,
253
+ 'default' => __('Mirpur DOHS, Dhaka', 'happy-elementor-addons'),
254
+ 'dynamic' => [
255
+ 'active' => true,
256
+ ]
257
+ ]
258
+ );
259
+
260
+ $repeater->add_control(
261
+ 'image',
262
+ [
263
+ 'label' => __( 'Choose Image', 'happy-elementor-addons' ),
264
+ 'type' => Controls_Manager::MEDIA,
265
+ 'default' => [
266
+ 'url' => Utils::get_placeholder_image_src(),
267
+ ],
268
+ ]
269
+ );
270
+
271
+ $repeater->add_group_control(
272
+ Group_Control_Image_Size::get_type(),
273
+ [
274
+ 'name' => 'thumbnail',
275
+ 'label' => 'Thumbnail Size',
276
+ 'default' => 'thumbnail',
277
+ 'separator' => 'before',
278
+ 'exclude' => [
279
+ 'custom'
280
+ ]
281
+ ]
282
+ );
283
+
284
+ $repeater->add_control(
285
+ 'details_link',
286
+ [
287
+ 'label' => __('Details Link', 'happy-elementor-addons'),
288
+ 'type' => Controls_Manager::URL,
289
+ 'placeholder' => __('https://example.com', 'happy-elementor-addons'),
290
+ 'show_external' => true,
291
+ ]
292
+ );
293
+
294
+ $repeater->add_control(
295
+ 'all_day',
296
+ [
297
+ 'label' => __('All Day', 'happy-elementor-addons'),
298
+ 'type' => Controls_Manager::SWITCHER,
299
+ 'label_block' => false,
300
+ 'return_value' => 'yes',
301
+ ]
302
+ );
303
+
304
+ $repeater->add_control(
305
+ 'start_date',
306
+ [
307
+ 'label' => __('Start Date', 'happy-elementor-addons'),
308
+ 'type' => Controls_Manager::DATE_TIME,
309
+ 'default' => date('Y-m-d H:i', current_time('timestamp', 0)),
310
+ 'condition' => [
311
+ 'all_day' => '',
312
+ ],
313
+ ]
314
+ );
315
+
316
+ $repeater->add_control(
317
+ 'end_date',
318
+ [
319
+ 'label' => __('End Date', 'happy-elementor-addons'),
320
+ 'type' => Controls_Manager::DATE_TIME,
321
+ 'default' => date('Y-m-d H:i', strtotime("+59 minute", current_time('timestamp', 0))),
322
+ 'condition' => [
323
+ 'all_day' => '',
324
+ ],
325
+ ]
326
+ );
327
+
328
+ $repeater->add_control(
329
+ 'start_date_allday',
330
+ [
331
+ 'label' => __('Start Date', 'happy-elementor-addons'),
332
+ 'type' => Controls_Manager::DATE_TIME,
333
+ 'picker_options' => ['enableTime' => false],
334
+ 'default' => date('Y-m-d', current_time('timestamp', 0)),
335
+ 'condition' => [
336
+ 'all_day' => 'yes',
337
+ ],
338
+ ]
339
+ );
340
+
341
+ $repeater->add_control(
342
+ 'end_date_allday',
343
+ [
344
+ 'label' => __('End Date', 'happy-elementor-addons'),
345
+ 'type' => Controls_Manager::DATE_TIME,
346
+ 'picker_options' => ['enableTime' => false],
347
+ 'default' => date('Y-m-d', current_time('timestamp', 0)),
348
+ 'condition' => [
349
+ 'all_day' => 'yes',
350
+ ],
351
+ ]
352
+ );
353
+
354
+ $repeater->add_control(
355
+ 'individual_style',
356
+ [
357
+ 'label' => __('Individual Style?', 'happy-elementor-addons'),
358
+ 'type' => Controls_Manager::SWITCHER,
359
+ 'label_on' => __('Yes', 'happy-elementor-addons'),
360
+ 'label_off' => __('No', 'happy-elementor-addons'),
361
+ 'return_value' => 'yes',
362
+ 'default' => 'no',
363
+ 'style_transfer' => true,
364
+ 'separator' => 'after',
365
+ ]
366
+ );
367
+
368
+ $repeater->add_control(
369
+ 'text_color',
370
+ [
371
+ 'label' => __('Text Color', 'happy-elementor-addons'),
372
+ 'type' => Controls_Manager::COLOR,
373
+ 'selectors' => [
374
+ '{{WRAPPER}} .ha-ec-wrapper {{CURRENT_ITEM}}' => 'color: {{VALUE}}!important;',
375
+ '{{WRAPPER}} .ha-ec-wrapper {{CURRENT_ITEM}} .fc-event-main' => 'color: {{VALUE}}!important;',
376
+ ],
377
+ 'condition' => [
378
+ 'individual_style' => 'yes',
379
+ ],
380
+ 'style_transfer' => true,
381
+ // 'render_type' => 'template',
382
+ ]
383
+ );
384
+
385
+ $repeater->add_control(
386
+ 'bg_color',
387
+ [
388
+ 'label' => __('Background', 'happy-elementor-addons'),
389
+ 'type' => Controls_Manager::COLOR,
390
+ 'selectors' => [
391
+ '{{WRAPPER}} .ha-ec-wrapper {{CURRENT_ITEM}}' => 'background-color: {{VALUE}}!important;',
392
+ ],
393
+ 'condition' => [
394
+ 'individual_style' => 'yes',
395
+ ],
396
+ 'style_transfer' => true,
397
+ ]
398
+ );
399
+
400
+ $repeater->add_control(
401
+ 'border_color',
402
+ [
403
+ 'label' => __('Dot Color', 'happy-elementor-addons'),
404
+ 'type' => Controls_Manager::COLOR,
405
+ 'selectors' => [
406
+ '{{WRAPPER}} .ha-ec-wrapper {{CURRENT_ITEM}} .fc-daygrid-event-dot' => 'border-color: {{VALUE}}!important;',
407
+ '{{WRAPPER}} .ha-ec-wrapper {{CURRENT_ITEM}} .fc-list-event-dot' => 'border-color: {{VALUE}}!important;',
408
+ ],
409
+ 'condition' => [
410
+ 'individual_style' => 'yes'
411
+ ],
412
+ 'style_transfer' => true,
413
+ ]
414
+ );
415
+
416
+ $repeater->end_controls_tab();
417
+
418
+ $repeater->start_controls_tab(
419
+ 'event_calendar_description_tab',
420
+ [
421
+ 'label' => __('Description', 'happy-elementor-addons'),
422
+ ]
423
+ );
424
+
425
+ $repeater->add_control(
426
+ 'description',
427
+ [
428
+ 'label' => __('Description', 'happy-elementor-addons'),
429
+ 'show_label' => true,
430
+ 'type' => Controls_Manager::WYSIWYG,
431
+ 'default' => sprintf(
432
+ '<strong>%s</strong> %s',
433
+ __('Lorem Ipsum', 'happy-elementor-addons'),
434
+ __('is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries', 'happy-elementor-addons')
435
+ ),
436
+
437
+ 'default' => __('<strong>Lorem Ipsum</strong> is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries', 'happy-elementor-addons'),
438
+ ]
439
+ );
440
+
441
+
442
+ $repeater->end_controls_tab();
443
+ $repeater->end_controls_tabs();
444
+
445
+ $this->add_control(
446
+ 'manual_event_list',
447
+ [
448
+ 'show_label' => false,
449
+ 'type' => Controls_Manager::REPEATER,
450
+ 'fields' => $repeater->get_controls(),
451
+ 'title_field' => '{{{ title }}}',
452
+ 'default' => [
453
+ [
454
+ 'title' => __('Event Title', 'happy-elementor-addons'),
455
+ ],
456
+ ],
457
+ 'condition' => [
458
+ 'event_calendar_type' => 'manual'
459
+ ],
460
+ ]
461
+ );
462
+
463
+ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
464
+ $this->add_control(
465
+ 'the_event_calendar_warning_text',
466
+ [
467
+ 'type' => Controls_Manager::RAW_HTML,
468
+ 'raw' => sprintf(
469
+ '<strong>%s</strong> %s <a href="plugin-install.php?s=the-events-calendar&tab=search&type=term" target="_blank">%s</a> %s',
470
+ __('The Events Calendar', 'happy-elementor-addons'),
471
+ __('is not installed/activated on your site. Please install and activate.', 'happy-elementor-addons'),
472
+ __('The Events Calendar', 'happy-elementor-addons'),
473
+ __(' first.', 'happy-elementor-addons')
474
+ ),
475
+ // 'content_classes' => 'eael-warning',
476
+ 'condition' => [
477
+ 'event_calendar_type' => 'the_events_calendar',
478
+ ],
479
+ ]
480
+ );
481
+ }
482
+ $this->end_controls_section();
483
+ }
484
+
485
+ protected function event_google_content_controls () {
486
+
487
+ $this->start_controls_section(
488
+ '_section_event_google_calendar',
489
+ [
490
+ 'label' => __('Google Calendar', 'happy-elementor-addons'),
491
+ 'tab' => Controls_Manager::TAB_CONTENT,
492
+ 'condition' => [
493
+ 'event_calendar_type' => 'google_calendar',
494
+ ],
495
+ ]
496
+ );
497
+
498
+ $this->add_control(
499
+ 'google_calendar_api_key',
500
+ [
501
+ 'label' => __('API Key', 'happy-elementor-addons'),
502
+ 'label_block' => true,
503
+ 'type' => Controls_Manager::TEXT,
504
+ 'default' => 'AIzaSyDiXYw6nDZIE6RzqIy2WNZxvrze73smMo0',
505
+ 'description' => sprintf(__('<a href="https://docs.simplecalendar.io/google-api-key/" target="_blank">%s</a>','happy-elementor-addons'), 'Get API Key'),
506
+ ]
507
+ );
508
+
509
+ $this->add_control(
510
+ 'google_calendar_id',
511
+ [
512
+ 'label' => __('Calendar ID', 'happy-elementor-addons'),
513
+ 'label_block' => true,
514
+ 'type' => Controls_Manager::TEXT,
515
+ 'default' => 'en.bd#holiday@group.v.calendar.google.com',
516
+ //'description' => sprintf(__('<a href="#" target="_blank">%s</a>','happy-elementor-addons'), 'Get google calendar ID'),
517
+ ]
518
+ );
519
+
520
+ $this->add_control(
521
+ 'google_calendar_start_date',
522
+ [
523
+ 'label' => __('Start Date', 'happy-elementor-addons'),
524
+ 'type' => Controls_Manager::DATE_TIME,
525
+ 'default' => date('Y-m-d H:i', current_time('timestamp', 0)),
526
+ ]
527
+ );
528
+
529
+ $this->add_control(
530
+ 'google_calendar_end_date',
531
+ [
532
+ 'label' => __('End Date', 'happy-elementor-addons'),
533
+ 'type' => Controls_Manager::DATE_TIME,
534
+ 'default' => date('Y-m-d H:i', strtotime("+6 months", current_time('timestamp', 0))),
535
+ ]
536
+ );
537
+
538
+ $this->add_control(
539
+ 'google_calendar_max_item',
540
+ [
541
+ 'label' => __('Number Of Events', 'happy-elementor-addons'),
542
+ 'type' => Controls_Manager::NUMBER,
543
+ 'min' => 1,
544
+ 'default' => 100,
545
+ ]
546
+ );
547
+
548
+ $this->end_controls_section();
549
+ }
550
+
551
+ protected function the_event_calendar_content_controls () {
552
+
553
+ //the events calendar
554
+ if ( class_exists( 'Tribe__Events__Main' ) ) {
555
+
556
+ $this->start_controls_section(
557
+ '_section_the_events_calendar',
558
+ [
559
+ 'label' => __('The Event Calendar', 'happy-elementor-addons'),
560
+ 'tab' => Controls_Manager::TAB_CONTENT,
561
+ 'condition' => [
562
+ 'event_calendar_type' => 'the_events_calendar',
563
+ ],
564
+ ]
565
+ );
566
+
567
+ $this->add_control(
568
+ 'the_events_calendar_source',
569
+ [
570
+ 'label' => __('Get Events By', 'happy-elementor-addons'),
571
+ 'type' => Controls_Manager::SELECT,
572
+ 'label_block' => true,
573
+ 'default' => ['all'],
574
+ 'options' => [
575
+ 'all' => __('All Event', 'happy-elementor-addons'),
576
+ 'category' => __('By Category', 'happy-elementor-addons'),
577
+ 'selected_event' => __('Selected Event', 'happy-elementor-addons'),
578
+ ],
579
+ // 'render_type' => 'none',
580
+ ]
581
+ );
582
+
583
+
584
+ $this->add_control(
585
+ 'the_events_calendar_category',
586
+ [
587
+ 'label' => __('Event Category', 'happy-elementor-addons'),
588
+ 'label_block' => true,
589
+ 'type' => Controls_Manager::SELECT2,
590
+ 'multiple' => true,
591
+ 'options' => self::get_the_event_calendar_cat(),
592
+ 'condition' => [
593
+ 'the_events_calendar_source' => 'category',
594
+ ],
595
+ ]
596
+ );
597
+
598
+ $this->add_control(
599
+ 'the_events_calendar_selected',
600
+ [
601
+ 'label' => __('Select Events', 'happy-elementor-addons'),
602
+ 'label_block' => true,
603
+ 'type' => Controls_Manager::SELECT2,
604
+ 'multiple' => true,
605
+ 'options' => self::get_events(),
606
+ 'condition' => [
607
+ 'the_events_calendar_source' => 'selected_event',
608
+ ],
609
+ ]
610
+ );
611
+
612
+ $this->add_control(
613
+ 'the_events_calendar_item',
614
+ [
615
+ 'label' => __('Event Item', 'happy-elementor-addons'),
616
+ 'type' => Controls_Manager::NUMBER,
617
+ 'min' => 1,
618
+ 'default' => 12,
619
+ 'condition' => [
620
+ 'the_events_calendar_source!' => 'selected_event',
621
+ ],
622
+ ]
623
+ );
624
+
625
+ $this->end_controls_section();
626
+ }
627
+
628
+ }
629
+
630
+ protected function event_settings_content_controls () {
631
+
632
+ $this->start_controls_section(
633
+ '_section_event_settings',
634
+ [
635
+ 'label' => __( 'Settings', 'happy-elementor-addons' ),
636
+ 'tab' => Controls_Manager::TAB_CONTENT,
637
+ ]
638
+ );
639
+
640
+ $this->add_control(
641
+ 'language',
642
+ [
643
+ 'label' => __('Language', 'happy-elementor-addons'),
644
+ 'type' => Controls_Manager::SELECT,
645
+ 'options' => [
646
+ 'manual' => __( 'Manual', 'happy-elementor-addons' ),
647
+ 'google_calendar' => __( 'Google Calendar', 'happy-elementor-addons' ),
648
+ ],
649
+ 'options' => $this->language_code_list(),
650
+ 'default' => 'en'
651
+ ]
652
+ );
653
+
654
+ $this->add_control(
655
+ 'default_view',
656
+ [
657
+ 'label' => __('Calendar Default View', 'happy-elementor-addons'),
658
+ 'type' => Controls_Manager::SELECT,
659
+ 'options' => [
660
+ 'timeGridDay' => __('Day', 'happy-elementor-addons'),
661
+ 'timeGridWeek' => __('Week', 'happy-elementor-addons'),
662
+ 'dayGridMonth' => __('Month', 'happy-elementor-addons'),
663
+ 'listMonth' => __('List', 'happy-elementor-addons'),
664
+ ],
665
+ 'default' => 'dayGridMonth',
666
+ ]
667
+ );
668
+
669
+ $this->add_control(
670
+ 'event_calendar_first_day',
671
+ [
672
+ 'label' => __('First Day of Week', 'happy-elementor-addons'),
673
+ 'type' => Controls_Manager::SELECT,
674
+ 'options' => [
675
+ '0' => __('Sunday', 'happy-elementor-addons'),
676
+ '1' => __('Monday', 'happy-elementor-addons'),
677
+ '2' => __('Tuesday', 'happy-elementor-addons'),
678
+ '3' => __('Wednesday', 'happy-elementor-addons'),
679
+ '4' => __('Thursday', 'happy-elementor-addons'),
680
+ '5' => __('Friday', 'happy-elementor-addons'),
681
+ '6' => __('Saturday', 'happy-elementor-addons'),
682
+ ],
683
+ 'default' => '0',
684
+ ]
685
+ );
686
+
687
+ $this->add_control(
688
+ 'show_event_popup',
689
+ [
690
+ 'label' => __('Show Event Popup', 'happy-elementor-addons'),
691
+ 'label_block' => false,
692
+ 'type' => Controls_Manager::SWITCHER,
693
+ 'return_value' => 'yes',
694
+ 'default' => 'yes',
695
+ ]
696
+ );
697
+
698
+ $this->add_control(
699
+ 'allday_text',
700
+ [
701
+ 'label' => __('All Day Text', 'happy-elementor-addons'),
702
+ 'label_block' => false,
703
+ 'type' => Controls_Manager::TEXT,
704
+ 'default' => __('All Day', 'happy-elementor-addons'),
705
+ 'condition' => [
706
+ 'show_event_popup' => 'yes',
707
+ ],
708
+ ]
709
+ );
710
+
711
+ $this->add_control(
712
+ 'readmore_text',
713
+ [
714
+ 'label' => __('Read More Text', 'happy-elementor-addons'),
715
+ 'label_block' => false,
716
+ 'type' => Controls_Manager::TEXT,
717
+ 'default' => __('Read More', 'happy-elementor-addons'),
718
+ 'condition' => [
719
+ 'show_event_popup' => 'yes',
720
+ ],
721
+ ]
722
+ );
723
+
724
+ $this->add_control(
725
+ 'time_title',
726
+ [
727
+ 'label' => __('Time Title', 'happy-elementor-addons'),
728
+ 'label_block' => false,
729
+ 'type' => Controls_Manager::TEXT,
730
+ 'default' => __('Timezone UTC+6', 'happy-elementor-addons'),
731
+ 'condition' => [
732
+ 'show_event_popup' => 'yes',
733
+ ],
734
+ ]
735
+ );
736
+
737
+ $this->add_control(
738
+ 'speaker_title',
739
+ [
740
+ 'label' => __('Speaker Title', 'happy-elementor-addons'),
741
+ 'label_block' => false,
742
+ 'type' => Controls_Manager::TEXT,
743
+ 'default' => __('Speaker', 'happy-elementor-addons'),
744
+ 'condition' => [
745
+ 'show_event_popup' => 'yes',
746
+ ],
747
+ ]
748
+ );
749
+
750
+ $this->add_control(
751
+ 'location_title',
752
+ [
753
+ 'label' => __('Location Title', 'happy-elementor-addons'),
754
+ 'label_block' => false,
755
+ 'type' => Controls_Manager::TEXT,
756
+ 'default' => __('Address', 'happy-elementor-addons'),
757
+ 'condition' => [
758
+ 'show_event_popup' => 'yes',
759
+ ],
760
+ ]
761
+ );
762
+
763
+ $this->end_controls_section();
764
+ }
765
+
766
+
767
+ /*
768
+ * Register Style control
769
+ */
770
+ protected function register_style_controls () {
771
+
772
+ $this->calendar_style_controls();
773
+
774
+ $this->topbar_style_controls();
775
+
776
+ $this->event_style_controls();
777
+
778
+ $this->popup_style_controls();
779
+
780
+ }
781
+
782
+ protected function calendar_style_controls () {
783
+
784
+ $this->start_controls_section(
785
+ '_section_style_calendar_wrapper',
786
+ [
787
+ 'label' => __( 'Calendar', 'happy-elementor-addons' ),
788
+ 'tab' => Controls_Manager::TAB_STYLE,
789
+ ]
790
+ );
791
+
792
+ $this->add_group_control(
793
+ Group_Control_Typography::get_type(),
794
+ [
795
+ 'name' => 'calendar_typography',
796
+ 'label' => __('Calendar Font Family', 'happy-elementor-addons'),
797
+ 'include' => [
798
+ 'font_family',
799
+ ],
800
+ 'selector' => '{{WRAPPER}} .ha-ec-wrapper * :not(i),{{WRAPPER}} .ha-ec-popup-wrapper * :not(i)',
801
+ ]
802
+ );
803
+
804
+ $this->add_control(
805
+ 'calendar_background_color',
806
+ [
807
+ 'label' => __('Background', 'happy-elementor-addons'),
808
+ 'type' => Controls_Manager::COLOR,
809
+ 'selectors' => [
810
+ '{{WRAPPER}} .ha-ec-wrapper .fc-view > table'=> 'background-color: {{VALUE}}',
811
+ '{{WRAPPER}} .ha-ec-wrapper .fc-view table.fc-list-table'=> 'background-color: {{VALUE}}',
812
+ ],
813
+ ]
814
+ );
815
+
816
+ $this->add_control(
817
+ 'calendar_border_color',
818
+ [
819
+ 'label' => __('Border Color', 'happy-elementor-addons'),
820
+ 'type' => Controls_Manager::COLOR,
821
+ 'default' => '#CFCFDA',
822
+ 'selectors' => [
823
+ '{{WRAPPER}} .ha-ec-wrapper table thead:first-child tr:first-child th,
824
+ {{WRAPPER}} .ha-ec-wrapper .fc-theme-standard .fc-scrollgrid,
825
+ {{WRAPPER}} .ha-ec-wrapper .fc-theme-standard .fc-list,
826
+ {{WRAPPER}} .ha-ec-wrapper .fc-theme-standard td,
827
+ {{WRAPPER}} .ha-ec-wrapper .fc-theme-standard th' => 'border-color: {{VALUE}}',
828
+ ],
829
+ ]
830
+ );
831
+
832
+ $this->add_group_control(
833
+ Group_Control_Box_Shadow::get_type(),
834
+ [
835
+ 'name' => 'calendar_box_shadow',
836
+ 'label' => __('Box Shadow', 'happy-elementor-addons'),
837
+ 'selector' => '{{WRAPPER}} .ha-ec-wrapper .fc-view table.fc-scrollgrid,
838
+ {{WRAPPER}} .ha-ec-wrapper .fc-view table.fc-list-table',
839
+ ]
840
+ );
841
+
842
+ $this->add_control(
843
+ 'calendar_todays_background',
844
+ [
845
+ 'label' => __('Today\'s Background', 'happy-elementor-addons'),
846
+ 'type' => Controls_Manager::COLOR,
847
+ 'selectors' => [
848
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-daygrid-day.fc-day-today' => 'background-color: {{VALUE}};',
849
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-timegrid-col.fc-day-today' => 'background-color: {{VALUE}};',
850
+ ],
851
+ ]
852
+ );
853
+
854
+ $this->add_control(
855
+ 'calendar_heading_heading',
856
+ [
857
+ 'label' => __('Calendar Heading', 'happy-elementor-addons'),
858
+ 'type' => Controls_Manager::HEADING,
859
+ 'separator' => 'before',
860
+ ]
861
+ );
862
+
863
+ $this->add_responsive_control(
864
+ 'calendar_heading_padding',
865
+ [
866
+ 'label' => __('Padding', 'happy-elementor-addons'),
867
+ 'type' => Controls_Manager::DIMENSIONS,
868
+ 'size_units' => ['px', '%'],
869
+ 'selectors' => [
870
+ '{{WRAPPER}} .ha-ec-wrapper th.fc-col-header-cell.fc-day' => 'Padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
871
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion' => 'Padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
872
+ ],
873
+ ]
874
+ );
875
+
876
+ $this->add_responsive_control(
877
+ 'calendar_heading_font_size',
878
+ [
879
+ 'label' => __( 'Font Size', 'happy-elementor-addons' ),
880
+ 'type' => Controls_Manager::SLIDER,
881
+ 'size_units' => [ 'px', '%' ],
882
+ 'range' => [
883
+ 'px' => [
884
+ 'min' => 0,
885
+ 'max' => 200,
886
+ 'step' => 1,
887
+ ],
888
+ '%' => [
889
+ 'min' => 0,
890
+ 'max' => 100,
891
+ ],
892
+ ],
893
+ 'selectors' => [
894
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion' => 'font-size: {{SIZE}}{{UNIT}};',
895
+ '{{WRAPPER}} .ha-ec-wrapper th.fc-col-header-cell.fc-day' => 'font-size: {{SIZE}}{{UNIT}};',
896
+ ],
897
+ ]
898
+ );
899
+
900
+ $this->add_control(
901
+ 'calendar_heading_color',
902
+ [
903
+ 'label' => __('Color', 'happy-elementor-addons'),
904
+ 'type' => Controls_Manager::COLOR,
905
+ 'selectors' => [
906
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-list-table th .fc-list-day-cushion' => 'color: {{VALUE}};',
907
+ '{{WRAPPER}} .ha-ec-wrapper th.fc-col-header-cell.fc-day' => 'color: {{VALUE}};',
908
+ ],
909
+ ]
910
+ );
911
+
912
+ $this->add_control(
913
+ 'calendar_heading_background',
914
+ [
915
+ 'label' => __('Background', 'happy-elementor-addons'),
916
+ 'type' => Controls_Manager::COLOR,
917
+ 'selectors' => [
918
+ '{{WRAPPER}} .ha-ec-wrapper th.fc-col-header-cell.fc-day' => 'background-color: {{VALUE}};',
919
+ ],
920
+ ]
921
+ );
922
+
923
+ $this->add_control(
924
+ 'calendar_date_and_time_heading',
925
+ [
926
+ 'label' => __('Date&Time', 'happy-elementor-addons'),
927
+ 'type' => Controls_Manager::HEADING,
928
+ 'separator' => 'before',
929
+ ]
930
+ );
931
+
932
+ $this->add_responsive_control(
933
+ 'calendar_date_and_time_font_size',
934
+ [
935
+ 'label' => __( 'Font Size', 'happy-elementor-addons' ),
936
+ 'type' => Controls_Manager::SLIDER,
937
+ 'size_units' => [ 'px', '%' ],
938
+ 'range' => [
939
+ 'px' => [
940
+ 'min' => 0,
941
+ 'max' => 200,
942
+ 'step' => 1,
943
+ ],
944
+ '%' => [
945
+ 'min' => 0,
946
+ 'max' => 100,
947
+ ],
948
+ ],
949
+ 'selectors' => [
950
+ '{{WRAPPER}} .ha-ec-wrapper span.fc-timegrid-axis-cushion.fc-scrollgrid-shrink-cushion.fc-scrollgrid-sync-inner' => 'font-size: {{SIZE}}{{UNIT}};',
951
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-slot-label-cushion.fc-scrollgrid-shrink-cushion' => 'font-size: {{SIZE}}{{UNIT}};',
952
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-daygrid-day-top' => 'font-size: {{SIZE}}{{UNIT}};',
953
+ ],
954
+ ]
955
+ );
956
+
957
+ $this->add_control(
958
+ 'calendar_text_color',
959
+ [
960
+ 'label' => __('Color', 'happy-elementor-addons'),
961
+ 'type' => Controls_Manager::COLOR,
962
+ 'selectors' => [
963
+ '{{WRAPPER}} .ha-ec-wrapper span.fc-timegrid-axis-cushion.fc-scrollgrid-shrink-cushion.fc-scrollgrid-sync-inner' => 'color: {{VALUE}};',
964
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-slot-label-cushion.fc-scrollgrid-shrink-cushion' => 'color: {{VALUE}};',
965
+ '{{WRAPPER}} .ha-ec-wrapper .fc .fc-daygrid-day-top' => 'color: {{VALUE}};',
966
+ ],
967
+ ]
968
+ );
969
+
970
+ $this->end_controls_section();
971
+ }
972
+
973
+ protected function topbar_style_controls () {
974
+
975
+ $this->start_controls_section(
976
+ '_section_style_calendar_topbar',
977
+ [
978
+ 'label' => __( 'Top Bar', 'happy-elementor-addons' ),
979
+ 'tab' => Controls_Manager::TAB_STYLE,
980
+ ]
981
+ );
982
+
983
+ $this->add_responsive_control(
984
+ 'topbar_margin_bottom',
985
+ [
986
+ 'label' => __('Margin Bottom', 'happy-elementor-addons'),
987
+ 'type' => Controls_Manager::SLIDER,
988
+ 'size_units' => [ 'px', '%' ],
989
+ 'range' => [
990
+ 'px' => [
991
+ 'min' => 0,
992
+ 'max' => 1000,
993
+ 'step' => 1,
994
+ ],
995
+ '%' => [
996
+ 'min' => 0,
997
+ 'max' => 100,
998
+ ],
999
+ ],
1000
+ 'selectors' => [
1001
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1002
+ ],
1003
+ ]
1004
+ );
1005
+
1006
+ $this->add_control(
1007
+ 'topbar_background',
1008
+ [
1009
+ 'label' => __('Background', 'happy-elementor-addons'),
1010
+ 'type' => Controls_Manager::COLOR,
1011
+ 'selectors' => [
1012
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar' => 'background-color: {{VALUE}};',
1013
+ ],
1014
+ ]
1015
+ );
1016
+
1017
+ $this->add_control(
1018
+ 'topbar_title_heading',
1019
+ [
1020
+ 'label' => __('Title', 'happy-elementor-addons'),
1021
+ 'type' => Controls_Manager::HEADING,
1022
+ 'separator' => 'before',
1023
+ ]
1024
+ );
1025
+
1026
+ $this->add_group_control(
1027
+ Group_Control_Typography::get_type(),
1028
+ [
1029
+ 'name' => 'topbar_title_typography',
1030
+ 'label' => __('Typography', 'happy-elementor-addons'),
1031
+ 'exclude' => [
1032
+ 'font_family',
1033
+ ],
1034
+ 'selector' => '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar h2.fc-toolbar-title',
1035
+ ]
1036
+ );
1037
+
1038
+ $this->add_control(
1039
+ 'topbar_title_color',
1040
+ [
1041
+ 'label' => __('Color', 'happy-elementor-addons'),
1042
+ 'type' => Controls_Manager::COLOR,
1043
+ 'selectors' => [
1044
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar h2.fc-toolbar-title' => 'color: {{VALUE}};',
1045
+ ],
1046
+ ]
1047
+ );
1048
+
1049
+ // Buttons style
1050
+ $this->add_control(
1051
+ 'topbar_buttons_heading',
1052
+ [
1053
+ 'label' => __('Button', 'happy-elementor-addons'),
1054
+ 'type' => Controls_Manager::HEADING,
1055
+ 'separator' => 'before',
1056
+ ]
1057
+ );
1058
+
1059
+ $this->add_responsive_control(
1060
+ 'topbar_buttons_space',
1061
+ [
1062
+ 'label' => __('Space Between', 'happy-elementor-addons'),
1063
+ 'type' => Controls_Manager::SLIDER,
1064
+ 'size_units' => [ 'px', '%' ],
1065
+ 'range' => [
1066
+ 'px' => [
1067
+ 'min' => 0,
1068
+ 'max' => 1000,
1069
+ 'step' => 1,
1070
+ ],
1071
+ '%' => [
1072
+ 'min' => 0,
1073
+ 'max' => 100,
1074
+ ],
1075
+ ],
1076
+ 'selectors' => [
1077
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-today-button' => 'margin-left: {{SIZE}}{{UNIT}};',
1078
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar .fc-button-group button:not(:first-child)' => 'margin-left: {{SIZE}}{{UNIT}};',
1079
+ ],
1080
+ ]
1081
+ );
1082
+
1083
+ $this->add_group_control(
1084
+ Group_Control_Typography::get_type(),
1085
+ [
1086
+ 'name' => 'topbar_buttons_typography',
1087
+ 'label' => __('Typography', 'happy-elementor-addons'),
1088
+ 'exclude' => [
1089
+ 'font_family',
1090
+ ],
1091
+ 'selector' => '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button',
1092
+ ]
1093
+ );
1094
+
1095
+ $this->add_group_control(
1096
+ Group_Control_Border::get_type(),
1097
+ [
1098
+ 'name' => 'topbar_buttons_border',
1099
+ 'label' => __('Border', 'happy-elementor-addons'),
1100
+ 'exclude' => ['color'], //remove border color
1101
+ 'selector' => '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button',
1102
+ ]
1103
+ );
1104
+
1105
+ $this->start_controls_tabs('calendar_buttons_style');
1106
+
1107
+ // Normal
1108
+ $this->start_controls_tab(
1109
+ 'topbar_buttons_normal_state',
1110
+ [
1111
+ 'label' => __('Normal', 'happy-elementor-addons'),
1112
+ ]
1113
+ );
1114
+
1115
+ $this->add_control(
1116
+ 'topbar_buttons_color_normal',
1117
+ [
1118
+ 'label' => __('Color', 'happy-elementor-addons'),
1119
+ 'type' => Controls_Manager::COLOR,
1120
+ 'selectors' => [
1121
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button' => 'color: {{VALUE}};',
1122
+ ],
1123
+ ]
1124
+ );
1125
+
1126
+ $this->add_control(
1127
+ 'topbar_buttons_background_normal',
1128
+ [
1129
+ 'label' => __('Background', 'happy-elementor-addons'),
1130
+ 'type' => Controls_Manager::COLOR,
1131
+ 'selectors' => [
1132
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button' => 'background-color: {{VALUE}};',
1133
+ ],
1134
+ ]
1135
+ );
1136
+
1137
+ $this->add_control(
1138
+ 'topbar_buttons_border_color_normal',
1139
+ [
1140
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
1141
+ 'type' => Controls_Manager::COLOR,
1142
+ 'selectors' => [
1143
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button' => 'border-color: {{VALUE}}',
1144
+ ],
1145
+ ]
1146
+ );
1147
+ $this->end_controls_tab();
1148
+
1149
+ // Hover
1150
+ $this->start_controls_tab(
1151
+ 'topbar_buttons_hover_state',
1152
+ [
1153
+ 'label' => __('Hover', 'happy-elementor-addons'),
1154
+ ]
1155
+ );
1156
+
1157
+ $this->add_control(
1158
+ 'topbar_buttons_color_hover',
1159
+ [
1160
+ 'label' => __('Color', 'happy-elementor-addons'),
1161
+ 'type' => Controls_Manager::COLOR,
1162
+ 'selectors' => [
1163
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button:hover' => 'color: {{VALUE}};',
1164
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-active' => 'color: {{VALUE}};',
1165
+ ],
1166
+ ]
1167
+ );
1168
+
1169
+ $this->add_control(
1170
+ 'topbar_buttons_background_hover',
1171
+ [
1172
+ 'label' => __('Background', 'happy-elementor-addons'),
1173
+ 'type' => Controls_Manager::COLOR,
1174
+ 'selectors' => [
1175
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button:hover' => 'background-color: {{VALUE}};',
1176
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-active' => 'background-color: {{VALUE}};',
1177
+ ],
1178
+ ]
1179
+ );
1180
+
1181
+ $this->add_control(
1182
+ 'topbar_buttons_border_color_hover',
1183
+ [
1184
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
1185
+ 'type' => Controls_Manager::COLOR,
1186
+ 'selectors' => [
1187
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button:hover' => 'border-color: {{VALUE}}',
1188
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button.fc-button-active' => 'border-color: {{VALUE}}',
1189
+ ],
1190
+ ]
1191
+ );
1192
+
1193
+ $this->end_controls_tab();
1194
+ $this->end_controls_tabs();
1195
+
1196
+ $this->add_responsive_control(
1197
+ 'topbar_buttons_border_radius_normal',
1198
+ [
1199
+ 'label' => __('Border Radius', 'happy-elementor-addons'),
1200
+ 'type' => Controls_Manager::DIMENSIONS,
1201
+ 'size_units' => ['px', '%'],
1202
+ 'selectors' => [
1203
+ '{{WRAPPER}} .ha-ec-wrapper .fc-toolbar.fc-header-toolbar button.fc-button' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1204
+ ],
1205
+ ]
1206
+ );
1207
+
1208
+ $this->end_controls_section();
1209
+ }
1210
+
1211
+ protected function event_style_controls () {
1212
+
1213
+ $this->start_controls_section(
1214
+ '_section_style_event',
1215
+ [
1216
+ 'label' => __( 'Event', 'happy-elementor-addons' ),
1217
+ 'tab' => Controls_Manager::TAB_STYLE,
1218
+ ]
1219
+ );
1220
+
1221
+ $this->add_responsive_control(
1222
+ 'event_item_font_size',
1223
+ [
1224
+ 'label' => __('Font Size', 'happy-elementor-addons'),
1225
+ 'type' => Controls_Manager::SLIDER,
1226
+ 'size_units' => [ 'px', '%' ],
1227
+ 'range' => [
1228
+ 'px' => [
1229
+ 'min' => 0,
1230
+ 'max' => 200,
1231
+ 'step' => 1,
1232
+ ],
1233
+ '%' => [
1234
+ 'min' => 0,
1235
+ 'max' => 100,
1236
+ ],
1237
+ ],
1238
+ 'selectors' => [
1239
+ '{{WRAPPER}} .ha-ec-wrapper .fc-daygrid-event' => 'font-size: {{SIZE}}{{UNIT}};',
1240
+ '{{WRAPPER}} .ha-ec-wrapper .fc-daygrid-event .fc-event-main' => 'font-size: {{SIZE}}{{UNIT}};',
1241
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-event' => 'font-size: {{SIZE}}{{UNIT}};',
1242
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-event .fc-event-main' => 'font-size: {{SIZE}}{{UNIT}};',
1243
+ '{{WRAPPER}} .ha-ec-wrapper .fc-list-event' => 'font-size: {{SIZE}}{{UNIT}};',
1244
+ ],
1245
+ ]
1246
+ );
1247
+
1248
+ $this->add_control(
1249
+ 'event_item_color',
1250
+ [
1251
+ 'label' => __('Color', 'happy-elementor-addons'),
1252
+ 'type' => Controls_Manager::COLOR,
1253
+ 'selectors' => [
1254
+ '{{WRAPPER}} .ha-ec-wrapper .fc-daygrid-event' => 'color: {{VALUE}};',
1255
+ '{{WRAPPER}} .ha-ec-wrapper .fc-daygrid-event .fc-event-main' => 'color: {{VALUE}};',
1256
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-event' => 'color: {{VALUE}};',
1257
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-event .fc-event-main' => 'color: {{VALUE}};',
1258
+ '{{WRAPPER}} .ha-ec-wrapper .fc-list-event' => 'color: {{VALUE}};',
1259
+ ],
1260
+ ]
1261
+ );
1262
+
1263
+ $this->add_control(
1264
+ 'event_item_background',
1265
+ [
1266
+ 'label' => __('Background', 'happy-elementor-addons'),
1267
+ 'type' => Controls_Manager::COLOR,
1268
+ 'selectors' => [
1269
+ '{{WRAPPER}} .ha-ec-wrapper .fc-daygrid-event' => 'background-color: {{VALUE}};',
1270
+ '{{WRAPPER}} .ha-ec-wrapper .fc-timegrid-event' => 'background-color: {{VALUE}};',
1271
+ '{{WRAPPER}} .ha-ec-wrapper .fc-list-event' => 'background-color: {{VALUE}};',
1272
+ ],
1273
+ ]
1274
+ );
1275
+
1276
+ $this->add_control(
1277
+ 'event_item_dot_color',
1278
+ [
1279
+ 'label' => __('Dot Color', 'happy-elementor-addons'),
1280
+ 'type' => Controls_Manager::COLOR,
1281
+ 'selectors' => [
1282
+ '{{WRAPPER}} .ha-ec-wrapper .fc-daygrid-event .fc-daygrid-event-dot' => 'border-color: {{VALUE}};',
1283
+ '{{WRAPPER}} .ha-ec-wrapper .fc-list-event .fc-list-event-dot' => 'border-color: {{VALUE}};',
1284
+ ],
1285
+ ]
1286
+ );
1287
+
1288
+ $this->end_controls_section();
1289
+ }
1290
+
1291
+ protected function popup_style_controls () {
1292
+
1293
+ $this->start_controls_section(
1294
+ '_section_style_event_popup',
1295
+ [
1296
+ 'label' => __( 'Event Popup', 'happy-elementor-addons' ),
1297
+ 'tab' => Controls_Manager::TAB_STYLE,
1298
+ ]
1299
+ );
1300
+
1301
+ $this->add_control(
1302
+ 'event_popup_wrapper_background',
1303
+ [
1304
+ 'label' => __('Wrapper Background', 'happy-elementor-addons'),
1305
+ 'type' => Controls_Manager::COLOR,
1306
+ 'selectors' => [
1307
+ '{{WRAPPER}} .ha-ec-popup-wrapper.ha-ec-popup-ready:before' => 'background: {{VALUE}}',
1308
+ ],
1309
+ 'separator' => 'after',
1310
+ ]
1311
+ );
1312
+
1313
+ $this->add_responsive_control(
1314
+ 'event_popup_width',
1315
+ [
1316
+ 'label' => __('Width', 'happy-elementor-addons'),
1317
+ 'type' => Controls_Manager::SLIDER,
1318
+ 'size_units' => [ 'px', '%' ],
1319
+ 'range' => [
1320
+ 'px' => [
1321
+ 'min' => 0,
1322
+ 'max' => 1200,
1323
+ 'step' => 1,
1324
+ ],
1325
+ '%' => [
1326
+ 'min' => 0,
1327
+ 'max' => 100,
1328
+ ],
1329
+ ],
1330
+ 'selectors' => [
1331
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup' => 'width: {{SIZE}}{{UNIT}};',
1332
+ ],
1333
+ ]
1334
+ );
1335
+
1336
+ $this->add_responsive_control(
1337
+ 'event_popup_padding',
1338
+ [
1339
+ 'label' => __('Padding', 'happy-elementor-addons'),
1340
+ 'type' => Controls_Manager::DIMENSIONS,
1341
+ 'size_units' => ['px', '%'],
1342
+ 'selectors' => [
1343
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1344
+ ],
1345
+ 'separator' => 'after',
1346
+ ]
1347
+ );
1348
+
1349
+ $this->add_control(
1350
+ 'event_popup_background',
1351
+ [
1352
+ 'label' => __('Background', 'happy-elementor-addons'),
1353
+ 'type' => Controls_Manager::COLOR,
1354
+ 'selectors' => [
1355
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup' => 'background-color: {{VALUE}}',
1356
+ ],
1357
+ ]
1358
+ );
1359
+
1360
+ $this->add_responsive_control(
1361
+ 'event_popup_border_radius',
1362
+ [
1363
+ 'label' => __('Border Radius', 'happy-elementor-addons'),
1364
+ 'type' => Controls_Manager::DIMENSIONS,
1365
+ 'size_units' => ['px', '%'],
1366
+ 'selectors' => [
1367
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1368
+ ],
1369
+ ]
1370
+ );
1371
+
1372
+ $this->add_group_control(
1373
+ Group_Control_Border::get_type(),
1374
+ [
1375
+ 'name' => 'event_popup_border',
1376
+ 'label' => __('Border', 'happy-elementor-addons'),
1377
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup',
1378
+ ]
1379
+ );
1380
+
1381
+ $this->add_control(
1382
+ 'event_popup_image_heading',
1383
+ [
1384
+ 'label' => __('Image', 'happy-elementor-addons'),
1385
+ 'type' => Controls_Manager::HEADING,
1386
+ 'separator' => 'before',
1387
+ ]
1388
+ );
1389
+
1390
+ $this->add_control(
1391
+ 'event_popup_image_width',
1392
+ [
1393
+ 'label' => __('Width', 'happy-elementor-addons'),
1394
+ 'type' => Controls_Manager::SLIDER,
1395
+ 'size_units' => [ 'px', '%' ],
1396
+ 'range' => [
1397
+ 'px' => [
1398
+ 'min' => 0,
1399
+ 'max' => 500,
1400
+ 'step' => 1,
1401
+ ],
1402
+ '%' => [
1403
+ 'min' => 0,
1404
+ 'max' => 100,
1405
+ ],
1406
+ ],
1407
+ 'selectors' => [
1408
+ '{{WRAPPER}} .ha-ec-popup-wrapper' => '--ha-ec-popup-image-width: {{SIZE}}{{UNIT}};',
1409
+ ],
1410
+ ]
1411
+ );
1412
+
1413
+ $this->add_control(
1414
+ 'event_popup_image_border_radius',
1415
+ [
1416
+ 'label' => __('Border Radius', 'happy-elementor-addons'),
1417
+ 'type' => Controls_Manager::DIMENSIONS,
1418
+ 'size_units' => ['px', '%'],
1419
+ 'selectors' => [
1420
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup .ha-ec-popup-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1421
+ ],
1422
+ ]
1423
+ );
1424
+
1425
+ $this->add_control(
1426
+ 'event_popup_title_heading',
1427
+ [
1428
+ 'label' => __('Title', 'happy-elementor-addons'),
1429
+ 'type' => Controls_Manager::HEADING,
1430
+ 'separator' => 'before',
1431
+ ]
1432
+ );
1433
+
1434
+ $this->add_responsive_control(
1435
+ 'event_popup_title_margin_bottom',
1436
+ [
1437
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
1438
+ 'type' => Controls_Manager::SLIDER,
1439
+ 'size_units' => [ 'px', '%' ],
1440
+ 'range' => [
1441
+ 'px' => [
1442
+ 'min' => 0,
1443
+ 'max' => 100,
1444
+ 'step' => 1,
1445
+ ],
1446
+ ],
1447
+ 'selectors' => [
1448
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content h3' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1449
+ ],
1450
+ ]
1451
+ );
1452
+
1453
+ $this->add_group_control(
1454
+ Group_Control_Typography::get_type(),
1455
+ [
1456
+ 'name' => 'event_popup_title_typography',
1457
+ 'label' => __('Typography', 'happy-elementor-addons'),
1458
+ 'exclude' => [
1459
+ 'font_family',
1460
+ ],
1461
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content h3',
1462
+ ]
1463
+ );
1464
+
1465
+ $this->add_control(
1466
+ 'event_popup_title_color',
1467
+ [
1468
+ 'label' => __('Color', 'happy-elementor-addons'),
1469
+ 'type' => Controls_Manager::COLOR,
1470
+ 'selectors' => [
1471
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content h3' => 'color: {{VALUE}}',
1472
+ ],
1473
+ ]
1474
+ );
1475
+
1476
+ $this->add_control(
1477
+ 'event_popup_desc_heading',
1478
+ [
1479
+ 'label' => __('Description', 'happy-elementor-addons'),
1480
+ 'type' => Controls_Manager::HEADING,
1481
+ 'separator' => 'before',
1482
+ ]
1483
+ );
1484
+
1485
+ $this->add_responsive_control(
1486
+ 'event_popup_desc__margin_bottom',
1487
+ [
1488
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
1489
+ 'type' => Controls_Manager::SLIDER,
1490
+ 'size_units' => [ 'px', '%' ],
1491
+ 'range' => [
1492
+ 'px' => [
1493
+ 'min' => 0,
1494
+ 'max' => 100,
1495
+ 'step' => 1,
1496
+ ],
1497
+ ],
1498
+ 'selectors' => [
1499
+ '{{WRAPPER}} .ha-ec-popup-wrapper p.ha-ec-popup-desc' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1500
+ ],
1501
+ ]
1502
+ );
1503
+
1504
+ $this->add_group_control(
1505
+ Group_Control_Typography::get_type(),
1506
+ [
1507
+ 'name' => 'event_popup_desc_typography',
1508
+ 'label' => __('Typography', 'happy-elementor-addons'),
1509
+ 'exclude' => [
1510
+ 'font_family',
1511
+ ],
1512
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper p.ha-ec-popup-desc',
1513
+ ]
1514
+ );
1515
+
1516
+ $this->add_control(
1517
+ 'event_popup_desc_color',
1518
+ [
1519
+ 'label' => __('Color', 'happy-elementor-addons'),
1520
+ 'type' => Controls_Manager::COLOR,
1521
+ 'selectors' => [
1522
+ '{{WRAPPER}} .ha-ec-popup-wrapper p.ha-ec-popup-desc' => 'color: {{VALUE}}',
1523
+ ],
1524
+ ]
1525
+ );
1526
+
1527
+ $this->popup_meta_style_controls();
1528
+
1529
+ $this->add_control(
1530
+ 'event_popup_readmore_heading',
1531
+ [
1532
+ 'label' => __('Read More', 'happy-elementor-addons'),
1533
+ 'type' => Controls_Manager::HEADING,
1534
+ 'separator' => 'before',
1535
+ ]
1536
+ );
1537
+
1538
+ $this->add_group_control(
1539
+ Group_Control_Typography::get_type(),
1540
+ [
1541
+ 'name' => 'event_popup_readmore_typography',
1542
+ 'label' => __('Typography', 'happy-elementor-addons'),
1543
+ 'exclude' => [
1544
+ 'font_family',
1545
+ ],
1546
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper a.ha-ec-popup-readmore-link',
1547
+ ]
1548
+ );
1549
+
1550
+ $this->add_control(
1551
+ 'event_popup_readmore_color',
1552
+ [
1553
+ 'label' => __('Color', 'happy-elementor-addons'),
1554
+ 'type' => Controls_Manager::COLOR,
1555
+ 'selectors' => [
1556
+ '{{WRAPPER}} .ha-ec-popup-wrapper a.ha-ec-popup-readmore-link' => 'color: {{VALUE}}',
1557
+ ],
1558
+ ]
1559
+ );
1560
+
1561
+ $this->add_control(
1562
+ 'event_popup_close_btn_heading',
1563
+ [
1564
+ 'label' => __('Close Button', 'happy-elementor-addons'),
1565
+ 'type' => Controls_Manager::HEADING,
1566
+ 'separator' => 'before',
1567
+ ]
1568
+ );
1569
+
1570
+ $this->add_responsive_control(
1571
+ 'event_popup_close_btn_font_size',
1572
+ [
1573
+ 'label' => __( 'Icon Size', 'happy-elementor-addons' ),
1574
+ 'type' => Controls_Manager::SLIDER,
1575
+ 'size_units' => [ 'px', '%' ],
1576
+ 'range' => [
1577
+ 'px' => [
1578
+ 'min' => 0,
1579
+ 'max' => 200,
1580
+ 'step' => 1,
1581
+ ],
1582
+ ],
1583
+ 'selectors' => [
1584
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-close' => 'font-size: {{SIZE}}{{UNIT}};',
1585
+ ],
1586
+ ]
1587
+ );
1588
+
1589
+ $this->add_control(
1590
+ 'event_popup_close_btn_color',
1591
+ [
1592
+ 'label' => __('Color', 'happy-elementor-addons'),
1593
+ 'type' => Controls_Manager::COLOR,
1594
+ 'selectors' => [
1595
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-close' => 'color: {{VALUE}}',
1596
+ ],
1597
+ ]
1598
+ );
1599
+
1600
+ $this->add_control(
1601
+ 'event_popup_close_btn_background',
1602
+ [
1603
+ 'label' => __('Background', 'happy-elementor-addons'),
1604
+ 'type' => Controls_Manager::COLOR,
1605
+ 'selectors' => [
1606
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-close' => 'background: {{VALUE}}',
1607
+ ],
1608
+ ]
1609
+ );
1610
+
1611
+ $this->add_group_control(
1612
+ Group_Control_Box_Shadow::get_type(),
1613
+ [
1614
+ 'name' => 'event_popup_close_btn_box_shadow',
1615
+ 'label' => __('Box Shadow', 'happy-elementor-addons'),
1616
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-close',
1617
+ ]
1618
+ );
1619
+
1620
+ $this->end_controls_section();
1621
+ }
1622
+
1623
+ protected function popup_meta_style_controls () {
1624
+
1625
+ $this->add_control(
1626
+ 'event_popup_meta_heading',
1627
+ [
1628
+ 'label' => __('Meta', 'happy-elementor-addons'),
1629
+ 'type' => Controls_Manager::HEADING,
1630
+ 'separator' => 'before',
1631
+ ]
1632
+ );
1633
+
1634
+ $this->add_responsive_control(
1635
+ 'event_popup_meta_item_margin',
1636
+ [
1637
+ 'label' => __('Item Margin', 'happy-elementor-addons'),
1638
+ 'type' => Controls_Manager::DIMENSIONS,
1639
+ 'size_units' => ['px', '%'],
1640
+ 'selectors' => [
1641
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
1642
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li:last-child' => 'margin-right: 0;',
1643
+ ],
1644
+ ]
1645
+ );
1646
+
1647
+ $this->add_control(
1648
+ 'event_popup_meta_icon_heading',
1649
+ [
1650
+ 'label' => __('Meta Icon', 'happy-elementor-addons'),
1651
+ 'type' => Controls_Manager::HEADING,
1652
+ 'separator' => 'before',
1653
+ ]
1654
+ );
1655
+
1656
+ $this->add_responsive_control(
1657
+ 'event_popup_meta_icon_font_size',
1658
+ [
1659
+ 'label' => __( 'Icon Size', 'happy-elementor-addons' ),
1660
+ 'type' => Controls_Manager::SLIDER,
1661
+ 'size_units' => [ 'px', '%' ],
1662
+ 'range' => [
1663
+ 'px' => [
1664
+ 'min' => 0,
1665
+ 'max' => 200,
1666
+ 'step' => 1,
1667
+ ],
1668
+ ],
1669
+ 'selectors' => [
1670
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-time-icon' => 'font-size: {{SIZE}}{{UNIT}};',
1671
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-guest-icon' => 'font-size: {{SIZE}}{{UNIT}};',
1672
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-location-icon' => 'font-size: {{SIZE}}{{UNIT}};',
1673
+ ],
1674
+ ]
1675
+ );
1676
+
1677
+ $this->add_control(
1678
+ 'event_popup_meta_icon_color',
1679
+ [
1680
+ 'label' => __('Color', 'happy-elementor-addons'),
1681
+ 'type' => Controls_Manager::COLOR,
1682
+ 'selectors' => [
1683
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-time-icon' => 'color: {{VALUE}}',
1684
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-guest-icon' => 'color: {{VALUE}}',
1685
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-location-icon' => 'color: {{VALUE}}',
1686
+ ],
1687
+ ]
1688
+ );
1689
+
1690
+ $this->add_control(
1691
+ 'event_popup_meta_title_heading',
1692
+ [
1693
+ 'label' => __('Meta Title', 'happy-elementor-addons'),
1694
+ 'type' => Controls_Manager::HEADING,
1695
+ 'separator' => 'before',
1696
+ ]
1697
+ );
1698
+
1699
+ $this->add_responsive_control(
1700
+ 'event_popup_meta_title_margin_bottom',
1701
+ [
1702
+ 'label' => __( 'Margin Bottom', 'happy-elementor-addons' ),
1703
+ 'type' => Controls_Manager::SLIDER,
1704
+ 'size_units' => [ 'px', '%' ],
1705
+ 'range' => [
1706
+ 'px' => [
1707
+ 'min' => 0,
1708
+ 'max' => 100,
1709
+ 'step' => 1,
1710
+ ],
1711
+ ],
1712
+ 'selectors' => [
1713
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-time-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1714
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-guest-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1715
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-location-title' => 'margin-bottom: {{SIZE}}{{UNIT}};',
1716
+ ],
1717
+ ]
1718
+ );
1719
+
1720
+ $this->add_group_control(
1721
+ Group_Control_Typography::get_type(),
1722
+ [
1723
+ 'name' => 'event_popup_meta_title_typography',
1724
+ 'label' => __('Typography', 'happy-elementor-addons'),
1725
+ 'exclude' => [
1726
+ 'font_family',
1727
+ ],
1728
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-time-title,{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-guest-title,{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-location-title',
1729
+ ]
1730
+ );
1731
+
1732
+ $this->add_control(
1733
+ 'event_popup_meta_title_color',
1734
+ [
1735
+ 'label' => __('Color', 'happy-elementor-addons'),
1736
+ 'type' => Controls_Manager::COLOR,
1737
+ 'selectors' => [
1738
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-time-title' => 'color: {{VALUE}}',
1739
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-guest-title' => 'color: {{VALUE}}',
1740
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-location-title' => 'color: {{VALUE}}',
1741
+ ],
1742
+ ]
1743
+ );
1744
+
1745
+ $this->add_control(
1746
+ 'event_popup_meta_content_heading',
1747
+ [
1748
+ 'label' => __('Meta Content', 'happy-elementor-addons'),
1749
+ 'type' => Controls_Manager::HEADING,
1750
+ 'separator' => 'before',
1751
+ ]
1752
+ );
1753
+
1754
+ $this->add_group_control(
1755
+ Group_Control_Typography::get_type(),
1756
+ [
1757
+ 'name' => 'event_popup_meta_content_typography',
1758
+ 'label' => __('Typography', 'happy-elementor-addons'),
1759
+ 'exclude' => [
1760
+ 'font_family',
1761
+ ],
1762
+ 'selector' => '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-event-time,{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-event-guest,{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-event-location',
1763
+ ]
1764
+ );
1765
+
1766
+ $this->add_control(
1767
+ 'event_popup_meta_content_color',
1768
+ [
1769
+ 'label' => __('Color', 'happy-elementor-addons'),
1770
+ 'type' => Controls_Manager::COLOR,
1771
+ 'selectors' => [
1772
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-event-time' => 'color: {{VALUE}}',
1773
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-event-guest' => 'color: {{VALUE}}',
1774
+ '{{WRAPPER}} .ha-ec-popup-wrapper .ha-ec-popup-content ul li .ha-ec-event-location' => 'color: {{VALUE}}',
1775
+ ],
1776
+ ]
1777
+ );
1778
+
1779
+
1780
+ }
1781
+
1782
+
1783
+ protected function render () {
1784
+
1785
+ $settings = $this->get_settings_for_display();
1786
+
1787
+ if ($settings['event_calendar_type'] == 'google_calendar') {
1788
+ $data = $this->get_google_calendar_events($settings);
1789
+ } elseif ($settings['event_calendar_type'] == 'the_events_calendar') {
1790
+ $data = $this->get_the_events_calendar_events($settings);
1791
+ } else {
1792
+ $data = $this->get_manual_calendar_events($settings);
1793
+ }
1794
+
1795
+ $local = $settings['language'];
1796
+ $default_view = $settings['default_view'];
1797
+
1798
+ $this->add_render_attribute( 'wrapper', 'class', 'ha-ec-wrapper' );
1799
+
1800
+ $this->add_render_attribute(
1801
+ 'event-calendar',
1802
+ [
1803
+ 'id' => 'ha-ec-' . $this->get_id(),
1804
+ 'class' => 'ha-ec',
1805
+ 'data-cal-id' => $this->get_id(),
1806
+ 'data-locale' => $local,
1807
+ 'data-initialview' => $default_view,
1808
+ 'data-firstday' => $settings['event_calendar_first_day'],
1809
+ 'data-events' => htmlspecialchars(json_encode($data), ENT_QUOTES, 'UTF-8'),
1810
+ 'data-show-popup' => !empty( $settings['show_event_popup'] ) ? esc_attr( $settings['show_event_popup'] ) : '',
1811
+ 'data-allday-text' => !empty($settings['allday_text']) ? esc_html($settings['allday_text']) : '',
1812
+ ]
1813
+ );
1814
+
1815
+ if ( $data ) :?>
1816
+ <div <?php $this->print_render_attribute_string( 'wrapper' ); ?>>
1817
+ <div <?php $this->print_render_attribute_string( 'event-calendar' ); ?>></div>
1818
+ </div>
1819
+
1820
+ <?php
1821
+ if( 'yes' === $settings['show_event_popup'] ){
1822
+ $this->get_popup_markup__($settings);
1823
+ }
1824
+ endif;
1825
+ }
1826
+
1827
+ public function get_manual_calendar_events ($settings) {
1828
+ $events = $settings['manual_event_list'];
1829
+
1830
+ // echo '<pre>';
1831
+ // var_dump($events);
1832
+ // echo '</pre>';
1833
+ $data = [];
1834
+ if ($events) {
1835
+ $i = 0;
1836
+
1837
+ foreach ($events as $event) {
1838
+ // echo '<pre>';
1839
+ // var_dump($event['image']);
1840
+ // echo '</pre>';
1841
+
1842
+ if ( $event['all_day'] == 'yes' ) {
1843
+ $start = $event["start_date_allday"];
1844
+ $end = date('Y-m-d', strtotime("+1 days", strtotime($event["end_date_allday"])));
1845
+
1846
+ $colors["textColor"] = !empty($event['text_color']) ? $event['text_color'] : '';
1847
+ $colors["backgroundColor"] = !empty($event['bg_color']) ? $event['bg_color'] : '';
1848
+
1849
+ } else {
1850
+ $start = $event["start_date"];
1851
+ $end = date('Y-m-d H:i', strtotime($event["end_date"])).":01";
1852
+ }
1853
+
1854
+ $image = !empty( $event['image']['url'] ) ? esc_url( $event['image']['url'] ) : '' ;
1855
+ if( !empty( $event['image']['id'] ) ){
1856
+ $image = esc_url( wp_get_attachment_image_url( $event['image']['id'], $event['thumbnail_size'] ) );
1857
+ }
1858
+
1859
+ $data[] = [
1860
+ 'id' => $i,
1861
+ 'classNames' => 'elementor-repeater-item-'.$event["_id"],
1862
+ 'title' => !empty($event["title"]) ? $event["title"] : '',
1863
+ 'description' => $event["description"],
1864
+ 'start' => $start,
1865
+ 'end' => $end,
1866
+ 'url' => !empty($event["details_link"]["url"]) ? $event["details_link"]["url"] : '',
1867
+ 'allDay' => $event['all_day'],
1868
+ 'external' => $event['details_link']['is_external'],
1869
+ 'nofollow' => $event['details_link']['nofollow'],
1870
+ 'guest' => $event['guest'],
1871
+ 'location' => $event['location'],
1872
+ 'image' => $image,
1873
+
1874
+ //"textColor" => ( $event['all_day'] == 'yes' && !empty($event['text_color']) ) ? $event['text_color'] : '',
1875
+ //"backgroundColor" => ( $event['all_day'] == 'yes' && !empty($event['bg_color']) ) ? $event['bg_color'] : '',
1876
+ //"borderColor" => !empty($event['border_color']) ? $event['border_color'] : '',
1877
+ ];
1878
+
1879
+ $i++;
1880
+ }
1881
+ }
1882
+ return $data;
1883
+ }
1884
+
1885
+
1886
+ public function get_google_calendar_events ($settings) {
1887
+
1888
+ if ( empty( $settings['google_calendar_api_key'] ) && empty( $settings['google_calendar_id'] ) ) {
1889
+ $message = __('Please input API key & Calendar ID.', 'happy-elementor-addons');
1890
+ printf('<span class="ha-ec-error-message">%1$s</span>', esc_html( $message ) );
1891
+ return [];
1892
+ }
1893
+
1894
+ // GET https://www.googleapis.com/calendar/v3/calendars/en.bd%23holiday%40group.v.calendar.google.com/events?key=AIzaSyDiXYw6nDZIE6RzqIy2WNZxvrze73smMo0&orderBy=updated&showDeleted=true
1895
+
1896
+ // GET https://www.googleapis.com/calendar/v3/calendars/iqbalrony30%40gmail.com/events?key=AIzaSyDiXYw6nDZIE6RzqIy2WNZxvrze73smMo0&orderBy=updated&showDeleted=true
1897
+
1898
+ // [calendar_id] en.bd%23holiday%40group.v.calendar.google.com
1899
+ // [calendar_id] iqbalrony30%40gmail.com
1900
+ // key= AIzaSyDiXYw6nDZIE6RzqIy2WNZxvrze73smMo0
1901
+
1902
+
1903
+ $calendar_id = urlencode($settings['google_calendar_id']);
1904
+ $base_url = "https://www.googleapis.com/calendar/v3/calendars/" . $calendar_id . "/events";
1905
+
1906
+ $start_date = strtotime( $settings['google_calendar_start_date'] );
1907
+ $end_date = strtotime( $settings['google_calendar_end_date'] );
1908
+
1909
+ $arg = [
1910
+ 'key' => $settings['google_calendar_api_key'],
1911
+ 'maxResults' => $settings['google_calendar_max_item'],
1912
+ 'timeMin' => urlencode( date( 'c', $start_date ) ),
1913
+ 'singleEvents' => 'true',
1914
+ ];
1915
+
1916
+ if ( ! empty( $end_date ) && $end_date > $start_date ) {
1917
+ $arg['timeMax'] = urlencode( date( 'c', $end_date ) );
1918
+ }
1919
+
1920
+ $transient_key = 'ha_ec_google_calendar_'.md5( urlencode($settings['google_calendar_id']) . implode('', $arg) );
1921
+ $data = get_transient($transient_key);
1922
+
1923
+ // delete_transient($transient_key);
1924
+
1925
+ if( false === $data ){
1926
+ $data = wp_remote_retrieve_body(wp_remote_get(add_query_arg($arg, $base_url)));
1927
+ // echo '<pre>';
1928
+ // var_dump(json_decode($data));
1929
+ // echo '</pre>';
1930
+ if( is_object( json_decode($data) ) && !array_key_exists('error', json_decode($data) ) ){
1931
+ // echo 'cacheeed';
1932
+ set_transient($transient_key, $data, 1 * HOUR_IN_SECONDS);
1933
+ set_transient($transient_key, $data, 10 * MINUTE_IN_SECONDS);
1934
+ }
1935
+ }
1936
+
1937
+ if( is_object( json_decode( $data ) ) && array_key_exists('error', json_decode( $data ) ) ){
1938
+ $message = __('Please input valid API key & Calendar ID.', 'happy-elementor-addons');
1939
+ printf('<span class="ha-ec-error-message">%1$s</span>', esc_html( $message ));
1940
+ return [];
1941
+ }
1942
+
1943
+ $data = false !== $data ? json_decode( $data ) : '';
1944
+
1945
+
1946
+ // echo '<pre>';
1947
+ // var_dump($data);
1948
+ // echo '</pre>';
1949
+
1950
+ $calendar_data = [];
1951
+ if ( isset ( $data->items ) ) {
1952
+
1953
+ foreach ( $data->items as $key => $item ) {
1954
+
1955
+ if ( $item->status !== 'confirmed' ) {
1956
+ continue;
1957
+ }
1958
+
1959
+ $all_day = '';
1960
+
1961
+ if ( isset( $item->start->date ) ) {
1962
+ $all_day = 'yes';
1963
+ $ev_start_date = $item->start->date;
1964
+ $ev_end_date = $item->end->date;
1965
+ } else {
1966
+ $ev_start_date = $item->start->dateTime;
1967
+ $ev_end_date = $item->end->dateTime;
1968
+ }
1969
+
1970
+ $calendar_data[] = [
1971
+ 'id' => ++$key,
1972
+ 'title' => !empty( $item->summary ) ? $item->summary : 'No Title',
1973
+ 'description' => isset( $item->description ) ? $item->description : '',
1974
+ 'start' => $ev_start_date,
1975
+ 'end' => $ev_end_date,
1976
+
1977
+ // 'borderColor' => !empty($settings['global_popup_ribbon_color']) ? $settings['global_popup_ribbon_color'] : '#10ecab',
1978
+ // 'textColor' => $settings['global_text_color'],
1979
+ // 'color' => $settings['global_bg_color'],
1980
+
1981
+ 'url' => !empty( $item->htmlLink ) ? $item->htmlLink : '',
1982
+ // 'url' => $item->htmlLink ,
1983
+
1984
+ 'allDay' => $all_day,
1985
+ 'external' => 'on',
1986
+ 'nofollow' => 'on',
1987
+
1988
+ 'guest' => !empty( $item->creator->displayName ) ? $item->creator->displayName : '',
1989
+ 'location' => !empty( $item->location ) ? $item->location : '',
1990
+ ];
1991
+ }
1992
+
1993
+
1994
+ }
1995
+
1996
+ return $calendar_data;
1997
+ }
1998
+
1999
+
2000
+ public function get_the_events_calendar_events ( $settings ) {
2001
+
2002
+ if ( ! function_exists('tribe_get_events') ) {
2003
+ return [];
2004
+ }
2005
+
2006
+ if ( 'selected_event' !== $settings['the_events_calendar_source'] ) {
2007
+ $arg = [
2008
+ 'posts_per_page' => $settings['the_events_calendar_item'],
2009
+ ];
2010
+ }
2011
+
2012
+ if ( 'category' == $settings['the_events_calendar_source'] && !empty( $settings['the_events_calendar_category'] ) ) {
2013
+ $arg['tax_query'] = [
2014
+ [
2015
+ 'taxonomy' => 'tribe_events_cat',
2016
+ 'field' => 'id',
2017
+ 'terms' => $settings['the_events_calendar_category']
2018
+ ]
2019
+ ];
2020
+ }
2021
+
2022
+ if ( 'selected_event' == $settings['the_events_calendar_source'] && !empty( $settings['the_events_calendar_selected'] ) ) {
2023
+ $arg['post__in'] = $settings['the_events_calendar_selected'];
2024
+ }
2025
+
2026
+ $events = tribe_get_events( $arg );
2027
+
2028
+ if ( empty( $events ) ) {
2029
+ return [];
2030
+ }
2031
+
2032
+ $calendar_data = [];
2033
+ foreach ($events as $key => $event) {
2034
+
2035
+ $date_format = 'Y-m-d';
2036
+ $all_day = 'yes';
2037
+
2038
+ if (!tribe_event_is_all_day($event->ID)) {
2039
+ $date_format .= ' H:i';
2040
+ $all_day = '';
2041
+ }
2042
+
2043
+ $image = get_the_post_thumbnail_url( $event->ID );
2044
+
2045
+ $calendar_data[] = [
2046
+ 'id' => ++$key,
2047
+ 'title' => !empty($event->post_title) ? $event->post_title :'',
2048
+ 'description' => $event->post_content,
2049
+ 'start' => tribe_get_start_date($event->ID, true, $date_format),
2050
+ 'end' => tribe_get_end_date($event->ID, true, $date_format),
2051
+
2052
+ // 'borderColor' => !empty($settings['eael_event_global_popup_ribbon_color']) ? $settings['eael_event_global_popup_ribbon_color'] : '#10ecab',
2053
+ // 'textColor' => $settings['eael_event_global_text_color'],
2054
+ // 'color' => $settings['eael_event_global_bg_color'],
2055
+
2056
+ 'url' => !empty( get_the_permalink( $event->ID ) ) ? get_the_permalink( $event->ID ) : '',
2057
+ 'allDay' => $all_day,
2058
+ 'external' => 'on',
2059
+ 'nofollow' => 'on',
2060
+ 'guest' => tribe_get_organizer( $event->ID ),
2061
+ 'location' => !empty( tribe_get_venue( $event->ID ) ) ? tribe_get_venue( $event->ID ) : '',
2062
+ 'image' => $image ? $image : '',
2063
+ ];
2064
+ }
2065
+ return $calendar_data;
2066
+
2067
+ }
2068
+
2069
+ public function get_popup_markup__ ( $settings ) {
2070
+ $readmore_text = !empty($settings['readmore_text']) ? esc_html($settings['readmore_text']) : '';
2071
+ $time_title = !empty($settings['time_title']) ? esc_html($settings['time_title']) : '';
2072
+ $speaker_title = !empty($settings['speaker_title']) ? esc_html($settings['speaker_title']) : '';
2073
+ $location_title = !empty($settings['location_title']) ? esc_html($settings['location_title']) : '';
2074
+ $popup = '<div class="ha-ec-popup-wrapper">
2075
+ <div class="ha-ec-popup">
2076
+
2077
+ <span class="ha-ec-popup-close"><i class="eicon-editor-close"></i></span>
2078
+ <div class="ha-ec-popup-body">
2079
+ <div class="ha-ec-popup-image">
2080
+ <img src="" alt="">
2081
+ </div>
2082
+ <div class="ha-ec-popup-content">
2083
+ <ul>
2084
+ <li class="ha-ec-event-time-wrap">
2085
+ <div class="ha-ec-time-icon">'.$this->render_svg_icon('clock').'</div>
2086
+ <div class="ha-ec-time-content">
2087
+ <span class="ha-ec-time-title">'.$time_title.'</span>
2088
+ <span class="ha-ec-event-time"></span>
2089
+ </div>
2090
+ </li>
2091
+ <li class="ha-ec-event-guest-wrap">
2092
+ <div class="ha-ec-guest-icon">'.$this->render_svg_icon('speaker').'</div>
2093
+ <div class="ha-ec-guest-content">
2094
+ <span class="ha-ec-guest-title">'.$speaker_title.'</span>
2095
+ <span class="ha-ec-event-guest"></span>
2096
+ </div>
2097
+ </li>
2098
+ <li class="ha-ec-event-location-wrap">
2099
+ <div class="ha-ec-location-icon">'.$this->render_svg_icon('map').'</div>
2100
+ <div class="ha-ec-location-content">
2101
+ <span class="ha-ec-location-title">'.$location_title.'</span>
2102
+ <span class="ha-ec-event-location"></span>
2103
+ </div>
2104
+ </li>
2105
+ </ul>
2106
+ <h3 class="ha-ec-event-title"></h3>
2107
+ <p class="ha-ec-popup-desc"></p>
2108
+ <div class="ha-ec-popup-readmore">
2109
+ <a class="ha-ec-popup-readmore-link" href="">'.$readmore_text.'</a>
2110
+ </div>
2111
+ </div>
2112
+ </div>
2113
+
2114
+ </div>
2115
+ </div>';
2116
+ echo $popup;
2117
+ }
2118
+
2119
+ public function get_popup_markup3 ( $settings ) {
2120
+ $readmore_text = !empty($settings['readmore_text']) ? esc_html($settings['readmore_text']) : '';
2121
+ $time_title = !empty($settings['time_title']) ? esc_html($settings['time_title']) : '';
2122
+ $speaker_title = !empty($settings['speaker_title']) ? esc_html($settings['speaker_title']) : '';
2123
+ $location_title = !empty($settings['location_title']) ? esc_html($settings['location_title']) : '';
2124
+ $popup = '<div class="ha-ec-popup-wrapper ha-ec-popup-ready">
2125
+ <div class="ha-ec-popup">
2126
+
2127
+ <span class="ha-ec-popup-close"><i class="eicon-editor-close"></i></span>
2128
+ <div class="ha-ec-popup-body">
2129
+ <div class="ha-ec-popup-image">
2130
+ <img src="" alt="">
2131
+ </div>
2132
+ <div class="ha-ec-popup-content">
2133
+ <ul>
2134
+ <li class="ha-ec-event-time-wrap">
2135
+ <div class="ha-ec-time-icon">'.$this->render_svg_icon('clock').'</div>
2136
+ <div class="ha-ec-time-content">
2137
+ <span class="ha-ec-time-title">Timezone UTC+6</span>
2138
+ <span class="ha-ec-event-time">9:16am - 10:15am</span>
2139
+ </div>
2140
+ </li>
2141
+ <li class="ha-ec-event-guest-wrap">
2142
+ <div class="ha-ec-guest-icon">'.$this->render_svg_icon('speaker').'</div>
2143
+ <div class="ha-ec-guest-content">
2144
+ <span class="ha-ec-guest-title">Speaker</span>
2145
+ <span class="ha-ec-event-guest">9:16am - 10:15am</span>
2146
+ </div>
2147
+ </li>
2148
+ <li class="ha-ec-event-location-wrap">
2149
+ <div class="ha-ec-location-icon">'.$this->render_svg_icon('map').'</div>
2150
+ <div class="ha-ec-location-content">
2151
+ <span class="ha-ec-location-title">Speaker</span>
2152
+ <span class="ha-ec-event-location">9:16am - 10:15am</span>
2153
+ </div>
2154
+ </li>
2155
+ </ul>
2156
+ <h3 class="ha-ec-event-title">Hasin Hayder</h3>
2157
+ <p class="ha-ec-popup-desc">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Harum ipsum voluptatibus nulla quis! Cum soluta consectetur molestiae dolorem aperiam deleniti possimus veniam minima, distinctio facilis cupiditate perferendis incidunt odio doloremque?</p>
2158
+ <div class="ha-ec-popup-readmore">
2159
+ <a class="ha-ec-popup-readmore-link" href="">'.$readmore_text.'</a>
2160
+ </div>
2161
+ </div>
2162
+ </div>
2163
+
2164
+ </div>
2165
+ </div>';
2166
+ echo $popup;
2167
+ }
2168
+
2169
+ public function get_popup_markup2 ( $settings ) {
2170
+ $readmore_text = !empty($settings['readmore_text']) ? esc_html($settings['readmore_text']) : '';
2171
+ $time_title = !empty($settings['time_title']) ? esc_html($settings['time_title']) : '';
2172
+ $speaker_title = !empty($settings['speaker_title']) ? esc_html($settings['speaker_title']) : '';
2173
+ $location_title = !empty($settings['location_title']) ? esc_html($settings['location_title']) : '';
2174
+ $popup = '<div class="ha-ec-popup-wrapper ha-ec-popup-ready">
2175
+ <div class="ha-ec-popup">
2176
+
2177
+ <span class="ha-ec-popup-close"><i class="eicon-editor-close"></i></span>
2178
+ <div class="ha-ec-popup-body">
2179
+ <div class="ha-ec-popup-image">
2180
+ <img src="" alt="">
2181
+ </div>
2182
+ <div class="ha-ec-popup-content">
2183
+ <ul>
2184
+ <li class="ha-ec-time-wrap">
2185
+ <div class="ha-ec-time-title">Timezone UTC+6</div>
2186
+ <div class="ha-ec-event-time">'.$this->render_svg_icon('clock').'<span>9:16am - 10:15am</span></div>
2187
+ </li>
2188
+ <li class="ha-ec-guest-wrap">
2189
+ <div class="ha-ec-guest-title">Speaker</div>
2190
+ <div class="ha-ec-event-guest">'.$this->render_svg_icon('speaker').'<span>Hasin Hayder</span></div>
2191
+ </li>
2192
+ <li class="ha-ec-location-wrap">
2193
+ <div class="ha-ec-location-title">Address</div>
2194
+ <div class="ha-ec-event-location">'.$this->render_svg_icon('map').'<span>Mirpur DOHS, Dhaka</span></div>
2195
+ </li>
2196
+ </ul>
2197
+ <h3 class="ha-ec-event-title">Hasin Hayder</h3>
2198
+ <p class="ha-ec-popup-desc">Lorem, ipsum dolor sit amet consectetur adipisicing elit. Harum ipsum voluptatibus nulla quis! Cum soluta consectetur molestiae dolorem aperiam deleniti possimus veniam minima, distinctio facilis cupiditate perferendis incidunt odio doloremque?</p>
2199
+ <div class="ha-ec-popup-readmore">
2200
+ <a class="ha-ec-popup-readmore-link" href="">'.$readmore_text.'</a>
2201
+ </div>
2202
+ </div>
2203
+ </div>
2204
+
2205
+ </div>
2206
+ </div>';
2207
+ echo $popup;
2208
+ }
2209
+
2210
+ public function get_popup_markup ( $settings ) {
2211
+ $readmore_text = !empty($settings['readmore_text']) ? esc_html($settings['readmore_text']) : '';
2212
+ $time_title = !empty($settings['time_title']) ? esc_html($settings['time_title']) : '';
2213
+ $speaker_title = !empty($settings['speaker_title']) ? esc_html($settings['speaker_title']) : '';
2214
+ $location_title = !empty($settings['location_title']) ? esc_html($settings['location_title']) : '';
2215
+ $popup = '<div class="ha-ec-popup-wrapper">
2216
+ <div class="ha-ec-popup">
2217
+
2218
+ <span class="ha-ec-popup-close"><i class="eicon-editor-close"></i></span>
2219
+ <div class="ha-ec-popup-body">
2220
+ <div class="ha-ec-popup-image">
2221
+ <img src="" alt="">
2222
+ </div>
2223
+ <div class="ha-ec-popup-content">
2224
+ <ul>
2225
+ <li>
2226
+ <div class="ha-ec-time-title">'.$time_title.'</div>
2227
+ <div class="ha-ec-event-time">'.$this->render_svg_icon('clock').'<span></span></div>
2228
+ </li>
2229
+ <li>
2230
+ <div class="ha-ec-guest-title">'.$speaker_title.'</div>
2231
+ <div class="ha-ec-event-guest">'.$this->render_svg_icon('speaker').'<span></span></div>
2232
+ </li>
2233
+ <li>
2234
+ <div class="ha-ec-location-title">'.$location_title.'</div>
2235
+ <div class="ha-ec-event-location">'.$this->render_svg_icon('map').'<span></span></div>
2236
+ </li>
2237
+ </ul>
2238
+ <h3 class="ha-ec-event-title"></h3>
2239
+ <p class="ha-ec-popup-desc"></p>
2240
+ <div class="ha-ec-popup-readmore">
2241
+ <a class="ha-ec-popup-readmore-link" href="">'.$readmore_text.'</a>
2242
+ </div>
2243
+ </div>
2244
+ </div>
2245
+
2246
+ </div>
2247
+ </div>';
2248
+ echo $popup;
2249
+ }
2250
+
2251
+ public function render_svg_icon( $icon_name ) {
2252
+ ?>
2253
+ <?php if ( 'clock' === $icon_name ) :
2254
+ return '<svg xmlns="http://www.w3.org/2000/svg" height="512pt" viewBox="0 0 512 512" width="512pt"><path d="m256 0c-141.164062 0-256 114.835938-256 256s114.835938 256 256 256 256-114.835938 256-256-114.835938-256-256-256zm121.75 388.414062c-4.160156 4.160157-9.621094 6.253907-15.082031 6.253907-5.460938 0-10.925781-2.09375-15.082031-6.253907l-106.667969-106.664062c-4.011719-3.988281-6.25-9.410156-6.25-15.082031v-138.667969c0-11.796875 9.554687-21.332031 21.332031-21.332031s21.332031 9.535156 21.332031 21.332031v129.835938l100.417969 100.414062c8.339844 8.34375 8.339844 21.824219 0 30.164062zm0 0"/></svg>';
2255
+ endif; ?>
2256
+ <?php if ( 'user' === $icon_name ) :
2257
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="-42 0 512 512.002"><path d="m210.351562 246.632812c33.882813 0 63.222657-12.152343 87.195313-36.128906 23.972656-23.972656 36.125-53.304687 36.125-87.191406 0-33.875-12.152344-63.210938-36.128906-87.191406-23.976563-23.96875-53.3125-36.121094-87.191407-36.121094-33.886718 0-63.21875 12.152344-87.191406 36.125s-36.128906 53.308594-36.128906 87.1875c0 33.886719 12.15625 63.222656 36.132812 87.195312 23.976563 23.96875 53.3125 36.125 87.1875 36.125zm0 0"/><path d="m426.128906 393.703125c-.691406-9.976563-2.089844-20.859375-4.148437-32.351563-2.078125-11.578124-4.753907-22.523437-7.957031-32.527343-3.308594-10.339844-7.808594-20.550781-13.371094-30.335938-5.773438-10.15625-12.554688-19-20.164063-26.277343-7.957031-7.613282-17.699219-13.734376-28.964843-18.199219-11.226563-4.441407-23.667969-6.691407-36.976563-6.691407-5.226563 0-10.28125 2.144532-20.042969 8.5-6.007812 3.917969-13.035156 8.449219-20.878906 13.460938-6.707031 4.273438-15.792969 8.277344-27.015625 11.902344-10.949219 3.542968-22.066406 5.339844-33.039063 5.339844-10.972656 0-22.085937-1.796876-33.046874-5.339844-11.210938-3.621094-20.296876-7.625-26.996094-11.898438-7.769532-4.964844-14.800782-9.496094-20.898438-13.46875-9.75-6.355468-14.808594-8.5-20.035156-8.5-13.3125 0-25.75 2.253906-36.972656 6.699219-11.257813 4.457031-21.003906 10.578125-28.96875 18.199219-7.605469 7.28125-14.390625 16.121094-20.15625 26.273437-5.558594 9.785157-10.058594 19.992188-13.371094 30.339844-3.199219 10.003906-5.875 20.945313-7.953125 32.523437-2.058594 11.476563-3.457031 22.363282-4.148437 32.363282-.679688 9.796875-1.023438 19.964844-1.023438 30.234375 0 26.726562 8.496094 48.363281 25.25 64.320312 16.546875 15.746094 38.441406 23.734375 65.066406 23.734375h246.53125c26.625 0 48.511719-7.984375 65.0625-23.734375 16.757813-15.945312 25.253906-37.585937 25.253906-64.324219-.003906-10.316406-.351562-20.492187-1.035156-30.242187zm0 0"/></svg>';
2258
+ endif; ?>
2259
+ <?php if ( 'speaker' === $icon_name ) :
2260
+ return '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3">
2261
+ <path d="M701.7,430.3c-5.1-8.3-14-13.2-23.7-13.2h-20.1c-5.3,0-9.6-4.1-10-9.4c-3.8-58.2-40.7-69-77.7-79.8 c-33.5-9.8-54.5-29.6-65.9-62.4c-1.3-3.7-4.8-6.2-8.8-6.2h-12.9c-0.5-10.8,1-31.6,17.3-49.9c12.7,0.8,23-10.5,27.1-22.2 c1.4-3.2,13-30.5,3.9-51.4c19.2-52-6-76.3-17.5-84.3c-5.9-51.7-87.2-51.3-91-51.4c-38.1,1.5-66.6,14.8-84.8,39.7 c-24.6,33.5-22.6,78.6-19.5,97.7c-11,11.3-2.8,34.1,2.3,48.5c0.9,2.5,1.7,4.7,2.3,6.7c2.9,9.1,7.9,15.5,14.7,18.8 c4,2,7.8,2.4,11.1,2.5c5.3,7.1,16.1,24,18.6,45.4h-4.8c-4,0-7.5,2.5-8.8,6.2c-10.9,31.2-34,52.2-68.7,62.4l-4.7,1.4 c-35.9,10.4-76.5,22.4-76.5,87.8c0,0.1-8.5,0-9.4,0h-32c-9.7,0-18.6,4.9-23.7,13.2c-5.1,8.3-5.6,18.4-1.2,27.1l37.2,74.3 c4.8,9.5,14.3,15.4,24.9,15.4h75.2c0.1,0,0.1,0,0.2,0l16.7,43.1c1.9,4.8,7.2,7.2,12.1,5.3c4.8-1.9,7.2-7.2,5.3-12l-27.4-70.7 c-1.1-2.9-0.8-6,1-8.6c1.7-2.5,4.5-4,7.6-4h260c3.1,0,5.9,1.5,7.6,4c1.7,2.6,2.1,5.7,1,8.6l-27.4,70.7c-1.9,4.8,0.5,10.2,5.3,12 c1.1,0.4,2.2,0.6,3.4,0.6c3.7,0,7.3-2.3,8.7-5.9l16.7-43h75.4c10.6,0,20.2-5.9,24.9-15.4l37.1-74.3 C707.2,448.7,706.8,438.6,701.7,430.3z M686.2,449.1l-37.2,74.3c-1.6,3.1-4.8,5.1-8.3,5.1h-68.2l3.5-9c3.3-8.6,2.2-18.2-3-25.9 c-5.2-7.6-13.8-12.1-23-12.1h-260c-9.2,0-17.8,4.5-23,12.1c-5.2,7.6-6.3,17.3-3,25.9l3.5,9h-68.2c-3.5,0-6.7-2-8.3-5.1l-37.1-74.3 c-2.1-4.1-0.4-7.7,0.4-9c0.8-1.3,3.2-4.4,7.9-4.4h254.3v-33.4c0-4.3-3.5-7.8-7.8-7.8h0c-11,0-20-9-20-20v-3c0-2.8,2.2-5,5-5h21.2 c2.7,0,5.1-2,5.3-4.6c0.3-3.1-2.1-5.6-5.1-5.6h-21.2c-2.8,0-5.1-2.3-5.1-5.1v0c0-2.8,2.3-5.1,5.1-5.1h21c2.7,0,5.1-2,5.3-4.6 c0.3-3.1-2.1-5.6-5.1-5.6h-21.2c-2.8,0-5.1-2.3-5.1-5.1l0,0c0-2.8,2.3-5.1,5.1-5.1h21c2.7,0,5.1-2,5.3-4.6c0.3-3.1-2.1-5.6-5.1-5.6 h-21.4c-2.8,0-5-2.2-5-5v-4.4c0-11,9-20,20-20H443c11,0,20,9,20,20v68.8c0,11-9,20-20,20h-0.1c-4.3,0-7.8,3.5-7.8,7.8v33.4h242.8 c4.7,0,7.1,3.1,7.9,4.4C686.6,441.4,688.3,444.9,686.2,449.1z"/>
2262
+ </svg>';
2263
+ endif; ?>
2264
+ <?php if ( 'map' === $icon_name ) :
2265
+ return '<svg xmlns="http://www.w3.org/2000/svg" id="Layer_1" enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512"><g><path d="m407.579 87.677c-31.073-53.624-86.265-86.385-147.64-87.637-2.62-.054-5.257-.054-7.878 0-61.374 1.252-116.566 34.013-147.64 87.637-31.762 54.812-32.631 120.652-2.325 176.123l126.963 232.387c.057.103.114.206.173.308 5.586 9.709 15.593 15.505 26.77 15.505 11.176 0 21.183-5.797 26.768-15.505.059-.102.116-.205.173-.308l126.963-232.387c30.304-55.471 29.435-121.311-2.327-176.123zm-151.579 144.323c-39.701 0-72-32.299-72-72s32.299-72 72-72 72 32.299 72 72-32.298 72-72 72z"/></g></svg>';
2266
+ endif; ?>
2267
+ <?php
2268
+ }
2269
+
2270
+ }
widgets/ninjaform/widget.php CHANGED
@@ -1,551 +1,551 @@
1
- <?php
2
- /**
3
- * Ninja Form widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Widget;
8
-
9
- use Elementor\Controls_Manager;
10
- use Elementor\Group_Control_Border;
11
- use Elementor\Group_Control_Box_Shadow;
12
- use Elementor\Group_Control_Typography;
13
- use Elementor\Scheme_Typography;
14
-
15
- defined( 'ABSPATH' ) || die();
16
-
17
- class NinjaForm 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 __( 'Ninja Forms', 'happy-elementor-addons' );
29
- }
30
-
31
- public function get_custom_help_url() {
32
- return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/ninja-forms/';
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-form';
45
- }
46
-
47
- public function get_keywords() {
48
- return [ 'wpf','wpform' , 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
49
- }
50
-
51
- protected function register_content_controls() {
52
- $this->start_controls_section(
53
- '_section_ninjaforms',
54
- [
55
- 'label' => ha_is_ninjaforms_activated() ? __( 'Ninja Forms', 'happy-elementor-addons' ) : __( 'Missing Notice', 'happy-elementor-addons' ),
56
- 'tab' => Controls_Manager::TAB_CONTENT,
57
- ]
58
- );
59
-
60
- if ( ! ha_is_ninjaforms_activated() ) {
61
- $this->add_control(
62
- '_ninjaforms_missing_notice',
63
- [
64
- 'type' => Controls_Manager::RAW_HTML,
65
- 'raw' => sprintf(
66
- __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
67
- '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Ninja+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Ninja Forms</a>',
68
- ha_get_current_user_display_name()
69
- ),
70
- 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
71
- ]
72
- );
73
-
74
- $this->add_control(
75
- '_ninjaforms_install',
76
- [
77
- 'type' => Controls_Manager::RAW_HTML,
78
- 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Ninja+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate Ninja Forms</a>',
79
- ]
80
- );
81
- $this->end_controls_section();
82
- return;
83
- }
84
-
85
- $this->add_control(
86
- 'form_id',
87
- [
88
- 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
89
- 'type' => Controls_Manager::SELECT,
90
- 'label_block' => true,
91
- 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_ninjaform(),
92
- ]
93
- );
94
-
95
- $this->end_controls_section();
96
- }
97
-
98
- protected function register_style_controls() {
99
- $this->start_controls_section(
100
- '_section_fields_style',
101
- [
102
- 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
103
- 'tab' => Controls_Manager::TAB_STYLE,
104
- ]
105
- );
106
-
107
- $this->add_responsive_control(
108
- 'field_margin',
109
- [
110
- 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
111
- 'type' => Controls_Manager::DIMENSIONS,
112
- 'size_units' => [ 'px', '%' ],
113
- 'selectors' => [
114
- '{{WRAPPER}} .nf-field-container:not(.submit-container)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
115
- ],
116
- ]
117
- );
118
-
119
- $this->add_responsive_control(
120
- 'field_padding',
121
- [
122
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
123
- 'type' => Controls_Manager::DIMENSIONS,
124
- 'size_units' => [ 'px', 'em', '%' ],
125
- 'selectors' => [
126
- '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
127
- ],
128
- ]
129
- );
130
-
131
- $this->add_responsive_control(
132
- 'field_border_radius',
133
- [
134
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
135
- 'type' => Controls_Manager::DIMENSIONS,
136
- 'size_units' => [ 'px', '%' ],
137
- 'selectors' => [
138
- '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
139
- ],
140
- ]
141
- );
142
-
143
- $this->add_group_control(
144
- Group_Control_Typography::get_type(),
145
- [
146
- 'name' => 'field_typography',
147
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
148
- 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
149
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
150
- ]
151
- );
152
-
153
- $this->add_control(
154
- 'field_textcolor',
155
- [
156
- 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
157
- 'type' => Controls_Manager::COLOR,
158
- 'selectors' => [
159
- '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'color: {{VALUE}}',
160
- ],
161
- ]
162
- );
163
-
164
- $this->add_control(
165
- 'field_placeholder_color',
166
- [
167
- 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
168
- 'type' => Controls_Manager::COLOR,
169
- 'selectors' => [
170
- '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
171
- '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
172
- '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
173
- ],
174
- ]
175
- );
176
-
177
- $this->start_controls_tabs( 'tabs_field_state' );
178
-
179
- $this->start_controls_tab(
180
- 'tab_field_normal',
181
- [
182
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
183
- ]
184
- );
185
-
186
- $this->add_group_control(
187
- Group_Control_Border::get_type(),
188
- [
189
- 'name' => 'field_border',
190
- 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
191
- ]
192
- );
193
-
194
- $this->add_group_control(
195
- Group_Control_Box_Shadow::get_type(),
196
- [
197
- 'name' => 'field_box_shadow',
198
- 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
199
- ]
200
- );
201
-
202
- $this->add_control(
203
- 'field_bg_color',
204
- [
205
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
206
- 'type' => Controls_Manager::COLOR,
207
- 'selectors' => [
208
- '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'background-color: {{VALUE}}',
209
- ],
210
- ]
211
- );
212
-
213
- $this->end_controls_tab();
214
-
215
- $this->start_controls_tab(
216
- 'tab_field_focus',
217
- [
218
- 'label' => __( 'Focus', 'happy-elementor-addons' ),
219
- ]
220
- );
221
-
222
- $this->add_group_control(
223
- Group_Control_Border::get_type(),
224
- [
225
- 'name' => 'field_focus_border',
226
- 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus',
227
- ]
228
- );
229
-
230
- $this->add_group_control(
231
- Group_Control_Box_Shadow::get_type(),
232
- [
233
- 'name' => 'field_focus_box_shadow',
234
- 'exclude' => [
235
- 'box_shadow_position',
236
- ],
237
- 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus',
238
- ]
239
- );
240
-
241
- $this->add_control(
242
- 'field_focus_bg_color',
243
- [
244
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
245
- 'type' => Controls_Manager::COLOR,
246
- 'selectors' => [
247
- '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus' => 'background-color: {{VALUE}}',
248
- ],
249
- ]
250
- );
251
-
252
- $this->end_controls_tab();
253
- $this->end_controls_tabs();
254
-
255
-
256
- $this->end_controls_section();
257
-
258
- $this->start_controls_section(
259
- 'ninjaf-form-label',
260
- [
261
- 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
262
- 'tab' => Controls_Manager::TAB_STYLE,
263
- ]
264
- );
265
-
266
- $this->add_responsive_control(
267
- 'label_margin',
268
- [
269
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
270
- 'type' => Controls_Manager::DIMENSIONS,
271
- 'size_units' => [ 'px', '%' ],
272
- 'selectors' => [
273
- '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
274
- ],
275
- ]
276
- );
277
-
278
- $this->add_responsive_control(
279
- 'label_padding',
280
- [
281
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
282
- 'type' => Controls_Manager::DIMENSIONS,
283
- 'size_units' => [ 'px', 'em', '%' ],
284
- 'selectors' => [
285
- '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
286
- ],
287
- ]
288
- );
289
-
290
- $this->add_control(
291
- 'hr3',
292
- [
293
- 'type' => Controls_Manager::DIVIDER,
294
- 'style' => 'thick',
295
- ]
296
- );
297
-
298
- $this->add_group_control(
299
- Group_Control_Typography::get_type(),
300
- [
301
- 'name' => 'label_typography',
302
- 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
303
- 'selector' => '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label',
304
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
305
- ]
306
- );
307
-
308
- $this->add_group_control(
309
- Group_Control_Typography::get_type(),
310
- [
311
- 'name' => 'desc_typography',
312
- 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
313
- 'selector' => '{{WRAPPER}} .nf-field-description p',
314
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
315
- ]
316
- );
317
-
318
- $this->add_control(
319
- 'label_color',
320
- [
321
- 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
322
- 'type' => Controls_Manager::COLOR,
323
- 'selectors' => [
324
- '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'color: {{VALUE}}',
325
- ],
326
- ]
327
- );
328
-
329
- $this->add_control(
330
- 'requered_label',
331
- [
332
- 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
333
- 'type' => Controls_Manager::COLOR,
334
- 'selectors' => [
335
- '{{WRAPPER}} .ninja-forms-req-symbol' => 'color: {{VALUE}}',
336
- ],
337
- ]
338
- );
339
-
340
- $this->add_control(
341
- 'desc_color',
342
- [
343
- 'label' => __( 'Description Text Color', 'happy-elementor-addons' ),
344
- 'type' => Controls_Manager::COLOR,
345
- 'selectors' => [
346
- '{{WRAPPER}} .nf-field-description p' => 'color: {{VALUE}}',
347
- ],
348
- ]
349
- );
350
-
351
- $this->end_controls_section();
352
-
353
- $this->start_controls_section(
354
- 'submit',
355
- [
356
- 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
357
- 'tab' => Controls_Manager::TAB_STYLE,
358
- ]
359
- );
360
-
361
- $this->add_responsive_control(
362
- 'submit_btn_position',
363
- [
364
- 'label' => __( 'Button Position', 'happy-elementor-addons' ),
365
- 'type' => Controls_Manager::CHOOSE,
366
- 'options' => [
367
- 'left' => [
368
- 'title' => __( 'Left', 'happy-elementor-addons' ),
369
- 'icon' => 'eicon-h-align-left',
370
- ],
371
- 'center' => [
372
- 'title' => __( 'Center', 'happy-elementor-addons' ),
373
- 'icon' => 'eicon-h-align-center',
374
- ],
375
- 'right' => [
376
- 'title' => __( 'Right', 'happy-elementor-addons' ),
377
- 'icon' => 'eicon-h-align-right',
378
- ],
379
- ],
380
- 'desktop_default' => 'left',
381
- 'toggle' => false,
382
- 'prefix_class' => 'ha-form-btn--%s',
383
- 'selectors' => [
384
- '{{WRAPPER}} .field-wrap.submit-wrap' => 'text-align: {{Value}};',
385
- ],
386
- ]
387
- );
388
-
389
- $this->add_responsive_control(
390
- 'submit_margin',
391
- [
392
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
393
- 'type' => Controls_Manager::DIMENSIONS,
394
- 'size_units' => [ 'px', '%' ],
395
- 'selectors' => [
396
- '{{WRAPPER}} .submit-container input' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
397
- ],
398
- ]
399
- );
400
-
401
- $this->add_responsive_control(
402
- 'submit_padding',
403
- [
404
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
405
- 'type' => Controls_Manager::DIMENSIONS,
406
- 'size_units' => [ 'px', 'em', '%' ],
407
- 'selectors' => [
408
- '{{WRAPPER}} .submit-container input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
409
- ],
410
- ]
411
- );
412
-
413
- $this->add_group_control(
414
- Group_Control_Typography::get_type(),
415
- [
416
- 'name' => 'submit_typography',
417
- 'selector' => '{{WRAPPER}} .submit-container input',
418
- 'scheme' => Scheme_Typography::TYPOGRAPHY_4
419
- ]
420
- );
421
-
422
- $this->add_group_control(
423
- Group_Control_Border::get_type(),
424
- [
425
- 'name' => 'submit_border',
426
- 'selector' => '{{WRAPPER}} .submit-container input',
427
- ]
428
- );
429
-
430
- $this->add_control(
431
- 'submit_border_radius',
432
- [
433
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
434
- 'type' => Controls_Manager::DIMENSIONS,
435
- 'size_units' => [ 'px', '%' ],
436
- 'selectors' => [
437
- '{{WRAPPER}} .submit-container input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
438
- ],
439
- ]
440
- );
441
-
442
- $this->add_group_control(
443
- Group_Control_Box_Shadow::get_type(),
444
- [
445
- 'name' => 'submit_box_shadow',
446
- 'selector' => '{{WRAPPER}} .submit-container input',
447
- ]
448
- );
449
-
450
- $this->add_control(
451
- 'hr4',
452
- [
453
- 'type' => Controls_Manager::DIVIDER,
454
- 'style' => 'thick',
455
- ]
456
- );
457
-
458
- $this->start_controls_tabs( 'tabs_button_style' );
459
-
460
- $this->start_controls_tab(
461
- 'tab_button_normal',
462
- [
463
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
464
- ]
465
- );
466
-
467
- $this->add_control(
468
- 'submit_color',
469
- [
470
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
471
- 'type' => Controls_Manager::COLOR,
472
- 'default' => '',
473
- 'selectors' => [
474
- '{{WRAPPER}} .submit-container input' => 'color: {{VALUE}};',
475
- ],
476
- ]
477
- );
478
-
479
- $this->add_control(
480
- 'submit_bg_color',
481
- [
482
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
483
- 'type' => Controls_Manager::COLOR,
484
- 'selectors' => [
485
- '{{WRAPPER}} .submit-container input' => 'background-color: {{VALUE}};',
486
- ],
487
- ]
488
- );
489
-
490
- $this->end_controls_tab();
491
-
492
- $this->start_controls_tab(
493
- 'tab_button_hover',
494
- [
495
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
496
- ]
497
- );
498
-
499
- $this->add_control(
500
- 'submit_hover_color',
501
- [
502
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
503
- 'type' => Controls_Manager::COLOR,
504
- 'selectors' => [
505
- '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'color: {{VALUE}};',
506
- ],
507
- ]
508
- );
509
-
510
- $this->add_control(
511
- 'submit_hover_bg_color',
512
- [
513
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
514
- 'type' => Controls_Manager::COLOR,
515
- 'selectors' => [
516
- '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'background-color: {{VALUE}};',
517
- ],
518
- ]
519
- );
520
-
521
- $this->add_control(
522
- 'submit_hover_border_color',
523
- [
524
- 'label' => __( 'Border Color', 'happy-elementor-addons' ),
525
- 'type' => Controls_Manager::COLOR,
526
- 'selectors' => [
527
- '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'border-color: {{VALUE}};',
528
- ],
529
- ]
530
- );
531
-
532
- $this->end_controls_tab();
533
- $this->end_controls_tabs();
534
-
535
- $this->end_controls_section();
536
- }
537
-
538
- protected function render() {
539
- if ( ! ha_is_ninjaforms_activated() ) {
540
- return;
541
- }
542
-
543
- $settings = $this->get_settings_for_display();
544
-
545
- if ( ! empty( $settings['form_id'] ) ) {
546
- echo ha_do_shortcode( 'ninja_form', [
547
- 'id' => $settings['form_id'],
548
- ] );
549
- }
550
- }
551
- }
1
+ <?php
2
+ /**
3
+ * Ninja Form widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Controls_Manager;
10
+ use Elementor\Group_Control_Border;
11
+ use Elementor\Group_Control_Box_Shadow;
12
+ use Elementor\Group_Control_Typography;
13
+ use Elementor\Scheme_Typography;
14
+
15
+ defined( 'ABSPATH' ) || die();
16
+
17
+ class NinjaForm 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 __( 'Ninja Forms', 'happy-elementor-addons' );
29
+ }
30
+
31
+ public function get_custom_help_url() {
32
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/ninja-forms/';
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-form';
45
+ }
46
+
47
+ public function get_keywords() {
48
+ return [ 'wpf','wpform' , 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
49
+ }
50
+
51
+ protected function register_content_controls() {
52
+ $this->start_controls_section(
53
+ '_section_ninjaforms',
54
+ [
55
+ 'label' => ha_is_ninjaforms_activated() ? __( 'Ninja Forms', 'happy-elementor-addons' ) : __( 'Missing Notice', 'happy-elementor-addons' ),
56
+ 'tab' => Controls_Manager::TAB_CONTENT,
57
+ ]
58
+ );
59
+
60
+ if ( ! ha_is_ninjaforms_activated() ) {
61
+ $this->add_control(
62
+ '_ninjaforms_missing_notice',
63
+ [
64
+ 'type' => Controls_Manager::RAW_HTML,
65
+ 'raw' => sprintf(
66
+ __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
67
+ '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Ninja+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Ninja Forms</a>',
68
+ ha_get_current_user_display_name()
69
+ ),
70
+ 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
71
+ ]
72
+ );
73
+
74
+ $this->add_control(
75
+ '_ninjaforms_install',
76
+ [
77
+ 'type' => Controls_Manager::RAW_HTML,
78
+ 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=Ninja+Forms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate Ninja Forms</a>',
79
+ ]
80
+ );
81
+ $this->end_controls_section();
82
+ return;
83
+ }
84
+
85
+ $this->add_control(
86
+ 'form_id',
87
+ [
88
+ 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
89
+ 'type' => Controls_Manager::SELECT,
90
+ 'label_block' => true,
91
+ 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_ninjaform(),
92
+ ]
93
+ );
94
+
95
+ $this->end_controls_section();
96
+ }
97
+
98
+ protected function register_style_controls() {
99
+ $this->start_controls_section(
100
+ '_section_fields_style',
101
+ [
102
+ 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
103
+ 'tab' => Controls_Manager::TAB_STYLE,
104
+ ]
105
+ );
106
+
107
+ $this->add_responsive_control(
108
+ 'field_margin',
109
+ [
110
+ 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
111
+ 'type' => Controls_Manager::DIMENSIONS,
112
+ 'size_units' => [ 'px', '%' ],
113
+ 'selectors' => [
114
+ '{{WRAPPER}} .nf-field-container:not(.submit-container)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
115
+ ],
116
+ ]
117
+ );
118
+
119
+ $this->add_responsive_control(
120
+ 'field_padding',
121
+ [
122
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
123
+ 'type' => Controls_Manager::DIMENSIONS,
124
+ 'size_units' => [ 'px', 'em', '%' ],
125
+ 'selectors' => [
126
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
127
+ ],
128
+ ]
129
+ );
130
+
131
+ $this->add_responsive_control(
132
+ 'field_border_radius',
133
+ [
134
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
135
+ 'type' => Controls_Manager::DIMENSIONS,
136
+ 'size_units' => [ 'px', '%' ],
137
+ 'selectors' => [
138
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
139
+ ],
140
+ ]
141
+ );
142
+
143
+ $this->add_group_control(
144
+ Group_Control_Typography::get_type(),
145
+ [
146
+ 'name' => 'field_typography',
147
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
148
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
149
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
150
+ ]
151
+ );
152
+
153
+ $this->add_control(
154
+ 'field_textcolor',
155
+ [
156
+ 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
157
+ 'type' => Controls_Manager::COLOR,
158
+ 'selectors' => [
159
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'color: {{VALUE}}',
160
+ ],
161
+ ]
162
+ );
163
+
164
+ $this->add_control(
165
+ 'field_placeholder_color',
166
+ [
167
+ 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
168
+ 'type' => Controls_Manager::COLOR,
169
+ 'selectors' => [
170
+ '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
171
+ '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
172
+ '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
173
+ ],
174
+ ]
175
+ );
176
+
177
+ $this->start_controls_tabs( 'tabs_field_state' );
178
+
179
+ $this->start_controls_tab(
180
+ 'tab_field_normal',
181
+ [
182
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
183
+ ]
184
+ );
185
+
186
+ $this->add_group_control(
187
+ Group_Control_Border::get_type(),
188
+ [
189
+ 'name' => 'field_border',
190
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
191
+ ]
192
+ );
193
+
194
+ $this->add_group_control(
195
+ Group_Control_Box_Shadow::get_type(),
196
+ [
197
+ 'name' => 'field_box_shadow',
198
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea',
199
+ ]
200
+ );
201
+
202
+ $this->add_control(
203
+ 'field_bg_color',
204
+ [
205
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
206
+ 'type' => Controls_Manager::COLOR,
207
+ 'selectors' => [
208
+ '{{WRAPPER}} .textbox-wrap input[type=text], {{WRAPPER}} .email-wrap input, {{WRAPPER}} .textarea-wrap textarea' => 'background-color: {{VALUE}}',
209
+ ],
210
+ ]
211
+ );
212
+
213
+ $this->end_controls_tab();
214
+
215
+ $this->start_controls_tab(
216
+ 'tab_field_focus',
217
+ [
218
+ 'label' => __( 'Focus', 'happy-elementor-addons' ),
219
+ ]
220
+ );
221
+
222
+ $this->add_group_control(
223
+ Group_Control_Border::get_type(),
224
+ [
225
+ 'name' => 'field_focus_border',
226
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus',
227
+ ]
228
+ );
229
+
230
+ $this->add_group_control(
231
+ Group_Control_Box_Shadow::get_type(),
232
+ [
233
+ 'name' => 'field_focus_box_shadow',
234
+ 'exclude' => [
235
+ 'box_shadow_position',
236
+ ],
237
+ 'selector' => '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus',
238
+ ]
239
+ );
240
+
241
+ $this->add_control(
242
+ 'field_focus_bg_color',
243
+ [
244
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
245
+ 'type' => Controls_Manager::COLOR,
246
+ 'selectors' => [
247
+ '{{WRAPPER}} .textbox-wrap input[type=text]:focus, {{WRAPPER}} .email-wrap input:focus, {{WRAPPER}} .textarea-wrap textarea:focus' => 'background-color: {{VALUE}}',
248
+ ],
249
+ ]
250
+ );
251
+
252
+ $this->end_controls_tab();
253
+ $this->end_controls_tabs();
254
+
255
+
256
+ $this->end_controls_section();
257
+
258
+ $this->start_controls_section(
259
+ 'ninjaf-form-label',
260
+ [
261
+ 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
262
+ 'tab' => Controls_Manager::TAB_STYLE,
263
+ ]
264
+ );
265
+
266
+ $this->add_responsive_control(
267
+ 'label_margin',
268
+ [
269
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
270
+ 'type' => Controls_Manager::DIMENSIONS,
271
+ 'size_units' => [ 'px', '%' ],
272
+ 'selectors' => [
273
+ '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
274
+ ],
275
+ ]
276
+ );
277
+
278
+ $this->add_responsive_control(
279
+ 'label_padding',
280
+ [
281
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
282
+ 'type' => Controls_Manager::DIMENSIONS,
283
+ 'size_units' => [ 'px', 'em', '%' ],
284
+ 'selectors' => [
285
+ '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
286
+ ],
287
+ ]
288
+ );
289
+
290
+ $this->add_control(
291
+ 'hr3',
292
+ [
293
+ 'type' => Controls_Manager::DIVIDER,
294
+ 'style' => 'thick',
295
+ ]
296
+ );
297
+
298
+ $this->add_group_control(
299
+ Group_Control_Typography::get_type(),
300
+ [
301
+ 'name' => 'label_typography',
302
+ 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
303
+ 'selector' => '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label',
304
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
305
+ ]
306
+ );
307
+
308
+ $this->add_group_control(
309
+ Group_Control_Typography::get_type(),
310
+ [
311
+ 'name' => 'desc_typography',
312
+ 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
313
+ 'selector' => '{{WRAPPER}} .nf-field-description p',
314
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
315
+ ]
316
+ );
317
+
318
+ $this->add_control(
319
+ 'label_color',
320
+ [
321
+ 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
322
+ 'type' => Controls_Manager::COLOR,
323
+ 'selectors' => [
324
+ '{{WRAPPER}} .textbox-wrap label, {{WRAPPER}} .email-wrap label, {{WRAPPER}} .textarea-wrap label' => 'color: {{VALUE}}',
325
+ ],
326
+ ]
327
+ );
328
+
329
+ $this->add_control(
330
+ 'requered_label',
331
+ [
332
+ 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
333
+ 'type' => Controls_Manager::COLOR,
334
+ 'selectors' => [
335
+ '{{WRAPPER}} .ninja-forms-req-symbol' => 'color: {{VALUE}}',
336
+ ],
337
+ ]
338
+ );
339
+
340
+ $this->add_control(
341
+ 'desc_color',
342
+ [
343
+ 'label' => __( 'Description Text Color', 'happy-elementor-addons' ),
344
+ 'type' => Controls_Manager::COLOR,
345
+ 'selectors' => [
346
+ '{{WRAPPER}} .nf-field-description p' => 'color: {{VALUE}}',
347
+ ],
348
+ ]
349
+ );
350
+
351
+ $this->end_controls_section();
352
+
353
+ $this->start_controls_section(
354
+ 'submit',
355
+ [
356
+ 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
357
+ 'tab' => Controls_Manager::TAB_STYLE,
358
+ ]
359
+ );
360
+
361
+ $this->add_responsive_control(
362
+ 'submit_btn_position',
363
+ [
364
+ 'label' => __( 'Button Position', 'happy-elementor-addons' ),
365
+ 'type' => Controls_Manager::CHOOSE,
366
+ 'options' => [
367
+ 'left' => [
368
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
369
+ 'icon' => 'eicon-h-align-left',
370
+ ],
371
+ 'center' => [
372
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
373
+ 'icon' => 'eicon-h-align-center',
374
+ ],
375
+ 'right' => [
376
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
377
+ 'icon' => 'eicon-h-align-right',
378
+ ],
379
+ ],
380
+ 'desktop_default' => 'left',
381
+ 'toggle' => false,
382
+ 'prefix_class' => 'ha-form-btn--%s',
383
+ 'selectors' => [
384
+ '{{WRAPPER}} .field-wrap.submit-wrap' => 'text-align: {{Value}};',
385
+ ],
386
+ ]
387
+ );
388
+
389
+ $this->add_responsive_control(
390
+ 'submit_margin',
391
+ [
392
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
393
+ 'type' => Controls_Manager::DIMENSIONS,
394
+ 'size_units' => [ 'px', '%' ],
395
+ 'selectors' => [
396
+ '{{WRAPPER}} .submit-container input' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
397
+ ],
398
+ ]
399
+ );
400
+
401
+ $this->add_responsive_control(
402
+ 'submit_padding',
403
+ [
404
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
405
+ 'type' => Controls_Manager::DIMENSIONS,
406
+ 'size_units' => [ 'px', 'em', '%' ],
407
+ 'selectors' => [
408
+ '{{WRAPPER}} .submit-container input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
409
+ ],
410
+ ]
411
+ );
412
+
413
+ $this->add_group_control(
414
+ Group_Control_Typography::get_type(),
415
+ [
416
+ 'name' => 'submit_typography',
417
+ 'selector' => '{{WRAPPER}} .submit-container input',
418
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
419
+ ]
420
+ );
421
+
422
+ $this->add_group_control(
423
+ Group_Control_Border::get_type(),
424
+ [
425
+ 'name' => 'submit_border',
426
+ 'selector' => '{{WRAPPER}} .submit-container input',
427
+ ]
428
+ );
429
+
430
+ $this->add_control(
431
+ 'submit_border_radius',
432
+ [
433
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
434
+ 'type' => Controls_Manager::DIMENSIONS,
435
+ 'size_units' => [ 'px', '%' ],
436
+ 'selectors' => [
437
+ '{{WRAPPER}} .submit-container input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
438
+ ],
439
+ ]
440
+ );
441
+
442
+ $this->add_group_control(
443
+ Group_Control_Box_Shadow::get_type(),
444
+ [
445
+ 'name' => 'submit_box_shadow',
446
+ 'selector' => '{{WRAPPER}} .submit-container input',
447
+ ]
448
+ );
449
+
450
+ $this->add_control(
451
+ 'hr4',
452
+ [
453
+ 'type' => Controls_Manager::DIVIDER,
454
+ 'style' => 'thick',
455
+ ]
456
+ );
457
+
458
+ $this->start_controls_tabs( 'tabs_button_style' );
459
+
460
+ $this->start_controls_tab(
461
+ 'tab_button_normal',
462
+ [
463
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
464
+ ]
465
+ );
466
+
467
+ $this->add_control(
468
+ 'submit_color',
469
+ [
470
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
471
+ 'type' => Controls_Manager::COLOR,
472
+ 'default' => '',
473
+ 'selectors' => [
474
+ '{{WRAPPER}} .submit-container input' => 'color: {{VALUE}};',
475
+ ],
476
+ ]
477
+ );
478
+
479
+ $this->add_control(
480
+ 'submit_bg_color',
481
+ [
482
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
483
+ 'type' => Controls_Manager::COLOR,
484
+ 'selectors' => [
485
+ '{{WRAPPER}} .submit-container input' => 'background-color: {{VALUE}};',
486
+ ],
487
+ ]
488
+ );
489
+
490
+ $this->end_controls_tab();
491
+
492
+ $this->start_controls_tab(
493
+ 'tab_button_hover',
494
+ [
495
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
496
+ ]
497
+ );
498
+
499
+ $this->add_control(
500
+ 'submit_hover_color',
501
+ [
502
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
503
+ 'type' => Controls_Manager::COLOR,
504
+ 'selectors' => [
505
+ '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'color: {{VALUE}};',
506
+ ],
507
+ ]
508
+ );
509
+
510
+ $this->add_control(
511
+ 'submit_hover_bg_color',
512
+ [
513
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
514
+ 'type' => Controls_Manager::COLOR,
515
+ 'selectors' => [
516
+ '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'background-color: {{VALUE}};',
517
+ ],
518
+ ]
519
+ );
520
+
521
+ $this->add_control(
522
+ 'submit_hover_border_color',
523
+ [
524
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
525
+ 'type' => Controls_Manager::COLOR,
526
+ 'selectors' => [
527
+ '{{WRAPPER}} .submit-container input:hover, {{WRAPPER}} .submit-container input:focus' => 'border-color: {{VALUE}};',
528
+ ],
529
+ ]
530
+ );
531
+
532
+ $this->end_controls_tab();
533
+ $this->end_controls_tabs();
534
+
535
+ $this->end_controls_section();
536
+ }
537
+
538
+ protected function render() {
539
+ if ( ! ha_is_ninjaforms_activated() ) {
540
+ return;
541
+ }
542
+
543
+ $settings = $this->get_settings_for_display();
544
+
545
+ if ( ! empty( $settings['form_id'] ) ) {
546
+ echo ha_do_shortcode( 'ninja_form', [
547
+ 'id' => $settings['form_id'],
548
+ ] );
549
+ }
550
+ }
551
+ }
widgets/number/widget.php CHANGED
@@ -1,369 +1,369 @@
1
- <?php
2
- /**
3
- * Number widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- 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 Elementor\Group_Control_Background;
18
- use Elementor\Group_Control_Text_Shadow;
19
- use Happy_Addons\Elementor\Controls\Group_Control_Foreground;
20
-
21
- defined( 'ABSPATH' ) || die();
22
-
23
- class Number extends Base {
24
-
25
- /**
26
- * Get widget title.
27
- *
28
- * @since 1.0.0
29
- * @access public
30
- *
31
- * @return string Widget title.
32
- */
33
- public function get_title() {
34
- return __( 'Number', 'happy-elementor-addons' );
35
- }
36
-
37
- public function get_custom_help_url() {
38
- return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/number/';
39
- }
40
-
41
- /**
42
- * Get widget icon.
43
- *
44
- * @since 1.0.0
45
- * @access public
46
- *
47
- * @return string Widget icon.
48
- */
49
- public function get_icon() {
50
- return 'hm hm-madel';
51
- }
52
-
53
- public function get_keywords() {
54
- return [ 'number', 'animate', 'text' ];
55
- }
56
-
57
- /**
58
- * Register content related controls
59
- */
60
- protected function register_content_controls() {
61
- $this->start_controls_section(
62
- '_section_number',
63
- [
64
- 'label' => __( 'Number', 'happy-elementor-addons' ),
65
- 'tab' => Controls_Manager::TAB_CONTENT,
66
- ]
67
- );
68
-
69
- $this->add_control(
70
- 'number_text',
71
- [
72
- 'label' => __( 'Text', 'happy-elementor-addons' ),
73
- 'label_block' => false,
74
- 'type' => Controls_Manager::TEXT,
75
- 'default' => 7,
76
- 'dynamic' => [
77
- 'active' => true,
78
- ]
79
- ]
80
- );
81
-
82
- $this->add_control(
83
- 'animate_number',
84
- [
85
- 'label' => __( 'Animate', 'happy-elementor-addons' ),
86
- 'description' => __( 'Only number is animatable' ),
87
- 'type' => Controls_Manager::SWITCHER,
88
- 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
89
- 'label_off' => __( 'No', 'happy-elementor-addons' ),
90
- 'return_value' => 'yes',
91
- 'separator' => 'before',
92
- ]
93
- );
94
-
95
- $this->add_control(
96
- 'animate_duration',
97
- [
98
- 'label' => __( 'Duration', 'happy-elementor-addons' ),
99
- 'type' => Controls_Manager::NUMBER,
100
- 'min' => 100,
101
- 'max' => 10000,
102
- 'step' => 10,
103
- 'default' => 500,
104
- 'condition' => [
105
- 'animate_number!' => ''
106
- ],
107
- ]
108
- );
109
-
110
- $this->end_controls_section();
111
- }
112
-
113
- /**
114
- * Register styles related controls
115
- */
116
- protected function register_style_controls() {
117
- $this->start_controls_section(
118
- 'number_background_style',
119
- [
120
- 'label' => __( 'General', 'happy-elementor-addons' ),
121
- 'tab' => Controls_Manager::TAB_STYLE,
122
- ]
123
- );
124
-
125
- $this->add_responsive_control(
126
- 'number_width_height',
127
- [
128
- 'label' => __( 'Size', 'happy-elementor-addons' ),
129
- 'type' => Controls_Manager::SLIDER,
130
- 'size_units' => [ 'px' ],
131
- 'range' => [
132
- 'px' => [
133
- 'min' => 0,
134
- 'max' => 500,
135
- ],
136
- ],
137
- 'selectors' => [
138
- '{{WRAPPER}} .ha-number-body' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
139
- ],
140
- ]
141
- );
142
-
143
- $this->add_control(
144
- 'number_padding',
145
- [
146
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
147
- 'type' => Controls_Manager::DIMENSIONS,
148
- 'size_units' => [ 'px', '%', 'em' ],
149
- 'selectors' => [
150
- '{{WRAPPER}} .ha-number-body ' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
151
- ],
152
- ]
153
- );
154
-
155
- $this->add_group_control(
156
- Group_Control_Border::get_type(),
157
- [
158
- 'name' => 'number_border',
159
- 'label' => __( 'Border', 'happy-elementor-addons' ),
160
- 'selector' => '{{WRAPPER}} .ha-number-body',
161
- ]
162
- );
163
-
164
- $this->add_control(
165
- 'number_border_radius',
166
- [
167
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
168
- 'type' => Controls_Manager::DIMENSIONS,
169
- 'size_units' => [ 'px', '%' ],
170
- 'selectors' => [
171
- '{{WRAPPER}} .ha-number-body' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
172
- ],
173
- ]
174
- );
175
-
176
- $this->add_group_control(
177
- Group_Control_Box_Shadow::get_type(),
178
- [
179
- 'name' => 'number_box_shadow',
180
- 'label' => __( 'Box Shadow', 'happy-elementor-addons' ),
181
- 'selector' => '{{WRAPPER}} .ha-number-body',
182
- ]
183
- );
184
-
185
- $this->add_responsive_control(
186
- 'number_align',
187
- [
188
- 'label' => __( 'Alignment', 'happy-elementor-addons' ),
189
- 'type' => Controls_Manager::CHOOSE,
190
- 'options' => [
191
- 'left' => [
192
- 'title' => __( 'Left', 'happy-elementor-addons' ),
193
- 'icon' => 'fa fa-align-left',
194
- ],
195
- 'center' => [
196
- 'title' => __( 'Center', 'happy-elementor-addons' ),
197
- 'icon' => 'fa fa-align-center',
198
- ],
199
- 'right' => [
200
- 'title' => __( 'Right', 'happy-elementor-addons' ),
201
- 'icon' => 'fa fa-align-right',
202
- ],
203
- ],
204
- 'toggle' => true,
205
- 'selectors' => [
206
- '{{WRAPPER}} .ha-number-body' => '{{VALUE}};'
207
- ],
208
- 'selectors_dictionary' => [
209
- 'left' => 'float: left',
210
- 'center' => 'margin: 0 auto',
211
- 'right' => 'float:right'
212
- ],
213
- ]
214
- );
215
-
216
- $this->add_control(
217
- '_heading_bg',
218
- [
219
- 'label' => __( 'Background', 'happy-elementor-addons' ),
220
- 'type' => Controls_Manager::HEADING,
221
- 'separator' => 'before',
222
- ]
223
- );
224
-
225
- $this->add_group_control(
226
- Group_Control_Background::get_type(),
227
- [
228
- 'name' => 'number_background_color',
229
- 'types' => [ 'classic', 'gradient' ],
230
- 'selector' => '{{WRAPPER}} .ha-number-body',
231
- ]
232
- );
233
-
234
- $this->add_control(
235
- '_heading_bg_overlay',
236
- [
237
- 'label' => __( 'Background Overaly', 'happy-elementor-addons' ),
238
- 'type' => Controls_Manager::HEADING,
239
- 'separator' => 'before',
240
- ]
241
- );
242
-
243
- $this->add_group_control(
244
- Group_Control_Background::get_type(),
245
- [
246
- 'name' => 'number_background_overlay_color',
247
- 'label' => __( 'Background', 'happy-elementor-addons' ),
248
- 'types' => [ 'classic', 'gradient' ],
249
- 'selector' => '{{WRAPPER}} .ha-number-overlay',
250
- ]
251
- );
252
-
253
- $this->add_control(
254
- 'number_background_overlay_blend_mode',
255
- [
256
- 'label' => __( 'Blend Mood', 'happy-elementor-addons' ),
257
- 'type' => Controls_Manager::SELECT,
258
- 'default' => 'normal',
259
- 'options' => ha_get_css_blend_modes(),
260
- 'selectors' => [
261
- '{{WRAPPER}} .ha-number-overlay' => 'mix-blend-mode: {{VALUE}}',
262
- ],
263
- ]
264
- );
265
-
266
- $this->add_responsive_control(
267
- 'number_background_overlay_blend_mode_opacity',
268
- [
269
- 'label' => __( 'Opacity', 'happy-elementor-addons' ),
270
- 'type' => Controls_Manager::SLIDER,
271
- 'size_units' => [ 'px' ],
272
- 'range' => [
273
- 'px' => [
274
- 'min' => 0,
275
- 'max' => 1,
276
- 'step' => .1,
277
- ],
278
- ],
279
- 'selectors' => [
280
- '{{WRAPPER}} .ha-number-overlay' => 'opacity: {{SIZE}};',
281
- ],
282
- ]
283
- );
284
-
285
- $this->end_controls_section();
286
-
287
- $this->start_controls_section(
288
- '_section_style_text',
289
- [
290
- 'label' => __( 'Text', 'happy-elementor-addons' ),
291
- 'tab' => Controls_Manager::TAB_STYLE,
292
- ]
293
- );
294
-
295
- $this->add_control(
296
- 'number_text_color',
297
- [
298
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
299
- 'type' => Controls_Manager::COLOR,
300
- 'selectors' => [
301
- '{{WRAPPER}} .ha-number-body' => 'color: {{VALUE}};',
302
- ],
303
- ]
304
- );
305
-
306
- $this->add_group_control(
307
- Group_Control_Typography::get_type(),
308
- [
309
- 'name' => 'number_text_typography',
310
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
311
- 'selector' => '{{WRAPPER}} .ha-number-text',
312
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
313
- ]
314
- );
315
-
316
- $this->add_group_control(
317
- Group_Control_Text_Shadow::get_type(),
318
- [
319
- 'name' => 'number_text_shadow',
320
- 'label' => __( 'Text Shadow', 'happy-elementor-addons' ),
321
- 'selector' => '{{WRAPPER}} .ha-number-text',
322
- ]
323
- );
324
-
325
- $this->add_control(
326
- 'number_text_rotate',
327
- [
328
- 'label' => __( 'Text Rotate', 'happy-elementor-addons' ),
329
- 'type' => Controls_Manager::SLIDER,
330
- 'size_units' => [ 'px' ],
331
- 'range' => [
332
- 'px' => [
333
- 'min' => 0,
334
- 'max' => 360,
335
- ],
336
- ],
337
- 'selectors' => [
338
- '{{WRAPPER}} .ha-number-text' => '-webkit-transform: rotate({{SIZE}}deg);-ms-transform: rotate({{SIZE}}deg);transform: rotate({{SIZE}}deg);'
339
- ],
340
- ]
341
- );
342
-
343
- $this->end_controls_section();
344
- }
345
-
346
- protected function render() {
347
- $settings = $this->get_settings_for_display();
348
-
349
- $this->add_render_attribute( 'number_text', 'class', 'ha-number-text' );
350
- $number = $settings['number_text'];
351
-
352
- if ( $settings['animate_number'] ) {
353
- $data = [
354
- 'toValue' => intval( $settings['number_text'] ),
355
- 'duration' => intval( $settings['animate_duration'] ),
356
- ];
357
- $this->add_render_attribute( 'number_text', 'data-animation', wp_json_encode( $data ) );
358
- $number = 0;
359
- }
360
- ?>
361
-
362
- <div class="ha-number-body">
363
- <div class="ha-number-overlay"></div>
364
- <span <?php $this->print_render_attribute_string( 'number_text' ); ?>><?php echo esc_html( $number ); ?></span>
365
- </div>
366
-
367
- <?php
368
- }
369
- }
1
+ <?php
2
+ /**
3
+ * Number widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ 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 Elementor\Group_Control_Background;
18
+ use Elementor\Group_Control_Text_Shadow;
19
+ use Happy_Addons\Elementor\Controls\Group_Control_Foreground;
20
+
21
+ defined( 'ABSPATH' ) || die();
22
+
23
+ class Number extends Base {
24
+
25
+ /**
26
+ * Get widget title.
27
+ *
28
+ * @since 1.0.0
29
+ * @access public
30
+ *
31
+ * @return string Widget title.
32
+ */
33
+ public function get_title() {
34
+ return __( 'Number', 'happy-elementor-addons' );
35
+ }
36
+
37
+ public function get_custom_help_url() {
38
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/number/';
39
+ }
40
+
41
+ /**
42
+ * Get widget icon.
43
+ *
44
+ * @since 1.0.0
45
+ * @access public
46
+ *
47
+ * @return string Widget icon.
48
+ */
49
+ public function get_icon() {
50
+ return 'hm hm-madel';
51
+ }
52
+
53
+ public function get_keywords() {
54
+ return [ 'number', 'animate', 'text' ];
55
+ }
56
+
57
+ /**
58
+ * Register content related controls
59
+ */
60
+ protected function register_content_controls() {
61
+ $this->start_controls_section(
62
+ '_section_number',
63
+ [
64
+ 'label' => __( 'Number', 'happy-elementor-addons' ),
65
+ 'tab' => Controls_Manager::TAB_CONTENT,
66
+ ]
67
+ );
68
+
69
+ $this->add_control(
70
+ 'number_text',
71
+ [
72
+ 'label' => __( 'Text', 'happy-elementor-addons' ),
73
+ 'label_block' => false,
74
+ 'type' => Controls_Manager::TEXT,
75
+ 'default' => 7,
76
+ 'dynamic' => [
77
+ 'active' => true,
78
+ ]
79
+ ]
80
+ );
81
+
82
+ $this->add_control(
83
+ 'animate_number',
84
+ [
85
+ 'label' => __( 'Animate', 'happy-elementor-addons' ),
86
+ 'description' => __( 'Only number is animatable' ),
87
+ 'type' => Controls_Manager::SWITCHER,
88
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
89
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
90
+ 'return_value' => 'yes',
91
+ 'separator' => 'before',
92
+ ]
93
+ );
94
+
95
+ $this->add_control(
96
+ 'animate_duration',
97
+ [
98
+ 'label' => __( 'Duration', 'happy-elementor-addons' ),
99
+ 'type' => Controls_Manager::NUMBER,
100
+ 'min' => 100,
101
+ 'max' => 10000,
102
+ 'step' => 10,
103
+ 'default' => 500,
104
+ 'condition' => [
105
+ 'animate_number!' => ''
106
+ ],
107
+ ]
108
+ );
109
+
110
+ $this->end_controls_section();
111
+ }
112
+
113
+ /**
114
+ * Register styles related controls
115
+ */
116
+ protected function register_style_controls() {
117
+ $this->start_controls_section(
118
+ 'number_background_style',
119
+ [
120
+ 'label' => __( 'General', 'happy-elementor-addons' ),
121
+ 'tab' => Controls_Manager::TAB_STYLE,
122
+ ]
123
+ );
124
+
125
+ $this->add_responsive_control(
126
+ 'number_width_height',
127
+ [
128
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
129
+ 'type' => Controls_Manager::SLIDER,
130
+ 'size_units' => [ 'px' ],
131
+ 'range' => [
132
+ 'px' => [
133
+ 'min' => 0,
134
+ 'max' => 500,
135
+ ],
136
+ ],
137
+ 'selectors' => [
138
+ '{{WRAPPER}} .ha-number-body' => 'width: {{SIZE}}{{UNIT}}; height: {{SIZE}}{{UNIT}};',
139
+ ],
140
+ ]
141
+ );
142
+
143
+ $this->add_control(
144
+ 'number_padding',
145
+ [
146
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
147
+ 'type' => Controls_Manager::DIMENSIONS,
148
+ 'size_units' => [ 'px', '%', 'em' ],
149
+ 'selectors' => [
150
+ '{{WRAPPER}} .ha-number-body ' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
151
+ ],
152
+ ]
153
+ );
154
+
155
+ $this->add_group_control(
156
+ Group_Control_Border::get_type(),
157
+ [
158
+ 'name' => 'number_border',
159
+ 'label' => __( 'Border', 'happy-elementor-addons' ),
160
+ 'selector' => '{{WRAPPER}} .ha-number-body',
161
+ ]
162
+ );
163
+
164
+ $this->add_control(
165
+ 'number_border_radius',
166
+ [
167
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
168
+ 'type' => Controls_Manager::DIMENSIONS,
169
+ 'size_units' => [ 'px', '%' ],
170
+ 'selectors' => [
171
+ '{{WRAPPER}} .ha-number-body' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
172
+ ],
173
+ ]
174
+ );
175
+
176
+ $this->add_group_control(
177
+ Group_Control_Box_Shadow::get_type(),
178
+ [
179
+ 'name' => 'number_box_shadow',
180
+ 'label' => __( 'Box Shadow', 'happy-elementor-addons' ),
181
+ 'selector' => '{{WRAPPER}} .ha-number-body',
182
+ ]
183
+ );
184
+
185
+ $this->add_responsive_control(
186
+ 'number_align',
187
+ [
188
+ 'label' => __( 'Alignment', 'happy-elementor-addons' ),
189
+ 'type' => Controls_Manager::CHOOSE,
190
+ 'options' => [
191
+ 'left' => [
192
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
193
+ 'icon' => 'fa fa-align-left',
194
+ ],
195
+ 'center' => [
196
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
197
+ 'icon' => 'fa fa-align-center',
198
+ ],
199
+ 'right' => [
200
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
201
+ 'icon' => 'fa fa-align-right',
202
+ ],
203
+ ],
204
+ 'toggle' => true,
205
+ 'selectors' => [
206
+ '{{WRAPPER}} .ha-number-body' => '{{VALUE}};'
207
+ ],
208
+ 'selectors_dictionary' => [
209
+ 'left' => 'float: left',
210
+ 'center' => 'margin: 0 auto',
211
+ 'right' => 'float:right'
212
+ ],
213
+ ]
214
+ );
215
+
216
+ $this->add_control(
217
+ '_heading_bg',
218
+ [
219
+ 'label' => __( 'Background', 'happy-elementor-addons' ),
220
+ 'type' => Controls_Manager::HEADING,
221
+ 'separator' => 'before',
222
+ ]
223
+ );
224
+
225
+ $this->add_group_control(
226
+ Group_Control_Background::get_type(),
227
+ [
228
+ 'name' => 'number_background_color',
229
+ 'types' => [ 'classic', 'gradient' ],
230
+ 'selector' => '{{WRAPPER}} .ha-number-body',
231
+ ]
232
+ );
233
+
234
+ $this->add_control(
235
+ '_heading_bg_overlay',
236
+ [
237
+ 'label' => __( 'Background Overaly', 'happy-elementor-addons' ),
238
+ 'type' => Controls_Manager::HEADING,
239
+ 'separator' => 'before',
240
+ ]
241
+ );
242
+
243
+ $this->add_group_control(
244
+ Group_Control_Background::get_type(),
245
+ [
246
+ 'name' => 'number_background_overlay_color',
247
+ 'label' => __( 'Background', 'happy-elementor-addons' ),
248
+ 'types' => [ 'classic', 'gradient' ],
249
+ 'selector' => '{{WRAPPER}} .ha-number-overlay',
250
+ ]
251
+ );
252
+
253
+ $this->add_control(
254
+ 'number_background_overlay_blend_mode',
255
+ [
256
+ 'label' => __( 'Blend Mood', 'happy-elementor-addons' ),
257
+ 'type' => Controls_Manager::SELECT,
258
+ 'default' => 'normal',
259
+ 'options' => ha_get_css_blend_modes(),
260
+ 'selectors' => [
261
+ '{{WRAPPER}} .ha-number-overlay' => 'mix-blend-mode: {{VALUE}}',
262
+ ],
263
+ ]
264
+ );
265
+
266
+ $this->add_responsive_control(
267
+ 'number_background_overlay_blend_mode_opacity',
268
+ [
269
+ 'label' => __( 'Opacity', 'happy-elementor-addons' ),
270
+ 'type' => Controls_Manager::SLIDER,
271
+ 'size_units' => [ 'px' ],
272
+ 'range' => [
273
+ 'px' => [
274
+ 'min' => 0,
275
+ 'max' => 1,
276
+ 'step' => .1,
277
+ ],
278
+ ],
279
+ 'selectors' => [
280
+ '{{WRAPPER}} .ha-number-overlay' => 'opacity: {{SIZE}};',
281
+ ],
282
+ ]
283
+ );
284
+
285
+ $this->end_controls_section();
286
+
287
+ $this->start_controls_section(
288
+ '_section_style_text',
289
+ [
290
+ 'label' => __( 'Text', 'happy-elementor-addons' ),
291
+ 'tab' => Controls_Manager::TAB_STYLE,
292
+ ]
293
+ );
294
+
295
+ $this->add_control(
296
+ 'number_text_color',
297
+ [
298
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
299
+ 'type' => Controls_Manager::COLOR,
300
+ 'selectors' => [
301
+ '{{WRAPPER}} .ha-number-body' => 'color: {{VALUE}};',
302
+ ],
303
+ ]
304
+ );
305
+
306
+ $this->add_group_control(
307
+ Group_Control_Typography::get_type(),
308
+ [
309
+ 'name' => 'number_text_typography',
310
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
311
+ 'selector' => '{{WRAPPER}} .ha-number-text',
312
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3,
313
+ ]
314
+ );
315
+
316
+ $this->add_group_control(
317
+ Group_Control_Text_Shadow::get_type(),
318
+ [
319
+ 'name' => 'number_text_shadow',
320
+ 'label' => __( 'Text Shadow', 'happy-elementor-addons' ),
321
+ 'selector' => '{{WRAPPER}} .ha-number-text',
322
+ ]
323
+ );
324
+
325
+ $this->add_control(
326
+ 'number_text_rotate',
327
+ [
328
+ 'label' => __( 'Text Rotate', 'happy-elementor-addons' ),
329
+ 'type' => Controls_Manager::SLIDER,
330
+ 'size_units' => [ 'px' ],
331
+ 'range' => [
332
+ 'px' => [
333
+ 'min' => 0,
334
+ 'max' => 360,
335
+ ],
336
+ ],
337
+ 'selectors' => [
338
+ '{{WRAPPER}} .ha-number-text' => '-webkit-transform: rotate({{SIZE}}deg);-ms-transform: rotate({{SIZE}}deg);transform: rotate({{SIZE}}deg);'
339
+ ],
340
+ ]
341
+ );
342
+
343
+ $this->end_controls_section();
344
+ }
345
+
346
+ protected function render() {
347
+ $settings = $this->get_settings_for_display();
348
+
349
+ $this->add_render_attribute( 'number_text', 'class', 'ha-number-text' );
350
+ $number = $settings['number_text'];
351
+
352
+ if ( $settings['animate_number'] ) {
353
+ $data = [
354
+ 'toValue' => intval( $settings['number_text'] ),
355
+ 'duration' => intval( $settings['animate_duration'] ),
356
+ ];
357
+ $this->add_render_attribute( 'number_text', 'data-animation', wp_json_encode( $data ) );
358
+ $number = 0;
359
+ }
360
+ ?>
361
+
362
+ <div class="ha-number-body">
363
+ <div class="ha-number-overlay"></div>
364
+ <span <?php $this->print_render_attribute_string( 'number_text' ); ?>><?php echo esc_html( $number ); ?></span>
365
+ </div>
366
+
367
+ <?php
368
+ }
369
+ }
widgets/slider/widget.php CHANGED
@@ -116,6 +116,12 @@ class Slider extends Base {
116
  ]
117
  );
118
 
 
 
 
 
 
 
119
  $this->add_control(
120
  'slides',
121
  [
@@ -123,33 +129,7 @@ class Slider extends Base {
123
  'type' => Controls_Manager::REPEATER,
124
  'fields' => $repeater->get_controls(),
125
  'title_field' => '<# print(title || "Carousel Item"); #>',
126
- 'default' => [
127
- [
128
- 'image' => [
129
- 'url' => Utils::get_placeholder_image_src(),
130
- ],
131
- ],
132
- [
133
- 'image' => [
134
- 'url' => Utils::get_placeholder_image_src(),
135
- ],
136
- ],
137
- [
138
- 'image' => [
139
- 'url' => Utils::get_placeholder_image_src(),
140
- ],
141
- ],
142
- [
143
- 'image' => [
144
- 'url' => Utils::get_placeholder_image_src(),
145
- ],
146
- ],
147
- [
148
- 'image' => [
149
- 'url' => Utils::get_placeholder_image_src(),
150
- ],
151
- ]
152
- ]
153
  ]
154
  );
155
 
@@ -454,7 +434,7 @@ class Slider extends Base {
454
  $this->start_controls_section(
455
  '_section_style_arrow',
456
  [
457
- 'label' => __( 'Navigation - Arrow', 'happy-elementor-addons' ),
458
  'tab' => Controls_Manager::TAB_STYLE,
459
  ]
460
  );
@@ -642,7 +622,7 @@ class Slider extends Base {
642
  $this->start_controls_section(
643
  '_section_style_dots',
644
  [
645
- 'label' => __( 'Navigation - Dots', 'happy-elementor-addons' ),
646
  'tab' => Controls_Manager::TAB_STYLE,
647
  ]
648
  );
@@ -716,6 +696,18 @@ class Slider extends Base {
716
  ]
717
  );
718
 
 
 
 
 
 
 
 
 
 
 
 
 
719
  $this->add_control(
720
  'dots_nav_color',
721
  [
@@ -756,6 +748,18 @@ class Slider extends Base {
756
  ]
757
  );
758
 
 
 
 
 
 
 
 
 
 
 
 
 
759
  $this->add_control(
760
  'dots_nav_active_color',
761
  [
116
  ]
117
  );
118
 
119
+ $placeholder = [
120
+ 'image' => [
121
+ 'url' => Utils::get_placeholder_image_src(),
122
+ ],
123
+ ];
124
+
125
  $this->add_control(
126
  'slides',
127
  [
129
  'type' => Controls_Manager::REPEATER,
130
  'fields' => $repeater->get_controls(),
131
  'title_field' => '<# print(title || "Carousel Item"); #>',
132
+ 'default' => array_fill( 0, 5, $placeholder )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
  ]
134
  );
135
 
434
  $this->start_controls_section(
435
  '_section_style_arrow',
436
  [
437
+ 'label' => __( 'Navigation :: Arrow', 'happy-elementor-addons' ),
438
  'tab' => Controls_Manager::TAB_STYLE,
439
  ]
440
  );
622
  $this->start_controls_section(
623
  '_section_style_dots',
624
  [
625
+ 'label' => __( 'Navigation :: Dots', 'happy-elementor-addons' ),
626
  'tab' => Controls_Manager::TAB_STYLE,
627
  ]
628
  );
696
  ]
697
  );
698
 
699
+ $this->add_control(
700
+ 'dots_nav_size',
701
+ [
702
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
703
+ 'type' => Controls_Manager::SLIDER,
704
+ 'size_units' => ['px'],
705
+ 'selectors' => [
706
+ '{{WRAPPER}} .slick-dots li button:before' => 'font-size: {{SIZE}}{{UNIT}};',
707
+ ],
708
+ ]
709
+ );
710
+
711
  $this->add_control(
712
  'dots_nav_color',
713
  [
748
  ]
749
  );
750
 
751
+ $this->add_control(
752
+ 'dots_nav_active_size',
753
+ [
754
+ 'label' => __( 'Size', 'happy-elementor-addons' ),
755
+ 'type' => Controls_Manager::SLIDER,
756
+ 'size_units' => ['px'],
757
+ 'selectors' => [
758
+ '{{WRAPPER}} .slick-dots li.slick-active button:before' => 'font-size: {{SIZE}}{{UNIT}};',
759
+ ],
760
+ ]
761
+ );
762
+
763
  $this->add_control(
764
  'dots_nav_active_color',
765
  [
widgets/weform/widget.php CHANGED
@@ -1,713 +1,713 @@
1
- <?php
2
- /**
3
- * WeForm widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Widget;
8
-
9
- use Elementor\Controls_Manager;
10
- use Elementor\Group_Control_Border;
11
- use Elementor\Group_Control_Box_Shadow;
12
- use Elementor\Group_Control_Text_Shadow;
13
- use Elementor\Group_Control_Typography;
14
- use Elementor\Scheme_Typography;
15
-
16
- defined( 'ABSPATH' ) || die();
17
-
18
- class WeForm extends Base {
19
-
20
- /**
21
- * Get widget title.
22
- *
23
- * @since 1.0.0
24
- * @access public
25
- *
26
- * @return string Widget title.
27
- */
28
- public function get_title() {
29
- return __( 'weForms', 'happy-elementor-addons' );
30
- }
31
-
32
- public function get_custom_help_url() {
33
- return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/weforms/';
34
- }
35
-
36
- /**
37
- * Get widget icon.
38
- *
39
- * @since 1.0.0
40
- * @access public
41
- *
42
- * @return string Widget icon.
43
- */
44
- public function get_icon() {
45
- return 'hm hm-form';
46
- }
47
-
48
- public function get_keywords() {
49
- return [ 'weForms', 'we forms', 'caldera', 'wpf','wpform', 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
50
- }
51
-
52
- // Whether the reload preview is required or not.
53
- public function is_reload_preview_required() {
54
- return true;
55
- }
56
-
57
- protected function register_content_controls() {
58
- $this->start_controls_section(
59
- '_section_weforms',
60
- [
61
- 'label' => ha_is_weforms_activated() ? __( 'weForms', 'happy-elementor-addons' ) : __( 'Missing Notice',
62
- 'happy-elementor-addons' ),
63
- 'tab' => Controls_Manager::TAB_CONTENT,
64
- ]
65
- );
66
-
67
- if ( ! ha_is_weforms_activated() ) {
68
- $this->add_control(
69
- '_weforms_missing_notice',
70
- [
71
- 'type' => Controls_Manager::RAW_HTML,
72
- 'raw' => sprintf(
73
- __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
74
- '<a href="'.esc_url( admin_url( 'plugin-install.php?s=weForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">weForms</a>',
75
- ha_get_current_user_display_name()
76
- ),
77
- 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
78
- ]
79
- );
80
-
81
- $this->add_control(
82
- '_weforms_install',
83
- [
84
- 'type' => Controls_Manager::RAW_HTML,
85
- 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=weForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate weForms</a>',
86
- ]
87
- );
88
- $this->end_controls_section();
89
- return;
90
- }
91
-
92
- $this->add_control(
93
- 'form_id',
94
- [
95
- 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
96
- 'type' => Controls_Manager::SELECT,
97
- 'label_block' => true,
98
- 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_we_forms(),
99
- ]
100
- );
101
-
102
- $this->end_controls_section();
103
- }
104
-
105
- protected function register_style_controls() {
106
- $this->start_controls_section(
107
- '_section_fields_style',
108
- [
109
- 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
110
- 'tab' => Controls_Manager::TAB_STYLE,
111
- ]
112
- );
113
-
114
- $this->add_responsive_control(
115
- 'large_field_width',
116
- [
117
- 'label' => __( 'Large Field Width', 'happy-elementor-addons' ),
118
- 'type' => Controls_Manager::SLIDER,
119
- 'size_units' => [ 'px', '%' ],
120
- 'default' => [
121
- 'unit' => '%',
122
- 'size' => 99
123
- ],
124
- 'range' => [
125
- '%' => [
126
- 'min' => 1,
127
- 'max' => 100,
128
- ],
129
- 'px' => [
130
- 'min' => 1,
131
- 'max' => 800,
132
- ],
133
- ],
134
- 'selectors' => [
135
- '{{WRAPPER}} .wpuf-form > li.wpuf-el.field-size-large > .wpuf-fields input:not([type=radio]):not([type=checkbox])' => 'width: {{SIZE}}{{UNIT}};',
136
- '{{WRAPPER}} .wpuf-form > li.wpuf-el.field-size-large > .wpuf-fields textarea' => 'width: {{SIZE}}{{UNIT}};',
137
-
138
- ],
139
- ]
140
- );
141
-
142
- $this->add_responsive_control(
143
- 'field_margin',
144
- [
145
- 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
146
- 'type' => Controls_Manager::DIMENSIONS,
147
- 'size_units' => [ 'px', '%' ],
148
- 'selectors' => [
149
- '{{WRAPPER}} .wpuf-el:not(.wpuf-submit)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
150
- ],
151
- ]
152
- );
153
-
154
- $this->add_responsive_control(
155
- 'field_padding',
156
- [
157
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
158
- 'type' => Controls_Manager::DIMENSIONS,
159
- 'size_units' => [ 'px', '%' ],
160
- 'selectors' => [
161
- '{{WRAPPER}} .wpuf-fields input:not(.weforms_submit_btn)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}} !important;',
162
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
163
- ],
164
- ]
165
- );
166
-
167
- $this->add_responsive_control(
168
- 'field_border_radius',
169
- [
170
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
171
- 'type' => Controls_Manager::DIMENSIONS,
172
- 'size_units' => [ 'px', '%' ],
173
- 'selectors' => [
174
- '{{WRAPPER}} .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-fields textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
175
- ],
176
- ]
177
- );
178
-
179
- $this->add_group_control(
180
- Group_Control_Typography::get_type(),
181
- [
182
- 'name' => 'field_typography',
183
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
184
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
185
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
186
- ]
187
- );
188
-
189
- $this->add_control(
190
- 'field_textcolor',
191
- [
192
- 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
193
- 'type' => Controls_Manager::COLOR,
194
- 'selectors' => [
195
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea' => 'color: {{VALUE}};',
196
- ],
197
- ]
198
- );
199
-
200
- $this->add_control(
201
- 'field_placeholder_color',
202
- [
203
- 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
204
- 'type' => Controls_Manager::COLOR,
205
- 'selectors' => [
206
- '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
207
- '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
208
- '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
209
- ],
210
- ]
211
- );
212
-
213
- $this->start_controls_tabs( 'tabs_field_state' );
214
-
215
- $this->start_controls_tab(
216
- 'tab_field_normal',
217
- [
218
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
219
- ]
220
- );
221
-
222
- $this->add_group_control(
223
- Group_Control_Border::get_type(),
224
- [
225
- 'name' => 'field_border',
226
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
227
- ]
228
- );
229
-
230
- $this->add_group_control(
231
- Group_Control_Box_Shadow::get_type(),
232
- [
233
- 'name' => 'field_box_shadow',
234
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
235
- ]
236
- );
237
-
238
- $this->add_control(
239
- 'field_bg_color',
240
- [
241
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
242
- 'type' => Controls_Manager::COLOR,
243
- 'selectors' => [
244
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea' => 'background-color: {{VALUE}}',
245
- ],
246
- ]
247
- );
248
-
249
- $this->end_controls_tab();
250
-
251
- $this->start_controls_tab(
252
- 'tab_field_focus',
253
- [
254
- 'label' => __( 'Focus', 'happy-elementor-addons' ),
255
- ]
256
- );
257
-
258
- $this->add_group_control(
259
- Group_Control_Border::get_type(),
260
- [
261
- 'name' => 'field_focus_border',
262
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:focus:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea:focus',
263
- ]
264
- );
265
-
266
- $this->add_group_control(
267
- Group_Control_Box_Shadow::get_type(),
268
- [
269
- 'name' => 'field_focus_box_shadow',
270
- 'exclude' => [
271
- 'box_shadow_position',
272
- ],
273
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:focus:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea:focus',
274
- ]
275
- );
276
-
277
- $this->add_control(
278
- 'field_focus_bg_color',
279
- [
280
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
281
- 'type' => Controls_Manager::COLOR,
282
- 'selectors' => [
283
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:focus:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea:focus' => 'background-color: {{VALUE}}',
284
- ],
285
- ]
286
- );
287
-
288
- $this->end_controls_tab();
289
- $this->end_controls_tabs();
290
-
291
- $this->end_controls_section();
292
-
293
-
294
- $this->start_controls_section(
295
- 'we-form-label',
296
- [
297
- 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
298
- 'tab' => Controls_Manager::TAB_STYLE,
299
- ]
300
- );
301
-
302
- $this->add_responsive_control(
303
- 'label_margin',
304
- [
305
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
306
- 'type' => Controls_Manager::DIMENSIONS,
307
- 'size_units' => [ 'px', '%' ],
308
- 'selectors' => [
309
- '{{WRAPPER}} .wpuf-label label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
310
- ],
311
- ]
312
- );
313
-
314
- $this->add_responsive_control(
315
- 'label_padding',
316
- [
317
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
318
- 'type' => Controls_Manager::DIMENSIONS,
319
- 'size_units' => [ 'px', 'em', '%' ],
320
- 'selectors' => [
321
- '{{WRAPPER}} .wpuf-label label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
322
- ],
323
- ]
324
- );
325
-
326
- $this->add_control(
327
- 'hr3',
328
- [
329
- 'type' => Controls_Manager::DIVIDER,
330
- 'style' => 'thick',
331
- ]
332
- );
333
-
334
- $this->add_group_control(
335
- Group_Control_Typography::get_type(),
336
- [
337
- 'name' => 'label_typography',
338
- 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
339
- 'selector' => '{{WRAPPER}} .wpuf-label label, {{WRAPPER}} .wpuf-form-sub-label',
340
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
341
- ]
342
- );
343
-
344
- $this->add_group_control(
345
- Group_Control_Typography::get_type(),
346
- [
347
- 'name' => 'desc_typography',
348
- 'label' => __( 'Help Text Typography', 'happy-elementor-addons' ),
349
- 'selector' => '{{WRAPPER}} .wpuf-fields .wpuf-help',
350
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
351
- ]
352
- );
353
-
354
- $this->add_control(
355
- 'label_color',
356
- [
357
- 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
358
- 'type' => Controls_Manager::COLOR,
359
- 'selectors' => [
360
- '{{WRAPPER}} .wpuf-label label, {{WRAPPER}} .wpuf-form-sub-label' => 'color: {{VALUE}}',
361
- ],
362
- ]
363
- );
364
-
365
- $this->add_control(
366
- 'requered_label',
367
- [
368
- 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
369
- 'type' => Controls_Manager::COLOR,
370
- 'selectors' => [
371
- '{{WRAPPER}} .wpuf-label .required' => 'color: {{VALUE}} !important',
372
- ],
373
- ]
374
- );
375
-
376
- $this->add_control(
377
- 'desc_color',
378
- [
379
- 'label' => __( 'Help Text Color', 'happy-elementor-addons' ),
380
- 'type' => Controls_Manager::COLOR,
381
- 'selectors' => [
382
- '{{WRAPPER}} .wpuf-fields .wpuf-help' => 'color: {{VALUE}}',
383
- ],
384
- ]
385
- );
386
-
387
- $this->end_controls_section();
388
-
389
- $this->start_controls_section(
390
- 'submit',
391
- [
392
- 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
393
- 'tab' => Controls_Manager::TAB_STYLE,
394
- ]
395
- );
396
-
397
- $this->add_control(
398
- 'submit_btn_width',
399
- [
400
- 'label' => __( 'Button Full Width?', 'happy-elementor-addons' ),
401
- 'type' => Controls_Manager::SWITCHER,
402
- 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
403
- 'label_off' => __( 'No', 'happy-elementor-addons' ),
404
- 'return_value' => 'yes',
405
- 'default' => 'yes',
406
- ]
407
- );
408
-
409
- $this->add_responsive_control(
410
- 'button_width',
411
- [
412
- 'label' => __( 'Button Width', 'happy-elementor-addons' ),
413
- 'type' => Controls_Manager::SLIDER,
414
- 'size_units' => [ 'px', '%' ],
415
- 'condition' => [
416
- 'submit_btn_width' => 'yes'
417
- ],
418
- 'default' => [
419
- 'unit' => '%',
420
- 'size' => 100
421
- ],
422
- 'range' => [
423
- '%' => [
424
- 'min' => 1,
425
- 'max' => 100,
426
- ],
427
- 'px' => [
428
- 'min' => 1,
429
- 'max' => 800,
430
- ],
431
- ],
432
- 'selectors' => [
433
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit .weforms_submit_btn' => 'display: block; width: {{SIZE}}{{UNIT}};',
434
- ],
435
- ]
436
- );
437
-
438
- $this->add_responsive_control(
439
- 'submit_btn_position',
440
- [
441
- 'label' => __( 'Button Position', 'happy-elementor-addons' ),
442
- 'type' => Controls_Manager::CHOOSE,
443
- 'options' => [
444
- 'left' => [
445
- 'title' => __( 'Left', 'happy-elementor-addons' ),
446
- 'icon' => 'eicon-h-align-left',
447
- ],
448
- 'center' => [
449
- 'title' => __( 'Center', 'happy-elementor-addons' ),
450
- 'icon' => 'eicon-h-align-center',
451
- ],
452
- 'right' => [
453
- 'title' => __( 'Right', 'happy-elementor-addons' ),
454
- 'icon' => 'eicon-h-align-right',
455
- ],
456
- ],
457
- 'condition' => [
458
- 'submit_btn_width' => ''
459
- ],
460
- 'desktop_default' => 'left',
461
- 'toggle' => false,
462
- 'prefix_class' => 'ha-form-btn--%s',
463
- 'selectors' => [
464
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit' => 'text-align: {{Value}};',
465
- ],
466
- ]
467
- );
468
-
469
- $this->add_responsive_control(
470
- 'submit_margin',
471
- [
472
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
473
- 'type' => Controls_Manager::DIMENSIONS,
474
- 'size_units' => [ 'px', '%' ],
475
- 'selectors' => [
476
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
477
- ],
478
- ]
479
- );
480
-
481
- $this->add_responsive_control(
482
- 'submit_padding',
483
- [
484
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
485
- 'type' => Controls_Manager::DIMENSIONS,
486
- 'size_units' => [ 'px', 'em', '%' ],
487
- 'selectors' => [
488
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
489
- ],
490
- ]
491
- );
492
-
493
- $this->add_group_control(
494
- Group_Control_Typography::get_type(),
495
- [
496
- 'name' => 'submit_typography',
497
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
498
- 'scheme' => Scheme_Typography::TYPOGRAPHY_4
499
- ]
500
- );
501
-
502
- $this->add_group_control(
503
- Group_Control_Border::get_type(),
504
- [
505
- 'name' => 'submit_border',
506
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
507
- ]
508
- );
509
-
510
- $this->add_control(
511
- 'submit_border_radius',
512
- [
513
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
514
- 'type' => Controls_Manager::DIMENSIONS,
515
- 'size_units' => [ 'px', '%' ],
516
- 'selectors' => [
517
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
518
- ],
519
- ]
520
- );
521
-
522
- $this->add_group_control(
523
- Group_Control_Box_Shadow::get_type(),
524
- [
525
- 'name' => 'submit_box_shadow',
526
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
527
- ]
528
- );
529
-
530
- $this->add_group_control(
531
- Group_Control_Text_Shadow::get_type(),
532
- [
533
- 'name' => 'submit_text_shadow',
534
- 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
535
- ]
536
- );
537
-
538
- $this->add_control(
539
- 'hr4',
540
- [
541
- 'type' => Controls_Manager::DIVIDER,
542
- 'style' => 'thick',
543
- ]
544
- );
545
-
546
- $this->start_controls_tabs( 'tabs_button_style' );
547
-
548
- $this->start_controls_tab(
549
- 'tab_button_normal',
550
- [
551
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
552
- ]
553
- );
554
-
555
- $this->add_control(
556
- 'submit_color',
557
- [
558
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
559
- 'type' => Controls_Manager::COLOR,
560
- 'default' => '',
561
- 'selectors' => [
562
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'color: {{VALUE}};',
563
- ],
564
- ]
565
- );
566
-
567
- $this->add_control(
568
- 'submit_bg_color',
569
- [
570
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
571
- 'type' => Controls_Manager::COLOR,
572
- 'selectors' => [
573
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'background-color: {{VALUE}};',
574
- ],
575
- ]
576
- );
577
-
578
- $this->end_controls_tab();
579
-
580
- $this->start_controls_tab(
581
- 'tab_button_hover',
582
- [
583
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
584
- ]
585
- );
586
-
587
- $this->add_control(
588
- 'submit_hover_color',
589
- [
590
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
591
- 'type' => Controls_Manager::COLOR,
592
- 'selectors' => [
593
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:hover, {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:focus' => 'color: {{VALUE}};',
594
- ],
595
- ]
596
- );
597
-
598
- $this->add_control(
599
- 'submit_hover_bg_color',
600
- [
601
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
602
- 'type' => Controls_Manager::COLOR,
603
- 'selectors' => [
604
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:hover, {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:focus' => 'background-color: {{VALUE}};',
605
- ],
606
- ]
607
- );
608
-
609
- $this->add_control(
610
- 'submit_hover_border_color',
611
- [
612
- 'label' => __( 'Border Color', 'happy-elementor-addons' ),
613
- 'type' => Controls_Manager::COLOR,
614
- 'selectors' => [
615
- '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:hover, {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:focus' => 'border-color: {{VALUE}};',
616
- ],
617
- ]
618
- );
619
-
620
- $this->end_controls_tab();
621
- $this->end_controls_tabs();
622
-
623
- $this->end_controls_section();
624
-
625
- $this->start_controls_section(
626
- 'section_break',
627
- [
628
- 'label' => __( 'Section Break', 'happy-elementor-addons' ),
629
- 'tab' => Controls_Manager::TAB_STYLE,
630
- ]
631
- );
632
-
633
- $this->add_group_control(
634
- Group_Control_Typography::get_type(),
635
- [
636
- 'name' => 'break_title_typography',
637
- 'label' => __( 'Title Typography', 'happy-elementor-addons' ),
638
- 'selector' => '{{WRAPPER}} .section_break .wpuf-section-title',
639
- 'scheme' => Scheme_Typography::TYPOGRAPHY_2
640
- ]
641
- );
642
-
643
- $this->add_group_control(
644
- Group_Control_Typography::get_type(),
645
- [
646
- 'name' => 'break_description_typography',
647
- 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
648
- 'selector' => '{{WRAPPER}} .section_break .wpuf-section-details',
649
- 'scheme' => Scheme_Typography::TYPOGRAPHY_4
650
- ]
651
- );
652
-
653
- $this->start_controls_tabs( 'tabs_section_break_style' );
654
-
655
- $this->start_controls_tab(
656
- 'tab_break_title',
657
- [
658
- 'label' => __( 'Title', 'happy-elementor-addons' ),
659
- ]
660
- );
661
-
662
- $this->add_control(
663
- 'break_title_color',
664
- [
665
- 'label' => __( 'Color', 'happy-elementor-addons' ),
666
- 'type' => Controls_Manager::COLOR,
667
- 'selectors' => [
668
- '{{WRAPPER}} .section_break .wpuf-section-title' => 'color: {{VALUE}};',
669
- ],
670
- ]
671
- );
672
-
673
- $this->end_controls_tab();
674
-
675
- $this->start_controls_tab(
676
- 'tab_break_description',
677
- [
678
- 'label' => __( 'Description', 'happy-elementor-addons' ),
679
- ]
680
- );
681
-
682
- $this->add_control(
683
- 'break_description_color',
684
- [
685
- 'label' => __( 'Color', 'happy-elementor-addons' ),
686
- 'type' => Controls_Manager::COLOR,
687
- 'selectors' => [
688
- '{{WRAPPER}} .section_break .wpuf-section-details' => 'color: {{VALUE}};',
689
- ],
690
- ]
691
- );
692
-
693
- $this->end_controls_tab();
694
- $this->end_controls_tabs();
695
-
696
- $this->end_controls_section();
697
-
698
- }
699
-
700
- protected function render() {
701
- if ( ! ha_is_weforms_activated() ) {
702
- return;
703
- }
704
-
705
- $settings = $this->get_settings_for_display();
706
-
707
- if ( ! empty( $settings['form_id'] ) ) {
708
- echo ha_do_shortcode( 'weforms', [
709
- 'id' => $settings['form_id'],
710
- ] );
711
- }
712
- }
713
- }
1
+ <?php
2
+ /**
3
+ * WeForm widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Controls_Manager;
10
+ use Elementor\Group_Control_Border;
11
+ use Elementor\Group_Control_Box_Shadow;
12
+ use Elementor\Group_Control_Text_Shadow;
13
+ use Elementor\Group_Control_Typography;
14
+ use Elementor\Scheme_Typography;
15
+
16
+ defined( 'ABSPATH' ) || die();
17
+
18
+ class WeForm extends Base {
19
+
20
+ /**
21
+ * Get widget title.
22
+ *
23
+ * @since 1.0.0
24
+ * @access public
25
+ *
26
+ * @return string Widget title.
27
+ */
28
+ public function get_title() {
29
+ return __( 'weForms', 'happy-elementor-addons' );
30
+ }
31
+
32
+ public function get_custom_help_url() {
33
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/weforms/';
34
+ }
35
+
36
+ /**
37
+ * Get widget icon.
38
+ *
39
+ * @since 1.0.0
40
+ * @access public
41
+ *
42
+ * @return string Widget icon.
43
+ */
44
+ public function get_icon() {
45
+ return 'hm hm-form';
46
+ }
47
+
48
+ public function get_keywords() {
49
+ return [ 'weForms', 'we forms', 'caldera', 'wpf','wpform', 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
50
+ }
51
+
52
+ // Whether the reload preview is required or not.
53
+ public function is_reload_preview_required() {
54
+ return true;
55
+ }
56
+
57
+ protected function register_content_controls() {
58
+ $this->start_controls_section(
59
+ '_section_weforms',
60
+ [
61
+ 'label' => ha_is_weforms_activated() ? __( 'weForms', 'happy-elementor-addons' ) : __( 'Missing Notice',
62
+ 'happy-elementor-addons' ),
63
+ 'tab' => Controls_Manager::TAB_CONTENT,
64
+ ]
65
+ );
66
+
67
+ if ( ! ha_is_weforms_activated() ) {
68
+ $this->add_control(
69
+ '_weforms_missing_notice',
70
+ [
71
+ 'type' => Controls_Manager::RAW_HTML,
72
+ 'raw' => sprintf(
73
+ __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
74
+ '<a href="'.esc_url( admin_url( 'plugin-install.php?s=weForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">weForms</a>',
75
+ ha_get_current_user_display_name()
76
+ ),
77
+ 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
78
+ ]
79
+ );
80
+
81
+ $this->add_control(
82
+ '_weforms_install',
83
+ [
84
+ 'type' => Controls_Manager::RAW_HTML,
85
+ 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=weForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate weForms</a>',
86
+ ]
87
+ );
88
+ $this->end_controls_section();
89
+ return;
90
+ }
91
+
92
+ $this->add_control(
93
+ 'form_id',
94
+ [
95
+ 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
96
+ 'type' => Controls_Manager::SELECT,
97
+ 'label_block' => true,
98
+ 'options' => ['' => __( '', 'happy-elementor-addons' ) ] + \ha_get_we_forms(),
99
+ ]
100
+ );
101
+
102
+ $this->end_controls_section();
103
+ }
104
+
105
+ protected function register_style_controls() {
106
+ $this->start_controls_section(
107
+ '_section_fields_style',
108
+ [
109
+ 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
110
+ 'tab' => Controls_Manager::TAB_STYLE,
111
+ ]
112
+ );
113
+
114
+ $this->add_responsive_control(
115
+ 'large_field_width',
116
+ [
117
+ 'label' => __( 'Large Field Width', 'happy-elementor-addons' ),
118
+ 'type' => Controls_Manager::SLIDER,
119
+ 'size_units' => [ 'px', '%' ],
120
+ 'default' => [
121
+ 'unit' => '%',
122
+ 'size' => 99
123
+ ],
124
+ 'range' => [
125
+ '%' => [
126
+ 'min' => 1,
127
+ 'max' => 100,
128
+ ],
129
+ 'px' => [
130
+ 'min' => 1,
131
+ 'max' => 800,
132
+ ],
133
+ ],
134
+ 'selectors' => [
135
+ '{{WRAPPER}} .wpuf-form > li.wpuf-el.field-size-large > .wpuf-fields input:not([type=radio]):not([type=checkbox])' => 'width: {{SIZE}}{{UNIT}};',
136
+ '{{WRAPPER}} .wpuf-form > li.wpuf-el.field-size-large > .wpuf-fields textarea' => 'width: {{SIZE}}{{UNIT}};',
137
+
138
+ ],
139
+ ]
140
+ );
141
+
142
+ $this->add_responsive_control(
143
+ 'field_margin',
144
+ [
145
+ 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
146
+ 'type' => Controls_Manager::DIMENSIONS,
147
+ 'size_units' => [ 'px', '%' ],
148
+ 'selectors' => [
149
+ '{{WRAPPER}} .wpuf-el:not(.wpuf-submit)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
150
+ ],
151
+ ]
152
+ );
153
+
154
+ $this->add_responsive_control(
155
+ 'field_padding',
156
+ [
157
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
158
+ 'type' => Controls_Manager::DIMENSIONS,
159
+ 'size_units' => [ 'px', '%' ],
160
+ 'selectors' => [
161
+ '{{WRAPPER}} .wpuf-fields input:not(.weforms_submit_btn)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}} !important;',
162
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
163
+ ],
164
+ ]
165
+ );
166
+
167
+ $this->add_responsive_control(
168
+ 'field_border_radius',
169
+ [
170
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
171
+ 'type' => Controls_Manager::DIMENSIONS,
172
+ 'size_units' => [ 'px', '%' ],
173
+ 'selectors' => [
174
+ '{{WRAPPER}} .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-fields textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
175
+ ],
176
+ ]
177
+ );
178
+
179
+ $this->add_group_control(
180
+ Group_Control_Typography::get_type(),
181
+ [
182
+ 'name' => 'field_typography',
183
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
184
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
185
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
186
+ ]
187
+ );
188
+
189
+ $this->add_control(
190
+ 'field_textcolor',
191
+ [
192
+ 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
193
+ 'type' => Controls_Manager::COLOR,
194
+ 'selectors' => [
195
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea' => 'color: {{VALUE}};',
196
+ ],
197
+ ]
198
+ );
199
+
200
+ $this->add_control(
201
+ 'field_placeholder_color',
202
+ [
203
+ 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
204
+ 'type' => Controls_Manager::COLOR,
205
+ 'selectors' => [
206
+ '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
207
+ '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
208
+ '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
209
+ ],
210
+ ]
211
+ );
212
+
213
+ $this->start_controls_tabs( 'tabs_field_state' );
214
+
215
+ $this->start_controls_tab(
216
+ 'tab_field_normal',
217
+ [
218
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
219
+ ]
220
+ );
221
+
222
+ $this->add_group_control(
223
+ Group_Control_Border::get_type(),
224
+ [
225
+ 'name' => 'field_border',
226
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
227
+ ]
228
+ );
229
+
230
+ $this->add_group_control(
231
+ Group_Control_Box_Shadow::get_type(),
232
+ [
233
+ 'name' => 'field_box_shadow',
234
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea',
235
+ ]
236
+ );
237
+
238
+ $this->add_control(
239
+ 'field_bg_color',
240
+ [
241
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
242
+ 'type' => Controls_Manager::COLOR,
243
+ 'selectors' => [
244
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea' => 'background-color: {{VALUE}}',
245
+ ],
246
+ ]
247
+ );
248
+
249
+ $this->end_controls_tab();
250
+
251
+ $this->start_controls_tab(
252
+ 'tab_field_focus',
253
+ [
254
+ 'label' => __( 'Focus', 'happy-elementor-addons' ),
255
+ ]
256
+ );
257
+
258
+ $this->add_group_control(
259
+ Group_Control_Border::get_type(),
260
+ [
261
+ 'name' => 'field_focus_border',
262
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:focus:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea:focus',
263
+ ]
264
+ );
265
+
266
+ $this->add_group_control(
267
+ Group_Control_Box_Shadow::get_type(),
268
+ [
269
+ 'name' => 'field_focus_box_shadow',
270
+ 'exclude' => [
271
+ 'box_shadow_position',
272
+ ],
273
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:focus:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea:focus',
274
+ ]
275
+ );
276
+
277
+ $this->add_control(
278
+ 'field_focus_bg_color',
279
+ [
280
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
281
+ 'type' => Controls_Manager::COLOR,
282
+ 'selectors' => [
283
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields input:focus:not(.weforms_submit_btn), {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-fields textarea:focus' => 'background-color: {{VALUE}}',
284
+ ],
285
+ ]
286
+ );
287
+
288
+ $this->end_controls_tab();
289
+ $this->end_controls_tabs();
290
+
291
+ $this->end_controls_section();
292
+
293
+
294
+ $this->start_controls_section(
295
+ 'we-form-label',
296
+ [
297
+ 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
298
+ 'tab' => Controls_Manager::TAB_STYLE,
299
+ ]
300
+ );
301
+
302
+ $this->add_responsive_control(
303
+ 'label_margin',
304
+ [
305
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
306
+ 'type' => Controls_Manager::DIMENSIONS,
307
+ 'size_units' => [ 'px', '%' ],
308
+ 'selectors' => [
309
+ '{{WRAPPER}} .wpuf-label label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
310
+ ],
311
+ ]
312
+ );
313
+
314
+ $this->add_responsive_control(
315
+ 'label_padding',
316
+ [
317
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
318
+ 'type' => Controls_Manager::DIMENSIONS,
319
+ 'size_units' => [ 'px', 'em', '%' ],
320
+ 'selectors' => [
321
+ '{{WRAPPER}} .wpuf-label label' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
322
+ ],
323
+ ]
324
+ );
325
+
326
+ $this->add_control(
327
+ 'hr3',
328
+ [
329
+ 'type' => Controls_Manager::DIVIDER,
330
+ 'style' => 'thick',
331
+ ]
332
+ );
333
+
334
+ $this->add_group_control(
335
+ Group_Control_Typography::get_type(),
336
+ [
337
+ 'name' => 'label_typography',
338
+ 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
339
+ 'selector' => '{{WRAPPER}} .wpuf-label label, {{WRAPPER}} .wpuf-form-sub-label',
340
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
341
+ ]
342
+ );
343
+
344
+ $this->add_group_control(
345
+ Group_Control_Typography::get_type(),
346
+ [
347
+ 'name' => 'desc_typography',
348
+ 'label' => __( 'Help Text Typography', 'happy-elementor-addons' ),
349
+ 'selector' => '{{WRAPPER}} .wpuf-fields .wpuf-help',
350
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
351
+ ]
352
+ );
353
+
354
+ $this->add_control(
355
+ 'label_color',
356
+ [
357
+ 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
358
+ 'type' => Controls_Manager::COLOR,
359
+ 'selectors' => [
360
+ '{{WRAPPER}} .wpuf-label label, {{WRAPPER}} .wpuf-form-sub-label' => 'color: {{VALUE}}',
361
+ ],
362
+ ]
363
+ );
364
+
365
+ $this->add_control(
366
+ 'requered_label',
367
+ [
368
+ 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
369
+ 'type' => Controls_Manager::COLOR,
370
+ 'selectors' => [
371
+ '{{WRAPPER}} .wpuf-label .required' => 'color: {{VALUE}} !important',
372
+ ],
373
+ ]
374
+ );
375
+
376
+ $this->add_control(
377
+ 'desc_color',
378
+ [
379
+ 'label' => __( 'Help Text Color', 'happy-elementor-addons' ),
380
+ 'type' => Controls_Manager::COLOR,
381
+ 'selectors' => [
382
+ '{{WRAPPER}} .wpuf-fields .wpuf-help' => 'color: {{VALUE}}',
383
+ ],
384
+ ]
385
+ );
386
+
387
+ $this->end_controls_section();
388
+
389
+ $this->start_controls_section(
390
+ 'submit',
391
+ [
392
+ 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
393
+ 'tab' => Controls_Manager::TAB_STYLE,
394
+ ]
395
+ );
396
+
397
+ $this->add_control(
398
+ 'submit_btn_width',
399
+ [
400
+ 'label' => __( 'Button Full Width?', 'happy-elementor-addons' ),
401
+ 'type' => Controls_Manager::SWITCHER,
402
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
403
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
404
+ 'return_value' => 'yes',
405
+ 'default' => 'yes',
406
+ ]
407
+ );
408
+
409
+ $this->add_responsive_control(
410
+ 'button_width',
411
+ [
412
+ 'label' => __( 'Button Width', 'happy-elementor-addons' ),
413
+ 'type' => Controls_Manager::SLIDER,
414
+ 'size_units' => [ 'px', '%' ],
415
+ 'condition' => [
416
+ 'submit_btn_width' => 'yes'
417
+ ],
418
+ 'default' => [
419
+ 'unit' => '%',
420
+ 'size' => 100
421
+ ],
422
+ 'range' => [
423
+ '%' => [
424
+ 'min' => 1,
425
+ 'max' => 100,
426
+ ],
427
+ 'px' => [
428
+ 'min' => 1,
429
+ 'max' => 800,
430
+ ],
431
+ ],
432
+ 'selectors' => [
433
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit .weforms_submit_btn' => 'display: block; width: {{SIZE}}{{UNIT}};',
434
+ ],
435
+ ]
436
+ );
437
+
438
+ $this->add_responsive_control(
439
+ 'submit_btn_position',
440
+ [
441
+ 'label' => __( 'Button Position', 'happy-elementor-addons' ),
442
+ 'type' => Controls_Manager::CHOOSE,
443
+ 'options' => [
444
+ 'left' => [
445
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
446
+ 'icon' => 'eicon-h-align-left',
447
+ ],
448
+ 'center' => [
449
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
450
+ 'icon' => 'eicon-h-align-center',
451
+ ],
452
+ 'right' => [
453
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
454
+ 'icon' => 'eicon-h-align-right',
455
+ ],
456
+ ],
457
+ 'condition' => [
458
+ 'submit_btn_width' => ''
459
+ ],
460
+ 'desktop_default' => 'left',
461
+ 'toggle' => false,
462
+ 'prefix_class' => 'ha-form-btn--%s',
463
+ 'selectors' => [
464
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit' => 'text-align: {{Value}};',
465
+ ],
466
+ ]
467
+ );
468
+
469
+ $this->add_responsive_control(
470
+ 'submit_margin',
471
+ [
472
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
473
+ 'type' => Controls_Manager::DIMENSIONS,
474
+ 'size_units' => [ 'px', '%' ],
475
+ 'selectors' => [
476
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
477
+ ],
478
+ ]
479
+ );
480
+
481
+ $this->add_responsive_control(
482
+ 'submit_padding',
483
+ [
484
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
485
+ 'type' => Controls_Manager::DIMENSIONS,
486
+ 'size_units' => [ 'px', 'em', '%' ],
487
+ 'selectors' => [
488
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
489
+ ],
490
+ ]
491
+ );
492
+
493
+ $this->add_group_control(
494
+ Group_Control_Typography::get_type(),
495
+ [
496
+ 'name' => 'submit_typography',
497
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
498
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
499
+ ]
500
+ );
501
+
502
+ $this->add_group_control(
503
+ Group_Control_Border::get_type(),
504
+ [
505
+ 'name' => 'submit_border',
506
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
507
+ ]
508
+ );
509
+
510
+ $this->add_control(
511
+ 'submit_border_radius',
512
+ [
513
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
514
+ 'type' => Controls_Manager::DIMENSIONS,
515
+ 'size_units' => [ 'px', '%' ],
516
+ 'selectors' => [
517
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
518
+ ],
519
+ ]
520
+ );
521
+
522
+ $this->add_group_control(
523
+ Group_Control_Box_Shadow::get_type(),
524
+ [
525
+ 'name' => 'submit_box_shadow',
526
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
527
+ ]
528
+ );
529
+
530
+ $this->add_group_control(
531
+ Group_Control_Text_Shadow::get_type(),
532
+ [
533
+ 'name' => 'submit_text_shadow',
534
+ 'selector' => '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]',
535
+ ]
536
+ );
537
+
538
+ $this->add_control(
539
+ 'hr4',
540
+ [
541
+ 'type' => Controls_Manager::DIVIDER,
542
+ 'style' => 'thick',
543
+ ]
544
+ );
545
+
546
+ $this->start_controls_tabs( 'tabs_button_style' );
547
+
548
+ $this->start_controls_tab(
549
+ 'tab_button_normal',
550
+ [
551
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
552
+ ]
553
+ );
554
+
555
+ $this->add_control(
556
+ 'submit_color',
557
+ [
558
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
559
+ 'type' => Controls_Manager::COLOR,
560
+ 'default' => '',
561
+ 'selectors' => [
562
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'color: {{VALUE}};',
563
+ ],
564
+ ]
565
+ );
566
+
567
+ $this->add_control(
568
+ 'submit_bg_color',
569
+ [
570
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
571
+ 'type' => Controls_Manager::COLOR,
572
+ 'selectors' => [
573
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]' => 'background-color: {{VALUE}};',
574
+ ],
575
+ ]
576
+ );
577
+
578
+ $this->end_controls_tab();
579
+
580
+ $this->start_controls_tab(
581
+ 'tab_button_hover',
582
+ [
583
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
584
+ ]
585
+ );
586
+
587
+ $this->add_control(
588
+ 'submit_hover_color',
589
+ [
590
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
591
+ 'type' => Controls_Manager::COLOR,
592
+ 'selectors' => [
593
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:hover, {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:focus' => 'color: {{VALUE}};',
594
+ ],
595
+ ]
596
+ );
597
+
598
+ $this->add_control(
599
+ 'submit_hover_bg_color',
600
+ [
601
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
602
+ 'type' => Controls_Manager::COLOR,
603
+ 'selectors' => [
604
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:hover, {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:focus' => 'background-color: {{VALUE}};',
605
+ ],
606
+ ]
607
+ );
608
+
609
+ $this->add_control(
610
+ 'submit_hover_border_color',
611
+ [
612
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
613
+ 'type' => Controls_Manager::COLOR,
614
+ 'selectors' => [
615
+ '{{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:hover, {{WRAPPER}} .wpuf-form-add.wpuf-style ul.wpuf-form .wpuf-submit input[type=submit]:focus' => 'border-color: {{VALUE}};',
616
+ ],
617
+ ]
618
+ );
619
+
620
+ $this->end_controls_tab();
621
+ $this->end_controls_tabs();
622
+
623
+ $this->end_controls_section();
624
+
625
+ $this->start_controls_section(
626
+ 'section_break',
627
+ [
628
+ 'label' => __( 'Section Break', 'happy-elementor-addons' ),
629
+ 'tab' => Controls_Manager::TAB_STYLE,
630
+ ]
631
+ );
632
+
633
+ $this->add_group_control(
634
+ Group_Control_Typography::get_type(),
635
+ [
636
+ 'name' => 'break_title_typography',
637
+ 'label' => __( 'Title Typography', 'happy-elementor-addons' ),
638
+ 'selector' => '{{WRAPPER}} .section_break .wpuf-section-title',
639
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_2
640
+ ]
641
+ );
642
+
643
+ $this->add_group_control(
644
+ Group_Control_Typography::get_type(),
645
+ [
646
+ 'name' => 'break_description_typography',
647
+ 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
648
+ 'selector' => '{{WRAPPER}} .section_break .wpuf-section-details',
649
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
650
+ ]
651
+ );
652
+
653
+ $this->start_controls_tabs( 'tabs_section_break_style' );
654
+
655
+ $this->start_controls_tab(
656
+ 'tab_break_title',
657
+ [
658
+ 'label' => __( 'Title', 'happy-elementor-addons' ),
659
+ ]
660
+ );
661
+
662
+ $this->add_control(
663
+ 'break_title_color',
664
+ [
665
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
666
+ 'type' => Controls_Manager::COLOR,
667
+ 'selectors' => [
668
+ '{{WRAPPER}} .section_break .wpuf-section-title' => 'color: {{VALUE}};',
669
+ ],
670
+ ]
671
+ );
672
+
673
+ $this->end_controls_tab();
674
+
675
+ $this->start_controls_tab(
676
+ 'tab_break_description',
677
+ [
678
+ 'label' => __( 'Description', 'happy-elementor-addons' ),
679
+ ]
680
+ );
681
+
682
+ $this->add_control(
683
+ 'break_description_color',
684
+ [
685
+ 'label' => __( 'Color', 'happy-elementor-addons' ),
686
+ 'type' => Controls_Manager::COLOR,
687
+ 'selectors' => [
688
+ '{{WRAPPER}} .section_break .wpuf-section-details' => 'color: {{VALUE}};',
689
+ ],
690
+ ]
691
+ );
692
+
693
+ $this->end_controls_tab();
694
+ $this->end_controls_tabs();
695
+
696
+ $this->end_controls_section();
697
+
698
+ }
699
+
700
+ protected function render() {
701
+ if ( ! ha_is_weforms_activated() ) {
702
+ return;
703
+ }
704
+
705
+ $settings = $this->get_settings_for_display();
706
+
707
+ if ( ! empty( $settings['form_id'] ) ) {
708
+ echo ha_do_shortcode( 'weforms', [
709
+ 'id' => $settings['form_id'],
710
+ ] );
711
+ }
712
+ }
713
+ }
widgets/wpform/widget.php CHANGED
@@ -1,646 +1,646 @@
1
- <?php
2
- /**
3
- * WPForm widget class
4
- *
5
- * @package Happy_Addons
6
- */
7
- namespace Happy_Addons\Elementor\Widget;
8
-
9
- use Elementor\Controls_Manager;
10
- use Elementor\Group_Control_Border;
11
- use Elementor\Group_Control_Box_Shadow;
12
- use Elementor\Group_Control_Typography;
13
- use Elementor\Scheme_Typography;
14
-
15
- defined( 'ABSPATH' ) || die();
16
-
17
- class WPForm 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 __( 'WPForms', 'happy-elementor-addons' );
29
- }
30
-
31
- public function get_custom_help_url() {
32
- return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/wp-forms/';
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-form';
45
- }
46
-
47
- public function get_keywords() {
48
- return [ 'wpf', 'wpform', 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
49
- }
50
-
51
- protected function register_content_controls() {
52
- $this->start_controls_section(
53
- '_section_wpforms',
54
- [
55
- 'label' => ha_is_wpforms_activated() ? __( 'WPForms', 'happy-elementor-addons' ) : __( 'Missing Notice',
56
- 'happy-elementor-addons' ),
57
- 'tab' => Controls_Manager::TAB_CONTENT,
58
- ]
59
- );
60
-
61
- if ( ! ha_is_wpforms_activated() ) {
62
- $this->add_control(
63
- '_wpforms_missing_notice',
64
- [
65
- 'type' => Controls_Manager::RAW_HTML,
66
- 'raw' => sprintf(
67
- __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
68
- '<a href="'.esc_url( admin_url( 'plugin-install.php?s=WPForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">WPForms</a>',
69
- ha_get_current_user_display_name()
70
- ),
71
- 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
72
- ]
73
- );
74
-
75
- $this->add_control(
76
- '_wpforms_install',
77
- [
78
- 'type' => Controls_Manager::RAW_HTML,
79
- 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=WPForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate WPForms</a>',
80
- ]
81
- );
82
- $this->end_controls_section();
83
- return;
84
- }
85
-
86
- $this->add_control(
87
- 'form_id',
88
- [
89
- 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
90
- 'type' => Controls_Manager::SELECT,
91
- 'label_block' => true,
92
- 'options' => ['' => __( 'Select a WPForm', 'happy-elementor-addons' ) ] + \ha_get_wpforms(),
93
- ]
94
- );
95
-
96
- $this->end_controls_section();
97
- }
98
-
99
- protected function register_style_controls() {
100
- $this->start_controls_section(
101
- '_section_fields_style',
102
- [
103
- 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
104
- 'tab' => Controls_Manager::TAB_STYLE,
105
- ]
106
- );
107
-
108
- $this->add_responsive_control(
109
- 'field_margin',
110
- [
111
- 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
112
- 'type' => Controls_Manager::DIMENSIONS,
113
- 'size_units' => [ 'px', '%' ],
114
- 'selectors' => [
115
- '{{WRAPPER}} .wpforms-field:not(.wpforms-submit), .wpforms-field-required:not(.wpforms-submit)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
116
- ],
117
- ]
118
- );
119
-
120
- $this->add_responsive_control(
121
- 'field_padding',
122
- [
123
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
124
- 'type' => Controls_Manager::DIMENSIONS,
125
- 'size_units' => [ 'px', 'em', '%' ],
126
- 'selectors' => [
127
- '{{WRAPPER}} .wpforms-field input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
128
- '{{WRAPPER}} .wpforms-field textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
129
- ],
130
- ]
131
- );
132
-
133
- $this->add_responsive_control(
134
- 'field_border_radius',
135
- [
136
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
137
- 'type' => Controls_Manager::DIMENSIONS,
138
- 'size_units' => [ 'px', '%' ],
139
- 'selectors' => [
140
- '{{WRAPPER}} .wpforms-field input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
141
- '{{WRAPPER}} .wpforms-field textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
142
- ],
143
- ]
144
- );
145
-
146
- $this->add_group_control(
147
- Group_Control_Typography::get_type(),
148
- [
149
- 'name' => 'field_typography',
150
- 'label' => __( 'Typography', 'happy-elementor-addons' ),
151
- 'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
152
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
153
- ]
154
- );
155
-
156
- $this->add_control(
157
- 'field_textcolor',
158
- [
159
- 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
160
- 'type' => Controls_Manager::COLOR,
161
- 'selectors' => [
162
- '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea' => 'color: {{VALUE}}',
163
- ],
164
- ]
165
- );
166
-
167
- $this->add_control(
168
- 'field_placeholder_color',
169
- [
170
- 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
171
- 'type' => Controls_Manager::COLOR,
172
- 'selectors' => [
173
- '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
174
- '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
175
- '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
176
- ],
177
- ]
178
- );
179
-
180
- $this->start_controls_tabs( 'tabs_field_state' );
181
-
182
- $this->start_controls_tab(
183
- 'tab_field_normal',
184
- [
185
- 'label' => __( 'Normal State', 'happy-elementor-addons' ),
186
- ]
187
- );
188
-
189
- $this->add_group_control(
190
- Group_Control_Border::get_type(),
191
- [
192
- 'name' => 'field_border',
193
- 'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
194
- ]
195
- );
196
-
197
- $this->add_group_control(
198
- Group_Control_Box_Shadow::get_type(),
199
- [
200
- 'name' => 'field_box_shadow',
201
- 'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
202
- ]
203
- );
204
-
205
- $this->add_control(
206
- 'field_bg_color',
207
- [
208
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
209
- 'type' => Controls_Manager::COLOR,
210
- 'selectors' => [
211
- '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea' => 'background-color: {{VALUE}}',
212
- ],
213
- ]
214
- );
215
-
216
- $this->end_controls_tab();
217
-
218
- $this->start_controls_tab(
219
- 'tab_field_focus',
220
- [
221
- 'label' => __( 'Focus', 'happy-elementor-addons' ),
222
- ]
223
- );
224
-
225
- $this->add_group_control(
226
- Group_Control_Border::get_type(),
227
- [
228
- 'name' => 'field_focus_border',
229
- 'selector' => '{{WRAPPER}} .wpforms-field input:focus, {{WRAPPER}} .wpforms-field-textarea textarea:focus',
230
- ]
231
- );
232
-
233
- $this->add_group_control(
234
- Group_Control_Box_Shadow::get_type(),
235
- [
236
- 'name' => 'field_focus_box_shadow',
237
- 'exclude' => [
238
- 'box_shadow_position',
239
- ],
240
- 'selector' => '{{WRAPPER}} .wpforms-field input:focus, {{WRAPPER}} .wpforms-field-textarea textarea:focus',
241
- ]
242
- );
243
-
244
- $this->add_control(
245
- 'field_focus_bg_color',
246
- [
247
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
248
- 'type' => Controls_Manager::COLOR,
249
- 'selectors' => [
250
- '{{WRAPPER}} .wpforms-field input:focus, {{WRAPPER}} .wpforms-field-textarea textarea:focus' => 'background-color: {{VALUE}}',
251
- ],
252
- ]
253
- );
254
-
255
- $this->end_controls_tab();
256
- $this->end_controls_tabs();
257
-
258
- $this->end_controls_section();
259
-
260
- $this->start_controls_section(
261
- 'wpf-form-label',
262
- [
263
- 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
264
- 'tab' => Controls_Manager::TAB_STYLE,
265
- ]
266
- );
267
-
268
- $this->add_responsive_control(
269
- 'label_margin',
270
- [
271
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
272
- 'type' => Controls_Manager::DIMENSIONS,
273
- 'size_units' => [ 'px', '%' ],
274
- 'selectors' => [
275
- '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
276
- ],
277
- ]
278
- );
279
-
280
- $this->add_responsive_control(
281
- 'label_padding',
282
- [
283
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
284
- 'type' => Controls_Manager::DIMENSIONS,
285
- 'size_units' => [ 'px', 'em', '%' ],
286
- 'selectors' => [
287
- '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
288
- ],
289
- ]
290
- );
291
-
292
- $this->add_control(
293
- 'hr3',
294
- [
295
- 'type' => Controls_Manager::DIVIDER,
296
- 'style' => 'thick',
297
- ]
298
- );
299
-
300
- $this->add_group_control(
301
- Group_Control_Typography::get_type(),
302
- [
303
- 'name' => 'label_typography',
304
- 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
305
- 'selector' => '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label',
306
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
307
- ]
308
- );
309
-
310
- $this->add_group_control(
311
- Group_Control_Typography::get_type(),
312
- [
313
- 'name' => 'sublabel_typography',
314
- 'label' => __( 'Sub Label Typography', 'happy-elementor-addons' ),
315
- 'selector' => '{{WRAPPER}} .wpforms-field-sublabel',
316
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
317
- ]
318
- );
319
-
320
- $this->add_group_control(
321
- Group_Control_Typography::get_type(),
322
- [
323
- 'name' => 'desc_typography',
324
- 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
325
- 'selector' => '{{WRAPPER}} .wpforms-field-description',
326
- 'scheme' => Scheme_Typography::TYPOGRAPHY_3
327
- ]
328
- );
329
-
330
- $this->add_control(
331
- 'label_color_popover',
332
- [
333
- 'label' => __( 'Colors', 'happy-elementor-addons' ),
334
- 'type' => Controls_Manager::POPOVER_TOGGLE,
335
- 'label_off' => __( '', 'happy-elementor-addons' ),
336
- 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
337
- 'return_value' => 'yes',
338
- ]
339
- );
340
-
341
- $this->start_popover();
342
-
343
- $this->add_control(
344
- 'label_color',
345
- [
346
- 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
347
- 'type' => Controls_Manager::COLOR,
348
- 'selectors' => [
349
- '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label' => 'color: {{VALUE}}',
350
- ],
351
- 'condition' => [
352
- 'label_color_popover' => 'yes'
353
- ],
354
- ]
355
- );
356
-
357
- $this->add_control(
358
- 'requered_label',
359
- [
360
- 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
361
- 'type' => Controls_Manager::COLOR,
362
- 'selectors' => [
363
- '{{WRAPPER}} .wpforms-required-label' => 'color: {{VALUE}}',
364
- ],
365
- 'condition' => [
366
- 'label_color_popover' => 'yes'
367
- ],
368
- ]
369
- );
370
-
371
- $this->add_control(
372
- 'sublabel_color',
373
- [
374
- 'label' => __( 'Sub Label Text Color', 'happy-elementor-addons' ),
375
- 'type' => Controls_Manager::COLOR,
376
- 'selectors' => [
377
- '{{WRAPPER}} .wpforms-field-sublabel' => 'color: {{VALUE}}',
378
- ],
379
- 'condition' => [
380
- 'label_color_popover' => 'yes'
381
- ],
382
- ]
383
- );
384
-
385
- $this->add_control(
386
- 'desc_label_color',
387
- [
388
- 'label' => __( 'Description Text Color', 'happy-elementor-addons' ),
389
- 'type' => Controls_Manager::COLOR,
390
- 'selectors' => [
391
- '{{WRAPPER}} .wpforms-field-description' => 'color: {{VALUE}}',
392
- ],
393
- 'condition' => [
394
- 'label_color_popover' => 'yes'
395
- ],
396
- ]
397
- );
398
-
399
- $this->end_popover();
400
-
401
- $this->end_controls_section();
402
-
403
- $this->start_controls_section(
404
- 'submit',
405
- [
406
- 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
407
- 'tab' => Controls_Manager::TAB_STYLE,
408
- ]
409
- );
410
-
411
- $this->add_control(
412
- 'submit_btn_width',
413
- [
414
- 'label' => __( 'Button Full Width?', 'happy-elementor-addons' ),
415
- 'type' => Controls_Manager::SWITCHER,
416
- 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
417
- 'label_off' => __( 'No', 'happy-elementor-addons' ),
418
- 'return_value' => 'yes',
419
- 'default' => 'yes',
420
- ]
421
- );
422
-
423
- $this->add_responsive_control(
424
- 'button_width',
425
- [
426
- 'label' => __( 'Button Width', 'happy-elementor-addons' ),
427
- 'type' => Controls_Manager::SLIDER,
428
- 'size_units' => [ 'px', '%' ],
429
- 'condition' => [
430
- 'submit_btn_width' => 'yes'
431
- ],
432
- 'default' => [
433
- 'unit' => '%',
434
- 'size' => 100
435
- ],
436
- 'range' => [
437
- '%' => [
438
- 'min' => 1,
439
- 'max' => 100,
440
- ],
441
- 'px' => [
442
- 'min' => 1,
443
- 'max' => 800,
444
- ],
445
- ],
446
- 'selectors' => [
447
- '{{WRAPPER}} .wpforms-submit' => 'display: block; width: {{SIZE}}{{UNIT}};',
448
- ],
449
- ]
450
- );
451
-
452
- $this->add_responsive_control(
453
- 'submit_btn_position',
454
- [
455
- 'label' => __( 'Button Position', 'happy-elementor-addons' ),
456
- 'type' => Controls_Manager::CHOOSE,
457
- 'options' => [
458
- 'left' => [
459
- 'title' => __( 'Left', 'happy-elementor-addons' ),
460
- 'icon' => 'eicon-h-align-left',
461
- ],
462
- 'center' => [
463
- 'title' => __( 'Center', 'happy-elementor-addons' ),
464
- 'icon' => 'eicon-h-align-center',
465
- ],
466
- 'right' => [
467
- 'title' => __( 'Right', 'happy-elementor-addons' ),
468
- 'icon' => 'eicon-h-align-right',
469
- ],
470
- ],
471
- 'condition' => [
472
- 'submit_btn_width' => '',
473
-
474
- ],
475
- 'desktop_default' => 'left',
476
- 'toggle' => false,
477
- 'prefix_class' => 'ha-form-btn--%s',
478
- 'selectors' => [
479
- '{{WRAPPER}} .wpforms-submit-container' => 'text-align: {{Value}};',
480
- ],
481
- ]
482
- );
483
-
484
- $this->add_responsive_control(
485
- 'submit_margin',
486
- [
487
- 'label' => __( 'Margin', 'happy-elementor-addons' ),
488
- 'type' => Controls_Manager::DIMENSIONS,
489
- 'size_units' => [ 'px', '%' ],
490
- 'selectors' => [
491
- '{{WRAPPER}} .wpforms-submit' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
492
- ],
493
- ]
494
- );
495
-
496
- $this->add_responsive_control(
497
- 'submit_padding',
498
- [
499
- 'label' => __( 'Padding', 'happy-elementor-addons' ),
500
- 'type' => Controls_Manager::DIMENSIONS,
501
- 'size_units' => [ 'px', 'em', '%' ],
502
- 'selectors' => [
503
- '{{WRAPPER}} .wpforms-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
504
- ],
505
- ]
506
- );
507
-
508
- $this->add_group_control(
509
- Group_Control_Typography::get_type(),
510
- [
511
- 'name' => 'submit_typography',
512
- 'selector' => '{{WRAPPER}} .wpforms-submit',
513
- 'scheme' => Scheme_Typography::TYPOGRAPHY_4
514
- ]
515
- );
516
-
517
- $this->add_group_control(
518
- Group_Control_Border::get_type(),
519
- [
520
- 'name' => 'submit_border',
521
- 'selector' => '{{WRAPPER}} .wpforms-form .wpforms-submit-container button[type=submit]',
522
- ]
523
- );
524
-
525
- $this->add_control(
526
- 'submit_border_radius',
527
- [
528
- 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
529
- 'type' => Controls_Manager::DIMENSIONS,
530
- 'size_units' => [ 'px', '%' ],
531
- 'selectors' => [
532
- '{{WRAPPER}} .wpforms-submit' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
533
- ],
534
- ]
535
- );
536
-
537
- $this->add_group_control(
538
- Group_Control_Box_Shadow::get_type(),
539
- [
540
- 'name' => 'submit_box_shadow',
541
- 'selector' => '{{WRAPPER}} .wpforms-submit',
542
- ]
543
- );
544
-
545
- $this->add_control(
546
- 'hr4',
547
- [
548
- 'type' => Controls_Manager::DIVIDER,
549
- 'style' => 'thick',
550
- ]
551
- );
552
-
553
- $this->start_controls_tabs( 'tabs_button_style' );
554
-
555
- $this->start_controls_tab(
556
- 'tab_button_normal',
557
- [
558
- 'label' => __( 'Normal', 'happy-elementor-addons' ),
559
- ]
560
- );
561
-
562
- $this->add_control(
563
- 'submit_color',
564
- [
565
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
566
- 'type' => Controls_Manager::COLOR,
567
- 'default' => '',
568
- 'selectors' => [
569
- '{{WRAPPER}} .wpforms-submit' => 'color: {{VALUE}};',
570
- ],
571
- ]
572
- );
573
-
574
- $this->add_control(
575
- 'submit_bg_color',
576
- [
577
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
578
- 'type' => Controls_Manager::COLOR,
579
- 'selectors' => [
580
- '{{WRAPPER}} .wpforms-submit' => 'background-color: {{VALUE}};',
581
- ],
582
- ]
583
- );
584
-
585
- $this->end_controls_tab();
586
-
587
- $this->start_controls_tab(
588
- 'tab_button_hover',
589
- [
590
- 'label' => __( 'Hover', 'happy-elementor-addons' ),
591
- ]
592
- );
593
-
594
- $this->add_control(
595
- 'submit_hover_color',
596
- [
597
- 'label' => __( 'Text Color', 'happy-elementor-addons' ),
598
- 'type' => Controls_Manager::COLOR,
599
- 'selectors' => [
600
- '{{WRAPPER}} .wpforms-submit:hover, {{WRAPPER}} .wpforms-submit:focus' => 'color: {{VALUE}};',
601
- ],
602
- ]
603
- );
604
-
605
- $this->add_control(
606
- 'submit_hover_bg_color',
607
- [
608
- 'label' => __( 'Background Color', 'happy-elementor-addons' ),
609
- 'type' => Controls_Manager::COLOR,
610
- 'selectors' => [
611
- '{{WRAPPER}} .wpforms-submit:hover, {{WRAPPER}} .wpforms-submit:focus' => 'background-color: {{VALUE}};',
612
- ],
613
- ]
614
- );
615
-
616
- $this->add_control(
617
- 'submit_hover_border_color',
618
- [
619
- 'label' => __( 'Border Color', 'happy-elementor-addons' ),
620
- 'type' => Controls_Manager::COLOR,
621
- 'selectors' => [
622
- '{{WRAPPER}} .wpforms-submit:hover, {{WRAPPER}} .wpforms-submit:focus' => 'border-color: {{VALUE}};',
623
- ],
624
- ]
625
- );
626
-
627
- $this->end_controls_tab();
628
- $this->end_controls_tabs();
629
-
630
- $this->end_controls_section();
631
- }
632
-
633
- protected function render() {
634
- if ( ! ha_is_wpforms_activated() ) {
635
- return;
636
- }
637
-
638
- $settings = $this->get_settings_for_display();
639
-
640
- if ( ! empty( $settings['form_id'] ) ) {
641
- echo ha_do_shortcode( 'wpforms', [
642
- 'id' => $settings['form_id'],
643
- ] );
644
- }
645
- }
646
- }
1
+ <?php
2
+ /**
3
+ * WPForm widget class
4
+ *
5
+ * @package Happy_Addons
6
+ */
7
+ namespace Happy_Addons\Elementor\Widget;
8
+
9
+ use Elementor\Controls_Manager;
10
+ use Elementor\Group_Control_Border;
11
+ use Elementor\Group_Control_Box_Shadow;
12
+ use Elementor\Group_Control_Typography;
13
+ use Elementor\Scheme_Typography;
14
+
15
+ defined( 'ABSPATH' ) || die();
16
+
17
+ class WPForm 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 __( 'WPForms', 'happy-elementor-addons' );
29
+ }
30
+
31
+ public function get_custom_help_url() {
32
+ return 'https://happyaddons.com/docs/happy-addons-for-elementor/widgets/wp-forms/';
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-form';
45
+ }
46
+
47
+ public function get_keywords() {
48
+ return [ 'wpf', 'wpform', 'form', 'contact', 'cf7', 'contact form', 'gravity', 'ninja' ];
49
+ }
50
+
51
+ protected function register_content_controls() {
52
+ $this->start_controls_section(
53
+ '_section_wpforms',
54
+ [
55
+ 'label' => ha_is_wpforms_activated() ? __( 'WPForms', 'happy-elementor-addons' ) : __( 'Missing Notice',
56
+ 'happy-elementor-addons' ),
57
+ 'tab' => Controls_Manager::TAB_CONTENT,
58
+ ]
59
+ );
60
+
61
+ if ( ! ha_is_wpforms_activated() ) {
62
+ $this->add_control(
63
+ '_wpforms_missing_notice',
64
+ [
65
+ 'type' => Controls_Manager::RAW_HTML,
66
+ 'raw' => sprintf(
67
+ __( 'Hello %2$s, looks like %1$s is missing in your site. Please click on the link below and install/activate %1$s. Make sure to refresh this page after installation or activation.', 'happy-elementor-addons' ),
68
+ '<a href="'.esc_url( admin_url( 'plugin-install.php?s=WPForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">WPForms</a>',
69
+ ha_get_current_user_display_name()
70
+ ),
71
+ 'content_classes' => 'elementor-panel-alert elementor-panel-alert-danger',
72
+ ]
73
+ );
74
+
75
+ $this->add_control(
76
+ '_wpforms_install',
77
+ [
78
+ 'type' => Controls_Manager::RAW_HTML,
79
+ 'raw' => '<a href="'.esc_url( admin_url( 'plugin-install.php?s=WPForms&tab=search&type=term' ) ).'" target="_blank" rel="noopener">Click to install or activate WPForms</a>',
80
+ ]
81
+ );
82
+ $this->end_controls_section();
83
+ return;
84
+ }
85
+
86
+ $this->add_control(
87
+ 'form_id',
88
+ [
89
+ 'label' => __( 'Select Your Form', 'happy-elementor-addons' ),
90
+ 'type' => Controls_Manager::SELECT,
91
+ 'label_block' => true,
92
+ 'options' => ['' => __( 'Select a WPForm', 'happy-elementor-addons' ) ] + \ha_get_wpforms(),
93
+ ]
94
+ );
95
+
96
+ $this->end_controls_section();
97
+ }
98
+
99
+ protected function register_style_controls() {
100
+ $this->start_controls_section(
101
+ '_section_fields_style',
102
+ [
103
+ 'label' => __( 'Form Fields', 'happy-elementor-addons' ),
104
+ 'tab' => Controls_Manager::TAB_STYLE,
105
+ ]
106
+ );
107
+
108
+ $this->add_responsive_control(
109
+ 'field_margin',
110
+ [
111
+ 'label' => __( 'Field Spacing', 'happy-elementor-addons' ),
112
+ 'type' => Controls_Manager::DIMENSIONS,
113
+ 'size_units' => [ 'px', '%' ],
114
+ 'selectors' => [
115
+ '{{WRAPPER}} .wpforms-field:not(.wpforms-submit), .wpforms-field-required:not(.wpforms-submit)' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
116
+ ],
117
+ ]
118
+ );
119
+
120
+ $this->add_responsive_control(
121
+ 'field_padding',
122
+ [
123
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
124
+ 'type' => Controls_Manager::DIMENSIONS,
125
+ 'size_units' => [ 'px', 'em', '%' ],
126
+ 'selectors' => [
127
+ '{{WRAPPER}} .wpforms-field input' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
128
+ '{{WRAPPER}} .wpforms-field textarea' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
129
+ ],
130
+ ]
131
+ );
132
+
133
+ $this->add_responsive_control(
134
+ 'field_border_radius',
135
+ [
136
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
137
+ 'type' => Controls_Manager::DIMENSIONS,
138
+ 'size_units' => [ 'px', '%' ],
139
+ 'selectors' => [
140
+ '{{WRAPPER}} .wpforms-field input' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
141
+ '{{WRAPPER}} .wpforms-field textarea' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
142
+ ],
143
+ ]
144
+ );
145
+
146
+ $this->add_group_control(
147
+ Group_Control_Typography::get_type(),
148
+ [
149
+ 'name' => 'field_typography',
150
+ 'label' => __( 'Typography', 'happy-elementor-addons' ),
151
+ 'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
152
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
153
+ ]
154
+ );
155
+
156
+ $this->add_control(
157
+ 'field_textcolor',
158
+ [
159
+ 'label' => __( 'Field Text Color', 'happy-elementor-addons' ),
160
+ 'type' => Controls_Manager::COLOR,
161
+ 'selectors' => [
162
+ '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea' => 'color: {{VALUE}}',
163
+ ],
164
+ ]
165
+ );
166
+
167
+ $this->add_control(
168
+ 'field_placeholder_color',
169
+ [
170
+ 'label' => __( 'Field Placeholder Color', 'happy-elementor-addons' ),
171
+ 'type' => Controls_Manager::COLOR,
172
+ 'selectors' => [
173
+ '{{WRAPPER}} ::-webkit-input-placeholder' => 'color: {{VALUE}};',
174
+ '{{WRAPPER}} ::-moz-placeholder' => 'color: {{VALUE}};',
175
+ '{{WRAPPER}} ::-ms-input-placeholder' => 'color: {{VALUE}};',
176
+ ],
177
+ ]
178
+ );
179
+
180
+ $this->start_controls_tabs( 'tabs_field_state' );
181
+
182
+ $this->start_controls_tab(
183
+ 'tab_field_normal',
184
+ [
185
+ 'label' => __( 'Normal State', 'happy-elementor-addons' ),
186
+ ]
187
+ );
188
+
189
+ $this->add_group_control(
190
+ Group_Control_Border::get_type(),
191
+ [
192
+ 'name' => 'field_border',
193
+ 'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
194
+ ]
195
+ );
196
+
197
+ $this->add_group_control(
198
+ Group_Control_Box_Shadow::get_type(),
199
+ [
200
+ 'name' => 'field_box_shadow',
201
+ 'selector' => '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea',
202
+ ]
203
+ );
204
+
205
+ $this->add_control(
206
+ 'field_bg_color',
207
+ [
208
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
209
+ 'type' => Controls_Manager::COLOR,
210
+ 'selectors' => [
211
+ '{{WRAPPER}} .wpforms-field input, {{WRAPPER}} .wpforms-field-textarea textarea' => 'background-color: {{VALUE}}',
212
+ ],
213
+ ]
214
+ );
215
+
216
+ $this->end_controls_tab();
217
+
218
+ $this->start_controls_tab(
219
+ 'tab_field_focus',
220
+ [
221
+ 'label' => __( 'Focus', 'happy-elementor-addons' ),
222
+ ]
223
+ );
224
+
225
+ $this->add_group_control(
226
+ Group_Control_Border::get_type(),
227
+ [
228
+ 'name' => 'field_focus_border',
229
+ 'selector' => '{{WRAPPER}} .wpforms-field input:focus, {{WRAPPER}} .wpforms-field-textarea textarea:focus',
230
+ ]
231
+ );
232
+
233
+ $this->add_group_control(
234
+ Group_Control_Box_Shadow::get_type(),
235
+ [
236
+ 'name' => 'field_focus_box_shadow',
237
+ 'exclude' => [
238
+ 'box_shadow_position',
239
+ ],
240
+ 'selector' => '{{WRAPPER}} .wpforms-field input:focus, {{WRAPPER}} .wpforms-field-textarea textarea:focus',
241
+ ]
242
+ );
243
+
244
+ $this->add_control(
245
+ 'field_focus_bg_color',
246
+ [
247
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
248
+ 'type' => Controls_Manager::COLOR,
249
+ 'selectors' => [
250
+ '{{WRAPPER}} .wpforms-field input:focus, {{WRAPPER}} .wpforms-field-textarea textarea:focus' => 'background-color: {{VALUE}}',
251
+ ],
252
+ ]
253
+ );
254
+
255
+ $this->end_controls_tab();
256
+ $this->end_controls_tabs();
257
+
258
+ $this->end_controls_section();
259
+
260
+ $this->start_controls_section(
261
+ 'wpf-form-label',
262
+ [
263
+ 'label' => __( 'Form Fields Label', 'happy-elementor-addons' ),
264
+ 'tab' => Controls_Manager::TAB_STYLE,
265
+ ]
266
+ );
267
+
268
+ $this->add_responsive_control(
269
+ 'label_margin',
270
+ [
271
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
272
+ 'type' => Controls_Manager::DIMENSIONS,
273
+ 'size_units' => [ 'px', '%' ],
274
+ 'selectors' => [
275
+ '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
276
+ ],
277
+ ]
278
+ );
279
+
280
+ $this->add_responsive_control(
281
+ 'label_padding',
282
+ [
283
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
284
+ 'type' => Controls_Manager::DIMENSIONS,
285
+ 'size_units' => [ 'px', 'em', '%' ],
286
+ 'selectors' => [
287
+ '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label' => 'display: inline-block; padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
288
+ ],
289
+ ]
290
+ );
291
+
292
+ $this->add_control(
293
+ 'hr3',
294
+ [
295
+ 'type' => Controls_Manager::DIVIDER,
296
+ 'style' => 'thick',
297
+ ]
298
+ );
299
+
300
+ $this->add_group_control(
301
+ Group_Control_Typography::get_type(),
302
+ [
303
+ 'name' => 'label_typography',
304
+ 'label' => __( 'Label Typography', 'happy-elementor-addons' ),
305
+ 'selector' => '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label',
306
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
307
+ ]
308
+ );
309
+
310
+ $this->add_group_control(
311
+ Group_Control_Typography::get_type(),
312
+ [
313
+ 'name' => 'sublabel_typography',
314
+ 'label' => __( 'Sub Label Typography', 'happy-elementor-addons' ),
315
+ 'selector' => '{{WRAPPER}} .wpforms-field-sublabel',
316
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
317
+ ]
318
+ );
319
+
320
+ $this->add_group_control(
321
+ Group_Control_Typography::get_type(),
322
+ [
323
+ 'name' => 'desc_typography',
324
+ 'label' => __( 'Description Typography', 'happy-elementor-addons' ),
325
+ 'selector' => '{{WRAPPER}} .wpforms-field-description',
326
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_3
327
+ ]
328
+ );
329
+
330
+ $this->add_control(
331
+ 'label_color_popover',
332
+ [
333
+ 'label' => __( 'Colors', 'happy-elementor-addons' ),
334
+ 'type' => Controls_Manager::POPOVER_TOGGLE,
335
+ 'label_off' => __( '', 'happy-elementor-addons' ),
336
+ 'label_on' => __( 'Custom', 'happy-elementor-addons' ),
337
+ 'return_value' => 'yes',
338
+ ]
339
+ );
340
+
341
+ $this->start_popover();
342
+
343
+ $this->add_control(
344
+ 'label_color',
345
+ [
346
+ 'label' => __( 'Label Text Color', 'happy-elementor-addons' ),
347
+ 'type' => Controls_Manager::COLOR,
348
+ 'selectors' => [
349
+ '{{WRAPPER}} .wpforms-field-container label.wpforms-field-label' => 'color: {{VALUE}}',
350
+ ],
351
+ 'condition' => [
352
+ 'label_color_popover' => 'yes'
353
+ ],
354
+ ]
355
+ );
356
+
357
+ $this->add_control(
358
+ 'requered_label',
359
+ [
360
+ 'label' => __( 'Required Label Color', 'happy-elementor-addons' ),
361
+ 'type' => Controls_Manager::COLOR,
362
+ 'selectors' => [
363
+ '{{WRAPPER}} .wpforms-required-label' => 'color: {{VALUE}}',
364
+ ],
365
+ 'condition' => [
366
+ 'label_color_popover' => 'yes'
367
+ ],
368
+ ]
369
+ );
370
+
371
+ $this->add_control(
372
+ 'sublabel_color',
373
+ [
374
+ 'label' => __( 'Sub Label Text Color', 'happy-elementor-addons' ),
375
+ 'type' => Controls_Manager::COLOR,
376
+ 'selectors' => [
377
+ '{{WRAPPER}} .wpforms-field-sublabel' => 'color: {{VALUE}}',
378
+ ],
379
+ 'condition' => [
380
+ 'label_color_popover' => 'yes'
381
+ ],
382
+ ]
383
+ );
384
+
385
+ $this->add_control(
386
+ 'desc_label_color',
387
+ [
388
+ 'label' => __( 'Description Text Color', 'happy-elementor-addons' ),
389
+ 'type' => Controls_Manager::COLOR,
390
+ 'selectors' => [
391
+ '{{WRAPPER}} .wpforms-field-description' => 'color: {{VALUE}}',
392
+ ],
393
+ 'condition' => [
394
+ 'label_color_popover' => 'yes'
395
+ ],
396
+ ]
397
+ );
398
+
399
+ $this->end_popover();
400
+
401
+ $this->end_controls_section();
402
+
403
+ $this->start_controls_section(
404
+ 'submit',
405
+ [
406
+ 'label' => __( 'Submit Button', 'happy-elementor-addons' ),
407
+ 'tab' => Controls_Manager::TAB_STYLE,
408
+ ]
409
+ );
410
+
411
+ $this->add_control(
412
+ 'submit_btn_width',
413
+ [
414
+ 'label' => __( 'Button Full Width?', 'happy-elementor-addons' ),
415
+ 'type' => Controls_Manager::SWITCHER,
416
+ 'label_on' => __( 'Yes', 'happy-elementor-addons' ),
417
+ 'label_off' => __( 'No', 'happy-elementor-addons' ),
418
+ 'return_value' => 'yes',
419
+ 'default' => 'yes',
420
+ ]
421
+ );
422
+
423
+ $this->add_responsive_control(
424
+ 'button_width',
425
+ [
426
+ 'label' => __( 'Button Width', 'happy-elementor-addons' ),
427
+ 'type' => Controls_Manager::SLIDER,
428
+ 'size_units' => [ 'px', '%' ],
429
+ 'condition' => [
430
+ 'submit_btn_width' => 'yes'
431
+ ],
432
+ 'default' => [
433
+ 'unit' => '%',
434
+ 'size' => 100
435
+ ],
436
+ 'range' => [
437
+ '%' => [
438
+ 'min' => 1,
439
+ 'max' => 100,
440
+ ],
441
+ 'px' => [
442
+ 'min' => 1,
443
+ 'max' => 800,
444
+ ],
445
+ ],
446
+ 'selectors' => [
447
+ '{{WRAPPER}} .wpforms-submit' => 'display: block; width: {{SIZE}}{{UNIT}};',
448
+ ],
449
+ ]
450
+ );
451
+
452
+ $this->add_responsive_control(
453
+ 'submit_btn_position',
454
+ [
455
+ 'label' => __( 'Button Position', 'happy-elementor-addons' ),
456
+ 'type' => Controls_Manager::CHOOSE,
457
+ 'options' => [
458
+ 'left' => [
459
+ 'title' => __( 'Left', 'happy-elementor-addons' ),
460
+ 'icon' => 'eicon-h-align-left',
461
+ ],
462
+ 'center' => [
463
+ 'title' => __( 'Center', 'happy-elementor-addons' ),
464
+ 'icon' => 'eicon-h-align-center',
465
+ ],
466
+ 'right' => [
467
+ 'title' => __( 'Right', 'happy-elementor-addons' ),
468
+ 'icon' => 'eicon-h-align-right',
469
+ ],
470
+ ],
471
+ 'condition' => [
472
+ 'submit_btn_width' => '',
473
+
474
+ ],
475
+ 'desktop_default' => 'left',
476
+ 'toggle' => false,
477
+ 'prefix_class' => 'ha-form-btn--%s',
478
+ 'selectors' => [
479
+ '{{WRAPPER}} .wpforms-submit-container' => 'text-align: {{Value}};',
480
+ ],
481
+ ]
482
+ );
483
+
484
+ $this->add_responsive_control(
485
+ 'submit_margin',
486
+ [
487
+ 'label' => __( 'Margin', 'happy-elementor-addons' ),
488
+ 'type' => Controls_Manager::DIMENSIONS,
489
+ 'size_units' => [ 'px', '%' ],
490
+ 'selectors' => [
491
+ '{{WRAPPER}} .wpforms-submit' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
492
+ ],
493
+ ]
494
+ );
495
+
496
+ $this->add_responsive_control(
497
+ 'submit_padding',
498
+ [
499
+ 'label' => __( 'Padding', 'happy-elementor-addons' ),
500
+ 'type' => Controls_Manager::DIMENSIONS,
501
+ 'size_units' => [ 'px', 'em', '%' ],
502
+ 'selectors' => [
503
+ '{{WRAPPER}} .wpforms-submit' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
504
+ ],
505
+ ]
506
+ );
507
+
508
+ $this->add_group_control(
509
+ Group_Control_Typography::get_type(),
510
+ [
511
+ 'name' => 'submit_typography',
512
+ 'selector' => '{{WRAPPER}} .wpforms-submit',
513
+ 'scheme' => Scheme_Typography::TYPOGRAPHY_4
514
+ ]
515
+ );
516
+
517
+ $this->add_group_control(
518
+ Group_Control_Border::get_type(),
519
+ [
520
+ 'name' => 'submit_border',
521
+ 'selector' => '{{WRAPPER}} .wpforms-form .wpforms-submit-container button[type=submit]',
522
+ ]
523
+ );
524
+
525
+ $this->add_control(
526
+ 'submit_border_radius',
527
+ [
528
+ 'label' => __( 'Border Radius', 'happy-elementor-addons' ),
529
+ 'type' => Controls_Manager::DIMENSIONS,
530
+ 'size_units' => [ 'px', '%' ],
531
+ 'selectors' => [
532
+ '{{WRAPPER}} .wpforms-submit' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
533
+ ],
534
+ ]
535
+ );
536
+
537
+ $this->add_group_control(
538
+ Group_Control_Box_Shadow::get_type(),
539
+ [
540
+ 'name' => 'submit_box_shadow',
541
+ 'selector' => '{{WRAPPER}} .wpforms-submit',
542
+ ]
543
+ );
544
+
545
+ $this->add_control(
546
+ 'hr4',
547
+ [
548
+ 'type' => Controls_Manager::DIVIDER,
549
+ 'style' => 'thick',
550
+ ]
551
+ );
552
+
553
+ $this->start_controls_tabs( 'tabs_button_style' );
554
+
555
+ $this->start_controls_tab(
556
+ 'tab_button_normal',
557
+ [
558
+ 'label' => __( 'Normal', 'happy-elementor-addons' ),
559
+ ]
560
+ );
561
+
562
+ $this->add_control(
563
+ 'submit_color',
564
+ [
565
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
566
+ 'type' => Controls_Manager::COLOR,
567
+ 'default' => '',
568
+ 'selectors' => [
569
+ '{{WRAPPER}} .wpforms-submit' => 'color: {{VALUE}};',
570
+ ],
571
+ ]
572
+ );
573
+
574
+ $this->add_control(
575
+ 'submit_bg_color',
576
+ [
577
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
578
+ 'type' => Controls_Manager::COLOR,
579
+ 'selectors' => [
580
+ '{{WRAPPER}} .wpforms-submit' => 'background-color: {{VALUE}};',
581
+ ],
582
+ ]
583
+ );
584
+
585
+ $this->end_controls_tab();
586
+
587
+ $this->start_controls_tab(
588
+ 'tab_button_hover',
589
+ [
590
+ 'label' => __( 'Hover', 'happy-elementor-addons' ),
591
+ ]
592
+ );
593
+
594
+ $this->add_control(
595
+ 'submit_hover_color',
596
+ [
597
+ 'label' => __( 'Text Color', 'happy-elementor-addons' ),
598
+ 'type' => Controls_Manager::COLOR,
599
+ 'selectors' => [
600
+ '{{WRAPPER}} .wpforms-submit:hover, {{WRAPPER}} .wpforms-submit:focus' => 'color: {{VALUE}};',
601
+ ],
602
+ ]
603
+ );
604
+
605
+ $this->add_control(
606
+ 'submit_hover_bg_color',
607
+ [
608
+ 'label' => __( 'Background Color', 'happy-elementor-addons' ),
609
+ 'type' => Controls_Manager::COLOR,
610
+ 'selectors' => [
611
+ '{{WRAPPER}} .wpforms-submit:hover, {{WRAPPER}} .wpforms-submit:focus' => 'background-color: {{VALUE}};',
612
+ ],
613
+ ]
614
+ );
615
+
616
+ $this->add_control(
617
+ 'submit_hover_border_color',
618
+ [
619
+ 'label' => __( 'Border Color', 'happy-elementor-addons' ),
620
+ 'type' => Controls_Manager::COLOR,
621
+ 'selectors' => [
622
+ '{{WRAPPER}} .wpforms-submit:hover, {{WRAPPER}} .wpforms-submit:focus' => 'border-color: {{VALUE}};',
623
+ ],
624
+ ]
625
+ );
626
+
627
+ $this->end_controls_tab();
628
+ $this->end_controls_tabs();
629
+
630
+ $this->end_controls_section();
631
+ }
632
+
633
+ protected function render() {
634
+ if ( ! ha_is_wpforms_activated() ) {
635
+ return;
636
+ }
637
+
638
+ $settings = $this->get_settings_for_display();
639
+
640
+ if ( ! empty( $settings['form_id'] ) ) {
641
+ echo ha_do_shortcode( 'wpforms', [
642
+ 'id' => $settings['form_id'],
643
+ ] );
644
+ }
645
+ }
646
+ }
wpml/data-table.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Data Table
4
+ */
5
+ namespace Happy_Addons\Elementor;
6
+
7
+ defined( 'ABSPATH' ) || die();
8
+
9
+ class WPML_Data_Table_Column_Data extends \WPML_Elementor_Module_With_Items {
10
+
11
+ /**
12
+ * @return string
13
+ */
14
+ public function get_items_field() {
15
+ return 'columns_data';
16
+ }
17
+
18
+ /**
19
+ * @return array
20
+ */
21
+ public function get_fields() {
22
+ return [
23
+ 'column_name',
24
+ ];
25
+ }
26
+
27
+ /**
28
+ * @param string $field
29
+ *
30
+ * @return string
31
+ */
32
+ protected function get_title( $field ) {
33
+ switch ( $field ) {
34
+ case 'column_name':
35
+ return __( 'Data Table: Column Name', 'happy-elementor-addons' );
36
+ default:
37
+ return '';
38
+ }
39
+ }
40
+
41
+ /**
42
+ * @param string $field
43
+ *
44
+ * @return string
45
+ */
46
+ protected function get_editor_type( $field ) {
47
+ switch ( $field ) {
48
+ case 'column_name':
49
+ return 'LINE';
50
+ default:
51
+ return '';
52
+ }
53
+ }
54
+ }
55
+
56
+ class WPML_Data_Table_Row_Data extends \WPML_Elementor_Module_With_Items {
57
+
58
+ /**
59
+ * @return string
60
+ */
61
+ public function get_items_field() {
62
+ return 'rows_data';
63
+ }
64
+
65
+ /**
66
+ * @return array
67
+ */
68
+ public function get_fields() {
69
+ return [
70
+ 'cell_name',
71
+ 'cell_link' => ['url']
72
+ ];
73
+ }
74
+
75
+ /**
76
+ * @param string $field
77
+ *
78
+ * @return string
79
+ */
80
+ protected function get_title( $field ) {
81
+ switch ( $field ) {
82
+ case 'cell_name':
83
+ return __( 'Data Table: Cell Title', 'happy-elementor-addons' );
84
+ case 'url':
85
+ return __( 'Data Table: Cell Link', 'happy-elementor-addons' );
86
+ default:
87
+ return '';
88
+ }
89
+ }
90
+
91
+ /**
92
+ * @param string $field
93
+ *
94
+ * @return string
95
+ */
96
+ protected function get_editor_type( $field ) {
97
+ switch ( $field ) {
98
+ case 'cell_name':
99
+ return 'LINE';
100
+ case 'url':
101
+ return 'LINK';
102
+ default:
103
+ return '';
104
+ }
105
+ }
106
+ }
wpml/horizontal-timeline.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Horizontal Timeline
4
+ */
5
+ namespace Happy_Addons\Elementor;
6
+
7
+ defined( 'ABSPATH' ) || die();
8
+
9
+ class WPML_Horizontal_Timeline extends \WPML_Elementor_Module_With_Items {
10
+
11
+ /**
12
+ * @return string
13
+ */
14
+ public function get_items_field() {
15
+ return 'timeline';
16
+ }
17
+
18
+ /**
19
+ * @return array
20
+ */
21
+ public function get_fields() {
22
+ return [
23
+ 'event_date',
24
+ 'event_title',
25
+ 'event_subtitle',
26
+ 'event_description',
27
+ ];
28
+ }
29
+
30
+ /**
31
+ * @param string $field
32
+ *
33
+ * @return string
34
+ */
35
+ protected function get_title( $field ) {
36
+ if ( $field === 'event_date' ) {
37
+ return __( 'Horizontal Timeline: Date', 'happy-elementor-addons' );
38
+ }
39
+
40
+ if ( $field === 'event_title' ) {
41
+ return __( 'Horizontal Timeline: Title', 'happy-elementor-addons' );
42
+ }
43
+
44
+ if ( $field === 'event_subtitle' ) {
45
+ return __( 'Horizontal Timeline: Subtitle', 'happy-elementor-addons' );
46
+ }
47
+
48
+ if ( $field === 'event_description' ) {
49
+ return __( 'Horizontal Timeline: Description', 'happy-elementor-addons' );
50
+ }
51
+ }
52
+
53
+ /**
54
+ * @param string $field
55
+ *
56
+ * @return string
57
+ */
58
+ protected function get_editor_type( $field ) {
59
+ if ( $field === 'event_date' ) {
60
+ return 'LINE';
61
+ }
62
+
63
+ if ( $field === 'event_title' ) {
64
+ return 'LINE';
65
+ }
66
+
67
+ if ( $field === 'event_subtitle' ) {
68
+ return 'LINE';
69
+ }
70
+
71
+ if ( $field === 'event_description' ) {
72
+ return 'AREA';
73
+ }
74
+ }
75
+ }