ngx-vflow 1.11.1 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/esm2022/lib/vflow/components/background/background.component.mjs +4 -3
  2. package/esm2022/lib/vflow/components/node/node.component.mjs +3 -1
  3. package/esm2022/lib/vflow/components/preview-flow/draw-node.mjs +100 -0
  4. package/esm2022/lib/vflow/components/preview-flow/preview-flow.component.mjs +62 -0
  5. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +26 -12
  6. package/esm2022/lib/vflow/directives/map-context.directive.mjs +28 -18
  7. package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +3 -3
  8. package/esm2022/lib/vflow/interfaces/node-preview.interface.mjs +2 -0
  9. package/esm2022/lib/vflow/interfaces/node.interface.mjs +1 -1
  10. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +6 -2
  11. package/esm2022/lib/vflow/models/edge.model.mjs +42 -15
  12. package/esm2022/lib/vflow/models/handle.model.mjs +3 -1
  13. package/esm2022/lib/vflow/models/node.model.mjs +6 -1
  14. package/esm2022/lib/vflow/services/edge-rendering.service.mjs +14 -2
  15. package/esm2022/lib/vflow/services/flow-settings.service.mjs +3 -1
  16. package/esm2022/lib/vflow/services/node-rendering.service.mjs +35 -2
  17. package/esm2022/lib/vflow/services/preview-flow-render-strategy.service.mjs +21 -0
  18. package/esm2022/lib/vflow/services/viewport.service.mjs +8 -1
  19. package/esm2022/lib/vflow/utils/assert-injector.mjs +27 -0
  20. package/esm2022/lib/vflow/utils/signals/extended-computed.mjs +15 -0
  21. package/esm2022/lib/vflow/utils/signals/to-lazy-signal.mjs +35 -0
  22. package/esm2022/lib/vflow/utils/viewport.mjs +37 -1
  23. package/esm2022/public-api.mjs +2 -1
  24. package/esm2022/testing/component-mocks/vflow-mock.component.mjs +7 -7
  25. package/fesm2022/ngx-vflow-testing.mjs +6 -6
  26. package/fesm2022/ngx-vflow-testing.mjs.map +1 -1
  27. package/fesm2022/ngx-vflow.mjs +436 -46
  28. package/fesm2022/ngx-vflow.mjs.map +1 -1
  29. package/lib/vflow/components/preview-flow/draw-node.d.ts +2 -0
  30. package/lib/vflow/components/preview-flow/preview-flow.component.d.ts +15 -0
  31. package/lib/vflow/components/vflow/vflow.component.d.ts +5 -2
  32. package/lib/vflow/directives/map-context.directive.d.ts +3 -2
  33. package/lib/vflow/interfaces/node-preview.interface.d.ts +3 -0
  34. package/lib/vflow/interfaces/node.interface.d.ts +3 -0
  35. package/lib/vflow/interfaces/optimization.interface.d.ts +17 -1
  36. package/lib/vflow/models/node.model.d.ts +3 -0
  37. package/lib/vflow/services/edge-rendering.service.d.ts +2 -0
  38. package/lib/vflow/services/flow-settings.service.d.ts +2 -0
  39. package/lib/vflow/services/node-rendering.service.d.ts +4 -0
  40. package/lib/vflow/services/preview-flow-render-strategy.service.d.ts +12 -0
  41. package/lib/vflow/services/viewport.service.d.ts +3 -0
  42. package/lib/vflow/utils/assert-injector.d.ts +44 -0
  43. package/lib/vflow/utils/signals/extended-computed.d.ts +5 -0
  44. package/lib/vflow/utils/signals/to-lazy-signal.d.ts +20 -0
  45. package/lib/vflow/utils/viewport.d.ts +19 -0
  46. package/package.json +1 -1
  47. package/public-api.d.ts +1 -0
  48. package/testing/component-mocks/vflow-mock.component.d.ts +3 -3
@@ -3,8 +3,9 @@ import { ViewportService } from '../../services/viewport.service';
3
3
  import { RootSvgReferenceDirective } from '../../directives/reference.directive';
4
4
  import { id } from '../../utils/id';
5
5
  import { FlowSettingsService } from '../../services/flow-settings.service';
6
- import { toObservable, toSignal } from '@angular/core/rxjs-interop';
6
+ import { toObservable } from '@angular/core/rxjs-interop';
7
7
  import { map, switchMap } from 'rxjs';
8
+ import { toLazySignal } from '../../utils/signals/to-lazy-signal';
8
9
  import * as i0 from "@angular/core";
9
10
  const defaultBg = '#fff';
10
11
  const defaultGap = 20;
@@ -48,7 +49,7 @@ export class BackgroundComponent {
48
49
  const background = this.backgroundSignal();
49
50
  return background.type === 'image' ? background.src : '';
50
51
  });
