├── Customizer ├── Controls │ ├── Typography │ │ ├── src │ │ │ ├── typography-preview.ts │ │ │ ├── typography-control.scss │ │ │ └── interface.ts │ │ ├── dist │ │ │ └── typography-control-min.css │ │ ├── TypographyStore.php │ │ └── Entities │ │ │ ├── GoogleFontEntity.php │ │ │ └── GoogleFontsOrderEntity.php │ ├── Editor │ │ ├── src │ │ │ ├── editor-control.scss │ │ │ ├── editor-interface.ts │ │ │ └── editor-control.ts │ │ ├── dist │ │ │ ├── editor-control-min.css │ │ │ └── editor-control-min.js │ │ └── EditorField.php │ ├── Base │ │ ├── src │ │ │ ├── _rtl.scss │ │ │ └── _tooltips.scss │ │ └── libs │ │ │ ├── react-jsx-runtime.min.js.LICENSE.txt │ │ │ └── react-jsx-runtime.min.js │ ├── Responsive │ │ ├── src │ │ │ ├── interface.ts │ │ │ └── DeviceButtons.tsx │ │ └── dist │ │ │ └── responsive-control-min.js │ ├── Radio │ │ ├── dist │ │ │ ├── radio-control-min.js │ │ │ └── radio-control-min.css │ │ ├── src │ │ │ ├── radio-control.scss │ │ │ ├── radio-control.ts │ │ │ ├── radio-buttonset-control.scss │ │ │ └── radio-image-control.scss │ │ ├── RadioImageField.php │ │ ├── RadioButtonsetField.php │ │ ├── RadioButtonsetControl.php │ │ └── RadioField.php │ ├── Select │ │ ├── src │ │ │ ├── select-control.ts │ │ │ ├── select-control.scss │ │ │ └── interface.ts │ │ └── dist │ │ │ └── select-control-min.css │ ├── Color │ │ ├── src │ │ │ ├── color-control.ts │ │ │ ├── hooks │ │ │ │ ├── useWindowResize.ts │ │ │ │ └── useFocusOutside.ts │ │ │ ├── components │ │ │ │ ├── ColorPickerSwatches.tsx │ │ │ │ └── ColorPickerCircle.tsx │ │ │ └── interface.ts │ │ └── dist │ │ │ └── color-preview-min.js │ ├── Checkbox │ │ ├── src │ │ │ ├── interface.ts │ │ │ └── checkbox-control.ts │ │ ├── dist │ │ │ └── checkbox-control-min.js │ │ └── ToggleField.php │ ├── Slider │ │ ├── src │ │ │ ├── input-slider-control.ts │ │ │ ├── responsive-input-slider-control.ts │ │ │ ├── slider-control.ts │ │ │ └── interface.ts │ │ └── SliderField.php │ ├── Sortable │ │ ├── src │ │ │ ├── interface.ts │ │ │ ├── sortable-control.scss │ │ │ └── sortable-control.ts │ │ ├── dist │ │ │ ├── sortable-control-min.css │ │ │ └── sortable-control-min.js │ │ └── SortableField.php │ ├── Dimension │ │ ├── src │ │ │ ├── dimension-control.scss │ │ │ └── interface.ts │ │ ├── dist │ │ │ ├── dimension-control-min.css │ │ │ └── dimension-control-min.js │ │ └── DimensionField.php │ ├── Headline │ │ ├── src │ │ │ ├── headline-toggle-control.scss │ │ │ └── headline-control.scss │ │ ├── dist │ │ │ ├── headline-toggle-control-min.css │ │ │ └── headline-control-min.css │ │ ├── HeadlineToggleField.php │ │ ├── DividerField.php │ │ ├── HeadlineField.php │ │ ├── DividerControl.php │ │ └── HeadlineControl.php │ ├── MarginPadding │ │ ├── dist │ │ │ └── margin-padding-preview-min.js │ │ ├── src │ │ │ ├── margin-padding-control.ts │ │ │ ├── interface.ts │ │ │ └── margin-padding-preview.ts │ │ └── ResponsiveMarginPaddingControl.php │ ├── Generic │ │ ├── dist │ │ │ ├── assoc-array-control-min.js │ │ │ └── generic-control-min.js │ │ ├── src │ │ │ ├── string-util.ts │ │ │ ├── interface.ts │ │ │ ├── generic-control.ts │ │ │ └── assoc-array-control.ts │ │ ├── GenericField.php │ │ └── GenericSanitizer.php │ ├── Media │ │ ├── src │ │ │ └── image-interface.ts │ │ ├── MediaSanitizer.php │ │ ├── ImageField.php │ │ └── UploadField.php │ ├── Tabs │ │ ├── dist │ │ │ ├── section-tabs-control-min.css │ │ │ └── section-tabs-control-min.js │ │ ├── src │ │ │ └── section-tabs-control.scss │ │ └── SectionTabsField.php │ ├── Custom │ │ ├── CustomField.php │ │ └── CustomControl.php │ ├── Code │ │ └── CodeField.php │ └── Repeater │ │ └── src │ │ └── repeater-interface.ts ├── Sections │ ├── OuterSection.php │ ├── ExpandedSection.php │ ├── dist │ │ └── section-types-min.css │ ├── src │ │ └── section-types.scss │ └── NestedSection.php ├── Compatibility │ ├── kirki-control-base-compatibility.php │ ├── kirki-panel-section-compatibility.php │ └── wpbf-old-controls-compatibility.php ├── Panels │ ├── NestedPanel.php │ └── dist │ │ └── panel-types-min.js └── Entities │ ├── PartialRefreshEntity.php │ └── CustomizerPanelEntity.php ├── fonts ├── star.eot ├── star.ttf ├── star.woff ├── WooCommerce.eot ├── WooCommerce.ttf ├── WooCommerce.woff ├── page-builder-framework.ttf ├── page-builder-framework.woff ├── page-builder-framework.woff2 └── star.svg ├── img ├── edd │ ├── xit.gif │ ├── tick.png │ ├── loading.gif │ └── icons │ │ ├── visa.gif │ │ ├── visa.png │ │ ├── amazon.gif │ │ ├── amazon.png │ │ ├── iphone.png │ │ ├── paypal.gif │ │ ├── paypal.png │ │ ├── discover.gif │ │ ├── discover.png │ │ ├── mastercard.gif │ │ ├── mastercard.png │ │ ├── americanexpress.gif │ │ └── americanexpress.png ├── arrow-down.png ├── icons │ ├── edit.png │ ├── credit-cards │ │ ├── jcb.png │ │ ├── amex.png │ │ ├── diners.png │ │ ├── laser.png │ │ ├── visa.png │ │ ├── discover.png │ │ ├── maestro.png │ │ └── mastercard.png │ └── loader.svg ├── banner-wpml.png ├── toolset-banner.png ├── premium-add-on-banner.jpg ├── premium-add-on-banner-2.jpg ├── page-builder-framework-logo.png └── page-builder-framework-logo-blue.png ├── screenshot.jpg ├── .prettierrc ├── assets ├── scss │ ├── rtl.scss │ ├── iconfont.scss │ ├── admin-rtl.scss │ ├── responsive.scss │ ├── style.scss │ ├── edit-post.scss │ ├── admin-rtl │ │ └── _admin-rtl.scss │ ├── main │ │ ├── _typography.scss │ │ └── _blocks.scss │ └── post-list.scss ├── woocommerce │ └── scss │ │ └── fragments │ │ ├── _animation.scss │ │ ├── _fonts.scss │ │ └── _variables.scss ├── js │ ├── site-jquery.js │ ├── edit-post.js │ └── site.js ├── edd │ └── js │ │ └── edd-ajax.js └── css │ └── admin-notices.css ├── vendor ├── composer │ ├── installed.json │ ├── autoload_namespaces.php │ ├── autoload_psr4.php │ ├── autoload_classmap.php │ ├── installed.php │ ├── LICENSE │ ├── autoload_static.php │ └── autoload_real.php └── autoload.php ├── inc ├── customizer │ ├── img │ │ ├── align-left.jpg │ │ ├── align-center.jpg │ │ └── align-right.jpg │ ├── js │ │ ├── customizer.js │ │ └── responsive-controls.js │ ├── customizer-settings.php │ ├── settings │ │ ├── settings-premium.php │ │ ├── settings-compatibility.php │ │ └── settings-helpers.php │ └── css │ │ └── responsive-controls.css ├── template-parts │ ├── single │ │ ├── single-title.php │ │ ├── single-meta.php │ │ ├── single-tags.php │ │ ├── single-categories.php │ │ └── single-featured.php │ ├── blog │ │ ├── blog-meta.php │ │ ├── blog-title.php │ │ ├── blog-tags.php │ │ ├── blog-categories.php │ │ ├── blog-featured.php │ │ └── blog-readmore.php │ ├── navigation │ │ ├── menu-elementor.php │ │ ├── menu-mobile-elementor.php │ │ ├── menu-vertical-left.php │ │ ├── menu-stacked.php │ │ ├── menu-centered.php │ │ ├── menu-left.php │ │ ├── menu-right.php │ │ ├── menu-stacked-advanced.php │ │ └── menu-mobile-default.php │ ├── single-article.php │ ├── article.php │ ├── article-none.php │ ├── header.php │ └── 404.php ├── integration │ ├── lifterlms │ │ ├── templates │ │ │ └── global │ │ │ │ ├── wrapper-end.php │ │ │ │ └── wrapper-start.php │ │ └── lifterlms.php │ ├── woocommerce │ │ └── woocommerce-elementor.php │ ├── edd │ │ └── edd.php │ ├── gutenberg │ │ └── gutenberg.php │ ├── beaver-builder.php │ └── header-footer-elementor.php ├── settings │ ├── metaboxes │ │ ├── community.php │ │ ├── review.php │ │ ├── clear-font-cache.php │ │ └── resources.php │ ├── activation-notice.php │ ├── compatibility-notice.php │ └── bfcm-notice.php ├── class-vars.php └── body-classes.php ├── css └── min │ ├── page-builder-framework.ttf │ ├── page-builder-framework.woff │ ├── page-builder-framework.woff2 │ ├── edit-post-min.css │ ├── admin-rtl-min.css │ └── post-list-min.css ├── pnpm-workspace.yaml ├── 404.php ├── .editorconfig ├── js └── min │ ├── edit-post-min.js │ └── activation-notice-min.js ├── composer.json ├── footer.php ├── .gitignore ├── composer.lock ├── readme.md ├── tsconfig.json ├── theme.json ├── header.php ├── sidebar.php ├── searchform.php ├── index.php ├── single.php └── page-sidebar.php /Customizer/Controls/Typography/src/typography-preview.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fonts/star.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/star.eot -------------------------------------------------------------------------------- /fonts/star.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/star.ttf -------------------------------------------------------------------------------- /fonts/star.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/star.woff -------------------------------------------------------------------------------- /img/edd/xit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/xit.gif -------------------------------------------------------------------------------- /screenshot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/screenshot.jpg -------------------------------------------------------------------------------- /img/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/arrow-down.png -------------------------------------------------------------------------------- /img/edd/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/tick.png -------------------------------------------------------------------------------- /img/icons/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/edit.png -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "tabWidth": 2, 4 | "bracketSpacing": true, 5 | "plugins": [] 6 | } -------------------------------------------------------------------------------- /img/banner-wpml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/banner-wpml.png -------------------------------------------------------------------------------- /img/edd/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/loading.gif -------------------------------------------------------------------------------- /fonts/WooCommerce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/WooCommerce.eot -------------------------------------------------------------------------------- /fonts/WooCommerce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/WooCommerce.ttf -------------------------------------------------------------------------------- /fonts/WooCommerce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/WooCommerce.woff -------------------------------------------------------------------------------- /img/edd/icons/visa.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/visa.gif -------------------------------------------------------------------------------- /img/edd/icons/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/visa.png -------------------------------------------------------------------------------- /img/toolset-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/toolset-banner.png -------------------------------------------------------------------------------- /assets/scss/rtl.scss: -------------------------------------------------------------------------------- 1 | // Variables & Mixins 2 | @import "config/config"; 3 | 4 | // Responsive 5 | @import "rtl/rtl"; -------------------------------------------------------------------------------- /img/edd/icons/amazon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/amazon.gif -------------------------------------------------------------------------------- /img/edd/icons/amazon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/amazon.png -------------------------------------------------------------------------------- /img/edd/icons/iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/iphone.png -------------------------------------------------------------------------------- /img/edd/icons/paypal.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/paypal.gif -------------------------------------------------------------------------------- /img/edd/icons/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/paypal.png -------------------------------------------------------------------------------- /img/edd/icons/discover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/discover.gif -------------------------------------------------------------------------------- /img/edd/icons/discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/discover.png -------------------------------------------------------------------------------- /img/edd/icons/mastercard.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/mastercard.gif -------------------------------------------------------------------------------- /img/edd/icons/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/mastercard.png -------------------------------------------------------------------------------- /vendor/composer/installed.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [], 3 | "dev": true, 4 | "dev-package-names": [] 5 | } 6 | -------------------------------------------------------------------------------- /img/icons/credit-cards/jcb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/jcb.png -------------------------------------------------------------------------------- /img/premium-add-on-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/premium-add-on-banner.jpg -------------------------------------------------------------------------------- /assets/scss/iconfont.scss: -------------------------------------------------------------------------------- 1 | // Variables & Mixins 2 | @import "config/config"; 3 | 4 | // Icon Font 5 | @import "iconfont/iconfont"; -------------------------------------------------------------------------------- /fonts/page-builder-framework.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/page-builder-framework.ttf -------------------------------------------------------------------------------- /fonts/page-builder-framework.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/page-builder-framework.woff -------------------------------------------------------------------------------- /img/edd/icons/americanexpress.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/americanexpress.gif -------------------------------------------------------------------------------- /img/edd/icons/americanexpress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/edd/icons/americanexpress.png -------------------------------------------------------------------------------- /img/icons/credit-cards/amex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/amex.png -------------------------------------------------------------------------------- /img/icons/credit-cards/diners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/diners.png -------------------------------------------------------------------------------- /img/icons/credit-cards/laser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/laser.png -------------------------------------------------------------------------------- /img/icons/credit-cards/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/visa.png -------------------------------------------------------------------------------- /img/premium-add-on-banner-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/premium-add-on-banner-2.jpg -------------------------------------------------------------------------------- /inc/customizer/img/align-left.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/inc/customizer/img/align-left.jpg -------------------------------------------------------------------------------- /assets/scss/admin-rtl.scss: -------------------------------------------------------------------------------- 1 | // Variables & Mixins 2 | @import "config/config"; 3 | 4 | // Responsive 5 | @import "admin-rtl/admin-rtl"; -------------------------------------------------------------------------------- /css/min/page-builder-framework.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/css/min/page-builder-framework.ttf -------------------------------------------------------------------------------- /css/min/page-builder-framework.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/css/min/page-builder-framework.woff -------------------------------------------------------------------------------- /fonts/page-builder-framework.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/fonts/page-builder-framework.woff2 -------------------------------------------------------------------------------- /img/icons/credit-cards/discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/discover.png -------------------------------------------------------------------------------- /img/icons/credit-cards/maestro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/maestro.png -------------------------------------------------------------------------------- /img/page-builder-framework-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/page-builder-framework-logo.png -------------------------------------------------------------------------------- /inc/customizer/img/align-center.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/inc/customizer/img/align-center.jpg -------------------------------------------------------------------------------- /inc/customizer/img/align-right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/inc/customizer/img/align-right.jpg -------------------------------------------------------------------------------- /Customizer/Controls/Editor/src/editor-control.scss: -------------------------------------------------------------------------------- 1 | .customize-control-kirki-editor { 2 | textarea { 3 | width: 100%; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /assets/scss/responsive.scss: -------------------------------------------------------------------------------- 1 | // Variables & Mixins 2 | @import "config/config"; 3 | 4 | // Media Queries 5 | @import "responsive/responsive"; -------------------------------------------------------------------------------- /css/min/page-builder-framework.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/css/min/page-builder-framework.woff2 -------------------------------------------------------------------------------- /img/icons/credit-cards/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/icons/credit-cards/mastercard.png -------------------------------------------------------------------------------- /img/page-builder-framework-logo-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mapsteps/page-builder-framework/HEAD/img/page-builder-framework-logo-blue.png -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | onlyBuiltDependencies: 2 | - '@parcel/watcher' 3 | - '@swc/core' 4 | - esbuild 5 | - lmdb 6 | - msgpackr-extract 7 | -------------------------------------------------------------------------------- /Customizer/Controls/Editor/dist/editor-control-min.css: -------------------------------------------------------------------------------- 1 | .customize-control-kirki-editor textarea{width:100%} 2 | /*# sourceMappingURL=editor-control-min.css.map */ 3 | -------------------------------------------------------------------------------- /Customizer/Controls/Base/src/_rtl.scss: -------------------------------------------------------------------------------- 1 | .rtl { 2 | @media screen and (min-width: 1667px) { 3 | .wp-full-overlay.expanded { 4 | margin-right: 300px; 5 | margin-left: 0; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /assets/woocommerce/scss/fragments/_animation.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * _animation.scss 3 | * Custom WooCommerce Animations. 4 | */ 5 | @keyframes spin { 6 | 100% { 7 | transform: rotate( 360deg ); 8 | } 9 | } -------------------------------------------------------------------------------- /vendor/composer/autoload_namespaces.php: -------------------------------------------------------------------------------- 1 | array($baseDir . '/'), 10 | ); 11 | -------------------------------------------------------------------------------- /404.php: -------------------------------------------------------------------------------- 1 | $vendorDir . '/composer/InstalledVersions.php', 10 | ); 11 | -------------------------------------------------------------------------------- /inc/template-parts/blog/blog-meta.php: -------------------------------------------------------------------------------- 1 | .select2-container{z-index:500001}.wp-customizer>.select2-container .select2-search__field{line-height:normal}.wpbf-control-form .select2-container{max-width:100%} 2 | /*# sourceMappingURL=select-control-min.css.map */ 3 | -------------------------------------------------------------------------------- /Customizer/Compatibility/kirki-control-base-compatibility.php: -------------------------------------------------------------------------------- 1 | '; 12 | 13 | echo do_shortcode( get_theme_mod( 'menu_custom' ) ); 14 | 15 | echo ''; 16 | -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-mobile-elementor.php: -------------------------------------------------------------------------------- 1 | '; 12 | 13 | do_action( 'wpbf_mobile_menu' ); 14 | 15 | echo ''; 16 | -------------------------------------------------------------------------------- /Customizer/Controls/Checkbox/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export interface WpbfCustomizeCheckboxControlParams 7 | extends WpbfCustomizeControlParams {} 8 | 9 | export interface WpbfCustomizeCheckboxControl 10 | extends WpbfCustomizeControl {} 11 | -------------------------------------------------------------------------------- /Customizer/Controls/Slider/src/input-slider-control.ts: -------------------------------------------------------------------------------- 1 | import "./input-slider-control.scss"; 2 | import InputSliderControl from "./InputSliderControl"; 3 | import { WpbfCustomize } from "../../Base/src/interface"; 4 | 5 | declare var wp: { 6 | customize: WpbfCustomize; 7 | }; 8 | 9 | // Register control type with Customizer. 10 | wp.customize.controlConstructor["wpbf-input-slider"] = InputSliderControl; 11 | -------------------------------------------------------------------------------- /Customizer/Controls/Sortable/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export interface WpbfCustomizeSortableControlParams 7 | extends WpbfCustomizeControlParams {} 8 | 9 | export interface WpbfCustomizeSortableControl 10 | extends WpbfCustomizeControl { 11 | } 12 | -------------------------------------------------------------------------------- /Customizer/Controls/Select/src/select-control.scss: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-select { 2 | input[autocomplete="off"] { 3 | box-shadow: none; 4 | } 5 | } 6 | 7 | .wp-customizer > .select2-container { 8 | z-index: 500001; 9 | } 10 | 11 | .wp-customizer > .select2-container .select2-search__field { 12 | line-height: normal; 13 | } 14 | 15 | .wpbf-control-form .select2-container { 16 | max-width: 100%; 17 | } 18 | -------------------------------------------------------------------------------- /inc/template-parts/single/single-meta.php: -------------------------------------------------------------------------------- 1 | { 5 | const listener = (_e: any) => { 6 | handler(); 7 | }; 8 | 9 | window.addEventListener("resize", listener, true); 10 | 11 | return () => { 12 | window.removeEventListener("resize", listener, true); 13 | }; 14 | }, [handler]); 15 | } 16 | -------------------------------------------------------------------------------- /Customizer/Controls/Dimension/src/dimension-control.scss: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-dimension { 2 | .has-label-bottom { 3 | .wpbf-control-label { 4 | margin-top: 3px; 5 | text-align: center; 6 | font-size: 11px; 7 | color: #333; 8 | font-weight: 500; 9 | } 10 | 11 | .wpbf-control-input { 12 | background-color: #f7f7f7; 13 | 14 | &:focus { 15 | background-color: #fff; 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Customizer/Controls/Editor/src/editor-interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export interface WpbfCustomizeEditorControlParams 7 | extends WpbfCustomizeControlParams { 8 | default: string; 9 | } 10 | 11 | export interface WpbfCustomizeEditorControl 12 | extends WpbfCustomizeControl {} 13 | -------------------------------------------------------------------------------- /inc/template-parts/article.php: -------------------------------------------------------------------------------- 1 | {if("wpbf-margin-padding"!==p||"string"==typeof e||"number"==typeof e||!e.top&&!e.right&&!e.bottom&&!e.left)return t;let f=p.replace("wpbf-","");for(let p in t+=r.element+"{",e)if(Object.hasOwnProperty.call(e,p)){let r=e[p];""!==r&&(t+=f+"-"+p+": "+r+";")}return t+"}"}); 2 | //# sourceMappingURL=margin-padding-preview-min.js.map 3 | -------------------------------------------------------------------------------- /inc/template-parts/blog/blog-title.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |

