@ng-atomic/common 17.1.0 → 17.3.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.
Files changed (65) hide show
  1. package/esm2022/models/index.mjs +1 -1
  2. package/esm2022/pipes/auto-columns/auto-columns.pipe.mjs +20 -0
  3. package/esm2022/pipes/auto-columns/index.mjs +2 -0
  4. package/esm2022/pipes/auto-columns/ng-atomic-common-pipes-auto-columns.mjs +5 -0
  5. package/esm2022/pipes/columns/columns.pipe.mjs +17 -0
  6. package/esm2022/pipes/columns/index.mjs +2 -0
  7. package/esm2022/pipes/columns/ng-atomic-common-pipes-columns.mjs +5 -0
  8. package/esm2022/pipes/error/error.pipe.mjs +7 -4
  9. package/esm2022/pipes/map/index.mjs +2 -0
  10. package/esm2022/pipes/map/map.pipe.mjs +17 -0
  11. package/esm2022/pipes/map/ng-atomic-common-pipes-map.mjs +5 -0
  12. package/esm2022/pipes/resolve-columns/index.mjs +2 -0
  13. package/esm2022/pipes/resolve-columns/ng-atomic-common-pipes-resolve-columns.mjs +5 -0
  14. package/esm2022/pipes/resolve-columns/resolve-columns.pipe.mjs +24 -0
  15. package/esm2022/pipes/sort/index.mjs +2 -0
  16. package/esm2022/pipes/sort/ng-atomic-common-pipes-sort.mjs +5 -0
  17. package/esm2022/pipes/sort/sort.pipe.mjs +14 -0
  18. package/esm2022/services/breakpoint/breakpoint.service.mjs +57 -0
  19. package/esm2022/services/breakpoint/index.mjs +2 -0
  20. package/esm2022/services/breakpoint/ng-atomic-common-services-breakpoint.mjs +5 -0
  21. package/esm2022/services/ui/ui.helpers.mjs +24 -11
  22. package/esm2022/services/ui/ui.service.mjs +4 -55
  23. package/esm2022/stores/entities/di.mjs +22 -14
  24. package/esm2022/stores/entities/entity-store-adapter.mjs +31 -0
  25. package/esm2022/stores/entities/entity-store-manager.mjs +8 -25
  26. package/esm2022/stores/entities/entity-store.mjs +17 -35
  27. package/esm2022/stores/entities/index.mjs +2 -1
  28. package/fesm2022/ng-atomic-common-pipes-auto-columns.mjs +27 -0
  29. package/fesm2022/ng-atomic-common-pipes-auto-columns.mjs.map +1 -0
  30. package/fesm2022/ng-atomic-common-pipes-columns.mjs +24 -0
  31. package/fesm2022/ng-atomic-common-pipes-columns.mjs.map +1 -0
  32. package/fesm2022/ng-atomic-common-pipes-error.mjs +6 -3
  33. package/fesm2022/ng-atomic-common-pipes-error.mjs.map +1 -1
  34. package/fesm2022/ng-atomic-common-pipes-map.mjs +24 -0
  35. package/fesm2022/ng-atomic-common-pipes-map.mjs.map +1 -0
  36. package/fesm2022/ng-atomic-common-pipes-resolve-columns.mjs +31 -0
  37. package/fesm2022/ng-atomic-common-pipes-resolve-columns.mjs.map +1 -0
  38. package/fesm2022/ng-atomic-common-pipes-sort.mjs +21 -0
  39. package/fesm2022/ng-atomic-common-pipes-sort.mjs.map +1 -0
  40. package/fesm2022/ng-atomic-common-services-breakpoint.mjs +64 -0
  41. package/fesm2022/ng-atomic-common-services-breakpoint.mjs.map +1 -0
  42. package/fesm2022/ng-atomic-common-services-ui.mjs +27 -65
  43. package/fesm2022/ng-atomic-common-services-ui.mjs.map +1 -1
  44. package/fesm2022/ng-atomic-common-stores-entities.mjs +43 -41
  45. package/fesm2022/ng-atomic-common-stores-entities.mjs.map +1 -1
  46. package/models/index.d.ts +5 -2
  47. package/package.json +38 -2
  48. package/pipes/auto-columns/auto-columns.pipe.d.ts +7 -0
  49. package/pipes/auto-columns/index.d.ts +1 -0
  50. package/pipes/columns/columns.pipe.d.ts +8 -0
  51. package/pipes/columns/index.d.ts +1 -0
  52. package/pipes/map/index.d.ts +1 -0
  53. package/pipes/map/map.pipe.d.ts +7 -0
  54. package/pipes/resolve-columns/index.d.ts +1 -0
  55. package/pipes/resolve-columns/resolve-columns.pipe.d.ts +11 -0
  56. package/pipes/sort/index.d.ts +1 -0
  57. package/pipes/sort/sort.pipe.d.ts +8 -0
  58. package/services/breakpoint/breakpoint.service.d.ts +29 -0
  59. package/services/breakpoint/index.d.ts +1 -0
  60. package/services/ui/ui.helpers.d.ts +2 -3
  61. package/services/ui/ui.service.d.ts +2 -29
  62. package/stores/entities/entity-store-adapter.d.ts +31 -0
  63. package/stores/entities/entity-store-manager.d.ts +5 -5
  64. package/stores/entities/entity-store.d.ts +10 -29
  65. package/stores/entities/index.d.ts +1 -0
