angular-three 1.6.8 → 1.6.10

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.
@@ -1,8 +1,7 @@
1
- import { ChangeDetectorRef, inject, Injectable } from '@angular/core';
1
+ import { Injectable } from '@angular/core';
2
2
  import { RxState } from '@rx-angular/state';
3
- import { combineLatest, startWith, tap } from 'rxjs';
3
+ import { combineLatest, distinctUntilChanged, startWith, tap } from 'rxjs';
4
4
  import { is } from '../utils/is';
5
- import { safeDetectChanges } from '../utils/safe-detect-changes';
6
5
  import * as i0 from "@angular/core";
7
6
  export const startWithUndefined = () => startWith(undefined);
8
7
  /**
@@ -61,7 +60,7 @@ export function tapEffect(effectFn) {
61
60
  export class NgtRxStore extends RxState {
62
61
  constructor() {
63
62
  super();
64
- const cdr = inject(ChangeDetectorRef, { optional: true });
63
+ this.cache = {};
65
64
  // set a dummy property so that initial this.get() won't return undefined
66
65
  this.set({ __ngt_dummy__: '__ngt_dummy__' });
67
66
  // call initialize that might be setup by derived Stores
@@ -78,14 +77,10 @@ export class NgtRxStore extends RxState {
78
77
  modded[key] = value === undefined ? this.get(key) : value;
79
78
  return modded;
80
79
  }, {});
81
- const value = originalSet(modArgs);
82
- safeDetectChanges(cdr);
83
- return value;
80
+ return originalSet(modArgs);
84
81
  }
85
82
  // @ts-expect-error not sure why ...args here doesn't pass tuple check
86
- const value = originalSet(...args);
87
- safeDetectChanges(cdr);
88
- return value;
83
+ return originalSet(...args);
89
84
  };
90
85
  },
91
86
  });
@@ -105,10 +100,21 @@ export class NgtRxStore extends RxState {
105
100
  requestAnimationFrame(() => void cdr.detectChanges());
106
101
  });
107
102
  }
103
+ key$(...keys) {
104
+ const key = keys.join('.');
105
+ if (!this.cache[key]) {
106
+ this.cache[key] = this.select(...keys).pipe(startWith(this.get(...keys) ?? undefined), distinctUntilChanged());
107
+ }
108
+ return this.cache[key];
109
+ }
110
+ ngOnDestroy() {
111
+ this.cache = {};
112
+ super.ngOnDestroy();
113
+ }
108
114
  }
109
115
  NgtRxStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRxStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
110
116
  NgtRxStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRxStore });
111
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRxStore, decorators: [{
112
118
  type: Injectable
113
119
  }], ctorParameters: function () { return []; } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9zdG9yZXMvcngtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQXdDLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0YsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFFakUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBbUMsRUFBRSxDQUFDLFNBQVMsQ0FBSSxTQUFlLENBQUMsQ0FBQztBQU10Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQVMsUUFBMEI7SUFDeEQsSUFBSSxTQUFTLEdBQTZGLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNuSCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQXVCLFNBQVMsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ2hDLE9BQU8sR0FBRyxFQUFFO1lBQ1IsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM5QztRQUNMLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFTO1FBQ2YsSUFBSSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFD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O1FBRWhDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEc7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDZCxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7dUdBdERRLFVBQVU7MkdBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUR0QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBzYWZlRGV0ZWN0Q2hhbmdlcyB9IGZyb20gJy4uL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMnO1xuXG5leHBvcnQgY29uc3Qgc3RhcnRXaXRoVW5kZWZpbmVkID0gPFQ+KCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUPiA9PiBzdGFydFdpdGg8VD4odW5kZWZpbmVkISBhcyBUKTtcblxudHlwZSBFZmZlY3RGbjxUVmFsdWU+ID0gKFxuICAgIHZhbHVlOiBUVmFsdWVcbikgPT4gdm9pZCB8IHVuZGVmaW5lZCB8ICgoY2xlYW5VcFBhcmFtczogeyBwcmV2OiBUVmFsdWUgfCB1bmRlZmluZWQ7IGNvbXBsZXRlOiBib29sZWFuOyBlcnJvcjogYm9vbGVhbiB9KSA9PiB2b2lkKTtcblxuLyoqXG4gKiBBbiBleHRlbmRlZCBgdGFwYCBvcGVyYXRvciB0aGF0IGFjY2VwdHMgYW4gYGVmZmVjdEZuYCB3aGljaDpcbiAqIC0gcnVucyBvbiBldmVyeSBgbmV4dGAgbm90aWZpY2F0aW9uIGZyb20gYHNvdXJjZSRgXG4gKiAtIGNhbiBvcHRpb25hbGx5IHJldHVybiBhIGBjbGVhblVwYCBmdW5jdGlvbiB0aGF0XG4gKiBpbnZva2VzIGZyb20gdGhlIDJuZCBgbmV4dGAgbm90aWZpY2F0aW9uIG9ud2FyZCBhbmQgb24gYHVuc3Vic2NyaWJlYCAoZGVzdHJveWVkKVxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogc291cmNlJC5waXBlKFxuICogIHRhcEVmZmVjdCgoc291cmNlVmFsdWUpID0ge1xuICogICAgY29uc3QgY2IgPSAoKSA9PiB7XG4gKiAgICAgIGRvU3R1ZmYoc291cmNlVmFsdWUpO1xuICogICAgfTtcbiAqICAgIGFkZExpc3RlbmVyKCdldmVudCcsIGNiKTtcbiAqXG4gKiAgICByZXR1cm4gKCkgPT4ge1xuICogICAgICByZW1vdmVMaXN0ZW5lcignZXZlbnQnLCBjYik7XG4gKiAgICB9XG4gKiAgfSlcbiAqIClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFwRWZmZWN0PFRWYWx1ZT4oZWZmZWN0Rm46IEVmZmVjdEZuPFRWYWx1ZT4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248VFZhbHVlPiB7XG4gICAgbGV0IGNsZWFudXBGbjogKGNsZWFuVXBQYXJhbXM6IHsgcHJldjogVFZhbHVlIHwgdW5kZWZpbmVkOyBjb21wbGV0ZTogYm9vbGVhbjsgZXJyb3I6IGJvb2xlYW4gfSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGxldCBmaXJzdFJ1biA9IGZhbHNlO1xuICAgIGxldCBwcmV2OiBUVmFsdWUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB0ZWFyZG93biA9IChlcnJvcjogYm9vbGVhbikgPT4ge1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNsZWFudXBGbikge1xuICAgICAgICAgICAgICAgIGNsZWFudXBGbih7IHByZXYsIGNvbXBsZXRlOiB0cnVlLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRhcDxUVmFsdWU+KHtcbiAgICAgICAgbmV4dDogKHZhbHVlOiBUVmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChjbGVhbnVwRm4gJiYgZmlyc3RSdW4pIHtcbiAgICAgICAgICAgICAgICBjbGVhbnVwRm4oeyBwcmV2LCBjb21wbGV0ZTogZmFsc2UsIGVycm9yOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2xlYW5VcE9yVm9pZCA9IGVmZmVjdEZuKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjbGVhblVwT3JWb2lkKSB7XG4gICAgICAgICAgICAgICAgY2xlYW51cEZuID0gY2xlYW5VcE9yVm9pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldiA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoIWZpcnN0UnVuKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RSdW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb21wbGV0ZTogdGVhcmRvd24oZmFsc2UpLFxuICAgICAgICB1bnN1YnNjcmliZTogdGVhcmRvd24oZmFsc2UpLFxuICAgICAgICBlcnJvcjogdGVhcmRvd24odHJ1ZSksXG4gICAgfSk7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3RSeFN0b3JlPFxuICAgIFRTdGF0ZSBleHRlbmRzIG9iamVjdCA9IGFueSxcbiAgICBUUnhTdGF0ZSBleHRlbmRzIG9iamVjdCA9IFRTdGF0ZSAmIFJlY29yZDxzdHJpbmcsIGFueT5cbj4gZXh0ZW5kcyBSeFN0YXRlPFRSeFN0YXRlPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGNvbnN0IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICAgICAgLy8gc2V0IGEgZHVtbXkgcHJvcGVydHkgc28gdGhhdCBpbml0aWFsIHRoaXMuZ2V0KCkgd29uJ3QgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLnNldCh7IF9fbmd0X2R1bW15X186ICdfX25ndF9kdW1teV9fJyB9IGFzIFRSeFN0YXRlKTtcbiAgICAgICAgLy8gY2FsbCBpbml0aWFsaXplIHRoYXQgbWlnaHQgYmUgc2V0dXAgYnkgZGVyaXZlZCBTdG9yZXNcbiAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgIC8vIG92ZXJyaWRlIHNldCBzbyBvdXIgY29uc3VtZXJzIGRvbid0IGhhdmUgdG8gaGFuZGxlIHVuZGVmaW5lZCBmb3Igc3RhdGUgdGhhdCBhbHJlYWR5IGhhdmUgZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxTZXQgPSB0aGlzLnNldC5iaW5kKHRoaXMpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3NldCcsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFBhcmFtZXRlcnMgdHlwZSBkb2VzIG5vdCBkbyB3ZWxsIHdpdGggb3ZlcmxvYWRzIChSeFN0YXRlI3NldCkuIFNvIHdlIHVzZSBhbnlbXSBoZXJlXG4gICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdEFyZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpcy5vYmooZmlyc3RBcmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2RBcmdzID0gT2JqZWN0LmVudHJpZXMoZmlyc3RBcmcpLnJlZHVjZSgobW9kZGVkLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RkZWRba2V5XSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyB0aGlzLmdldChrZXkgYXMga2V5b2YgVFJ4U3RhdGUpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZGRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9IGFzIE5ndEFueVJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9yaWdpbmFsU2V0KG1vZEFyZ3MgYXMgUGFydGlhbDxUUnhTdGF0ZT4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZURldGVjdENoYW5nZXMoY2RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vdCBzdXJlIHdoeSAuLi5hcmdzIGhlcmUgZG9lc24ndCBwYXNzIHR1cGxlIGNoZWNrXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gb3JpZ2luYWxTZXQoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIHNhZmVEZXRlY3RDaGFuZ2VzKGNkcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlZmZlY3Q8Uz4ob2JzOiBPYnNlcnZhYmxlPFM+LCBzaWRlRWZmZWN0Rm46IEVmZmVjdEZuPFM+KTogdm9pZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvbGQob2JzLnBpcGUodGFwRWZmZWN0KHNpZGVFZmZlY3RGbikpKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyQ2hhbmdlRGV0ZWN0aW9uKGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIGtleXM6IEFycmF5PGtleW9mIFRSeFN0YXRlPiA9IFtdKSB7XG4gICAgICAgIGxldCAkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLiQ7XG5cbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAkID0gY29tYmluZUxhdGVzdChrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLnNlbGVjdChrZXkpLnBpcGUoc3RhcnRXaXRoKHRoaXMuZ2V0KGtleSkgPz8gdW5kZWZpbmVkKSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaG9sZCgkLCAoKSA9PiB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdm9pZCBjZHIuZGV0ZWN0Q2hhbmdlcygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9zdG9yZXMvcngtc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQXdDLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakgsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFakMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsR0FBbUMsRUFBRSxDQUFDLFNBQVMsQ0FBSSxTQUFlLENBQUMsQ0FBQztBQU10Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQVMsUUFBMEI7SUFDeEQsSUFBSSxTQUFTLEdBQTZGLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUNuSCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQXVCLFNBQVMsQ0FBQztJQUV6QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ2hDLE9BQU8sR0FBRyxFQUFFO1lBQ1IsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUM5QztRQUNMLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFTO1FBQ2YsSUFBSSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxTQUFTLElBQUksUUFBUSxFQUFFO2dCQUN2QixTQUFTLENBQUMsRUFBRSxJQUFJ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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRTtZQUNkLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBVUQsSUFBSSxDQUFDLEdBQUcsSUFBYztRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFJLElBQWMsQ0FBQyxDQUFDLElBQUksQ0FDbEQsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFjLENBQUMsSUFBSSxTQUFTLENBQUMsRUFDcEQsb0JBQW9CLEVBQUUsQ0FDekIsQ0FBQztTQUNMO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFUSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOzt1R0F6RVEsVUFBVTsyR0FBVixVQUFVOzJGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSeFN0YXRlIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvc3RhdGUnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5cbmV4cG9ydCBjb25zdCBzdGFydFdpdGhVbmRlZmluZWQgPSA8VD4oKTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPFQ+ID0+IHN0YXJ0V2l0aDxUPih1bmRlZmluZWQhIGFzIFQpO1xuXG50eXBlIEVmZmVjdEZuPFRWYWx1ZT4gPSAoXG4gICAgdmFsdWU6IFRWYWx1ZVxuKSA9PiB2b2lkIHwgdW5kZWZpbmVkIHwgKChjbGVhblVwUGFyYW1zOiB7IHByZXY6IFRWYWx1ZSB8IHVuZGVmaW5lZDsgY29tcGxldGU6IGJvb2xlYW47IGVycm9yOiBib29sZWFuIH0pID0+IHZvaWQpO1xuXG4vKipcbiAqIEFuIGV4dGVuZGVkIGB0YXBgIG9wZXJhdG9yIHRoYXQgYWNjZXB0cyBhbiBgZWZmZWN0Rm5gIHdoaWNoOlxuICogLSBydW5zIG9uIGV2ZXJ5IGBuZXh0YCBub3RpZmljYXRpb24gZnJvbSBgc291cmNlJGBcbiAqIC0gY2FuIG9wdGlvbmFsbHkgcmV0dXJuIGEgYGNsZWFuVXBgIGZ1bmN0aW9uIHRoYXRcbiAqIGludm9rZXMgZnJvbSB0aGUgMm5kIGBuZXh0YCBub3RpZmljYXRpb24gb253YXJkIGFuZCBvbiBgdW5zdWJzY3JpYmVgIChkZXN0cm95ZWQpXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBzb3VyY2UkLnBpcGUoXG4gKiAgdGFwRWZmZWN0KChzb3VyY2VWYWx1ZSkgPSB7XG4gKiAgICBjb25zdCBjYiA9ICgpID0+IHtcbiAqICAgICAgZG9TdHVmZihzb3VyY2VWYWx1ZSk7XG4gKiAgICB9O1xuICogICAgYWRkTGlzdGVuZXIoJ2V2ZW50JywgY2IpO1xuICpcbiAqICAgIHJldHVybiAoKSA9PiB7XG4gKiAgICAgIHJlbW92ZUxpc3RlbmVyKCdldmVudCcsIGNiKTtcbiAqICAgIH1cbiAqICB9KVxuICogKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YXBFZmZlY3Q8VFZhbHVlPihlZmZlY3RGbjogRWZmZWN0Rm48VFZhbHVlPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxUVmFsdWU+IHtcbiAgICBsZXQgY2xlYW51cEZuOiAoY2xlYW5VcFBhcmFtczogeyBwcmV2OiBUVmFsdWUgfCB1bmRlZmluZWQ7IGNvbXBsZXRlOiBib29sZWFuOyBlcnJvcjogYm9vbGVhbiB9KSA9PiB2b2lkID0gKCkgPT4ge307XG4gICAgbGV0IGZpcnN0UnVuID0gZmFsc2U7XG4gICAgbGV0IHByZXY6IFRWYWx1ZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHRlYXJkb3duID0gKGVycm9yOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2xlYW51cEZuKSB7XG4gICAgICAgICAgICAgICAgY2xlYW51cEZuKHsgcHJldiwgY29tcGxldGU6IHRydWUsIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gdGFwPFRWYWx1ZT4oe1xuICAgICAgICBuZXh0OiAodmFsdWU6IFRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNsZWFudXBGbiAmJiBmaXJzdFJ1bikge1xuICAgICAgICAgICAgICAgIGNsZWFudXBGbih7IHByZXYsIGNvbXBsZXRlOiBmYWxzZSwgZXJyb3I6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjbGVhblVwT3JWb2lkID0gZWZmZWN0Rm4odmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNsZWFuVXBPclZvaWQpIHtcbiAgICAgICAgICAgICAgICBjbGVhbnVwRm4gPSBjbGVhblVwT3JWb2lkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmV2ID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICghZmlyc3RSdW4pIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJ1biA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbXBsZXRlOiB0ZWFyZG93bihmYWxzZSksXG4gICAgICAgIHVuc3Vic2NyaWJlOiB0ZWFyZG93bihmYWxzZSksXG4gICAgICAgIGVycm9yOiB0ZWFyZG93bih0cnVlKSxcbiAgICB9KTtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndFJ4U3RvcmU8VFN0YXRlIGV4dGVuZHMgb2JqZWN0ID0gYW55LCBUUnhTdGF0ZSBleHRlbmRzIG9iamVjdCA9IFRTdGF0ZSAmIFJlY29yZDxzdHJpbmcsIGFueT4+XG4gICAgZXh0ZW5kcyBSeFN0YXRlPFRSeFN0YXRlPlxuICAgIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8vIHNldCBhIGR1bW15IHByb3BlcnR5IHNvIHRoYXQgaW5pdGlhbCB0aGlzLmdldCgpIHdvbid0IHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5zZXQoeyBfX25ndF9kdW1teV9fOiAnX19uZ3RfZHVtbXlfXycgfSBhcyBUUnhTdGF0ZSk7XG4gICAgICAgIC8vIGNhbGwgaW5pdGlhbGl6ZSB0aGF0IG1pZ2h0IGJlIHNldHVwIGJ5IGRlcml2ZWQgU3RvcmVzXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICAvLyBvdmVycmlkZSBzZXQgc28gb3VyIGNvbnN1bWVycyBkb24ndCBoYXZlIHRvIGhhbmRsZSB1bmRlZmluZWQgZm9yIHN0YXRlIHRoYXQgYWxyZWFkeSBoYXZlIGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsU2V0ID0gdGhpcy5zZXQuYmluZCh0aGlzKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzZXQnLCB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBQYXJhbWV0ZXJzIHR5cGUgZG9lcyBub3QgZG8gd2VsbCB3aXRoIG92ZXJsb2FkcyAoUnhTdGF0ZSNzZXQpLiBTbyB3ZSB1c2UgYW55W10gaGVyZVxuICAgICAgICAgICAgICAgIHJldHVybiAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RBcmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXMub2JqKGZpcnN0QXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kQXJncyA9IE9iamVjdC5lbnRyaWVzKGZpcnN0QXJnKS5yZWR1Y2UoKG1vZGRlZCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZGVkW2tleV0gPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5nZXQoa2V5IGFzIGtleW9mIFRSeFN0YXRlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2RkZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7fSBhcyBOZ3RBbnlSZWNvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsU2V0KG1vZEFyZ3MgYXMgUGFydGlhbDxUUnhTdGF0ZT4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm90IHN1cmUgd2h5IC4uLmFyZ3MgaGVyZSBkb2Vzbid0IHBhc3MgdHVwbGUgY2hlY2tcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsU2V0KC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVmZmVjdDxTPihvYnM6IE9ic2VydmFibGU8Uz4sIHNpZGVFZmZlY3RGbjogRWZmZWN0Rm48Uz4pOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG9sZChvYnMucGlwZSh0YXBFZmZlY3Qoc2lkZUVmZmVjdEZuKSkpO1xuICAgIH1cblxuICAgIHRyaWdnZXJDaGFuZ2VEZXRlY3Rpb24oY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwga2V5czogQXJyYXk8a2V5b2YgVFJ4U3RhdGU+ID0gW10pIHtcbiAgICAgICAgbGV0ICQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuJDtcblxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICQgPSBjb21iaW5lTGF0ZXN0KGtleXMubWFwKChrZXkpID0+IHRoaXMuc2VsZWN0KGtleSkucGlwZShzdGFydFdpdGgodGhpcy5nZXQoa2V5KSA/PyB1bmRlZmluZWQpKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ob2xkKCQsICgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB2b2lkIGNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPGFueT4+ID0ge307XG4gICAga2V5JDxLIGV4dGVuZHMga2V5b2YgVFJ4U3RhdGU+KGtleTogSyk6IE9ic2VydmFibGU8VFJ4U3RhdGVbS10+O1xuICAgIGtleSQ8SzEgZXh0ZW5kcyBrZXlvZiBUUnhTdGF0ZSwgSzIgZXh0ZW5kcyBrZXlvZiBUUnhTdGF0ZVtLMV0+KGtleTE6IEsxLCBrZXkyOiBLMik6IE9ic2VydmFibGU8VFJ4U3RhdGVbSzFdW0syXT47XG4gICAga2V5JDxLMSBleHRlbmRzIGtleW9mIFRSeFN0YXRlLCBLMiBleHRlbmRzIGtleW9mIFRSeFN0YXRlW0sxXSwgSzMgZXh0ZW5kcyBrZXlvZiBUUnhTdGF0ZVtLMV1bSzJdPihcbiAgICAgICAga2V5MTogSzEsXG4gICAgICAgIGtleTI6IEsyLFxuICAgICAgICBrZXkzOiBLM1xuICAgICk6IE9ic2VydmFibGU8VFJ4U3RhdGVbSzFdW0syXVtLM10+O1xuICAgIGtleSQoLi4ua2V5czogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cy5qb2luKCcuJyk7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW2tleV0gPSB0aGlzLnNlbGVjdCguLi4oa2V5cyBhcyBbYW55XSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZ2V0KC4uLihrZXlzIGFzIFthbnldKSkgPz8gdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlW2tleV07XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ElementRef, inject, ChangeDetectorRef, Injectable, InjectionToken, ViewContainerRef, TemplateRef, Directive, Input, EventEmitter, getDebugNode, RendererFactory2, makeEnvironmentProviders, EnvironmentInjector, createEnvironmentInjector, Component, HostBinding, Output, ViewChild, Injector, Pipe, SkipSelf, ContentChild } from '@angular/core';
2
+ import { ElementRef, Injectable, inject, InjectionToken, ViewContainerRef, TemplateRef, Directive, Input, EventEmitter, getDebugNode, RendererFactory2, ChangeDetectorRef, makeEnvironmentProviders, EnvironmentInjector, createEnvironmentInjector, Component, HostBinding, Output, ViewChild, Injector, Pipe, SkipSelf, ContentChild } from '@angular/core';
3
3
  import { provideNgxResizeOptions, NgxResize } from 'ngx-resize';
4
- import { isObservable, of, map, from, tap, retry, catchError, share, ReplaySubject, switchMap, forkJoin, take, BehaviorSubject, startWith, combineLatest, filter, distinctUntilChanged, takeUntil, merge } from 'rxjs';
4
+ import { isObservable, of, map, from, tap, retry, catchError, share, ReplaySubject, switchMap, forkJoin, take, BehaviorSubject, startWith, combineLatest, distinctUntilChanged, filter, takeUntil, merge } from 'rxjs';
5
5
  import * as THREE from 'three';
6
6
  import { __rest, __classPrivateFieldGet } from 'tslib';
7
7
  import { DOCUMENT, NgForOf, NgIf } from '@angular/common';
@@ -446,19 +446,6 @@ function applyProps(instance, props) {
446
446
  return instance;
447
447
  }
448
448
 
449
- function safeDetectChanges(cdr) {
450
- if (!cdr)
451
- return;
452
- try {
453
- if (cdr['context']) {
454
- cdr.detectChanges();
455
- }
456
- }
457
- catch (e) {
458
- cdr.markForCheck();
459
- }
460
- }
461
-
462
449
  const startWithUndefined = () => startWith(undefined);
463
450
  /**
464
451
  * An extended `tap` operator that accepts an `effectFn` which:
@@ -516,7 +503,7 @@ function tapEffect(effectFn) {
516
503
  class NgtRxStore extends RxState {
517
504
  constructor() {
518
505
  super();
519
- const cdr = inject(ChangeDetectorRef, { optional: true });
506
+ this.cache = {};
520
507
  // set a dummy property so that initial this.get() won't return undefined
521
508
  this.set({ __ngt_dummy__: '__ngt_dummy__' });
522
509
  // call initialize that might be setup by derived Stores
@@ -533,14 +520,10 @@ class NgtRxStore extends RxState {
533
520
  modded[key] = value === undefined ? this.get(key) : value;
534
521
  return modded;
535
522
  }, {});
536
- const value = originalSet(modArgs);
537
- safeDetectChanges(cdr);
538
- return value;
523
+ return originalSet(modArgs);
539
524
  }
540
525
  // @ts-expect-error not sure why ...args here doesn't pass tuple check
541
- const value = originalSet(...args);
542
- safeDetectChanges(cdr);
543
- return value;
526
+ return originalSet(...args);
544
527
  };
545
528
  },
546
529
  });
@@ -560,6 +543,18 @@ class NgtRxStore extends RxState {
560
543
  requestAnimationFrame(() => void cdr.detectChanges());
561
544
  });
562
545
  }
546
+ key$(...keys) {
547
+ var _a;
548
+ const key = keys.join('.');
549
+ if (!this.cache[key]) {
550
+ this.cache[key] = this.select(...keys).pipe(startWith((_a = this.get(...keys)) !== null && _a !== void 0 ? _a : undefined), distinctUntilChanged());
551
+ }
552
+ return this.cache[key];
553
+ }
554
+ ngOnDestroy() {
555
+ this.cache = {};
556
+ super.ngOnDestroy();
557
+ }
563
558
  }
564
559
  NgtRxStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRxStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
565
560
  NgtRxStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRxStore });
@@ -2581,6 +2576,19 @@ function injectBeforeRender(cb, priority = 0) {
2581
2576
  }
2582
2577
  }
2583
2578
 
2579
+ function safeDetectChanges(cdr) {
2580
+ if (!cdr)
2581
+ return;
2582
+ try {
2583
+ if (cdr['context']) {
2584
+ cdr.detectChanges();
2585
+ }
2586
+ }
2587
+ catch (e) {
2588
+ cdr.markForCheck();
2589
+ }
2590
+ }
2591
+
2584
2592
  function injectNgtRef(initialValue = null) {
2585
2593
  const ref = is.ref(initialValue) ? initialValue : new ElementRef(initialValue);
2586
2594
  let lastValue = ref.nativeElement;