ngx-mq 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,17 +6,29 @@
6
6
  Signal-Powered Breakpoints & Media Queries
7
7
  </h3>
8
8
 
9
- <p align="center">
9
+ <h5 align="center">
10
+ <a href="https://github.com/martsinlabs/ngx-mq/actions/workflows/ci.yml">
11
+ <img src="https://img.shields.io/github/actions/workflow/status/martsinlabs/ngx-mq/ci.yml?branch=main&label=CI&color=44cc11&logo=github" alt="CI Status" />
12
+ </a>
13
+
14
+ <a href="https://codecov.io/gh/martsinlabs/ngx-mq">
15
+ <img src="https://codecov.io/gh/martsinlabs/ngx-mq/branch/main/graph/badge.svg" alt="coverage" />
16
+ </a>
17
+
18
+ <br>
19
+
10
20
  <a href="https://www.npmjs.com/package/ngx-mq">
11
- <img src="https://img.shields.io/npm/v/ngx-mq.svg?color=#1f883d" alt="npm version" />
21
+ <img src="https://img.shields.io/npm/v/ngx-mq.svg?color=007ec6" alt="npm version" />
12
22
  </a>
13
23
  <a href="https://www.npmjs.com/package/ngx-mq">
14
- <img src="https://img.shields.io/npm/dm/ngx-mq.svg?color=#1f883d" alt="npm downloads" />
24
+ <img src="https://img.shields.io/npm/dm/ngx-mq.svg?color=44cc11" alt="npm downloads" />
15
25
  </a>
16
26
  <a href="https://opensource.org/license/MIT">
17
- <img src="https://img.shields.io/npm/l/ngx-mq.svg?color=#1f883d" alt="license" />
27
+ <img src="https://img.shields.io/npm/l/ngx-mq.svg?color=44cc11" alt="license" />
18
28
  </a>
19
- </p>
29
+ </h5>
30
+
31
+ <br>
20
32
 
21
33
  ## Introduction
22
34
 
@@ -1,10 +1,10 @@
1
1
  import { computed } from '@angular/core';
2
2
  import { retainUntilDestroy } from './mql-registry';
3
3
  export function createConsumer(query) {
4
- const retainRef = retainUntilDestroy(query);
5
- return computed(() => retainRef.signal());
4
+ const querySignal = retainUntilDestroy(query);
5
+ return computed(() => querySignal());
6
6
  }