@@ -0,0 +1,64 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, computed, Injectable } from '@angular/core';
3
+ import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
4
+ import { toSignal } from '@angular/core/rxjs-interop';
5
+ import { combineLatest } from 'rxjs';
6
+
7
+ class BreakpointService {
8
+ constructor() {
9
+ this.breakpointObserver = inject(BreakpointObserver);
10
+ this.breakpointMap$ = combineLatest({
11
+ xSmall: this.breakpointObserver.observe(Breakpoints.XSmall),
12
+ small: this.breakpointObserver.observe(Breakpoints.Small),
13
+ medium: this.breakpointObserver.observe(Breakpoints.Medium),
14
+ large: this.breakpointObserver.observe(Breakpoints.Large),
15
+ xLarge: this.breakpointObserver.observe(Breakpoints.XLarge),
16
+ handset: this.breakpointObserver.observe(Breakpoints.Handset),
17
+ tablet: this.breakpointObserver.observe(Breakpoints.Tablet),
18
+ web: this.breakpointObserver.observe(Breakpoints.Web),
19
+ });
20
+ this.breakpointMap = toSignal(this.breakpointMap$);
21
+ this.breakpoint = computed(() => {
22
+ const map = this.breakpointMap();
23
+ const test = {
24
+ xSmall: map.xSmall.matches ?? this.breakpointObserver.isMatched(Breakpoints.XSmall),
25
+ small: map.small.matches ?? this.breakpointObserver.isMatched(Breakpoints.Small),
26
+ medium: map.medium.matches ?? this.breakpointObserver.isMatched(Breakpoints.Medium),
27
+ large: map.large.matches ?? this.breakpointObserver.isMatched(Breakpoints.Large),
28
+ xLarge: map.xLarge.matches ?? this.breakpointObserver.isMatched(Breakpoints.XLarge),
29
+ handset: map.handset.matches ?? this.breakpointObserver.isMatched(Breakpoints.Handset),
30
+ tablet: map.tablet.matches ?? this.breakpointObserver.isMatched(Breakpoints.Tablet),
31
+ web: map.web.matches ?? this.breakpointObserver.isMatched(Breakpoints.Web),
32
+ };
33
+ if (test.xSmall)
34
+ return 'xSmall';
35
+ if (test.small)
36
+ return 'small';
37
+ if (test.medium)
38
+ return 'medium';
39
+ if (test.large)
40
+ return 'large';
41
+ if (test.xLarge)
42
+ return 'xLarge';
43
+ if (test.handset)
44
+ return 'handset';
45
+ if (test.tablet)
46
+ return 'tablet';
47
+ if (test.web)
48
+ return 'web';
49
+ });
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: BreakpointService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
52
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: BreakpointService, providedIn: 'root' }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: BreakpointService, decorators: [{
55
+ type: Injectable,
56
+ args: [{ providedIn: 'root' }]
57
+ }] });
58
+
59
+ /**
60
+ * Generated bundle index. Do not edit.
61
+ */
62
+
63
+ export { BreakpointService };
64
+ //# sourceMappingURL=ng-atomic-common-services-breakpoint.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ng-atomic-common-services-breakpoint.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/breakpoint/breakpoint.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/breakpoint/ng-atomic-common-services-breakpoint.ts"],"sourcesContent":["import { computed, inject, Injectable } from '@angular/core';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { combineLatest } from 'rxjs';\n\nexport type Breakpoint = 'xSmall' | 'small' | 'medium' | 'large' | 'xLarge' | 'handset' | 'tablet' | 'web';\n\n@Injectable({ providedIn: 'root' })\nexport class BreakpointService {\n protected readonly breakpointObserver = inject(BreakpointObserver);\n readonly breakpointMap$ = combineLatest({\n xSmall: this.breakpointObserver.observe(Breakpoints.XSmall),\n small: this.breakpointObserver.observe(Breakpoints.Small),\n medium: this.breakpointObserver.observe(Breakpoints.Medium),\n large: this.breakpointObserver.observe(Breakpoints.Large),\n xLarge: this.breakpointObserver.observe(Breakpoints.XLarge),\n handset: this.breakpointObserver.observe(Breakpoints.Handset),\n tablet: this.breakpointObserver.observe(Breakpoints.Tablet),\n web: this.breakpointObserver.observe(Breakpoints.Web),\n });\n readonly breakpointMap = toSignal(this.breakpointMap$);\n readonly breakpoint = computed<Breakpoint>(() => {\n const map = this.breakpointMap();\n const test = {\n xSmall: map.xSmall.matches ?? this.breakpointObserver.isMatched(Breakpoints.XSmall),\n small: map.small.matches ?? this.breakpointObserver.isMatched(Breakpoints.Small),\n medium: map.medium.matches ?? this.breakpointObserver.isMatched(Breakpoints.Medium),\n large: map.large.matches ?? this.breakpointObserver.isMatched(Breakpoints.Large),\n xLarge: map.xLarge.matches ?? this.breakpointObserver.isMatched(Breakpoints.XLarge),\n handset: map.handset.matches ?? this.breakpointObserver.isMatched(Breakpoints.Handset),\n tablet: map.tablet.matches ?? this.breakpointObserver.isMatched(Breakpoints.Tablet),\n web: map.web.matches ?? this.breakpointObserver.isMatched(Breakpoints.Web),\n };\n\n if (test.xSmall) return 'xSmall';\n if (test.small) return 'small';\n if (test.medium) return 'medium';\n if (test.large) return 'large';\n if (test.xLarge) return 'xLarge';\n if (test.handset) return 'handset';\n if (test.tablet) return 'tablet';\n if (test.web) return 'web';\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,69 +1,18 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, computed, Injectable, PLATFORM_ID, signal, effect, Injector, InjectionToken, isSignal, runInInjectionContext, ElementRef } from '@angular/core';
3
- import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
2
+ import { inject, PLATFORM_ID, computed, Injectable, signal, effect, Injector, InjectionToken, isSignal, runInInjectionContext, ElementRef } from '@angular/core';
4
3
  import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
4
  import { NavigationStart, Router, ActivatedRoute } from '@angular/router';
6
- import { combineLatest, filter, map, startWith, shareReplay } from 'rxjs';
5
+ import { filter, map, startWith, shareReplay } from 'rxjs';
7
6
  import { isPlatformBrowser } from '@angular/common';
8
7
  import { RouterService } from '@ng-atomic/common/services/router';
8
+ import { BreakpointService } from '@ng-atomic/common/services/breakpoint';
9
9
  import { get, set } from 'lodash-es';
10
10
  import { computedAsync } from 'ngxtension/computed-async';
11
11
  import { NavigationHistoryService } from '@ng-atomic/common/services/navigation-history';
12
12
 
