├── .compressignore
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .mocharc.json
├── .phpcs.xml
├── .stylelintrc.json
├── README.md
├── admin
├── class-ultimate-blocks-admin.php
├── class-ultimate-blocks-help.php
├── css
│ ├── src
│ │ ├── base
│ │ │ ├── _colors.scss
│ │ │ ├── _common.scss
│ │ │ └── themes
│ │ │ │ └── _admin-menu-theme.scss
│ │ ├── inc
│ │ │ ├── block-control-card.scss
│ │ │ ├── blocks-content-styles.scss
│ │ │ ├── box-content.scss
│ │ │ ├── button-link.scss
│ │ │ ├── controls-container.scss
│ │ │ ├── extension-control-card.scss
│ │ │ ├── extensions-content-styles.scss
│ │ │ ├── navigation.scss
│ │ │ ├── screen-center-mark.scss
│ │ │ └── welcome-content-styles.scss
│ │ └── ub-admin-settings.scss
│ ├── ultimate-blocks-admin.css
│ └── ultimate-blocks-help.css
├── data
│ ├── Block_Menu_Info_Data.php
│ ├── Settings_Menu_Content_Data.php
│ ├── Settings_Menu_Pro_Manager_Asset_Data.php
│ ├── block_demos
│ │ ├── Block_Demos_Data.php
│ │ └── block-demos.json
│ └── savedStyles.ubdata
├── images
│ ├── banners
│ │ ├── banner-772x250.png
│ │ ├── help-bg.png
│ │ └── ultimate_blocks_logo.png
│ └── logos
│ │ ├── icon-128x128.png
│ │ ├── menu-icon-colored.svg
│ │ └── menu-icon.svg
├── index.php
├── js
│ ├── src
│ │ ├── components
│ │ │ ├── ActiveFilterIndicator.js
│ │ │ ├── AdminMenuWrapper.js
│ │ │ ├── Animation.js
│ │ │ ├── AnimationAppear.js
│ │ │ ├── AssetProvider.js
│ │ │ ├── BlockCardProInfoControl.js
│ │ │ ├── BlockControlCard.js
│ │ │ ├── BlockControlsContainer.js
│ │ │ ├── BlockStatusFilterControl.js
│ │ │ ├── BoxContent
│ │ │ │ ├── BoxContent.js
│ │ │ │ ├── BoxContentInc.js
│ │ │ │ ├── BoxContentProvider.js
│ │ │ │ └── BoxContentTitle.js
│ │ │ ├── ButtonLink.js
│ │ │ ├── ButtonLinkGroup.js
│ │ │ ├── Content.js
│ │ │ ├── ContentPhrase.js
│ │ │ ├── ExtensionCardProInfoControl.js
│ │ │ ├── ExtensionControlCard.js
│ │ │ ├── ExtensionsControlContainer.js
│ │ │ ├── FilterControlItem.js
│ │ │ ├── HamburgerMenu.js
│ │ │ ├── HeaderVersionInfo.js
│ │ │ ├── LineWrapper.js
│ │ │ ├── LocalStorageProvider.js
│ │ │ ├── MainContentPhrase.js
│ │ │ ├── MenuButton.js
│ │ │ ├── MenuContext.js
│ │ │ ├── MenuHeader.js
│ │ │ ├── Navigation.js
│ │ │ ├── NavigationHeaderButton.js
│ │ │ ├── Portal.js
│ │ │ ├── ProBlockCardTitle.js
│ │ │ ├── ProContent.js
│ │ │ ├── ProExtensionCardTitle.js
│ │ │ ├── ProFilter.js
│ │ │ ├── RightContainerItem.js
│ │ │ ├── Router.js
│ │ │ ├── RouterProvider.js
│ │ │ ├── ScreenCenterMarks.js
│ │ │ ├── TextIndicate.js
│ │ │ ├── ToggleControl.js
│ │ │ ├── UpgradeBoxContent.js
│ │ │ ├── UpsellModalSettingsMenu.js
│ │ │ ├── VersionControl.js
│ │ │ ├── VersionControlPopup.js
│ │ │ ├── VisibilityWrapper.js
│ │ │ └── YouTubeEmbed.js
│ │ ├── containers
│ │ │ ├── AdminMenuContainer.js
│ │ │ ├── BlocksContent.js
│ │ │ ├── ExtensionsContent.js
│ │ │ ├── MainContent.js
│ │ │ └── WelcomeContent.js
│ │ ├── hoc
│ │ │ ├── withIcon.js
│ │ │ └── withStore.js
│ │ ├── inc
│ │ │ ├── Route.js
│ │ │ ├── err
│ │ │ │ ├── ButtonLinkNoUrlError.js
│ │ │ │ ├── ContentNotFoundError.js
│ │ │ │ └── NoRouterComponentFoundError.js
│ │ │ └── routes.js
│ │ ├── stores
│ │ │ └── settings-menu
│ │ │ │ ├── actions.js
│ │ │ │ ├── initialState.js
│ │ │ │ ├── settingsMenuStore.js
│ │ │ │ └── slices
│ │ │ │ ├── app.js
│ │ │ │ ├── assets.js
│ │ │ │ ├── blocks.js
│ │ │ │ ├── extension.js
│ │ │ │ ├── pluginStatus.js
│ │ │ │ └── versionControl.js
│ │ └── ub-admin-settings.js
│ ├── ultimate-blocks-admin.js
│ └── ultimate-blocks-help.js
├── partials
│ └── ultimate-blocks-admin-display.php
└── templates
│ ├── help
│ └── help-page.php
│ └── menus
│ └── main-menu.php
├── babel.config.js
├── composer.json
├── composer.lock
├── dist
├── .gitinclude
└── deactivator.build.js
├── includes
├── Admin_Notices_Manager.php
├── Editor_Data_Manager.php
├── Env_Manager.php
├── Saved_Styles_Manager.php
├── Static_Styles_Manager.php
├── Ultimate_Blocks_Version_Control.php
├── Version_Control_Upgrader_Skin.php
├── Version_Sync_Manager.php
├── class-ultimate-blocks-activator.php
├── class-ultimate-blocks-category.php
├── class-ultimate-blocks-constants.php
├── class-ultimate-blocks-deactivator.php
├── class-ultimate-blocks-i18n.php
├── class-ultimate-blocks-loader.php
├── class-ultimate-blocks-util.php
├── class-ultimate-blocks.php
├── common
│ ├── base
│ │ └── Version_Sync_Base.php
│ ├── factory
│ │ └── Rest_Response_Factory.php
│ ├── interfaces
│ │ └── I_Plugin_Data.php
│ └── traits
│ │ ├── Ajax_Response_Trait.php
│ │ ├── Manager_Base_Trait.php
│ │ └── Singleton_Trait.php
├── index.php
├── managers
│ ├── Render_Assistant.php
│ └── Ub_Fs_Handler.php
├── pro_manager
│ ├── Pro_Manager.php
│ ├── assets
│ │ └── img
│ │ │ ├── advanced-video
│ │ │ └── channelDetails.png
│ │ │ ├── animation
│ │ │ └── animation.png
│ │ │ ├── button
│ │ │ └── transitionAnimation.gif
│ │ │ ├── buttons
│ │ │ └── transitionAnimation.gif
│ │ │ ├── common
│ │ │ └── savedStylesMain.png
│ │ │ ├── content-toggle-block
│ │ │ ├── highlightColor.png
│ │ │ ├── search.png
│ │ │ └── searchSummary.png
│ │ │ ├── content-toggle-panel-block
│ │ │ ├── highlightColor.png
│ │ │ ├── search.png
│ │ │ └── searchSummary.png
│ │ │ ├── divider
│ │ │ └── icon.png
│ │ │ ├── expand
│ │ │ ├── buttonStyle.png
│ │ │ └── fade.png
│ │ │ ├── image-slider
│ │ │ └── thumbnails.png
│ │ │ ├── post-grid
│ │ │ ├── pagination.png
│ │ │ └── postType.gif
│ │ │ ├── review
│ │ │ ├── prosCons.png
│ │ │ └── prosConsGraphLayout.png
│ │ │ ├── single-button
│ │ │ └── transitionAnimation.gif
│ │ │ ├── tabbed-content-block
│ │ │ ├── callToAction.png
│ │ │ ├── titleIcon.png
│ │ │ └── titleSecondaryText.png
│ │ │ ├── table-of-contents-block
│ │ │ ├── icon.png
│ │ │ └── stickyTOC.gif
│ │ │ └── visibility-control
│ │ │ └── visibilityControl.png
│ ├── base
│ │ ├── All_Blocks_Pro_Extension_Upsell.php
│ │ ├── Pro_Block_Upsell.php
│ │ └── Pro_Extension_Upsell.php
│ ├── blocks
│ │ ├── coupon
│ │ │ ├── Coupon_Pro_Block.php
│ │ │ ├── assets
│ │ │ │ └── coupon-ss.png
│ │ │ └── icon.php
│ │ └── timeline
│ │ │ ├── Timeline_Pro_Block.php
│ │ │ ├── assets
│ │ │ └── timeline-ss.png
│ │ │ └── icon.php
│ ├── extensions
│ │ ├── Advanced_Video_Extension.php
│ │ ├── Animation_Extension.php
│ │ ├── Button_Extension.php
│ │ ├── Buttons_Extension.php
│ │ ├── Content_Toggle_Extension.php
│ │ ├── Divider_Extension.php
│ │ ├── Expand_Extension.php
│ │ ├── Image_Slider_Extension.php
│ │ ├── Post_Grid_Extension.php
│ │ ├── Review_Extension.php
│ │ ├── Saved_Styles_Common.php
│ │ ├── Single_Button_Extension.php
│ │ ├── Social_Share_Extension.php
│ │ ├── Tabbed_Content_Extension.php
│ │ ├── Table_Of_Contents_Extension.php
│ │ └── Visibility_Control_Extension.php
│ └── inc
│ │ └── Pro_Editor_Control_Data.php
├── svg_sanitizer
│ ├── DomDocumentLoadHtmlException.php
│ ├── SvgSanitizeInvalidRootElement.php
│ └── Svg_Sanitizer.php
└── ultimate-blocks-styles-css-generator.php
├── languages
└── ultimate-blocks.pot
├── library
├── freemius
│ ├── LICENSE.txt
│ ├── README.md
│ ├── assets
│ │ ├── css
│ │ │ ├── admin
│ │ │ │ ├── account.css
│ │ │ │ ├── add-ons.css
│ │ │ │ ├── affiliation.css
│ │ │ │ ├── checkout.css
│ │ │ │ ├── clone-resolution.css
│ │ │ │ ├── common.css
│ │ │ │ ├── connect.css
│ │ │ │ ├── debug.css
│ │ │ │ ├── dialog-boxes.css
│ │ │ │ ├── gdpr-optin-notice.css
│ │ │ │ ├── index.php
│ │ │ │ ├── optout.css
│ │ │ │ └── plugins.css
│ │ │ ├── customizer.css
│ │ │ └── index.php
│ │ ├── img
│ │ │ ├── index.php
│ │ │ ├── plugin-icon.png
│ │ │ └── theme-icon.png
│ │ ├── index.php
│ │ └── js
│ │ │ ├── index.php
│ │ │ ├── nojquery.ba-postmessage.js
│ │ │ └── postmessage.js
│ ├── config.php
│ ├── includes
│ │ ├── class-freemius-abstract.php
│ │ ├── class-freemius.php
│ │ ├── class-fs-admin-notices.php
│ │ ├── class-fs-api.php
│ │ ├── class-fs-garbage-collector.php
│ │ ├── class-fs-lock.php
│ │ ├── class-fs-logger.php
│ │ ├── class-fs-options.php
│ │ ├── class-fs-plugin-updater.php
│ │ ├── class-fs-security.php
│ │ ├── class-fs-storage.php
│ │ ├── class-fs-user-lock.php
│ │ ├── customizer
│ │ │ ├── class-fs-customizer-support-section.php
│ │ │ ├── class-fs-customizer-upsell-control.php
│ │ │ └── index.php
│ │ ├── debug
│ │ │ ├── class-fs-debug-bar-panel.php
│ │ │ ├── debug-bar-start.php
│ │ │ └── index.php
│ │ ├── entities
│ │ │ ├── class-fs-affiliate-terms.php
│ │ │ ├── class-fs-affiliate.php
│ │ │ ├── class-fs-billing.php
│ │ │ ├── class-fs-entity.php
│ │ │ ├── class-fs-payment.php
│ │ │ ├── class-fs-plugin-info.php
│ │ │ ├── class-fs-plugin-license.php
│ │ │ ├── class-fs-plugin-plan.php
│ │ │ ├── class-fs-plugin-tag.php
│ │ │ ├── class-fs-plugin.php
│ │ │ ├── class-fs-pricing.php
│ │ │ ├── class-fs-scope-entity.php
│ │ │ ├── class-fs-site.php
│ │ │ ├── class-fs-subscription.php
│ │ │ ├── class-fs-user.php
│ │ │ └── index.php
│ │ ├── fs-core-functions.php
│ │ ├── fs-essential-functions.php
│ │ ├── fs-html-escaping-functions.php
│ │ ├── fs-plugin-info-dialog.php
│ │ ├── index.php
│ │ ├── l10n.php
│ │ ├── managers
│ │ │ ├── class-fs-admin-menu-manager.php
│ │ │ ├── class-fs-admin-notice-manager.php
│ │ │ ├── class-fs-cache-manager.php
│ │ │ ├── class-fs-clone-manager.php
│ │ │ ├── class-fs-gdpr-manager.php
│ │ │ ├── class-fs-key-value-storage.php
│ │ │ ├── class-fs-license-manager.php
│ │ │ ├── class-fs-option-manager.php
│ │ │ ├── class-fs-permission-manager.php
│ │ │ ├── class-fs-plan-manager.php
│ │ │ ├── class-fs-plugin-manager.php
│ │ │ └── index.php
│ │ ├── sdk
│ │ │ ├── Exceptions
│ │ │ │ ├── ArgumentNotExistException.php
│ │ │ │ ├── EmptyArgumentException.php
│ │ │ │ ├── Exception.php
│ │ │ │ ├── InvalidArgumentException.php
│ │ │ │ ├── OAuthException.php
│ │ │ │ └── index.php
│ │ │ ├── FreemiusBase.php
│ │ │ ├── FreemiusWordPress.php
│ │ │ ├── LICENSE.txt
│ │ │ └── index.php
│ │ └── supplements
│ │ │ ├── fs-essential-functions-1.1.7.1.php
│ │ │ ├── fs-essential-functions-2.2.1.php
│ │ │ ├── fs-migration-2.5.1.php
│ │ │ └── index.php
│ ├── index.php
│ ├── languages
│ │ ├── freemius-cs_CZ.mo
│ │ ├── freemius-da_DK.mo
│ │ ├── freemius-de_DE.mo
│ │ ├── freemius-es_ES.mo
│ │ ├── freemius-fr_FR.mo
│ │ ├── freemius-he_IL.mo
│ │ ├── freemius-hu_HU.mo
│ │ ├── freemius-it_IT.mo
│ │ ├── freemius-ja.mo
│ │ ├── freemius-nl_NL.mo
│ │ ├── freemius-ru_RU.mo
│ │ ├── freemius-ta.mo
│ │ ├── freemius-zh_CN.mo
│ │ ├── freemius.pot
│ │ └── index.php
│ ├── require.php
│ ├── start.php
│ └── templates
│ │ ├── account.php
│ │ ├── account
│ │ ├── billing.php
│ │ ├── index.php
│ │ ├── partials
│ │ │ ├── activate-license-button.php
│ │ │ ├── addon.php
│ │ │ ├── deactivate-license-button.php
│ │ │ ├── disconnect-button.php
│ │ │ ├── index.php
│ │ │ └── site.php
│ │ └── payments.php
│ │ ├── add-ons.php
│ │ ├── add-trial-to-pricing.php
│ │ ├── admin-notice.php
│ │ ├── ajax-loader.php
│ │ ├── api-connectivity-message-js.php
│ │ ├── auto-installation.php
│ │ ├── checkout.php
│ │ ├── clone-resolution-js.php
│ │ ├── connect.php
│ │ ├── connect
│ │ ├── index.php
│ │ ├── permission.php
│ │ └── permissions-group.php
│ │ ├── contact.php
│ │ ├── debug.php
│ │ ├── debug
│ │ ├── api-calls.php
│ │ ├── index.php
│ │ ├── logger.php
│ │ ├── plugins-themes-sync.php
│ │ └── scheduled-crons.php
│ │ ├── email.php
│ │ ├── forms
│ │ ├── affiliation.php
│ │ ├── data-debug-mode.php
│ │ ├── deactivation
│ │ │ ├── contact.php
│ │ │ ├── form.php
│ │ │ ├── index.php
│ │ │ └── retry-skip.php
│ │ ├── email-address-update.php
│ │ ├── index.php
│ │ ├── license-activation.php
│ │ ├── optout.php
│ │ ├── premium-versions-upgrade-handler.php
│ │ ├── premium-versions-upgrade-metadata.php
│ │ ├── resend-key.php
│ │ ├── subscription-cancellation.php
│ │ ├── trial-start.php
│ │ └── user-change.php
│ │ ├── gdpr-optin-js.php
│ │ ├── index.php
│ │ ├── js
│ │ ├── index.php
│ │ ├── jquery.content-change.php
│ │ ├── open-license-activation.php
│ │ ├── permissions.php
│ │ └── style-premium-theme.php
│ │ ├── partials
│ │ ├── index.php
│ │ └── network-activation.php
│ │ ├── plugin-icon.php
│ │ ├── plugin-info
│ │ ├── description.php
│ │ ├── features.php
│ │ ├── index.php
│ │ └── screenshots.php
│ │ ├── powered-by.php
│ │ ├── pricing.php
│ │ ├── secure-https-header.php
│ │ ├── sticky-admin-notice-js.php
│ │ ├── tabs-capture-js.php
│ │ └── tabs.php
└── ub-common
│ ├── .Chunks
│ └── e2c2858e.js
│ ├── Components
│ ├── client.css
│ ├── client.js
│ ├── editor.css
│ ├── editor.js
│ └── index.js
│ ├── Inc
│ └── index.js
│ └── info.json
├── package-lock.json
├── package.json
├── phpunit.xml
├── pluginCompress.js
├── public
├── class-ultimate-blocks-public.php
├── css
│ └── ultimate-blocks-public.css
├── index.php
├── js
│ └── ultimate-blocks-public.js
└── partials
│ └── ultimate-blocks-public-display.php
├── readme.txt
├── recompile.js
├── recompileOnChange.js
├── src
├── __development
│ ├── components
│ │ ├── ActivateBlockOnStartup.js
│ │ └── DevelopmentComponent.js
│ └── webpack
│ │ └── plugin
│ │ └── DevelopmentComponentIgnorePlugin.js
├── blocks.js
├── blocks
│ ├── advanced-heading
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── fonts.js
│ │ ├── formats
│ │ │ ├── highlight.js
│ │ │ └── register-formats.js
│ │ ├── icons.js
│ │ ├── settings-options.js
│ │ ├── style.css
│ │ ├── style.scss
│ │ └── transforms.js
│ ├── advanced-video
│ │ ├── block-controls.js
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── placeholder.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── button
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── components
│ │ │ ├── ButtonColorSettings.js
│ │ │ └── UpsellInspectorDummy.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── icons
│ │ │ └── icons.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── call-to-action
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icons
│ │ │ └── icon.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── click-to-tweet
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icons
│ │ │ ├── icon.js
│ │ │ └── sprite-twitter.png
│ │ ├── style.css
│ │ └── style.scss
│ ├── components
│ │ ├── BorderControl.js
│ │ ├── BorderRadiusControl.js
│ │ ├── ColorSettings.js
│ │ ├── ColorSettingsWithGradient.js
│ │ ├── FontAppearanceControl.js
│ │ ├── FontFamilyControl.js
│ │ ├── FontSizePicker.js
│ │ ├── LetterSpacingControl.js
│ │ ├── LineHeightControl.js
│ │ ├── SelectControl.js
│ │ ├── SpacingControl.js
│ │ ├── SpacingControlWithToolsPanel.js
│ │ ├── TabsPanelControl.js
│ │ ├── TextDecorationControl.js
│ │ ├── ToggleGroupControl.js
│ │ └── index.js
│ ├── content-filter
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components
│ │ │ ├── block.json
│ │ │ ├── content-filter-entry.js
│ │ │ ├── editorDisplay.js
│ │ │ └── get-styles.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── icon.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── content-toggle
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components
│ │ │ ├── editorDisplay.js
│ │ │ ├── inspector.js
│ │ │ ├── panel.js
│ │ │ └── panel
│ │ │ │ └── block.json
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── icons
│ │ │ ├── icon.js
│ │ │ └── icons.json
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── countdown
│ │ ├── CircularCountdown.js
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── blocks-styles.js
│ │ ├── components.js
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── odometer.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── counter
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── edit.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── hooks
│ │ │ └── use-counter.js
│ │ ├── icon.js
│ │ ├── inspector.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── divider
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icons
│ │ │ └── icon.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── expand
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── expand-portion
│ │ │ └── block.json
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── feature-box
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── icons
│ │ │ ├── icon.js
│ │ │ └── remove_icon.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── how-to
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── icon-inner
│ │ ├── block.js
│ │ ├── block.php
│ │ ├── components
│ │ │ ├── UbIcon.js
│ │ │ └── UbIconInspector.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── inc
│ │ │ └── iconOperations.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── icon
│ │ ├── block-controls.js
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── blocks-styles.js
│ │ ├── components
│ │ │ ├── CustomSvgInserter.js
│ │ │ ├── LinkControl.js
│ │ │ ├── MediaReplaceControl.js
│ │ │ ├── Placeholder.js
│ │ │ └── icon-library
│ │ │ │ ├── LibraryContent.js
│ │ │ │ ├── LibrarySidebar.js
│ │ │ │ └── index.js
│ │ ├── edit.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icons
│ │ │ ├── block-icon.js
│ │ │ ├── font-awesome
│ │ │ │ ├── categories.js
│ │ │ │ ├── icons.js
│ │ │ │ └── index.js
│ │ │ ├── index.js
│ │ │ └── wordpress
│ │ │ │ ├── social
│ │ │ │ ├── amazon.js
│ │ │ │ ├── bandcamp.js
│ │ │ │ ├── behance.js
│ │ │ │ ├── chain.js
│ │ │ │ ├── codepen.js
│ │ │ │ ├── deviantart.js
│ │ │ │ ├── dribbble.js
│ │ │ │ ├── dropbox.js
│ │ │ │ ├── etsy.js
│ │ │ │ ├── facebook.js
│ │ │ │ ├── feed.js
│ │ │ │ ├── fivehundredpx.js
│ │ │ │ ├── flickr.js
│ │ │ │ ├── foursquare.js
│ │ │ │ ├── github.js
│ │ │ │ ├── goodreads.js
│ │ │ │ ├── google.js
│ │ │ │ ├── index.js
│ │ │ │ ├── instagram.js
│ │ │ │ ├── lastfm.js
│ │ │ │ ├── linkedin.js
│ │ │ │ ├── mail.js
│ │ │ │ ├── mastodon.js
│ │ │ │ ├── medium.js
│ │ │ │ ├── meetup.js
│ │ │ │ ├── patreon.js
│ │ │ │ ├── pinterest.js
│ │ │ │ ├── pocket.js
│ │ │ │ ├── reddit-solid.js
│ │ │ │ ├── reddit.js
│ │ │ │ ├── skype.js
│ │ │ │ ├── snapchat.js
│ │ │ │ ├── soundcloud.js
│ │ │ │ ├── spotify.js
│ │ │ │ ├── telegram.js
│ │ │ │ ├── tiktok.js
│ │ │ │ ├── tumblr.js
│ │ │ │ ├── twitch.js
│ │ │ │ ├── twitter.js
│ │ │ │ ├── vimeo.js
│ │ │ │ ├── vk.js
│ │ │ │ ├── wordpress.js
│ │ │ │ ├── yelp.js
│ │ │ │ └── youtube.js
│ │ │ │ └── temp.js
│ │ ├── inspector.js
│ │ ├── save.js
│ │ ├── style.css
│ │ ├── style.scss
│ │ └── utils.js
│ ├── image-slider
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ ├── style.scss
│ │ └── swiper-bundle.js
│ ├── notification-box
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── icons
│ │ │ ├── icon.js
│ │ │ ├── info.js
│ │ │ ├── success.js
│ │ │ └── warning.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── number-box
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── icons
│ │ │ └── icon.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── post-grid
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── editor.css
│ │ ├── editor.js
│ │ ├── editor.scss
│ │ ├── icons.js
│ │ ├── image.js
│ │ ├── inspector.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── progress-bar
│ │ ├── Circle.js
│ │ ├── HalfCircle.js
│ │ ├── Line.js
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── blocks-styles.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-styles.js
│ │ ├── icons.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── review
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── oldVersions.js
│ │ ├── responsive.scss
│ │ ├── save.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── scrollby-polyfill.js
│ ├── social-share
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icons
│ │ │ ├── icons.js
│ │ │ └── icons.php
│ │ ├── inspector.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── star-rating
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── get-styles.js
│ │ ├── icons.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── styled-box
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── style.css
│ │ ├── style.scss
│ │ ├── styled-box-border
│ │ │ └── block.json
│ │ ├── styled-box-notification
│ │ │ └── block.json
│ │ ├── styled-box-number
│ │ │ └── block.json
│ │ └── styled-box-numbered-box-column
│ │ │ └── block.json
│ ├── styled-list
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── colorlist.js
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icon.js
│ │ ├── style-list-item
│ │ │ └── block.json
│ │ ├── style.css
│ │ └── style.scss
│ ├── tabbed-content
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components
│ │ │ ├── block.json
│ │ │ ├── editorDisplay.js
│ │ │ ├── inspector.js
│ │ │ └── tab.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-style.js
│ │ ├── icons
│ │ │ └── icon.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── table-of-contents
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── front.build.js
│ │ ├── front.js
│ │ ├── get-style.js
│ │ ├── icon.js
│ │ ├── languageTables
│ │ │ └── cyrillic.json
│ │ ├── localToLatin.js
│ │ ├── oldVersions.js
│ │ ├── removeDiacritics.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── testimonial
│ │ ├── block.js
│ │ ├── block.json
│ │ ├── block.php
│ │ ├── components.js
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── get-styles.js
│ │ ├── icons.js
│ │ ├── oldVersions.js
│ │ ├── style.css
│ │ └── style.scss
│ └── utils
│ │ └── styling-helpers.js
├── common.js
├── common.php
├── common.scss
├── defaults.php
├── editor.css
├── editor.scss
├── extensions
│ ├── components
│ │ ├── code-editor
│ │ │ └── index.js
│ │ └── index.js
│ ├── custom-css
│ │ ├── class-custom-css.php
│ │ ├── common.scss
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── index.js
│ │ ├── inspector.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── extension-manager.php
│ ├── index.js
│ ├── responsive-control
│ │ ├── class-responsive-control.php
│ │ ├── common.scss
│ │ ├── editor.css
│ │ ├── editor.scss
│ │ ├── index.js
│ │ ├── inspector.js
│ │ ├── style.css
│ │ └── style.scss
│ ├── style.css
│ ├── style.scss
│ └── utils
│ │ ├── index.js
│ │ └── replace-selector.js
├── inc
│ ├── components
│ │ ├── ProPass.js
│ │ ├── SavedStyles
│ │ │ ├── DefaultItemIndicator.js
│ │ │ ├── ListItemPill.js
│ │ │ ├── ListItemPreview.js
│ │ │ ├── SavedStyleItemCardContainer.js
│ │ │ ├── SavedStyleListButtonRow.js
│ │ │ ├── SavedStyleListItem.js
│ │ │ ├── SavedStylesAdvancedButton.js
│ │ │ ├── SavedStylesAdvancedControls.js
│ │ │ ├── SavedStylesInspector.js
│ │ │ ├── SavedStylesInspectorPanel.js
│ │ │ ├── SavedStylesListing.js
│ │ │ ├── SavedStylesListingFilter.js
│ │ │ ├── SavedStylesSaveRow.js
│ │ │ ├── SelectedSavedStyleControls.js
│ │ │ ├── StylePreviewModal.js
│ │ │ └── UbProInspectorTextInput.js
│ │ └── Upsell
│ │ │ ├── ActiveBlockIcon.js
│ │ │ ├── Controls
│ │ │ ├── UpsellButtonGroupControl.js
│ │ │ ├── UpsellColorControl.js
│ │ │ ├── UpsellControlSelector.js
│ │ │ ├── UpsellControlWrapper.js
│ │ │ ├── UpsellIconControl.js
│ │ │ ├── UpsellSelectControl.js
│ │ │ └── UpsellToggleControl.js
│ │ │ ├── ModalNavigation.js
│ │ │ ├── UpsellInspectorDummy.js
│ │ │ ├── UpsellInspectorNotice.js
│ │ │ ├── UpsellInspectorPanelBody.js
│ │ │ ├── UpsellMain.js
│ │ │ ├── UpsellModalBase.js
│ │ │ ├── UpsellModalButton.js
│ │ │ ├── UpsellModalContent.js
│ │ │ ├── UpsellModalEditor.js
│ │ │ ├── UpsellProPanel.js
│ │ │ └── VitalizeText.js
│ ├── helpers
│ │ └── modeCheck.js
│ ├── hoc
│ │ └── withUpsellControlWrapper.js
│ ├── managers
│ │ ├── ProManager.js
│ │ ├── SavedStylesManager.js
│ │ └── UpsellManager.js
│ └── registerPluginBlock.js
├── init.php
├── pre-register.js
├── priority.js
├── simple_html_dom.php
├── stores
│ ├── mainStore
│ │ ├── actions.js
│ │ ├── hoc
│ │ │ └── connectWithMainStore.js
│ │ ├── index.js
│ │ ├── reducer.js
│ │ ├── selectors.js
│ │ ├── state.js
│ │ └── types.js
│ └── savedStyles
│ │ ├── actions.js
│ │ ├── hoc
│ │ └── withBusyStatus.js
│ │ ├── index.js
│ │ ├── reducer.js
│ │ ├── selectors.js
│ │ ├── state.js
│ │ └── types.js
├── style.css
├── style.scss
└── styles
│ ├── SavedStyles
│ └── SavedStylesEditor.sass
│ ├── Upsell
│ ├── UpsellControlWrapper.scss
│ ├── UpsellEditor.scss
│ ├── UpsellInspectorNotice.scss
│ ├── UpsellModal.scss
│ └── UpsellTheme.scss
│ └── base
│ ├── __colors.scss
│ ├── __common.scss
│ └── themes
│ ├── __saved-styles-colors.sass
│ └── __saved-styles-inspector-theme.scss
├── ultimate-blocks.php
├── vendor
├── autoload.php
├── composer
│ ├── ClassLoader.php
│ ├── InstalledVersions.php
│ ├── LICENSE
│ ├── autoload_classmap.php
│ ├── autoload_files.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ ├── autoload_static.php
│ ├── installed.json
│ ├── installed.php
│ └── platform_check.php
├── graham-campbell
│ └── result-type
│ │ ├── LICENSE
│ │ ├── composer.json
│ │ └── src
│ │ ├── Error.php
│ │ ├── Result.php
│ │ └── Success.php
├── phpoption
│ └── phpoption
│ │ ├── LICENSE
│ │ ├── composer.json
│ │ └── src
│ │ └── PhpOption
│ │ ├── LazyOption.php
│ │ ├── None.php
│ │ ├── Option.php
│ │ └── Some.php
├── symfony
│ ├── polyfill-ctype
│ │ ├── Ctype.php
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bootstrap.php
│ │ ├── bootstrap80.php
│ │ └── composer.json
│ ├── polyfill-mbstring
│ │ ├── LICENSE
│ │ ├── Mbstring.php
│ │ ├── README.md
│ │ ├── Resources
│ │ │ └── unidata
│ │ │ │ ├── lowerCase.php
│ │ │ │ ├── titleCaseRegexp.php
│ │ │ │ └── upperCase.php
│ │ ├── bootstrap.php
│ │ ├── bootstrap80.php
│ │ └── composer.json
│ └── polyfill-php80
│ │ ├── LICENSE
│ │ ├── Php80.php
│ │ ├── PhpToken.php
│ │ ├── README.md
│ │ ├── Resources
│ │ └── stubs
│ │ │ ├── Attribute.php
│ │ │ ├── PhpToken.php
│ │ │ ├── Stringable.php
│ │ │ ├── UnhandledMatchError.php
│ │ │ └── ValueError.php
│ │ ├── bootstrap.php
│ │ └── composer.json
└── vlucas
│ └── phpdotenv
│ ├── LICENSE
│ ├── composer.json
│ └── src
│ ├── Dotenv.php
│ ├── Exception
│ ├── ExceptionInterface.php
│ ├── InvalidEncodingException.php
│ ├── InvalidFileException.php
│ ├── InvalidPathException.php
│ └── ValidationException.php
│ ├── Loader
│ ├── Loader.php
│ ├── LoaderInterface.php
│ └── Resolver.php
│ ├── Parser
│ ├── Entry.php
│ ├── EntryParser.php
│ ├── Lexer.php
│ ├── Lines.php
│ ├── Parser.php
│ ├── ParserInterface.php
│ └── Value.php
│ ├── Repository
│ ├── Adapter
│ │ ├── AdapterInterface.php
│ │ ├── ApacheAdapter.php
│ │ ├── ArrayAdapter.php
│ │ ├── EnvConstAdapter.php
│ │ ├── GuardedWriter.php
│ │ ├── ImmutableWriter.php
│ │ ├── MultiReader.php
│ │ ├── MultiWriter.php
│ │ ├── PutenvAdapter.php
│ │ ├── ReaderInterface.php
│ │ ├── ReplacingWriter.php
│ │ ├── ServerConstAdapter.php
│ │ └── WriterInterface.php
│ ├── AdapterRepository.php
│ ├── RepositoryBuilder.php
│ └── RepositoryInterface.php
│ ├── Store
│ ├── File
│ │ ├── Paths.php
│ │ └── Reader.php
│ ├── FileStore.php
│ ├── StoreBuilder.php
│ ├── StoreInterface.php
│ └── StringStore.php
│ ├── Util
│ ├── Regex.php
│ └── Str.php
│ └── Validator.php
├── webpack.config.js
└── zip
└── .gitinclude
/.compressignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vscode/
3 | node_modules/
4 | .node_modules/
5 | .DS_Store
6 | .idea
7 | .swp
8 | .parcel-cache
9 | .env
10 | .nyc_output/
11 | babel.config.js
12 | package.json
13 | package-lock.json
14 | pluginCompress.js
15 | README.md
16 | recompile.js
17 | recompileOnChange.js
18 | webpack.config.js
19 | composer.json
20 | composer.lock
21 | **/*.scss
22 | **/*.sass
23 | **/*.map
24 | admin/js/src/
25 | src/__development/
26 | src/**/!(front.build|swiper-bundle|scrollby-polyfill|tiktok-script).js
27 | vendor/bin/
28 | __tests__/
29 | phpunit.xml
30 | zip/
31 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # This file is for unifying the coding style for different editors and IDEs
2 | # editorconfig.org
3 |
4 | # WordPress Coding Standards
5 | # https://make.wordpress.org/core/handbook/coding-standards/
6 |
7 | root = true
8 |
9 | [*]
10 | charset = utf-8
11 | end_of_line = lf
12 | insert_final_newline = true
13 | trim_trailing_whitespace = true
14 | indent_style = tab
15 |
16 | [*.yml]
17 | indent_style = space
18 | indent_size = 2
19 |
20 | [*.md]
21 | trim_trailing_whitespace = false
22 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | **/*.min.js
2 | **/*.build.js
3 | **/node_modules/**
4 | **/vendor/**
5 | build
6 | coverage
7 | cypress
8 | node_modules
9 | vendor
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vscode/
3 | node_modules/
4 | .node_modules/
5 | .DS_Store
6 | .idea
7 | .swp
8 | .parcel-cache
9 | .env
10 | .nyc_output/
11 | bundle-dist/
12 | dist/
13 | zip/
14 |
--------------------------------------------------------------------------------
/.mocharc.json:
--------------------------------------------------------------------------------
1 | {
2 | "recursive": true,
3 | "require": [
4 | "@babel/register",
5 | "global-jsdom/register",
6 | "./__tests__/js/test-inc/hooks.js"
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/.phpcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Ultimate Blocks PHP Coding Standard
4 |
5 |
6 |
7 |
8 |
9 | *\.php$
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.stylelintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "stylelint-config-standard-scss"
3 | }
4 |
--------------------------------------------------------------------------------
/admin/css/src/base/_colors.scss:
--------------------------------------------------------------------------------
1 | $white: #FFF;
2 | $black: #000;
3 | $wp-gray: #CCC;
4 | $wp-black: #2F2F2F;
5 | $gray-100: #FBFBFB;
6 | $gray-300: #E5E5E5;
7 | $gray-400: #DFDFDF;
8 | $gray-500: #B4A7A7;
9 | $gray-600: #7B6D6D;
10 | $gray-800: #938181;
11 | $red-100: #FFF0F0;
12 | $red-500: #E11B4C;
13 | $yellow-500: #EAB308;
14 | $green-500: #22C55E;
15 | $positive: $green-500;
16 | $negative: $red-500;
17 | $gold: #FFD700;
18 | $logo-color: #F64646;
19 |
20 | // overhaul colors
21 | // gray
22 | $o-gray-50: #FFF3F6;
23 | $neutral-gray-50: #F8FAFC;
24 | $o-gray-200: #E2E8F0;
25 | $o-gray-500: #64748B;
26 |
27 | // blue
28 | $o-blue-100: #BBCAF3;
29 | $o-blue-300: #6183E4;
30 | $o-blue-500: #1D4ED8;
31 |
32 |
33 |
--------------------------------------------------------------------------------
/admin/css/src/inc/blocks-content-styles.scss:
--------------------------------------------------------------------------------
1 |
2 | .ub-blocks-content {
3 | width: 100%;
4 | display: flex;
5 | align-items: flex-start;
6 | flex-flow: column wrap;
7 | gap: 36px;
8 | }
9 |
--------------------------------------------------------------------------------
/admin/css/src/inc/controls-container.scss:
--------------------------------------------------------------------------------
1 | @import '../base/common';
2 | @import '../base/themes/admin-menu-theme';
3 |
4 | .controls-container {
5 | display: flex;
6 | justify-content: center;
7 | align-items: flex-start;
8 | flex-wrap: wrap;
9 | width: 100%;
10 | height: fit-content;
11 | gap: 28px 32px;
12 |
13 |
14 | &[data-show-info="false"] .block-control {
15 | & > div:not(.block-title) {
16 | display: none;
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/admin/css/src/inc/extensions-content-styles.scss:
--------------------------------------------------------------------------------
1 | @import "../base/themes/admin-menu-theme";
2 | @import "../base/common";
3 |
4 | .ub-extensions-content {
5 | @extend %size-full;
6 |
7 | display: flex;
8 | flex-direction: column;
9 | gap: 36px;
10 | }
11 |
--------------------------------------------------------------------------------
/admin/css/src/inc/navigation.scss:
--------------------------------------------------------------------------------
1 | @import "../base/common";
2 | @import "../base/themes/admin-menu-theme";
3 |
4 | .ub-menu-navigation {
5 | height: 100%;
6 | display: grid;
7 | grid-template-rows: 1fr;
8 | grid-template-columns: minmax(0, 1fr);
9 | grid-gap: 10px;
10 | background-color: $white;
11 |
12 | .ub-menu-navigation-header-button {
13 | @extend %default-transition;
14 | @extend %flex-center-all;
15 | @extend %pointer;
16 | @extend %size-full;
17 |
18 | padding: 0 10px;
19 | border: solid rgb(0 0 0 / 0%);
20 | border-width: 0 0 2px;
21 |
22 | @include screen-max($screen-xl) {
23 | padding: 0 10px;
24 | }
25 |
26 | &[data-active="true"] {
27 | border-color: $red-500;
28 | }
29 |
30 | &[data-active="false"] {
31 | color: $text-faded-color;
32 | }
33 |
34 | &:hover[data-active="false"] {
35 | border-color: $border-color;
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/admin/css/src/inc/screen-center-mark.scss:
--------------------------------------------------------------------------------
1 | .ub-screen-center {
2 | padding: 0 !important;
3 |
4 | .ub-screen-center-vertical {
5 | position: absolute;
6 | top: 0;
7 | width: 50%;
8 | height: 100%;
9 | border-right: 1px solid red;
10 | z-index: 10000;
11 | padding: 0 !important;
12 | }
13 |
14 | .ub-screen-center-horizontal {
15 | position: absolute;
16 | bottom: 0;
17 | width: 100%;
18 | height: 50%;
19 | border-top: 1px solid red;
20 | z-index: 10000;
21 | padding: 0 !important;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/admin/css/src/inc/welcome-content-styles.scss:
--------------------------------------------------------------------------------
1 | @import "../base/common";
2 |
3 | .ub-welcome-content {
4 | display: flex;
5 | align-items: flex-start;
6 | gap: 32px;
7 |
8 | &__main {
9 | flex-basis: 70%;
10 | display: grid;
11 | grid-template-columns: 1fr;
12 | grid-template-rows: auto;
13 | grid-auto-rows: auto;
14 | grid-gap: 24px;
15 | }
16 |
17 | &__right-sidebar {
18 | flex-basis: 30%;
19 | display: grid;
20 | grid-template-columns: 1fr;
21 | grid-template-rows: auto;
22 | grid-auto-rows: auto;
23 | grid-gap: 24px;
24 | }
25 |
26 | @include screen-max($screen-sm){
27 | &__right-sidebar {
28 | flex-flow: column nowrap !important;
29 | }
30 | }
31 |
32 | @include screen-max($screen-md2) {
33 | flex-flow: row wrap;
34 |
35 | &__main {
36 | flex-basis: 100%;
37 |
38 | }
39 |
40 | &__right-sidebar {
41 | flex-basis: 100%;
42 | display: flex;
43 | flex-flow: column nowrap !important;
44 | justify-content: center;
45 | gap: 10px;
46 |
47 | & > div {
48 | flex-basis: 40%;
49 | }
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/admin/data/Settings_Menu_Pro_Manager_Asset_Data.php:
--------------------------------------------------------------------------------
1 | 'https://ultimateblocks.com/pricing/',
25 | 'youtubeVideoId' => 'I1LEsUvxGDc',
26 | 'documentsUrl' => 'https://ultimateblocks.com/docs/',
27 | 'supportUrl' => 'https://ultimateblocks.com/community/',
28 | 'facebookUrl' => 'https://www.facebook.com/UltimateBlocks',
29 | 'twitterUrl' => 'https://twitter.com/Ultimate_Blocks',
30 | 'youtubeUrl' => 'https://www.youtube.com/@ultimateblockswp',
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/admin/data/block_demos/Block_Demos_Data.php:
--------------------------------------------------------------------------------
1 | {
15 | const wpContent = document.querySelector('#wpcontent');
16 | const wpBody = document.querySelector('#wpbody');
17 | const adminBar = document.querySelector('#wpadminbar');
18 |
19 | if (wpBody) {
20 | const adminBarAdjustment = adminBar ? adminBar.offsetHeight : 0;
21 |
22 | wpBody.style.height = `calc( 100vh - ${adminBarAdjustment}px)`;
23 | wpContent.style.padding = 0;
24 | }
25 | }, []);
26 |
27 | return
{children}
;
28 | }
29 |
30 | /**
31 | * @module AdminMenuWrapper
32 | */
33 | export default AdminMenuWrapper;
34 |
--------------------------------------------------------------------------------
/admin/js/src/components/Animation.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Component for animating its children.
5 | *
6 | * This component relies on @keyframes animations.
7 | *
8 | * @param {Object} props component properties
9 | * @param {JSX.Element | Array | string} props.children component children
10 | * @param {string} props.animationKeyframeName keyframe name
11 | * @param {number} [props.duration=1000] duration in milliseconds
12 | * @param {number} [props.delay=0] delay in milliseconds
13 | */
14 | function Animation({
15 | children,
16 | animationKeyframeName,
17 | duration = 1000,
18 | delay = 0,
19 | }) {
20 | return (
21 |
27 | {children}
28 |
29 | );
30 | }
31 |
32 | /**
33 | * @module Animation
34 | */
35 | export default Animation;
36 |
--------------------------------------------------------------------------------
/admin/js/src/components/AnimationAppear.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Animation from '$Components/Animation';
3 |
4 | /**
5 | * Animation appear component.
6 | *
7 | * This is a wrapper for Animation component. You can use its props for more customization.
8 | * `animationKeyframeName` is set to `appear` by default and will override any other value provided.
9 | *
10 | * @param {Object} props component properties
11 | */
12 | function AnimationAppear(props) {
13 | const { children, ...rest } = props;
14 | rest.animationKeyframeName = 'appear';
15 |
16 | return {children} ;
17 | }
18 |
19 | /**
20 | * @module AnimationAppear
21 | */
22 | export default AnimationAppear;
23 |
--------------------------------------------------------------------------------
/admin/js/src/components/BlockCardProInfoControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3 |
4 | /**
5 | * Info control button for pro block cards.
6 | *
7 | * @param {Object} props component properties
8 | * @param {Function} props.handleClick click callback
9 | */
10 | function BlockCardProInfoControl({ handleClick }) {
11 | return (
12 | // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions,jsx-a11y/interactive-supports-focus
13 |
18 |
19 |
20 | );
21 | }
22 |
23 | /**
24 | * @module BlockCardProInfoControl
25 | */
26 | export default BlockCardProInfoControl;
27 |
--------------------------------------------------------------------------------
/admin/js/src/components/BoxContent/BoxContentInc.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Box content inc component.
5 | *
6 | * @param {Object} props component properties
7 | * @param {Function | string} props.children component children
8 | */
9 | function BoxContentInc({ children }) {
10 | return {children}
;
11 | }
12 |
13 | /**
14 | * @module BoxContentInc
15 | */
16 | export default BoxContentInc;
17 |
--------------------------------------------------------------------------------
/admin/js/src/components/BoxContent/BoxContentTitle.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Box content title component.
5 | *
6 | * @param {Object} props component properties
7 | * @param {Function | string} props.children component children
8 | * @class
9 | */
10 | function BoxContentTitle({ children }) {
11 | return {children}
;
12 | }
13 |
14 | /**
15 | * @module BoxContentTitle
16 | */
17 | export default BoxContentTitle;
18 |
--------------------------------------------------------------------------------
/admin/js/src/components/ButtonLinkGroup.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Button link group component.
5 | *
6 | * @param {Object} props component properties
7 | * @param {Function} props.children component children
8 | * @class
9 | */
10 | function ButtonLinkGroup({ children }) {
11 | return {children}
;
12 | }
13 |
14 | /**
15 | * @module ButtonLinkGroup
16 | */
17 | export default ButtonLinkGroup;
18 |
--------------------------------------------------------------------------------
/admin/js/src/components/Content.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Router from '$Components/Router';
3 | import RouterProvider from '$Components/RouterProvider';
4 |
5 | /**
6 | * Contents of menu page.
7 | */
8 | function Content() {
9 | return (
10 |
11 |
12 |
13 | );
14 | }
15 |
16 | /**
17 | * @module Content
18 | */
19 | export default Content;
20 |
--------------------------------------------------------------------------------
/admin/js/src/components/ContentPhrase.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Content phrase component.
5 | *
6 | * @param {Object} props component properties
7 | * @param {JSX.Element | Array | string} props.children component children
8 | */
9 | function ContentPhrase({ children }) {
10 | return {children}
;
11 | }
12 |
13 | /**
14 | * @module ContentPhrase
15 | */
16 | export default ContentPhrase;
17 |
--------------------------------------------------------------------------------
/admin/js/src/components/ExtensionCardProInfoControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3 |
4 | /**
5 | * Info control button for pro extension cards.
6 | *
7 | * @param {Object} props component properties
8 | * @param {Function} props.handleClick click callback
9 | */
10 | function ExtensionCardProInfoControl({ handleClick }) {
11 | return (
12 | // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions,jsx-a11y/interactive-supports-focus
13 |
18 |
19 |
20 | );
21 | }
22 |
23 | /**
24 | * @module ExtensionCardProInfoControl
25 | */
26 | export default ExtensionCardProInfoControl;
27 |
--------------------------------------------------------------------------------
/admin/js/src/components/LineWrapper.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Line wrapper component.
5 | *
6 | * @param {Object} props component properties
7 | * @param {JSX.Element | Array | string} props.children component children
8 | */
9 | function LineWrapper({ children }) {
10 | return {children}
;
11 | }
12 |
13 | /**
14 | * @module LineWrapper
15 | */
16 | export default LineWrapper;
17 |
--------------------------------------------------------------------------------
/admin/js/src/components/MainContentPhrase.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React from 'react';
3 | import TextIndicate from '$Components/TextIndicate';
4 | import ContentPhrase from '$Components/ContentPhrase';
5 | import LineWrapper from '$Components/LineWrapper';
6 |
7 | /**
8 | * Content phrase component.
9 | *
10 | * @function Object() { [native code] }
11 | */
12 | function MainContentPhrase() {
13 | return (
14 |
15 |
16 | Manage Your{' '}
17 | Blocks As
18 |
19 |
20 | Your Preferences
21 |
22 |
23 | );
24 | }
25 |
26 | /**
27 | * @module MainContentPhrase
28 | */
29 | export default MainContentPhrase;
30 |
--------------------------------------------------------------------------------
/admin/js/src/components/NavigationHeaderButton.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Navigation header button component.
5 | *
6 | * @param {Object} props component properties
7 | * @param {string} props.title button title
8 | * @param {string} props.targetPath target path
9 | * @param {Function} props.onClickHandler click handler, will call with targetPath as first argument
10 | * @param {boolean} props.isActive button active status
11 | * @class
12 | */
13 | function NavigationHeaderButton({
14 | title,
15 | targetPath,
16 | onClickHandler,
17 | isActive = false,
18 | }) {
19 | const onClickHandlerDefault = () => onClickHandler(targetPath);
20 |
21 | return (
22 |
31 | {title}
32 |
33 | );
34 | }
35 |
36 | /**
37 | * @module NavigationHeaderButton
38 | */
39 | export default NavigationHeaderButton;
40 |
--------------------------------------------------------------------------------
/admin/js/src/components/Portal.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React from 'react';
3 | import { createPortal } from 'react-dom';
4 |
5 | /**
6 | * Portal component.
7 | *
8 | * @param {Object} props component properties
9 | * @param {React.ElementType} props.children component children
10 | * @param {Element} props.target portal parent
11 | * @class
12 | */
13 | function Portal({ children, target }) {
14 | return createPortal(children, target);
15 | }
16 |
17 | /**
18 | * @module Portal
19 | */
20 | export default Portal;
21 |
--------------------------------------------------------------------------------
/admin/js/src/components/ProBlockCardTitle.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Pro block card control title.
5 | *
6 | * @param {Object} props component properties
7 | * @param {boolean} props.isPro block pro status
8 | */
9 | function ProBlockCardTitle({ isPro }) {
10 | return isPro && PRO ;
11 | }
12 |
13 | /**
14 | * @module CouponCardProTitle
15 | */
16 | export default ProBlockCardTitle;
17 |
--------------------------------------------------------------------------------
/admin/js/src/components/ProExtensionCardTitle.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Pro block card control title.
5 | *
6 | * @param {Object} props component properties
7 | * @param {boolean} props.isPro block pro status
8 | */
9 | function ProExtensionCardTitle({ isPro }) {
10 | return isPro && PRO ;
11 | }
12 |
13 | /**
14 | * @module ProTitle
15 | */
16 | export default ProExtensionCardTitle;
17 |
--------------------------------------------------------------------------------
/admin/js/src/components/RightContainerItem.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React from 'react';
3 |
4 | /**
5 | * Menu right container item.
6 | *
7 | * @param {Object} props component properties
8 | * @param {React.ElementType} props.children component children
9 | * @param {Array} props.classNames component class names
10 | * @class
11 | */
12 | function RightContainerItem({ children, classNames = [] }) {
13 | return (
14 |
15 | {children}
16 |
17 | );
18 | }
19 |
20 | /**
21 | * @module RightContainerItem
22 | */
23 | export default RightContainerItem;
24 |
--------------------------------------------------------------------------------
/admin/js/src/components/ScreenCenterMarks.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Component to show screen center marks for layout testing.
5 | *
6 | * @class
7 | */
8 | function ScreenCenterMarks() {
9 | return (
10 |
14 | );
15 | }
16 |
17 | /**
18 | * @module ScreenCenterMarks
19 | */
20 | export default ScreenCenterMarks;
21 |
--------------------------------------------------------------------------------
/admin/js/src/components/TextIndicate.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React from 'react';
3 |
4 | /**
5 | * Component for indicating given text.
6 | *
7 | * @param {Object} props component properties
8 | * @param {React.ElementType} props.children children
9 | * @class
10 | */
11 | function TextIndicate({ children }) {
12 | return {children} ;
13 | }
14 |
15 | /**
16 | * @module TextIndicate
17 | */
18 | export default TextIndicate;
19 |
--------------------------------------------------------------------------------
/admin/js/src/containers/AdminMenuContainer.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React from 'react';
3 | import MenuHeader from '$Components/MenuHeader';
4 | import Content from '$Components/Content';
5 | import UpsellModalSettingsMenu from '$Components/UpsellModalSettingsMenu';
6 |
7 | /**
8 | * Container for admin menu.
9 | *
10 | * @return {JSX.Element} container component
11 | * @function Object() { [native code] }
12 | */
13 | function AdminMenuContainer() {
14 | return (
15 |
16 |
17 |
18 |
19 |
20 | );
21 | }
22 |
23 | /**
24 | * @module AdminMenuContainer
25 | */
26 | export default AdminMenuContainer;
27 |
--------------------------------------------------------------------------------
/admin/js/src/hoc/withIcon.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React, { createElement } from 'react';
3 |
4 | /**
5 | * Hoc for creating and adding icon element by using Gutenberg block icon attribute object.
6 | *
7 | * @param {React.ElementType} BaseComponent target component
8 | * @return {Function} function to use as HOC
9 | */
10 | const withIcon = (BaseComponent) => (props) => {
11 | let iconElement = 'x';
12 | if (!props.iconObject) {
13 | throw new Error(
14 | 'invalid type of icon object is supplied to withIcon HOC'
15 | );
16 | } else if (typeof props.iconObject === 'string') {
17 | iconElement = (
18 |
19 | );
20 | } else if (typeof props.iconObject === 'object') {
21 | const { iconObject } = props;
22 | const { type, props: iconProps } = iconObject;
23 |
24 | iconElement = createElement(type, iconProps);
25 | }
26 |
27 | return ;
28 | };
29 |
30 | /**
31 | * @module withIcon
32 | */
33 | export default withIcon;
34 |
--------------------------------------------------------------------------------
/admin/js/src/inc/err/ButtonLinkNoUrlError.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ButtonLinkNoUrlError.
3 | */
4 | function ButtonLinkNoUrlError() {
5 | this.name = 'ButtonLinkNoUrlError';
6 | this.message = 'No URL is provided for ButtonLink component.';
7 | }
8 |
9 | ButtonLinkNoUrlError.prototype = Object.create(Error.prototype);
10 |
11 | /**
12 | * @module ContentNotFound
13 | */
14 | export default ButtonLinkNoUrlError;
15 |
--------------------------------------------------------------------------------
/admin/js/src/inc/err/ContentNotFoundError.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ContentNotFoundError error.
3 | *
4 | * @param {string} contentKey target not found content key
5 | */
6 | function ContentNotFoundError(contentKey) {
7 | this.name = 'ContentNotFoundError';
8 | this.message = `Content not found for key: [${contentKey}]`;
9 | }
10 |
11 | ContentNotFoundError.prototype = Object.create(Error.prototype);
12 |
13 | /**
14 | * @module ContentNotFound
15 | */
16 | export default ContentNotFoundError;
17 |
--------------------------------------------------------------------------------
/admin/js/src/inc/err/NoRouterComponentFoundError.js:
--------------------------------------------------------------------------------
1 | function NoRouterComponentFoundError() {
2 | this.name = 'NoRouterComponentFoundError';
3 | this.message =
4 | 'No router component found within RouterProvider. Please make sure you have passed Router component as a child of RouterProvider.';
5 | }
6 |
7 | NoRouterComponentFoundError.prototype = Error.prototype;
8 |
9 | export default NoRouterComponentFoundError;
10 |
--------------------------------------------------------------------------------
/admin/js/src/inc/routes.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Route, { generateRouteArray } from '$AdminInc/Route';
3 | import WelcomeContent from '$Containers/WelcomeContent';
4 | import BlocksContent from '$Containers/BlocksContent';
5 | import ExtensionsContent from '$Containers/ExtensionsContent';
6 |
7 | /**
8 | * Routes for admin menu.
9 | *
10 | * Last route is reserved for 404 page.
11 | *
12 | * @type {Array} routes array
13 | */
14 | const routes = [
15 | {
16 | path: 'welcome',
17 | title: 'Welcome',
18 | element: ,
19 | },
20 | {
21 | path: 'blocks',
22 | title: 'Blocks',
23 | element: ,
24 | },
25 | {
26 | path: 'extensions',
27 | title: 'Extensions',
28 | element: ,
29 | },
30 | {
31 | path: '404',
32 | title: '404',
33 | element: 404
,
34 | },
35 | ];
36 |
37 | /**
38 | * Generated route objects array.
39 | *
40 | * @type {Array}
41 | */
42 | export const routeObjects = generateRouteArray(routes);
43 |
44 | /**
45 | * @module routes
46 | */
47 | export default routes;
48 |
--------------------------------------------------------------------------------
/admin/js/src/stores/settings-menu/initialState.js:
--------------------------------------------------------------------------------
1 | import { FILTER_TYPES } from '$Components/BlockStatusFilterControl';
2 |
3 | /**
4 | * Initial store state.
5 | *
6 | * @type {Object}
7 | */
8 | const initialState = {
9 | app: {
10 | blockFilter: FILTER_TYPES._DEFAULT,
11 | showBlockInfo: false,
12 | upsellPopup: {
13 | show: false,
14 | targetBlock: null,
15 | },
16 | content: {},
17 | router: {
18 | current: 'welcome',
19 | },
20 | },
21 | versionControl: {
22 | currentVersion: '1.0.0',
23 | versions: {},
24 | ajax: {},
25 | },
26 | pluginStatus: {
27 | isPro: false,
28 | },
29 | };
30 |
31 | /**
32 | * @module initialState
33 | */
34 | export default initialState;
35 |
--------------------------------------------------------------------------------
/admin/js/src/stores/settings-menu/slices/pluginStatus.js:
--------------------------------------------------------------------------------
1 | import initialState from '$Stores/settings-menu/initialState';
2 | import { createSlice } from '@reduxjs/toolkit';
3 |
4 | /**
5 | * Plugin status slice.
6 | *
7 | * @type {Object}
8 | */
9 | const pluginStatusSliceOptions = {
10 | name: 'pluginStatus',
11 | initialState: initialState.pluginStatus,
12 | reducers: {},
13 | };
14 |
15 | const pluginStatusSlice = createSlice(pluginStatusSliceOptions);
16 |
17 | /**
18 | * Get plugin pro status.
19 | *
20 | * @param {Object} state store state
21 | * @return {boolean} plugin pro status
22 | */
23 | export const isPluginPro = (state) => {
24 | return state.pluginStatus.isPro;
25 | };
26 |
27 | /**
28 | * @module pluginStatusSlice
29 | */
30 | export default pluginStatusSlice.reducer;
31 |
--------------------------------------------------------------------------------
/admin/js/src/ub-admin-settings.js:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line no-unused-vars
2 | import React from 'react';
3 | import { Provider } from 'react-redux';
4 | import { createRoot } from 'react-dom/client';
5 | import AdminMenuContainer from '$Containers/AdminMenuContainer';
6 | import '$Styles/ub-admin-settings.scss';
7 | import AdminMenuWrapper from '$Components/AdminMenuWrapper';
8 | import settingsMenuStore from './stores/settings-menu/settingsMenuStore';
9 |
10 | const mountPoint = document.querySelector('#ub-admin-menu');
11 |
12 | if (mountPoint) {
13 | const root = createRoot(mountPoint);
14 |
15 | root.render(
16 |
17 |
18 |
19 |
20 |
21 | );
22 | } else {
23 | throw new Error('no mount point found for settings menu');
24 | }
25 |
--------------------------------------------------------------------------------
/admin/js/ultimate-blocks-help.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/admin/js/ultimate-blocks-help.js
--------------------------------------------------------------------------------
/admin/partials/ultimate-blocks-admin-display.php:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/admin/templates/menus/main-menu.php:
--------------------------------------------------------------------------------
1 |
15 |
16 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function ( api ) {
2 | api.cache( true );
3 | return {
4 | presets: [ '@babel/preset-env', '@babel/preset-react' ],
5 | plugins: [
6 | '@babel/plugin-proposal-class-properties',
7 | [
8 | 'babel-plugin-module-resolver',
9 | {
10 | alias: {
11 | $Containers: './admin/js/src/containers',
12 | $Components: './admin/js/src/components',
13 | $AdminInc: './admin/js/src/inc',
14 | $Data: './admin/js/src/data',
15 | $HOC: './admin/js/src/hoc',
16 | $Stores: './admin/js/src/stores',
17 | $Styles: './admin/css/src/',
18 | $Library: './library',
19 | $EditorComponents: './src/inc/components',
20 | },
21 | },
22 | ],
23 | ],
24 | };
25 | };
26 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ultimate-blocks/ultimate-blocks",
3 | "description": "Ultimate blocks",
4 | "type": "project",
5 | "license": "GPL3+",
6 | "scripts": {
7 | "test": "phpunit",
8 | "lint": "@phpcs-check",
9 | "phpcs-check": "phpcs -p --standard=.phpcs.xml --extensions=php --ignore=vendor/*,node_modules/*,__tests__/*,dist/*,bundle-dist/*,zip/*,library/*,.parcel-cache/*,.idea/*,languages/*,src/common.php ."
10 | },
11 | "require": {
12 | "vlucas/phpdotenv": "^5.5",
13 | "ext-dom": "*",
14 | "ext-libxml": "*",
15 | "ext-json": "*"
16 | },
17 | "require-dev": {
18 | "phpunit/phpunit": "^10.3",
19 | "brain/monkey": "^2.6",
20 | "wp-coding-standards/wpcs": "^3.0",
21 | "phpcompatibility/phpcompatibility-wp": "*"
22 | },
23 | "autoload": {
24 | "psr-4": {
25 | "Ultimate_Blocks\\": [
26 | "./",
27 | "./__tests__/php/unit"
28 | ]
29 | }
30 | },
31 | "config": {
32 | "allow-plugins": {
33 | "dealerdirect/phpcodesniffer-composer-installer": true
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/dist/.gitinclude:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/dist/.gitinclude
--------------------------------------------------------------------------------
/dist/deactivator.build.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 |
3 | if (window.ultimate_blocks) {
4 | window.ultimate_blocks.forEach((block) => {
5 | if (!block.active) {
6 | wp.blocks.unregisterBlockType(block.name);
7 | }
8 | });
9 | }
10 |
--------------------------------------------------------------------------------
/includes/Env_Manager.php:
--------------------------------------------------------------------------------
1 | safeLoad();
24 | }
25 | }
26 |
27 | /**
28 | * Get value from .env file.
29 | *
30 | * @param string $key key to get value for
31 | *
32 | * @return string|null value for given key, null if not set
33 | */
34 | public static function get( $key ) {
35 | return isset( $_ENV[ $key ] ) ? $_ENV[ $key ] : null;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/includes/common/interfaces/I_Plugin_Data.php:
--------------------------------------------------------------------------------
1 | [
20 | __( 'Saved Styles', 'ultimate-blocks' ),
21 | __( 'Upgrade your editor with the new style saving and updating feature. Save time by reusing styles assigned to blocks and automatically applying default styles to related blocks.',
22 | 'ultimate-blocks' ),
23 | 'common/savedStylesMain.png'
24 | ]
25 | ];
26 |
27 | return array_merge( $base_data, $saved_styles_upsell_data );
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/includes/pro_manager/extensions/Social_Share_Extension.php:
--------------------------------------------------------------------------------
1 |
19 | * [feature_name, feature_description, feature_screenshot(can be omitted for auto search)]
20 | * ],
21 | * ...
22 | * ]
23 | *
24 | * Beside feature_id, remaining data should match arguments of `generate_upsell_data` method.
25 | *
26 | * @return array data
27 | */
28 | public function add_upsell_data() {
29 | return Saved_Styles_Common::inject_upsell_data( [] );
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/includes/svg_sanitizer/DomDocumentLoadHtmlException.php:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/library/freemius/templates/ajax-loader.php:
--------------------------------------------------------------------------------
1 |
6 |
7 |
--------------------------------------------------------------------------------
/library/freemius/templates/connect/index.php:
--------------------------------------------------------------------------------
1 | get_slug();
18 |
19 | echo fs_text_inline( 'Sorry for the inconvenience and we are here to help if you give us a chance.', 'contact-support-before-deactivation', $slug )
20 | . sprintf(" %s ",
21 | $fs->contact_url( 'technical_support' ),
22 | fs_text_inline( 'Contact Support', 'contact-support', $slug )
23 | );
24 |
--------------------------------------------------------------------------------
/library/freemius/templates/forms/deactivation/index.php:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/library/freemius/templates/plugin-info/index.php:
--------------------------------------------------------------------------------
1 |
22 |
23 | $url ) : ?>
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/library/ub-common/Components/client.css:
--------------------------------------------------------------------------------
1 | .ultimate-blocks-icon-component{display:flex;justify-content:center;align-items:center}.ultimate-blocks-icon-component .ultimate-blocks-icon-component-svg-base{width:100%;height:100%}@keyframes linearGradientMove{to{background-position:6px 0,-6px 100%,0 -6px,100% 6px}}.ub-preview-provider{display:none}
2 |
--------------------------------------------------------------------------------
/library/ub-common/Components/client.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
3 |
--------------------------------------------------------------------------------
/library/ub-common/Components/editor.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlcyI6W10sInNvdXJjZXNDb250ZW50IjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
3 |
--------------------------------------------------------------------------------
/library/ub-common/info.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.1.3"
3 | }
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | __tests__/php/unit
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/public/css/ultimate-blocks-public.css:
--------------------------------------------------------------------------------
1 | /**
2 | * All of the CSS for your public-facing functionality should be
3 | * included in this file.
4 | */
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/__development/components/DevelopmentComponent.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import { modeCheckDev } from '$Inc/helpers/modeCheck';
3 |
4 | /**
5 | * DEVELOPMENT
6 | *
7 | * Base development component.
8 | *
9 | * @param {Object} props component properties
10 | * @param {Function | Array | JSX.Element} props.children component children
11 | */
12 | function DevelopmentComponent({ children }) {
13 | /**
14 | * useEffect hook
15 | */
16 | useEffect(() => {
17 | // eslint-disable-next-line no-console
18 | console.warn(
19 | `A development component is found, if this is a production version, remove it. %c\n\nComponent Name: [${children.type.name}]`,
20 | 'font-weight: bold'
21 | );
22 | }, []);
23 |
24 | return React.Children.map(children, (child) => {
25 | if (React.isValidElement(child)) {
26 | return React.cloneElement(child, {
27 | ...child.props,
28 | isDevelopment: modeCheckDev(),
29 | });
30 | }
31 | return child;
32 | });
33 | }
34 |
35 | /**
36 | * @module DevelopmentComponent
37 | */
38 | export default DevelopmentComponent;
39 |
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/block.js:
--------------------------------------------------------------------------------
1 | import icon from "./icons";
2 | import edit from "./components";
3 | import transforms from "./transforms";
4 | import metadata from "./block.json";
5 | const { registerBlockType } = wp.blocks;
6 |
7 | registerBlockType(metadata.name, {
8 | ...metadata,
9 | icon,
10 | transforms,
11 | attributes: metadata.attributes,
12 | example: {
13 | attributes: {
14 | level: "h1",
15 | content: "Ultimate Blocks Advanced Heading",
16 | alignment: "center",
17 | textColor: "red",
18 | fontFamily: "inherit",
19 | },
20 | },
21 | edit,
22 | save: () => null,
23 | });
24 |
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/editor.css:
--------------------------------------------------------------------------------
1 | .ub_advanced_heading_toolbar_level_selector{align-self:center}
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/editor.scss:
--------------------------------------------------------------------------------
1 | .ub_advanced_heading_toolbar_level_selector {
2 | align-self: center;
3 | }
4 |
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/formats/register-formats.js:
--------------------------------------------------------------------------------
1 | import highlight from "./highlight";
2 |
3 | const { registerFormatType } = wp.richText;
4 |
5 | /* register the formats */
6 | function registerFormats() {
7 | [highlight].forEach(({ name, ...settings }) =>
8 | registerFormatType(name, settings)
9 | );
10 | }
11 |
12 | registerFormats();
13 |
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/settings-options.js:
--------------------------------------------------------------------------------
1 | import fontsList from "./fonts";
2 | const { __ } = wp.i18n;
3 |
4 | export const textTransformOptions = [
5 | {
6 | value: "none",
7 | label: __("None", "ultimate-blocks"),
8 | },
9 | {
10 | value: "uppercase",
11 | label: __("Uppercase", "ultimate-blocks"),
12 | },
13 | {
14 | value: "lowercase",
15 | label: __("Lowercase", "ultimate-blocks"),
16 | },
17 | {
18 | value: "capitalize",
19 | label: __("Capitalize", "ultimate-blocks"),
20 | },
21 | ];
22 |
23 | export const fontWeightOptions = [
24 | "Normal",
25 | "Bold",
26 | "100",
27 | "200",
28 | "300",
29 | "400",
30 | "500",
31 | "600",
32 | "700",
33 | "800",
34 | "900",
35 | ].map((o) => ({ value: o, label: __(o, "ultimate-blocks") }));
36 |
37 | export const fontFamilyOptions = fontsList.map((fontFamilyOption) => ({
38 | value: fontFamilyOption,
39 | label: __(fontFamilyOption, "ultimate-blocks"),
40 | }));
41 |
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/style.css:
--------------------------------------------------------------------------------
1 | .nope{color:rgba(0,0,0,0)}
--------------------------------------------------------------------------------
/src/blocks/advanced-heading/style.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Styles
3 | *
4 | * CSS for both Frontend+Backend.
5 | */
6 |
7 |
8 | .nope {
9 | color: transparent;
10 | }
11 |
--------------------------------------------------------------------------------
/src/blocks/advanced-video/block-controls.js:
--------------------------------------------------------------------------------
1 | import { MediaReplaceFlow, BlockControls } from "@wordpress/block-editor";
2 |
3 | function AdvancedVideoBlockControls(props) {
4 | const { value, url, onSelectVideo, onSelectURL, onUploadError } = props;
5 | return (
6 |
7 |
16 |
17 | );
18 | }
19 | export default AdvancedVideoBlockControls;
20 |
--------------------------------------------------------------------------------
/src/blocks/advanced-video/block.js:
--------------------------------------------------------------------------------
1 | const { registerBlockType } = wp.blocks;
2 | const { createBlock } = wp.blocks;
3 |
4 | import metadata from "./block.json";
5 |
6 | import icon from "./icon";
7 | import { AdvancedVideoBlock } from "./components";
8 |
9 | registerBlockType(metadata.name, {
10 | ...metadata,
11 | icon,
12 | example: {
13 | attributes: {
14 | videoEmbedCode:
15 | 'VIDEO ',
16 | },
17 | },
18 | edit: AdvancedVideoBlock,
19 | transforms: {
20 | from: [
21 | {
22 | type: "block",
23 | blocks: ["core/embed"],
24 | transform: (attributes) =>
25 | createBlock("ub/advanced-video", {
26 | url: attributes.url,
27 | autofit: true,
28 | videoSource: attributes.providerNameSlug,
29 | isTransformed: true,
30 | }),
31 | },
32 | ],
33 | },
34 | save: () => null,
35 | });
36 |
--------------------------------------------------------------------------------
/src/blocks/advanced-video/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: !isEmpty(marginObj?.top) ? marginObj?.top : "",
15 | marginRight: !isEmpty(marginObj?.right) ? marginObj?.right : " ",
16 | marginBottom: !isEmpty(marginObj?.bottom) ? marginObj?.bottom : "",
17 | marginLeft: !isEmpty(marginObj?.left) ? marginObj?.left : "",
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/advanced-video/placeholder.js:
--------------------------------------------------------------------------------
1 | import { __ } from "@wordpress/i18n";
2 | import { Placeholder } from "@wordpress/components";
3 | import { MediaPlaceholder } from "@wordpress/block-editor";
4 | import icon from "./icon";
5 |
6 | const placeholder = (content) => {
7 | return (
8 |
17 | {content}
18 |
19 | );
20 | };
21 | function AdvancedVideoPlaceholder(props) {
22 | return (
23 |
33 | );
34 | }
35 | export default AdvancedVideoPlaceholder;
36 |
--------------------------------------------------------------------------------
/src/blocks/button/components/UpsellInspectorDummy.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { __ } from '@wordpress/i18n';
3 | import UpsellProPanel from '$Inc/components/Upsell/UpsellProPanel';
4 | import UpsellInspectorPanelBody from '$Inc/components/Upsell/UpsellInspectorPanelBody';
5 | import UpsellSelectControl from '$Inc/components/Upsell/Controls/UpsellSelectControl';
6 |
7 | /**
8 | * Upsell dummy inspector controls for button block.
9 | *
10 | * @deprecated
11 | *
12 | * @function Object() { [native code] }
13 | */
14 | function UpsellInspectorDummy() {
15 | return (
16 |
17 |
18 |
25 |
26 |
27 | );
28 | }
29 |
30 | /**
31 | * @module UpsellInspectorDummy
32 | */
33 | export default UpsellInspectorDummy;
34 |
--------------------------------------------------------------------------------
/src/blocks/button/icons/icons.js:
--------------------------------------------------------------------------------
1 | const icon = (
2 |
9 |
10 |
16 |
17 | );
18 |
19 | export default icon;
20 |
--------------------------------------------------------------------------------
/src/blocks/call-to-action/editor.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Editor Styles
3 | *
4 | * CSS for just Backend enqueued after style.scss
5 | * which makes it higher in priority.
6 | */
7 | @import '../../common';
8 |
9 | .wp-block-ub-call-to-action {
10 | margin: 0 auto;
11 | max-width: 100%;
12 | }
13 |
14 | .ub_call_to_action_content {
15 | padding: 0 0 40px 0;
16 | }
17 |
18 | .ub_call_to_action_url_input {
19 | display: flex;
20 | align-items: center;
21 | margin-top: -20px;
22 | }
23 |
24 | .ub_cta_url_input_box {
25 | margin-left: auto;
26 | margin-right: auto;
27 | position: relative;
28 | box-sizing: border-box;
29 | }
30 |
31 | .ub_cta_button {
32 | text-align: center;
33 | }
34 |
--------------------------------------------------------------------------------
/src/blocks/call-to-action/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin, ctaBackgroundColor, ctaBorderColor, ctaBorderSize } =
6 | attributes;
7 | const paddingObj = getSpacingCss(padding);
8 | const marginObj = getSpacingCss(margin);
9 |
10 | let styles = {
11 | paddingTop: paddingObj?.top,
12 | paddingRight: paddingObj?.right,
13 | paddingBottom: paddingObj?.bottom,
14 | paddingLeft: paddingObj?.left,
15 | marginTop: marginObj?.top,
16 | marginRight: marginObj?.right,
17 | marginBottom: marginObj?.bottom,
18 | marginLeft: marginObj?.left,
19 | backgroundColor: ctaBackgroundColor,
20 | borderWidth: ctaBorderSize + "px",
21 | borderColor: ctaBorderColor,
22 | };
23 |
24 | return omitBy(
25 | styles,
26 | (value) =>
27 | value === false ||
28 | isEmpty(value) ||
29 | isUndefined(value) ||
30 | trim(value) === "" ||
31 | trim(value) === "undefined undefined undefined"
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/src/blocks/click-to-tweet/editor.css:
--------------------------------------------------------------------------------
1 | .ub_tweet{display:block;margin:0;width:100%;border:none;outline:none;box-shadow:none;resize:none;background:rgba(0,0,0,0) !important;overflow:hidden;line-height:1.4;padding:10px;transition:padding .2s linear}.ub_tweet:focus{box-shadow:none}.ub_click_tweet i{top:4px !important}
--------------------------------------------------------------------------------
/src/blocks/click-to-tweet/editor.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Editor Styles
3 | *
4 | * CSS for just Backend enqueued after style.scss
5 | * which makes it higher in priority.
6 | */
7 |
8 | .ub_tweet {
9 | display: block;
10 | margin: 0;
11 | width: 100%;
12 | border: none;
13 | outline: none;
14 | box-shadow: none;
15 | resize: none;
16 | background: transparent !important;
17 | overflow: hidden;
18 | line-height: 1.4;
19 | padding: 10px;
20 | transition: padding 0.2s linear;
21 | &:focus {
22 | box-shadow: none;
23 | }
24 | }
25 |
26 | .ub_click_tweet i {
27 | top: 4px !important;
28 | }
29 |
--------------------------------------------------------------------------------
/src/blocks/click-to-tweet/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin, borderColor } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | borderColor: borderColor,
11 | paddingTop: paddingObj?.top,
12 | paddingRight: paddingObj?.right,
13 | paddingBottom: paddingObj?.bottom,
14 | paddingLeft: paddingObj?.left,
15 | marginTop: !isEmpty(marginObj?.top) ? marginObj?.top : "",
16 | marginRight: !isEmpty(marginObj?.right) ? marginObj?.right : " ",
17 | marginBottom: !isEmpty(marginObj?.bottom) ? marginObj?.bottom : "",
18 | marginLeft: !isEmpty(marginObj?.left) ? marginObj?.left : "",
19 | };
20 |
21 | return omitBy(
22 | styles,
23 | (value) =>
24 | value === false ||
25 | isEmpty(value) ||
26 | isUndefined(value) ||
27 | trim(value) === "" ||
28 | trim(value) === "undefined undefined undefined"
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/src/blocks/click-to-tweet/icons/sprite-twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/blocks/click-to-tweet/icons/sprite-twitter.png
--------------------------------------------------------------------------------
/src/blocks/click-to-tweet/style.css:
--------------------------------------------------------------------------------
1 | .wp-block-ub-block-click-to-tweet{margin:0 auto;max-width:100%}.ub_click_to_tweet{width:95%;border:1px solid;border-radius:4px;padding:10px;margin:25px 0px}.ub_tweet{padding:10px;margin-left:10px;font-family:"Segoe UI",Arial,sans-serif}.ub_click_tweet{text-align:right;padding:10px;margin-right:10px}.ub_click_tweet>span{display:inline-block}.ub_click_tweet i{display:inline-block;width:16px;height:14px;background:url("../src/blocks/click-to-tweet/icons/sprite-twitter.png") no-repeat;background-position-x:0%;background-position-y:0%;margin-right:3px;position:relative;top:0;background-position:0 -151px;width:25px;height:20px}@media(max-width: 479.98px){.ub_click_tweet{width:100%;float:none;padding:0;margin:10px 0 !important}.ub_tweet{padding:0;margin-left:0;line-height:1.5}}
--------------------------------------------------------------------------------
/src/blocks/components/SelectControl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { SelectControl } from "@wordpress/components";
5 | import { __ } from "@wordpress/i18n";
6 |
7 | function UBSelectControl({ label, value, onChange = () => {}, options }) {
8 | const displayValue = value ?? "auto";
9 | return (
10 |
18 | );
19 | }
20 | export default UBSelectControl;
21 |
--------------------------------------------------------------------------------
/src/blocks/components/TabsPanelControl.js:
--------------------------------------------------------------------------------
1 | import { TabPanel } from "@wordpress/components";
2 |
3 | function TabsPanelControl({ tabs }) {
4 | return (
5 |
6 | {(tab) => tab.component}
7 |
8 | );
9 | }
10 | export default TabsPanelControl;
11 |
--------------------------------------------------------------------------------
/src/blocks/components/index.js:
--------------------------------------------------------------------------------
1 | export { default as BorderRadiusControl } from "./BorderRadiusControl";
2 | export { default as CustomToggleGroupControl } from "./ToggleGroupControl";
3 | export { default as CustomFontSizePicker } from "./FontSizePicker";
4 | export { default as SpacingControl } from "./SpacingControl";
5 | export { default as ColorSettings } from "./ColorSettings";
6 | export { default as ColorSettingsWithGradient } from "./ColorSettingsWithGradient";
7 | export { default as UBSelectControl } from "./SelectControl";
8 | export { default as BorderControl } from "./BorderControl";
9 | export { default as TabsPanelControl } from "./TabsPanelControl";
10 | export { default as SpacingControlWithToolsPanel } from "./SpacingControlWithToolsPanel";
11 | export { default as TextDecorationControl } from "./TextDecorationControl";
12 | export { default as FontAppearanceControl } from "./FontAppearanceControl";
13 | export { default as LineHeightControl } from "./LineHeightControl";
14 | export { default as LetterSpacingControl } from "./LetterSpacingControl";
15 | export { default as FontFamilyControl } from "./FontFamilyControl";
16 |
--------------------------------------------------------------------------------
/src/blocks/content-filter/icon.js:
--------------------------------------------------------------------------------
1 | const icon = (
2 |
9 |
10 |
16 |
17 | );
18 |
19 | export default icon;
20 |
--------------------------------------------------------------------------------
/src/blocks/content-filter/style.scss:
--------------------------------------------------------------------------------
1 | @import "../../common";
2 |
3 | .wp-block-ub-content-filter-block {
4 | .ub-content-filter-buttons-wrapper {
5 | display: flex;
6 | justify-content: var(--ub-content-filter-buttons-justification);
7 | flex-wrap: wrap;
8 | gap: 20px;
9 | }
10 | }
11 | .ub-content-filter-tag {
12 | min-height: 32px;
13 | min-width: 100px;
14 | padding: 8px;
15 | border-radius: 3px;
16 | text-align: center;
17 | }
18 |
19 | .ub-content-filter-category-name {
20 | font-size: 1.625em;
21 | font-weight: 800;
22 | margin-bottom: 15px;
23 | }
24 | .ub-content-filter-category {
25 | margin-bottom: 10px;
26 | padding: 3px;
27 | }
28 |
29 | .ub-content-filter-tag {
30 | cursor: pointer;
31 | }
32 |
--------------------------------------------------------------------------------
/src/blocks/content-toggle/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/content-toggle/icons/icon.js:
--------------------------------------------------------------------------------
1 | const icon = (
2 |
9 |
10 |
11 |
12 |
18 |
24 |
25 | );
26 |
27 | export default icon;
28 |
--------------------------------------------------------------------------------
/src/blocks/content-toggle/icons/icons.json:
--------------------------------------------------------------------------------
1 | {
2 | "none": "none",
3 | "chevron": "wp-block-ub-chevron-down",
4 | "plus": "wp-block-ub-math-plus"
5 | }
6 |
--------------------------------------------------------------------------------
/src/blocks/countdown/blocks-styles.js:
--------------------------------------------------------------------------------
1 | import { __ } from "@wordpress/i18n";
2 | import metadata from "./block.json";
3 |
4 | const styles = [
5 | {
6 | name: "ub-countdown-regular",
7 | label: __("Regular", "ultimate-blocks"),
8 | },
9 | {
10 | name: "ub-countdown-odometer",
11 | label: __("Odometer", "ultimate-blocks"),
12 | isDefault: true,
13 | },
14 | {
15 | name: "ub-countdown-circular",
16 | label: __("Circular", "ultimate-blocks"),
17 | },
18 | ];
19 |
20 | styles.forEach((style) => {
21 | wp.blocks.registerBlockStyle(metadata.name, style);
22 | });
23 |
--------------------------------------------------------------------------------
/src/blocks/counter/block.js:
--------------------------------------------------------------------------------
1 | import { registerBlockType } from "@wordpress/blocks";
2 | import metadata from "./block.json";
3 | import Edit from "./edit";
4 | import { blockIcon } from "./icon.js";
5 |
6 | registerBlockType(metadata.name, {
7 | ...metadata,
8 | attributes: metadata.attributes,
9 | edit: Edit,
10 | save: () => null,
11 | icon: blockIcon,
12 | example: {
13 | attributes: {
14 | label: "Counter Label",
15 | startNumber: "0",
16 | endNumber: "500",
17 | counterFontSize: "32px",
18 | },
19 | },
20 | });
21 |
--------------------------------------------------------------------------------
/src/blocks/counter/editor.css:
--------------------------------------------------------------------------------
1 | .editor-styles-wrapper div.ub_counter-container[id^=block-]{padding-top:var(--ub-counter-padding-top, 0px) !important;padding-right:var(--ub-counter-padding-right, 0px) !important;padding-bottom:var(--ub-counter-padding-bottom, 0px) !important;padding-left:var(--ub-counter-padding-left, 0px) !important;margin-top:var(--ub-counter-margin-top, auto) !important;margin-right:var(--ub-counter-margin-right, auto) !important;margin-bottom:var(--ub-counter-margin-bottom, auto) !important;margin-left:var(--ub-counter-margin-left, auto) !important}
--------------------------------------------------------------------------------
/src/blocks/counter/editor.scss:
--------------------------------------------------------------------------------
1 | .editor-styles-wrapper {
2 | div.ub_counter-container[id^="block-"] {
3 | padding-top: var(--ub-counter-padding-top, 0px) !important;
4 | padding-right: var(--ub-counter-padding-right, 0px) !important;
5 | padding-bottom: var(--ub-counter-padding-bottom, 0px) !important;
6 | padding-left: var(--ub-counter-padding-left, 0px) !important;
7 | margin-top: var(--ub-counter-margin-top, auto) !important;
8 | margin-right: var(--ub-counter-margin-right, auto) !important;
9 | margin-bottom: var(--ub-counter-margin-bottom, auto) !important;
10 | margin-left: var(--ub-counter-margin-left, auto) !important;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/blocks/divider/editor.css:
--------------------------------------------------------------------------------
1 | .wp-block-ub-block-divider{margin:0 auto;max-width:100%}
--------------------------------------------------------------------------------
/src/blocks/divider/editor.scss:
--------------------------------------------------------------------------------
1 | .wp-block-ub-block-divider {
2 | margin: 0 auto;
3 | max-width: 100%;
4 | }
5 |
--------------------------------------------------------------------------------
/src/blocks/divider/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/divider/icons/icon.js:
--------------------------------------------------------------------------------
1 | const icon = (
2 |
9 |
10 |
16 |
17 | );
18 |
19 | export default icon;
20 |
--------------------------------------------------------------------------------
/src/blocks/divider/oldVersions.js:
--------------------------------------------------------------------------------
1 | export const version_1_1_2 = props => {
2 | const {
3 | borderSize,
4 | borderStyle,
5 | borderColor,
6 | borderHeight
7 | } = props.attributes;
8 |
9 | return (
10 |
20 | );
21 | };
22 |
--------------------------------------------------------------------------------
/src/blocks/divider/style.css:
--------------------------------------------------------------------------------
1 | .ub_divider{display:flex;margin-left:auto;margin-right:auto;align-content:center;border-bottom:none}.ub_divider.ub_divider:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.wp-block-separator):not(.woocommerce){max-width:initial}.entry-content.entry-content .ub_divider{background-color:rgba(0,0,0,0)}.entry-content.entry-content .ub_divider::before,.entry-content.entry-content .ub_divider::after{content:none}
--------------------------------------------------------------------------------
/src/blocks/divider/style.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Styles
3 | *
4 | * CSS for both Frontend+Backend.
5 | */
6 |
7 | .ub_divider {
8 | display: flex;
9 | margin-left: auto; //needed for proper alignment
10 | margin-right: auto; //needed for proper alignment
11 | align-content: center;
12 | //begin overrides for twenty twenty-one
13 | border-bottom: none;
14 | &.ub_divider:not(.alignwide):not(.alignfull):not(.alignleft):not(.alignright):not(.wp-block-separator):not(.woocommerce) {
15 | max-width: initial;
16 | }
17 | //end overrides for twenty twenty-one
18 | }
19 |
20 | .entry-content.entry-content .ub_divider {
21 | &::before,
22 | &::after {
23 | content: none; //override twenty twenty
24 | }
25 | background-color: transparent; //override twenty nineteen, twenty seventeen
26 | }
27 |
--------------------------------------------------------------------------------
/src/blocks/expand/expand-portion/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schemas.wp.org/trunk/block.json",
3 | "apiVersion": 3,
4 | "name": "ub/expand-portion",
5 | "title": "Expand Portion",
6 | "parent": [
7 | "ub/expand"
8 | ],
9 | "category": "ultimateblocks",
10 | "description": "",
11 | "keywords": [],
12 | "attributes": {
13 | "clickText": {
14 | "type": "string",
15 | "default": ""
16 | },
17 | "displayType": {
18 | "type": "string",
19 | "default": ""
20 | },
21 | "isVisible": {
22 | "type": "boolean",
23 | "default": true
24 | },
25 | "toggleAlign": {
26 | "type": "string",
27 | "default": "left"
28 | },
29 | "parentID": {
30 | "type": "string",
31 | "default": ""
32 | }
33 | },
34 | "supports": {
35 | "inserter": false,
36 | "reusable": false,
37 | "lock": false
38 | }
39 | }
--------------------------------------------------------------------------------
/src/blocks/expand/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/expand/icon.js:
--------------------------------------------------------------------------------
1 | const icon = (
2 |
9 |
10 |
16 |
17 | );
18 |
19 | export default icon;
20 |
--------------------------------------------------------------------------------
/src/blocks/expand/style.css:
--------------------------------------------------------------------------------
1 | .ub-expand{padding-bottom:1em}.ub-expand-toggle-button{display:block;cursor:pointer}.ub-hide{display:none}
--------------------------------------------------------------------------------
/src/blocks/expand/style.scss:
--------------------------------------------------------------------------------
1 | .ub-expand {
2 | padding-bottom: 1em;
3 | }
4 |
5 | .ub-expand-toggle-button {
6 | display: block;
7 | cursor: pointer;
8 | }
9 | .ub-hide {
10 | display: none;
11 | }
12 |
--------------------------------------------------------------------------------
/src/blocks/feature-box/editor.css:
--------------------------------------------------------------------------------
1 | .wp-block-ub-feature-box{margin:20px 0 20px 0;max-width:100%}.ub_feature_upload_button>button{display:flex !important;align-items:center;margin-left:auto !important;margin-right:auto !important}.ub_feature_upload_button>p{font-size:12px;text-align:justify;margin:5px 0 0 3px}
--------------------------------------------------------------------------------
/src/blocks/feature-box/editor.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Editor Styles
3 | *
4 | * CSS for just Backend enqueued after style.scss
5 | * which makes it higher in priority.
6 | */
7 |
8 | .wp-block-ub-feature-box {
9 | margin: 20px 0 20px 0;
10 | max-width: 100%;
11 | }
12 |
13 | .ub_feature_upload_button {
14 | >button {
15 | display: flex !important;
16 | align-items: center;
17 | margin-left: auto !important;
18 | margin-right: auto !important;
19 | }
20 | >p {
21 | font-size: 12px;
22 | text-align: justify;
23 | margin: 5px 0 0 3px;
24 | }
25 | }
--------------------------------------------------------------------------------
/src/blocks/feature-box/icons/remove_icon.js:
--------------------------------------------------------------------------------
1 | const remove_icon =
2 |
5 | ;
6 |
7 | export default remove_icon;
--------------------------------------------------------------------------------
/src/blocks/how-to/block.js:
--------------------------------------------------------------------------------
1 | import icon from "./icon";
2 | import { EditorComponent } from "./components";
3 |
4 | import { registerBlockType } from "@wordpress/blocks";
5 | import metadata from "./block.json";
6 | registerBlockType(metadata.name, {
7 | ...metadata,
8 | attributes: metadata.attributes,
9 | icon: icon,
10 | example: {},
11 | edit: EditorComponent,
12 | save: () => null,
13 | });
14 |
--------------------------------------------------------------------------------
/src/blocks/how-to/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/how-to/style.css:
--------------------------------------------------------------------------------
1 | .ub_howto-step-image,.ub_howto-yield-image{width:100%;height:auto}.ub_howto-supplies-list img,.ub_howto-tools-list img{max-width:200px}.ub_howto-section-display{margin-left:1em}.ub_howto figcaption{margin-top:5px;text-align:center}.ub_howto-step-display .ub_howto-step{list-style-position:outside}.ub_howto-step{overflow:auto}.ub_howto-step>figure,.ub_howto-step>img{margin-bottom:10px}.ub_howto-yield{overflow:auto}@media screen and (max-width: 767px){.ub_howto .ub_howto-steps-list .ub_howto-step>figure,.ub_howto .ub_howto-section .ub_howto-steps-list .ub_howto-step>figure,.ub_howto .ub_howto-step-display .ub_howto-step>figure,.ub_howto .ub_howto-section .ub_howto-step-display .ub_howto-step>figure{width:100%;float:none}}
--------------------------------------------------------------------------------
/src/blocks/how-to/style.scss:
--------------------------------------------------------------------------------
1 | .ub_howto-step-image,
2 | .ub_howto-yield-image {
3 | width: 100%;
4 | height: auto;
5 | }
6 |
7 | .ub_howto-supplies-list,
8 | .ub_howto-tools-list {
9 | img {
10 | max-width: 200px;
11 | }
12 | }
13 |
14 | .ub_howto-section-display {
15 | margin-left: 1em;
16 | }
17 |
18 | .ub_howto figcaption {
19 | margin-top: 5px;
20 | text-align: center;
21 | }
22 |
23 | .ub_howto-step-display .ub_howto-step {
24 | list-style-position: outside;
25 | }
26 |
27 | .ub_howto-step {
28 | overflow: auto;
29 | > figure,
30 | > img {
31 | margin-bottom: 10px;
32 | }
33 | }
34 |
35 | .ub_howto-yield {
36 | overflow: auto;
37 | }
38 |
39 | @media screen and (max-width: 767px) {
40 | .ub_howto {
41 | .ub_howto-steps-list,
42 | .ub_howto-section .ub_howto-steps-list,
43 | .ub_howto-step-display,
44 | .ub_howto-section .ub_howto-step-display {
45 | .ub_howto-step > figure {
46 | width: 100%;
47 | float: none;
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/blocks/icon-inner/block.js:
--------------------------------------------------------------------------------
1 | import { __ } from '@wordpress/i18n';
2 | import registerPluginBlock from '$Inc/registerPluginBlock';
3 | import UbIcon from './components/UbIcon';
4 | import { UbIconComponent } from '$Library/ub-common/Components';
5 |
6 | registerPluginBlock('ub/icon-innerblock', {
7 | title: __('Icon', 'ultimate-blocks'),
8 | category: 'ultimateblocks',
9 | icon: 'dashicons-admin-tools',
10 | supports: {
11 | inserter: false,
12 | },
13 | edit: (props) => {
14 | const { attributes, setAttributes } = props;
15 | const { iconName, size } = attributes;
16 |
17 | return (
18 |
23 | );
24 | },
25 | save: ({ attributes }) => {
26 | const { iconName, size } = attributes;
27 |
28 | return ;
29 | },
30 | });
31 |
--------------------------------------------------------------------------------
/src/blocks/icon-inner/block.php:
--------------------------------------------------------------------------------
1 | $defaultValues[ $block_type_id ]['attributes'],
15 | 'render_callback' => null
16 | ] );
17 |
18 | }
19 |
20 | }
21 |
22 | add_action( 'init', 'register_icon_inner', 10, 1 );
23 |
--------------------------------------------------------------------------------
/src/blocks/icon-inner/components/UbIcon.js:
--------------------------------------------------------------------------------
1 | import React, { Fragment } from 'react';
2 | import UbIconInspector from './UbIconInspector';
3 | import { UbIconComponent } from '$Library/ub-common/Components';
4 |
5 | /**
6 | * Icon main component.
7 | *
8 | * @param {Object} props component properties
9 | * @param {string} props.iconName icon name
10 | * @param {Function} props.setAttributes block attribute update function
11 | * @param {number} props.size icon size
12 | * @function Object() { [native code] }
13 | */
14 | function UbIcon({ iconName, size, setAttributes }) {
15 | return (
16 |
17 |
18 |
23 |
24 | );
25 | }
26 |
27 | /**
28 | * @module UbIcon
29 | */
30 | export default UbIcon;
31 |
--------------------------------------------------------------------------------
/src/blocks/icon-inner/editor.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/blocks/icon-inner/editor.css
--------------------------------------------------------------------------------
/src/blocks/icon-inner/editor.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/blocks/icon-inner/editor.scss
--------------------------------------------------------------------------------
/src/blocks/icon-inner/style.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/blocks/icon-inner/style.css
--------------------------------------------------------------------------------
/src/blocks/icon-inner/style.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/blocks/icon-inner/style.scss
--------------------------------------------------------------------------------
/src/blocks/icon/block.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress Dependencies
3 | */
4 | import { __ } from "@wordpress/i18n";
5 | import registerPluginBlock from "$Inc/registerPluginBlock";
6 |
7 | /**
8 | * Custom Imports
9 | */
10 | import { blockIcon } from "./icons/block-icon";
11 | import Edit from "./edit";
12 | import Save from "./save";
13 | import metadata from "./block.json";
14 | import "./blocks-styles";
15 |
16 | registerPluginBlock(metadata.name, {
17 | ...metadata,
18 | icon: blockIcon,
19 | attributes: metadata.attributes,
20 | edit: Edit,
21 | save: Save,
22 | example: {
23 | attributes: {
24 | icon: {
25 | iconName: "wordpress",
26 | type: "wordpress",
27 | },
28 | size: "84px",
29 | iconColor: "#ffffff",
30 | iconBackground: "#e11b4c",
31 | justification: "center",
32 | },
33 | },
34 | });
35 |
--------------------------------------------------------------------------------
/src/blocks/icon/blocks-styles.js:
--------------------------------------------------------------------------------
1 | import { __ } from "@wordpress/i18n";
2 |
3 | const styles = [
4 | {
5 | name: "default",
6 | isDefault: true,
7 | label: __("Default", "ultimate-blocks"),
8 | },
9 | {
10 | name: "circle-fill",
11 | label: __("Circle Fill", "ultimate-blocks"),
12 | },
13 | {
14 | name: "circle-outline",
15 | label: __("Circle Outline", "ultimate-blocks"),
16 | },
17 | {
18 | name: "square-fill",
19 | label: __("Square Fill", "ultimate-blocks"),
20 | },
21 | {
22 | name: "square-outline",
23 | label: __("Square Outline", "ultimate-blocks"),
24 | },
25 | ];
26 |
27 | styles.forEach((style) => {
28 | wp.blocks.registerBlockStyle("ub/icon", style);
29 | });
30 |
--------------------------------------------------------------------------------
/src/blocks/icon/components/icon-library/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress Dependencies
3 | */
4 | import { useState } from "@wordpress/element";
5 |
6 | /**
7 | * Custom Dependencies
8 | */
9 | import Content from "./LibraryContent";
10 | import Sidebar from "./LibrarySidebar";
11 |
12 | function IconsLibrary(props) {
13 | const [search, setSearch] = useState("");
14 | const [subCategoryFilter, setSubCategoryFilter] = useState("");
15 | const [mainCategoryFilter, setMainCategoryFilter] = useState("wordpress");
16 |
17 | return (
18 |
19 |
27 |
34 |
35 | );
36 | }
37 |
38 | export default IconsLibrary;
39 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/font-awesome/index.js:
--------------------------------------------------------------------------------
1 | export { default as fontAwesomeCategories } from "./categories";
2 | export { default as fontAwesomeIcons } from "./icons";
3 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/bandcamp.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 |
5 | import { Path, SVG } from '@wordpress/primitives';
6 |
7 | export const bandcamp = (
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/deviantart.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const deviantart = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/dropbox.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const dropbox = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/etsy.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const etsy = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/facebook.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const facebook = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/feed.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const feed = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/flickr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const flickr = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/foursquare.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const foursquare = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/github.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const github = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/google.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const google = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/linkedin.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const linkedin = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/mail.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const mail = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/mastodon.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const mastodon = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/medium.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const medium = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/patreon.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Circle, Rect, SVG } from '@wordpress/primitives';
5 |
6 | export const patreon = (
7 |
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/pinterest.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const pinterest = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/pocket.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const pocket = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/spotify.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const spotify = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/tiktok.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const tiktok = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/tumblr.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const tumblr = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/twitch.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const twitch = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/twitter.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const twitter = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/vimeo.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const vimeo = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/icons/wordpress/social/youtube.js:
--------------------------------------------------------------------------------
1 | /**
2 | * WordPress dependencies
3 | */
4 | import { Path, SVG } from '@wordpress/primitives';
5 |
6 | export const youtube = (
7 |
8 |
9 |
10 | );
11 |
--------------------------------------------------------------------------------
/src/blocks/icon/utils.js:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * @param {string} svgString
4 | *
5 | * @returns {true|false} true if valid false is not valid
6 | */
7 | export function isValidSVG(svgString) {
8 | const parser = new DOMParser();
9 | const svgDoc = parser.parseFromString(svgString.trim(), "image/svg+xml");
10 | const errors = svgDoc.getElementsByTagName("parsererror");
11 |
12 | return errors.length === 0;
13 | }
14 |
--------------------------------------------------------------------------------
/src/blocks/image-slider/editor.scss:
--------------------------------------------------------------------------------
1 | @import "../../common";
2 | .wp-block-ub-image-slider {
3 | width: 100%;
4 | }
5 | div[data-block] > .ub_image_slider {
6 | display: block;
7 | .components-placeholder {
8 | &__fieldset {
9 | display: flex;
10 | justify-content: center;
11 | }
12 | &__label {
13 | margin: 5px auto;
14 | }
15 | &__instructions {
16 | text-align: center;
17 | margin: auto;
18 | }
19 | }
20 | }
21 |
22 | :not(.is-selected) > .ub_image_slider {
23 | margin-bottom: 50px;
24 | }
25 |
26 | .ub_image_slider_url_input {
27 | width: 300px;
28 | margin: auto;
29 | }
30 |
31 | .ub_image_slider_extra {
32 | height: 100%;
33 | }
34 |
35 | .ub_image_slider {
36 | .editor-rich-text {
37 | padding-left: 10px;
38 | padding-right: 10px;
39 | }
40 | }
41 | .ub_image_slider_add_images {
42 | display: block;
43 | top: 50%;
44 | left: 50%;
45 | position: absolute;
46 | transform: translate(-50%, -50%);
47 | }
48 |
--------------------------------------------------------------------------------
/src/blocks/image-slider/front.js:
--------------------------------------------------------------------------------
1 | Array.prototype.slice
2 | .call(document.getElementsByClassName("ub_image_slider"))
3 | .forEach((instance) => {
4 | const swiper = new Swiper(
5 | `#${instance.id}`,
6 | JSON.parse(instance.dataset.swiperData)
7 | );
8 |
9 | instance
10 | ?.getElementsByClassName("swiper-button-next")[0]
11 | ?.addEventListener("keydown", (e) => {
12 | if (e.key === " ") {
13 | e.preventDefault();
14 | }
15 | });
16 |
17 | instance
18 | ?.getElementsByClassName("swiper-button-prev")[0]
19 | ?.addEventListener("keydown", (e) => {
20 | if (e.key === " ") {
21 | e.preventDefault();
22 | }
23 | });
24 |
25 | Array.prototype.slice
26 | .call(instance.getElementsByClassName("swiper-pagination-bullet"))
27 | .forEach((bullet) => {
28 | bullet.addEventListener("keydown", (e) => {
29 | if (e.key === " ") {
30 | e.preventDefault();
31 | }
32 | });
33 | });
34 | });
35 |
--------------------------------------------------------------------------------
/src/blocks/notification-box/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schemas.wp.org/trunk/block.json",
3 | "apiVersion": 3,
4 | "name": "ub/notification-box-block",
5 | "title": "Notification Box",
6 | "category": "ultimateblocks",
7 | "description": "",
8 | "keywords": [
9 | "notification",
10 | "warning info",
11 | "Ultimate Blocks"
12 | ],
13 | "attributes": {
14 | "blockID": {
15 | "type": "string",
16 | "default": ""
17 | },
18 | "ub_notify_info": {
19 | "type": "string",
20 | "default": ""
21 | },
22 | "ub_selected_notify": {
23 | "type": "string",
24 | "default": "ub_notify_info"
25 | },
26 | "align": {
27 | "type": "string",
28 | "default": "left"
29 | }
30 | },
31 | "supports": {
32 | "inserter": false
33 | }
34 | }
--------------------------------------------------------------------------------
/src/blocks/notification-box/block.php:
--------------------------------------------------------------------------------
1 |
6 |
8 |
'. wp_kses_post($ub_notify_info) .'
9 |
10 | ';
11 | }
12 |
13 | function ub_register_notification_box_block() {
14 | if ( function_exists( 'register_block_type_from_metadata' ) ) {
15 | require dirname(dirname(__DIR__)) . '/defaults.php';
16 | register_block_type_from_metadata( dirname(dirname(dirname(__DIR__))) . '/dist/blocks/notification-box', array(
17 | 'attributes' => $defaultValues['ub/notification-box-block']['attributes'],
18 | 'render_callback' => 'ub_render_notification_box_block'));
19 | }
20 | }
21 |
22 | add_action('init', 'ub_register_notification_box_block');
23 |
--------------------------------------------------------------------------------
/src/blocks/notification-box/icons/success.js:
--------------------------------------------------------------------------------
1 | const success = (
2 |
8 |
12 |
16 |
17 | );
18 |
19 | export default success;
20 |
--------------------------------------------------------------------------------
/src/blocks/notification-box/icons/warning.js:
--------------------------------------------------------------------------------
1 | const warning = (
2 |
8 |
12 |
16 |
17 |
18 | );
19 |
20 | export default warning;
21 |
--------------------------------------------------------------------------------
/src/blocks/notification-box/style.css:
--------------------------------------------------------------------------------
1 | .ub_notify_info,.ub_notify_success,.ub_notify_warning{margin:10px 0px;padding:15px;border-left-width:4px;border-left-style:solid}.ub_notify_info .ub_notify_text,.ub_notify_success .ub_notify_text,.ub_notify_warning .ub_notify_text{margin:0 auto}.ub_notify_info{color:#31708f;background-color:#d9edf7;border-left-color:#31708f}.ub_notify_success{color:#3c763d;background-color:#dff0d8;border-left-color:#3c763d}.ub_notify_warning{color:#d8000c;background-color:#ffd2d2;border-left-color:#d8000c}
--------------------------------------------------------------------------------
/src/blocks/notification-box/style.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Styles
3 | *
4 | * CSS for both Frontend+Backend.
5 | */
6 | .ub_notify_info,
7 | .ub_notify_success,
8 | .ub_notify_warning {
9 | margin: 10px 0px;
10 | padding: 15px;
11 | border-left-width: 4px;
12 | border-left-style: solid;
13 | .ub_notify_text {
14 | margin: 0 auto;
15 | }
16 | }
17 |
18 | .ub_notify_info {
19 | color: #31708f;
20 | background-color: #d9edf7;
21 | border-left-color: #31708f;
22 | }
23 |
24 | .ub_notify_success {
25 | color: #3c763d;
26 | background-color: #dff0d8;
27 | border-left-color: #3c763d;
28 | }
29 |
30 | .ub_notify_warning {
31 | color: #d8000c;
32 | background-color: #ffd2d2;
33 | border-left-color: #d8000c;
34 | }
35 |
--------------------------------------------------------------------------------
/src/blocks/number-box/editor.css:
--------------------------------------------------------------------------------
1 | .wp-block-ub-number-box{margin:0 auto}
--------------------------------------------------------------------------------
/src/blocks/number-box/editor.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Editor Styles
3 | *
4 | * CSS for just Backend enqueued after style.scss
5 | * which makes it higher in priority.
6 | */
7 |
8 | .wp-block-ub-number-box {
9 | margin: 0 auto;
10 | }
11 |
--------------------------------------------------------------------------------
/src/blocks/number-box/icons/icon.js:
--------------------------------------------------------------------------------
1 | const icon = (
2 |
8 |
12 |
16 |
17 | );
18 |
19 | export default icon;
20 |
--------------------------------------------------------------------------------
/src/blocks/post-grid/editor.css:
--------------------------------------------------------------------------------
1 | .ub-autocomplete-container{margin-bottom:5px}.ub-autocomplete-selection{border:1px solid #000;margin:4px;padding:2px;border-radius:4px}.ub-autocomplete-list{position:absolute;z-index:1;max-height:100px;overflow-y:scroll}.ub-autocomplete-list>div:nth-child(odd){background-color:#eee}.ub-autocomplete-list>div:nth-child(even){background-color:#fff}.ub-autocomplete-list>div:focus{background-color:#aaa}.ub-block-post-grid-excerpt>div>p:last-child{margin-bottom:0}
--------------------------------------------------------------------------------
/src/blocks/post-grid/editor.scss:
--------------------------------------------------------------------------------
1 | .ub-autocomplete-container {
2 | margin-bottom: 5px;
3 | }
4 |
5 | .ub-autocomplete-selection {
6 | border: 1px solid black;
7 | margin: 4px;
8 | padding: 2px;
9 | border-radius: 4px;
10 | }
11 |
12 | .ub-autocomplete-list {
13 | position: absolute;
14 | z-index: 1;
15 | max-height: 100px;
16 | overflow-y: scroll;
17 | > div {
18 | &:nth-child(odd) {
19 | background-color: #eeeeee;
20 | }
21 | &:nth-child(even) {
22 | background-color: #ffffff;
23 | }
24 | &:focus {
25 | background-color: #aaaaaa;
26 | }
27 | }
28 | }
29 |
30 | .ub-block-post-grid-excerpt > div > p:last-child {
31 | margin-bottom: 0;
32 | }
33 |
--------------------------------------------------------------------------------
/src/blocks/progress-bar/blocks-styles.js:
--------------------------------------------------------------------------------
1 | import { __ } from "@wordpress/i18n";
2 |
3 | const styles = [
4 | {
5 | name: "ub-progress-bar-line-wrapper",
6 | isDefault: true,
7 | label: __("Line", "ultimate-blocks"),
8 | },
9 | {
10 | name: "ub-progress-bar-circle-wrapper",
11 | label: __("Circle", "ultimate-blocks"),
12 | },
13 | {
14 | name: "ub-progress-bar-half-circle-wrapper",
15 | label: __("Half Circle", "ultimate-blocks"),
16 | },
17 | ];
18 |
19 | styles.forEach((style) => {
20 | wp.blocks.registerBlockStyle("ub/progress-bar", style);
21 | });
22 |
--------------------------------------------------------------------------------
/src/blocks/progress-bar/front.build.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | document.addEventListener("DOMContentLoaded", function () {
4 | setTimeout(function () {
5 | Array.prototype.slice.call(document.getElementsByClassName("ub_progress-bar")).forEach(function (instance) {
6 | instance.classList.add("ub_progress-bar-filled");
7 | });
8 | }, 500);
9 | });
--------------------------------------------------------------------------------
/src/blocks/progress-bar/front.js:
--------------------------------------------------------------------------------
1 | document.addEventListener("DOMContentLoaded", function() {
2 | setTimeout(() => {
3 | Array.prototype.slice
4 | .call(document.getElementsByClassName("ub_progress-bar"))
5 | .forEach(instance => {
6 | instance.classList.add("ub_progress-bar-filled");
7 | });
8 | }, 500);
9 | });
10 |
--------------------------------------------------------------------------------
/src/blocks/review/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin, summaryTitleFontSize, mainTitleFontSize } =
6 | attributes;
7 | const paddingObj = getSpacingCss(padding);
8 | const marginObj = getSpacingCss(margin);
9 |
10 | let styles = {
11 | paddingTop: paddingObj?.top,
12 | paddingRight: paddingObj?.right,
13 | paddingBottom: paddingObj?.bottom,
14 | paddingLeft: paddingObj?.left,
15 | marginTop: marginObj?.top,
16 | marginRight: marginObj?.right,
17 | marginBottom: marginObj?.bottom,
18 | marginLeft: marginObj?.left,
19 | "--ub-review-summary-title-font-size": summaryTitleFontSize,
20 | "--ub-review-title-font-size": mainTitleFontSize,
21 | };
22 |
23 | return omitBy(
24 | styles,
25 | (value) =>
26 | value === false ||
27 | isEmpty(value) ||
28 | isUndefined(value) ||
29 | trim(value) === "" ||
30 | trim(value) === "undefined undefined undefined",
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/src/blocks/review/save.js:
--------------------------------------------------------------------------------
1 | import { InnerBlocks } from "@wordpress/block-editor";
2 | function Save() {
3 | return ;
4 | }
5 | export default Save;
6 |
--------------------------------------------------------------------------------
/src/blocks/social-share/editor.css:
--------------------------------------------------------------------------------
1 | .wp-block-ub-social-share .social-share-icons .social-share-icon{cursor:move;transition:all .2s ease-in-out}.ub-social-share-icon{display:flex;align-items:center;justify-content:center}
--------------------------------------------------------------------------------
/src/blocks/social-share/editor.scss:
--------------------------------------------------------------------------------
1 | .wp-block-ub-social-share .social-share-icons {
2 | .social-share-icon {
3 | cursor: move;
4 | transition: all 0.2s ease-in-out;
5 | }
6 | }
7 |
8 | .ub-social-share-icon {
9 | display: flex;
10 | align-items: center;
11 | justify-content: center;
12 | }
13 |
--------------------------------------------------------------------------------
/src/blocks/social-share/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/star-rating/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import {
3 | getSpacingCss,
4 | getSpacingPresetCssVar,
5 | } from "../utils/styling-helpers";
6 |
7 | export function getStyles(attributes) {
8 | const { padding, margin, textFontSize } = attributes;
9 | const paddingObj = getSpacingCss(padding);
10 | const marginObj = getSpacingCss(margin);
11 | const gap = getSpacingPresetCssVar(attributes.gap?.all) ?? "";
12 |
13 | let styles = {
14 | paddingTop: paddingObj?.top,
15 | paddingRight: paddingObj?.right,
16 | paddingBottom: paddingObj?.bottom,
17 | paddingLeft: paddingObj?.left,
18 | marginTop: marginObj?.top,
19 | marginRight: marginObj?.right,
20 | marginBottom: marginObj?.bottom,
21 | marginLeft: marginObj?.left,
22 | "--ub-star-rating-font-size": textFontSize,
23 | "--ub-star-rating-gap": gap,
24 | };
25 |
26 | return omitBy(
27 | styles,
28 | (value) =>
29 | value === false ||
30 | isEmpty(value) ||
31 | isUndefined(value) ||
32 | trim(value) === "" ||
33 | trim(value) === "undefined undefined undefined",
34 | );
35 | }
36 |
--------------------------------------------------------------------------------
/src/blocks/styled-box/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/styled-box/styled-box-border/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schemas.wp.org/trunk/block.json",
3 | "apiVersion": 3,
4 | "name": "ub/styled-box-bordered-content",
5 | "title": "Bordered Box Content",
6 | "parent": [
7 | "ub/styled-box"
8 | ],
9 | "category": "ultimateblocks",
10 | "description": "",
11 | "attributes": {},
12 | "supports": {
13 | "inserter": false,
14 | "reusable": false
15 | }
16 | }
--------------------------------------------------------------------------------
/src/blocks/styled-box/styled-box-notification/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schemas.wp.org/trunk/block.json",
3 | "apiVersion": 3,
4 | "name": "ub/styled-box-notification-content",
5 | "title": "Notification Box Content",
6 | "parent": [
7 | "ub/styled-box"
8 | ],
9 | "category": "ultimateblocks",
10 | "description": "",
11 | "attributes": {},
12 | "supports": {
13 | "inserter": false,
14 | "reusable": false
15 | }
16 | }
--------------------------------------------------------------------------------
/src/blocks/styled-box/styled-box-number/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schemas.wp.org/trunk/block.json",
3 | "apiVersion": 3,
4 | "name": "ub/styled-box-numbered-content",
5 | "title": "Numbered Box Content",
6 | "parent": [
7 | "ub/styled-box"
8 | ],
9 | "category": "ultimateblocks",
10 | "description": "",
11 | "attributes": {},
12 | "supports": {
13 | "inserter": false,
14 | "reusable": false
15 | }
16 | }
--------------------------------------------------------------------------------
/src/blocks/styled-list/editor.css:
--------------------------------------------------------------------------------
1 | .ub-styled-list-available-icon{display:inline}.editor-styles-wrapper .ub_styled_list ul{margin-left:0}.editor-styles-wrapper .ub_styled_list .fa-ul>li{list-style:none;display:inline-block;width:100%}.block-editor-block-list__block.wp-block>ul,.block-editor-block-list__block.wp-block[data-type="ub/styled-list-item"]{margin-top:0;margin-bottom:0}.block-editor-inner-blocks>.block-editor-block-list__layout>[data-type="ub/styled-list"]>ul{padding-left:2em}
--------------------------------------------------------------------------------
/src/blocks/styled-list/editor.scss:
--------------------------------------------------------------------------------
1 | .ub-styled-list-available-icon {
2 | display: inline;
3 | }
4 |
5 | .editor-styles-wrapper .ub_styled_list {
6 | ul {
7 | margin-left: 0;
8 | }
9 | .fa-ul > li {
10 | list-style: none;
11 | display: inline-block;
12 | width: 100%;
13 | }
14 | }
15 |
16 | .block-editor-block-list__block.wp-block {
17 | > ul,
18 | &[data-type="ub/styled-list-item"] {
19 | margin-top: 0;
20 | margin-bottom: 0;
21 | }
22 | }
23 |
24 | .block-editor-inner-blocks
25 | > .block-editor-block-list__layout
26 | > [data-type="ub/styled-list"]
27 | > ul {
28 | padding-left: 2em;
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/styled-list/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin, backgroundColor } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | backgroundColor: backgroundColor,
11 | paddingTop: paddingObj?.top,
12 | paddingRight: paddingObj?.right,
13 | paddingBottom: paddingObj?.bottom,
14 | paddingLeft: paddingObj?.left,
15 | marginTop: marginObj?.top,
16 | marginRight: marginObj?.right,
17 | marginBottom: marginObj?.bottom,
18 | marginLeft: marginObj?.left,
19 | };
20 |
21 | return omitBy(
22 | styles,
23 | (value) =>
24 | value === false ||
25 | isEmpty(value) ||
26 | isUndefined(value) ||
27 | trim(value) === "" ||
28 | trim(value) === "undefined undefined undefined"
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/src/blocks/styled-list/style.css:
--------------------------------------------------------------------------------
1 | .ub_styled_list .fa-ul{list-style-type:none;margin-left:1em;padding-left:0;display:grid;column-gap:2em}.ub_styled_list .fa-ul>li{position:relative;list-style:none;margin-left:.5em;margin-right:.5em}.ub_styled_list .fa-li{display:inline-block;left:-0.5em;position:relative}.ub_styled_list li::before{content:"";position:relative;left:-0.5em;display:inline-block;background-repeat:no-repeat}ul.ub_styled_list[id^=ub-styled-list-],ul.ub_styled_list[id^=ub_styled_list-]{list-style-type:none;margin-left:0;padding-left:0}ul.ub_styled_list[id^=ub-styled-list-] li,ul.ub_styled_list[id^=ub_styled_list-] li{position:relative;list-style:none;margin-left:.5em;margin-right:.5em}
--------------------------------------------------------------------------------
/src/blocks/styled-list/style.scss:
--------------------------------------------------------------------------------
1 | .ub_styled_list {
2 | .fa-ul {
3 | list-style-type: none;
4 | margin-left: 1em;
5 | padding-left: 0;
6 | display: grid;
7 | column-gap: 2em;
8 | > li {
9 | position: relative;
10 | list-style: none;
11 | margin-left: 0.5em;
12 | margin-right: 0.5em;
13 | }
14 | }
15 | .fa-li {
16 | display: inline-block;
17 | left: -0.5em;
18 | position: relative;
19 | }
20 | li::before {
21 | content: "";
22 | position: relative;
23 | left: -0.5em;
24 | display: inline-block;
25 | background-repeat: no-repeat;
26 | }
27 | }
28 | ul.ub_styled_list[id^="ub-styled-list-"],
29 | ul.ub_styled_list[id^="ub_styled_list-"] {
30 | list-style-type: none;
31 | margin-left: 0;
32 | padding-left: 0;
33 | //display: grid;
34 | //column-gap: 2em;
35 | li {
36 | position: relative;
37 | list-style: none;
38 | margin-left: 0.5em;
39 | margin-right: 0.5em;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/blocks/tabbed-content/components/block.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://schemas.wp.org/trunk/block.json",
3 | "apiVersion": 3,
4 | "name": "ub/tab-block",
5 | "title": "Tab",
6 | "parent": [
7 | "ub/tabbed-content-block"
8 | ],
9 | "category": "ultimateblocks",
10 | "description": "Content of tab",
11 | "keywords": [
12 | "Tabbed Content",
13 | "Tabs",
14 | "Ultimate Blocks"
15 | ],
16 | "attributes": {
17 | "index": {
18 | "type": "number",
19 | "default": 0
20 | },
21 | "isActive": {
22 | "type": "boolean",
23 | "default": true
24 | },
25 | "parentID": {
26 | "type": "string",
27 | "default": ""
28 | }
29 | },
30 | "supports": {
31 | "inserter": false,
32 | "reusable": false
33 | }
34 | }
--------------------------------------------------------------------------------
/src/blocks/tabbed-content/get-style.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin, contentColor, contentBackground } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | "--ub-tab-content-color": contentColor,
19 | "--ub-tab-content-background": contentBackground,
20 | };
21 |
22 | return omitBy(
23 | styles,
24 | (value) =>
25 | value === false ||
26 | isEmpty(value) ||
27 | isUndefined(value) ||
28 | trim(value) === "" ||
29 | trim(value) === "undefined undefined undefined",
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/src/blocks/table-of-contents/get-style.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | paddingTop: paddingObj?.top,
11 | paddingRight: paddingObj?.right,
12 | paddingBottom: paddingObj?.bottom,
13 | paddingLeft: paddingObj?.left,
14 | marginTop: marginObj?.top,
15 | marginRight: marginObj?.right,
16 | marginBottom: marginObj?.bottom,
17 | marginLeft: marginObj?.left,
18 | };
19 |
20 | return omitBy(
21 | styles,
22 | (value) =>
23 | value === false ||
24 | isEmpty(value) ||
25 | isUndefined(value) ||
26 | trim(value) === "" ||
27 | trim(value) === "undefined undefined undefined"
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/src/blocks/testimonial/editor.css:
--------------------------------------------------------------------------------
1 | .wp-block-ub-testimonial-block{margin:0 auto}.ub_testimonial{display:grid;grid-template-columns:fit-content(20%) auto}.ub_testimonial_content{padding:5px 17px !important;margin-top:15px}.ub_testimonial_img{padding:0px 10px !important}.ub_testimonial_img img{margin-top:10px}.ub_testimonial_img .ub-remove-image{position:absolute}.ub_testimonial_upload_button{margin:24px 0px 0px 0px}.ub_testimonial_upload_button p{font-size:12px;text-align:justify;margin:5px 0 0 3px}
--------------------------------------------------------------------------------
/src/blocks/testimonial/editor.scss:
--------------------------------------------------------------------------------
1 | /**
2 | * #.# Styles
3 | *
4 | * CSS for Backend only.
5 | */
6 |
7 | .wp-block-ub-testimonial-block {
8 | margin: 0 auto;
9 | }
10 |
11 | .ub_testimonial {
12 | display: grid;
13 | grid-template-columns: fit-content(20%) auto;
14 | }
15 |
16 | .ub_testimonial_content {
17 | padding: 5px 17px !important;
18 | margin-top: 15px;
19 | }
20 |
21 | .ub_testimonial_img {
22 | padding: 0px 10px !important;
23 | img {
24 | margin-top: 10px;
25 | }
26 | .ub-remove-image {
27 | position: absolute;
28 | }
29 | }
30 |
31 | .ub_testimonial_upload_button {
32 | margin: 24px 0px 0px 0px;
33 | p {
34 | font-size: 12px;
35 | text-align: justify;
36 | margin: 5px 0 0 3px;
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/blocks/testimonial/get-styles.js:
--------------------------------------------------------------------------------
1 | import { omitBy, isUndefined, trim, isEmpty } from "lodash";
2 | import { getSpacingCss } from "../utils/styling-helpers";
3 |
4 | export function getStyles(attributes) {
5 | const { padding, margin, backgroundColor, textColor } = attributes;
6 | const paddingObj = getSpacingCss(padding);
7 | const marginObj = getSpacingCss(margin);
8 |
9 | let styles = {
10 | backgroundColor: backgroundColor,
11 | color: textColor || "inherit",
12 | paddingTop: paddingObj?.top,
13 | paddingRight: paddingObj?.right,
14 | paddingBottom: paddingObj?.bottom,
15 | paddingLeft: paddingObj?.left,
16 | marginTop: marginObj?.top,
17 | marginRight: marginObj?.right,
18 | marginBottom: marginObj?.bottom,
19 | marginLeft: marginObj?.left,
20 | };
21 |
22 | return omitBy(
23 | styles,
24 | (value) =>
25 | value === false ||
26 | isEmpty(value) ||
27 | isUndefined(value) ||
28 | trim(value) === "" ||
29 | trim(value) === "undefined undefined undefined"
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/src/editor.scss:
--------------------------------------------------------------------------------
1 | // editor general styles
2 |
3 | // ub-common package component styles
4 | @import "../library/ub-common/Components/editor";
5 |
6 | // Upsell related styles
7 | @import "./styles/Upsell/UpsellEditor.scss";
8 |
9 | // Saved styles related styles
10 | @import "./styles/SavedStyles/SavedStylesEditor.sass";
11 |
--------------------------------------------------------------------------------
/src/extensions/components/index.js:
--------------------------------------------------------------------------------
1 | export { default as CodeEditor } from "./code-editor";
2 |
--------------------------------------------------------------------------------
/src/extensions/custom-css/common.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/extensions/custom-css/common.scss
--------------------------------------------------------------------------------
/src/extensions/custom-css/editor.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/extensions/custom-css/editor.css
--------------------------------------------------------------------------------
/src/extensions/custom-css/editor.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/extensions/custom-css/editor.scss
--------------------------------------------------------------------------------
/src/extensions/custom-css/style.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/extensions/custom-css/style.css
--------------------------------------------------------------------------------
/src/extensions/custom-css/style.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/src/extensions/custom-css/style.scss
--------------------------------------------------------------------------------
/src/extensions/extension-manager.php:
--------------------------------------------------------------------------------
1 | {
18 | const { getProStatus } = namespacedSelect;
19 |
20 | return {
21 | isPro: getProStatus(),
22 | };
23 | };
24 |
25 | /**
26 | * @module ProPass
27 | */
28 | export default connectWithMainStore(selectMapping, null)(ProPass);
29 |
--------------------------------------------------------------------------------
/src/inc/components/SavedStyles/DefaultItemIndicator.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { __ } from '@wordpress/i18n';
3 | import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4 |
5 | /**
6 | * Default item indicator for saved style preview component
7 | *
8 | * @class
9 | */
10 | function DefaultItemIndicator() {
11 | return (
12 |
16 |
17 |
18 | );
19 | }
20 |
21 | /**
22 | * @module DefaultItemIndicator
23 | */
24 | export default DefaultItemIndicator;
25 |
--------------------------------------------------------------------------------
/src/inc/components/SavedStyles/SavedStylesListingFilter.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { __ } from '@wordpress/i18n';
3 | import UbProInspectorTextInput from '$Inc/components/SavedStyles/UbProInspectorTextInput';
4 | import withBusyStatus from '$BlockStores/savedStyles/hoc/withBusyStatus';
5 |
6 | /**
7 | * SavedStylesListingFilter component.
8 | *
9 | * @param {Object} props component properties
10 | * @param {string} props.value filter value
11 | * @param {Function} props.onInput onInput event callback
12 | * @param {boolean} props.busyStatus busy status, will be supplied via HOC
13 | * @class
14 | */
15 | function SavedStylesListingFilter({ value, onInput, busyStatus }) {
16 | return (
17 |
18 |
24 |
25 | );
26 | }
27 |
28 | /**
29 | * @module SavedStylesListingFilter
30 | */
31 | export default withBusyStatus(SavedStylesListingFilter);
32 |
--------------------------------------------------------------------------------
/src/inc/components/SavedStyles/UbProInspectorTextInput.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Text input for inspector panel.
5 | *
6 | * @param {Object} props component properties
7 | * @param {boolean} [props.disabled=false] disabled status of component
8 | * @param {string} [props.placeholder=''] placeholder text
9 | * @param {string} props.value input value
10 | * @param {Function} props.onInput input callback
11 | * @return {JSX.Element} inspector panel text input component
12 | * @class
13 | */
14 | function UbProInspectorTextInput({
15 | disabled = false,
16 | placeholder = '',
17 | value,
18 | onInput,
19 | }) {
20 | /* eslint-disable no-shadow */
21 | return (
22 | onInput(value)}
29 | />
30 | );
31 | /* eslint-enable no-shadow */
32 | }
33 |
34 | /**
35 | * @module UbProInspectorTextInput
36 | */
37 | export default UbProInspectorTextInput;
38 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/Controls/UpsellButtonGroupControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import withUpsellControlWrapper from '$Inc/hoc/withUpsellControlWrapper';
3 | import {
4 | BlackWhiteButtonGroup,
5 | BlackWhiteButton,
6 | } from '$Library/ub-common/Components';
7 |
8 | /**
9 | * Button Group for upsell features.
10 | *
11 | * @param {Object} props component properties
12 | * @param {Array} [props.buttonLabels=[]] button labels
13 | * @function Object() { [native code] }
14 | */
15 | function UpsellButtonGroupControl({ buttonLabels = [] }) {
16 | return (
17 |
18 | {buttonLabels.map((label, index) => (
19 | {label}
20 | ))}
21 |
22 | );
23 | }
24 |
25 | /**
26 | * @module UpsellButtonGroupControl
27 | */
28 | export default withUpsellControlWrapper(UpsellButtonGroupControl);
29 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/Controls/UpsellColorControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import withUpsellControlWrapper from '$Inc/hoc/withUpsellControlWrapper';
3 | import { PanelColorSettings } from '@wordpress/block-editor';
4 |
5 | /**
6 | * Color control for upsell features.
7 | *
8 | * @param {Object} props component properties
9 | * @function Object() { [native code] }
10 | */
11 | function UpsellColorControl(props) {
12 | return ;
13 | }
14 |
15 | /**
16 | * @module UpsellToggleControl
17 | */
18 | export default withUpsellControlWrapper(UpsellColorControl);
19 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/Controls/UpsellIconControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import withUpsellControlWrapper from '$Inc/hoc/withUpsellControlWrapper';
3 | import { IconControl } from '$Library/ub-common/Components';
4 |
5 | /**
6 | * Icon control for upsell features.
7 | *
8 | * @param {Object} props component properties
9 | * @function Object() { [native code] }
10 | */
11 | function UpsellIconControl(props) {
12 | return ;
13 | }
14 |
15 | /**
16 | * @module UpsellIconControl
17 | */
18 | export default withUpsellControlWrapper(UpsellIconControl);
19 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/Controls/UpsellSelectControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { SelectControl } from '@wordpress/components';
3 | import withUpsellControlWrapper from '$Inc/hoc/withUpsellControlWrapper';
4 |
5 | /**
6 | * Select control for upsell features.
7 | *
8 | * @param {Object} props component properties
9 | * @function Object() { [native code] }
10 | */
11 | function UpsellSelectControl(props) {
12 | return ;
13 | }
14 |
15 | /**
16 | * @module UpsellToggleControl
17 | */
18 | export default withUpsellControlWrapper(UpsellSelectControl);
19 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/Controls/UpsellToggleControl.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ToggleControl } from '@wordpress/components';
3 | import withUpsellControlWrapper from '$Inc/hoc/withUpsellControlWrapper';
4 |
5 | /**
6 | * Toggle control for upsell features.
7 | *
8 | * @param {Object} props component properties
9 | * @function Object() { [native code] }
10 | */
11 | function UpsellToggleControl(props) {
12 | return ;
13 | }
14 |
15 | /**
16 | * @module UpsellToggleControl
17 | */
18 | export default withUpsellControlWrapper(UpsellToggleControl);
19 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/UpsellInspectorPanelBody.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { PanelBody } from "@wordpress/components";
3 | import UpsellControlSelector from "$Inc/components/Upsell/Controls/UpsellControlSelector";
4 |
5 | /**
6 | * General inspector panel body dedicated only to hold upsell controls.
7 | *
8 | * @param {Object} props component properties
9 | * @param {string} props.label panel title
10 | * @param {Array} props.contentData content data for dummy controls inside this panel
11 | * @function Object() { [native code] }
12 | */
13 | function UpsellInspectorPanelBody({ label, contentData }) {
14 | return (
15 |
16 | {contentData.map((data) => (
17 |
18 | ))}
19 |
20 | );
21 | }
22 |
23 | /**
24 | * @module UpsellInspectorPanelBody.
25 | */
26 | export default UpsellInspectorPanelBody;
27 |
--------------------------------------------------------------------------------
/src/inc/components/Upsell/VitalizeText.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | /**
4 | * Vitalize text.
5 | *
6 | * @param {Object} props component properties
7 | * @param {Array | JSX.Element | string } props.children component children
8 | * @function Object() { [native code] }
9 | */
10 | function VitalizeText({ children }) {
11 | return {children} ;
12 | }
13 |
14 | /**
15 | * @module VitalizeText
16 | */
17 | export default VitalizeText;
18 |
--------------------------------------------------------------------------------
/src/inc/helpers/modeCheck.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Get current env mode.
3 | *
4 | * @return {string} env mode
5 | */
6 | export const currentMode = () => {
7 | return UB_ENV;
8 | };
9 |
10 | /**
11 | * Check target mode against current env mode.
12 | *
13 | * @param {string} against target mode to check for
14 | * @return {boolean} match
15 | */
16 | const modeCheck = (against) => {
17 | return currentMode() === against;
18 | };
19 |
20 | /**
21 | * Check if current env is development.
22 | *
23 | * @return {boolean} match
24 | */
25 | export const modeCheckDev = () => {
26 | return modeCheck('development');
27 | };
28 |
29 | /**
30 | * Check if current env is production.
31 | *
32 | * @return {boolean} match
33 | */
34 | export const modeCheckProd = () => {
35 | return modeCheck('production');
36 | };
37 |
--------------------------------------------------------------------------------
/src/pre-register.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Operations that are queued before registration of blocks.
3 | *
4 | * This file will include mainly features that will support block functionality.
5 | */
6 | import { FrontendDataManager } from '$Library/ub-common/Inc';
7 | import MainStore from '$BlockStores/mainStore';
8 | import ProManager from '$Manager/ProManager';
9 |
10 | // initialize frontend data manager
11 | FrontendDataManager.init('ubEditorClientData');
12 |
13 | // initialize main plugin store
14 | MainStore.init('ub/main');
15 |
16 | // initialize pro manager
17 | ProManager.init();
18 |
--------------------------------------------------------------------------------
/src/priority.js:
--------------------------------------------------------------------------------
1 | // for functionality with priority over any other ones
2 |
--------------------------------------------------------------------------------
/src/stores/mainStore/hoc/connectWithMainStore.js:
--------------------------------------------------------------------------------
1 | import { connectWithStore } from '$Library/ub-common/Inc';
2 |
3 | /**
4 | * Connect with main editor store.
5 | *
6 | * @param {Function} selectMapping selector mapping
7 | * @param {Function} actionMapping action mapping
8 | * @return {Function} hoc function
9 | */
10 | function connectWithMainStore(selectMapping, actionMapping) {
11 | return connectWithStore('ub/main', selectMapping, actionMapping);
12 | }
13 |
14 | /**
15 | * @module connectWithMainStore
16 | */
17 | export default connectWithMainStore;
18 |
--------------------------------------------------------------------------------
/src/stores/mainStore/state.js:
--------------------------------------------------------------------------------
1 | import deepmerge from 'deepmerge';
2 | import { currentMode } from '$Inc/helpers/modeCheck';
3 |
4 | /**
5 | * Default store state.
6 | *
7 | * @type {Object}
8 | */
9 | const defaultState = {
10 | storeName: null,
11 | mode: currentMode(),
12 | app: {
13 | upsell: {
14 | upsellModalVisibility: false,
15 | targetExtensionInfoShow: null,
16 | targetBlockInfoShow: null,
17 | },
18 | },
19 | };
20 |
21 | /**
22 | * Create state.
23 | *
24 | * @param {Object} [extraState={}] extra state to use
25 | */
26 | const createStore = (extraState = {}) => {
27 | return deepmerge(defaultState, extraState);
28 | };
29 |
30 | /**
31 | * @module createStore
32 | */
33 | export default createStore;
34 |
--------------------------------------------------------------------------------
/src/stores/mainStore/types.js:
--------------------------------------------------------------------------------
1 | const ACTION_TYPES = {
2 | UN_AFFECTIVE: 'unAffective',
3 | UPSELL_MODAL_VISIBILITY: 'upsellModalVisibility',
4 | UPSELL_EXTENSION_INFO_SHOW: 'upsellExtensionInfoShow',
5 | TARGET_BLOCK_INFO_SHOW: 'upsellTargetBlockInfoShow',
6 | };
7 |
8 | /**
9 | * @module types
10 | */
11 | export default ACTION_TYPES;
12 |
--------------------------------------------------------------------------------
/src/stores/savedStyles/hoc/withBusyStatus.js:
--------------------------------------------------------------------------------
1 | import { connectWithStore } from '$Library/ub-common/Inc';
2 | import SavedStylesManager from '$Manager/SavedStylesManager';
3 |
4 | // select mappings
5 | const selectMapping = ({ busyState }) => {
6 | return { busyStatus: busyState() };
7 | };
8 |
9 | /**
10 | * withBusyStatus HOC.
11 | *
12 | * Will add `busyStatus` property to component properties.
13 | *
14 | * @type {Function}
15 | */
16 | const withBusyStatus = connectWithStore(
17 | SavedStylesManager.storeNamespace,
18 | selectMapping
19 | );
20 |
21 | /**
22 | * @module withBusyStatus
23 | */
24 | export default withBusyStatus;
25 |
--------------------------------------------------------------------------------
/src/stores/savedStyles/state.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Saved styles default state.
3 | *
4 | * @type {Object}
5 | */
6 | const defaultState = {
7 | saved: {},
8 | rendered: {},
9 | renderProps: {
10 | previewsEnabled: true,
11 | attributeRenderPreparation: (attr) => attr,
12 | elementRenderPreparation: (el) => el,
13 | previewParentBlock: 'ub/preview-provider',
14 | previewBlockType: null,
15 | forceActiveBlockForRender: false,
16 | },
17 | app: {
18 | currentBlockTypeOverride: null,
19 | startupBlockIds: [],
20 | busy: false,
21 | advancedControlsVisible: false,
22 | activeItemId: null,
23 | pageBackgroundColor: null,
24 | listing: {
25 | selectedItemId: null,
26 | showPreviews: false,
27 | },
28 | },
29 | };
30 |
31 | /**
32 | * Create store state.
33 | *
34 | * @param {Object} [extraState={}] extra state
35 | * @return {Object} store state
36 | */
37 | const createStoreState = (extraState = {}) => {
38 | return { ...defaultState, ...extraState };
39 | };
40 |
41 | /**
42 | * @module createStoreState
43 | */
44 | export default createStoreState;
45 |
--------------------------------------------------------------------------------
/src/style.css:
--------------------------------------------------------------------------------
1 | .ultimate-blocks-icon-component{display:flex;justify-content:center;align-items:center}.ultimate-blocks-icon-component .ultimate-blocks-icon-component-svg-base{width:100%;height:100%}@keyframes linearGradientMove{to{background-position:6px 0,-6px 100%,0 -6px,100% 6px}}.ub-preview-provider{display:none}
--------------------------------------------------------------------------------
/src/style.scss:
--------------------------------------------------------------------------------
1 | // client general styles
2 |
3 | // ub-common package component styles
4 | @import "../library/ub-common/Components/client";
5 |
--------------------------------------------------------------------------------
/src/styles/Upsell/UpsellInspectorNotice.scss:
--------------------------------------------------------------------------------
1 | @import './UpsellTheme.scss';
2 | @import '../base/__colors.scss';
3 | @import '../base/__common.scss';
4 |
5 | .ub-upsell-inspector-notice {
6 | @extend %pointer;
7 | @extend %gutenberg-sidebar-default-borders;
8 | width: 100%;
9 | background-color: $soft_red;
10 | display: grid;
11 | grid-template-rows: 1fr;
12 | grid-template-columns: auto 1fr;
13 | padding: 15px;
14 | grid-gap: 5px;
15 | color: $text_red;
16 | font-size: 15px;
17 |
18 | .ub-upsell-notice-icon-container {
19 | @extend %flex-center-all;
20 | width: 50px;
21 | height: 50px;
22 |
23 | img {
24 | width: auto;
25 | height: 100%;
26 | }
27 | }
28 |
29 | .ub-upsell-notice {
30 | @extend %flex-center-all;
31 | justify-content: flex-start !important;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/styles/Upsell/UpsellTheme.scss:
--------------------------------------------------------------------------------
1 | $soft_red: #FFF0F0;
2 | $text_red: #912323;
3 |
--------------------------------------------------------------------------------
/src/styles/base/__colors.scss:
--------------------------------------------------------------------------------
1 | // common color values
2 |
3 | $white: #FFFFFF;
4 | $gutenberg-gray: #E0E0E0;
5 |
6 | $wp-gray: #CCCCCC;
7 | $wp-black: #2F2F2F;
8 |
9 | $plugin-red: #e11b4c;
10 |
11 | $gray-100: #F3F4F6;
12 | $gray-200: #E5E7EB;
13 | $gray-300: #D1D5DB;
14 | $gray-400: #9CA3AF;
15 | $gray-500: #6B7280;
16 | $gray-600: #4B5563;
17 | $gray-700: #374151;
18 |
19 | $red-100: #FFF0F0;
20 | $red-500: #e11b4c;
21 |
22 | $yellow-200: #FEF08A;
23 | $yellow-400: #FACC15;
24 | $yellow-500: #EAB308;
25 |
26 | $green-100: #DCFCE7;
27 | $green-200: #BBF7D0;
28 | $green-400: #86EFAC;
29 | $green-500: #22C55E;
30 |
31 | $blue-100: #DBEAFE;
32 | $blue-500: #3B82F6;
33 |
34 | $positive: $green-500;
35 | $negative: $red-500;
36 |
37 | $logo-color: #F64646;
38 |
39 | $wordpress-gray: #E0E0E0;
40 | $wordpress-admin-main: var(--wp-admin-theme-color);
41 |
--------------------------------------------------------------------------------
/src/styles/base/themes/__saved-styles-colors.sass:
--------------------------------------------------------------------------------
1 | $white: #FFFFFF
2 |
3 | $sa-gray-100: #F7FAFC
4 | $sa-gray-200: #EDF2F7
5 | $sa-gray-300: #E2E8F0
6 | $sa-gray-400: #CBD5E0
7 | $sa-gray-500: #A0AEC0
8 | $sa-gray-600: #718096
9 | $sa-gray-700: #4A5568
10 |
11 | $green-400: #86EFAC
12 | $green-500: #4ADE80
13 | $green-200: #BBF7D0
14 | $green-100: #DCFCE7
15 |
16 | $blue-100: #DBEAFE
17 |
18 | $yellow-200: #FEF08A
19 | $yellow-400: #FACC15
20 |
21 | $logo-color: #F64646
22 |
23 | $wordpress-gray: #E0E0E0
24 | $wordpress-admin-main: var(--wp-admin-theme-color)
25 |
--------------------------------------------------------------------------------
/src/styles/base/themes/__saved-styles-inspector-theme.scss:
--------------------------------------------------------------------------------
1 | @import './__saved-styles-colors.sass';
2 | @import '../__common.scss';
3 |
4 | //region DEFAULTS
5 | $default-border-color: $sa-gray-400;
6 | $color-positive: $green-400;
7 | $color-inactive: $sa-gray-600;
8 |
9 | $border-radius: 2px;
10 |
11 | $font-size: 95%;
12 |
13 | //endregion
14 |
15 |
16 | //region MIXINS
17 | @mixin default-border($b_color: $default-border-color, $line_width: 1px) {
18 | border: $line_width solid $b_color !important;
19 | }
20 |
21 | //endregion
22 |
23 |
24 | //region EXTENDS
25 | %rounded-corner {
26 | border-radius: $border-radius !important;
27 | }
28 |
29 | %inspector-font-size {
30 | font-size: $font-size;
31 | }
32 |
33 | %active-item-presentation {
34 | @extend %shadow-lg;
35 | transform: scale(1.1);
36 | }
37 |
38 | //endregion
39 |
--------------------------------------------------------------------------------
/vendor/autoload.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
10 | 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
11 | 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
12 | 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
13 | 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
14 | 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
15 | );
16 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_files.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
10 | '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
11 | 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
12 | );
13 |
--------------------------------------------------------------------------------
/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | array($baseDir . '/', $baseDir . '/__tests__/php/unit'),
10 | 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
11 | 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
12 | 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
13 | 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'),
14 | 'GrahamCampbell\\ResultType\\' => array($vendorDir . '/graham-campbell/result-type/src'),
15 | 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'),
16 | );
17 |
--------------------------------------------------------------------------------
/vendor/composer/platform_check.php:
--------------------------------------------------------------------------------
1 | = 70205)) {
8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.';
9 | }
10 |
11 | if ($issues) {
12 | if (!headers_sent()) {
13 | header('HTTP/1.1 500 Internal Server Error');
14 | }
15 | if (!ini_get('display_errors')) {
16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
18 | } elseif (!headers_sent()) {
19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
20 | }
21 | }
22 | trigger_error(
23 | 'Composer detected issues in your platform: ' . implode(' ', $issues),
24 | E_USER_ERROR
25 | );
26 | }
27 |
--------------------------------------------------------------------------------
/vendor/graham-campbell/result-type/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "graham-campbell/result-type",
3 | "description": "An Implementation Of The Result Type",
4 | "keywords": ["result", "result-type", "Result", "Result Type", "Result-Type", "Graham Campbell", "GrahamCampbell"],
5 | "license": "MIT",
6 | "authors": [
7 | {
8 | "name": "Graham Campbell",
9 | "email": "hello@gjcampbell.co.uk",
10 | "homepage": "https://github.com/GrahamCampbell"
11 | }
12 | ],
13 | "require": {
14 | "php": "^7.2.5 || ^8.0",
15 | "phpoption/phpoption": "^1.9.1"
16 | },
17 | "require-dev": {
18 | "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12"
19 | },
20 | "autoload": {
21 | "psr-4": {
22 | "GrahamCampbell\\ResultType\\": "src/"
23 | }
24 | },
25 | "autoload-dev": {
26 | "psr-4": {
27 | "GrahamCampbell\\Tests\\ResultType\\": "tests/"
28 | }
29 | },
30 | "config": {
31 | "preferred-install": "dist"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-ctype/README.md:
--------------------------------------------------------------------------------
1 | Symfony Polyfill / Ctype
2 | ========================
3 |
4 | This component provides `ctype_*` functions to users who run php versions without the ctype extension.
5 |
6 | More information can be found in the
7 | [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
8 |
9 | License
10 | =======
11 |
12 | This library is released under the [MIT license](LICENSE).
13 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-mbstring/README.md:
--------------------------------------------------------------------------------
1 | Symfony Polyfill / Mbstring
2 | ===========================
3 |
4 | This component provides a partial, native PHP implementation for the
5 | [Mbstring](https://php.net/mbstring) extension.
6 |
7 | More information can be found in the
8 | [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
9 |
10 | License
11 | =======
12 |
13 | This library is released under the [MIT license](LICENSE).
14 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-php80/README.md:
--------------------------------------------------------------------------------
1 | Symfony Polyfill / Php80
2 | ========================
3 |
4 | This component provides features added to PHP 8.0 core:
5 |
6 | - [`Stringable`](https://php.net/stringable) interface
7 | - [`fdiv`](https://php.net/fdiv)
8 | - [`ValueError`](https://php.net/valueerror) class
9 | - [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class
10 | - `FILTER_VALIDATE_BOOL` constant
11 | - [`get_debug_type`](https://php.net/get_debug_type)
12 | - [`PhpToken`](https://php.net/phptoken) class
13 | - [`preg_last_error_msg`](https://php.net/preg_last_error_msg)
14 | - [`str_contains`](https://php.net/str_contains)
15 | - [`str_starts_with`](https://php.net/str_starts_with)
16 | - [`str_ends_with`](https://php.net/str_ends_with)
17 | - [`get_resource_id`](https://php.net/get_resource_id)
18 |
19 | More information can be found in the
20 | [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).
21 |
22 | License
23 | =======
24 |
25 | This library is released under the [MIT license](LICENSE).
26 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | #[Attribute(Attribute::TARGET_CLASS)]
13 | final class Attribute
14 | {
15 | public const TARGET_CLASS = 1;
16 | public const TARGET_FUNCTION = 2;
17 | public const TARGET_METHOD = 4;
18 | public const TARGET_PROPERTY = 8;
19 | public const TARGET_CLASS_CONSTANT = 16;
20 | public const TARGET_PARAMETER = 32;
21 | public const TARGET_ALL = 63;
22 | public const IS_REPEATABLE = 64;
23 |
24 | /** @var int */
25 | public $flags;
26 |
27 | public function __construct(int $flags = self::TARGET_ALL)
28 | {
29 | $this->flags = $flags;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) {
13 | class PhpToken extends Symfony\Polyfill\Php80\PhpToken
14 | {
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | if (\PHP_VERSION_ID < 80000) {
13 | interface Stringable
14 | {
15 | /**
16 | * @return string
17 | */
18 | public function __toString();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | if (\PHP_VERSION_ID < 80000) {
13 | class UnhandledMatchError extends Error
14 | {
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php:
--------------------------------------------------------------------------------
1 |
7 | *
8 | * For the full copyright and license information, please view the LICENSE
9 | * file that was distributed with this source code.
10 | */
11 |
12 | if (\PHP_VERSION_ID < 80000) {
13 | class ValueError extends Error
14 | {
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php:
--------------------------------------------------------------------------------
1 |
18 | */
19 | public function load(RepositoryInterface $repository, array $entries);
20 | }
21 |
--------------------------------------------------------------------------------
/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php:
--------------------------------------------------------------------------------
1 |
13 | */
14 | public static function create();
15 | }
16 |
--------------------------------------------------------------------------------
/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php:
--------------------------------------------------------------------------------
1 |
15 | */
16 | public function read(string $name);
17 | }
18 |
--------------------------------------------------------------------------------
/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php:
--------------------------------------------------------------------------------
1 | content = $content;
26 | }
27 |
28 | /**
29 | * Read the content of the environment file(s).
30 | *
31 | * @return string
32 | */
33 | public function read()
34 | {
35 | return $this->content;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/zip/.gitinclude:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DotCamp/ultimate-blocks-legacy/2b16e312c3baef65100147ae9487022d771b81b5/zip/.gitinclude
--------------------------------------------------------------------------------