{"version":3,"file":"display.mjs","names":["inject","reactive","shallowRef","toRefs","watchEffect","mergeDeep","IN_BROWSER","SUPPORTS_TOUCH","breakpoints","DisplaySymbol","Symbol","defaultDisplayOptions","mobileBreakpoint","thresholds","xs","sm","md","lg","xl","xxl","parseDisplayOptions","options","arguments","length","undefined","getClientWidth","ssr","window","innerWidth","_typeof","clientWidth","getClientHeight","innerHeight","clientHeight","getPlatform","userAgent","navigator","match","regexp","Boolean","android","ios","cordova","electron","chrome","edge","firefox","opera","win","mac","linux","touch","createDisplay","_parseDisplayOptions","height","platform","state","width","updateSize","value","update","name","breakpointValue","mobile","smAndUp","mdAndUp","lgAndUp","xlAndUp","smAndDown","mdAndDown","lgAndDown","xlAndDown","addEventListener","passive","_objectSpread","useDisplay","display","Error"],"sources":["../../src/composables/display.ts"],"sourcesContent":["// Utilities\nimport { inject, reactive, shallowRef, toRefs, watchEffect } from 'vue'\nimport { mergeDeep } from '@/utils'\nimport { IN_BROWSER, SUPPORTS_TOUCH } from '@/utils/globals'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nexport const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl'] as const // no xs\n\nexport type Breakpoint = (typeof breakpoints)[number]\n\nexport type DisplayBreakpoint = 'xs' | Breakpoint\n\nexport type DisplayThresholds = {\n  [key in DisplayBreakpoint]: number\n}\n\nexport interface DisplayOptions {\n  mobileBreakpoint?: number | DisplayBreakpoint\n  thresholds?: Partial<DisplayThresholds>\n}\n\nexport interface InternalDisplayOptions {\n  mobileBreakpoint: number | DisplayBreakpoint\n  thresholds: DisplayThresholds\n}\n\nexport type SSROptions =\n  | boolean\n  | {\n      clientWidth: number\n      clientHeight?: number\n    }\n\nexport interface DisplayPlatform {\n  android: boolean\n  ios: boolean\n  cordova: boolean\n  electron: boolean\n  chrome: boolean\n  edge: boolean\n  firefox: boolean\n  opera: boolean\n  win: boolean\n  mac: boolean\n  linux: boolean\n  touch: boolean\n  ssr: boolean\n}\n\nexport interface DisplayInstance {\n  xs: Ref<boolean>\n  sm: Ref<boolean>\n  md: Ref<boolean>\n  lg: Ref<boolean>\n  xl: Ref<boolean>\n  xxl: Ref<boolean>\n  smAndUp: Ref<boolean>\n  mdAndUp: Ref<boolean>\n  lgAndUp: Ref<boolean>\n  xlAndUp: Ref<boolean>\n  smAndDown: Ref<boolean>\n  mdAndDown: Ref<boolean>\n  lgAndDown: Ref<boolean>\n  xlAndDown: Ref<boolean>\n  name: Ref<DisplayBreakpoint>\n  height: Ref<number>\n  width: Ref<number>\n  mobile: Ref<boolean>\n  mobileBreakpoint: Ref<number | DisplayBreakpoint>\n  platform: Ref<DisplayPlatform>\n  thresholds: Ref<DisplayThresholds>\n\n  /** @internal */\n  ssr: boolean\n\n  update(): void\n}\n\nexport const DisplaySymbol: InjectionKey<DisplayInstance> =\n  Symbol.for('vuetify:display')\n\nconst defaultDisplayOptions: DisplayOptions = {\n  mobileBreakpoint: 'lg',\n  thresholds: {\n    xs: 0,\n    sm: 600,\n    md: 960,\n    lg: 1280,\n    xl: 1920,\n    xxl: 2560,\n  },\n}\n\nconst parseDisplayOptions = (\n  options: DisplayOptions = defaultDisplayOptions\n) => {\n  return mergeDeep(defaultDisplayOptions, options) as InternalDisplayOptions\n}\n\nfunction getClientWidth(ssr?: SSROptions) {\n  return IN_BROWSER && !ssr\n    ? window.innerWidth\n    : (typeof ssr === 'object' && ssr.clientWidth) || 0\n}\n\nfunction getClientHeight(ssr?: SSROptions) {\n  return IN_BROWSER && !ssr\n    ? window.innerHeight\n    : (typeof ssr === 'object' && ssr.clientHeight) || 0\n}\n\nfunction getPlatform(ssr?: SSROptions): DisplayPlatform {\n  const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr'\n\n  function match(regexp: RegExp) {\n    return Boolean(userAgent.match(regexp))\n  }\n\n  const android = match(/android/i)\n  const ios = match(/iphone|ipad|ipod/i)\n  const cordova = match(/cordova/i)\n  const electron = match(/electron/i)\n  const chrome = match(/chrome/i)\n  const edge = match(/edge/i)\n  const firefox = match(/firefox/i)\n  const opera = match(/opera/i)\n  const win = match(/win/i)\n  const mac = match(/mac/i)\n  const linux = match(/linux/i)\n\n  return {\n    android,\n    ios,\n    cordova,\n    electron,\n    chrome,\n    edge,\n    firefox,\n    opera,\n    win,\n    mac,\n    linux,\n    touch: SUPPORTS_TOUCH,\n    ssr: userAgent === 'ssr',\n  }\n}\n\nexport function createDisplay(\n  options?: DisplayOptions,\n  ssr?: SSROptions\n): DisplayInstance {\n  const { thresholds, mobileBreakpoint } = parseDisplayOptions(options)\n\n  const height = shallowRef(getClientHeight(ssr))\n  const platform = shallowRef(getPlatform(ssr))\n  const state = reactive({} as DisplayInstance)\n  const width = shallowRef(getClientWidth(ssr))\n\n  function updateSize() {\n    height.value = getClientHeight()\n    width.value = getClientWidth()\n  }\n  function update() {\n    updateSize()\n    platform.value = getPlatform()\n  }\n\n  // eslint-disable-next-line max-statements\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    const name = xs\n      ? 'xs'\n      : sm\n      ? 'sm'\n      : md\n      ? 'md'\n      : lg\n      ? 'lg'\n      : xl\n      ? 'xl'\n      : 'xxl'\n    const breakpointValue =\n      typeof mobileBreakpoint === 'number'\n        ? mobileBreakpoint\n        : thresholds[mobileBreakpoint]\n    const mobile = width.value < breakpointValue\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.name = name\n    state.height = height.value\n    state.width = width.value\n    state.mobile = mobile\n    state.mobileBreakpoint = mobileBreakpoint\n    state.platform = platform.value\n    state.thresholds = thresholds\n  })\n\n  if (IN_BROWSER) {\n    window.addEventListener('resize', updateSize, { passive: true })\n  }\n\n  return { ...toRefs(state), update, ssr: !!ssr }\n}\n\nexport function useDisplay() {\n  const display = inject(DisplaySymbol)\n\n  if (!display) throw new Error('Could not find Vuetify display injection')\n\n  return display\n}\n"],"mappings":"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"}