ngx-mq 1.0.2 → 2.0.1
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 +21 -10
- package/fesm2022/ngx-mq.mjs +17 -12
- package/fesm2022/ngx-mq.mjs.map +1 -1
- package/index.d.ts +32 -6
- package/package.json +3 -5
- package/esm2022/index.mjs +0 -7
- package/esm2022/lib/api.mjs +0 -35
- package/esm2022/lib/constants.mjs +0 -22
- package/esm2022/lib/core.mjs +0 -10
- package/esm2022/lib/models.mjs +0 -2
- package/esm2022/lib/mql-registry/index.mjs +0 -3
- package/esm2022/lib/mql-registry/mql-registry.extensions.mjs +0 -9
- package/esm2022/lib/mql-registry/mql-registry.listeners.mjs +0 -21
- package/esm2022/lib/mql-registry/mql-registry.mjs +0 -57
- package/esm2022/lib/mql-registry/mql-registry.models.mjs +0 -2
- package/esm2022/lib/providers.mjs +0 -22
- package/esm2022/lib/tokens.mjs +0 -8
- package/esm2022/lib/utils/breakpoints.utils.mjs +0 -49
- package/esm2022/lib/utils/common.utils.mjs +0 -4
- package/esm2022/ngx-mq.mjs +0 -5
- package/lib/api.d.ts +0 -5
- package/lib/constants.d.ts +0 -5
- package/lib/core.d.ts +0 -3
- package/lib/models.d.ts +0 -1
- package/lib/mql-registry/index.d.ts +0 -3
- package/lib/mql-registry/mql-registry.d.ts +0 -6
- package/lib/mql-registry/mql-registry.extensions.d.ts +0 -2
- package/lib/mql-registry/mql-registry.listeners.d.ts +0 -2
- package/lib/mql-registry/mql-registry.models.d.ts +0 -9
- package/lib/providers.d.ts +0 -7
- package/lib/tokens.d.ts +0 -4
- package/lib/utils/breakpoints.utils.d.ts +0 -5
- package/lib/utils/common.utils.d.ts +0 -1
package/README.md
CHANGED
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
|
|
23
23
|
Built on the native [matchMedia](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia) API, NGX-MQ brings a signal-based and declarative way to handle breakpoints and media queries in Angular. Lifecycle management is fully automated via `DestroyRef`, removing the need for manual cleanup. Under the hood, it leverages the Multiton and Flyweight patterns for efficient instance reuse and consistent behavior across your app.
|
|
24
24
|
|
|
25
|
-
> **Tip:** Always call query utilities within Angular’s [injection context](https://
|
|
25
|
+
> **Tip:** Always call query utilities within Angular’s [injection context](https://angular.dev/guide/di/dependency-injection-context) to keep them in sync with the framework’s lifecycle.
|
|
26
26
|
|
|
27
27
|
## Live Demo
|
|
28
28
|
|
|
29
|
-
Try it on [StackBlitz](https://stackblitz.com/github/martsinlabs/ngx-mq-demo/tree/demo/
|
|
29
|
+
Try it on [StackBlitz](https://stackblitz.com/github/martsinlabs/ngx-mq-demo/tree/demo/v2?file=src%2Fapp%2Fapp.component.ts)
|
|
30
30
|
|
|
31
31
|
## Installation
|
|
32
32
|
|
|
@@ -87,11 +87,11 @@ bootstrapApplication(AppComponent, {
|
|
|
87
87
|
|
|
88
88
|
### BP-related utilities
|
|
89
89
|
|
|
90
|
-
| Function | Parameters
|
|
91
|
-
| --------- |
|
|
92
|
-
| `up` | `bp: string` | `Signal<boolean>` | `true` when viewport width ≥ breakpoint |
|
|
93
|
-
| `down` | `bp: string` | `Signal<boolean>` | `true` when viewport width < breakpoint |
|
|
94
|
-
| `between` | `minBp: string, maxBp: string` | `Signal<boolean>` | `true` when viewport width is in range [a, b] |
|
|
90
|
+
| Function | Parameters | Returns | Description |
|
|
91
|
+
| --------- | ----------------------------------------------------------------- | ----------------- | --------------------------------------------- |
|
|
92
|
+
| `up` | `bp: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when viewport width ≥ breakpoint |
|
|
93
|
+
| `down` | `bp: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when viewport width < breakpoint |
|
|
94
|
+
| `between` | `minBp: string, maxBp: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when viewport width is in range [a, b] |
|
|
95
95
|
|
|
96
96
|
> **Tip:** Wrap these APIs into reusable helpers:
|
|
97
97
|
|
|
@@ -111,9 +111,9 @@ export const isDesktop = (): Signal<boolean> => up('lg');
|
|
|
111
111
|
|
|
112
112
|
Works with any valid [CSS media query](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries) and returns a `Signal<boolean>` which automatically updates when the query result changes.
|
|
113
113
|
|
|
114
|
-
| Function | Parameters
|
|
115
|
-
| ------------------ |
|
|
116
|
-
| `matchMediaSignal` | `query: string` | `Signal<boolean>` | Provides a signal representing the state of a media query |
|
|
114
|
+
| Function | Parameters | Returns | Description |
|
|
115
|
+
| ------------------ | -------------------------------------------------- | ----------------- | --------------------------------------------------------- |
|
|
116
|
+
| `matchMediaSignal` | `query: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | Provides a signal representing the state of a media query |
|
|
117
117
|
|
|
118
118
|
> **Tip:** Use this API for media queries that are not part of your breakpoint map.
|
|
119
119
|
|
|
@@ -124,3 +124,14 @@ import { matchMediaSignal } from 'ngx-mq';
|
|
|
124
124
|
// Example: track orientation changes
|
|
125
125
|
export const isLandscape = (): Signal<boolean> => matchMediaSignal('(orientation: landscape)');
|
|
126
126
|
```
|
|
127
|
+
|
|
128
|
+
## Types
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
export interface CreateMediaQueryOptions {
|
|
132
|
+
/**
|
|
133
|
+
* A debug name for the signal. Used in Angular DevTools to identify the signal.
|
|
134
|
+
*/
|
|
135
|
+
debugName?: string;
|
|
136
|
+
}
|
|
137
|
+
```
|
package/fesm2022/ngx-mq.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { signal, inject, DestroyRef, InjectionToken, isDevMode,
|
|
1
|
+
import { signal, inject, DestroyRef, InjectionToken, isDevMode, assertInInjectionContext } from '@angular/core';
|
|
2
|
+
import { createComputed, SIGNAL } from '@angular/core/primitives/signals';
|
|
2
3
|
|
|
3
4
|
function addChangeListenerToMql(mql, onChange) {
|
|
4
5
|
if (typeof mql.addEventListener === 'function') {
|
|
@@ -28,7 +29,7 @@ const getRegistry = () => {
|
|
|
28
29
|
};
|
|
29
30
|
const createMqHandle = (query) => {
|
|
30
31
|
const mql = matchMedia(query);
|
|
31
|
-
const signal$1 = signal(mql.matches);
|
|
32
|
+
const signal$1 = signal(mql.matches, { debugName: `ngx-mq: ${query}` });
|
|
32
33
|
const onChange = (event) => signal$1.set(event?.matches ?? mql.matches);
|
|
33
34
|
addChangeListenerToMql(mql, onChange);
|
|
34
35
|
return { mql, signal: signal$1, onChange, retainers: new Set() };
|
|
@@ -158,9 +159,13 @@ function applyMaxEpsilon(value) {
|
|
|
158
159
|
return value - epsilon;
|
|
159
160
|
}
|
|
160
161
|
|
|
161
|
-
function createConsumer(query) {
|
|
162
|
+
function createConsumer(query, debugName) {
|
|
162
163
|
const querySignal = retainUntilDestroy(query);
|
|
163
|
-
|
|
164
|
+
const getter = createComputed(() => querySignal());
|
|
165
|
+
if (isDevMode()) {
|
|
166
|
+
getter[SIGNAL].debugName = debugName;
|
|
167
|
+
}
|
|
168
|
+
return getter;
|
|
164
169
|
}
|
|
165
170
|
function createConsumerLabel(descriptor) {
|
|
166
171
|
return `[NgxMq Signal: ${descriptor}]`;
|
|
@@ -170,33 +175,33 @@ function normalizeQuery(value) {
|
|
|
170
175
|
return value.trim().replace(/\s+/g, ' ').toLowerCase();
|
|
171
176
|
}
|
|
172
177
|
|
|
173
|
-
function up(bp) {
|
|
178
|
+
function up(bp, options) {
|
|
174
179
|
isDevMode() && assertInInjectionContext(up);
|
|
175
180
|
const query = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);
|
|
176
|
-
const consumer = createConsumer(query);
|
|
181
|
+
const consumer = createConsumer(query, options?.debugName);
|
|
177
182
|
consumer.toString = () => createConsumerLabel(`up(${bp})`);
|
|
178
183
|
return consumer;
|
|
179
184
|
}
|
|
180
|
-
function down(bp) {
|
|
185
|
+
function down(bp, options) {
|
|
181
186
|
isDevMode() && assertInInjectionContext(down);
|
|
182
187
|
const query = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);
|
|
183
|
-
const consumer = createConsumer(query);
|
|
188
|
+
const consumer = createConsumer(query, options?.debugName);
|
|
184
189
|
consumer.toString = () => createConsumerLabel(`down(${bp})`);
|
|
185
190
|
return consumer;
|
|
186
191
|
}
|
|
187
|
-
function between(minBp, maxBp) {
|
|
192
|
+
function between(minBp, maxBp, options) {
|
|
188
193
|
isDevMode() && assertInInjectionContext(between);
|
|
189
194
|
const minPx = resolveBreakpoint(minBp);
|
|
190
195
|
const maxPx = resolveBreakpoint(maxBp);
|
|
191
196
|
const query = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);
|
|
192
|
-
const consumer = createConsumer(query);
|
|
197
|
+
const consumer = createConsumer(query, options?.debugName);
|
|
193
198
|
consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);
|
|
194
199
|
return consumer;
|
|
195
200
|
}
|
|
196
|
-
function matchMediaSignal(query) {
|
|
201
|
+
function matchMediaSignal(query, options) {
|
|
197
202
|
isDevMode() && assertInInjectionContext(matchMediaSignal);
|
|
198
203
|
const media = normalizeQuery(query);
|
|
199
|
-
const consumer = createConsumer(media);
|
|
204
|
+
const consumer = createConsumer(media, options?.debugName);
|
|
200
205
|
consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
|
|
201
206
|
return consumer;
|
|
202
207
|
}
|
package/fesm2022/ngx-mq.mjs.map
CHANGED
|
@@ -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, 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
|
+
{"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, { debugName: `ngx-mq: ${query}` });\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 { isDevMode, Signal } from '@angular/core';\nimport { createComputed, SIGNAL } from '@angular/core/primitives/signals';\nimport { retainUntilDestroy } from './mql-registry';\n\nexport function createConsumer(query: string, debugName?: string): Signal<boolean> {\n const querySignal: Signal<boolean> = retainUntilDestroy(query);\n\n const getter = createComputed(() => querySignal());\n\n if (isDevMode()) {\n getter[SIGNAL].debugName = debugName;\n }\n\n return getter satisfies Signal<boolean>;\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';\nimport { CreateMediaQueryOptions } from './models';\n\nexport function up(bp: string, options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(up);\n\n const query: string = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);\n const consumer: Signal<boolean> = createConsumer(query, options?.debugName);\n\n consumer.toString = () => createConsumerLabel(`up(${bp})`);\n\n return consumer;\n}\n\nexport function down(bp: string, options?: CreateMediaQueryOptions): 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, options?.debugName);\n\n consumer.toString = () => createConsumerLabel(`down(${bp})`);\n\n return consumer;\n}\n\nexport function between(minBp: string, maxBp: string, options?: CreateMediaQueryOptions): 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, options?.debugName);\n\n consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);\n\n return consumer;\n}\n\nexport function matchMediaSignal(query: string, options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(matchMediaSignal);\n\n const media: string = normalizeQuery(query);\n const consumer: Signal<boolean> = createConsumer(media, options?.debugName);\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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"}
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { DestroyRef, Signal, InjectionToken, Provider } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type MqRetainToken = DestroyRef;
|
|
4
|
+
|
|
5
|
+
declare function release(query: string, token: MqRetainToken): boolean;
|
|
6
|
+
|
|
7
|
+
declare function retainUntilDestroy(query: string): Signal<boolean>;
|
|
8
|
+
|
|
9
|
+
type MqBreakpoints = Record<string, number>;
|
|
10
|
+
interface CreateMediaQueryOptions {
|
|
11
|
+
/**
|
|
12
|
+
* A debug name for the signal. Used in Angular DevTools to identify the signal.
|
|
13
|
+
*/
|
|
14
|
+
debugName?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare function up(bp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
18
|
+
declare function down(bp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
19
|
+
declare function between(minBp: string, maxBp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
20
|
+
declare function matchMediaSignal(query: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
21
|
+
|
|
22
|
+
declare const MQ_BREAKPOINTS: InjectionToken<MqBreakpoints>;
|
|
23
|
+
declare const MQ_BREAKPOINT_EPSILON: InjectionToken<number>;
|
|
24
|
+
|
|
25
|
+
declare function provideBreakpoints(bps: MqBreakpoints): Provider;
|
|
26
|
+
declare function provideTailwindBreakpoints(): Provider;
|
|
27
|
+
declare function provideBootstrapBreakpoints(): Provider;
|
|
28
|
+
declare function provideMaterialBreakpoints(): Provider;
|
|
29
|
+
declare function provideBreakpointEpsilon(epsilon?: number): Provider;
|
|
30
|
+
|
|
31
|
+
export { MQ_BREAKPOINTS, MQ_BREAKPOINT_EPSILON, between, down, matchMediaSignal, provideBootstrapBreakpoints, provideBreakpointEpsilon, provideBreakpoints, provideMaterialBreakpoints, provideTailwindBreakpoints, release, retainUntilDestroy, up };
|
|
32
|
+
export type { CreateMediaQueryOptions, MqBreakpoints };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ngx-mq",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Signal-powered breakpoints and media queries for Angular.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"sideEffects": false,
|
|
22
22
|
"author": "Myroslav Martsin",
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@angular/
|
|
25
|
-
"@angular/
|
|
24
|
+
"@angular/common": ">=19 <21",
|
|
25
|
+
"@angular/core": ">=19 <21"
|
|
26
26
|
},
|
|
27
27
|
"module": "fesm2022/ngx-mq.mjs",
|
|
28
28
|
"typings": "index.d.ts",
|
|
@@ -32,8 +32,6 @@
|
|
|
32
32
|
},
|
|
33
33
|
".": {
|
|
34
34
|
"types": "./index.d.ts",
|
|
35
|
-
"esm2022": "./esm2022/ngx-mq.mjs",
|
|
36
|
-
"esm": "./esm2022/ngx-mq.mjs",
|
|
37
35
|
"default": "./fesm2022/ngx-mq.mjs"
|
|
38
36
|
}
|
|
39
37
|
},
|
package/esm2022/index.mjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { release } from './lib/mql-registry/mql-registry';
|
|
2
|
-
export { retainUntilDestroy } from './lib/mql-registry';
|
|
3
|
-
export * from './lib/api';
|
|
4
|
-
export * from './lib/tokens';
|
|
5
|
-
export * from './lib/providers';
|
|
6
|
-
export * from './lib/models';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyByZWxlYXNlIH0gZnJvbSAnLi9saWIvbXFsLXJlZ2lzdHJ5L21xbC1yZWdpc3RyeSc7XG5leHBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL2xpYi9tcWwtcmVnaXN0cnknO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuIl19
|
package/esm2022/lib/api.mjs
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { assertInInjectionContext, isDevMode } from '@angular/core';
|
|
2
|
-
import { applyMaxEpsilon, resolveBreakpoint } from './utils/breakpoints.utils';
|
|
3
|
-
import { createConsumer, createConsumerLabel } from './core';
|
|
4
|
-
import { normalizeQuery } from './utils/common.utils';
|
|
5
|
-
export function up(bp) {
|
|
6
|
-
isDevMode() && assertInInjectionContext(up);
|
|
7
|
-
const query = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);
|
|
8
|
-
const consumer = createConsumer(query);
|
|
9
|
-
consumer.toString = () => createConsumerLabel(`up(${bp})`);
|
|
10
|
-
return consumer;
|
|
11
|
-
}
|
|
12
|
-
export function down(bp) {
|
|
13
|
-
isDevMode() && assertInInjectionContext(down);
|
|
14
|
-
const query = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);
|
|
15
|
-
const consumer = createConsumer(query);
|
|
16
|
-
consumer.toString = () => createConsumerLabel(`down(${bp})`);
|
|
17
|
-
return consumer;
|
|
18
|
-
}
|
|
19
|
-
export function between(minBp, maxBp) {
|
|
20
|
-
isDevMode() && assertInInjectionContext(between);
|
|
21
|
-
const minPx = resolveBreakpoint(minBp);
|
|
22
|
-
const maxPx = resolveBreakpoint(maxBp);
|
|
23
|
-
const query = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);
|
|
24
|
-
const consumer = createConsumer(query);
|
|
25
|
-
consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);
|
|
26
|
-
return consumer;
|
|
27
|
-
}
|
|
28
|
-
export function matchMediaSignal(query) {
|
|
29
|
-
isDevMode() && assertInInjectionContext(matchMediaSignal);
|
|
30
|
-
const media = normalizeQuery(query);
|
|
31
|
-
const consumer = createConsumer(media);
|
|
32
|
-
consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
|
|
33
|
-
return consumer;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFVO0lBQzNCLFNBQVMsRUFBRSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sS0FBSyxHQUFXLGNBQWMsQ0FBQyxlQUFlLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixNQUFNLFFBQVEsR0FBb0IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEVBQVU7SUFDN0IsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFOUMsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFN0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDbEQsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFakQsTUFBTSxLQUFLLEdBQVcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQVcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsS0FBSyx1QkFBdUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RyxNQUFNLFFBQVEsR0FBb0IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsV0FBVyxLQUFLLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQztJQUU3RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWE7SUFDNUMsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUUxRCxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRTVFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGlzRGV2TW9kZSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseU1heEVwc2lsb24sIHJlc29sdmVCcmVha3BvaW50IH0gZnJvbSAnLi91dGlscy9icmVha3BvaW50cy51dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVDb25zdW1lciwgY3JlYXRlQ29uc3VtZXJMYWJlbCB9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBub3JtYWxpemVRdWVyeSB9IGZyb20gJy4vdXRpbHMvY29tbW9uLnV0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVwKGJwOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodXApO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG1pbi13aWR0aDogJHtyZXNvbHZlQnJlYWtwb2ludChicCl9cHgpYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGB1cCgke2JwfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3duKGJwOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZG93bik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAobWF4LXdpZHRoOiAke2FwcGx5TWF4RXBzaWxvbihyZXNvbHZlQnJlYWtwb2ludChicCkpfXB4KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnkpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgZG93bigke2JwfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXR3ZWVuKG1pbkJwOiBzdHJpbmcsIG1heEJwOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoYmV0d2Vlbik7XG5cbiAgY29uc3QgbWluUHg6IG51bWJlciA9IHJlc29sdmVCcmVha3BvaW50KG1pbkJwKTtcbiAgY29uc3QgbWF4UHg6IG51bWJlciA9IHJlc29sdmVCcmVha3BvaW50KG1heEJwKTtcbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAobWluLXdpZHRoOiAke21pblB4fXB4KSBhbmQgKG1heC13aWR0aDogJHthcHBseU1heEVwc2lsb24obWF4UHgpfXB4KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnkpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgYmV0d2Vlbigke21pbkJwfSwgJHttYXhCcH0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hNZWRpYVNpZ25hbChxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KG1hdGNoTWVkaWFTaWduYWwpO1xuXG4gIGNvbnN0IG1lZGlhOiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShxdWVyeSk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihtZWRpYSk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBtYXRjaE1lZGlhU2lnbmFsKCR7cXVlcnl9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cbiJdfQ==
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export const TAILWIND_BREAKPOINTS = {
|
|
2
|
-
sm: 640,
|
|
3
|
-
md: 768,
|
|
4
|
-
lg: 1024,
|
|
5
|
-
xl: 1280,
|
|
6
|
-
'2xl': 1536,
|
|
7
|
-
};
|
|
8
|
-
export const BOOTSTRAP_BREAKPOINTS = {
|
|
9
|
-
sm: 576,
|
|
10
|
-
md: 768,
|
|
11
|
-
lg: 992,
|
|
12
|
-
xl: 1200,
|
|
13
|
-
xxl: 1400,
|
|
14
|
-
};
|
|
15
|
-
export const MATERIAL_BREAKPOINTS = {
|
|
16
|
-
sm: 600,
|
|
17
|
-
md: 905,
|
|
18
|
-
lg: 1240,
|
|
19
|
-
xl: 1440,
|
|
20
|
-
};
|
|
21
|
-
export const DEFAULT_BREAKPOINT_EPSILON = 0.02;
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtCO0lBQ2pELEVBQUUsRUFBRSxHQUFHO0lBQ1AsRUFBRSxFQUFFLEdBQUc7SUFDUCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQWtCO0lBQ2xELEVBQUUsRUFBRSxHQUFHO0lBQ1AsRUFBRSxFQUFFLEdBQUc7SUFDUCxFQUFFLEVBQUUsR0FBRztJQUNQLEVBQUUsRUFBRSxJQUFJO0lBQ1IsR0FBRyxFQUFFLElBQUk7Q0FDVixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQWtCO0lBQ2pELEVBQUUsRUFBRSxHQUFHO0lBQ1AsRUFBRSxFQUFFLEdBQUc7SUFDUCxFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0NBQ1QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFXLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1xQnJlYWtwb2ludHMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBUQUlMV0lORF9CUkVBS1BPSU5UUzogTXFCcmVha3BvaW50cyA9IHtcbiAgc206IDY0MCxcbiAgbWQ6IDc2OCxcbiAgbGc6IDEwMjQsXG4gIHhsOiAxMjgwLFxuICAnMnhsJzogMTUzNixcbn07XG5cbmV4cG9ydCBjb25zdCBCT09UU1RSQVBfQlJFQUtQT0lOVFM6IE1xQnJlYWtwb2ludHMgPSB7XG4gIHNtOiA1NzYsXG4gIG1kOiA3NjgsXG4gIGxnOiA5OTIsXG4gIHhsOiAxMjAwLFxuICB4eGw6IDE0MDAsXG59O1xuXG5leHBvcnQgY29uc3QgTUFURVJJQUxfQlJFQUtQT0lOVFM6IE1xQnJlYWtwb2ludHMgPSB7XG4gIHNtOiA2MDAsXG4gIG1kOiA5MDUsXG4gIGxnOiAxMjQwLFxuICB4bDogMTQ0MCxcbn07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JSRUFLUE9JTlRfRVBTSUxPTjogbnVtYmVyID0gMC4wMjtcbiJdfQ==
|
package/esm2022/lib/core.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { computed } from '@angular/core';
|
|
2
|
-
import { retainUntilDestroy } from './mql-registry';
|
|
3
|
-
export function createConsumer(query) {
|
|
4
|
-
const querySignal = retainUntilDestroy(query);
|
|
5
|
-
return computed(() => querySignal());
|
|
6
|
-
}
|
|
7
|
-
export function createConsumerLabel(descriptor) {
|
|
8
|
-
return `[NgxMq Signal: ${descriptor}]`;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxNQUFNLFdBQVcsR0FBb0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0QsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQ3BELE9BQU8sa0JBQWtCLFVBQVUsR0FBRyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25zdW1lcihxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgY29uc3QgcXVlcnlTaWduYWw6IFNpZ25hbDxib29sZWFuPiA9IHJldGFpblVudGlsRGVzdHJveShxdWVyeSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHF1ZXJ5U2lnbmFsKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3VtZXJMYWJlbChkZXNjcmlwdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFtOZ3hNcSBTaWduYWw6ICR7ZGVzY3JpcHRvcn1dYDtcbn1cbiJdfQ==
|
package/esm2022/lib/models.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1xQnJlYWtwb2ludHMgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuIl19
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { retain, release } from './mql-registry';
|
|
2
|
-
export { retainUntilDestroy } from './mql-registry.extensions';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmV0YWluLCByZWxlYXNlIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnknO1xuXG5leHBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5leHRlbnNpb25zJztcblxuZXhwb3J0IHsgTXFSZXRhaW5Ub2tlbiB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5Lm1vZGVscyc7XG4iXX0=
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { DestroyRef, inject } from '@angular/core';
|
|
2
|
-
import { retain, release } from './mql-registry';
|
|
3
|
-
export function retainUntilDestroy(query) {
|
|
4
|
-
const destroyRef = inject(DestroyRef);
|
|
5
|
-
const querySignal = retain(query, destroyRef);
|
|
6
|
-
destroyRef.onDestroy(() => release(query, destroyRef));
|
|
7
|
-
return querySignal;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9tcWwtcmVnaXN0cnkuZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE1BQU0sVUFBVSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVsRCxNQUFNLFdBQVcsR0FBb0IsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRCxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV2RCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpbiwgcmVsZWFzZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpblVudGlsRGVzdHJveShxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgY29uc3QgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdCBxdWVyeVNpZ25hbDogU2lnbmFsPGJvb2xlYW4+ID0gcmV0YWluKHF1ZXJ5LCBkZXN0cm95UmVmKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiByZWxlYXNlKHF1ZXJ5LCBkZXN0cm95UmVmKSk7XG5cbiAgcmV0dXJuIHF1ZXJ5U2lnbmFsO1xufVxuIl19
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export function addChangeListenerToMql(mql, onChange) {
|
|
2
|
-
if (typeof mql.addEventListener === 'function') {
|
|
3
|
-
// Modern browsers
|
|
4
|
-
mql.addEventListener('change', onChange);
|
|
5
|
-
}
|
|
6
|
-
else {
|
|
7
|
-
// Legacy fallback (Safari < 14)
|
|
8
|
-
mql.addListener(onChange);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export function removeChangeListenerFromMql(mql, onChange) {
|
|
12
|
-
if (typeof mql.removeEventListener === 'function') {
|
|
13
|
-
// Modern browsers
|
|
14
|
-
mql.removeEventListener('change', onChange);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
// Legacy fallback (Safari < 14)
|
|
18
|
-
mql.removeListener(onChange);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5Lmxpc3RlbmVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbXFsLXJlZ2lzdHJ5L21xbC1yZWdpc3RyeS5saXN0ZW5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEdBQW1CLEVBQUUsUUFBK0M7SUFDekcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxrQkFBa0I7UUFDbEIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO1NBQU0sQ0FBQztRQUNOLGdDQUFnQztRQUMvQixHQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxHQUFtQixFQUNuQixRQUErQztJQUUvQyxJQUFJLE9BQU8sR0FBRyxDQUFDLG1CQUFtQixLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2xELGtCQUFrQjtRQUNsQixHQUFHLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7U0FBTSxDQUFDO1FBQ04sZ0NBQWdDO1FBQy9CLEdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gYWRkQ2hhbmdlTGlzdGVuZXJUb01xbChtcWw6IE1lZGlhUXVlcnlMaXN0LCBvbkNoYW5nZTogKGV2ZW50PzogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gdm9pZCk6IHZvaWQge1xuICBpZiAodHlwZW9mIG1xbC5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXJzXG4gICAgbXFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgZmFsbGJhY2sgKFNhZmFyaSA8IDE0KVxuICAgIChtcWwgYXMgYW55KS5hZGRMaXN0ZW5lcihvbkNoYW5nZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNoYW5nZUxpc3RlbmVyRnJvbU1xbChcbiAgbXFsOiBNZWRpYVF1ZXJ5TGlzdCxcbiAgb25DaGFuZ2U6IChldmVudD86IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHZvaWRcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIG1xbC5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXJzXG4gICAgbXFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgZmFsbGJhY2sgKFNhZmFyaSA8IDE0KVxuICAgIChtcWwgYXMgYW55KS5yZW1vdmVMaXN0ZW5lcihvbkNoYW5nZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { signal as createSignal } from '@angular/core';
|
|
2
|
-
import { addChangeListenerToMql, removeChangeListenerFromMql } from './mql-registry.listeners';
|
|
3
|
-
const REGISTRY_KEY = Symbol.for('ngx-mq:mql-registry');
|
|
4
|
-
const getRegistry = () => {
|
|
5
|
-
const realmGlobal = globalThis;
|
|
6
|
-
return (realmGlobal[REGISTRY_KEY] ??= new Map());
|
|
7
|
-
};
|
|
8
|
-
const createMqHandle = (query) => {
|
|
9
|
-
const mql = matchMedia(query);
|
|
10
|
-
const signal = createSignal(mql.matches);
|
|
11
|
-
const onChange = (event) => signal.set(event?.matches ?? mql.matches);
|
|
12
|
-
addChangeListenerToMql(mql, onChange);
|
|
13
|
-
return { mql, signal, onChange, retainers: new Set() };
|
|
14
|
-
};
|
|
15
|
-
export function retain(query, token) {
|
|
16
|
-
// SSR-safe fallback
|
|
17
|
-
if (typeof globalThis.matchMedia !== 'function') {
|
|
18
|
-
return createSignal(false).asReadonly();
|
|
19
|
-
}
|
|
20
|
-
const registry = getRegistry();
|
|
21
|
-
let handle = registry.get(query);
|
|
22
|
-
if (!handle) {
|
|
23
|
-
handle = createMqHandle(query);
|
|
24
|
-
registry.set(query, handle);
|
|
25
|
-
}
|
|
26
|
-
handle.retainers.add(token);
|
|
27
|
-
return handle.signal.asReadonly();
|
|
28
|
-
}
|
|
29
|
-
export function release(query, token) {
|
|
30
|
-
const registry = getRegistry();
|
|
31
|
-
let handle = registry.get(query);
|
|
32
|
-
if (!handle)
|
|
33
|
-
return false;
|
|
34
|
-
const removed = handle.retainers.delete(token);
|
|
35
|
-
if (handle.retainers.size === 0) {
|
|
36
|
-
removeChangeListenerFromMql(handle.mql, handle.onChange);
|
|
37
|
-
registry.delete(query);
|
|
38
|
-
}
|
|
39
|
-
return removed;
|
|
40
|
-
}
|
|
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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5Lm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbXFsLXJlZ2lzdHJ5L21xbC1yZWdpc3RyeS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCB0eXBlIE1xUmV0YWluVG9rZW4gPSBEZXN0cm95UmVmO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1xSGFuZGxlIHtcbiAgbXFsOiBNZWRpYVF1ZXJ5TGlzdDtcbiAgc2lnbmFsOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgb25DaGFuZ2U6IChldmVudD86IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHZvaWQ7XG4gIHJldGFpbmVyczogU2V0PE1xUmV0YWluVG9rZW4+O1xufVxuXG5leHBvcnQgdHlwZSBNcWxSZWdpc3RyeSA9IE1hcDxzdHJpbmcsIE1xSGFuZGxlPjtcbiJdfQ==
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { isDevMode } from '@angular/core';
|
|
2
|
-
import { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from './tokens';
|
|
3
|
-
import { normalizeBreakpoints, validateEpsilon } from './utils/breakpoints.utils';
|
|
4
|
-
import { BOOTSTRAP_BREAKPOINTS, DEFAULT_BREAKPOINT_EPSILON, MATERIAL_BREAKPOINTS, TAILWIND_BREAKPOINTS, } from './constants';
|
|
5
|
-
export function provideBreakpoints(bps) {
|
|
6
|
-
return { provide: MQ_BREAKPOINTS, useValue: normalizeBreakpoints(bps) };
|
|
7
|
-
}
|
|
8
|
-
export function provideTailwindBreakpoints() {
|
|
9
|
-
return provideBreakpoints(TAILWIND_BREAKPOINTS);
|
|
10
|
-
}
|
|
11
|
-
export function provideBootstrapBreakpoints() {
|
|
12
|
-
return provideBreakpoints(BOOTSTRAP_BREAKPOINTS);
|
|
13
|
-
}
|
|
14
|
-
export function provideMaterialBreakpoints() {
|
|
15
|
-
return provideBreakpoints(MATERIAL_BREAKPOINTS);
|
|
16
|
-
}
|
|
17
|
-
export function provideBreakpointEpsilon(epsilon = DEFAULT_BREAKPOINT_EPSILON) {
|
|
18
|
-
if (isDevMode())
|
|
19
|
-
validateEpsilon(epsilon);
|
|
20
|
-
return { provide: MQ_BREAKPOINT_EPSILON, useValue: epsilon };
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFrQjtJQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxPQUFPLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkI7SUFDekMsT0FBTyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU8sa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFVBQWtCLDBCQUEwQjtJQUNuRixJQUFJLFNBQVMsRUFBRTtRQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTVFfQlJFQUtQT0lOVF9FUFNJTE9OLCBNUV9CUkVBS1BPSU5UUyB9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7IG5vcm1hbGl6ZUJyZWFrcG9pbnRzLCB2YWxpZGF0ZUVwc2lsb24gfSBmcm9tICcuL3V0aWxzL2JyZWFrcG9pbnRzLnV0aWxzJztcbmltcG9ydCB7IE1xQnJlYWtwb2ludHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1xuICBCT09UU1RSQVBfQlJFQUtQT0lOVFMsXG4gIERFRkFVTFRfQlJFQUtQT0lOVF9FUFNJTE9OLFxuICBNQVRFUklBTF9CUkVBS1BPSU5UUyxcbiAgVEFJTFdJTkRfQlJFQUtQT0lOVFMsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCcmVha3BvaW50cyhicHM6IE1xQnJlYWtwb2ludHMpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IE1RX0JSRUFLUE9JTlRTLCB1c2VWYWx1ZTogbm9ybWFsaXplQnJlYWtwb2ludHMoYnBzKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRhaWx3aW5kQnJlYWtwb2ludHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4gcHJvdmlkZUJyZWFrcG9pbnRzKFRBSUxXSU5EX0JSRUFLUE9JTlRTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCb290c3RyYXBCcmVha3BvaW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiBwcm92aWRlQnJlYWtwb2ludHMoQk9PVFNUUkFQX0JSRUFLUE9JTlRTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNYXRlcmlhbEJyZWFrcG9pbnRzKCk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHByb3ZpZGVCcmVha3BvaW50cyhNQVRFUklBTF9CUkVBS1BPSU5UUyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQnJlYWtwb2ludEVwc2lsb24oZXBzaWxvbjogbnVtYmVyID0gREVGQVVMVF9CUkVBS1BPSU5UX0VQU0lMT04pOiBQcm92aWRlciB7XG4gIGlmIChpc0Rldk1vZGUoKSkgdmFsaWRhdGVFcHNpbG9uKGVwc2lsb24pO1xuXG4gIHJldHVybiB7IHByb3ZpZGU6IE1RX0JSRUFLUE9JTlRfRVBTSUxPTiwgdXNlVmFsdWU6IGVwc2lsb24gfTtcbn1cbiJdfQ==
|
package/esm2022/lib/tokens.mjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
import { DEFAULT_BREAKPOINT_EPSILON } from './constants';
|
|
3
|
-
export const MQ_BREAKPOINTS = new InjectionToken('MQ_BREAKPOINTS');
|
|
4
|
-
export const MQ_BREAKPOINT_EPSILON = new InjectionToken('MQ_BREAKPOINT_EPSILON', {
|
|
5
|
-
providedIn: 'root',
|
|
6
|
-
factory: () => DEFAULT_BREAKPOINT_EPSILON,
|
|
7
|
-
});
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFrQyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUEyQixJQUFJLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRTtJQUN2RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMEJBQTBCO0NBQzFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX0JSRUFLUE9JTlRfRVBTSUxPTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1xQnJlYWtwb2ludHMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBNUV9CUkVBS1BPSU5UUzogSW5qZWN0aW9uVG9rZW48TXFCcmVha3BvaW50cz4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ01RX0JSRUFLUE9JTlRTJyk7XG5cbmV4cG9ydCBjb25zdCBNUV9CUkVBS1BPSU5UX0VQU0lMT046IEluamVjdGlvblRva2VuPG51bWJlcj4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ01RX0JSRUFLUE9JTlRfRVBTSUxPTicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0JSRUFLUE9JTlRfRVBTSUxPTixcbn0pO1xuIl19
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { inject, isDevMode } from '@angular/core';
|
|
2
|
-
import { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from '../tokens';
|
|
3
|
-
function assertBreakpointsProvided() {
|
|
4
|
-
const breakpoints = inject(MQ_BREAKPOINTS, { optional: true });
|
|
5
|
-
if (isDevMode() && !breakpoints) {
|
|
6
|
-
throw new Error('[ngx-mq]: No breakpoints provided.\n' +
|
|
7
|
-
'Please configure your app with provideBreakpoints(), ' +
|
|
8
|
-
'or use one of the built-in presets: ' +
|
|
9
|
-
'provideTailwindBreakpoints(), provideBootstrapBreakpoints(), provideMaterialBreakpoints().');
|
|
10
|
-
}
|
|
11
|
-
return breakpoints;
|
|
12
|
-
}
|
|
13
|
-
function assertBreakpointExists(bp, breakpoints) {
|
|
14
|
-
if (isDevMode() && !(bp in breakpoints)) {
|
|
15
|
-
throw new Error(`[ngx-mq]: Breakpoint "${bp}" not found in provided configuration.\n` +
|
|
16
|
-
`Available breakpoints: ${Object.keys(breakpoints).join(', ')}.`);
|
|
17
|
-
}
|
|
18
|
-
return breakpoints[bp];
|
|
19
|
-
}
|
|
20
|
-
export function resolveBreakpoint(bp) {
|
|
21
|
-
const breakpoints = assertBreakpointsProvided();
|
|
22
|
-
return assertBreakpointExists(bp, breakpoints);
|
|
23
|
-
}
|
|
24
|
-
export function normalizeBreakpoints(bps) {
|
|
25
|
-
const out = {};
|
|
26
|
-
for (const [rawKey, value] of Object.entries(bps)) {
|
|
27
|
-
const key = rawKey.trim();
|
|
28
|
-
if (isDevMode()) {
|
|
29
|
-
if (!Number.isFinite(value)) {
|
|
30
|
-
throw new Error(`[ngx-mq] Breakpoint "${key}" must be a finite number, got ${value}.`);
|
|
31
|
-
}
|
|
32
|
-
if (value <= 0) {
|
|
33
|
-
throw new Error(`[ngx-mq] Breakpoint "${key}" must be > 0, got ${value}.`);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
out[key] = value;
|
|
37
|
-
}
|
|
38
|
-
return Object.freeze(out);
|
|
39
|
-
}
|
|
40
|
-
export function validateEpsilon(epsilon) {
|
|
41
|
-
if (!Number.isFinite(epsilon) || epsilon <= 0 || epsilon > 1) {
|
|
42
|
-
throw new Error(`[ngx-mq] Epsilon must be in (0, 1]. Got: ${epsilon}`);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export function applyMaxEpsilon(value) {
|
|
46
|
-
const epsilon = inject(MQ_BREAKPOINT_EPSILON, { optional: true }) ?? 0.02;
|
|
47
|
-
return value - epsilon;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWtwb2ludHMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3V0aWxzL2JyZWFrcG9pbnRzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbEUsU0FBUyx5QkFBeUI7SUFDaEMsTUFBTSxXQUFXLEdBQXlCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUVyRixJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYixzQ0FBc0M7WUFDcEMsdURBQXVEO1lBQ3ZELHNDQUFzQztZQUN0Qyw0RkFBNEYsQ0FDL0YsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLFdBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxFQUFVLEVBQUUsV0FBMEI7SUFDcEUsSUFBSSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FDYix5QkFBeUIsRUFBRSwwQ0FBMEM7WUFDbkUsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxFQUFVO0lBQzFDLE1BQU0sV0FBVyxHQUFrQix5QkFBeUIsRUFBRSxDQUFDO0lBRS9ELE9BQU8sc0JBQXNCLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsR0FBa0I7SUFDckQsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztJQUV2QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUxQixJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxrQ0FBa0MsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN6RixDQUFDO1lBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM3RSxDQUFDO1FBQ0gsQ0FBQztRQUVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFlO0lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFDM0MsTUFBTSxPQUFPLEdBQVcsTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO0lBRWxGLE9BQU8sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1RX0JSRUFLUE9JTlRfRVBTSUxPTiwgTVFfQlJFQUtQT0lOVFMgfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgTXFCcmVha3BvaW50cyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmZ1bmN0aW9uIGFzc2VydEJyZWFrcG9pbnRzUHJvdmlkZWQoKTogTXFCcmVha3BvaW50cyB7XG4gIGNvbnN0IGJyZWFrcG9pbnRzOiBNcUJyZWFrcG9pbnRzIHwgbnVsbCA9IGluamVjdChNUV9CUkVBS1BPSU5UUywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBpZiAoaXNEZXZNb2RlKCkgJiYgIWJyZWFrcG9pbnRzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ1tuZ3gtbXFdOiBObyBicmVha3BvaW50cyBwcm92aWRlZC5cXG4nICtcbiAgICAgICAgJ1BsZWFzZSBjb25maWd1cmUgeW91ciBhcHAgd2l0aCBwcm92aWRlQnJlYWtwb2ludHMoKSwgJyArXG4gICAgICAgICdvciB1c2Ugb25lIG9mIHRoZSBidWlsdC1pbiBwcmVzZXRzOiAnICtcbiAgICAgICAgJ3Byb3ZpZGVUYWlsd2luZEJyZWFrcG9pbnRzKCksIHByb3ZpZGVCb290c3RyYXBCcmVha3BvaW50cygpLCBwcm92aWRlTWF0ZXJpYWxCcmVha3BvaW50cygpLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGJyZWFrcG9pbnRzITtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0QnJlYWtwb2ludEV4aXN0cyhicDogc3RyaW5nLCBicmVha3BvaW50czogTXFCcmVha3BvaW50cyk6IG51bWJlciB7XG4gIGlmIChpc0Rldk1vZGUoKSAmJiAhKGJwIGluIGJyZWFrcG9pbnRzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBbbmd4LW1xXTogQnJlYWtwb2ludCBcIiR7YnB9XCIgbm90IGZvdW5kIGluIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXFxuYCArXG4gICAgICAgIGBBdmFpbGFibGUgYnJlYWtwb2ludHM6ICR7T2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmpvaW4oJywgJyl9LmBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGJyZWFrcG9pbnRzW2JwXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50KGJwOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBicmVha3BvaW50czogTXFCcmVha3BvaW50cyA9IGFzc2VydEJyZWFrcG9pbnRzUHJvdmlkZWQoKTtcblxuICByZXR1cm4gYXNzZXJ0QnJlYWtwb2ludEV4aXN0cyhicCwgYnJlYWtwb2ludHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQnJlYWtwb2ludHMoYnBzOiBNcUJyZWFrcG9pbnRzKTogUmVhZG9ubHk8TXFCcmVha3BvaW50cz4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFtyYXdLZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhicHMpKSB7XG4gICAgY29uc3Qga2V5ID0gcmF3S2V5LnRyaW0oKTtcblxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW25neC1tcV0gQnJlYWtwb2ludCBcIiR7a2V5fVwiIG11c3QgYmUgYSBmaW5pdGUgbnVtYmVyLCBnb3QgJHt2YWx1ZX0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgW25neC1tcV0gQnJlYWtwb2ludCBcIiR7a2V5fVwiIG11c3QgYmUgPiAwLCBnb3QgJHt2YWx1ZX0uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3V0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKG91dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVwc2lsb24oZXBzaWxvbjogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKGVwc2lsb24pIHx8IGVwc2lsb24gPD0gMCB8fCBlcHNpbG9uID4gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW25neC1tcV0gRXBzaWxvbiBtdXN0IGJlIGluICgwLCAxXS4gR290OiAke2Vwc2lsb259YCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWF4RXBzaWxvbih2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgZXBzaWxvbjogbnVtYmVyID0gaW5qZWN0KE1RX0JSRUFLUE9JTlRfRVBTSUxPTiwgeyBvcHRpb25hbDogdHJ1ZSB9KSA/PyAwLjAyO1xuXG4gIHJldHVybiB2YWx1ZSAtIGVwc2lsb247XG59XG4iXX0=
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export function normalizeQuery(value) {
|
|
2
|
-
return value.trim().replace(/\s+/g, ' ').toLowerCase();
|
|
3
|
-
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi91dGlscy9jb21tb24udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVRdWVyeSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJykudG9Mb3dlckNhc2UoKTtcbn1cbiJdfQ==
|
package/esm2022/ngx-mq.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1xLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL25neC1tcS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
package/lib/api.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Signal } from '@angular/core';
|
|
2
|
-
export declare function up(bp: string): Signal<boolean>;
|
|
3
|
-
export declare function down(bp: string): Signal<boolean>;
|
|
4
|
-
export declare function between(minBp: string, maxBp: string): Signal<boolean>;
|
|
5
|
-
export declare function matchMediaSignal(query: string): Signal<boolean>;
|
package/lib/constants.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { MqBreakpoints } from './models';
|
|
2
|
-
export declare const TAILWIND_BREAKPOINTS: MqBreakpoints;
|
|
3
|
-
export declare const BOOTSTRAP_BREAKPOINTS: MqBreakpoints;
|
|
4
|
-
export declare const MATERIAL_BREAKPOINTS: MqBreakpoints;
|
|
5
|
-
export declare const DEFAULT_BREAKPOINT_EPSILON: number;
|
package/lib/core.d.ts
DELETED
package/lib/models.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type MqBreakpoints = Record<string, number>;
|
|
@@ -1,6 +0,0 @@
|
|
|
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>;
|
|
4
|
-
export declare function release(query: string, token: MqRetainToken): boolean;
|
|
5
|
-
export declare function _getRegistry(): MqlRegistry;
|
|
6
|
-
export declare function _resetRegistry(): void;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { DestroyRef, WritableSignal } from '@angular/core';
|
|
2
|
-
export type MqRetainToken = DestroyRef;
|
|
3
|
-
export interface MqHandle {
|
|
4
|
-
mql: MediaQueryList;
|
|
5
|
-
signal: WritableSignal<boolean>;
|
|
6
|
-
onChange: (event?: MediaQueryListEvent) => void;
|
|
7
|
-
retainers: Set<MqRetainToken>;
|
|
8
|
-
}
|
|
9
|
-
export type MqlRegistry = Map<string, MqHandle>;
|
package/lib/providers.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Provider } from '@angular/core';
|
|
2
|
-
import { MqBreakpoints } from './models';
|
|
3
|
-
export declare function provideBreakpoints(bps: MqBreakpoints): Provider;
|
|
4
|
-
export declare function provideTailwindBreakpoints(): Provider;
|
|
5
|
-
export declare function provideBootstrapBreakpoints(): Provider;
|
|
6
|
-
export declare function provideMaterialBreakpoints(): Provider;
|
|
7
|
-
export declare function provideBreakpointEpsilon(epsilon?: number): Provider;
|
package/lib/tokens.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { MqBreakpoints } from '../models';
|
|
2
|
-
export declare function resolveBreakpoint(bp: string): number;
|
|
3
|
-
export declare function normalizeBreakpoints(bps: MqBreakpoints): Readonly<MqBreakpoints>;
|
|
4
|
-
export declare function validateEpsilon(epsilon: number): void;
|
|
5
|
-
export declare function applyMaxEpsilon(value: number): number;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function normalizeQuery(value: string): string;
|