import type { Handle } from '@remix-run/ui' import { css, on, ref } from '@remix-run/ui' import { animateEntrance, animateExit } from '@remix-run/ui/animation' type Ripple = { id: number x: number y: number size: number } export function MaterialRipple(handle: Handle) { let ripples: Ripple[] = [] let idCounter = 0 let buttonEl: HTMLButtonElement | null = null function createRipple(originX: number, originY: number) { if (!buttonEl) return let rect = buttonEl.getBoundingClientRect() let localX = originX - rect.left let localY = originY - rect.top let dx = Math.max(localX, rect.width - localX) let dy = Math.max(localY, rect.height - localY) let radius = Math.sqrt(dx * dx + dy * dy) let size = radius * 2 let id = ++idCounter ripples = [...ripples, { id, x: localX, y: localY, size }] handle.update() } function removeAllRipples() { if (ripples.length > 0) { ripples = [] handle.update() } } function createCenteredRipple() { if (!buttonEl) return let rect = buttonEl.getBoundingClientRect() createRipple(rect.left + rect.width / 2, rect.top + rect.height / 2) } return () => ( ) }