7
7
  export function createConsumerLabel(descriptor) {
8
8
  return `[NgxMq Signal: ${descriptor}]`;
9
9
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxNQUFNLFNBQVMsR0FBZ0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFekQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxVQUFrQjtJQUNwRCxPQUFPLGtCQUFrQixVQUFVLEdBQUcsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXFSZXRhaW5SZWYsIHJldGFpblVudGlsRGVzdHJveSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5OiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBjb25zdCByZXRhaW5SZWY6IE1xUmV0YWluUmVmID0gcmV0YWluVW50aWxEZXN0cm95KHF1ZXJ5KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gcmV0YWluUmVmLnNpZ25hbCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN1bWVyTGFiZWwoZGVzY3JpcHRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbTmd4TXEgU2lnbmFsOiAke2Rlc2NyaXB0b3J9XWA7XG59XG4iXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxNQUFNLFdBQVcsR0FBb0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0QsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQ3BELE9BQU8sa0JBQWtCLFVBQVUsR0FBRyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25zdW1lcihxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgY29uc3QgcXVlcnlTaWduYWw6IFNpZ25hbDxib29sZWFuPiA9IHJldGFpblVudGlsRGVzdHJveShxdWVyeSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHF1ZXJ5U2lnbmFsKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3VtZXJMYWJlbChkZXNjcmlwdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFtOZ3hNcSBTaWduYWw6ICR7ZGVzY3JpcHRvcn1dYDtcbn1cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  export { retain, release } from './mql-registry';
2
2
  export { retainUntilDestroy } from './mql-registry.extensions';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmV0YWluLCByZWxlYXNlIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnknO1xuXG5leHBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5leHRlbnNpb25zJztcblxuZXhwb3J0IHsgTXFSZXRhaW5Ub2tlbiwgTXFSZXRhaW5SZWYgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5tb2RlbHMnO1xuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmV0YWluLCByZWxlYXNlIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnknO1xuXG5leHBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5leHRlbnNpb25zJztcblxuZXhwb3J0IHsgTXFSZXRhaW5Ub2tlbiB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5Lm1vZGVscyc7XG4iXX0=
@@ -1,9 +1,9 @@
1
1
  import { DestroyRef, inject } from '@angular/core';
2
2
  import { retain, release } from './mql-registry';
3
3
  export function retainUntilDestroy(query) {
4
- const ref = retain(query);
5
4
  const destroyRef = inject(DestroyRef);
6
- destroyRef.onDestroy(() => release(query, ref.token));
7
- return ref;
5
+ const querySignal = retain(query, destroyRef);
6
+ destroyRef.onDestroy(() => release(query, destroyRef));
7
+ return querySignal;
8
8
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9tcWwtcmVnaXN0cnkuZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE1BQU0sR0FBRyxHQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV0RCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpbiwgcmVsZWFzZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcbmltcG9ydCB7IE1xUmV0YWluUmVmIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubW9kZWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpblVudGlsRGVzdHJveShxdWVyeTogc3RyaW5nKTogTXFSZXRhaW5SZWYge1xuICBjb25zdCByZWY6IE1xUmV0YWluUmVmID0gcmV0YWluKHF1ZXJ5KTtcbiAgY29uc3QgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiByZWxlYXNlKHF1ZXJ5LCByZWYudG9rZW4pKTtcblxuICByZXR1cm4gcmVmO1xufVxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9tcWwtcmVnaXN0cnkuZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE1BQU0sVUFBVSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVsRCxNQUFNLFdBQVcsR0FBb0IsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRCxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV2RCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpbiwgcmVsZWFzZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpblVudGlsRGVzdHJveShxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgY29uc3QgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdCBxdWVyeVNpZ25hbDogU2lnbmFsPGJvb2xlYW4+ID0gcmV0YWluKHF1ZXJ5LCBkZXN0cm95UmVmKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiByZWxlYXNlKHF1ZXJ5LCBkZXN0cm95UmVmKSk7XG5cbiAgcmV0dXJuIHF1ZXJ5U2lnbmFsO1xufVxuIl19
@@ -5,7 +5,6 @@ const getRegistry = () => {
5
5
  const realmGlobal = globalThis;
6
6
  return (realmGlobal[REGISTRY_KEY] ??= new Map());
7
7
  };
8
- const createRetainToken = (query) => Symbol(`mq-retainer:${query}`);
9
8
  const createMqHandle = (query) => {
10
9
  const mql = matchMedia(query);
11
10
  const signal = createSignal(mql.matches);
@@ -13,11 +12,10 @@ const createMqHandle = (query) => {
13
12
  addChangeListenerToMql(mql, onChange);
14
13
  return { mql, signal, onChange, retainers: new Set() };
15
14
  };
16
- export function retain(query) {
17
- const token = createRetainToken(query);
15
+ export function retain(query, token) {
18
16
  // SSR-safe fallback
19
17
  if (typeof globalThis.matchMedia !== 'function') {
20
- return { signal: createSignal(false).asReadonly(), token };
18
+ return createSignal(false).asReadonly();
21
19
  }
22
20
  const registry = getRegistry();
23
21
  let handle = registry.get(query);
@@ -26,7 +24,7 @@ export function retain(query) {
26
24
  registry.set(query, handle);
27
25
  }
28
26
  handle.retainers.add(token);
29
- return { signal: handle.signal.asReadonly(), token };
27
+ return handle.signal.asReadonly();
30
28
  }
31
29
  export function release(query, token) {
32
30
  const registry = getRegistry();
@@ -40,4 +38,20 @@ export function release(query, token) {
40
38
  }
41
39
  return removed;
42
40
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tcWwtcmVnaXN0cnkvbXFsLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRixNQUFNLFlBQVksR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFL0QsTUFBTSxXQUFXLEdBQUcsR0FBZ0IsRUFBRTtJQUNwQyxNQUFNLFdBQVcsR0FBaUMsVUFBVSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBZ0IsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBYSxFQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUUzRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBWSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFtQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQTRCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVGLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsTUFBTSxLQUFLLEdBQWtCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRELG9CQUFvQjtJQUNwQixJQUFJLE9BQU8sVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQWdCLFdBQVcsRUFBRSxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUF5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhLEVBQUUsS0FBb0I7SUFDekQsTUFBTSxRQUFRLEdBQWdCLFdBQVcsRUFBRSxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUF5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFMUIsTUFBTSxPQUFPLEdBQVksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsIGFzIGNyZWF0ZVNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFkZENoYW5nZUxpc3RlbmVyVG9NcWwsIHJlbW92ZUNoYW5nZUxpc3RlbmVyRnJvbU1xbCB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5Lmxpc3RlbmVycyc7XG5pbXBvcnQgeyBNcWxSZWdpc3RyeSwgTXFSZXRhaW5Ub2tlbiwgTXFIYW5kbGUsIE1xUmV0YWluUmVmIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubW9kZWxzJztcblxuY29uc3QgUkVHSVNUUllfS0VZOiBzeW1ib2wgPSBTeW1ib2wuZm9yKCduZ3gtbXE6bXFsLXJlZ2lzdHJ5Jyk7XG5cbmNvbnN0IGdldFJlZ2lzdHJ5ID0gKCk6IE1xbFJlZ2lzdHJ5ID0+IHtcbiAgY29uc3QgcmVhbG1HbG9iYWw6IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4gPSBnbG9iYWxUaGlzO1xuXG4gIHJldHVybiAocmVhbG1HbG9iYWxbUkVHSVNUUllfS0VZXSA/Pz0gbmV3IE1hcCgpKSBhcyBNcWxSZWdpc3RyeTtcbn07XG5cbmNvbnN0IGNyZWF0ZVJldGFpblRva2VuID0gKHF1ZXJ5OiBzdHJpbmcpOiBNcVJldGFpblRva2VuID0+IFN5bWJvbChgbXEtcmV0YWluZXI6JHtxdWVyeX1gKTtcblxuY29uc3QgY3JlYXRlTXFIYW5kbGUgPSAocXVlcnk6IHN0cmluZyk6IE1xSGFuZGxlID0+IHtcbiAgY29uc3QgbXFsOiBNZWRpYVF1ZXJ5TGlzdCA9IG1hdGNoTWVkaWEocXVlcnkpO1xuICBjb25zdCBzaWduYWw6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlU2lnbmFsKG1xbC5tYXRjaGVzKTtcblxuICBjb25zdCBvbkNoYW5nZSA9IChldmVudD86IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHNpZ25hbC5zZXQoZXZlbnQ/Lm1hdGNoZXMgPz8gbXFsLm1hdGNoZXMpO1xuXG4gIGFkZENoYW5nZUxpc3RlbmVyVG9NcWwobXFsLCBvbkNoYW5nZSk7XG5cbiAgcmV0dXJuIHsgbXFsLCBzaWduYWwsIG9uQ2hhbmdlLCByZXRhaW5lcnM6IG5ldyBTZXQoKSB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpbihxdWVyeTogc3RyaW5nKTogTXFSZXRhaW5SZWYge1xuICBjb25zdCB0b2tlbjogTXFSZXRhaW5Ub2tlbiA9IGNyZWF0ZVJldGFpblRva2VuKHF1ZXJ5KTtcblxuICAvLyBTU1Itc2FmZSBmYWxsYmFja1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMubWF0Y2hNZWRpYSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB7IHNpZ25hbDogY3JlYXRlU2lnbmFsKGZhbHNlKS5hc1JlYWRvbmx5KCksIHRva2VuIH07XG4gIH1cblxuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkge1xuICAgIGhhbmRsZSA9IGNyZWF0ZU1xSGFuZGxlKHF1ZXJ5KTtcbiAgICByZWdpc3RyeS5zZXQocXVlcnksIGhhbmRsZSk7XG4gIH1cblxuICBoYW5kbGUucmV0YWluZXJzLmFkZCh0b2tlbik7XG5cbiAgcmV0dXJuIHsgc2lnbmFsOiBoYW5kbGUuc2lnbmFsLmFzUmVhZG9ubHkoKSwgdG9rZW4gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2UocXVlcnk6IHN0cmluZywgdG9rZW46IE1xUmV0YWluVG9rZW4pOiBib29sZWFuIHtcbiAgY29uc3QgcmVnaXN0cnk6IE1xbFJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkoKTtcblxuICBsZXQgaGFuZGxlOiBNcUhhbmRsZSB8IHVuZGVmaW5lZCA9IHJlZ2lzdHJ5LmdldChxdWVyeSk7XG5cbiAgaWYgKCFoYW5kbGUpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCByZW1vdmVkOiBib29sZWFuID0gaGFuZGxlLnJldGFpbmVycy5kZWxldGUodG9rZW4pO1xuXG4gIGlmIChoYW5kbGUucmV0YWluZXJzLnNpemUgPT09IDApIHtcbiAgICByZW1vdmVDaGFuZ2VMaXN0ZW5lckZyb21NcWwoaGFuZGxlLm1xbCwgaGFuZGxlLm9uQ2hhbmdlKTtcbiAgICByZWdpc3RyeS5kZWxldGUocXVlcnkpO1xuICB9XG5cbiAgcmV0dXJuIHJlbW92ZWQ7XG59XG4iXX0=
41
+ /* @internal
42
+ * Returns the current registry (used only in tests).
43
+ */
44
+ export function _getRegistry() {
45
+ return getRegistry();
46
+ }
47
+ /* @internal
48
+ * Clears all registry entries and removes media-query listeners.
49
+ */
50
+ export function _resetRegistry() {
51
+ const registry = getRegistry();
52
+ registry.forEach((handle) => {
53
+ removeChangeListenerFromMql(handle.mql, handle.onChange);
54
+ });
55
+ registry.clear();
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tcWwtcmVnaXN0cnkvbXFsLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRixNQUFNLFlBQVksR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFL0QsTUFBTSxXQUFXLEdBQUcsR0FBZ0IsRUFBRTtJQUNwQyxNQUFNLFdBQVcsR0FBaUMsVUFBVSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBZ0IsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBWSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFtQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQTRCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVGLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWEsRUFBRSxLQUFvQjtJQUN4RCxvQkFBb0I7SUFDcEIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDaEQsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFnQixXQUFXLEVBQUUsQ0FBQztJQUU1QyxJQUFJLE1BQU0sR0FBeUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLEtBQW9CO0lBQ3pELE1BQU0sUUFBUSxHQUFnQixXQUFXLEVBQUUsQ0FBQztJQUU1QyxJQUFJLE1BQU0sR0FBeUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2RCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTFCLE1BQU0sT0FBTyxHQUFZLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVk7SUFDMUIsT0FBTyxXQUFXLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLFFBQVEsR0FBZ0IsV0FBVyxFQUFFLENBQUM7SUFFNUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQWdCLEVBQUUsRUFBRTtRQUNwQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsIGFzIGNyZWF0ZVNpZ25hbCwgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkQ2hhbmdlTGlzdGVuZXJUb01xbCwgcmVtb3ZlQ2hhbmdlTGlzdGVuZXJGcm9tTXFsIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubGlzdGVuZXJzJztcbmltcG9ydCB7IE1xbFJlZ2lzdHJ5LCBNcVJldGFpblRva2VuLCBNcUhhbmRsZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5Lm1vZGVscyc7XG5cbmNvbnN0IFJFR0lTVFJZX0tFWTogc3ltYm9sID0gU3ltYm9sLmZvcignbmd4LW1xOm1xbC1yZWdpc3RyeScpO1xuXG5jb25zdCBnZXRSZWdpc3RyeSA9ICgpOiBNcWxSZWdpc3RyeSA9PiB7XG4gIGNvbnN0IHJlYWxtR2xvYmFsOiBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+ID0gZ2xvYmFsVGhpcztcblxuICByZXR1cm4gKHJlYWxtR2xvYmFsW1JFR0lTVFJZX0tFWV0gPz89IG5ldyBNYXAoKSkgYXMgTXFsUmVnaXN0cnk7XG59O1xuXG5jb25zdCBjcmVhdGVNcUhhbmRsZSA9IChxdWVyeTogc3RyaW5nKTogTXFIYW5kbGUgPT4ge1xuICBjb25zdCBtcWw6IE1lZGlhUXVlcnlMaXN0ID0gbWF0Y2hNZWRpYShxdWVyeSk7XG4gIGNvbnN0IHNpZ25hbDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVTaWduYWwobXFsLm1hdGNoZXMpO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKGV2ZW50PzogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gc2lnbmFsLnNldChldmVudD8ubWF0Y2hlcyA/PyBtcWwubWF0Y2hlcyk7XG5cbiAgYWRkQ2hhbmdlTGlzdGVuZXJUb01xbChtcWwsIG9uQ2hhbmdlKTtcblxuICByZXR1cm4geyBtcWwsIHNpZ25hbCwgb25DaGFuZ2UsIHJldGFpbmVyczogbmV3IFNldCgpIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmV0YWluKHF1ZXJ5OiBzdHJpbmcsIHRva2VuOiBNcVJldGFpblRva2VuKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgLy8gU1NSLXNhZmUgZmFsbGJhY2tcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLm1hdGNoTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3JlYXRlU2lnbmFsKGZhbHNlKS5hc1JlYWRvbmx5KCk7XG4gIH1cblxuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkge1xuICAgIGhhbmRsZSA9IGNyZWF0ZU1xSGFuZGxlKHF1ZXJ5KTtcbiAgICByZWdpc3RyeS5zZXQocXVlcnksIGhhbmRsZSk7XG4gIH1cblxuICBoYW5kbGUucmV0YWluZXJzLmFkZCh0b2tlbik7XG5cbiAgcmV0dXJuIGhhbmRsZS5zaWduYWwuYXNSZWFkb25seSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsZWFzZShxdWVyeTogc3RyaW5nLCB0b2tlbjogTXFSZXRhaW5Ub2tlbik6IGJvb2xlYW4ge1xuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHJlbW92ZWQ6IGJvb2xlYW4gPSBoYW5kbGUucmV0YWluZXJzLmRlbGV0ZSh0b2tlbik7XG5cbiAgaWYgKGhhbmRsZS5yZXRhaW5lcnMuc2l6ZSA9PT0gMCkge1xuICAgIHJlbW92ZUNoYW5nZUxpc3RlbmVyRnJvbU1xbChoYW5kbGUubXFsLCBoYW5kbGUub25DaGFuZ2UpO1xuICAgIHJlZ2lzdHJ5LmRlbGV0ZShxdWVyeSk7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlZDtcbn1cblxuLyogQGludGVybmFsXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJlZ2lzdHJ5ICh1c2VkIG9ubHkgaW4gdGVzdHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2dldFJlZ2lzdHJ5KCk6IE1xbFJlZ2lzdHJ5IHtcbiAgcmV0dXJuIGdldFJlZ2lzdHJ5KCk7XG59XG5cbi8qIEBpbnRlcm5hbFxuICogQ2xlYXJzIGFsbCByZWdpc3RyeSBlbnRyaWVzIGFuZCByZW1vdmVzIG1lZGlhLXF1ZXJ5IGxpc3RlbmVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIHJlZ2lzdHJ5LmZvckVhY2goKGhhbmRsZTogTXFIYW5kbGUpID0+IHtcbiAgICByZW1vdmVDaGFuZ2VMaXN0ZW5lckZyb21NcWwoaGFuZGxlLm1xbCwgaGFuZGxlLm9uQ2hhbmdlKTtcbiAgfSk7XG5cbiAgcmVnaXN0cnkuY2xlYXIoKTtcbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5Lm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbXFsLXJlZ2lzdHJ5L21xbC1yZWdpc3RyeS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgTXFSZXRhaW5Ub2tlbiA9IHN5bWJvbDtcblxuZXhwb3J0IGludGVyZmFjZSBNcVJldGFpblJlZiB7XG4gIHNpZ25hbDogU2lnbmFsPGJvb2xlYW4+O1xuICB0b2tlbjogTXFSZXRhaW5Ub2tlbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNcUhhbmRsZSB7XG4gIG1xbDogTWVkaWFRdWVyeUxpc3Q7XG4gIHNpZ25hbDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG4gIG9uQ2hhbmdlOiAoZXZlbnQ/OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB2b2lkO1xuICByZXRhaW5lcnM6IFNldDxNcVJldGFpblRva2VuPjtcbn1cblxuZXhwb3J0IHR5cGUgTXFsUmVnaXN0cnkgPSBNYXA8c3RyaW5nLCBNcUhhbmRsZT47XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5Lm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbXFsLXJlZ2lzdHJ5L21xbC1yZWdpc3RyeS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIE1xUmV0YWluVG9rZW4gPSBEZXN0cm95UmVmO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1xSGFuZGxlIHtcbiAgbXFsOiBNZWRpYVF1ZXJ5TGlzdDtcbiAgc2lnbmFsOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgb25DaGFuZ2U6IChldmVudD86IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHZvaWQ7XG4gIHJldGFpbmVyczogU2V0PE1xUmV0YWluVG9rZW4+O1xufVxuXG5leHBvcnQgdHlwZSBNcWxSZWdpc3RyeSA9IE1hcDxzdHJpbmcsIE1xSGFuZGxlPjtcbiJdfQ==
@@ -26,7 +26,6 @@ const getRegistry = () => {
26
26
  const realmGlobal = globalThis;
27
27
  return (realmGlobal[REGISTRY_KEY] ??= new Map());
28
28
  };
29
- const createRetainToken = (query) => Symbol(`mq-retainer:${query}`);
30
29
  const createMqHandle = (query) => {
31
30
  const mql = matchMedia(query);
32
31
  const signal$1 = signal(mql.matches);
@@ -34,11 +33,10 @@ const createMqHandle = (query) => {
34
33
  addChangeListenerToMql(mql, onChange);
35
34
  return { mql, signal: signal$1, onChange, retainers: new Set() };
36
35
  };
37
- function retain(query) {
38
- const token = createRetainToken(query);
36
+ function retain(query, token) {
39
37
  // SSR-safe fallback
40
38
  if (typeof globalThis.matchMedia !== 'function') {
41
- return { signal: signal(false).asReadonly(), token };
39
+ return signal(false).asReadonly();
42
40
  }
43
41
  const registry = getRegistry();
44
42
  let handle = registry.get(query);
@@ -47,7 +45,7 @@ function retain(query) {
47
45
  registry.set(query, handle);
48
46
  }
49
47
  handle.retainers.add(token);
50
- return { signal: handle.signal.asReadonly(), token };
48
+ return handle.signal.asReadonly();
51
49
  }
52
50
  function release(query, token) {
53
51
  const registry = getRegistry();
@@ -61,12 +59,28 @@ function release(query, token) {
61
59
  }
62
60
  return removed;
63
61
  }
62
+ /* @internal
63
+ * Returns the current registry (used only in tests).
64
+ */
65
+ function _getRegistry() {
66
+ return getRegistry();
67
+ }
68
+ /* @internal
69
+ * Clears all registry entries and removes media-query listeners.
70
+ */
71
+ function _resetRegistry() {
72
+ const registry = getRegistry();
73
+ registry.forEach((handle) => {
74
+ removeChangeListenerFromMql(handle.mql, handle.onChange);
75
+ });
76
+ registry.clear();
77
+ }
64
78
 
65
79
  function retainUntilDestroy(query) {
66
- const ref = retain(query);
67
80
  const destroyRef = inject(DestroyRef);
68
- destroyRef.onDestroy(() => release(query, ref.token));
69
- return ref;
81
+ const querySignal = retain(query, destroyRef);
82
+ destroyRef.onDestroy(() => release(query, destroyRef));
83
+ return querySignal;
70
84
  }
71
85
 
72
86
  const TAILWIND_BREAKPOINTS = {
@@ -145,8 +159,8 @@ function applyMaxEpsilon(value) {
145
159
  }
146
160
 
147
161
  function createConsumer(query) {
148
- const retainRef = retainUntilDestroy(query);
149
- return computed(() => retainRef.signal());
162
+ const querySignal = retainUntilDestroy(query);
163
+ return computed(() => querySignal());
150
164
  }
151
165
  function createConsumerLabel(descriptor) {
152
166
  return `[NgxMq Signal: ${descriptor}]`;
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-mq.mjs","sources":["../../src/lib/mql-registry/mql-registry.listeners.ts","../../src/lib/mql-registry/mql-registry.ts","../../src/lib/mql-registry/mql-registry.extensions.ts","../../src/lib/constants.ts","../../src/lib/tokens.ts","../../src/lib/utils/breakpoints.utils.ts","../../src/lib/core.ts","../../src/lib/utils/common.utils.ts","../../src/lib/api.ts","../../src/lib/providers.ts","../../src/ngx-mq.ts"],"sourcesContent":["export function addChangeListenerToMql(mql: MediaQueryList, onChange: (event?: MediaQueryListEvent) => void): void {\n if (typeof mql.addEventListener === 'function') {\n // Modern browsers\n mql.addEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).addListener(onChange);\n }\n}\n\nexport function removeChangeListenerFromMql(\n mql: MediaQueryList,\n onChange: (event?: MediaQueryListEvent) => void\n): void {\n if (typeof mql.removeEventListener === 'function') {\n // Modern browsers\n mql.removeEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).removeListener(onChange);\n }\n}\n","import { signal as createSignal, WritableSignal } from '@angular/core';\nimport { addChangeListenerToMql, removeChangeListenerFromMql } from './mql-registry.listeners';\nimport { MqlRegistry, MqRetainToken, MqHandle, MqRetainRef } from './mql-registry.models';\n\nconst REGISTRY_KEY: symbol = Symbol.for('ngx-mq:mql-registry');\n\nconst getRegistry = (): MqlRegistry => {\n const realmGlobal: Record<PropertyKey, unknown> = globalThis;\n\n return (realmGlobal[REGISTRY_KEY] ??= new Map()) as MqlRegistry;\n};\n\nconst createRetainToken = (query: string): MqRetainToken => Symbol(`mq-retainer:${query}`);\n\nconst createMqHandle = (query: string): MqHandle => {\n const mql: MediaQueryList = matchMedia(query);\n const signal: WritableSignal<boolean> = createSignal(mql.matches);\n\n const onChange = (event?: MediaQueryListEvent) => signal.set(event?.matches ?? mql.matches);\n\n addChangeListenerToMql(mql, onChange);\n\n return { mql, signal, onChange, retainers: new Set() };\n};\n\nexport function retain(query: string): MqRetainRef {\n const token: MqRetainToken = createRetainToken(query);\n\n // SSR-safe fallback\n if (typeof globalThis.matchMedia !== 'function') {\n return { signal: createSignal(false).asReadonly(), token };\n }\n\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) {\n handle = createMqHandle(query);\n registry.set(query, handle);\n }\n\n handle.retainers.add(token);\n\n return { signal: handle.signal.asReadonly(), token };\n}\n\nexport function release(query: string, token: MqRetainToken): boolean {\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) return false;\n\n const removed: boolean = handle.retainers.delete(token);\n\n if (handle.retainers.size === 0) {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n registry.delete(query);\n }\n\n return removed;\n}\n","import { DestroyRef, inject } from '@angular/core';\nimport { retain, release } from './mql-registry';\nimport { MqRetainRef } from './mql-registry.models';\n\nexport function retainUntilDestroy(query: string): MqRetainRef {\n const ref: MqRetainRef = retain(query);\n const destroyRef: DestroyRef = inject(DestroyRef);\n\n destroyRef.onDestroy(() => release(query, ref.token));\n\n return ref;\n}\n","import { MqBreakpoints } from './models';\n\nexport const TAILWIND_BREAKPOINTS: MqBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\nexport const BOOTSTRAP_BREAKPOINTS: MqBreakpoints = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400,\n};\n\nexport const MATERIAL_BREAKPOINTS: MqBreakpoints = {\n sm: 600,\n md: 905,\n lg: 1240,\n xl: 1440,\n};\n\nexport const DEFAULT_BREAKPOINT_EPSILON: number = 0.02;\n","import { InjectionToken } from '@angular/core';\nimport { DEFAULT_BREAKPOINT_EPSILON } from './constants';\nimport { MqBreakpoints } from './models';\n\nexport const MQ_BREAKPOINTS: InjectionToken<MqBreakpoints> = new InjectionToken('MQ_BREAKPOINTS');\n\nexport const MQ_BREAKPOINT_EPSILON: InjectionToken<number> = new InjectionToken('MQ_BREAKPOINT_EPSILON', {\n providedIn: 'root',\n factory: () => DEFAULT_BREAKPOINT_EPSILON,\n});\n","import { inject, isDevMode } from '@angular/core';\nimport { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from '../tokens';\nimport { MqBreakpoints } from '../models';\n\nfunction assertBreakpointsProvided(): MqBreakpoints {\n const breakpoints: MqBreakpoints | null = inject(MQ_BREAKPOINTS, { optional: true });\n\n if (isDevMode() && !breakpoints) {\n throw new Error(\n '[ngx-mq]: No breakpoints provided.\\n' +\n 'Please configure your app with provideBreakpoints(), ' +\n 'or use one of the built-in presets: ' +\n 'provideTailwindBreakpoints(), provideBootstrapBreakpoints(), provideMaterialBreakpoints().'\n );\n }\n\n return breakpoints!;\n}\n\nfunction assertBreakpointExists(bp: string, breakpoints: MqBreakpoints): number {\n if (isDevMode() && !(bp in breakpoints)) {\n throw new Error(\n `[ngx-mq]: Breakpoint \"${bp}\" not found in provided configuration.\\n` +\n `Available breakpoints: ${Object.keys(breakpoints).join(', ')}.`\n );\n }\n\n return breakpoints[bp];\n}\n\nexport function resolveBreakpoint(bp: string): number {\n const breakpoints: MqBreakpoints = assertBreakpointsProvided();\n\n return assertBreakpointExists(bp, breakpoints);\n}\n\nexport function normalizeBreakpoints(bps: MqBreakpoints): Readonly<MqBreakpoints> {\n const out: Record<string, number> = {};\n\n for (const [rawKey, value] of Object.entries(bps)) {\n const key = rawKey.trim();\n\n if (isDevMode()) {\n if (!Number.isFinite(value)) {\n throw new Error(`[ngx-mq] Breakpoint \"${key}\" must be a finite number, got ${value}.`);\n }\n\n if (value <= 0) {\n throw new Error(`[ngx-mq] Breakpoint \"${key}\" must be > 0, got ${value}.`);\n }\n }\n\n out[key] = value;\n }\n\n return Object.freeze(out);\n}\n\nexport function validateEpsilon(epsilon: number): void {\n if (!Number.isFinite(epsilon) || epsilon <= 0 || epsilon > 1) {\n throw new Error(`[ngx-mq] Epsilon must be in (0, 1]. Got: ${epsilon}`);\n }\n}\n\nexport function applyMaxEpsilon(value: number): number {\n const epsilon: number = inject(MQ_BREAKPOINT_EPSILON, { optional: true }) ?? 0.02;\n\n return value - epsilon;\n}\n","import { computed, Signal } from '@angular/core';\nimport { MqRetainRef, retainUntilDestroy } from './mql-registry';\n\nexport function createConsumer(query: string): Signal<boolean> {\n const retainRef: MqRetainRef = retainUntilDestroy(query);\n\n return computed(() => retainRef.signal());\n}\n\nexport function createConsumerLabel(descriptor: string): string {\n return `[NgxMq Signal: ${descriptor}]`;\n}\n","export function normalizeQuery(value: string): string {\n return value.trim().replace(/\\s+/g, ' ').toLowerCase();\n}\n","import { assertInInjectionContext, isDevMode, Signal } from '@angular/core';\nimport { applyMaxEpsilon, resolveBreakpoint } from './utils/breakpoints.utils';\nimport { createConsumer, createConsumerLabel } from './core';\nimport { normalizeQuery } from './utils/common.utils';\n\nexport function up(bp: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(up);\n\n const query: string = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`up(${bp})`);\n\n return consumer;\n}\n\nexport function down(bp: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(down);\n\n const query: string = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`down(${bp})`);\n\n return consumer;\n}\n\nexport function between(minBp: string, maxBp: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(between);\n\n const minPx: number = resolveBreakpoint(minBp);\n const maxPx: number = resolveBreakpoint(maxBp);\n const query: string = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);\n\n return consumer;\n}\n\nexport function matchMediaSignal(query: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(matchMediaSignal);\n\n const media: string = normalizeQuery(query);\n const consumer: Signal<boolean> = createConsumer(media);\n\n consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);\n\n return consumer;\n}\n","import { isDevMode, Provider } from '@angular/core';\nimport { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from './tokens';\nimport { normalizeBreakpoints, validateEpsilon } from './utils/breakpoints.utils';\nimport { MqBreakpoints } from './models';\nimport {\n BOOTSTRAP_BREAKPOINTS,\n DEFAULT_BREAKPOINT_EPSILON,\n MATERIAL_BREAKPOINTS,\n TAILWIND_BREAKPOINTS,\n} from './constants';\n\nexport function provideBreakpoints(bps: MqBreakpoints): Provider {\n return { provide: MQ_BREAKPOINTS, useValue: normalizeBreakpoints(bps) };\n}\n\nexport function provideTailwindBreakpoints(): Provider {\n return provideBreakpoints(TAILWIND_BREAKPOINTS);\n}\n\nexport function provideBootstrapBreakpoints(): Provider {\n return provideBreakpoints(BOOTSTRAP_BREAKPOINTS);\n}\n\nexport function provideMaterialBreakpoints(): Provider {\n return provideBreakpoints(MATERIAL_BREAKPOINTS);\n}\n\nexport function provideBreakpointEpsilon(epsilon: number = DEFAULT_BREAKPOINT_EPSILON): Provider {\n if (isDevMode()) validateEpsilon(epsilon);\n\n return { provide: MQ_BREAKPOINT_EPSILON, useValue: epsilon };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["signal","createSignal"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-mq.mjs","sources":["../../src/lib/mql-registry/mql-registry.listeners.ts","../../src/lib/mql-registry/mql-registry.ts","../../src/lib/mql-registry/mql-registry.extensions.ts","../../src/lib/constants.ts","../../src/lib/tokens.ts","../../src/lib/utils/breakpoints.utils.ts","../../src/lib/core.ts","../../src/lib/utils/common.utils.ts","../../src/lib/api.ts","../../src/lib/providers.ts","../../src/ngx-mq.ts"],"sourcesContent":["export function addChangeListenerToMql(mql: MediaQueryList, onChange: (event?: MediaQueryListEvent) => void): void {\n if (typeof mql.addEventListener === 'function') {\n // Modern browsers\n mql.addEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).addListener(onChange);\n }\n}\n\nexport function removeChangeListenerFromMql(\n mql: MediaQueryList,\n onChange: (event?: MediaQueryListEvent) => void\n): void {\n if (typeof mql.removeEventListener === 'function') {\n // Modern browsers\n mql.removeEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).removeListener(onChange);\n }\n}\n","import { signal as createSignal, Signal, WritableSignal } from '@angular/core';\nimport { addChangeListenerToMql, removeChangeListenerFromMql } from './mql-registry.listeners';\nimport { MqlRegistry, MqRetainToken, MqHandle } from './mql-registry.models';\n\nconst REGISTRY_KEY: symbol = Symbol.for('ngx-mq:mql-registry');\n\nconst getRegistry = (): MqlRegistry => {\n const realmGlobal: Record<PropertyKey, unknown> = globalThis;\n\n return (realmGlobal[REGISTRY_KEY] ??= new Map()) as MqlRegistry;\n};\n\nconst createMqHandle = (query: string): MqHandle => {\n const mql: MediaQueryList = matchMedia(query);\n const signal: WritableSignal<boolean> = createSignal(mql.matches);\n\n const onChange = (event?: MediaQueryListEvent) => signal.set(event?.matches ?? mql.matches);\n\n addChangeListenerToMql(mql, onChange);\n\n return { mql, signal, onChange, retainers: new Set() };\n};\n\nexport function retain(query: string, token: MqRetainToken): Signal<boolean> {\n // SSR-safe fallback\n if (typeof globalThis.matchMedia !== 'function') {\n return createSignal(false).asReadonly();\n }\n\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) {\n handle = createMqHandle(query);\n registry.set(query, handle);\n }\n\n handle.retainers.add(token);\n\n return handle.signal.asReadonly();\n}\n\nexport function release(query: string, token: MqRetainToken): boolean {\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) return false;\n\n const removed: boolean = handle.retainers.delete(token);\n\n if (handle.retainers.size === 0) {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n registry.delete(query);\n }\n\n return removed;\n}\n\n/* @internal\n * Returns the current registry (used only in tests).\n */\nexport function _getRegistry(): MqlRegistry {\n return getRegistry();\n}\n\n/* @internal\n * Clears all registry entries and removes media-query listeners.\n */\nexport function _resetRegistry(): void {\n const registry: MqlRegistry = getRegistry();\n\n registry.forEach((handle: MqHandle) => {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n });\n\n registry.clear();\n}\n","import { DestroyRef, inject, Signal } from '@angular/core';\nimport { retain, release } from './mql-registry';\n\nexport function retainUntilDestroy(query: string): Signal<boolean> {\n const destroyRef: DestroyRef = inject(DestroyRef);\n\n const querySignal: Signal<boolean> = retain(query, destroyRef);\n\n destroyRef.onDestroy(() => release(query, destroyRef));\n\n return querySignal;\n}\n","import { MqBreakpoints } from './models';\n\nexport const TAILWIND_BREAKPOINTS: MqBreakpoints = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\nexport const BOOTSTRAP_BREAKPOINTS: MqBreakpoints = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400,\n};\n\nexport const MATERIAL_BREAKPOINTS: MqBreakpoints = {\n sm: 600,\n md: 905,\n lg: 1240,\n xl: 1440,\n};\n\nexport const DEFAULT_BREAKPOINT_EPSILON: number = 0.02;\n","import { InjectionToken } from '@angular/core';\nimport { DEFAULT_BREAKPOINT_EPSILON } from './constants';\nimport { MqBreakpoints } from './models';\n\nexport const MQ_BREAKPOINTS: InjectionToken<MqBreakpoints> = new InjectionToken('MQ_BREAKPOINTS');\n\nexport const MQ_BREAKPOINT_EPSILON: InjectionToken<number> = new InjectionToken('MQ_BREAKPOINT_EPSILON', {\n providedIn: 'root',\n factory: () => DEFAULT_BREAKPOINT_EPSILON,\n});\n","import { inject, isDevMode } from '@angular/core';\nimport { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from '../tokens';\nimport { MqBreakpoints } from '../models';\n\nfunction assertBreakpointsProvided(): MqBreakpoints {\n const breakpoints: MqBreakpoints | null = inject(MQ_BREAKPOINTS, { optional: true });\n\n if (isDevMode() && !breakpoints) {\n throw new Error(\n '[ngx-mq]: No breakpoints provided.\\n' +\n 'Please configure your app with provideBreakpoints(), ' +\n 'or use one of the built-in presets: ' +\n 'provideTailwindBreakpoints(), provideBootstrapBreakpoints(), provideMaterialBreakpoints().'\n );\n }\n\n return breakpoints!;\n}\n\nfunction assertBreakpointExists(bp: string, breakpoints: MqBreakpoints): number {\n if (isDevMode() && !(bp in breakpoints)) {\n throw new Error(\n `[ngx-mq]: Breakpoint \"${bp}\" not found in provided configuration.\\n` +\n `Available breakpoints: ${Object.keys(breakpoints).join(', ')}.`\n );\n }\n\n return breakpoints[bp];\n}\n\nexport function resolveBreakpoint(bp: string): number {\n const breakpoints: MqBreakpoints = assertBreakpointsProvided();\n\n return assertBreakpointExists(bp, breakpoints);\n}\n\nexport function normalizeBreakpoints(bps: MqBreakpoints): Readonly<MqBreakpoints> {\n const out: Record<string, number> = {};\n\n for (const [rawKey, value] of Object.entries(bps)) {\n const key = rawKey.trim();\n\n if (isDevMode()) {\n if (!Number.isFinite(value)) {\n throw new Error(`[ngx-mq] Breakpoint \"${key}\" must be a finite number, got ${value}.`);\n }\n\n if (value <= 0) {\n throw new Error(`[ngx-mq] Breakpoint \"${key}\" must be > 0, got ${value}.`);\n }\n }\n\n out[key] = value;\n }\n\n return Object.freeze(out);\n}\n\nexport function validateEpsilon(epsilon: number): void {\n if (!Number.isFinite(epsilon) || epsilon <= 0 || epsilon > 1) {\n throw new Error(`[ngx-mq] Epsilon must be in (0, 1]. Got: ${epsilon}`);\n }\n}\n\nexport function applyMaxEpsilon(value: number): number {\n const epsilon: number = inject(MQ_BREAKPOINT_EPSILON, { optional: true }) ?? 0.02;\n\n return value - epsilon;\n}\n","import { computed, Signal } from '@angular/core';\nimport { retainUntilDestroy } from './mql-registry';\n\nexport function createConsumer(query: string): Signal<boolean> {\n const querySignal: Signal<boolean> = retainUntilDestroy(query);\n\n return computed(() => querySignal());\n}\n\nexport function createConsumerLabel(descriptor: string): string {\n return `[NgxMq Signal: ${descriptor}]`;\n}\n","export function normalizeQuery(value: string): string {\n return value.trim().replace(/\\s+/g, ' ').toLowerCase();\n}\n","import { assertInInjectionContext, isDevMode, Signal } from '@angular/core';\nimport { applyMaxEpsilon, resolveBreakpoint } from './utils/breakpoints.utils';\nimport { createConsumer, createConsumerLabel } from './core';\nimport { normalizeQuery } from './utils/common.utils';\n\nexport function up(bp: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(up);\n\n const query: string = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`up(${bp})`);\n\n return consumer;\n}\n\nexport function down(bp: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(down);\n\n const query: string = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`down(${bp})`);\n\n return consumer;\n}\n\nexport function between(minBp: string, maxBp: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(between);\n\n const minPx: number = resolveBreakpoint(minBp);\n const maxPx: number = resolveBreakpoint(maxBp);\n const query: string = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);\n\n return consumer;\n}\n\nexport function matchMediaSignal(query: string): Signal<boolean> {\n isDevMode() && assertInInjectionContext(matchMediaSignal);\n\n const media: string = normalizeQuery(query);\n const consumer: Signal<boolean> = createConsumer(media);\n\n consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);\n\n return consumer;\n}\n","import { isDevMode, Provider } from '@angular/core';\nimport { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from './tokens';\nimport { normalizeBreakpoints, validateEpsilon } from './utils/breakpoints.utils';\nimport { MqBreakpoints } from './models';\nimport {\n BOOTSTRAP_BREAKPOINTS,\n DEFAULT_BREAKPOINT_EPSILON,\n MATERIAL_BREAKPOINTS,\n TAILWIND_BREAKPOINTS,\n} from './constants';\n\nexport function provideBreakpoints(bps: MqBreakpoints): Provider {\n return { provide: MQ_BREAKPOINTS, useValue: normalizeBreakpoints(bps) };\n}\n\nexport function provideTailwindBreakpoints(): Provider {\n return provideBreakpoints(TAILWIND_BREAKPOINTS);\n}\n\nexport function provideBootstrapBreakpoints(): Provider {\n return provideBreakpoints(BOOTSTRAP_BREAKPOINTS);\n}\n\nexport function provideMaterialBreakpoints(): Provider {\n return provideBreakpoints(MATERIAL_BREAKPOINTS);\n}\n\nexport function provideBreakpointEpsilon(epsilon: number = DEFAULT_BREAKPOINT_EPSILON): Provider {\n if (isDevMode()) validateEpsilon(epsilon);\n\n return { provide: MQ_BREAKPOINT_EPSILON, useValue: epsilon };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["signal","createSignal"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export { retain, release } from './mql-registry';
2
2
  export { retainUntilDestroy } from './mql-registry.extensions';
3
- export { MqRetainToken, MqRetainRef } from './mql-registry.models';
3
+ export { MqRetainToken } from './mql-registry.models';
@@ -1,3 +1,6 @@
1
- import { MqRetainToken, MqRetainRef } from './mql-registry.models';
2
- export declare function retain(query: string): MqRetainRef;
1
+ import { Signal } from '@angular/core';
2
+ import { MqlRegistry, MqRetainToken } from './mql-registry.models';
3
+ export declare function retain(query: string, token: MqRetainToken): Signal<boolean>;
3
4
  export declare function release(query: string, token: MqRetainToken): boolean;
5
+ export declare function _getRegistry(): MqlRegistry;
6
+ export declare function _resetRegistry(): void;
@@ -1,2 +1,2 @@
1
- import { MqRetainRef } from './mql-registry.models';
2
- export declare function retainUntilDestroy(query: string): MqRetainRef;
1
+ import { Signal } from '@angular/core';
2
+ export declare function retainUntilDestroy(query: string): Signal<boolean>;
@@ -1,9 +1,5 @@
1
- import { Signal, WritableSignal } from '@angular/core';
2
- export type MqRetainToken = symbol;
3
- export interface MqRetainRef {
4
- signal: Signal<boolean>;
5
- token: MqRetainToken;
6
- }
1
+ import { DestroyRef, WritableSignal } from '@angular/core';
2
+ export type MqRetainToken = DestroyRef;
7
3
  export interface MqHandle {
8
4
  mql: MediaQueryList;
9
5
  signal: WritableSignal<boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-mq",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Signal-powered breakpoints and media queries for Angular.",
5
5
  "repository": {
6
6
  "type": "git",