16 | 17 |

18 | -------------------------------------------------------------------------------- /Customizer/Controls/Slider/src/slider-control.ts: -------------------------------------------------------------------------------- 1 | import "./slider-control.scss"; 2 | import SliderControl from "./SliderControl"; 3 | import { WpbfCustomize } from "../../Base/src/interface"; 4 | import { WpbfCustomizeSliderControl } from "./interface"; 5 | 6 | declare var wp: { 7 | customize: WpbfCustomize; 8 | }; 9 | 10 | // Register control type with Customizer. 11 | wp.customize.controlConstructor["wpbf-slider"] = 12 | SliderControl as WpbfCustomizeSliderControl; 13 | -------------------------------------------------------------------------------- /Customizer/Controls/MarginPadding/src/margin-padding-control.ts: -------------------------------------------------------------------------------- 1 | import "./margin-padding-control.scss"; 2 | import MarginPaddingControl from "./MarginPaddingControl"; 3 | import { WpbfCustomize } from "../../Base/src/interface"; 4 | 5 | declare var wp: { 6 | customize: WpbfCustomize; 7 | }; 8 | 9 | wp.customize.controlConstructor["wpbf-margin-padding"] = MarginPaddingControl; 10 | 11 | wp.customize.controlConstructor["wpbf-responsive-margin-padding"] = 12 | MarginPaddingControl; 13 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mapsteps/aura", 3 | "description": "PHP tooling for Aura Theme", 4 | "type": "project", 5 | "license": "GPL-3.0-or-later", 6 | "autoload": { 7 | "psr-4": { 8 | "Mapsteps\\Wpbf\\": "" 9 | } 10 | }, 11 | "authors": [ 12 | { 13 | "name": "David Vongries" 14 | } 15 | ], 16 | "minimum-stability": "stable", 17 | "require": { 18 | "ext-json": "*" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /assets/js/site-jquery.js: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import setupjQuerySite from "./setup/jquery-site-general"; 4 | import setupjQueryDesktopMenu from "./setup/jquery-desktop-menu"; 5 | import setupjQueryMobileMenu from "./setup/jquery-mobile-menu"; 6 | 7 | // Export `WpbfTheme` object to `window` for backwards compatibility. 8 | // @ts-ignore 9 | window["WpbfTheme"] = setupjQuerySite(jQuery); 10 | 11 | setupjQueryDesktopMenu(jQuery); 12 | setupjQueryMobileMenu(jQuery); 13 | -------------------------------------------------------------------------------- /css/min/admin-rtl-min.css: -------------------------------------------------------------------------------- 1 | .rtl .wpbf-documentation-boxes .heatbox{margin-right:0}.rtl .wpbf-documentation-boxes .heatbox:nth-child(2n){margin-right:2%}.rtl .wpbf-recommended-list li{margin-right:0}.rtl .wpbf-recommended-list li:nth-child(2n){margin-right:2%}.rtl .wpbf-customizer-list li:nth-child(odd){border-left:1px solid #ddd;border-right-width:0}.rtl .wpbf-input-slider-control input[type=text]{text-align:left;margin-left:0;margin-right:15px}.rtl .wpbf-input-slider-control .slider-reset{left:0;right:auto} -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Customizer/Controls/Typography/src/typography-control.scss: -------------------------------------------------------------------------------- 1 | .customize-control[data-wpbf-typography-type] { 2 | margin-bottom: 10px; 3 | 4 | .customize-control-title { 5 | margin-bottom: 0; 6 | font-weight: 500; 7 | font-size: 12px; 8 | } 9 | } 10 | 11 | .customize-control[data-wpbf-typography-css-prop="text-decoration"] { 12 | margin-bottom: 15px; 13 | } 14 | 15 | .wpbf-typography-end { 16 | margin-top: 8px; 17 | margin-bottom: 8px; 18 | 19 | hr { 20 | margin-top: 0; 21 | margin-bottom: 0; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ignore build tools 2 | node_modules/ 3 | package-lock.json 4 | gulpfile.js 5 | .parcel-cache 6 | 7 | # ignore sensitive files 8 | auth.json 9 | 10 | # ignore old files 11 | *.backup.* 12 | 13 | # Sass Cache 14 | .sass-cache/ 15 | 16 | # DS_Store 17 | .DS_Store 18 | 19 | # editor's setting related 20 | .vscode/ 21 | .idea/ 22 | 23 | # developer specific 24 | david-gulpfile.js 25 | david-package.json 26 | bagus-gulpfile.js 27 | bagus-package.json 28 | manifest.json 29 | 30 | # project specific 31 | *.map 32 | build 33 | -------------------------------------------------------------------------------- /Customizer/Controls/Dimension/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export interface WpbfCustomizeDimensionControlParams 7 | extends WpbfCustomizeControlParams { 8 | inputClass: string; 9 | labelPosition: string; 10 | allowUnitless: boolean; 11 | } 12 | 13 | export interface WpbfCustomizeDimensionControl 14 | extends WpbfCustomizeControl< 15 | string | number, 16 | WpbfCustomizeDimensionControlParams 17 | > {} 18 | -------------------------------------------------------------------------------- /Customizer/Controls/Radio/src/radio-control.ts: -------------------------------------------------------------------------------- 1 | import "./radio-control.scss"; 2 | import { WpbfCustomize } from "../../Base/src/interface"; 3 | 4 | declare var wp: { 5 | customize: WpbfCustomize; 6 | }; 7 | 8 | wp.customize.controlConstructor["wpbf-radio"] = 9 | wp.customize.wpbfDynamicControl.extend({}); 10 | 11 | wp.customize.controlConstructor["wpbf-radio-buttonset"] = 12 | wp.customize.wpbfDynamicControl.extend({}); 13 | 14 | wp.customize.controlConstructor["wpbf-radio-image"] = 15 | wp.customize.wpbfDynamicControl.extend({}); 16 | -------------------------------------------------------------------------------- /Customizer/Controls/Checkbox/dist/checkbox-control-min.js: -------------------------------------------------------------------------------- 1 | wp.customize.controlConstructor["wpbf-checkbox"]=wp.customize.wpbfDynamicControl.extend({initWpbfControl:function(t){let n=t||this;n.container.on("change","input",function(){n.setting?.set(jQuery(this).is(":checked"))})}}),wp.customize.controlConstructor["wpbf-toggle"]=wp.customize.wpbfDynamicControl.extend({initWpbfControl:function(t){let n=t||this;n.container.on("change","input",function(){n.setting?.set(jQuery(this).is(":checked"))})}}); 2 | //# sourceMappingURL=checkbox-control-min.js.map 3 | -------------------------------------------------------------------------------- /inc/template-parts/blog/blog-tags.php: -------------------------------------------------------------------------------- 1 | ' . apply_filters( 'wpbf_tags_title', __( 'Tags:', 'page-builder-framework' ) ) . ' ', ', ', '

' ); 19 | -------------------------------------------------------------------------------- /inc/template-parts/single/single-tags.php: -------------------------------------------------------------------------------- 1 | ' . apply_filters( 'wpbf_tags_title', __( 'Tags:', 'page-builder-framework' ) ) . ' ', ', ', '

' ); 19 | -------------------------------------------------------------------------------- /assets/scss/style.scss: -------------------------------------------------------------------------------- 1 | // Normalize 2 | @import "config/normalize"; 3 | 4 | // Config 5 | @import "config/config"; 6 | 7 | // CSS framework 8 | @import "main/framework"; 9 | 10 | // Typography 11 | @import "main/typography"; 12 | 13 | // Defaults 14 | @import "main/defaults"; 15 | 16 | // Navigation 17 | @import "main/navigation"; 18 | 19 | // Content 20 | @import "main/content"; 21 | 22 | // Compatibility 23 | @import "main/compatibility"; 24 | 25 | // Gutenberg 26 | @import "main/gutenberg"; 27 | 28 | // Blocks 29 | @import "main/blocks"; 30 | -------------------------------------------------------------------------------- /Customizer/Controls/Sortable/src/sortable-control.scss: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-sortable { 2 | ul.ui-sortable { 3 | li { 4 | padding: 5px 10px; 5 | border: 1px solid #333; 6 | background: #fff; 7 | 8 | .dashicons { 9 | &.dashicons-menu { 10 | float: right; 11 | } 12 | 13 | &.visibility { 14 | margin-right: 10px; 15 | } 16 | } 17 | 18 | &.invisible { 19 | color: #aaa; 20 | border: 1px dashed #aaa; 21 | 22 | .dashicons.visibility { 23 | color: #aaa; 24 | } 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /assets/edd/js/edd-ajax.js: -------------------------------------------------------------------------------- 1 | jQuery( function( $ ) { 2 | 3 | // reload when item is added or removed 4 | $( document.body ).on( 'edd_cart_item_removed edd_cart_item_added', function( event, response ) { 5 | var data = { 6 | security: wpbf_edd_fragments.nonce, 7 | action: "wpbf_edd_fragments", 8 | }; 9 | 10 | xhr = $.ajax({ 11 | type: 'POST', 12 | url: wpbf_edd_fragments.ajaxurl, 13 | data: data, 14 | success: function( response ) { 15 | $('.wpbf-edd-menu-item').html( response ); 16 | } 17 | }); 18 | 19 | }); 20 | 21 | }); -------------------------------------------------------------------------------- /inc/integration/lifterlms/templates/global/wrapper-end.php: -------------------------------------------------------------------------------- 1 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Customizer/Controls/Sortable/dist/sortable-control-min.css: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-sortable ul.ui-sortable li{background:#fff;border:1px solid #333;padding:5px 10px}.wpbf-customize-control-sortable ul.ui-sortable li .dashicons.dashicons-menu{float:right}.wpbf-customize-control-sortable ul.ui-sortable li .dashicons.visibility{margin-right:10px}.wpbf-customize-control-sortable ul.ui-sortable li.invisible{color:#aaa;border:1px dashed #aaa}.wpbf-customize-control-sortable ul.ui-sortable li.invisible .dashicons.visibility{color:#aaa} 2 | /*# sourceMappingURL=sortable-control-min.css.map */ 3 | -------------------------------------------------------------------------------- /Customizer/Controls/Generic/dist/assoc-array-control-min.js: -------------------------------------------------------------------------------- 1 | !function(){wp.customize.controlConstructor["wpbf-assoc-array"]=wp.customize.wpbfDynamicControl.extend({initWpbfControl:function(t){"wpbf-assoc-array"===(t=t||this).params.type&&t.setting?.bind(n=>{t.updateComponentState?.(n)})},updateComponentState:function(n){let e=this.container[0].querySelectorAll(t);e.length&&e.forEach(t=>{if(!(t instanceof HTMLInputElement))return;let e=t.dataset.settingProp;e&&n[e]&&(t.value=n[e])})}});let t=".wpbf-control-form input[data-setting-prop]"}(); 2 | //# sourceMappingURL=assoc-array-control-min.js.map 3 | -------------------------------------------------------------------------------- /img/icons/loader.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /assets/scss/edit-post.scss: -------------------------------------------------------------------------------- 1 | .wpbf-is-hidden { 2 | display: none; 3 | } 4 | 5 | .wpbf-layout-custom-width-field-wrapper { 6 | margin-top: 5px; 7 | 8 | label { 9 | display: block; 10 | color: #888; 11 | } 12 | } 13 | 14 | #layout-custom-width-value { 15 | display: block; 16 | padding-left: 7px; 17 | padding-right: 7px; 18 | width: 100%; 19 | height: 30px; 20 | } 21 | 22 | // Hide "Inherit Global Settings" from Sidebar metabox on pages. 23 | .post-type-page #wpbf_sidebar #sidebar-global, 24 | .post-type-page #wpbf_sidebar #sidebar-global + label { 25 | display: none; 26 | } 27 | -------------------------------------------------------------------------------- /Customizer/Controls/Editor/dist/editor-control-min.js: -------------------------------------------------------------------------------- 1 | wp.customize.controlConstructor["wpbf-editor"]=wp.customize.wpbfDynamicControl.extend({initWpbfControl:function(t){let e=t||this,i=e.container.find("textarea"),n="wpbf-editor-"+e.id.replace("[","").replace("]","");wp.editor&&wp.editor.initialize&&wp.editor.initialize(n,jQuery.extend({},{tinymce:{wpautop:!0},quicktags:!0,mediaButtons:!0},{tinymce:e.params.tinymce,quicktags:e.params.quicktags}));let a=tinyMCE.get(n);a&&a.onChange.add(function(t){t.save();let n=a.getContent();i.val(n).trigger("change"),wp.customize.instance(e.id).set(n)})}}); 2 | //# sourceMappingURL=editor-control-min.js.map 3 | -------------------------------------------------------------------------------- /inc/integration/woocommerce/woocommerce-elementor.php: -------------------------------------------------------------------------------- 1 | .products.elementor-grid { display: flex }'; 18 | } 19 | add_action( 'wp_head', 'wpbf_woo_elementor_grid_fix', 999 ); 20 | -------------------------------------------------------------------------------- /inc/template-parts/blog/blog-categories.php: -------------------------------------------------------------------------------- 1 | '; 19 | 20 | echo '' . apply_filters( 'wpbf_categories_title', __( 'Filed under:', 'page-builder-framework' ) ) . ' '; 21 | 22 | echo get_the_category_list( ', ' ); 23 | 24 | echo '

