ngx-breakpoint-observer
Version:
Angular reactive breakpoint observer based on Signals.
1 lines • 23.2 kB
Source Map (JSON)
{"version":3,"file":"ngx-breakpoint-observer.mjs","sources":["../../../../libs/ngx-breakpoint-observer/src/lib/breakpoints.ts","../../../../libs/ngx-breakpoint-observer/src/lib/utils/increase-with-unit.ts","../../../../libs/ngx-breakpoint-observer/src/lib/utils/to-value.ts","../../../../libs/ngx-breakpoint-observer/src/lib/utils/utils.ts","../../../../libs/ngx-breakpoint-observer/src/lib/inject-media-query.ts","../../../../libs/ngx-breakpoint-observer/src/lib/inject-breakpoints.ts","../../../../libs/ngx-breakpoint-observer/src/lib/observe-media-query.ts","../../../../libs/ngx-breakpoint-observer/src/lib/observe-breakpoints.ts","../../../../libs/ngx-breakpoint-observer/src/index.ts","../../../../libs/ngx-breakpoint-observer/src/ngx-breakpoint-observer.ts"],"sourcesContent":["/**\r\n * Breakpoints from Tailwind V3\r\n *\r\n * @see https://tailwindcss.com/docs/breakpoints\r\n */\r\nexport const breakpointsTailwind = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n};\r\n\r\n/**\r\n * Breakpoints from Bootstrap V5\r\n *\r\n * @see https://getbootstrap.com/docs/5.3/layout/breakpoints\r\n */\r\nexport const breakpointsBootstrap = {\r\n xs: 0,\r\n sm: 576,\r\n md: 768,\r\n lg: 992,\r\n xl: 1200,\r\n xxl: 1400,\r\n};\r\n\r\n/**\r\n * Breakpoints from Angular Material\r\n *\r\n * @see https://material.angular.io/cdk/layout/overview\r\n */\r\nexport const breakpointsMaterial = {\r\n xsmall: 0,\r\n small: 600,\r\n medium: 960,\r\n large: 1280,\r\n xlarge: 1920,\r\n};\r\n","/**\r\n * Increase string a value with unit\r\n *\r\n * @example '2px' + 1 = '3px'\r\n * @example '15em' + (-2) = '13em'\r\n */\r\nexport function increaseWithUnit(target: number, delta: number): number;\r\nexport function increaseWithUnit(target: string, delta: number): string;\r\nexport function increaseWithUnit(\r\n target: string | number,\r\n delta: number\r\n): string | number;\r\nexport function increaseWithUnit(\r\n target: string | number,\r\n delta: number\r\n): string | number {\r\n if (typeof target === 'number') return target + delta;\r\n const value = RegExp(/^-?\\d+\\.?\\d*/).exec(target)?.[0] ?? '';\r\n const unit = target.slice(value.length);\r\n const result = Number.parseFloat(value) + delta;\r\n if (Number.isNaN(result)) return target;\r\n return result + unit;\r\n}\r\n","import { MaybeSignalOrGetter } from '../types';\r\n\r\n/**\r\n * Get the value of value/signal/getter.\r\n */\r\nexport function toValue<T>(r: MaybeSignalOrGetter<T>): T {\r\n return typeof r === 'function' ? (r as any)() : r;\r\n}\r\n","export const isClient =\r\n typeof window !== 'undefined' && typeof document !== 'undefined';\r\nexport const defaultWindow = isClient ? window : undefined;\r\n","import { DestroyRef, inject, signal, Signal } from '@angular/core';\r\nimport { ConfigurableWindow, MaybeSignalOrGetter } from './types';\r\nimport { defaultWindow, toValue } from './utils';\r\n\r\n/**\r\n * Reactive Media Query.\r\n *\r\n * @param query Media query as a signal or getter or string.\r\n * @param options Configuration options for window.\r\n * @returns A read-only signal indicating whether the media query matches.\r\n */\r\nexport function injectMediaQuery(\r\n query: MaybeSignalOrGetter<string>,\r\n options: ConfigurableWindow = {}\r\n): Signal<boolean> {\r\n const destroyRef = inject(DestroyRef);\r\n const { window = defaultWindow } = options;\r\n const isSupported =\r\n window && 'matchMedia' in window && typeof window.matchMedia === 'function';\r\n\r\n let mediaQuery: MediaQueryList | undefined;\r\n const matches = signal(false);\r\n\r\n const handler = (event: MediaQueryListEvent) => {\r\n matches.set(event.matches);\r\n };\r\n\r\n if (isSupported) {\r\n mediaQuery = window.matchMedia(toValue(query));\r\n matches.set(mediaQuery.matches);\r\n if ('addEventListener' in mediaQuery)\r\n mediaQuery.addEventListener('change', handler);\r\n // @ts-expect-error deprecated API\r\n else mediaQuery.addListener(handler);\r\n }\r\n\r\n destroyRef.onDestroy(() => {\r\n if (!mediaQuery) return;\r\n\r\n if ('removeEventListener' in mediaQuery)\r\n mediaQuery.removeEventListener('change', handler);\r\n // @ts-expect-error deprecated API\r\n else mediaQuery.removeListener(handler);\r\n });\r\n\r\n return matches.asReadonly();\r\n}\r\n","import { computed, Signal } from '@angular/core';\r\nimport { injectMediaQuery } from './inject-media-query';\r\nimport {\r\n Breakpoints,\r\n MaybeSignalOrGetter,\r\n ObserveBreakpointsOptions,\r\n} from './types';\r\nimport { defaultWindow, increaseWithUnit, toValue } from './utils';\r\n\r\n/**\r\n * Reactive viewport breakpoints.\r\n *\r\n * This function provides a set of reactive utilities to handle viewport breakpoints.\r\n * It includes shortcut methods like `greaterOrEqual`, `smallerOrEqual`, `between`, etc.\r\n *\r\n * @param breakpoints A map of breakpoint names and their corresponding values.\r\n * @param options Configuration options such as window and strategy.\r\n * @returns An object with breakpoint utilities and shortcut methods.\r\n */\r\nexport function injectBreakpoints<K extends string>(\r\n breakpoints: Breakpoints<K>,\r\n options: ObserveBreakpointsOptions = {}\r\n) {\r\n const { window = defaultWindow, strategy = 'min-width' } = options;\r\n\r\n function getValue(k: MaybeSignalOrGetter<K>, delta?: number): string {\r\n let v = breakpoints[toValue(k)];\r\n\r\n if (delta !== null && delta !== undefined) {\r\n v = increaseWithUnit(v, delta);\r\n }\r\n\r\n if (typeof v === 'number') {\r\n v = `${v}px`;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n function match(query: string): boolean {\r\n if (!window) return false;\r\n\r\n return window.matchMedia(query).matches;\r\n }\r\n\r\n const greaterOrEqual = (k: MaybeSignalOrGetter<K>): Signal<boolean> => {\r\n return injectMediaQuery(() => `(min-width: ${getValue(k)})`, options);\r\n };\r\n\r\n const smallerOrEqual = (k: MaybeSignalOrGetter<K>): Signal<boolean> => {\r\n return injectMediaQuery(() => `(max-width: ${getValue(k)})`, options);\r\n };\r\n\r\n function current() {\r\n const points = Object.keys(breakpoints).map(\r\n i => [i, greaterOrEqual(i as K)] as const\r\n );\r\n return computed(() => points.filter(([, v]) => v()).map(([k]) => k));\r\n }\r\n\r\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\r\n Object.defineProperty(shortcuts, k, {\r\n get: () =>\r\n strategy === 'min-width'\r\n ? greaterOrEqual(k as K)\r\n : smallerOrEqual(k as K),\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n return shortcuts;\r\n }, {} as Record<K, Signal<boolean>>);\r\n\r\n return Object.assign(shortcutMethods, {\r\n greaterOrEqual,\r\n smallerOrEqual,\r\n greater(k: MaybeSignalOrGetter<K>) {\r\n return injectMediaQuery(\r\n () => `(min-width: ${getValue(k, 0.1)})`,\r\n options\r\n );\r\n },\r\n smaller(k: MaybeSignalOrGetter<K>) {\r\n return injectMediaQuery(\r\n () => `(max-width: ${getValue(k, -0.1)})`,\r\n options\r\n );\r\n },\r\n between(a: MaybeSignalOrGetter<K>, b: MaybeSignalOrGetter<K>) {\r\n return injectMediaQuery(\r\n () =>\r\n `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`,\r\n options\r\n );\r\n },\r\n isGreater(k: MaybeSignalOrGetter<K>) {\r\n return match(`(min-width: ${getValue(k, 0.1)})`);\r\n },\r\n isGreaterOrEqual(k: MaybeSignalOrGetter<K>) {\r\n return match(`(min-width: ${getValue(k)})`);\r\n },\r\n isSmaller(k: MaybeSignalOrGetter<K>) {\r\n return match(`(max-width: ${getValue(k, -0.1)})`);\r\n },\r\n isSmallerOrEqual(k: MaybeSignalOrGetter<K>) {\r\n return match(`(max-width: ${getValue(k)})`);\r\n },\r\n isInBetween(a: MaybeSignalOrGetter<K>, b: MaybeSignalOrGetter<K>) {\r\n return match(\r\n `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`\r\n );\r\n },\r\n current,\r\n active() {\r\n const breakpoints = current();\r\n return computed(() =>\r\n breakpoints().length === 0\r\n ? ''\r\n : breakpoints()[breakpoints().length - 1]\r\n );\r\n },\r\n });\r\n}\r\n","import { effect, type Signal, signal, untracked } from '@angular/core';\r\nimport { ConfigurableWindow, MaybeSignalOrGetter } from './types';\r\nimport { defaultWindow, toValue } from './utils';\r\n\r\n/**\r\n * **@deprecated** Use `injectMediaQuery` instead.\r\n *\r\n * This function will be removed in version `4.0.0`.\r\n *\r\n * Reactive Media Query.\r\n *\r\n * @param query\r\n * @param options\r\n */\r\nexport function observeMediaQuery(\r\n query: MaybeSignalOrGetter<string>,\r\n options: ConfigurableWindow = {}\r\n): Signal<boolean> {\r\n const { window = defaultWindow } = options;\r\n const isSupported =\r\n window && 'matchMedia' in window && typeof window.matchMedia === 'function';\r\n\r\n let mediaQuery: MediaQueryList | undefined;\r\n const matches = signal(false);\r\n\r\n const handler = (event: MediaQueryListEvent) => {\r\n matches.set(event.matches);\r\n };\r\n\r\n const cleanup = () => {\r\n if (!mediaQuery) return;\r\n\r\n if ('removeEventListener' in mediaQuery)\r\n mediaQuery.removeEventListener('change', handler);\r\n // @ts-expect-error deprecated API\r\n else mediaQuery.removeListener(handler);\r\n };\r\n\r\n effect(onCleanup => {\r\n if (!isSupported) return;\r\n\r\n mediaQuery = window.matchMedia(toValue(query));\r\n\r\n if ('addEventListener' in mediaQuery)\r\n mediaQuery.addEventListener('change', handler);\r\n // @ts-expect-error deprecated API\r\n else mediaQuery.addListener(handler);\r\n\r\n untracked(() => matches.set(!!mediaQuery?.matches));\r\n\r\n onCleanup(cleanup);\r\n });\r\n\r\n return matches.asReadonly();\r\n}\r\n","import { computed, type Signal } from '@angular/core';\r\nimport { observeMediaQuery } from './observe-media-query';\r\nimport {\r\n Breakpoints,\r\n MaybeSignalOrGetter,\r\n ObserveBreakpointsOptions,\r\n} from './types';\r\nimport { defaultWindow, increaseWithUnit, toValue } from './utils';\r\n\r\n/**\r\n * **@deprecated** Use `injectBreakpoints` instead.\r\n *\r\n * This function will be removed in version `4.0.0`.\r\n *\r\n * Reactive viewport breakpoints.\r\n *\r\n * @param breakpoints\r\n * @param options\r\n */\r\nexport function observeBreakpoints<K extends string>(\r\n breakpoints: Breakpoints<K>,\r\n options: ObserveBreakpointsOptions = {}\r\n) {\r\n const { window = defaultWindow, strategy = 'min-width' } = options;\r\n\r\n function getValue(k: MaybeSignalOrGetter<K>, delta?: number): string {\r\n let v = breakpoints[toValue(k)];\r\n\r\n if (delta !== null && delta !== undefined) {\r\n v = increaseWithUnit(v, delta);\r\n }\r\n\r\n if (typeof v === 'number') {\r\n v = `${v}px`;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n function match(query: string): boolean {\r\n if (!window) return false;\r\n\r\n return window.matchMedia(query).matches;\r\n }\r\n\r\n const greaterOrEqual = (k: MaybeSignalOrGetter<K>): Signal<boolean> => {\r\n return observeMediaQuery(() => `(min-width: ${getValue(k)})`, options);\r\n };\r\n\r\n const smallerOrEqual = (k: MaybeSignalOrGetter<K>): Signal<boolean> => {\r\n return observeMediaQuery(() => `(max-width: ${getValue(k)})`, options);\r\n };\r\n\r\n function current() {\r\n const points = Object.keys(breakpoints).map(\r\n i => [i, greaterOrEqual(i as K)] as const\r\n );\r\n return computed(() => points.filter(([, v]) => v()).map(([k]) => k));\r\n }\r\n\r\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\r\n Object.defineProperty(shortcuts, k, {\r\n get: () =>\r\n strategy === 'min-width'\r\n ? greaterOrEqual(k as K)\r\n : smallerOrEqual(k as K),\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n return shortcuts;\r\n }, {} as Record<K, Signal<boolean>>);\r\n\r\n return Object.assign(shortcutMethods, {\r\n greaterOrEqual,\r\n smallerOrEqual,\r\n greater(k: MaybeSignalOrGetter<K>) {\r\n return observeMediaQuery(\r\n () => `(min-width: ${getValue(k, 0.1)})`,\r\n options\r\n );\r\n },\r\n smaller(k: MaybeSignalOrGetter<K>) {\r\n return observeMediaQuery(\r\n () => `(max-width: ${getValue(k, -0.1)})`,\r\n options\r\n );\r\n },\r\n between(a: MaybeSignalOrGetter<K>, b: MaybeSignalOrGetter<K>) {\r\n return observeMediaQuery(\r\n () =>\r\n `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`,\r\n options\r\n );\r\n },\r\n isGreater(k: MaybeSignalOrGetter<K>) {\r\n return match(`(min-width: ${getValue(k, 0.1)})`);\r\n },\r\n isGreaterOrEqual(k: MaybeSignalOrGetter<K>) {\r\n return match(`(min-width: ${getValue(k)})`);\r\n },\r\n isSmaller(k: MaybeSignalOrGetter<K>) {\r\n return match(`(max-width: ${getValue(k, -0.1)})`);\r\n },\r\n isSmallerOrEqual(k: MaybeSignalOrGetter<K>) {\r\n return match(`(max-width: ${getValue(k)})`);\r\n },\r\n isInBetween(a: MaybeSignalOrGetter<K>, b: MaybeSignalOrGetter<K>) {\r\n return match(\r\n `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`\r\n );\r\n },\r\n current,\r\n active() {\r\n const breakpoints = current();\r\n return computed(() =>\r\n breakpoints().length === 0\r\n ? ''\r\n : breakpoints()[breakpoints().length - 1]\r\n );\r\n },\r\n });\r\n}\r\n","/*\r\n * Public API Surface of ngx-breakpoint-observer\r\n */\r\n\r\nexport * from './lib/breakpoints';\r\nexport * from './lib/inject-breakpoints';\r\nexport * from './lib/inject-media-query';\r\nexport * from './lib/observe-breakpoints';\r\nexport * from './lib/observe-media-query';\r\nexport * from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}