ngx-mq 1.4.0 → 1.6.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,12 +126,13 @@ 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` | `value: 'portrait' \| 'landscape'` | `Signal<boolean>` | `true` when the current screen orientation matches the specified value. |
132
- | `colorScheme` | `value: 'light' \| 'dark'` | `Signal<boolean>` | `true` when the system color scheme matches the specified value. |
133
- | `displayMode` | `value: DisplayModeOption` | `Signal<boolean>` | `true` when the current display mode matches the specified value. |
134
- | `reducedMotion` | none | `Signal<boolean>` | `true` when the user has enabled reduced motion. |
129
+ | Function | Parameters | Returns | Description |
130
+ | --------------- | ----------------------------------- | ----------------- | ----------------------------------------------------------------------- |
131
+ | `orientation` | `value: 'portrait' \| 'landscape'` | `Signal<boolean>` | `true` when the current screen orientation matches the specified value. |
132
+ | `colorScheme` | `value: 'light' \| 'dark'` | `Signal<boolean>` | `true` when the system color scheme matches the specified value. |
133
+ | `displayMode` | `value: DisplayModeOption` | `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. |
135
+ | `hover` | `options?: CreateMediaQueryOptions` | `Signal<boolean>` | `true` when the user's primary input device supports hover capability. |
135
136
 
136
137
  ---
137
138
 
@@ -139,9 +140,9 @@ Utils exposing common CSS media features.
139
140
 
140
141
  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.
141
142
 
142
- | Function | Parameters | Returns | Description |
143
- | ------------------ | --------------- | ----------------- | --------------------------------------------------------- |
144
- | `matchMediaSignal` | `query: string` | `Signal<boolean>` | Provides a signal representing the state of a media query |
143
+ | Function | Parameters | Returns | Description |
144
+ | ------------------ | -------------------------------------------------- | ----------------- | --------------------------------------------------------- |
145
+ | `matchMediaSignal` | `query: string, options?: CreateMediaQueryOptions` | `Signal<boolean>` | Provides a signal representing the state of a media query |
145
146
 
146
147
  > **Tip:** Use this API for media queries that are not part of your breakpoint map.
147
148
 
@@ -153,9 +154,29 @@ import { matchMediaSignal } from 'ngx-mq';
153
154
  export const isLandscape = (): Signal<boolean> => matchMediaSignal('(orientation: landscape)');
154
155
  ```
155
156
 
157
+ ## Providers
158
+
159
+ | Provider | Parameters | Description |
160
+ | ------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------- |
161
+ | `provideBreakpoints()` | `bps: MqBreakpoints` | Registers a custom set of breakpoints. |
162
+ | `provideTailwindBreakpoints()` | none | Registers the default Tailwind CSS breakpoints. |
163
+ | `provideBootstrapBreakpoints()` | none | Registers the default Bootstrap breakpoints. |
164
+ | `provideMaterialBreakpoints()` | none | Registers the default Angular Material breakpoints. |
165
+ | `provideBreakpointEpsilon()` | `epsilon: number` | Sets the epsilon threshold used when comparing breakpoint values. |
166
+ | `provideSsrValue()` | `value: boolean` | Defines the static signal value used during SSR, since media queries are not available on the server. Defaults to `false`. |
167
+
156
168
  ## Types
157
169
 
158
170
  ```ts
171
+ export type MqBreakpoints = Record<string, number>;
172
+
173
+ export interface CreateMediaQueryOptions {
174
+ /**
175
+ * Static signal value used during SSR.
176
+ */
177
+ ssrValue?: boolean;
178
+ }
179
+
159
180
  export type DisplayModeOption =
160
181
  | 'browser'
161
182
  | 'fullscreen'