'; 25 | -------------------------------------------------------------------------------- /inc/template-parts/single/single-categories.php: -------------------------------------------------------------------------------- 1 | '; 19 | 20 | echo '' . apply_filters( 'wpbf_categories_title', __( 'Filed under:', 'page-builder-framework' ) ) . ' '; 21 | 22 | echo get_the_category_list( ', ' ); 23 | 24 | echo '

'; 25 | -------------------------------------------------------------------------------- /Customizer/Controls/Color/src/hooks/useFocusOutside.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | 3 | export default function useFocusOutside(ref: any, handler: any) { 4 | useEffect(() => { 5 | const listener = (e: any) => { 6 | // Do nothing if the component hasn't been mounted. 7 | if (!ref.current) return; 8 | 9 | // Do nothing if the focused element is inside the ref or the ref itself. 10 | if (ref.current.contains(e.target)) return; 11 | 12 | handler(); 13 | }; 14 | 15 | document.addEventListener("focus", listener, true); 16 | 17 | return () => { 18 | document.removeEventListener("focus", listener, true); 19 | }; 20 | }, [ref, handler]); 21 | } 22 | -------------------------------------------------------------------------------- /Customizer/Controls/Typography/TypographyStore.php: -------------------------------------------------------------------------------- 1 | ' . apply_filters( 'wpbf_no_post_headline', __( "Oops, this article couldn't be found!", 'page-builder-framework' ) ) . ''; 14 | 15 | ?> 16 | 17 |
18 | ' . apply_filters( 'wpbf_no_post_content', __( "Something went wrong.", 'page-builder-framework' ) ) . '

'; ?> 19 |
20 | -------------------------------------------------------------------------------- /Customizer/Controls/Responsive/src/DeviceButtons.tsx: -------------------------------------------------------------------------------- 1 | export default function DeviceButtons(props: { devices: string[] }) { 2 | return ( 3 |
4 | {props.devices.map((device, index) => { 5 | const deviceClassName = `dashicons dashicons-${device === "mobile" ? "smartphone" : device}`; 6 | 7 | return ( 8 | 16 | ); 17 | })} 18 |
19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "280281189ce573ddb978d07119aebc40", 8 | "packages": [], 9 | "packages-dev": [], 10 | "aliases": [], 11 | "minimum-stability": "stable", 12 | "stability-flags": [], 13 | "prefer-stable": false, 14 | "prefer-lowest": false, 15 | "platform": { 16 | "ext-json": "*" 17 | }, 18 | "platform-dev": [], 19 | "plugin-api-version": "2.6.0" 20 | } 21 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Page Builder Framework 2 | 3 | ## A modern, fast & minimalistic theme designed for the new WordPress Era. 4 | 5 | Website: https://wp-pagebuilderframework.com 6 | Documentation: https://wp-pagebuilderframework.com/docs/ 7 | Premium Add-On: https://wp-pagebuilderframework.com/premium/ 8 | 9 | ## Child Theme 10 | Download the Page Builder Framework child theme or create your own 11 | https://wp-pagebuilderframework.com/child-theme-generator/ 12 | 13 | ## License 14 | Page Builder Framework WordPress Theme, Copyright 2020 wp-pagebuilderframework.com 15 | Page Builder Framework is licensed under the GNU General Public License 3 or later 16 | More details: https://www.gnu.org/licenses/gpl-3.0.html 17 | -------------------------------------------------------------------------------- /Customizer/Controls/Radio/src/radio-buttonset-control.scss: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-radio-buttonset { 2 | .buttonset { 3 | display: flex; 4 | flex-wrap: wrap; 5 | 6 | .switch-label { 7 | background: rgba(0, 0, 0, 0.1); 8 | border: 1px rgba(0, 0, 0, 0.1); 9 | color: #555d66; 10 | margin: 0; 11 | text-align: center; 12 | padding: 0.5em 0.9em; 13 | flex-grow: 1; 14 | } 15 | 16 | .switch-input { 17 | position: absolute; 18 | 19 | &:checked { 20 | + .switch-label { 21 | background-color: #00a0d2; 22 | color: rgba(255, 255, 255, 0.8); 23 | } 24 | } 25 | } 26 | } 27 | 28 | .screen-reader-text:focus { 29 | clip-path: inset(50%); 30 | -webkit-clip-path: inset(50%); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Customizer/Controls/Headline/dist/headline-control-min.css: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-headline{background-color:#fff;width:calc(100% + 48px);padding:10px 24px;position:relative;left:-24px}.wpbf-customize-control-headline .customize-control-title{margin-top:0;margin-bottom:0;font-size:14px;font-weight:600;line-height:1.2}.wpbf-customize-control-headline .customize-control-description{margin-top:0;margin-bottom:0;line-height:1.3}.wpbf-customize-control-headline .wpbf-tooltip-wrapper .tooltip-trigger{top:-4px;left:2px}.wpbf-customize-control-headline .wpbf-tooltip-wrapper .tooltip-trigger:hover+.tooltip-content{bottom:29px}.wpbf-customize-control-headline .wpbf-tooltip-wrapper .tooltip-content{bottom:26px} 2 | /*# sourceMappingURL=headline-control-min.css.map */ 3 | -------------------------------------------------------------------------------- /assets/js/edit-post.js: -------------------------------------------------------------------------------- 1 | init(); 2 | 3 | function init() { 4 | const layoutOption = document.querySelector(".wpbf-layout-option"); 5 | 6 | if (layoutOption) { 7 | layoutOption.addEventListener("change", onLayoutTypeChange); 8 | } 9 | } 10 | 11 | function onLayoutTypeChange() { 12 | const customWidthFieldWrapper = document.querySelector( 13 | ".wpbf-layout-custom-width-field-wrapper", 14 | ); 15 | if (!customWidthFieldWrapper) return; 16 | 17 | const layout = document.querySelector("#layout-custom-width"); 18 | 19 | if (layout instanceof HTMLInputElement && layout.checked) { 20 | customWidthFieldWrapper.classList.remove("wpbf-is-hidden"); 21 | } else { 22 | customWidthFieldWrapper.classList.add("wpbf-is-hidden"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /inc/customizer/js/customizer.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function($) { 2 | 3 | $('#customize-control-menu_logo_container_width').on('mousedown', function() { 4 | $('iframe').contents().find('.wpbf-navigation .wpbf-1-4').css( 'border-right', '3px solid #0085ba' ); 5 | }).on('mouseup', function() { 6 | $('iframe').contents().find('.wpbf-navigation .wpbf-1-4').css( 'border-right', 'none' ); 7 | }); 8 | 9 | $('#customize-control-mobile_menu_logo_container_width').on('mousedown', function() { 10 | $('iframe').contents().find('.wpbf-navigation .wpbf-2-3').css( 'border-right', '3px solid #0085ba' ); 11 | }).on('mouseup', function() { 12 | $('iframe').contents().find('.wpbf-navigation .wpbf-2-3').css( 'border-right', 'none' ); 13 | }); 14 | 15 | }); -------------------------------------------------------------------------------- /inc/settings/metaboxes/community.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |

13 |
14 |

15 | 16 |

17 | 18 | 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /Customizer/Controls/Headline/src/headline-control.scss: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-headline { 2 | position: relative; 3 | left: -24px; 4 | padding: 10px 24px; 5 | width: calc(100% + 48px); 6 | background-color: #fff; 7 | 8 | .customize-control-title { 9 | margin-top: 0; 10 | margin-bottom: 0; 11 | line-height: 1.2; 12 | font-size: 14px; 13 | font-weight: 600; 14 | } 15 | 16 | .customize-control-description { 17 | margin-top: 0; 18 | margin-bottom: 0; 19 | line-height: 1.3; 20 | } 21 | 22 | .wpbf-tooltip-wrapper { 23 | .tooltip-trigger { 24 | top: -4px; 25 | left: 2px; 26 | 27 | &:hover { 28 | + .tooltip-content { 29 | bottom: 29px; 30 | } 31 | } 32 | } 33 | 34 | .tooltip-content { 35 | bottom: 26px; 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /assets/scss/admin-rtl/_admin-rtl.scss: -------------------------------------------------------------------------------- 1 | .rtl { 2 | /* Theme settings */ 3 | .wpbf-documentation-boxes .heatbox { 4 | margin-right: 0; 5 | } 6 | 7 | .wpbf-documentation-boxes .heatbox:nth-child(even) { 8 | margin-right: 2%; 9 | } 10 | 11 | .wpbf-recommended-list li { 12 | margin-right: 0; 13 | } 14 | 15 | .wpbf-recommended-list li:nth-child(even) { 16 | margin-right: 2%; 17 | } 18 | 19 | .wpbf-customizer-list li:nth-child(odd) { 20 | border-right-width: 0; 21 | border-left: 1px solid #ddd; 22 | } 23 | 24 | /* Customizer */ 25 | .wpbf-input-slider-control input[type=text] { 26 | margin-left: 0; 27 | margin-right: 15px; 28 | text-align: left; 29 | } 30 | 31 | .wpbf-input-slider-control .slider-reset { 32 | right: auto; 33 | left: 0; 34 | } 35 | } -------------------------------------------------------------------------------- /inc/integration/lifterlms/templates/global/wrapper-start.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 |
28 | -------------------------------------------------------------------------------- /inc/template-parts/blog/blog-featured.php: -------------------------------------------------------------------------------- 1 | 19 | 20 |
21 | 22 | 23 | 'wpbf-post-image', 'itemprop' => 'image' ) ); ?> 24 | 25 |
26 | -------------------------------------------------------------------------------- /inc/settings/metaboxes/review.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |

13 |
14 |

15 | 16 |