51
- this.imageSize = toSignal(toObservable(this.backgroundSignal).pipe(switchMap(() => createImage(this.bgImageSrc())), map((image) => ({ width: image.naturalWidth, height: image.naturalHeight }))), { initialValue: { width: 0, height: 0 } });
52
+ this.imageSize = toLazySignal(toObservable(this.backgroundSignal).pipe(switchMap(() => createImage(this.bgImageSrc())), map((image) => ({ width: image.naturalWidth, height: image.naturalHeight }))), { initialValue: { width: 0, height: 0 } });
52
53
  this.scaledImageWidth = computed(() => {
53
54
  const background = this.backgroundSignal();
54
55
  if (background.type === 'image') {
@@ -117,4 +118,4 @@ function createImage(url) {
117
118
  image.onload = () => resolve(image);
118
119
  });
119
120
  }
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUV0QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztBQUM3QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUM5QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFRN0IsTUFBTSxPQUFPLG1CQUFtQjtJQTBIOUI7UUF6SFEs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QUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpZCB9IGZyb20gJy4uLy4uL3V0aWxzL2lkJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5cbmNvbnN0IGRlZmF1bHRCZyA9ICcjZmZmJztcbmNvbnN0IGRlZmF1bHRHYXAgPSAyMDtcbmNvbnN0IGRlZmF1bHREb3RTaXplID0gMjtcbmNvbnN0IGRlZmF1bHREb3RDb2xvciA9ICdyZ2IoMTc3LCAxNzcsIDE4MyknO1xuY29uc3QgZGVmYXVsdEltYWdlU2NhbGUgPSAwLjE7XG5jb25zdCBkZWZhdWx0UmVwZWF0ZWQgPSB0cnVlO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdnW2JhY2tncm91bmRdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JhY2tncm91bmQuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQmFja2dyb3VuZENvbXBvbmVudCB7XG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgcm9vdFN2ZyA9IGluamVjdChSb290U3ZnUmVmZXJlbmNlRGlyZWN0aXZlKS5lbGVtZW50O1xuICBwcml2YXRlIHNldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgYmFja2dyb3VuZFNpZ25hbCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQ7XG5cbiAgLy8gRE9UUyBQQVRURVJOXG4gIHByb3RlY3RlZCBzY2FsZWRHYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICBjb25zdCB6b29tID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb207XG5cbiAgICAgIHJldHVybiB6b29tICogKGJhY2tncm91bmQuZ2FwID8/IGRlZmF1bHRHYXApO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgeCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS54ICUgdGhpcy5zY2FsZWRHYXAoKSk7XG5cbiAgcHJvdGVjdGVkIHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueSAlIHRoaXMuc2NhbGVkR2FwKCkpO1xuXG4gIHByb3RlY3RlZCBwYXR0ZXJuQ29sb3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmcgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIGlmIChiZy50eXBlID09PSAnZG90cycpIHtcbiAgICAgIHJldHVybiBiZy5jb2xvciA/PyBkZWZhdWx0RG90Q29sb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHREb3RDb2xvcjtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHBhdHRlcm5TaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgcmV0dXJuICh0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbSAqIChiYWNrZ3JvdW5kLnNpemUgPz8gZGVmYXVsdERvdFNpemUpKSAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIC8vIElNQUdFIFBBVFRFUk5cbiAgcHJvdGVjdGVkIGJnSW1hZ2VTcmMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgcmV0dXJuIGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJyA/IGJhY2tncm91bmQuc3JjIDogJyc7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpbWFnZVNpemUgPSB0b1NpZ25hbChcbiAgICB0b09ic2VydmFibGUodGhpcy5iYWNrZ3JvdW5kU2lnbmFsKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGNyZWF0ZUltYWdlKHRoaXMuYmdJbWFnZVNyYygpKSksXG4gICAgICBtYXAoKGltYWdlKSA9PiAoeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfSkpLFxuICAgICksXG4gICAgeyBpbml0aWFsVmFsdWU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9IH0sXG4gICk7XG5cbiAgcHJvdGVjdGVkIHNjYWxlZEltYWdlV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgY29uc3Qgem9vbSA9IGJhY2tncm91bmQuZml4ZWQgPyAxIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb207XG5cbiAgICAgIHJldHVybiB0aGlzLmltYWdlU2l6ZSgpLndpZHRoICogem9vbSAqIChiYWNrZ3JvdW5kLnNjYWxlID8/IGRlZmF1bHRJbWFnZVNjYWxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHNjYWxlZEltYWdlSGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgIGNvbnN0IHpvb20gPSBiYWNrZ3JvdW5kLmZpeGVkID8gMSA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS56b29tO1xuXG4gICAgICByZXR1cm4gdGhpcy5pbWFnZVNpemUoKS5oZWlnaHQgKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaW1hZ2VYID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgIGlmICghYmFja2dyb3VuZC5yZXBlYXQpIHtcbiAgICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWQgPyAwIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLng7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkID8gMCA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS54ICUgdGhpcy5zY2FsZWRJbWFnZVdpZHRoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpbWFnZVkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgaWYgKCFiYWNrZ3JvdW5kLnJlcGVhdCkge1xuICAgICAgICByZXR1cm4gYmFja2dyb3VuZC5maXhlZCA/IDAgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWQgPyAwIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnkgJSB0aGlzLnNjYWxlZEltYWdlSGVpZ2h0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZXBlYXRlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICByZXR1cm4gYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnICYmIChiYWNrZ3JvdW5kLnJlcGVhdCA/PyBkZWZhdWx0UmVwZWF0ZWQpO1xuICB9KTtcblxuICAvLyBXaXRob3V0IElEIHRoZXJlIHdpbGwgYmUgcGF0dGVybiBjb2xsaXNpb24gZm9yIHNldmVyYWwgZmxvd3Mgb24gdGhlIHBhZ2VcbiAgLy8gTGF0ZXIgcGF0dGVybiBJRCBtYXkgYmUgZXhwb3NlZCB0byBBUElcbiAgcHJvdGVjdGVkIHBhdHRlcm5JZCA9IGlkKCk7XG4gIHByb3RlY3RlZCBwYXR0ZXJuVXJsID0gYHVybCgjJHt0aGlzLnBhdHRlcm5JZH0pYDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgICAgdGhpcy5yb290U3ZnLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmQuYmFja2dyb3VuZENvbG9yID8/IGRlZmF1bHRCZztcbiAgICAgIH1cblxuICAgICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ3NvbGlkJykge1xuICAgICAgICB0aGlzLnJvb3RTdmcuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZC5jb2xvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbWFnZSh1cmw6IHN0cmluZykge1xuICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuXG4gIGltYWdlLnNyYyA9IHVybDtcblxuICByZXR1cm4gbmV3IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4oKHJlc29sdmUpID0+IHtcbiAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltYWdlKTtcbiAgfSk7XG59XG4iLCJAaWYgKGJhY2tncm91bmRTaWduYWwoKS50eXBlID09PSAnZG90cycpIHtcbiAgPHN2ZzpwYXR0ZXJuXG4gICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgIFthdHRyLmlkXT1cInBhdHRlcm5JZFwiXG4gICAgW2F0dHIueF09XCJ4KClcIlxuICAgIFthdHRyLnldPVwieSgpXCJcbiAgICBbYXR0ci53aWR0aF09XCJzY2FsZWRHYXAoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEdhcCgpXCI+XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIFthdHRyLmN4XT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuY3ldPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5yXT1cInBhdHRlcm5TaXplKClcIlxuICAgICAgW2F0dHIuZmlsbF09XCJwYXR0ZXJuQ29sb3IoKVwiIC8+XG4gIDwvc3ZnOnBhdHRlcm4+XG5cbiAgPHN2ZzpyZWN0IHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgW2F0dHIuZmlsbF09XCJwYXR0ZXJuVXJsXCIgLz5cbn1cblxuQGlmIChiYWNrZ3JvdW5kU2lnbmFsKCkudHlwZSA9PT0gJ2ltYWdlJykge1xuICBAaWYgKHJlcGVhdGVkKCkpIHtcbiAgICA8c3ZnOnBhdHRlcm5cbiAgICAgIHBhdHRlcm5Vbml0cz1cInVzZXJTcGFjZU9uVXNlXCJcbiAgICAgIFthdHRyLmlkXT1cInBhdHRlcm5JZFwiXG4gICAgICBbYXR0ci54XT1cImltYWdlWCgpXCJcbiAgICAgIFthdHRyLnldPVwiaW1hZ2VZKClcIlxuICAgICAgW2F0dHIud2lkdGhdPVwic2NhbGVkSW1hZ2VXaWR0aCgpXCJcbiAgICAgIFthdHRyLmhlaWdodF09XCJzY2FsZWRJbWFnZUhlaWdodCgpXCI+XG4gICAgICA8c3ZnOmltYWdlIFthdHRyLmhyZWZdPVwiYmdJbWFnZVNyYygpXCIgW2F0dHIud2lkdGhdPVwic2NhbGVkSW1hZ2VXaWR0aCgpXCIgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIiAvPlxuICAgIDwvc3ZnOnBhdHRlcm4+XG5cbiAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBbYXR0ci5maWxsXT1cInBhdHRlcm5VcmxcIiAvPlxuICB9XG5cbiAgQGlmICghcmVwZWF0ZWQoKSkge1xuICAgIDxzdmc6aW1hZ2VcbiAgICAgIFthdHRyLnhdPVwiaW1hZ2VYKClcIlxuICAgICAgW2F0dHIueV09XCJpbWFnZVkoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIlxuICAgICAgW2F0dHIuaHJlZl09XCJiZ0ltYWdlU3JjKClcIiAvPlxuICB9XG59XG4iXX0=
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQUVsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztBQUM3QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUM5QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFR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Q0FBQyxPQUFPLEVBQUUsRUFBRTtRQUMvQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpZCB9IGZyb20gJy4uLy4uL3V0aWxzL2lkJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRvTGF6eVNpZ25hbCB9IGZyb20gJy4uLy4uL3V0aWxzL3NpZ25hbHMvdG8tbGF6eS1zaWduYWwnO1xuXG5jb25zdCBkZWZhdWx0QmcgPSAnI2ZmZic7XG5jb25zdCBkZWZhdWx0R2FwID0gMjA7XG5jb25zdCBkZWZhdWx0RG90U2l6ZSA9IDI7XG5jb25zdCBkZWZhdWx0RG90Q29sb3IgPSAncmdiKDE3NywgMTc3LCAxODMpJztcbmNvbnN0IGRlZmF1bHRJbWFnZVNjYWxlID0gMC4xO1xuY29uc3QgZGVmYXVsdFJlcGVhdGVkID0gdHJ1ZTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnZ1tiYWNrZ3JvdW5kXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRDb21wb25lbnQge1xuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIHJvb3RTdmcgPSBpbmplY3QoUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSkuZWxlbWVudDtcbiAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGJhY2tncm91bmRTaWduYWwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kO1xuXG4gIC8vIERPVFMgUEFUVEVSTlxuICBwcm90ZWN0ZWQgc2NhbGVkR2FwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgY29uc3Qgem9vbSA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS56b29tO1xuXG4gICAgICByZXR1cm4gem9vbSAqIChiYWNrZ3JvdW5kLmdhcCA/PyBkZWZhdWx0R2FwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueCAlIHRoaXMuc2NhbGVkR2FwKCkpO1xuXG4gIHByb3RlY3RlZCB5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnkgJSB0aGlzLnNjYWxlZEdhcCgpKTtcblxuICBwcm90ZWN0ZWQgcGF0dGVybkNvbG9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJnID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmcudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICByZXR1cm4gYmcuY29sb3IgPz8gZGVmYXVsdERvdENvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0RG90Q29sb3I7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBwYXR0ZXJuU2l6ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgIHJldHVybiAodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb20gKiAoYmFja2dyb3VuZC5zaXplID8/IGRlZmF1bHREb3RTaXplKSkgLyAyO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICAvLyBJTUFHRSBQQVRURVJOXG4gIHByb3RlY3RlZCBiZ0ltYWdlU3JjID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIHJldHVybiBiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScgPyBiYWNrZ3JvdW5kLnNyYyA6ICcnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaW1hZ2VTaXplID0gdG9MYXp5U2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmJhY2tncm91bmRTaWduYWwpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gY3JlYXRlSW1hZ2UodGhpcy5iZ0ltYWdlU3JjKCkpKSxcbiAgICAgIG1hcCgoaW1hZ2UpID0+ICh7IHdpZHRoOiBpbWFnZS5uYXR1cmFsV2lkdGgsIGhlaWdodDogaW1hZ2UubmF0dXJhbEhlaWdodCB9KSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0gfSxcbiAgKTtcblxuICBwcm90ZWN0ZWQgc2NhbGVkSW1hZ2VXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBjb25zdCB6b29tID0gYmFja2dyb3VuZC5maXhlZCA/IDEgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbTtcblxuICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VTaXplKCkud2lkdGggKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgc2NhbGVkSW1hZ2VIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgY29uc3Qgem9vbSA9IGJhY2tncm91bmQuZml4ZWQgPyAxIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb207XG5cbiAgICAgIHJldHVybiB0aGlzLmltYWdlU2l6ZSgpLmhlaWdodCAqIHpvb20gKiAoYmFja2dyb3VuZC5zY2FsZSA/PyBkZWZhdWx0SW1hZ2VTY2FsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpbWFnZVggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgaWYgKCFiYWNrZ3JvdW5kLnJlcGVhdCkge1xuICAgICAgICByZXR1cm4gYmFja2dyb3VuZC5maXhlZCA/IDAgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWQgPyAwIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnggJSB0aGlzLnNjYWxlZEltYWdlV2lkdGgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGltYWdlWSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBpZiAoIWJhY2tncm91bmQucmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkID8gMCA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS55O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFja2dyb3VuZC5maXhlZCA/IDAgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueSAlIHRoaXMuc2NhbGVkSW1hZ2VIZWlnaHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlcGVhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIHJldHVybiBiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScgJiYgKGJhY2tncm91bmQucmVwZWF0ID8/IGRlZmF1bHRSZXBlYXRlZCk7XG4gIH0pO1xuXG4gIC8vIFdpdGhvdXQgSUQgdGhlcmUgd2lsbCBiZSBwYXR0ZXJuIGNvbGxpc2lvbiBmb3Igc2V2ZXJhbCBmbG93cyBvbiB0aGUgcGFnZVxuICAvLyBMYXRlciBwYXR0ZXJuIElEIG1heSBiZSBleHBvc2VkIHRvIEFQSVxuICBwcm90ZWN0ZWQgcGF0dGVybklkID0gaWQoKTtcbiAgcHJvdGVjdGVkIHBhdHRlcm5VcmwgPSBgdXJsKCMke3RoaXMucGF0dGVybklkfSlgO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgICB0aGlzLnJvb3RTdmcuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZC5iYWNrZ3JvdW5kQ29sb3IgPz8gZGVmYXVsdEJnO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnc29saWQnKSB7XG4gICAgICAgIHRoaXMucm9vdFN2Zy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kLmNvbG9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlKHVybDogc3RyaW5nKSB7XG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG5cbiAgaW1hZ2Uuc3JjID0gdXJsO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PigocmVzb2x2ZSkgPT4ge1xuICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2UpO1xuICB9KTtcbn1cbiIsIkBpZiAoYmFja2dyb3VuZFNpZ25hbCgpLnR5cGUgPT09ICdkb3RzJykge1xuICA8c3ZnOnBhdHRlcm5cbiAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgW2F0dHIuaWRdPVwicGF0dGVybklkXCJcbiAgICBbYXR0ci54XT1cIngoKVwiXG4gICAgW2F0dHIueV09XCJ5KClcIlxuICAgIFthdHRyLndpZHRoXT1cInNjYWxlZEdhcCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwic2NhbGVkR2FwKClcIj5cbiAgICA8c3ZnOmNpcmNsZVxuICAgICAgW2F0dHIuY3hdPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5jeV09XCJwYXR0ZXJuU2l6ZSgpXCJcbiAgICAgIFthdHRyLnJdPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5maWxsXT1cInBhdHRlcm5Db2xvcigpXCIgLz5cbiAgPC9zdmc6cGF0dGVybj5cblxuICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBbYXR0ci5maWxsXT1cInBhdHRlcm5VcmxcIiAvPlxufVxuXG5AaWYgKGJhY2tncm91bmRTaWduYWwoKS50eXBlID09PSAnaW1hZ2UnKSB7XG4gIEBpZiAocmVwZWF0ZWQoKSkge1xuICAgIDxzdmc6cGF0dGVyblxuICAgICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgW2F0dHIuaWRdPVwicGF0dGVybklkXCJcbiAgICAgIFthdHRyLnhdPVwiaW1hZ2VYKClcIlxuICAgICAgW2F0dHIueV09XCJpbWFnZVkoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIj5cbiAgICAgIDxzdmc6aW1hZ2UgW2F0dHIuaHJlZl09XCJiZ0ltYWdlU3JjKClcIiBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIiBbYXR0ci5oZWlnaHRdPVwic2NhbGVkSW1hZ2VIZWlnaHQoKVwiIC8+XG4gICAgPC9zdmc6cGF0dGVybj5cblxuICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIFthdHRyLmZpbGxdPVwicGF0dGVyblVybFwiIC8+XG4gIH1cblxuICBAaWYgKCFyZXBlYXRlZCgpKSB7XG4gICAgPHN2ZzppbWFnZVxuICAgICAgW2F0dHIueF09XCJpbWFnZVgoKVwiXG4gICAgICBbYXR0ci55XT1cImltYWdlWSgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cInNjYWxlZEltYWdlV2lkdGgoKVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2NhbGVkSW1hZ2VIZWlnaHQoKVwiXG4gICAgICBbYXR0ci5ocmVmXT1cImJnSW1hZ2VTcmMoKVwiIC8+XG4gIH1cbn1cbiJdfQ==
@@ -44,6 +44,7 @@ export class NodeComponent {
44
44
  this.toolbars = computed(() => this.overlaysService.nodeToolbarsMap().get(this.model()));
45
45
  }
46
46
  ngOnInit() {
47
+ this.model().isVisible.set(true);
47
48
  this.nodeAccessor.model.set(this.model());
48
49
  this.handleService.node.set(this.model());
49
50
  effect(() => {
@@ -56,6 +57,7 @@ export class NodeComponent {
56
57
  }, { injector: this.injector });
57
58
  }
58
59
  ngOnDestroy() {
60
+ this.model().isVisible.set(false);
59
61
  this.draggableService.destroy(this.hostRef.nativeElement);
60
62
  }
61
63
  startConnection(event, handle) {
@@ -101,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
101
103
  NodeResizeControllerDirective,
102
104
  ], template: "<!-- Default node -->\n@if (model().rawNode.type === 'default') {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode(); selectNode()\">\n <default-node\n nodeHandlesController\n [selected]=\"model().selected()\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\"\n [style.max-width]=\"model().styleWidth()\"\n [style.max-height]=\"model().styleHeight()\">\n <div [outerHTML]=\"model().text()\"></div>\n\n <handle type=\"source\" position=\"right\" />\n <handle type=\"target\" position=\"left\" />\n </default-node>\n </svg:foreignObject>\n}\n\n<!-- HTML Template node -->\n@if (model().rawNode.type === 'html-template' && nodeTemplate()) {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode()\">\n <div\n nodeHandlesController\n nodeResizeController\n class=\"wrapper\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </div>\n </svg:foreignObject>\n}\n\n<!-- SVG Template node -->\n@if (model().rawNode.type === 'svg-template' && nodeSvgTemplate()) {\n <svg:g class=\"selectable\" nodeHandlesController (click)=\"pullNode()\">\n <ng-container\n [ngTemplateOutlet]=\"nodeSvgTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </svg:g>\n}\n\n<!-- Component node -->\n@if (model().isComponentType) {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode()\">\n <div\n nodeHandlesController\n nodeResizeController\n class=\"wrapper\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\">\n <ng-container\n [ngComponentOutlet]=\"$any(model().rawNode.type)\"\n [ngComponentOutletInputs]=\"model().componentTypeInputs\"\n [ngComponentOutletInjector]=\"injector\" />\n </div>\n </svg:foreignObject>\n}\n\n<!-- Default group node -->\n@if (model().rawNode.type === 'default-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [resizable]=\"model().resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"model().color()\"\n [class.default-group-node_selected]=\"model().selected()\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\"\n [style.stroke]=\"model().color()\"\n [style.fill]=\"model().color()\"\n (click)=\"pullNode(); selectNode()\" />\n}\n\n<!-- Template group node -->\n@if (model().rawNode.type === 'template-group' && groupNodeTemplate()) {\n <svg:g class=\"selectable\" nodeHandlesController (click)=\"pullNode()\">\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </svg:g>\n}\n\n<!-- Resizer -->\n@if (model().resizerTemplate(); as template) {\n @if (model().resizable()) {\n <ng-template [ngTemplateOutlet]=\"template\" />\n }\n}\n\n<!-- Handles -->\n@for (handle of model().handles(); track handle) {\n @if (!handle.template) {\n <svg:circle\n class=\"default-handle\"\n r=\"5\"\n [attr.cx]=\"handle.hostOffset().x\"\n [attr.cy]=\"handle.hostOffset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\" />\n }\n\n @if (handle.template) {\n <svg:g\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\">\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n }\n\n @if (showMagnet()) {\n <svg:circle\n class=\"magnet\"\n [attr.r]=\"model().magnetRadius\"\n [attr.cx]=\"handle.hostOffset().x\"\n [attr.cy]=\"handle.hostOffset().y\"\n (pointerEnd)=\"endConnection(); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\" />\n }\n}\n\n<!-- Toolbar -->\n@for (toolbar of toolbars(); track toolbar) {\n <svg:foreignObject\n [attr.width]=\"toolbar.size().width\"\n [attr.height]=\"toolbar.size().height\"\n [attr.transform]=\"toolbar.transform()\">\n <ng-container [ngTemplateOutlet]=\"toolbar.template()\" />\n </svg:foreignObject>\n}\n", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
103
105
  }] });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBSVIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFD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QzsrR0FuRlUsYUFBYTttR0FBYixhQUFhLGdxQkFoQmIsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsMEJDNUNqRCx5eEpBdUpBLHlQRHRHSSxnQkFBZ0IsNEtBQ2hCLG9CQUFvQiwrRUFDcEIsZUFBZSxtR0FDZixnQkFBZ0Isb0pBQ2hCLGlCQUFpQixvUEFDakIsa0JBQWtCLHNHQUNsQiw2QkFBNkIscUdBQzdCLDhCQUE4QixvRUFDOUIsNkJBQTZCOzs0RkFHcEIsYUFBYTtrQkF0QnpCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFNBQVMsbUJBR0YsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsWUFBWTtxQkFDcEIsV0FDUTt3QkFDUCxnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQiw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3FCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOb2RlQWNjZXNzb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1hY2Nlc3Nvci5zZXJ2aWNlJztcbmltcG9ydCB7IE92ZXJsYXlzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL292ZXJsYXlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlU2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2hhbmRsZS1zaXplLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlZmF1bHROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVmYXVsdC1ub2RlL2RlZmF1bHQtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9pbnRlci5kaXJlY3RpdmUnO1xuXG4vLyBUT0RPOiBmaXggbG9hZGluZyBvZiB0aGVzZSBieSBAZGVmZXIgKHNob3VsZCB3b3JrIGluIEFuZ3VsYXIgMTgrKVxuLy8gcHVibGljIGNvbXBvbmVudHMgdGhhdCB1c2VzIGluIGRlZmF1bHQgbm9kZSAobG9hZGVkIGJ5IGRlZmVyKVxuaW1wb3J0IHsgUmVzaXphYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHVibGljLWNvbXBvbmVudHMvcmVzaXphYmxlL3Jlc2l6YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGFuZGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHVibGljLWNvbXBvbmVudHMvaGFuZGxlL2hhbmRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUhhbmRsZXNDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9ub2RlLWhhbmRsZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZVJlc2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vZGUtcmVzaXplLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcblxuZXhwb3J0IHR5cGUgSGFuZGxlU3RhdGUgPSAndmFsaWQnIHwgJ2ludmFsaWQnIHwgJ2lkbGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlLCBOb2RlQWNjZXNzb3JTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAndmZsb3ctbm9kZScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBQb2ludGVyRGlyZWN0aXZlLFxuICAgIERlZmF1bHROb2RlQ29tcG9uZW50LFxuICAgIEhhbmRsZUNvbXBvbmVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICAgIFJlc2l6YWJsZUNvbXBvbmVudCxcbiAgICBIYW5kbGVTaXplQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgICBOb2RlSGFuZGxlc0NvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgTm9kZVJlc2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkcmFnZ2FibGVTZXJ2aWNlID0gaW5qZWN0KERyYWdnYWJsZVNlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSk7XG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGhvc3RSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxTVkdFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgbm9kZUFjY2Vzc29yID0gaW5qZWN0KE5vZGVBY2Nlc3NvclNlcnZpY2UpO1xuICBwcml2YXRlIG92ZXJsYXlzU2VydmljZSA9IGluamVjdChPdmVybGF5c1NlcnZpY2UpO1xuXG4gIC8vIFRPRE8gcmVtb3ZlIGRlcGVuZGVuY3kgZnJvbSB0aGlzIGRpcmVjdGl2ZVxuICBwcml2YXRlIGNvbm5lY3Rpb25Db250cm9sbGVyID0gaW5qZWN0KENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHB1YmxpYyBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPE5vZGVNb2RlbD4oKTtcblxuICBwdWJsaWMgbm9kZVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcblxuICBwdWJsaWMgbm9kZVN2Z1RlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcblxuICBwdWJsaWMgZ3JvdXBOb2RlVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXG4gIHByb3RlY3RlZCBzaG93TWFnbmV0ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0JyB8fFxuICAgICAgdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKS5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tdmFsaWRhdGlvbicgfHxcbiAgICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdyZWNvbm5lY3Rpb24tc3RhcnQnIHx8XG4gICAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAncmVjb25uZWN0aW9uLXZhbGlkYXRpb24nLFxuICApO1xuXG4gIHByb3RlY3RlZCB0b29sYmFycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3ZlcmxheXNTZXJ2aWNlLm5vZGVUb29sYmFyc01hcCgpLmdldCh0aGlzLm1vZGVsKCkpKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5ub2RlQWNjZXNzb3IubW9kZWwuc2V0KHRoaXMubW9kZWwoKSk7XG5cbiAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZS5zZXQodGhpcy5tb2RlbCgpKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwoKS5kcmFnZ2FibGUoKSkge1xuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5lbmFibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMubW9kZWwoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRpc2FibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRlc3Ryb3kodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0Q29ubmVjdGlvbihldmVudDogRXZlbnQsIGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICAvLyBpZ25vcmUgZHJhZyBieSBzdG9wcGluZyBwcm9wYWdhdGlvblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlcj8uc3RhcnRDb25uZWN0aW9uKGhhbmRsZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyPy52YWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFZhbGlkYXRlQ29ubmVjdGlvbih0YXJnZXRIYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlcj8ucmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24odGFyZ2V0SGFuZGxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRDb25uZWN0aW9uKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXI/LmVuZENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdWxsTm9kZSgpIHtcbiAgICBpZiAodGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVsZXZhdGVOb2Rlc09uU2VsZWN0KCkpIHtcbiAgICAgIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UucHVsbE5vZGUodGhpcy5tb2RlbCgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAodGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMubW9kZWwoKSk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIERlZmF1bHQgbm9kZSAtLT5cbkBpZiAobW9kZWwoKS5yYXdOb2RlLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAgIFthdHRyLndpZHRoXT1cIm1vZGVsKCkuZm9XaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwoKS5mb0hlaWdodCgpXCJcbiAgICAoY2xpY2spPVwicHVsbE5vZGUoKTsgc2VsZWN0Tm9kZSgpXCI+XG4gICAgPGRlZmF1bHQtbm9kZVxuICAgICAgbm9kZUhhbmRsZXNDb250cm9sbGVyXG4gICAgICBbc2VsZWN0ZWRdPVwibW9kZWwoKS5zZWxlY3RlZCgpXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJtb2RlbCgpLnN0eWxlV2lkdGgoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cIm1vZGVsKCkuc3R5bGVIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIm1vZGVsKCkuc3R5bGVXaWR0aCgpXCJcbiAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1vZGVsKCkuc3R5bGVIZWlnaHQoKVwiPlxuICAgICAgPGRpdiBbb3V0ZXJIVE1MXT1cIm1vZGVsKCkudGV4dCgpXCI+PC9kaXY+XG5cbiAgICAgIDxoYW5kbGUgdHlwZT1cInNvdXJjZVwiIHBvc2l0aW9uPVwicmlnaHRcIiAvPlxuICAgICAgPGhhbmRsZSB0eXBlPVwidGFyZ2V0XCIgcG9zaXRpb249XCJsZWZ0XCIgLz5cbiAgICA8L2RlZmF1bHQtbm9kZT5cbiAgPC9zdmc6Zm9yZWlnbk9iamVjdD5cbn1cblxuPCEtLSBIVE1MIFRlbXBsYXRlIG5vZGUgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgJiYgbm9kZVRlbXBsYXRlKCkpIHtcbiAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgICBbYXR0ci53aWR0aF09XCJtb2RlbCgpLmZvV2lkdGgoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsKCkuZm9IZWlnaHQoKVwiXG4gICAgKGNsaWNrKT1cInB1bGxOb2RlKClcIj5cbiAgICA8ZGl2XG4gICAgICBub2RlSGFuZGxlc0NvbnRyb2xsZXJcbiAgICAgIG5vZGVSZXNpemVDb250cm9sbGVyXG4gICAgICBjbGFzcz1cIndyYXBwZXJcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cIm1vZGVsKCkuc3R5bGVXaWR0aCgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwibW9kZWwoKS5zdHlsZUhlaWdodCgpXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZSgpID8/IG51bGxcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9kZWwoKS5jb250ZXh0XCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiIC8+XG4gICAgPC9kaXY+XG4gIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG59XG5cbjwhLS0gU1ZHIFRlbXBsYXRlIG5vZGUgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAnc3ZnLXRlbXBsYXRlJyAmJiBub2RlU3ZnVGVtcGxhdGUoKSkge1xuICA8c3ZnOmcgY2xhc3M9XCJzZWxlY3RhYmxlXCIgbm9kZUhhbmRsZXNDb250cm9sbGVyIChjbGljayk9XCJwdWxsTm9kZSgpXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVN2Z1RlbXBsYXRlKCkgPz8gbnVsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9kZWwoKS5jb250ZXh0XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIiAvPlxuICA8L3N2ZzpnPlxufVxuXG48IS0tIENvbXBvbmVudCBub2RlIC0tPlxuQGlmIChtb2RlbCgpLmlzQ29tcG9uZW50VHlwZSkge1xuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAgIFthdHRyLndpZHRoXT1cIm1vZGVsKCkuZm9XaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwoKS5mb0hlaWdodCgpXCJcbiAgICAoY2xpY2spPVwicHVsbE5vZGUoKVwiPlxuICAgIDxkaXZcbiAgICAgIG5vZGVIYW5kbGVzQ29udHJvbGxlclxuICAgICAgbm9kZVJlc2l6ZUNvbnRyb2xsZXJcbiAgICAgIGNsYXNzPVwid3JhcHBlclwiXG4gICAgICBbc3R5bGUud2lkdGhdPVwibW9kZWwoKS5zdHlsZVdpZHRoKClcIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJtb2RlbCgpLnN0eWxlSGVpZ2h0KClcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nQ29tcG9uZW50T3V0bGV0XT1cIiRhbnkobW9kZWwoKS5yYXdOb2RlLnR5cGUpXCJcbiAgICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5wdXRzXT1cIm1vZGVsKCkuY29tcG9uZW50VHlwZUlucHV0c1wiXG4gICAgICAgIFtuZ0NvbXBvbmVudE91dGxldEluamVjdG9yXT1cImluamVjdG9yXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9zdmc6Zm9yZWlnbk9iamVjdD5cbn1cblxuPCEtLSBEZWZhdWx0IGdyb3VwIG5vZGUgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCcpIHtcbiAgPHN2ZzpyZWN0XG4gICAgY2xhc3M9XCJkZWZhdWx0LWdyb3VwLW5vZGVcIlxuICAgIHJ4PVwiNVwiXG4gICAgcnk9XCI1XCJcbiAgICBbcmVzaXphYmxlXT1cIm1vZGVsKCkucmVzaXphYmxlKClcIlxuICAgIFtnYXBdPVwiM1wiXG4gICAgW3Jlc2l6ZXJDb2xvcl09XCJtb2RlbCgpLmNvbG9yKClcIlxuICAgIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibW9kZWwoKS5zZWxlY3RlZCgpXCJcbiAgICBbYXR0ci53aWR0aF09XCJtb2RlbCgpLnNpemUoKS53aWR0aFwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsKCkuc2l6ZSgpLmhlaWdodFwiXG4gICAgW3N0eWxlLnN0cm9rZV09XCJtb2RlbCgpLmNvbG9yKClcIlxuICAgIFtzdHlsZS5maWxsXT1cIm1vZGVsKCkuY29sb3IoKVwiXG4gICAgKGNsaWNrKT1cInB1bGxOb2RlKCk7IHNlbGVjdE5vZGUoKVwiIC8+XG59XG5cbjwhLS0gVGVtcGxhdGUgZ3JvdXAgbm9kZSAgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnICYmIGdyb3VwTm9kZVRlbXBsYXRlKCkpIHtcbiAgPHN2ZzpnIGNsYXNzPVwic2VsZWN0YWJsZVwiIG5vZGVIYW5kbGVzQ29udHJvbGxlciAoY2xpY2spPVwicHVsbE5vZGUoKVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwTm9kZVRlbXBsYXRlKCkgPz8gbnVsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9kZWwoKS5jb250ZXh0XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIiAvPlxuICA8L3N2ZzpnPlxufVxuXG48IS0tIFJlc2l6ZXIgLS0+XG5AaWYgKG1vZGVsKCkucmVzaXplclRlbXBsYXRlKCk7IGFzIHRlbXBsYXRlKSB7XG4gIEBpZiAobW9kZWwoKS5yZXNpemFibGUoKSkge1xuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIC8+XG4gIH1cbn1cblxuPCEtLSBIYW5kbGVzIC0tPlxuQGZvciAoaGFuZGxlIG9mIG1vZGVsKCkuaGFuZGxlcygpOyB0cmFjayBoYW5kbGUpIHtcbiAgQGlmICghaGFuZGxlLnRlbXBsYXRlKSB7XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIGNsYXNzPVwiZGVmYXVsdC1oYW5kbGVcIlxuICAgICAgcj1cIjVcIlxuICAgICAgW2F0dHIuY3hdPVwiaGFuZGxlLmhvc3RPZmZzZXQoKS54XCJcbiAgICAgIFthdHRyLmN5XT1cImhhbmRsZS5ob3N0T2Zmc2V0KCkueVwiXG4gICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiaGFuZGxlLnN0cm9rZVdpZHRoXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRDb25uZWN0aW9uKCRldmVudCwgaGFuZGxlKVwiXG4gICAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKClcIiAvPlxuICB9XG5cbiAgQGlmIChoYW5kbGUudGVtcGxhdGUpIHtcbiAgICA8c3ZnOmdcbiAgICAgIFtoYW5kbGVTaXplQ29udHJvbGxlcl09XCJoYW5kbGVcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpXCJcbiAgICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhhbmRsZS50ZW1wbGF0ZTsgY29udGV4dDogaGFuZGxlLnRlbXBsYXRlQ29udGV4dFwiIC8+XG4gICAgPC9zdmc6Zz5cbiAgfVxuXG4gIEBpZiAoc2hvd01hZ25ldCgpKSB7XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIGNsYXNzPVwibWFnbmV0XCJcbiAgICAgIFthdHRyLnJdPVwibW9kZWwoKS5tYWduZXRSYWRpdXNcIlxuICAgICAgW2F0dHIuY3hdPVwiaGFuZGxlLmhvc3RPZmZzZXQoKS54XCJcbiAgICAgIFthdHRyLmN5XT1cImhhbmRsZS5ob3N0T2Zmc2V0KCkueVwiXG4gICAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKCk7IHJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAgICAgKHBvaW50ZXJPdmVyKT1cInZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAgIChwb2ludGVyT3V0KT1cInJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIiAvPlxuICB9XG59XG5cbjwhLS0gVG9vbGJhciAtLT5cbkBmb3IgKHRvb2xiYXIgb2YgdG9vbGJhcnMoKTsgdHJhY2sgdG9vbGJhcikge1xuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBbYXR0ci53aWR0aF09XCJ0b29sYmFyLnNpemUoKS53aWR0aFwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cInRvb2xiYXIuc2l6ZSgpLmhlaWdodFwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cInRvb2xiYXIudHJhbnNmb3JtKClcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvb2xiYXIudGVtcGxhdGUoKVwiIC8+XG4gIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG59XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvbm9kZS9ub2RlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixRQUFRLEVBSVIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFD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LElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQzsrR0F0RlUsYUFBYTttR0FBYixhQUFhLGdxQkFoQmIsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsMEJDNUNqRCx5eEpBdUpBLHlQRHRHSSxnQkFBZ0IsNEtBQ2hCLG9CQUFvQiwrRUFDcEIsZUFBZSxtR0FDZixnQkFBZ0Isb0pBQ2hCLGlCQUFpQixvUEFDakIsa0JBQWtCLHNHQUNsQiw2QkFBNkIscUdBQzdCLDhCQUE4QixvRUFDOUIsNkJBQTZCOzs0RkFHcEIsYUFBYTtrQkF0QnpCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLFNBQVMsbUJBR0YsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsWUFBWTtxQkFDcEIsV0FDUTt3QkFDUCxnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQiw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsNkJBQTZCO3FCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHJhZ2dhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RyYWdnYWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9ub2RlLm1vZGVsJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBIYW5kbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGFuZGxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvaGFuZGxlLm1vZGVsJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29ubmVjdGlvbi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOb2RlQWNjZXNzb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1hY2Nlc3Nvci5zZXJ2aWNlJztcbmltcG9ydCB7IE92ZXJsYXlzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL292ZXJsYXlzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFuZGxlU2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2hhbmRsZS1zaXplLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQsIE5nQ29tcG9uZW50T3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlZmF1bHROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGVmYXVsdC1ub2RlL2RlZmF1bHQtbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9pbnRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcG9pbnRlci5kaXJlY3RpdmUnO1xuXG4vLyBUT0RPOiBmaXggbG9hZGluZyBvZiB0aGVzZSBieSBAZGVmZXIgKHNob3VsZCB3b3JrIGluIEFuZ3VsYXIgMTgrKVxuLy8gcHVibGljIGNvbXBvbmVudHMgdGhhdCB1c2VzIGluIGRlZmF1bHQgbm9kZSAobG9hZGVkIGJ5IGRlZmVyKVxuaW1wb3J0IHsgUmVzaXphYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHVibGljLWNvbXBvbmVudHMvcmVzaXphYmxlL3Jlc2l6YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGFuZGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHVibGljLWNvbXBvbmVudHMvaGFuZGxlL2hhbmRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUhhbmRsZXNDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9ub2RlLWhhbmRsZXMtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZVJlc2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vZGUtcmVzaXplLWNvbnRyb2xsZXIuZGlyZWN0aXZlJztcblxuZXhwb3J0IHR5cGUgSGFuZGxlU3RhdGUgPSAndmFsaWQnIHwgJ2ludmFsaWQnIHwgJ2lkbGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdnW25vZGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtIYW5kbGVTZXJ2aWNlLCBOb2RlQWNjZXNzb3JTZXJ2aWNlXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAndmZsb3ctbm9kZScsXG4gIH0sXG4gIGltcG9ydHM6IFtcbiAgICBQb2ludGVyRGlyZWN0aXZlLFxuICAgIERlZmF1bHROb2RlQ29tcG9uZW50LFxuICAgIEhhbmRsZUNvbXBvbmVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICAgIFJlc2l6YWJsZUNvbXBvbmVudCxcbiAgICBIYW5kbGVTaXplQ29udHJvbGxlckRpcmVjdGl2ZSxcbiAgICBOb2RlSGFuZGxlc0NvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgTm9kZVJlc2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByb3RlY3RlZCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgaGFuZGxlU2VydmljZSA9IGluamVjdChIYW5kbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkcmFnZ2FibGVTZXJ2aWNlID0gaW5qZWN0KERyYWdnYWJsZVNlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dTdGF0dXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dTdGF0dXNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSk7XG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KFNlbGVjdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGhvc3RSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxTVkdFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgbm9kZUFjY2Vzc29yID0gaW5qZWN0KE5vZGVBY2Nlc3NvclNlcnZpY2UpO1xuICBwcml2YXRlIG92ZXJsYXlzU2VydmljZSA9IGluamVjdChPdmVybGF5c1NlcnZpY2UpO1xuXG4gIC8vIFRPRE8gcmVtb3ZlIGRlcGVuZGVuY3kgZnJvbSB0aGlzIGRpcmVjdGl2ZVxuICBwcml2YXRlIGNvbm5lY3Rpb25Db250cm9sbGVyID0gaW5qZWN0KENvbm5lY3Rpb25Db250cm9sbGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHB1YmxpYyBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPE5vZGVNb2RlbD4oKTtcblxuICBwdWJsaWMgbm9kZVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcblxuICBwdWJsaWMgbm9kZVN2Z1RlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55Pj4oKTtcblxuICBwdWJsaWMgZ3JvdXBOb2RlVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXG4gIHByb3RlY3RlZCBzaG93TWFnbmV0ID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdjb25uZWN0aW9uLXN0YXJ0JyB8fFxuICAgICAgdGhpcy5mbG93U3RhdHVzU2VydmljZS5zdGF0dXMoKS5zdGF0ZSA9PT0gJ2Nvbm5lY3Rpb24tdmFsaWRhdGlvbicgfHxcbiAgICAgIHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCkuc3RhdGUgPT09ICdyZWNvbm5lY3Rpb24tc3RhcnQnIHx8XG4gICAgICB0aGlzLmZsb3dTdGF0dXNTZXJ2aWNlLnN0YXR1cygpLnN0YXRlID09PSAncmVjb25uZWN0aW9uLXZhbGlkYXRpb24nLFxuICApO1xuXG4gIHByb3RlY3RlZCB0b29sYmFycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3ZlcmxheXNTZXJ2aWNlLm5vZGVUb29sYmFyc01hcCgpLmdldCh0aGlzLm1vZGVsKCkpKTtcblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tb2RlbCgpLmlzVmlzaWJsZS5zZXQodHJ1ZSk7XG5cbiAgICB0aGlzLm5vZGVBY2Nlc3Nvci5tb2RlbC5zZXQodGhpcy5tb2RlbCgpKTtcbiAgICB0aGlzLmhhbmRsZVNlcnZpY2Uubm9kZS5zZXQodGhpcy5tb2RlbCgpKTtcblxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwoKS5kcmFnZ2FibGUoKSkge1xuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlU2VydmljZS5lbmFibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMubW9kZWwoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRpc2FibGUodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlbCgpLmlzVmlzaWJsZS5zZXQoZmFsc2UpO1xuXG4gICAgdGhpcy5kcmFnZ2FibGVTZXJ2aWNlLmRlc3Ryb3kodGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0Q29ubmVjdGlvbihldmVudDogRXZlbnQsIGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICAvLyBpZ25vcmUgZHJhZyBieSBzdG9wcGluZyBwcm9wYWdhdGlvblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlcj8uc3RhcnRDb25uZWN0aW9uKGhhbmRsZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZTogSGFuZGxlTW9kZWwpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25Db250cm9sbGVyPy52YWxpZGF0ZUNvbm5lY3Rpb24oaGFuZGxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFZhbGlkYXRlQ29ubmVjdGlvbih0YXJnZXRIYW5kbGU6IEhhbmRsZU1vZGVsKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uQ29udHJvbGxlcj8ucmVzZXRWYWxpZGF0ZUNvbm5lY3Rpb24odGFyZ2V0SGFuZGxlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRDb25uZWN0aW9uKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbkNvbnRyb2xsZXI/LmVuZENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdWxsTm9kZSgpIHtcbiAgICBpZiAodGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVsZXZhdGVOb2Rlc09uU2VsZWN0KCkpIHtcbiAgICAgIHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2UucHVsbE5vZGUodGhpcy5tb2RlbCgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0Tm9kZSgpIHtcbiAgICBpZiAodGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMubW9kZWwoKSk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIERlZmF1bHQgbm9kZSAtLT5cbkBpZiAobW9kZWwoKS5yYXdOb2RlLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAgIFthdHRyLndpZHRoXT1cIm1vZGVsKCkuZm9XaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwoKS5mb0hlaWdodCgpXCJcbiAgICAoY2xpY2spPVwicHVsbE5vZGUoKTsgc2VsZWN0Tm9kZSgpXCI+XG4gICAgPGRlZmF1bHQtbm9kZVxuICAgICAgbm9kZUhhbmRsZXNDb250cm9sbGVyXG4gICAgICBbc2VsZWN0ZWRdPVwibW9kZWwoKS5zZWxlY3RlZCgpXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJtb2RlbCgpLnN0eWxlV2lkdGgoKVwiXG4gICAgICBbc3R5bGUuaGVpZ2h0XT1cIm1vZGVsKCkuc3R5bGVIZWlnaHQoKVwiXG4gICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIm1vZGVsKCkuc3R5bGVXaWR0aCgpXCJcbiAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1vZGVsKCkuc3R5bGVIZWlnaHQoKVwiPlxuICAgICAgPGRpdiBbb3V0ZXJIVE1MXT1cIm1vZGVsKCkudGV4dCgpXCI+PC9kaXY+XG5cbiAgICAgIDxoYW5kbGUgdHlwZT1cInNvdXJjZVwiIHBvc2l0aW9uPVwicmlnaHRcIiAvPlxuICAgICAgPGhhbmRsZSB0eXBlPVwidGFyZ2V0XCIgcG9zaXRpb249XCJsZWZ0XCIgLz5cbiAgICA8L2RlZmF1bHQtbm9kZT5cbiAgPC9zdmc6Zm9yZWlnbk9iamVjdD5cbn1cblxuPCEtLSBIVE1MIFRlbXBsYXRlIG5vZGUgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgJiYgbm9kZVRlbXBsYXRlKCkpIHtcbiAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgY2xhc3M9XCJzZWxlY3RhYmxlXCJcbiAgICBbYXR0ci53aWR0aF09XCJtb2RlbCgpLmZvV2lkdGgoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsKCkuZm9IZWlnaHQoKVwiXG4gICAgKGNsaWNrKT1cInB1bGxOb2RlKClcIj5cbiAgICA8ZGl2XG4gICAgICBub2RlSGFuZGxlc0NvbnRyb2xsZXJcbiAgICAgIG5vZGVSZXNpemVDb250cm9sbGVyXG4gICAgICBjbGFzcz1cIndyYXBwZXJcIlxuICAgICAgW3N0eWxlLndpZHRoXT1cIm1vZGVsKCkuc3R5bGVXaWR0aCgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwibW9kZWwoKS5zdHlsZUhlaWdodCgpXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVUZW1wbGF0ZSgpID8/IG51bGxcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9kZWwoKS5jb250ZXh0XCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcl09XCJpbmplY3RvclwiIC8+XG4gICAgPC9kaXY+XG4gIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG59XG5cbjwhLS0gU1ZHIFRlbXBsYXRlIG5vZGUgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAnc3ZnLXRlbXBsYXRlJyAmJiBub2RlU3ZnVGVtcGxhdGUoKSkge1xuICA8c3ZnOmcgY2xhc3M9XCJzZWxlY3RhYmxlXCIgbm9kZUhhbmRsZXNDb250cm9sbGVyIChjbGljayk9XCJwdWxsTm9kZSgpXCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZVN2Z1RlbXBsYXRlKCkgPz8gbnVsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9kZWwoKS5jb250ZXh0XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIiAvPlxuICA8L3N2ZzpnPlxufVxuXG48IS0tIENvbXBvbmVudCBub2RlIC0tPlxuQGlmIChtb2RlbCgpLmlzQ29tcG9uZW50VHlwZSkge1xuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBjbGFzcz1cInNlbGVjdGFibGVcIlxuICAgIFthdHRyLndpZHRoXT1cIm1vZGVsKCkuZm9XaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwoKS5mb0hlaWdodCgpXCJcbiAgICAoY2xpY2spPVwicHVsbE5vZGUoKVwiPlxuICAgIDxkaXZcbiAgICAgIG5vZGVIYW5kbGVzQ29udHJvbGxlclxuICAgICAgbm9kZVJlc2l6ZUNvbnRyb2xsZXJcbiAgICAgIGNsYXNzPVwid3JhcHBlclwiXG4gICAgICBbc3R5bGUud2lkdGhdPVwibW9kZWwoKS5zdHlsZVdpZHRoKClcIlxuICAgICAgW3N0eWxlLmhlaWdodF09XCJtb2RlbCgpLnN0eWxlSGVpZ2h0KClcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nQ29tcG9uZW50T3V0bGV0XT1cIiRhbnkobW9kZWwoKS5yYXdOb2RlLnR5cGUpXCJcbiAgICAgICAgW25nQ29tcG9uZW50T3V0bGV0SW5wdXRzXT1cIm1vZGVsKCkuY29tcG9uZW50VHlwZUlucHV0c1wiXG4gICAgICAgIFtuZ0NvbXBvbmVudE91dGxldEluamVjdG9yXT1cImluamVjdG9yXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9zdmc6Zm9yZWlnbk9iamVjdD5cbn1cblxuPCEtLSBEZWZhdWx0IGdyb3VwIG5vZGUgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAnZGVmYXVsdC1ncm91cCcpIHtcbiAgPHN2ZzpyZWN0XG4gICAgY2xhc3M9XCJkZWZhdWx0LWdyb3VwLW5vZGVcIlxuICAgIHJ4PVwiNVwiXG4gICAgcnk9XCI1XCJcbiAgICBbcmVzaXphYmxlXT1cIm1vZGVsKCkucmVzaXphYmxlKClcIlxuICAgIFtnYXBdPVwiM1wiXG4gICAgW3Jlc2l6ZXJDb2xvcl09XCJtb2RlbCgpLmNvbG9yKClcIlxuICAgIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibW9kZWwoKS5zZWxlY3RlZCgpXCJcbiAgICBbYXR0ci53aWR0aF09XCJtb2RlbCgpLnNpemUoKS53aWR0aFwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1vZGVsKCkuc2l6ZSgpLmhlaWdodFwiXG4gICAgW3N0eWxlLnN0cm9rZV09XCJtb2RlbCgpLmNvbG9yKClcIlxuICAgIFtzdHlsZS5maWxsXT1cIm1vZGVsKCkuY29sb3IoKVwiXG4gICAgKGNsaWNrKT1cInB1bGxOb2RlKCk7IHNlbGVjdE5vZGUoKVwiIC8+XG59XG5cbjwhLS0gVGVtcGxhdGUgZ3JvdXAgbm9kZSAgLS0+XG5AaWYgKG1vZGVsKCkucmF3Tm9kZS50eXBlID09PSAndGVtcGxhdGUtZ3JvdXAnICYmIGdyb3VwTm9kZVRlbXBsYXRlKCkpIHtcbiAgPHN2ZzpnIGNsYXNzPVwic2VsZWN0YWJsZVwiIG5vZGVIYW5kbGVzQ29udHJvbGxlciAoY2xpY2spPVwicHVsbE5vZGUoKVwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwTm9kZVRlbXBsYXRlKCkgPz8gbnVsbFwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwibW9kZWwoKS5jb250ZXh0XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3JdPVwiaW5qZWN0b3JcIiAvPlxuICA8L3N2ZzpnPlxufVxuXG48IS0tIFJlc2l6ZXIgLS0+XG5AaWYgKG1vZGVsKCkucmVzaXplclRlbXBsYXRlKCk7IGFzIHRlbXBsYXRlKSB7XG4gIEBpZiAobW9kZWwoKS5yZXNpemFibGUoKSkge1xuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIC8+XG4gIH1cbn1cblxuPCEtLSBIYW5kbGVzIC0tPlxuQGZvciAoaGFuZGxlIG9mIG1vZGVsKCkuaGFuZGxlcygpOyB0cmFjayBoYW5kbGUpIHtcbiAgQGlmICghaGFuZGxlLnRlbXBsYXRlKSB7XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIGNsYXNzPVwiZGVmYXVsdC1oYW5kbGVcIlxuICAgICAgcj1cIjVcIlxuICAgICAgW2F0dHIuY3hdPVwiaGFuZGxlLmhvc3RPZmZzZXQoKS54XCJcbiAgICAgIFthdHRyLmN5XT1cImhhbmRsZS5ob3N0T2Zmc2V0KCkueVwiXG4gICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiaGFuZGxlLnN0cm9rZVdpZHRoXCJcbiAgICAgIChwb2ludGVyU3RhcnQpPVwic3RhcnRDb25uZWN0aW9uKCRldmVudCwgaGFuZGxlKVwiXG4gICAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKClcIiAvPlxuICB9XG5cbiAgQGlmIChoYW5kbGUudGVtcGxhdGUpIHtcbiAgICA8c3ZnOmdcbiAgICAgIFtoYW5kbGVTaXplQ29udHJvbGxlcl09XCJoYW5kbGVcIlxuICAgICAgKHBvaW50ZXJTdGFydCk9XCJzdGFydENvbm5lY3Rpb24oJGV2ZW50LCBoYW5kbGUpXCJcbiAgICAgIChwb2ludGVyRW5kKT1cImVuZENvbm5lY3Rpb24oKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhhbmRsZS50ZW1wbGF0ZTsgY29udGV4dDogaGFuZGxlLnRlbXBsYXRlQ29udGV4dFwiIC8+XG4gICAgPC9zdmc6Zz5cbiAgfVxuXG4gIEBpZiAoc2hvd01hZ25ldCgpKSB7XG4gICAgPHN2ZzpjaXJjbGVcbiAgICAgIGNsYXNzPVwibWFnbmV0XCJcbiAgICAgIFthdHRyLnJdPVwibW9kZWwoKS5tYWduZXRSYWRpdXNcIlxuICAgICAgW2F0dHIuY3hdPVwiaGFuZGxlLmhvc3RPZmZzZXQoKS54XCJcbiAgICAgIFthdHRyLmN5XT1cImhhbmRsZS5ob3N0T2Zmc2V0KCkueVwiXG4gICAgICAocG9pbnRlckVuZCk9XCJlbmRDb25uZWN0aW9uKCk7IHJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIlxuICAgICAgKHBvaW50ZXJPdmVyKT1cInZhbGlkYXRlQ29ubmVjdGlvbihoYW5kbGUpXCJcbiAgICAgIChwb2ludGVyT3V0KT1cInJlc2V0VmFsaWRhdGVDb25uZWN0aW9uKGhhbmRsZSlcIiAvPlxuICB9XG59XG5cbjwhLS0gVG9vbGJhciAtLT5cbkBmb3IgKHRvb2xiYXIgb2YgdG9vbGJhcnMoKTsgdHJhY2sgdG9vbGJhcikge1xuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBbYXR0ci53aWR0aF09XCJ0b29sYmFyLnNpemUoKS53aWR0aFwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cInRvb2xiYXIuc2l6ZSgpLmhlaWdodFwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cInRvb2xiYXIudHJhbnNmb3JtKClcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRvb2xiYXIudGVtcGxhdGUoKVwiIC8+XG4gIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG59XG4iXX0=
