__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ 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 { createElement, useState } from '@wordpress/element'
import { __ } from 'ct-i18n'
import cls from 'classnames'
import OutsideClickHandler from './react-outside-click-handler'

import SpacingInput from './ct-spacing/input'

export const SPACING_STATE_LINKED = 1
export const SPACING_STATE_INDEPENDENT = 2
export const SPACING_STATE_CUSTOM = 3

const backportLegacySpacing = (legacy) => {
	if (legacy === 'auto' || legacy === '') {
		return {
			value: legacy,
			unit: '',
		}
	}

	const maybeNumber = parseFloat(legacy)

	if (isNaN(maybeNumber)) {
		return {
			value: '',
			unit: '',
		}
	}

	return {
		value: maybeNumber,
		unit: legacy.toString().replace(maybeNumber.toString(), ''),
	}
}

const Spacing = ({ value: maybeLegacyValue, option, onChange }) => {
	const [isOpen, setIsOpen] = useState(false)

	const units = [
		{ unit: 'px' },
		{ unit: '%' },
		{ unit: 'em' },
		{ unit: 'rem' },
		{ unit: 'pt' },
	]

	let value = maybeLegacyValue.values
		? maybeLegacyValue
		: {
				values: [
					backportLegacySpacing(maybeLegacyValue.top),
					backportLegacySpacing(maybeLegacyValue.right),
					backportLegacySpacing(maybeLegacyValue.bottom),
					backportLegacySpacing(maybeLegacyValue.left),
				],
				custom: '',
				state: maybeLegacyValue.linked
					? SPACING_STATE_LINKED
					: SPACING_STATE_INDEPENDENT,
		  }

	const currentUnit =
		value.values.find((v) => v.value !== 'auto').unit || units[0].unit

	return (
		<div
			className={cls('ct-option-spacing', {
				linked: value.state === SPACING_STATE_LINKED,
				custom: value.state === SPACING_STATE_CUSTOM,
			})}>
			<SpacingInput
				currentUnit={currentUnit}
				value={value}
				option={option}
				onChange={onChange}
			/>

			<div
				className={cls('ct-spacing-controls ct-value-changer', {
					active: isOpen,
				})}>
				{value.state !== SPACING_STATE_CUSTOM && (
					<span
						className="ct-link-unlink-toggle"
						onClick={(e) => {
							e.preventDefault()

							if (value.state === SPACING_STATE_LINKED) {
								onChange({
									...value,
									state: SPACING_STATE_INDEPENDENT,
								})

								return
							}

							const futureValue = value.values.find((v) => {
								return v.value !== 'auto' && v.value !== ''
							}) || {
								value: '',
								unit: '',
							}

							onChange({
								...value,

								values: [
									value.values[0].value === 'auto'
										? value.values[0]
										: futureValue,

									value.values[1].value === 'auto'
										? value.values[1]
										: futureValue,

									value.values[2].value === 'auto'
										? value.values[2]
										: futureValue,

									value.values[3].value === 'auto'
										? value.values[3]
										: futureValue,
								],

								state: SPACING_STATE_LINKED,
							})
						}}>
						<svg
							width="14"
							height="14"
							viewBox="0 0 24 24"
							fill="currentColor">
							{value.state === SPACING_STATE_LINKED ? (
								<path d="M24,12c0,3.9-3.2,7.1-7.1,7.1h-2.2v-2.1h2.2c2.8,0,5.1-2.3,5.1-5.1s-2.3-5.1-5.1-5.1h-2.2V4.9h2.2 C20.8,4.9,24,8.1,24,12z M2.1,12c0-2.8,2.3-5.1,5.1-5.1h2.2V4.9H7.1C3.2,4.9,0,8.1,0,12s3.2,7.1,7.1,7.1h2.2v-2.1H7.1 C4.3,17.1,2.1,14.8,2.1,12z M8.3,13h7.3V11H8.3V13z"></path>
							) : (
								<path d="M24,12c0,3.9-3.2,7.1-7.1,7.1h-2.2v-2.1h2.2c2.8,0,5.1-2.3,5.1-5.1s-2.3-5.1-5.1-5.1h-1.8L7.5,23.4l-1.2-0.6L8,19.1H7.1 C3.2,19.1,0,15.9,0,12s3.2-7.1,7.1-7.1h2.2v2.1H7.1C4.3,6.9,2,9.2,2,12s2.3,5.1,5.1,5.1h1.8l1.8-4H7.9V11h3.8l4.7-10.3l1.2,0.6 L16,4.9h0.9C20.8,4.9,24,8.1,24,12z"></path>
							)}
						</svg>
					</span>
				)}

				<div
					onClick={() => setIsOpen(!isOpen)}
					className="ct-current-value"
					data-unit={
						value.state === SPACING_STATE_CUSTOM
							? 'custom'
							: currentUnit
					}>
					{value.state === SPACING_STATE_CUSTOM
						? __('Custom', 'blocksy')
						: currentUnit || '―'}
				</div>

				<OutsideClickHandler
					className="ct-units-list"
					onOutsideClick={() => {
						if (!isOpen) {
							return
						}

						setIsOpen(false)
					}}>
					{[
						...units,
						...(value.state === SPACING_STATE_CUSTOM
							? []
							: [{ unit: 'custom' }]),
					]
						.filter(({ unit }) => unit !== currentUnit)
						.map(({ unit }) => (
							<span
								key={unit}
								data-unit={unit}
								onClick={() => {
									if (unit === 'custom') {
										onChange({
											...value,
											state: SPACING_STATE_CUSTOM,
										})

										setIsOpen(false)

										return
									}

									let nonAutoValues = value.values
										.filter((v) => v.value !== 'auto')
										.map((v) => v.value + v.unit)

									const futureState =
										[...new Set(nonAutoValues)].length === 1
											? SPACING_STATE_LINKED
											: SPACING_STATE_INDEPENDENT

									onChange({
										...value,

										values: value.values.map((v) => ({
											...v,
											unit,
										})),

										state: futureState,
									})

									setIsOpen(false)
								}}>
								{unit === 'custom'
									? __('Custom', 'blocksy')
									: unit}
							</span>
						))}
				</OutsideClickHandler>
			</div>
		</div>
	)
}

export default Spacing

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