angular-three 2.0.0-beta.237 → 2.0.0-beta.239

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,7 +1,9 @@
1
- import { effect, signal } from '@angular/core';
1
+ import { afterNextRender, signal } from '@angular/core';
2
2
  import { assertInjector } from 'ngxtension/assert-injector';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
3
4
  import { makeObjectGraph } from './utils/make';
4
5
  const cached = new Map();
6
+ const memoizedLoaders = new WeakMap();
5
7
  function normalizeInputs(input) {
6
8
  if (Array.isArray(input))
7
9
  return input;
@@ -14,7 +16,11 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
14
16
  const urls = normalizeInputs(inputs());
15
17
  if (urls.some((url) => url.includes('undefined')))
16
18
  return null;
17
- const loader = new (loaderConstructorFactory(urls))();
19
+ let loader = memoizedLoaders.get(loaderConstructorFactory(urls));
20
+ if (!loader) {
21
+ loader = new (loaderConstructorFactory(urls))();
22
+ memoizedLoaders.set(loaderConstructorFactory(urls), loader);
23
+ }
18
24
  if (extensions)
19
25
  extensions(loader);
20
26
  // TODO: reevaluate this
@@ -26,7 +32,7 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
26
32
  Object.assign(data, makeObjectGraph(data['scene']));
27
33
  }
28
34
  resolve(data);
29
- }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error}`)));
35
+ }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error?.message}`)));
30
36
  }));
31
37
  }
32
38
  return cached.get(url);
@@ -35,29 +41,32 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
35
41
  }
