__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ 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,
	createPortal,
	Component,
	useRef,
	useReducer,
	useEffect,
	useMemo,
	useCallback,
	useState,
} from '@wordpress/element'
import classnames from 'classnames'
import TypographyModal from './typography/TypographyModal'
import OutsideClickHandler from './react-outside-click-handler'
import { humanizeVariations, familyForDisplay } from './typography/helpers'
import { maybePromoteScalarValueIntoResponsive } from '../../customizer/components/responsive-controls'

import usePopoverMaker from '../helpers/usePopoverMaker'

import { Transition } from 'react-spring'
import bezierEasing from 'bezier-easing'

import { __ } from 'ct-i18n'

const getLeftForEl = (modal, el) => {
	if (!modal) return
	if (!el) return

	let style = getComputedStyle(modal)

	let wrapperLeft = parseFloat(style.left)

	el = el.getBoundingClientRect()

	return {
		'--option-modal-arrow-position': `${
			el.left + el.width / 2 - wrapperLeft - 6
		}px`,
	}
}

const Typography = ({
	option: { label = '', desc = '', attr = {} },
	option,
	value,
	device,
	onChange,
}) => {
	// const [isOpen, setIsOpen] = useState(false)

	// options | fonts | variations | search
	const [currentViewCache, setCurrentViewCache] = useState('_:_')

	const [isConfirmingGdpr, setIsConfirmingGdpr] = useState(false)

	const typographyWrapper = useRef()

	let [currentView, previousView] = useMemo(
		() => currentViewCache.split(':'),
		[currentViewCache]
	)

	const setCurrentView = useCallback(
		(newView) => setCurrentViewCache(`${newView}:${currentView}`),
		[currentView]
	)

	const [{ isOpen, isTransitioning }, setModalState] = useState({
		isOpen: false,
		isTransitioning: false,
	})

	const { styles, popoverProps } = usePopoverMaker({
		ref: typographyWrapper,
		defaultHeight: 430,
		shouldCalculate: isTransitioning || isOpen,
	})

	const setIsOpen = (isOpen) => {
		setModalState((state) => ({
			...state,
			isOpen,
			isTransitioning: true,
		}))
	}

	const stopTransitioning = () =>
		setModalState((state) => ({
			...state,
			isTransitioning: false,
		}))

	const fontFamilyRef = useRef()
	const fontSizeRef = useRef()
	const fontWeightRef = useRef()
	const dotsRef = useRef()

	const confirmationRef = useRef()

	const arrowLeft = useMemo(() => {
		const view = currentView

		const futureRef =
			view === 'options'
				? fontSizeRef.current
				: view === 'fonts'
				? fontFamilyRef.current
				: view === 'variations'
				? fontWeightRef.current
				: fontSizeRef.current

		return (
			popoverProps.ref &&
			popoverProps.ref.current &&
			getLeftForEl(popoverProps.ref.current, futureRef)
		)
	}, [
		isOpen,
		currentView,
		popoverProps.ref,
		popoverProps.ref && popoverProps.ref.current,
		fontFamilyRef && fontFamilyRef.current,
		fontWeightRef && fontWeightRef.current,
		fontSizeRef && fontSizeRef.current,
		dotsRef && dotsRef.current,
	])

	let visualFontSize =
		maybePromoteScalarValueIntoResponsive(value['size'])[device] ===
		'CT_CSS_SKIP_RULE'
			? __('Default Size', 'blocksy')
			: maybePromoteScalarValueIntoResponsive(value['size'])[device]

	let currentFontSizeUnit = maybePromoteScalarValueIntoResponsive(
		value['size']
	)
		[device].toString()
		.replace(/[0-9]/g, '')
		.replace(/\-/g, '')
		.replace(/\./g, '')
		.replace('CT_CSS_SKIP_RULE', '')

	let unitsList = ['px', 'em', 'rem', 'pt', 'vw']

	if (
		maybePromoteScalarValueIntoResponsive(value['size'])[device] !==
			'CT_CSS_SKIP_RULE' &&
		unitsList.indexOf(currentFontSizeUnit) === -1
	) {
		visualFontSize = __('Custom', 'blocksy')
	}

	return (
		<div className={classnames('ct-typography', {})}>
			<OutsideClickHandler
				disabled={!isOpen}
				useCapture={false}
				className="ct-typohraphy-value"
				additionalRefs={[popoverProps.ref, confirmationRef]}
				onOutsideClick={() => {
					if (isConfirmingGdpr) {
						return
					}
					setIsOpen(false)
				}}
				wrapperProps={{
					ref: typographyWrapper,
					onClick: (e) => {
						e.preventDefault()

						if (isOpen) {
							setCurrentView('options')
							return
						}

						setCurrentViewCache('options:_')
						setIsOpen('options')
					},
				}}>
				<div>
					<span
						onClick={(e) => {
							e.stopPropagation()

							if (isOpen) {
								setCurrentView('fonts')
								return
							}

							setCurrentViewCache('fonts:_')
							setIsOpen('fonts')
						}}
						className="ct-font"
						ref={fontFamilyRef}>
						<span>
							{value.family === 'Default'
								? __('Default Family', 'blocksy')
								: familyForDisplay(value.family)}
						</span>
					</span>
					<i>/</i>
					<span
						onClick={(e) => {
							e.stopPropagation()

							if (isOpen) {
								setCurrentView('options')
								return
							}

							setCurrentViewCache('options:_')
							setIsOpen('font_size')
						}}
						ref={fontSizeRef}
						className="ct-size">
						<span>{visualFontSize}</span>
					</span>
					<i>/</i>
					<span
						ref={fontWeightRef}
						onClick={(e) => {
							e.stopPropagation()

							if (isOpen) {
								setCurrentView('variations')
								return
							}

							setCurrentViewCache('variations:_')
							setIsOpen('variations')
						}}
						className="ct-weight">
						<span>{humanizeVariations(value.variation)}</span>
					</span>
				</div>

				<a ref={dotsRef} />
			</OutsideClickHandler>

			{(isTransitioning || isOpen) &&
				createPortal(
					<Transition
						items={isOpen}
						onRest={(isOpen) => {
							stopTransitioning()
						}}
						config={{
							duration: 100,
							easing: bezierEasing(0.25, 0.1, 0.25, 1.0),
						}}
						from={
							isOpen
								? {
										transform: 'scale3d(0.95, 0.95, 1)',
										opacity: 0,
								  }
								: { opacity: 1 }
						}
						enter={
							isOpen
								? {
										transform: 'scale3d(1, 1, 1)',
										opacity: 1,
								  }
								: {
										opacity: 1,
								  }
						}
						leave={
							!isOpen
								? {
										transform: 'scale3d(0.95, 0.95, 1)',
										opacity: 0,
								  }
								: {
										opacity: 1,
								  }
						}>
						{(style, item) => {
							if (!item) {
								return null
							}

							return (
								<TypographyModal
									isConfirmingGdpr={isConfirmingGdpr}
									setIsConfirmingGdpr={setIsConfirmingGdpr}
									confirmationRef={confirmationRef}
									wrapperProps={{
										style: {
											...style,
											...styles,
											...arrowLeft,
										},
										...popoverProps,
									}}
									onChange={onChange}
									value={value}
									option={option}
									initialView={item}
									setInititialView={(initialView) =>
										setIsOpen(initialView)
									}
									currentView={currentView}
									previousView={previousView}
									setCurrentView={setCurrentView}
								/>
							)

							/*
							isOpen &&
							((props) => (
								<TypographyModal
									wrapperProps={{
										style: {
											...props,
											...styles,
											...arrowLeft,
										},
										...popoverProps,
									}}
									onChange={onChange}
									value={value}
									option={option}
									initialView={isOpen}
									setInititialView={(initialView) =>
										setIsOpen(initialView)
									}
									currentView={currentView}
									previousView={previousView}
									setCurrentView={setCurrentView}
								/>
							))
                            */
						}}
					</Transition>,
					document.body
				)}
		</div>
	)
}

export default Typography

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