@@ -2,62 +2,69 @@ 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(value) {
28
+ export function orientation(value, options) {
29
29
  isDevMode() && assertInInjectionContext(orientation);
30
30
  const query = normalizeQuery(`(orientation: ${value})`);
31
- const consumer = createConsumer(query);
31
+ const consumer = createConsumer(query, options);
32
32
  consumer.toString = () => createConsumerLabel(`orientation(${value})`);
33
33
  return consumer;
34
34
  }
35
- export function colorScheme(value) {
35
+ export function colorScheme(value, options) {
36
36
  isDevMode() && assertInInjectionContext(colorScheme);
37
37
  const query = normalizeQuery(`(prefers-color-scheme: ${value})`);
38
- const consumer = createConsumer(query);
38
+ const consumer = createConsumer(query, options);
39
39
  consumer.toString = () => createConsumerLabel(`colorScheme(${value})`);
40
40
  return consumer;
41
41
  }
42
- export function displayMode(value) {
42
+ export function displayMode(value, options) {
43
43
  isDevMode() && assertInInjectionContext(displayMode);
44
44
  const query = normalizeQuery(`(display-mode: ${value})`);
45
- const consumer = createConsumer(query);
45
+ const consumer = createConsumer(query, options);
46
46
  consumer.toString = () => createConsumerLabel(`displayMode(${value})`);
47
47
  return consumer;
48
48
  }
49
- export function reducedMotion() {
49
+ export function reducedMotion(options) {
50
50
  isDevMode() && assertInInjectionContext(reducedMotion);
51
51
  const query = normalizeQuery('(prefers-reduced-motion: reduce)');
52
- const consumer = createConsumer(query);
52
+ const consumer = createConsumer(query, options);
53
53
  consumer.toString = () => createConsumerLabel('reducedMotion');
54
54
  return consumer;
55
55
  }
56
- export function matchMediaSignal(query) {
56
+ export function hover(options) {
57
+ isDevMode() && assertInInjectionContext(hover);
58
+ const query = normalizeQuery('(hover: hover)');
59
+ const consumer = createConsumer(query, options);
60
+ consumer.toString = () => createConsumerLabel('hover');
61
+ return consumer;
62
+ }
63
+ export function matchMediaSignal(query, options) {
57
64
  isDevMode() && assertInInjectionContext(matchMediaSignal);
58
65
  const media = normalizeQuery(query);
59
- const consumer = createConsumer(media);
66
+ const consumer = createConsumer(media, options);
60
67
  consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
61
68
  return consumer;
62
69
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHdEQsTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFVO0lBQzNCLFNBQVMsRUFBRSxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sS0FBSyxHQUFXLGNBQWMsQ0FBQyxlQUFlLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixNQUFNLFFBQVEsR0FBb0IsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEVBQVU7SUFDN0IsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFOUMsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFeEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxD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LFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFNUUsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCwgaXNEZXZNb2RlLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFwcGx5TWF4RXBzaWxvbiwgcmVzb2x2ZUJyZWFrcG9pbnQgfSBmcm9tICcuL3V0aWxzL2JyZWFrcG9pbnRzLnV0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUNvbnN1bWVyLCBjcmVhdGVDb25zdW1lckxhYmVsIH0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IG5vcm1hbGl6ZVF1ZXJ5IH0gZnJvbSAnLi91dGlscy9jb21tb24udXRpbHMnO1xuaW1wb3J0IHsgRGlzcGxheU1vZGVPcHRpb24gfSBmcm9tICcuL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1cChicDogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KHVwKTtcblxuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChtaW4td2lkdGg6ICR7cmVzb2x2ZUJyZWFrcG9pbnQoYnApfXB4KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnkpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgdXAoJHticH0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bihicDogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGRvd24pO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG1heC13aWR0aDogJHthcHBseU1heEVwc2lsb24ocmVzb2x2ZUJyZWFrcG9pbnQoYnApKX1weClgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5KTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYGRvd24oJHticH0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmV0d2VlbihtaW5CcDogc3RyaW5nLCBtYXhCcDogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGJldHdlZW4pO1xuXG4gIGNvbnN0IG1pblB4OiBudW1iZXIgPSByZXNvbHZlQnJlYWtwb2ludChtaW5CcCk7XG4gIGNvbnN0IG1heFB4OiBudW1iZXIgPSByZXNvbHZlQnJlYWtwb2ludChtYXhCcCk7XG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG1pbi13aWR0aDogJHttaW5QeH1weCkgYW5kIChtYXgtd2lkdGg6ICR7YXBwbHlNYXhFcHNpbG9uKG1heFB4KX1weClgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5KTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYGJldHdlZW4oJHttaW5CcH0sICR7bWF4QnB9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9yaWVudGF0aW9uKHZhbHVlOiAncG9ydHJhaXQnIHwgJ2xhbmRzY2FwZScpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQob3JpZW50YXRpb24pO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG9yaWVudGF0aW9uOiAke3ZhbHVlfSlgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5KTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYG9yaWVudGF0aW9uKCR7dmFsdWV9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yU2NoZW1lKHZhbHVlOiAnbGlnaHQnIHwgJ2RhcmsnKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGNvbG9yU2NoZW1lKTtcblxuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChwcmVmZXJzLWNvbG9yLXNjaGVtZTogJHt2YWx1ZX0pYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBjb2xvclNjaGVtZSgke3ZhbHVlfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5TW9kZSh2YWx1ZTogRGlzcGxheU1vZGVPcHRpb24pOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZGlzcGxheU1vZGUpO1xuXG4gIGNvbnN0IHF1ZXJ5ID0gbm9ybWFsaXplUXVlcnkoYChkaXNwbGF5LW1vZGU6ICR7dmFsdWV9KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnkpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgZGlzcGxheU1vZGUoJHt2YWx1ZX0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlZE1vdGlvbigpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQocmVkdWNlZE1vdGlvbik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnkpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbCgncmVkdWNlZE1vdGlvbicpO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoTWVkaWFTaWduYWwocXVlcnk6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChtYXRjaE1lZGlhU2lnbmFsKTtcblxuICBjb25zdCBtZWRpYTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkocXVlcnkpO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIobWVkaWEpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgbWF0Y2hNZWRpYVNpZ25hbCgke3F1ZXJ5fSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG4iXX0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsTUFBTSxVQUFVLEVBQUUsQ0FBQyxFQUFVLEVBQUUsT0FBaUM7SUFDOUQsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFNUMsTUFBTSxLQUFLLEdBQVcsY0FBYyxDQUFDLGVBQWUsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEVBQVUsRUFBRSxPQUFpQztJQUNoRSxTQUFTLEVBQUUsSUFBSSx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU5QyxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsZUFBZSxlQUFlLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakcsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFakUsUUFBUSxDQUFDLFFBQVEsR0FBRyxH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Q3JELFNBQVMsRUFBRSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9DLE1BQU0sS0FBSyxHQUFXLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sUUFBUSxHQUFvQixjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWpFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdkQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsT0FBaUM7SUFDL0UsU0FBUyxFQUFFLElBQUksd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUUxRCxNQUFNLEtBQUssR0FBVyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQW9CLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFakUsUUFBUSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUU1RSxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpc0Rldk1vZGUsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXBwbHlNYXhFcHNpbG9uLCByZXNvbHZlQnJlYWtwb2ludCB9IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludHMudXRpbHMnO1xuaW1wb3J0IHsgRGlzcGxheU1vZGVPcHRpb24sIENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgY3JlYXRlQ29uc3VtZXIsIGNyZWF0ZUNvbnN1bWVyTGFiZWwgfSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0IHsgbm9ybWFsaXplUXVlcnkgfSBmcm9tICcuL3V0aWxzL2NvbW1vbi51dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1cChicDogc3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlTWVkaWFRdWVyeU9wdGlvbnMpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQodXApO1xuXG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG1pbi13aWR0aDogJHtyZXNvbHZlQnJlYWtwb2ludChicCl9cHgpYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSwgb3B0aW9ucyk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGB1cCgke2JwfSlgKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3duKGJwOiBzdHJpbmcsIG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChkb3duKTtcblxuICBjb25zdCBxdWVyeTogc3RyaW5nID0gbm9ybWFsaXplUXVlcnkoYChtYXgtd2lkdGg6ICR7YXBwbHlNYXhFcHNpbG9uKHJlc29sdmVCcmVha3BvaW50KGJwKSl9cHgpYCk7XG4gIGNvbnN0IGNvbnN1bWVyOiBTaWduYWw8Ym9vbGVhbj4gPSBjcmVhdGVDb25zdW1lcihxdWVyeSwgb3B0aW9ucyk7XG5cbiAgY29uc3VtZXIudG9TdHJpbmcgPSAoKSA9PiBjcmVhdGVDb25zdW1lckxhYmVsKGBkb3duKCR7YnB9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJldHdlZW4obWluQnA6IHN0cmluZywgbWF4QnA6IHN0cmluZywgb3B0aW9ucz86IENyZWF0ZU1lZGlhUXVlcnlPcHRpb25zKTogU2lnbmFsPGJvb2xlYW4+IHtcbiAgaXNEZXZNb2RlKCkgJiYgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0KGJldHdlZW4pO1xuXG4gIGNvbnN0IG1pblB4OiBudW1iZXIgPSByZXNvbHZlQnJlYWtwb2ludChtaW5CcCk7XG4gIGNvbnN0IG1heFB4OiBudW1iZXIgPSByZXNvbHZlQnJlYWtwb2ludChtYXhCcCk7XG4gIGNvbnN0IHF1ZXJ5OiBzdHJpbmcgPSBub3JtYWxpemVRdWVyeShgKG1pbi13aWR0aDogJHttaW5QeH1weCkgYW5kIChtYXgtd2lkdGg6ICR7YXBwbHlNYXhFcHNpbG9uKG1heFB4KX1weClgKTtcbiAgY29uc3QgY29uc3VtZXI6IFNpZ25hbDxib29sZWFuPiA9IGNyZWF0ZUNvbnN1bWVyKHF1ZXJ5LCBvcHRpb25zKTtcblxuICBjb25zdW1lci50b1N0cmluZyA9ICgpID0+IGNyZWF0ZUNvbnN1bWVyTGFiZWwoYGJldHdlZW4oJHttaW5CcH0sICR7bWF4QnB9KWApO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9yaWVudGF0aW9uKHZhbHVlOiAncG9ydHJhaXQnIHwgJ2xhbmRzY2FwZScsIG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChvcmllbnRhdGlvbik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAob3JpZW50YXRpb246ICR7dmFsdWV9KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgb3JpZW50YXRpb24oJHt2YWx1ZX0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3JTY2hlbWUodmFsdWU6ICdsaWdodCcgfCAnZGFyaycsIG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChjb2xvclNjaGVtZSk7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KGAocHJlZmVycy1jb2xvci1zY2hlbWU6ICR7dmFsdWV9KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgY29sb3JTY2hlbWUoJHt2YWx1ZX0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheU1vZGUodmFsdWU6IERpc3BsYXlNb2RlT3B0aW9uLCBvcHRpb25zPzogQ3JlYXRlTWVkaWFRdWVyeU9wdGlvbnMpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoZGlzcGxheU1vZGUpO1xuXG4gIGNvbnN0IHF1ZXJ5ID0gbm9ybWFsaXplUXVlcnkoYChkaXNwbGF5LW1vZGU6ICR7dmFsdWV9KWApO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbChgZGlzcGxheU1vZGUoJHt2YWx1ZX0pYCk7XG5cbiAgcmV0dXJuIGNvbnN1bWVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlZE1vdGlvbihvcHRpb25zPzogQ3JlYXRlTWVkaWFRdWVyeU9wdGlvbnMpOiBTaWduYWw8Ym9vbGVhbj4ge1xuICBpc0Rldk1vZGUoKSAmJiBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQocmVkdWNlZE1vdGlvbik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKScpO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbCgncmVkdWNlZE1vdGlvbicpO1xuXG4gIHJldHVybiBjb25zdW1lcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhvdmVyKG9wdGlvbnM/OiBDcmVhdGVNZWRpYVF1ZXJ5T3B0aW9ucyk6IFNpZ25hbDxib29sZWFuPiB7XG4gIGlzRGV2TW9kZSgpICYmIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChob3Zlcik7XG5cbiAgY29uc3QgcXVlcnk6IHN0cmluZyA9IG5vcm1hbGl6ZVF1ZXJ5KCcoaG92ZXI6IGhvdmVyKScpO1xuICBjb25zdCBjb25zdW1lcjogU2lnbmFsPGJvb2xlYW4+ID0gY3JlYXRlQ29uc3VtZXIocXVlcnksIG9wdGlvbnMpO1xuXG4gIGNvbnN1bWVyLnRvU3RyaW5nID0gKCkgPT4gY3JlYXRlQ29uc3VtZXJMYWJlbCgnaG92ZXInKTtcblxuICByZXR1cm4gY29uc3VtZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE1lZGlhU2lnbmFsKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/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,61 +176,68 @@ 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(value) {
202
+ function orientation(value, options) {
197
203
  isDevMode() && assertInInjectionContext(orientation);
198
204
  const query = normalizeQuery(`(orientation: ${value})`);
199
- const consumer = createConsumer(query);
205
+ const consumer = createConsumer(query, options);
200
206
  consumer.toString = () => createConsumerLabel(`orientation(${value})`);
201
207
  return consumer;
202
208
  }
203
- function colorScheme(value) {
209
+ function colorScheme(value, options) {
204
210
  isDevMode() && assertInInjectionContext(colorScheme);
205
211
  const query = normalizeQuery(`(prefers-color-scheme: ${value})`);
206
- const consumer = createConsumer(query);
212
+ const consumer = createConsumer(query, options);
207
213
  consumer.toString = () => createConsumerLabel(`colorScheme(${value})`);
208
214
  return consumer;
209
215
  }
210
- function displayMode(value) {
216
+ function displayMode(value, options) {
211
217
  isDevMode() && assertInInjectionContext(displayMode);
212
218
  const query = normalizeQuery(`(display-mode: ${value})`);
213
- const consumer = createConsumer(query);
219
+ const consumer = createConsumer(query, options);
214
220
  consumer.toString = () => createConsumerLabel(`displayMode(${value})`);
215
221
  return consumer;
216
222
  }
217
- function reducedMotion() {
223
+ function reducedMotion(options) {
218
224
  isDevMode() && assertInInjectionContext(reducedMotion);
219
225
  const query = normalizeQuery('(prefers-reduced-motion: reduce)');
220
- const consumer = createConsumer(query);
226
+ const consumer = createConsumer(query, options);
221
227
  consumer.toString = () => createConsumerLabel('reducedMotion');
222
228
  return consumer;
223
229
  }
224
- function matchMediaSignal(query) {
230
+ function hover(options) {
231
+ isDevMode() && assertInInjectionContext(hover);
232
+ const query = normalizeQuery('(hover: hover)');
233
+ const consumer = createConsumer(query, options);
234
+ consumer.toString = () => createConsumerLabel('hover');
235
+ return consumer;
236
+ }
237
+ function matchMediaSignal(query, options) {
225
238
  isDevMode() && assertInInjectionContext(matchMediaSignal);
226
239
  const media = normalizeQuery(query);
227
- const consumer = createConsumer(media);
240
+ const consumer = createConsumer(media, options);
228
241
  consumer.toString = () => createConsumerLabel(`matchMediaSignal(${query})`);
229
242
  return consumer;
230
243
  }
@@ -246,10 +259,13 @@ function provideBreakpointEpsilon(epsilon = DEFAULT_BREAKPOINT_EPSILON) {
246
259
  validateEpsilon(epsilon);
247
260
  return { provide: MQ_BREAKPOINT_EPSILON, useValue: epsilon };
248
261
  }
262
+ function provideSsrValue(value) {
263
+ return { provide: NGX_MQ_SSR_VALUE, useValue: value };
264
+ }
249
265
 
250
266
  /**
251
267
  * Generated bundle index. Do not edit.
252
268
  */
253
269
 
254
- export { MQ_BREAKPOINTS, MQ_BREAKPOINT_EPSILON, between, colorScheme, displayMode, down, matchMediaSignal, orientation, provideBootstrapBreakpoints, provideBreakpointEpsilon, provideBreakpoints, provideMaterialBreakpoints, provideTailwindBreakpoints, reducedMotion, up };
270
+ export { MQ_BREAKPOINTS, MQ_BREAKPOINT_EPSILON, NGX_MQ_SSR_VALUE, between, colorScheme, displayMode, down, hover, matchMediaSignal, orientation, provideBootstrapBreakpoints, provideBreakpointEpsilon, provideBreakpoints, provideMaterialBreakpoints, provideSsrValue, provideTailwindBreakpoints, reducedMotion, up };
255
271
  //# 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(value: 'portrait' | 'landscape'): Signal<boolean> {\n isDevMode() && assertInInjectionContext(orientation);\n\n const query: string = normalizeQuery(`(orientation: ${value})`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`orientation(${value})`);\n\n return consumer;\n}\n\nexport function colorScheme(value: 'light' | 'dark'): Signal<boolean> {\n isDevMode() && assertInInjectionContext(colorScheme);\n\n const query: string = normalizeQuery(`(prefers-color-scheme: ${value})`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`colorScheme(${value})`);\n\n return consumer;\n}\n\nexport function displayMode(value: DisplayModeOption): Signal<boolean> {\n isDevMode() && assertInInjectionContext(displayMode);\n\n const query = normalizeQuery(`(display-mode: ${value})`);\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel(`displayMode(${value})`);\n\n return consumer;\n}\n\nexport function reducedMotion(): Signal<boolean> {\n isDevMode() && assertInInjectionContext(reducedMotion);\n\n const query: string = normalizeQuery('(prefers-reduced-motion: reduce)');\n const consumer: Signal<boolean> = createConsumer(query);\n\n consumer.toString = () => createConsumerLabel('reducedMotion');\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 hover(options?: CreateMediaQueryOptions): Signal<boolean> {\n isDevMode() && assertInInjectionContext(hover);\n\n const query: string = normalizeQuery('(hover: hover)');\n const consumer: Signal<boolean> = createConsumer(query, options);\n\n consumer.toString = () => createConsumerLabel('hover');\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,10 +1,11 @@
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(value: 'portrait' | 'landscape'): Signal<boolean>;
7
- export declare function colorScheme(value: 'light' | 'dark'): Signal<boolean>;
8
- export declare function displayMode(value: DisplayModeOption): Signal<boolean>;
9
- export declare function reducedMotion(): Signal<boolean>;
10
- 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 hover(options?: CreateMediaQueryOptions): Signal<boolean>;
11
+ 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.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "Signal-powered breakpoints and media queries for Angular.",
5
5
  "repository": {
6
6
  "type": "git",