@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
1 lines • 2.06 kB
Source Map (JSON)
{"version":3,"file":"use-ripple.cjs","names":["onClick: MouseEventHandler<Y>"],"sources":["../../../../src/components/ripple/use-ripple.ts"],"sourcesContent":["\"use client\"\n\nimport type { Key, MouseEventHandler } from \"react\"\nimport { useCallback, useState } from \"react\"\nimport { handlerAll, uuid } from \"../../utils\"\n\nexport interface RippleOptions {\n key: Key\n size: number\n x: number\n y: number\n}\n\nexport interface UseRippleProps<Y = HTMLElement> {\n disabled?: boolean\n onClick?: MouseEventHandler<Y>\n}\n\nexport const useRipple = <Y = HTMLElement>({\n disabled,\n ...rest\n}: UseRippleProps<Y> = {}) => {\n const [ripples, setRipples] = useState<RippleOptions[]>([])\n\n const onClick: MouseEventHandler<Y> = useCallback(\n (ev) => {\n if (disabled) return\n\n const trigger = ev.currentTarget as unknown as Element\n\n const size = Math.max(trigger.clientWidth, trigger.clientHeight)\n const rect = trigger.getBoundingClientRect()\n\n setRipples((prev) => [\n ...prev,\n {\n key: uuid(),\n size,\n x: ev.clientX - rect.x - size / 2,\n y: ev.clientY - rect.y - size / 2,\n },\n ])\n },\n [disabled],\n )\n\n const onClear = useCallback((key: Key) => {\n setRipples((prev) => prev.filter((item) => item.key !== key))\n }, [])\n\n return {\n ripples,\n onClear,\n onClick: handlerAll(onClick, rest.onClick),\n }\n}\n\nexport type UseRippleReturn = ReturnType<typeof useRipple>\n"],"mappings":";;;;;;;;;AAkBA,MAAa,aAA8B,EACzC,SACA,GAAG,SACkB,EAAE,KAAK;CAC5B,MAAM,CAAC,SAAS,kCAAwC,EAAE,CAAC;CAE3D,MAAMA,kCACH,OAAO;AACN,MAAI,SAAU;EAEd,MAAM,UAAU,GAAG;EAEnB,MAAM,OAAO,KAAK,IAAI,QAAQ,aAAa,QAAQ,aAAa;EAChE,MAAM,OAAO,QAAQ,uBAAuB;AAE5C,cAAY,SAAS,CACnB,GAAG,MACH;GACE,kDAAW;GACX;GACA,GAAG,GAAG,UAAU,KAAK,IAAI,OAAO;GAChC,GAAG,GAAG,UAAU,KAAK,IAAI,OAAO;GACjC,CACF,CAAC;IAEJ,CAAC,SAAS,CACX;AAMD,QAAO;EACL;EACA,iCAN2B,QAAa;AACxC,eAAY,SAAS,KAAK,QAAQ,SAAS,KAAK,QAAQ,IAAI,CAAC;KAC5D,EAAE,CAAC;EAKJ,2DAAoB,SAAS,KAAK,QAAQ;EAC3C"}