angular-three 1.9.16 → 1.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/esm2022/lib/canvas.mjs +243 -0
  2. package/esm2022/lib/directives/args.mjs +36 -0
  3. package/esm2022/lib/directives/common.mjs +32 -0
  4. package/esm2022/lib/directives/parent.mjs +36 -0
  5. package/esm2022/lib/directives/repeat.mjs +18 -0
  6. package/esm2022/lib/loader.mjs +55 -0
  7. package/esm2022/lib/pipes/push.mjs +50 -0
  8. package/esm2022/lib/portal.mjs +240 -0
  9. package/esm2022/lib/renderer/renderer.mjs +361 -0
  10. package/esm2022/lib/routed-scene.mjs +29 -0
  11. package/esm2022/lib/stores/rx-store.mjs +108 -0
  12. package/esm2022/lib/stores/store.mjs +404 -0
  13. package/esm2022/lib/types.mjs +2 -0
  14. package/esm2022/lib/utils/apply-props.mjs +107 -0
  15. package/esm2022/lib/utils/is.mjs +51 -0
  16. package/{fesm2020 → fesm2022}/angular-three.mjs +78 -61
  17. package/fesm2022/angular-three.mjs.map +1 -0
  18. package/lib/canvas.d.ts +1 -1
  19. package/lib/directives/args.d.ts +1 -1
  20. package/lib/directives/parent.d.ts +1 -1
  21. package/lib/directives/repeat.d.ts +1 -1
  22. package/lib/loader.d.ts +3 -11
  23. package/lib/portal.d.ts +2 -2
  24. package/lib/types.d.ts +91 -120
  25. package/lib/utils/is.d.ts +6 -1
  26. package/metadata.json +1 -0
  27. package/package.json +13 -17
  28. package/plugin/package.json +1 -4
  29. package/plugin/src/generators/init/compat.js +1 -1
  30. package/plugin/src/generators/init/compat.js.map +1 -1
  31. package/plugin/src/generators/init/init.d.ts +3 -3
  32. package/plugin/src/generators/init/init.js +23 -3
  33. package/plugin/src/generators/init/init.js.map +1 -1
  34. package/web-types.json +1 -0
  35. package/esm2020/lib/canvas.mjs +0 -242
  36. package/esm2020/lib/directives/args.mjs +0 -35
  37. package/esm2020/lib/directives/common.mjs +0 -31
  38. package/esm2020/lib/directives/parent.mjs +0 -35
  39. package/esm2020/lib/directives/repeat.mjs +0 -17
  40. package/esm2020/lib/loader.mjs +0 -56
  41. package/esm2020/lib/pipes/push.mjs +0 -49
  42. package/esm2020/lib/portal.mjs +0 -237
  43. package/esm2020/lib/renderer/renderer.mjs +0 -360
  44. package/esm2020/lib/routed-scene.mjs +0 -28
  45. package/esm2020/lib/stores/rx-store.mjs +0 -107
  46. package/esm2020/lib/stores/store.mjs +0 -402
  47. package/esm2020/lib/types.mjs +0 -2
  48. package/esm2020/lib/utils/apply-props.mjs +0 -91
  49. package/esm2020/lib/utils/is.mjs +0 -50
  50. package/fesm2015/angular-three.mjs +0 -3051
  51. package/fesm2015/angular-three.mjs.map +0 -1
  52. package/fesm2020/angular-three.mjs.map +0 -1
  53. /package/{esm2020 → esm2022}/angular-three.mjs +0 -0
  54. /package/{esm2020 → esm2022}/index.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/di/before-render.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/di/catalogue.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/di/destroy.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/di/ref.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/di/run-in-context.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/events.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/loop.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/renderer/di.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/renderer/enums.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/renderer/provider.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/renderer/store.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/renderer/utils.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/utils/attach.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/utils/instance.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/utils/make.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/utils/safe-detect-changes.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/utils/update.mjs +0 -0
  72. /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
@@ -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=