UNPKG

primereact

Version:

PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime

112 lines (104 loc) 4.34 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var PrimeReact = require('primereact/api'); var hooks = require('primereact/hooks'); var utils = require('primereact/utils'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n["default"] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/_interopNamespace(React); var PrimeReact__default = /*#__PURE__*/_interopDefaultLegacy(PrimeReact); var Ripple = /*#__PURE__*/React__namespace.memo( /*#__PURE__*/React__namespace.forwardRef(function () { var inkRef = React__namespace.useRef(null); var targetRef = React__namespace.useRef(null); var getTarget = function getTarget() { return inkRef.current && inkRef.current.parentElement; }; var bindEvents = function bindEvents() { if (targetRef.current) { targetRef.current.addEventListener('mousedown', onMouseDown); utils.DomHandler.isTouchDevice() && targetRef.current.addEventListener('touchstart', onTouchStart); } }; var unbindEvents = function unbindEvents() { if (targetRef.current) { targetRef.current.removeEventListener('mousedown', onMouseDown); utils.DomHandler.isTouchDevice() && targetRef.current.removeEventListener('touchstart', onTouchStart); } }; var onTouchStart = function onTouchStart(event) { var offset = utils.DomHandler.getOffset(targetRef.current); var offsetX = event.targetTouches[0].pageX - offset.left + document.body.scrollTop - utils.DomHandler.getWidth(inkRef.current) / 2; var offsetY = event.targetTouches[0].pageY - offset.top + document.body.scrollLeft - utils.DomHandler.getHeight(inkRef.current) / 2; activateRipple(offsetX, offsetY); }; var onMouseDown = function onMouseDown(event) { if (utils.DomHandler.isTouchDevice()) { // already started ripple with onTouchStart return; } var offset = utils.DomHandler.getOffset(targetRef.current); var offsetX = event.pageX - offset.left + document.body.scrollTop - utils.DomHandler.getWidth(inkRef.current) / 2; var offsetY = event.pageY - offset.top + document.body.scrollLeft - utils.DomHandler.getHeight(inkRef.current) / 2; activateRipple(offsetX, offsetY); }; var activateRipple = function activateRipple(offsetX, offsetY) { if (!inkRef.current || getComputedStyle(inkRef.current, null).display === 'none') { return; } utils.DomHandler.removeClass(inkRef.current, 'p-ink-active'); if (!utils.DomHandler.getHeight(inkRef.current) && !utils.DomHandler.getWidth(inkRef.current)) { var d = Math.max(utils.DomHandler.getOuterWidth(targetRef.current), utils.DomHandler.getOuterHeight(targetRef.current)); inkRef.current.style.height = d + 'px'; inkRef.current.style.width = d + 'px'; } inkRef.current.style.top = offsetY + 'px'; inkRef.current.style.left = offsetX + 'px'; utils.DomHandler.addClass(inkRef.current, 'p-ink-active'); }; var onAnimationEnd = function onAnimationEnd(event) { utils.DomHandler.removeClass(event.currentTarget, 'p-ink-active'); }; hooks.useMountEffect(function () { if (inkRef.current) { targetRef.current = getTarget(); bindEvents(); } }); hooks.useUpdateEffect(function () { if (inkRef.current && !targetRef.current) { targetRef.current = getTarget(); bindEvents(); } }); hooks.useUnmountEffect(function () { if (inkRef.current) { targetRef.current = null; unbindEvents(); } }); return PrimeReact__default["default"].ripple ? /*#__PURE__*/React__namespace.createElement("span", { role: "presentation", ref: inkRef, className: "p-ink", onAnimationEnd: onAnimationEnd }) : null; })); Ripple.displayName = 'Ripple'; exports.Ripple = Ripple;