$48 GRAYBYTE WORDPRESS FILE MANAGER $77

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 104.21.43.35 | ADMIN IP 216.73.216.157
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : mail

/var/softaculous/sitepad/editor/site-data/plugins/pagelayer/js/react/src/components/

HOME
Current File : /var/softaculous/sitepad/editor/site-data/plugins/pagelayer/js/react/src/components//text-shadow.js
import { __ } from '@wordpress/i18n';
import { LabelControl } from './label';
import { useState, useRef, useEffect } from '@wordpress/element';
import { ColorPicker } from '@wordpress/components';

export const TextShadowControl = (props) => {
    const { prop, label, value, setAttributes } = props;
    const { name } = prop['c'];
	
	var values = !pagelayer_empty(value) ? value : ['', '', '', ''];
	
	// Do we have a val ?
	if(pagelayer_is_string(value)){
		values = value.split(',');
	}
	
    const [isColorPickerVisible, setIsColorPickerVisible] = useState(false);
    const [isTextShadowVisible, setIsTextShadowVisible] = useState(false);
    const colorPreviewRef = useRef(null);
    const colorPickerRef = useRef(null);
    const textShadowRef = useRef(null);

    const handleInputChange = (index, newValue) => {
        const newValues = [...values];
        newValues[index] = newValue;
        setAttributes({ [name]: newValues });
    };

    const onChange = (color = '') => {
        handleInputChange(3, color);
    }

    const handleRemoveColor = (e) => {
        handleInputChange(3, '');
        setIsColorPickerVisible(false);

    };
    var blank = 'pagelayer-blank-preview';
    useEffect(() => {
        const handleDocumentClick = (e) => {
            // ColorPicker Handler
            if (
                colorPickerRef.current &&
                !colorPickerRef.current.contains(e.target) &&
                colorPreviewRef.current &&
                !colorPreviewRef.current.contains(e.target)
            ) {
                setIsColorPickerVisible(false);
            }
            // text Shodow Modal Handler
            if (
                textShadowRef.current &&
                !textShadowRef.current.contains(e.target)
            ) {
                setIsTextShadowVisible(false);
            }
        };

        document.addEventListener('click', handleDocumentClick);
        return () => {
            document.removeEventListener('click', handleDocumentClick);
        };
    }, []);

    return (
        <div className="components-base-control pagelayer-base-control">
            <LabelControl {...props} />
            <div className="pagelayer-prop-holder" ref={textShadowRef}>
                <span
                    className="pagelayer-prop-edit"
                    onClick={() => setIsTextShadowVisible(!isTextShadowVisible)}
                >
                    <i className="pli pli-pencil"></i>
                </span>
                {isTextShadowVisible &&
                    <div className="pagelayer-elp-shadow-div">
                        <div className="pagelayer-elp-prop-grp pagelayer-elp-shadow-horizontal">
                            <label className="pagelayer-elp-label">{ __('Horizontal') }</label>
                            <input
                                className="pagelayer-elp-shadow-input"
                                type="number"
                                max="100"
                                min="-100"
                                step="1"
                                name="horizontal"
                                value={values[0]}
                                onChange={(e) => handleInputChange(0, parseFloat(e.target.value))}
                            />
                        </div>
                        <div className="pagelayer-elp-prop-grp pagelayer-elp-shadow-vertical">
                            <label className="pagelayer-elp-label">{ __('Vertical') }</label>
                            <input
                                className="pagelayer-elp-shadow-input"
                                type="number"
                                max="100"
                                min="-100"
                                step="1"
                                name="vertical"
                                value={values[1]}
                                onChange={(e) => handleInputChange(1, parseFloat(e.target.value))}
                            />
                        </div>
                        <div className="pagelayer-elp-prop-grp pagelayer-elp-shadow-blur">
                            <label className="pagelayer-elp-label">{ __('Blur') }</label>
                            <input
                                className="pagelayer-elp-shadow-input"
                                type="number"
                                max="100"
                                min="-100"
                                step="1"
                                name="blur"
                                value={values[2]}
                                onChange={(e) => handleInputChange(2, parseFloat(e.target.value))}
                            />
                        </div>
                        <div className="pagelayer-elp-prop-grp pagelayer-elp-shadow-color">
                            <label className="pagelayer-elp-label">{ __('Color') }</label>
                            <div
                                className="pagelayer-elp-color-div"
                                ref={colorPickerRef}
                            >
                                <div
                                    className={`pagelayer-elp-color-preview ${values[3] === '' ? blank : ''}`}
                                    onClick={() => setIsColorPickerVisible(!isColorPickerVisible)}
                                    style={{ backgroundColor: values[3] }}

                                ></div>
                                <span className="pagelayer-elp-remove-color" onClick={() => { handleRemoveColor() }}>
                                    <i className="pli pli-cross"></i>
                                </span>

                            </div>
                        </div>
                        {isColorPickerVisible && (
                            <div ref={colorPickerRef} className="test">
                                <ColorPicker
                                    color={values[3]}
                                    onChangeComplete={(val) => {
                                        if (val.rgb) {
                                            onChange(
                                                val.rgb.a != 1
                                                    ? "rgba(" +
                                                    val.rgb.r +
                                                    "," +
                                                    val.rgb.g +
                                                    "," +
                                                    val.rgb.b +
                                                    "," +
                                                    val.rgb.a +
                                                    ")"
                                                    : val.hex
                                            );
                                        }
                                    }}
                                    disableAlpha={false}
                                />
                            </div>
                        )}
                    </div>
                }
            </div>
        </div>
    )
}