17 | 18 | 19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /Customizer/Controls/Sortable/dist/sortable-control-min.js: -------------------------------------------------------------------------------- 1 | var t;t={},t=_,wp.customize.controlConstructor["wpbf-sortable"]=wp.customize.Control.extend({ready:function(){let t=this;jQuery(t.container.find("ul.sortable").first()).sortable({update:function(){t.setting&&t.setting.set(t.getNewValues())}}).disableSelection().find("li").each(function(){jQuery(this).find("i.visibility").on("click",function(){jQuery(this).toggleClass("dashicons-visibility-faint").parents("li:eq(0)").toggleClass("invisible")})}).on("click",function(){t.setting?.set(t.getNewValues())})},getNewValues:function(){var i;let e=this.container.find("li"),n=[];return((i=t)&&i.__esModule?i.default:i).each(e,function(t){t.classList.contains("invisible")||n.push(t.dataset.value)}),n}}); 2 | //# sourceMappingURL=sortable-control-min.js.map 3 | -------------------------------------------------------------------------------- /Customizer/Controls/Color/src/components/ColorPickerSwatches.tsx: -------------------------------------------------------------------------------- 1 | export default function ColorPickerSwatches(props: { 2 | colors: Array; 3 | onClick: (color: string) => void; 4 | }) { 5 | const { colors, onClick } = props; 6 | 7 | return ( 8 |
9 | {colors.map((clr, index) => { 10 | const color = 11 | typeof clr === "string" ? clr : clr && clr.color ? clr.color : ""; 12 | 13 | return ( 14 | 22 | ); 23 | })} 24 |
25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "Customizer/Controls/**/dist", 4 | "allowSyntheticDefaultImports": true, 5 | "allowJs": true, 6 | "checkJs": true, 7 | "esModuleInterop": true, 8 | "jsx": "react-jsx", 9 | "target": "ESNext", 10 | "module": "ESNext", 11 | "moduleResolution": "node", 12 | "noImplicitAny": true, 13 | "noUnusedLocals": true, 14 | "resolveJsonModule": true, 15 | "strict": true 16 | }, 17 | "include": [ 18 | "Customizer/**/*.ts", 19 | "assets/js/*.js", 20 | "assets/**/*.ts", 21 | "inc/customizer/**/*.ts", 22 | "build-scripts/*.mjs", 23 | "wpbf.mjs", 24 | "vite.config.mjs", 25 | "types.ts" 26 | ], 27 | "exclude": [ 28 | "node_modules", 29 | "dist", 30 | "build", 31 | "vendor" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /Customizer/Controls/Media/src/image-interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export type WpbfCustomizeImageSrc = { 7 | id: number; 8 | url: string; 9 | width: number; 10 | height: number; 11 | }; 12 | 13 | export type WpbfCustomizeImageControlValue = 14 | | number 15 | | string 16 | | WpbfCustomizeImageSrc; 17 | 18 | export interface WpbfCustomizeImageControlParams 19 | extends WpbfCustomizeControlParams { 20 | labels: Record; 21 | saveAs: string; 22 | valueSrc: WpbfCustomizeImageSrc; 23 | defaultSrc: WpbfCustomizeImageSrc; 24 | } 25 | 26 | export interface WpbfCustomizeImageControl 27 | extends WpbfCustomizeControl< 28 | WpbfCustomizeImageControlValue, 29 | WpbfCustomizeImageControlParams 30 | > {} 31 | -------------------------------------------------------------------------------- /vendor/composer/installed.php: -------------------------------------------------------------------------------- 1 | array( 3 | 'name' => 'mapsteps/aura', 4 | 'pretty_version' => 'dev-master', 5 | 'version' => 'dev-master', 6 | 'reference' => '02e632ecb9eac3054b63572ef5eb1276b5c296da', 7 | 'type' => 'project', 8 | 'install_path' => __DIR__ . '/../../', 9 | 'aliases' => array(), 10 | 'dev' => true, 11 | ), 12 | 'versions' => array( 13 | 'mapsteps/aura' => array( 14 | 'pretty_version' => 'dev-master', 15 | 'version' => 'dev-master', 16 | 'reference' => '02e632ecb9eac3054b63572ef5eb1276b5c296da', 17 | 'type' => 'project', 18 | 'install_path' => __DIR__ . '/../../', 19 | 'aliases' => array(), 20 | 'dev_requirement' => false, 21 | ), 22 | ), 23 | ); 24 | -------------------------------------------------------------------------------- /Customizer/Controls/Checkbox/ToggleField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 24 | 25 | $wp_customize_manager->add_control( 26 | new ToggleControl( 27 | $wp_customize_manager, 28 | $this->control->id, 29 | $control_args 30 | ) 31 | ); 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /assets/scss/main/_typography.scss: -------------------------------------------------------------------------------- 1 | /* Typography */ 2 | 3 | // Body 4 | body { 5 | font-family: $base-font; 6 | color: $brand-color-alt; 7 | font-size: $base-fontsize; 8 | line-height: $base-lineheight; 9 | } 10 | 11 | // Forms 12 | button, 13 | input, 14 | optgroup, 15 | select, 16 | textarea { 17 | font-size: $base-fontsize; 18 | } 19 | 20 | textarea { 21 | line-height: $base-lineheight; 22 | } 23 | 24 | // Headlines 25 | h1, h2, h3, h4, h5, h6 { 26 | color: $brand-color; 27 | font-family: $head-font; 28 | margin: 0 0 $margin 0; 29 | font-weight: 700; 30 | line-height: $head-lineheight; 31 | } 32 | 33 | h1 { 34 | font-size: 32px; 35 | } 36 | 37 | h2 { 38 | font-size: 28px; 39 | } 40 | 41 | h3 { 42 | font-size: 24px; 43 | } 44 | 45 | h4 { 46 | font-size: 20px; 47 | } 48 | 49 | h5 { 50 | font-size: 18px; 51 | } 52 | 53 | h6 { 54 | font-size: 16px; 55 | } -------------------------------------------------------------------------------- /theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "settings": { 4 | "appearanceTools": true, 5 | "spacing": { 6 | "margin": true, 7 | "padding": true, 8 | "units": ["%","px"] 9 | }, 10 | "typography": { 11 | "fontSizes": [{ 12 | "name": "Tiny", 13 | "size": "12px", 14 | "slug": "tiny" 15 | }, { 16 | "name": "Small", 17 | "size": "14px", 18 | "slug": "small" 19 | }, { 20 | "name": "Regular", 21 | "size": "16px", 22 | "slug": "regular" 23 | }, { 24 | "name": "Large", 25 | "size": "20px", 26 | "slug": "large" 27 | }, { 28 | "name": "Larger", 29 | "size": "32px", 30 | "slug": "larger" 31 | }, { 32 | "name": "Extra Large", 33 | "size": "44px", 34 | "slug": "extra" 35 | }] 36 | }, 37 | "layout": { 38 | "contentSize": "1000px", 39 | "wideSize": "1400px" 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Customizer/Controls/Radio/RadioImageField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 24 | 25 | $wp_customize_manager->add_control( 26 | new RadioImageControl( 27 | $wp_customize_manager, 28 | $this->control->id, 29 | $control_args 30 | ) 31 | ); 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /inc/template-parts/blog/blog-readmore.php: -------------------------------------------------------------------------------- 1 | %3$s%4$s', 22 | esc_url( get_permalink() ), 23 | 'wpbf-read-more' . $read_more_class, 24 | esc_html( $read_more_text ), 25 | '' . get_the_title() . '' 26 | ); 27 | -------------------------------------------------------------------------------- /vendor/autoload.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 24 | 25 | $wp_customize_manager->add_control( 26 | new RadioButtonsetControl( 27 | $wp_customize_manager, 28 | $this->control->id, 29 | $control_args 30 | ) 31 | ); 32 | 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Customizer/Controls/MarginPadding/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export type MarginPaddingDimension = "top" | "right" | "bottom" | "left"; 7 | 8 | export interface MarginPaddingValue { 9 | top: number | string; 10 | right: number | string; 11 | bottom: number | string; 12 | left: number | string; 13 | 14 | [dimension: string]: number | string; 15 | } 16 | 17 | export interface MarginPaddingDimensionValuePair { 18 | dimension: string; 19 | value: string | number; 20 | } 21 | 22 | export interface WpbfCustomizeMarginPaddingControlParams 23 | extends WpbfCustomizeControlParams {} 24 | 25 | export interface WpbfCustomizeMarginPaddingControl 26 | extends WpbfCustomizeControl< 27 | MarginPaddingValue | string, 28 | WpbfCustomizeMarginPaddingControlParams 29 | > {} 30 | -------------------------------------------------------------------------------- /assets/woocommerce/scss/fragments/_fonts.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * _fonts.scss 3 | * Custom WooCommerce fonts. 4 | */ 5 | @font-face { 6 | font-family: 'star'; 7 | src: url('../../fonts/star.eot'); 8 | src: url('../../fonts/star.eot?#iefix') format('embedded-opentype'), 9 | url('../../fonts/star.woff') format('woff'), 10 | url('../../fonts/star.ttf') format('truetype'), 11 | url('../../fonts/star.svg#star') format('svg'); 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | 16 | @font-face { 17 | font-family: 'WooCommerce'; 18 | src: url('../../fonts/WooCommerce.eot'); 19 | src: url('../../fonts/WooCommerce.eot?#iefix') format('embedded-opentype'), 20 | url('../../fonts/WooCommerce.woff') format('woff'), 21 | url('../../fonts/WooCommerce.ttf') format('truetype'), 22 | url('../../fonts/WooCommerce.svg#WooCommerce') format('svg'); 23 | font-weight: normal; 24 | font-style: normal; 25 | } -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-vertical-left.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 |
16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 32 | 33 | 34 | 35 |
36 | -------------------------------------------------------------------------------- /js/min/activation-notice-min.js: -------------------------------------------------------------------------------- 1 | !function(){function i(){let i=document.querySelector(".wpbf-activation-notice.is-dismissible");if(!i)return;let t=i.querySelector(".notice-dismiss");t&&t instanceof HTMLElement&&t.addEventListener("click",e)}function e(i){jQuery.ajax({url:window.ajaxurl,type:"post",data:{action:"wpbf_activation_notice_dismissal",nonce:window.wpbfOpts.activationNotice.dismissalNonce,dismiss:1}}).always(function(i){i.success&&console.log(i.data)})}function t(){let i=document.querySelector(".wpbf-bfcm-notice.is-dismissible .notice-dismiss");i&&i.addEventListener("click",n)}function n(){jQuery.ajax({url:window.ajaxurl,type:"post",data:{action:"wpbf_bfcm_notice_dismissal",nonce:window.wpbfOpts.bfcmNotice.dismissalNonce,dismiss:1}}).always(function(i){i.success&&console.log(i.data)})}window.addEventListener("load",function(e){setTimeout(i,1e3),setTimeout(t,1e3)})}(); 2 | //# sourceMappingURL=activation-notice-min.js.map 3 | -------------------------------------------------------------------------------- /inc/template-parts/header.php: -------------------------------------------------------------------------------- 1 | 14 | 15 | 36 | -------------------------------------------------------------------------------- /Customizer/Controls/Base/libs/react-jsx-runtime.min.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see react-jsx-runtime.min.js.LICENSE.txt */ 2 | (()=>{"use strict";var r={20:(r,e,t)=>{var o=t(594),n=Symbol.for("react.element"),s=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,f=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};function _(r,e,t){var o,s={},_=null,i=null;for(o in void 0!==t&&(_=""+t),void 0!==e.key&&(_=""+e.key),void 0!==e.ref&&(i=e.ref),e)a.call(e,o)&&!p.hasOwnProperty(o)&&(s[o]=e[o]);if(r&&r.defaultProps)for(o in e=r.defaultProps)void 0===s[o]&&(s[o]=e[o]);return{$$typeof:n,type:r,key:_,ref:i,props:s,_owner:f.current}}e.Fragment=s,e.jsx=_,e.jsxs=_},848:(r,e,t)=>{r.exports=t(20)},594:r=>{r.exports=React}},e={},t=function t(o){var n=e[o];if(void 0!==n)return n.exports;var s=e[o]={exports:{}};return r[o](s,s.exports,t),s.exports}(848);window.ReactJSXRuntime=t})(); -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-stacked.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 28 | 29 | 30 | 31 |
32 | -------------------------------------------------------------------------------- /Customizer/Controls/Tabs/dist/section-tabs-control-min.css: -------------------------------------------------------------------------------- 1 | .rtl .wpbf-customize-control-section-tabs{left:0;right:-24px}.wpbf-customize-control-section-tabs{width:calc(100% + 48px);position:relative;left:-24px}.wpbf-tab .wpbf-tab-menu,.wpbf-tab .wpbf-tab-menu-item{margin:0;padding:0;list-style:none}.wpbf-tab .wpbf-tab-menu{border-bottom:1px solid #ddd;flex-wrap:wrap;margin-bottom:12px;font-size:14px;font-weight:600;display:flex;position:relative}.wpbf-tab .wpbf-tab-menu-item{flex-grow:1;position:relative}.wpbf-tab .wpbf-tab-menu-item a{border-bottom:2px solid #0000;justify-content:center;align-items:center;height:50px;padding-left:15px;padding-right:15px;text-decoration:none;display:flex;position:relative}.wpbf-tab .wpbf-tab-menu-item a:focus{box-shadow:none}.wpbf-tab .wpbf-tab-menu-item a:active,.wpbf-tab .wpbf-tab-menu-item a:focus{color:#2271b1}.wpbf-tab .wpbf-tab-menu-item.is-active a{border-color:#2271b1}.wpbf-tab-item-hidden{display:none!important} -------------------------------------------------------------------------------- /Customizer/Controls/Generic/src/string-util.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Encode a specific type of object as JSON string or return an empty string if failed. 3 | * 4 | * @param {T} value - The value to encode. 5 | * @return {string} The JSON encoded version of the value. 6 | */ 7 | export function encodeJsonOrDefault(value: T): string { 8 | try { 9 | return JSON.stringify(value); 10 | } catch (e) { 11 | return ""; 12 | } 13 | } 14 | 15 | /** 16 | * Parse a JSON string or return undefined if failed. 17 | * 18 | * @param {string | null | undefined} jsonStr - The JSON string to parse. 19 | * @return {T | undefined} The parsed value or undefined if failed. 20 | */ 21 | export function parseJsonOrUndefined( 22 | jsonStr: string | null | undefined, 23 | ): T | undefined { 24 | if ("" === jsonStr || !jsonStr) { 25 | return undefined; 26 | } 27 | 28 | try { 29 | return JSON.parse(jsonStr); 30 | } catch (e) { 31 | return undefined; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /Customizer/Controls/Color/dist/color-preview-min.js: -------------------------------------------------------------------------------- 1 | (()=>{function r(r){return"number"==typeof r||"string"==typeof r&&!isNaN(parseFloat(r))}wp.hooks.addFilter("wpbfPostMessageStylesOutput","wpbf",function(e,s,t,a){let p,o,n,h,f,y;if("wpbf-color"!==a||"string"==typeof s||"number"==typeof s)return e;let l=t.prefix?t.prefix:"",w=t.suffix?t.suffix:"";return e+(t.element+"{"+t.property+": "+l+(p=!1,o="",n=0,h=0,f=0,y=0,s.hasOwnProperty("r")&&s.hasOwnProperty("g")&&s.hasOwnProperty("b")?(p="rgba"==(o=s.hasOwnProperty("a")?"rgba":"rgb")||p,n=s.r,h=s.g,f=s.b,y="rgba"===o?s.a??1:1):s.hasOwnProperty("h")&&s.hasOwnProperty("s")&&(n=s.h,s.hasOwnProperty("l")?(o=s.hasOwnProperty("a")?"hsla":"hsl",h=r(s.l)?s.l+"%":s.l):s.hasOwnProperty("v")&&(o=s.hasOwnProperty("a")?"hsva":"hsv",h=r(s.v)?s.v+"%":s.v),p="hsla"===o||"hsva"===o||p,f=r(s.s)?s.s+"%":s.s,y=p?s.a??1:1),p?o+"("+n+", "+h+", "+f+", "+y+")":o+"("+n+", "+h+", "+f+")")+w)+"; }"})})(); 2 | //# sourceMappingURL=color-preview-min.js.map 3 | -------------------------------------------------------------------------------- /Customizer/Controls/Headline/HeadlineToggleField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 25 | 26 | $wp_customize_manager->add_control( 27 | new HeadlineToggleControl( 28 | $wp_customize_manager, 29 | $this->control->id, 30 | $control_args 31 | ) 32 | ); 33 | 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Customizer/Sections/dist/section-types-min.css: -------------------------------------------------------------------------------- 1 | #customize-theme-controls .control-section-wpbf-expanded .accordion-section-title,#customize-theme-controls .control-section-wpbf-expanded .customize-section-back{display:none}#customize-theme-controls .customize-pane-child.control-section-wpbf-expanded{visibility:visible;height:auto;margin-left:-100%;position:relative}#customize-theme-controls .customize-pane-child.control-section-wpbf-expanded h3 .customize-action{display:none}#customize-theme-controls .control-section-wpbf-link .accordion-section-title{padding-right:10px!important}#customize-theme-controls .control-section-wpbf-link .button{margin-top:-3px}#customize-theme-controls .customize-pane-child.current-section-parent,.in-sub-panel #customize-theme-controls .customize-pane-child.current-panel-parent{transform:translate(-100%)}.control-section-wpbf-nested{margin:0 -12px}.control-section-wpbf-outer{display:list-item!important} 2 | /*# sourceMappingURL=section-types-min.css.map */ 3 | -------------------------------------------------------------------------------- /Customizer/Controls/Headline/DividerField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 31 | 32 | $wp_customize_manager->add_control( 33 | new DividerControl( 34 | $wp_customize_manager, 35 | $this->control->id, 36 | $control_args 37 | ) 38 | ); 39 | 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /Customizer/Controls/Headline/HeadlineField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 31 | 32 | $wp_customize_manager->add_control( 33 | new HeadlineControl( 34 | $wp_customize_manager, 35 | $this->control->id, 36 | $control_args 37 | ) 38 | ); 39 | 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-centered.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 | 20 | 21 | 22 | 23 | 32 | 33 | 34 | 35 |
36 | -------------------------------------------------------------------------------- /Customizer/Controls/Media/MediaSanitizer.php: -------------------------------------------------------------------------------- 1 | unknownToSrcArray( $value ); 20 | 21 | if ( ! empty( $save_as ) && is_string( $save_as ) ) { 22 | if ( in_array( $save_as, $util->allowed_save_as, true ) ) { 23 | $save_as = $save_as; 24 | } 25 | } 26 | 27 | if ( 'array' === $save_as ) { 28 | return $src; 29 | } 30 | 31 | if ( 'id' === $save_as ) { 32 | return $src['id']; 33 | } 34 | 35 | return $src['url']; 36 | 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /Customizer/Controls/Media/ImageField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 35 | 36 | $wp_customize_manager->add_control( 37 | new ImageControl( 38 | $wp_customize_manager, 39 | $this->control->id, 40 | $control_args 41 | ) 42 | ); 43 | 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Customizer/Controls/Select/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | export type ChildSelectControlChoice = { 7 | text: string; 8 | id: string; 9 | disabled?: boolean; 10 | selected?: boolean; 11 | }; 12 | 13 | export type SelectControlChoice = { 14 | text: string; 15 | id?: string; 16 | disabled?: boolean; 17 | selected?: boolean; 18 | children?: ChildSelectControlChoice[]; 19 | }; 20 | 21 | export type SelectControlChoices = SelectControlChoice[]; 22 | 23 | export type SelectControlValue = string | string[]; 24 | 25 | export interface SelectControlParams 26 | extends WpbfCustomizeControlParams { 27 | choices: SelectControlChoices; 28 | isClearable: boolean; 29 | isMulti: boolean; 30 | placeholder: string; 31 | maxSelections: number; 32 | messages: { 33 | maxLimitReached: string; 34 | }; 35 | } 36 | 37 | export interface WpbfCustomizeSelectControl 38 | extends WpbfCustomizeControl {} 39 | -------------------------------------------------------------------------------- /inc/customizer/customizer-settings.php: -------------------------------------------------------------------------------- 1 | { 9 | mode: string; 10 | labelStyle: string; 11 | colorSwatches: string[]; 12 | formComponent?: string; 13 | } 14 | 15 | export interface WpbfCustomizeColorControl 16 | extends WpbfCustomizeControl< 17 | WpbfCustomizeColorControlValue, 18 | WpbfCustomizeColorControlParams 19 | > {} 20 | 21 | export type ColorMode = 22 | | "rgb" 23 | | "rgba" 24 | | "hsl" 25 | | "hsla" 26 | | "hsv" 27 | | "hsva" 28 | | "hex" 29 | | ""; 30 | 31 | export type RgbOrRgbaColor = RgbColor & { a?: number }; 32 | 33 | export type HslOrHslaColor = HslColor & { a?: number }; 34 | 35 | export type HsvOrHsvaColor = HsvColor & { a?: number }; 36 | 37 | export type WpbfCustomizeColorControlValue = 38 | | string 39 | | number 40 | | RgbOrRgbaColor 41 | | HslOrHslaColor 42 | | HsvOrHsvaColor; 43 | -------------------------------------------------------------------------------- /Customizer/Sections/src/section-types.scss: -------------------------------------------------------------------------------- 1 | #customize-theme-controls { 2 | .control-section-wpbf-expanded { 3 | .accordion-section-title { 4 | display: none; 5 | } 6 | 7 | .customize-section-back { 8 | display: none; 9 | } 10 | } 11 | 12 | .customize-pane-child.control-section-wpbf-expanded { 13 | position: relative; 14 | visibility: visible; 15 | height: auto; 16 | margin-left: -100%; 17 | 18 | h3 { 19 | .customize-action { 20 | display: none; 21 | } 22 | } 23 | } 24 | 25 | .control-section-wpbf-link { 26 | .accordion-section-title { 27 | padding-right: 10px !important; 28 | } 29 | 30 | .button { 31 | margin-top: -3px; 32 | } 33 | } 34 | 35 | .customize-pane-child.current-section-parent { 36 | transform: translateX(-100%); 37 | } 38 | } 39 | 40 | .in-sub-panel { 41 | #customize-theme-controls { 42 | .customize-pane-child.current-panel-parent { 43 | transform: translateX(-100%); 44 | } 45 | } 46 | } 47 | 48 | .control-section-wpbf-nested { 49 | margin: 0 -12px; 50 | } 51 | 52 | .control-section-wpbf-outer { 53 | display: list-item !important; 54 | } 55 | -------------------------------------------------------------------------------- /Customizer/Controls/Slider/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | import { DevicesValue } from "../../Responsive/src/interface"; 6 | 7 | export interface WpbfCustomizeSliderControlParams 8 | extends WpbfCustomizeControlParams {} 9 | 10 | export interface WpbfCustomizeSliderControl 11 | extends WpbfCustomizeControl< 12 | number | string, 13 | WpbfCustomizeSliderControlParams 14 | > {} 15 | 16 | export interface WpbfCustomizeInputSliderControlParams 17 | extends WpbfCustomizeControlParams {} 18 | 19 | export interface WpbfCustomizeInputSliderControl 20 | extends WpbfCustomizeControl< 21 | string | number, 22 | WpbfCustomizeInputSliderControlParams 23 | > {} 24 | 25 | export interface WpbfCustomizeResponsiveInputSliderControl 26 | extends WpbfCustomizeControl< 27 | string | DevicesValue, 28 | WpbfCustomizeResponsiveInputSliderControlParams 29 | > {} 30 | 31 | export interface WpbfCustomizeResponsiveInputSliderControlParams 32 | extends WpbfCustomizeControlParams {} 33 | -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 13 | 14 | > 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | > 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /sidebar.php: -------------------------------------------------------------------------------- 1 | 13 | 14 |
15 | 16 | 17 | 18 | 38 | 39 | 40 | 41 |
42 | -------------------------------------------------------------------------------- /inc/integration/edd/edd.php: -------------------------------------------------------------------------------- 1 | Premium Add-On!', 'page-builder-framework' ), 19 | esc_url( 'https://wp-pagebuilderframework.com/premium/?utm_source=repository&utm_medium=customizer&utm_campaign=wpbf#premium' ) 20 | ); 21 | 22 | // Section. 23 | wpbf_customizer_section() 24 | ->id( 'wpbf_premium_addon' ) 25 | ->type( 'expanded' ) 26 | ->title( __( 'Premium Features available!', 'page-builder-framework' ) ) 27 | ->priority( 1 ) 28 | ->add(); 29 | 30 | // Field. 31 | wpbf_customizer_field() 32 | ->id( 'wpbf_premium_ad' ) 33 | ->type( 'custom' ) 34 | ->defaultValue( $wpbf_premium_ad_link ) 35 | ->priority( 1 ) 36 | ->addToSection( 'wpbf_premium_addon' ); 37 | -------------------------------------------------------------------------------- /Customizer/Controls/Tabs/dist/section-tabs-control-min.js: -------------------------------------------------------------------------------- 1 | wp.customize.bind("ready",function(){!function(){let t=document.querySelectorAll("[data-wpbf-parent-tab-id]"),e=[];function a(t,e){jQuery('[data-wpbf-tab-id="'+t+'"] .wpbf-tab-menu-item').removeClass("is-active");let a=document.querySelector('[data-wpbf-tab-id="'+t+'"] [data-wpbf-tab-menu-id="'+e+'"]');a&&a.classList.add("is-active"),document.querySelectorAll('[data-wpbf-parent-tab-id="'+t+'"]').forEach(function(t){t instanceof HTMLElement&&(t.dataset.wpbfParentTabItem===e?t.classList.remove("wpbf-tab-item-hidden"):t.classList.add("wpbf-tab-item-hidden"))})}t.forEach(function(t){if(!(t instanceof HTMLElement))return;let a=t.dataset.wpbfParentTabId;a&&!e.includes(a)&&e.push(a)}),jQuery(document).on("click",".wpbf-tab-menu-item a",function(t){t.preventDefault(),a(this.parentNode.parentNode.parentNode.dataset.wpbfTabId,this.parentNode.dataset.wpbfTabMenuId)}),e.forEach(function(t){wp.customize.section(t,function(e){e.expanded.bind(function(e){if(e){let e=document.querySelector('[data-wpbf-tab-id="'+t+'"] .wpbf-tab-menu-item.is-active');if(e&&e instanceof HTMLElement){let n=e.dataset.wpbfTabMenuId;n&&a(t,n)}}})})})}()}); -------------------------------------------------------------------------------- /Customizer/Controls/Dimension/dist/dimension-control-min.js: -------------------------------------------------------------------------------- 1 | wp.customize.controlConstructor["wpbf-dimension"]=wp.customize.wpbfDynamicControl.extend({initWpbfControl:function(t){let i;(t=t||this).wpbfNotifications(),t.container.on("change keyup paste","input",function(){i=jQuery(this).val(),t.setting?.set(i)})},wpbfNotifications:function(){let t=this,i=t.params.allowUnitless;wp.customize(t.id,function(n){n.bind(function(e){let o="long_title";!t.validateCssValue(e)&&(!i||isNaN(e))?n.notifications.add(o,new wp.customize.Notification(o,{type:"warning",message:wpbfDimensionControlL10n["invalid-value"]})):n.notifications.remove(o)})})},validateCssValue:function(t){let i=this;if(!t||""===t||0===t||"0"===t||"auto"===t||"inherit"===t||"initial"===t)return!0;let n="string"==typeof t?t:t.toString();if(0<=n.indexOf("calc(")&&0<=n.indexOf(")"))return!0;let e=parseFloat(n),o=n.replace(e.toString(),"");if(!o)return!0;let a=n.split(" "),s=!0;return 2<=a.length?(a.forEach(function(t){t&&!i.validateCssValue(t)&&(s=!1)}),s):!isNaN(e)&&-1!==["fr","rem","em","ex","%","px","cm","mm","in","pt","pc","ch","vh","vw","vmin","vmax"].indexOf(o)}}); 2 | //# sourceMappingURL=dimension-control-min.js.map 3 | -------------------------------------------------------------------------------- /vendor/composer/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) Nils Adermann, Jordi Boggiano 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is furnished 9 | to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /Customizer/Controls/Dimension/DimensionField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 33 | 34 | $wp_customize_manager->add_control( 35 | new DimensionControl( 36 | $wp_customize_manager, 37 | $this->control->id, 38 | $control_args 39 | ) 40 | ); 41 | 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /assets/woocommerce/scss/fragments/_variables.scss: -------------------------------------------------------------------------------- 1 | /* Colors */ 2 | 3 | // Defaults 4 | $green: #4fe190; 5 | $red: tomato; 6 | $primarytext: #ffffff; // Text on primary colour bg 7 | $highlight: $green; // Prices, In stock labels, sales flash 8 | $highlightext: $primarytext; // Text on highlight colour bg 9 | $contentbg: $primarytext; // Content BG - Tabs (active state) 10 | 11 | // Variables 12 | $base-color: var(--base-color); 13 | $base-color-alt: var(--base-color-alt); 14 | 15 | $brand-color: var(--brand-color); 16 | $brand-color-alt: var(--brand-color-alt); 17 | 18 | $accent-color: var(--accent-color); 19 | $accent-color-alt: var(--accent-color-alt); 20 | 21 | /* Spacing */ 22 | 23 | // Margin 24 | $margin: 20px; 25 | $margin-xlarge: 120px; 26 | $margin-large: 80px; 27 | $margin-medium: 40px; 28 | $margin-small: 10px; 29 | 30 | // Padding 31 | $padding: 20px; 32 | $padding-xlarge: 120px; 33 | $padding-large: 80px; 34 | $padding-medium: 40px; 35 | $padding-small: 10px; 36 | 37 | /* Fonts */ 38 | 39 | // Font size 40 | $base-fontsize: 16px; 41 | $tiny-fontsize: $base-fontsize - 4; 42 | $small-fontsize: $base-fontsize - 2; 43 | $bigger-fontsize: $base-fontsize + 4; 44 | -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-left.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 | 20 | 21 | 30 | 31 | 32 | 33 |
34 | 35 |
36 | 37 | 38 | 39 |
40 | 41 |
42 | 43 |
44 | -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-right.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 27 | 36 | 37 | 38 | 39 |
40 | 41 |
42 | 43 |
44 | -------------------------------------------------------------------------------- /Customizer/Controls/Checkbox/src/checkbox-control.ts: -------------------------------------------------------------------------------- 1 | import "./toggle-control.scss"; 2 | import { WpbfCustomize } from "../../Base/src/interface"; 3 | import { WpbfCustomizeCheckboxControl } from "./interface"; 4 | 5 | declare var wp: { 6 | customize: WpbfCustomize; 7 | }; 8 | 9 | wp.customize.controlConstructor["wpbf-checkbox"] = 10 | wp.customize.wpbfDynamicControl.extend({ 11 | initWpbfControl: function ( 12 | this: WpbfCustomizeCheckboxControl, 13 | ctrl?: WpbfCustomizeCheckboxControl, 14 | ) { 15 | const control = ctrl || this; 16 | 17 | control.container.on("change", "input", function () { 18 | control.setting?.set(jQuery(this).is(":checked")); 19 | }); 20 | }, 21 | }); 22 | 23 | wp.customize.controlConstructor["wpbf-toggle"] = 24 | wp.customize.wpbfDynamicControl.extend({ 25 | initWpbfControl: function ( 26 | this: WpbfCustomizeCheckboxControl, 27 | ctrl?: WpbfCustomizeCheckboxControl, 28 | ) { 29 | const control = ctrl || this; 30 | 31 | control.container.on("change", "input", function () { 32 | control.setting?.set(jQuery(this).is(":checked")); 33 | }); 34 | }, 35 | }); 36 | -------------------------------------------------------------------------------- /assets/js/site.js: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import setupDesktopMenu from "./setup/desktop-menu"; 4 | import setupMobileMenu from "./setup/mobile-menu"; 5 | import setupSite from "./setup/site-general"; 6 | import { 7 | getBreakpoints, 8 | forEachEl, 9 | getActiveBreakpoint, 10 | getAttr, 11 | getAttrAsNumber, 12 | isInsideCustomizer, 13 | listenDocumentEvent, 14 | } from "./utils/dom-util"; 15 | 16 | function init() { 17 | setupSite(); 18 | setupDesktopMenu(); 19 | setupMobileMenu(); 20 | } 21 | 22 | init(); 23 | 24 | // Export `Wpbf` object to `window`. 25 | // @ts-ignore 26 | window["Wpbf"] = { 27 | site: { 28 | getBreakpoints: getBreakpoints, 29 | getActiveBreakpoint: getActiveBreakpoint, 30 | isInsideCustomizer: isInsideCustomizer, 31 | forEachEl: forEachEl, 32 | listenDocumentEvent: listenDocumentEvent, 33 | getAttr: getAttr, 34 | getAttrAsNumber: getAttrAsNumber, 35 | }, 36 | }; 37 | 38 | // Export `WpbfTheme` object to `window` for backwards compatibility. 39 | // @ts-ignore 40 | window["WpbfTheme"] = { 41 | breakpoints: getBreakpoints(), 42 | activeBreakpoint: getActiveBreakpoint(), 43 | isInsideCustomizer: isInsideCustomizer(), 44 | }; 45 | -------------------------------------------------------------------------------- /css/min/post-list-min.css: -------------------------------------------------------------------------------- 1 | .column-wpbf_layout{width:0;font-size:0;display:none}.submit.inline-edit-save{border-top:1px solid #ddd;padding-top:1em;padding-bottom:1em}.inline-edit-row fieldset .inline-edit-col label{margin-bottom:.4em}.wpbf-quick-edit,.wpbf-quick-edit *{box-sizing:border-box}.wpbf-quick-edit{clear:both;margin-top:.5em;padding:.5em}.wpbf-quick-edit h4{margin-top:12px;margin-bottom:12px}.wpbf-quick-edit-row{border-top:1px solid #ddd;flex-wrap:wrap;width:100%;margin-top:10px;display:flex}.wpbf-quick-edit-row.has-3 .wpbf-quick-edit-col{width:33%}.wpbf-quick-edit-row.has-4 .wpbf-quick-edit-col{width:25%}@media screen and (max-width:768px){.wpbf-quick-edit-row.has-3,.wpbf-quick-edit-row.has-4{width:100%}}.wpbf-quick-edit-field{margin-bottom:9px}.wpbf-quick-edit-radio-field,.wpbf-quick-edit-checkbox-field{align-items:center;width:100%;display:flex}.wpbf-quick-edit-radio-field .wpbf-quick-edit-label,.wpbf-quick-edit-checkbox-field .wpbf-quick-edit-label{line-height:1.1;display:inline-flex}.wpbf-quick-edit-radio-field .wpbf-quick-edit-control,.wpbf-quick-edit-checkbox-field .wpbf-quick-edit-control{margin-right:.4rem;display:inline-flex}.wpbf-quick-edit-radio-field input,.wpbf-quick-edit-checkbox-field input{margin:0} -------------------------------------------------------------------------------- /inc/settings/activation-notice.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 |
15 |
16 | Page Builder Framework Logo 17 |
18 |
19 |

20 | 21 |

22 |

23 | 24 |

25 | id ) { ?> 26 |

27 | 28 | 29 | 30 |

31 | 32 |
33 |
34 |
35 | -------------------------------------------------------------------------------- /inc/settings/metaboxes/clear-font-cache.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |

13 |
14 |

15 |
16 | 17 |

18 |

19 | 20 |

21 | 28 | 29 |
30 |
31 | -------------------------------------------------------------------------------- /Customizer/Compatibility/kirki-panel-section-compatibility.php: -------------------------------------------------------------------------------- 1 | 11 | array ( 12 | 'Mapsteps\\Wpbf\\' => 14, 13 | ), 14 | ); 15 | 16 | public static $prefixDirsPsr4 = array ( 17 | 'Mapsteps\\Wpbf\\' => 18 | array ( 19 | 0 => __DIR__ . '/../..' . '/', 20 | ), 21 | ); 22 | 23 | public static $classMap = array ( 24 | 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 25 | ); 26 | 27 | public static function getInitializer(ClassLoader $loader) 28 | { 29 | return \Closure::bind(function () use ($loader) { 30 | $loader->prefixLengthsPsr4 = ComposerStaticInit280281189ce573ddb978d07119aebc40::$prefixLengthsPsr4; 31 | $loader->prefixDirsPsr4 = ComposerStaticInit280281189ce573ddb978d07119aebc40::$prefixDirsPsr4; 32 | $loader->classMap = ComposerStaticInit280281189ce573ddb978d07119aebc40::$classMap; 33 | 34 | }, null, ClassLoader::class); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /assets/scss/main/_blocks.scss: -------------------------------------------------------------------------------- 1 | /* Notices */ 2 | /// We provide ".wp-block" here just to get this stylesheet get enqueued in the preview iframe 3 | .wp-block.wpbf-block-notices { 4 | /// And we put the flex here, because the empty rule won't be printed in the compiled css. 5 | display: flex; 6 | } 7 | 8 | /// Even though the blocks have been removed from PBF, 9 | /// we still need to keep the styles here to keep the compatibility. 10 | .wpbf-block-notices { 11 | display: flex; 12 | flex-wrap: wrap; 13 | justify-content: flex-start; 14 | flex-direction: row; 15 | 16 | > .wpbf-block-notice { 17 | margin-left: 0; 18 | margin-right: 0.5em; 19 | } 20 | } 21 | 22 | .wpbf-block-notice { 23 | width: fit-content; 24 | } 25 | 26 | .wpbf-is-horizontal { 27 | flex-direction: row; 28 | } 29 | 30 | .wpbf-is-vertical { 31 | flex-direction: column; 32 | } 33 | 34 | .is-style-wpbf-full-width { 35 | width: 100%; 36 | } 37 | 38 | .wpbf-content-justified-left { 39 | justify-content: flex-start; 40 | } 41 | 42 | .wpbf-content-justified-center { 43 | justify-content: center; 44 | } 45 | 46 | .wpbf-content-justified-space-between { 47 | justify-content: space-between; 48 | } 49 | 50 | .wpbf-content-justified-right { 51 | justify-content: flex-end; 52 | } 53 | -------------------------------------------------------------------------------- /inc/template-parts/single/single-featured.php: -------------------------------------------------------------------------------- 1 | 40 | 41 |
42 | 'wpbf-' . $class . '-image', 'itemprop' => 'image' ) ); ?> 43 |
44 | -------------------------------------------------------------------------------- /vendor/composer/autoload_real.php: -------------------------------------------------------------------------------- 1 | register(true); 33 | 34 | return $loader; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /Customizer/Controls/MarginPadding/ResponsiveMarginPaddingControl.php: -------------------------------------------------------------------------------- 1 | json['devices'] = $this->devices; 56 | 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /inc/integration/lifterlms/lifterlms.php: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 |
26 | 27 | ' . apply_filters( 'wpbf_404_headline', __( "404 - This page couldn't be found.", 'page-builder-framework' ) ) . ''; ?> 28 | 29 |
30 | 31 | ' . apply_filters( 'wpbf_404_text', __( "Oops! We're sorry, this page couldn't be found!", 'page-builder-framework' ) ) . '

