UNPKG

@angular/cdk

Version:

Angular Material Component Development Kit

1 lines 15 kB
{"version":3,"file":"_breakpoints-observer-chunk.mjs","sources":["../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/layout/media-matcher.ts","../../../../../k8-fastbuild-ST-199a4f3c4e20/bin/src/cdk/layout/breakpoints-observer.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\nimport {Injectable, CSP_NONCE, inject} from '@angular/core';\nimport {Platform} from '../platform';\n\n/** Global registry for all dynamically-created, injected media queries. */\nconst mediaQueriesForWebkitCompatibility: Set<string> = new Set<string>();\n\n/** Style tag that holds all of the dynamically-created media queries. */\nlet mediaQueryStyleNode: HTMLStyleElement | undefined;\n\n/** A utility for calling matchMedia queries. */\n@Injectable({providedIn: 'root'})\nexport class MediaMatcher {\n private _platform = inject(Platform);\n private _nonce = inject(CSP_NONCE, {optional: true});\n\n /** The internal matchMedia method to return back a MediaQueryList like object. */\n private _matchMedia: (query: string) => MediaQueryList;\n\n constructor(...args: unknown[]);\n\n constructor() {\n this._matchMedia =\n this._platform.isBrowser && window.matchMedia\n ? // matchMedia is bound to the window scope intentionally as it is an illegal invocation to\n // call it from a different scope.\n window.matchMedia.bind(window)\n : noopMatchMedia;\n }\n\n /**\n * Evaluates the given media query and returns the native MediaQueryList from which results\n * can be retrieved.\n * Confirms the layout engine will trigger for the selector query provided and returns the\n * MediaQueryList for the query provided.\n */\n matchMedia(query: string): MediaQueryList {\n if (this._platform.WEBKIT || this._platform.BLINK) {\n createEmptyStyleRule(query, this._nonce);\n }\n return this._matchMedia(query);\n }\n}\n\n/**\n * Creates an empty stylesheet that is used to work around browser inconsistencies related to\n * `matchMedia`. At the time of writing, it handles the following cases:\n * 1. On WebKit browsers, a media query has to have at least one rule in order for `matchMedia`\n * to fire. We work around it by declaring a dummy stylesheet with a `@media` declaration.\n * 2. In some cases Blink browsers will stop firing the `matchMedia` listener if none of the rules\n * inside the `@media` match existing elements on the page. We work around it by having one rule\n * targeting the `body`. See https://github.com/angular/components/issues/23546.\n */\nfunction createEmptyStyleRule(query: string, nonce: string | undefined | null) {\n if (mediaQueriesForWebkitCompatibility.has(query)) {\n return;\n }\n\n try {\n if (!mediaQueryStyleNode) {\n mediaQueryStyleNode = document.createElement('style');\n\n if (nonce) {\n mediaQueryStyleNode.setAttribute('nonce', nonce);\n }\n\n mediaQueryStyleNode.setAttribute('type', 'text/css');\n document.head!.appendChild(mediaQueryStyleNode);\n }\n\n if (mediaQueryStyleNode.sheet) {\n mediaQueryStyleNode.sheet.insertRule(`@media ${query} {body{ }}`, 0);\n mediaQueriesForWebkitCompatibility.add(query);\n }\n } catch (e) {\n console.error(e);\n }\n}\n\n/** No-op matchMedia replacement for non-browser platforms. */\nfunction noopMatchMedia(query: string): MediaQueryList {\n // Use `as any` here to avoid adding additional necessary properties for\n // the noop matcher.\n return {\n matches: query === 'all' || query === '',\n media: query,\n addListener: () => {},\n removeListener: () => {},\n } as any;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {coerceArray} from '../coercion';\nimport {Injectable, NgZone, OnDestroy, inject} from '@angular/core';\nimport {combineLatest, concat, Observable, Observer, Subject} from 'rxjs';\nimport {debounceTime, map, skip, startWith, take, takeUntil} from 'rxjs/operators';\nimport {MediaMatcher} from './media-matcher';\n\n/** The current state of a layout breakpoint. */\nexport interface BreakpointState {\n /** Whether the breakpoint is currently matching. */\n matches: boolean;\n /**\n * A key boolean pair for each query provided to the observe method,\n * with its current matched state.\n */\n breakpoints: {\n [key: string]: boolean;\n };\n}\n\n/** The current state of a layout breakpoint. */\ninterface InternalBreakpointState {\n /** Whether the breakpoint is currently matching. */\n matches: boolean;\n /** The media query being to be matched */\n query: string;\n}\n\ninterface Query {\n observable: Observable<InternalBreakpointState>;\n mql: MediaQueryList;\n}\n\n/** Utility for checking the matching state of `@media` queries. */\n@Injectable({providedIn: 'root'})\nexport class BreakpointObserver implements OnDestroy {\n private _mediaMatcher = inject(MediaMatcher);\n private _zone = inject(NgZone);\n\n /** A map of all media queries currently being listened for. */\n private _queries = new Map<string, Query>();\n /** A subject for all other observables to takeUntil based on. */\n private readonly _destroySubject = new Subject<void>();\n\n constructor(...args: unknown[]);\n constructor() {}\n\n /** Completes the active subject, signalling to all other observables to complete. */\n ngOnDestroy() {\n this._destroySubject.next();\n this._destroySubject.complete();\n }\n\n /**\n * Whether one or more media queries match the current viewport size.\n * @param value One or more media queries to check.\n * @returns Whether any of the media queries match.\n */\n isMatched(value: string | readonly string[]): boolean {\n const queries = splitQueries(coerceArray(value));\n return queries.some(mediaQuery => this._registerQuery(mediaQuery).mql.matches);\n }\n\n /**\n * Gets an observable of results for the given queries that will emit new results for any changes\n * in matching of the given queries.\n * @param value One or more media queries to check.\n * @returns A stream of matches for the given queries.\n */\n observe(value: string | readonly string[]): Observable<BreakpointState> {\n const queries = splitQueries(coerceArray(value));\n const observables = queries.map(query => this._registerQuery(query).observable);\n\n let stateObservable = combineLatest(observables);\n // Emit the first state immediately, and then debounce the subsequent emissions.\n stateObservable = concat(\n stateObservable.pipe(take(1)),\n stateObservable.pipe(skip(1), debounceTime(0)),\n );\n return stateObservable.pipe(\n map(breakpointStates => {\n const response: BreakpointState = {\n matches: false,\n breakpoints: {},\n };\n breakpointStates.forEach(({matches, query}) => {\n response.matches = response.matches || matches;\n response.breakpoints[query] = matches;\n });\n return response;\n }),\n );\n }\n\n /** Registers a specific query to be listened for. */\n private _registerQuery(query: string): Query {\n // Only set up a new MediaQueryList if it is not already being listened for.\n if (this._queries.has(query)) {\n return this._queries.get(query)!;\n }\n\n const mql = this._mediaMatcher.matchMedia(query);\n\n // Create callback for match changes and add it is as a listener.\n const queryObservable = new Observable((observer: Observer<MediaQueryListEvent>) => {\n // Listener callback methods are wrapped to be placed back in ngZone. Callbacks must be placed\n // back into the zone because matchMedia is only included in Zone.js by loading the\n // webapis-media-query.js file alongside the zone.js file. Additionally, some browsers do not\n // have MediaQueryList inherit from EventTarget, which causes inconsistencies in how Zone.js\n // patches it.\n const handler = (e: MediaQueryListEvent): void => this._zone.run(() => observer.next(e));\n mql.addListener(handler);\n\n return () => {\n mql.removeListener(handler);\n };\n }).pipe(\n startWith(mql),\n map(({matches}) => ({query, matches})),\n takeUntil(this._destroySubject),\n );\n\n // Add the MediaQueryList to the set of queries.\n const output = {observable: queryObservable, mql};\n this._queries.set(query, output);\n return output;\n }\n}\n\n/**\n * Split each query string into separate query strings if two queries are provided as comma\n * separated.\n */\nfunction splitQueries(queries: readonly string[]): readonly string[] {\n return queries\n .map(query => query.split(','))\n .reduce((a1, a2) => a1.concat(a2))\n .map(query => query.trim());\n}\n"],"names":["mediaQueriesForWebkitCompatibility","Set","mediaQueryStyleNode","MediaMatcher","_platform","inject","Platform","_nonce","CSP_NONCE","optional","_matchMedia","constructor","isBrowser","window","matchMedia","bind","noopMatchMedia","query","WEBKIT","BLINK","createEmptyStyleRule","deps","target","i0","ɵɵFactoryTarget","Injectable","ɵprov","ɵɵngDeclareInjectable","minVersion","version","ngImport","type","decorators","providedIn","nonce","has","document","createElement","setAttribute","head","appendChild","sheet","insertRule","add","e","console","error","matches","media","addListener","removeListener","BreakpointObserver","_mediaMatcher","_zone","NgZone","_queries","Map","_destroySubject","Subject","ngOnDestroy","next","complete","isMatched","value","queries","splitQueries","coerceArray","some","mediaQuery","_registerQuery","mql","observe","observables","map","observable","stateObservable","combineLatest","concat","pipe","take","skip","debounceTime","breakpointStates","response","breakpoints","forEach","get","queryObservable","Observable","observer","handler","run","startWith","takeUntil","output","set","split","reduce","a1","a2","trim"],"mappings":"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"}