Current_dir [ NOT WRITEABLE ] Document_root [ NOT WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
21 Feb 2026 2.55 AM
root / root
0755
access.js
1.263 KB
18 Feb 2026 11.32 PM
root / root
0644
box-shadow.js
5.699 KB
18 Feb 2026 11.32 PM
root / root
0644
checkbox.js
0.638 KB
18 Feb 2026 11.32 PM
root / root
0644
color.js
4.903 KB
18 Feb 2026 11.32 PM
root / root
0644
datetime.js
0.977 KB
18 Feb 2026 11.32 PM
root / root
0644
dimension.js
1.818 KB
18 Feb 2026 11.32 PM
root / root
0644
filter.js
2.293 KB
18 Feb 2026 11.32 PM
root / root
0644
font_family.js
1.529 KB
18 Feb 2026 11.32 PM
root / root
0644
gradient.js
4.01 KB
18 Feb 2026 11.32 PM
root / root
0644
html-to-react.js
0.231 KB
18 Feb 2026 11.32 PM
root / root
0644
icon.js
5.162 KB
18 Feb 2026 11.32 PM
root / root
0644
image.js
2.26 KB
18 Feb 2026 11.32 PM
root / root
0644
label.js
1.317 KB
18 Feb 2026 11.32 PM
root / root
0644
link.js
7.388 KB
18 Feb 2026 11.32 PM
root / root
0644
media.js
1.905 KB
18 Feb 2026 11.32 PM
root / root
0644
modal.js
1.811 KB
18 Feb 2026 11.32 PM
root / root
0644
multi-image.js
2.964 KB
18 Feb 2026 11.32 PM
root / root
0644
multiselect.js
2.107 KB
18 Feb 2026 11.32 PM
root / root
0644
padding.js
2.134 KB
18 Feb 2026 11.32 PM
root / root
0644
radio.js
0.753 KB
18 Feb 2026 11.32 PM
root / root
0644
rich_text.js
4.202 KB
18 Feb 2026 11.32 PM
root / root
0644
screen-icon.js
1.081 KB
18 Feb 2026 11.32 PM
root / root
0644
select.js
2.181 KB
18 Feb 2026 11.32 PM
root / root
0644
setting-tabs-control.js
1.946 KB
18 Feb 2026 11.32 PM
root / root
0644
slider.js
1.472 KB
18 Feb 2026 11.32 PM
root / root
0644
spinner.js
0.826 KB
18 Feb 2026 11.32 PM
root / root
0644
text-shadow.js
7.212 KB
18 Feb 2026 11.32 PM
root / root
0644
textarea.js
0.677 KB
18 Feb 2026 11.32 PM
root / root
0644
typography.js
17.443 KB
18 Feb 2026 11.32 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025 CONTACT ME
Static GIF