'; ?> 32 | 33 | 34 | 35 |
36 | 37 |
38 | 39 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
48 | -------------------------------------------------------------------------------- /Customizer/Controls/Generic/dist/generic-control-min.js: -------------------------------------------------------------------------------- 1 | !function(){function t(t,e,n){if(""===t||"string"!=typeof t&&"number"!=typeof t||isNaN(Number(t)))return"";let r="string"==typeof t?parseFloat(t):t;return"number"==typeof e&&"number"==typeof n?(rn&&(r=n)):"number"==typeof e?rn&&(r=n),r}wp.customize.controlConstructor["wpbf-generic"]=wp.customize.wpbfDynamicControl.extend({initWpbfControl:function(e){let n=(e=e||this).params;"wpbf-generic"===n.type&&e.container.find(".wpbf-control-form input, .wpbf-control-form textarea").on("input",function(){let r=this instanceof HTMLInputElement||this instanceof HTMLTextAreaElement?this.value:"";if("number"===n.subtype||"number-unit"===n.subtype){var i,u;n.max=(i=n.min,u=n.max,void 0===i||void 0===u||null===i||null===u?u:Math.max(i,u)),r="number"===n.subtype?t(r,n.min,n.max):function(e,n,r){if(""===e||"string"!=typeof e&&"number"!=typeof e||isNaN(Number(e)))return"";let i=function(t){if(""===t||"string"!=typeof t&&"number"!=typeof t||isNaN(Number(t)))return{number:"",unit:""};let e="string"==typeof t?t:String(t),n=e.replace(/\d+/g,"")||"",r=n?e.replace(n,""):e;return""===r?{number:"",unit:""}:{number:parseFloat(r),unit:n}}(e),u=i.number,o=i.unit;if(""===u)return"";let f=t(u,n,r);return o?`${f}${o}`:f}(r,n.min,n.max)}e.setting.set(r)})}})}(); -------------------------------------------------------------------------------- /Customizer/Compatibility/wpbf-old-controls-compatibility.php: -------------------------------------------------------------------------------- 1 | .image { 3 | display: flex; 4 | flex-wrap: wrap; 5 | } 6 | 7 | label { 8 | position: relative; 9 | display: inline-block; 10 | } 11 | 12 | label .image-label { 13 | display: none; 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | background: rgba(255, 255, 255, 0.7); 20 | font-weight: 700; 21 | } 22 | 23 | label .image-label .inner { 24 | width: 100%; 25 | height: 100%; 26 | text-align: center; 27 | padding: 0.5em; 28 | vertical-align: middle; 29 | } 30 | 31 | label:hover .image-label { 32 | display: block; 33 | } 34 | 35 | input { 36 | display: none; 37 | } 38 | 39 | input img { 40 | border: 1px solid transparent; 41 | } 42 | 43 | input:not(:checked):hover + label img { 44 | opacity: 0.7; 45 | } 46 | 47 | input:checked + label img { 48 | //-webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25); 49 | //box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.25); 50 | //border: 1px solid #3498db; 51 | border: 1px solid #aaa; 52 | } 53 | 54 | input + label .image-clickable { 55 | position: absolute; 56 | top: 0; 57 | bottom: 0; 58 | left: 0; 59 | right: 0; 60 | width: 100%; 61 | height: 100%; 62 | } 63 | } 64 | 65 | -------------------------------------------------------------------------------- /Customizer/Controls/Tabs/src/section-tabs-control.scss: -------------------------------------------------------------------------------- 1 | .rtl { 2 | .wpbf-customize-control-section-tabs { 3 | left: 0; 4 | right: -24px; 5 | } 6 | } 7 | 8 | .wpbf-customize-control-section-tabs { 9 | position: relative; 10 | left: -24px; 11 | width: calc(100% + 48px); 12 | } 13 | 14 | .wpbf-tab { 15 | .wpbf-tab-menu, 16 | .wpbf-tab-menu-item { 17 | list-style: none; 18 | margin: 0; 19 | padding: 0; 20 | } 21 | 22 | .wpbf-tab-menu { 23 | display: flex; 24 | flex-wrap: wrap; 25 | position: relative; 26 | margin-bottom: 12px; 27 | font-weight: 600; 28 | font-size: 14px; 29 | border-bottom: 1px solid #ddd; 30 | } 31 | 32 | .wpbf-tab-menu-item { 33 | position: relative; 34 | flex-grow: 1; 35 | 36 | a { 37 | display: flex; 38 | align-items: center; 39 | justify-content: center; 40 | padding-left: 15px; 41 | padding-right: 15px; 42 | height: 50px; 43 | position: relative; 44 | border-bottom: 2px solid transparent; 45 | text-decoration: none; 46 | 47 | &:focus { 48 | box-shadow: none; 49 | } 50 | 51 | &:active, 52 | &:focus { 53 | color: #2271b1; 54 | } 55 | } 56 | 57 | &.is-active { 58 | a { 59 | border-color: #2271b1; 60 | } 61 | } 62 | } 63 | } 64 | 65 | .wpbf-tab-item-hidden { 66 | display: none !important; 67 | } 68 | -------------------------------------------------------------------------------- /inc/settings/metaboxes/resources.php: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |

13 | 14 |

15 |
16 | 36 |
37 |
38 | -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-stacked-advanced.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 |
20 | 21 | 22 | 23 |
24 | 25 |
26 | 27 | 28 | 29 |
30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | 46 | 47 | 48 | 49 |
50 | -------------------------------------------------------------------------------- /Customizer/Controls/Custom/CustomField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 46 | 47 | $wp_customize_manager->add_control( new CustomControl( 48 | $wp_customize_manager, 49 | $this->control->id, 50 | $control_args 51 | ) ); 52 | 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /Customizer/Controls/Typography/Entities/GoogleFontEntity.php: -------------------------------------------------------------------------------- 1 | family = isset( $arr['family'] ) ? $arr['family'] : ''; 39 | $instance->category = isset( $arr['category'] ) ? $arr['category'] : ''; 40 | $instance->variants = isset( $arr['variants'] ) ? $arr['variants'] : []; 41 | 42 | return $instance; 43 | 44 | } 45 | 46 | /** 47 | * Convert the instance to an array. 48 | * 49 | * @return array 50 | */ 51 | public function toArray() { 52 | 53 | return [ 54 | 'family' => $this->family, 55 | 'category' => $this->category, 56 | 'variants' => $this->variants, 57 | ]; 58 | 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /Customizer/Controls/Generic/src/interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | import { DevicesValue } from "../../Responsive/src/interface"; 6 | 7 | export interface WpbfCustomizeGenericControl 8 | extends WpbfCustomizeControl< 9 | string | number, 10 | WpbfCustomizeGenericControlParams 11 | > {} 12 | 13 | export interface WpbfCustomizeGenericControlParams 14 | extends WpbfCustomizeControlParams { 15 | subtype: string; 16 | inputTag: string; 17 | inputType?: string; 18 | min?: number | null; 19 | max?: number | null; 20 | step?: number | null; 21 | rows?: number; 22 | } 23 | 24 | export interface WpbfCustomizeResponsiveGenericControl 25 | extends WpbfCustomizeControl< 26 | DevicesValue | string, 27 | WpbfCustomizeResponsiveGenericControlParams 28 | > {} 29 | 30 | export interface WpbfCustomizeResponsiveGenericControlParams 31 | extends WpbfCustomizeGenericControlParams { 32 | defaultArray: DevicesValue; 33 | valueArray: DevicesValue; 34 | devices: string[]; 35 | deviceIcons: Record; 36 | saveAsJson: boolean; 37 | } 38 | 39 | export interface AssocArrayControlParams 40 | extends WpbfCustomizeControlParams> {} 41 | 42 | export interface WpbfCustomizeAssocArrayControl 43 | extends WpbfCustomizeControl, AssocArrayControlParams> {} 44 | -------------------------------------------------------------------------------- /Customizer/Controls/Tabs/SectionTabsField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 46 | 47 | $wp_customize_manager->add_control( 48 | new SectionTabsControl( 49 | $wp_customize_manager, 50 | $this->control->id, 51 | $control_args 52 | ) 53 | ); 54 | 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /Customizer/Panels/NestedPanel.php: -------------------------------------------------------------------------------- 1 | parent_id = $args['parent_id']; 37 | } 38 | 39 | } 40 | 41 | /** 42 | * Gather the parameters passed to client JavaScript via JSON. 43 | * 44 | * @since 4.1.0 45 | * 46 | * @return array The array to be exported to the client as JSON. 47 | */ 48 | public function json() { 49 | 50 | $arr = parent::json(); 51 | 52 | $arr['parentId'] = $this->parent_id; 53 | 54 | return $arr; 55 | 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /Customizer/Controls/Editor/EditorField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 46 | 47 | $wp_customize_manager->add_control( 48 | new EditorControl( 49 | $wp_customize_manager, 50 | $this->control->id, 51 | $control_args 52 | ) 53 | ); 54 | 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /inc/integration/gutenberg/gutenberg.php: -------------------------------------------------------------------------------- 1 | parent_id = $args['parent_id']; 37 | } 38 | 39 | } 40 | 41 | /** 42 | * Gather the parameters passed to client JavaScript via JSON. 43 | * 44 | * @since 4.1.0 45 | * 46 | * @return array The array to be exported to the client as JSON. 47 | */ 48 | public function json() { 49 | 50 | $arr = parent::json(); 51 | 52 | $arr['parentId'] = $this->parent_id; 53 | 54 | return $arr; 55 | 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /Customizer/Controls/Base/src/_tooltips.scss: -------------------------------------------------------------------------------- 1 | .wpbf-tooltip-wrapper { 2 | position: relative; 3 | z-index: 5; // 2 is enough, but.. just to be safe. 4 | 5 | .tooltip-trigger { 6 | position: relative; 7 | top: 0; 8 | left: 3px; 9 | text-decoration: none; 10 | 11 | &:hover { 12 | + .tooltip-content { 13 | bottom: 32px; 14 | opacity: 1; 15 | visibility: visible; 16 | z-index: 99999; 17 | } 18 | } 19 | 20 | .dashicons { 21 | font-size: 18px; 22 | width: 18px; 23 | height: 18px; 24 | } 25 | } 26 | 27 | .tooltip-content { 28 | position: absolute; 29 | bottom: 29px; 30 | left: 0; 31 | padding: 7px; 32 | min-width: 275px; 33 | width: 100%; 34 | height: fit-content; 35 | font-size: 13px; 36 | color: #fff; 37 | line-height: 1.4em; 38 | background: #000; 39 | border-radius: 3px; 40 | opacity: 0; 41 | visibility: hidden; 42 | z-index: -1; 43 | transition: all 0.2s linear; 44 | 45 | /// We might want to bring it back in the future. 46 | // &::before { 47 | // content: ''; 48 | // position: absolute; 49 | // bottom: -6px; 50 | // display: block; 51 | // width: 0; 52 | // height: 0; 53 | // border-left: 10px solid transparent; 54 | // border-right: 10px solid transparent; 55 | // border-top: 10px solid #000; 56 | // } 57 | 58 | a { 59 | color: #00a0d2; 60 | } 61 | } 62 | } 63 | 64 | /*# sourceMappingURL=tooltip.css.map */ 65 | -------------------------------------------------------------------------------- /inc/customizer/js/responsive-controls.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function ($) { 2 | // Let's use the API. 3 | var api = wp.customize; 4 | 5 | syncPreviewButtons(); 6 | 7 | /** 8 | * Sync device preview button from WordPress to WPBF and vice versa. 9 | */ 10 | function syncPreviewButtons() { 11 | // Bind device changes from WordPress default. 12 | api.previewedDevice.bind(function (newDevice) { 13 | wpbfResponsivePreview(newDevice); 14 | }); 15 | } 16 | 17 | /** 18 | * Setup WPBF device preview. 19 | * 20 | * @param string device The device (mobile, tablet, or desktop). 21 | * @param bool modifyOverlay Whether or not to modify the wp-full-overlay. 22 | */ 23 | function wpbfResponsivePreview(device) { 24 | $(".wpbf-responsive-options button").removeClass("active"); 25 | $(".wpbf-responsive-options .preview-" + device).addClass("active"); 26 | $(".wpbf-control-device").removeClass("active"); 27 | $(".wpbf-control-" + device).addClass("active"); 28 | } 29 | 30 | // Display desktop control by default. 31 | $(".wpbf-control-desktop").addClass("active"); 32 | 33 | // Loop through wpbf device buttons and assign the event. 34 | $(document).on("click", ".wpbf-responsive-options button", function (e) { 35 | var device = this.getAttribute("data-device"); 36 | 37 | wpbfResponsivePreview(device); 38 | // Trigger WordPress device event. 39 | api.previewedDevice.set(device); 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /inc/settings/compatibility-notice.php: -------------------------------------------------------------------------------- 1 | 11 | 12 |
13 |
14 |
15 | Page Builder Framework Logo 16 |
17 |
18 |

19 | 20 |

21 |

22 | Premium Add-On is outdated and no longer compatible with the latest version of Page Builder Framework.', 'page-builder-framework' ); ?>
23 | 24 |

25 |

26 | 27 | 28 | 29 | 30 | 31 | 32 |

33 |
34 |
35 |
36 | -------------------------------------------------------------------------------- /searchform.php: -------------------------------------------------------------------------------- 1 | 19 | 20 | 43 | -------------------------------------------------------------------------------- /Customizer/Controls/Typography/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type FontProperties = [ 2 | "font-family", 3 | "variant", 4 | "font-size", 5 | "line-height", 6 | "letter-spacing", 7 | "color", 8 | "text-alignment", 9 | "text-transform", 10 | ]; 11 | 12 | export type FontProperty = 13 | | "font-family" 14 | | "variant" 15 | | "font-size" 16 | | "line-height" 17 | | "letter-spacing" 18 | | "color" 19 | | "text-alignment" 20 | | "text-transform"; 21 | 22 | export type GoogleFontEntity = { 23 | family: string; 24 | category: string; 25 | variants: string[]; 26 | }; 27 | 28 | export type GoogleFontsOrderEntity = { 29 | alpha: string[]; 30 | popularity: string[]; 31 | trending: string[]; 32 | }; 33 | 34 | export type GoogleFontsCollection = { 35 | items: Record; 36 | order: GoogleFontsOrderEntity; 37 | }; 38 | 39 | export type LabelValuePair = { 40 | label: string; 41 | value: string; 42 | }; 43 | 44 | export type FontVariantsCollection = { 45 | standard: LabelValuePair[]; 46 | complete: LabelValuePair[]; 47 | }; 48 | 49 | export type WpbfCustomizeTypographyControlValue = { 50 | "font-family"?: string; 51 | variant?: string; 52 | "font-style"?: string; 53 | "font-weight"?: string | number; 54 | "font-size"?: string | number; 55 | "line-height"?: string; 56 | "letter-spacing"?: string; 57 | color?: string; 58 | "text-align"?: string; 59 | "text-transform"?: string; 60 | random?: number|string; 61 | }; 62 | -------------------------------------------------------------------------------- /fonts/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | This is a custom SVG font generated by IcoMoon. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Customizer/Controls/Typography/Entities/GoogleFontsOrderEntity.php: -------------------------------------------------------------------------------- 1 | alpha = isset( $arr['alpha'] ) ? $arr['alpha'] : []; 39 | $instance->popularity = isset( $arr['popularity'] ) ? $arr['popularity'] : []; 40 | $instance->trending = isset( $arr['trending'] ) ? $arr['trending'] : []; 41 | 42 | return $instance; 43 | 44 | } 45 | 46 | /** 47 | * Convert the instance to an array. 48 | * 49 | * @return array 50 | */ 51 | public function toArray() { 52 | 53 | return [ 54 | 'alpha' => $this->alpha, 55 | 'popularity' => $this->popularity, 56 | 'trending' => $this->trending, 57 | ]; 58 | 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /Customizer/Entities/PartialRefreshEntity.php: -------------------------------------------------------------------------------- 1 | 42 | 43 | 44 |
45 | 46 | control->custom_properties; 20 | 21 | $subtype = $this->control->type; 22 | $subtype = ! in_array( $subtype, GenericControl::$allowed_subtypes, true ) ? 'text' : $subtype; 23 | 24 | $min = isset( $props['min'] ) && is_numeric( $props['min'] ) ? (float) $props['min'] : null; 25 | $max = isset( $props['max'] ) && is_numeric( $props['max'] ) ? (float) $props['max'] : null; 26 | 27 | return ( new GenericSanitizer() )->sanitize( $subtype, $value, $min, $max ); 28 | 29 | } 30 | 31 | /** 32 | * Add control to the customizer. 33 | * 34 | * @param WP_Customize_Manager $wp_customize_manager The customizer manager object. 35 | */ 36 | public function addControl( $wp_customize_manager ) { 37 | 38 | $control_args = $this->parseControlArgs(); 39 | 40 | $control_args['subtype'] = $this->control->type; 41 | 42 | $wp_customize_manager->add_control( new GenericControl( 43 | $wp_customize_manager, 44 | $this->control->id, 45 | $control_args 46 | ) ); 47 | 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /inc/class-vars.php: -------------------------------------------------------------------------------- 1 | $value ) { 56 | self::$vars[ $key ] = $value; 57 | } 58 | } else { 59 | self::$vars[ $name ] = $value; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /assets/css/admin-notices.css: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------- 3 | * Admin Notice 4 | * -------------------- 5 | */ 6 | .wpbf-activation-notice, 7 | .wpbf-bfcm-notice, 8 | .wpbf-compatibility-notice { 9 | padding: 25px 20px; 10 | } 11 | 12 | .wpbf-activation-notice .notice-body, 13 | .wpbf-bfcm-notice .notice-body, 14 | .wpbf-compatibility-notice .notice-body { 15 | display: flex; 16 | } 17 | 18 | .wpbf-activation-notice .notice-icon, 19 | .wpbf-bfcm-notice .notice-icon, 20 | .wpbf-compatibility-notice .notice-icon { 21 | padding-right: 25px; 22 | } 23 | 24 | .wpbf-activation-notice .notice-icon img, 25 | .wpbf-bfcm-notice .notice-icon img, 26 | .wpbf-compatibility-notice .notice-icon img { 27 | max-width: 55px; 28 | } 29 | 30 | .wpbf-activation-notice .notice-content, 31 | .wpbf-bfcm-notice .notice-content, 32 | .wpbf-compatibility-notice .notice-content { 33 | width: 100%; 34 | } 35 | 36 | .wpbf-activation-notice .notice-content h2, 37 | .wpbf-bfcm-notice .notice-content h2, 38 | .wpbf-compatibility-notice .notice-content h2 { 39 | margin-top: 0; 40 | margin-bottom: 10px; 41 | font-weight: 700; 42 | } 43 | 44 | .wpbf-activation-notice .notice-content > p, 45 | .wpbf-bfcm-notice .notice-content > p, 46 | .wpbf-compatibility-notice .notice-content > p { 47 | margin-top: 0; 48 | margin-bottom: 10px; 49 | } 50 | 51 | .wpbf-activation-notice .notice-content > p:last-child, 52 | .wpbf-bfcm-notice .notice-content > p:last-child, 53 | .wpbf-compatibility-notice .notice-content > p:last-child { 54 | margin-bottom: 0; 55 | } 56 | -------------------------------------------------------------------------------- /Customizer/Controls/Color/src/components/ColorPickerCircle.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | export type ColorPickerCircleProps = { 4 | pickerComponent?: any; 5 | useHueMode?: boolean; 6 | color?: string; 7 | isPickerOpen?: boolean; 8 | togglePickerHandler: () => void; 9 | }; 10 | 11 | export default function ColorPickerCircle(props: ColorPickerCircleProps) { 12 | const { color = "" } = props; 13 | const [value, setValue] = useState(() => color); 14 | 15 | // Update the local state when `color` property value is changed. 16 | useEffect(() => { 17 | // We don't need to convert the color since it's using the customizer value. 18 | setValue(color); 19 | }, [color]); 20 | 21 | const triggerButtonBgImage = 22 | 'url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAAHnlligAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNpi+P///4EDBxiAGMgCCCAGFB5AADGCRBgYDh48CCRZIJS9vT2QBAggFBkmBiSAogxFBiCAoHogAKIKAlBUYTELAiAmEtABEECk20G6BOmuIl0CIMBQ/IEMkO0myiSSraaaBhZcbkUOs0HuBwDplz5uFJ3Z4gAAAABJRU5ErkJggg==")'; 23 | 24 | return ( 25 |
26 | 41 |
42 | ); 43 | } 44 | -------------------------------------------------------------------------------- /Customizer/Controls/Radio/RadioButtonsetControl.php: -------------------------------------------------------------------------------- 1 | 24 | 25 | <# if ( data.label ) { #>{{{ data.label }}}<# } #> 26 | <# if ( data.description ) { #>{{{ data.description }}}<# } #> 27 | 28 |
29 | <# for ( key in data.choices ) { #> 30 | checked="checked" <# } #>> 31 | 32 | 33 | <# } #> 34 |
35 | 36 | normalizeMaxValue( $min, $max ); 28 | 29 | if ( 'number' === $type ) { 30 | return $number_util->limitNumber( $value, $min, $max ); 31 | } 32 | 33 | return $number_util->limitNumberWithUnit( $value, $min, $max ); 34 | } elseif ( 'email' === $type ) { 35 | return sanitize_email( $value ); 36 | } elseif ( 'content' === $type ) { 37 | return wp_kses_post( $value ); 38 | } 39 | 40 | return sanitize_text_field( $value ); 41 | 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /inc/settings/bfcm-notice.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 |
15 |
16 | Page Builder Framework Logo 17 |
18 |
19 |

