angular-three 2.0.0-beta.0 → 2.0.0-beta.2

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,4 +1,6 @@
1
- import { signal, untracked } from '@angular/core';
1
+ import { untracked } from '@angular/core';
2
+ import { NgtSignalStore } from '../stores/signal.store';
3
+ import { createSignal } from './signal';
2
4
  import { checkUpdate } from './update';
3
5
  export function getLocalState(obj) {
4
6
  if (!obj)
@@ -14,16 +16,17 @@ export function invalidateInstance(instance) {
14
16
  export function prepare(object, localState) {
15
17
  const instance = object;
16
18
  if (localState?.primitive || !instance.__ngt__) {
17
- const { objects = signal([]), nonObjects = signal([]), ...rest } = localState || {};
19
+ const { objects = createSignal([]), nonObjects = createSignal([]), ...rest } = localState || {};
18
20
  instance.__ngt__ = {
19
21
  previousAttach: null,
20
22
  store: null,
21
- parent: signal(null),
23
+ parent: createSignal(null),
22
24
  memoized: {},
23
25
  eventCount: 0,
24
26
  handlers: {},
25
27
  objects,
26
28
  nonObjects,
29
+ nativeProps: new NgtSignalStore({}),
27
30
  add: (object, type) => {
28
31
  const current = untracked(instance.__ngt__[type]);
29
32
  const foundIndex = current.indexOf((obj) => obj === object);
@@ -57,4 +60,4 @@ function notifyAncestors(instance) {
57
60
  localState.nonObjects.update((prev) => prev);
58
61
  notifyAncestors(untracked(localState.parent));
59
62
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi91dGlscy9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZDLE1BQU0sVUFBVSxhQUFhLENBQ3pCLEdBQTBCO0lBRTFCLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxFQUFzQyxDQUFDO0lBQ3hELE9BQVEsR0FBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSyxFQUE0QixDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQTJCLFFBQW1CO0lBQzVFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDbkQsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3RCxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQ25CLE1BQWlCLEVBQ2pCLFVBQTJDO0lBRTNDLE1BQU0sUUFBUSxHQUFHLE1BQStDLENBQUM7SUFFakUsSUFBSSxVQUFVLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtRQUM1QyxNQUFNLEVBQ0YsT0FBTyxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLEVBQ3ZDLFVBQVUsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxFQUMxQyxHQUFHLElBQUksRUFDVixHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFFckIsUUFBUSxDQUFDLE9BQU8sR0FBRztZQUNmLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDcEIsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osT0FBTztZQUNQLFVBQVU7WUFDVixHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ2xCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7Z0JBQzdFLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNqQixxRUFBcUU7b0JBQ3JFLGlDQUFpQztvQkFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDdkM7cUJBQU07b0JBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDOUQ7Z0JBQ0QsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDckIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsR0FBRyxJQUFJO1NBQ2UsQ0FBQztLQUM5QjtJQUVELE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxRQUFnQztJQUNyRCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU87SUFDdEIsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLElBQUksVUFBVSxDQUFDLE9BQU87UUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEUsSUFBSSxVQUFVLENBQUMsVUFBVTtRQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSwgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbFN0YXRlPFRJbnN0YW5jZSBleHRlbmRzIG9iamVjdCA9IE5ndEFueVJlY29yZD4oXG4gICAgb2JqOiBUSW5zdGFuY2UgfCB1bmRlZmluZWRcbik6IE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgaWYgKCFvYmopIHJldHVybiB7fSBhcyB1bmtub3duIGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICByZXR1cm4gKG9iaiBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ10gfHwgKHt9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW5zdGFuY2U8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVEluc3RhbmNlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKS5zdG9yZT8uZ2V0KCk7XG4gICAgaWYgKHN0YXRlICYmIHN0YXRlLmludGVybmFsLmZyYW1lcyA9PT0gMCkgc3RhdGUuaW52YWxpZGF0ZSgpO1xuICAgIGNoZWNrVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcbiAgICBvYmplY3Q6IFRJbnN0YW5jZSxcbiAgICBsb2NhbFN0YXRlPzogUGFydGlhbDxOZ3RJbnN0YW5jZUxvY2FsU3RhdGU+XG4pOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBvYmplY3QgYXMgdW5rbm93biBhcyBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPjtcblxuICAgIGlmIChsb2NhbFN0YXRlPy5wcmltaXRpdmUgfHwgIWluc3RhbmNlLl9fbmd0X18pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgb2JqZWN0cyA9IHNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT4oW10pLFxuICAgICAgICAgICAgbm9uT2JqZWN0cyA9IHNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT4oW10pLFxuICAgICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9ID0gbG9jYWxTdGF0ZSB8fCB7fTtcblxuICAgICAgICBpbnN0YW5jZS5fX25ndF9fID0ge1xuICAgICAgICAgICAgcHJldmlvdXNBdHRhY2g6IG51bGwsXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcbiAgICAgICAgICAgIHBhcmVudDogc2lnbmFsKG51bGwpLFxuICAgICAgICAgICAgbWVtb2l6ZWQ6IHt9LFxuICAgICAgICAgICAgZXZlbnRDb3VudDogMCxcbiAgICAgICAgICAgIGhhbmRsZXJzOiB7fSxcbiAgICAgICAgICAgIG9iamVjdHMsXG4gICAgICAgICAgICBub25PYmplY3RzLFxuICAgICAgICAgICAgYWRkOiAob2JqZWN0LCB0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHVudHJhY2tlZChpbnN0YW5jZS5fX25ndF9fW3R5cGVdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZEluZGV4ID0gY3VycmVudC5pbmRleE9mKChvYmo6IE5ndEluc3RhbmNlTm9kZSkgPT4gb2JqID09PSBvYmplY3QpO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgYWRkIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHJlZmVyZW5jZSwgdGhlbiB3ZSBzd2l0Y2ggaXQgb3V0XG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB1cGRhdGUgdGhlIEJlaGF2aW9yU3ViamVjdFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnNwbGljZShmb3VuZEluZGV4LCAxLCBvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX25ndF9fW3R5cGVdLnNldChjdXJyZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX25ndF9fW3R5cGVdLnVwZGF0ZSgocHJldikgPT4gWy4uLnByZXYsIG9iamVjdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub3RpZnlBbmNlc3RvcnModW50cmFja2VkKGluc3RhbmNlLl9fbmd0X18ucGFyZW50KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiAob2JqZWN0LCB0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UuX19uZ3RfX1t0eXBlXS51cGRhdGUoKHByZXYpID0+IHByZXYuZmlsdGVyKChvKSA9PiBvICE9PSBvYmplY3QpKTtcbiAgICAgICAgICAgICAgICBub3RpZnlBbmNlc3RvcnModW50cmFja2VkKGluc3RhbmNlLl9fbmd0X18ucGFyZW50KSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgfSBhcyBOZ3RJbnN0YW5jZUxvY2FsU3RhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSB8IG51bGwpIHtcbiAgICBpZiAoIWluc3RhbmNlKSByZXR1cm47XG4gICAgY29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuICAgIGlmIChsb2NhbFN0YXRlLm9iamVjdHMpIGxvY2FsU3RhdGUub2JqZWN0cy51cGRhdGUoKHByZXYpID0+IHByZXYpO1xuICAgIGlmIChsb2NhbFN0YXRlLm5vbk9iamVjdHMpIGxvY2FsU3RhdGUubm9uT2JqZWN0cy51cGRhdGUoKHByZXYpID0+IHByZXYpO1xuICAgIG5vdGlmeUFuY2VzdG9ycyh1bnRyYWNrZWQobG9jYWxTdGF0ZS5wYXJlbnQpKTtcbn1cbiJdfQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi91dGlscy9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdkMsTUFBTSxVQUFVLGFBQWEsQ0FDekIsR0FBMEI7SUFFMUIsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQXNDLENBQUM7SUFDeEQsT0FBUSxHQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFLLEVBQTRCLENBQUM7QUFDN0UsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBMkIsUUFBbUI7SUFDNUUsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNuRCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdELFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FDbkIsTUFBaUIsRUFDakIsVUFBMkM7SUFFM0MsTUFBTSxRQUFRLEdBQUcsTUFBK0MsQ0FBQztJQUVqRSxJQUFJLFVBQVUsRUFBRSxTQUFTLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQzVDLE1BQU0sRUFDRixPQUFPLEdBQUcsWUFBWSxDQUFvQixFQUFFLENBQUMsRUFDN0MsVUFBVSxHQUFHLFlBQVksQ0FBb0IsRUFBRSxDQUFDLEVBQ2hELEdBQUcsSUFBSSxFQUNWLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUVyQixRQUFRLENBQUMsT0FBTyxHQUFHO1lBQ2YsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQztZQUMxQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPO1lBQ1AsVUFBVTtZQUNWLFdBQVcsRUFBRSxJQUFJLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNsQixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBb0IsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO2dCQUM3RSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDakIscUVBQXFFO29CQUNyRSxpQ0FBaUM7b0JBQ2pDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDdEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNO29CQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQzlEO2dCQUNELGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELEdBQUcsSUFBSTtTQUNlLENBQUM7S0FDOUI7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsUUFBZ0M7SUFDckQsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPO0lBQ3RCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxJQUFJLFVBQVUsQ0FBQyxPQUFPO1FBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xFLElBQUksVUFBVSxDQUFDLFVBQVU7UUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zaWduYWwuc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSwgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlU2lnbmFsIH0gZnJvbSAnLi9zaWduYWwnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbFN0YXRlPFRJbnN0YW5jZSBleHRlbmRzIG9iamVjdCA9IE5ndEFueVJlY29yZD4oXG4gICAgb2JqOiBUSW5zdGFuY2UgfCB1bmRlZmluZWRcbik6IE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgaWYgKCFvYmopIHJldHVybiB7fSBhcyB1bmtub3duIGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICByZXR1cm4gKG9iaiBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ10gfHwgKHt9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW5zdGFuY2U8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVEluc3RhbmNlKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKS5zdG9yZT8uZ2V0KCk7XG4gICAgaWYgKHN0YXRlICYmIHN0YXRlLmludGVybmFsLmZyYW1lcyA9PT0gMCkgc3RhdGUuaW52YWxpZGF0ZSgpO1xuICAgIGNoZWNrVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcbiAgICBvYmplY3Q6IFRJbnN0YW5jZSxcbiAgICBsb2NhbFN0YXRlPzogUGFydGlhbDxOZ3RJbnN0YW5jZUxvY2FsU3RhdGU+XG4pOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBvYmplY3QgYXMgdW5rbm93biBhcyBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPjtcblxuICAgIGlmIChsb2NhbFN0YXRlPy5wcmltaXRpdmUgfHwgIWluc3RhbmNlLl9fbmd0X18pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgb2JqZWN0cyA9IGNyZWF0ZVNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT4oW10pLFxuICAgICAgICAgICAgbm9uT2JqZWN0cyA9IGNyZWF0ZVNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT4oW10pLFxuICAgICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9ID0gbG9jYWxTdGF0ZSB8fCB7fTtcblxuICAgICAgICBpbnN0YW5jZS5fX25ndF9fID0ge1xuICAgICAgICAgICAgcHJldmlvdXNBdHRhY2g6IG51bGwsXG4gICAgICAgICAgICBzdG9yZTogbnVsbCxcbiAgICAgICAgICAgIHBhcmVudDogY3JlYXRlU2lnbmFsKG51bGwpLFxuICAgICAgICAgICAgbWVtb2l6ZWQ6IHt9LFxuICAgICAgICAgICAgZXZlbnRDb3VudDogMCxcbiAgICAgICAgICAgIGhhbmRsZXJzOiB7fSxcbiAgICAgICAgICAgIG9iamVjdHMsXG4gICAgICAgICAgICBub25PYmplY3RzLFxuICAgICAgICAgICAgbmF0aXZlUHJvcHM6IG5ldyBOZ3RTaWduYWxTdG9yZSh7fSksXG4gICAgICAgICAgICBhZGQ6IChvYmplY3QsIHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdW50cmFja2VkKGluc3RhbmNlLl9fbmd0X19bdHlwZV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kSW5kZXggPSBjdXJyZW50LmluZGV4T2YoKG9iajogTmd0SW5zdGFuY2VOb2RlKSA9PiBvYmogPT09IG9iamVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBhZGQgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgcmVmZXJlbmNlLCB0aGVuIHdlIHN3aXRjaCBpdCBvdXRcbiAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHVwZGF0ZSB0aGUgQmVoYXZpb3JTdWJqZWN0XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc3BsaWNlKGZvdW5kSW5kZXgsIDEsIG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fbmd0X19bdHlwZV0uc2V0KGN1cnJlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLl9fbmd0X19bdHlwZV0udXBkYXRlKChwcmV2KSA9PiBbLi4ucHJldiwgb2JqZWN0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5vdGlmeUFuY2VzdG9ycyh1bnRyYWNrZWQoaW5zdGFuY2UuX19uZ3RfXy5wYXJlbnQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmU6IChvYmplY3QsIHR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5fX25ndF9fW3R5cGVdLnVwZGF0ZSgocHJldikgPT4gcHJldi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCkpO1xuICAgICAgICAgICAgICAgIG5vdGlmeUFuY2VzdG9ycyh1bnRyYWNrZWQoaW5zdGFuY2UuX19uZ3RfXy5wYXJlbnQpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5yZXN0LFxuICAgICAgICB9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUFuY2VzdG9ycyhpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlIHwgbnVsbCkge1xuICAgIGlmICghaW5zdGFuY2UpIHJldHVybjtcbiAgICBjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgaWYgKGxvY2FsU3RhdGUub2JqZWN0cykgbG9jYWxTdGF0ZS5vYmplY3RzLnVwZGF0ZSgocHJldikgPT4gcHJldik7XG4gICAgaWYgKGxvY2FsU3RhdGUubm9uT2JqZWN0cykgbG9jYWxTdGF0ZS5ub25PYmplY3RzLnVwZGF0ZSgocHJldikgPT4gcHJldik7XG4gICAgbm90aWZ5QW5jZXN0b3JzKHVudHJhY2tlZChsb2NhbFN0YXRlLnBhcmVudCkpO1xufVxuIl19
@@ -4,7 +4,7 @@ export function safeDetectChanges(cdr) {
4
4
  try {
5
5
  // dynamic created component with ViewContainerRef#createComponent does not have Context
6
6
  // but it has _attachedToViewContainer
7
- if (cdr['context'] || cdr['_attachedToViewContainer']) {
7
+ if (cdr['_attachedToViewContainer'] || !!cdr['context']) {
8
8
  cdr.detectChanges();
9
9
  }
10
10
  }
@@ -12,4 +12,4 @@ export function safeDetectChanges(cdr) {
12
12
  cdr.markForCheck();
13
13
  }
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1kZXRlY3QtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQXlDO0lBQ3ZFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTztJQUNqQixJQUFJO1FBQ0Esd0ZBQXdGO1FBQ3hGLHNDQUFzQztRQUN0QyxJQUFLLEdBQW9CLENBQUMsU0FBUyxDQUFDLElBQUssR0FBb0IsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFO1lBQ3ZGLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QjtLQUNKO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDUixHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDdEI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURldGVjdENoYW5nZXMoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAoIWNkcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGR5bmFtaWMgY3JlYXRlZCBjb21wb25lbnQgd2l0aCBWaWV3Q29udGFpbmVyUmVmI2NyZWF0ZUNvbXBvbmVudCBkb2VzIG5vdCBoYXZlIENvbnRleHRcbiAgICAgICAgLy8gYnV0IGl0IGhhcyBfYXR0YWNoZWRUb1ZpZXdDb250YWluZXJcbiAgICAgICAgaWYgKChjZHIgYXMgTmd0QW55UmVjb3JkKVsnY29udGV4dCddIHx8IChjZHIgYXMgTmd0QW55UmVjb3JkKVsnX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyJ10pIHtcbiAgICAgICAgICAgIGNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1kZXRlY3QtY2hhbmdlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEdBQXlDO0lBQ3ZFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTztJQUNqQixJQUFJO1FBQ0Esd0ZBQXdGO1FBQ3hGLHNDQUFzQztRQUN0QyxJQUFLLEdBQW9CLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUUsR0FBb0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6RixHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdkI7S0FDSjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1IsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0tBQ3RCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEZXRlY3RDaGFuZ2VzKGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKCFjZHIpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgICAvLyBkeW5hbWljIGNyZWF0ZWQgY29tcG9uZW50IHdpdGggVmlld0NvbnRhaW5lclJlZiNjcmVhdGVDb21wb25lbnQgZG9lcyBub3QgaGF2ZSBDb250ZXh0XG4gICAgICAgIC8vIGJ1dCBpdCBoYXMgX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyXG4gICAgICAgIGlmICgoY2RyIGFzIE5ndEFueVJlY29yZClbJ19hdHRhY2hlZFRvVmlld0NvbnRhaW5lciddIHx8ICEhKGNkciBhcyBOZ3RBbnlSZWNvcmQpWydjb250ZXh0J10pIHtcbiAgICAgICAgICAgIGNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,24 @@
1
+ import { signal } from '@angular/core';
2
+ export function createSignal(initialValue, options = {}) {
3
+ const original = signal(initialValue, options);
4
+ const originalSet = original.set.bind(original);
5
+ const originalUpdate = original.update.bind(original);
6
+ original.set = (...args) => {
7
+ try {
8
+ originalSet(...args);
9
+ }
10
+ catch {
11
+ requestAnimationFrame(() => originalSet(...args));
12
+ }
13
+ };
14
+ original.update = (...args) => {
15
+ try {
16
+ originalUpdate(...args);
17
+ }
18
+ catch {
19
+ requestAnimationFrame(() => originalUpdate(...args));
20
+ }
21
+ };
22
+ return original;
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvdXRpbHMvc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQWlELE1BQU0sZUFBZSxDQUFDO0FBRXRGLE1BQU0sVUFBVSxZQUFZLENBQVMsWUFBb0IsRUFBRSxVQUF1QyxFQUFFO0lBQ2hHLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFL0MsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdEQsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBK0MsRUFBRSxFQUFFO1FBQ2xFLElBQUk7WUFDQSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUN4QjtRQUFDLE1BQU07WUFDSixxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBa0QsRUFBRSxFQUFFO1FBQ3hFLElBQUk7WUFDQSxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUMzQjtRQUFDLE1BQU07WUFDSixxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNpZ25hbCwgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLCB0eXBlIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaWduYWw8VFZhbHVlPihpbml0aWFsVmFsdWU6IFRWYWx1ZSwgb3B0aW9uczogQ3JlYXRlU2lnbmFsT3B0aW9uczxUVmFsdWU+ID0ge30pIHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IHNpZ25hbChpbml0aWFsVmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxTZXQgPSBvcmlnaW5hbC5zZXQuYmluZChvcmlnaW5hbCk7XG4gICAgY29uc3Qgb3JpZ2luYWxVcGRhdGUgPSBvcmlnaW5hbC51cGRhdGUuYmluZChvcmlnaW5hbCk7XG5cbiAgICBvcmlnaW5hbC5zZXQgPSAoLi4uYXJnczogUGFyYW1ldGVyczxXcml0YWJsZVNpZ25hbDxUVmFsdWU+WydzZXQnXT4pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9yaWdpbmFsU2V0KC4uLmFyZ3MpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBvcmlnaW5hbFNldCguLi5hcmdzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgb3JpZ2luYWwudXBkYXRlID0gKC4uLmFyZ3M6IFBhcmFtZXRlcnM8V3JpdGFibGVTaWduYWw8VFZhbHVlPlsndXBkYXRlJ10+KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvcmlnaW5hbFVwZGF0ZSguLi5hcmdzKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gb3JpZ2luYWxVcGRhdGUoLi4uYXJncykpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBvcmlnaW5hbDtcbn1cbiJdfQ==
@@ -0,0 +1,21 @@
1
+ import { runInInjectionContext } from '@angular/core';
2
+ import { assertInjectionContext } from './assert-in-injection-context';
3
+ export function requestAnimationInInjectionContext(cb, injector) {
4
+ injector = assertInjectionContext(requestAnimationInInjectionContext, injector);
5
+ return requestAnimationFrame(() => {
6
+ return runInInjectionContext(injector, cb);
7
+ });
8
+ }
9
+ export function queueMicrotaskInInjectionContext(cb, injector) {
10
+ injector = assertInjectionContext(requestAnimationInInjectionContext, injector);
11
+ return queueMicrotask(() => {
12
+ return runInInjectionContext(injector, cb);
13
+ });
14
+ }
15
+ export function queueMacrotaskInInjectionContext(cb, injector) {
16
+ injector = assertInjectionContext(requestAnimationInInjectionContext, injector);
17
+ return setTimeout(() => {
18
+ return runInInjectionContext(injector, cb);
19
+ });
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvdXRpbHMvdGltaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBWSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV2RSxNQUFNLFVBQVUsa0NBQWtDLENBQUMsRUFBYyxFQUFFLFFBQW1CO0lBQ2xGLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRixPQUFPLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtRQUM5QixPQUFPLHFCQUFxQixDQUFDLFFBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0NBQWdDLENBQUMsRUFBYyxFQUFFLFFBQW1CO0lBQ2hGLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRixPQUFPLGNBQWMsQ0FBQyxHQUFHLEVBQUU7UUFDdkIsT0FBTyxxQkFBcUIsQ0FBQyxRQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLEVBQWMsRUFBRSxRQUFtQjtJQUNoRixRQUFRLEdBQUcsc0JBQXNCLENBQUMsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEYsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ25CLE9BQU8scUJBQXFCLENBQUMsUUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBydW5JbkluamVjdGlvbkNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdGlvbkNvbnRleHQgfSBmcm9tICcuL2Fzc2VydC1pbi1pbmplY3Rpb24tY29udGV4dCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uSW5JbmplY3Rpb25Db250ZXh0KGNiOiAoKSA9PiB2b2lkLCBpbmplY3Rvcj86IEluamVjdG9yKSB7XG4gICAgaW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KHJlcXVlc3RBbmltYXRpb25JbkluamVjdGlvbkNvbnRleHQsIGluamVjdG9yKTtcbiAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciEsIGNiKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXVlTWljcm90YXNrSW5JbmplY3Rpb25Db250ZXh0KGNiOiAoKSA9PiB2b2lkLCBpbmplY3Rvcj86IEluamVjdG9yKSB7XG4gICAgaW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KHJlcXVlc3RBbmltYXRpb25JbkluamVjdGlvbkNvbnRleHQsIGluamVjdG9yKTtcbiAgICByZXR1cm4gcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yISwgY2IpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVldWVNYWNyb3Rhc2tJbkluamVjdGlvbkNvbnRleHQoY2I6ICgpID0+IHZvaWQsIGluamVjdG9yPzogSW5qZWN0b3IpIHtcbiAgICBpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQocmVxdWVzdEFuaW1hdGlvbkluSW5qZWN0aW9uQ29udGV4dCwgaW5qZWN0b3IpO1xuICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciEsIGNiKTtcbiAgICB9KTtcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ElementRef, signal, untracked, computed, assertInInjectionContext, runInInjectionContext, inject, ChangeDetectorRef, effect, Injector, Injectable, Optional, Inject, InjectionToken, EventEmitter, ViewContainerRef, NgZone, TemplateRef, Directive, Input, getDebugNode, RendererFactory2, makeEnvironmentProviders, provideZoneChangeDetection, EnvironmentInjector, DestroyRef, createEnvironmentInjector, Component, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, ContentChild } from '@angular/core';
2
+ import { signal, computed, untracked, Injectable, Optional, Inject, ElementRef, inject, Injector, assertInInjectionContext, runInInjectionContext, ChangeDetectorRef, effect, InjectionToken, EventEmitter, ViewContainerRef, NgZone, TemplateRef, Directive, Input, getDebugNode, RendererFactory2, makeEnvironmentProviders, provideZoneChangeDetection, EnvironmentInjector, DestroyRef, createEnvironmentInjector, Component, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, ContentChild } from '@angular/core';
3
3
  import { provideNgxResizeOptions, NgxResize } from 'ngx-resize';
4
4
  import * as THREE from 'three';
5
5
  import { DOCUMENT, NgForOf, NgIf } from '@angular/common';
@@ -8,6 +8,106 @@ import * as i1 from '@angular/router';
8
8
  import { ActivationEnd, RouterOutlet } from '@angular/router';
9
9
  import { filter } from 'rxjs';
10
10
 
11
+ function createSignal(initialValue, options = {}) {
12
+ const original = signal(initialValue, options);
13
+ const originalSet = original.set.bind(original);
14
+ const originalUpdate = original.update.bind(original);
15
+ original.set = (...args) => {
16
+ try {
17
+ originalSet(...args);
18
+ }
19
+ catch {
20
+ requestAnimationFrame(() => originalSet(...args));
21
+ }
22
+ };
23
+ original.update = (...args) => {
24
+ try {
25
+ originalUpdate(...args);
26
+ }
27
+ catch {
28
+ requestAnimationFrame(() => originalUpdate(...args));
29
+ }
30
+ };
31
+ return original;
32
+ }
33
+
34
+ const STORE_COMPUTED_KEY = '__ngt_store_computed__';
35
+ class NgtSignalStore {
36
+ #state;
37
+ #computedCache = new Map();
38
+ constructor(initialState = {}) {
39
+ initialState ??= {};
40
+ this.#state = createSignal(Object.assign(initialState, { __ngt_dummy_state__: Date.now() }));
41
+ }
42
+ select(...keysAndOptions) {
43
+ if (keysAndOptions.length === 0)
44
+ return this.#state.asReadonly();
45
+ if (keysAndOptions.length === 1 && typeof keysAndOptions[0] === 'object') {
46
+ if (!this.#computedCache.has(STORE_COMPUTED_KEY)) {
47
+ this.#computedCache.set(STORE_COMPUTED_KEY, computed(() => this.#state(), keysAndOptions));
48
+ return this.#computedCache.get(STORE_COMPUTED_KEY);
49
+ }
50
+ }
51
+ const [keys, options] = parseOptions(keysAndOptions);
52
+ const joinedKeys = keys.join('-');
53
+ if (!this.#computedCache.has(joinedKeys)) {
54
+ this.#computedCache.set(joinedKeys, computed(() => {
55
+ const state = this.#state();
56
+ return keys.reduce((value, key) => value[key], state);
57
+ }, options));
58
+ }
59
+ return this.#computedCache.get(joinedKeys);
60
+ }
61
+ get(...keys) {
62
+ const state = untracked(this.#state);
63
+ if (keys.length === 0)
64
+ return state;
65
+ return keys.reduce((value, key) => value[key], state);
66
+ }
67
+ set(state) {
68
+ const updater = (previous) => {
69
+ const partial = typeof state === 'function' ? state(previous) : state;
70
+ Object.keys(partial).forEach((key) => {
71
+ const partialKey = key;
72
+ if (partial[partialKey] === undefined && previous[partialKey] != null) {
73
+ partial[partialKey] = previous[partialKey];
74
+ }
75
+ });
76
+ return partial;
77
+ };
78
+ this.#state.update((previous) => ({ ...previous, ...updater(previous) }));
79
+ // this.#state.update(previous => ({...previous, ...(typeof state === 'function' ? state(previous) : state)}))
80
+ }
81
+ patch(state) {
82
+ const updater = (previous) => {
83
+ Object.keys(state).forEach((key) => {
84
+ const partialKey = key;
85
+ if (state[partialKey] === undefined && previous[partialKey] != null) {
86
+ state[partialKey] = previous[partialKey];
87
+ }
88
+ });
89
+ return state;
90
+ };
91
+ this.#state.update((previous) => ({ ...updater(previous), ...previous }));
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore, deps: [{ token: 'INITIAL_STATE', optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
94
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore, decorators: [{
97
+ type: Injectable
98
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
99
+ type: Optional
100
+ }, {
101
+ type: Inject,
102
+ args: ['INITIAL_STATE']
103
+ }] }]; } });
104
+ function parseOptions(keysAndOptions) {
105
+ if (typeof keysAndOptions.at(-1) === 'object') {
106
+ return [keysAndOptions.slice(0, -1), keysAndOptions.at(-1)];
107
+ }
108
+ return [keysAndOptions];
109
+ }
110
+
11
111
  const is = {
12
112
  obj: (a) => a === Object(a) && !Array.isArray(a) && typeof a !== 'function',
13
113
  material: (a) => !!a && a.isMaterial,
@@ -103,16 +203,17 @@ function invalidateInstance(instance) {
103
203
  function prepare(object, localState) {
104
204
  const instance = object;
105
205
  if (localState?.primitive || !instance.__ngt__) {
106
- const { objects = signal([]), nonObjects = signal([]), ...rest } = localState || {};
206
+ const { objects = createSignal([]), nonObjects = createSignal([]), ...rest } = localState || {};
107
207
  instance.__ngt__ = {
108
208
  previousAttach: null,
109
209
  store: null,
110
- parent: signal(null),
210
+ parent: createSignal(null),
111
211
  memoized: {},
112
212
  eventCount: 0,
113
213
  handlers: {},
114
214
  objects,
115
215
  nonObjects,
216
+ nativeProps: new NgtSignalStore({}),
116
217
  add: (object, type) => {
117
218
  const current = untracked(instance.__ngt__[type]);
118
219
  const foundIndex = current.indexOf((obj) => obj === object);
@@ -602,13 +703,26 @@ function createPointerEvents(store) {
602
703
  };
603
704
  }
604
705
 
706
+ function assertInjectionContext(fn, injector) {
707
+ try {
708
+ if (!injector) {
709
+ return inject(Injector);
710
+ }
711
+ return injector;
712
+ }
713
+ catch {
714
+ !injector && assertInInjectionContext(fn);
715
+ return null;
716
+ }
717
+ }
718
+
605
719
  function safeDetectChanges(cdr) {
606
720
  if (!cdr)
607
721
  return;
608
722
  try {
609
723
  // dynamic created component with ViewContainerRef#createComponent does not have Context
610
724
  // but it has _attachedToViewContainer
611
- if (cdr['context'] || cdr['_attachedToViewContainer']) {
725
+ if (cdr['_attachedToViewContainer'] || !!cdr['context']) {
612
726
  cdr.detectChanges();
613
727
  }
614
728
  }
@@ -617,6 +731,25 @@ function safeDetectChanges(cdr) {
617
731
  }
618
732
  }
619
733
 
734
+ function requestAnimationInInjectionContext(cb, injector) {
735
+ injector = assertInjectionContext(requestAnimationInInjectionContext, injector);
736
+ return requestAnimationFrame(() => {
737
+ return runInInjectionContext(injector, cb);
738
+ });
739
+ }
740
+ function queueMicrotaskInInjectionContext(cb, injector) {
741
+ injector = assertInjectionContext(requestAnimationInInjectionContext, injector);
742
+ return queueMicrotask(() => {
743
+ return runInInjectionContext(injector, cb);
744
+ });
745
+ }
746
+ function queueMacrotaskInInjectionContext(cb, injector) {
747
+ injector = assertInjectionContext(requestAnimationInInjectionContext, injector);
748
+ return setTimeout(() => {
749
+ return runInInjectionContext(injector, cb);
750
+ });
751
+ }
752
+
620
753
  const cached = new Map();
621
754
  function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}) {
622
755
  const computedUrls = computed(() => {
@@ -648,31 +781,33 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
648
781
  }));
649
782
  };
650
783
  }
651
- function injectNgtLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector = inject(Injector, { optional: true }), } = {}) {
652
- !injector && assertInInjectionContext(injectNgtLoader);
784
+ function injectNgtLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector, } = {}) {
785
+ injector = assertInjectionContext(injectNgtLoader, injector);
653
786
  return runInInjectionContext(injector, () => {
654
787
  const cdr = inject(ChangeDetectorRef);
655
788
  const response = signal(null);
656
789
  const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress });
657
- effect(() => {
658
- const originalUrls = untracked(inputs);
659
- Promise.all(effector())
660
- .then((results) => {
661
- if (Array.isArray(originalUrls))
662
- return results;
663
- if (typeof originalUrls === 'string')
664
- return results[0];
665
- const keys = Object.keys(originalUrls);
666
- return keys.reduce((result, key) => {
667
- result[key] = results[keys.indexOf(key)];
668
- return result;
669
- }, {});
670
- })
671
- .then((value) => {
672
- response.set(value);
673
- safeDetectChanges(cdr);
790
+ requestAnimationInInjectionContext(() => {
791
+ effect(() => {
792
+ const originalUrls = untracked(inputs);
793
+ Promise.all(effector())
794
+ .then((results) => {
795
+ if (Array.isArray(originalUrls))
796
+ return results;
797
+ if (typeof originalUrls === 'string')
798
+ return results[0];
799
+ const keys = Object.keys(originalUrls);
800
+ return keys.reduce((result, key) => {
801
+ result[key] = results[keys.indexOf(key)];
802
+ return result;
803
+ }, {});
804
+ })
805
+ .then((value) => {
806
+ response.set(value);
807
+ safeDetectChanges(cdr);
808
+ });
674
809
  });
675
- }, { injector: injector, allowSignalWrites: true });
810
+ });
676
811
  return response.asReadonly();
677
812
  });
678
813
  }
@@ -889,6 +1024,7 @@ function applyProps(instance, props) {
889
1024
  if (!THREE.ColorManagement && !rootState?.linear && isColor)
890
1025
  targetProp.convertSRGBToLinear();
891
1026
  }
1027
+ localState?.nativeProps?.set({ [key]: targetProp });
892
1028
  }
893
1029
  // else just overwrite the value
894
1030
  else {
@@ -898,11 +1034,14 @@ function applyProps(instance, props) {
898
1034
  currentInstance[key].format === THREE.RGBAFormat &&
899
1035
  currentInstance[key].type === THREE.UnsignedByteType) {
900
1036
  const texture = currentInstance[key];
901
- if (is.colorSpaceExist(texture) && is.colorSpaceExist(rootState.gl))
902
- texture.colorSpace = rootState.gl.outputColorSpace;
903
- else
904
- texture.encoding = rootState.gl.outputEncoding;
1037
+ if (rootState?.gl) {
1038
+ if (is.colorSpaceExist(texture) && is.colorSpaceExist(rootState.gl))
1039
+ texture.colorSpace = rootState.gl.outputColorSpace;
1040
+ else
1041
+ texture.encoding = rootState.gl.outputEncoding;
1042
+ }
905
1043
  }
1044
+ localState?.nativeProps?.set({ [key]: value });
906
1045
  }
907
1046
  checkUpdate(targetProp);
908
1047
  invalidateInstance(instance);
@@ -924,63 +1063,6 @@ function applyProps(instance, props) {
924
1063
  return instance;
925
1064
  }
926
1065
 
927
- const STORE_COMPUTED_KEY = '__ngt_store_computed__';
928
- class NgtSignalStore {
929
- #state;
930
- #computedCache = new Map();
931
- constructor(initialState = {}) {
932
- initialState ??= {};
933
- this.#state = signal(Object.assign(initialState, { __ngt_dummy_state__: Date.now() }));
934
- }
935
- select(...keysAndOptions) {
936
- if (keysAndOptions.length === 0)
937
- return this.#state.asReadonly();
938
- if (keysAndOptions.length === 1 && typeof keysAndOptions[0] === 'object') {
939
- if (!this.#computedCache.has(STORE_COMPUTED_KEY)) {
940
- this.#computedCache.set(STORE_COMPUTED_KEY, computed(() => this.#state(), keysAndOptions));
941
- return this.#computedCache.get(STORE_COMPUTED_KEY);
942
- }
943
- }
944
- const [keys, options] = parseOptions(keysAndOptions);
945
- const joinedKeys = keys.join('-');
946
- if (!this.#computedCache.has(joinedKeys)) {
947
- this.#computedCache.set(joinedKeys, computed(() => {
948
- const state = this.#state();
949
- return keys.reduce((value, key) => value[key], state);
950
- }, options));
951
- }
952
- return this.#computedCache.get(joinedKeys);
953
- }
954
- get(...keys) {
955
- const state = untracked(this.#state);
956
- if (keys.length === 0)
957
- return state;
958
- return keys.reduce((value, key) => value[key], state);
959
- }
960
- set(state) {
961
- this.#state.update((previous) => ({
962
- ...previous,
963
- ...(typeof state === 'function' ? state(previous) : state),
964
- }));
965
- }
966
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore, deps: [{ token: 'INITIAL_STATE', optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
967
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore }); }
968
- }
969
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtSignalStore, decorators: [{
970
- type: Injectable
971
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
972
- type: Optional
973
- }, {
974
- type: Inject,
975
- args: ['INITIAL_STATE']
976
- }] }]; } });
977
- function parseOptions(keysAndOptions) {
978
- if (typeof keysAndOptions.at(-1) === 'object') {
979
- return [keysAndOptions.slice(0, -1), keysAndOptions.at(-1)];
980
- }
981
- return [keysAndOptions];
982
- }
983
-
984
1066
  const rootStateMap = new Map();
