import { createElement, createPortal, useContext, Fragment, useState, Component, useRef } from '@wordpress/element' import { maybeTransformUnorderedChoices } from '../helpers/parse-choices.js' import classnames from 'classnames' import { Transition } from 'react-spring' import bezierEasing from 'bezier-easing' import OutsideClickHandler from './react-outside-click-handler' import { __ } from 'ct-i18n' const InlineVisibility = ({ option, value, onChange }) => { return ( ) } const VisibilityModal = ({ option, value, onChange }) => { const [{ isPicking, isTransitioning }, setAnimationState] = useState({ isPicking: null, isTransitioning: null }) const stopTransitioning = () => setAnimationState({ isPicking, isTransitioning: false }) const el = useRef() return ( { if (!isPicking) { return } setAnimationState({ isTransitioning: true, isPicking: null }) }} wrapperProps={{ ref: el, onClick: e => { e.preventDefault() setAnimationState({ isTransitioning: true, isPicking: true }) } }}> open visibility {(isTransitioning || isPicking) && createPortal( { stopTransitioning() }} config={{ duration: 100, easing: bezierEasing(0.25, 0.1, 0.25, 1.0) }} from={ isPicking ? { transform: 'scale3d(0.95, 0.95, 1)', opacity: 0 } : { opacity: 1 } } enter={ isPicking ? { transform: 'scale3d(1, 1, 1)', opacity: 1 } : { opacity: 1 } } leave={ isPicking ? { transform: 'scale3d(0.95, 0.95, 1)', opacity: 0 } : { opacity: 1 } }> {isPicking => isPicking && (props => (
{ e.preventDefault() e.stopPropagation() }} onMouseDownCapture={e => { e.nativeEvent.stopImmediatePropagation() e.nativeEvent.stopPropagation() }} onMouseUpCapture={e => { e.nativeEvent.stopImmediatePropagation() e.nativeEvent.stopPropagation() }}>
)) }
, el.current.closest('.ct-labeled-group-item') ? el.current .closest('.ct-labeled-group-item') .querySelector('.ct-visibility-modal-wrapper') : el.current.closest('.ct-single-palette') ? el.current .closest('.ct-single-palette') .querySelector('.ct-visibility-modal-wrapper') : el.current.closest('.ct-visibility-modal-wrapper') ? el.current.closest('.ct-visibility-modal-wrapper') : el.current .closest('.ct-control') .querySelector('.ct-visibility-modal-wrapper') )}
) } const Visibility = ({ option, option: { // inline | modal view = 'inline' }, value, onChange }) => { if (view === 'inline') { return ( ) } return } Visibility.hiddenResponsive = true Visibility.ControlEnd = () =>
export default Visibility