36
42
  function _injectLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector, } = {}) {
37
43
  return assertInjector(_injectLoader, injector, () => {
44
+ const autoEffect = injectAutoEffect();
38
45
  const response = signal(null);
39
- const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress });
40
- effect(() => {
41
- const originalUrls = inputs();
42
- const cachedEffect = effector();
43
- if (cachedEffect === null) {
44
- response.set(null);
45
- }
46
- else {
47
- Promise.all(cachedEffect).then((results) => {
48
- response.update(() => {
49
- if (Array.isArray(originalUrls))
50
- return results;
51
- if (typeof originalUrls === 'string')
52
- return results[0];
53
- const keys = Object.keys(originalUrls);
54
- return keys.reduce((result, key) => {
55
- result[key] = results[keys.indexOf(key)];
56
- return result;
57
- }, {});
46
+ afterNextRender(() => {
47
+ const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress });
48
+ autoEffect(() => {
49
+ const originalUrls = inputs();
50
+ const cachedEffect = effector();
51
+ if (cachedEffect === null) {
52
+ response.set(null);
53
+ }
54
+ else {
55
+ Promise.all(cachedEffect).then((results) => {
56
+ response.update(() => {
57
+ if (Array.isArray(originalUrls))
58
+ return results;
59
+ if (typeof originalUrls === 'string')
60
+ return results[0];
61
+ const keys = Object.keys(originalUrls);
62
+ return keys.reduce((result, key) => {
63
+ result[key] = results[keys.indexOf(key)];
64
+ return result;
65
+ }, {});
66
+ });
58
67
  });
59
- });
60
- }
68
+ }
69
+ });
61
70
  });
62
71
  return response.asReadonly();
63
72
  });
@@ -72,4 +81,4 @@ _injectLoader.destroy = () => {
72
81
  cached.clear();
73
82
  };
74
83
  export const injectLoader = _injectLoader;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHNUQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0QjdELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFFekIsU0FBUyxlQUFlLENBQUMsS0FBaUQ7SUFDekUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3ZDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUtaLHdCQUFrRSxFQUNsRSxNQUFrQixFQUNsQixFQUNDLFVBQVUsRUFDVixVQUFVLE1BQ2dHLEVBQUU7SUFFN0csT0FBTyxHQUErQixFQUFFO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRS9ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxVQUFVO1lBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLHdCQUF3QjtR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QUNsRSxNQUFrQixFQUNsQixVQUFvRCxFQUNuRCxFQUFFO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN6RSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2IsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7QUFDRixDQUFDLENBQUM7QUFFRixhQUFhLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtJQUM1QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFzQixhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgU2lnbmFsLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBMb2FkZXIsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOZ3RPYmplY3RNYXAsIG1ha2VPYmplY3RHcmFwaCB9IGZyb20gJy4vdXRpbHMvbWFrZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEdMVEZMaWtlID0geyBzY2VuZTogT2JqZWN0M0QgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RMb2FkZXI8VD4gZXh0ZW5kcyBMb2FkZXIge1xuXHRsb2FkKFxuXHRcdHVybDogc3RyaW5nLFxuXHRcdG9uTG9hZD86IChyZXN1bHQ6IFQpID0+IHZvaWQsXG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCxcblx0XHRvbkVycm9yPzogKGV2ZW50OiB1bmtub3duKSA9PiB2b2lkLFxuXHQpOiB1bmtub3duO1xuXHRsb2FkQXN5bmModXJsOiBzdHJpbmcsIG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQpOiBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJQcm90bzxUPiA9IG5ldyAoLi4uYXJnczogYW55KSA9PiBOZ3RMb2FkZXI8VCBleHRlbmRzIHVua25vd24gPyBhbnkgOiBUPjtcbmV4cG9ydCB0eXBlIE5ndExvYWRlclJldHVyblR5cGU8VCwgTCBleHRlbmRzIE5ndExvYWRlclByb3RvPFQ+PiA9IFQgZXh0ZW5kcyB1bmtub3duXG5cdD8gQXdhaXRlZDxSZXR1cm5UeXBlPEluc3RhbmNlVHlwZTxMPlsnbG9hZEFzeW5jJ10+PlxuXHQ6IFQ7XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlckV4dGVuc2lvbnM8VCBleHRlbmRzIHsgcHJvdG90eXBlOiBOZ3RMb2FkZXJQcm90bzxhbnk+IH0+ID0gKGxvYWRlcjogVFsncHJvdG90eXBlJ10pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RDb25kaXRpb25hbFR5cGU8Q2hpbGQsIFBhcmVudCwgVHJ1dGh5LCBGYWxzeT4gPSBDaGlsZCBleHRlbmRzIFBhcmVudCA/IFRydXRoeSA6IEZhbHN5O1xuZXhwb3J0IHR5cGUgTmd0QnJhbmNoaW5nUmV0dXJuPFQsIFBhcmVudCwgQ29lcmNlZD4gPSBOZ3RDb25kaXRpb25hbFR5cGU8VCwgUGFyZW50LCBDb2VyY2VkLCBUPjtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmVzdWx0czxcblx0VElucHV0IGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUUmV0dXJuLFxuPiA9IFRJbnB1dCBleHRlbmRzIHN0cmluZ1tdID8gVFJldHVybltdIDogVElucHV0IGV4dGVuZHMgb2JqZWN0ID8geyBba2V5IGluIGtleW9mIFRJbnB1dF06IFRSZXR1cm4gfSA6IFRSZXR1cm47XG5cbmNvbnN0IGNhY2hlZCA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSW5wdXRzKGlucHV0OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG5cdGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gW2lucHV0XTtcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBsb2FkPFxuXHRURGF0YSxcblx0VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VExvYWRlckNvbnN0cnVjdG9yIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VERhdGE+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdH06IHsgZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPjsgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCB9ID0ge30sXG4pIHtcblx0cmV0dXJuICgpOiBBcnJheTxQcm9taXNlPGFueT4+IHwgbnVsbCA9PiB7XG5cdFx0Y29uc3QgdXJscyA9IG5vcm1hbGl6ZUlucHV0cyhpbnB1dHMoKSk7XG5cblx0XHRpZiAodXJscy5zb21lKCh1cmwpID0+IHVybC5pbmNsdWRlcygndW5kZWZpbmVkJykpKSByZXR1cm4gbnVsbDtcblxuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyAobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpKSgpO1xuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG5cdFx0XHRcdGNhY2hlZC5zZXQoXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPFREYXRhPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRsb2FkZXIubG9hZChcblx0XHRcdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2NlbmUnIGluIChkYXRhIGFzIE5ndEFueVJlY29yZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZGF0YSBhcyBOZ3RBbnlSZWNvcmQsIG1ha2VPYmplY3RHcmFwaCgoZGF0YSBhcyBOZ3RBbnlSZWNvcmQpWydzY2VuZSddKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdFx0XHRcdChlcnJvcikgPT4gcmVqZWN0KG5ldyBFcnJvcihgW05HVF0gQ291bGQgbm90IGxvYWQgJHt1cmx9OiAke2Vycm9yfWApKSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2FjaGVkLmdldCh1cmwpITtcblx0XHR9KTtcblx0fTtcbn1cblxuZnVuY3Rpb24gX2luamVjdExvYWRlcjxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcblx0VFJldHVybiA9IE5ndExvYWRlclJldHVyblR5cGU8VERhdGEsIFRMb2FkZXJDb25zdHJ1Y3Rvcj4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0e1xuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Qcm9ncmVzcyxcblx0XHRpbmplY3Rvcixcblx0fToge1xuXHRcdGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj47XG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRpbmplY3Rvcj86IEluamVjdG9yO1xuXHR9ID0ge30sXG4pOiBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgTmd0R0xURkxpa2UsIE5ndEdMVEZMaWtlICYgTmd0T2JqZWN0TWFwPj4gfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihfaW5qZWN0TG9hZGVyLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gc2lnbmFsPE5ndExvYWRlclJlc3VsdHM8XG5cdFx0XHRUVXJsLFxuXHRcdFx0Tmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIE5ndEdMVEZMaWtlLCBOZ3RHTFRGTGlrZSAmIE5ndE9iamVjdE1hcD5cblx0XHQ+IHwgbnVsbD4obnVsbCk7XG5cdFx0Y29uc3QgZWZmZWN0b3IgPSBsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7IGV4dGVuc2lvbnMsIG9uUHJvZ3Jlc3MgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxVcmxzID0gaW5wdXRzKCk7XG5cdFx0XHRjb25zdCBjYWNoZWRFZmZlY3QgPSBlZmZlY3RvcigpO1xuXHRcdFx0aWYgKGNhY2hlZEVmZmVjdCA9PT0gbnVsbCkge1xuXHRcdFx0XHRyZXNwb25zZS5zZXQobnVsbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRQcm9taXNlLmFsbChjYWNoZWRFZmZlY3QpLnRoZW4oKHJlc3VsdHMpID0+IHtcblx0XHRcdFx0XHRyZXNwb25zZS51cGRhdGUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob3JpZ2luYWxVcmxzKSkgcmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIG9yaWdpbmFsVXJscyA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHRzWzBdO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsVXJscyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5cy5yZWR1Y2UoXG5cdFx0XHRcdFx0XHRcdChyZXN1bHQsIGtleSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdChyZXN1bHQgYXMgTmd0QW55UmVjb3JkKVtrZXldID0gcmVzdWx0c1trZXlzLmluZGV4T2Yoa2V5KV07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e30gYXMgeyBba2V5IGluIGtleW9mIFRVcmxdOiBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgTmd0R0xURkxpa2UsIE5ndEdMVEZMaWtlICYgTmd0T2JqZWN0TWFwPiB9LFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzcG9uc2UuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuX2luamVjdExvYWRlci5wcmVsb2FkID0gPFxuXHRURGF0YSxcblx0VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VExvYWRlckNvbnN0cnVjdG9yIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VERhdGE+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj4sXG4pID0+IHtcblx0Y29uc3QgZWZmZWN0cyA9IGxvYWQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIHsgZXh0ZW5zaW9ucyB9KSgpO1xuXHRpZiAoZWZmZWN0cykge1xuXHRcdHZvaWQgUHJvbWlzZS5hbGwoZWZmZWN0cyk7XG5cdH1cbn07XG5cbl9pbmplY3RMb2FkZXIuZGVzdHJveSA9ICgpID0+IHtcblx0Y2FjaGVkLmNsZWFyKCk7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RJbmplY3RlZExvYWRlciA9IHR5cGVvZiBfaW5qZWN0TG9hZGVyO1xuZXhwb3J0IGNvbnN0IGluamVjdExvYWRlcjogTmd0SW5qZWN0ZWRMb2FkZXIgPSBfaW5qZWN0TG9hZGVyO1xuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHMUQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0QjdELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUV0QyxTQUFTLGVBQWUsQ0FBQyxLQUFpRDtJQUN6RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyxJQUFJLENBS1osd0JBQWtFLEVBQ2xFLE1BQWtCLEVBQ2xCLEVBQ0MsVUFBVSxFQUNWLFVBQVUsTUFDZ0csRUFBRTtJQUU3RyxPQUFPLEdBQStCLEVBQUU7UUFDdkMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFL0QsSUFBSSxNQUFNLEdBQWtCLGVBQWUsQ0FBQyxHQUFHLENBQUMs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QUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dDQUNkLE1BQXVCLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQ0FDM0QsT0FBTyxNQUFNLENBQUM7NEJBQ2YsQ0FBQyxFQUNELEVBQW1HLENBQ25HLENBQUM7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0osQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxhQUFhLENBQUMsT0FBTyxHQUFHLENBS3ZCLHdCQUFrRSxFQUNsRSxNQUFrQixFQUNsQixVQUFvRCxFQUNuRCxFQUFFO0lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN6RSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2IsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7QUFDRixDQUFDLENBQUM7QUFFRixhQUFhLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtJQUM1QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFzQixhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgU2lnbmFsLCBhZnRlck5leHRSZW5kZXIsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICduZ3h0ZW5zaW9uL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBMb2FkZXIsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0QW55UmVjb3JkIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOZ3RPYmplY3RNYXAsIG1ha2VPYmplY3RHcmFwaCB9IGZyb20gJy4vdXRpbHMvbWFrZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEdMVEZMaWtlID0geyBzY2VuZTogT2JqZWN0M0QgfTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RMb2FkZXI8VD4gZXh0ZW5kcyBMb2FkZXIge1xuXHRsb2FkKFxuXHRcdHVybDogc3RyaW5nLFxuXHRcdG9uTG9hZD86IChyZXN1bHQ6IFQpID0+IHZvaWQsXG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCxcblx0XHRvbkVycm9yPzogKGV2ZW50OiB1bmtub3duKSA9PiB2b2lkLFxuXHQpOiB1bmtub3duO1xuXHRsb2FkQXN5bmModXJsOiBzdHJpbmcsIG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQpOiBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJQcm90bzxUPiA9IG5ldyAoLi4uYXJnczogYW55KSA9PiBOZ3RMb2FkZXI8VCBleHRlbmRzIHVua25vd24gPyBhbnkgOiBUPjtcbmV4cG9ydCB0eXBlIE5ndExvYWRlclJldHVyblR5cGU8VCwgTCBleHRlbmRzIE5ndExvYWRlclByb3RvPFQ+PiA9IFQgZXh0ZW5kcyB1bmtub3duXG5cdD8gQXdhaXRlZDxSZXR1cm5UeXBlPEluc3RhbmNlVHlwZTxMPlsnbG9hZEFzeW5jJ10+PlxuXHQ6IFQ7XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlckV4dGVuc2lvbnM8VCBleHRlbmRzIHsgcHJvdG90eXBlOiBOZ3RMb2FkZXJQcm90bzxhbnk+IH0+ID0gKGxvYWRlcjogVFsncHJvdG90eXBlJ10pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RDb25kaXRpb25hbFR5cGU8Q2hpbGQsIFBhcmVudCwgVHJ1dGh5LCBGYWxzeT4gPSBDaGlsZCBleHRlbmRzIFBhcmVudCA/IFRydXRoeSA6IEZhbHN5O1xuZXhwb3J0IHR5cGUgTmd0QnJhbmNoaW5nUmV0dXJuPFQsIFBhcmVudCwgQ29lcmNlZD4gPSBOZ3RDb25kaXRpb25hbFR5cGU8VCwgUGFyZW50LCBDb2VyY2VkLCBUPjtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmVzdWx0czxcblx0VElucHV0IGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUUmV0dXJuLFxuPiA9IFRJbnB1dCBleHRlbmRzIHN0cmluZ1tdID8gVFJldHVybltdIDogVElucHV0IGV4dGVuZHMgb2JqZWN0ID8geyBba2V5IGluIGtleW9mIFRJbnB1dF06IFRSZXR1cm4gfSA6IFRSZXR1cm47XG5cbmNvbnN0IGNhY2hlZCA9IG5ldyBNYXAoKTtcbmNvbnN0IG1lbW9pemVkTG9hZGVycyA9IG5ldyBXZWFrTWFwKCk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUlucHV0cyhpbnB1dDogc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkgcmV0dXJuIGlucHV0O1xuXHRpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykgcmV0dXJuIFtpbnB1dF07XG5cdHJldHVybiBPYmplY3QudmFsdWVzKGlucHV0KTtcbn1cblxuZnVuY3Rpb24gbG9hZDxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcbj4oXG5cdGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeTogKGlucHV0czogc3RyaW5nW10pID0+IFRMb2FkZXJDb25zdHJ1Y3Rvcixcblx0aW5wdXRzOiAoKSA9PiBUVXJsLFxuXHR7XG5cdFx0ZXh0ZW5zaW9ucyxcblx0XHRvblByb2dyZXNzLFxuXHR9OiB7IGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj47IG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQgfSA9IHt9LFxuKSB7XG5cdHJldHVybiAoKTogQXJyYXk8UHJvbWlzZTxhbnk+PiB8IG51bGwgPT4ge1xuXHRcdGNvbnN0IHVybHMgPSBub3JtYWxpemVJbnB1dHMoaW5wdXRzKCkpO1xuXG5cdFx0aWYgKHVybHMuc29tZSgodXJsKSA9PiB1cmwuaW5jbHVkZXMoJ3VuZGVmaW5lZCcpKSkgcmV0dXJuIG51bGw7XG5cblx0XHRsZXQgbG9hZGVyOiBMb2FkZXI8VERhdGE+ID0gbWVtb2l6ZWRMb2FkZXJzLmdldChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnkodXJscykpO1xuXHRcdGlmICghbG9hZGVyKSB7XG5cdFx0XHRsb2FkZXIgPSBuZXcgKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSh1cmxzKSkoKTtcblx0XHRcdG1lbW9pemVkTG9hZGVycy5zZXQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpLCBsb2FkZXIpO1xuXHRcdH1cblxuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG5cdFx0XHRcdGNhY2hlZC5zZXQoXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPFREYXRhPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRsb2FkZXIubG9hZChcblx0XHRcdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2NlbmUnIGluIChkYXRhIGFzIE5ndEFueVJlY29yZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZGF0YSBhcyBOZ3RBbnlSZWNvcmQsIG1ha2VPYmplY3RHcmFwaCgoZGF0YSBhcyBOZ3RBbnlSZWNvcmQpWydzY2VuZSddKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdFx0XHRcdChlcnJvcikgPT4gcmVqZWN0KG5ldyBFcnJvcihgW05HVF0gQ291bGQgbm90IGxvYWQgJHt1cmx9OiAkeyhlcnJvciBhcyBFcnJvckV2ZW50KT8ubWVzc2FnZX1gKSksXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhY2hlZC5nZXQodXJsKSE7XG5cdFx0fSk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIF9pbmplY3RMb2FkZXI8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG5cdFRSZXR1cm4gPSBOZ3RMb2FkZXJSZXR1cm5UeXBlPFREYXRhLCBUTG9hZGVyQ29uc3RydWN0b3I+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdFx0aW5qZWN0b3IsXG5cdH06IHtcblx0XHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+O1xuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIE5ndEdMVEZMaWtlLCBOZ3RHTFRGTGlrZSAmIE5ndE9iamVjdE1hcD4+IHwgbnVsbD4ge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoX2luamVjdExvYWRlciwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gc2lnbmFsPE5ndExvYWRlclJlc3VsdHM8XG5cdFx0XHRUVXJsLFxuXHRcdFx0Tmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIE5ndEdMVEZMaWtlLCBOZ3RHTFRGTGlrZSAmIE5ndE9iamVjdE1hcD5cblx0XHQ+IHwgbnVsbD4obnVsbCk7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZWZmZWN0b3IgPSBsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7IGV4dGVuc2lvbnMsIG9uUHJvZ3Jlc3MgfSk7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxVcmxzID0gaW5wdXRzKCk7XG5cdFx0XHRcdGNvbnN0IGNhY2hlZEVmZmVjdCA9IGVmZmVjdG9yKCk7XG5cdFx0XHRcdGlmIChjYWNoZWRFZmZlY3QgPT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXNwb25zZS5zZXQobnVsbCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0UHJvbWlzZS5hbGwoY2FjaGVkRWZmZWN0KS50aGVuKChyZXN1bHRzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZS51cGRhdGUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvcmlnaW5hbFVybHMpKSByZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBvcmlnaW5hbFVybHMgPT09ICdzdHJpbmcnKSByZXR1cm4gcmVzdWx0c1swXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsVXJscyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLnJlZHVjZShcblx0XHRcdFx0XHRcdFx0XHQocmVzdWx0LCBrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdChyZXN1bHQgYXMgTmd0QW55UmVjb3JkKVtrZXldID0gcmVzdWx0c1trZXlzLmluZGV4T2Yoa2V5KV07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e30gYXMgeyBba2V5IGluIGtleW9mIFRVcmxdOiBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgTmd0R0xURkxpa2UsIE5ndEdMVEZMaWtlICYgTmd0T2JqZWN0TWFwPiB9LFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3BvbnNlLmFzUmVhZG9ubHkoKTtcblx0fSk7XG59XG5cbl9pbmplY3RMb2FkZXIucHJlbG9hZCA9IDxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcbj4oXG5cdGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeTogKGlucHV0czogc3RyaW5nW10pID0+IFRMb2FkZXJDb25zdHJ1Y3Rvcixcblx0aW5wdXRzOiAoKSA9PiBUVXJsLFxuXHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+LFxuKSA9PiB7XG5cdGNvbnN0IGVmZmVjdHMgPSBsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7IGV4dGVuc2lvbnMgfSkoKTtcblx0aWYgKGVmZmVjdHMpIHtcblx0XHR2b2lkIFByb21pc2UuYWxsKGVmZmVjdHMpO1xuXHR9XG59O1xuXG5faW5qZWN0TG9hZGVyLmRlc3Ryb3kgPSAoKSA9PiB7XG5cdGNhY2hlZC5jbGVhcigpO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0SW5qZWN0ZWRMb2FkZXIgPSB0eXBlb2YgX2luamVjdExvYWRlcjtcbmV4cG9ydCBjb25zdCBpbmplY3RMb2FkZXI6IE5ndEluamVjdGVkTG9hZGVyID0gX2luamVjdExvYWRlcjtcbiJdfQ==
@@ -1,11 +1,10 @@
1
1
  import { afterNextRender, ChangeDetectionStrategy, Component, computed, contentChild, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, Directive, inject, Injector, input, signal, SkipSelf, TemplateRef, untracked, viewChild, ViewContainerRef, } from '@angular/core';
2
2
  import { injectAutoEffect } from 'ngxtension/auto-effect';
3
- import { createInjectionToken } from 'ngxtension/create-injection-token';
4
3
  import { Raycaster, Scene, Vector2, Vector3 } from 'three';
5
- import { prepare } from './instance';
4
+ import { getLocalState, prepare } from './instance';
6
5
  import { injectNgtRef } from './ref';
7
6
  import { SPECIAL_INTERNAL_ADD_COMMENT } from './renderer/constants';
8
- import { injectNgtStore, NGT_STORE } from './store';
7
+ import { injectNgtStore, provideNgtStore } from './store';
9
8
  import { injectBeforeRender } from './utils/before-render';
10
9
  import { is } from './utils/is';
11
10
  import { signalStore } from './utils/signal-store';
@@ -24,21 +23,6 @@ const privateKeys = [
24
23
  'size',
25
24
  'viewport',
26
25
  ];
27
- const [, providePortalStore] = createInjectionToken((parentStore) => {
28
- const parentState = parentStore.snapshot;
29
- const pointer = new Vector2();
30
- const raycaster = new Raycaster();
31
- return signalStore(({ update }) => {
32
- return {
33
- ...parentState,
34
- pointer,
35
- raycaster,
36
- previousRoot: parentStore,
37
- // Layers are allowed to override events
38
- setEvents: (events) => update((state) => ({ ...state, events: { ...state.events, ...events } })),
39
- };
40
- });
41
- }, { isRoot: false, token: NGT_STORE, deps: [[new SkipSelf(), NGT_STORE]] });
42
26
  export class NgtPortalBeforeRender {
43
27
  constructor() {
44
28
  this.portalStore = injectNgtStore();
@@ -95,11 +79,11 @@ export class NgtPortalContent {
95
79
  }
96
80
  }
97
81
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtPortalContent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ViewContainerRef, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
98
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtPortalContent, isStandalone: true, selector: "ng-template[ngtPortalContent]", ngImport: i0 }); }
82
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtPortalContent, isStandalone: true, selector: "ng-template[portalContent]", ngImport: i0 }); }
99
83
  }