13
- class BreakPointService {
14
- constructor() {
15
- this.breakpointObserver = inject(BreakpointObserver);
16
- this.breakpointMap$ = combineLatest({
17
- xSmall: this.breakpointObserver.observe(Breakpoints.XSmall),
18
- small: this.breakpointObserver.observe(Breakpoints.Small),
19
- medium: this.breakpointObserver.observe(Breakpoints.Medium),
20
- large: this.breakpointObserver.observe(Breakpoints.Large),
21
- xLarge: this.breakpointObserver.observe(Breakpoints.XLarge),
22
- handset: this.breakpointObserver.observe(Breakpoints.Handset),
23
- tablet: this.breakpointObserver.observe(Breakpoints.Tablet),
24
- web: this.breakpointObserver.observe(Breakpoints.Web),
25
- });
26
- this.breakpointMap = toSignal(this.breakpointMap$);
27
- this.breakpoint = computed(() => {
28
- const map = this.breakpointMap();
29
- const test = {
30
- xSmall: map.xSmall.matches ?? this.breakpointObserver.isMatched(Breakpoints.XSmall),
31
- small: map.small.matches ?? this.breakpointObserver.isMatched(Breakpoints.Small),
32
- medium: map.medium.matches ?? this.breakpointObserver.isMatched(Breakpoints.Medium),
33
- large: map.large.matches ?? this.breakpointObserver.isMatched(Breakpoints.Large),
34
- xLarge: map.xLarge.matches ?? this.breakpointObserver.isMatched(Breakpoints.XLarge),
35
- handset: map.handset.matches ?? this.breakpointObserver.isMatched(Breakpoints.Handset),
36
- tablet: map.tablet.matches ?? this.breakpointObserver.isMatched(Breakpoints.Tablet),
37
- web: map.web.matches ?? this.breakpointObserver.isMatched(Breakpoints.Web),
38
- };
39
- if (test.xSmall)
40
- return 'xSmall';
41
- if (test.small)
42
- return 'small';
43
- if (test.medium)
44
- return 'medium';
45
- if (test.large)
46
- return 'large';
47
- if (test.xLarge)
48
- return 'xLarge';
49
- if (test.handset)
50
- return 'handset';
51
- if (test.tablet)
52
- return 'tablet';
53
- if (test.web)
54
- return 'web';
55
- });
56
- }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: BreakPointService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
58
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: BreakPointService, providedIn: 'root' }); }
59
- }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: BreakPointService, decorators: [{
61
- type: Injectable,
62
- args: [{ providedIn: 'root' }]
63
- }] });
64
13
  class UiService {
65
14
  constructor() {
66
- this.breakpoint = inject(BreakPointService);
15
+ this.breakpoint = inject(BreakpointService);
67
16
  this.router = inject(RouterService);
68
17
  this.platformId = inject(PLATFORM_ID);
69
18
  this.paths$ = this.router.events.pipe(filter(event => event instanceof NavigationStart), map((event) => event.url), startWith(isPlatformBrowser(this.platformId) ? window?.location?.pathname : ''), map(url => this.router.parseUrl(url)), map(urlTree => urlTree.root.children?.primary?.segments ?? []));
@@ -88,9 +37,7 @@ function scoped(source, path) {
88
37
  effect(() => {
89
38
  scopedSignal.set(get(source(), path, source()));
90
39
  }, { allowSignalWrites: true });
91
- return computed(() => scopedSignal(), {
92
- // equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),
93
- });
40
+ return computed(() => scopedSignal());
94
41
  }
95
42
  function injectBreakpoint() {
96
43
  return inject(UiService).breakpoint.breakpoint;
@@ -175,6 +122,13 @@ const UI_CONFIG_REDUCER = new InjectionToken('UI_CONFIG_REDUCER');
175
122
  function call(signalOrValue) {
176
123
  return isSignal(signalOrValue) ? signalOrValue() : signalOrValue;
177
124
  }
125
+ function setReducerPath(reducer, path) {
126
+ Object.defineProperty(reducer, 'path', { value: path, configurable: true });
127
+ return reducer;
128
+ }
129
+ function getReducerPath(reducer) {
130
+ return reducer['path'];
131
+ }
178
132
  function provideUiConfig(reducerFactory, path = [], name = 'name') {
179
133
  return {
180
134
  provide: UI_CONFIG_REDUCER,
@@ -189,30 +143,33 @@ function provideUiConfig(reducerFactory, path = [], name = 'name') {
189
143
  }
190
144
  ;
191
145
  Object.defineProperty(_reducerFactory, 'name', { value: name, configurable: true });
146
+ setReducerPath(_reducerFactory, path);
192
147
  return _reducerFactory;
193
148
  },
194
149
  deps: [Injector],
195
150
  multi: true,
196
151
  };
197
152
  }
198
- function injectRootConfig() {
153
+ function injectRootConfig(paths = []) {
199
154
  const uiContext = injectUiContext();
200
- const reducerFactories = injectReducers();
155
+ const factories = injectReducerFactoiries(paths);
201
156
  const hostInjector = inject(Injector);
202
- const reducers = reducerFactories.map(reducerFactory => {
203
- return runInInjectionContext(hostInjector, () => reducerFactory(hostInjector));
157
+ const reducers = factories.map(factory => {
158
+ return runInInjectionContext(hostInjector, () => factory(hostInjector));
204
159
  });
205
160
  if (!reducers)
206
161
  return undefined;
207
- return computed(() => {
162
+ const rootConfig = computed(() => {
208
163
  const context = uiContext();
209
164
  return reducers.reduce((acc, reducer) => {
210
165
  return runInInjectionContext(hostInjector, () => reducer(acc, context));
211
166
  }, {});
212
167
  });
168
+ return rootConfig;
213
169
  }
170
+ // TODO(@nontangent): itemsなどの取得が全てのコンポーネントで行われるので計算を最適化する。
214
171
  function injectUiConfig(paths = []) {
215
- const rootConfig = injectRootConfig();
172
+ const rootConfig = injectRootConfig(paths);
216
173
  return scoped(rootConfig, paths);
217
174
  }
218
175
  function makeConfig(defaultUseFactory, path) {
@@ -229,6 +186,11 @@ function makeConfig(defaultUseFactory, path) {
229
186
  function injectReducers() {
230
187
  return injectDeepMulti(UI_CONFIG_REDUCER);
231
188
  }
189
+ function injectReducerFactoiries(path = []) {
190
+ return injectReducers().filter(factory => {
191
+ return getReducerPath(factory).every((p, i) => path[i] === p);
192
+ });
193
+ }
232
194
  function injectDeepMulti(token, injector = inject(Injector)) {
233
195
  const valueOrArray = injector.get(token, [], { optional: true });
234
196
  const items = Array.isArray(valueOrArray) ? valueOrArray : [valueOrArray];
@@ -265,5 +227,5 @@ function debugInjector(injector = inject(Injector)) {
265
227
  * Generated bundle index. Do not edit.
266
228
  */
267
229
 
268
- export { BreakPointService, NavActionId, UI_CONFIG_REDUCER, UiService, call, debugInjector, injectBreakpoint, injectDeepMulti, injectIsMobile, injectIsRootPage, injectIsRootPage$, injectNavStartActions, injectReducers, injectRootConfig, injectUiConfig, injectUiContext, makeConfig, provideUiConfig, scoped };
230
+ export { NavActionId, UI_CONFIG_REDUCER, UiService, call, debugInjector, injectBreakpoint, injectDeepMulti, injectIsMobile, injectIsRootPage, injectIsRootPage$, injectNavStartActions, injectRootConfig, injectUiConfig, injectUiContext, makeConfig, provideUiConfig, scoped };
269
231
  //# sourceMappingURL=ng-atomic-common-services-ui.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-atomic-common-services-ui.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/ui/ui.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/ui/ui.helpers.ts","../../../../../packages/@ng-atomic/common/src/lib/services/ui/ng-atomic-common-services-ui.ts"],"sourcesContent":["import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { Injectable, PLATFORM_ID, computed, effect, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationStart } from '@angular/router';\nimport { combineLatest, filter, map, startWith, tap } from 'rxjs';\nimport { isPlatformBrowser } from '@angular/common';\nimport { RouterService } from '@ng-atomic/common/services/router';\n\nexport interface UIContext {\n breakpoint: Breakpoint;\n paths: any[];\n}\n\nexport type Breakpoint = 'xSmall' | 'small' | 'medium' | 'large' | 'xLarge' | 'handset' | 'tablet' | 'web';\n\n@Injectable({ providedIn: 'root' })\nexport class BreakPointService {\n protected readonly breakpointObserver = inject(BreakpointObserver);\n readonly breakpointMap$ = combineLatest({\n xSmall: this.breakpointObserver.observe(Breakpoints.XSmall),\n small: this.breakpointObserver.observe(Breakpoints.Small),\n medium: this.breakpointObserver.observe(Breakpoints.Medium),\n large: this.breakpointObserver.observe(Breakpoints.Large),\n xLarge: this.breakpointObserver.observe(Breakpoints.XLarge),\n handset: this.breakpointObserver.observe(Breakpoints.Handset),\n tablet: this.breakpointObserver.observe(Breakpoints.Tablet),\n web: this.breakpointObserver.observe(Breakpoints.Web),\n });\n readonly breakpointMap = toSignal(this.breakpointMap$);\n readonly breakpoint = computed<Breakpoint>(() => {\n const map = this.breakpointMap();\n const test = {\n xSmall: map.xSmall.matches ?? this.breakpointObserver.isMatched(Breakpoints.XSmall),\n small: map.small.matches ?? this.breakpointObserver.isMatched(Breakpoints.Small),\n medium: map.medium.matches ?? this.breakpointObserver.isMatched(Breakpoints.Medium),\n large: map.large.matches ?? this.breakpointObserver.isMatched(Breakpoints.Large),\n xLarge: map.xLarge.matches ?? this.breakpointObserver.isMatched(Breakpoints.XLarge),\n handset: map.handset.matches ?? this.breakpointObserver.isMatched(Breakpoints.Handset),\n tablet: map.tablet.matches ?? this.breakpointObserver.isMatched(Breakpoints.Tablet),\n web: map.web.matches ?? this.breakpointObserver.isMatched(Breakpoints.Web),\n };\n\n if (test.xSmall) return 'xSmall';\n if (test.small) return 'small';\n if (test.medium) return 'medium';\n if (test.large) return 'large';\n if (test.xLarge) return 'xLarge';\n if (test.handset) return 'handset';\n if (test.tablet) return 'tablet';\n if (test.web) return 'web';\n });\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UiService {\n readonly breakpoint = inject(BreakPointService);\n readonly router = inject(RouterService);\n readonly platformId = inject(PLATFORM_ID);\n\n readonly paths$ = this.router.events.pipe(\n filter(event => event instanceof NavigationStart),\n map((event: NavigationStart) => event.url),\n startWith(isPlatformBrowser(this.platformId) ? window?.location?.pathname : ''),\n map(url => this.router.parseUrl(url)),\n map(urlTree => urlTree.root.children?.primary?.segments ?? []),\n );\n readonly paths = toSignal(this.paths$);\n\n readonly snapshot$ = this.router.events.pipe(\n filter(event => event instanceof NavigationStart),\n map(() => this.router.routerState.snapshot.root),\n );\n readonly snapshot = toSignal(this.snapshot$);\n\n readonly uiContext = computed(() => ({\n breakpoint: this.breakpoint.breakpoint(),\n paths: this.paths(),\n }));\n}\n","import { ElementRef, InjectionToken, Injector, Provider, ProviderToken, Signal, computed, effect, inject, isSignal, runInInjectionContext, signal } from \"@angular/core\";\nimport { UIContext, UiService } from \"./ui.service\";\nimport { get, set } from \"lodash-es\";\nimport { Action } from \"@ng-atomic/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { map, shareReplay, startWith } from \"rxjs\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { computedAsync } from \"ngxtension/computed-async\";\nimport { NavigationHistoryService } from \"@ng-atomic/common/services/navigation-history\";\n\nexport function scoped<T extends object, TKey extends keyof T>(source: Signal<T>, path: TKey | [TKey]): Signal<T[TKey]> {\n const scopedSignal = signal<T[TKey]>(get(source(), path));\n effect(() => {\n scopedSignal.set(get(source(), path, source()) as T[TKey]);\n }, {allowSignalWrites: true});\n return computed(() => scopedSignal(), {\n // equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),\n });\n}\n\nexport function injectBreakpoint() {\n return inject(UiService).breakpoint.breakpoint;\n}\n\nexport function injectIsMobile() {\n const breakpoint = injectBreakpoint();\n return computed(() => ['xSmall', 'small'].includes(breakpoint()));\n}\n\nexport enum NavActionId {\n TOGGLE_SIDE_NAV = '[@ng-atomic/common/services/ui] TOGGLE_SIDE_NAV',\n BACK = '[@ng-atomic/common/services/ui] BACK',\n}\n\nexport function injectIsRootPage$() {\n const router = inject(Router);\n const route = inject(ActivatedRoute);\n return router.events.pipe(\n startWith(null),\n map(() => {\n const components = [];\n let route_ = route; \n while(route_) {\n if (!route_.parent) break;\n route_ = route_.parent;\n if (route_.component) {\n components.push(route_.component);\n }\n }\n return !!(components?.length === 1);\n }),\n map((route) => !!route),\n shareReplay(1),\n takeUntilDestroyed(),\n );\n}\n\nexport function injectIsRootPage() {\n const isRootPage$ = injectIsRootPage$();\n const injector = inject(Injector);\n return computedAsync(() => isRootPage$, {injector});\n}\n\nexport function injectNavStartActions(\n isRootPage: Signal<boolean> = signal<boolean>(false),\n): Signal<Action[]> {\n const context = injectUiContext();\n const navigationHistory = inject(NavigationHistoryService);\n return computed(() => {\n switch(context().breakpoint) {\n case 'xLarge':\n case 'large':\n case 'medium':\n case 'small': {\n if (isRootPage()) {\n return [];\n } else {\n if (navigationHistory.isInitial()) {\n return [];\n } else {\n return [{ id: NavActionId.BACK, name: 'BACK', icon: 'arrow_back' }];\n }\n }\n }\n case 'xSmall': {\n if (isRootPage()) {\n return [{ id: NavActionId.TOGGLE_SIDE_NAV, name: 'メニュー', icon: 'menu' }];\n } else {\n if (navigationHistory.isInitial()) {\n return [{ id: NavActionId.TOGGLE_SIDE_NAV, name: 'メニュー', icon: 'menu' }]\n } else {\n return [{ id: NavActionId.BACK, name: 'BACK', icon: 'arrow_back' }];\n }\n }\n }\n default: {\n if (isRootPage()) return [];\n return [{ id: NavActionId.BACK, name: 'BACK', icon: 'arrow_back' }];\n }\n }\n });\n}\n\nexport function injectUiContext(): Signal<UIContext> {\n return inject(UiService).uiContext;\n}\n\nexport type UiConfigReducer<T extends object | string, C extends UIContext = any> = (config: T, context: C) => T;\nexport const UI_CONFIG_REDUCER = new InjectionToken<UiConfigReducer<any>>('UI_CONFIG_REDUCER');\nexport type ReducerFactory<T extends object | string, K extends T = any> \n = (injector: Injector, hostInjector: Injector) => (config: K, context: UIContext) => T;\n\nexport function call<T>(signalOrValue: Signal<T> | T): T {\n return isSignal(signalOrValue) ? signalOrValue() : signalOrValue;\n}\n\nexport function provideUiConfig<T extends object | string>(\n reducerFactory: ReducerFactory<T>,\n path: string[] = [],\n name = 'name',\n): Provider {\n return {\n provide: UI_CONFIG_REDUCER,\n useFactory: (injector: Injector) => {\n function _reducerFactory(hostInjector: Injector) {\n const reducer = reducerFactory(injector, hostInjector); \n return (config: T, context: any) => {\n if (path.length === 0) return reducer(config, context);\n return set(config as object, path, reducer(get<any, any>(config, path), context));\n }\n };\n Object.defineProperty(_reducerFactory, 'name', { value: name, configurable: true });\n return _reducerFactory;\n },\n deps: [Injector],\n multi: true,\n };\n}\n\nexport function injectRootConfig<T extends object>(): Signal<T> {\n const uiContext = injectUiContext();\n const reducerFactories = injectReducers();\n const hostInjector = inject(Injector);\n const reducers = reducerFactories.map(reducerFactory => {\n return runInInjectionContext(hostInjector, () => reducerFactory(hostInjector));\n });\n if (!reducers) return undefined;\n return computed(() => {\n const context = uiContext();\n return reducers.reduce((acc, reducer) => {\n return runInInjectionContext(hostInjector, () => reducer(acc, context));\n }, {} as T);\n });\n}\n\nexport function injectUiConfig<T extends object>(paths: string[] = []): Signal<T> {\n const rootConfig = injectRootConfig();\n return scoped(rootConfig, paths as any);\n}\n\nexport function makeConfig<T extends object>(defaultUseFactory: ReducerFactory<T>, path: string[]) {\n return {\n provide: function provideConfig(useFactory?: ReducerFactory<T>, label = useFactory ? 'custom' : 'default') {\n useFactory ??= defaultUseFactory;\n return provideUiConfig<T>(useFactory, path, `[${path.join('.')}] ${label}`);\n },\n inject: function injectConfig() {\n return injectUiConfig<T>(path);\n },\n }\n}\n\nexport function injectReducers(): ((hostInjector: Injector) => UiConfigReducer<any>)[] {\n return injectDeepMulti<(hostInjector: Injector) => UiConfigReducer<any>>(UI_CONFIG_REDUCER);\n}\n\nexport function injectDeepMulti<T>(token: ProviderToken<T>, injector: Injector = inject(Injector)): T[] {\n const valueOrArray = injector.get(token as ProviderToken<T[]>, [], {optional: true});\n const items = Array.isArray(valueOrArray) ? valueOrArray : [valueOrArray];\n const parentInjector = injector.get(Injector, null, {skipSelf: true});\n if (!parentInjector) return items;\n return [...new Set([...injectDeepMulti(token, parentInjector), ...items])];\n}\n\nexport function debugInjector(injector: Injector | null = inject(Injector)) {\n const getParent = (injector: Injector, n = 0): Injector | null => {\n while (injector && n-- > 0) {\n injector = injector.get(Injector, null, { skipSelf: true });\n }\n return injector;\n }\n\n const getInjectorName = (injector: Injector): string => {\n const name = injector.get(ElementRef, null)?.nativeElement?.tagName?.toLowerCase();\n if (name) return `<${name}>`;\n return `${injector['source']}`;\n }\n\n const isNodeInjector = (injector: Injector): boolean => {\n return injector.get(ElementRef, null) !== null;\n }\n\n const mapToNames = (reducers: any) => (reducers ?? []).map(reducer => reducer.name);\n\n for (let i = 0; i < 20; i++) {\n injector = getParent(injector, i);\n if (injector === Injector.NULL) break;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-atomic-common-services-ui.mjs","sources":["../../../../../packages/@ng-atomic/common/src/lib/services/ui/ui.service.ts","../../../../../packages/@ng-atomic/common/src/lib/services/ui/ui.helpers.ts","../../../../../packages/@ng-atomic/common/src/lib/services/ui/ng-atomic-common-services-ui.ts"],"sourcesContent":["\nimport { Injectable, PLATFORM_ID, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { NavigationStart } from '@angular/router';\nimport { filter, map, startWith } from 'rxjs';\nimport { isPlatformBrowser } from '@angular/common';\nimport { RouterService } from '@ng-atomic/common/services/router';\nimport { Breakpoint, BreakpointService } from '@ng-atomic/common/services/breakpoint';\n\nexport interface UIContext {\n breakpoint: Breakpoint;\n paths: any[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UiService {\n readonly breakpoint = inject(BreakpointService);\n readonly router = inject(RouterService);\n readonly platformId = inject(PLATFORM_ID);\n\n readonly paths$ = this.router.events.pipe(\n filter(event => event instanceof NavigationStart),\n map((event: NavigationStart) => event.url),\n startWith(isPlatformBrowser(this.platformId) ? window?.location?.pathname : ''),\n map(url => this.router.parseUrl(url)),\n map(urlTree => urlTree.root.children?.primary?.segments ?? []),\n );\n readonly paths = toSignal(this.paths$);\n\n readonly snapshot$ = this.router.events.pipe(\n filter(event => event instanceof NavigationStart),\n map(() => this.router.routerState.snapshot.root),\n );\n readonly snapshot = toSignal(this.snapshot$);\n\n readonly uiContext = computed(() => ({\n breakpoint: this.breakpoint.breakpoint(),\n paths: this.paths(),\n }));\n}\n","import { ElementRef, InjectionToken, Injector, Provider, ProviderToken, Signal, computed, effect, inject, isSignal, runInInjectionContext, signal } from \"@angular/core\";\nimport { UIContext, UiService } from \"./ui.service\";\nimport { get, set } from \"lodash-es\";\nimport { Action } from \"@ng-atomic/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { map, shareReplay, startWith } from \"rxjs\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { computedAsync } from \"ngxtension/computed-async\";\nimport { NavigationHistoryService } from \"@ng-atomic/common/services/navigation-history\";\n\nexport function scoped<T extends object, TKey extends keyof T>(source: Signal<T>, path: TKey | [TKey]): Signal<T[TKey]> {\n const scopedSignal = signal<T[TKey]>(get(source(), path));\n effect(() => {\n scopedSignal.set(get(source(), path, source()) as T[TKey]);\n }, {allowSignalWrites: true});\n return computed(() => scopedSignal());\n}\n\nexport function injectBreakpoint() {\n return inject(UiService).breakpoint.breakpoint;\n}\n\nexport function injectIsMobile() {\n const breakpoint = injectBreakpoint();\n return computed(() => ['xSmall', 'small'].includes(breakpoint()));\n}\n\nexport enum NavActionId {\n TOGGLE_SIDE_NAV = '[@ng-atomic/common/services/ui] TOGGLE_SIDE_NAV',\n BACK = '[@ng-atomic/common/services/ui] BACK',\n}\n\nexport function injectIsRootPage$() {\n const router = inject(Router);\n const route = inject(ActivatedRoute);\n return router.events.pipe(\n startWith(null),\n map(() => {\n const components = [];\n let route_ = route; \n while(route_) {\n if (!route_.parent) break;\n route_ = route_.parent;\n if (route_.component) {\n components.push(route_.component);\n }\n }\n return !!(components?.length === 1);\n }),\n map((route) => !!route),\n shareReplay(1),\n takeUntilDestroyed(),\n );\n}\n\nexport function injectIsRootPage() {\n const isRootPage$ = injectIsRootPage$();\n const injector = inject(Injector);\n return computedAsync(() => isRootPage$, {injector});\n}\n\nexport function injectNavStartActions(\n isRootPage: Signal<boolean> = signal<boolean>(false),\n): Signal<Action[]> {\n const context = injectUiContext();\n const navigationHistory = inject(NavigationHistoryService);\n return computed(() => {\n switch(context().breakpoint) {\n case 'xLarge':\n case 'large':\n case 'medium':\n case 'small': {\n if (isRootPage()) {\n return [];\n } else {\n if (navigationHistory.isInitial()) {\n return [];\n } else {\n return [{ id: NavActionId.BACK, name: 'BACK', icon: 'arrow_back' }];\n }\n }\n }\n case 'xSmall': {\n if (isRootPage()) {\n return [{ id: NavActionId.TOGGLE_SIDE_NAV, name: 'メニュー', icon: 'menu' }];\n } else {\n if (navigationHistory.isInitial()) {\n return [{ id: NavActionId.TOGGLE_SIDE_NAV, name: 'メニュー', icon: 'menu' }]\n } else {\n return [{ id: NavActionId.BACK, name: 'BACK', icon: 'arrow_back' }];\n }\n }\n }\n default: {\n if (isRootPage()) return [];\n return [{ id: NavActionId.BACK, name: 'BACK', icon: 'arrow_back' }];\n }\n }\n });\n}\n\nexport function injectUiContext(): Signal<UIContext> {\n return inject(UiService).uiContext;\n}\n\nexport type UiConfigReducer<T extends object | string, C extends UIContext = any> = (config: T, context: C) => T;\nexport const UI_CONFIG_REDUCER = new InjectionToken<UiConfigReducer<any>>('UI_CONFIG_REDUCER');\nexport type ReducerFactory<T extends object | string, K extends T = any> \n = (injector: Injector, hostInjector: Injector) => (config: K, context: UIContext) => T;\n\nexport function call<T>(signalOrValue: Signal<T> | T): T {\n return isSignal(signalOrValue) ? signalOrValue() : signalOrValue;\n}\n\nfunction setReducerPath(reducer: Function, path: string[]) {\n Object.defineProperty(reducer, 'path', { value: path, configurable: true });\n return reducer;\n}\n\nfunction getReducerPath(reducer: Function) {\n return reducer['path'];\n}\n\nexport function provideUiConfig<T extends object | string>(\n reducerFactory: ReducerFactory<T>,\n path: string[] = [],\n name = 'name',\n): Provider {\n return {\n provide: UI_CONFIG_REDUCER,\n useFactory: (injector: Injector) => {\n function _reducerFactory(hostInjector: Injector) {\n const reducer = reducerFactory(injector, hostInjector); \n return (config: T, context: any) => {\n if (path.length === 0) return reducer(config, context);\n return set(config as object, path, reducer(get<any, any>(config, path), context));\n }\n };\n Object.defineProperty(_reducerFactory, 'name', { value: name, configurable: true });\n setReducerPath(_reducerFactory, path);\n return _reducerFactory;\n },\n deps: [Injector],\n multi: true,\n };\n}\n\nexport function injectRootConfig<T extends object>(paths: string[] = []): Signal<T> {\n const uiContext = injectUiContext();\n const factories = injectReducerFactoiries(paths);\n const hostInjector = inject(Injector);\n const reducers = factories.map(factory => {\n return runInInjectionContext(hostInjector, () => factory(hostInjector));\n });\n if (!reducers) return undefined;\n const rootConfig = computed(() => {\n const context = uiContext();\n return reducers.reduce((acc, reducer) => {\n return runInInjectionContext(hostInjector, () => reducer(acc, context));\n }, {} as T);\n });\n return rootConfig;\n}\n\n// TODO(@nontangent): itemsなどの取得が全てのコンポーネントで行われるので計算を最適化する。\nexport function injectUiConfig<T extends object>(paths: string[] = []): Signal<T> {\n const rootConfig = injectRootConfig<T>(paths);\n return scoped(rootConfig, paths as any);\n}\n\nexport function makeConfig<T extends object>(defaultUseFactory: ReducerFactory<T>, path: string[]) {\n return {\n provide: function provideConfig(useFactory?: ReducerFactory<T>, label = useFactory ? 'custom' : 'default') {\n useFactory ??= defaultUseFactory;\n return provideUiConfig<T>(useFactory, path, `[${path.join('.')}] ${label}`);\n },\n inject: function injectConfig() {\n return injectUiConfig<T>(path);\n },\n }\n}\n\nfunction injectReducers(): ((hostInjector: Injector) => UiConfigReducer<any>)[] {\n return injectDeepMulti<(hostInjector: Injector) => UiConfigReducer<any>>(UI_CONFIG_REDUCER);\n}\n\nfunction injectReducerFactoiries(path: string[] = []): ((hostInjector: Injector) => UiConfigReducer<any>)[] {\n return injectReducers().filter(factory => {\n return getReducerPath(factory).every((p, i) => path[i] === p);\n });\n}\n\nexport function injectDeepMulti<T>(token: ProviderToken<T>, injector: Injector = inject(Injector)): T[] {\n const valueOrArray = injector.get(token as ProviderToken<T[]>, [], {optional: true});\n const items = Array.isArray(valueOrArray) ? valueOrArray : [valueOrArray];\n const parentInjector = injector.get(Injector, null, {skipSelf: true});\n if (!parentInjector) return items;\n return [...new Set([...injectDeepMulti(token, parentInjector), ...items])];\n}\n\nexport function debugInjector(injector: Injector | null = inject(Injector)) {\n const getParent = (injector: Injector, n = 0): Injector | null => {\n while (injector && n-- > 0) {\n injector = injector.get(Injector, null, { skipSelf: true });\n }\n return injector;\n }\n\n const getInjectorName = (injector: Injector): string => {\n const name = injector.get(ElementRef, null)?.nativeElement?.tagName?.toLowerCase();\n if (name) return `<${name}>`;\n return `${injector['source']}`;\n }\n\n const isNodeInjector = (injector: Injector): boolean => {\n return injector.get(ElementRef, null) !== null;\n }\n\n const mapToNames = (reducers: any) => (reducers ?? []).map(reducer => reducer.name);\n\n for (let i = 0; i < 20; i++) {\n injector = getParent(injector, i);\n if (injector === Injector.NULL) break;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;MAea,SAAS,CAAA;AADtB,IAAA,WAAA,GAAA;AAEW,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACvC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACvC,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,eAAe,CAAC,EACjD,GAAG,CAAC,CAAC,KAAsB,KAAK,KAAK,CAAC,GAAG,CAAC,EAC1C,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,EAAE,CAAC,EAC/E,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EACrC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAC/D,CAAC;AACO,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE9B,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAC1C,MAAM,CAAC,KAAK,IAAI,KAAK,YAAY,eAAe,CAAC,EACjD,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjD,CAAC;AACO,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEpC,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,OAAO;AACnC,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AACxC,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;AACpB,SAAA,CAAC,CAAC,CAAC;AACL,KAAA;8GAxBY,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAT,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAS,cADI,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,SAAS,EAAA,UAAA,EAAA,CAAA;kBADrB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACJlB,SAAA,MAAM,CAAyC,MAAiB,EAAE,IAAmB,EAAA;AACnG,IAAA,MAAM,YAAY,GAAG,MAAM,CAAU,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAK;AACV,QAAA,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAY,CAAC,CAAC;AAC7D,KAAC,EAAE,EAAC,iBAAiB,EAAE,IAAI,EAAC,CAAC,CAAC;IAC9B,OAAO,QAAQ,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;AACxC,CAAC;SAEe,gBAAgB,GAAA;IAC9B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;AACjD,CAAC;SAEe,cAAc,GAAA;AAC5B,IAAA,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;AACtC,IAAA,OAAO,QAAQ,CAAC,MAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;IAEW,YAGX;AAHD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,iBAAA,CAAA,GAAA,iDAAmE,CAAA;AACnE,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,sCAA6C,CAAA;AAC/C,CAAC,EAHW,WAAW,KAAX,WAAW,GAGtB,EAAA,CAAA,CAAA,CAAA;SAEe,iBAAiB,GAAA;AAC/B,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9B,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACrC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CACvB,SAAS,CAAC,IAAI,CAAC,EACf,GAAG,CAAC,MAAK;QACP,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,OAAM,MAAM,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,MAAM;AAC1B,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,gBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,aAAA;AACF,SAAA;QACD,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC;KACrC,CAAC,EACF,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,EACvB,WAAW,CAAC,CAAC,CAAC,EACd,kBAAkB,EAAE,CACrB,CAAC;AACJ,CAAC;SAEe,gBAAgB,GAAA;AAC9B,IAAA,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;AACxC,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,aAAa,CAAC,MAAM,WAAW,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC;AACtD,CAAC;SAEe,qBAAqB,CACnC,aAA8B,MAAM,CAAU,KAAK,CAAC,EAAA;AAEpD,IAAA,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;AAClC,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC3D,OAAO,QAAQ,CAAC,MAAK;AACnB,QAAA,QAAO,OAAO,EAAE,CAAC,UAAU;AACzB,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,OAAO,CAAC;AACb,YAAA,KAAK,QAAQ,CAAC;YACd,KAAK,OAAO,EAAE;gBACZ,IAAI,UAAU,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC;AACX,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,iBAAiB,CAAC,SAAS,EAAE,EAAE;AACjC,wBAAA,OAAO,EAAE,CAAC;AACX,qBAAA;AAAM,yBAAA;AACL,wBAAA,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AACrE,qBAAA;AACF,iBAAA;AACF,aAAA;YACD,KAAK,QAAQ,EAAE;gBACb,IAAI,UAAU,EAAE,EAAE;AAChB,oBAAA,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1E,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,iBAAiB,CAAC,SAAS,EAAE,EAAE;AACjC,wBAAA,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AACzE,qBAAA;AAAM,yBAAA;AACL,wBAAA,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AACrE,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,SAAS;AACP,gBAAA,IAAI,UAAU,EAAE;AAAE,oBAAA,OAAO,EAAE,CAAC;AAC5B,gBAAA,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AACrE,aAAA;AACF,SAAA;AACH,KAAC,CAAC,CAAC;AACL,CAAC;SAEe,eAAe,GAAA;AAC7B,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC;AACrC,CAAC;MAGY,iBAAiB,GAAG,IAAI,cAAc,CAAuB,mBAAmB,EAAE;AAIzF,SAAU,IAAI,CAAI,aAA4B,EAAA;AAClD,IAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,OAAiB,EAAE,IAAc,EAAA;AACvD,IAAA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,OAAiB,EAAA;AACvC,IAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAEK,SAAU,eAAe,CAC7B,cAAiC,EACjC,OAAiB,EAAE,EACnB,IAAI,GAAG,MAAM,EAAA;IAEb,OAAO;AACL,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,UAAU,EAAE,CAAC,QAAkB,KAAI;YACjC,SAAS,eAAe,CAAC,YAAsB,EAAA;gBAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACvD,gBAAA,OAAO,CAAC,MAAS,EAAE,OAAY,KAAI;AACjC,oBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,wBAAA,OAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACxD,oBAAA,OAAO,GAAG,CAAC,MAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAW,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACpF,iBAAC,CAAA;aACF;YAAA,CAAC;AACF,YAAA,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AACpF,YAAA,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACtC,YAAA,OAAO,eAAe,CAAC;SACxB;QACD,IAAI,EAAE,CAAC,QAAQ,CAAC;AAChB,QAAA,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC;AAEe,SAAA,gBAAgB,CAAmB,KAAA,GAAkB,EAAE,EAAA;AACrE,IAAA,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;AACpC,IAAA,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AACjD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,IAAG;AACvC,QAAA,OAAO,qBAAqB,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1E,KAAC,CAAC,CAAC;AACH,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS,CAAC;AAChC,IAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC/B,QAAA,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,KAAI;AACtC,YAAA,OAAO,qBAAqB,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;SACzE,EAAE,EAAO,CAAC,CAAC;AACd,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;AACgB,SAAA,cAAc,CAAmB,KAAA,GAAkB,EAAE,EAAA;AACnE,IAAA,MAAM,UAAU,GAAG,gBAAgB,CAAI,KAAK,CAAC,CAAC;AAC9C,IAAA,OAAO,MAAM,CAAC,UAAU,EAAE,KAAY,CAAC,CAAC;AAC1C,CAAC;AAEe,SAAA,UAAU,CAAmB,iBAAoC,EAAE,IAAc,EAAA;IAC/F,OAAO;AACL,QAAA,OAAO,EAAE,SAAS,aAAa,CAAC,UAA8B,EAAE,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,EAAA;YACvG,UAAU,KAAK,iBAAiB,CAAC;AACjC,YAAA,OAAO,eAAe,CAAI,UAAU,EAAE,IAAI,EAAE,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAA,CAAE,CAAC,CAAC;SAC7E;QACD,MAAM,EAAE,SAAS,YAAY,GAAA;AAC3B,YAAA,OAAO,cAAc,CAAI,IAAI,CAAC,CAAC;SAChC;KACF,CAAA;AACH,CAAC;AAED,SAAS,cAAc,GAAA;AACrB,IAAA,OAAO,eAAe,CAAmD,iBAAiB,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAA,GAAiB,EAAE,EAAA;AAClD,IAAA,OAAO,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,IAAG;QACvC,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,KAAC,CAAC,CAAC;AACL,CAAC;AAEK,SAAU,eAAe,CAAI,KAAuB,EAAE,QAAqB,GAAA,MAAM,CAAC,QAAQ,CAAC,EAAA;AAC/F,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,KAA2B,EAAE,EAAE,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AACrF,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1E,IAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AACtE,IAAA,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,KAAK,CAAC;AAClC,IAAA,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;SAEe,aAAa,CAAC,WAA4B,MAAM,CAAC,QAAQ,CAAC,EAAA;IACpE,MAAM,SAAS,GAAG,CAAC,QAAkB,EAAE,CAAC,GAAG,CAAC,KAAqB;AACjE,QAAA,OAAO,QAAQ,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;AAC1B,YAAA,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;AAClB,KAAC,CAAA;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,QAAkB,KAAY;AACrD,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACnF,QAAA,IAAI,IAAI;YAAE,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAC;AAC7B,QAAA,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,KAAC,CAAA;AAED,IAAA,MAAM,cAAc,GAAG,CAAC,QAAkB,KAAa;QACrD,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;AACjD,KAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,QAAa,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,QAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI;YAAE,MAAM;AACvC,KAAA;AACL;;AChOA;;AAEG;;;;"}
@@ -1,12 +1,13 @@
1
1
  import { toSignal, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
2
2
  import * as i0 from '@angular/core';
3
3
  import { Injectable, inject, InjectionToken, Injector, computed } from '@angular/core';
4
- import { injectResolver$, getResolver } from '@ng-atomic/common/utils';
4
+ import { injectResolver$ } from '@ng-atomic/common/utils';
5
5
  import { ReplaySubject, of, isObservable, Subject, combineLatest, filter as filter$1, map as map$1, shareReplay as shareReplay$1, switchMap as switchMap$1 } from 'rxjs';
6
- import { switchMap, tap, map, shareReplay, bufferTime, filter, distinctUntilChanged } from 'rxjs/operators';
7
6
  import { ComponentStore } from '@ngrx/component-store';
8
7
  import { createEntityAdapter } from '@ngrx/entity';
8
+ import { distinctUntilChanged, switchMap, tap, map, shareReplay, bufferTime, filter } from 'rxjs/operators';
9
9
  import { merge } from 'lodash-es';
10
+ import { computedAsync } from 'ngxtension/computed-async';
10
11
 
11
12
  class ProxyIdService {
12
13
  constructor() {
@@ -131,6 +132,10 @@ function injectEntityStoreAdapter(entity) {
131
132
  const adapters = inject(ENTITY_STORE_ADAPTER, { optional: true }) ?? [];
132
133
  return adapters.find(adapter => adapter.entity === entity)?.adapter;
133
134
  }
135
+
136
+ const distinctUntilChangedArray = () => {
137
+ return distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur));
138
+ };
134
139
  class BaseEntityStore extends ComponentStore {
135
140
  constructor(entity, entityAdapter = createEntityAdapter({ selectId: (entity) => entity.id, sortComparer: false })) {
136
141
  super(entityAdapter.getInitialState());
@@ -138,9 +143,16 @@ class BaseEntityStore extends ComponentStore {
138
143
  this.entityAdapter = entityAdapter;
139
144
  this.refresh$ = new ReplaySubject(1);
140
145
  this.selectors = this.entityAdapter.getSelectors();
141
- this.entities$ = this.select(this.selectors.selectAll);
142
- this.entities = toSignal(this.entities$);
143
- this.size$ = this.select(this.selectors.selectTotal);
146
+ this.all$ = this.select(this.selectors.selectAll);
147
+ this.all = toSignal(this.all$);
148
+ this.total$ = this.select(this.selectors.selectTotal);
149
+ this.total = toSignal(this.total$);
150
+ /** @deprecated use BaseEntityStore.all$ instead. */
151
+ this.entities$ = this.all$;
152
+ /** @deprecated use BaseEntityStore.all instead. */
153
+ this.entities = this.all;
154
+ /** @deprecated use BaseEntityStore.total$ instead. */
155
+ this.size$ = this.total$;
144
156
  this.addOne = this.updater((state, entity) => this.entityAdapter.addOne(entity, state));
145
157
  this.addMany = this.updater((state, entities) => this.entityAdapter.addMany(entities, state));
146
158
  this.updateOne = this.updater((state, update) => this.entityAdapter.updateOne(update, state));
@@ -220,42 +232,25 @@ class EntityStore extends BaseEntityStore {
220
232
  onSyncSucceeded() { }
221
233
  }
222
234
 
223
- const distinctUntilChangedArray = () => {
224
- return distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur));
225
- };
226
- class EntityStoreManager {
235
+ class EntityStoreService {
227
236
  constructor() {
228
237
  this.storeMap = new Map();
229
238
  }
230
- resolve(Entity) {
239
+ get(Entity) {
231
240
  if (!this.storeMap.has(Entity)) {
232
241
  this.storeMap.set(Entity, new EntityStore(Entity));
233
242
  }
234
243
  return this.storeMap.get(Entity);
235
244
  }
236
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: EntityStoreManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
237
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: EntityStoreManager, providedIn: 'root' }); }
245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: EntityStoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
246
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: EntityStoreService, providedIn: 'root' }); }
238
247
  }
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: EntityStoreManager, decorators: [{
248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: EntityStoreService, decorators: [{
240
249
  type: Injectable,
241
250
  args: [{ providedIn: 'root' }]
242
251
  }] });
243
- // export const ENTITY_STORE = new InjectionToken<{entity: Type<Entity>, factory: () => EntityStore<Entity>}[]>('ENTITY_STORE');
244
- // export function provideEntityStore<E extends Entity>(
245
- // entity: Type<E>,
246
- // factory: () => EntityStore<E> = () => new EntityStore<E>(entity),
247
- // ) {
248
- // return {
249
- // provide: ENTITY_STORE,
250
- // useFactory: () => ({ entity, factory }),
251
- // multi: true,
252
- // };
253
- // }
254
252
  function injectEntityStore(Entity) {
255
- // const stores = inject(ENTITY_STORE, {optional: true}) ?? [];
256
- // const factory = stores.find(({Entity: _entity}) => _entity === Entity)?.factory;
257
- // if (factory) return factory() as EntityStore<E>;
258
- return inject(EntityStoreManager).resolve(Entity);
253
+ return inject(EntityStoreService).get(Entity);
259
254
  }
260
255
 
261
256
  function injectOne$(Entity, params = {}, resolverType) {
@@ -280,7 +275,7 @@ function injectAll$(Entity, params = {}, resolverType) {
280
275
  if (resolverType) {
281
276
  return combineLatest({
282
277
  resolver: injectResolver$(resolverType, params),
283
- entities: injectEntityStore(Entity).entities$,
278
+ entities: injectEntityStore(Entity).all$,
284
279
  }).pipe(map$1(({ resolver, entities }) => resolver.resolveMany(entities)), shareReplay$1(1), takeUntilDestroyed());
285
280
  }
286
281
  return injectEntityStore(Entity).entities$.pipe(shareReplay$1(1), takeUntilDestroyed());
@@ -290,18 +285,25 @@ const callSignalMap = (map) => {
290
285
  return { ...acc, [key]: value() };
291
286
  }, {}));
292
287
  };
288
+ // export function injectAll<T extends Entity>(
289
+ // Entity: Type<T>,
290
+ // params: Record<string, Signal<any>> = {},
291
+ // resolverType?: new (params: Record<string, any>) => Resolver<T>
292
+ // ) {
293
+ // const store = injectEntityStore(Entity);
294
+ // if (resolverType) {
295
+ // return computed(() => {
296
+ // const resolver = getResolver(resolverType, callSignalMap(params)());
297
+ // const items = resolver.resolveMany(store.all());
298
+ // return items;
299
+ // });
300
+ // }
301
+ // return computed(() => store.all());
302
+ // }
293
303
  function injectAll(Entity, params = {}, resolverType) {
294
- const store = injectEntityStore(Entity);
295
- if (resolverType) {
296
- return computed(() => {
297
- const resolver = getResolver(resolverType, callSignalMap(params)());
298
- const items = resolver.resolveMany(store.entities());
299
- return items;
300
- });
301
- }
302
- return computed(() => store.entities(), {
303
- // equal: (a, b) => JSON.stringify(a) === JSON.stringify(b),
304
- });
304
+ const $params = signalMapToObs(params);
305
+ const all$ = injectAll$(Entity, $params, resolverType);
306
+ return computedAsync(() => all$, { initialValue: [] });
305
307
  }
306
308
  function mapToOne$(storeType, keyOrKey$) {
307
309
  const store = inject(storeType, {});
@@ -313,5 +315,5 @@ function mapToOne$(storeType, keyOrKey$) {
313
315
  * Generated bundle index. Do not edit.
314
316
  */
315
317
 
316
- export { BaseEntityStore, ENTITY_STORE_ADAPTER, EntityStore, EntityStoreAdapter, EntityStoreManager, ProxyIdService, TaskComposerService, callSignalMap, distinctUntilChangedArray, injectAll, injectAll$, injectEntityStore, injectEntityStoreAdapter, injectOne, injectOne$, mapToOne$, provideEntityStoreAdapter, pushMap };
318
+ export { BaseEntityStore, ENTITY_STORE_ADAPTER, EntityStore, EntityStoreAdapter, EntityStoreService, ProxyIdService, TaskComposerService, callSignalMap, distinctUntilChangedArray, injectAll, injectAll$, injectEntityStore, injectEntityStoreAdapter, injectOne, injectOne$, mapToOne$, provideEntityStoreAdapter, pushMap };
317
319
  //# sourceMappingURL=ng-atomic-common-stores-entities.mjs.map