{"version":3,"file":"display.cjs","sources":["../display.ts"],"sourcesContent":["import { App, inject, InjectionKey, nextTick, reactive, ref, ToRefs, toRefs, watchEffect } from \"vue\";\n\nimport { DisplayInstance, DisplayOptions, IN_BROWSER } from \"./utils\";\n\nconst DisplaySymbol: InjectionKey<ToRefs<DisplayInstance>> = Symbol.for(\"torusui:display\");\n\nconst defaultDisplayOptions: DisplayOptions = {\n  thresholds: {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920,\n    xxl: 2560,\n  },\n};\n\nfunction getClientWidth(isHydrate?: boolean) {\n  return IN_BROWSER && !isHydrate ? window.innerWidth : 0;\n}\n\nfunction getClientHeight(isHydrate?: boolean) {\n  return IN_BROWSER && !isHydrate ? window.innerHeight : 0;\n}\n\nexport function createDisplay(options: DisplayOptions = defaultDisplayOptions) {\n  const install = (app: App) => {\n    const setup = (isHydrate?: boolean): ToRefs<DisplayInstance> => {\n      const { thresholds } = options;\n\n      const height = ref(getClientHeight(isHydrate));\n      const state = reactive({} as DisplayInstance);\n      const width = ref(getClientWidth(isHydrate));\n\n      function onResize() {\n        height.value = getClientHeight();\n        width.value = getClientWidth();\n      }\n\n      if (isHydrate) {\n        nextTick(() => onResize());\n      }\n\n      watchEffect(() => {\n        const xs = width.value < thresholds.sm;\n        const sm = width.value < thresholds.md && !xs;\n        const md = width.value < thresholds.lg && !(sm || xs);\n        const lg = width.value < thresholds.xl && !(md || sm || xs);\n        const xl = width.value < thresholds.xxl && !(lg || md || sm || xs);\n        const xxl = width.value >= thresholds.xxl;\n\n        state.xs = xs;\n        state.sm = sm;\n        state.md = md;\n        state.lg = lg;\n        state.xl = xl;\n        state.xxl = xxl;\n        state.smAndUp = !xs;\n        state.mdAndUp = !(xs || sm);\n        state.lgAndUp = !(xs || sm || md);\n        state.xlAndUp = !(xs || sm || md || lg);\n        state.smAndDown = !(md || lg || xl || xxl);\n        state.mdAndDown = !(lg || xl || xxl);\n        state.lgAndDown = !(xl || xxl);\n        state.xlAndDown = !xxl;\n        state.height = height.value;\n        state.width = width.value;\n      });\n\n      if (IN_BROWSER) {\n        window.addEventListener(\"resize\", onResize, { passive: true });\n      }\n\n      return toRefs(state);\n    };\n\n    const { mount } = app;\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    app.mount = (rootContainer: any, isHydrate?: boolean, isSVG?: boolean) => {\n      app.provide(DisplaySymbol, setup(isHydrate));\n      const ret = mount(rootContainer, isHydrate, isSVG);\n      app.mount = mount;\n      return ret;\n    };\n  };\n\n  return { install };\n}\n\nexport function useDisplay() {\n  const display = inject(DisplaySymbol);\n\n  if (!display) throw new Error(\"Could not find display injection\");\n\n  return display;\n}\n"],"names":["DisplaySymbol","defaultDisplayOptions","getClientWidth","isHydrate","IN_BROWSER","getClientHeight","createDisplay","options","app","setup","thresholds","height","ref","state","reactive","width","onResize","nextTick","watchEffect","xs","sm","md","lg","xl","xxl","toRefs","mount","rootContainer","isSVG","ret","useDisplay","display","inject"],"mappings":"0IAIMA,EAAuD,OAAO,IAAI,iBAAiB,EAEnFC,EAAwC,CAC5C,WAAY,CACV,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,IAAK,IAAA,CAET,EAEA,SAASC,EAAeC,EAAqB,CAC3C,OAAOC,EAAAA,YAAc,CAACD,EAAY,OAAO,WAAa,CACxD,CAEA,SAASE,EAAgBF,EAAqB,CAC5C,OAAOC,EAAAA,YAAc,CAACD,EAAY,OAAO,YAAc,CACzD,CAEO,SAASG,EAAcC,EAA0BN,EAAuB,CA6D7E,MAAO,CAAE,QA5DQO,GAAa,CAC5B,MAAMC,EAASN,GAAiD,CAC9D,KAAM,CAAE,WAAAO,GAAeH,EAEjBI,EAASC,EAAAA,IAAIP,EAAgBF,CAAS,CAAC,EACvCU,EAAQC,EAAAA,SAAS,EAAqB,EACtCC,EAAQH,EAAAA,IAAIV,EAAeC,CAAS,CAAC,EAE3C,SAASa,GAAW,CAClBL,EAAO,MAAQN,EAAA,EACfU,EAAM,MAAQb,EAAA,CAChB,CAEA,OAAIC,GACFc,EAAAA,SAAS,IAAMD,GAAU,EAG3BE,EAAAA,YAAY,IAAM,CAChB,MAAMC,EAAKJ,EAAM,MAAQL,EAAW,GAC9BU,EAAKL,EAAM,MAAQL,EAAW,IAAM,CAACS,EACrCE,EAAKN,EAAM,MAAQL,EAAW,IAAM,EAAEU,GAAMD,GAC5CG,EAAKP,EAAM,MAAQL,EAAW,IAAM,EAAEW,GAAMD,GAAMD,GAClDI,EAAKR,EAAM,MAAQL,EAAW,KAAO,EAAEY,GAAMD,GAAMD,GAAMD,GACzDK,EAAMT,EAAM,OAASL,EAAW,IAEtCG,EAAM,GAAKM,EACXN,EAAM,GAAKO,EACXP,EAAM,GAAKQ,EACXR,EAAM,GAAKS,EACXT,EAAM,GAAKU,EACXV,EAAM,IAAMW,EACZX,EAAM,QAAU,CAACM,EACjBN,EAAM,QAAU,EAAEM,GAAMC,GACxBP,EAAM,QAAU,EAAEM,GAAMC,GAAMC,GAC9BR,EAAM,QAAU,EAAEM,GAAMC,GAAMC,GAAMC,GACpCT,EAAM,UAAY,EAAEQ,GAAMC,GAAMC,GAAMC,GACtCX,EAAM,UAAY,EAAES,GAAMC,GAAMC,GAChCX,EAAM,UAAY,EAAEU,GAAMC,GAC1BX,EAAM,UAAY,CAACW,EACnBX,EAAM,OAASF,EAAO,MACtBE,EAAM,MAAQE,EAAM,KACtB,CAAC,EAEGX,cACF,OAAO,iBAAiB,SAAUY,EAAU,CAAE,QAAS,GAAM,EAGxDS,EAAAA,OAAOZ,CAAK,CACrB,EAEM,CAAE,MAAAa,GAAUlB,EAElBA,EAAI,MAAQ,CAACmB,EAAoBxB,EAAqByB,IAAoB,CACxEpB,EAAI,QAAQR,EAAeS,EAAMN,CAAS,CAAC,EAC3C,MAAM0B,EAAMH,EAAMC,EAAexB,EAAWyB,CAAK,EACjD,OAAApB,EAAI,MAAQkB,EACLG,CACT,CACF,CAES,CACX,CAEO,SAASC,GAAa,CAC3B,MAAMC,EAAUC,EAAAA,OAAOhC,CAAa,EAEpC,GAAI,CAAC+B,EAAS,MAAM,IAAI,MAAM,kCAAkC,EAEhE,OAAOA,CACT"}