UNPKG

@gechiui/components

Version:
165 lines (147 loc) 3.86 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = BoxControlVisualizer; var _element = require("@gechiui/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _boxControlVisualizerStyles = require("./styles/box-control-visualizer-styles"); var _utils = require("./utils"); /** * GeChiUI dependencies */ /** * Internal dependencies */ function BoxControlVisualizer(_ref) { let { children, showValues = _utils.DEFAULT_VISUALIZER_VALUES, values: valuesProp = _utils.DEFAULT_VALUES, ...props } = _ref; const isPositionAbsolute = !children; return (0, _element.createElement)(_boxControlVisualizerStyles.Container, (0, _extends2.default)({}, props, { isPositionAbsolute: isPositionAbsolute, "aria-hidden": "true" }), (0, _element.createElement)(Sides, { showValues: showValues, values: valuesProp }), children); } function Sides(_ref2) { let { showValues = _utils.DEFAULT_VISUALIZER_VALUES, values } = _ref2; const { top, right, bottom, left } = values; return (0, _element.createElement)(_element.Fragment, null, (0, _element.createElement)(Top, { isVisible: showValues.top, value: top }), (0, _element.createElement)(Right, { isVisible: showValues.right, value: right }), (0, _element.createElement)(Bottom, { isVisible: showValues.bottom, value: bottom }), (0, _element.createElement)(Left, { isVisible: showValues.left, value: left })); } function Top(_ref3) { let { isVisible = false, value } = _ref3; const height = value; const animationProps = useSideAnimation(height); const isActive = animationProps.isActive || isVisible; return (0, _element.createElement)(_boxControlVisualizerStyles.TopView, { isActive: isActive, style: { height } }); } function Right(_ref4) { let { isVisible = false, value } = _ref4; const width = value; const animationProps = useSideAnimation(width); const isActive = animationProps.isActive || isVisible; return (0, _element.createElement)(_boxControlVisualizerStyles.RightView, { isActive: isActive, style: { width } }); } function Bottom(_ref5) { let { isVisible = false, value } = _ref5; const height = value; const animationProps = useSideAnimation(height); const isActive = animationProps.isActive || isVisible; return (0, _element.createElement)(_boxControlVisualizerStyles.BottomView, { isActive: isActive, style: { height } }); } function Left(_ref6) { let { isVisible = false, value } = _ref6; const width = value; const animationProps = useSideAnimation(width); const isActive = animationProps.isActive || isVisible; return (0, _element.createElement)(_boxControlVisualizerStyles.LeftView, { isActive: isActive, style: { width } }); } /** * Custom hook that renders the "flash" animation whenever the value changes. * * @param {string} value Value of (box) side. */ function useSideAnimation(value) { const [isActive, setIsActive] = (0, _element.useState)(false); const valueRef = (0, _element.useRef)(value); const timeoutRef = (0, _element.useRef)(); const clearTimer = () => { if (timeoutRef.current) { window.clearTimeout(timeoutRef.current); } }; (0, _element.useEffect)(() => { if (value !== valueRef.current) { setIsActive(true); valueRef.current = value; clearTimer(); timeoutRef.current = setTimeout(() => { setIsActive(false); }, 400); } return () => clearTimer(); }, [value]); return { isActive }; } //# sourceMappingURL=visualizer.js.map