📄 index.ts¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 2 |
| 📦 Imports | 11 |
| 🟢 Vue Composition API | 1 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/core/useMediaQuery/index.ts
📦 Imports¶
| Name | Source |
|---|---|
MaybeRefOrGetter |
vue |
ConfigurableWindow |
../_configurable |
pxValue |
@vueuse/shared |
computed |
vue |
shallowRef |
vue |
toValue |
vue |
watchEffect |
vue |
defaultWindow |
../_configurable |
useEventListener |
../useEventListener |
useSSRWidth |
../useSSRWidth |
useSupported |
../useSupported |
Vue Composition API¶
| Name | Type | Reactive Variables | Composables |
|---|---|---|---|
computed |
computed | none | none |
Functions¶
useMediaQuery(query: MaybeRefOrGetter<string>, options: ConfigurableWindow & { ssrWidth?: number }): any¶
Code
export function useMediaQuery(query: MaybeRefOrGetter<string>, options: ConfigurableWindow & { ssrWidth?: number } = {}) {
const { window = defaultWindow, ssrWidth = useSSRWidth() } = options
const isSupported = useSupported(() => window && 'matchMedia' in window && typeof window.matchMedia === 'function')
const ssrSupport = shallowRef(typeof ssrWidth === 'number')
const mediaQuery = shallowRef<MediaQueryList>()
const matches = shallowRef(false)
const handler = (event: MediaQueryListEvent) => {
matches.value = event.matches
}
watchEffect(() => {
if (ssrSupport.value) {
// Exit SSR support on mounted if window available
ssrSupport.value = !isSupported.value
const queryStrings = toValue(query).split(',')
matches.value = queryStrings.some((queryString) => {
const not = queryString.includes('not all')
const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/)
const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/)
let res = Boolean(minWidth || maxWidth)
if (minWidth && res) {
res = ssrWidth! >= pxValue(minWidth[1])
}
if (maxWidth && res) {
res = ssrWidth! <= pxValue(maxWidth[1])
}
return not ? !res : res
})
return
}
if (!isSupported.value)
return
mediaQuery.value = window!.matchMedia(toValue(query))
matches.value = mediaQuery.value.matches
})
useEventListener(mediaQuery, 'change', handler, { passive: true })
return computed(() => matches.value)
}
-
JSDoc:
-
Parameters:
query: MaybeRefOrGetter<string>options: ConfigurableWindow & { ssrWidth?: number }- Return Type:
any - Calls:
useSSRWidth (from ../useSSRWidth)useSupported (from ../useSupported)shallowRef (from vue)watchEffect (from vue)toValue(query).splitqueryStrings.somequeryString.includesqueryString.matchBooleanpxValue (from @vueuse/shared)window!.matchMediatoValue (from vue)useEventListener (from ../useEventListener)computed (from vue)- Internal Comments:
handler(event: MediaQueryListEvent): void¶
- Parameters:
event: MediaQueryListEvent- Return Type:
void