UNPKG

@wordpress/block-editor

Version:
89 lines (74 loc) 2.48 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.PaddingVisualizer = PaddingVisualizer; var _element = require("@wordpress/element"); var _isShallowEqual = _interopRequireDefault(require("@wordpress/is-shallow-equal")); var _blockPopover = _interopRequireDefault(require("../components/block-popover")); var _useBlockRefs = require("../components/block-list/use-block-props/use-block-refs"); /** * WordPress dependencies */ /** * Internal dependencies */ function getComputedCSS(element, property) { return element.ownerDocument.defaultView.getComputedStyle(element).getPropertyValue(property); } function PaddingVisualizer({ clientId, attributes, forceShow }) { const blockElement = (0, _useBlockRefs.__unstableUseBlockElement)(clientId); const [style, setStyle] = (0, _element.useState)(); const padding = attributes?.style?.spacing?.padding; (0, _element.useEffect)(() => { if (!blockElement) { return; } setStyle({ borderTopWidth: getComputedCSS(blockElement, 'padding-top'), borderRightWidth: getComputedCSS(blockElement, 'padding-right'), borderBottomWidth: getComputedCSS(blockElement, 'padding-bottom'), borderLeftWidth: getComputedCSS(blockElement, 'padding-left') }); }, [blockElement, padding]); const [isActive, setIsActive] = (0, _element.useState)(false); const valueRef = (0, _element.useRef)(padding); const timeoutRef = (0, _element.useRef)(); const clearTimer = () => { if (timeoutRef.current) { window.clearTimeout(timeoutRef.current); } }; (0, _element.useEffect)(() => { if (!(0, _isShallowEqual.default)(padding, valueRef.current) && !forceShow) { setIsActive(true); valueRef.current = padding; timeoutRef.current = setTimeout(() => { setIsActive(false); }, 400); } return () => { setIsActive(false); clearTimer(); }; }, [padding, forceShow]); if (!isActive && !forceShow) { return null; } return (0, _element.createElement)(_blockPopover.default, { clientId: clientId, __unstableCoverTarget: true, __unstableRefreshSize: padding, __unstablePopoverSlot: "block-toolbar", shift: false }, (0, _element.createElement)("div", { className: "block-editor__padding-visualizer", style: style })); } //# sourceMappingURL=padding.js.map