UNPKG

vuetify

Version:

Vue Material Component Framework

1 lines 21.5 kB
{"version":3,"file":"index.mjs","names":["isObject","keyCodes","stopSymbol","Symbol","DELAY_RIPPLE","transform","el","value","style","webkitTransform","isTouchEvent","e","constructor","name","isKeyboardEvent","calculate","localX","localY","offset","getBoundingClientRect","target","touches","length","clientX","left","clientY","top","radius","scale","_ripple","circle","clientWidth","center","Math","sqrt","clientHeight","centerX","centerY","x","y","ripples","show","enabled","container","document","createElement","animation","appendChild","className","class","size","width","height","computed","window","getComputedStyle","position","dataset","previousPosition","classList","add","activated","String","performance","now","setTimeout","remove","hide","getElementsByClassName","isHiding","diff","Number","delay","max","parentNode","removeChild","isRippleEnabled","rippleShow","element","currentTarget","touched","isTouch","centered","showTimerCommit","showTimer","rippleStop","rippleHide","clearTimeout","type","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyCode","enter","space","keyboardRippleHide","focusRippleHide","updateRipple","binding","wasEnabled","modifiers","stop","addEventListener","passive","removeListeners","removeEventListener","mounted","unmounted","updated","oldValue","Ripple"],"sources":["../../../src/directives/ripple/index.ts"],"sourcesContent":["// Styles\nimport './VRipple.sass'\n\n// Utilities\nimport { isObject, keyCodes } from '@/util'\n\n// Types\nimport type {\n DirectiveBinding,\n} from 'vue'\n\nconst stopSymbol = Symbol('rippleStop')\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { [stopSymbol]?: boolean }\n\nconst DELAY_RIPPLE = 80\n\nfunction transform (el: HTMLElement, value: string) {\n el.style.transform = value\n el.style.webkitTransform = value\n}\n\ninterface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nexport interface RippleDirectiveBinding extends Omit<DirectiveBinding, 'modifiers' | 'value'> {\n value?: boolean | { class: string }\n modifiers: {\n center?: boolean\n circle?: boolean\n stop?: boolean\n }\n}\n\nfunction isTouchEvent (e: VuetifyRippleEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nfunction isKeyboardEvent (e: VuetifyRippleEvent): e is KeyboardEvent {\n return e.constructor.name === 'KeyboardEvent'\n}\n\nconst calculate = (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n) => {\n let localX = 0\n let localY = 0\n\n if (!isKeyboardEvent(e)) {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n\n localX = target.clientX - offset.left\n localY = target.clientY - offset.top\n }\n\n let radius = 0\n let scale = 0.3\n if (el._ripple?.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripples = {\n /* eslint-disable max-statements */\n show (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n ) {\n if (!el?._ripple?.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el?._ripple?.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n if (animation.parentNode?.parentNode === el) el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n },\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: VuetifyRippleEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element?._ripple || element._ripple.touched || e[stopSymbol]) return\n\n // Don't allow the event to trigger ripples on any other elements\n e[stopSymbol] = true\n\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n element._ripple.isTouch = true\n } else {\n // It's possible for touch events to fire\n // as mouse events on Android/iOS, this\n // will skip the event call if it has\n // already been registered as touch\n if (element._ripple.isTouch) return\n }\n\n value.center = element._ripple.centered || isKeyboardEvent(e)\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return\n\n element._ripple.showTimerCommit = () => {\n ripples.show(e, element, value)\n }\n element._ripple.showTimer = window.setTimeout(() => {\n if (element?._ripple?.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n }\n }, DELAY_RIPPLE)\n } else {\n ripples.show(e, element, value)\n }\n}\n\nfunction rippleStop (e: VuetifyRippleEvent) {\n e[stopSymbol] = true\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element?._ripple) return\n\n window.clearTimeout(element._ripple.showTimer)\n\n // The touch interaction occurs before the show timer is triggered.\n // We still want to show ripple effect.\n if (e.type === 'touchend' && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n\n // re-queue ripple hiding\n element._ripple.showTimer = window.setTimeout(() => {\n rippleHide(e)\n })\n return\n }\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripples.hide(element)\n}\n\nfunction rippleCancelShow (e: MouseEvent | TouchEvent) {\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element?._ripple) return\n\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null\n }\n\n window.clearTimeout(element._ripple.showTimer)\n}\n\nlet keyboardRipple = false\n\nfunction keyboardRippleShow (e: KeyboardEvent) {\n if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {\n keyboardRipple = true\n rippleShow(e)\n }\n}\n\nfunction keyboardRippleHide (e: KeyboardEvent) {\n keyboardRipple = false\n rippleHide(e)\n}\n\nfunction focusRippleHide (e: FocusEvent) {\n if (keyboardRipple) {\n keyboardRipple = false\n rippleHide(e)\n }\n}\n\nfunction updateRipple (el: HTMLElement, binding: RippleDirectiveBinding, wasEnabled: boolean) {\n const { value, modifiers } = binding\n const enabled = isRippleEnabled(value)\n if (!enabled) {\n ripples.hide(el)\n }\n\n el._ripple = el._ripple ?? {}\n el._ripple.enabled = enabled\n el._ripple.centered = modifiers.center\n el._ripple.circle = modifiers.circle\n if (isObject(value) && value.class) {\n el._ripple.class = value.class\n }\n\n if (enabled && !wasEnabled) {\n if (modifiers.stop) {\n el.addEventListener('touchstart', rippleStop, { passive: true })\n el.addEventListener('mousedown', rippleStop)\n return\n }\n\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchmove', rippleCancelShow, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n\n el.addEventListener('keydown', keyboardRippleShow)\n el.addEventListener('keyup', keyboardRippleHide)\n\n el.addEventListener('blur', focusRippleHide)\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleShow)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchmove', rippleCancelShow)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('keydown', keyboardRippleShow)\n el.removeEventListener('keyup', keyboardRippleHide)\n el.removeEventListener('dragstart', rippleHide)\n el.removeEventListener('blur', focusRippleHide)\n}\n\nfunction mounted (el: HTMLElement, binding: RippleDirectiveBinding) {\n updateRipple(el, binding, false)\n}\n\nfunction unmounted (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction updated (el: HTMLElement, binding: RippleDirectiveBinding) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport const Ripple = {\n mounted,\n unmounted,\n updated,\n}\n\nexport default Ripple\n"],"mappings":"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"}