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 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://v18.angular.dev/guide/di/dependency-injection-context) to keep them in sync with the framework’s lifecycle.
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/v1?file=src%2Fapp%2Fapp.component.ts)
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 | Returns | Description |
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 | Returns | Description |
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
+ ```
@@ -1,4 +1,5 @@
1
- import { signal, inject, DestroyRef, InjectionToken, isDevMode, computed, assertInInjectionContext } from '@angular/core';
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
- return computed(() => retainRef.signal());
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
  }
@@ -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
- 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';
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": "1.0.1",
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/core": ">=16 <19",
25
- "@angular/common": ">=16 <19"
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
@@ -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==
@@ -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=
@@ -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==
@@ -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==
@@ -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>;
@@ -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
@@ -1,3 +0,0 @@
1
- import { Signal } from '@angular/core';
2
- export declare function createConsumer(query: string): Signal<boolean>;
3
- export declare function createConsumerLabel(descriptor: string): string;
package/lib/models.d.ts DELETED
@@ -1 +0,0 @@
1
- export type MqBreakpoints = Record<string, number>;
@@ -1,3 +0,0 @@
1
- export { retain, release } from './mql-registry';
2
- export { retainUntilDestroy } from './mql-registry.extensions';
3
- export { MqRetainToken, MqRetainRef } from './mql-registry.models';
@@ -1,3 +0,0 @@
1
- import { MqRetainToken, MqRetainRef } from './mql-registry.models';
2
- export declare function retain(query: string): MqRetainRef;
3
- export declare function release(query: string, token: MqRetainToken): boolean;
@@ -1,2 +0,0 @@
1
- import { MqRetainRef } from './mql-registry.models';
2
- export declare function retainUntilDestroy(query: string): MqRetainRef;
@@ -1,2 +0,0 @@
1
- export declare function addChangeListenerToMql(mql: MediaQueryList, onChange: (event?: MediaQueryListEvent) => void): void;
2
- export declare function removeChangeListenerFromMql(mql: MediaQueryList, onChange: (event?: MediaQueryListEvent) => void): void;
@@ -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>;
@@ -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,4 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { MqBreakpoints } from './models';
3
- export declare const MQ_BREAKPOINTS: InjectionToken<MqBreakpoints>;
4
- export declare const MQ_BREAKPOINT_EPSILON: InjectionToken<number>;
@@ -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;