985
1067
  const { invalidate, advance } = createLoop(rootStateMap);
986
1068
  const shallowLoose = { objects: 'shallow', strict: false };
@@ -1056,7 +1138,9 @@ class NgtStore extends NgtSignalStore {
1056
1138
  if (state.performance.current !== state.performance.min)
1057
1139
  setPerformanceCurrent(state.performance.min);
1058
1140
  // go back to upper bound
1059
- performanceTimeout = setTimeout(() => setPerformanceCurrent(this.get('performance', 'max') || 1), state.performance.debounce);
1141
+ performanceTimeout = setTimeout(() => {
1142
+ setPerformanceCurrent(this.get('performance', 'max') || 1);
1143
+ }, state.performance.debounce);
1060
1144
  },
1061
1145
  },
1062
1146
  size: { width: 0, height: 0, top: 0, left: 0 },
@@ -1335,14 +1419,10 @@ class NgtStore extends NgtSignalStore {
1335
1419
  let oldSize = state.size;
1336
1420
  let oldDpr = state.viewport.dpr;
1337
1421
  let oldCamera = state.camera;
1338
- const triggers = computed(() => {
1339
- return {
1340
- camera: this.select('camera')(),
1341
- size: this.select('size')(),
1342
- viewport: this.select('viewport')(),
1343
- gl: this.get('gl'),
1344
- };
1345
- });
1422
+ const camera = this.select('camera');
1423
+ const size = this.select('size');
1424
+ const viewport = this.select('viewport');
1425
+ const triggers = computed(() => ({ camera: camera(), size: size(), viewport: viewport(), gl: this.get('gl') }));
1346
1426
  effect(() => {
1347
1427
  const { camera, size, viewport, gl } = triggers();
1348
1428
  // resize camera and renderer on changes to size and dpr
@@ -1487,7 +1567,9 @@ function attachThreeChild(parent, child) {
1487
1567
  }
1488
1568
  // attach
1489
1569
  if (cLS.isRaw) {
1490
- cLS.parent.set(parent);
1570
+ if (cLS.parent) {
1571
+ cLS.parent.set(parent);
1572
+ }
1491
1573
  // at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach
1492
1574
  if (child.__ngt_renderer__[11 /* NgtRendererClassId.rawValue */] === undefined)
1493
1575
  return;
@@ -1505,7 +1587,9 @@ function attachThreeChild(parent, child) {
1505
1587
  added = true;
1506
1588
  }
1507
1589
  pLS.add(child, added ? 'objects' : 'nonObjects');
1508
- cLS.parent.set(parent);
1590
+ if (cLS.parent) {
1591
+ cLS.parent.set(parent);
1592
+ }
1509
1593
  if (cLS.afterAttach)
1510
1594
  cLS.afterAttach.emit({ parent, node: child });
1511
1595
  invalidateInstance(child);
@@ -1543,7 +1627,7 @@ function removeThreeRecursive(array, parent, dispose) {
1543
1627
  if (array)
1544
1628
  [...array].forEach((child) => removeThreeChild(parent, child, dispose));
1545
1629
  }
1546
- function processThreeEvent(instance, priority, eventName, callback, zone, cdr) {
1630
+ function processThreeEvent(instance, priority, eventName, callback, zone, cdr, targetCdr) {
1547
1631
  const lS = getLocalState(instance);
1548
1632
  if (eventName === SPECIAL_EVENTS.BEFORE_RENDER) {
1549
1633
  return lS.store
@@ -1567,11 +1651,11 @@ function processThreeEvent(instance, priority, eventName, callback, zone, cdr) {
1567
1651
  previousHandler(event);
1568
1652
  zone.run(() => {
1569
1653
  callback(event);
1654
+ safeDetectChanges(targetCdr);
1570
1655
  safeDetectChanges(cdr);
1571
- // cdr.detectChanges();
1572
1656
  });
1573
1657
  };
1574
- Object.assign(lS.handlers, { [eventName]: eventToHandler(updatedCallback) });
1658
+ Object.assign(lS.handlers, { [eventName]: updatedCallback });
1575
1659
  // increment the count everytime
1576
1660
  lS.eventCount += 1;
1577
1661
  // but only add the instance (target) to the interaction array (so that it is handled by the EventManager with Raycast)
@@ -1957,6 +2041,7 @@ class NgtRendererStore {
1957
2041
  localState.afterAttach.complete();
1958
2042
  delete localState['objects'];
1959
2043
  delete localState['nonObjects'];
2044
+ delete localState['nativeProps'];
1960
2045
  delete localState['add'];
1961
2046
  delete localState['remove'];
1962
2047
  delete localState['afterUpdate'];
@@ -2141,7 +2226,7 @@ class NgtRenderer {
2141
2226
  }
2142
2227
  // handle raw value
2143
2228
  if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
2144
- return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } }, { __ngt__: { isRaw: true } }));
2229
+ return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } }, { __ngt__: { isRaw: true, parent: createSignal(null) } }));
2145
2230
  }