@@ -0,0 +1,100 @@
1
+ export function drawNode(ctx, node) {
2
+ if (Object.keys(node.preview().style).length) {
3
+ drawStyledNode(ctx, node);
4
+ return;
5
+ }
6
+ if (node.rawNode.type === 'default') {
7
+ drawDefaultNode(ctx, node);
8
+ return;
9
+ }
10
+ if (node.rawNode.type === 'default-group') {
11
+ drawDefaultGroupNode(ctx, node);
12
+ return;
13
+ }
14
+ drawUnknownNode(ctx, node);
15
+ }
16
+ function drawDefaultNode(ctx, node) {
17
+ const point = node.globalPoint();
18
+ const width = node.width();
19
+ const height = node.height();
20
+ borderRadius(ctx, node, 5);
21
+ // Draw background (background-color: white)
22
+ ctx.fillStyle = 'white';
23
+ ctx.fill();
24
+ // Draw border (border: 1.5px solid #1b262c)
25
+ ctx.strokeStyle = '#1b262c';
26
+ ctx.lineWidth = 1.5;
27
+ ctx.stroke();
28
+ // Draw centered text (color: black, justify-content: center)
29
+ ctx.fillStyle = 'black';
30
+ // TODO: use as in default node
31
+ ctx.font = '14px Arial';
32
+ ctx.textAlign = 'center';
33
+ ctx.textBaseline = 'middle';
34
+ const centerX = point.x + width / 2;
35
+ const centerY = point.y + height / 2;
36
+ ctx.fillText(node.text(), centerX, centerY);
37
+ }
38
+ function drawDefaultGroupNode(ctx, node) {
39
+ const point = node.globalPoint();
40
+ const width = node.width();
41
+ const height = node.height();
42
+ ctx.globalAlpha = 0.05;
43
+ ctx.fillStyle = node.color();
44
+ ctx.fillRect(point.x, point.y, width, height);
45
+ ctx.globalAlpha = 1;
46
+ ctx.strokeStyle = node.color();
47
+ ctx.lineWidth = 1.5;
48
+ ctx.strokeRect(point.x, point.y, width, height);
49
+ }
50
+ function drawStyledNode(ctx, node) {
51
+ const point = node.globalPoint();
52
+ const width = node.width();
53
+ const height = node.height();
54
+ const style = node.preview().style;
55
+ if (style.borderRadius) {
56
+ const radius = parseFloat(style.borderRadius);
57
+ borderRadius(ctx, node, radius);
58
+ }
59
+ else {
60
+ ctx.beginPath();
61
+ ctx.rect(point.x, point.y, width, height);
62
+ ctx.closePath();
63
+ }
64
+ if (style.backgroundColor) {
65
+ ctx.fillStyle = style.backgroundColor;
66
+ }
67
+ if (style.borderColor) {
68
+ ctx.strokeStyle = style.borderColor;
69
+ }
70
+ if (style.borderWidth) {
71
+ ctx.lineWidth = parseFloat(style.borderWidth);
72
+ }
73
+ ctx.fill();
74
+ ctx.stroke();
75
+ }
76
+ function drawUnknownNode(ctx, node) {
77
+ const point = node.globalPoint();
78
+ const width = node.width();
79
+ const height = node.height();
80
+ ctx.fillStyle = 'rgb(0 0 0 / 10%)';
81
+ ctx.fillRect(point.x, point.y, width, height);
82
+ }
83
+ function borderRadius(ctx, node, radius) {
84
+ const point = node.globalPoint();
85
+ const width = node.width();
86
+ const height = node.height();
87
+ // Create rounded rectangle path
88
+ ctx.beginPath();
89
+ ctx.moveTo(point.x + radius, point.y);
90
+ ctx.lineTo(point.x + width - radius, point.y);
91
+ ctx.quadraticCurveTo(point.x + width, point.y, point.x + width, point.y + radius);
92
+ ctx.lineTo(point.x + width, point.y + height - radius);
93
+ ctx.quadraticCurveTo(point.x + width, point.y + height, point.x + width - radius, point.y + height);
94
+ ctx.lineTo(point.x + radius, point.y + height);
95
+ ctx.quadraticCurveTo(point.x, point.y + height, point.x, point.y + height - radius);
96
+ ctx.lineTo(point.x, point.y + radius);
97
+ ctx.quadraticCurveTo(point.x, point.y, point.x + radius, point.y);
98
+ ctx.closePath();
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvcHJldmlldy1mbG93L2RyYXctbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQTZCLEVBQUUsSUFBZTtJQUNyRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWUsRUFBRSxDQUFDO1FBQzFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoQyxPQUFPO0lBQ1QsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEdBQTZCLEVBQUUsSUFBZTtJQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUU3QixZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzQiw0Q0FBNEM7SUFD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QUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2xGLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDdkQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3BHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3BGLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZHJhd05vZGUoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIG5vZGU6IE5vZGVNb2RlbCkge1xuICBpZiAoT2JqZWN0LmtleXMobm9kZS5wcmV2aWV3KCkuc3R5bGUpLmxlbmd0aCkge1xuICAgIGRyYXdTdHlsZWROb2RlKGN0eCwgbm9kZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUucmF3Tm9kZS50eXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICBkcmF3RGVmYXVsdE5vZGUoY3R4LCBub2RlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS5yYXdOb2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJykge1xuICAgIGRyYXdEZWZhdWx0R3JvdXBOb2RlKGN0eCwgbm9kZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZHJhd1Vua25vd25Ob2RlKGN0eCwgbm9kZSk7XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWZhdWx0Tm9kZShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgbm9kZTogTm9kZU1vZGVsKSB7XG4gIGNvbnN0IHBvaW50ID0gbm9kZS5nbG9iYWxQb2ludCgpO1xuICBjb25zdCB3aWR0aCA9IG5vZGUud2lkdGgoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcblxuICBib3JkZXJSYWRpdXMoY3R4LCBub2RlLCA1KTtcblxuICAvLyBEcmF3IGJhY2tncm91bmQgKGJhY2tncm91bmQtY29sb3I6IHdoaXRlKVxuICBjdHguZmlsbFN0eWxlID0gJ3doaXRlJztcbiAgY3R4LmZpbGwoKTtcblxuICAvLyBEcmF3IGJvcmRlciAoYm9yZGVyOiAxLjVweCBzb2xpZCAjMWIyNjJjKVxuICBjdHguc3Ryb2tlU3R5bGUgPSAnIzFiMjYyYyc7XG4gIGN0eC5saW5lV2lkdGggPSAxLjU7XG4gIGN0eC5zdHJva2UoKTtcblxuICAvLyBEcmF3IGNlbnRlcmVkIHRleHQgKGNvbG9yOiBibGFjaywganVzdGlmeS1jb250ZW50OiBjZW50ZXIpXG4gIGN0eC5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAvLyBUT0RPOiB1c2UgYXMgaW4gZGVmYXVsdCBub2RlXG4gIGN0eC5mb250ID0gJzE0cHggQXJpYWwnO1xuICBjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcblxuICBjb25zdCBjZW50ZXJYID0gcG9pbnQueCArIHdpZHRoIC8gMjtcbiAgY29uc3QgY2VudGVyWSA9IHBvaW50LnkgKyBoZWlnaHQgLyAyO1xuICBjdHguZmlsbFRleHQobm9kZS50ZXh0KCksIGNlbnRlclgsIGNlbnRlclkpO1xufVxuXG5mdW5jdGlvbiBkcmF3RGVmYXVsdEdyb3VwTm9kZShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgbm9kZTogTm9kZU1vZGVsKSB7XG4gIGNvbnN0IHBvaW50ID0gbm9kZS5nbG9iYWxQb2ludCgpO1xuICBjb25zdCB3aWR0aCA9IG5vZGUud2lkdGgoKTtcbiAgY29uc3QgaGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcblxuICBjdHguZ2xvYmFsQWxwaGEgPSAwLjA1O1xuICBjdHguZmlsbFN0eWxlID0gbm9kZS5jb2xvcigpO1xuICBjdHguZmlsbFJlY3QocG9pbnQueCwgcG9pbnQueSwgd2lkdGgsIGhlaWdodCk7XG4gIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG5cbiAgY3R4LnN0cm9rZVN0eWxlID0gbm9kZS5jb2xvcigpO1xuICBjdHgubGluZVdpZHRoID0gMS41O1xuICBjdHguc3Ryb2tlUmVjdChwb2ludC54LCBwb2ludC55LCB3aWR0aCwgaGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gZHJhd1N0eWxlZE5vZGUoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIG5vZGU6IE5vZGVNb2RlbCkge1xuICBjb25zdCBwb2ludCA9IG5vZGUuZ2xvYmFsUG9pbnQoKTtcbiAgY29uc3Qgd2lkdGggPSBub2RlLndpZHRoKCk7XG4gIGNvbnN0IGhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gIGNvbnN0IHN0eWxlID0gbm9kZS5wcmV2aWV3KCkuc3R5bGU7XG5cbiAgaWYgKHN0eWxlLmJvcmRlclJhZGl1cykge1xuICAgIGNvbnN0IHJhZGl1cyA9IHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyUmFkaXVzKTtcbiAgICBib3JkZXJSYWRpdXMoY3R4LCBub2RlLCByYWRpdXMpO1xuICB9IGVsc2Uge1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHgucmVjdChwb2ludC54LCBwb2ludC55LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjdHguY2xvc2VQYXRoKCk7XG4gIH1cblxuICBpZiAoc3R5bGUuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgY3R4LmZpbGxTdHlsZSA9IHN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgfVxuXG4gIGlmIChzdHlsZS5ib3JkZXJDb2xvcikge1xuICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0eWxlLmJvcmRlckNvbG9yO1xuICB9XG5cbiAgaWYgKHN0eWxlLmJvcmRlcldpZHRoKSB7XG4gICAgY3R4LmxpbmVXaWR0aCA9IHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyV2lkdGgpO1xuICB9XG5cbiAgY3R4LmZpbGwoKTtcbiAgY3R4LnN0cm9rZSgpO1xufVxuXG5mdW5jdGlvbiBkcmF3VW5rbm93bk5vZGUoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIG5vZGU6IE5vZGVNb2RlbCkge1xuICBjb25zdCBwb2ludCA9IG5vZGUuZ2xvYmFsUG9pbnQoKTtcbiAgY29uc3Qgd2lkdGggPSBub2RlLndpZHRoKCk7XG4gIGNvbnN0IGhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG5cbiAgY3R4LmZpbGxTdHlsZSA9ICdyZ2IoMCAwIDAgLyAxMCUpJztcbiAgY3R4LmZpbGxSZWN0KHBvaW50LngsIHBvaW50LnksIHdpZHRoLCBoZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBib3JkZXJSYWRpdXMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIG5vZGU6IE5vZGVNb2RlbCwgcmFkaXVzOiBudW1iZXIpIHtcbiAgY29uc3QgcG9pbnQgPSBub2RlLmdsb2JhbFBvaW50KCk7XG4gIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCgpO1xuICBjb25zdCBoZWlnaHQgPSBub2RlLmhlaWdodCgpO1xuXG4gIC8vIENyZWF0ZSByb3VuZGVkIHJlY3RhbmdsZSBwYXRoXG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgY3R4Lm1vdmVUbyhwb2ludC54ICsgcmFkaXVzLCBwb2ludC55KTtcbiAgY3R4LmxpbmVUbyhwb2ludC54ICsgd2lkdGggLSByYWRpdXMsIHBvaW50LnkpO1xuICBjdHgucXVhZHJhdGljQ3VydmVUbyhwb2ludC54ICsgd2lkdGgsIHBvaW50LnksIHBvaW50LnggKyB3aWR0aCwgcG9pbnQueSArIHJhZGl1cyk7XG4gIGN0eC5saW5lVG8ocG9pbnQueCArIHdpZHRoLCBwb2ludC55ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8ocG9pbnQueCArIHdpZHRoLCBwb2ludC55ICsgaGVpZ2h0LCBwb2ludC54ICsgd2lkdGggLSByYWRpdXMsIHBvaW50LnkgKyBoZWlnaHQpO1xuICBjdHgubGluZVRvKHBvaW50LnggKyByYWRpdXMsIHBvaW50LnkgKyBoZWlnaHQpO1xuICBjdHgucXVhZHJhdGljQ3VydmVUbyhwb2ludC54LCBwb2ludC55ICsgaGVpZ2h0LCBwb2ludC54LCBwb2ludC55ICsgaGVpZ2h0IC0gcmFkaXVzKTtcbiAgY3R4LmxpbmVUbyhwb2ludC54LCBwb2ludC55ICsgcmFkaXVzKTtcbiAgY3R4LnF1YWRyYXRpY0N1cnZlVG8ocG9pbnQueCwgcG9pbnQueSwgcG9pbnQueCArIHJhZGl1cywgcG9pbnQueSk7XG4gIGN0eC5jbG9zZVBhdGgoKTtcbn1cbiJdfQ==
@@ -0,0 +1,62 @@
1
+ import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';
2
+ import { ViewportService } from '../../services/viewport.service';
3
+ import { PreviewFlowRenderStrategyService } from '../../services/preview-flow-render-strategy.service';
4
+ import { drawNode } from './draw-node';
5
+ import { NodeRenderingService } from '../../services/node-rendering.service';
6
+ import * as i0 from "@angular/core";
7
+ export class PreviewFlowComponent {
8
+ constructor() {
9
+ this.viewportService = inject(ViewportService);
10
+ this.renderStrategy = inject(PreviewFlowRenderStrategyService);
11
+ this.nodeRenderingService = inject(NodeRenderingService);
12
+ this.renderer2 = inject(Renderer2);
13
+ this.element = inject(ElementRef).nativeElement;
14
+ this.ctx = this.element.getContext('2d');
15
+ this.width = input(0);
16
+ this.height = input(0);
17
+ this.dpr = window.devicePixelRatio;
18
+ effect(() => {
19
+ // Set the "actual" size of the canvas
20
+ this.renderer2.setProperty(this.element, 'width', this.width() * this.dpr);
21
+ this.renderer2.setProperty(this.element, 'height', this.height() * this.dpr);
22
+ // Set the "drawn" size of the canvas
23
+ this.renderer2.setStyle(this.element, 'width', `${this.width()}px`);
24
+ this.renderer2.setStyle(this.element, 'height', `${this.height()}px`);
25
+ // Scale the context to match device pixel ratio
26
+ this.ctx.scale(this.dpr, this.dpr);
27
+ });
28
+ effect(() => {
29
+ const viewport = this.viewportService.readableViewport();
30
+ this.ctx.clearRect(0, 0, this.width(), this.height());
31
+ // Save the current context state
32
+ this.ctx.save();
33
+ // Apply viewport transformations (zoom and pan)
34
+ this.ctx.setTransform(viewport.zoom * this.dpr, // horizontal scaling with DPR
35
+ 0, // horizontal skewing
36
+ 0, // vertical skewing
37
+ viewport.zoom * this.dpr, // vertical scaling with DPR
38
+ viewport.x * this.dpr, // horizontal translation with DPR
39
+ viewport.y * this.dpr);
40
+ for (let i = 0; i < this.nodeRenderingService.viewportNodes().length; i++) {
41
+ const node = this.nodeRenderingService.viewportNodes()[i];
42
+ if (this.renderStrategy.shouldRenderNode(node)) {
43
+ drawNode(this.ctx, node);
44
+ }
45
+ }
46
+ // Restore the context state
47
+ this.ctx.restore();
48
+ });
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PreviewFlowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: PreviewFlowComponent, isStandalone: true, selector: "canvas[previewFlow]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PreviewFlowComponent, decorators: [{
54
+ type: Component,
55
+ args: [{
56
+ standalone: true,
57
+ changeDetection: ChangeDetectionStrategy.OnPush,
58
+ selector: 'canvas[previewFlow]',
59
+ template: '',
60
+ }]
61
+ }], ctorParameters: () => [] });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL3ByZXZpZXctZmxvdy9wcmV2aWV3LWZsb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFRN0UsTUFBTSxPQUFPLG9CQUFvQjtJQWMvQjtRQWJRLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDMUQseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QixZQUFPLEdBQUcsTUFBTSxDQUFnQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDMUUsUUFBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBRSxDQUFDO1FBRXBDLFVBQUssR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekIsV0FBTSxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUVsQixRQUFHLEdBQUcsTUFB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ZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctZmxvdy1yZW5kZXItc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBkcmF3Tm9kZSB9IGZyb20gJy4vZHJhdy1ub2RlJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc2VsZWN0b3I6ICdjYW52YXNbcHJldmlld0Zsb3ddJyxcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3Rmxvd0NvbXBvbmVudCB7XG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgcmVuZGVyU3RyYXRlZ3kgPSBpbmplY3QoUHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG4gIHByaXZhdGUgY3R4ID0gdGhpcy5lbGVtZW50LmdldENvbnRleHQoJzJkJykhO1xuXG4gIHJlYWRvbmx5IHdpZHRoID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgaGVpZ2h0ID0gaW5wdXQ8bnVtYmVyPigwKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBTZXQgdGhlIFwiYWN0dWFsXCIgc2l6ZSBvZiB0aGUgY2FudmFzXG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnQsICd3aWR0aCcsIHRoaXMud2lkdGgoKSAqIHRoaXMuZHByKTtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudCwgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KCkgKiB0aGlzLmRwcik7XG5cbiAgICAgIC8vIFNldCB0aGUgXCJkcmF3blwiIHNpemUgb2YgdGhlIGNhbnZhc1xuICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50LCAnd2lkdGgnLCBgJHt0aGlzLndpZHRoKCl9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudCwgJ2hlaWdodCcsIGAke3RoaXMuaGVpZ2h0KCl9cHhgKTtcblxuICAgICAgLy8gU2NhbGUgdGhlIGNvbnRleHQgdG8gbWF0Y2ggZGV2aWNlIHBpeGVsIHJhdGlvXG4gICAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLmRwciwgdGhpcy5kcHIpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpO1xuXG4gICAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTtcblxuICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBjb250ZXh0IHN0YXRlXG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG5cbiAgICAgIC8vIEFwcGx5IHZpZXdwb3J0IHRyYW5zZm9ybWF0aW9ucyAoem9vbSBhbmQgcGFuKVxuICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKFxuICAgICAgICB2aWV3cG9ydC56b29tICogdGhpcy5kcHIsIC8vIGhvcml6b250YWwgc2NhbGluZyB3aXRoIERQUlxuICAgICAgICAwLCAvLyBob3Jpem9udGFsIHNrZXdpbmdcbiAgICAgICAgMCwgLy8gdmVydGljYWwgc2tld2luZ1xuICAgICAgICB2aWV3cG9ydC56b29tICogdGhpcy5kcHIsIC8vIHZlcnRpY2FsIHNjYWxpbmcgd2l0aCBEUFJcbiAgICAgICAgdmlld3BvcnQueCAqIHRoaXMuZHByLCAvLyBob3Jpem9udGFsIHRyYW5zbGF0aW9uIHdpdGggRFBSXG4gICAgICAgIHZpZXdwb3J0LnkgKiB0aGlzLmRwciwgLy8gdmVydGljYWwgdHJhbnNsYXRpb24gd2l0aCBEUFJcbiAgICAgICk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS52aWV3cG9ydE5vZGVzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2Uudmlld3BvcnROb2RlcygpW2ldO1xuXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclN0cmF0ZWd5LnNob3VsZFJlbmRlck5vZGUobm9kZSkpIHtcbiAgICAgICAgICBkcmF3Tm9kZSh0aGlzLmN0eCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzdG9yZSB0aGUgY29udGV4dCBzdGF0ZVxuICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=