100
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtPortalContent, decorators: [{
101
85
  type: Directive,
102
- args: [{ selector: 'ng-template[ngtPortalContent]', standalone: true }]
86
+ args: [{ selector: 'ng-template[portalContent]', standalone: true }]
103
87
  }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ViewContainerRef, decorators: [{
104
88
  type: SkipSelf
105
89
  }] }] });
@@ -120,14 +104,39 @@ export class NgtPortal {
120
104
  this.renderAutoBeforeRender = computed(() => this.portalRendered() && this.autoRender());
121
105
  this.parentScene = this.parentStore.get('scene');
122
106
  this.parentCamera = this.parentStore.get('camera');
107
+ this.raycaster = new Raycaster();
108
+ this.pointer = new Vector2();
123
109
  afterNextRender(() => {
124
110
  const parentState = this.parentStore.snapshot;
125
- const [container, { events = {}, size = {}, ...rest } = {}] = [this.container(), this.state()];
111
+ const [containerRef, state, autoRender, autoRenderPriority] = [
112
+ this.container(),
113
+ this.state(),
114
+ this.autoRender(),
115
+ this.autoRenderPriority(),
116
+ ];
117
+ let stateFromInput = state;
118
+ if (!stateFromInput && autoRender) {
119
+ stateFromInput = { events: { priority: autoRenderPriority + 1 } };
120
+ }
121
+ const { events = {}, size = {}, ...rest } = stateFromInput || {};
122
+ let container = is.ref(containerRef) ? containerRef.nativeElement : containerRef;
123
+ if (!is.instance(container)) {
124
+ container = prepare(container);
125
+ }
126
+ const localState = getLocalState(container);
127
+ if (localState && !localState.store) {
128
+ localState.store = this.portalStore;
129
+ }
126
130
  this.portalStore.update({
127
- scene: (is.ref(container) ? container.nativeElement : container),
131
+ ...parentState,
132
+ scene: container,
133
+ raycaster: this.raycaster,
134
+ pointer: this.pointer,
135
+ previousRoot: this.parentStore,
128
136
  events: { ...parentState.events, ...events },
129
137
  size: { ...parentState.size, ...size },
130
138
  ...rest,
139
+ setEvents: (events) => this.portalStore.update((state) => ({ ...state, events: { ...state.events, ...events } })),
131
140
  });
132
141
  this.autoEffect(() => {
133
142
  const previous = this.parentStore.state();
@@ -136,7 +145,9 @@ export class NgtPortal {
136
145
  untracked(() => {
137
146
  const portalView = this.portalContentAnchor().createEmbeddedView(this.portalContentTemplate());
138
147
  portalView.detectChanges();
139
- this.destroyRef.onDestroy(portalView.destroy.bind(portalView));
148
+ this.destroyRef.onDestroy(() => {
149
+ portalView.destroy();
150
+ });
140
151
  });
141
152
  this.portalRendered.set(true);
142
153
  });
@@ -169,7 +180,7 @@ export class NgtPortal {
169
180
  };
170
181
  }
171
182
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtPortal, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, autoRender: { classPropertyName: "autoRender", publicName: "autoRender", isSignal: true, isRequired: false, transformFunction: null }, autoRenderPriority: { classPropertyName: "autoRenderPriority", publicName: "autoRenderPriority", isSignal: true, isRequired: false, transformFunction: null } }, providers: [providePortalStore()], queries: [{ propertyName: "portalContentTemplate", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "portalContentAnchor", first: true, predicate: ["portalContentAnchor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
183
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtPortal, isStandalone: true, selector: "ngt-portal", inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null }, camera: { classPropertyName: "camera", publicName: "camera", isSignal: true, isRequired: false, transformFunction: null }, state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: false, transformFunction: null }, autoRender: { classPropertyName: "autoRender", publicName: "autoRender", isSignal: true, isRequired: false, transformFunction: null }, autoRenderPriority: { classPropertyName: "autoRenderPriority", publicName: "autoRenderPriority", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideNgtStore(signalStore({}))], queries: [{ propertyName: "portalContentTemplate", first: true, predicate: NgtPortalContent, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "portalContentAnchor", first: true, predicate: ["portalContentAnchor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
173
184
  <ng-container #portalContentAnchor>
174
185
  @if (renderAutoBeforeRender()) {
175
186
  <ngt-portal-before-render
@@ -198,8 +209,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
198
209
  </ng-container>
199
210
  `,
200
211
  imports: [NgtPortalBeforeRender],
201
- providers: [providePortalStore()],
212
+ providers: [provideNgtStore(signalStore({}))],
202
213
  changeDetection: ChangeDetectionStrategy.OnPush,
203
214
  }]
204
215
  }], ctorParameters: () => [] });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9ydGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsU0FBUyxFQUVULE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBb0IsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxTQUFTLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFOUMsTUFBTSxXQUFXLEdBQUc7SUFDbkIsS0FBSztJQUNMLEtBQUs7SUFDTCxR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LFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRTtZQUN4RCxHQUFHLGVBQWU7U0FDTixDQUFDO0lBQ2YsQ0FBQzs4R0F2RlcsU0FBUztrR0FBVCxTQUFTLGt1QkFIVixDQUFDLGtCQUFrQixFQUFFLENBQUMsNkVBa0JhLGdCQUFnQiwyQkFBVSxXQUFXLG9KQUNYLGdCQUFnQiw2Q0EvQjlFOzs7Ozs7Ozs7O0VBVVQsNERBN0RXLHFCQUFxQjs7MkZBa0VyQixTQUFTO2tCQWxCckIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7OztFQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNoQyxTQUFTLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRjb250ZW50Q2hpbGQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0RWxlbWVudFJlZixcblx0aW5qZWN0LFxuXHRJbmplY3Rvcixcblx0aW5wdXQsXG5cdHNpZ25hbCxcblx0U2tpcFNlbGYsXG5cdFRlbXBsYXRlUmVmLFxuXHR1bnRyYWNrZWQsXG5cdHZpZXdDaGlsZCxcblx0Vmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBDYW1lcmEsIE9iamVjdDNELCBSYXljYXN0ZXIsIFNjZW5lLCBWZWN0b3IyLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0RXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHsgcHJlcGFyZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmIH0gZnJvbSAnLi9yZWYnO1xuaW1wb3J0IHsgU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVCB9IGZyb20gJy4vcmVuZGVyZXIvY29uc3RhbnRzJztcbmltcG9ydCB7IGluamVjdE5ndFN0b3JlLCBOR1RfU1RPUkUsIE5ndFNpemUsIE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBpbmplY3RCZWZvcmVSZW5kZXIgfSBmcm9tICcuL3V0aWxzL2JlZm9yZS1yZW5kZXInO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IE5ndFNpZ25hbFN0b3JlLCBzaWduYWxTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2lnbmFsLXN0b3JlJztcbmltcG9ydCB7IHVwZGF0ZUNhbWVyYSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlJztcblxuY29uc3QgcHJpdmF0ZUtleXMgPSBbXG5cdCdnZXQnLFxuXHQnc2V0Jyxcblx0J3NlbGVjdCcsXG5cdCdzZXRTaXplJyxcblx0J3NldERwcicsXG5cdCdzZXRGcmFtZWxvb3AnLFxuXHQnZXZlbnRzJyxcblx0J2ludmFsaWRhdGUnLFxuXHQnYWR2YW5jZScsXG5cdCdzaXplJyxcblx0J3ZpZXdwb3J0Jyxcbl0gYXMgY29uc3Q7XG50eXBlIFByaXZhdGVLZXlzID0gKHR5cGVvZiBwcml2YXRlS2V5cylbbnVtYmVyXTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RQb3J0YWxJbnB1dHMge1xuXHRjb250YWluZXI6IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q7XG5cdGNhbWVyYTogRWxlbWVudFJlZjxDYW1lcmE+IHwgQ2FtZXJhO1xuXHRzdGF0ZTogUGFydGlhbDxcblx0XHRPbWl0PE5ndFN0YXRlLCBQcml2YXRlS2V5cz4gJiB7XG5cdFx0XHRldmVudHM6IFBhcnRpYWw8UGljazxOZ3RFdmVudE1hbmFnZXI8YW55PiwgJ2VuYWJsZWQnIHwgJ3ByaW9yaXR5JyB8ICdjb21wdXRlJyB8ICdjb25uZWN0ZWQnPj47XG5cdFx0XHRzaXplOiBOZ3RTaXplO1xuXHRcdH1cblx0Pjtcbn1cblxuY29uc3QgWywgcHJvdmlkZVBvcnRhbFN0b3JlXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKFxuXHQocGFyZW50U3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPikgPT4ge1xuXHRcdGNvbnN0IHBhcmVudFN0YXRlID0gcGFyZW50U3RvcmUuc25hcHNob3Q7XG5cdFx0Y29uc3QgcG9pbnRlciA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3QgcmF5Y2FzdGVyID0gbmV3IFJheWNhc3RlcigpO1xuXHRcdHJldHVybiBzaWduYWxTdG9yZTxOZ3RTdGF0ZT4oKHsgdXBkYXRlIH0pID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdC4uLnBhcmVudFN0YXRlLFxuXHRcdFx0XHRwb2ludGVyLFxuXHRcdFx0XHRyYXljYXN0ZXIsXG5cdFx0XHRcdHByZXZpb3VzUm9vdDogcGFyZW50U3RvcmUsXG5cdFx0XHRcdC8vIExheWVycyBhcmUgYWxsb3dlZCB0byBvdmVycmlkZSBldmVudHNcblx0XHRcdFx0c2V0RXZlbnRzOiAoZXZlbnRzKSA9PiB1cGRhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSwgZXZlbnRzOiB7IC4uLnN0YXRlLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpLFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCB0b2tlbjogTkdUX1NUT1JFLCBkZXBzOiBbW25ldyBTa2lwU2VsZigpLCBOR1RfU1RPUkVdXSB9LFxuKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0LXBvcnRhbC1iZWZvcmUtcmVuZGVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8IS0tIFdpdGhvdXQgYW4gZWxlbWVudCB0aGF0IHJlY2VpdmVzIHBvaW50ZXIgZXZlbnRzIHN0YXRlLnBvaW50ZXIgd2lsbCBhbHdheXMgYmUgMC8wIC0tPlxuXHRcdDxuZ3QtZ3JvdXAgKHBvaW50ZXJvdmVyKT1cIm9uUG9pbnRlck92ZXIoKVwiIGF0dGFjaD1cIm5vbmVcIiAvPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndFBvcnRhbEJlZm9yZVJlbmRlciB7XG5cdHByaXZhdGUgcG9ydGFsU3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuXHRyZW5kZXJQcmlvcml0eSA9IGlucHV0KDEpO1xuXHRwYXJlbnRTY2VuZSA9IGlucHV0LnJlcXVpcmVkPFNjZW5lPigpO1xuXHRwYXJlbnRDYW1lcmEgPSBpbnB1dC5yZXF1aXJlZDxDYW1lcmE+KCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGxldCBvbGRDbGVhcjogYm9vbGVhbjtcblx0XHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgZ2wsIHNjZW5lLCBjYW1lcmEgfSA9IHRoaXMucG9ydGFsU3RvcmUuZ2V0KCk7XG5cdFx0XHRcdFx0b2xkQ2xlYXIgPSBnbC5hdXRvQ2xlYXI7XG5cdFx0XHRcdFx0aWYgKHRoaXMucmVuZGVyUHJpb3JpdHkoKSA9PT0gMSkge1xuXHRcdFx0XHRcdFx0Ly8gY2xlYXIgc2NlbmUgYW5kIHJlbmRlciB3aXRoIGRlZmF1bHRcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IHRydWU7XG5cdFx0XHRcdFx0XHRnbC5yZW5kZXIodGhpcy5wYXJlbnRTY2VuZSgpLCB0aGlzLnBhcmVudENhbWVyYSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGlzYWJsZSBjbGVhbmluZ1xuXHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IGZhbHNlO1xuXHRcdFx0XHRcdGdsLmNsZWFyRGVwdGgoKTtcblx0XHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdFx0Ly8gcmVzdG9yZVxuXHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IG9sZENsZWFyO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IHByaW9yaXR5OiB0aGlzLnJlbmRlclByaW9yaXR5KCksIGluamVjdG9yOiB0aGlzLmluamVjdG9yIH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25Qb2ludGVyT3ZlcigpIHtcblx0XHQvKiBub29wICovXG5cdH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbbmd0UG9ydGFsQ29udGVudF0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UG9ydGFsQ29udGVudCB7XG5cdGNvbnN0cnVjdG9yKHZjcjogVmlld0NvbnRhaW5lclJlZiwgQFNraXBTZWxmKCkgcGFyZW50VmNyOiBWaWV3Q29udGFpbmVyUmVmKSB7XG5cdFx0Y29uc3QgY29tbWVudE5vZGUgPSB2Y3IuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXHRcdGlmIChjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSkge1xuXHRcdFx0Y29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0ocGFyZW50VmNyLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRkZWxldGUgY29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG5cdFx0fVxuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1wb3J0YWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy1jb250YWluZXIgI3BvcnRhbENvbnRlbnRBbmNob3I+XG5cdFx0XHRAaWYgKHJlbmRlckF1dG9CZWZvcmVSZW5kZXIoKSkge1xuXHRcdFx0XHQ8bmd0LXBvcnRhbC1iZWZvcmUtcmVuZGVyXG5cdFx0XHRcdFx0W3JlbmRlclByaW9yaXR5XT1cImF1dG9SZW5kZXJQcmlvcml0eSgpXCJcblx0XHRcdFx0XHRbcGFyZW50U2NlbmVdPVwicGFyZW50U2NlbmVcIlxuXHRcdFx0XHRcdFtwYXJlbnRDYW1lcmFdPVwicGFyZW50Q2FtZXJhXCJcblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0YCxcblx0aW1wb3J0czogW05ndFBvcnRhbEJlZm9yZVJlbmRlcl0sXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVQb3J0YWxTdG9yZSgpXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndFBvcnRhbCB7XG5cdGNvbnRhaW5lciA9IGlucHV0PEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q+KGluamVjdE5ndFJlZihwcmVwYXJlKG5ldyBTY2VuZSgpKSkpO1xuXHRjYW1lcmEgPSBpbnB1dDxFbGVtZW50UmVmPENhbWVyYT4gfCBDYW1lcmE+KCk7XG5cdHN0YXRlID0gaW5wdXQ8XG5cdFx0UGFydGlhbDxcblx0XHRcdE9taXQ8Tmd0U3RhdGUsIFByaXZhdGVLZXlzPiAmIHtcblx0XHRcdFx0ZXZlbnRzOiBQYXJ0aWFsPFBpY2s8Tmd0RXZlbnRNYW5hZ2VyPGFueT4sICdlbmFibGVkJyB8ICdwcmlvcml0eScgfCAnY29tcHV0ZScgfCAnY29ubmVjdGVkJz4+O1xuXHRcdFx0XHRzaXplOiBOZ3RTaXplO1xuXHRcdFx0fVxuXHRcdD5cblx0PigpO1xuXG5cdGF1dG9SZW5kZXIgPSBpbnB1dChmYWxzZSk7XG5cdGF1dG9SZW5kZXJQcmlvcml0eSA9IGlucHV0KDEpO1xuXG5cdHBvcnRhbENvbnRlbnRUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZC5yZXF1aXJlZChOZ3RQb3J0YWxDb250ZW50LCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pO1xuXHRwb3J0YWxDb250ZW50QW5jaG9yID0gdmlld0NoaWxkLnJlcXVpcmVkKCdwb3J0YWxDb250ZW50QW5jaG9yJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pO1xuXG5cdHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblx0cHJpdmF0ZSBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRwcml2YXRlIHBhcmVudFN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoeyBza2lwU2VsZjogdHJ1ZSB9KTtcblx0cHJpdmF0ZSBwb3J0YWxTdG9yZSA9IGluamVjdE5ndFN0b3JlKHsgc2VsZjogdHJ1ZSB9KTtcblxuXHRwcml2YXRlIHBvcnRhbFJlbmRlcmVkID0gc2lnbmFsKGZhbHNlKTtcblxuXHRwcm90ZWN0ZWQgcmVuZGVyQXV0b0JlZm9yZVJlbmRlciA9IGNvbXB1dGVkKCgpID0+IHRoaXMucG9ydGFsUmVuZGVyZWQoKSAmJiB0aGlzLmF1dG9SZW5kZXIoKSk7XG5cdHByb3RlY3RlZCBwYXJlbnRTY2VuZSA9IHRoaXMucGFyZW50U3RvcmUuZ2V0KCdzY2VuZScpO1xuXHRwcm90ZWN0ZWQgcGFyZW50Q2FtZXJhID0gdGhpcy5wYXJlbnRTdG9yZS5nZXQoJ2NhbWVyYScpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBwYXJlbnRTdGF0ZSA9IHRoaXMucGFyZW50U3RvcmUuc25hcHNob3Q7XG5cdFx0XHRjb25zdCBbY29udGFpbmVyLCB7IGV2ZW50cyA9IHt9LCBzaXplID0ge30sIC4uLnJlc3QgfSA9IHt9XSA9IFt0aGlzLmNvbnRhaW5lcigpLCB0aGlzLnN0YXRlKCldO1xuXG5cdFx0XHR0aGlzLnBvcnRhbFN0b3JlLnVwZGF0ZSh7XG5cdFx0XHRcdHNjZW5lOiAoaXMucmVmKGNvbnRhaW5lcikgPyBjb250YWluZXIubmF0aXZlRWxlbWVudCA6IGNvbnRhaW5lcikgYXMgU2NlbmUsXG5cdFx0XHRcdGV2ZW50czogeyAuLi5wYXJlbnRTdGF0ZS5ldmVudHMsIC4uLmV2ZW50cyB9LFxuXHRcdFx0XHRzaXplOiB7IC4uLnBhcmVudFN0YXRlLnNpemUsIC4uLnNpemUgfSxcblx0XHRcdFx0Li4ucmVzdCxcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMucGFyZW50U3RvcmUuc3RhdGUoKTtcblx0XHRcdFx0dGhpcy5wb3J0YWxTdG9yZS51cGRhdGUoKHN0YXRlKSA9PiB0aGlzLmluamVjdChwcmV2aW91cywgc3RhdGUpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwb3J0YWxWaWV3ID0gdGhpcy5wb3J0YWxDb250ZW50QW5jaG9yKCkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucG9ydGFsQ29udGVudFRlbXBsYXRlKCkpO1xuXHRcdFx0XHRwb3J0YWxWaWV3LmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0dGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveShwb3J0YWxWaWV3LmRlc3Ryb3kuYmluZChwb3J0YWxWaWV3KSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5wb3J0YWxSZW5kZXJlZC5zZXQodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGluamVjdChyb290U3RhdGU6IE5ndFN0YXRlLCBpbmplY3RTdGF0ZTogTmd0U3RhdGUpIHtcblx0XHRjb25zdCBpbnRlcnNlY3Q6IFBhcnRpYWw8Tmd0U3RhdGU+ID0geyAuLi5yb290U3RhdGUgfTtcblxuXHRcdE9iamVjdC5rZXlzKGludGVyc2VjdCkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHByaXZhdGVLZXlzLmluY2x1ZGVzKGtleSBhcyBQcml2YXRlS2V5cykgfHxcblx0XHRcdFx0cm9vdFN0YXRlW2tleSBhcyBrZXlvZiBOZ3RTdGF0ZV0gIT09IGluamVjdFN0YXRlW2tleSBhcyBrZXlvZiBOZ3RTdGF0ZV1cblx0XHRcdCkge1xuXHRcdFx0XHRkZWxldGUgaW50ZXJzZWN0W2tleSBhcyBrZXlvZiBOZ3RTdGF0ZV07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBjb250YWluZXIgPSB1bnRyYWNrZWQodGhpcy5jb250YWluZXIpO1xuXHRcdGNvbnN0IHsgc2l6ZSwgZXZlbnRzLCAuLi5yZXN0SW5wdXRzU3RhdGUgfSA9IHVudHJhY2tlZCh0aGlzLnN0YXRlKSB8fCB7fTtcblxuXHRcdGxldCB2aWV3cG9ydCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoaW5qZWN0U3RhdGUgJiYgc2l6ZSkge1xuXHRcdFx0Y29uc3QgY2FtZXJhID0gaW5qZWN0U3RhdGUuY2FtZXJhO1xuXHRcdFx0dmlld3BvcnQgPSByb290U3RhdGUudmlld3BvcnQuZ2V0Q3VycmVudFZpZXdwb3J0KGNhbWVyYSwgbmV3IFZlY3RvcjMoKSwgc2l6ZSk7XG5cdFx0XHRpZiAoY2FtZXJhICE9PSByb290U3RhdGUuY2FtZXJhKSB1cGRhdGVDYW1lcmEoY2FtZXJhLCBzaXplKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uaW50ZXJzZWN0LFxuXHRcdFx0c2NlbmU6IGlzLnJlZihjb250YWluZXIpID8gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQgOiBjb250YWluZXIsXG5cdFx0XHRwcmV2aW91c1Jvb3Q6IHRoaXMucGFyZW50U3RvcmUsXG5cdFx0XHRldmVudHM6IHsgLi4ucm9vdFN0YXRlLmV2ZW50cywgLi4uKGluamVjdFN0YXRlPy5ldmVudHMgfHwge30pLCAuLi5ldmVudHMgfSxcblx0XHRcdHNpemU6IHsgLi4ucm9vdFN0YXRlLnNpemUsIC4uLnNpemUgfSxcblx0XHRcdHZpZXdwb3J0OiB7IC4uLnJvb3RTdGF0ZS52aWV3cG9ydCwgLi4uKHZpZXdwb3J0IHx8IHt9KSB9LFxuXHRcdFx0Li4ucmVzdElucHV0c1N0YXRlLFxuXHRcdH0gYXMgTmd0U3RhdGU7XG5cdH1cbn1cbiJdfQ==
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9ydGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsU0FBUyxFQUVULE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2hCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBb0IsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDckMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBcUIsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFOUMsTUFBTSxXQUFXLEdBQUc7SUFDbkIsS0FBSztJQUNMLEtBQUs7SUFDTCxRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixjQUFjO0lB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UyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM5RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDOUIsTUFBTSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFO1lBQzFFLElBQUksRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksRUFBRTtZQUNwQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRTtZQUN4RCxHQUFHLGVBQWU7U0FDTixDQUFDO0lBQ2YsQ0FBQzs4R0F6SFcsU0FBUztrR0FBVCxTQUFTLGt1QkFIVixDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyw2RUFrQlQsZ0JBQWdCLDJCQUFVLFdBQVcsb0pBQ1gsZ0JBQWdCLDZDQS9COUU7Ozs7Ozs7Ozs7RUFVVCw0REE3RFcscUJBQXFCOzsyRkFrRXJCLFNBQVM7a0JBbEJyQixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7O0VBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMscUJBQXFCLENBQUM7b0JBQ2hDLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdkQsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Y29udGVudENoaWxkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHREZXN0cm95UmVmLFxuXHREaXJlY3RpdmUsXG5cdEVsZW1lbnRSZWYsXG5cdGluamVjdCxcblx0SW5qZWN0b3IsXG5cdGlucHV0LFxuXHRzaWduYWwsXG5cdFNraXBTZWxmLFxuXHRUZW1wbGF0ZVJlZixcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgQ2FtZXJhLCBPYmplY3QzRCwgUmF5Y2FzdGVyLCBTY2VuZSwgVmVjdG9yMiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndEV2ZW50TWFuYWdlciB9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUsIHByZXBhcmUgfSBmcm9tICcuL2luc3RhbmNlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiB9IGZyb20gJy4vcmVmJztcbmltcG9ydCB7IFNQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlQgfSBmcm9tICcuL3JlbmRlcmVyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpbmplY3ROZ3RTdG9yZSwgTmd0U2l6ZSwgTmd0U3RhdGUsIHByb3ZpZGVOZ3RTdG9yZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHsgaW5qZWN0QmVmb3JlUmVuZGVyIH0gZnJvbSAnLi91dGlscy9iZWZvcmUtcmVuZGVyJztcbmltcG9ydCB7IGlzIH0gZnJvbSAnLi91dGlscy9pcyc7XG5pbXBvcnQgeyBzaWduYWxTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2lnbmFsLXN0b3JlJztcbmltcG9ydCB7IHVwZGF0ZUNhbWVyYSB9IGZyb20gJy4vdXRpbHMvdXBkYXRlJztcblxuY29uc3QgcHJpdmF0ZUtleXMgPSBbXG5cdCdnZXQnLFxuXHQnc2V0Jyxcblx0J3NlbGVjdCcsXG5cdCdzZXRTaXplJyxcblx0J3NldERwcicsXG5cdCdzZXRGcmFtZWxvb3AnLFxuXHQnZXZlbnRzJyxcblx0J2ludmFsaWRhdGUnLFxuXHQnYWR2YW5jZScsXG5cdCdzaXplJyxcblx0J3ZpZXdwb3J0Jyxcbl0gYXMgY29uc3Q7XG50eXBlIFByaXZhdGVLZXlzID0gKHR5cGVvZiBwcml2YXRlS2V5cylbbnVtYmVyXTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RQb3J0YWxJbnB1dHMge1xuXHRjb250YWluZXI6IEVsZW1lbnRSZWY8T2JqZWN0M0Q+IHwgT2JqZWN0M0Q7XG5cdGNhbWVyYTogRWxlbWVudFJlZjxDYW1lcmE+IHwgQ2FtZXJhO1xuXHRzdGF0ZTogUGFydGlhbDxcblx0XHRPbWl0PE5ndFN0YXRlLCBQcml2YXRlS2V5cz4gJiB7XG5cdFx0XHRldmVudHM6IFBhcnRpYWw8UGljazxOZ3RFdmVudE1hbmFnZXI8YW55PiwgJ2VuYWJsZWQnIHwgJ3ByaW9yaXR5JyB8ICdjb21wdXRlJyB8ICdjb25uZWN0ZWQnPj47XG5cdFx0XHRzaXplOiBOZ3RTaXplO1xuXHRcdH1cblx0Pjtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0LXBvcnRhbC1iZWZvcmUtcmVuZGVyJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8IS0tIFdpdGhvdXQgYW4gZWxlbWVudCB0aGF0IHJlY2VpdmVzIHBvaW50ZXIgZXZlbnRzIHN0YXRlLnBvaW50ZXIgd2lsbCBhbHdheXMgYmUgMC8wIC0tPlxuXHRcdDxuZ3QtZ3JvdXAgKHBvaW50ZXJvdmVyKT1cIm9uUG9pbnRlck92ZXIoKVwiIGF0dGFjaD1cIm5vbmVcIiAvPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndFBvcnRhbEJlZm9yZVJlbmRlciB7XG5cdHByaXZhdGUgcG9ydGFsU3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuXHRyZW5kZXJQcmlvcml0eSA9IGlucHV0KDEpO1xuXHRwYXJlbnRTY2VuZSA9IGlucHV0LnJlcXVpcmVkPFNjZW5lPigpO1xuXHRwYXJlbnRDYW1lcmEgPSBpbnB1dC5yZXF1aXJlZDxDYW1lcmE+KCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGxldCBvbGRDbGVhcjogYm9vbGVhbjtcblx0XHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgZ2wsIHNjZW5lLCBjYW1lcmEgfSA9IHRoaXMucG9ydGFsU3RvcmUuZ2V0KCk7XG5cdFx0XHRcdFx0b2xkQ2xlYXIgPSBnbC5hdXRvQ2xlYXI7XG5cdFx0XHRcdFx0aWYgKHRoaXMucmVuZGVyUHJpb3JpdHkoKSA9PT0gMSkge1xuXHRcdFx0XHRcdFx0Ly8gY2xlYXIgc2NlbmUgYW5kIHJlbmRlciB3aXRoIGRlZmF1bHRcblx0XHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IHRydWU7XG5cdFx0XHRcdFx0XHRnbC5yZW5kZXIodGhpcy5wYXJlbnRTY2VuZSgpLCB0aGlzLnBhcmVudENhbWVyYSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGlzYWJsZSBjbGVhbmluZ1xuXHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IGZhbHNlO1xuXHRcdFx0XHRcdGdsLmNsZWFyRGVwdGgoKTtcblx0XHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdFx0Ly8gcmVzdG9yZVxuXHRcdFx0XHRcdGdsLmF1dG9DbGVhciA9IG9sZENsZWFyO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IHByaW9yaXR5OiB0aGlzLnJlbmRlclByaW9yaXR5KCksIGluamVjdG9yOiB0aGlzLmluamVjdG9yIH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0b25Qb2ludGVyT3ZlcigpIHtcblx0XHQvKiBub29wICovXG5cdH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcG9ydGFsQ29udGVudF0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0UG9ydGFsQ29udGVudCB7XG5cdGNvbnN0cnVjdG9yKHZjcjogVmlld0NvbnRhaW5lclJlZiwgQFNraXBTZWxmKCkgcGFyZW50VmNyOiBWaWV3Q29udGFpbmVyUmVmKSB7XG5cdFx0Y29uc3QgY29tbWVudE5vZGUgPSB2Y3IuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXHRcdGlmIChjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSkge1xuXHRcdFx0Y29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF0ocGFyZW50VmNyLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRkZWxldGUgY29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG5cdFx0fVxuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1wb3J0YWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy1jb250YWluZXIgI3BvcnRhbENvbnRlbnRBbmNob3I+XG5cdFx0XHRAaWYgKHJlbmRlckF1dG9CZWZvcmVSZW5kZXIoKSkge1xuXHRcdFx0XHQ8bmd0LXBvcnRhbC1iZWZvcmUtcmVuZGVyXG5cdFx0XHRcdFx0W3JlbmRlclByaW9yaXR5XT1cImF1dG9SZW5kZXJQcmlvcml0eSgpXCJcblx0XHRcdFx0XHRbcGFyZW50U2NlbmVdPVwicGFyZW50U2NlbmVcIlxuXHRcdFx0XHRcdFtwYXJlbnRDYW1lcmFdPVwicGFyZW50Q2FtZXJhXCJcblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHQ8L25nLWNvbnRhaW5lcj5cblx0YCxcblx0aW1wb3J0czogW05ndFBvcnRhbEJlZm9yZVJlbmRlcl0sXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVOZ3RTdG9yZShzaWduYWxTdG9yZTxOZ3RTdGF0ZT4oe30pKV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RQb3J0YWwge1xuXHRjb250YWluZXIgPSBpbnB1dDxFbGVtZW50UmVmPE9iamVjdDNEPiB8IE9iamVjdDNEPihpbmplY3ROZ3RSZWYocHJlcGFyZShuZXcgU2NlbmUoKSkpKTtcblx0Y2FtZXJhID0gaW5wdXQ8RWxlbWVudFJlZjxDYW1lcmE+IHwgQ2FtZXJhPigpO1xuXHRzdGF0ZSA9IGlucHV0PFxuXHRcdFBhcnRpYWw8XG5cdFx0XHRPbWl0PE5ndFN0YXRlLCBQcml2YXRlS2V5cz4gJiB7XG5cdFx0XHRcdGV2ZW50czogUGFydGlhbDxQaWNrPE5ndEV2ZW50TWFuYWdlcjxhbnk+LCAnZW5hYmxlZCcgfCAncHJpb3JpdHknIHwgJ2NvbXB1dGUnIHwgJ2Nvbm5lY3RlZCc+Pjtcblx0XHRcdFx0c2l6ZTogTmd0U2l6ZTtcblx0XHRcdH1cblx0XHQ+XG5cdD4oKTtcblxuXHRhdXRvUmVuZGVyID0gaW5wdXQoZmFsc2UpO1xuXHRhdXRvUmVuZGVyUHJpb3JpdHkgPSBpbnB1dCgxKTtcblxuXHRwb3J0YWxDb250ZW50VGVtcGxhdGUgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoTmd0UG9ydGFsQ29udGVudCwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KTtcblx0cG9ydGFsQ29udGVudEFuY2hvciA9IHZpZXdDaGlsZC5yZXF1aXJlZCgncG9ydGFsQ29udGVudEFuY2hvcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KTtcblxuXHRwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cdHByaXZhdGUgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0cHJpdmF0ZSBwYXJlbnRTdG9yZSA9IGluamVjdE5ndFN0b3JlKHsgc2tpcFNlbGY6IHRydWUgfSk7XG5cdHByaXZhdGUgcG9ydGFsU3RvcmUgPSBpbmplY3ROZ3RTdG9yZSh7IHNlbGY6IHRydWUgfSk7XG5cblx0cHJpdmF0ZSBwb3J0YWxSZW5kZXJlZCA9IHNpZ25hbChmYWxzZSk7XG5cblx0cHJvdGVjdGVkIHJlbmRlckF1dG9CZWZvcmVSZW5kZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBvcnRhbFJlbmRlcmVkKCkgJiYgdGhpcy5hdXRvUmVuZGVyKCkpO1xuXHRwcm90ZWN0ZWQgcGFyZW50U2NlbmUgPSB0aGlzLnBhcmVudFN0b3JlLmdldCgnc2NlbmUnKTtcblx0cHJvdGVjdGVkIHBhcmVudENhbWVyYSA9IHRoaXMucGFyZW50U3RvcmUuZ2V0KCdjYW1lcmEnKTtcblxuXHRwcml2YXRlIHJheWNhc3RlciA9IG5ldyBSYXljYXN0ZXIoKTtcblx0cHJpdmF0ZSBwb2ludGVyID0gbmV3IFZlY3RvcjIoKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcGFyZW50U3RhdGUgPSB0aGlzLnBhcmVudFN0b3JlLnNuYXBzaG90O1xuXHRcdFx0Y29uc3QgW2NvbnRhaW5lclJlZiwgc3RhdGUsIGF1dG9SZW5kZXIsIGF1dG9SZW5kZXJQcmlvcml0eV0gPSBbXG5cdFx0XHRcdHRoaXMuY29udGFpbmVyKCksXG5cdFx0XHRcdHRoaXMuc3RhdGUoKSxcblx0XHRcdFx0dGhpcy5hdXRvUmVuZGVyKCksXG5cdFx0XHRcdHRoaXMuYXV0b1JlbmRlclByaW9yaXR5KCksXG5cdFx0XHRdO1xuXG5cdFx0XHRsZXQgc3RhdGVGcm9tSW5wdXQgPSBzdGF0ZTtcblxuXHRcdFx0aWYgKCFzdGF0ZUZyb21JbnB1dCAmJiBhdXRvUmVuZGVyKSB7XG5cdFx0XHRcdHN0YXRlRnJvbUlucHV0ID0geyBldmVudHM6IHsgcHJpb3JpdHk6IGF1dG9SZW5kZXJQcmlvcml0eSArIDEgfSB9O1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB7IGV2ZW50cyA9IHt9LCBzaXplID0ge30sIC4uLnJlc3QgfSA9IHN0YXRlRnJvbUlucHV0IHx8IHt9O1xuXHRcdFx0bGV0IGNvbnRhaW5lciA9IGlzLnJlZihjb250YWluZXJSZWYpID8gY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQgOiBjb250YWluZXJSZWY7XG5cblx0XHRcdGlmICghaXMuaW5zdGFuY2UoY29udGFpbmVyKSkge1xuXHRcdFx0XHRjb250YWluZXIgPSBwcmVwYXJlKGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGNvbnRhaW5lcik7XG5cdFx0XHRpZiAobG9jYWxTdGF0ZSAmJiAhbG9jYWxTdGF0ZS5zdG9yZSkge1xuXHRcdFx0XHRsb2NhbFN0YXRlLnN0b3JlID0gdGhpcy5wb3J0YWxTdG9yZTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5wb3J0YWxTdG9yZS51cGRhdGUoe1xuXHRcdFx0XHQuLi5wYXJlbnRTdGF0ZSxcblx0XHRcdFx0c2NlbmU6IGNvbnRhaW5lciBhcyBTY2VuZSxcblx0XHRcdFx0cmF5Y2FzdGVyOiB0aGlzLnJheWNhc3Rlcixcblx0XHRcdFx0cG9pbnRlcjogdGhpcy5wb2ludGVyLFxuXHRcdFx0XHRwcmV2aW91c1Jvb3Q6IHRoaXMucGFyZW50U3RvcmUsXG5cdFx0XHRcdGV2ZW50czogeyAuLi5wYXJlbnRTdGF0ZS5ldmVudHMsIC4uLmV2ZW50cyB9LFxuXHRcdFx0XHRzaXplOiB7IC4uLnBhcmVudFN0YXRlLnNpemUsIC4uLnNpemUgfSxcblx0XHRcdFx0Li4ucmVzdCxcblx0XHRcdFx0c2V0RXZlbnRzOiAoZXZlbnRzKSA9PlxuXHRcdFx0XHRcdHRoaXMucG9ydGFsU3RvcmUudXBkYXRlKChzdGF0ZSkgPT4gKHsgLi4uc3RhdGUsIGV2ZW50czogeyAuLi5zdGF0ZS5ldmVudHMsIC4uLmV2ZW50cyB9IH0pKSxcblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwcmV2aW91cyA9IHRoaXMucGFyZW50U3RvcmUuc3RhdGUoKTtcblx0XHRcdFx0dGhpcy5wb3J0YWxTdG9yZS51cGRhdGUoKHN0YXRlKSA9PiB0aGlzLmluamVjdChwcmV2aW91cywgc3RhdGUpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBwb3J0YWxWaWV3ID0gdGhpcy5wb3J0YWxDb250ZW50QW5jaG9yKCkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucG9ydGFsQ29udGVudFRlbXBsYXRlKCkpO1xuXHRcdFx0XHRwb3J0YWxWaWV3LmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0dGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHRcdFx0cG9ydGFsVmlldy5kZXN0cm95KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMucG9ydGFsUmVuZGVyZWQuc2V0KHRydWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBpbmplY3Qocm9vdFN0YXRlOiBOZ3RTdGF0ZSwgaW5qZWN0U3RhdGU6IE5ndFN0YXRlKSB7XG5cdFx0Y29uc3QgaW50ZXJzZWN0OiBQYXJ0aWFsPE5ndFN0YXRlPiA9IHsgLi4ucm9vdFN0YXRlIH07XG5cblx0XHRPYmplY3Qua2V5cyhpbnRlcnNlY3QpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcml2YXRlS2V5cy5pbmNsdWRlcyhrZXkgYXMgUHJpdmF0ZUtleXMpIHx8XG5cdFx0XHRcdHJvb3RTdGF0ZVtrZXkgYXMga2V5b2YgTmd0U3RhdGVdICE9PSBpbmplY3RTdGF0ZVtrZXkgYXMga2V5b2YgTmd0U3RhdGVdXG5cdFx0XHQpIHtcblx0XHRcdFx0ZGVsZXRlIGludGVyc2VjdFtrZXkgYXMga2V5b2YgTmd0U3RhdGVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgY29udGFpbmVyID0gdW50cmFja2VkKHRoaXMuY29udGFpbmVyKTtcblx0XHRjb25zdCB7IHNpemUsIGV2ZW50cywgLi4ucmVzdElucHV0c1N0YXRlIH0gPSB1bnRyYWNrZWQodGhpcy5zdGF0ZSkgfHwge307XG5cblx0XHRsZXQgdmlld3BvcnQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKGluamVjdFN0YXRlICYmIHNpemUpIHtcblx0XHRcdGNvbnN0IGNhbWVyYSA9IGluamVjdFN0YXRlLmNhbWVyYTtcblx0XHRcdHZpZXdwb3J0ID0gcm9vdFN0YXRlLnZpZXdwb3J0LmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIG5ldyBWZWN0b3IzKCksIHNpemUpO1xuXHRcdFx0aWYgKGNhbWVyYSAhPT0gcm9vdFN0YXRlLmNhbWVyYSkgdXBkYXRlQ2FtZXJhKGNhbWVyYSwgc2l6ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmludGVyc2VjdCxcblx0XHRcdHNjZW5lOiBpcy5yZWYoY29udGFpbmVyKSA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50IDogY29udGFpbmVyLFxuXHRcdFx0cHJldmlvdXNSb290OiB0aGlzLnBhcmVudFN0b3JlLFxuXHRcdFx0ZXZlbnRzOiB7IC4uLnJvb3RTdGF0ZS5ldmVudHMsIC4uLihpbmplY3RTdGF0ZT8uZXZlbnRzIHx8IHt9KSwgLi4uZXZlbnRzIH0sXG5cdFx0XHRzaXplOiB7IC4uLnJvb3RTdGF0ZS5zaXplLCAuLi5zaXplIH0sXG5cdFx0XHR2aWV3cG9ydDogeyAuLi5yb290U3RhdGUudmlld3BvcnQsIC4uLih2aWV3cG9ydCB8fCB7fSkgfSxcblx0XHRcdC4uLnJlc3RJbnB1dHNTdGF0ZSxcblx0XHR9IGFzIE5ndFN0YXRlO1xuXHR9XG59XG4iXX0=