tdesign-react
Version:
TDesign Component for React
153 lines (147 loc) • 5.93 kB
JavaScript
/**
* tdesign v1.13.2
* (c) 2025 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
var setStyle = require('../_chunks/dep-58719304.js');
var hooks_useConfig = require('./useConfig.js');
var hooks_useAnimation = require('./useAnimation.js');
var _util_style = require('../_chunks/dep-3f65dfe7.js');
require('../config-provider/ConfigContext.js');
require('../_chunks/dep-cc768e34.js');
require('../_chunks/dep-6d4d8660.js');
require('../_chunks/dep-3a869b87.js');
require('../_chunks/dep-ac58e1cc.js');
require('dayjs');
require('../_chunks/dep-7da96a57.js');
require('../_chunks/dep-07b911d8.js');
require('../_chunks/dep-4b02d669.js');
require('../_chunks/dep-f0379c5f.js');
require('../_chunks/dep-ddacd27a.js');
require('../_chunks/dep-028b759d.js');
require('../_chunks/dep-8a116183.js');
require('../_chunks/dep-4671b9bd.js');
require('../_chunks/dep-bed9d73e.js');
require('../_chunks/dep-780eda7b.js');
require('../_chunks/dep-47bdc05f.js');
require('../_chunks/dep-cab13149.js');
require('../_chunks/dep-a30819a4.js');
require('../_chunks/dep-6a7ba247.js');
require('../_chunks/dep-c87d9752.js');
require('../_chunks/dep-bd956a2d.js');
require('../_chunks/dep-0cdb3286.js');
require('../_chunks/dep-865c186c.js');
require('../_chunks/dep-f4e58639.js');
require('../_chunks/dep-781a2854.js');
require('../_chunks/dep-1ef213f8.js');
require('../_chunks/dep-e2c832a5.js');
require('../_chunks/dep-3e2d2665.js');
var period = 200;
var noneRippleBg = "rgba(0, 0, 0, 0)";
var defaultRippleColor = "rgba(0, 0, 0, 0.35)";
var getRippleColor = function getRippleColor(el, fixedRippleColor) {
var _el$dataset;
if (fixedRippleColor) {
return fixedRippleColor;
}
if (el !== null && el !== void 0 && (_el$dataset = el.dataset) !== null && _el$dataset !== void 0 && _el$dataset.ripple) {
var rippleColor = el.dataset.ripple;
return rippleColor;
}
var cssVariable = getComputedStyle(el).getPropertyValue("--ripple-color");
if (cssVariable) {
return cssVariable;
}
return defaultRippleColor;
};
function useRipple(el, fixedRippleColor) {
var _useConfig = hooks_useConfig["default"](),
classPrefix = _useConfig.classPrefix;
var _useAnimation = hooks_useAnimation["default"](),
keepRipple = _useAnimation.keepRipple;
var rippleContainer = React.useMemo(function () {
if (!_util_style.canUseDocument) return null;
var container = document.createElement("div");
container.className = "".concat(classPrefix, "-ripple");
return container;
}, [classPrefix]);
var handleAddRipple = React.useCallback(function (e) {
var rippleColor = getRippleColor(el, fixedRippleColor);
if (e.button !== 0 || !el || !keepRipple) return;
if (el.classList.contains("".concat(classPrefix, "-is-active")) || el.classList.contains("".concat(classPrefix, "-is-disabled")) || el.classList.contains("".concat(classPrefix, "-is-checked")) || el.classList.contains("".concat(classPrefix, "-is-loading"))) return;
var elStyle = getComputedStyle(el);
var elBorder = parseInt(elStyle.borderWidth, 10);
var border = elBorder > 0 ? elBorder : 0;
var width = el.offsetWidth;
var height = el.offsetHeight;
if (rippleContainer.parentNode === null) {
setStyle.setStyle(rippleContainer, {
position: "absolute",
left: "".concat(0 - border, "px"),
top: "".concat(0 - border, "px"),
width: "".concat(width, "px"),
height: "".concat(height, "px"),
borderRadius: elStyle.borderRadius,
pointerEvents: "none",
overflow: "hidden"
});
el.appendChild(rippleContainer);
}
var ripple = document.createElement("div");
ripple.className = "".concat(classPrefix, "-ripple__inner");
setStyle.setStyle(ripple, {
marginTop: "0",
marginLeft: "0",
right: "".concat(width, "px"),
width: "".concat(width + 20, "px"),
height: "100%",
transition: "transform ".concat(period, "ms cubic-bezier(.38, 0, .24, 1), background ").concat(period * 2, "ms linear"),
transform: "skewX(-8deg)",
pointerEvents: "none",
position: "absolute",
zIndex: 0,
backgroundColor: rippleColor,
opacity: "0.9"
});
var elMap = /* @__PURE__ */new WeakMap();
for (var n = el.children.length, i = 0; i < n; ++i) {
var child = el.children[i];
if (child.style.zIndex === "" && child !== rippleContainer) {
child.style.zIndex = "1";
elMap.set(child, true);
}
}
var initPosition = el.style.position ? el.style.position : getComputedStyle(el).position;
if (initPosition === "" || initPosition === "static") {
el.style.position = "relative";
}
rippleContainer.insertBefore(ripple, rippleContainer.firstChild);
setTimeout(function () {
ripple.style.transform = "translateX(".concat(width, "px)");
}, 0);
var _handleClearRipple = function handleClearRipple() {
ripple.style.backgroundColor = noneRippleBg;
if (!el) return;
el.removeEventListener("pointerup", _handleClearRipple, false);
el.removeEventListener("pointerleave", _handleClearRipple, false);
setTimeout(function () {
ripple.remove();
if (rippleContainer.children.length === 0) rippleContainer.remove();
}, period * 2 + 100);
};
el.addEventListener("pointerup", _handleClearRipple, false);
el.addEventListener("pointerleave", _handleClearRipple, false);
}, [classPrefix, el, fixedRippleColor, rippleContainer, keepRipple]);
React.useEffect(function () {
if (!el) return;
el.addEventListener("pointerdown", handleAddRipple, false);
return function () {
el.removeEventListener("pointerdown", handleAddRipple, false);
};
}, [handleAddRipple, fixedRippleColor, el]);
}
exports["default"] = useRipple;
//# sourceMappingURL=useRipple.js.map