|
import type { DevtoolsBackend } from '@vue-devtools/app-backend-api' |
|
import type { ComponentInstance } from '@vue/devtools-api' |
|
|
|
export async function flashComponent(instance: ComponentInstance, backend: DevtoolsBackend) { |
|
const bounds = await backend.api.getComponentBounds(instance) |
|
if (bounds) { |
|
let overlay: HTMLDivElement = instance.__VUE_DEVTOOLS_FLASH |
|
if (!overlay) { |
|
overlay = document.createElement('div') |
|
instance.__VUE_DEVTOOLS_FLASH = overlay |
|
overlay.style.border = '2px rgba(65, 184, 131, 0.7) solid' |
|
overlay.style.position = 'fixed' |
|
overlay.style.zIndex = '99999999999998' |
|
overlay.style.pointerEvents = 'none' |
|
overlay.style.borderRadius = '3px' |
|
overlay.style.boxSizing = 'border-box' |
|
document.body.appendChild(overlay) |
|
} |
|
overlay.style.opacity = '1' |
|
overlay.style.transition = null |
|
overlay.style.width = `${Math.round(bounds.width)}px` |
|
overlay.style.height = `${Math.round(bounds.height)}px` |
|
overlay.style.left = `${Math.round(bounds.left)}px` |
|
overlay.style.top = `${Math.round(bounds.top)}px` |
|
requestAnimationFrame(() => { |
|
overlay.style.transition = 'opacity 1s' |
|
overlay.style.opacity = '0' |
|
}) |
|
clearTimeout((overlay as any)._timer) |
|
;(overlay as any)._timer = setTimeout(() => { |
|
document.body.removeChild(overlay) |
|
instance.__VUE_DEVTOOLS_FLASH = null |
|
}, 1000) |
|
} |
|
} |
|
|