angular-three 2.0.0-beta.22 → 2.0.0-beta.223

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 (109) hide show
  1. package/esm2022/index.mjs +4 -11
  2. package/esm2022/lib/canvas.mjs +81 -156
  3. package/esm2022/lib/directives/args.mjs +6 -6
  4. package/esm2022/lib/directives/common.mjs +15 -14
  5. package/esm2022/lib/directives/parent.mjs +6 -6
  6. package/esm2022/lib/dom/events.mjs +2 -2
  7. package/esm2022/lib/events.mjs +28 -25
  8. package/esm2022/lib/instance.mjs +39 -34
  9. package/esm2022/lib/loader.mjs +12 -14
  10. package/esm2022/lib/loop.mjs +9 -10
  11. package/esm2022/lib/portal.mjs +122 -135
  12. package/esm2022/lib/ref.mjs +18 -20
  13. package/esm2022/lib/renderer/catalogue.mjs +2 -2
  14. package/esm2022/lib/renderer/constants.mjs +2 -2
  15. package/esm2022/lib/renderer/index.mjs +58 -62
  16. package/esm2022/lib/renderer/store.mjs +129 -120
  17. package/esm2022/lib/renderer/utils.mjs +35 -42
  18. package/esm2022/lib/roots.mjs +41 -38
  19. package/esm2022/lib/routed-scene.mjs +6 -7
  20. package/esm2022/lib/store.mjs +163 -189
  21. package/esm2022/lib/utils/apply-props.mjs +12 -17
  22. package/esm2022/lib/utils/attach.mjs +6 -6
  23. package/esm2022/lib/utils/before-render.mjs +12 -0
  24. package/esm2022/lib/utils/cd-aware-signal.mjs +24 -0
  25. package/esm2022/lib/utils/create-api-token.mjs +13 -0
  26. package/esm2022/lib/utils/is.mjs +6 -5
  27. package/esm2022/lib/utils/make.mjs +15 -12
  28. package/esm2022/lib/utils/signal-store.mjs +67 -57
  29. package/esm2022/lib/utils/update.mjs +3 -2
  30. package/fesm2022/angular-three.mjs +1621 -1795
  31. package/fesm2022/angular-three.mjs.map +1 -1
  32. package/index.d.ts +6 -10
  33. package/lib/canvas.d.ts +24 -37
  34. package/lib/directives/common.d.ts +12 -1
  35. package/lib/events.d.ts +2 -2
  36. package/lib/instance.d.ts +19 -10
  37. package/lib/loader.d.ts +13 -4
  38. package/lib/loop.d.ts +6 -29
  39. package/lib/portal.d.ts +18 -26
  40. package/lib/ref.d.ts +0 -1
  41. package/lib/renderer/catalogue.d.ts +5 -1
  42. package/lib/renderer/constants.d.ts +1 -1
  43. package/lib/renderer/index.d.ts +55 -4
  44. package/lib/renderer/store.d.ts +18 -21
  45. package/lib/renderer/utils.d.ts +2 -3
  46. package/lib/roots.d.ts +4 -3
  47. package/lib/store.d.ts +9 -11
  48. package/lib/utils/apply-props.d.ts +0 -1
  49. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  50. package/lib/utils/cd-aware-signal.d.ts +4 -0
  51. package/lib/utils/create-api-token.d.ts +23 -0
  52. package/lib/utils/is.d.ts +11 -12
  53. package/lib/utils/make.d.ts +3 -2
  54. package/lib/utils/signal-store.d.ts +16 -3
  55. package/metadata.json +1 -1
  56. package/package.json +30 -11
  57. package/plugin/generators.json +0 -32
  58. package/plugin/src/generators/init/compat.d.ts +1 -3
  59. package/plugin/src/generators/init/files/experience/{experience.component.ts.__tmpl__ → experience.component.ts__tmpl__} +1 -0
  60. package/plugin/src/generators/init/generator.d.ts +2 -5
  61. package/plugin/src/generators/init/generator.js +87 -99
  62. package/plugin/src/generators/init/generator.js.map +1 -1
  63. package/plugin/src/generators/init/schema.json +1 -12
  64. package/plugin/src/generators/utils.js.map +1 -1
  65. package/plugin/src/generators/{versions.d.ts → version.d.ts} +5 -3
  66. package/plugin/src/generators/version.js +18 -0
  67. package/plugin/src/generators/version.js.map +1 -0
  68. package/plugin/src/index.d.ts +0 -3
  69. package/plugin/src/index.js +0 -9
  70. package/plugin/src/index.js.map +1 -1
  71. package/web-types.json +1 -1
  72. package/esm2022/lib/before-render.mjs +0 -13
  73. package/esm2022/lib/directives/key.mjs +0 -29
  74. package/esm2022/lib/directives/repeat.mjs +0 -17
  75. package/esm2022/lib/three-types.mjs +0 -2
  76. package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
  77. package/esm2022/lib/utils/create-injection-token.mjs +0 -47
  78. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  79. package/lib/directives/key.d.ts +0 -10
  80. package/lib/directives/repeat.d.ts +0 -7
  81. package/lib/three-types.d.ts +0 -306
  82. package/lib/utils/assert-injection-context.d.ts +0 -2
  83. package/lib/utils/create-injection-token.d.ts +0 -27
  84. package/lib/utils/safe-detect-changes.d.ts +0 -2
  85. package/plugin/package.json +0 -6
  86. package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
  87. package/plugin/src/generators/init-cannon/compat.js +0 -6
  88. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  89. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  90. package/plugin/src/generators/init-cannon/generator.js +0 -22
  91. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  92. package/plugin/src/generators/init-cannon/schema.json +0 -6
  93. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  94. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  95. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  96. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  97. package/plugin/src/generators/init-postprocessing/generator.js +0 -20
  98. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  99. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  100. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  101. package/plugin/src/generators/init-soba/compat.js +0 -6
  102. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  103. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  104. package/plugin/src/generators/init-soba/generator.js +0 -26
  105. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  106. package/plugin/src/generators/init-soba/schema.json +0 -6
  107. package/plugin/src/generators/versions.js +0 -16
  108. package/plugin/src/generators/versions.js.map +0 -1
  109. /package/plugin/src/generators/init/files/experience/{experience.component.html.__tmpl__ → experience.component.html__tmpl__} +0 -0
package/esm2022/index.mjs CHANGED
@@ -1,10 +1,5 @@
1
- export * from './lib/before-render';
2
1
  export * from './lib/canvas';
3
2
  export * from './lib/directives/args';
4
- export * from './lib/directives/key';
5
- export * from './lib/directives/parent';
6
- export * from './lib/directives/repeat';
7
- export {} from './lib/events';
8
3
  export * from './lib/instance';
9
4
  export * from './lib/loader';
10
5
  export { addAfterEffect, addEffect, addTail } from './lib/loop';
@@ -13,15 +8,13 @@ export * from './lib/ref';
13
8
  export * from './lib/renderer';
14
9
  export * from './lib/routed-scene';
15
10
  export * from './lib/store';
16
- export * from './lib/three-types';
17
- export * from './lib/types';
18
11
  export * from './lib/utils/apply-props';
19
- export * from './lib/utils/assert-injection-context';
20
12
  export { createAttachFunction } from './lib/utils/attach';
21
- export * from './lib/utils/create-injection-token';
13
+ export * from './lib/utils/before-render';
14
+ export * from './lib/utils/cd-aware-signal';
15
+ export * from './lib/utils/create-api-token';
22
16
  export * from './lib/utils/is';
23
17
  export * from './lib/utils/make';
24
- export * from './lib/utils/safe-detect-changes';
25
18
  export * from './lib/utils/signal-store';
26
19
  export * from './lib/utils/update';
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQXNDLE1BQU0sY0FBYyxDQUFDO0FBQ2xFLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxjQUFjLENBQUM7QUFDN0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDM0QsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvYmVmb3JlLXJlbmRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYW52YXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hcmdzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMva2V5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcGFyZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcmVwZWF0JztcbmV4cG9ydCB7IHR5cGUgTmd0Q2FtZXJhLCB0eXBlIE5ndFRocmVlRXZlbnQgfSBmcm9tICcuL2xpYi9ldmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5zdGFuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9hZGVyJztcbmV4cG9ydCB7IGFkZEFmdGVyRWZmZWN0LCBhZGRFZmZlY3QsIGFkZFRhaWwgfSBmcm9tICcuL2xpYi9sb29wJztcbmV4cG9ydCB7IE5ndFBvcnRhbCwgTmd0UG9ydGFsQ29udGVudCB9IGZyb20gJy4vbGliL3BvcnRhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmVuZGVyZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcm91dGVkLXNjZW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RocmVlLXR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2FwcGx5LXByb3BzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2Fzc2VydC1pbmplY3Rpb24tY29udGV4dCc7XG5leHBvcnQgeyBjcmVhdGVBdHRhY2hGdW5jdGlvbiB9IGZyb20gJy4vbGliL3V0aWxzL2F0dGFjaCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jcmVhdGUtaW5qZWN0aW9uLXRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2lzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL21ha2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvc2FmZS1kZXRlY3QtY2hhbmdlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9zaWduYWwtc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvdXBkYXRlJztcbiJdfQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRCxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY2FudmFzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYXJncyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnN0YW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2FkZXInO1xuZXhwb3J0IHsgYWRkQWZ0ZXJFZmZlY3QsIGFkZEVmZmVjdCwgYWRkVGFpbCB9IGZyb20gJy4vbGliL2xvb3AnO1xuZXhwb3J0IHsgTmd0UG9ydGFsLCBOZ3RQb3J0YWxDb250ZW50IH0gZnJvbSAnLi9saWIvcG9ydGFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlZic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZW5kZXJlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZWQtc2NlbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYXBwbHktcHJvcHMnO1xuZXhwb3J0IHsgY3JlYXRlQXR0YWNoRnVuY3Rpb24gfSBmcm9tICcuL2xpYi91dGlscy9hdHRhY2gnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvYmVmb3JlLXJlbmRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jZC1hd2FyZS1zaWduYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY3JlYXRlLWFwaS10b2tlbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9pcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9tYWtlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy91cGRhdGUnO1xuXG5leHBvcnQgdHlwZSB7IE5ndENhbWVyYSwgTmd0VGhyZWVFdmVudCB9IGZyb20gJy4vbGliL2V2ZW50cyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4vbGliL3RocmVlLXR5cGVzJztcbmV4cG9ydCB0eXBlICogZnJvbSAnLi9saWIvdHlwZXMnO1xuIl19
@@ -1,27 +1,33 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, EnvironmentInjector, EventEmitter, Injector, Input, NgZone, Output, ViewChild, ViewContainerRef, computed, createEnvironmentInjector, effect, inject, } from '@angular/core';
2
- import { NgxResize, provideNgxResizeOptions } from 'ngx-resize';
1
+ import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, EnvironmentInjector, EventEmitter, Injector, Input, NgZone, Output, ViewChild, ViewContainerRef, afterNextRender, computed, createEnvironmentInjector, inject, signal, untracked, } from '@angular/core';
2
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
3
+ import { NgxResize, provideResizeOptions } from 'ngxtension/resize';
3
4
  import * as THREE from 'three';
4
5
  import { createPointerEvents } from './dom/events';
5
- import { injectNgtLoader } from './loader';
6
6
  import { provideNgtRenderer } from './renderer';
7
7
  import { injectCanvasRootInitializer } from './roots';
8
8
  import { injectNgtStore, provideNgtStore, } from './store';
9
9
  import { is } from './utils/is';
10
- import { safeDetectChanges } from './utils/safe-detect-changes';
11
10
  import { signalStore } from './utils/signal-store';
12
11
  import * as i0 from "@angular/core";
