angular-three 1.9.16 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/canvas.mjs +243 -0
- package/esm2022/lib/directives/args.mjs +36 -0
- package/esm2022/lib/directives/common.mjs +32 -0
- package/esm2022/lib/directives/parent.mjs +36 -0
- package/esm2022/lib/directives/repeat.mjs +18 -0
- package/esm2022/lib/loader.mjs +55 -0
- package/esm2022/lib/pipes/push.mjs +50 -0
- package/esm2022/lib/portal.mjs +240 -0
- package/esm2022/lib/renderer/renderer.mjs +361 -0
- package/esm2022/lib/routed-scene.mjs +29 -0
- package/esm2022/lib/stores/rx-store.mjs +108 -0
- package/esm2022/lib/stores/store.mjs +404 -0
- package/esm2022/lib/types.mjs +2 -0
- package/esm2022/lib/utils/apply-props.mjs +107 -0
- package/esm2022/lib/utils/is.mjs +51 -0
- package/{fesm2020 → fesm2022}/angular-three.mjs +78 -61
- package/fesm2022/angular-three.mjs.map +1 -0
- package/lib/canvas.d.ts +1 -1
- package/lib/directives/args.d.ts +1 -1
- package/lib/directives/parent.d.ts +1 -1
- package/lib/directives/repeat.d.ts +1 -1
- package/lib/loader.d.ts +3 -11
- package/lib/portal.d.ts +2 -2
- package/lib/types.d.ts +91 -120
- package/lib/utils/is.d.ts +6 -1
- package/metadata.json +1 -0
- package/package.json +12 -17
- package/plugin/package.json +1 -4
- package/plugin/src/generators/init/compat.js +1 -1
- package/plugin/src/generators/init/compat.js.map +1 -1
- package/plugin/src/generators/init/init.d.ts +3 -3
- package/plugin/src/generators/init/init.js +17 -3
- package/plugin/src/generators/init/init.js.map +1 -1
- package/web-types.json +1 -0
- package/esm2020/lib/canvas.mjs +0 -242
- package/esm2020/lib/directives/args.mjs +0 -35
- package/esm2020/lib/directives/common.mjs +0 -31
- package/esm2020/lib/directives/parent.mjs +0 -35
- package/esm2020/lib/directives/repeat.mjs +0 -17
- package/esm2020/lib/loader.mjs +0 -56
- package/esm2020/lib/pipes/push.mjs +0 -49
- package/esm2020/lib/portal.mjs +0 -237
- package/esm2020/lib/renderer/renderer.mjs +0 -360
- package/esm2020/lib/routed-scene.mjs +0 -28
- package/esm2020/lib/stores/rx-store.mjs +0 -107
- package/esm2020/lib/stores/store.mjs +0 -402
- package/esm2020/lib/types.mjs +0 -2
- package/esm2020/lib/utils/apply-props.mjs +0 -91
- package/esm2020/lib/utils/is.mjs +0 -50
- package/fesm2015/angular-three.mjs +0 -3051
- package/fesm2015/angular-three.mjs.map +0 -1
- package/fesm2020/angular-three.mjs.map +0 -1
- /package/{esm2020 → esm2022}/angular-three.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/before-render.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/catalogue.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/destroy.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/ref.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/di/run-in-context.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/events.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/loop.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/di.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/enums.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/store.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/renderer/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/attach.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/instance.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/make.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/safe-detect-changes.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/update.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/web/events.mjs +0 -0
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { getLocalState, invalidateInstance } from './instance';
|
|
3
|
-
import { is } from './is';
|
|
4
|
-
import { checkUpdate } from './update';
|
|
5
|
-
function diffProps(instance, props) {
|
|
6
|
-
const propsEntries = Object.entries(props);
|
|
7
|
-
const changes = [];
|
|
8
|
-
for (const [propKey, propValue] of propsEntries) {
|
|
9
|
-
if (is.equ(propValue, instance[propKey]))
|
|
10
|
-
continue;
|
|
11
|
-
changes.push([propKey, propValue]);
|
|
12
|
-
}
|
|
13
|
-
return changes;
|
|
14
|
-
}
|
|
15
|
-
export function applyProps(instance, props) {
|
|
16
|
-
// if props is empty
|
|
17
|
-
if (!Object.keys(props).length)
|
|
18
|
-
return instance;
|
|
19
|
-
// filter equals, events , and reserved props
|
|
20
|
-
const localState = getLocalState(instance);
|
|
21
|
-
const rootState = localState.store?.get();
|
|
22
|
-
const changes = diffProps(instance, props);
|
|
23
|
-
for (let i = 0; i < changes.length; i++) {
|
|
24
|
-
const key = changes[i][0];
|
|
25
|
-
const currentInstance = instance;
|
|
26
|
-
const targetProp = currentInstance[key];
|
|
27
|
-
const value = changes[i][1];
|
|
28
|
-
// special treatmen for objects with support for set/copy, and layers
|
|
29
|
-
if (targetProp && targetProp['set'] && (targetProp['copy'] || targetProp instanceof THREE.Layers)) {
|
|
30
|
-
const isColor = targetProp instanceof THREE.Color;
|
|
31
|
-
// if value is an array
|
|
32
|
-
if (Array.isArray(value)) {
|
|
33
|
-
if (targetProp['fromArray'])
|
|
34
|
-
targetProp['fromArray'](value);
|
|
35
|
-
else
|
|
36
|
-
targetProp['set'](...value);
|
|
37
|
-
}
|
|
38
|
-
// test again target.copy
|
|
39
|
-
else if (targetProp['copy'] &&
|
|
40
|
-
value &&
|
|
41
|
-
value.constructor &&
|
|
42
|
-
targetProp.constructor.name === value.constructor.name) {
|
|
43
|
-
targetProp['copy'](value);
|
|
44
|
-
if (!THREE.ColorManagement && !rootState.linear && isColor)
|
|
45
|
-
targetProp['convertSRGBToLinear']();
|
|
46
|
-
}
|
|
47
|
-
// if nothing else fits, just set the single value, ignore undefined
|
|
48
|
-
else if (value !== undefined) {
|
|
49
|
-
const isColor = targetProp instanceof THREE.Color;
|
|
50
|
-
// allow setting array scalars
|
|
51
|
-
if (!isColor && targetProp['setScalar'])
|
|
52
|
-
targetProp['setScalar'](value);
|
|
53
|
-
// layers have no copy function, copy the mask
|
|
54
|
-
else if (targetProp instanceof THREE.Layers && value instanceof THREE.Layers)
|
|
55
|
-
targetProp.mask = value.mask;
|
|
56
|
-
// otherwise just set ...
|
|
57
|
-
else
|
|
58
|
-
targetProp['set'](value);
|
|
59
|
-
// auto-convert srgb
|
|
60
|
-
if (!THREE.ColorManagement && !rootState?.linear && isColor)
|
|
61
|
-
targetProp.convertSRGBToLinear();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// else just overwrite the value
|
|
65
|
-
else {
|
|
66
|
-
currentInstance[key] = value;
|
|
67
|
-
// auto-convert srgb textures
|
|
68
|
-
if (!rootState?.linear &&
|
|
69
|
-
currentInstance[key] instanceof THREE.Texture &&
|
|
70
|
-
currentInstance[key].format === THREE.RGBAFormat &&
|
|
71
|
-
currentInstance[key].type === THREE.UnsignedByteType) {
|
|
72
|
-
currentInstance[key]['encoding'] = THREE.sRGBEncoding;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
checkUpdate(targetProp);
|
|
76
|
-
invalidateInstance(instance);
|
|
77
|
-
}
|
|
78
|
-
const instanceHandlers = localState.eventCount;
|
|
79
|
-
if (localState.parent && rootState.internal && instance['raycast'] && instanceHandlers !== localState.eventCount) {
|
|
80
|
-
// pre-emptively remove the interaction from manager
|
|
81
|
-
rootState.removeInteraction(instance['uuid']);
|
|
82
|
-
// add the instance to the interaction manager only when it has handlers
|
|
83
|
-
if (localState.eventCount)
|
|
84
|
-
rootState.addInteraction(instance);
|
|
85
|
-
}
|
|
86
|
-
if (localState.parent && localState.afterUpdate && localState.afterUpdate.observed && changes.length) {
|
|
87
|
-
localState.afterUpdate.emit(instance);
|
|
88
|
-
}
|
|
89
|
-
return instance;
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktcHJvcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi91dGlscy9hcHBseS1wcm9wcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxTQUFTLFNBQVMsQ0FBQyxRQUFzQixFQUFFLEtBQW1CO0lBQzFELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsTUFBTSxPQUFPLEdBQW9DLEVBQUUsQ0FBQztJQUVwRCxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksWUFBWSxFQUFFO1FBQzdDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUNuRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDdEM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxRQUF5QixFQUFFLEtBQW1CO0lBQ3JFLG9CQUFvQjtJQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFaEQsNkNBQTZDO0lBQzdDLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENB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QUFLLEtBQUssQ0FBQyxnQkFBZ0IsRUFDdEQ7Z0JBQ0UsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7YUFDekQ7U0FDSjtRQUVELFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUUvQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksZ0JBQWdCLEtBQUssVUFBVSxDQUFDLFVBQVUsRUFBRTtRQUM5RyxvREFBb0Q7UUFDcEQsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzlDLHdFQUF3RTtRQUN4RSxJQUFJLFVBQVUsQ0FBQyxVQUFVO1lBQUUsU0FBUyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNqRTtJQUVELElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxVQUFVLENBQUMsV0FBVyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDbEcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDekM7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIGludmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IGNoZWNrVXBkYXRlIH0gZnJvbSAnLi91cGRhdGUnO1xuXG5mdW5jdGlvbiBkaWZmUHJvcHMoaW5zdGFuY2U6IE5ndEFueVJlY29yZCwgcHJvcHM6IE5ndEFueVJlY29yZCkge1xuICAgIGNvbnN0IHByb3BzRW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHByb3BzKTtcbiAgICBjb25zdCBjaGFuZ2VzOiBba2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duXVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtwcm9wS2V5LCBwcm9wVmFsdWVdIG9mIHByb3BzRW50cmllcykge1xuICAgICAgICBpZiAoaXMuZXF1KHByb3BWYWx1ZSwgaW5zdGFuY2VbcHJvcEtleV0pKSBjb250aW51ZTtcbiAgICAgICAgY2hhbmdlcy5wdXNoKFtwcm9wS2V5LCBwcm9wVmFsdWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhbmdlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UHJvcHMoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSwgcHJvcHM6IE5ndEFueVJlY29yZCk6IE5ndEluc3RhbmNlTm9kZSB7XG4gICAgLy8gaWYgcHJvcHMgaXMgZW1wdHlcbiAgICBpZiAoIU9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGgpIHJldHVybiBpbnN0YW5jZTtcblxuICAgIC8vIGZpbHRlciBlcXVhbHMsIGV2ZW50cyAsIGFuZCByZXNlcnZlZCBwcm9wc1xuICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcbiAgICBjb25zdCByb290U3RhdGUgPSBsb2NhbFN0YXRlLnN0b3JlPy5nZXQoKTtcbiAgICBjb25zdCBjaGFuZ2VzID0gZGlmZlByb3BzKGluc3RhbmNlLCBwcm9wcyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYW5nZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gY2hhbmdlc1tpXVswXTtcbiAgICAgICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldFByb3AgPSBjdXJyZW50SW5zdGFuY2Vba2V5XSBhcyBOZ3RBbnlSZWNvcmQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY2hhbmdlc1tpXVsxXTtcblxuICAgICAgICAvLyBzcGVjaWFsIHRyZWF0bWVuIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3Igc2V0L2NvcHksIGFuZCBsYXllcnNcbiAgICAgICAgaWYgKHRhcmdldFByb3AgJiYgdGFyZ2V0UHJvcFsnc2V0J10gJiYgKHRhcmdldFByb3BbJ2NvcHknXSB8fCB0YXJnZXRQcm9wIGluc3RhbmNlb2YgVEhSRUUuTGF5ZXJzKSkge1xuICAgICAgICAgICAgY29uc3QgaXNDb2xvciA9IHRhcmdldFByb3AgaW5zdGFuY2VvZiBUSFJFRS5Db2xvcjtcbiAgICAgICAgICAgIC8vIGlmIHZhbHVlIGlzIGFuIGFycmF5XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UHJvcFsnZnJvbUFycmF5J10pIHRhcmdldFByb3BbJ2Zyb21BcnJheSddKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBlbHNlIHRhcmdldFByb3BbJ3NldCddKC4uLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgYWdhaW4gdGFyZ2V0LmNvcHlcbiAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldFByb3BbJ2NvcHknXSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgICAgICAgdmFsdWUuY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgICAgICB0YXJnZXRQcm9wLmNvbnN0cnVjdG9yLm5hbWUgPT09IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRhcmdldFByb3BbJ2NvcHknXSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFUSFJFRS5Db2xvck1hbmFnZW1lbnQgJiYgIXJvb3RTdGF0ZS5saW5lYXIgJiYgaXNDb2xvcikgdGFyZ2V0UHJvcFsnY29udmVydFNSR0JUb0xpbmVhciddKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBub3RoaW5nIGVsc2UgZml0cywganVzdCBzZXQgdGhlIHNpbmdsZSB2YWx1ZSwgaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sb3IgPSB0YXJnZXRQcm9wIGluc3RhbmNlb2YgVEhSRUUuQ29sb3I7XG4gICAgICAgICAgICAgICAgLy8gYWxsb3cgc2V0dGluZyBhcnJheSBzY2FsYXJzXG4gICAgICAgICAgICAgICAgaWYgKCFpc0NvbG9yICYmIHRhcmdldFByb3BbJ3NldFNjYWxhciddKSB0YXJnZXRQcm9wWydzZXRTY2FsYXInXSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gbGF5ZXJzIGhhdmUgbm8gY29weSBmdW5jdGlvbiwgY29weSB0aGUgbWFza1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldFByb3AgaW5zdGFuY2VvZiBUSFJFRS5MYXllcnMgJiYgdmFsdWUgaW5zdGFuY2VvZiBUSFJFRS5MYXllcnMpXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFByb3AubWFzayA9IHZhbHVlLm1hc2s7XG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3Qgc2V0IC4uLlxuICAgICAgICAgICAgICAgIGVsc2UgdGFyZ2V0UHJvcFsnc2V0J10odmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgLy8gYXV0by1jb252ZXJ0IHNyZ2JcbiAgICAgICAgICAgICAgICBpZiAoIVRIUkVFLkNvbG9yTWFuYWdlbWVudCAmJiAhcm9vdFN0YXRlPy5saW5lYXIgJiYgaXNDb2xvcikgdGFyZ2V0UHJvcC5jb252ZXJ0U1JHQlRvTGluZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBqdXN0IG92ZXJ3cml0ZSB0aGUgdmFsdWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50SW5zdGFuY2Vba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgLy8gYXV0by1jb252ZXJ0IHNyZ2IgdGV4dHVyZXNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhcm9vdFN0YXRlPy5saW5lYXIgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5zdGFuY2Vba2V5XSBpbnN0YW5jZW9mIFRIUkVFLlRleHR1cmUgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5zdGFuY2Vba2V5XS5mb3JtYXQgPT09IFRIUkVFLlJHQkFGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5zdGFuY2Vba2V5XS50eXBlID09PSBUSFJFRS5VbnNpZ25lZEJ5dGVUeXBlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5zdGFuY2Vba2V5XVsnZW5jb2RpbmcnXSA9IFRIUkVFLnNSR0JFbmNvZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrVXBkYXRlKHRhcmdldFByb3ApO1xuICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlSGFuZGxlcnMgPSBsb2NhbFN0YXRlLmV2ZW50Q291bnQ7XG5cbiAgICBpZiAobG9jYWxTdGF0ZS5wYXJlbnQgJiYgcm9vdFN0YXRlLmludGVybmFsICYmIGluc3RhbmNlWydyYXljYXN0J10gJiYgaW5zdGFuY2VIYW5kbGVycyAhPT0gbG9jYWxTdGF0ZS5ldmVudENvdW50KSB7XG4gICAgICAgIC8vIHByZS1lbXB0aXZlbHkgcmVtb3ZlIHRoZSBpbnRlcmFjdGlvbiBmcm9tIG1hbmFnZXJcbiAgICAgICAgcm9vdFN0YXRlLnJlbW92ZUludGVyYWN0aW9uKGluc3RhbmNlWyd1dWlkJ10pO1xuICAgICAgICAvLyBhZGQgdGhlIGluc3RhbmNlIHRvIHRoZSBpbnRlcmFjdGlvbiBtYW5hZ2VyIG9ubHkgd2hlbiBpdCBoYXMgaGFuZGxlcnNcbiAgICAgICAgaWYgKGxvY2FsU3RhdGUuZXZlbnRDb3VudCkgcm9vdFN0YXRlLmFkZEludGVyYWN0aW9uKGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICBpZiAobG9jYWxTdGF0ZS5wYXJlbnQgJiYgbG9jYWxTdGF0ZS5hZnRlclVwZGF0ZSAmJiBsb2NhbFN0YXRlLmFmdGVyVXBkYXRlLm9ic2VydmVkICYmIGNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgIGxvY2FsU3RhdGUuYWZ0ZXJVcGRhdGUuZW1pdChpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xufVxuIl19
|
package/esm2020/lib/utils/is.mjs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ElementRef } from '@angular/core';
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
export const is = {
|
|
4
|
-
obj: (a) => a === Object(a) && !Array.isArray(a) && typeof a !== 'function',
|
|
5
|
-
material: (a) => !!a && a.isMaterial,
|
|
6
|
-
geometry: (a) => !!a && a.isBufferGeometry,
|
|
7
|
-
orthographicCamera: (a) => !!a && a.isOrthographicCamera,
|
|
8
|
-
perspectiveCamera: (a) => !!a && a.isPerspectiveCamera,
|
|
9
|
-
camera: (a) => !!a && a.isCamera,
|
|
10
|
-
renderer: (a) => !!a && a instanceof THREE.WebGLRenderer,
|
|
11
|
-
scene: (a) => !!a && a.isScene,
|
|
12
|
-
object3D: (a) => !!a && a.isObject3D,
|
|
13
|
-
instance: (a) => !!a && !!a['__ngt__'],
|
|
14
|
-
ref: (a) => a instanceof ElementRef,
|
|
15
|
-
equ(a, b, { arrays = 'shallow', objects = 'reference', strict = true } = {}) {
|
|
16
|
-
// Wrong type or one of the two undefined, doesn't match
|
|
17
|
-
if (typeof a !== typeof b || !!a !== !!b)
|
|
18
|
-
return false;
|
|
19
|
-
// Atomic, just compare a against b
|
|
20
|
-
if (typeof a === 'string' || typeof a === 'number')
|
|
21
|
-
return a === b;
|
|
22
|
-
const isObj = is.obj(a);
|
|
23
|
-
if (isObj && objects === 'reference')
|
|
24
|
-
return a === b;
|
|
25
|
-
const isArr = Array.isArray(a);
|
|
26
|
-
if (isArr && arrays === 'reference')
|
|
27
|
-
return a === b;
|
|
28
|
-
// Array or Object, shallow compare first to see if it's a match
|
|
29
|
-
if ((isArr || isObj) && a === b)
|
|
30
|
-
return true;
|
|
31
|
-
// Last resort, go through keys
|
|
32
|
-
let i;
|
|
33
|
-
for (i in a)
|
|
34
|
-
if (!(i in b))
|
|
35
|
-
return false;
|
|
36
|
-
for (i in strict ? b : a)
|
|
37
|
-
if (a[i] !== b[i])
|
|
38
|
-
return false;
|
|
39
|
-
if (i === void 0) {
|
|
40
|
-
if (isArr && a.length === 0 && b.length === 0)
|
|
41
|
-
return true;
|
|
42
|
-
if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0)
|
|
43
|
-
return true;
|
|
44
|
-
if (a !== b)
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
return true;
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi91dGlscy9pcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRy9CLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRztJQUNkLEdBQUcsRUFBRSxDQUFDLENBQVUsRUFBZSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVTtJQUNqRyxRQUFRLEVBQUUsQ0FBQyxDQUFVLEVBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQW9CLENBQUMsVUFBVTtJQUN0RixRQUFRLEVBQUUsQ0FBQyxDQUFVLEVBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQTBCLENBQUMsZ0JBQWdCO0lBQ3hHLGtCQUFrQixFQUFFLENBQUMsQ0FBVSxFQUFpQyxFQUFFLENBQzlELENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBOEIsQ0FBQyxvQkFBb0I7SUFDL0QsaUJBQWlCLEVBQUUsQ0FBQyxDQUFVLEVBQWdDLEVBQUUsQ0FDNUQsQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUE2QixDQUFDLG1CQUFtQjtJQUM3RCxNQUFNLEVBQUUsQ0FBQyxDQUFVLEVBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQWtCLENBQUMsUUFBUTtJQUM5RSxRQUFRLEVBQUUsQ0FBQyxDQUFVLEVBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsYUFBYTtJQUMzRixLQUFLLEVBQUUsQ0FBQyxDQUFVLEVBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQWlCLENBQUMsT0FBTztJQUMxRSxRQUFRLEVBQUUsQ0FBQyxDQUFVLEVBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQW9CLENBQUMsVUFBVTtJQUN0RixRQUFRLEVBQUUsQ0FBQyxDQUFVLEVBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBRSxDQUFrQixDQUFDLFNBQVMsQ0FBQztJQUN2RixHQUFHLEVBQUUsQ0FBQyxDQUFVLEVBQW1CLEVBQUUsQ0FBQyxDQUFDLFlBQVksVUFBVTtJQUM3RCxHQUFHLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQUUsT0FBTyxHQUFHLFdBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSSxLQUFtQixFQUFFO1FBQy9GLHdEQUF3RDtRQUN4RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN2RCxtQ0FBbUM7UUFDbkMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxXQUFXO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxLQUFLLElBQUksTUFBTSxLQUFLLFdBQVc7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QywrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLENBQUM7UUFDTixLQUFLLENBQUMsSUFBSSxDQUFDO1lBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZCxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDM0QsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDckYsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQztTQUM3QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQsIE5ndEVxdUNvbmZpZywgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXMgPSB7XG4gICAgb2JqOiAoYTogdW5rbm93bik6IGEgaXMgb2JqZWN0ID0+IGEgPT09IE9iamVjdChhKSAmJiAhQXJyYXkuaXNBcnJheShhKSAmJiB0eXBlb2YgYSAhPT0gJ2Z1bmN0aW9uJyxcbiAgICBtYXRlcmlhbDogKGE6IHVua25vd24pOiBhIGlzIFRIUkVFLk1hdGVyaWFsID0+ICEhYSAmJiAoYSBhcyBUSFJFRS5NYXRlcmlhbCkuaXNNYXRlcmlhbCxcbiAgICBnZW9tZXRyeTogKGE6IHVua25vd24pOiBhIGlzIFRIUkVFLkJ1ZmZlckdlb21ldHJ5ID0+ICEhYSAmJiAoYSBhcyBUSFJFRS5CdWZmZXJHZW9tZXRyeSkuaXNCdWZmZXJHZW9tZXRyeSxcbiAgICBvcnRob2dyYXBoaWNDYW1lcmE6IChhOiB1bmtub3duKTogYSBpcyBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEgPT5cbiAgICAgICAgISFhICYmIChhIGFzIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkuaXNPcnRob2dyYXBoaWNDYW1lcmEsXG4gICAgcGVyc3BlY3RpdmVDYW1lcmE6IChhOiB1bmtub3duKTogYSBpcyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSA9PlxuICAgICAgICAhIWEgJiYgKGEgYXMgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpLmlzUGVyc3BlY3RpdmVDYW1lcmEsXG4gICAgY2FtZXJhOiAoYTogdW5rbm93bik6IGEgaXMgVEhSRUUuQ2FtZXJhID0+ICEhYSAmJiAoYSBhcyBUSFJFRS5DYW1lcmEpLmlzQ2FtZXJhLFxuICAgIHJlbmRlcmVyOiAoYTogdW5rbm93bik6IGEgaXMgVEhSRUUuV2ViR0xSZW5kZXJlciA9PiAhIWEgJiYgYSBpbnN0YW5jZW9mIFRIUkVFLldlYkdMUmVuZGVyZXIsXG4gICAgc2NlbmU6IChhOiB1bmtub3duKTogYSBpcyBUSFJFRS5TY2VuZSA9PiAhIWEgJiYgKGEgYXMgVEhSRUUuU2NlbmUpLmlzU2NlbmUsXG4gICAgb2JqZWN0M0Q6IChhOiB1bmtub3duKTogYSBpcyBUSFJFRS5PYmplY3QzRCA9PiAhIWEgJiYgKGEgYXMgVEhSRUUuT2JqZWN0M0QpLmlzT2JqZWN0M0QsXG4gICAgaW5zdGFuY2U6IChhOiB1bmtub3duKTogYSBpcyBOZ3RJbnN0YW5jZU5vZGUgPT4gISFhICYmICEhKGEgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfXyddLFxuICAgIHJlZjogKGE6IHVua25vd24pOiBhIGlzIEVsZW1lbnRSZWYgPT4gYSBpbnN0YW5jZW9mIEVsZW1lbnRSZWYsXG4gICAgZXF1KGE6IGFueSwgYjogYW55LCB7IGFycmF5cyA9ICdzaGFsbG93Jywgb2JqZWN0cyA9ICdyZWZlcmVuY2UnLCBzdHJpY3QgPSB0cnVlIH06IE5ndEVxdUNvbmZpZyA9IHt9KSB7XG4gICAgICAgIC8vIFdyb25nIHR5cGUgb3Igb25lIG9mIHRoZSB0d28gdW5kZWZpbmVkLCBkb2Vzbid0IG1hdGNoXG4gICAgICAgIGlmICh0eXBlb2YgYSAhPT0gdHlwZW9mIGIgfHwgISFhICE9PSAhIWIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gQXRvbWljLCBqdXN0IGNvbXBhcmUgYSBhZ2FpbnN0IGJcbiAgICAgICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYSA9PT0gJ251bWJlcicpIHJldHVybiBhID09PSBiO1xuICAgICAgICBjb25zdCBpc09iaiA9IGlzLm9iaihhKTtcbiAgICAgICAgaWYgKGlzT2JqICYmIG9iamVjdHMgPT09ICdyZWZlcmVuY2UnKSByZXR1cm4gYSA9PT0gYjtcbiAgICAgICAgY29uc3QgaXNBcnIgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgICBpZiAoaXNBcnIgJiYgYXJyYXlzID09PSAncmVmZXJlbmNlJykgcmV0dXJuIGEgPT09IGI7XG4gICAgICAgIC8vIEFycmF5IG9yIE9iamVjdCwgc2hhbGxvdyBjb21wYXJlIGZpcnN0IHRvIHNlZSBpZiBpdCdzIGEgbWF0Y2hcbiAgICAgICAgaWYgKChpc0FyciB8fCBpc09iaikgJiYgYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIExhc3QgcmVzb3J0LCBnbyB0aHJvdWdoIGtleXNcbiAgICAgICAgbGV0IGk7XG4gICAgICAgIGZvciAoaSBpbiBhKSBpZiAoIShpIGluIGIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAoaSBpbiBzdHJpY3QgPyBiIDogYSkgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGkgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgaWYgKGlzQXJyICYmIGEubGVuZ3RoID09PSAwICYmIGIubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpc09iaiAmJiBPYmplY3Qua2V5cyhhKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmtleXMoYikubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChhICE9PSBiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbn07XG4iXX0=
|