UNPKG

tdesign-vue-next

Version:
151 lines (145 loc) 6 kB
/** * tdesign v1.11.5 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var Vue = require('vue'); var hooks_useKeepAnimation = require('./useKeepAnimation.js'); var hooks_useConfig = require('./useConfig.js'); var setStyle = require('../_chunks/dep-b1b8272b.js'); require('../config-provider/hooks/useConfig.js'); require('../_chunks/dep-b4c4a54b.js'); require('../_chunks/dep-f8ff548f.js'); require('@babel/runtime/helpers/typeof'); require('../_chunks/dep-30fb1b25.js'); require('dayjs'); require('../_chunks/dep-b6c192db.js'); require('../_chunks/dep-ba2090c8.js'); require('../_chunks/dep-b27d3215.js'); require('../_chunks/dep-ed572eb3.js'); require('../_chunks/dep-047617bf.js'); require('../_chunks/dep-bbe343d7.js'); require('../_chunks/dep-0a510359.js'); require('../_chunks/dep-50a41d31.js'); require('../_chunks/dep-be3c3d53.js'); require('../_chunks/dep-0c2ad01b.js'); require('../_chunks/dep-5ad8a2ab.js'); require('../_chunks/dep-8b98fa07.js'); require('../_chunks/dep-b0b4fff1.js'); require('../_chunks/dep-7a21da5b.js'); require('../_chunks/dep-49fa220e.js'); require('../_chunks/dep-02ebb419.js'); require('../_chunks/dep-feae46a3.js'); require('../_chunks/dep-abf21389.js'); require('../_chunks/dep-7f32423d.js'); require('../_chunks/dep-7c9e3d93.js'); require('../_chunks/dep-61a7e281.js'); require('../_chunks/dep-ecbaedee.js'); require('../_chunks/dep-9de7d250.js'); require('../_chunks/dep-6f8a66a3.js'); require('../_chunks/dep-b8b9c2a3.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 rippleContainer = Vue.ref(null); var classPrefix = hooks_useConfig.usePrefixClass(); var _useKeepAnimation = hooks_useKeepAnimation["default"](), keepRipple = _useKeepAnimation.keepRipple; var handleAddRipple = function handleAddRipple(e) { var dom = el.value; var rippleColor = getRippleColor(dom, fixedRippleColor === null || fixedRippleColor === void 0 ? void 0 : fixedRippleColor.value); if (e.button !== 0 || !el || !keepRipple) return; if (dom.classList.contains("".concat(classPrefix.value, "-is-active")) || dom.classList.contains("".concat(classPrefix.value, "-is-disabled")) || dom.classList.contains("".concat(classPrefix.value, "-is-checked")) || dom.classList.contains("".concat(classPrefix.value, "-is-loading"))) return; var elStyle = getComputedStyle(dom); var elBorder = parseInt(elStyle.borderWidth, 10); var border = elBorder > 0 ? elBorder : 0; var width = dom.offsetWidth; var height = dom.offsetHeight; if (rippleContainer.value.parentNode === null) { setStyle.setStyle(rippleContainer.value, { 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" }); dom.appendChild(rippleContainer.value); } var ripple = document.createElement("div"); 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 = dom.children.length, i = 0; i < n; ++i) { var child = dom.children[i]; if (child.style.zIndex === "" && child !== rippleContainer.value) { child.style.zIndex = "1"; elMap.set(child, true); } } var initPosition = dom.style.position ? dom.style.position : getComputedStyle(dom).position; if (initPosition === "" || initPosition === "static") { dom.style.position = "relative"; } rippleContainer.value.insertBefore(ripple, rippleContainer.value.firstChild); setTimeout(function () { ripple.style.transform = "translateX(".concat(width, "px)"); }, 0); var _handleClearRipple = function handleClearRipple() { ripple.style.backgroundColor = noneRippleBg; if (!el.value) return; el.value.removeEventListener("pointerup", _handleClearRipple, false); el.value.removeEventListener("pointerleave", _handleClearRipple, false); setTimeout(function () { ripple.remove(); if (rippleContainer.value.children.length === 0) rippleContainer.value.remove(); }, period * 2 + 100); }; el.value.addEventListener("pointerup", _handleClearRipple, false); el.value.addEventListener("pointerleave", _handleClearRipple, false); }; Vue.onMounted(function () { var dom = el === null || el === void 0 ? void 0 : el.value; if (!dom) return; rippleContainer.value = document.createElement("div"); dom.addEventListener("pointerdown", handleAddRipple, false); }); Vue.onUnmounted(function () { var _el$value; el === null || el === void 0 || (_el$value = el.value) === null || _el$value === void 0 || _el$value.removeEventListener("pointerdown", handleAddRipple, false); }); } exports["default"] = useRipple; //# sourceMappingURL=useRipple.js.map