13
12
  export class NgtCanvas {
13
+ set _sceneGraphInputs(value) {
14
+ this.sceneGraphInputs.set(value);
15
+ }
16
+ set _canvasInputs(value) {
17
+ this.canvasInputs.update(value);
18
+ }
14
19
  constructor() {
15
20
  this.store = injectNgtStore();
16
21
  this.initRoot = injectCanvasRootInitializer();
22
+ this.autoEffect = injectAutoEffect();
17
23
  this.host = inject(ElementRef);
18
24
  this.viewContainerRef = inject(ViewContainerRef);
19
- this.injector = inject(Injector);
20
- this.environmentInjector = inject(EnvironmentInjector);
21
25
  this.zone = inject(NgZone);
22
- this.destroyRef = inject(DestroyRef);
23
- this.cdr = inject(ChangeDetectorRef);
24
- this.inputs = signalStore({
26
+ this.environmentInjector = inject(EnvironmentInjector);
27
+ this.injector = inject(Injector);
28
+ this.compoundPrefixes = [];
29
+ this.sceneGraphInputs = signal({}, { equal: Object.is });
30
+ this.canvasInputs = signalStore({
25
31
  shadows: false,
26
32
  linear: false,
27
33
  flat: false,
@@ -31,102 +37,49 @@ export class NgtCanvas {
31
37
  dpr: [1, 2],
32
38
  events: createPointerEvents,
33
39
  });
34
- this.sceneGraphInputs = {};
35
- this.compoundPrefixes = [];
36
40
  this.created = new EventEmitter();
37
- this.inputsEventSource = this.inputs.select('eventSource');
38
- this.hbPointerEvents = computed(() => (!!this.inputsEventSource() ? 'none' : 'auto'));
39
- }
40
- set linear(linear) {
41
- this.inputs.set({ linear });
42
- }
43
- set legacy(legacy) {
44
- this.inputs.set({ legacy });
45
- }
46
- set flat(flat) {
47
- this.inputs.set({ flat });
48
- }
49
- set orthographic(orthographic) {
50
- this.inputs.set({ orthographic });
51
- }
52
- set frameloop(frameloop) {
53
- this.inputs.set({ frameloop });
54
- }
55
- set dpr(dpr) {
56
- this.inputs.set({ dpr });
57
- }
58
- set raycaster(raycaster) {
59
- this.inputs.set({ raycaster });
60
- }
61
- set shadows(shadows) {
62
- this.inputs.set({ shadows });
63
- }
64
- set camera(camera) {
65
- this.inputs.set({ camera });
66
- }
67
- set scene(scene) {
68
- this.inputs.set({ scene });
69
- }
70
- set gl(gl) {
71
- this.inputs.set({ gl });
72
- }
73
- set eventSource(eventSource) {
74
- this.inputs.set({ eventSource });
75
- }
76
- set eventPrefix(eventPrefix) {
77
- this.inputs.set({ eventPrefix });
78
- }
79
- set lookAt(lookAt) {
80
- this.inputs.set({ lookAt });
81
- }
82
- set performance(performance) {
83
- this.inputs.set({ performance });
84
- }
85
- ngOnChanges(changes) {
86
- if (changes['sceneGraphInputs'] && !changes['sceneGraphInputs'].firstChange && this.glRef) {
87
- this.setSceneGraphInputs();
88
- }
89
- }
90
- ngOnInit() {
91
- // NOTE: we resolve glCanvas at this point, setup the configurator
92
- this.configurator = this.initRoot(this.glCanvas.nativeElement);
93
- this.destroyRef.onDestroy(() => {
94
- this.glEnvironmentInjector?.destroy();
41
+ // NOTE: this signal is updated outside of Zone
42
+ this.resizeResult = signal({}, { equal: Object.is });
43
+ this.eventSource = this.canvasInputs.select('eventSource');
44
+ this.hbPointerEvents = computed(() => (this.eventSource() ? 'none' : 'auto'));
45
+ afterNextRender(() => {
46
+ this.zone.runOutsideAngular(() => {
47
+ this.configurator = this.initRoot(this.glCanvas.nativeElement);
48
+ this.noZoneResizeEffect();
49
+ this.noZoneSceneGraphInputsEffect();
50
+ });
51
+ });
52
+ inject(DestroyRef).onDestroy(() => {
95
53
  this.glRef?.destroy();
96
- this.resizeEffectRef?.destroy();
97
- injectNgtLoader.destroy();
54
+ this.glEnvironmentInjector?.destroy();
98
55
  this.configurator?.destroy();
99
56
  });
100
57
  }
101
- // NOTE: runs outside of Zone due to emitInZone: false
102
- onResize(result) {
103
- if (result.width > 0 && result.height > 0) {
104
- this.resizeEffectRef?.destroy();
105
- const inputs = this.inputs.select();
106
- // NOTE: go back into zone so that effect runs
107
- // TODO: Double-check when effect is made not depended on zone
108
- this.resizeEffectRef = this.zone.run(() => effect(() => {
109
- this.zone.runOutsideAngular(() => {
110
- if (!this.configurator)
111
- this.configurator = this.initRoot(this.glCanvas.nativeElement);
112
- this.configurator.configure({ ...inputs(), size: result });
58
+ noZoneResizeEffect() {
59
+ this.autoEffect(() => {
60
+ const resizeResult = this.resizeResult();
61
+ if (resizeResult.width > 0 && resizeResult.height > 0) {
62
+ if (!this.configurator)
63
+ this.configurator = this.initRoot(this.glCanvas.nativeElement);
64
+ this.configurator.configure({ ...this.canvasInputs.state(), size: resizeResult });
65
+ untracked(() => {
113
66
  if (this.glRef) {
114
- this.cdr.detectChanges();
67
+ this.glRef.changeDetectorRef.detectChanges();
115
68
  }
116
69
  else {
117
- this.render();
70
+ this.noZoneRender();
118
71
  }
119
72
  });
120
- }, { manualCleanup: true, injector: this.injector }));
121
- }
73
+ }
74
+ });
122
75
  }
123
- render() {
76
+ noZoneRender() {
77
+ // NOTE: destroy previous instances if existed
124
78
  this.glEnvironmentInjector?.destroy();
125
79
  this.glRef?.destroy();
126
- // Flag the canvas active, rendering will now begin
127
- this.store.set((state) => ({ internal: { ...state.internal, active: true } }));
128
- const inputs = this.inputs.get();
129
- const state = this.store.get();
80
+ // NOTE: Flag the canvas active, rendering will now begin
81
+ this.store.update((state) => ({ internal: { ...state.internal, active: true } }));
82
+ const [inputs, state] = [this.canvasInputs.snapshot, this.store.snapshot];
130
83
  // connect to event source
131
84
  state.events.connect?.(inputs.eventSource
132
85
  ? is.ref(inputs.eventSource)
@@ -137,115 +90,87 @@ export class NgtCanvas {
137
90
  if (inputs.eventPrefix) {
138
91
  state.setEvents({
139
92
  compute: (event, store) => {
140
- const innerState = store.get();
93
+ const { pointer, raycaster, camera, size } = store.snapshot;
141
94
  const x = event[(inputs.eventPrefix + 'X')];
142
95
  const y = event[(inputs.eventPrefix + 'Y')];
143
- innerState.pointer.set((x / innerState.size.width) * 2 - 1, -(y / innerState.size.height) * 2 + 1);
144
- innerState.raycaster.setFromCamera(innerState.pointer, innerState.camera);
96
+ pointer.set((x / size.width) * 2 - 1, -(y / size.height) * 2 + 1);
97
+ raycaster.setFromCamera(pointer, camera);
145
98
  },
146
99
  });
147
100
  }
148
101
  // emit created event if observed
149
102
  if (this.created.observed) {
150
- // but go back into zone to do so
151
- this.zone.run(() => {
152
- this.created.emit(this.store.get());
153
- });
103
+ this.created.emit(this.store.snapshot);
154
104
  }
155
105
  if (!this.store.get('events', 'connected')) {
156
106
  this.store.get('events').connect?.(this.glCanvas.nativeElement);
157
107
  }
158
- this.glEnvironmentInjector = createEnvironmentInjector([provideNgtRenderer(this.store, this.compoundPrefixes, this.cdr)], this.environmentInjector);
108
+ this.glEnvironmentInjector = createEnvironmentInjector([provideNgtRenderer(this.store, this.compoundPrefixes)], this.environmentInjector);
159
109
  this.glRef = this.viewContainerRef.createComponent(this.sceneGraph, {
160
110
  environmentInjector: this.glEnvironmentInjector,
161
111
  injector: this.injector,
162
112
  });
163
- this.overrideChangeDetectorRef();
164
- this.setSceneGraphInputs();
113
+ this.glRef.changeDetectorRef.detectChanges();
114
+ this.setSceneGraphInputs(untracked(this.sceneGraphInputs));
165
115
  }
166
- overrideChangeDetectorRef() {
167
- const originalDetectChanges = this.cdr.detectChanges.bind(this.cdr);
168
- this.cdr.detectChanges = () => {
169
- originalDetectChanges();
170
- safeDetectChanges(this.glRef?.changeDetectorRef);
171
- };
116
+ noZoneSceneGraphInputsEffect() {
117
+ this.autoEffect(() => {
118
+ this.setSceneGraphInputs(this.sceneGraphInputs());
119
+ });
172
120
  }
173
- setSceneGraphInputs() {
174
- this.zone.run(() => {
175
- if (this.glRef) {
176
- for (const [key, value] of Object.entries(this.sceneGraphInputs)) {
177
- this.glRef.setInput(key, value);
178
- }
179
- this.glRef.changeDetectorRef.detectChanges();
121
+ setSceneGraphInputs(sceneGraphInputs) {
122
+ if (this.glRef) {
123
+ for (const [key, value] of Object.entries(sceneGraphInputs)) {
124
+ this.glRef.setInput(key, value);
180
125
  }
181
- });
126
+ }
182
127
  }
183
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
184
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtCanvas, isStandalone: true, selector: "ngt-canvas", inputs: { sceneGraph: "sceneGraph", sceneGraphInputs: "sceneGraphInputs", compoundPrefixes: "compoundPrefixes", linear: "linear", legacy: "legacy", flat: "flat", orthographic: "orthographic", frameloop: "frameloop", dpr: "dpr", raycaster: "raycaster", shadows: "shadows", camera: "camera", scene: "scene", gl: "gl", eventSource: "eventSource", eventPrefix: "eventPrefix", lookAt: "lookAt", performance: "performance" }, outputs: { created: "created" }, host: { properties: { "style.pointerEvents": "hbPointerEvents()" }, styleAttribute: "display: block;position: relative;width: 100%;height: 100%;overflow: hidden;" }, providers: [provideNgxResizeOptions({ emitInZone: false, emitInitialResult: true }), provideNgtStore()], viewQueries: [{ propertyName: "glCanvas", first: true, predicate: ["glCanvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
185
- <div (ngxResize)="onResize($event)" style="height: 100%; width: 100%;">
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtCanvas, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NgtCanvas, isStandalone: true, selector: "ngt-canvas", inputs: { sceneGraph: "sceneGraph", compoundPrefixes: "compoundPrefixes", _sceneGraphInputs: ["sceneGraphInputs", "_sceneGraphInputs"], _canvasInputs: ["options", "_canvasInputs"] }, outputs: { created: "created" }, host: { properties: { "style.pointerEvents": "hbPointerEvents()" }, styleAttribute: "display: block;position: relative;width: 100%;height: 100%;overflow: hidden;" }, providers: [
130
+ provideResizeOptions({ emitInZone: false, emitInitialResult: true, debounce: 250 }),
131
+ provideNgtStore(),
132
+ ], viewQueries: [{ propertyName: "glCanvas", first: true, predicate: ["glCanvas"], descendants: true, static: true }], ngImport: i0, template: `
133
+ <div (ngxResize)="resizeResult.set($event)" style="height: 100%; width: 100%;">
186
134
  <canvas #glCanvas style="display: block;"></canvas>
187
135
  </div>
188
136
  `, isInline: true, dependencies: [{ kind: "directive", type: NgxResize, selector: "[ngxResize]", inputs: ["ngxResizeOptions"], outputs: ["ngxResize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
189
137
  }
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtCanvas, decorators: [{
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtCanvas, decorators: [{
191
139
  type: Component,
192
140
  args: [{
193
141
  selector: 'ngt-canvas',
194
142
  standalone: true,
195
143
  template: `
196
- <div (ngxResize)="onResize($event)" style="height: 100%; width: 100%;">
144
+ <div (ngxResize)="resizeResult.set($event)" style="height: 100%; width: 100%;">
197
145
  <canvas #glCanvas style="display: block;"></canvas>
198
146
  </div>
199
147
  `,
200
148
  imports: [NgxResize],
201
- providers: [provideNgxResizeOptions({ emitInZone: false, emitInitialResult: true }), provideNgtStore()],
149
+ providers: [
150
+ provideResizeOptions({ emitInZone: false, emitInitialResult: true, debounce: 250 }),
151
+ provideNgtStore(),
152
+ ],
202
153
  host: {
203
154
  style: 'display: block;position: relative;width: 100%;height: 100%;overflow: hidden;',
204
155
  '[style.pointerEvents]': 'hbPointerEvents()',
205
156
  },
206
157
  changeDetection: ChangeDetectionStrategy.OnPush,
207
158
  }]
208
- }], propDecorators: { sceneGraph: [{
159
+ }], ctorParameters: () => [], propDecorators: { sceneGraph: [{
209
160
  type: Input,
210
161
  args: [{ required: true }]
211
- }], sceneGraphInputs: [{
212
- type: Input
213
162
  }], compoundPrefixes: [{
214
163
  type: Input
215
- }], linear: [{
216
- type: Input
217
- }], legacy: [{
218
- type: Input
219
- }], flat: [{
220
- type: Input
221
- }], orthographic: [{
222
- type: Input
223
- }], frameloop: [{
224
- type: Input
225
- }], dpr: [{
226
- type: Input
227
- }], raycaster: [{
228
- type: Input
229
- }], shadows: [{
230
- type: Input
231
- }], camera: [{
232
- type: Input
233
- }], scene: [{
234
- type: Input
235
- }], gl: [{
236
- type: Input
237
- }], eventSource: [{
238
- type: Input
239
- }], eventPrefix: [{
240
- type: Input
241
- }], lookAt: [{
242
- type: Input
243
- }], performance: [{
244
- type: Input
164
+ }], _sceneGraphInputs: [{
165
+ type: Input,
166
+ args: [{ alias: 'sceneGraphInputs' }]
167
+ }], _canvasInputs: [{
168
+ type: Input,
169
+ args: [{ alias: 'options' }]
245
170
  }], created: [{
246
171
  type: Output
247
172
  }], glCanvas: [{
248
173
  type: ViewChild,
249
174
  args: ['glCanvas', { static: true }]
250
175
  }] } });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FudmFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixNQUFNLEVBQ04sTUFBTSxHQU9OLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sWUFBWSxDQUFDO0FBQ3RGLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBQUUsMkJBQTJCLEVBQThCLE1BQU0sU0FBUyxDQUFDO0FBQ2xGLE9BQU8sRUFDTixjQUFjLEVBQ2QsZUFBZSxHQU1mLE1BQU0sU0FBUyxDQUFDO0FBR2pCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxzQkFBc0IsQ0FBQzs7QUFvRnhFLE1BQU0sT0FBTyxTQUFTO0lBaEJ0QjtRQWlCUyxVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsYUFBUSxHQUFHLDJCQUEyQixFQUFFLENBQUM7UUFFekMsU0FBSSxHQUFHLE1BQU0s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QUFPO3NCQUFoQixNQUFNO2dCQUtrQyxRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdENvbXBvbmVudCxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0RW52aXJvbm1lbnRJbmplY3Rvcixcblx0RXZlbnRFbWl0dGVyLFxuXHRJbmplY3Rvcixcblx0SW5wdXQsXG5cdE5nWm9uZSxcblx0T3V0cHV0LFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdDb250YWluZXJSZWYsXG5cdGNvbXB1dGVkLFxuXHRjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLFxuXHRlZmZlY3QsXG5cdGluamVjdCxcblx0dHlwZSBDb21wb25lbnRSZWYsXG5cdHR5cGUgRWZmZWN0UmVmLFxuXHR0eXBlIE9uQ2hhbmdlcyxcblx0dHlwZSBPbkluaXQsXG5cdHR5cGUgU2ltcGxlQ2hhbmdlcyxcblx0dHlwZSBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFJlc2l6ZSwgcHJvdmlkZU5neFJlc2l6ZU9wdGlvbnMsIHR5cGUgTmd4UmVzaXplUmVzdWx0IH0gZnJvbSAnbmd4LXJlc2l6ZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBjcmVhdGVQb2ludGVyRXZlbnRzIH0gZnJvbSAnLi9kb20vZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FtZXJhLCBOZ3REb21FdmVudCwgTmd0RXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0TG9hZGVyIH0gZnJvbSAnLi9sb2FkZXInO1xuaW1wb3J0IHsgcHJvdmlkZU5ndFJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlcic7XG5pbXBvcnQgeyBpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXIsIHR5cGUgTmd0Q2FudmFzQ29uZmlndXJhdG9yIH0gZnJvbSAnLi9yb290cyc7XG5pbXBvcnQge1xuXHRpbmplY3ROZ3RTdG9yZSxcblx0cHJvdmlkZU5ndFN0b3JlLFxuXHR0eXBlIE5ndERwcixcblx0dHlwZSBOZ3RQZXJmb3JtYW5jZSxcblx0dHlwZSBOZ3RSZW5kZXJlcixcblx0dHlwZSBOZ3RTaXplLFxuXHR0eXBlIE5ndFN0YXRlLFxufSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0T2JqZWN0M0ROb2RlIH0gZnJvbSAnLi90aHJlZS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0UHJvcGVydGllcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcbmltcG9ydCB7IHNpZ25hbFN0b3JlLCB0eXBlIE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuXG5leHBvcnQgdHlwZSBOZ3RHTE9wdGlvbnMgPVxuXHR8IE5ndFJlbmRlcmVyXG5cdHwgKChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50KSA9PiBOZ3RSZW5kZXJlcilcblx0fCBQYXJ0aWFsPE5ndFByb3BlcnRpZXM8VEhSRUUuV2ViR0xSZW5kZXJlcj4gfCBUSFJFRS5XZWJHTFJlbmRlcmVyUGFyYW1ldGVycz5cblx0fCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIE5ndENhbnZhc0lucHV0cyA9IHtcblx0LyoqIEEgdGhyZWVqcyByZW5kZXJlciBpbnN0YW5jZSBvciBwcm9wcyB0aGF0IGdvIGludG8gdGhlIGRlZmF1bHQgcmVuZGVyZXIgKi9cblx0Z2w/OiBOZ3RHTE9wdGlvbnM7XG5cdHNpemU/OiBOZ3RTaXplO1xuXG5cdC8qKlxuXHQgKiBFbmFibGVzIHNoYWRvd3MgKGJ5IGRlZmF1bHQgUENGc29mdCkuIENhbiBhY2NlcHQgYGdsLnNoYWRvd01hcGAgb3B0aW9ucyBmb3IgZmluZS10dW5pbmcsXG5cdCAqIGJ1dCBhbHNvIHN0cmluZ3M6ICdiYXNpYycgfCAncGVyY2VudGFnZScgfCAnc29mdCcgfCAndmFyaWFuY2UnLlxuXHQgKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jYXBpL2VuL3JlbmRlcmVycy9XZWJHTFJlbmRlcmVyLnNoYWRvd01hcFxuXHQgKi9cblx0c2hhZG93cz86IGJvb2xlYW4gfCAnYmFzaWMnIHwgJ3BlcmNlbnRhZ2UnIHwgJ3NvZnQnIHwgJ3ZhcmlhbmNlJyB8IFBhcnRpYWw8VEhSRUUuV2ViR0xTaGFkb3dNYXA+O1xuXHQvKipcblx0ICogRGlzYWJsZXMgdGhyZWUgcjEzOSBjb2xvciBtYW5hZ2VtZW50LlxuXHQgKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jbWFudWFsL2VuL2ludHJvZHVjdGlvbi9Db2xvci1tYW5hZ2VtZW50XG5cdCAqL1xuXHRsZWdhY3k/OiBib29sZWFuO1xuXHQvKiogU3dpdGNoIG9mZiBhdXRvbWF0aWMgc1JHQiBlbmNvZGluZyBhbmQgZ2FtbWEgY29ycmVjdGlvbiAqL1xuXHRsaW5lYXI/OiBib29sZWFuO1xuXHQvKiogVXNlIGBUSFJFRS5Ob1RvbmVNYXBwaW5nYCBpbnN0ZWFkIG9mIGBUSFJFRS5BQ0VTRmlsbWljVG9uZU1hcHBpbmdgICovXG5cdGZsYXQ/OiBib29sZWFuO1xuXHQvKiogQ3JlYXRlcyBhbiBvcnRob2dyYXBoaWMgY2FtZXJhICovXG5cdG9ydGhvZ3JhcGhpYz86IGJvb2xlYW47XG5cdC8qKlxuXHQgKiBSM0YncyByZW5kZXIgbW9kZS4gU2V0IHRvIGBkZW1hbmRgIHRvIG9ubHkgcmVuZGVyIG9uIHN0YXRlIGNoYW5nZSBvciBgbmV2ZXJgIHRvIHRha2UgY29udHJvbC5cblx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hZHZhbmNlZC9zY2FsaW5nLXBlcmZvcm1hbmNlI29uLWRlbWFuZC1yZW5kZXJpbmdcblx0ICovXG5cdGZyYW1lbG9vcD86ICdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInO1xuXHQvKipcblx0ICogUjNGIHBlcmZvcm1hbmNlIG9wdGlvbnMgZm9yIGFkYXB0aXZlIHBlcmZvcm1hbmNlLlxuXHQgKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FkdmFuY2VkL3NjYWxpbmctcGVyZm9ybWFuY2UjbW92ZW1lbnQtcmVncmVzc2lvblxuXHQgKi9cblx0cGVyZm9ybWFuY2U/OiBQYXJ0aWFsPE9taXQ8Tmd0UGVyZm9ybWFuY2UsICdyZWdyZXNzJz4+O1xuXHQvKiogVGFyZ2V0IHBpeGVsIHJhdGlvLiBDYW4gY2xhbXAgYmV0d2VlbiBhIHJhbmdlOiBgW21pbiwgbWF4XWAgKi9cblx0ZHByPzogTmd0RHByO1xuXHQvKiogUHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHJheWNhc3RlciAqL1xuXHRyYXljYXN0ZXI/OiBQYXJ0aWFsPFRIUkVFLlJheWNhc3Rlcj47XG5cdC8qKiBBIGBUSFJFRS5TY2VuZWAgaW5zdGFuY2Ugb3IgcHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHNjZW5lICovXG5cdHNjZW5lPzogVEhSRUUuU2NlbmUgfCBQYXJ0aWFsPFRIUkVFLlNjZW5lPjtcblx0LyoqIEEgYENhbWVyYWAgaW5zdGFuY2Ugb3IgcHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IGNhbWVyYSAqL1xuXHRjYW1lcmE/OiAoXG5cdFx0fCBOZ3RDYW1lcmFcblx0XHR8IFBhcnRpYWw8XG5cdFx0XHRcdE5ndE9iamVjdDNETm9kZTxUSFJFRS5DYW1lcmEsIHR5cGVvZiBUSFJFRS5DYW1lcmE+ICZcblx0XHRcdFx0XHROZ3RPYmplY3QzRE5vZGU8VEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEsIHR5cGVvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYT4gJlxuXHRcdFx0XHRcdE5ndE9iamVjdDNETm9kZTxUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEsIHR5cGVvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmE+XG5cdFx0ICA+XG5cdCkgJiB7XG5cdFx0LyoqIEZsYWdzIHRoZSBjYW1lcmEgYXMgbWFudWFsLCBwdXR0aW5nIHByb2plY3Rpb24gaW50byB5b3VyIG93biBoYW5kcyAqL1xuXHRcdG1hbnVhbD86IGJvb2xlYW47XG5cdH07XG5cdC8qKiBBbiBSM0YgZXZlbnQgbWFuYWdlciB0byBtYW5hZ2UgZWxlbWVudHMnIHBvaW50ZXIgZXZlbnRzICovXG5cdGV2ZW50cz86IChzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+KSA9PiBOZ3RFdmVudE1hbmFnZXI8SFRNTEVsZW1lbnQ+O1xuXHQvKiogVGhlIHRhcmdldCB3aGVyZSBldmVudHMgYXJlIGJlaW5nIHN1YnNjcmliZWQgdG8sIGRlZmF1bHQ6IHRoZSBkaXYgdGhhdCB3cmFwcyBjYW52YXMgKi9cblx0ZXZlbnRTb3VyY2U/OiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXHQvKiogVGhlIGV2ZW50IHByZWZpeCB0aGF0IGlzIGNhc3QgaW50byBjYW52YXMgcG9pbnRlciB4L3kgZXZlbnRzLCBkZWZhdWx0OiBcIm9mZnNldFwiICovXG5cdGV2ZW50UHJlZml4PzogJ29mZnNldCcgfCAnY2xpZW50JyB8ICdwYWdlJyB8ICdsYXllcicgfCAnc2NyZWVuJztcblx0LyoqIERlZmF1bHQgY29vcmRpbmF0ZSBmb3IgdGhlIGNhbWVyYSB0byBsb29rIGF0ICovXG5cdGxvb2tBdD86IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPjtcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndC1jYW52YXMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgKG5neFJlc2l6ZSk9XCJvblJlc2l6ZSgkZXZlbnQpXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO1wiPlxuXHRcdFx0PGNhbnZhcyAjZ2xDYW52YXMgc3R5bGU9XCJkaXNwbGF5OiBibG9jaztcIj48L2NhbnZhcz5cblx0XHQ8L2Rpdj5cblx0YCxcblx0aW1wb3J0czogW05neFJlc2l6ZV0sXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVOZ3hSZXNpemVPcHRpb25zKHsgZW1pdEluWm9uZTogZmFsc2UsIGVtaXRJbml0aWFsUmVzdWx0OiB0cnVlIH0pLCBwcm92aWRlTmd0U3RvcmUoKV0sXG5cdGhvc3Q6IHtcblx0XHRzdHlsZTogJ2Rpc3BsYXk6IGJsb2NrO3Bvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7b3ZlcmZsb3c6IGhpZGRlbjsnLFxuXHRcdCdbc3R5bGUucG9pbnRlckV2ZW50c10nOiAnaGJQb2ludGVyRXZlbnRzKCknLFxuXHR9LFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Q2FudmFzIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJpdmF0ZSBpbml0Um9vdCA9IGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcigpO1xuXG5cdHByaXZhdGUgaG9zdCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cdHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0cHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdHByaXZhdGUgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblx0cHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG5cdHByaXZhdGUgaW5wdXRzID0gc2lnbmFsU3RvcmU8Tmd0Q2FudmFzSW5wdXRzPih7XG5cdFx0c2hhZG93czogZmFsc2UsXG5cdFx0bGluZWFyOiBmYWxzZSxcblx0XHRmbGF0OiBmYWxzZSxcblx0XHRsZWdhY3k6IGZhbHNlLFxuXHRcdG9ydGhvZ3JhcGhpYzogZmFsc2UsXG5cdFx0ZnJhbWVsb29wOiAnYWx3YXlzJyxcblx0XHRkcHI6IFsxLCAyXSxcblx0XHRldmVudHM6IGNyZWF0ZVBvaW50ZXJFdmVudHMsXG5cdH0pO1xuXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNjZW5lR3JhcGghOiBUeXBlPHVua25vd24+O1xuXHRASW5wdXQoKSBzY2VuZUdyYXBoSW5wdXRzOiBOZ3RBbnlSZWNvcmQgPSB7fTtcblx0QElucHV0KCkgY29tcG91bmRQcmVmaXhlczogc3RyaW5nW10gPSBbXTtcblxuXHRASW5wdXQoKSBzZXQgbGluZWFyKGxpbmVhcjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGxpbmVhciB9KTtcblx0fVxuXG5cdEBJbnB1dCgpIHNldCBsZWdhY3kobGVnYWN5OiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbGVnYWN5IH0pO1xuXHR9XG5cblx0QElucHV0KCkgc2V0IGZsYXQoZmxhdDogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZsYXQgfSk7XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgb3J0aG9ncmFwaGljKG9ydGhvZ3JhcGhpYzogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9ydGhvZ3JhcGhpYyB9KTtcblx0fVxuXG5cdEBJbnB1dCgpIHNldCBmcmFtZWxvb3AoZnJhbWVsb29wOiBOZ3RDYW52YXNJbnB1dHNbJ2ZyYW1lbG9vcCddKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZnJhbWVsb29wIH0pO1xuXHR9XG5cblx0QElucHV0KCkgc2V0IGRwcihkcHI6IE5ndERwcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRwciB9KTtcblx0fVxuXG5cdEBJbnB1dCgpIHNldCByYXljYXN0ZXIocmF5Y2FzdGVyOiBQYXJ0aWFsPFRIUkVFLlJheWNhc3Rlcj4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyByYXljYXN0ZXIgfSk7XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgc2hhZG93cyhzaGFkb3dzOiBib29sZWFuIHwgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzaGFkb3dzIH0pO1xuXHR9XG5cblx0QElucHV0KCkgc2V0IGNhbWVyYShjYW1lcmE6IE5ndENhbnZhc0lucHV0c1snY2FtZXJhJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBjYW1lcmEgfSk7XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgc2NlbmUoc2NlbmU6IE5ndENhbnZhc0lucHV0c1snc2NlbmUnXSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHNjZW5lIH0pO1xuXHR9XG5cblx0QElucHV0KCkgc2V0IGdsKGdsOiBOZ3RDYW52YXNJbnB1dHNbJ2dsJ10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBnbCB9KTtcblx0fVxuXG5cdEBJbnB1dCgpIHNldCBldmVudFNvdXJjZShldmVudFNvdXJjZTogTmd0Q2FudmFzSW5wdXRzWydldmVudFNvdXJjZSddKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZXZlbnRTb3VyY2UgfSk7XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgZXZlbnRQcmVmaXgoZXZlbnRQcmVmaXg6IE5ndENhbnZhc0lucHV0c1snZXZlbnRQcmVmaXgnXSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGV2ZW50UHJlZml4IH0pO1xuXHR9XG5cblx0QElucHV0KCkgc2V0IGxvb2tBdChsb29rQXQ6IE5ndENhbnZhc0lucHV0c1snbG9va0F0J10pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBsb29rQXQgfSk7XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgcGVyZm9ybWFuY2UocGVyZm9ybWFuY2U6IE5ndENhbnZhc0lucHV0c1sncGVyZm9ybWFuY2UnXSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHBlcmZvcm1hbmNlIH0pO1xuXHR9XG5cblx0QE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFN0YXRlPigpO1xuXG5cdHByaXZhdGUgaW5wdXRzRXZlbnRTb3VyY2UgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2V2ZW50U291cmNlJyk7XG5cdHByb3RlY3RlZCBoYlBvaW50ZXJFdmVudHMgPSBjb21wdXRlZCgoKSA9PiAoISF0aGlzLmlucHV0c0V2ZW50U291cmNlKCkgPyAnbm9uZScgOiAnYXV0bycpKTtcblxuXHRAVmlld0NoaWxkKCdnbENhbnZhcycsIHsgc3RhdGljOiB0cnVlIH0pIGdsQ2FudmFzITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XG5cblx0cHJpdmF0ZSByZXNpemVFZmZlY3RSZWY/OiBFZmZlY3RSZWY7XG5cdHByaXZhdGUgY29uZmlndXJhdG9yPzogTmd0Q2FudmFzQ29uZmlndXJhdG9yO1xuXHRwcml2YXRlIGdsRW52aXJvbm1lbnRJbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG5cdHByaXZhdGUgZ2xSZWY/OiBDb21wb25lbnRSZWY8dW5rbm93bj47XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VzWydzY2VuZUdyYXBoSW5wdXRzJ10gJiYgIWNoYW5nZXNbJ3NjZW5lR3JhcGhJbnB1dHMnXS5maXJzdENoYW5nZSAmJiB0aGlzLmdsUmVmKSB7XG5cdFx0XHR0aGlzLnNldFNjZW5lR3JhcGhJbnB1dHMoKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHQvLyBOT1RFOiB3ZSByZXNvbHZlIGdsQ2FudmFzIGF0IHRoaXMgcG9pbnQsIHNldHVwIHRoZSBjb25maWd1cmF0b3Jcblx0XHR0aGlzLmNvbmZpZ3VyYXRvciA9IHRoaXMuaW5pdFJvb3QodGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50KTtcblxuXHRcdHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuXHRcdFx0dGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3I/LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMuZ2xSZWY/LmRlc3Ryb3koKTtcblx0XHRcdHRoaXMucmVzaXplRWZmZWN0UmVmPy5kZXN0cm95KCk7XG5cdFx0XHRpbmplY3ROZ3RMb2FkZXIuZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5jb25maWd1cmF0b3I/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdC8vIE5PVEU6IHJ1bnMgb3V0c2lkZSBvZiBab25lIGR1ZSB0byBlbWl0SW5ab25lOiBmYWxzZVxuXHRvblJlc2l6ZShyZXN1bHQ6IE5neFJlc2l6ZVJlc3VsdCkge1xuXHRcdGlmIChyZXN1bHQud2lkdGggPiAwICYmIHJlc3VsdC5oZWlnaHQgPiAwKSB7XG5cdFx0XHR0aGlzLnJlc2l6ZUVmZmVjdFJlZj8uZGVzdHJveSgpO1xuXG5cdFx0XHRjb25zdCBpbnB1dHMgPSB0aGlzLmlucHV0cy5zZWxlY3QoKTtcblx0XHRcdC8vIE5PVEU6IGdvIGJhY2sgaW50byB6b25lIHNvIHRoYXQgZWZmZWN0IHJ1bnNcblx0XHRcdC8vIFRPRE86IERvdWJsZS1jaGVjayB3aGVuIGVmZmVjdCBpcyBtYWRlIG5vdCBkZXBlbmRlZCBvbiB6b25lXG5cdFx0XHR0aGlzLnJlc2l6ZUVmZmVjdFJlZiA9IHRoaXMuem9uZS5ydW4oKCkgPT5cblx0XHRcdFx0ZWZmZWN0KFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICghdGhpcy5jb25maWd1cmF0b3IpIHRoaXMuY29uZmlndXJhdG9yID0gdGhpcy5pbml0Um9vdCh0aGlzLmdsQ2FudmFzLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbmZpZ3VyYXRvci5jb25maWd1cmUoeyAuLi5pbnB1dHMoKSwgc2l6ZTogcmVzdWx0IH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLmdsUmVmKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVuZGVyKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBtYW51YWxDbGVhbnVwOiB0cnVlLCBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuXHRcdFx0XHQpLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlcigpIHtcblx0XHR0aGlzLmdsRW52aXJvbm1lbnRJbmplY3Rvcj8uZGVzdHJveSgpO1xuXHRcdHRoaXMuZ2xSZWY/LmRlc3Ryb3koKTtcblxuXHRcdC8vIEZsYWcgdGhlIGNhbnZhcyBhY3RpdmUsIHJlbmRlcmluZyB3aWxsIG5vdyBiZWdpblxuXHRcdHRoaXMuc3RvcmUuc2V0KChzdGF0ZSkgPT4gKHsgaW50ZXJuYWw6IHsgLi4uc3RhdGUuaW50ZXJuYWwsIGFjdGl2ZTogdHJ1ZSB9IH0pKTtcblxuXHRcdGNvbnN0IGlucHV0cyA9IHRoaXMuaW5wdXRzLmdldCgpO1xuXHRcdGNvbnN0IHN0YXRlID0gdGhpcy5zdG9yZS5nZXQoKTtcblxuXHRcdC8vIGNvbm5lY3QgdG8gZXZlbnQgc291cmNlXG5cdFx0c3RhdGUuZXZlbnRzLmNvbm5lY3Q/Lihcblx0XHRcdGlucHV0cy5ldmVudFNvdXJjZVxuXHRcdFx0XHQ/IGlzLnJlZihpbnB1dHMuZXZlbnRTb3VyY2UpXG5cdFx0XHRcdFx0PyBpbnB1dHMuZXZlbnRTb3VyY2UubmF0aXZlRWxlbWVudFxuXHRcdFx0XHRcdDogaW5wdXRzLmV2ZW50U291cmNlXG5cdFx0XHRcdDogdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0KTtcblxuXHRcdC8vIHNldHVwIGNvbXB1dGUgZm9yIGV2ZW50UHJlZml4XG5cdFx0aWYgKGlucHV0cy5ldmVudFByZWZpeCkge1xuXHRcdFx0c3RhdGUuc2V0RXZlbnRzKHtcblx0XHRcdFx0Y29tcHV0ZTogKGV2ZW50LCBzdG9yZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGlubmVyU3RhdGUgPSBzdG9yZS5nZXQoKTtcblx0XHRcdFx0XHRjb25zdCB4ID0gZXZlbnRbKGlucHV0cy5ldmVudFByZWZpeCArICdYJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcblx0XHRcdFx0XHRjb25zdCB5ID0gZXZlbnRbKGlucHV0cy5ldmVudFByZWZpeCArICdZJykgYXMga2V5b2YgTmd0RG9tRXZlbnRdIGFzIG51bWJlcjtcblx0XHRcdFx0XHRpbm5lclN0YXRlLnBvaW50ZXIuc2V0KCh4IC8gaW5uZXJTdGF0ZS5zaXplLndpZHRoKSAqIDIgLSAxLCAtKHkgLyBpbm5lclN0YXRlLnNpemUuaGVpZ2h0KSAqIDIgKyAxKTtcblx0XHRcdFx0XHRpbm5lclN0YXRlLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKGlubmVyU3RhdGUucG9pbnRlciwgaW5uZXJTdGF0ZS5jYW1lcmEpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gZW1pdCBjcmVhdGVkIGV2ZW50IGlmIG9ic2VydmVkXG5cdFx0aWYgKHRoaXMuY3JlYXRlZC5vYnNlcnZlZCkge1xuXHRcdFx0Ly8gYnV0IGdvIGJhY2sgaW50byB6b25lIHRvIGRvIHNvXG5cdFx0XHR0aGlzLnpvbmUucnVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5jcmVhdGVkLmVtaXQodGhpcy5zdG9yZS5nZXQoKSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuc3RvcmUuZ2V0KCdldmVudHMnLCAnY29ubmVjdGVkJykpIHtcblx0XHRcdHRoaXMuc3RvcmUuZ2V0KCdldmVudHMnKS5jb25uZWN0Py4odGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50KTtcblx0XHR9XG5cblx0XHR0aGlzLmdsRW52aXJvbm1lbnRJbmplY3RvciA9IGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IoXG5cdFx0XHRbcHJvdmlkZU5ndFJlbmRlcmVyKHRoaXMuc3RvcmUsIHRoaXMuY29tcG91bmRQcmVmaXhlcywgdGhpcy5jZHIpXSxcblx0XHRcdHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcixcblx0XHQpO1xuXHRcdHRoaXMuZ2xSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuc2NlbmVHcmFwaCwge1xuXHRcdFx0ZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5nbEVudmlyb25tZW50SW5qZWN0b3IsXG5cdFx0XHRpbmplY3RvcjogdGhpcy5pbmplY3Rvcixcblx0XHR9KTtcblx0XHR0aGlzLm92ZXJyaWRlQ2hhbmdlRGV0ZWN0b3JSZWYoKTtcblx0XHR0aGlzLnNldFNjZW5lR3JhcGhJbnB1dHMoKTtcblx0fVxuXG5cdHByaXZhdGUgb3ZlcnJpZGVDaGFuZ2VEZXRlY3RvclJlZigpIHtcblx0XHRjb25zdCBvcmlnaW5hbERldGVjdENoYW5nZXMgPSB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzLmJpbmQodGhpcy5jZHIpO1xuXHRcdHRoaXMuY2RyLmRldGVjdENoYW5nZXMgPSAoKSA9PiB7XG5cdFx0XHRvcmlnaW5hbERldGVjdENoYW5nZXMoKTtcblx0XHRcdHNhZmVEZXRlY3RDaGFuZ2VzKHRoaXMuZ2xSZWY/LmNoYW5nZURldGVjdG9yUmVmKTtcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRTY2VuZUdyYXBoSW5wdXRzKCkge1xuXHRcdHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZ2xSZWYpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2VuZUdyYXBoSW5wdXRzKSkge1xuXHRcdFx0XHRcdHRoaXMuZ2xSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5nbFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2FudmFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUF5QyxNQUFNLG1CQUFtQixDQUFDO0FBQzNHLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEQsT0FBTyxFQUFFLDJCQUEyQixFQUFxRCxNQUFNLFNBQVMsQ0FBQztBQUN6RyxPQUFPLEVBQ04sY0FBYyxFQUNkLGVBQWUsR0FNZixNQUFNLFNBQVMsQ0FBQztBQUdqQixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxXQUFXLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7O0FBdUZ4RSxNQUFNLE9BQU8sU0FBUztJQWVyQixJQUEwQyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUM5RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFZRCxJQUFpQyxhQUFhLENBQUMsS0FBK0I7UUFD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b21wb25lbnQsXG5cdERlc3Ryb3lSZWYsXG5cdEVsZW1lbnRSZWYsXG5cdEVudmlyb25tZW50SW5qZWN0b3IsXG5cdEV2ZW50RW1pdHRlcixcblx0SW5qZWN0b3IsXG5cdElucHV0LFxuXHROZ1pvbmUsXG5cdE91dHB1dCxcblx0Vmlld0NoaWxkLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRjcmVhdGVFbnZpcm9ubWVudEluamVjdG9yLFxuXHRpbmplY3QsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxuXHR0eXBlIENvbXBvbmVudFJlZixcblx0dHlwZSBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IE5neFJlc2l6ZSwgcHJvdmlkZVJlc2l6ZU9wdGlvbnMsIHR5cGUgUmVzaXplT3B0aW9ucywgdHlwZSBSZXNpemVSZXN1bHQgfSBmcm9tICduZ3h0ZW5zaW9uL3Jlc2l6ZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBjcmVhdGVQb2ludGVyRXZlbnRzIH0gZnJvbSAnLi9kb20vZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FtZXJhLCBOZ3REb21FdmVudCwgTmd0RXZlbnRNYW5hZ2VyIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHsgcHJvdmlkZU5ndFJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlcic7XG5pbXBvcnQgeyBpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXIsIHR5cGUgTmd0Q2FudmFzQ29uZmlndXJhdG9yLCB0eXBlIE5ndENhbnZhc0VsZW1lbnQgfSBmcm9tICcuL3Jvb3RzJztcbmltcG9ydCB7XG5cdGluamVjdE5ndFN0b3JlLFxuXHRwcm92aWRlTmd0U3RvcmUsXG5cdHR5cGUgTmd0RHByLFxuXHR0eXBlIE5ndFBlcmZvcm1hbmNlLFxuXHR0eXBlIE5ndFJlbmRlcmVyTGlrZSxcblx0dHlwZSBOZ3RTaXplLFxuXHR0eXBlIE5ndFN0YXRlLFxufSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0T2JqZWN0M0ROb2RlIH0gZnJvbSAnLi90aHJlZS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0UHJvcGVydGllcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IHNpZ25hbFN0b3JlLCB0eXBlIE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuXG5leHBvcnQgdHlwZSBOZ3RHTE9wdGlvbnMgPVxuXHR8IE5ndFJlbmRlcmVyTGlrZVxuXHR8ICgoY2FudmFzOiBOZ3RDYW52YXNFbGVtZW50KSA9PiBOZ3RSZW5kZXJlckxpa2UpXG5cdHwgUGFydGlhbDxOZ3RQcm9wZXJ0aWVzPFRIUkVFLldlYkdMUmVuZGVyZXI+IHwgVEhSRUUuV2ViR0xSZW5kZXJlclBhcmFtZXRlcnM+XG5cdHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBOZ3RDYW52YXNJbnB1dHMgPSB7XG5cdC8qKiBBIHRocmVlanMgcmVuZGVyZXIgaW5zdGFuY2Ugb3IgcHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHJlbmRlcmVyICovXG5cdGdsPzogTmd0R0xPcHRpb25zO1xuXHQvKiogRGltZW5zaW9ucyB0byBmaXQgdGhlIHJlbmRlcmVyIHRvLiBXaWxsIG1lYXN1cmUgY2FudmFzIGRpbWVuc2lvbnMgaWYgb21pdHRlZCAqL1xuXHRzaXplPzogTmd0U2l6ZTtcblx0LyoqXG5cdCAqIEVuYWJsZXMgc2hhZG93cyAoYnkgZGVmYXVsdCBQQ0Zzb2Z0KS4gQ2FuIGFjY2VwdCBgZ2wuc2hhZG93TWFwYCBvcHRpb25zIGZvciBmaW5lLXR1bmluZyxcblx0ICogYnV0IGFsc28gc3RyaW5nczogJ2Jhc2ljJyB8ICdwZXJjZW50YWdlJyB8ICdzb2Z0JyB8ICd2YXJpYW5jZScuXG5cdCAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNhcGkvZW4vcmVuZGVyZXJzL1dlYkdMUmVuZGVyZXIuc2hhZG93TWFwXG5cdCAqL1xuXHRzaGFkb3dzPzogYm9vbGVhbiB8ICdiYXNpYycgfCAncGVyY2VudGFnZScgfCAnc29mdCcgfCAndmFyaWFuY2UnIHwgUGFydGlhbDxUSFJFRS5XZWJHTFNoYWRvd01hcD47XG5cdC8qKlxuXHQgKiBEaXNhYmxlcyB0aHJlZSByMTM5IGNvbG9yIG1hbmFnZW1lbnQuXG5cdCAqIEBzZWUgaHR0cHM6Ly90aHJlZWpzLm9yZy9kb2NzLyNtYW51YWwvZW4vaW50cm9kdWN0aW9uL0NvbG9yLW1hbmFnZW1lbnRcblx0ICovXG5cdGxlZ2FjeT86IGJvb2xlYW47XG5cdC8qKiBTd2l0Y2ggb2ZmIGF1dG9tYXRpYyBzUkdCIGNvbG9yIHNwYWNlIGFuZCBnYW1tYSBjb3JyZWN0aW9uICovXG5cdGxpbmVhcj86IGJvb2xlYW47XG5cdC8qKiBVc2UgYFRIUkVFLk5vVG9uZU1hcHBpbmdgIGluc3RlYWQgb2YgYFRIUkVFLkFDRVNGaWxtaWNUb25lTWFwcGluZ2AgKi9cblx0ZmxhdD86IGJvb2xlYW47XG5cdC8qKiBDcmVhdGVzIGFuIG9ydGhvZ3JhcGhpYyBjYW1lcmEgKi9cblx0b3J0aG9ncmFwaGljPzogYm9vbGVhbjtcblx0LyoqXG5cdCAqIFIzRidzIHJlbmRlciBtb2RlLiBTZXQgdG8gYGRlbWFuZGAgdG8gb25seSByZW5kZXIgb24gc3RhdGUgY2hhbmdlIG9yIGBuZXZlcmAgdG8gdGFrZSBjb250cm9sLlxuXHQgKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FkdmFuY2VkL3NjYWxpbmctcGVyZm9ybWFuY2Ujb24tZGVtYW5kLXJlbmRlcmluZ1xuXHQgKi9cblx0ZnJhbWVsb29wPzogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcic7XG5cdC8qKlxuXHQgKiBSM0YgcGVyZm9ybWFuY2Ugb3B0aW9ucyBmb3IgYWRhcHRpdmUgcGVyZm9ybWFuY2UuXG5cdCAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYWR2YW5jZWQvc2NhbGluZy1wZXJmb3JtYW5jZSNtb3ZlbWVudC1yZWdyZXNzaW9uXG5cdCAqL1xuXHRwZXJmb3JtYW5jZT86IFBhcnRpYWw8T21pdDxOZ3RQZXJmb3JtYW5jZSwgJ3JlZ3Jlc3MnPj47XG5cdC8qKiBUYXJnZXQgcGl4ZWwgcmF0aW8uIENhbiBjbGFtcCBiZXR3ZWVuIGEgcmFuZ2U6IGBbbWluLCBtYXhdYCAqL1xuXHRkcHI/OiBOZ3REcHI7XG5cdC8qKiBQcm9wcyB0aGF0IGdvIGludG8gdGhlIGRlZmF1bHQgcmF5Y2FzdGVyICovXG5cdHJheWNhc3Rlcj86IFBhcnRpYWw8VEhSRUUuUmF5Y2FzdGVyPjtcblx0LyoqIEEgYFRIUkVFLlNjZW5lYCBpbnN0YW5jZSBvciBwcm9wcyB0aGF0IGdvIGludG8gdGhlIGRlZmF1bHQgc2NlbmUgKi9cblx0c2NlbmU/OiBUSFJFRS5TY2VuZSB8IFBhcnRpYWw8VEhSRUUuU2NlbmU+O1xuXHQvKiogQSBgQ2FtZXJhYCBpbnN0YW5jZSBvciBwcm9wcyB0aGF0IGdvIGludG8gdGhlIGRlZmF1bHQgY2FtZXJhICovXG5cdGNhbWVyYT86IChcblx0XHR8IE5ndENhbWVyYVxuXHRcdHwgUGFydGlhbDxcblx0XHRcdFx0Tmd0T2JqZWN0M0ROb2RlPFRIUkVFLkNhbWVyYSwgdHlwZW9mIFRIUkVFLkNhbWVyYT4gJlxuXHRcdFx0XHRcdE5ndE9iamVjdDNETm9kZTxUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSwgdHlwZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhPiAmXG5cdFx0XHRcdFx0Tmd0T2JqZWN0M0ROb2RlPFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSwgdHlwZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYT5cblx0XHQgID5cblx0KSAmIHtcblx0XHQvKiogRmxhZ3MgdGhlIGNhbWVyYSBhcyBtYW51YWwsIHB1dHRpbmcgcHJvamVjdGlvbiBpbnRvIHlvdXIgb3duIGhhbmRzICovXG5cdFx0bWFudWFsPzogYm9vbGVhbjtcblx0fTtcblx0LyoqIEFuIFIzRiBldmVudCBtYW5hZ2VyIHRvIG1hbmFnZSBlbGVtZW50cycgcG9pbnRlciBldmVudHMgKi9cblx0ZXZlbnRzPzogKHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4pID0+IE5ndEV2ZW50TWFuYWdlcjxIVE1MRWxlbWVudD47XG5cdC8qKiBUaGUgdGFyZ2V0IHdoZXJlIGV2ZW50cyBhcmUgYmVpbmcgc3Vic2NyaWJlZCB0bywgZGVmYXVsdDogdGhlIGRpdiB0aGF0IHdyYXBzIGNhbnZhcyAqL1xuXHRldmVudFNvdXJjZT86IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cdC8qKiBUaGUgZXZlbnQgcHJlZml4IHRoYXQgaXMgY2FzdCBpbnRvIGNhbnZhcyBwb2ludGVyIHgveSBldmVudHMsIGRlZmF1bHQ6IFwib2Zmc2V0XCIgKi9cblx0ZXZlbnRQcmVmaXg/OiAnb2Zmc2V0JyB8ICdjbGllbnQnIHwgJ3BhZ2UnIHwgJ2xheWVyJyB8ICdzY3JlZW4nO1xuXHQvKiogRGVmYXVsdCBjb29yZGluYXRlIGZvciB0aGUgY2FtZXJhIHRvIGxvb2sgYXQgKi9cblx0bG9va0F0PzogVEhSRUUuVmVjdG9yMyB8IFBhcmFtZXRlcnM8VEhSRUUuVmVjdG9yM1snc2V0J10+O1xufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0LWNhbnZhcycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdiAobmd4UmVzaXplKT1cInJlc2l6ZVJlc3VsdC5zZXQoJGV2ZW50KVwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTtcIj5cblx0XHRcdDxjYW52YXMgI2dsQ2FudmFzIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7XCI+PC9jYW52YXM+XG5cdFx0PC9kaXY+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3hSZXNpemVdLFxuXHRwcm92aWRlcnM6IFtcblx0XHRwcm92aWRlUmVzaXplT3B0aW9ucyh7IGVtaXRJblpvbmU6IGZhbHNlLCBlbWl0SW5pdGlhbFJlc3VsdDogdHJ1ZSwgZGVib3VuY2U6IDI1MCB9IGFzIFJlc2l6ZU9wdGlvbnMpLFxuXHRcdHByb3ZpZGVOZ3RTdG9yZSgpLFxuXHRdLFxuXHRob3N0OiB7XG5cdFx0c3R5bGU6ICdkaXNwbGF5OiBibG9jaztwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO292ZXJmbG93OiBoaWRkZW47Jyxcblx0XHQnW3N0eWxlLnBvaW50ZXJFdmVudHNdJzogJ2hiUG9pbnRlckV2ZW50cygpJyxcblx0fSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndENhbnZhcyB7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGluaXRSb290ID0gaW5qZWN0Q2FudmFzUm9vdEluaXRpYWxpemVyKCk7XG5cdHByaXZhdGUgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cdHByaXZhdGUgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXHRwcml2YXRlIGVudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cdHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNjZW5lR3JhcGghOiBUeXBlPGFueT47XG5cdEBJbnB1dCgpIGNvbXBvdW5kUHJlZml4ZXM6IHN0cmluZ1tdID0gW107XG5cblx0cHJpdmF0ZSBzY2VuZUdyYXBoSW5wdXRzID0gc2lnbmFsPE5ndEFueVJlY29yZD4oe30sIHsgZXF1YWw6IE9iamVjdC5pcyB9KTtcblx0QElucHV0KHsgYWxpYXM6ICdzY2VuZUdyYXBoSW5wdXRzJyB9KSBzZXQgX3NjZW5lR3JhcGhJbnB1dHModmFsdWU6IE5ndEFueVJlY29yZCkge1xuXHRcdHRoaXMuc2NlbmVHcmFwaElucHV0cy5zZXQodmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBjYW52YXNJbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RDYW52YXNJbnB1dHM+KHtcblx0XHRzaGFkb3dzOiBmYWxzZSxcblx0XHRsaW5lYXI6IGZhbHNlLFxuXHRcdGZsYXQ6IGZhbHNlLFxuXHRcdGxlZ2FjeTogZmFsc2UsXG5cdFx0b3J0aG9ncmFwaGljOiBmYWxzZSxcblx0XHRmcmFtZWxvb3A6ICdhbHdheXMnLFxuXHRcdGRwcjogWzEsIDJdLFxuXHRcdGV2ZW50czogY3JlYXRlUG9pbnRlckV2ZW50cyxcblx0fSk7XG5cdEBJbnB1dCh7IGFsaWFzOiAnb3B0aW9ucycgfSkgc2V0IF9jYW52YXNJbnB1dHModmFsdWU6IFBhcnRpYWw8Tmd0Q2FudmFzSW5wdXRzPikge1xuXHRcdHRoaXMuY2FudmFzSW5wdXRzLnVwZGF0ZSh2YWx1ZSk7XG5cdH1cblxuXHRAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0U3RhdGU+KCk7XG5cblx0QFZpZXdDaGlsZCgnZ2xDYW52YXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBnbENhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuXG5cdC8vIE5PVEU6IHRoaXMgc2lnbmFsIGlzIHVwZGF0ZWQgb3V0c2lkZSBvZiBab25lXG5cdHByb3RlY3RlZCByZXNpemVSZXN1bHQgPSBzaWduYWw8UmVzaXplUmVzdWx0Pih7fSBhcyBSZXNpemVSZXN1bHQsIHsgZXF1YWw6IE9iamVjdC5pcyB9KTtcblxuXHRwcml2YXRlIGV2ZW50U291cmNlID0gdGhpcy5jYW52YXNJbnB1dHMuc2VsZWN0KCdldmVudFNvdXJjZScpO1xuXHRwcm90ZWN0ZWQgaGJQb2ludGVyRXZlbnRzID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuZXZlbnRTb3VyY2UoKSA/ICdub25lJyA6ICdhdXRvJykpO1xuXG5cdHByaXZhdGUgY29uZmlndXJhdG9yPzogTmd0Q2FudmFzQ29uZmlndXJhdG9yO1xuXHRwcml2YXRlIGdsRW52aXJvbm1lbnRJbmplY3Rvcj86IEVudmlyb25tZW50SW5qZWN0b3I7XG5cdHByaXZhdGUgZ2xSZWY/OiBDb21wb25lbnRSZWY8dW5rbm93bj47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJhdG9yID0gdGhpcy5pbml0Um9vdCh0aGlzLmdsQ2FudmFzLm5hdGl2ZUVsZW1lbnQpO1xuXHRcdFx0XHR0aGlzLm5vWm9uZVJlc2l6ZUVmZmVjdCgpO1xuXHRcdFx0XHR0aGlzLm5vWm9uZVNjZW5lR3JhcGhJbnB1dHNFZmZlY3QoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLmdsUmVmPy5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmdsRW52aXJvbm1lbnRJbmplY3Rvcj8uZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5jb25maWd1cmF0b3I/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgbm9ab25lUmVzaXplRWZmZWN0KCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCByZXNpemVSZXN1bHQgPSB0aGlzLnJlc2l6ZVJlc3VsdCgpO1xuXHRcdFx0aWYgKHJlc2l6ZVJlc3VsdC53aWR0aCA+IDAgJiYgcmVzaXplUmVzdWx0LmhlaWdodCA+IDApIHtcblx0XHRcdFx0aWYgKCF0aGlzLmNvbmZpZ3VyYXRvcikgdGhpcy5jb25maWd1cmF0b3IgPSB0aGlzLmluaXRSb290KHRoaXMuZ2xDYW52YXMubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRcdHRoaXMuY29uZmlndXJhdG9yLmNvbmZpZ3VyZSh7IC4uLnRoaXMuY2FudmFzSW5wdXRzLnN0YXRlKCksIHNpemU6IHJlc2l6ZVJlc3VsdCB9KTtcblxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdsUmVmKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdsUmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5ub1pvbmVSZW5kZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBub1pvbmVSZW5kZXIoKSB7XG5cdFx0Ly8gTk9URTogZGVzdHJveSBwcmV2aW91cyBpbnN0YW5jZXMgaWYgZXhpc3RlZFxuXHRcdHRoaXMuZ2xFbnZpcm9ubWVudEluamVjdG9yPy5kZXN0cm95KCk7XG5cdFx0dGhpcy5nbFJlZj8uZGVzdHJveSgpO1xuXG5cdFx0Ly8gTk9URTogRmxhZyB0aGUgY2FudmFzIGFjdGl2ZSwgcmVuZGVyaW5nIHdpbGwgbm93IGJlZ2luXG5cdFx0dGhpcy5zdG9yZS51cGRhdGUoKHN0YXRlKSA9PiAoeyBpbnRlcm5hbDogeyAuLi5zdGF0ZS5pbnRlcm5hbCwgYWN0aXZlOiB0cnVlIH0gfSkpO1xuXG5cdFx0Y29uc3QgW2lucHV0cywgc3RhdGVdID0gW3RoaXMuY2FudmFzSW5wdXRzLnNuYXBzaG90LCB0aGlzLnN0b3JlLnNuYXBzaG90XTtcblxuXHRcdC8vIGNvbm5lY3QgdG8gZXZlbnQgc291cmNlXG5cdFx0c3RhdGUuZXZlbnRzLmNvbm5lY3Q/Lihcblx0XHRcdGlucHV0cy5ldmVudFNvdXJjZVxuXHRcdFx0XHQ/IGlzLnJlZihpbnB1dHMuZXZlbnRTb3VyY2UpXG5cdFx0XHRcdFx0PyBpbnB1dHMuZXZlbnRTb3VyY2UubmF0aXZlRWxlbWVudFxuXHRcdFx0XHRcdDogaW5wdXRzLmV2ZW50U291cmNlXG5cdFx0XHRcdDogdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsXG5cdFx0KTtcblxuXHRcdC8vIHNldHVwIGNvbXB1dGUgZm9yIGV2ZW50UHJlZml4XG5cdFx0aWYgKGlucHV0cy5ldmVudFByZWZpeCkge1xuXHRcdFx0c3RhdGUuc2V0RXZlbnRzKHtcblx0XHRcdFx0Y29tcHV0ZTogKGV2ZW50LCBzdG9yZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHsgcG9pbnRlciwgcmF5Y2FzdGVyLCBjYW1lcmEsIHNpemUgfSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdGNvbnN0IHggPSBldmVudFsoaW5wdXRzLmV2ZW50UHJlZml4ICsgJ1gnKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuXHRcdFx0XHRcdGNvbnN0IHkgPSBldmVudFsoaW5wdXRzLmV2ZW50UHJlZml4ICsgJ1knKSBhcyBrZXlvZiBOZ3REb21FdmVudF0gYXMgbnVtYmVyO1xuXHRcdFx0XHRcdHBvaW50ZXIuc2V0KCh4IC8gc2l6ZS53aWR0aCkgKiAyIC0gMSwgLSh5IC8gc2l6ZS5oZWlnaHQpICogMiArIDEpO1xuXHRcdFx0XHRcdHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHBvaW50ZXIsIGNhbWVyYSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvLyBlbWl0IGNyZWF0ZWQgZXZlbnQgaWYgb2JzZXJ2ZWRcblx0XHRpZiAodGhpcy5jcmVhdGVkLm9ic2VydmVkKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZWQuZW1pdCh0aGlzLnN0b3JlLnNuYXBzaG90KTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuc3RvcmUuZ2V0KCdldmVudHMnLCAnY29ubmVjdGVkJykpIHtcblx0XHRcdHRoaXMuc3RvcmUuZ2V0KCdldmVudHMnKS5jb25uZWN0Py4odGhpcy5nbENhbnZhcy5uYXRpdmVFbGVtZW50KTtcblx0XHR9XG5cblx0XHR0aGlzLmdsRW52aXJvbm1lbnRJbmplY3RvciA9IGNyZWF0ZUVudmlyb25tZW50SW5qZWN0b3IoXG5cdFx0XHRbcHJvdmlkZU5ndFJlbmRlcmVyKHRoaXMuc3RvcmUsIHRoaXMuY29tcG91bmRQcmVmaXhlcyldLFxuXHRcdFx0dGhpcy5lbnZpcm9ubWVudEluamVjdG9yLFxuXHRcdCk7XG5cdFx0dGhpcy5nbFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQodGhpcy5zY2VuZUdyYXBoLCB7XG5cdFx0XHRlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmdsRW52aXJvbm1lbnRJbmplY3Rvcixcblx0XHRcdGluamVjdG9yOiB0aGlzLmluamVjdG9yLFxuXHRcdH0pO1xuXG5cdFx0dGhpcy5nbFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0dGhpcy5zZXRTY2VuZUdyYXBoSW5wdXRzKHVudHJhY2tlZCh0aGlzLnNjZW5lR3JhcGhJbnB1dHMpKTtcblx0fVxuXG5cdHByaXZhdGUgbm9ab25lU2NlbmVHcmFwaElucHV0c0VmZmVjdCgpIHtcblx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTY2VuZUdyYXBoSW5wdXRzKHRoaXMuc2NlbmVHcmFwaElucHV0cygpKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2NlbmVHcmFwaElucHV0cyhzY2VuZUdyYXBoSW5wdXRzOiBOZ3RBbnlSZWNvcmQpIHtcblx0XHRpZiAodGhpcy5nbFJlZikge1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2NlbmVHcmFwaElucHV0cykpIHtcblx0XHRcdFx0dGhpcy5nbFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Directive, Input } from '@angular/core';
2
- import { NgtCommonDirective } from './common';
2
+ import { NgtCommonDirective, provideNodeType } from './common';
3
3
  import * as i0 from "@angular/core";
4
4
  export class NgtArgs extends NgtCommonDirective {
5
5
  constructor() {
@@ -23,13 +23,13 @@ export class NgtArgs extends NgtCommonDirective {
23
23
  validate() {
24
24
  return !this.injected && !!this.injectedArgs.length;
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtArgs, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
27
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtArgs, isStandalone: true, selector: "ng-template[args]", inputs: { args: "args" }, usesInheritance: true, ngImport: i0 }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtArgs, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
27
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: NgtArgs, isStandalone: true, selector: "ng-template[args]", inputs: { args: "args" }, providers: [provideNodeType('args')], usesInheritance: true, ngImport: i0 }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtArgs, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtArgs, decorators: [{
30
30
  type: Directive,
31
- args: [{ selector: 'ng-template[args]', standalone: true }]
31
+ args: [{ selector: 'ng-template[args]', standalone: true, providers: [provideNodeType('args')] }]
32
32
  }], propDecorators: { args: [{
33
33
  type: Input
34
34
  }] } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRzlDLE1BQU0sT0FBTyxPQUFxQyxTQUFRLGtCQUFrQjtJQUQ1RTs7UUFFUyxpQkFBWSxHQUFVLEVBQXNCLENBQUM7S0FvQnJEO0lBbEJBLElBQWEsSUFBSSxDQUFDLElBQWtCO1FBQ25DLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDO1lBQUUsT0FBTztRQUM1RixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUN6QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELFFBQVE7UUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDckQsQ0FBQzs4R0FwQlcsT0FBTztrR0FBUCxPQUFPOzsyRkFBUCxPQUFPO2tCQURuQixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7OEJBSWhELElBQUk7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RDb21tb25EaXJlY3RpdmUgfSBmcm9tICcuL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2FyZ3NdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5ndEFyZ3M8VEFyZ3MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdPiBleHRlbmRzIE5ndENvbW1vbkRpcmVjdGl2ZSB7XG5cdHByaXZhdGUgaW5qZWN0ZWRBcmdzOiBUQXJncyA9IFtdIGFzIHVua25vd24gYXMgVEFyZ3M7XG5cblx0QElucHV0KCkgc2V0IGFyZ3MoYXJnczogVEFyZ3MgfCBudWxsKSB7XG5cdFx0aWYgKGFyZ3MgPT0gbnVsbCB8fCAhQXJyYXkuaXNBcnJheShhcmdzKSB8fCAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXSA9PT0gbnVsbCkpIHJldHVybjtcblx0XHR0aGlzLmluamVjdGVkID0gZmFsc2U7XG5cdFx0dGhpcy5pbmplY3RlZEFyZ3MgPSBhcmdzO1xuXHRcdHRoaXMuY3JlYXRlVmlldygpO1xuXHR9XG5cblx0Z2V0IGFyZ3MoKSB7XG5cdFx0aWYgKHRoaXMudmFsaWRhdGUoKSkge1xuXHRcdFx0dGhpcy5pbmplY3RlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbmplY3RlZEFyZ3M7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuICF0aGlzLmluamVjdGVkICYmICEhdGhpcy5pbmplY3RlZEFyZ3MubGVuZ3RoO1xuXHR9XG59XG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvYXJncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUcvRCxNQUFNLE9BQU8sT0FBcUMsU0FBUSxrQkFBa0I7SUFENUU7O1FBRVMsaUJBQVksR0FBVSxFQUFzQixDQUFDO0tBb0JyRDtJQWxCQSxJQUFhLElBQUksQ0FBQyxJQUFrQjtRQUNuQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztZQUFFLE9BQU87UUFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsUUFBUTtRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNyRCxDQUFDOzhHQXBCVyxPQUFPO2tHQUFQLE9BQU8sMEZBRHFELENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzsyRkFDckYsT0FBTztrQkFEbkIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFOzhCQUl0RixJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0Q29tbW9uRGlyZWN0aXZlLCBwcm92aWRlTm9kZVR5cGUgfSBmcm9tICcuL2NvbW1vbic7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2FyZ3NdJywgc3RhbmRhbG9uZTogdHJ1ZSwgcHJvdmlkZXJzOiBbcHJvdmlkZU5vZGVUeXBlKCdhcmdzJyldIH0pXG5leHBvcnQgY2xhc3MgTmd0QXJnczxUQXJncyBleHRlbmRzIGFueVtdID0gYW55W10+IGV4dGVuZHMgTmd0Q29tbW9uRGlyZWN0aXZlIHtcblx0cHJpdmF0ZSBpbmplY3RlZEFyZ3M6IFRBcmdzID0gW10gYXMgdW5rbm93biBhcyBUQXJncztcblxuXHRASW5wdXQoKSBzZXQgYXJncyhhcmdzOiBUQXJncyB8IG51bGwpIHtcblx0XHRpZiAoYXJncyA9PSBudWxsIHx8ICFBcnJheS5pc0FycmF5KGFyZ3MpIHx8IChhcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmdzWzBdID09PSBudWxsKSkgcmV0dXJuO1xuXHRcdHRoaXMuaW5qZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmluamVjdGVkQXJncyA9IGFyZ3M7XG5cdFx0dGhpcy5jcmVhdGVWaWV3KCk7XG5cdH1cblxuXHRnZXQgYXJncygpIHtcblx0XHRpZiAodGhpcy52YWxpZGF0ZSgpKSB7XG5cdFx0XHR0aGlzLmluamVjdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0aGlzLmluamVjdGVkQXJncztcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YWxpZGF0ZSgpIHtcblx0XHRyZXR1cm4gIXRoaXMuaW5qZWN0ZWQgJiYgISF0aGlzLmluamVjdGVkQXJncy5sZW5ndGg7XG5cdH1cbn1cbiJdfQ==
@@ -1,21 +1,22 @@
1
1
  import { DestroyRef, Directive, NgZone, TemplateRef, ViewContainerRef, inject, } from '@angular/core';
2
+ import { createInjectionToken } from 'ngxtension/create-injection-token';
2
3
  import { SPECIAL_INTERNAL_ADD_COMMENT } from '../renderer/constants';
3
- import { safeDetectChanges } from '../utils/safe-detect-changes';
4
4
  import * as i0 from "@angular/core";
5
+ export const [injectNodeType, provideNodeType] = createInjectionToken(() => '', {
6
+ isRoot: false,
7
+ });
5
8
  export class NgtCommonDirective {
6
- static { this.processComment = true; }
7
9
  constructor() {
8
10
  this.vcr = inject(ViewContainerRef);
9
11
  this.zone = inject(NgZone);
10
12
  this.template = inject(TemplateRef);
13
+ this.nodeType = injectNodeType();
11
14
  this.injected = false;
12
15
  this.shouldCreateView = true;
13
- if (NgtCommonDirective.processComment) {
14
- const commentNode = this.vcr.element.nativeElement;
15
- if (commentNode[SPECIAL_INTERNAL_ADD_COMMENT]) {
16
- commentNode[SPECIAL_INTERNAL_ADD_COMMENT]();
17
- delete commentNode[SPECIAL_INTERNAL_ADD_COMMENT];
18
- }
16
+ const commentNode = this.vcr.element.nativeElement;
17
+ if (commentNode[SPECIAL_INTERNAL_ADD_COMMENT]) {
18
+ commentNode[SPECIAL_INTERNAL_ADD_COMMENT](this.nodeType);
19
+ delete commentNode[SPECIAL_INTERNAL_ADD_COMMENT];
19
20
  }
20
21
  inject(DestroyRef).onDestroy(() => {
21
22
  this.view?.destroy();
@@ -28,14 +29,14 @@ export class NgtCommonDirective {
28
29
  this.view.destroy();
29
30
  }
30
31
  this.view = this.vcr.createEmbeddedView(this.template);
31
- safeDetectChanges(this.view);
32
+ this.view.detectChanges();
32
33
  }
33
34
  });
34
35
  }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtCommonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
36
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtCommonDirective, ngImport: i0 }); }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtCommonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
37
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: NgtCommonDirective, ngImport: i0 }); }
37
38
  }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtCommonDirective, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtCommonDirective, decorators: [{
39
40
  type: Directive
40
- }], ctorParameters: function () { return []; } });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUdqRSxNQUFNLE9BQWdCLGtCQUFrQjthQUN0QixtQkFBYyxHQUFHLElBQUksQUFBUCxDQUFRO0lBVXZDO1FBUlEsUUFBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9CLFNBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU3QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUlqQyxJQUFJLGtCQUFrQixDQUFDLGNBQWMsRUFBRTtZQUN0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDbkQsSUFBSSxXQUFXLENBQUMsNEJBQTRCLENBQUMsRUFBRTtnQkFDOUMsV0FBVyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQztnQkFDNUMsT0FBTyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQzthQUNqRDtTQUNEO1FBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFJUyxVQUFVO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2hDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXJDb0Isa0JBQWtCO2tHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBRHZDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHREZXN0cm95UmVmLFxuXHREaXJlY3RpdmUsXG5cdE5nWm9uZSxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDb250YWluZXJSZWYsXG5cdGluamVjdCxcblx0dHlwZSBFbWJlZGRlZFZpZXdSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVCB9IGZyb20gJy4uL3JlbmRlcmVyL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBzYWZlRGV0ZWN0Q2hhbmdlcyB9IGZyb20gJy4uL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RDb21tb25EaXJlY3RpdmUge1xuXHRwcm90ZWN0ZWQgc3RhdGljIHByb2Nlc3NDb21tZW50ID0gdHJ1ZTtcblxuXHRwcml2YXRlIHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXG5cdHByb3RlY3RlZCBpbmplY3RlZCA9IGZhbHNlO1xuXHRwcm90ZWN0ZWQgc2hvdWxkQ3JlYXRlVmlldyA9IHRydWU7XG5cdHByaXZhdGUgdmlldz86IEVtYmVkZGVkVmlld1JlZjx1bmtub3duPjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpZiAoTmd0Q29tbW9uRGlyZWN0aXZlLnByb2Nlc3NDb21tZW50KSB7XG5cdFx0XHRjb25zdCBjb21tZW50Tm9kZSA9IHRoaXMudmNyLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmIChjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSkge1xuXHRcdFx0XHRjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSgpO1xuXHRcdFx0XHRkZWxldGUgY29tbWVudE5vZGVbU1BFQ0lBTF9JTlRFUk5BTF9BRERfQ09NTUVOVF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHR0aGlzLnZpZXc/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdGFic3RyYWN0IHZhbGlkYXRlKCk6IGJvb2xlYW47XG5cblx0cHJvdGVjdGVkIGNyZWF0ZVZpZXcoKSB7XG5cdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLnNob3VsZENyZWF0ZVZpZXcpIHtcblx0XHRcdFx0aWYgKHRoaXMudmlldyAmJiAhdGhpcy52aWV3LmRlc3Ryb3llZCkge1xuXHRcdFx0XHRcdHRoaXMudmlldy5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy52aWV3ID0gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO1xuXHRcdFx0XHRzYWZlRGV0ZWN0Q2hhbmdlcyh0aGlzLnZpZXcpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
41
+ }], ctorParameters: () => [] });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsTUFBTSxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUVyRSxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUE0QixFQUFFO0lBQ3pHLE1BQU0sRUFBRSxLQUFLO0NBQ2IsQ0FBQyxDQUFDO0FBR0gsTUFBTSxPQUFnQixrQkFBa0I7SUFVdkM7UUFUUSxRQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0IsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLGFBQVEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUxQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUlqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbkQsSUFBSSxXQUFXLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO1lBQy9DLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxPQUFPLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUlTLFVBQVU7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDckIsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBbENvQixrQkFBa0I7a0dBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEdkMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERlc3Ryb3lSZWYsXG5cdERpcmVjdGl2ZSxcblx0Tmdab25lLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0aW5qZWN0LFxuXHR0eXBlIEVtYmVkZGVkVmlld1JlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UIH0gZnJvbSAnLi4vcmVuZGVyZXIvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROb2RlVHlwZSwgcHJvdmlkZU5vZGVUeXBlXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKCgpID0+ICcnIGFzICdhcmdzJyB8ICdwYXJlbnQnIHwgJycsIHtcblx0aXNSb290OiBmYWxzZSxcbn0pO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RDb21tb25EaXJlY3RpdmUge1xuXHRwcml2YXRlIHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblx0cHJpdmF0ZSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cdHByaXZhdGUgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXHRwcml2YXRlIG5vZGVUeXBlID0gaW5qZWN0Tm9kZVR5cGUoKTtcblxuXHRwcm90ZWN0ZWQgaW5qZWN0ZWQgPSBmYWxzZTtcblx0cHJvdGVjdGVkIHNob3VsZENyZWF0ZVZpZXcgPSB0cnVlO1xuXHRwcml2YXRlIHZpZXc/OiBFbWJlZGRlZFZpZXdSZWY8dW5rbm93bj47XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgY29tbWVudE5vZGUgPSB0aGlzLnZjci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKGNvbW1lbnROb2RlW1NQRUNJQUxfSU5URVJOQUxfQUREX0NPTU1FTlRdKSB7XG5cdFx0XHRjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXSh0aGlzLm5vZGVUeXBlKTtcblx0XHRcdGRlbGV0ZSBjb21tZW50Tm9kZVtTUEVDSUFMX0lOVEVSTkFMX0FERF9DT01NRU5UXTtcblx0XHR9XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHRoaXMudmlldz8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0YWJzdHJhY3QgdmFsaWRhdGUoKTogYm9vbGVhbjtcblxuXHRwcm90ZWN0ZWQgY3JlYXRlVmlldygpIHtcblx0XHR0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuc2hvdWxkQ3JlYXRlVmlldykge1xuXHRcdFx0XHRpZiAodGhpcy52aWV3ICYmICF0aGlzLnZpZXcuZGVzdHJveWVkKSB7XG5cdFx0XHRcdFx0dGhpcy52aWV3LmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnZpZXcgPSB0aGlzLnZjci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7XG5cdFx0XHRcdHRoaXMudmlldy5kZXRlY3RDaGFuZ2VzKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Directive, Input } from '@angular/core';
2
- import { NgtCommonDirective } from './common';
2
+ import { NgtCommonDirective, provideNodeType } from './common';
3
3
  import * as i0 from "@angular/core";
4
4
  export class NgtParent extends NgtCommonDirective {
5
5
  constructor() {
@@ -23,13 +23,13 @@ export class NgtParent extends NgtCommonDirective {
23
23
  validate() {
24
24
  return !this.injected && !!this.injectedParent;
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtParent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
27
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtParent, isStandalone: true, selector: "ng-template[parent]", inputs: { parent: "parent" }, usesInheritance: true, ngImport: i0 }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtParent, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
27
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.1", type: NgtParent, isStandalone: true, selector: "ng-template[parent]", inputs: { parent: "parent" }, providers: [provideNodeType('parent')], usesInheritance: true, ngImport: i0 }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtParent, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NgtParent, decorators: [{
30
30
  type: Directive,
31
- args: [{ selector: 'ng-template[parent]', standalone: true }]
31
+ args: [{ selector: 'ng-template[parent]', standalone: true, providers: [provideNodeType('parent')] }]
32
32
  }], propDecorators: { parent: [{
33
33
  type: Input
34
34
  }] } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9wYXJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUc5QyxNQUFNLE9BQU8sU0FBVSxTQUFRLGtCQUFrQjtJQURqRDs7UUFFUyxtQkFBYyxHQUFvQyxJQUFLLENBQUM7S0FvQmhFO0lBbEJBLElBQWEsTUFBTSxDQUFDLE1BQXVDO1FBQzFELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNULElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVE7UUFDUCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNoRCxDQUFDOzhHQXBCVyxTQUFTO2tHQUFULFNBQVM7OzJGQUFULFNBQVM7a0JBRHJCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs4QkFJbEQsTUFBTTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgTmd0UmVmIH0gZnJvbSAnLi4vcmVmJztcbmltcG9ydCB7IE5ndENvbW1vbkRpcmVjdGl2ZSB9IGZyb20gJy4vY29tbW9uJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcGFyZW50XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RQYXJlbnQgZXh0ZW5kcyBOZ3RDb21tb25EaXJlY3RpdmUge1xuXHRwcml2YXRlIGluamVjdGVkUGFyZW50OiBzdHJpbmcgfCBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+ID0gbnVsbCE7XG5cblx0QElucHV0KCkgc2V0IHBhcmVudChwYXJlbnQ6IHN0cmluZyB8IE5ndFJlZjxUSFJFRS5PYmplY3QzRD4pIHtcblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXHRcdHRoaXMuaW5qZWN0ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmluamVjdGVkUGFyZW50ID0gcGFyZW50O1xuXHRcdHRoaXMuY3JlYXRlVmlldygpO1xuXHR9XG5cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRpZiAodGhpcy52YWxpZGF0ZSgpKSB7XG5cdFx0XHR0aGlzLmluamVjdGVkID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0aGlzLmluamVjdGVkUGFyZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbCE7XG5cdH1cblxuXHR2YWxpZGF0ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gIXRoaXMuaW5qZWN0ZWQgJiYgISF0aGlzLmluamVjdGVkUGFyZW50O1xuXHR9XG59XG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZGlyZWN0aXZlcy9wYXJlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7QUFHL0QsTUFBTSxPQUFPLFNBQVUsU0FBUSxrQkFBa0I7SUFEakQ7O1FBRVMsbUJBQWMsR0FBb0MsSUFBSyxDQUFDO0tBb0JoRTtJQWxCQSxJQUFhLE1BQU0sQ0FBQyxNQUF1QztRQUMxRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDVCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxJQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUTtRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ2hELENBQUM7OEdBcEJXLFNBQVM7a0dBQVQsU0FBUyxnR0FEcUQsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7OzJGQUN6RixTQUFTO2tCQURyQixTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7OEJBSTFGLE1BQU07c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFJlZiB9IGZyb20gJy4uL3JlZic7XG5pbXBvcnQgeyBOZ3RDb21tb25EaXJlY3RpdmUsIHByb3ZpZGVOb2RlVHlwZSB9IGZyb20gJy4vY29tbW9uJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbcGFyZW50XScsIHN0YW5kYWxvbmU6IHRydWUsIHByb3ZpZGVyczogW3Byb3ZpZGVOb2RlVHlwZSgncGFyZW50JyldIH0pXG5leHBvcnQgY2xhc3MgTmd0UGFyZW50IGV4dGVuZHMgTmd0Q29tbW9uRGlyZWN0aXZlIHtcblx0cHJpdmF0ZSBpbmplY3RlZFBhcmVudDogc3RyaW5nIHwgTmd0UmVmPFRIUkVFLk9iamVjdDNEPiA9IG51bGwhO1xuXG5cdEBJbnB1dCgpIHNldCBwYXJlbnQocGFyZW50OiBzdHJpbmcgfCBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+KSB7XG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblx0XHR0aGlzLmluamVjdGVkID0gZmFsc2U7XG5cdFx0dGhpcy5pbmplY3RlZFBhcmVudCA9IHBhcmVudDtcblx0XHR0aGlzLmNyZWF0ZVZpZXcoKTtcblx0fVxuXG5cdGdldCBwYXJlbnQoKSB7XG5cdFx0aWYgKHRoaXMudmFsaWRhdGUoKSkge1xuXHRcdFx0dGhpcy5pbmplY3RlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbmplY3RlZFBhcmVudDtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGwhO1xuXHR9XG5cblx0dmFsaWRhdGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLmluamVjdGVkICYmICEhdGhpcy5pbmplY3RlZFBhcmVudDtcblx0fVxufVxuIl19