2146
2231
  const { injectedArgs, injectedParent, store } = this.store.getCreationState();
2147
2232
  let parent = injectedParent;
@@ -2383,7 +2468,9 @@ class NgtRenderer {
2383
2468
  (rS[0 /* NgtRendererClassId.type */] === 'compound' && rS[7 /* NgtRendererClassId.compounded */])) {
2384
2469
  const instance = rS[7 /* NgtRendererClassId.compounded */] || target;
2385
2470
  const priority = getLocalState(target).priority;
2386
- return processThreeEvent(instance, priority || 0, eventName, callback, this.zone, this.cdr);
2471
+ const targetCdr = rS[14 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null) ||
2472
+ rS[1 /* NgtRendererClassId.parent */]?.__ngt_renderer__?.[14 /* NgtRendererClassId.injectorFactory */]?.().get(ChangeDetectorRef, null);
2473
+ return processThreeEvent(instance, priority || 0, eventName, callback, this.zone, this.cdr, targetCdr);
2387
2474
  }
2388
2475
  if (rS[0 /* NgtRendererClassId.type */] === 'compound' && !rS[7 /* NgtRendererClassId.compounded */]) {
2389
2476
  this.store.queueOperation(target, [
@@ -2696,8 +2783,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
2696
2783
  args: ['glCanvas', { static: true, read: ViewContainerRef }]
2697
2784
  }] } });
