@trail-ui/react
Version:
61 lines (59 loc) • 2.13 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/ripple/use-ripple.ts
var use_ripple_exports = {};
__export(use_ripple_exports, {
useRipple: () => useRipple
});
module.exports = __toCommonJS(use_ripple_exports);
var import_react = require("react");
function useRipple(props = {}) {
const { removeAfter = 1e3, ...otherProps } = props;
const [ripples, setRipples] = (0, import_react.useState)([]);
(0, import_react.useEffect)(() => {
const timeoutIds = ripples.map(
(_, i) => setTimeout(() => {
setRipples((prevState) => prevState.filter((_2, index) => index !== i));
}, removeAfter)
// remove after 1s
);
return () => {
timeoutIds.forEach((id) => clearTimeout(id));
};
}, [removeAfter, ripples]);
const onClick = (0, import_react.useCallback)((event) => {
const trigger = event.currentTarget;
const size = Math.max(trigger.clientWidth, trigger.clientHeight);
const rect = trigger.getBoundingClientRect();
setRipples((prevRipples) => [
...prevRipples,
{
key: (/* @__PURE__ */ new Date()).getTime(),
size,
x: event.clientX - rect.x - size / 2,
y: event.clientY - rect.y - size / 2
}
]);
}, []);
return { ripples, onClick, ...otherProps };
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useRipple
});