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.
- package/esm2022/index.mjs +4 -1
- package/esm2022/lib/di/before-render.mjs +5 -4
- package/esm2022/lib/di/ref.mjs +10 -5
- package/esm2022/lib/loader.mjs +26 -22
- package/esm2022/lib/renderer/renderer.mjs +6 -3
- package/esm2022/lib/renderer/store.mjs +2 -1
- package/esm2022/lib/renderer/utils.mjs +10 -6
- package/esm2022/lib/stores/signal.store.mjs +28 -7
- package/esm2022/lib/stores/store.mjs +8 -10
- package/esm2022/lib/three-types.mjs +1 -1
- package/esm2022/lib/types.mjs +1 -1
- package/esm2022/lib/utils/apply-props.mjs +9 -5
- package/esm2022/lib/utils/assert-in-injection-context.mjs +14 -0
- package/esm2022/lib/utils/instance.mjs +7 -4
- package/esm2022/lib/utils/safe-detect-changes.mjs +2 -2
- package/esm2022/lib/utils/signal.mjs +24 -0
- package/esm2022/lib/utils/timing.mjs +21 -0
- package/fesm2022/angular-three.mjs +197 -107
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/lib/di/before-render.d.ts +2 -2
- package/lib/di/ref.d.ts +2 -1
- package/lib/loader.d.ts +1 -1
- package/lib/renderer/utils.d.ts +1 -1
- package/lib/stores/signal.store.d.ts +1 -0
- package/lib/three-types.d.ts +1 -1
- package/lib/types.d.ts +3 -1
- package/lib/utils/assert-in-injection-context.d.ts +2 -0
- package/lib/utils/signal.d.ts +2 -0
- package/lib/utils/timing.d.ts +4 -0
- package/metadata.json +1 -1
- package/package.json +1 -1
- package/plugin/package.json +1 -1
- package/web-types.json +1 -1
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
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 =
|
|
19
|
+
const { objects = createSignal([]), nonObjects = createSignal([]), ...rest } = localState || {};
|
|
18
20
|
instance.__ngt__ = {
|
|
19
21
|
previousAttach: null,
|
|
20
22
|
store: null,
|
|
21
|
-
parent:
|
|
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,
|
|
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['
|
|
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,
|
|
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 {
|
|
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 =
|
|
206
|
+
const { objects = createSignal([]), nonObjects = createSignal([]), ...rest } = localState || {};
|
|
107
207
|
instance.__ngt__ = {
|
|
108
208
|
previousAttach: null,
|
|
109
209
|
store: null,
|
|
110
|
-
parent:
|
|
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['
|
|
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
|
|
652
|
-
|
|
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
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
.
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
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
|
-
}
|
|
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 (
|
|
902
|
-
texture
|
|
903
|
-
|
|
904
|
-
|
|
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(() =>
|
|
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
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
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
|
|
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
|
|
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]:
|
|
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
|
-
|
|
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
|
|
2700
|
-
|
|
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
|
|
2710
|
-
|
|
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 =
|
|
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
|