2698
2785
 
2699
- function injectBeforeRender(cb, { priority = 0, injector = inject(Injector, { optional: true }), } = {}) {
2700
- !injector && assertInInjectionContext(injectBeforeRender);
2786
+ function injectBeforeRender(cb, { priority = 0, injector } = {}) {
2787
+ injector = assertInjectionContext(injectBeforeRender, injector);
2701
2788
  return runInInjectionContext(injector, () => {
2702
2789
  const store = inject(NgtStore);
2703
2790
  const sub = store.get('internal').subscribe(cb, priority, store);
@@ -2706,12 +2793,12 @@ function injectBeforeRender(cb, { priority = 0, injector = inject(Injector, { op
2706
2793
  });
2707
2794
  }
2708
2795
 
2709
- function injectNgtRef(initial = null, injector = inject(Injector, { optional: true })) {
2710
- !injector && assertInInjectionContext(injectNgtRef);
2796
+ function injectNgtRef(initial = null, injector) {
2797
+ injector = assertInjectionContext(injectNgtRef, injector);
2711
2798
  return runInInjectionContext(injector, () => {
2712
2799
  const cdr = inject(ChangeDetectorRef);
2713
2800
  const ref = is.ref(initial) ? initial : new ElementRef(initial);
2714
- const signalRef = signal(ref.nativeElement);
2801
+ const signalRef = createSignal(ref.nativeElement);
2715
2802
  const readonlySignal = signalRef.asReadonly();
2716
2803
  const cached = new Map();
2717
2804
  inject(DestroyRef).onDestroy(() => void cached.clear());
@@ -2742,6 +2829,9 @@ function injectNgtRef(initial = null, injector = inject(Injector, { optional: tr
2742
2829
  },
2743
2830
  get: () => readonlySignal(),
2744
2831
  });
2832
+ Object.defineProperty(ref, 'untracked', {
2833
+ get: () => untracked(readonlySignal),
2834
+ });
2745
2835
  return Object.assign(ref, { children });
2746
2836
  });
2747
2837
  }
@@ -3024,5 +3114,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImpor
3024
3114
  * Generated bundle index. Do not edit.
3025
3115
  */
3026
3116
 
3027
- export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtParent, NgtPortal, NgtPortalContent, NgtRepeat, NgtRoutedScene, NgtSignalStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, extend, getLocalState, injectBeforeRender, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, updateCamera };
3117
+ export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtParent, NgtPortal, NgtPortalContent, NgtRepeat, NgtRoutedScene, NgtSignalStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, assertInjectionContext, checkNeedsUpdate, checkUpdate, createAttachFunction, createSignal, extend, getLocalState, injectBeforeRender, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, queueMacrotaskInInjectionContext, queueMicrotaskInInjectionContext, requestAnimationInInjectionContext, rootStateMap, safeDetectChanges, updateCamera };
3028
3118
  //# sourceMappingURL=angular-three.mjs.map