ngx-mq 1.3.0 → 1.5.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
@@ -104,11 +104,11 @@ bootstrapApplication(AppComponent, {
104
104
 
105
105
  ### BP-related utilities
106
106
 
107
- | Function | Parameters | Returns | Description |
108
- | --------- | ------------------------------ | ----------------- | --------------------------------------------- |
109
- | `up` | `bp: string` | `Signal<boolean>` | `true` when viewport width ≥ breakpoint |
110
- | `down` | `bp: string` | `Signal<boolean>` | `true` when viewport width < breakpoint |
111
- | `between` | `minBp: string, maxBp: string` | `Signal<boolean>` | `true` when viewport width is in range [a, b] |
107
+ | Function | Parameters | Returns | Description |
108
+ | --------- | ----------------------------------------------------------------- | ----------------- | --------------------------------------------- |
109
+ | `up` | `bp: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when viewport width ≥ breakpoint |
110
+ | `down` | `bp: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when viewport width < breakpoint |
111
+ | `between` | `minBp: string, maxBp: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when viewport width is in range [a, b] |
112
112
 
113
113
  > **Tip:** Wrap these APIs into reusable helpers:
114
114
 
@@ -126,11 +126,12 @@ export const isDesktop = (): Signal<boolean> => up('lg');
126
126
 
127
127
  Utils exposing common CSS media features.
128
128
 
129
- | Function | Parameters | Returns | Description |
130
- | ------------- | ----------------------------------- | ----------------- | ------------------------------------------------------------------------ |
131
- | `orientation` | `option: 'portrait' \| 'landscape'` | `Signal<boolean>` | `true` when the current screen orientation matches the specified option. |
132
- | `colorScheme` | `option: 'light' \| 'dark'` | `Signal<boolean>` | `true` when the system color scheme matches the specified option. |
133
- | `displayMode` | `option: DisplayModeOption` | `Signal<boolean>` | `true` when the current display mode matches the specified option. |
129
+ | Function | Parameters | Returns | Description |
130
+ | --------------- | --------------------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------- |
131
+ | `orientation` | `value: 'portrait' \| 'landscape', options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when the current screen orientation matches the specified value. |
132
+ | `colorScheme` | `value: 'light' \| 'dark', options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when the system color scheme matches the specified value. |
133
+ | `displayMode` | `value: DisplayModeOption, options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when the current display mode matches the specified value. |
134
+ | `reducedMotion` | `options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when the user has enabled reduced motion. |
134
135
 
135
136
  ---
136
137
 
@@ -138,9 +139,9 @@ Utils exposing common CSS media features.
138
139
 
139
140
  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.
140
141
 
141
- | Function | Parameters | Returns | Description |
142
- | ------------------ | --------------- | ----------------- | --------------------------------------------------------- |
143
- | `matchMediaSignal` | `query: string` | `Signal<boolean>` | Provides a signal representing the state of a media query |
142
+ | Function | Parameters | Returns | Description |
143
+ | ------------------ | -------------------------------------------------- | ----------------- | --------------------------------------------------------- |
144
+ | `matchMediaSignal` | `query: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | Provides a signal representing the state of a media query |
144
145
 
145
146
  > **Tip:** Use this API for media queries that are not part of your breakpoint map.
146
147
 
@@ -152,9 +153,29 @@ import { matchMediaSignal } from 'ngx-mq';
152
153
  export const isLandscape = (): Signal<boolean> => matchMediaSignal('(orientation: landscape)');
153
154
  ```
154
155
 
156
+ ## Providers
157
+
158
+ | Provider | Parameters | Description |
159
+ | ------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------- |
160
+ | `provideBreakpoints()` | `bps: MqBreakpoints` | Registers a custom set of breakpoints. |
161
+ | `provideTailwindBreakpoints()` | none | Registers the default Tailwind CSS breakpoints. |
162
+ | `provideBootstrapBreakpoints()` | none | Registers the default Bootstrap breakpoints. |
163
+ | `provideMaterialBreakpoints()` | none | Registers the default Angular Material breakpoints. |
164
+ | `provideBreakpointEpsilon()` | `epsilon: number` | Sets the epsilon threshold used when comparing breakpoint values. |
165
+ | `provideSsrValue()` | `value: boolean` | Defines the static signal value used during SSR, since media queries are not available on the server. Defaults to `false`. |
166
+
155
167
  ## Types
156
168
 
157
169
  ```ts
170
+ export type MqBreakpoints = Record<string, number>;
171
+
172
+ export interface CreateMediaQueryOptions {
173
+ /**
174
+ * Static signal value used during SSR.
175
+ */
176
+ ssrValue?: boolean;
177
+ }
178
+
158
179
  export type DisplayModeOption =
159
180
  | 'browser'
160
181
  | 'fullscreen'
@@ -2,55 +2,62 @@ import { assertInInjectionContext, isDevMode } from '@angular/core';
2
2
  import { applyMaxEpsilon, resolveBreakpoint } from './utils/breakpoints.utils';
3
3
  import { createConsumer, createConsumerLabel } from './core';
4
4
  import { normalizeQuery } from './utils/common.utils';
5
- export function up(bp) {
5
+ export function up(bp, options) {
6
6
  isDevMode() && assertInInjectionContext(up);
7
7
  const query = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);
8
- const consumer = createConsumer(query);
8
+ const consumer = createConsumer(query, options);
9
9
  consumer.toString = () => createConsumerLabel(`up(${bp})`);
10
10
  return consumer;
11
11
  }
12
- export function down(bp) {
12
+ export function down(bp, options) {
13
13
  isDevMode() && assertInInjectionContext(down);
14
14
  const query = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);
15
- const consumer = createConsumer(query);
15
+ const consumer = createConsumer(query, options);
16
16
  consumer.toString = () => createConsumerLabel(`down(${bp})`);
17
17
  return consumer;
18
18
  }
19
- export function between(minBp, maxBp) {
19
+ export function between(minBp, maxBp, options) {
20
20
  isDevMode() && assertInInjectionContext(between);
21
21
  const minPx = resolveBreakpoint(minBp);
22
22
  const maxPx = resolveBreakpoint(maxBp);
23
23
  const query = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);
24
- const consumer = createConsumer(query);
24
+ const consumer = createConsumer(query, options);
25
25
  consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);
26
26
  return consumer;
27
27
  }
28
- export function orientation(option) {
28
+ export function orientation(value, options) {
29
29
  isDevMode() && assertInInjectionContext(orientation);
30
- const query = normalizeQuery(`(orientation: ${option})`);
31
- const consumer = createConsumer(query);
32
- consumer.toString = () => createConsumerLabel(`orientation(${option})`);
30
+ const query = normalizeQuery(`(orientation: ${value})`);
31
+ const consumer = createConsumer(query, options);
32
+ consumer.toString = () => createConsumerLabel(`orientation(${value})`);
33
33
  return consumer;
34
34
  }
35
- export function colorScheme(option) {
35
+ export function colorScheme(value, options) {
36
36
  isDevMode() && assertInInjectionContext(colorScheme);
37
- const query = normalizeQuery(`(prefers-color-scheme: ${option})`);
38
- const consumer = createConsumer(query);
39
- consumer.toString = () => createConsumerLabel(`colorScheme(${option})`);
37
+ const query = normalizeQuery(`(prefers-color-scheme: ${value})`);
38
+ const consumer = createConsumer(query, options);
39
+ consumer.toString = () => createConsumerLabel(`colorScheme(${value})`);
40
40
  return consumer;
41
41
  }
42
- export function displayMode(option) {
42
+ export function displayMode(value, options) {
43
43
  isDevMode() && assertInInjectionContext(displayMode);
44
- const query = normalizeQuery(`(display-mode: ${option})`);
45
- const consumer = createConsumer(query);
46
- consumer.toString = () => createConsumerLabel(`displayMode(${option})`);
44
+ const query = normalizeQuery(`(display-mode: ${value})`);
45
+ const consumer = createConsumer(query, options);
46
+ consumer.toString = () => createConsumerLabel(`displayMode(${value})`);
47
47
  return consumer;
48
48
  }
49
- export function matchMediaSignal(query) {
49
+ export function reducedMotion(options) {
50
+ isDevMode() && assertInInjectionContext(reducedMotion);
51
+ const query = normalizeQuery('(prefers-reduced-motion: reduce)');
52
+ const consumer = createConsumer(query, options);
53
+ consumer.toString = () => createConsumerLabel('reducedMotion');
54
+ return consumer;
55
+ }
56
+ export function matchMediaSignal(query, options) {
50
57
  isDevMode() && assertInInjectionContext(matchMediaSignal);
51
58
  const media = normalizeQuery(query);
52
- const consumer = createConsumer(media);
59
+ const consumer = createConsumer(media, options);
53
60
  consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
54
61
  return consumer;
55
62
  }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFVO0lBQzNCLFNBQVMsRUFBRSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sS0FBSyxHQUFXLGNBQWMsQ0FBQyxlQUFlLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixNQUFNLFFBQVEsR0FBb0IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEVBQVU7SUFDN0IsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFOUMsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFN0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLEtBQWE7SUFDbEQsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFakQsTUFBTSxLQUFLLEdBQVcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQVcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsS0FBSyx1QkFBdUIsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RyxNQUFNLFFBQVEsR0FBb0IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsV0FBVyxLQUFLLEtBQUssS0FBSyxHQUFHLENBQUMsQ0FBQztJQUU3RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUFnQztJQUMxRCxTQUFTLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVyRCxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsaUJBQWlCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakUsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUV4RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUF3QjtJQUNsRCxTQUFTLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVyRCxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsMEJBQTBCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMUUsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUV4RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUF5QjtJQUNuRCxTQUFTLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUVyRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsa0JBQWtCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMUQsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUV4RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWE7SUFDNUMsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUUxRCxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4RCxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBRTVFLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQsIGlzRGV2TW9kZSwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhcHBseU1heEVwc2lsb24sIHJlc29sdmVCcmVha3BvaW50IH0gZnJvbSAnLi91dGlscy9icmVha3BvaW50cy51dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVDb25zdW1lciwgY3JlYXRlQ29uc3VtZXJMYWJlbCB9IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBub3JtYWxpemVRdWVyeSB9IGZyb20gJy4vdXRpbHMvY29tbW9uLnV0aWxzJztcbmltcG9ydCB7IERpc3BsYXlNb2RlT3B0aW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXAoYnA6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCh1cCk7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAobWluLXdpZHRoOiAke3Jlc29sdmVCcmVha3BvaW50KGJwKX1weClgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5KTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYHVwKCR7YnB9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd24oYnA6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChkb3duKTtcblxuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChtYXgtd2lkdGg6ICR7YXBwbHlNYXhFcHNpbG9uKHJlc29sdmVCcmVha3BvaW50KGJwKSl9cHgpYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBkb3duKCR7YnB9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJldHdlZW4obWluQnA6IHN0cmluZywgbWF4QnA6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChiZXR3ZWVuKTtcblxuICBjb25zdCBtaW5QeDogbnVtYmVyID0gcmVzb2x2ZUJyZWFrcG9pbnQobWluQnApO1xuICBjb25zdCBtYXhQeDogbnVtYmVyID0gcmVzb2x2ZUJyZWFrcG9pbnQobWF4QnApO1xuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChtaW4td2lkdGg6ICR7bWluUHh9cHgpIGFuZCAobWF4LXdpZHRoOiAke2FwcGx5TWF4RXBzaWxvbihtYXhQeCl9cHgpYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBiZXR3ZWVuKCR7bWluQnB9LCAke21heEJwfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmllbnRhdGlvbihvcHRpb246ICdwb3J0cmFpdCcgfCAnbGFuZHNjYXBlJyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChvcmllbnRhdGlvbik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAob3JpZW50YXRpb246ICR7b3B0aW9ufSlgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5KTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYG9yaWVudGF0aW9uKCR7b3B0aW9ufSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xvclNjaGVtZShvcHRpb246ICdsaWdodCcgfCAnZGFyaycpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY29sb3JTY2hlbWUpO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKHByZWZlcnMtY29sb3Itc2NoZW1lOiAke29wdGlvbn0pYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBjb2xvclNjaGVtZSgke29wdGlvbn0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheU1vZGUob3B0aW9uOiBEaXNwbGF5TW9kZU9wdGlvbik6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChkaXNwbGF5TW9kZSk7XG5cbiAgY29uc3QgcXVlcnkgPSBub3JtYWxpemVRdWVyeShgKGRpc3BsYXktbW9kZTogJHtvcHRpb259KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnkpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgZGlzcGxheU1vZGUoJHtvcHRpb259KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTWVkaWFTaWduYWwocXVlcnk6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChtYXRjaE1lZGlhU2lnbmFsKTtcblxuICBjb25zdCBtZWRpYTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkocXVlcnkpO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIobWVkaWEpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgbWF0Y2hNZWRpYVNpZ25hbCgke3F1ZXJ5fSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFVLEVBQUUsT0FBaUM7SUFDOUQsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFNUMsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEVBQVUsRUFBRSxPQUFpQztJQUNoRSxTQUFTLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU5QyxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsZUFBZSxlQUFlLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakcsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFakUsUUFBUSxDQUFDLFFBQVEsR0FBRyxH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QUFFLE9BQWlDO0lBQy9FLFNBQVMsRUFBRSxJQUFJLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFMUQsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFNUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaXNEZXZNb2RlLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFwcGx5TWF4RXBzaWxvbiwgcmVzb2x2ZUJyZWFrcG9pbnQgfSBmcm9tICcuL3V0aWxzL2JyZWFrcG9pbnRzLnV0aWxzJztcbmltcG9ydCB7IERpc3BsYXlNb2RlT3B0aW9uLCBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IGNyZWF0ZUNvbnN1bWVyLCBjcmVhdGVDb25zdW1lckxhYmVsIH0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZVF1ZXJ5IH0gZnJvbSAnLi91dGlscy9jb21tb24udXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXAoYnA6IHN0cmluZywgb3B0aW9ucz86IENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHVwKTtcblxuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChtaW4td2lkdGg6ICR7cmVzb2x2ZUJyZWFrcG9pbnQoYnApfXB4KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgdXAoJHticH0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bihicDogc3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlTWVkaWFRdWVyeU9wdGlvbnMpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZG93bik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAobWF4LXdpZHRoOiAke2FwcGx5TWF4RXBzaWxvbihyZXNvbHZlQnJlYWtwb2ludChicCkpfXB4KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgZG93bigke2JwfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiZXR3ZWVuKG1pbkJwOiBzdHJpbmcsIG1heEJwOiBzdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChiZXR3ZWVuKTtcblxuICBjb25zdCBtaW5QeDogbnVtYmVyID0gcmVzb2x2ZUJyZWFrcG9pbnQobWluQnApO1xuICBjb25zdCBtYXhQeDogbnVtYmVyID0gcmVzb2x2ZUJyZWFrcG9pbnQobWF4QnApO1xuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChtaW4td2lkdGg6ICR7bWluUHh9cHgpIGFuZCAobWF4LXdpZHRoOiAke2FwcGx5TWF4RXBzaWxvbihtYXhQeCl9cHgpYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSwgb3B0aW9ucyk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBiZXR3ZWVuKCR7bWluQnB9LCAke21heEJwfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmllbnRhdGlvbih2YWx1ZTogJ3BvcnRyYWl0JyB8ICdsYW5kc2NhcGUnLCBvcHRpb25zPzogQ3JlYXRlTWVkaWFRdWVyeU9wdGlvbnMpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQob3JpZW50YXRpb24pO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG9yaWVudGF0aW9uOiAke3ZhbHVlfSlgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5LCBvcHRpb25zKTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYG9yaWVudGF0aW9uKCR7dmFsdWV9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yU2NoZW1lKHZhbHVlOiAnbGlnaHQnIHwgJ2RhcmsnLCBvcHRpb25zPzogQ3JlYXRlTWVkaWFRdWVyeU9wdGlvbnMpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY29sb3JTY2hlbWUpO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKHByZWZlcnMtY29sb3Itc2NoZW1lOiAke3ZhbHVlfSlgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5LCBvcHRpb25zKTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYGNvbG9yU2NoZW1lKCR7dmFsdWV9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlNb2RlKHZhbHVlOiBEaXNwbGF5TW9kZU9wdGlvbiwgb3B0aW9ucz86IENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGRpc3BsYXlNb2RlKTtcblxuICBjb25zdCBxdWVyeSA9IG5vcm1hbGl6ZVF1ZXJ5KGAoZGlzcGxheS1tb2RlOiAke3ZhbHVlfSlgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5LCBvcHRpb25zKTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYGRpc3BsYXlNb2RlKCR7dmFsdWV9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZWRNb3Rpb24ob3B0aW9ucz86IENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHJlZHVjZWRNb3Rpb24pO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5LCBvcHRpb25zKTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoJ3JlZHVjZWRNb3Rpb24nKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE1lZGlhU2lnbmFsKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChtYXRjaE1lZGlhU2lnbmFsKTtcblxuICBjb25zdCBtZWRpYTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkocXVlcnkpO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIobWVkaWEsIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgbWF0Y2hNZWRpYVNpZ25hbCgke3F1ZXJ5fSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG4iXX0=
@@ -1,10 +1,13 @@
1
- import { computed } from '@angular/core';
1
+ import { computed, inject } from '@angular/core';
2
2
  import { retainUntilDestroy } from './mql-registry';
3
- export function createConsumer(query) {
4
- const querySignal = retainUntilDestroy(query);
3
+ import { NGX_MQ_SSR_VALUE } from './tokens';
4
+ export function createConsumer(query, options) {
5
+ const defaultSsrValue = inject(NGX_MQ_SSR_VALUE);
6
+ const effectiveSsrValue = options?.ssrValue ?? defaultSsrValue;
7
+ const querySignal = retainUntilDestroy(query, effectiveSsrValue);
5
8
  return computed(() => querySignal());
6
9
  }
7
10
  export function createConsumerLabel(descriptor) {
8
11
  return `[NgxMq Signal: ${descriptor}]`;
9
12
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYTtJQUMxQyxNQUFNLFdBQVcsR0FBb0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0QsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQ3BELE9BQU8sa0JBQWtCLFVBQVUsR0FBRyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXRhaW5VbnRpbERlc3Ryb3kgfSBmcm9tICcuL21xbC1yZWdpc3RyeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25zdW1lcihxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgY29uc3QgcXVlcnlTaWduYWw6IFNpZ25hbDxib29sZWFuPiA9IHJldGFpblVudGlsRGVzdHJveShxdWVyeSk7XG5cbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHF1ZXJ5U2lnbmFsKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3VtZXJMYWJlbChkZXNjcmlwdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFtOZ3hNcSBTaWduYWw6ICR7ZGVzY3JpcHRvcn1dYDtcbn1cbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFNUMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFhLEVBQUUsT0FBaUM7SUFDN0UsTUFBTSxlQUFlLEdBQVksTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsTUFBTSxpQkFBaUIsR0FBWSxPQUFPLEVBQUUsUUFBUSxJQUFJLGVBQWUsQ0FBQztJQUV4RSxNQUFNLFdBQVcsR0FBb0Isa0JBQWtCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFFbEYsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQ3BELE9BQU8sa0JBQWtCLFVBQVUsR0FBRyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpblVudGlsRGVzdHJveSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcbmltcG9ydCB7IENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgTkdYX01RX1NTUl9WQUxVRSB9IGZyb20gJy4vdG9rZW5zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGNvbnN0IGRlZmF1bHRTc3JWYWx1ZTogYm9vbGVhbiA9IGluamVjdChOR1hfTVFfU1NSX1ZBTFVFKTtcbiAgY29uc3QgZWZmZWN0aXZlU3NyVmFsdWU6IGJvb2xlYW4gPSBvcHRpb25zPy5zc3JWYWx1ZSA/PyBkZWZhdWx0U3NyVmFsdWU7XG5cbiAgY29uc3QgcXVlcnlTaWduYWw6IFNpZ25hbDxib29sZWFuPiA9IHJldGFpblVudGlsRGVzdHJveShxdWVyeSwgZWZmZWN0aXZlU3NyVmFsdWUpO1xuXG4gIHJldHVybiBjb21wdXRlZCgoKSA9PiBxdWVyeVNpZ25hbCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnN1bWVyTGFiZWwoZGVzY3JpcHRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbTmd4TXEgU2lnbmFsOiAke2Rlc2NyaXB0b3J9XWA7XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1xQnJlYWtwb2ludHMgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZU9wdGlvbiA9XG4gIHwgJ2Jyb3dzZXInXG4gIHwgJ2Z1bGxzY3JlZW4nXG4gIHwgJ3N0YW5kYWxvbmUnXG4gIHwgJ21pbmltYWwtdWknXG4gIHwgJ3dpbmRvdy1jb250cm9scy1vdmVybGF5J1xuICB8ICdwaWN0dXJlLWluLXBpY3R1cmUnO1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1xQnJlYWtwb2ludHMgPSBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFN0YXRpYyBzaWduYWwgdmFsdWUgdXNlZCBkdXJpbmcgU1NSLlxuICAgKi9cbiAgc3NyVmFsdWU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBEaXNwbGF5TW9kZU9wdGlvbiA9XG4gIHwgJ2Jyb3dzZXInXG4gIHwgJ2Z1bGxzY3JlZW4nXG4gIHwgJ3N0YW5kYWxvbmUnXG4gIHwgJ21pbmltYWwtdWknXG4gIHwgJ3dpbmRvdy1jb250cm9scy1vdmVybGF5J1xuICB8ICdwaWN0dXJlLWluLXBpY3R1cmUnO1xuIl19
@@ -1,9 +1,9 @@
1
1
  import { DestroyRef, inject } from '@angular/core';
2
2
  import { retain, release } from './mql-registry';
3
- export function retainUntilDestroy(query) {
3
+ export function retainUntilDestroy(query, ssrValue) {
4
4
  const destroyRef = inject(DestroyRef);
5
- const querySignal = retain(query, destroyRef);
5
+ const querySignal = retain(query, destroyRef, ssrValue);
6
6
  destroyRef.onDestroy(() => release(query, destroyRef));
7
7
  return querySignal;
8
8
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9tcWwtcmVnaXN0cnkuZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE1BQU0sVUFBVSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVsRCxNQUFNLFdBQVcsR0FBb0IsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRCxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV2RCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpbiwgcmVsZWFzZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpblVudGlsRGVzdHJveShxdWVyeTogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgY29uc3QgZGVzdHJveVJlZjogRGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBjb25zdCBxdWVyeVNpZ25hbDogU2lnbmFsPGJvb2xlYW4+ID0gcmV0YWluKHF1ZXJ5LCBkZXN0cm95UmVmKTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiByZWxlYXNlKHF1ZXJ5LCBkZXN0cm95UmVmKSk7XG5cbiAgcmV0dXJuIHF1ZXJ5U2lnbmFsO1xufVxuIl19
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmV4dGVuc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21xbC1yZWdpc3RyeS9tcWwtcmVnaXN0cnkuZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsUUFBaUI7SUFDakUsTUFBTSxVQUFVLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELE1BQU0sV0FBVyxHQUFvQixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV6RSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUV2RCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHJldGFpbiwgcmVsZWFzZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHJldGFpblVudGlsRGVzdHJveShxdWVyeTogc3RyaW5nLCBzc3JWYWx1ZTogYm9vbGVhbik6IFNpZ25hbDxib29sZWFuPiB7XG4gIGNvbnN0IGRlc3Ryb3lSZWY6IERlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29uc3QgcXVlcnlTaWduYWw6IFNpZ25hbDxib29sZWFuPiA9IHJldGFpbihxdWVyeSwgZGVzdHJveVJlZiwgc3NyVmFsdWUpO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHJlbGVhc2UocXVlcnksIGRlc3Ryb3lSZWYpKTtcblxuICByZXR1cm4gcXVlcnlTaWduYWw7XG59XG4iXX0=
@@ -12,10 +12,10 @@ const createMqHandle = (query) => {
12
12
  addChangeListenerToMql(mql, onChange);
13
13
  return { mql, signal, onChange, retainers: new Set() };
14
14
  };
15
- export function retain(query, token) {
16
- // SSR-safe fallback
15
+ export function retain(query, token, ssrValue) {
16
+ // SSR mode
17
17
  if (typeof globalThis.matchMedia !== 'function') {
18
- return createSignal(false).asReadonly();
18
+ return createSignal(ssrValue).asReadonly();
19
19
  }
20
20
  const registry = getRegistry();
21
21
  let handle = registry.get(query);
@@ -54,4 +54,4 @@ export function _resetRegistry() {
54
54
  });
55
55
  registry.clear();
56
56
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tcWwtcmVnaXN0cnkvbXFsLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRixNQUFNLFlBQVksR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFL0QsTUFBTSxXQUFXLEdBQUcsR0FBZ0IsRUFBRTtJQUNwQyxNQUFNLFdBQVcsR0FBaUMsVUFBVSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBZ0IsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBWSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFtQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQTRCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVGLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWEsRUFBRSxLQUFvQjtJQUN4RCxvQkFBb0I7SUFDcEIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDaEQsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFnQixXQUFXLEVBQUUsQ0FBQztJQUU1QyxJQUFJLE1BQU0sR0FBeUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLEtBQW9CO0lBQ3pELE1BQU0sUUFBUSxHQUFnQixXQUFXLEVBQUUsQ0FBQztJQUU1QyxJQUFJLE1BQU0sR0FBeUIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV2RCxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTFCLE1BQU0sT0FBTyxHQUFZLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVk7SUFDMUIsT0FBTyxXQUFXLEVBQUUsQ0FBQztBQUN2QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLFFBQVEsR0FBZ0IsV0FBVyxFQUFFLENBQUM7SUFFNUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQWdCLEVBQUUsRUFBRTtRQUNwQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsIGFzIGNyZWF0ZVNpZ25hbCwgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWRkQ2hhbmdlTGlzdGVuZXJUb01xbCwgcmVtb3ZlQ2hhbmdlTGlzdGVuZXJGcm9tTXFsIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubGlzdGVuZXJzJztcbmltcG9ydCB7IE1xbFJlZ2lzdHJ5LCBNcVJldGFpblRva2VuLCBNcUhhbmRsZSB9IGZyb20gJy4vbXFsLXJlZ2lzdHJ5Lm1vZGVscyc7XG5cbmNvbnN0IFJFR0lTVFJZX0tFWTogc3ltYm9sID0gU3ltYm9sLmZvcignbmd4LW1xOm1xbC1yZWdpc3RyeScpO1xuXG5jb25zdCBnZXRSZWdpc3RyeSA9ICgpOiBNcWxSZWdpc3RyeSA9PiB7XG4gIGNvbnN0IHJlYWxtR2xvYmFsOiBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+ID0gZ2xvYmFsVGhpcztcblxuICByZXR1cm4gKHJlYWxtR2xvYmFsW1JFR0lTVFJZX0tFWV0gPz89IG5ldyBNYXAoKSkgYXMgTXFsUmVnaXN0cnk7XG59O1xuXG5jb25zdCBjcmVhdGVNcUhhbmRsZSA9IChxdWVyeTogc3RyaW5nKTogTXFIYW5kbGUgPT4ge1xuICBjb25zdCBtcWw6IE1lZGlhUXVlcnlMaXN0ID0gbWF0Y2hNZWRpYShxdWVyeSk7XG4gIGNvbnN0IHNpZ25hbDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVTaWduYWwobXFsLm1hdGNoZXMpO1xuXG4gIGNvbnN0IG9uQ2hhbmdlID0gKGV2ZW50PzogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gc2lnbmFsLnNldChldmVudD8ubWF0Y2hlcyA/PyBtcWwubWF0Y2hlcyk7XG5cbiAgYWRkQ2hhbmdlTGlzdGVuZXJUb01xbChtcWwsIG9uQ2hhbmdlKTtcblxuICByZXR1cm4geyBtcWwsIHNpZ25hbCwgb25DaGFuZ2UsIHJldGFpbmVyczogbmV3IFNldCgpIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmV0YWluKHF1ZXJ5OiBzdHJpbmcsIHRva2VuOiBNcVJldGFpblRva2VuKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgLy8gU1NSLXNhZmUgZmFsbGJhY2tcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLm1hdGNoTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3JlYXRlU2lnbmFsKGZhbHNlKS5hc1JlYWRvbmx5KCk7XG4gIH1cblxuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkge1xuICAgIGhhbmRsZSA9IGNyZWF0ZU1xSGFuZGxlKHF1ZXJ5KTtcbiAgICByZWdpc3RyeS5zZXQocXVlcnksIGhhbmRsZSk7XG4gIH1cblxuICBoYW5kbGUucmV0YWluZXJzLmFkZCh0b2tlbik7XG5cbiAgcmV0dXJuIGhhbmRsZS5zaWduYWwuYXNSZWFkb25seSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsZWFzZShxdWVyeTogc3RyaW5nLCB0b2tlbjogTXFSZXRhaW5Ub2tlbik6IGJvb2xlYW4ge1xuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHJlbW92ZWQ6IGJvb2xlYW4gPSBoYW5kbGUucmV0YWluZXJzLmRlbGV0ZSh0b2tlbik7XG5cbiAgaWYgKGhhbmRsZS5yZXRhaW5lcnMuc2l6ZSA9PT0gMCkge1xuICAgIHJlbW92ZUNoYW5nZUxpc3RlbmVyRnJvbU1xbChoYW5kbGUubXFsLCBoYW5kbGUub25DaGFuZ2UpO1xuICAgIHJlZ2lzdHJ5LmRlbGV0ZShxdWVyeSk7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlZDtcbn1cblxuLyogQGludGVybmFsXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJlZ2lzdHJ5ICh1c2VkIG9ubHkgaW4gdGVzdHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2dldFJlZ2lzdHJ5KCk6IE1xbFJlZ2lzdHJ5IHtcbiAgcmV0dXJuIGdldFJlZ2lzdHJ5KCk7XG59XG5cbi8qIEBpbnRlcm5hbFxuICogQ2xlYXJzIGFsbCByZWdpc3RyeSBlbnRyaWVzIGFuZCByZW1vdmVzIG1lZGlhLXF1ZXJ5IGxpc3RlbmVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIHJlZ2lzdHJ5LmZvckVhY2goKGhhbmRsZTogTXFIYW5kbGUpID0+IHtcbiAgICByZW1vdmVDaGFuZ2VMaXN0ZW5lckZyb21NcWwoaGFuZGxlLm1xbCwgaGFuZGxlLm9uQ2hhbmdlKTtcbiAgfSk7XG5cbiAgcmVnaXN0cnkuY2xlYXIoKTtcbn1cbiJdfQ==
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXFsLXJlZ2lzdHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tcWwtcmVnaXN0cnkvbXFsLXJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUcvRixNQUFNLFlBQVksR0FBVyxNQUFNLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFL0QsTUFBTSxXQUFXLEdBQUcsR0FBZ0IsRUFBRTtJQUNwQyxNQUFNLFdBQVcsR0FBaUMsVUFBVSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBZ0IsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWEsRUFBWSxFQUFFO0lBQ2pELE1BQU0sR0FBRyxHQUFtQixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxNQUFNLEdBQTRCLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFbEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVGLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUV0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQWEsRUFBRSxLQUFvQixFQUFFLFFBQWlCO0lBQzNFLFdBQVc7SUFDWCxJQUFJLE9BQU8sVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNoRCxPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQWdCLFdBQVcsRUFBRSxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUF5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFhLEVBQUUsS0FBb0I7SUFDekQsTUFBTSxRQUFRLEdBQWdCLFdBQVcsRUFBRSxDQUFDO0lBRTVDLElBQUksTUFBTSxHQUF5QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFMUIsTUFBTSxPQUFPLEdBQVksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWTtJQUMxQixPQUFPLFdBQVcsRUFBRSxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjO0lBQzVCLE1BQU0sUUFBUSxHQUFnQixXQUFXLEVBQUUsQ0FBQztJQUU1QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBZ0IsRUFBRSxFQUFFO1FBQ3BDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaWduYWwgYXMgY3JlYXRlU2lnbmFsLCBTaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhZGRDaGFuZ2VMaXN0ZW5lclRvTXFsLCByZW1vdmVDaGFuZ2VMaXN0ZW5lckZyb21NcWwgfSBmcm9tICcuL21xbC1yZWdpc3RyeS5saXN0ZW5lcnMnO1xuaW1wb3J0IHsgTXFsUmVnaXN0cnksIE1xUmV0YWluVG9rZW4sIE1xSGFuZGxlIH0gZnJvbSAnLi9tcWwtcmVnaXN0cnkubW9kZWxzJztcblxuY29uc3QgUkVHSVNUUllfS0VZOiBzeW1ib2wgPSBTeW1ib2wuZm9yKCduZ3gtbXE6bXFsLXJlZ2lzdHJ5Jyk7XG5cbmNvbnN0IGdldFJlZ2lzdHJ5ID0gKCk6IE1xbFJlZ2lzdHJ5ID0+IHtcbiAgY29uc3QgcmVhbG1HbG9iYWw6IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj4gPSBnbG9iYWxUaGlzO1xuXG4gIHJldHVybiAocmVhbG1HbG9iYWxbUkVHSVNUUllfS0VZXSA/Pz0gbmV3IE1hcCgpKSBhcyBNcWxSZWdpc3RyeTtcbn07XG5cbmNvbnN0IGNyZWF0ZU1xSGFuZGxlID0gKHF1ZXJ5OiBzdHJpbmcpOiBNcUhhbmRsZSA9PiB7XG4gIGNvbnN0IG1xbDogTWVkaWFRdWVyeUxpc3QgPSBtYXRjaE1lZGlhKHF1ZXJ5KTtcbiAgY29uc3Qgc2lnbmFsOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZVNpZ25hbChtcWwubWF0Y2hlcyk7XG5cbiAgY29uc3Qgb25DaGFuZ2UgPSAoZXZlbnQ/OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiBzaWduYWwuc2V0KGV2ZW50Py5tYXRjaGVzID8/IG1xbC5tYXRjaGVzKTtcblxuICBhZGRDaGFuZ2VMaXN0ZW5lclRvTXFsKG1xbCwgb25DaGFuZ2UpO1xuXG4gIHJldHVybiB7IG1xbCwgc2lnbmFsLCBvbkNoYW5nZSwgcmV0YWluZXJzOiBuZXcgU2V0KCkgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZXRhaW4ocXVlcnk6IHN0cmluZywgdG9rZW46IE1xUmV0YWluVG9rZW4sIHNzclZhbHVlOiBib29sZWFuKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgLy8gU1NSIG1vZGVcbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLm1hdGNoTWVkaWEgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY3JlYXRlU2lnbmFsKHNzclZhbHVlKS5hc1JlYWRvbmx5KCk7XG4gIH1cblxuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkge1xuICAgIGhhbmRsZSA9IGNyZWF0ZU1xSGFuZGxlKHF1ZXJ5KTtcbiAgICByZWdpc3RyeS5zZXQocXVlcnksIGhhbmRsZSk7XG4gIH1cblxuICBoYW5kbGUucmV0YWluZXJzLmFkZCh0b2tlbik7XG5cbiAgcmV0dXJuIGhhbmRsZS5zaWduYWwuYXNSZWFkb25seSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsZWFzZShxdWVyeTogc3RyaW5nLCB0b2tlbjogTXFSZXRhaW5Ub2tlbik6IGJvb2xlYW4ge1xuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIGxldCBoYW5kbGU6IE1xSGFuZGxlIHwgdW5kZWZpbmVkID0gcmVnaXN0cnkuZ2V0KHF1ZXJ5KTtcblxuICBpZiAoIWhhbmRsZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHJlbW92ZWQ6IGJvb2xlYW4gPSBoYW5kbGUucmV0YWluZXJzLmRlbGV0ZSh0b2tlbik7XG5cbiAgaWYgKGhhbmRsZS5yZXRhaW5lcnMuc2l6ZSA9PT0gMCkge1xuICAgIHJlbW92ZUNoYW5nZUxpc3RlbmVyRnJvbU1xbChoYW5kbGUubXFsLCBoYW5kbGUub25DaGFuZ2UpO1xuICAgIHJlZ2lzdHJ5LmRlbGV0ZShxdWVyeSk7XG4gIH1cblxuICByZXR1cm4gcmVtb3ZlZDtcbn1cblxuLyogQGludGVybmFsXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJlZ2lzdHJ5ICh1c2VkIG9ubHkgaW4gdGVzdHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX2dldFJlZ2lzdHJ5KCk6IE1xbFJlZ2lzdHJ5IHtcbiAgcmV0dXJuIGdldFJlZ2lzdHJ5KCk7XG59XG5cbi8qIEBpbnRlcm5hbFxuICogQ2xlYXJzIGFsbCByZWdpc3RyeSBlbnRyaWVzIGFuZCByZW1vdmVzIG1lZGlhLXF1ZXJ5IGxpc3RlbmVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFJlZ2lzdHJ5KCk6IHZvaWQge1xuICBjb25zdCByZWdpc3RyeTogTXFsUmVnaXN0cnkgPSBnZXRSZWdpc3RyeSgpO1xuXG4gIHJlZ2lzdHJ5LmZvckVhY2goKGhhbmRsZTogTXFIYW5kbGUpID0+IHtcbiAgICByZW1vdmVDaGFuZ2VMaXN0ZW5lckZyb21NcWwoaGFuZGxlLm1xbCwgaGFuZGxlLm9uQ2hhbmdlKTtcbiAgfSk7XG5cbiAgcmVnaXN0cnkuY2xlYXIoKTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { isDevMode } from '@angular/core';
2
- import { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS } from './tokens';
2
+ import { MQ_BREAKPOINT_EPSILON, MQ_BREAKPOINTS, NGX_MQ_SSR_VALUE } from './tokens';
3
3
  import { normalizeBreakpoints, validateEpsilon } from './utils/breakpoints.utils';
4
4
  import { BOOTSTRAP_BREAKPOINTS, DEFAULT_BREAKPOINT_EPSILON, MATERIAL_BREAKPOINTS, TAILWIND_BREAKPOINTS, } from './constants';
5
5
  export function provideBreakpoints(bps) {
@@ -19,4 +19,7 @@ export function provideBreakpointEpsilon(epsilon = DEFAULT_BREAKPOINT_EPSILON) {
19
19
  validateEpsilon(epsilon);
20
20
  return { provide: MQ_BREAKPOINT_EPSILON, useValue: epsilon };
21
21
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFrQjtJQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxPQUFPLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkI7SUFDekMsT0FBTyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU8sa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFVBQWtCLDBCQUEwQjtJQUNuRixJQUFJLFNBQVMsRUFBRTtRQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNEZXZNb2RlLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTVFfQlJFQUtQT0lOVF9FUFNJTE9OLCBNUV9CUkVBS1BPSU5UUyB9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7IG5vcm1hbGl6ZUJyZWFrcG9pbnRzLCB2YWxpZGF0ZUVwc2lsb24gfSBmcm9tICcuL3V0aWxzL2JyZWFrcG9pbnRzLnV0aWxzJztcbmltcG9ydCB7IE1xQnJlYWtwb2ludHMgfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge1xuICBCT09UU1RSQVBfQlJFQUtQT0lOVFMsXG4gIERFRkFVTFRfQlJFQUtQT0lOVF9FUFNJTE9OLFxuICBNQVRFUklBTF9CUkVBS1BPSU5UUyxcbiAgVEFJTFdJTkRfQlJFQUtQT0lOVFMsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCcmVha3BvaW50cyhicHM6IE1xQnJlYWtwb2ludHMpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IE1RX0JSRUFLUE9JTlRTLCB1c2VWYWx1ZTogbm9ybWFsaXplQnJlYWtwb2ludHMoYnBzKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRhaWx3aW5kQnJlYWtwb2ludHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4gcHJvdmlkZUJyZWFrcG9pbnRzKFRBSUxXSU5EX0JSRUFLUE9JTlRTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCb290c3RyYXBCcmVha3BvaW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiBwcm92aWRlQnJlYWtwb2ludHMoQk9PVFNUUkFQX0JSRUFLUE9JTlRTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVNYXRlcmlhbEJyZWFrcG9pbnRzKCk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHByb3ZpZGVCcmVha3BvaW50cyhNQVRFUklBTF9CUkVBS1BPSU5UUyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQnJlYWtwb2ludEVwc2lsb24oZXBzaWxvbjogbnVtYmVyID0gREVGQVVMVF9CUkVBS1BPSU5UX0VQU0lMT04pOiBQcm92aWRlciB7XG4gIGlmIChpc0Rldk1vZGUoKSkgdmFsaWRhdGVFcHNpbG9uKGVwc2lsb24pO1xuXG4gIHJldHVybiB7IHByb3ZpZGU6IE1RX0JSRUFLUE9JTlRfRVBTSUxPTiwgdXNlVmFsdWU6IGVwc2lsb24gfTtcbn1cbiJdfQ==
22
+ export function provideSsrValue(value) {
23
+ return { provide: NGX_MQ_SSR_VALUE, useValue: value };
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFrQjtJQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxPQUFPLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkI7SUFDekMsT0FBTyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLE9BQU8sa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFVBQWtCLDBCQUEwQjtJQUNuRixJQUFJLFNBQVMsRUFBRTtRQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFjO0lBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Rldk1vZGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNUV9CUkVBS1BPSU5UX0VQU0lMT04sIE1RX0JSRUFLUE9JTlRTLCBOR1hfTVFfU1NSX1ZBTFVFIH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgbm9ybWFsaXplQnJlYWtwb2ludHMsIHZhbGlkYXRlRXBzaWxvbiB9IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludHMudXRpbHMnO1xuaW1wb3J0IHsgTXFCcmVha3BvaW50cyB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7XG4gIEJPT1RTVFJBUF9CUkVBS1BPSU5UUyxcbiAgREVGQVVMVF9CUkVBS1BPSU5UX0VQU0lMT04sXG4gIE1BVEVSSUFMX0JSRUFLUE9JTlRTLFxuICBUQUlMV0lORF9CUkVBS1BPSU5UUyxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUJyZWFrcG9pbnRzKGJwczogTXFCcmVha3BvaW50cyk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHsgcHJvdmlkZTogTVFfQlJFQUtQT0lOVFMsIHVzZVZhbHVlOiBub3JtYWxpemVCcmVha3BvaW50cyhicHMpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGFpbHdpbmRCcmVha3BvaW50cygpOiBQcm92aWRlciB7XG4gIHJldHVybiBwcm92aWRlQnJlYWtwb2ludHMoVEFJTFdJTkRfQlJFQUtQT0lOVFMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUJvb3RzdHJhcEJyZWFrcG9pbnRzKCk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHByb3ZpZGVCcmVha3BvaW50cyhCT09UU1RSQVBfQlJFQUtQT0lOVFMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU1hdGVyaWFsQnJlYWtwb2ludHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4gcHJvdmlkZUJyZWFrcG9pbnRzKE1BVEVSSUFMX0JSRUFLUE9JTlRTKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVCcmVha3BvaW50RXBzaWxvbihlcHNpbG9uOiBudW1iZXIgPSBERUZBVUxUX0JSRUFLUE9JTlRfRVBTSUxPTik6IFByb3ZpZGVyIHtcbiAgaWYgKGlzRGV2TW9kZSgpKSB2YWxpZGF0ZUVwc2lsb24oZXBzaWxvbik7XG5cbiAgcmV0dXJuIHsgcHJvdmlkZTogTVFfQlJFQUtQT0lOVF9FUFNJTE9OLCB1c2VWYWx1ZTogZXBzaWxvbiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVNzclZhbHVlKHZhbHVlOiBib29sZWFuKTogUHJvdmlkZXIge1xuICByZXR1cm4geyBwcm92aWRlOiBOR1hfTVFfU1NSX1ZBTFVFLCB1c2VWYWx1ZTogdmFsdWUgfTtcbn1cbiJdfQ==
@@ -5,4 +5,8 @@ export const MQ_BREAKPOINT_EPSILON = new InjectionToken('MQ_BREAKPOINT_EPSILON',
5
5
  providedIn: 'root',
6
6
  factory: () => DEFAULT_BREAKPOINT_EPSILON,
7
7
  });
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFrQyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUEyQixJQUFJLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRTtJQUN2RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMEJBQTBCO0NBQzFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBERUZBVUxUX0JSRUFLUE9JTlRfRVBTSUxPTiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1xQnJlYWtwb2ludHMgfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBNUV9CUkVBS1BPSU5UUzogSW5qZWN0aW9uVG9rZW48TXFCcmVha3BvaW50cz4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ01RX0JSRUFLUE9JTlRTJyk7XG5cbmV4cG9ydCBjb25zdCBNUV9CUkVBS1BPSU5UX0VQU0lMT046IEluamVjdGlvblRva2VuPG51bWJlcj4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ01RX0JSRUFLUE9JTlRfRVBTSUxPTicsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBERUZBVUxUX0JSRUFLUE9JTlRfRVBTSUxPTixcbn0pO1xuIl19
8
+ export const NGX_MQ_SSR_VALUE = new InjectionToken('NGX_MQ_SSR_VALUE', {
9
+ providedIn: 'root',
10
+ factory: () => false,
11
+ });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFrQyxJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUEyQixJQUFJLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRTtJQUN2RyxVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsMEJBQTBCO0NBQzFDLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUE0QixJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRTtJQUM5RixVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSztDQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgREVGQVVMVF9CUkVBS1BPSU5UX0VQU0lMT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNcUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgTVFfQlJFQUtQT0lOVFM6IEluamVjdGlvblRva2VuPE1xQnJlYWtwb2ludHM+ID0gbmV3IEluamVjdGlvblRva2VuKCdNUV9CUkVBS1BPSU5UUycpO1xuXG5leHBvcnQgY29uc3QgTVFfQlJFQUtQT0lOVF9FUFNJTE9OOiBJbmplY3Rpb25Ub2tlbjxudW1iZXI+ID0gbmV3IEluamVjdGlvblRva2VuKCdNUV9CUkVBS1BPSU5UX0VQU0lMT04nLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4gREVGQVVMVF9CUkVBS1BPSU5UX0VQU0lMT04sXG59KTtcblxuZXhwb3J0IGNvbnN0IE5HWF9NUV9TU1JfVkFMVUU6IEluamVjdGlvblRva2VuPGJvb2xlYW4+ID0gbmV3IEluamVjdGlvblRva2VuKCdOR1hfTVFfU1NSX1ZBTFVFJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IGZhbHNlLFxufSk7XG4iXX0=
@@ -27,6 +27,10 @@ const MQ_BREAKPOINT_EPSILON = new InjectionToken('MQ_BREAKPOINT_EPSILON', {
27
27
  providedIn: 'root',
28
28
  factory: () => DEFAULT_BREAKPOINT_EPSILON,
29
29
  });
30
+ const NGX_MQ_SSR_VALUE = new InjectionToken('NGX_MQ_SSR_VALUE', {
31
+ providedIn: 'root',
32
+ factory: () => false,
33
+ });
30
34
 
31
35
  function assertBreakpointsProvided() {
32
36
  const breakpoints = inject(MQ_BREAKPOINTS, { optional: true });
@@ -108,10 +112,10 @@ const createMqHandle = (query) => {
108
112
  addChangeListenerToMql(mql, onChange);
109
113
  return { mql, signal: signal$1, onChange, retainers: new Set() };
110
114
  };
111
- function retain(query, token) {
112
- // SSR-safe fallback
115
+ function retain(query, token, ssrValue) {
116
+ // SSR mode
113
117
  if (typeof globalThis.matchMedia !== 'function') {
114
- return signal(false).asReadonly();
118
+ return signal(ssrValue).asReadonly();
115
119
  }
116
120
  const registry = getRegistry();
117
121
  let handle = registry.get(query);
@@ -151,15 +155,17 @@ function _resetRegistry() {
151
155
  registry.clear();
152
156
  }
153
157
 
154
- function retainUntilDestroy(query) {
158
+ function retainUntilDestroy(query, ssrValue) {
155
159
  const destroyRef = inject(DestroyRef);
156
- const querySignal = retain(query, destroyRef);
160
+ const querySignal = retain(query, destroyRef, ssrValue);
157
161
  destroyRef.onDestroy(() => release(query, destroyRef));
158
162
  return querySignal;
159
163
  }
160
164
 
161
- function createConsumer(query) {
162
- const querySignal = retainUntilDestroy(query);
165
+ function createConsumer(query, options) {
166
+ const defaultSsrValue = inject(NGX_MQ_SSR_VALUE);
167
+ const effectiveSsrValue = options?.ssrValue ?? defaultSsrValue;
168
+ const querySignal = retainUntilDestroy(query, effectiveSsrValue);
163
169
  return computed(() => querySignal());
164
170
  }
165
171
  function createConsumerLabel(descriptor) {
@@ -170,54 +176,61 @@ function normalizeQuery(value) {
170
176
  return value.trim().replace(/\s+/g, ' ').toLowerCase();
171
177
  }
172
178
 
173
- function up(bp) {
179
+ function up(bp, options) {
174
180
  isDevMode() && assertInInjectionContext(up);
175
181
  const query = normalizeQuery(`(min-width: ${resolveBreakpoint(bp)}px)`);
176
- const consumer = createConsumer(query);
182
+ const consumer = createConsumer(query, options);
177
183
  consumer.toString = () => createConsumerLabel(`up(${bp})`);
178
184
  return consumer;
179
185
  }
180
- function down(bp) {
186
+ function down(bp, options) {
181
187
  isDevMode() && assertInInjectionContext(down);
182
188
  const query = normalizeQuery(`(max-width: ${applyMaxEpsilon(resolveBreakpoint(bp))}px)`);
183
- const consumer = createConsumer(query);
189
+ const consumer = createConsumer(query, options);
184
190
  consumer.toString = () => createConsumerLabel(`down(${bp})`);
185
191
  return consumer;
186
192
  }
187
- function between(minBp, maxBp) {
193
+ function between(minBp, maxBp, options) {
188
194
  isDevMode() && assertInInjectionContext(between);
189
195
  const minPx = resolveBreakpoint(minBp);
190
196
  const maxPx = resolveBreakpoint(maxBp);
191
197
  const query = normalizeQuery(`(min-width: ${minPx}px) and (max-width: ${applyMaxEpsilon(maxPx)}px)`);
192
- const consumer = createConsumer(query);
198
+ const consumer = createConsumer(query, options);
193
199
  consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);
194
200
  return consumer;
195
201
  }
196
- function orientation(option) {
202
+ function orientation(value, options) {
197
203
  isDevMode() && assertInInjectionContext(orientation);
198
- const query = normalizeQuery(`(orientation: ${option})`);
199
- const consumer = createConsumer(query);
200
- consumer.toString = () => createConsumerLabel(`orientation(${option})`);
204
+ const query = normalizeQuery(`(orientation: ${value})`);
205
+ const consumer = createConsumer(query, options);
206
+ consumer.toString = () => createConsumerLabel(`orientation(${value})`);
201
207
  return consumer;
202
208
  }
203
- function colorScheme(option) {
209
+ function colorScheme(value, options) {
204
210
  isDevMode() && assertInInjectionContext(colorScheme);
205
- const query = normalizeQuery(`(prefers-color-scheme: ${option})`);
206
- const consumer = createConsumer(query);
207
- consumer.toString = () => createConsumerLabel(`colorScheme(${option})`);
211
+ const query = normalizeQuery(`(prefers-color-scheme: ${value})`);
212
+ const consumer = createConsumer(query, options);
213
+ consumer.toString = () => createConsumerLabel(`colorScheme(${value})`);
208
214
  return consumer;
209
215
  }
210
- function displayMode(option) {
216
+ function displayMode(value, options) {
211
217
  isDevMode() && assertInInjectionContext(displayMode);
212
- const query = normalizeQuery(`(display-mode: ${option})`);
213
- const consumer = createConsumer(query);
214
- consumer.toString = () => createConsumerLabel(`displayMode(${option})`);
218
+ const query = normalizeQuery(`(display-mode: ${value})`);
219
+ const consumer = createConsumer(query, options);
220
+ consumer.toString = () => createConsumerLabel(`displayMode(${value})`);
215
221
  return consumer;
216
222
  }
217
- function matchMediaSignal(query) {
223
+ function reducedMotion(options) {
224
+ isDevMode() && assertInInjectionContext(reducedMotion);
225
+ const query = normalizeQuery('(prefers-reduced-motion: reduce)');
226
+ const consumer = createConsumer(query, options);
227
+ consumer.toString = () => createConsumerLabel('reducedMotion');
228
+ return consumer;
229
+ }
230
+ function matchMediaSignal(query, options) {
218
231
  isDevMode() && assertInInjectionContext(matchMediaSignal);
219
232
  const media = normalizeQuery(query);
220
- const consumer = createConsumer(media);
233
+ const consumer = createConsumer(media, options);
221
234
  consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
222
235
  return consumer;
223
236
  }
@@ -239,10 +252,13 @@ function provideBreakpointEpsilon(epsilon = DEFAULT_BREAKPOINT_EPSILON) {
239
252
  validateEpsilon(epsilon);
240
253
  return { provide: MQ_BREAKPOINT_EPSILON, useValue: epsilon };
241
254
  }
255
+ function provideSsrValue(value) {
256
+ return { provide: NGX_MQ_SSR_VALUE, useValue: value };
257
+ }
242
258
 
243
259
  /**
244
260
  * Generated bundle index. Do not edit.
245
261
  */
246
262
 
247
- export { MQ_BREAKPOINTS, MQ_BREAKPOINT_EPSILON, between, colorScheme, displayMode, down, matchMediaSignal, orientation, provideBootstrapBreakpoints, provideBreakpointEpsilon, provideBreakpoints, provideMaterialBreakpoints, provideTailwindBreakpoints, up };
263
+ export { MQ_BREAKPOINTS, MQ_BREAKPOINT_EPSILON, NGX_MQ_SSR_VALUE, between, colorScheme, displayMode, down, matchMediaSignal, orientation, provideBootstrapBreakpoints, provideBreakpointEpsilon, provideBreakpoints, provideMaterialBreakpoints, provideSsrValue, provideTailwindBreakpoints, reducedMotion, up };
248
264
  //# sourceMappingURL=ngx-mq.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-mq.mjs","sources":["../../src/lib/constants.ts","../../src/lib/tokens.ts","../../src/lib/utils/breakpoints.utils.ts","../../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/core.ts","../../src/lib/utils/common.utils.ts","../../src/lib/api.ts","../../src/lib/providers.ts","../../src/ngx-mq.ts"],"sourcesContent":["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","export function addChangeListenerToMql(mql: MediaQueryList, onChange: (event?: MediaQueryListEvent) => void): void {\n if (typeof mql.addEventListener === 'function') {\n // Modern browsers\n mql.addEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).addListener(onChange);\n }\n}\n\nexport function removeChangeListenerFromMql(\n mql: MediaQueryList,\n onChange: (event?: MediaQueryListEvent) => void\n): void {\n if (typeof mql.removeEventListener === 'function') {\n // Modern browsers\n mql.removeEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).removeListener(onChange);\n }\n}\n","import { signal as createSignal, Signal, WritableSignal } from '@angular/core';\nimport { addChangeListenerToMql, removeChangeListenerFromMql } from './mql-registry.listeners';\nimport { MqlRegistry, MqRetainToken, MqHandle } from './mql-registry.models';\n\nconst REGISTRY_KEY: symbol = Symbol.for('ngx-mq:mql-registry');\n\nconst getRegistry = (): MqlRegistry => {\n const realmGlobal: Record<PropertyKey, unknown> = globalThis;\n\n return (realmGlobal[REGISTRY_KEY] ??= new Map()) as MqlRegistry;\n};\n\nconst createMqHandle = (query: string): MqHandle => {\n const mql: MediaQueryList = matchMedia(query);\n const signal: WritableSignal<boolean> = createSignal(mql.matches);\n\n const onChange = (event?: MediaQueryListEvent) => signal.set(event?.matches ?? mql.matches);\n\n addChangeListenerToMql(mql, onChange);\n\n return { mql, signal, onChange, retainers: new Set() };\n};\n\nexport function retain(query: string, token: MqRetainToken): Signal<boolean> {\n // SSR-safe fallback\n if (typeof globalThis.matchMedia !== 'function') {\n return createSignal(false).asReadonly();\n }\n\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) {\n handle = createMqHandle(query);\n registry.set(query, handle);\n }\n\n handle.retainers.add(token);\n\n return handle.signal.asReadonly();\n}\n\nexport function release(query: string, token: MqRetainToken): boolean {\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) return false;\n\n const removed: boolean = handle.retainers.delete(token);\n\n if (handle.retainers.size === 0) {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n registry.delete(query);\n }\n\n return removed;\n}\n\n/* @internal\n * Returns the current registry (used only in tests).\n */\nexport function _getRegistry(): MqlRegistry {\n return getRegistry();\n}\n\n/* @internal\n * Clears all registry entries and removes media-query listeners.\n */\nexport function _resetRegistry(): void {\n const registry: MqlRegistry = getRegistry();\n\n registry.forEach((handle: MqHandle) => {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n });\n\n registry.clear();\n}\n","import { DestroyRef, inject, Signal } from '@angular/core';\nimport { retain, release } from './mql-registry';\n\nexport function retainUntilDestroy(query: string): Signal<boolean> {\n const destroyRef: DestroyRef = inject(DestroyRef);\n\n const querySignal: Signal<boolean> = retain(query, destroyRef);\n\n destroyRef.onDestroy(() => release(query, destroyRef));\n\n return querySignal;\n}\n","import { computed, Signal } from '@angular/core';\nimport { retainUntilDestroy } from './mql-registry';\n\nexport function createConsumer(query: string): Signal<boolean> {\n const querySignal: Signal<boolean> = retainUntilDestroy(query);\n\n return computed(() => querySignal());\n}\n\nexport function createConsumerLabel(descriptor: string): string {\n return `[NgxMq Signal: ${descriptor}]`;\n}\n","export function normalizeQuery(value: string): string {\n return value.trim().replace(/\\s+/g, ' ').toLowerCase();\n}\n","import { assertInInjectionContext, isDevMode, Signal } from '@angular/core';\nimport { applyMaxEpsilon, resolveBreakpoint } from './utils/breakpoints.utils';\nimport { createConsumer, createConsumerLabel } from './core';\nimport { normalizeQuery } from './utils/common.utils';\nimport { DisplayModeOption } from './models';\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 orientation(option: 'portrait' | 'landscape'): Signal<boolean> {\n isDevMode() && assertInInjectionContext(orientation);\n\n const query: string = normalizeQuery(`(orientation: ${option})`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`orientation(${option})`);\n\n return consumer;\n}\n\nexport function colorScheme(option: 'light' | 'dark'): Signal<boolean> {\n isDevMode() && assertInInjectionContext(colorScheme);\n\n const query: string = normalizeQuery(`(prefers-color-scheme: ${option})`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`colorScheme(${option})`);\n\n return consumer;\n}\n\nexport function displayMode(option: DisplayModeOption): Signal<boolean> {\n isDevMode() && assertInInjectionContext(displayMode);\n\n const query = normalizeQuery(`(display-mode: ${option})`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`displayMode(${option})`);\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/constants.ts","../../src/lib/tokens.ts","../../src/lib/utils/breakpoints.utils.ts","../../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/core.ts","../../src/lib/utils/common.utils.ts","../../src/lib/api.ts","../../src/lib/providers.ts","../../src/ngx-mq.ts"],"sourcesContent":["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\nexport const NGX_MQ_SSR_VALUE: InjectionToken<boolean> = new InjectionToken('NGX_MQ_SSR_VALUE', {\n providedIn: 'root',\n factory: () => false,\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","export function addChangeListenerToMql(mql: MediaQueryList, onChange: (event?: MediaQueryListEvent) => void): void {\n if (typeof mql.addEventListener === 'function') {\n // Modern browsers\n mql.addEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).addListener(onChange);\n }\n}\n\nexport function removeChangeListenerFromMql(\n mql: MediaQueryList,\n onChange: (event?: MediaQueryListEvent) => void\n): void {\n if (typeof mql.removeEventListener === 'function') {\n // Modern browsers\n mql.removeEventListener('change', onChange);\n } else {\n // Legacy fallback (Safari < 14)\n (mql as any).removeListener(onChange);\n }\n}\n","import { signal as createSignal, Signal, WritableSignal } from '@angular/core';\nimport { addChangeListenerToMql, removeChangeListenerFromMql } from './mql-registry.listeners';\nimport { MqlRegistry, MqRetainToken, MqHandle } from './mql-registry.models';\n\nconst REGISTRY_KEY: symbol = Symbol.for('ngx-mq:mql-registry');\n\nconst getRegistry = (): MqlRegistry => {\n const realmGlobal: Record<PropertyKey, unknown> = globalThis;\n\n return (realmGlobal[REGISTRY_KEY] ??= new Map()) as MqlRegistry;\n};\n\nconst createMqHandle = (query: string): MqHandle => {\n const mql: MediaQueryList = matchMedia(query);\n const signal: WritableSignal<boolean> = createSignal(mql.matches);\n\n const onChange = (event?: MediaQueryListEvent) => signal.set(event?.matches ?? mql.matches);\n\n addChangeListenerToMql(mql, onChange);\n\n return { mql, signal, onChange, retainers: new Set() };\n};\n\nexport function retain(query: string, token: MqRetainToken, ssrValue: boolean): Signal<boolean> {\n // SSR mode\n if (typeof globalThis.matchMedia !== 'function') {\n return createSignal(ssrValue).asReadonly();\n }\n\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) {\n handle = createMqHandle(query);\n registry.set(query, handle);\n }\n\n handle.retainers.add(token);\n\n return handle.signal.asReadonly();\n}\n\nexport function release(query: string, token: MqRetainToken): boolean {\n const registry: MqlRegistry = getRegistry();\n\n let handle: MqHandle | undefined = registry.get(query);\n\n if (!handle) return false;\n\n const removed: boolean = handle.retainers.delete(token);\n\n if (handle.retainers.size === 0) {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n registry.delete(query);\n }\n\n return removed;\n}\n\n/* @internal\n * Returns the current registry (used only in tests).\n */\nexport function _getRegistry(): MqlRegistry {\n return getRegistry();\n}\n\n/* @internal\n * Clears all registry entries and removes media-query listeners.\n */\nexport function _resetRegistry(): void {\n const registry: MqlRegistry = getRegistry();\n\n registry.forEach((handle: MqHandle) => {\n removeChangeListenerFromMql(handle.mql, handle.onChange);\n });\n\n registry.clear();\n}\n","import { DestroyRef, inject, Signal } from '@angular/core';\nimport { retain, release } from './mql-registry';\n\nexport function retainUntilDestroy(query: string, ssrValue: boolean): Signal<boolean> {\n const destroyRef: DestroyRef = inject(DestroyRef);\n\n const querySignal: Signal<boolean> = retain(query, destroyRef, ssrValue);\n\n destroyRef.onDestroy(() => release(query, destroyRef));\n\n return querySignal;\n}\n","import { computed, inject, Signal } from '@angular/core';\nimport { retainUntilDestroy } from './mql-registry';\nimport { CreateMediaQueryOptions } from './models';\nimport { NGX_MQ_SSR_VALUE } from './tokens';\n\nexport function createConsumer(query: string, options?: CreateMediaQueryOptions): Signal<boolean> {\n const defaultSsrValue: boolean = inject(NGX_MQ_SSR_VALUE);\n const effectiveSsrValue: boolean = options?.ssrValue ?? defaultSsrValue;\n\n const querySignal: Signal<boolean> = retainUntilDestroy(query, effectiveSsrValue);\n\n return computed(() => querySignal());\n}\n\nexport function createConsumerLabel(descriptor: string): string {\n return `[NgxMq Signal: ${descriptor}]`;\n}\n","export function normalizeQuery(value: string): string {\n return value.trim().replace(/\\s+/g, ' ').toLowerCase();\n}\n","import { assertInInjectionContext, isDevMode, Signal } from '@angular/core';\nimport { applyMaxEpsilon, resolveBreakpoint } from './utils/breakpoints.utils';\nimport { DisplayModeOption, CreateMediaQueryOptions } from './models';\nimport { createConsumer, createConsumerLabel } from './core';\nimport { normalizeQuery } from './utils/common.utils';\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);\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);\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);\n\n consumer.toString = () => createConsumerLabel(`between(${minBp}, ${maxBp})`);\n\n return consumer;\n}\n\nexport function orientation(value: 'portrait' | 'landscape', options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(orientation);\n\n const query: string = normalizeQuery(`(orientation: ${value})`);\n const consumer: Signal<boolean> = createConsumer(query, options);\n\n consumer.toString = () => createConsumerLabel(`orientation(${value})`);\n\n return consumer;\n}\n\nexport function colorScheme(value: 'light' | 'dark', options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(colorScheme);\n\n const query: string = normalizeQuery(`(prefers-color-scheme: ${value})`);\n const consumer: Signal<boolean> = createConsumer(query, options);\n\n consumer.toString = () => createConsumerLabel(`colorScheme(${value})`);\n\n return consumer;\n}\n\nexport function displayMode(value: DisplayModeOption, options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(displayMode);\n\n const query = normalizeQuery(`(display-mode: ${value})`);\n const consumer: Signal<boolean> = createConsumer(query, options);\n\n consumer.toString = () => createConsumerLabel(`displayMode(${value})`);\n\n return consumer;\n}\n\nexport function reducedMotion(options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(reducedMotion);\n\n const query: string = normalizeQuery('(prefers-reduced-motion: reduce)');\n const consumer: Signal<boolean> = createConsumer(query, options);\n\n consumer.toString = () => createConsumerLabel('reducedMotion');\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);\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, NGX_MQ_SSR_VALUE } 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\nexport function provideSsrValue(value: boolean): Provider {\n return { provide: NGX_MQ_SSR_VALUE, useValue: value };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["signal","createSignal"],"mappings":"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"}
package/lib/api.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { Signal } from '@angular/core';
2
- import { DisplayModeOption } from './models';
3
- export declare function up(bp: string): Signal<boolean>;
4
- export declare function down(bp: string): Signal<boolean>;
5
- export declare function between(minBp: string, maxBp: string): Signal<boolean>;
6
- export declare function orientation(option: 'portrait' | 'landscape'): Signal<boolean>;
7
- export declare function colorScheme(option: 'light' | 'dark'): Signal<boolean>;
8
- export declare function displayMode(option: DisplayModeOption): Signal<boolean>;
9
- export declare function matchMediaSignal(query: string): Signal<boolean>;
2
+ import { DisplayModeOption, CreateMediaQueryOptions } from './models';
3
+ export declare function up(bp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
4
+ export declare function down(bp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
5
+ export declare function between(minBp: string, maxBp: string, options?: CreateMediaQueryOptions): Signal<boolean>;
6
+ export declare function orientation(value: 'portrait' | 'landscape', options?: CreateMediaQueryOptions): Signal<boolean>;
7
+ export declare function colorScheme(value: 'light' | 'dark', options?: CreateMediaQueryOptions): Signal<boolean>;
8
+ export declare function displayMode(value: DisplayModeOption, options?: CreateMediaQueryOptions): Signal<boolean>;
9
+ export declare function reducedMotion(options?: CreateMediaQueryOptions): Signal<boolean>;
10
+ export declare function matchMediaSignal(query: string, options?: CreateMediaQueryOptions): Signal<boolean>;
package/lib/core.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { Signal } from '@angular/core';
2
- export declare function createConsumer(query: string): Signal<boolean>;
2
+ import { CreateMediaQueryOptions } from './models';
3
+ export declare function createConsumer(query: string, options?: CreateMediaQueryOptions): Signal<boolean>;
3
4
  export declare function createConsumerLabel(descriptor: string): string;
package/lib/models.d.ts CHANGED
@@ -1,2 +1,8 @@
1
1
  export type MqBreakpoints = Record<string, number>;
2
+ export interface CreateMediaQueryOptions {
3
+ /**
4
+ * Static signal value used during SSR.
5
+ */
6
+ ssrValue?: boolean;
7
+ }
2
8
  export type DisplayModeOption = 'browser' | 'fullscreen' | 'standalone' | 'minimal-ui' | 'window-controls-overlay' | 'picture-in-picture';
@@ -1,6 +1,6 @@
1
1
  import { Signal } from '@angular/core';
2
2
  import { MqlRegistry, MqRetainToken } from './mql-registry.models';
3
- export declare function retain(query: string, token: MqRetainToken): Signal<boolean>;
3
+ export declare function retain(query: string, token: MqRetainToken, ssrValue: boolean): Signal<boolean>;
4
4
  export declare function release(query: string, token: MqRetainToken): boolean;
5
5
  export declare function _getRegistry(): MqlRegistry;
6
6
  export declare function _resetRegistry(): void;
@@ -1,2 +1,2 @@
1
1
  import { Signal } from '@angular/core';
2
- export declare function retainUntilDestroy(query: string): Signal<boolean>;
2
+ export declare function retainUntilDestroy(query: string, ssrValue: boolean): Signal<boolean>;
@@ -5,3 +5,4 @@ export declare function provideTailwindBreakpoints(): Provider;
5
5
  export declare function provideBootstrapBreakpoints(): Provider;
6
6
  export declare function provideMaterialBreakpoints(): Provider;
7
7
  export declare function provideBreakpointEpsilon(epsilon?: number): Provider;
8
+ export declare function provideSsrValue(value: boolean): Provider;
package/lib/tokens.d.ts CHANGED
@@ -2,3 +2,4 @@ import { InjectionToken } from '@angular/core';
2
2
  import { MqBreakpoints } from './models';
3
3
  export declare const MQ_BREAKPOINTS: InjectionToken<MqBreakpoints>;
4
4
  export declare const MQ_BREAKPOINT_EPSILON: InjectionToken<number>;
5
+ export declare const NGX_MQ_SSR_VALUE: InjectionToken<boolean>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-mq",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "Signal-powered breakpoints and media queries for Angular.",
5
5
  "repository": {
6
6
  "type": "git",