__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
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
| 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 |
|