import type { ComputedRef, Plugin, Ref } from 'vue' import { computed, inject, reactive, toRefs } from 'vue' export interface Responsive { wide: ComputedRef tall: ComputedRef width: Ref height: Ref } const responsiveKey = Symbol('responsive') export default { install(app) { function buildResponsive() { const data = reactive({ width: window.innerWidth, height: window.innerHeight, }) const wide = computed(() => data.width >= 1050) const tall = computed(() => data.height >= 350) return { ...toRefs(data), wide, tall, } } const responsive = buildResponsive() app.config.globalProperties.$responsive = responsive app.provide(responsiveKey, responsive) window.addEventListener('resize', () => { responsive.width.value = window.innerWidth responsive.height.value = window.innerHeight }) }, } as Plugin export const useResponsive = () => inject(responsiveKey)