/** * @typedef RippleEffectOptions * @prop {string} [color] Default "currentColor" * @prop {number} [hoveredOpacity] Opacity for hovered layer. Default 0.08 * @prop {number} [focusedOpacity] Opacity for focused layer. Default 0.08 * @prop {number} [pressedOpacity] Opacity for pressed layer. Default 0.12 * @prop {number} [duration] ripple effect animation duration in milliseconds. Default 400. * @prop {string} [easing] ripple effect animation timing function Default ease-in. * @prop {number} [exitdelay] ripple effect exit delay in milliseconds. Default 0. * @prop {boolean} [unbounded] If true, the ripple effect overflow will be visible. Default false, * @prop {boolean} [autoexit] If true, the ripple effect wouldn't exit until mouseup or touchend event. Default true. * @prop {boolean} [rounded] If true, the ripple effect boundary will become perfect circle. * @prop {boolean} [centered] If true, the ripple effect will always be triggered from center of target element instead of touched position. * @prop {boolean} [keydown] If true, the ripple effect will be triggered by keydown event. Default true * @prop {HTMLElement} [trigger] Set different trigger element, by default trigger element is same as target */ export default class RippleEffect { /** * @param {HTMLElement} target * @param {RippleEffectOptions} options * @return {RippleEffect} */ static attachTo(target: HTMLElement, options: RippleEffectOptions): RippleEffect; /** @type {RippleEffectOptions} */ static defaultOptions: RippleEffectOptions; /** * @param {HTMLElement} target * @param {?RippleEffectOptions=} [options] */ constructor(target: HTMLElement, options?: (RippleEffectOptions | null) | undefined); /** @type {(() => void)[]} */ _destroy_tasks: (() => void)[]; /** @type {Document} **/ document: Document; /** @type {RippleEffectOptions} */ options: RippleEffectOptions; target: HTMLElement; wrapper: HTMLSpanElement; focusedLayer: HTMLSpanElement; hoveredLayer: HTMLSpanElement; /** * Trigger a new ripple effect * @param {number} x * @param {number} y * @param {((exit: () => void) => void)} [exitFn] If exitFn is given, the created ripple effect will not exit even after enter animation is finished. You need to call the exit function passed to exitFn as a first argument. */ trigger(x: number, y: number, exitFn?: ((exit: () => void) => void)): Promise; destroy(): void; } export type RippleEffectOptions = { /** * Default "currentColor" */ color?: string; /** * Opacity for hovered layer. Default 0.08 */ hoveredOpacity?: number; /** * Opacity for focused layer. Default 0.08 */ focusedOpacity?: number; /** * Opacity for pressed layer. Default 0.12 */ pressedOpacity?: number; /** * ripple effect animation duration in milliseconds. Default 400. */ duration?: number; /** * ripple effect animation timing function Default ease-in. */ easing?: string; /** * ripple effect exit delay in milliseconds. Default 0. */ exitdelay?: number; /** * If true, the ripple effect overflow will be visible. Default false, */ unbounded?: boolean; /** * If true, the ripple effect wouldn't exit until mouseup or touchend event. Default true. */ autoexit?: boolean; /** * If true, the ripple effect boundary will become perfect circle. */ rounded?: boolean; /** * If true, the ripple effect will always be triggered from center of target element instead of touched position. */ centered?: boolean; /** * If true, the ripple effect will be triggered by keydown event. Default true */ keydown?: boolean; /** * Set different trigger element, by default trigger element is same as target */ trigger?: HTMLElement; };