ngx-mq 1.0.1 → 2.0.0
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 +36 -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 -43
- 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 -3
- 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 -13
- 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') {
|
|
@@ -29,7 +30,7 @@ const getRegistry = () => {
|
|
|
29
30
|
const createRetainToken = (query) => Symbol(`mq-retainer:${query}`);
|
|
30
31
|
const createMqHandle = (query) => {
|
|
31
32
|
const mql = matchMedia(query);
|
|
32
|
-
const signal$1 = signal(mql.matches);
|
|
33
|
+
const signal$1 = signal(mql.matches, { debugName: `ngx-mq: ${query}` });
|
|
33
34
|
const onChange = (event) => signal$1.set(event?.matches ?? mql.matches);
|
|
34
35
|
addChangeListenerToMql(mql, onChange);
|
|
35
36
|
return { mql, signal: signal$1, onChange, retainers: new Set() };
|
|
@@ -144,9 +145,13 @@ function applyMaxEpsilon(value) {
|
|
|
144
145
|
return value - epsilon;
|
|
145
146
|
}
|
|
146
147
|
|
|
147
|
-
function createConsumer(query) {
|
|
148
|
+
function createConsumer(query, debugName) {
|
|
148
149
|
const retainRef = retainUntilDestroy(query);
|
|
149
|
-
|
|
150
|
+
const getter = createComputed(() => retainRef.signal());
|
|
151
|
+
if (isDevMode()) {
|
|
152
|
+
getter[SIGNAL].debugName = debugName;
|
|
153
|
+
}
|
|
154
|
+
return getter;
|
|
150
155
|
}
|
|
151
156
|
function createConsumerLabel(descriptor) {
|
|
152
157
|
return `[NgxMq Signal: ${descriptor}]`;
|
|
@@ -156,33 +161,33 @@ function normalizeQuery(value) {
|
|
|
156
161
|
return value.trim().replace(/\s+/g, ' ').toLowerCase();
|
|
157
162
|
}
|
|
158
163
|
|
|
159
|
-
function up(bp) {
|
|
164
|
+
function up(bp, options) {
|
|
160
165
|
isDevMode() && assertInInjectionContext(up);
|
|
161
166
|
const query = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);
|
|
162
|
-
const consumer = createConsumer(query);
|
|
167
|
+
const consumer = createConsumer(query, options?.debugName);
|
|
163
168
|
consumer.toString = () => createConsumerLabel(`up(${bp})`);
|
|
164
169
|
return consumer;
|
|
165
170
|
}
|
|
166
|
-
function down(bp) {
|
|
171
|
+
function down(bp, options) {
|
|
167
172
|
isDevMode() && assertInInjectionContext(down);
|
|
168
173
|
const query = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);
|
|
169
|
-
const consumer = createConsumer(query);
|
|
174
|
+
const consumer = createConsumer(query, options?.debugName);
|
|
170
175
|
consumer.toString = () => createConsumerLabel(`down(${bp})`);
|
|
171
176
|
return consumer;
|
|
172
177
|
}
|
|
173
|
-
function between(minBp, maxBp) {
|
|
178
|
+
function between(minBp, maxBp, options) {
|
|
174
179
|
isDevMode() && assertInInjectionContext(between);
|
|
175
180
|
const minPx = resolveBreakpoint(minBp);
|
|
176
181
|
const maxPx = resolveBreakpoint(maxBp);
|
|
177
182
|
const query = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);
|
|
178
|
-
const consumer = createConsumer(query);
|
|
183
|
+
const consumer = createConsumer(query, options?.debugName);
|
|
179
184
|
consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);
|
|
180
185
|
return consumer;
|
|
181
186
|
}
|
|
182
|
-
function matchMediaSignal(query) {
|
|
187
|
+
function matchMediaSignal(query, options) {
|
|
183
188
|
isDevMode() && assertInInjectionContext(matchMediaSignal);
|
|
184
189
|
const media = normalizeQuery(query);
|
|
185
|
-
const consumer = createConsumer(media);
|
|
190
|
+
const consumer = createConsumer(media, options?.debugName);
|
|
186
191
|
consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
|
|
187
192
|
return consumer;
|
|
188
193
|
}
|
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, 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, 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, { 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): 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 { isDevMode, Signal } from '@angular/core';\nimport { createComputed, SIGNAL } from '@angular/core/primitives/signals';\nimport { MqRetainRef, retainUntilDestroy } from './mql-registry';\n\nexport function createConsumer(query: string, debugName?: string): Signal<boolean> {\n const retainRef: MqRetainRef = retainUntilDestroy(query);\n\n const getter = createComputed(() => retainRef.signal());\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,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { Signal, InjectionToken, Provider } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type MqRetainToken = symbol;
|
|
4
|
+
interface MqRetainRef {
|
|
5
|
+
signal: Signal<boolean>;
|
|
6
|
+
token: MqRetainToken;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
declare function release(query: string, token: MqRetainToken): boolean;
|
|
10
|
+
|
|
11
|
+
declare function retainUntilDestroy(query: string): MqRetainRef;
|
|
12
|
+
|
|
13
|
+
type MqBreakpoints = Record<string, number>;
|
|
14
|
+
interface CreateMediaQueryOptions {
|
|
15
|
+
/**
|
|
16
|
+
* A debug name for the signal. Used in Angular DevTools to identify the signal.
|
|
17
|
+
*/
|
|
18
|
+
debugName?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare function up(bp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
22
|
+
declare function down(bp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
23
|
+
declare function between(minBp: string, maxBp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
24
|
+
declare function matchMediaSignal(query: string, options?: CreateMediaQueryOptions): Signal<boolean>;
|
|
25
|
+
|
|
26
|
+
declare const MQ_BREAKPOINTS: InjectionToken<MqBreakpoints>;
|
|
27
|
+
declare const MQ_BREAKPOINT_EPSILON: InjectionToken<number>;
|
|
28
|
+
|
|
29
|
+
declare function provideBreakpoints(bps: MqBreakpoints): Provider;
|
|
30
|
+
declare function provideTailwindBreakpoints(): Provider;
|
|
31
|
+
declare function provideBootstrapBreakpoints(): Provider;
|
|
32
|
+
declare function provideMaterialBreakpoints(): Provider;
|
|
33
|
+
declare function provideBreakpointEpsilon(epsilon?: number): Provider;
|
|
34
|
+
|
|
35
|
+
export { MQ_BREAKPOINTS, MQ_BREAKPOINT_EPSILON, between, down, matchMediaSignal, provideBootstrapBreakpoints, provideBreakpointEpsilon, provideBreakpoints, provideMaterialBreakpoints, provideTailwindBreakpoints, release, retainUntilDestroy, up };
|
|
36
|
+
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.0",
|
|
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 retainRef = retainUntilDestroy(query);
|
|
5
|
-
return computed(() => retainRef.signal());
|
|
6
|
-
}
|
|
7
|
-
export function createConsumerLabel(descriptor) {
|
|
8
|
-
return `[NgxMq Signal: ${descriptor}]`;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBZSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxNQUFNLFNBQVMsR0FBZ0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFekQsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDNUMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxVQUFrQjtJQUNwRCxPQUFPLGtCQUFrQixVQUFVLEdBQUcsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXFSZXRhaW5SZWYsIHJldGFpblVudGlsRGVzdHJveSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5OiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBjb25zdCByZXRhaW5SZWY6IE1xUmV0YWluUmVmID0gcmV0YWluVW50aWxEZXN0cm95KHF1ZXJ5KTtcblxuICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gcmV0YWluUmVmLnNpZ25hbCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN1bWVyTGFiZWwoZGVzY3JpcHRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbTmd4TXEgU2lnbmFsOiAke2Rlc2NyaXB0b3J9XWA7XG59XG4iXX0=
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmV0YWluLCByZWxlYXNlIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnknO1xuXG5leHBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5leHRlbnNpb25zJztcblxuZXhwb3J0IHsgTXFSZXRhaW5Ub2tlbiwgTXFSZXRhaW5SZWYgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5tb2RlbHMnO1xuIl19
|
|
@@ -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 ref = retain(query);
|
|
5
|
-
const destroyRef = inject(DestroyRef);
|
|
6
|
-
destroyRef.onDestroy(() => release(query, ref.token));
|
|
7
|
-
return ref;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9tcWwtcmVnaXN0cnkuZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE1BQU0sR0FBRyxHQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV0RCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpbiwgcmVsZWFzZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcbmltcG9ydCB7IE1xUmV0YWluUmVmIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubW9kZWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpblVudGlsRGVzdHJveShxdWVyeTogc3RyaW5nKTogTXFSZXRhaW5SZWYge1xuICBjb25zdCByZWY6IE1xUmV0YWluUmVmID0gcmV0YWluKHF1ZXJ5KTtcbiAgY29uc3QgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiByZWxlYXNlKHF1ZXJ5LCByZWYudG9rZW4pKTtcblxuICByZXR1cm4gcmVmO1xufVxuIl19
|
|
@@ -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,43 +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 createRetainToken = (query) => Symbol(`mq-retainer:${query}`);
|
|
9
|
-
const createMqHandle = (query) => {
|
|
10
|
-
const mql = matchMedia(query);
|
|
11
|
-
const signal = createSignal(mql.matches);
|
|
12
|
-
const onChange = (event) => signal.set(event?.matches ?? mql.matches);
|
|
13
|
-
addChangeListenerToMql(mql, onChange);
|
|
14
|
-
return { mql, signal, onChange, retainers: new Set() };
|
|
15
|
-
};
|
|
16
|
-
export function retain(query) {
|
|
17
|
-
const token = createRetainToken(query);
|
|
18
|
-
// SSR-safe fallback
|
|
19
|
-
if (typeof globalThis.matchMedia !== 'function') {
|
|
20
|
-
return { signal: createSignal(false).asReadonly(), token };
|
|
21
|
-
}
|
|
22
|
-
const registry = getRegistry();
|
|
23
|
-
let handle = registry.get(query);
|
|
24
|
-
if (!handle) {
|
|
25
|
-
handle = createMqHandle(query);
|
|
26
|
-
registry.set(query, handle);
|
|
27
|
-
}
|
|
28
|
-
handle.retainers.add(token);
|
|
29
|
-
return { signal: handle.signal.asReadonly(), token };
|
|
30
|
-
}
|
|
31
|
-
export function release(query, token) {
|
|
32
|
-
const registry = getRegistry();
|
|
33
|
-
let handle = registry.get(query);
|
|
34
|
-
if (!handle)
|
|
35
|
-
return false;
|
|
36
|
-
const removed = handle.retainers.delete(token);
|
|
37
|
-
if (handle.retainers.size === 0) {
|
|
38
|
-
removeChangeListenerFromMql(handle.mql, handle.onChange);
|
|
39
|
-
registry.delete(query);
|
|
40
|
-
}
|
|
41
|
-
return removed;
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tcWwtcmVnaXN0cnkvbXFsLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRixNQUFNLFlBQVksR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFL0QsTUFBTSxXQUFXLEdBQUcsR0FBZ0IsRUFBRTtJQUNwQyxNQUFNLFdBQVcsR0FBaUMsVUFBVSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBZ0IsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBYSxFQUFpQixFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUUzRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBWSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFtQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQTRCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVGLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWE7SUFDbEMsTUFBTSxLQUFLLEdBQWtCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRELG9CQUFvQjtJQUNwQixJQUFJLE9BQU8sVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQWdCLFdBQVcsRUFBRSxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUF5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhLEVBQUUsS0FBb0I7SUFDekQsTUFBTSxRQUFRLEdBQWdCLFdBQVcsRUFBRSxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUF5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFMUIsTUFBTSxPQUFPLEdBQVksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsIGFzIGNyZWF0ZVNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFkZENoYW5nZUxpc3RlbmVyVG9NcWwsIHJlbW92ZUNoYW5nZUxpc3RlbmVyRnJvbU1xbCB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5Lmxpc3RlbmVycyc7XG5pbXBvcnQgeyBNcWxSZWdpc3RyeSwgTXFSZXRhaW5Ub2tlbiwgTXFIYW5kbGUsIE1xUmV0YWluUmVmIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubW9kZWxzJztcblxuY29uc3QgUkVHSVNUUllfS0VZOiBzeW1ib2wgPSBTeW1ib2wuZm9yKCduZ3gtbXE6bXFsLXJlZ2lzdHJ5Jyk7XG5cbmNvbnN0IGdldFJlZ2lzdHJ5ID0gKCk6IE1xbFJlZ2lzdHJ5ID0+IHtcbiAgY29uc3QgcmVhbG1HbG9iYWw6IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4gPSBnbG9iYWxUaGlzO1xuXG4gIHJldHVybiAocmVhbG1HbG9iYWxbUkVHSVNUUllfS0VZXSA/Pz0gbmV3IE1hcCgpKSBhcyBNcWxSZWdpc3RyeTtcbn07XG5cbmNvbnN0IGNyZWF0ZVJldGFpblRva2VuID0gKHF1ZXJ5OiBzdHJpbmcpOiBNcVJldGFpblRva2VuID0+IFN5bWJvbChgbXEtcmV0YWluZXI6JHtxdWVyeX1gKTtcblxuY29uc3QgY3JlYXRlTXFIYW5kbGUgPSAocXVlcnk6IHN0cmluZyk6IE1xSGFuZGxlID0+IHtcbiAgY29uc3QgbXFsOiBNZWRpYVF1ZXJ5TGlzdCA9IG1hdGNoTWVkaWEocXVlcnkpO1xuICBjb25zdCBzaWduYWw6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlU2lnbmFsKG1xbC5tYXRjaGVzKTtcblxuICBjb25zdCBvbkNoYW5nZSA9IChldmVudD86IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHNpZ25hbC5zZXQoZXZlbnQ/Lm1hdGNoZXMgPz8gbXFsLm1hdGNoZXMpO1xuXG4gIGFkZENoYW5nZUxpc3RlbmVyVG9NcWwobXFsLCBvbkNoYW5nZSk7XG5cbiAgcmV0dXJuIHsgbXFsLCBzaWduYWwsIG9uQ2hhbmdlLCByZXRhaW5lcnM6IG5ldyBTZXQoKSB9O1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpbihxdWVyeTogc3RyaW5nKTogTXFSZXRhaW5SZWYge1xuICBjb25zdCB0b2tlbjogTXFSZXRhaW5Ub2tlbiA9IGNyZWF0ZVJldGFpblRva2VuKHF1ZXJ5KTtcblxuICAvLyBTU1Itc2FmZSBmYWxsYmFja1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMubWF0Y2hNZWRpYSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB7IHNpZ25hbDogY3JlYXRlU2lnbmFsKGZhbHNlKS5hc1JlYWRvbmx5KCksIHRva2VuIH07XG4gIH1cblxuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkge1xuICAgIGhhbmRsZSA9IGNyZWF0ZU1xSGFuZGxlKHF1ZXJ5KTtcbiAgICByZWdpc3RyeS5zZXQocXVlcnksIGhhbmRsZSk7XG4gIH1cblxuICBoYW5kbGUucmV0YWluZXJzLmFkZCh0b2tlbik7XG5cbiAgcmV0dXJuIHsgc2lnbmFsOiBoYW5kbGUuc2lnbmFsLmFzUmVhZG9ubHkoKSwgdG9rZW4gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGVhc2UocXVlcnk6IHN0cmluZywgdG9rZW46IE1xUmV0YWluVG9rZW4pOiBib29sZWFuIHtcbiAgY29uc3QgcmVnaXN0cnk6IE1xbFJlZ2lzdHJ5ID0gZ2V0UmVnaXN0cnkoKTtcblxuICBsZXQgaGFuZGxlOiBNcUhhbmRsZSB8IHVuZGVmaW5lZCA9IHJlZ2lzdHJ5LmdldChxdWVyeSk7XG5cbiAgaWYgKCFoYW5kbGUpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCByZW1vdmVkOiBib29sZWFuID0gaGFuZGxlLnJldGFpbmVycy5kZWxldGUodG9rZW4pO1xuXG4gIGlmIChoYW5kbGUucmV0YWluZXJzLnNpemUgPT09IDApIHtcbiAgICByZW1vdmVDaGFuZ2VMaXN0ZW5lckZyb21NcWwoaGFuZGxlLm1xbCwgaGFuZGxlLm9uQ2hhbmdlKTtcbiAgICByZWdpc3RyeS5kZWxldGUocXVlcnkpO1xuICB9XG5cbiAgcmV0dXJuIHJlbW92ZWQ7XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5Lm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbXFsLXJlZ2lzdHJ5L21xbC1yZWdpc3RyeS5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgTXFSZXRhaW5Ub2tlbiA9IHN5bWJvbDtcblxuZXhwb3J0IGludGVyZmFjZSBNcVJldGFpblJlZiB7XG4gIHNpZ25hbDogU2lnbmFsPGJvb2xlYW4+O1xuICB0b2tlbjogTXFSZXRhaW5Ub2tlbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNcUhhbmRsZSB7XG4gIG1xbDogTWVkaWFRdWVyeUxpc3Q7XG4gIHNpZ25hbDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG4gIG9uQ2hhbmdlOiAoZXZlbnQ/OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB2b2lkO1xuICByZXRhaW5lcnM6IFNldDxNcVJldGFpblRva2VuPjtcbn1cblxuZXhwb3J0IHR5cGUgTXFsUmVnaXN0cnkgPSBNYXA8c3RyaW5nLCBNcUhhbmRsZT47XG4iXX0=
|
|
@@ -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,13 +0,0 @@
|
|
|
1
|
-
import { Signal, WritableSignal } from '@angular/core';
|
|
2
|
-
export type MqRetainToken = symbol;
|
|
3
|
-
export interface MqRetainRef {
|
|
4
|
-
signal: Signal<boolean>;
|
|
5
|
-
token: MqRetainToken;
|
|
6
|
-
}
|
|
7
|
-
export interface MqHandle {
|
|
8
|
-
mql: MediaQueryList;
|
|
9
|
-
signal: WritableSignal<boolean>;
|
|
10
|
-
onChange: (event?: MediaQueryListEvent) => void;
|
|
11
|
-
retainers: Set<MqRetainToken>;
|
|
12
|
-
}
|
|
13
|
-
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;
|