vc_welcome.less000064400000005037150732272110007564 0ustar00@import "ui/vc_ui-button.less"; @import "ui/vc_ui-helper.less"; @import "ui/vc_ui-icon-pixel.less"; @vc-welcome-border: rgba(125, 125, 125, 0.40); @vc-welcome-margin: 14px; @vc-welcome-base-font-size: 14px; @vc-welcome-gap: 20px; @vc-welcome-header-font-size: 32px; @vc-welcome-header-line-height: 1.2em; @vc-welcome-header-font-color: #35444B; .vc_welcome { margin: @vc-welcome-margin; font-size: @vc-welcome-base-font-size; text-align: center; padding: @vc-welcome-gap; // buttons behavior .vc_ui-btn-group { margin-top: @vc-welcome-gap; margin-bottom: @vc-welcome-gap; } .vc_ui-button { margin: @vc-welcome-gap / 2; margin-bottom: 0; min-width: 190px; text-transform: capitalize; display: inline-flex; justify-content: center; text-decoration: none !important; align-items: center; .vc-composer-icon { font-size: 19px; padding: 0 .7em 0 0; } .vc-composer-icon.vc-c-icon-text-block { font-size: 16px; } } // icon behaviour .vc_ui-icon-pixel { padding-right: .5em; } } .vc_welcome-brand { margin-top: @vc-welcome-gap; margin-bottom: @vc-welcome-gap * 1.5; text-align: center; img { box-shadow: none; display: inline-block; } } .vc_welcome-header { font-weight: 300; font-size: @vc-welcome-header-font-size; line-height: @vc-welcome-header-line-height; color: @vc-welcome-header-font-color; text-transform: uppercase; margin-top: @vc-welcome-gap; margin-bottom: @vc-welcome-gap * 2; } .vc_add-element-not-empty-button { display: inline-block; position: relative; font-size: 18px; color: #FFFFFF !important; // override theme color width: 39px; height: 38px; -webkit-box-shadow: none !important; -moz-box-shadow: none !important; box-shadow: none !important; background-color: #C9C9C9; cursor: pointer; border: none !important; .border-radius(5px); .transition(background-color 0.5s); &:hover { background-color: #E4E4E4; color: #FFFFFF; } .vc-composer-icon { position: absolute; left: 50%; top: 50%; .translate(-50%, -50%); } } // not empty state .vc_welcome { &.vc_not-empty { border: 1px dashed @vc-welcome-border; .vc_welcome-visible-e { display: none; } } &:not(.vc_not-empty) { .vc_welcome-visible-ne { display: none; } } } // editors behaviour .vc_editor.compose-mode { .vc_welcome { margin: 0; } } // media behaviour @media screen and (max-width: @screen-sm) { .vc_welcome { .vc_ui-button { display: block; } } } ui/vc_ui-loaders.less000064400000002337150732272110010612 0ustar00// Loaders @vc_ui-wp-spinner-svg-src: '../vc/loaders/spinner.svg'; @vc_ui-wp-spinner-light-svg-src: '../vc/loaders/spinner-light.svg'; @vc_ui-wp-spinner-animation-duration: 1.08s; @vc_ui-wp-spinner-base-size: 16px; .vc_ui-wp-spinner { margin: 0; padding: 0; height: 1em; width: 1em; display: inline-block; vertical-align: middle; opacity: .7; position: relative; &::before { content: ''; display: block; height: @vc_ui-wp-spinner-base-size; width: @vc_ui-wp-spinner-base-size; background: transparent url(@vc_ui-wp-spinner-light-svg-src) 50% 50% no-repeat; background-size: contain; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); animation: vc_ui-wp-spinner-animation @vc_ui-wp-spinner-animation-duration linear infinite; } &.vc_ui-wp-spinner-lg { &::before { height: @vc_ui-wp-spinner-base-size * 2; width: @vc_ui-wp-spinner-base-size * 2; } } &.vc_ui-wp-spinner-dark { &::before { background-image: url(@vc_ui-wp-spinner-svg-src); } } } @keyframes vc_ui-wp-spinner-animation { from { transform: translate(-50%, -50%) rotate(0deg); } to { transform: translate(-50%, -50%) rotate(360deg); } }ui/vc_ui-helper.less000064400000000450150732272110010432 0ustar00// Helpers @vcui-help-block-color: #929292; .vc_ui-help-block { color: @vcui-help-block-color; font-style: italic; .vc_ui-help-link { font-weight: 600; color: @vc_main_color; text-decoration: none; border: none; &:hover { color: @vc_main_color_hover; } } } ui/vc_ui-prompt.less000064400000005211150732272110010474 0ustar00@vcui-prompt-font-size: 14px; @vcui-prompt-background: #f5f5f5; @vcui-prompt-border: #dbdbdb; @vcui-prompt-color: #5e5e5e; @vcui-prompt-padding: 15px; @vcui-prompt-size: 16px; @vcui-prompt-gap: 18px; @vcui-prompt-xs-width: 258px; @vcui-prompt-sm-width: 395px; .vc_ui-prompt { font-size: @vcui-prompt-font-size; box-sizing: content-box; overflow: hidden; transition-property: opacity; transition-duration: .2s; transition-timing-function: ease-in-out; position: absolute; z-index: 100; top: 100%; left: 0; box-shadow: 0 0 5px rgba(0, 0, 0, .1); background-color: @vcui-prompt-background; color: @vcui-prompt-color; padding: @vcui-prompt-padding; visibility: hidden; opacity: 0; input { box-sizing: border-box; } &.vc_visible { visibility: visible; opacity: 1; overflow-y: auto; } } .vc_media-xs { .vc_ui-prompt { width: @vcui-prompt-xs-width; left: auto; right: 0; } } .vc_media-sm { .vc_ui-prompt { width: @vcui-prompt-sm-width; } } .vc_ui-prompt-controls { float: right; margin-left: 1em; .vc_ui-prompt-close { height: @vcui-prompt-size; width: @vcui-prompt-size; line-height: @vcui-prompt-size; vertical-align: top; position: relative; right: -3px; } .vc_ui-icon-pixel { display: block; line-height: 1; } } .vc_ui-prompt-content { display: flex; flex-wrap: wrap; margin-left: -@vcui-prompt-gap/2; margin-right: -@vcui-prompt-gap/2; } .vc_ui-prompt-column { padding-left: @vcui-prompt-gap/2; padding-right: @vcui-prompt-gap/2; &:first-child { flex-grow: 1; } .vc_ui-button { .vc-composer-icon { font-weight: bold; } } } // behaviours .vc_ui-dropdown { .vc_ui-prompt { position: absolute; } .vc_ui-button { text-transform: none; } } // Presets full width .vc_ui-prompt { &.vc_ui-prompt-presets, &.vc_ui-prompt-templates, &.vc_ui-prompt-view-presets { display: none; &.vc_visible { display: block; position: relative; width: calc(~'100% - 30px'); left: 0; right: 0; top: 0; margin-bottom: 20px; margin-top: 0; background: #FFF; box-shadow: none; } .vc_ui-prompt-controls { float: none; margin: 0; text-align: right; .vc_ui-control-button { font-size: 19px; height: 30px; width: 30px; color: grey; } } } .vc_ui-control-button { &.vc_hidden { display: none; } } } .vc_ui-notice .vc_message_box.vc_message_box-standard p.messagebox_text { margin: 0; padding: 0; } .vc_ui-notice .vc_message_box.vc_message_box-standard { margin-bottom: 20px; } ui/vc_ui-badges.less000064400000000555150732272110010406 0ustar00[class*=vc_ui-badge--] i::after { content: ''; display: block; height: 8px; width: 8px; border-radius: 50%; position: absolute; top: -3px; right: -2px; } .vc_ui-badge { &--success i:after { background-color: #11C248; } &--warnings i:after { background-color: #F4AF1D; } &--problems i:after { background-color: #FC4242; } } ui/.htaccess000055500000000355150732272110006763 0ustar00 Order allow,deny Deny from all ui/vc_ui-flex-bootstrap.less000064400000003777150732272110012143 0ustar00/* bootstrap reference bug */ @import (reference)"../../config/variables.less"; @import (reference)"../../lib/grid.less"; /* / bootstrap reference bug */ @vc_media-xs-width: 350px; @vc_media-sm-width: 700px; @vc_media-md-width: 1050px; @vc_media-lg-width: 1000px; .vc_ui-flex-row { &.vc_row { display: flex; flex-wrap: wrap; &::before, &::after { width: 0; } } [class*=vc_col] { width: 100%; } } .vc_make-media-grid(xs); .vc_make-media-grid(sm); .vc_make-media-grid(md); .vc_make-media-grid(lg); .vc_float-media-grid-columns(@class) { // initial .vc_col(@index) when (@index = 1) { @item: ~".vc_media-@{class} .vc_col-@{class}-@{index}"; .vc_col((@index + 1), @item); } // general .vc_col(@index, @list) when (@index =< @grid-columns) { @item: ~".vc_media-@{class} .vc_col-@{class}-@{index}"; .vc_col((@index + 1), ~"@{list}, @{item}"); } // terminal .vc_col(@index, @list) when (@index > @grid-columns) { @{list} { float: left; } } .vc_col(1); // kickstart it } .vc_float-media-grid-columns-rtl(@class) { // initial .vc_col-rtl(@index) when (@index = 1) { @item: ~"[dir=rtl] .vc_rtl-columns-reverse .vc_media-@{class} .vc_col-@{class}-@{index}"; .vc_col-rtl((@index + 1), @item); } // general .vc_col-rtl(@index, @list) when (@index =< @grid-columns) { @item: ~"[dir=rtl] .vc_rtl-columns-reverse .vc_media-@{class} .vc_col-@{class}-@{index}"; .vc_col-rtl((@index + 1), ~"@{list}, @{item}"); } // terminal .vc_col-rtl(@index, @list) when (@index > @grid-columns) { @{list} { float: right; } } .vc_col-rtl(1); // kickstart it } .vc_make-media-grid(@class) { .vc_float-media-grid-columns(@class); .vc_float-media-grid-columns-rtl(@class); .vc_media-@{class} { .vc_loop-grid-columns(@grid-columns, @class, width); .vc_loop-grid-columns(@grid-columns, @class, pull); .vc_loop-grid-columns(@grid-columns, @class, push); .vc_loop-grid-columns(@grid-columns, @class, offset); } } ui/vc_ui-panel-templates.less000064400000007414150732272110012255 0ustar00@import "vc_ui-panel/vc_ui-panel-content.less"; @import "vc_ui-list-bar.less"; @import "vc_ui-icon-pixel.less"; @vcui-template-list-border: #e2e2e2; @vcui-template-list-background: #f9f9f9; @vcui-template-list-trigger-color: #5e5e5e; @vcui-template-list-trigger-color-hover: #23282d; .vc_ui-template-list { //border: 1px solid red &.vc_ui-list-bar { border: none; margin-left: -@vcui-panel-content-padding-horizontal; margin-right: -@vcui-panel-content-padding-horizontal; margin-bottom: -@vcui-panel-content-padding-vertical; background: transparent; } .vc_ui-list-bar-item { border: 1px solid @vcui-template-list-border; border-left: none; border-right: none; position: relative; &:hover { background-color: @vcui-template-list-background; } } .vc_ui-list-bar-item-actions { padding-left: @vcui-panel-content-padding-horizontal; padding-right: @vcui-panel-content-padding-horizontal; } .vc_ui-control-button { padding-left: .2em; padding-right: .2em; .vc-composer-icon { font-size: 20px; &.vc-c-icon-add { font-size: 24px; } } .vc_ui-wp-spinner { margin: 0; height: 16px; width: 16px; &::before { &:extend(.vc_ui-wp-spinner::before); } } } .vc_active, .vc_loading { .vc_ui-list-bar-item { background-color: @vcui-template-list-background; } .vc_ui-list-bar-item-actions { visibility: visible; opacity: 1; } } .vc_ui-list-bar-item-trigger { padding: @vcui-panel-content-padding-horizontal; font-weight: 600; outline: none; transition-property: color; transition-duration: .2s; transition-timing-function: ease-in-out; color: @vcui-template-list-trigger-color; &:hover { color: @vcui-template-list-trigger-color-hover; } } .vc_ui-template { &:not(:last-child) { margin-bottom: -1px; } &:last-child:not(.vc_active) { border-bottom: none; } } .vc_template-save-btn { min-width: 150px; } .vc_ui-template-content { box-sizing: content-box; display: none; overflow: hidden; transition-property: height, padding; transition-duration: .2s; transition-timing-function: ease-in-out; padding: 0; } .vc_active, .vc_animating { .vc_ui-template-content { display: block; } } .vc_ui-preview-icon { &:extend(.vc_ui-icon-pixel-control-triangle-desc-dark all); } .vc_active { .vc_ui-preview-icon { &:extend(.vc_ui-icon-pixel-control-triangle-asc-dark all); } .vc-c-icon-arrow_drop_down { &:extend(.vc-c-icon-arrow_drop_up all); } } } #vc_ui-panel-templates { width: 80vw; max-height: 85vh; // hide preview icon on mobile devices &:not(.vc_media-sm) { .vc_ui-control-button[data-vc-preview-handler] { display: none; } .vc_active, .vc_animating { .vc_ui-template-content { display: none; } } } h3 { margin-bottom: 0.5em; } } //BC: .vc_input-group .vc_form-control.vc_panel-templates-name { width: 99%; } .vc_ui-panel { .vc_panel-tabs { [data-vc-panel-message] { width: 100%; margin-bottom: 10px; .vc_message_box { padding: 0em 1em 1em 4em; } } } .vc_template-save-btn { height: 46px; display: inline-flex; align-items: center; line-height: 1; } } // todo: remove this nasty important @todo 4.10 [data-vc-template-search="true"] { .vc_edit-form-tab { display: flex !important; &.vc-search-result-empty { display: none !important; } [data-vc-hide-on-search="true"] { display: none; } .vc_ui-template-list.vc_ui-list-bar { margin-bottom: 0; } } .vc_ui-panel-content{ padding-bottom: 0; } } ui/vc_ui-list-bar.less000064400000003460150732272110010674 0ustar00@vc-ui-list-bar-border-size: 1px; @vc-ui-list-bar-border-color: #dbdbdb; @vc-ui-list-bar-background: #f5f5f5; @vc-ui-list-bar-background-hover: #eaeaea; @vc-ui-list-bar-trigger-color: #5e5e5e; @vc-ui-list-bar-item-padding-vertical: 10px; @vc-ui-list-bar-item-padding-horizontal: 10px; @vc-ui-list-bar-font-size: 13px; // list bar .vc_ui-list-bar { margin: 0; padding: 0; list-style: none; border: @vc-ui-list-bar-border-size solid @vc-ui-list-bar-border-color; & + .vc_ui-list-bar { border-top-width: 0; } background: @vc-ui-list-bar-background; font-size: @vc-ui-list-bar-font-size; } .vc_ui-list-bar-item { margin: 0; padding: 0; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; align-items: center; transition-property: color, background; transition-duration: .2s; transition-timing-function: ease-in-out; &:hover { background: @vc-ui-list-bar-background-hover; .vc_ui-list-bar-item-actions { visibility: visible; opacity: 1; } } } .vc_ui-list-bar-item-trigger { font-size: @vc-ui-list-bar-font-size; line-height: 1; text-transform: none; color: @vc-ui-list-bar-trigger-color; background: transparent; border: none; text-decoration: none; text-align: left; padding: @vc-ui-list-bar-item-padding-vertical @vc-ui-list-bar-item-padding-horizontal; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; font-weight: 400; cursor: pointer; &:hover { background: transparent; } } .vc_ui-list-bar-item-actions { padding-left: @vc-ui-list-bar-item-padding-vertical; padding-right: @vc-ui-list-bar-item-padding-vertical; visibility: hidden; opacity: 0; transition-property: opacity; transition-duration: .2s; transition-timing-function: ease-in-out; } .vc_ui-list-bar-group { } ui/vc_ui-panel/vc_ui-panel.less000064400000001574150732272110012464 0ustar00 @import "../vc_ui-panel/vc_ui-panel-window.less"; @import "../vc_ui-panel/vc_ui-panel-header.less"; @import "../vc_ui-panel/vc_ui-panel-content.less"; @import "../vc_ui-panel/vc_ui-panel-footer.less"; @import "../vc_ui-panel/vc_ui-panel-footer.less"; @import "../vc_ui-prompt.less"; @import "../vc_ui-gaps.less"; @import "../vc_ui-flex-bootstrap.less"; @vcui-panel-width: 650px; .vc_ui-panel { display: none; &.vc_ui-panel-window { width: @vcui-panel-width; position: fixed; z-index: 50000; top: 74px; left: 50%; } &.vc_active { display: flex; } .panel-body { padding: 0; } .vc_panel-tabs { flex-grow: 1; } .vc_layout-onion { width: 350px; flex-grow: initial; } } // Loaders behaviour .vc_ui-panel { .vc_ui-panel-content > .vc_ui-wp-spinner { display: block; margin: 0 auto; width: 80px; height: 80px; } } ui/vc_ui-panel/vc_ui-panel-header.less000064400000007166150732272110013715 0ustar00@import "../vc_ui-button.less"; @import "../vc_ui-icon-pixel.less"; @import "../vc_ui-dropdown.less"; @import "../vc_ui-tabs-line.less"; @vcui-panel-header-font-size: 14px; @vcui-panel-header-padding-horizontal: 18px; @vcui-panel-header-padding-vertical: 14px; @vcui-panel-header-gap: 16px; @vcui-panel-header-background: @vc_main_color; @vcui-panel-header-color: #fff; @vcui-panel-header-heading-font-size: 18px; @vcui-panel-header-search-width: 200px; @vcui-panel-header-search-width-focus: 110%; @vcui-panel-header-search-color: #333; @vcui-panel-header-search-placeholder-color: #aaa; @vcui-panel-header-transition-duration: .2s; .vc_ui-panel-header-container { padding: @vcui-panel-header-padding-vertical @vcui-panel-header-padding-horizontal; background: @vcui-panel-header-background; margin: 0; font-size: @vcui-panel-header-font-size; &.vc_ui-panel-header-o-stacked-bottom { padding-bottom: 0; } } .vc_ui-panel-header { color: @vcui-panel-header-color; &::after { content: ''; display: block; clear: both; height: 0; visibility: hidden; } .vc_ui-panel-header-controls { float: right; margin: -2px 0 0 12px; .vc_ui-dropdown { display: inline-block; } .vc_ui-dropdown-content { left: auto; right: 0; } } .vc_ui-panel-header-header { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; } .vc_ui-panel-header-heading { flex-grow: 1; margin: 0 1em 0 0; font-size: @vcui-panel-header-heading-font-size; color: inherit; font-weight: 300; line-height: normal; } .vc_ui-panel-header-actions { } .vc_ui-panel-header-content { clear: both; } .vc_ui-control-button { margin: 0; padding: 0; // buttons with icons .vc-composer-icon { font-size: 26px; } .vc-c-icon-cog { display: inline-block; margin-top: 2px; font-size: 22px; } .vc-c-icon-close { font-size: 18px; margin-top: 4px; display: inline-block; } } } .vc_ui-add-element-header-container .vc_ui-panel-header .vc_ui-panel-header-controls { margin: 2px 0 0 12px; } // search box .vc_ui-search-box { width: @vcui-panel-header-search-width; input[type=search] { display: inline-block; margin: 0; padding: 7px 12px 7px 32px; line-height: normal; font-size: 12px; font-family: inherit; vertical-align: middle; color: @vcui-panel-header-search-color; border: none; box-sizing: border-box; transition: all .2s ease-in-out; border-radius: 5px; width: 100%; position: relative; left: 0; &:focus { color: @vcui-panel-header-search-color; } &::-moz-placeholder { .style-placeholder(); opacity: 1; } &:-ms-input-placeholder { .style-placeholder(); } &::-webkit-input-placeholder { .style-placeholder(); } .style-placeholder() { text-overflow: ellipsis; line-height: inherit; color: @vcui-panel-header-search-placeholder-color; font-size: inherit; font-style: italic; } } .vc_ui-search-box-input { position: relative; label { height: 24px; width: 24px; content: ''; display: block; position: absolute; left: 6px; top: 0; bottom: 0; margin: auto; transition-property: color; transition-duration: @vcui-panel-header-transition-duration; transition-timing-function: ease-in-out; cursor: pointer; color: #BFC2C8; font-size: 22px; } input[type=search]:focus + label { cursor: default; color: #7F8591; } } } ui/vc_ui-panel/.htaccess000055500000000355150732272110011165 0ustar00 Order allow,deny Deny from all ui/vc_ui-panel/vc_ui-panel-content.less000064400000001402150732272110014122 0ustar00@vcui-panel-content-padding-horizontal: 18px; @vcui-panel-content-padding-vertical: 18px; @vcui-panel-content-font-size: 14px; @vcui-panel-content-background: #fff; @vcui-panel-content-color: #5e5e5e; .vc_ui-panel-content-container { background: @vcui-panel-content-background; margin: 0; padding: 0; font-size: @vcui-panel-content-font-size; color: @vcui-panel-content-color; overflow-x: hidden; overflow-y: auto; min-height: 150px; display: -webkit-box; display: -ms-flexbox; display: flex; } .vc_ui-panel-content { padding: @vcui-panel-content-padding-vertical @vcui-panel-content-padding-horizontal; -webkit-box-flex: 1; -ms-flex-positive: 1; flex-grow: 1; } .vc_ui-content-hidden { .vc_ui-panel-content { display: none; } } ui/vc_ui-panel/vc_ui-panel-window.less000064400000004260150732272110013764 0ustar00@vcui-panel-window-font-size: 14px; @vcui-panel-window-frame-size: 7px; @vcui-panel-window-frame-color: transparent; @vcui-panel-window-main-background: #fff; @vcui-panel-window-main-color: #5e5e5e; .vc_ui-panel-window { box-sizing: content-box; font-size: @vcui-panel-window-font-size; padding: @vcui-panel-window-frame-size; background: @vcui-panel-window-frame-color; } .vc_ui-panel-window-inner { background: @vcui-panel-window-main-background; color: @vcui-panel-window-main-color; box-shadow: 1px 1px 4px rgba(0, 0, 0, .25); position: relative; max-height: inherit; display: flex; flex-direction: column; align-items: stretch; align-content: stretch; flex-basis: 100%; > .vc_ui-panel-header-container, > .vc_ui-panel-footer-container { flex: 0 0 auto; } > .vc_ui-panel-content-container { flex: 1 1 auto; position: relative; } } #vc_ui-panel-edit-element:not(.vc_minimized) .vc_ui-panel-window-inner--auto-save { padding-bottom: 18px; } // minimized window .vc_ui-panel-window { &.vc_minimized { &:not(.vc_animating) { .vc_ui-panel-header-content, .vc_ui-panel-content-container, .vc_ui-panel-footer-container { display: none; } .vc_ui-minimize-button { transform: scaleY(-1); } } } &.vc_animating { .vc_ui-panel-window-inner { overflow: hidden; } &:not(.vc_minimized) { .vc_ui-minimize-button { transform: scaleY(-1); } } } } @media (max-width: @screen-xs-max) { .vc_ui-panel-window { box-sizing: border-box !important; width: 100vw !important; height: 100vh !important; max-height: none !important; position: fixed !important; left: 0 !important; top: 0 !important; padding: 5vh 5vw !important; overflow-y: auto !important; overflow-x: hidden !important; &.vc_active { display: block !important; } // don't allow minimizing on mobile .vc_ui-minimize-button { display: none !important; } // always unminimized on mobile .vc_ui-panel-header-content, .vc_ui-panel-content-container, .vc_ui-panel-footer-container { display: block !important; } } } ui/vc_ui-panel/vc_ui-panel-footer.less000064400000001636150732272110013757 0ustar00@import "../vc_ui-button.less"; @import "../vc_ui-icon-pixel.less"; @vcui-panel-footer-padding-horizontal: 18px; @vcui-panel-footer-padding-vertical: 18px; @vcui-panel-footer-font-size: 14px; @vcui-panel-footer-background: #f6f6f6; @vcui-panel-footer-button-group-space: 6px; @vcui-panel-footer-button-fw: 140px; .vc_ui-panel-footer-container { padding: @vcui-panel-footer-padding-vertical @vcui-panel-footer-padding-horizontal; background: @vcui-panel-footer-background; margin: 0; font-size: @vcui-panel-footer-font-size; } .vc_ui-panel-footer { // button behavior .vc_ui-button-group { margin: -@vcui-panel-footer-button-group-space/2; box-sizing: border-box; .vc_ui-button, .vc_ui-button-message { margin: @vcui-panel-footer-button-group-space/2; } } .vc_ui-button-fw { min-width: @vcui-panel-footer-button-fw; .vc-c-icon-check { font-weight: bold; } } }ui/vc_ui-panel-preset.less000064400000005517150732272110011563 0ustar00@import "vc_ui-panel/vc_ui-panel-content.less"; @import "vc_ui-list-bar.less"; @import "vc_ui-icon-pixel.less"; @vcui-template-list-border: #e2e2e2; @vcui-template-list-background: #f9f9f9; @vcui-template-list-trigger-color: #5e5e5e; @vcui-template-list-trigger-color-hover: #23282d; .vc_ui-template-list { //border: 1px solid red &.vc_ui-list-bar { border: none; margin-left: -@vcui-panel-content-padding-horizontal; margin-right: -@vcui-panel-content-padding-horizontal; margin-bottom: -@vcui-panel-content-padding-vertical; background: transparent; } .vc_ui-list-bar-item { border: 1px solid @vcui-template-list-border; border-left: none; border-right: none; position: relative; &:hover { background-color: @vcui-template-list-background; } } .vc_ui-list-bar-item-actions { padding-left: @vcui-panel-content-padding-horizontal; padding-right: @vcui-panel-content-padding-horizontal; } .vc_ui-control-button { padding-left: .2em; padding-right: .2em; .vc-composer-icon { font-size: 20px; margin: 0 3px; &.vc-c-icon-add { font-size: 14px; } &.vc-c-icon-delete_empty { font-size: 12px; } } .vc_ui-wp-spinner { margin: 0; height: 16px; width: 16px; &::before { &:extend(.vc_ui-wp-spinner::before); } } } .vc_active, .vc_loading { .vc_ui-list-bar-item { background-color: @vcui-template-list-background; } .vc_ui-list-bar-item-actions { visibility: visible; opacity: 1; } } .vc_ui-list-bar-item-trigger { padding: @vcui-panel-content-padding-horizontal; font-weight: 600; outline: none; transition-property: color; transition-duration: .2s; transition-timing-function: ease-in-out; color: @vcui-template-list-trigger-color; &:hover { color: @vcui-template-list-trigger-color-hover; } } .vc_ui-preset { &:not(:last-child) { margin-bottom: -1px; } &:last-child:not(.vc_active) { border-bottom: none; } } .vc_ui-preset-content { box-sizing: content-box; display: none; overflow: hidden; transition-property: height, padding; transition-duration: .2s; transition-timing-function: ease-in-out; padding: 0; } .vc_active, .vc_animating { .vc_ui-template-content { display: block; } } } #vc_ui-panel-preset { width: 80vw; max-height: 85vh; h3 { margin-bottom: 0.5em; } .vc_ui-list-bar-item-trigger { cursor: auto; } .vc_properties-list [data-vc-panel-message] .vc_message_box { padding: 0em 1em 1em 4em; } .vc_ui-panel-content-container { min-height: 140px; } } .vc_ui-panel { .vc_preset-save-btn { height: 46px; display: inline-flex; align-items: center; line-height: 1; } } ui/vc_ui-gaps.less000064400000000137150732272110010107 0ustar00// Gaps .vc_ui-grid-gap { > [class], > * { margin-bottom: @vcui-panel-header-gap; } }ui/vc_ui-panel-edit-element.less000064400000000411150732272110012621 0ustar00.vc_ui-panel { .vc_panel-tabs { > .vc_edit-form-tab { &.vc_row { display: none; flex-wrap: wrap; &::before, &::after { width: 0; } } &.vc_active { display: flex; } } } } ui/vc_ui-tabs-line.less000064400000010435150732272110011035 0ustar00@vcui-tabs-line-border: 1px; @vcui-tabs-line-border-radius: 5px; @vcui-tabs-line-font-size: 14px; @vcui-tabs-line-padding-horizontal: 12px; @vcui-tabs-line-padding-vertical: 16px; @vcui-tabs-line-active-background: #fff; @vcui-tabs-line-hover-background: @vc_main_color_hover; @vcui-tabs-line-active-color: #5e5e5e; @vcui-tabs-line-transition-duration: .2s; @vcui-tabs-line-transition-properties: color, background, border; @vcui-tabs-line-dropdown-z-index: 1010; @vcui-tabs-line-dropdown-max-width: 300px; @vcui-tabs-line-dropdown-border-size: 1px; @vcui-tabs-line-dropdown-border-color: #dbdbdb; @vcui-tabs-line-dropdown-background: #f5f5f5; @vcui-tabs-line-dropdown-background-hover: #eaeaea; @vcui-tabs-line-dropdown-trigger-color: #5e5e5e; @vcui-tabs-line-dropdown-trigger-padding-vertical: 10px; @vcui-tabs-line-dropdown-trigger-padding-horizontal: 10px; @vcui-tabs-line-dropdown-font-size: 12px; @vcui-tabs-line-dropdown-o-bounded-rows-count: 7; .vc_general.vc_ui-tabs-line { padding: 0; margin: 0; list-style: none; > li { float: left; margin: 0; padding: 0; } > .vc_ui-tabs-line-dropdown-toggle { float: right; } .vc_ui-tabs-line-trigger { box-sizing: border-box; display: block; text-transform: none; border: @vcui-tabs-line-border solid transparent; font-size: @vcui-tabs-line-font-size; font-weight: 400; line-height: 1; background: transparent; color: inherit; text-decoration: none; font-family: inherit; padding: @vcui-tabs-line-padding-vertical @vcui-tabs-line-padding-horizontal; margin: 0; outline: none; transition-property: @vcui-tabs-line-transition-properties; transition-duration: @vcui-tabs-line-transition-duration; transition-timing-function: ease-in-out; border-radius: @vcui-tabs-line-border-radius @vcui-tabs-line-border-radius 0 0; white-space: nowrap; cursor: pointer; user-select: none; text-align: left; &:hover, &:focus { border: @vcui-tabs-line-border solid transparent; background-color: @vcui-tabs-line-hover-background; } &:active { box-shadow: none; } } > .vc_active { > .vc_ui-tabs-line-trigger { background-color: @vcui-tabs-line-active-background; color: @vcui-tabs-line-active-color; cursor: default; } } &::after { content: ""; display: table; clear: both; } } .vc_ui-tabs-line .vc_ui-tabs-line-dropdown-toggle { position: absolute; float: right; visibility: hidden; &.vc_visible { visibility: visible; position: relative; } > .vc_ui-tabs-line-trigger { &::after { content: '. . .'; font-weight: 600; display: inline; } } &.vc_active { > .vc_ui-tabs-line-trigger { background-color: @vcui-tabs-line-hover-background; color: inherit; cursor: pointer; } } } .vc_ui-tabs-line .vc_ui-tabs-line-dropdown { position: absolute; z-index: @vcui-tabs-line-dropdown-z-index; top: 100%; right: 0; display: none; overflow: hidden; transition-property: height, padding; transition-duration: .2s; transition-timing-function: ease-in-out; padding: 0; margin: 0; list-style: none; max-width: @vcui-tabs-line-dropdown-max-width; box-shadow: 0 0 5px rgba(0, 0, 0, .1); background: @vcui-tabs-line-dropdown-background; border: @vcui-tabs-line-dropdown-border-size solid @vcui-tabs-line-dropdown-border-color; li { margin: 0; padding: 0; } &.vc_active, &.vc_animating { display: block; } .vc_ui-tabs-line-trigger { padding: @vcui-tabs-line-dropdown-trigger-padding-vertical @vcui-tabs-line-dropdown-trigger-padding-horizontal; border-radius: 0; font-size: @vcui-tabs-line-dropdown-font-size; color: @vcui-tabs-line-dropdown-trigger-color; &:hover { background-color: @vcui-tabs-line-dropdown-background-hover; } } .vc_active { .vc_ui-tabs-line-trigger { background-color: @vcui-tabs-line-dropdown-background-hover; cursor: default; } } } // initializing .vc_ui-tabs-line { opacity: 1; transition: opacity @vcui-tabs-line-transition-duration ease-in-out; &.vc_initializing { transition: opacity 0ms; opacity: 0; > li:not(:first-child):not(.vc_ui-tabs-line-dropdown-toggle) { position: absolute; visibility: hidden; } } } ui/vc_ui-panel-row-layout.less000064400000001661150732272110012377 0ustar00.vc_layout-panel-switcher() { .vc_layout-btn { display: inline-block; background-position: center center; background-repeat: no-repeat; background-color: white; cursor: pointer; padding: 2px; margin: 8px 4px 1px 0; color: #A0A0A0; font-size: 14px; &:hover { color: #0473aa; } } .vc_custom-layout-btn { background-color: transparent; display: block; width: auto; height: auto; margin: 4px 0 3px; font-size: 11px; text-align: center; } } [data-vc-ui-element="panel-row-layout"] { width: 420px; z-index: 100001; top: 90px; left: 50%; input.vc_row_layout[type="text"] { width: 288px; padding: 8px; line-height: 1; } .vc_layout-panel-switcher { .vc_layout-panel-switcher; } .vc_ui-panel-window-inner > .vc_ui-panel-content-container { overflow: hidden; } } .vc_general.vc_ui-button-update-layout { vertical-align: top; }ui/vc_ui-button.less000064400000017264150732272110010501 0ustar00@vcui-button-border: 1px; @vcui-button-transition-duration: .2s; @vcui-button-transition-properties: color, background, border, opacity, transform; @vcui-button-shape-rounded-radius: 5px; @vcui-control-button-opacity: .8; // sizes // md size (default) @vcui-button-size-md-vertical: 14px; @vcui-button-size-md-horizontal: 21px; @vcui-button-size-md-font-size: 14px; @vcui-button-size-md-line-height: 1.4; @vcui-button-message-size-md-horizontal: 8px; // sm size @vcui-button-size-sm-vertical: 8px; @vcui-button-size-sm-horizontal: 21px; @vcui-button-size-sm-font-size: 14px; @vcui-button-size-sm-line-height: 1.4; @vcui-button-message-size-md-horizontal: 8px; // States // State default @vcui-button-default-color: #fff; @vcui-button-default-background: #bcbcbc; @vcui-button-message-default-color: darken(@vcui-button-default-background, 10%); // State success @vcui-button-success-color: #fff; @vcui-button-success-background: @vc_success_frontend_editor; @vcui-button-message-success-color: darken(desaturate(@vcui-button-success-background, 20%), 10%); // State danger @vcui-button-danger-color: #fff; @vcui-button-danger-background: #ff7877; @vcui-button-message-danger-color: darken(desaturate(@vcui-button-danger-background, 20%), 10%); // State action @vcui-button-action-color: #fff; @vcui-button-action-background: @vc_main_color; @vcui-button-action-background-hover: @vc_main_color_hover; @vcui-button-message-action-color: darken(desaturate(@vcui-button-action-background, 10%), 5%); // State info @vcui-button-info-color: #fff; @vcui-button-info-background: @vc_main_color; @vcui-button-info-background-hover: @vc_main_color_hover; @vcui-button-message-info-color: darken(desaturate(@vcui-button-info-background, 20%), 10%); // State warning @vcui-button-warning-color: #fff; @vcui-button-warning-background: #feb710; @vcui-button-message-warning-color: darken(desaturate(@vcui-button-warning-background, 20%), 10%); // State disabled @vcui-button-disabled-color: #F3F3F3; @vcui-button-disabled-background: #D8D8D8; @vcui-button-message-disabled-color: darken(desaturate(@vcui-button-disabled-background, 10%), 5%); // ui button .vc_general.vc_ui-button { display: inline-block; margin: 0; text-align: center; vertical-align: middle; cursor: pointer; background: transparent; border: @vcui-button-border solid transparent; box-sizing: border-box; word-wrap: break-word; user-select: none; text-decoration: none; position: relative; transition-property: @vcui-button-transition-properties; transition-duration: @vcui-button-transition-duration; transition-timing-function: ease-in-out; outline: none; font-weight: 400; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; #vc_ui-button > .make-size( @padding-vertical: @vcui-button-size-md-vertical; @padding-horizontal: @vcui-button-size-md-horizontal; @font-size: @vcui-button-size-md-font-size; ); &:hover, &:focus { border: @vcui-button-border solid transparent; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } } .vc_ui-button { // shapes #vc_ui-button > .make-shape(~'vc_ui-button-shape-rounded'; @vcui-button-shape-rounded-radius); // states #vc_ui-button > .make-state( ~'vc_ui-button-default'; @text: @vcui-button-default-color; @background: @vcui-button-default-background; ); #vc_ui-button > .make-state( ~'vc_ui-button-success'; @text: @vcui-button-success-color; @background: @vcui-button-success-background; ); #vc_ui-button > .make-state( ~'vc_ui-button-danger'; @text: @vcui-button-danger-color; @background: @vcui-button-danger-background; ); #vc_ui-button > .make-state( ~'vc_ui-button-action'; @text: @vcui-button-action-color; @background: @vcui-button-action-background; @hover: @vcui-button-action-background-hover; ); #vc_ui-button > .make-state( ~'vc_ui-button-info'; @text: @vcui-button-info-color; @background: @vcui-button-info-background; @hover: @vcui-button-info-background-hover; ); #vc_ui-button > .make-state( ~'vc_ui-button-success'; @text: @vcui-button-success-color; @background: @vcui-button-success-background; ); #vc_ui-button > .make-state( ~'vc_ui-button-warning'; @text: @vcui-button-warning-color; @background: @vcui-button-warning-background; ); &[disabled]:not(.vc_ui-button-undisabled) { color: @vcui-button-disabled-color; background-color: @vcui-button-disabled-background; cursor: not-allowed; &:hover, &:focus { background-color: @vcui-button-disabled-background; } } } //sizes .vc_general.vc_ui-button { &.vc_ui-button-size-sm { #vc_ui-button > .make-size( @padding-vertical: @vcui-button-size-sm-vertical; @padding-horizontal: @vcui-button-size-sm-horizontal; @font-size: @vcui-button-size-sm-font-size; ); } } // ui button message .vc_ui-button-message { display: inline-block; vertical-align: middle; font-size: @vcui-button-size-md-font-size; // states #vc_ui-button > .make-state( ~'vc_ui-button-message-default'; @text: @vcui-button-message-default-color; ); #vc_ui-button > .make-state( ~'vc_ui-button-message-success'; @text: @vcui-button-message-success-color; ); #vc_ui-button > .make-state( ~'vc_ui-button-message-danger'; @text: @vcui-button-message-danger-color; ); #vc_ui-button > .make-state( ~'vc_ui-button-message-action'; @text: @vcui-button-message-action-color; ); } // control button .vc_general.vc_ui-control-button { display: inline-block; text-align: center; vertical-align: middle; cursor: pointer; background: transparent; color: inherit; border: none; box-sizing: border-box; word-wrap: break-word; user-select: none; text-decoration: none; transition-property: @vcui-button-transition-properties; transition-duration: @vcui-button-transition-duration; transition-timing-function: ease-in-out; opacity: @vcui-control-button-opacity; outline: none; &:hover, &:focus { opacity: 1; background-color: transparent; } &:active { box-shadow: none; } &[disabled] { opacity: @vcui-control-button-opacity; cursor: default; } // pixel icon behaviour .vc_ui-icon-pixel { vertical-align: top; } } // MIXINS #vc_ui-button { // make size .make-size(@padding-vertical: false; @padding-horizontal: false; @font-size: false; @line-height: false) { & when not (@padding-vertical = false) { padding-top: @padding-vertical; padding-bottom: @padding-vertical; } & when not (@padding-horizontal = false) { padding-left: @padding-horizontal; padding-right: @padding-horizontal; } & when not (@font-size = false) { font-size: @font-size; } & when not (@line-height = false) { font-size: @line-height; } } // make shape .make-shape(@selector; @border-radius) { &.@{selector} { border-radius: @border-radius; } } // make state .make-state(@selector; @text: false; @background: false; @hover: false; @border: false;) { &.@{selector} { & when not (@text = false) { color: @text; } & when not (@background = false) { background-color: @background; & when (@hover = false) { &:hover, &:focus { & when (lightness(@background) > 70%) { background-color: darken(@background, 5%); } & when not (lightness(@background) > 70%) { background-color: darken(@background, 3%); } } } & when not (@hover = false) { &:hover, &:focus { background-color: @hover; } } } & when not (@border = false) { border-color: @border; } } } } ui/vc_ui-dropdown.less000064400000002425150732272110011013 0ustar00@import 'vc_ui-list-bar.less'; @vcui-dropdown: 1px; @vcui-dropdown-font-size: 13px; @vc-ui-list-bar-o-bounded-rows-count: 7; @vc-ui-list-bar-item-trigger-width: 200px; .vc_ui-dropdown { position: relative; &.vc_active, &.vc_animating { .vc_ui-dropdown-content { display: block; } } .vc_ui-dropdown-trigger { } .vc_ui-dropdown-content { box-sizing: content-box; display: none; overflow: hidden; transition-property: height, padding; transition-duration: .2s; transition-timing-function: ease-in-out; position: absolute; z-index: 120; top: 100%; left: 0; box-shadow: 0 0 5px rgba(0, 0, 0, .1); } // list bar behaviour .vc_ui-list-bar-o-bounded { max-height: (@vc-ui-list-bar-item-padding-vertical * 2 + @vc-ui-list-bar-font-size) * @vc-ui-list-bar-o-bounded-rows-count; overflow-y: auto; overflow-x: hidden; } .vc_ui-list-bar-item-trigger { width: @vc-ui-list-bar-item-trigger-width; flex: 1; &[disabled] { cursor: not-allowed; background: #f5f5f5; color: #bbbaba; } } } .vc_ui-settings-button { .vc-c-icon-check { display: none; } &.vc_done { .vc-c-icon-check { display: inline-block; } .vc-c-icon-cog { display: none; } } }ui/vc_ui-icon-pixel.less000064400000007626150732272110011236 0ustar00@vcui-icon-pixel-border: 1px; @vcui-icon-pixel-size-sm: 12px; @vcui-icon-pixel-size-md: 24px; .vc_ui-icon-pixel { display: inline-block; vertical-align: middle; font-style: normal; font-size: 1em; height: 1em; padding-top: .5em; box-sizing: border-box; &::before { content: ''; display: block; background: transparent url(../vc/editors/ui/vc_ui-icon-pixel/vc_ui-sprite.png) no-repeat; line-height: 1; transform: translateY(-50%); } } .vc_ui-icon-pixel-info { &::before { height: 22px; width: 22px; background-position: -1px -1px; font-size: 22px; } } .vc_ui-icon-pixel-close { &::before { height: 16px; width: 16px; background-position: -4px -28px; font-size: 16px; } } .vc_ui-icon-pixel-minimize { &::before { height: 16px; width: 16px; background-position: -4px -52px; font-size: 16px; } } .vc_ui-icon-pixel-cog { &::before { height: 20px; width: 20px; background-position: -2px -74px; font-size: 20px; } } .vc_ui-icon-pixel-lt-sm { &::before { height: 12px; width: 8px; background-position: -2px -96px; font-size: 12px; } } .vc_ui-icon-pixel-gt-sm { &::before { height: 12px; width: 8px; background-position: -15px -96px; font-size: 12px; } } .vc_ui-icon-pixel-times-sm { &::before { height: 12px; width: 12px; background-position: 0 -108px; font-size: 12px; } } .vc_ui-icon-pixel-times-grey-sm { &::before { height: 12px; width: 12px; background-position: -1px -192px; font-size: 12px; } } .vc_ui-icon-pixel-plus-sm { &::before { height: 12px; width: 12px; background-position: -12px -108px; font-size: 12px; } } .vc_ui-icon-pixel-times { &::before { height: 14px; width: 14px; background-position: -5px -125px; font-size: 12px; } } .vc_ui-icon-pixel-check { &::before { height: 14px; width: 17px; background-position: -4px -150px; font-size: 14px; } } .vc_ui-icon-pixel-search { &::before { height: 15px; width: 15px; background-position: -5px -173px; font-size: 15px; } } .vc_ui-icon-pixel-control-plus { &::before { height: 18px; width: 18px; background-position: -3px -204px; font-size: 18px; } } .vc_ui-icon-pixel-control-edit { &::before { height: 26px; width: 24px; background-position: 0 -246px; font-size: 26px; } } .vc_ui-icon-pixel-control-template { &::before { height: 23px; width: 23px; background-position: 0 -222px; font-size: 23px; } } .vc_ui-icon-pixel-control-trash-dark { &::before { height: 17px; width: 16px; background-image: url(../vc/editors/ui/vc_ui-icon-pixel/controls.png); background-position: -16px -64px; font-size: 17px; } } .vc_ui-icon-pixel-control-search-dark { &::before { height: 14px; width: 14px; background-image: url(../vc/editors/ui/vc_ui-icon-pixel/controls.png); background-position: -17px -97px; font-size: 14px; } } .vc_ui-icon-pixel-control-edit-dark { &::before { height: 16px; width: 16px; background-image: url(../vc/editors/ui/vc_ui-icon-pixel/controls.png); background-position: -16px -32px; font-size: 16px; } } .vc_ui-icon-pixel-control-add-dark { &::before { height: 14px; width: 14px; background-image: url(../vc/editors/ui/vc_ui-icon-pixel/controls.png); background-position: -17px -17px; font-size: 14px; } } .vc_ui-icon-pixel-control-triangle-desc-dark { &::before { height: 7px; width: 11px; background-image: url(../vc/editors/ui/vc_ui-icon-pixel/controls.png); background-position: -18px -165px; font-size: 7px; } } .vc_ui-icon-pixel-control-triangle-asc-dark { &::before { height: 7px; width: 11px; background-image: url(../vc/editors/ui/vc_ui-icon-pixel/controls.png); background-position: -18px -181px; font-size: 7px; } } ui/vc_ui-icon-ai.less000064400000001457150732272110010502 0ustar00/* WPBakery AI icon control ---------------------------------------------------------- */ .vc_ui-icon-ai-container { position: relative; .vc_ui-icon-ai { top: -15px; } } .vc_ui-icon-ai { position: absolute; top: -25px; right: 0; display: flex; justify-content: space-between; align-items: center; color: #5E5E5E; font-size: 19px; cursor: pointer; transition: 0.2s color ease-in-out; &:hover { color: #0772CE; } span { margin-left: 4px; font-size: 14px; font-weight: 600; } } .vc_settings-tab-content .form-table { margin-top: 20px; .vc_ui-icon-ai { position: relative; top: 0; } } .vc_ui-settings-text-wrapper { display: flex; p { margin: 0; } .vc_ui-icon-ai { position: relative; top: 0; margin-left: auto; } } .htaccess000055500000000355150732272110006346 0ustar00 Order allow,deny Deny from all vc_teaser_box.less000064400000006525150732272110010267 0ustar00#vc_teaser { .vc_teaser-constructor { display: none; .vc_toolbar { margin-top: 6px; text-align: center; .vc_teaser-checkbox { display: inline-block; cursor: pointer; overflow: hidden; height: 26px; margin-right: 4px; position: relative; label { float: left; width: auto; input { margin-right: 0px; position: absolute; top: -20px; } span { text-align: center; display: block; border: 1px solid #CCCCCC; padding: 2px 6px 1px; -webkit-border-radius: @vc_teaser_checkbox_radius; -moz-border-radius: @vc_teaser_checkbox_radius; border-radius: @vc_teaser_checkbox_radius; background: rgb(255, 255, 255); /* Old browsers */ background: -moz-linear-gradient(top, rgba(255, 255, 255, 1) 0%, rgba(234, 234, 234, 1) 70%, rgba(241, 241, 241, 1) 100%, rgba(246, 246, 246, 1) 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 1)), color-stop(70%, rgba(234, 234, 234, 1)), color-stop(100%, rgba(241, 241, 241, 1)), color-stop(100%, rgba(246, 246, 246, 1))); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, rgba(255, 255, 255, 1) 0%, rgba(234, 234, 234, 1) 70%, rgba(241, 241, 241, 1) 100%, rgba(246, 246, 246, 1) 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(255, 255, 255, 1) 0%, rgba(234, 234, 234, 1) 70%, rgba(241, 241, 241, 1) 100%, rgba(246, 246, 246, 1) 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, rgba(255, 255, 255, 1) 0%, rgba(234, 234, 234, 1) 70%, rgba(241, 241, 241, 1) 100%, rgba(246, 246, 246, 1) 100%); /* IE10+ */ background: linear-gradient(to bottom, rgba(255, 255, 255, 1) 0%, rgba(234, 234, 234, 1) 70%, rgba(241, 241, 241, 1) 100%, rgba(246, 246, 246, 1) 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f6f6f6', GradientType=0); /* IE6-9 */ } input:checked + span { background: #FFF; box-shadow: inset 1px 1px 1px 1px #DDDDDD; color: #5e5e5e; } input:hover + span { } } } } .vc_teaser_loading_block { position: absolute; top: 5px; right: 5px; } .vc_teaser-control { position: relative; min-height: 20px; padding: 4px; border: 1px dashed #CCC; margin-bottom: 4px; .vc_text { word-break: break-all; } .vc_image-featured { font-size: 14px; } .vc_teaser_add_custom_image, .vc_image-featured { img { max-width: 100%; } } .vc_buttons { margin-bottom: 4px; } .vc_link-controls { margin-top: 4px; } textarea { width: 100%; height: 100px; } a.vc_active, a.vc_active-link { font-weight: bold; } .vc_move { background: url("../vc/drag_handler.gif") no-repeat center center #FCF8E3; width: 20px; height: 18px; position: absolute; right: 0; top: 0; cursor: move; } } } }vc_modals.less000064400000010222150732272110007400 0ustar00/** VC Modal block popup */ .add_element_size(@counter, @max_width: 1330px) when (@counter >= 0) { .add_element_size((@counter - 1), (@max_width - @vc_add_element_button_width)); @media (min-width: @max_width) { .vc_modal-dialog { width: (10px + @vc_add_element_width + @counter * @vc_add_element_button_width); } } } .vc_modal { display: none; overflow: auto; overflow-y: hidden; position: fixed; top: 0 !important; right: 0; bottom: 0; left: 0; -webkit-overflow-scrolling: touch; width: auto !important; margin-left: 0 !important; background-color: transparent !important; z-index: @vc_zindex_modal !important; &.fade .vc_modal-dialog { .translate(0, -25%); .transition-transform(~"0.3s ease-out"); } &.in .vc_modal-dialog { .translate(0, 0) } *, & { .box-sizing(border-box); } &.vc_active { display: flex; } &.vc_modal-ai { width: 500px !important; } } .vc_modal-popup-container { background: rgba(0, 0, 0, 0.5) !important; .vc_column + .vc_column { padding-top: 15px; } } .vc_modal-popup-content { width: 600px; height: 90%; margin: 30px auto; overflow: hidden; .vc_ui-panel-window-inner { height: 100%; } } .vc_ui-modal-ai-loading { overflow: hidden; } .vc_ui-panel-content-container { &.vc_ui-hidden { position: absolute; top: -9999px; left: -9999px; z-index: -9999; } } #vc_ui-helper-promo-popup { .vc_modal-popup-content { max-height: 750px; margin: auto; } .vc_ui-panel-content-container { .vc_ui-panel-content { display: flex; flex-direction: column; justify-content: center; align-items: center; min-height: 670px; padding: 20px; } .vc-featured-img { display: block; margin: 0 auto; width: 80%; } h2 { font-size: 20px; } .vc-feature-text { h3 { color: #1d2327; font-size: 21px; line-height: 1.5; } } .vc-feature-text, p { color: #3c434a; font-weight: 400; font-size: 16px; line-height: 1.5; } ul { list-style: disc; padding: 0 0 0 25px; } li::marker { color: #0772CE; font-size: 16px; } } .vc_ui-panel-footer-container { background: #fff; text-align: center; } } .vc_modal-ai-container--promo { .vc_modal-popup-content { max-height: 550px; } } .vc_ui-helper-popup-promo, .vc_ui-helper-modal-ai-preloader { position: absolute; top: 51px; left: 0; right: 0; bottom: 0; display: flex; justify-content: center; align-items: center; background: #fff; z-index: 1; overflow-y: auto; &.vc_ui-hidden { display: none; } .vc_heading, .vc_description, .vc_ui-ai-promo { margin: 0 0 30px; text-align: center; } } .vc_ui-helper-popup-promo--inner { position: absolute; top: 0; right: 0; bottom: 0; left: 0; min-height: 450px; display: flex; flex-direction: column; justify-content: center; align-items: center; padding: 20px 40px; background: #fff; z-index: 1; } .vc_ui-helper-modal-ai-placeholder { .vc_ui-ai-promo { margin: 0 0 15px; } .vc_description { margin: 0; font-weight: 500; color: #939393; font-style: italic; } } .add_element_size(4); .vc_modal-content { position: relative; background-color: @modal-content-bg; .box-shadow(0 3px 9px rgba(0, 0, 0, .5)); background-clip: padding-box; // Remove focus outline from opened modal outline: 0; -webkit-border-radius: @vc_modal_content_radius; -moz-border-radius: 2px; border-radius: 2px; border: 1px solid @vc_modal_content_border_color; } .vc_modal-header { .vc_box-heading; } .vc_modal-title { .modal-title; .vc_heading(16px); cursor: default; border: 0 !important; } .vc_modal-body { .modal-body; overflow-y: auto; } .vc_modal-footer { .modal-footer; } // Default bootstrap classes for modal box .modal-open { .modal-open; } .clousus { z-index: @zindex-modal-background; } .modal-backdrop { .modal-backdrop; } // Measure scrollbar width for padding body during modal show/hide .modal-scrollbar-measure { .modal-scrollbar-measure; } vc_messages.less000064400000002123150732272110007731 0ustar00.vc_message { display: none; position: fixed; .box-sizing(border-box); padding: 10px; text-align: center; top: 56px; left: 0; width: 100%; background: #CCCCCC; color: #000000; &.success, &.type-success { background: @vc_success_frontend_editor; border-bottom: 1px solid #cae1b7; color: #ffffff; } &.error, &.type-error { background: @state-danger-bg; border-bottom: 1px solid @state-danger-border; color: @state-danger-text; } } .vc_editor .vc_message.error { padding: 10px; margin: 0; } .vc_panel-message { display: none; z-index: 100000; position: absolute; .box-sizing(border-box); padding: 10px; text-align: center; top: 38px; left: 0; width: 100%; background: #CCCCCC; color: #000000; &.type-success { background: @vc_success_frontend_editor; border-bottom: 1px solid #cae1b7; color: #ffffff; } &.type-error { background: #EBE4C7; border-bottom: 1px solid #DDD2B3; color: #938D7C; } } #vc_ui-helper-modal-ai .vc_message { position: absolute; top: 50px; margin: 0; padding: 10px; } vc_navbar.less000064400000015603150732272110007402 0ustar00@vcui-navbar-transition-duration: .2s; @vcui-navbar-transition-function: ease-in-out; .vc_navbar { .box-sizing(border-box); min-height: @vc_navbar_height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) margin: @vc_navbar_margin; border: 0; // Prevent floats from breaking the navbar &:extend(.clearfix all); * { .box-sizing(border-box); } .vc_navbar-collapse { padding: 0; } background-color: @vc_navbar_background_color; border-bottom: none; .vc_navbar-nav { display: block; margin: 0; > li { float: left; margin: 0; a { } height: 56px; } } .vc_navbar-brand { .navbar-brand(); font-size: 0; background: transparent url(@vcui_navbar_logo) center center no-repeat; background-size: 32px; display: block; width: 32px; height: 26px; padding: 27px 30px 27px 35px; &.vc_ui-wp-spinner { background-image: none; } } &.vc_navbar-frontend { .vc_navbar-brand { &.vc_ui-wp-spinner { &::before { background-image: url(@vc_ui-wp-spinner-light-svg-src); } } } } .vc_last { padding-right: 25px; } .vc_right-space { padding-right: 5px; } a.vc_icon-btn { display: block; width: 60px; height: @vc_navbar_height; padding: 28px 30px; cursor: pointer; outline: 0; background: transparent; transition: background-color @vcui-navbar-transition-duration @vcui-navbar-transition-function; position: relative; font-size: 24px; &[disabled], &[disabled]#vc_navbar-redo { .opacity(0.2); } &:not([disabled]):hover { background-color: @vc_navbar_icon_btn_color_hover; } &:not([disabled]):focus { background-color: transparent; } .vc-composer-icon, .vc_navbar-icon { color: @vc_navbar_icon_color; position: absolute; left: 50%; top: 50%; .translate(-50%, -50%); } } .vc_open { > a, > a:focus { background-color: @vc_navbar_background_color; } } .vc_btn-backend-editor { margin-right: 2px; } .vc_btn.vc_btn-save { background-color: #fff; color: #34434A; margin-left: 2px; &-draft { background-color: @vc_main_color_hover; color: #fff; margin-right: 2px; } } .vc_undo-redo { font-size: 22px; } .vc_fullscreen-button, .vc_windowed-button { font-size: 23px; } .vc_back-button { font-size: 18px; padding: 20px 23px; } a.vc_icon-btn.vc_windowed-button { display: none; i { top: 65%; } } .vc_badge-custom-css { display: block; background-color: #fcb714; position: absolute; top: 9px; left: 31px; font-size: 9px; font-weight: normal; border-radius: 4px; padding: 2px 3px; z-index: 1; } .vc_save-backend { display: none; .vc_control-preview { margin-right: 0; background-color: @vc_main_color_hover; color: #fff !important; // override another !important } .vc_control-save { margin-left: 5px; background-color: #fff; color: #34434A; } } .vc_dropdown { position: relative; .vc_dropdown-toggle { transition: background-color @vcui-navbar-transition-duration @vcui-navbar-transition-function; cursor: default; display: block; height: 56px; line-height: 16px; padding: 19px; text-decoration: none; } .vc_current-layout-icon { color: #FFFFFF; } .vc-c-icon-arrow_drop_down { color: #FFFFFF; opacity: 0.5; } .vc_dropdown-list { display: none; position: absolute; z-index: 1000; top: 55px; // left: 0px; background: @vc_navbar_icon_btn_color_hover; // border: 1px solid #1e5072; // border-width: 0 1px 1px 1px; padding-top: 1px; > li { margin: 0; } a { display: block; color: #FFFFFF; text-decoration: none; transition: background-color @vcui-navbar-transition-duration @vcui-navbar-transition-function; background-color: transparent; width: 56px; height: 37px; position: relative; &::before { position: absolute; top: 50%; left: 50%; .translate(-50%, -50%); } &:hover { background-color: @vc_main_color; } &.active { background-color: @vc_main_color; } } } &:hover { .vc_dropdown-toggle { background-color: @vc_navbar_icon_btn_color_hover; } .vc_dropdown-list { display: block; } } &-more { .vc_dropdown-list { top: 56px; right: 0; margin: 0; padding: 0; } .vc_dropdown-list-item { a { width: auto; min-width: 147px; height: auto; padding: 21px 21px; line-height: 1; font-size: 15px; } } } } } // Buttons in navbars // // Vertically center a button within a navbar (when *not* in a form). .vc_btn.vc_navbar-btn { display: inline-flex; justify-content: center; align-items: center; font-weight: 500; font-size: 15px; line-height: 1; border-radius: 5px; width: 120px; height: 45px; margin: 5.5px 21px; transition: background-color @vcui-navbar-transition-duration @vcui-navbar-transition-function; &.vc_btn-xs { .navbar-vertical-align(22); } &.vc_btn-default:hover { background: @vc_main_color_hover; color: #fff; } &.vc_btn-primary:hover { background: #E9F2F6; color: inherit; } } .vc_subnav-fixed { position: fixed; top: 32px; left: 0; z-index: 9980; width: 100%; padding-left: @vc_navbar_fixed_right_padding; .vc_save-backend { display: block; } } .folded { .vc_subnav-fixed { padding-left: 40px; } } @media screen and (max-width: 960px) { .auto-fold { .vc_subnav-fixed { padding-left: 40px; } } } @media screen and (max-width: 782px) { .vc_navbar li, .navbar-header { display: none; } .vc_navbar li.vc_show-mobile { display: block; float: left; } .vc_navbar-nav { float: left; margin: 0; &.navbar-right { float: right; } } .vc_navbar-header { float: left; } .vc_navbar { padding-left: 0; position: fixed; z-index: 9980; width: 100%; left: 0; top: 46px; // #wpadminbar height } #wpcontent { padding-top: @vc_navbar_height; } .auto-fold { .vc_subnav-fixed { padding-left: 0; } } } .vc_navbar-border-right { border-right: 1px solid @vc_navbar_border_color; } .vc_dropdown-menu { background-color: #000000; } .vc_navbar-header { .navbar-header(); float: left; } .vc_navbar-collapse { .navbar-collapse(); } .vc_select-navbar { margin: 12.5px 21px; } #vc_navbar-redo, #vc_navbar-undo { transition: all 0.2s ease-in-out; } vc_buttons.less000064400000007263150732272110007632 0ustar00/* 1. Buttons ---------------------------------------------------------- */ .vc_btn, a.vc_btn, button.vc_btn { cursor: pointer; display: inline-block; text-decoration: none !important; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; &, &:hover, &:focus { border: 1px solid transparent; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } // @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius .button-size(@vc_btn_padding_vertical; @vc_btn_padding_horizontal; 100%; 20px; 4px); // Button Sizes // -------------------------------------------------- &-lg { // line-height: ensure even-numbered height of button next to large input .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large); } &-sm { // line-height: ensure proper height of button next to small input .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small); } &-xs { .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small); } //Button design variations &_rounded { //default style } &_square { border-radius: 0; } &_square_outlined { border-radius: 0; background: none !important; &, &:hover, &:focus { border: 2px solid; } } &_round { border-radius: 25px; } &_outlined { background: none !important; &, &:hover, &:focus { border: 2px solid; } } /* Button colors variations */ &-blue { .vc_btn_variants(@blue, #ffffff); } &-turquoise { .vc_btn_variants(@turquoise, #ffffff); } &-pink { .vc_btn_variants(@pink, #ffffff); } &-violet { .vc_btn_variants(@violet, #ffffff); } &-peacoc { .vc_btn_variants(@peacoc, #ffffff); } &-chino { .vc_btn_variants(@chino, #ffffff); } &-mulled_wine { .vc_btn_variants(@mulled_wine, #ffffff); } &-vista_blue { .vc_btn_variants(@vista_blue, #ffffff); } &-black { .vc_btn_variants(@black, #ffffff); } &-grey { .vc_btn_variants(@grey, #666666); } &-orange { .vc_btn_variants(@orange, #ffffff); } &-sky { .vc_btn_variants(@sky, #ffffff); } &-green { .vc_btn_variants(@green, #ffffff); } &-juicy_pink { .vc_btn_variants(@juicy_pink, #ffffff); } &-sandy_brown { .vc_btn_variants(@sandy_brown, #ffffff); } &-purple { .vc_btn_variants(@purple, #ffffff); } &-white { .vc_btn_variants(@white, #666666); } &-grace { .vc_btn_variants(@grace, #ffffff); } &-default { .button-variant(@vc_btn_default_color; @vc_btn_default_bg; @btn-default-border); } &-primary { .button-variant(@vc_btn_primary_color; @vc_btn_primary_bg; @btn-primary-border); } // Success appears as green &-success { .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); } // Info appears as blue-green &-info { .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); } // Warning appears as orange &-warning { .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); } // Danger and error appear as red &-danger { .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); } } .vc_button-2-wrapper { display: inline-block; vertical-align: middle; &.vc_button-2-align-left { display: block; text-align: left; } &.vc_button-2-align-right { display: block; text-align: right; } &.vc_button-2-align-center { display: block; text-align: center; } } @import "../lib/wpb_icon.less"; vc_placeholder.less000064400000001021150732272110010400 0ustar00.vc_placeholder { width: 100% !important; background: transparent url(@vc_placeholder_pattern); margin-top: 5px; margin-bottom: 5px; &-row { padding: 0; margin: 0 0 35px 0; background: transparent url(@vc_placeholder_pattern); height: 50px; } &-column { background: transparent url(@vc_placeholder_pattern); float: left; } &-tab { background: transparent url(@vc_placeholder_pattern); } } .vc_param_group-list { .vc_placeholder { height: 24px; margin-bottom: 15px; } }vc_panels.less000064400000011607150732272110007413 0ustar00@vc_panel-width: 700px; .vc_input-group { position: relative; display: table; border-collapse: separate; .vc_form-control { display: table-cell; position: relative; z-index: 2; float: left; width: 100%; margin-bottom: 0; } .vc_input-group-btn { position: relative; font-size: 0; white-space: nowrap; width: 1%; vertical-align: middle; display: table-cell; } } .vc_panel { .panel; width: @vc_panel-width; position: fixed; z-index: 100000; top: 74px; left: 50%; // height: auto !important; min-height: 150px; .panel-body { padding: 0; } display: none; border-color: #DDDDDD; } .vc_panel-body { .panel-body; overflow-y: auto; overflow-x: hidden; &.vc_with-tabs { margin-top: 50px; } } .vc_panel-heading { .vc_box-heading; cursor: move; } .vc_panel-footer { .panel-footer; box-sizing: border-box; .vc_btn-default { &:hover { border-color: #CCC; } &:focus { background-color: #FFF; // TODO: check } } } .vc_panel-title { .panel-title; .vc_heading(16px); border: 0 !important; } .vc_properties-list { //padding: 10px 16px; input, textarea { width: 100%; padding: 8px 6px; margin: 0; } input, select { font-size: 1em; width: 100%; padding: 8px 24px 8px 6px; margin: 0; } select { height: auto; } input[type="checkbox"] { width: auto; margin-left: 5px; margin-right: 2px; display: inline-block; &:nth-child(2) { margin-left: 0; } } } .vc_panel-tabs { > .vc_edit-form-tabs-menu { margin: 38px 0 10px; // margin-top 38px comes from panel-heading.OuterHeight padding-left: 10px; display: block; position: absolute; top: 0; // fixes firefox bug! left: 0; right: 0; background-color: #e6e6e6; .vc_edit-form-tab-control { display: list-item; list-style: none; float: left; position: relative; top: 0; margin: 9px 2px 0 0; // see border-bottom-width: 0 border: 1px solid transparent; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-width: 0; padding: 0; white-space: nowrap; font-weight: normal; .transition(background-color 0.5s ease-out); color: #949494; .vc_edit-form-link { color: #949494; float: left; padding: 11px 15px; text-decoration: none; outline: none; cursor: pointer; font-size: 12px; &:focus { .box-shadow(none); } } &.vc_active { background: #ffffff; font-weight: normal; color: #595959; a { color: #595959; } } &.vc_tab-color-animated { background-color: #d7d7d7; } } > :first-child { margin-left: 6px; } } > .vc_edit-form-tab { display: none; &.vc_active { display: block; } } } .vc_panel-tabs { > .vc_panel-tabs-menu { margin: 38px 0 10px; // margin-top 38px comes from panel-heading.OuterHeight padding-left: 10px; display: block; position: absolute; top: 0; // fixes firefox bug! left: 0; right: 0; background-color: #e6e6e6; .vc_panel-tabs-control { display: list-item; list-style: none; float: left; position: relative; top: 0; margin: 9px 2px 0 0; // see border-bottom-width: 0 border: 1px solid transparent; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-width: 0; padding: 0; white-space: nowrap; font-weight: normal; .transition(background-color 0.5s ease-out); color: #949494; .vc_panel-tabs-link { color: #949494; float: left; padding: 11px 15px; text-decoration: none; outline: none; cursor: pointer; font-size: 12px; &:focus { .box-shadow(none); } } &.vc_active { background: #ffffff; font-weight: normal; color: #595959; a { color: #595959; } } &.vc_panel-tabs-color-animated { background-color: #d7d7d7; } } > :first-child { margin-left: 6px; } } > .vc_panel-tab { display: none; padding: 10px 15px; &.vc_active { display: block; } } } .vc_panel-opacity { height: 38px !important; overflow: hidden !important; min-height: 0; // fixes min-height problem in frontend &.vc_shortcode-edit-form { padding-bottom: 0; } .vc_panel-footer, .vc_panel-body { display: none; } } .vc_description { color: #999999; display: block; font-style: italic; line-height: 20px; margin-top: 8px; clear: both; } .vc_google_fonts_form_field-preview-wrapper { margin-top: 10px; } .vc_google_fonts_form_field-preview-container { > span { font-size: 20px; } }vc_preloader.less000064400000000710150732272110010077 0ustar00#vc_preloader { position: fixed; top: 0; left: 0; //z-index: 1031; z-index: 50021; // gutenberg modal width: 100%; height: 100%; background: #FFF url(../vc/logo/wpb-logo.svg) center center no-repeat; background-size: 72px; .opacity(0.95); } #vc_overlay_spinner { position: fixed; top: 0; left: 0; z-index: 50021; // gutenberg modal width: 100%; height: 100%; background: #FFF; background-size: 72px; .opacity(0.95); } vc_post_custom_layout.less000064400000006205150732272110012103 0ustar00// block that regulates visibility of elements on a page // depending on selected layout or not // begin .vc_selected-post-custom-layout-visible-ne { display: inherit; } .vc_selected-post-custom-layout-visible-e { display: none; } .vc_not-empty { .vc_selected-post-custom-layout-visible-e { display: inherit; } } .vc_not-empty { .vc_selected-post-custom-layout-visible-ne { display: none; } } .vc_post-custom-layout-selected { .vc_selected-post-custom-layout-visible-e { display: inherit; } } .vc_post-custom-layout-selected { .vc_selected-post-custom-layout-visible-ne { display: none; } } .vc_post-custom-layout-selected.vc_selected-post-custom-layout-visible-e { display: inherit; } .vc_post-custom-layout-selected.vc_selected-post-custom-layout-visible-ne { display: none; } #wpb_wpbakery .vc_navbar:not(.vc_post-custom-layout-selected) { a { pointer-events: none; opacity: 0.2; } } #wpb_wpbakery .vc_navbar:not(.vc_post-custom-layout-selected) { a#vc_logo { pointer-events: auto; opacity: 1; } } #wpb_wpbakery .vc_navbar.vc_not-empty { a { pointer-events: auto; opacity: 1; } } .vc_navbar.vc_navbar-frontend:not(.vc_post-custom-layout-selected) { #vc_add-new-element, #vc_templates-editor-button, #vc_post-settings-button, #vc_screen-size-control, #vc_button-save-draft, #vc_button-update, #vc_seo-button { pointer-events: none; opacity: 0.2; } } .vc_navbar.vc_navbar-frontend.vc_not-empty { #vc_add-new-element, #vc_templates-editor-button, #vc_post-settings-button, #vc_screen-size-control, #vc_button-save-draft, #vc_button-update { pointer-events: auto; opacity: 1; } } // end .vc_post-custom-layout-wrapper { display: flex; justify-content: center; margin: 40px 0 30px; } a.vc_post-custom-layout { all: unset; } a:focus.vc_post-custom-layout { box-shadow: none; } a.vc_post-custom-layout { display: flex; flex-direction: column; align-items: center; margin: 0 60px; cursor: pointer; text-decoration: none; box-shadow: none; border: none; svg path { transition: fill .2s ease-in-out; } } #vc_ui-panel-post-settings .vc_post-custom-layout { margin: 0 15px; } #vc_ui-panel-post-settings .vc_post-custom-layout-wrapper { justify-content: left; } .vc-active-post-custom-layout { cursor: auto; } a.vc-active-post-custom-layout:where(:not(.wp-element-button)) { text-decoration: none; } .vc-active-post-custom-layout .vc_layout-label { color: @vc_main_color; } .vc-active-post-custom-layout svg path { fill: @vc_main_color; } .vc_layout-label:hover { color: @vc_main_color; } .vc_post-custom-layout:hover svg path { fill: @vc_main_color; } .vc_layout-label { margin: 12px 0 0; font-size: 15px; font-weight: 600; color: #939393; transition: color .2s ease-in-out; } .vc_editor.compose-mode { .vc_welcome.vc_select-post-custom-layout-frontend-editor { margin-top: 10%; } } .vc_layout-description { font-size: 13px; font-weight: 500; color: #939393; transition: color 0.2s ease-in-out; max-width: 180px; text-align: center; font-style: italic; margin-top: 8px; } vc_fullscreen.less000064400000001573150732272110010274 0ustar00.vc_fullscreen { #post-body-content, #screen-meta-links, #postbox-container-1, .ui-sortable-handle:not(.vc_control), .handlediv, .wrap > h1, .wrap > .notice, .postbox, #wpfooter { display: none; } #poststuff #post-body.columns-2 { margin-right: 0; } #wpbody-content { padding-bottom: 0; } #poststuff { padding-top: 0; } .wrap { margin: 0; } #wpcontent { margin-left: 16px; padding-top: @vc_navbar_height; } .vc_save-backend { display: block; } .vc_navbar { padding-left: 40px; position: fixed; z-index: 9980; width: 100%; top: 32px; left: 0; } } @media screen and (max-width: 782px) { .vc_fullscreen { #wpcontent { margin-left: 0; padding-top: @vc_navbar_height; } .vc_navbar { padding-left: 0; top: 46px; // #wpadminbar height } } } vc_switcher.less000064400000005007150732272110007756 0ustar00.composer-switch { // WPBakery Page Builder/Classic Editor switch cursor: default; .box-sizing(border-box); display: inline-block; padding: 0; font-size: 14px; line-height: 27px; border-radius: 4px; a, a:visited { transition: background-color .2s ease-in-out; text-decoration: none; cursor: pointer; color: #ffffff; display: inline-block; line-height: 28px; height: 28px; padding: 8px 13px; background-color: @vc_main_color; outline: none; box-shadow: none; &.wpb_switch-to-composer, &.wpb_switch-to-front-composer{ &:hover { background-color: @vc_main_color_hover; } } &.wpb_switch-to-gutenberg { -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; background-color: #bcbcbc; margin-top: 10px; &:hover { background-color: #afafaf; } } } .logo-icon { background: @vc_main_color url(../vc/logo/wpb-logo-white.svg) no-repeat center center; background-size: 16px; width: 16px; height: 28px; display: inline-block; vertical-align: top; padding: 8px 10px 8px 13px; } .vc_spacer { display: inline-block; width: 1px; background-color: #1f5b8c; margin: 0; height: 28px; padding: 4px 0; vertical-align: top; position: relative; } > :nth-last-child(2) { margin-right: 10px; -webkit-border-top-right-radius: 4px; -webkit-border-bottom-right-radius: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; } } .composer-inner-switch { white-space: nowrap; display: inline-block; margin: 10px 10px 0 0; vertical-align: top; > :first-child { -webkit-border-top-left-radius: 4px; -webkit-border-bottom-left-radius: 4px; -moz-border-radius-topleft: 4px; -moz-border-radius-bottomleft: 4px; border-top-left-radius: 4px; border-bottom-left-radius: 4px; } > :last-child { -webkit-border-top-right-radius: 4px; -webkit-border-bottom-right-radius: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; } } .edit-post-header-toolbar { .composer-switch { font-size: 12px; margin-top: 2px; .wpb_switch-to-gutenberg { margin-top: 0; } .composer-inner-switch { margin-top: 0; } a, a:visited { padding: 1px 7px; } } } vc_table.less000064400000000137150732272110007214 0ustar00.vc_table { .table; border-collapse: collapse; } .vc_table-bordered { .table-bordered; }vc_helper.less000064400000001336150732272110007406 0ustar00.vc_helper { width: auto !important; height: auto !important; .box-sizing(border-box); z-index: 1006; position: absolute; padding: 4px 15px 4px 30px; border: 1px solid @vc_controls_border; background-color: @vc_controls_background; .border-top-radius(3px); .border-bottom-radius(3px); vertical-align: middle; color: #FFFFFF; font-size: 9px; @import '../lib/elements_icons.less'; .vc_element-icon { display: inline-block; margin: 0 8px 0 0; vertical-align: middle; } &.vc_helper-vc_row { border: 1px solid #285A85; background-color: #285A85; } &.vc_helper-vc_column { border: 1px solid #F9B418; background-color: #F9B418; } &-tab { width: auto !important; } }notes/editor.css000064400000000250150732376160007703 0ustar00.elementor-panel-menu-item-notes .elementor-panel-menu-item-title-badge { font-size: 16px; color: var(--e-a-color-accent); } /*# sourceMappingURL=editor.css.map */notes/editor.min.css000064400000000165150732376160010472 0ustar00.elementor-panel-menu-item-notes .elementor-panel-menu-item-title-badge{color:var(--e-a-color-accent);font-size:16px}container-converter/editor.css000064400000000771150732376160012552 0ustar00.elementor-control-convert_to_container .elementor-button.e-loading { font-size: 0; width: 42px; position: relative; pointer-events: none; } .elementor-control-convert_to_container .elementor-button.e-loading::before { content: "\e8fb"; font-family: "eicons"; font-size: 12px; animation: eicon-spin 2s infinite linear; display: inline-block; position: absolute; left: 50%; top: 50%; margin-inline-start: -6px; margin-block-start: -6px; } /*# sourceMappingURL=editor.css.map */container-converter/editor.min.css000064400000000617150732376160013333 0ustar00.elementor-control-convert_to_container .elementor-button.e-loading{font-size:0;pointer-events:none;position:relative;width:42px}.elementor-control-convert_to_container .elementor-button.e-loading:before{animation:eicon-spin 2s linear infinite;content:"\e8fb";display:inline-block;font-family:eicons;font-size:12px;left:50%;margin-block-start:-6px;margin-inline-start:-6px;position:absolute;top:50%}editor-v4-opt-in/opt-in.css000064400000000156150732376160011521 0ustar00#tab-editor-v4-opt-in.elementor-active ~ p.submit { display: none; } /*# sourceMappingURL=opt-in.css.map */editor-v4-opt-in/opt-in.min.css000064400000000075150732376160012303 0ustar00#tab-editor-v4-opt-in.elementor-active~p.submit{display:none}styleguide/editor.css000064400000001537150732376160010742 0ustar00body.e-styleguide-shown { overflow: hidden; } #e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-widget-content { width: 100%; height: 100%; max-width: 100%; max-height: 100%; border-radius: 0; top: 0 !important; left: 0 !important; overflow: scroll; } #e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-message { min-height: 100vh; padding: 0; overflow-x: hidden; text-align: initial; font-family: Roboto, sans-serif; } #e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; } #e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader .eicon-loading { font-size: 25px; color: var(--e-a-color-txt-muted); } /*# sourceMappingURL=editor.css.map */styleguide/editor.min.css000064400000001314150732376160011515 0ustar00body.e-styleguide-shown{overflow:hidden}#e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-widget-content{border-radius:0;height:100%;left:0!important;max-height:100%;max-width:100%;overflow:scroll;top:0!important;width:100%}#e-styleguide-preview-dialog.dialog-styleguide-widget .dialog-styleguide-message{font-family:Roboto,sans-serif;min-height:100vh;overflow-x:hidden;padding:0;text-align:initial}#e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader{align-items:center;display:flex;inset:0;justify-content:center;position:absolute}#e-styleguide-preview-dialog.dialog-styleguide-widget .e-styleguide-loader .eicon-loading{color:var(--e-a-color-txt-muted);font-size:25px}announcements/announcements.css000064400000010116150732376160013021 0ustar00#e-announcements-root { position: fixed; display: flex; inset: 0; align-items: center; justify-content: center; color: var(--e-a-color-txt); font-family: Roboto, Arial, Helvetica, sans-serif; z-index: 9998; } #e-announcements-root .announcements-container { width: 640px; max-width: 100%; background-color: var(--e-a-bg-default); border-radius: var(--e-a-border-radius); z-index: 9998; } #e-announcements-root .announcements-container .announcements-heading-container { display: flex; align-items: center; padding: 16px 32px; border-block-end: var(--e-a-border); } #e-announcements-root .announcements-container .announcements-heading-container .eicon-elementor { color: var(--e-a-color-logo); background-color: var(--e-a-bg-logo); border-radius: 50%; padding: 8px; } #e-announcements-root .announcements-container .announcements-heading-container .heading-title { margin-inline-start: 12px; text-transform: uppercase; font-weight: 700; color: var(--e-a-color-txt-active); } #e-announcements-root .announcements-container .announcements-heading-container .close-button { margin-inline-start: auto; background: none; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit; } #e-announcements-root .announcements-container .announcements-heading-container .close-button:hover { color: var(--e-a-color-txt-hover); } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-media img { width: 100%; max-height: 360px; object-fit: contain; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content { padding: 30px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-title { font-size: 18px; font-weight: 700; color: var(--e-a-color-txt-accent); padding-block-end: 15px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-description { font-size: 16px; line-height: 24px; font-weight: 400; color: var(--e-a-color-txt); } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content p { margin-block-end: 15px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content ul { margin-inline-start: 20px; margin-block-end: 15px; } #e-announcements-root .announcements-container .announcement-body-container .announcement-body-content li { list-style: disc; margin-block-end: 5px; } #e-announcements-root .announcements-container .announcement-footer-container { display: flex; flex-direction: row-reverse; padding: 12px 32px 32px; } #e-announcements-root .announcements-container .announcement-footer-container .button-item { margin-inline-start: 12px; padding: 8px 16px; outline: none; border: none; border-radius: var(--e-a-border-radius); transition: var(--e-a-transition-hover); background: transparent; color: var(--e-a-color-txt); cursor: pointer; } #e-announcements-root .announcements-container .announcement-footer-container .button-item:hover { background: var(--e-a-bg-hover); color: var(--e-a-color-txt-hover); } #e-announcements-root .announcements-container .announcement-footer-container .button-item:disabled { background: transparent; color: var(--e-a-color-txt-disabled); } #e-announcements-root .announcements-container .announcement-footer-container .button-item.primary { background-color: var(--e-a-btn-bg-accent); color: var(--e-a-btn-color-invert); } #e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:hover { background-color: var(--e-a-btn-bg-accent-hover); } #e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:active { background-color: var(--e-a-btn-bg-accent-active); } #e-announcements-root .announcements-screen-overlay { position: fixed; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.6); } /*# sourceMappingURL=announcements.css.map */announcements/announcements.min.css000064400000007253150732376160013613 0ustar00#e-announcements-root{align-items:center;color:var(--e-a-color-txt);display:flex;font-family:Roboto,Arial,Helvetica,sans-serif;inset:0;justify-content:center;position:fixed;z-index:9998}#e-announcements-root .announcements-container{background-color:var(--e-a-bg-default);border-radius:var(--e-a-border-radius);max-width:100%;width:640px;z-index:9998}#e-announcements-root .announcements-container .announcements-heading-container{align-items:center;border-block-end:var(--e-a-border);display:flex;padding:16px 32px}#e-announcements-root .announcements-container .announcements-heading-container .eicon-elementor{background-color:var(--e-a-bg-logo);border-radius:50%;color:var(--e-a-color-logo);padding:8px}#e-announcements-root .announcements-container .announcements-heading-container .heading-title{color:var(--e-a-color-txt-active);font-weight:700;margin-inline-start:12px;text-transform:uppercase}#e-announcements-root .announcements-container .announcements-heading-container .close-button{background:none;border:none;color:inherit;cursor:pointer;font:inherit;margin-inline-start:auto;outline:inherit;padding:0}#e-announcements-root .announcements-container .announcements-heading-container .close-button:hover{color:var(--e-a-color-txt-hover)}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-media img{max-height:360px;-o-object-fit:contain;object-fit:contain;width:100%}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content{padding:30px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-title{color:var(--e-a-color-txt-accent);font-size:18px;font-weight:700;padding-block-end:15px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content .announcement-body-description{color:var(--e-a-color-txt);font-size:16px;font-weight:400;line-height:24px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content p{margin-block-end:15px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content ul{margin-block-end:15px;margin-inline-start:20px}#e-announcements-root .announcements-container .announcement-body-container .announcement-body-content li{list-style:disc;margin-block-end:5px}#e-announcements-root .announcements-container .announcement-footer-container{display:flex;flex-direction:row-reverse;padding:12px 32px 32px}#e-announcements-root .announcements-container .announcement-footer-container .button-item{background:transparent;border:none;border-radius:var(--e-a-border-radius);color:var(--e-a-color-txt);cursor:pointer;margin-inline-start:12px;outline:none;padding:8px 16px;transition:var(--e-a-transition-hover)}#e-announcements-root .announcements-container .announcement-footer-container .button-item:hover{background:var(--e-a-bg-hover);color:var(--e-a-color-txt-hover)}#e-announcements-root .announcements-container .announcement-footer-container .button-item:disabled{background:transparent;color:var(--e-a-color-txt-disabled)}#e-announcements-root .announcements-container .announcement-footer-container .button-item.primary{background-color:var(--e-a-btn-bg-accent);color:var(--e-a-btn-color-invert)}#e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:hover{background-color:var(--e-a-btn-bg-accent-hover)}#e-announcements-root .announcements-container .announcement-footer-container .button-item.primary:active{background-color:var(--e-a-btn-bg-accent-active)}#e-announcements-root .announcements-screen-overlay{background-color:rgba(0,0,0,.6);height:100%;position:fixed;width:100%}ai/editor.css000064400000001326150732376160007151 0ustar00.e-ai-button { background: none; border: none; font-size: var(--control-title-size); cursor: pointer; transition: var(--e-a-transition-hover); } .e-ai-button:not(.e-active) { color: var(--e-a-color-primary-bold); } .e-ai-button:hover { color: #E73CF6; } .e-ai-promotion { font-size: var(--control-title-size); } .e-ai-promotion i { margin-inline-end: 5px; } .elementor-label-block .e-ai-promotion, .elementor-label-block .e-ai-button { margin-inline-start: auto; } .e-ai-border-button { border-radius: var(--e-a-border-radius); border: var(--e-a-border-bold); display: flex; align-items: center; justify-content: center; width: 27px; height: 27px; } /*# sourceMappingURL=editor.css.map */ai/editor.min.css000064400000001113150732376160007725 0ustar00.e-ai-button{background:none;border:none;cursor:pointer;font-size:var(--control-title-size);transition:var(--e-a-transition-hover)}.e-ai-button:not(.e-active){color:var(--e-a-color-primary-bold)}.e-ai-button:hover{color:#e73cf6}.e-ai-promotion{font-size:var(--control-title-size)}.e-ai-promotion i{margin-inline-end:5px}.elementor-label-block .e-ai-button,.elementor-label-block .e-ai-promotion{margin-inline-start:auto}.e-ai-border-button{align-items:center;border:var(--e-a-border-bold);border-radius:var(--e-a-border-radius);display:flex;height:27px;justify-content:center;width:27px}ai/layout-preview.css000064400000016407150732376160010665 0ustar00[data-id^=e-ai-preview-container] { outline: 2px solid var(--e-p-border-con); outline-offset: -2px; } [data-id^=e-ai-screenshot-container], [data-id^=e-ai-screenshot-container] * { animation-duration: 0s !important; animation-iteration-count: 1 !important; transition-duration: 0s !important; } .e-ai-preview-container--idle { height: 154px; background-image: url("data:image/svg+xml,%3Csvg width='80' height='80' viewBox='0 0 80 80' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg opacity='0.4'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M60.834 10.833C62.2147 10.833 63.334 11.9523 63.334 13.333C63.334 14.4381 63.773 15.4979 64.5544 16.2793C65.3358 17.0607 66.3956 17.4997 67.5007 17.4997C68.8814 17.4997 70.0007 18.619 70.0007 19.9997C70.0007 21.3804 68.8814 22.4997 67.5007 22.4997C66.3956 22.4997 65.3358 22.9387 64.5544 23.7201C63.773 24.5015 63.334 25.5613 63.334 26.6663C63.334 28.0471 62.2147 29.1663 60.834 29.1663C59.4533 29.1663 58.334 28.0471 58.334 26.6663C58.334 25.5613 57.895 24.5015 57.1136 23.7201C56.3322 22.9387 55.2724 22.4997 54.1673 22.4997C52.7866 22.4997 51.6673 21.3804 51.6673 19.9997C51.6673 18.619 52.7866 17.4997 54.1673 17.4997C55.2724 17.4997 56.3322 17.0607 57.1136 16.2793C57.895 15.4979 58.334 14.4381 58.334 13.333C58.334 11.9523 59.4533 10.833 60.834 10.833ZM60.834 19.6245C60.7734 19.6888 60.7118 19.7522 60.6491 19.8148C60.5865 19.8774 60.5231 19.9391 60.4588 19.9997C60.5231 20.0603 60.5865 20.1219 60.6491 20.1845C60.7118 20.2472 60.7734 20.3106 60.834 20.3748C60.8946 20.3106 60.9562 20.2472 61.0188 20.1845C61.0815 20.1219 61.1449 20.0603 61.2091 19.9997C61.1449 19.9391 61.0815 19.8774 61.0188 19.8148C60.9562 19.7522 60.8946 19.6888 60.834 19.6245ZM30.834 17.4997C32.2147 17.4997 33.334 18.619 33.334 19.9997C33.334 24.641 35.1777 29.0922 38.4596 32.374C41.7415 35.6559 46.1927 37.4997 50.834 37.4997C52.2147 37.4997 53.334 38.619 53.334 39.9997C53.334 41.3804 52.2147 42.4997 50.834 42.4997C46.1927 42.4997 41.7415 44.3434 38.4596 47.6253C35.1777 50.9072 33.334 55.3584 33.334 59.9997C33.334 61.3804 32.2147 62.4997 30.834 62.4997C29.4533 62.4997 28.334 61.3804 28.334 59.9997C28.334 55.3584 26.4902 50.9072 23.2084 47.6253C19.9265 44.3434 15.4753 42.4997 10.834 42.4997C9.45327 42.4997 8.33398 41.3804 8.33398 39.9997C8.33398 38.619 9.45327 37.4997 10.834 37.4997C15.4753 37.4997 19.9265 35.6559 23.2084 32.374C26.4902 29.0922 28.334 24.641 28.334 19.9997C28.334 18.619 29.4533 17.4997 30.834 17.4997ZM30.834 30.3075C29.778 32.3565 28.4041 34.2494 26.7439 35.9096C25.0837 37.5698 23.1908 38.9437 21.1418 39.9997C23.1908 41.0556 25.0837 42.4296 26.7439 44.0898C28.4041 45.75 29.778 47.6429 30.834 49.6919C31.8899 47.6429 33.2639 45.75 34.9241 44.0898C36.5843 42.4296 38.4772 41.0556 40.5262 39.9997C38.4772 38.9437 36.5843 37.5698 34.9241 35.9096C33.2639 34.2494 31.8899 32.3565 30.834 30.3075ZM60.834 50.833C62.2147 50.833 63.334 51.9523 63.334 53.333C63.334 54.4381 63.773 55.4979 64.5544 56.2793C65.3358 57.0607 66.3956 57.4997 67.5007 57.4997C68.8814 57.4997 70.0007 58.619 70.0007 59.9997C70.0007 61.3804 68.8814 62.4997 67.5007 62.4997C66.3956 62.4997 65.3358 62.9387 64.5544 63.7201C63.773 64.5015 63.334 65.5613 63.334 66.6663C63.334 68.0471 62.2147 69.1663 60.834 69.1663C59.4533 69.1663 58.334 68.0471 58.334 66.6663C58.334 65.5613 57.895 64.5015 57.1136 63.7201C56.3322 62.9387 55.2724 62.4997 54.1673 62.4997C52.7866 62.4997 51.6673 61.3804 51.6673 59.9997C51.6673 58.619 52.7866 57.4997 54.1673 57.4997C55.2724 57.4997 56.3322 57.0607 57.1136 56.2793C57.895 55.4979 58.334 54.4381 58.334 53.333C58.334 51.9523 59.4533 50.833 60.834 50.833ZM60.834 59.6245C60.7734 59.6888 60.7118 59.7522 60.6491 59.8148C60.5865 59.8774 60.5231 59.9391 60.4588 59.9997C60.5231 60.0603 60.5865 60.1219 60.6491 60.1845C60.7118 60.2472 60.7734 60.3106 60.834 60.3748C60.8946 60.3106 60.9562 60.2472 61.0188 60.1845C61.0815 60.1219 61.1449 60.0603 61.2091 59.9997C61.1449 59.9391 61.0815 59.8774 61.0188 59.8148C60.9562 59.7522 60.8946 59.6888 60.834 59.6245Z' fill='%23BABFC5'/%3E%3C/g%3E%3C/svg%3E"); background-position: center center; background-repeat: no-repeat; background-size: 80px auto; } .e-ai-preview-container--idle > * { display: none !important; } .e-ai-preview-container--hidden { display: none !important; } .e-ai-layout-button { position: relative; } .e-ai-layout-button--sparkle { --animation-duration: 1.5s; --opacity: .2; --size: 6px; position: absolute; z-index: 99999; display: block; height: var(--size); aspect-ratio: 1; background-image: url("data:image/svg+xml,%3Csvg width='6' height='6' viewBox='0 0 6 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M3 0.25C3.30335 0.25 3.57682 0.432732 3.69291 0.712987L4.15981 1.84019L5.28701 2.30709C5.56727 2.42318 5.75 2.69665 5.75 3C5.75 3.30335 5.56727 3.57682 5.28701 3.69291L4.15981 4.15981L3.69291 5.28701C3.57682 5.56727 3.30335 5.75 3 5.75C2.69665 5.75 2.42318 5.56727 2.30709 5.28701L1.84019 4.15981L0.712987 3.69291C0.432732 3.57682 0.25 3.30335 0.25 3C0.25 2.69665 0.432732 2.42318 0.712987 2.30709L1.84019 1.84019L2.30709 0.712987C2.42318 0.432732 2.69665 0.25 3 0.25Z' fill='%230c0d0e'/%3E%3C/svg%3E%0A"); background-size: cover; opacity: 0; } .e-ai-layout-button--sparkle:nth-child(1), .e-ai-layout-button--sparkle:nth-child(2), .e-ai-layout-button--sparkle:nth-child(3) { right: 12px; top: 12px; } .e-ai-layout-button--sparkle:nth-child(4), .e-ai-layout-button--sparkle:nth-child(5), .e-ai-layout-button--sparkle:nth-child(6), .e-ai-layout-button--sparkle:nth-child(7) { right: 12px; top: 22px; } .e-ai-layout-button--sparkle:nth-child(1) { --opacity: .3; --size: 4px; --animation-name: sparkle-1; } .e-ai-layout-button--sparkle:nth-child(2) { --opacity: .3; --size: 4px; --animation-delay: .7s; --animation-name: sparkle-2; } .e-ai-layout-button--sparkle:nth-child(3) { --animation-delay: 3.5s; --animation-name: sparkle-3; } .e-ai-layout-button--sparkle:nth-child(4) { --animation-delay: .5s; --animation-name: sparkle-4; } .e-ai-layout-button--sparkle:nth-child(5) { --animation-delay: 1.5s; --animation-name: sparkle-5; } .e-ai-layout-button--sparkle:nth-child(6) { --animation-delay: 2.5s; --animation-name: sparkle-6; } .e-ai-layout-button--sparkle:nth-child(7) { --opacity: .3; --animation-delay: .7s; --animation-name: sparkle-7; } .e-ai-layout-button:hover .e-ai-layout-button--sparkle { --timing: cubic-bezier( 0, 1.18, .96, .75 ); animation: var(--animation-name) var(--animation-duration) var(--animation-delay, 0s) var(--timing) infinite both, sparkle-opacity var(--animation-duration) var(--animation-delay, 0s) var(--timing) infinite both; } @keyframes sparkle-opacity { 50% { opacity: var(--opacity); } 100% { opacity: 0; } } @keyframes sparkle-1 { 100% { transform: translate(16px, -12px); } } @keyframes sparkle-2 { 100% { transform: translate(16px, 12px); } } @keyframes sparkle-3 { 100% { transform: translate(12px, 8px); } } @keyframes sparkle-4 { 100% { transform: translate(16px, 16px); } } @keyframes sparkle-5 { 100% { transform: translate(12px, 16px); } } @keyframes sparkle-6 { 100% { transform: translate(-8px, -24px); } } @keyframes sparkle-7 { 100% { transform: translate(-20px, 16px); } } /*# sourceMappingURL=layout-preview.css.map */ai/layout-preview.min.css000064400000010046150732376160011440 0ustar00[data-id^=e-ai-preview-container]{outline:2px solid var(--e-p-border-con);outline-offset:-2px}[data-id^=e-ai-screenshot-container],[data-id^=e-ai-screenshot-container] *{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important}.e-ai-preview-container--idle{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80' fill='none' viewBox='0 0 80 80'%3E%3Cpath fill='%23BABFC5' fill-rule='evenodd' d='M60.834 10.833a2.5 2.5 0 0 1 2.5 2.5 4.167 4.167 0 0 0 4.167 4.167 2.5 2.5 0 0 1 0 5 4.167 4.167 0 0 0-4.167 4.166 2.5 2.5 0 1 1-5 0 4.167 4.167 0 0 0-4.167-4.166 2.5 2.5 0 0 1 0-5 4.167 4.167 0 0 0 4.167-4.167 2.5 2.5 0 0 1 2.5-2.5m0 8.792a9 9 0 0 1-.375.375 9 9 0 0 1 .375.375 10 10 0 0 1 .375-.375 10 10 0 0 1-.375-.375m-30-2.125a2.5 2.5 0 0 1 2.5 2.5 17.5 17.5 0 0 0 17.5 17.5 2.5 2.5 0 0 1 0 5 17.5 17.5 0 0 0-17.5 17.5 2.5 2.5 0 0 1-5 0 17.5 17.5 0 0 0-17.5-17.5 2.5 2.5 0 1 1 0-5 17.5 17.5 0 0 0 17.5-17.5 2.5 2.5 0 0 1 2.5-2.5m0 12.808A22.5 22.5 0 0 1 21.142 40a22.5 22.5 0 0 1 9.692 9.692A22.5 22.5 0 0 1 40.526 40a22.5 22.5 0 0 1-9.692-9.692m30 20.525a2.5 2.5 0 0 1 2.5 2.5 4.167 4.167 0 0 0 4.167 4.167 2.5 2.5 0 0 1 0 5 4.167 4.167 0 0 0-4.167 4.166 2.5 2.5 0 1 1-5 0 4.167 4.167 0 0 0-4.167-4.166 2.5 2.5 0 0 1 0-5 4.167 4.167 0 0 0 4.167-4.167 2.5 2.5 0 0 1 2.5-2.5m0 8.792a9 9 0 0 1-.375.375 9 9 0 0 1 .375.375 10 10 0 0 1 .375-.375 10 10 0 0 1-.375-.376' clip-rule='evenodd' opacity='.4'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:80px auto;height:154px}.e-ai-preview-container--hidden,.e-ai-preview-container--idle>*{display:none!important}.e-ai-layout-button{position:relative}.e-ai-layout-button--sparkle{--animation-duration:1.5s;--opacity:.2;--size:6px;aspect-ratio:1;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' fill='none' viewBox='0 0 6 6'%3E%3Cpath fill='%230c0d0e' fill-rule='evenodd' d='M3 .25a.75.75 0 0 1 .693.463L4.16 1.84l1.127.467a.75.75 0 0 1 0 1.386L4.16 4.16l-.467 1.127a.75.75 0 0 1-1.386 0L1.84 4.16.713 3.693a.75.75 0 0 1 0-1.386L1.84 1.84 2.307.713A.75.75 0 0 1 3 .25' clip-rule='evenodd'/%3E%3C/svg%3E");background-size:cover;display:block;height:var(--size);opacity:0;position:absolute;z-index:99999}.e-ai-layout-button--sparkle:first-child,.e-ai-layout-button--sparkle:nth-child(2),.e-ai-layout-button--sparkle:nth-child(3){right:12px;top:12px}.e-ai-layout-button--sparkle:nth-child(4),.e-ai-layout-button--sparkle:nth-child(5),.e-ai-layout-button--sparkle:nth-child(6),.e-ai-layout-button--sparkle:nth-child(7){right:12px;top:22px}.e-ai-layout-button--sparkle:first-child{--opacity:.3;--size:4px;--animation-name:sparkle-1}.e-ai-layout-button--sparkle:nth-child(2){--opacity:.3;--size:4px;--animation-delay:.7s;--animation-name:sparkle-2}.e-ai-layout-button--sparkle:nth-child(3){--animation-delay:3.5s;--animation-name:sparkle-3}.e-ai-layout-button--sparkle:nth-child(4){--animation-delay:.5s;--animation-name:sparkle-4}.e-ai-layout-button--sparkle:nth-child(5){--animation-delay:1.5s;--animation-name:sparkle-5}.e-ai-layout-button--sparkle:nth-child(6){--animation-delay:2.5s;--animation-name:sparkle-6}.e-ai-layout-button--sparkle:nth-child(7){--opacity:.3;--animation-delay:.7s;--animation-name:sparkle-7}.e-ai-layout-button:hover .e-ai-layout-button--sparkle{--timing:cubic-bezier(0,1.18,.96,.75);animation:var(--animation-name) var(--animation-duration) var(--animation-delay,0s) var(--timing) infinite both,sparkle-opacity var(--animation-duration) var(--animation-delay,0s) var(--timing) infinite both}@keyframes sparkle-opacity{50%{opacity:var(--opacity)}to{opacity:0}}@keyframes sparkle-1{to{transform:translate(16px,-12px)}}@keyframes sparkle-2{to{transform:translate(16px,12px)}}@keyframes sparkle-3{to{transform:translate(12px,8px)}}@keyframes sparkle-4{to{transform:translate(16px,16px)}}@keyframes sparkle-5{to{transform:translate(12px,16px)}}@keyframes sparkle-6{to{transform:translate(-8px,-24px)}}@keyframes sparkle-7{to{transform:translate(-20px,16px)}}apps/admin.min.css000064400000003166150732376160010113 0ustar00body.elementor-apps-page{background:var(--e-a-color-white)}.e-a-apps .e-a-page-title{margin:30px auto 60px;max-width:770px;text-align:center}.e-a-apps .e-a-page-title h2{font-size:28px;line-height:1.6;margin:0}.e-a-apps .e-a-page-title p{font-size:16px;margin-block-start:0}.e-a-apps .e-a-page-title p a{color:inherit}.e-a-apps .e-a-page-footer{margin:60px auto;text-align:center}.e-a-apps .e-a-page-footer p{margin:auto;max-width:1200px}.e-a-apps .e-a-list{display:grid;grid-gap:30px;grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}.e-a-apps .e-a-item{align-items:flex-start;border:var(--e-a-border);border-radius:var(--e-a-border-radius);display:flex;flex-direction:column;padding:20px 24px;transition:var(--e-a-transition-hover)}.e-a-apps .e-a-item:hover{border-color:var(--e-a-border-color-bold)}.e-a-apps .e-a-heading{align-items:flex-start;display:flex;justify-content:space-between;width:100%}.e-a-apps .e-a-heading .e-a-img{border-radius:var(--e-a-border-radius);display:flex;margin-block-end:20px;width:70px}.e-a-apps .e-a-heading .e-a-badge{background:#ecfdf5;border-radius:100px;color:#047857;padding:3px 8px}.e-a-apps .e-a-author,.e-a-apps .e-a-title{line-height:1.6;margin:0}.e-a-apps .e-a-author{font-size:12px}.e-a-apps .e-a-author a{color:inherit}.e-a-apps .e-a-desc{flex-grow:1}.e-a-apps .e-a-offering{font-size:12px;font-style:italic}.e-a-apps .e-a-actions{align-items:center;display:flex;justify-content:space-between;margin-block-start:20px;width:100%}.e-a-apps .e-a-actions a{text-decoration:none}.e-a-apps .e-a-actions .e-accent{margin-inline-start:auto}.e-a-apps .e-a-actions .e-a-learn-more{color:#4338ca;font-weight:500}apps/admin.css000064400000003714150732376160007330 0ustar00body.elementor-apps-page { background: var(--e-a-color-white); } .e-a-apps .e-a-page-title { margin: 30px auto 60px; max-width: 770px; text-align: center; } .e-a-apps .e-a-page-title h2 { font-size: 28px; margin: 0; line-height: 1.6; } .e-a-apps .e-a-page-title p { margin-block-start: 0; font-size: 16px; } .e-a-apps .e-a-page-title p a { color: inherit; } .e-a-apps .e-a-page-footer { margin: 60px auto; text-align: center; } .e-a-apps .e-a-page-footer p { max-width: 1200px; margin: auto; } .e-a-apps .e-a-list { display: grid; grid-gap: 30px; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); } .e-a-apps .e-a-item { border: var(--e-a-border); border-radius: var(--e-a-border-radius); display: flex; padding: 20px 24px; flex-direction: column; align-items: flex-start; transition: var(--e-a-transition-hover); } .e-a-apps .e-a-item:hover { border-color: var(--e-a-border-color-bold); } .e-a-apps .e-a-heading { display: flex; justify-content: space-between; align-items: flex-start; width: 100%; } .e-a-apps .e-a-heading .e-a-img { border-radius: var(--e-a-border-radius); width: 70px; display: flex; margin-block-end: 20px; } .e-a-apps .e-a-heading .e-a-badge { background: #ECFDF5; color: #047857; border-radius: 100px; padding: 3px 8px; } .e-a-apps .e-a-title, .e-a-apps .e-a-author { margin: 0; line-height: 1.6; } .e-a-apps .e-a-author { font-size: 12px; } .e-a-apps .e-a-author a { color: inherit; } .e-a-apps .e-a-desc { flex-grow: 1; } .e-a-apps .e-a-offering { font-size: 12px; font-style: italic; } .e-a-apps .e-a-actions { display: flex; justify-content: space-between; align-items: center; width: 100%; margin-block-start: 20px; } .e-a-apps .e-a-actions a { text-decoration: none; } .e-a-apps .e-a-actions .e-accent { margin-inline-start: auto; } .e-a-apps .e-a-actions .e-a-learn-more { color: #4338CA; font-weight: 500; } /*# sourceMappingURL=admin.css.map */ajax/module.php000064400000016235150732401470007477 0ustar00ajax_actions[ $tag ] = compact( 'tag', 'callback' ); } /** * Handle ajax request. * * Verify ajax nonce, and run all the registered actions for this request. * * Fired by `wp_ajax_elementor_ajax` action. * * @since 2.0.0 * @access public */ public function handle_ajax_request() { if ( ! $this->verify_request_nonce() ) { $this->add_response_data( false, esc_html__( 'Token Expired.', 'elementor' ) ) ->send_error( Exceptions::UNAUTHORIZED ); } $editor_post_id = 0; if ( ! empty( $_REQUEST['editor_post_id'] ) ) { $editor_post_id = absint( $_REQUEST['editor_post_id'] ); Plugin::$instance->db->switch_to_post( $editor_post_id ); } /** * Register ajax actions. * * Fires when an ajax request is received and verified. * * Used to register new ajax action handles. * * @since 2.0.0 * * @param self $this An instance of ajax manager. */ do_action( 'elementor/ajax/register_actions', $this ); if ( ! empty( $_REQUEST['actions'] ) ) { // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, each action should sanitize its own data. $this->requests = json_decode( wp_unslash( $_REQUEST['actions'] ), true ); } foreach ( $this->requests as $id => $action_data ) { $this->current_action_id = $id; if ( ! isset( $this->ajax_actions[ $action_data['action'] ] ) ) { $this->add_response_data( false, esc_html__( 'Action not found.', 'elementor' ), Exceptions::BAD_REQUEST ); continue; } if ( $editor_post_id ) { $action_data['data']['editor_post_id'] = $editor_post_id; } try { $data = $action_data['data'] ?? []; $results = call_user_func( $this->ajax_actions[ $action_data['action'] ]['callback'], $data, $this ); if ( false === $results ) { $this->add_response_data( false ); } else { $this->add_response_data( true, $results ); } } catch ( \Exception $e ) { $this->add_response_data( false, $e->getMessage(), $e->getCode() ); } } $this->current_action_id = null; $this->send_success(); } /** * Get current action data. * * Retrieve the data for the current ajax request. * * @since 2.0.1 * @access public * * @return bool|mixed Ajax request data if action exist, False otherwise. */ public function get_current_action_data() { if ( ! $this->current_action_id ) { return false; } return $this->requests[ $this->current_action_id ]; } /** * Create nonce. * * Creates a cryptographic token to * give the user an access to Elementor ajax actions. * * @since 2.3.0 * @access public * * @return string The nonce token. */ public function create_nonce() { return wp_create_nonce( self::NONCE_KEY ); } /** * Verify request nonce. * * Whether the request nonce verified or not. * * @since 2.3.0 * @access public * * @return bool True if request nonce verified, False otherwise. */ public function verify_request_nonce() { return wp_verify_nonce( Utils::get_super_global_value( $_REQUEST, '_nonce' ), self::NONCE_KEY ); } protected function get_init_settings() { return [ 'url' => admin_url( 'admin-ajax.php' ), 'nonce' => $this->create_nonce(), ]; } /** * Ajax success response. * * Send a JSON response data back to the ajax request, indicating success. * * @since 2.0.0 * @access protected */ private function send_success() { $response = [ 'success' => true, 'data' => [ 'responses' => $this->response_data, ], ]; $json = wp_json_encode( $response ); while ( ob_get_status() ) { ob_end_clean(); } if ( function_exists( 'gzencode' ) ) { $response = gzencode( $json ); header( 'Content-Type: application/json; charset=utf-8' ); header( 'Content-Encoding: gzip' ); header( 'Content-Length: ' . strlen( $response ) ); echo $response; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } else { echo $json; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } wp_die( '', '', [ 'response' => null ] ); } /** * Ajax failure response. * * Send a JSON response data back to the ajax request, indicating failure. * * @since 2.0.0 * @access protected * * @param null $code */ private function send_error( $code = null ) { wp_send_json_error( [ 'responses' => $this->response_data, ], $code ); } /** * Add response data. * * Add new response data to the array of all the ajax requests. * * @since 2.0.0 * @access protected * * @param bool $success True if the requests returned successfully, False * otherwise. * @param mixed $data Optional. Response data. Default is null. * * @param int $code Optional. Response code. Default is 200. * * @return Module An instance of ajax manager. */ private function add_response_data( $success, $data = null, $code = 200 ) { $this->response_data[ $this->current_action_id ] = [ 'success' => $success, 'code' => $code, 'data' => $data, ]; return $this; } } finder/module.php000064400000005064150732401470010021 0ustar00categories_manager = new Categories_Manager(); $this->add_template(); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } /** * Get name. * * @since 2.3.0 * @access public * * @return string */ public function get_name() { return 'finder'; } /** * Add template. * * @since 2.3.0 * @access public */ public function add_template() { Plugin::$instance->common->add_template( __DIR__ . '/template.php' ); } /** * Register ajax actions. * * @since 2.3.0 * @access public * * @param Ajax $ajax */ public function register_ajax_actions( Ajax $ajax ) { $ajax->register_ajax_action( 'finder_get_category_items', [ $this, 'ajax_get_category_items' ] ); } /** * Ajax get category items. * * @since 2.3.0 * @access public * * @param array $data * * @return array */ public function ajax_get_category_items( array $data ) { if ( ! current_user_can( 'manage_options' ) ) { throw new \Exception( 'Access denied.' ); } $category = $this->categories_manager->get_categories( $data['category'] ); return $category->get_category_items( $data ); } /** * Get init settings. * * @since 2.3.0 * @access protected * * @return array */ protected function get_init_settings() { $categories = $this->categories_manager->get_categories(); $categories_data = []; foreach ( $categories as $category_name => $category ) { $categories_data[ $category_name ] = array_merge( $category->get_settings(), [ 'name' => $category_name ] ); } /** * Finder categories. * * Filters the list of finder categories. This hook is used to manage Finder * categories - to add new categories, remove and edit existing categories. * * @since 2.3.0 * * @param array $categories_data A list of finder categories. */ $categories_data = apply_filters( 'elementor/finder/categories', $categories_data ); return [ 'data' => $categories_data, ]; } } finder/categories-manager.php000064400000007273150732401470012275 0ustar00modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( __METHOD__, '3.5.0', 'register()' ); $this->register( $category, $category_name ); } /** * Register finder category. * * @since 3.5.0 * @access public * * @param Base_Category $finder_category_instance An Instance of a category. * @param string $finder_category_name A Category name. Deprecated parameter. * * @return void */ public function register( Base_Category $finder_category_instance, $finder_category_name = null ) { // TODO: For BC. Remove in the future. if ( $finder_category_name ) { Plugin::instance()->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_argument( '$finder_category_name', '3.5.0' ); } else { $finder_category_name = $finder_category_instance->get_id(); } $this->categories[ $finder_category_name ] = $finder_category_instance; } /** * Unregister a finder category. * * @param string $finder_category_name - Category to unregister. * * @return void * @since 3.6.0 * @access public */ public function unregister( $finder_category_name ) { unset( $this->categories[ $finder_category_name ] ); } /** * Get categories. * * Retrieve the registered categories, or a specific category if the category name * is provided as a parameter. * * @since 2.3.0 * @access public * * @param string $category Category name. * * @return Base_Category|Base_Category[]|null */ public function get_categories( $category = '' ) { if ( ! $this->categories ) { $this->init_categories(); } if ( $category ) { if ( isset( $this->categories[ $category ] ) ) { return $this->categories[ $category ]; } return null; } return $this->categories; } /** * Init categories. * * Used to initialize the native finder categories. * * @since 2.3.0 * @access private */ private function init_categories() { foreach ( $this->categories_list as $category_name ) { $class_name = __NAMESPACE__ . '\Categories\\' . $category_name; $this->register( new $class_name() ); } /** * Elementor Finder categories init. * * Fires after Elementor Finder initialize it's native categories. * * This hook should be used to add your own Finder categories. * * @since 2.3.0 * @deprecated 3.5.0 Use `elementor/finder/register` hook instead. * * @param Categories_Manager $this. */ Plugin::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->do_deprecated_action( 'elementor/finder/categories/init', [ $this ], '3.5.0', 'elementor/finder/register' ); /** * Elementor Finder categories registration. * * Fires after Elementor Finder initialize it's native categories. * * This hook should be used to register your own Finder categories. * * @since 3.5.0 * * @param Categories_Manager $this Finder Categories manager. */ do_action( 'elementor/finder/register', $this ); } } finder/template.php000064400000003632150732401470010346 0ustar00 finder/categories/general.php000064400000004504150732401470012274 0ustar00 [ 'title' => esc_html__( 'Saved Templates', 'elementor' ), 'icon' => 'library-save', 'url' => Source_Local::get_admin_url(), 'keywords' => [ 'template', 'section', 'page', 'library' ], ], 'system-info' => [ 'title' => esc_html__( 'System Info', 'elementor' ), 'icon' => 'info-circle-o', 'url' => admin_url( 'admin.php?page=elementor-system-info' ), 'keywords' => [ 'system', 'info', 'environment', 'elementor' ], ], 'role-manager' => [ 'title' => esc_html__( 'Role Manager', 'elementor' ), 'icon' => 'person', 'url' => Role_Manager::get_url(), 'keywords' => [ 'role', 'manager', 'user', 'elementor' ], ], 'knowledge-base' => [ 'title' => esc_html__( 'Knowledge Base', 'elementor' ), 'url' => admin_url( 'admin.php?page=go_knowledge_base_site' ), 'keywords' => [ 'help', 'knowledge', 'docs', 'elementor' ], ], 'theme-builder' => [ 'title' => esc_html__( 'Theme Builder', 'elementor' ), 'icon' => 'library-save', 'url' => Plugin::$instance->app->get_settings( 'menu_url' ), 'keywords' => [ 'template', 'header', 'footer', 'single', 'archive', 'search', '404', 'library' ], ], 'kit-library' => [ 'title' => esc_html__( 'Website Templates', 'elementor' ), 'icon' => 'kit-parts', 'url' => Plugin::$instance->app->get_base_url() . '#/kit-library', 'keywords' => [ 'Website Templates', 'kit library', 'kit', 'library', 'site parts', 'parts', 'assets', 'templates' ], ], ]; } } finder/categories/tools.php000064400000004055150732401470012020 0ustar00 [ 'title' => esc_html__( 'Tools', 'elementor' ), 'icon' => 'tools', 'url' => $tools_url, 'keywords' => [ 'tools', 'regenerate css', 'safe mode', 'debug bar', 'sync library', 'elementor' ], ], 'replace-url' => [ 'title' => esc_html__( 'Replace URL', 'elementor' ), 'icon' => 'tools', 'url' => $tools_url . '#tab-replace_url', 'keywords' => [ 'tools', 'replace url', 'domain', 'elementor' ], ], 'maintenance-mode' => [ 'title' => esc_html__( 'Maintenance Mode', 'elementor' ), 'icon' => 'tools', 'url' => $tools_url . '#tab-maintenance_mode', 'keywords' => [ 'tools', 'maintenance', 'coming soon', 'elementor' ], ], 'import-export' => [ 'title' => esc_html__( 'Import Export', 'elementor' ), 'icon' => 'import-export', 'url' => $tools_url . '#tab-import-export-kit', 'keywords' => [ 'tools', 'import export', 'import', 'export', 'kit' ], ], ]; if ( ElementorTools::can_user_rollback_versions() ) { $items['version-control'] = [ 'title' => esc_html__( 'Version Control', 'elementor' ), 'icon' => 'time-line', 'url' => $tools_url . '#tab-versions', 'keywords' => [ 'tools', 'version', 'control', 'rollback', 'beta', 'elementor' ], ]; } return $items; } } finder/categories/settings.php000064400000004534150732401470012522 0ustar00 [ 'title' => esc_html__( 'General Settings', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'general' ), 'keywords' => [ 'general', 'settings', 'elementor' ], ], 'integrations' => [ 'title' => esc_html__( 'Integrations', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'integrations' ), 'keywords' => [ 'integrations', 'settings', 'elementor' ], ], 'advanced' => [ 'title' => esc_html__( 'Advanced', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'advanced' ), 'keywords' => [ 'advanced', 'settings', 'elementor' ], ], 'performance' => [ 'title' => esc_html__( 'Performance', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'performance' ), 'keywords' => [ 'performance', 'settings', 'elementor' ], ], 'experiments' => [ 'title' => esc_html__( 'Experiments', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'experiments' ), 'keywords' => [ 'settings', 'elementor', 'experiments' ], ], 'features' => [ 'title' => esc_html__( 'Features', 'elementor' ), 'url' => ElementorSettings::get_settings_tab_url( 'experiments' ), 'keywords' => [ 'settings', 'elementor', 'features' ], ], 'element-manager' => [ 'title' => esc_html__( 'Element Manager', 'elementor' ), 'url' => admin_url( 'admin.php?page=' . ElementManagerModule::PAGE_ID ), 'keywords' => [ 'settings', 'elements', 'widgets', 'manager' ], ], ]; } } finder/categories/create.php000064400000005536150732401470012130 0ustar00documents->get_document_types(); // TODO: Remove - Support 'post' backwards compatibility - See `Documents_Manager::register_default_types()`. unset( $registered_document_types['post'] ); $elementor_supported_post_types = array_flip( get_post_types_by_support( 'elementor' ) ); foreach ( $registered_document_types as $document_name => $document_class ) { $document_properties = $document_class::get_properties(); if ( empty( $document_properties['show_in_finder'] ) ) { continue; } if ( ! empty( $document_properties['cpt'] ) ) { foreach ( $document_properties['cpt'] as $cpt ) { unset( $elementor_supported_post_types[ $cpt ] ); } } $result[ $document_name ] = $this->create_item_url_by_document_class( $document_class ); } foreach ( $elementor_supported_post_types as $post_type => $val ) { $result[ $post_type ] = $this->create_item_url_by_post_type( $post_type ); } return $result; } private function create_item_url_by_post_type( $post_type ) { $post_type_object = get_post_type_object( $post_type ); // If there is an old post type from inactive plugins. if ( ! $post_type_object ) { return false; } return $this->get_create_new_template( sprintf( __( 'Add New %s', 'elementor' ), $post_type_object->labels->singular_name ), Plugin::$instance->documents->get_create_new_post_url( $post_type ) ); } private function create_item_url_by_document_class( $document_class ) { $result = $this->get_create_new_template( $document_class::get_add_new_title(), $document_class::get_create_url() ); $lock_behavior = $document_class::get_lock_behavior_v2(); $is_locked = ! empty( $lock_behavior ) && $lock_behavior->is_locked(); if ( $is_locked ) { $result['lock'] = $lock_behavior->get_config(); } return $result; } private function get_create_new_template( $add_new_title, $url ) { return [ 'title' => $add_new_title, 'icon' => 'plus-circle-o', 'url' => $url, 'keywords' => [ $add_new_title, 'post', 'page', 'template', 'new', 'create' ], ]; } } finder/categories/site.php000064400000004047150732401470011625 0ustar00 [ 'title' => esc_html__( 'Homepage', 'elementor' ), 'url' => home_url(), 'icon' => 'home-heart', 'keywords' => [ 'home', 'page' ], ], 'wordpress-dashboard' => [ 'title' => esc_html__( 'Dashboard', 'elementor' ), 'icon' => 'dashboard', 'url' => admin_url(), 'keywords' => [ 'dashboard', 'wordpress' ], ], 'wordpress-menus' => [ 'title' => esc_html__( 'Menus', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'nav-menus.php' ), 'keywords' => [ 'menu', 'wordpress' ], ], 'wordpress-themes' => [ 'title' => esc_html__( 'Themes', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'themes.php' ), 'keywords' => [ 'themes', 'wordpress' ], ], 'wordpress-customizer' => [ 'title' => esc_html__( 'Customizer', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'customize.php' ), 'keywords' => [ 'customizer', 'wordpress' ], ], 'wordpress-plugins' => [ 'title' => esc_html__( 'Plugins', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'plugins.php' ), 'keywords' => [ 'plugins', 'wordpress' ], ], 'wordpress-users' => [ 'title' => esc_html__( 'Users', 'elementor' ), 'icon' => 'wordpress', 'url' => admin_url( 'users.php' ), 'keywords' => [ 'users', 'profile', 'wordpress' ], ], ]; } } finder/categories/edit.php000064400000005271150732401470011606 0ustar00 false, ] ); $post_types[] = Source_Local::CPT; $document_types = Plugin::$instance->documents->get_document_types( [ 'is_editable' => true, 'show_in_finder' => true, ] ); $recently_edited_query_args = [ 'no_found_rows' => true, 'post_type' => $post_types, 'post_status' => [ 'publish', 'draft', 'private', 'pending', 'future' ], 'posts_per_page' => '10', 'meta_query' => [ [ 'key' => '_elementor_edit_mode', 'value' => 'builder', ], [ 'relation' => 'or', [ 'key' => Document::TYPE_META_KEY, 'compare' => 'NOT EXISTS', ], [ 'key' => Document::TYPE_META_KEY, 'value' => array_keys( $document_types ), ], ], ], 'orderby' => 'modified', 's' => $options['filter'], ]; $recently_edited_query = new \WP_Query( $recently_edited_query_args ); $items = []; /** @var \WP_Post $post */ foreach ( $recently_edited_query->posts as $post ) { $document = Plugin::$instance->documents->get( $post->ID ); if ( ! $document ) { continue; } $is_template = Source_Local::CPT === $post->post_type; $description = $document->get_title(); $icon = 'document-file'; if ( $is_template ) { $description = esc_html__( 'Template', 'elementor' ) . ' / ' . $description; $icon = 'post-title'; } $items[] = [ 'icon' => $icon, 'title' => esc_html( $post->post_title ), 'description' => $description, 'url' => $document->get_edit_url(), 'actions' => [ [ 'name' => 'view', 'url' => $document->get_permalink(), 'icon' => 'preview-medium', ], ], ]; } return $items; } } finder/base-category.php000064400000003127150732401470011257 0ustar00modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_function( get_class( $this ) . '::' . __FUNCTION__, '3.5.0', 'This method will be replaced with an abstract method.' ); return ''; } /** * Get category items. * * @since 2.3.0 * @abstract * @access public * * @param array $options * * @return array */ abstract public function get_category_items( array $options = [] ); /** * Is dynamic. * * Determine if the category is dynamic. * * @since 2.3.0 * @access public * * @return bool */ public function is_dynamic() { return false; } /** * Get init settings. * * @since 2.3.0 * @access protected * * @return array */ protected function get_init_settings() { $settings = [ 'title' => $this->get_title(), 'dynamic' => $this->is_dynamic(), ]; if ( ! $settings['dynamic'] ) { $settings['items'] = $this->get_category_items(); } return $settings; } } event-tracker/module.php000064400000001642150732401470011322 0ustar00 Tracker::is_allow_track(), ]; } public function __construct() { // Initialize Events Database Table $this->add_component( 'events-db', new DB() ); // Handle User Data Deletion/Export requests. new Personal_Data(); Plugin::$instance->data_manager_v2->register_controller( new Controller() ); } } event-tracker/data/controller.php000064400000003513150732401470013130 0ustar00index_endpoint->register_items_route( \WP_REST_Server::CREATABLE, [ 'event_data' => [ 'description' => 'All the recorded event data in JSON format', 'type' => 'object', 'required' => true, ], ] ); } /** * Get Permissions Callback * * This endpoint should only accept POST requests, and currently we only track site administrator actions. * * @since 3.6.0 * * @param \WP_REST_Request $request * @return bool */ public function get_permission_callback( $request ) { if ( WP_REST_Server::CREATABLE !== $request->get_method() ) { return false; } return current_user_can( 'manage_options' ); } /** * Create Items * * Receives a request for adding an event data entry into the database. If the request contains event data, this * method initiates creation of a database entry with the event data in the Events DB table. * * @since 3.6.0 * * @param \WP_REST_Request $request * @return bool */ public function create_items( $request ) { $request_body = $request->get_json_params(); if ( empty( $request_body['event_data'] ) ) { return false; } /** @var Events_DB_Manager $event_tracker_db_manager */ $event_tracker_db_manager = Plugin::$instance->common ->get_component( 'event-tracker' ) ->get_component( 'events-db' ); $event_tracker_db_manager->create_entry( $request_body['event_data'] ); return true; } } event-tracker/personal-data.php000064400000003711150732401470012566 0ustar00common ->get_component( 'event-tracker' ) ->get_component( 'events-db' ); $events = $event_tracker_db_manager->get_event_ids_from_db(); $events_count = count( $events ); DB::reset_table(); // Validate table deleted $updated_events = $event_tracker_db_manager->get_event_ids_from_db(); $updated_events_count = count( $updated_events ); return [ 'items_removed' => $events_count - $updated_events_count, 'items_retained' => 0, 'messages' => [], 'done' => 0 === $updated_events_count, ]; } /** * Add eraser to the list of erasers. * * @param $erasers * * @return array[] */ private function add_eraser( $erasers ) { return $erasers + [ self::WP_KEY => [ 'eraser_friendly_name' => $this->get_title(), 'callback' => function () { return $this->erase_data(); }, ], ]; } /** * Personal_Data constructor. */ public function __construct() { add_filter( 'wp_privacy_personal_data_erasers', function ( $exporters ) { return $this->add_eraser( $exporters ); } ); } } event-tracker/db.php000064400000011410150732401470010414 0ustar00wpdb->prefix . self::TABLE_NAME; } /** * Prepare Database for Entry * * The events database should have a limit of up to 1000 event entries stored daily. * Before adding a new entry to the database, we make sure that the limit of 1000 events is not reached. * If there are 1000 or more entries in the DB, we delete the earliest-inserted entry before inserting a new one. * * @since 3.6.0 */ public function prepare_db_for_entry() { $events = $this->get_event_ids_from_db(); if ( 1000 <= count( $events ) ) { $event_ids = []; foreach ( $events as $event ) { $event_ids[] = $event->id; } // Sort the array by entry ID array_multisort( $event_ids, SORT_ASC, $events ); // Delete the smallest ID (which is the earliest DB entry) $this->wpdb->delete( $this->get_table_name(), [ 'ID' => $events[0]->id ] ); } } /** * Create Entry * * Adds an event entry to the database. * * @since 3.6.0 */ public function create_entry( $event_data ) { $this->prepare_db_for_entry(); $connect = Plugin::$instance->common->get_component( 'connect' ); /** @var Library $library */ $library = $connect->get_apps()['library']; if ( ! isset( $event_data['details'] ) ) { $event_data['details'] = []; } if ( $library->is_connected() ) { $user_connect_data = get_user_option( Common_App::OPTION_CONNECT_COMMON_DATA_KEY ); // Add the user's client ID to the event. $event_data['details']['client_id'] = $user_connect_data['client_id']; } $event_data['details'] = wp_json_encode( $event_data['details'] ); $entry = [ 'event_data' => wp_json_encode( $event_data ), 'created_at' => $event_data['ts'], ]; $this->wpdb->insert( $this->get_table_name(), $entry ); } /** * Get Event IDs From DB * * Fetches the IDs of all events saved in the database. * * @since 3.6.0 * * @return array|object|null */ public function get_event_ids_from_db() { // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared return $this->wpdb->get_results( "SELECT id FROM {$this->get_table_name()}" ); } /** * Reset Table * * Empties the contents of the Events DB table. * * @since 3.6.0 */ public static function reset_table() { global $wpdb; $table_name = $wpdb->prefix . self::TABLE_NAME; // Delete all content of the table. // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared $wpdb->query( "TRUNCATE TABLE {$table_name}" ); } /** * Create Table * * Creates the `wp_e_events` database table. * * @since 3.6.0 * * @param string $query to that looks for the Events table in the DB. Used for checking if table was created. */ private function create_table( $query ) { require_once ABSPATH . 'wp-admin/includes/upgrade.php'; $table_name = $this->get_table_name(); $charset_collate = $this->wpdb->get_charset_collate(); $e_events_table = "CREATE TABLE `{$table_name}` ( id bigint(20) unsigned auto_increment primary key, event_data text null, created_at datetime not null ) {$charset_collate};"; // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared $this->wpdb->query( $e_events_table ); // Check if table was created successfully. // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared if ( $this->wpdb->get_var( $query ) === $table_name ) { update_option( self::DB_VERSION_OPTION_KEY, self::CURRENT_DB_VERSION, false ); } } /** * Add Indexes * * Adds an index to the events table for the creation date column. * * @since 3.6.0 */ private function add_indexes() { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared $this->wpdb->query( 'ALTER TABLE ' . $this->get_table_name() . ' ADD INDEX `created_at_index` (`created_at`) ' ); } public function __construct() { global $wpdb; $this->wpdb = $wpdb; // Check if table exists. If not, create it. $query = $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->esc_like( $this->get_table_name() ) ); // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared if ( $wpdb->get_var( $query ) !== $this->get_table_name() ) { $this->create_table( $query ); $this->add_indexes(); } } } connect/connect-menu-item.php000064400000002237150732401470012244 0ustar00common->get_component( 'connect' )->get_apps(); ?>
'; $app->render_admin_widget(); echo '
'; } ?> registered_apps = [ 'connect' => Connect::get_class_name(), 'library' => Library::get_class_name(), ]; // When using REST API the parent module is construct after the action 'elementor/init' // so this part of code make sure to register the module "apps". if ( did_action( 'elementor/init' ) ) { $this->init(); } else { // Note: The priority 11 is for allowing plugins to add their register callback on elementor init. add_action( 'elementor/init', [ $this, 'init' ], 11 ); } add_action( 'rest_api_init', [ $this, 'register_rest_routes' ] ); add_filter( 'elementor/tracker/send_tracking_data_params', function ( $params ) { return $this->add_tracking_data( $params ); } ); } /** * Register default apps. * * Registers the default apps. * * @since 2.3.0 * @access public */ public function init() { if ( is_admin() ) { $this->admin_page = new Admin(); } /** * Register Elementor apps. * * Fires after Elementor registers the default apps. * * @since 2.3.0 * * @param self $this The apps manager instance. */ do_action( 'elementor/connect/apps/register', $this ); foreach ( $this->registered_apps as $slug => $class ) { $this->apps[ $slug ] = new $class(); } } /** * Register app. * * Registers an app. * * @since 2.3.0 * @access public * * @param string $slug App slug. * @param string $class App full class name. * * @return self The updated apps manager instance. */ public function register_app( $slug, $class ) { $this->registered_apps[ $slug ] = $class; return $this; } /** * Get app instance. * * Retrieve the app instance. * * @since 2.3.0 * @access public * * @param $slug * * @return Base_App|null */ public function get_app( $slug ) { if ( isset( $this->apps[ $slug ] ) ) { return $this->apps[ $slug ]; } return null; } /** * @since 2.3.0 * @access public * @return Base_App[] */ public function get_apps() { return $this->apps; } /** * @since 2.3.0 * @access public */ public function register_category( $slug, $args ) { $this->categories[ $slug ] = $args; return $this; } /** * @since 2.3.0 * @access public */ public function get_categories() { return $this->categories; } /** * @param string $context Where this subscription plan should be shown. * * @return array */ public function get_subscription_plans( $context = '' ) { $base_url = Utils::has_pro() ? 'https://my.elementor.com/upgrade-subscription' : 'https://elementor.com/pro'; $promotion_url = $base_url . '/?utm_source=' . $context . '&utm_medium=wp-dash&utm_campaign=gopro'; return [ static::ACCESS_TIER_FREE => [ 'label' => null, 'promotion_url' => null, 'color' => null, ], static::ACCESS_TIER_ESSENTIAL => [ 'label' => 'Pro', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_ESSENTIAL_OCT_2023 => [ 'label' => 'Advanced', // Should be the same label as "Advanced". 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_ADVANCED => [ 'label' => 'Advanced', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_EXPERT => [ 'label' => 'Expert', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], static::ACCESS_TIER_AGENCY => [ 'label' => 'Agency', 'promotion_url' => $promotion_url, 'color' => '#92003B', ], ]; } private function add_tracking_data( $params ) { $users = []; $users_query = new WP_User_Query( [ 'count_total' => false, // Disable SQL_CALC_FOUND_ROWS. 'meta_query' => [ 'key' => Common_App::OPTION_CONNECT_COMMON_DATA_KEY, 'compare' => 'EXISTS', ], ] ); foreach ( $users_query->get_results() as $user ) { $connect_common_data = get_user_option( Common_App::OPTION_CONNECT_COMMON_DATA_KEY, $user->ID ); if ( $connect_common_data ) { $users [] = [ 'id' => $user->ID, 'email' => $connect_common_data['user']->email, 'roles' => implode( ', ', $user->roles ), ]; } } $params['usages'][ $this->get_name() ] = [ 'site_key' => get_option( Base_App::OPTION_CONNECT_SITE_KEY ), 'count' => count( $users ), 'users' => $users, ]; return $params; } public function register_rest_routes() { $rest_api = new Rest_Api(); $rest_api->register_routes(); } } connect/admin.php000064400000004613150732401470010005 0ustar00register( static::PAGE_ID, new Connect_Menu_Item() ); } /** * @since 2.3.0 * @access public */ public function on_load_page() { if ( ! $this->user_has_enough_permissions() ) { wp_die( 'You do not have sufficient permissions to access this page.', 'You do not have sufficient permissions to access this page.', [ 'back_link' => true, ] ); } if ( isset( $_GET['action'], $_GET['app'] ) ) { $manager = Plugin::$instance->common->get_component( 'connect' ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $app_slug = Utils::get_super_global_value( $_GET, 'app' ); $app = $manager->get_app( $app_slug ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $action = Utils::get_super_global_value( $_GET, 'action' ); $nonce_action = $app_slug . $action; if ( ! $app ) { wp_die( 'Unknown app: ' . esc_attr( $app_slug ) ); } if ( ! wp_verify_nonce( Utils::get_super_global_value( $_GET, 'nonce' ), $nonce_action ) ) { wp_die( 'Invalid Nonce', 'Invalid Nonce', [ 'back_link' => true, ] ); } $method = 'action_' . $action; if ( method_exists( $app, $method ) ) { call_user_func( [ $app, $method ] ); } } } private function user_has_enough_permissions() { if ( current_user_can( 'manage_options' ) ) { return true; } if ( 'library' === Utils::get_super_global_value( $_GET, 'app' ) ) { return current_user_can( 'edit_posts' ); } return false; } /** * @since 2.3.0 * @access public */ public function __construct() { self::$url = admin_url( 'admin.php?page=' . self::PAGE_ID ); add_action( 'elementor/admin/menu/register', [ $this, 'register_admin_menu' ] ); add_action( 'elementor/admin/menu/after_register', function ( Admin_Menu_Manager $admin_menu, array $hooks ) { if ( ! empty( $hooks[ static::PAGE_ID ] ) ) { add_action( 'load-' . $hooks[ static::PAGE_ID ], [ $this, 'on_load_page' ] ); } }, 10, 2 ); } } connect/apps/base-user-app.php000064400000001061150732401470012316 0ustar00get_option_name(), $this->data ); } /** * @since 2.3.0 * @access protected */ protected function init_data() { $this->data = get_user_option( $this->get_option_name() ); if ( ! $this->data ) { $this->data = []; } } } connect/apps/common-app.php000064400000001615150732401470011725 0ustar00data = & self::$common_data; } public function action_reset() { delete_user_option( get_current_user_id(), static::OPTION_CONNECT_COMMON_DATA_KEY ); parent::action_reset(); } } connect/apps/base-app.php000064400000050553150732401470011354 0ustar00get_slug(); } /** * @since 2.3.0 * @access protected * @abstract */ abstract protected function update_settings(); /** * @since 2.3.0 * @access public * @static */ public static function get_class_name() { return get_called_class(); } /** * @access public * @abstract */ public function render_admin_widget() { // PHPCS - the method get_title return a plain string. echo '