20 | 21 |

22 |

23 | Premium Add-On for Page Builder Framework, today & get up to 25% off!', 'page-builder-framework' ); ?> 24 |

25 |

26 |
27 | 28 |

29 |

30 | 31 | 32 | 33 | 34 |

35 |
36 |
37 |
38 | -------------------------------------------------------------------------------- /Customizer/Controls/Code/CodeField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 49 | 50 | $wp_customize_manager->add_control( 51 | new CodeControl( 52 | $wp_customize_manager, 53 | $this->control->id, 54 | $control_args 55 | ) 56 | ); 57 | 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /Customizer/Controls/Editor/src/editor-control.ts: -------------------------------------------------------------------------------- 1 | import { WpbfCustomize } from "../../Base/src/interface"; 2 | import "./editor-control.scss"; 3 | import { WpbfCustomizeEditorControl } from "./editor-interface"; 4 | 5 | declare var wp: { 6 | customize: WpbfCustomize; 7 | editor: any; 8 | }; 9 | 10 | declare var tinyMCE: any; 11 | 12 | /* global tinyMCE */ 13 | wp.customize.controlConstructor["wpbf-editor"] = 14 | wp.customize.wpbfDynamicControl.extend({ 15 | initWpbfControl: function ( 16 | this: WpbfCustomizeEditorControl, 17 | ctrl?: WpbfCustomizeEditorControl, 18 | ) { 19 | const control = ctrl || this; 20 | const element = control.container.find("textarea"); 21 | const id = "wpbf-editor-" + control.id.replace("[", "").replace("]", ""); 22 | 23 | const defaultParams = { 24 | tinymce: { 25 | wpautop: true, 26 | }, 27 | quicktags: true, 28 | mediaButtons: true, 29 | }; 30 | 31 | // Overwrite the default paramaters if choices is defined. 32 | if (wp.editor && wp.editor.initialize) { 33 | wp.editor.initialize( 34 | id, 35 | jQuery.extend({}, defaultParams, { 36 | tinymce: control.params.tinymce, 37 | quicktags: control.params.quicktags, 38 | }), 39 | ); 40 | } 41 | 42 | const editor = tinyMCE.get(id); 43 | 44 | if (editor) { 45 | editor.onChange.add(function (ed: any) { 46 | ed.save(); 47 | const content = editor.getContent(); 48 | element.val(content).trigger("change"); 49 | wp.customize.instance(control.id).set(content); 50 | }); 51 | } 52 | }, 53 | }); 54 | -------------------------------------------------------------------------------- /inc/template-parts/navigation/menu-mobile-default.php: -------------------------------------------------------------------------------- 1 | 12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 | 20 | 21 |
22 | 23 |
24 | 25 | 28 | 29 |
30 | 31 |
32 | 33 |
34 | 35 | 36 | 37 | 46 | 47 | 48 | 49 |
50 | 51 |
52 | -------------------------------------------------------------------------------- /Customizer/Controls/Slider/SliderField.php: -------------------------------------------------------------------------------- 1 | control->custom_properties; 29 | $min = isset( $props['min'] ) && is_numeric( $props['min'] ) ? (float) $props['min'] : null; 30 | $min = is_null( $min ) ? SliderControl::$default_min : $min; 31 | $max = isset( $props['max'] ) && is_numeric( $props['max'] ) ? (float) $props['max'] : null; 32 | $max = is_null( $max ) ? SliderControl::$default_max : $max; 33 | 34 | return ( new NumberUtil() )->limitNumber( $value, $min, $max ); 35 | 36 | } 37 | 38 | /** 39 | * Add control to the customizer. 40 | * 41 | * @param WP_Customize_Manager $wp_customize_manager The customizer manager object. 42 | */ 43 | public function addControl( $wp_customize_manager ) { 44 | 45 | $control_args = $this->parseControlArgs(); 46 | 47 | $wp_customize_manager->add_control( new SliderControl( 48 | $wp_customize_manager, 49 | $this->control->id, 50 | $control_args 51 | ) ); 52 | 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /assets/scss/post-list.scss: -------------------------------------------------------------------------------- 1 | // Hide layout column. 2 | .column-wpbf_layout { 3 | width: 0; 4 | font-size: 0; 5 | display: none; 6 | } 7 | 8 | // Adjust default quick edit area styling. 9 | .submit.inline-edit-save { 10 | padding-top: 1em; 11 | padding-bottom: 1em; 12 | border-top: 1px solid #ddd; 13 | } 14 | 15 | .inline-edit-row fieldset .inline-edit-col { 16 | label { 17 | margin-bottom: .4em; 18 | } 19 | } 20 | 21 | // Style the wpbf-quick-edit section. 22 | .wpbf-quick-edit, 23 | .wpbf-quick-edit * { 24 | box-sizing: border-box; 25 | } 26 | 27 | .wpbf-quick-edit { 28 | clear: both; 29 | margin-top: .5em; 30 | padding: .5em; 31 | 32 | h4 { 33 | margin-top: 12px; 34 | margin-bottom: 12px; 35 | } 36 | } 37 | 38 | .wpbf-quick-edit-row { 39 | display: flex; 40 | flex-wrap: wrap; 41 | margin-top: 10px; 42 | width: 100%; 43 | border-top: 1px solid #ddd; 44 | 45 | &.has-3 { 46 | .wpbf-quick-edit-col { 47 | width: 33%; 48 | } 49 | } 50 | 51 | &.has-4 { 52 | .wpbf-quick-edit-col { 53 | width: 25%; 54 | } 55 | } 56 | 57 | @media screen and (max-width: 768px) { 58 | &.has-3, &.has-4 { 59 | width: 100%; 60 | } 61 | } 62 | } 63 | 64 | .wpbf-quick-edit-field { 65 | margin-bottom: 9px; 66 | } 67 | 68 | .wpbf-quick-edit-radio-field, .wpbf-quick-edit-checkbox-field { 69 | display: flex; 70 | width: 100%; 71 | align-items: center; 72 | 73 | .wpbf-quick-edit-label { 74 | display: inline-flex; 75 | line-height: 1.1; 76 | } 77 | 78 | .wpbf-quick-edit-control { 79 | display: inline-flex; 80 | margin-right: .4rem; 81 | } 82 | 83 | input { 84 | margin: 0; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /inc/customizer/settings/settings-compatibility.php: -------------------------------------------------------------------------------- 1 | 17 | 18 |

19 | Premium Add-On is outdated and no longer compatible with the latest version of Page Builder Framework.', 'page-builder-framework' ); ?> 20 | 21 |

22 |

23 | 24 | 25 | 26 | 27 | 28 | 29 |

30 | 31 | id( 'wpbf_premium_addon' ) 37 | ->type( 'expanded' ) 38 | ->title( __( 'Compatibility Warning', 'page-builder-framework' ) ) 39 | ->priority( 1 ) 40 | ->add(); 41 | 42 | // Field. 43 | wpbf_customizer_field() 44 | ->id( 'wpbf_premium_addon_outdated_notice' ) 45 | ->type( 'custom' ) 46 | ->defaultValue( $wpbf_premium_outdated_notice ) 47 | ->priority( 1 ) 48 | ->addToSection( 'wpbf_premium_addon' ); 49 | -------------------------------------------------------------------------------- /Customizer/Controls/Generic/src/generic-control.ts: -------------------------------------------------------------------------------- 1 | import { WpbfCustomize } from "../../Base/src/interface"; 2 | import { WpbfCustomizeGenericControl } from "./interface"; 3 | import { 4 | limitNumber, 5 | limitNumberWithUnit, 6 | normalizeMaxValue, 7 | } from "./number-util"; 8 | 9 | declare var wp: { 10 | customize: WpbfCustomize; 11 | }; 12 | 13 | wp.customize.controlConstructor["wpbf-generic"] = 14 | wp.customize.wpbfDynamicControl.extend({ 15 | initWpbfControl: function ( 16 | this: WpbfCustomizeGenericControl, 17 | control?: WpbfCustomizeGenericControl, 18 | ) { 19 | control = control || this; 20 | const params = control.params; 21 | 22 | if ("wpbf-generic" !== params.type) { 23 | return; 24 | } 25 | 26 | const inputSelector = ".wpbf-control-form input"; 27 | const textareaSelector = ".wpbf-control-form textarea"; 28 | 29 | control.container 30 | .find(`${inputSelector}, ${textareaSelector}`) 31 | .on("input", function () { 32 | let fieldValue: string | number = 33 | this instanceof HTMLInputElement || 34 | this instanceof HTMLTextAreaElement 35 | ? this.value 36 | : ""; 37 | 38 | if ("number" === params.subtype || "number-unit" === params.subtype) { 39 | params.max = normalizeMaxValue(params.min, params.max); 40 | 41 | fieldValue = 42 | "number" === params.subtype 43 | ? limitNumber(fieldValue, params.min, params.max) 44 | : limitNumberWithUnit(fieldValue, params.min, params.max); 45 | } 46 | 47 | control.setting?.set(fieldValue); 48 | }); 49 | }, 50 | }); 51 | -------------------------------------------------------------------------------- /inc/integration/header-footer-elementor.php: -------------------------------------------------------------------------------- 1 | 26 | 27 |
28 | <# if ( data.label ) { #> 29 | 30 | <# } #> 31 | 32 | <# if ( data.description ) { #> 33 | {{{ data.description }}} 34 | <# } #> 35 | 36 | 48 | {{{ data.value }}} 49 | 50 | 51 | ({ 10 | initWpbfControl: function ( 11 | this: WpbfCustomizeAssocArrayControl, 12 | control?: WpbfCustomizeAssocArrayControl, 13 | ) { 14 | control = control || this; 15 | const params = control.params; 16 | 17 | if ("wpbf-assoc-array" !== params.type) { 18 | return; 19 | } 20 | 21 | /** 22 | * AssocArray control is a "one-way" control or like a read-only control. 23 | * Becase we only listen to customizer setting change event. 24 | * We don't need to listen to the input field change event because they are hidden fields. 25 | */ 26 | control.setting?.bind((value: Record) => { 27 | control.updateComponentState?.(value); 28 | }); 29 | }, 30 | 31 | updateComponentState: function ( 32 | this: WpbfCustomizeAssocArrayControl, 33 | value: Record, 34 | ) { 35 | const fields = this.container[0].querySelectorAll(inputSelector); 36 | if (!fields.length) return; 37 | 38 | fields.forEach((field) => { 39 | if (!(field instanceof HTMLInputElement)) return; 40 | const prop = field.dataset.settingProp; 41 | if (!prop || !value[prop]) return; 42 | field.value = value[prop]; 43 | }); 44 | }, 45 | }); 46 | 47 | const inputSelector = ".wpbf-control-form input[data-setting-prop]"; 48 | -------------------------------------------------------------------------------- /Customizer/Controls/Radio/RadioField.php: -------------------------------------------------------------------------------- 1 | control->choices[ $value ] ) ) { 36 | $setting_entity = CustomizerStore::findSettingByControlId( $this->control->id ); 37 | 38 | return $setting_entity ? $setting_entity->default : ''; 39 | } 40 | 41 | return $value; 42 | 43 | } 44 | 45 | /** 46 | * Add control to the customizer. 47 | * 48 | * @param WP_Customize_Manager $wp_customize_manager The customizer manager object. 49 | */ 50 | public function addControl( $wp_customize_manager ) { 51 | 52 | $control_args = $this->parseControlArgs(); 53 | 54 | $wp_customize_manager->add_control( 55 | new RadioControl( 56 | $wp_customize_manager, 57 | $this->control->id, 58 | $control_args 59 | ) 60 | ); 61 | 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /inc/body-classes.php: -------------------------------------------------------------------------------- 1 | post_name; 31 | } 32 | 33 | // Sidebar classes. 34 | $sidebar_layout = wpbf_sidebar_layout(); 35 | 36 | $classes[] = 'none' === $sidebar_layout ? 'wpbf-no-sidebar' : 'wpbf-sidebar-' . $sidebar_layout; 37 | 38 | // Full width body class. 39 | $inner_content = wpbf_inner_content( $echo = false ); 40 | 41 | if ( ! $inner_content ) { 42 | $classes[] = 'wpbf-full-width'; 43 | } 44 | 45 | // WooCommerce list layout. 46 | if ( 'list' === get_theme_mod( 'woocommerce_loop_layout' ) ) { 47 | $classes[] = 'wpbf-woo-list-view'; 48 | } 49 | 50 | return $classes; 51 | 52 | } 53 | add_filter( 'body_class', 'wpbf_body_classes' ); 54 | 55 | /** 56 | * Post classes. 57 | * 58 | * @param array $classes The post classes. 59 | * 60 | * @return array The updated post classes. 61 | */ 62 | function wpbf_post_classes( $classes ) { 63 | 64 | // Add wpbf-post class to all posts. 65 | $classes[] = 'wpbf-post'; 66 | 67 | return $classes; 68 | 69 | } 70 | add_filter( 'post_class', 'wpbf_post_classes' ); 71 | -------------------------------------------------------------------------------- /inc/customizer/settings/settings-helpers.php: -------------------------------------------------------------------------------- 1 | apply_filters( 'wpbf_kirki_font_choices', array() ), 67 | ); 68 | } 69 | -------------------------------------------------------------------------------- /Customizer/Controls/Sortable/SortableField.php: -------------------------------------------------------------------------------- 1 | parseControlArgs(); 60 | 61 | $wp_customize_manager->add_control( 62 | new SortableControl( 63 | $wp_customize_manager, 64 | $this->control->id, 65 | $control_args 66 | ) 67 | ); 68 | 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /Customizer/Controls/Radio/dist/radio-control-min.css: -------------------------------------------------------------------------------- 1 | .wpbf-customize-control-radio-image>.image{flex-wrap:wrap;display:flex}.wpbf-customize-control-radio-image label{display:inline-block;position:relative}.wpbf-customize-control-radio-image label .image-label{background:#ffffffb3;width:100%;height:100%;font-weight:700;display:none;position:absolute;top:0;left:0}.wpbf-customize-control-radio-image label .image-label .inner{text-align:center;vertical-align:middle;width:100%;height:100%;padding:.5em}.wpbf-customize-control-radio-image label:hover .image-label{display:block}.wpbf-customize-control-radio-image input{display:none}.wpbf-customize-control-radio-image input img{border:1px solid #0000}.wpbf-customize-control-radio-image input:not(:checked):hover+label img{opacity:.7}.wpbf-customize-control-radio-image input:checked+label img{border:1px solid #aaa}.wpbf-customize-control-radio-image input+label .image-clickable{width:100%;height:100%;position:absolute;inset:0}.wpbf-customize-control-radio-buttonset .buttonset{flex-wrap:wrap;display:flex}.wpbf-customize-control-radio-buttonset .buttonset .switch-label{color:#555d66;text-align:center;background:#0000001a;border:1px #0000001a;flex-grow:1;margin:0;padding:.5em .9em}.wpbf-customize-control-radio-buttonset .buttonset .switch-input{position:absolute}.wpbf-customize-control-radio-buttonset .buttonset .switch-input:checked+.switch-label{color:#fffc;background-color:#00a0d2}.wpbf-customize-control-radio-buttonset .screen-reader-text:focus{-webkit-clip-path:inset(50%);clip-path:inset(50%)}.wpbf-customize-control-radio label{margin-bottom:7px;display:list-item}.wpbf-customize-control-radio label .option-description{color:#00000059;padding-left:25px;font-size:.9em;display:block} -------------------------------------------------------------------------------- /Customizer/Entities/CustomizerPanelEntity.php: -------------------------------------------------------------------------------- 1 | { 9 | /** 10 | * Function to hook into `wpbfPostMessageStylesOutput` filter. 11 | * 12 | * @param {string} styles - The styles to be filtered. 13 | * @param {MarginPaddingValue|string|number} values - The control's value. 14 | * @param {Object} output - The control's output argument. 15 | * @param {string} controlType - The control type. 16 | * 17 | * @return {string} The filtered styles. 18 | */ 19 | const stylesOutput = ( 20 | styles: string, 21 | values: MarginPaddingValue | string | number, 22 | output: { element: string }, 23 | controlType: string, 24 | ): string => { 25 | if ("wpbf-margin-padding" !== controlType) { 26 | return styles; 27 | } 28 | 29 | if ("string" === typeof values || "number" === typeof values) { 30 | return styles; 31 | } 32 | 33 | if (!values.top && !values.right && !values.bottom && !values.left) { 34 | return styles; 35 | } 36 | 37 | const property = controlType.replace("wpbf-", ""); 38 | 39 | styles += output.element + "{"; 40 | 41 | for (const position in values) { 42 | if (Object.hasOwnProperty.call(values, position)) { 43 | const value = values[position]; 44 | 45 | if ("" !== value) { 46 | styles += property + "-" + position + ": " + value + ";"; 47 | } 48 | } 49 | } 50 | 51 | styles += "}"; 52 | 53 | return styles; 54 | }; 55 | 56 | // Hook the function to the `wpbfPostMessageStylesOutput` filter. 57 | wp.hooks.addFilter("wpbfPostMessageStylesOutput", "wpbf", stylesOutput); 58 | })(); 59 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 |
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /single.php: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
47 | 48 | 49 | 50 |
51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 |
69 | 70 | 71 | -------------------------------------------------------------------------------- /Customizer/Panels/dist/panel-types-min.js: -------------------------------------------------------------------------------- 1 | var e;e={},e=_,function(){wp.customize.bind("pane-contents-reflowed",function(){let e=[];wp.customize.panel.each(function(t){"wpbf-nested"===t.params.type&&t.params.parentId&&e.push(t)}),e.sort(wp.customize.utils.prioritySort).reverse(),jQuery.each(e,function(e,t){jQuery("#sub-accordion-panel-"+t.params.parentId).children(".panel-meta").after(t.headContainer)})});let t=wp.customize.Panel.prototype.embed,a=wp.customize.Panel.prototype.isContextuallyActive,n=wp.customize.Panel.prototype.attachEvents;wp.customize.Panel=wp.customize.Panel.extend({attachEvents:function(){let e=this;if("wpbf-nested"!==e.params.type||!e.params.parentId){n.call(e);return}n.call(e),e.expanded.bind(function(t){e.params.parentId&&(t?wp.customize.panel(e.params.parentId).contentContainer?.addClass("current-panel-parent"):wp.customize.panel(e.params.parentId).contentContainer?.removeClass("current-panel-parent"))}),e.container?.find(".customize-panel-back").off("click keydown").on("click keydown",function(t){!wp.customize.utils.isKeydownButNotEnterEvent(t)&&(t.preventDefault(),e.params.parentId&&e.expanded()&&wp.customize.panel(e.params.parentId).expand(e.params))})},embed:function(){if("wpbf-nested"!==this.params.type||!this.params.parentId){t.call(this);return}t.call(this),jQuery("#sub-accordion-panel-"+this.params.parentId).append(this.headContainer)},isContextuallyActive:function(){var t;let n=this,p=0;if("wpbf-nested"!==n.params.type)return a.call(n);let r=n._children("panel","section");return wp.customize.panel.each(function(e){e.params.parentId&&e.params.parentId===n.id&&r.push(e)}),r.sort(wp.customize.utils.prioritySort),((t=e)&&t.__esModule?t.default:t)(r).each(function(e){e.active()&&e.isContextuallyActive()&&(p+=1)}),0!==p}})}(); 2 | //# sourceMappingURL=panel-types-min.js.map 3 | -------------------------------------------------------------------------------- /Customizer/Controls/Repeater/src/repeater-interface.ts: -------------------------------------------------------------------------------- 1 | import { 2 | WpbfCustomizeControl, 3 | WpbfCustomizeControlParams, 4 | } from "../../Base/src/interface"; 5 | 6 | /** 7 | * The setting value returned via PHP will be associative array 8 | * because we handle it via PHP in `RepeaterSetting` class. 9 | * 10 | * TS type equivalent of that assoc-array is Record. 11 | * 12 | * But the control.setting.get() in JS will return string 13 | * because it will be taken from the linked (hidden) setting field. 14 | */ 15 | export type WpbfCustomizeRepeaterValue = Record[] | string; 16 | 17 | export interface WpbfCustomizeRepeaterControlParams 18 | extends WpbfCustomizeControlParams[]> { 19 | fields: Record>; 20 | rowLabel: Record; 21 | buttonLabel: string; 22 | limit: number | boolean; 23 | } 24 | 25 | export interface WpbfCustomizeRepeaterControl 26 | extends WpbfCustomizeControl< 27 | WpbfCustomizeRepeaterValue, 28 | WpbfCustomizeRepeaterControlParams 29 | > { 30 | rows?: WpbfRepeaterRow[]; 31 | } 32 | 33 | export interface WpbfRepeaterRow { 34 | rowIndex: number; 35 | container: JQuery; 36 | label: Record; 37 | header: JQuery; 38 | toggleMinimize: () => void; 39 | remove: () => void; 40 | updateLabel: () => void; 41 | setRowIndex: (rowNum: number) => void; 42 | } 43 | 44 | export interface RepeaterImageSelectOptions { 45 | handles: boolean; 46 | keys: boolean; 47 | instance: boolean; 48 | persistent: boolean; 49 | imageWidth: string | number; 50 | imageHeight: string | number; 51 | aspectRatio: string; 52 | maxHeight: number | boolean; 53 | maxWidth: number | boolean; 54 | x1: number; 55 | y1: number; 56 | x2: number; 57 | y2: number; 58 | } 59 | -------------------------------------------------------------------------------- /Customizer/Controls/Sortable/src/sortable-control.ts: -------------------------------------------------------------------------------- 1 | import "./sortable-control.scss"; 2 | 3 | import { WpbfCustomize } from "../../Base/src/interface"; 4 | import { WpbfCustomizeSortableControl } from "./interface"; 5 | import _ from "lodash"; 6 | 7 | declare var wp: { 8 | customize: WpbfCustomize; 9 | }; 10 | 11 | wp.customize.controlConstructor["wpbf-sortable"] = 12 | wp.customize.Control.extend({ 13 | ready: function (this: WpbfCustomizeSortableControl) { 14 | const control = this; 15 | 16 | // Init sortable. 17 | jQuery(control.container.find("ul.sortable").first()) 18 | .sortable({ 19 | // Update value when we stop sorting. 20 | update: function () { 21 | if (control.setting) { 22 | control.setting.set(control.getNewValues!()); 23 | } 24 | }, 25 | }) 26 | .disableSelection() 27 | .find("li") 28 | .each(function () { 29 | // Enable/disable options when we click on the eye of Thundera. 30 | jQuery(this) 31 | .find("i.visibility") 32 | .on("click", function () { 33 | jQuery(this) 34 | .toggleClass("dashicons-visibility-faint") 35 | .parents("li:eq(0)") 36 | .toggleClass("invisible"); 37 | }); 38 | }) 39 | .on("click", function () { 40 | // Update value on click. 41 | control.setting?.set(control.getNewValues!()); 42 | }); 43 | }, 44 | 45 | getNewValues: function (this: WpbfCustomizeSortableControl) { 46 | const control = this; 47 | const items = control.container.find("li"); 48 | const newVal: any[] = []; 49 | 50 | _.each(items, function (item) { 51 | if (!item.classList.contains("invisible")) { 52 | newVal.push(item.dataset.value); 53 | } 54 | }); 55 | 56 | return newVal; 57 | }, 58 | }); 59 | -------------------------------------------------------------------------------- /Customizer/Controls/Media/UploadField.php: -------------------------------------------------------------------------------- 1 | getUtilInstance(); 35 | $props = $this->control->custom_properties; 36 | $save_as = $props['save_as'] ?: $util->default_save_as; 37 | 38 | return ( new MediaSanitizer() )->sanitize( $value, $util, $save_as ); 39 | 40 | } 41 | 42 | /** 43 | * Get utility instance. 44 | * 45 | * @return UploadUtil 46 | */ 47 | protected function getUtilInstance() { 48 | 49 | return new UploadUtil(); 50 | 51 | } 52 | 53 | /** 54 | * Add control to the customizer. 55 | * 56 | * @param WP_Customize_Manager $wp_customize_manager The customizer manager object. 57 | */ 58 | public function addControl( $wp_customize_manager ) { 59 | 60 | $control_args = $this->parseControlArgs(); 61 | 62 | $wp_customize_manager->add_control( 63 | new UploadControl( 64 | $wp_customize_manager, 65 | $this->control->id, 66 | $control_args 67 | ) 68 | ); 69 | 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /page-sidebar.php: -------------------------------------------------------------------------------- 1 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | 41 | 42 | '', 46 | ) ); 47 | ?> 48 | 49 | 50 | 51 |
52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 |
64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
72 | 73 | 74 | -------------------------------------------------------------------------------- /Customizer/Controls/Headline/HeadlineControl.php: -------------------------------------------------------------------------------- 1 | 40 | 41 | 42 |
43 | label ) : ?> 44 |

45 | label ); ?> 46 |

47 | 48 | 49 | description ) : ?> 50 |

51 | description ); ?> 52 |

53 | 54 |
55 | 56 |