' . $this->get_title() . '

'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ( $this->is_connected() ) { $remote_user = $this->get( 'user' ); $title = sprintf( /* translators: %s: Remote user. */ esc_html__( 'Connected as %s', 'elementor' ), '' . esc_html( $remote_user->email ) . '' ); $label = esc_html__( 'Disconnect', 'elementor' ); $url = $this->get_admin_url( 'disconnect' ); $attr = ''; printf( '%s %s', // PHPCS - the variable $title is already escaped above. $title, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped // PHPCS - the variable $attr is a plain string. $attr, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped esc_attr( $url ), esc_html( $label ) ); } else { echo 'Not Connected'; } echo '
'; $this->print_app_info(); if ( current_user_can( 'manage_options' ) ) { printf( '
%s
', esc_url( $this->get_admin_url( 'reset' ) ), esc_html__( 'Reset Data', 'elementor' ) ); } echo '
'; } /** * @since 2.3.0 * @access protected */ protected function get_option_name() { return static::OPTION_NAME_PREFIX . $this->get_slug(); } /** * @since 2.3.0 * @access public */ public function admin_notice() { $notices = $this->get( 'notices' ); if ( ! $notices ) { return; } $this->print_notices( $notices ); $this->delete( 'notices' ); } public function get_app_token_from_cli_token( $cli_token ) { $response = $this->request( 'get_app_token_from_cli_token', [ 'cli_token' => $cli_token, ] ); if ( is_wp_error( $response ) ) { // PHPCS - the variable $response does not contain a user input value. wp_die( $response, $response->get_error_message() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } // Use state as usual. $_REQUEST['state'] = $this->get( 'state' ); $_REQUEST['code'] = $response->code; } /** * @since 2.3.0 * @access public */ public function action_authorize() { if ( $this->is_connected() ) { $this->add_notice( esc_html__( 'Already connected.', 'elementor' ), 'info' ); $this->redirect_to_admin_page(); return; } $this->set_client_id(); $this->set_request_state(); $this->redirect_to_remote_authorize_url(); } public function action_reset() { if ( current_user_can( 'manage_options' ) ) { delete_option( 'elementor_remote_info_library' ); } $this->redirect_to_admin_page(); } /** * @since 2.3.0 * @access public */ public function action_get_token() { if ( $this->is_connected() ) { $this->redirect_to_admin_page(); } //phpcs:ignore WordPress.Security.NonceVerification.Recommended - The user as been authorized before in 'connect'. $state = Utils::get_super_global_value( $_REQUEST, 'state' ); if ( $state !== $this->get( 'state' ) ) { $this->add_notice( 'Get Token: Invalid Request.', 'error' ); $this->redirect_to_admin_page(); } $response = $this->request( 'get_token', [ 'grant_type' => 'authorization_code', 'code' => Utils::get_super_global_value( $_REQUEST, 'code' ), //phpcs:ignore WordPress.Security.NonceVerification.Recommended 'redirect_uri' => rawurlencode( $this->get_admin_url( 'get_token' ) ), 'client_id' => $this->get( 'client_id' ), ] ); if ( is_wp_error( $response ) ) { $notice = 'Cannot Get Token:' . $response->get_error_message(); $this->add_notice( $notice, 'error' ); $this->redirect_to_admin_page(); } $this->delete( 'state' ); $this->set( (array) $response ); if ( ! empty( $response->data_share_opted_in ) && current_user_can( 'manage_options' ) ) { Tracker::set_opt_in( true ); } $this->after_connect(); // Add the notice *after* the method `after_connect`, so an app can redirect without the notice. $this->add_notice( esc_html__( 'Connected successfully.', 'elementor' ) ); $this->redirect_to_admin_page(); } /** * @since 2.3.0 * @access public */ public function action_disconnect() { if ( $this->is_connected() ) { $this->disconnect(); $this->add_notice( esc_html__( 'Disconnected successfully.', 'elementor' ) ); } $this->redirect_to_admin_page(); } /** * @since 2.8.0 * @access public */ public function action_reconnect() { $this->disconnect(); $this->action_authorize(); } /** * @since 2.3.0 * @access public */ public function get_admin_url( $action, $params = [] ) { $params = [ 'app' => $this->get_slug(), 'action' => $action, 'nonce' => wp_create_nonce( $this->get_slug() . $action ), ] + $params; $admin_url = Str::encode_idn_url( get_admin_url() ); $admin_url .= 'admin.php?page=' . Admin::PAGE_ID; return add_query_arg( $params, $admin_url ); } /** * @since 2.3.0 * @access public */ public function is_connected() { return (bool) $this->get( 'access_token' ); } /** * @since 2.3.0 * @access protected */ protected function init() {} /** * @since 2.3.0 * @access protected */ protected function init_data() {} /** * @since 2.3.0 * @access protected */ protected function after_connect() {} /** * @since 2.3.0 * @access public */ public function get( $key, $default = null ) { $this->init_data(); return isset( $this->data[ $key ] ) ? $this->data[ $key ] : $default; } /** * @since 2.3.0 * @access protected */ protected function set( $key, $value = null ) { $this->init_data(); if ( is_array( $key ) ) { $this->data = array_replace_recursive( $this->data, $key ); } else { $this->data[ $key ] = $value; } $this->update_settings(); } /** * @since 2.3.0 * @access protected */ protected function delete( $key = null ) { $this->init_data(); if ( $key ) { unset( $this->data[ $key ] ); } else { $this->data = []; } $this->update_settings(); } /** * @since 2.3.0 * @access protected */ protected function add( $key, $value, $default = '' ) { $new_value = $this->get( $key, $default ); if ( is_array( $new_value ) ) { $new_value[] = $value; } elseif ( is_string( $new_value ) ) { $new_value .= $value; } elseif ( is_numeric( $new_value ) ) { $new_value += $value; } $this->set( $key, $new_value ); } /** * @since 2.3.0 * @access protected */ protected function add_notice( $content, $type = 'success' ) { $this->add( 'notices', compact( 'content', 'type' ), [] ); } /** * @param $action * @param array $request_body * @param false $as_array * * @return mixed|\WP_Error */ protected function request( $action, $request_body = [], $as_array = false ) { $request_body = $this->get_connect_info() + $request_body; return $this->http_request( 'POST', $action, [ 'timeout' => 25, 'body' => $request_body, 'headers' => $this->is_connected() ? [ 'X-Elementor-Signature' => $this->generate_signature( $request_body ) ] : [], ], [ 'return_type' => $as_array ? static::HTTP_RETURN_TYPE_ARRAY : static::HTTP_RETURN_TYPE_OBJECT, ] ); } /** * Get Base Connect Info * * Returns an array of connect info. * * @return array */ protected function get_base_connect_info() { return [ 'app' => $this->get_slug(), 'access_token' => $this->get( 'access_token' ), 'client_id' => $this->get( 'client_id' ), 'local_id' => get_current_user_id(), 'site_key' => $this->get_site_key(), 'home_url' => trailingslashit( home_url() ), ]; } /** * Get all the connect information * * @return array */ protected function get_connect_info() { $connect_info = $this->get_base_connect_info(); $additional_info = []; /** * Additional connect info. * * Filters the connection information when connecting to Elementor servers. * This hook can be used to add more information or add more data. * * @param array $additional_info Additional connecting information array. * @param Base_App $this The base app instance. */ $additional_info = apply_filters( 'elementor/connect/additional-connect-info', $additional_info, $this ); return array_merge( $connect_info, $additional_info ); } /** * @param $endpoint * * @return array */ protected function generate_authentication_headers( $endpoint ) { $connect_info = ( new Collection( $this->get_connect_info() ) ) ->map_with_keys( function ( $value, $key ) { // For bc `get_connect_info` returns the connect info with underscore, // headers with underscore are not valid, so all the keys with underscore will be replaced to hyphen. return [ str_replace( '_', '-', $key ) => $value ]; } ) ->replace_recursive( [ 'endpoint' => $endpoint ] ) ->sort_keys(); return $connect_info ->merge( [ 'X-Elementor-Signature' => $this->generate_signature( $connect_info->all() ) ] ) ->all(); } /** * Send an http request * * @param $method * @param $endpoint * @param array $args * @param array $options * * @return mixed|\WP_Error */ protected function http_request( $method, $endpoint, $args = [], $options = [] ) { $options = wp_parse_args( $options, [ 'return_type' => static::HTTP_RETURN_TYPE_OBJECT, ] ); $args = array_replace_recursive( [ 'headers' => $this->is_connected() ? $this->generate_authentication_headers( $endpoint ) : [], 'method' => $method, 'timeout' => 10, ], $args ); $response = $this->http->request_with_fallback( $this->get_generated_urls( $endpoint ), $args ); if ( is_wp_error( $response ) && empty( $options['with_error_data'] ) ) { // PHPCS - the variable $response does not contain a user input value. wp_die( $response, [ 'back_link' => true ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $body = wp_remote_retrieve_body( $response ); $response_code = (int) wp_remote_retrieve_response_code( $response ); if ( ! $response_code ) { return new \WP_Error( 500, 'No Response' ); } // Server sent a success message without content. if ( 'null' === $body ) { $body = true; } $body = json_decode( $body, static::HTTP_RETURN_TYPE_ARRAY === $options['return_type'] ); if ( false === $body ) { return new \WP_Error( 422, 'Wrong Server Response' ); } if ( 201 === $response_code ) { return $body; } if ( 200 !== $response_code ) { // In case $as_array = true. $body = (object) $body; $message = isset( $body->message ) ? $body->message : wp_remote_retrieve_response_message( $response ); $code = (int) ( isset( $body->code ) ? $body->code : $response_code ); if ( ! $code ) { $code = $response_code; } if ( 401 === $code ) { $this->delete(); $should_retry = ! in_array( $this->auth_mode, [ 'xhr', 'cli' ], true ); if ( $should_retry ) { $this->action_authorize(); } } if ( isset( $options['with_error_data'] ) && true === $options['with_error_data'] ) { return new \WP_Error( $code, $message, $body ); } return new \WP_Error( $code, $message ); } return $body; } /** * Create a signature for the http request * * @param array $payload * * @return false|string */ private function generate_signature( $payload = [] ) { return hash_hmac( 'sha256', wp_json_encode( $payload, JSON_NUMERIC_CHECK ), $this->get( 'access_token_secret' ) ); } /** * @since 2.3.0 * @access protected */ protected function get_api_url() { return static::API_URL . '/' . $this->get_slug(); } /** * @since 2.3.0 * @access protected */ protected function get_remote_site_url() { return static::SITE_URL . '/' . $this->get_slug(); } /** * @since 2.3.0 * @access protected */ protected function get_remote_authorize_url() { $redirect_uri = $this->get_auth_redirect_uri(); $allowed_query_params_to_propagate = [ 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'source', 'screen_hint', ]; $query_params = ( new Collection( $_GET ) ) // phpcs:ignore ->only( $allowed_query_params_to_propagate ) ->merge( [ 'action' => 'authorize', 'response_type' => 'code', 'client_id' => $this->get( 'client_id' ), 'auth_secret' => $this->get( 'auth_secret' ), 'state' => $this->get( 'state' ), 'redirect_uri' => rawurlencode( $redirect_uri ), 'may_share_data' => current_user_can( 'manage_options' ) && ! Tracker::is_allow_track(), 'reconnect_nonce' => wp_create_nonce( $this->get_slug() . 'reconnect' ), ] ); $utm_campaign = get_transient( 'elementor_core_campaign' ); if ( ! empty( $utm_campaign ) ) { foreach ( [ 'source', 'medium', 'campaign' ] as $key ) { if ( ! empty( $utm_campaign[ $key ] ) ) { $query_params->offsetSet( 'utm_' . $key, $utm_campaign[ $key ] ); } } } return add_query_arg( $query_params->all(), $this->get_remote_site_url() ); } /** * @since 2.3.0 * @access protected */ protected function redirect_to_admin_page( $url = '' ) { if ( ! $url ) { $url = Admin::$url; } switch ( $this->auth_mode ) { case 'popup': $this->print_popup_close_script( $url ); break; case 'cli': case 'rest': $this->admin_notice(); die; default: wp_safe_redirect( $url ); die; } } /** * @since 2.3.0 * @access protected */ protected function set_client_id() { $source = Utils::get_super_global_value( $_REQUEST, 'source' ) ?? ''; //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. $response = $this->request( 'get_client_id', [ 'source' => esc_attr( $source ), ] ); if ( is_wp_error( $response ) ) { // PHPCS - the variable $response does not contain a user input value. wp_die( $response, $response->get_error_message() ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } $this->set( 'client_id', $response->client_id ); $this->set( 'auth_secret', $response->auth_secret ); } /** * @since 2.3.0 * @access protected */ protected function set_request_state() { $this->set( 'state', wp_generate_password( 12, false ) ); } protected function get_popup_success_event_data() { return []; } /** * @since 2.3.0 * @access protected */ protected function print_popup_close_script( $url ) { $data = $this->get_popup_success_event_data(); ?> is_connected() ) { // Try update the server, but not needed to handle errors. $this->request( 'disconnect' ); } $this->delete(); } /** * @since 2.3.0 * @access protected */ public function get_site_key() { $site_key = get_option( static::OPTION_CONNECT_SITE_KEY ); if ( ! $site_key ) { $site_key = md5( uniqid( wp_generate_password() ) ); update_option( static::OPTION_CONNECT_SITE_KEY, $site_key ); } return $site_key; } protected function redirect_to_remote_authorize_url() { switch ( $this->auth_mode ) { case 'cli': case 'rest': $this->get_app_token_from_cli_token( Utils::get_super_global_value( $_REQUEST, 'token' ) ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. return; default: wp_redirect( $this->get_remote_authorize_url() ); //phpcs:ignore WordPress.Security.SafeRedirect.wp_redirect_wp_redirect -- Safe redirect is used here. die; } } protected function get_auth_redirect_uri() { $redirect_uri = $this->get_admin_url( 'get_token' ); switch ( $this->auth_mode ) { case 'popup': $redirect_uri = add_query_arg( [ 'mode' => 'popup', 'callback_id' => esc_attr( Utils::get_super_global_value( $_REQUEST, 'callback_id' ) ), //phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here. ], $redirect_uri ); break; } return $redirect_uri; } protected function print_notices( $notices ) { switch ( $this->auth_mode ) { case 'cli': foreach ( $notices as $notice ) { printf( '[%s] %s', wp_kses_post( $notice['type'] ), wp_kses_post( $notice['content'] ) ); } break; case 'rest': // After `wp_send_json` the script will die. $this->delete( 'notices' ); wp_send_json( $notices ); break; default: /** * @var Admin_Notices $admin_notices */ $admin_notices = Plugin::$instance->admin->get_component( 'admin-notices' ); foreach ( $notices as $notice ) { $options = [ 'description' => wp_kses_post( wpautop( $notice['content'] ) ), 'type' => $notice['type'], 'icon' => false, ]; $admin_notices->print_admin_notice( $options ); } } } protected function get_app_info() { return []; } protected function print_app_info() { $app_info = $this->get_app_info(); foreach ( $app_info as $key => $item ) { if ( $item['value'] ) { $status = 'Exist'; $color = 'green'; } else { $status = 'Empty'; $color = 'red'; } // PHPCS - the values of $item['label'], $color, $status are plain strings. printf( '%s: %s
', $item['label'], $color, $status ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } } private function get_generated_urls( $endpoint ) { $base_urls = $this->get_api_url(); if ( ! is_array( $base_urls ) ) { $base_urls = [ $base_urls ]; } return array_map( function ( $base_url ) use ( $endpoint ) { return trailingslashit( $base_url ) . $endpoint; }, $base_urls ); } private function init_auth_mode() { $is_rest = defined( 'REST_REQUEST' ) && REST_REQUEST; $is_ajax = wp_doing_ajax(); if ( $is_rest || $is_ajax ) { // Set default to 'xhr' if rest or ajax request. $this->set_auth_mode( 'xhr' ); } $mode = Utils::get_super_global_value( $_REQUEST, 'mode' ); if ( $mode ) { $allowed_auth_modes = [ 'popup', ]; if ( defined( 'WP_CLI' ) && WP_CLI ) { $allowed_auth_modes[] = 'cli'; } if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) { $allowed_auth_modes[] = 'rest'; } if ( in_array( $mode, $allowed_auth_modes, true ) ) { $this->set_auth_mode( $mode ); } } } public function set_auth_mode( $mode ) { $this->auth_mode = $mode; } /** * @since 2.3.0 * @access public */ public function __construct() { add_action( 'admin_notices', [ $this, 'admin_notice' ] ); $this->init_auth_mode(); $this->http = new Http(); /** * Allow extended apps to customize the __construct without call parent::__construct. */ $this->init(); } } connect/apps/connect.php000064400000000674150732401470011314 0ustar00is_connected() ) { return new \WP_Error( '401', esc_html__( 'Connecting to the Library failed. Please try reloading the page and try again', 'elementor' ) ); } $body_args = [ 'id' => $id, // Which API version is used. 'api_version' => ELEMENTOR_VERSION, // Which language to return. 'site_lang' => get_bloginfo( 'language' ), ]; /** * API: Template body args. * * Filters the body arguments send with the GET request when fetching the content. * * @since 1.0.0 * * @param array $body_args Body arguments. */ $body_args = apply_filters( 'elementor/api/get_templates/body_args', $body_args ); $template_content = $this->request( 'get_template_content', $body_args, true ); if ( is_wp_error( $template_content ) && 401 === $template_content->get_error_code() ) { // Normalize 401 message return new \WP_Error( 401, esc_html__( 'Connecting to the Library failed. Please try reloading the page and try again', 'elementor' ) ); } return $template_content; } public function localize_settings( $settings ) { $is_connected = $this->is_connected(); /** @var ConnectModule $connect */ $connect = Plugin::$instance->common->get_component( 'connect' ); $user_id = $this->get_user_id(); return array_replace_recursive( $settings, [ 'library_connect' => [ 'is_connected' => $is_connected, 'user_id' => $user_id, 'subscription_plans' => $connect->get_subscription_plans( 'template-library' ), // TODO: Remove `base_access_level`. 'base_access_level' => ConnectModule::ACCESS_LEVEL_CORE, 'base_access_tier' => ConnectModule::ACCESS_TIER_FREE, 'current_access_level' => ConnectModule::ACCESS_LEVEL_CORE, 'current_access_tier' => ConnectModule::ACCESS_TIER_FREE, ], ] ); } public function library_connect_popup_seen() { User::set_introduction_viewed( [ 'introductionKey' => 'library_connect', ] ); } /** * @param \Elementor\Core\Common\Modules\Ajax\Module $ajax_manager */ public function register_ajax_actions( $ajax_manager ) { $ajax_manager->register_ajax_action( 'library_connect_popup_seen', [ $this, 'library_connect_popup_seen' ] ); } private function get_user_id() { $token = $this->get( 'access_token' ); if ( ! is_string( $token ) ) { return null; } $parts = explode( '.', $token ); if ( count( $parts ) !== 3 ) { return null; } try { $payload_encoded = $parts[1]; $payload_encoded = str_pad( $payload_encoded, strlen( $payload_encoded ) + ( 4 - strlen( $payload_encoded ) % 4 ) % 4, '=' ); $payload_json = base64_decode( strtr( $payload_encoded, '-_', '+/' ), true ); $payload = json_decode( $payload_json, true ); if ( ! isset( $payload['sub'] ) ) { return null; } return $payload['sub']; } catch ( Exception $e ) { error_log( 'JWT Decoding Error: ' . $e->getMessage() ); return null; } } /** * After Connect * * After Connecting to the library, re-fetch the library data to get it up to date. * * @since 3.7.0 */ protected function after_connect() { Api::get_library_data( true ); } protected function get_app_info() { return [ 'user_common_data' => [ 'label' => 'User Common Data', 'value' => get_user_option( $this->get_option_name(), get_current_user_id() ), ], 'connect_site_key' => [ 'label' => 'Site Key', 'value' => get_option( self::OPTION_CONNECT_SITE_KEY ), ], 'remote_info_library' => [ 'label' => 'Remote Library Info', 'value' => get_option( 'elementor_remote_info_library' ), ], ]; } protected function get_popup_success_event_data() { return [ 'access_level' => ConnectModule::ACCESS_LEVEL_CORE, 'access_tier' => ConnectModule::ACCESS_TIER_FREE, ]; } protected function init() { add_filter( 'elementor/editor/localize_settings', [ $this, 'localize_settings' ] ); add_filter( 'elementor/common/localize_settings', [ $this, 'localize_settings' ] ); add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] ); } } connect/rest/rest-api.php000064400000010230150732401470011406 0ustar00 \WP_REST_Server::CREATABLE, 'callback' => [ $this, 'connect' ], 'permission_callback' => [ $this, 'connect_permissions_check' ], 'args' => [ 'token' => [ 'required' => true, 'type' => 'string', 'description' => 'Connect CLI token', ], ], ], ] ); register_rest_route( self::REST_NAMESPACE, self::REST_BASE . '/connect', [ [ 'methods' => \WP_REST_Server::DELETABLE, 'callback' => [ $this, 'disconnect' ], 'permission_callback' => [ $this, 'connect_permissions_check' ], ], ] ); } public function connect( \WP_REST_Request $request ) { $app = $this->get_connect_app(); if ( ! $app ) { return $this->elementor_library_app_not_available(); } $app->set_auth_mode( self::AUTH_MODE ); $_REQUEST['mode'] = self::AUTH_MODE; $_REQUEST['token'] = $request->get_param( 'token' ); try { $app->action_authorize(); $app->action_get_token(); if ( $app->is_connected() ) { return $this->success_response( [ 'message' => __( 'Connected successfully.', 'elementor' ) ], WP_Http::CREATED ); } else { return $this->error_response( 'elementor_library_not_connected', __( 'Failed to connect to Elementor Library.', 'elementor' ), WP_Http::INTERNAL_SERVER_ERROR ); } } catch ( \Exception $e ) { return $this->error_response( 'elementor_library_connect_error', $e->getMessage(), WP_Http::INTERNAL_SERVER_ERROR ); } } public function disconnect( \WP_REST_Request $request ) { $app = $this->get_connect_app(); if ( ! $app ) { return $this->elementor_library_app_not_available(); } $app->set_auth_mode( self::AUTH_MODE ); $_REQUEST['mode'] = self::AUTH_MODE; try { $app->action_disconnect(); return $this->success_response( [ 'message' => __( 'Disconnected successfully.', 'elementor' ) ], WP_Http::OK ); } catch ( \Exception $e ) { return $this->error_response( 'elementor_library_disconnect_error', $e->getMessage(), WP_Http::INTERNAL_SERVER_ERROR ); } } public function connect_permissions_check( \WP_REST_Request $request ) { return current_user_can( 'manage_options' ); } private function route_wrapper( callable $cb ) { try { $response = $cb(); } catch ( \Exception $e ) { return $this->error_response( 'unexpected_error', __( 'Something went wrong', 'elementor' ), WP_Http::INTERNAL_SERVER_ERROR ); } return $response; } private function error_response( $code, $message, $status = WP_Http::BAD_REQUEST ) { return new \WP_Error( $code, $message, [ 'status' => $status ] ); } private function success_response( $data = [], $status = WP_Http::OK ) { $response = rest_ensure_response( array_merge( [ 'success' => true ], $data ) ); $response->set_status( $status ); return $response; } private function elementor_library_app_not_available() { return $this->error_response( 'elementor_library_app_not_available', __( 'Elementor Library app is not available.', 'elementor' ), WP_Http::INTERNAL_SERVER_ERROR ); } /** * Get the connect app. * * @return \Elementor\Core\Common\Modules\Connect\Apps\Library|null */ private function get_connect_app() { $connect = Plugin::$instance->common->get_component( 'connect' ); if ( ! $connect ) { return null; } $app = $connect->get_app( 'library' ); if ( ! $app ) { $connect->init(); $app = $connect->get_app( 'library' ); } return $app; } } connect/rest/readme.md000064400000004524150732401470010741 0ustar00# Elementor Library Connect REST API This module provides REST API endpoints for connecting and disconnecting your WordPress site to the Elementor Library, similar in purpose to the [Elementor CLI Library Connect command](https://developers.elementor.com/docs/cli/library-connect/). ## Overview The REST API allows programmatic connection and disconnection to the Elementor Library, which is useful for automation, integrations, and testing. **Note:** The REST API is intended for internal and advanced use, mirroring the functionality of the CLI command. ## Endpoints ### 1. Connect to Elementor Library - **URL:** `/index.php?rest_route=/elementor/v1/library/connect` - **Method:** `POST` - **Permissions:** Requires the `manage_options` capability (typically administrators). - **Body Parameters:** - `token` (string, required): The connect token from your Elementor account dashboard. #### Example Request ```http POST /index.php?rest_route=/elementor/v1/library/connect Content-Type: application/json Authorization: Basic {{encoded_wp_credentials}} { "token": "YOUR_CLI_TOKEN" } ``` #### Example Success Response ```json { "success": true, "message": "Connected successfully." } ``` #### Example Error Response ```json { "code": "elementor_library_not_connected", "message": "Failed to connect to Elementor Library.", "data": { "status": 500 } } ``` --- ### 2. Disconnect from Elementor Library - **URL:** `/index.php?rest_route=/elementor/v1/library/connect` - **Method:** `DELETE` - **Permissions:** Requires the `manage_options` capability. #### Example Request ```http DELETE /index.php?rest_route=/elementor/v1/library/connect Authorization: Basic {{encoded_wp_credentials}} ``` #### Example Success Response ```json { "success": true, "message": "Disconnected successfully." } ``` #### Example Error Response ```json { "code": "elementor_library_disconnect_error", "message": "Error message here", "data": { "status": 500 } } ``` --- ## Permissions All endpoints require the user to have the `manage_options` capability. ## Error Handling Errors are returned as standard WordPress REST API error objects, with a `code`, `message`, and HTTP status. ## Reference - For CLI usage and more context, see the [Elementor CLI Library Connect documentation](https://developers.elementor.com/docs/cli/library-connect/).