ngx-vflow 0.13.0-0 → 0.14.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 (42) hide show
  1. package/esm2022/lib/vflow/components/background/background.component.mjs +7 -16
  2. package/esm2022/lib/vflow/components/default-node/default-node.component.mjs +18 -0
  3. package/esm2022/lib/vflow/components/node/node.component.mjs +8 -7
  4. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +23 -10
  5. package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +1 -1
  6. package/esm2022/lib/vflow/directives/selectable.directive.mjs +5 -2
  7. package/esm2022/lib/vflow/models/minimap.model.mjs +7 -0
  8. package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +119 -0
  9. package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +124 -180
  10. package/esm2022/lib/vflow/services/draggable.service.mjs +40 -19
  11. package/esm2022/lib/vflow/services/flow-entities.service.mjs +6 -5
  12. package/esm2022/lib/vflow/services/flow-settings.service.mjs +2 -1
  13. package/esm2022/lib/vflow/services/keyboard.service.mjs +45 -0
  14. package/esm2022/lib/vflow/services/node-changes.service.mjs +6 -7
  15. package/esm2022/lib/vflow/services/selection.service.mjs +12 -5
  16. package/esm2022/lib/vflow/types/keyboard-action.type.mjs +2 -0
  17. package/esm2022/lib/vflow/utils/get-os.mjs +24 -0
  18. package/esm2022/lib/vflow/utils/transform-background.mjs +6 -0
  19. package/esm2022/lib/vflow/vflow.module.mjs +11 -3
  20. package/esm2022/public-api.mjs +3 -1
  21. package/fesm2022/ngx-vflow.mjs +423 -242
  22. package/fesm2022/ngx-vflow.mjs.map +1 -1
  23. package/lib/vflow/components/background/background.component.d.ts +3 -6
  24. package/lib/vflow/components/default-node/default-node.component.d.ts +6 -0
  25. package/lib/vflow/components/vflow/vflow.component.d.ts +6 -2
  26. package/lib/vflow/directives/root-pointer.directive.d.ts +10 -16
  27. package/lib/vflow/directives/space-point-context.directive.d.ts +1 -15
  28. package/lib/vflow/models/edge.model.d.ts +17 -1
  29. package/lib/vflow/models/minimap.model.d.ts +4 -0
  30. package/lib/vflow/public-components/minimap/minimap.component.d.ts +49 -0
  31. package/lib/vflow/public-components/resizable/resizable.component.d.ts +6 -11
  32. package/lib/vflow/services/draggable.service.d.ts +2 -0
  33. package/lib/vflow/services/flow-entities.service.d.ts +7 -5
  34. package/lib/vflow/services/flow-settings.service.d.ts +2 -0
  35. package/lib/vflow/services/keyboard.service.d.ts +11 -0
  36. package/lib/vflow/services/selection.service.d.ts +1 -0
  37. package/lib/vflow/types/keyboard-action.type.d.ts +2 -0
  38. package/lib/vflow/utils/get-os.d.ts +1 -0
  39. package/lib/vflow/utils/transform-background.d.ts +2 -0
  40. package/lib/vflow/vflow.module.d.ts +21 -19
  41. package/package.json +1 -1
  42. package/public-api.d.ts +2 -0
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
56
56
  type: Directive,
57
57
  args: [{ selector: 'svg[rootPointer]' }]
58
58
  }] });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wb2ludGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBYyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBUSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSXhILE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFVSxTQUFJLEdBQUcsTUFBTSxDQUE0QixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFFbEUsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFBO1FBRXpDLG1CQUFjLEdBQXNCLElBQUksQ0FBQTtRQUVoRCxzQ0FBc0M7UUFDL0IsbUJBQWMsR0FBRyxTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3hFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDaEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ2hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUMsQ0FBQyxFQUNILFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNsQyxLQUFLLEVBQUUsQ0FDb0IsQ0FBQztRQUV2QixtQkFBYyxHQUFHLEtBQUss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LEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFBO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxDQUNvQixDQUFBO1FBRXRCLHdCQUFtQixHQUFHLEtBQUssQ0FDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFDOUIsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDaEMsQ0FBQyxJQUFJLENBQ0osS0FBSyxFQUFFLENBQ1IsQ0FBQTtLQVVGO0lBUEM7OztPQUdHO0lBQ0ksZUFBZSxDQUFDLEtBQWlCO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLENBQUM7K0dBdkZVLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQURoQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBmcm9tRXZlbnQsIG1hcCwgbWVyZ2UsIG9ic2VydmVPbiwgc2hhcmUsIHNraXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ3N2Z1tyb290UG9pbnRlcl0nIH0pXG5leHBvcnQgY2xhc3MgUm9vdFBvaW50ZXJEaXJlY3RpdmUge1xuICBwcml2YXRlIGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxTVkdTVkdFbGVtZW50Pj4oRWxlbWVudFJlZikubmF0aXZlRWxlbWVudFxuXG4gIHByaXZhdGUgaW5pdGlhbFRvdWNoJCA9IG5ldyBTdWJqZWN0PFRvdWNoRXZlbnQ+KClcblxuICBwcml2YXRlIHByZXZUb3VjaEV2ZW50OiBUb3VjaEV2ZW50IHwgbnVsbCA9IG51bGxcblxuICAvLyBUT0RPOiBkbyBub3QgZW1pdCBpZiBtb3VzZSBub3QgZG93blxuICBwdWJsaWMgbW91c2VNb3ZlbWVudCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2Vtb3ZlJykucGlwZShcbiAgICBtYXAoZXZlbnQgPT4gKHtcbiAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICB5OiBldmVudC5jbGllbnRZLFxuICAgICAgbW92ZW1lbnRYOiBldmVudC5tb3ZlbWVudFgsXG4gICAgICBtb3ZlbWVudFk6IGV2ZW50Lm1vdmVtZW50WSxcbiAgICAgIHRhcmdldDogZXZlbnQudGFyZ2V0LFxuICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRcbiAgICB9KSksXG4gICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICBzaGFyZSgpXG4gICkgc2F0aXNmaWVzIE9ic2VydmFibGU8UG9pbnQ+O1xuXG4gIHB1YmxpYyB0b3VjaE1vdmVtZW50JCA9IG1lcmdlKFxuICAgIHRoaXMuaW5pdGlhbFRvdWNoJCxcbiAgICBmcm9tRXZlbnQ8VG91Y2hFdmVudD4odGhpcy5ob3N0LCAndG91Y2htb3ZlJylcbiAgKS5waXBlKFxuICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpLFxuICAgIG1hcCgob3JpZ2luYWxFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeCA9IG9yaWdpbmFsRXZlbnQudG91Y2hlc1swXT8uY2xpZW50WCA/PyAwXG4gICAgICBjb25zdCB5ID0gb3JpZ2luYWxFdmVudC50b3VjaGVzWzBdPy5jbGllbnRZID8/IDBcbiAgICAgIGNvbnN0IG1vdmVtZW50WCA9IHRoaXMucHJldlRvdWNoRXZlbnRcbiAgICAgICAgPyBvcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVggLSB0aGlzLnByZXZUb3VjaEV2ZW50LnRvdWNoZXNbMF0ucGFnZVhcbiAgICAgICAgOiAwXG4gICAgICBjb25zdCBtb3ZlbWVudFkgPSB0aGlzLnByZXZUb3VjaEV2ZW50XG4gICAgICAgID8gb3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLnBhZ2VZIC0gdGhpcy5wcmV2VG91Y2hFdmVudC50b3VjaGVzWzBdLnBhZ2VZXG4gICAgICAgIDogMFxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpXG5cbiAgICAgIHJldHVybiB7IHgsIHksIG1vdmVtZW50WCwgbW92ZW1lbnRZLCB0YXJnZXQsIG9yaWdpbmFsRXZlbnQgfVxuICAgIH0pLFxuICAgIHRhcCgoZXZlbnQpID0+IHRoaXMucHJldlRvdWNoRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50KSxcbiAgICBvYnNlcnZlT24oYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD47XG5cbiAgcHVibGljIHBvaW50ZXJNb3ZlbWVudCQgPSBtZXJnZShcbiAgICB0aGlzLm1vdXNlTW92ZW1lbnQkLFxuICAgIHRoaXMudG91Y2hNb3ZlbWVudCRcbiAgKVxuXG4gIHB1YmxpYyB0b3VjaEVuZCQgPSBmcm9tRXZlbnQ8VG91Y2hFdmVudD4odGhpcy5ob3N0LCAndG91Y2hlbmQnKS5waXBlKFxuICAgIG1hcCgob3JpZ2luYWxFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeCA9IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0/LmNsaWVudFggPz8gMFxuICAgICAgY29uc3QgeSA9IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0/LmNsaWVudFkgPz8gMFxuICAgICAgY29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KVxuXG4gICAgICByZXR1cm4geyB4LCB5LCB0YXJnZXQsIG9yaWdpbmFsRXZlbnQgfVxuICAgIH0pLFxuICAgIHRhcCgoKSA9PiB0aGlzLnByZXZUb3VjaEV2ZW50ID0gbnVsbCksXG4gICAgc2hhcmUoKVxuICApIHNhdGlzZmllcyBPYnNlcnZhYmxlPFBvaW50PlxuXG4gIHB1YmxpYyBtb3VzZVVwJCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZXVwJykucGlwZShcbiAgICBtYXAoKG9yaWdpbmFsRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHggPSBvcmlnaW5hbEV2ZW50LmNsaWVudFhcbiAgICAgIGNvbnN0IHkgPSBvcmlnaW5hbEV2ZW50LmNsaWVudFlcbiAgICAgIGNvbnN0IHRhcmdldCA9IG9yaWdpbmFsRXZlbnQudGFyZ2V0XG5cbiAgICAgIHJldHVybiB7IHgsIHksIHRhcmdldCwgb3JpZ2luYWxFdmVudCB9XG4gICAgfSksXG4gICAgc2hhcmUoKVxuICApIHNhdGlzZmllcyBPYnNlcnZhYmxlPFBvaW50PlxuXG4gIHB1YmxpYyBkb2N1bWVudFBvaW50ZXJFbmQkID0gbWVyZ2UoXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2V1cCcpLFxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ3RvdWNoZW5kJylcbiAgKS5waXBlKFxuICAgIHNoYXJlKClcbiAgKVxuXG5cbiAgLyoqXG4gICAqIFdlIHNob3VsZCBrbm93IHdoZW4gdXNlciBzdGFydGVkIGEgdG91Y2ggaW4gb3JkZXIgdG8gbm90XG4gICAqIHNob3cgb2xkIHRvdWNoIHBvc2l0aW9uIHdoZW4gY29ubmVjdGlvbiBjcmVhdGlvbiBpcyBzdGFydGVkXG4gICAqL1xuICBwdWJsaWMgc2V0SW5pdGlhbFRvdWNoKGV2ZW50OiBUb3VjaEV2ZW50KSB7XG4gICAgdGhpcy5pbml0aWFsVG91Y2gkLm5leHQoZXZlbnQpXG4gIH1cbn1cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wb2ludGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBYyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBUSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBYXhILE1BQU0sT0FBTyxvQkFBb0I7SUFEakM7UUFFVSxTQUFJLEdBQUcsTUFBTSxDQUE0QixVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUE7UUFFbEUsa0JBQWEsR0FBRyxJQUFJLE9BQU8sRUFBYyxDQUFBO1FBRXpDLG1CQUFjLEdBQXNCLElBQUksQ0FBQTtRQUVoRCxzQ0FBc0M7UUFDL0IsbUJBQWMsR0FBRyxTQUFTLENBQWEsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ3hFLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDWixDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDaEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ2hCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUF3QjtZQUN0QyxhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDLENBQUMsRUFDSCxTQUFTLENBQUMsdUJBQXVCLENBQUMsRUFDbEMsS0FBSyxFQUFFLENBQ29CLENBQUM7UUFFdkIsbUJBQWMsR0FBRyxLQUFLLENBQzNCLElBQUksQ0FBQyxhQUFhLEVBQ2xCLFNBQVMsQ0FBYSxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUM5QyxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUN0QyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUE7WUFDaEQsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFBO1lBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjO2dCQUNuQyxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztnQkFDdkUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUVMLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFFOUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFDOUQsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDekQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLEVBQ2xDLEtBQUssRUFBRSxDQUNvQixDQUFDO1FBRXZCLHFCQUFnQixHQUE2QixLQUFLLENBQ3ZELElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxjQUFjLENBQ3BCLENBQUE7UUFFTSxjQUFTLEdBQUcsU0FBUyxDQUFhLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNsRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUE7WUFDdkQsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFBO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFFOUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxDQUFBO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUNyQyxLQUFLLEVBQUUsQ0FDb0IsQ0FBQTtRQUV0QixhQUFRLEdBQUcsU0FBUyxDQUFhLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUNoRSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNwQixNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFBO1lBQy9CLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUE7WUFDL0IsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQTtZQUVuQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUE7UUFDeEMsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxFQUFFLENBQ29CLENBQUE7UUFFdEIsd0JBQW1CLEdBQUcsS0FBSyxDQUNoQyxTQUFTLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUM5QixTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUNoQyxDQUFDLElBQUksQ0FDSixLQUFLLEVBQUUsQ0FDUixDQUFBO0tBVUY7SUFQQzs7O09BR0c7SUFDSSxlQUFlLENBQUMsS0FBaUI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEMsQ0FBQzsrR0F2RlUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGZyb21FdmVudCwgbWFwLCBtZXJnZSwgb2JzZXJ2ZU9uLCBzaGFyZSwgc2tpcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQuaW50ZXJmYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBQb2ludGVyRXZlbnQge1xuICB4OiBudW1iZXJcbiAgeTogbnVtYmVyXG4gIG1vdmVtZW50WDogbnVtYmVyXG4gIG1vdmVtZW50WTogbnVtYmVyXG4gIHRhcmdldDogRWxlbWVudCB8IG51bGxcbiAgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnRcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnc3ZnW3Jvb3RQb2ludGVyXScgfSlcbmV4cG9ydCBjbGFzcyBSb290UG9pbnRlckRpcmVjdGl2ZSB7XG4gIHByaXZhdGUgaG9zdCA9IGluamVjdDxFbGVtZW50UmVmPFNWR1NWR0VsZW1lbnQ+PihFbGVtZW50UmVmKS5uYXRpdmVFbGVtZW50XG5cbiAgcHJpdmF0ZSBpbml0aWFsVG91Y2gkID0gbmV3IFN1YmplY3Q8VG91Y2hFdmVudD4oKVxuXG4gIHByaXZhdGUgcHJldlRvdWNoRXZlbnQ6IFRvdWNoRXZlbnQgfCBudWxsID0gbnVsbFxuXG4gIC8vIFRPRE86IGRvIG5vdCBlbWl0IGlmIG1vdXNlIG5vdCBkb3duXG4gIHB1YmxpYyBtb3VzZU1vdmVtZW50JCA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZW1vdmUnKS5waXBlKFxuICAgIG1hcChldmVudCA9PiAoe1xuICAgICAgeDogZXZlbnQuY2xpZW50WCxcbiAgICAgIHk6IGV2ZW50LmNsaWVudFksXG4gICAgICBtb3ZlbWVudFg6IGV2ZW50Lm1vdmVtZW50WCxcbiAgICAgIG1vdmVtZW50WTogZXZlbnQubW92ZW1lbnRZLFxuICAgICAgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRWxlbWVudCB8IG51bGwsXG4gICAgICBvcmlnaW5hbEV2ZW50OiBldmVudFxuICAgIH0pKSxcbiAgICBvYnNlcnZlT24oYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD47XG5cbiAgcHVibGljIHRvdWNoTW92ZW1lbnQkID0gbWVyZ2UoXG4gICAgdGhpcy5pbml0aWFsVG91Y2gkLFxuICAgIGZyb21FdmVudDxUb3VjaEV2ZW50Pih0aGlzLmhvc3QsICd0b3VjaG1vdmUnKVxuICApLnBpcGUoXG4gICAgdGFwKChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSksXG4gICAgbWFwKChvcmlnaW5hbEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB4ID0gb3JpZ2luYWxFdmVudC50b3VjaGVzWzBdPy5jbGllbnRYID8/IDBcbiAgICAgIGNvbnN0IHkgPSBvcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0/LmNsaWVudFkgPz8gMFxuICAgICAgY29uc3QgbW92ZW1lbnRYID0gdGhpcy5wcmV2VG91Y2hFdmVudFxuICAgICAgICA/IG9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5wYWdlWCAtIHRoaXMucHJldlRvdWNoRXZlbnQudG91Y2hlc1swXS5wYWdlWFxuICAgICAgICA6IDBcbiAgICAgIGNvbnN0IG1vdmVtZW50WSA9IHRoaXMucHJldlRvdWNoRXZlbnRcbiAgICAgICAgPyBvcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0ucGFnZVkgLSB0aGlzLnByZXZUb3VjaEV2ZW50LnRvdWNoZXNbMF0ucGFnZVlcbiAgICAgICAgOiAwXG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSlcblxuICAgICAgcmV0dXJuIHsgeCwgeSwgbW92ZW1lbnRYLCBtb3ZlbWVudFksIHRhcmdldCwgb3JpZ2luYWxFdmVudCB9XG4gICAgfSksXG4gICAgdGFwKChldmVudCkgPT4gdGhpcy5wcmV2VG91Y2hFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQpLFxuICAgIG9ic2VydmVPbihhbmltYXRpb25GcmFtZVNjaGVkdWxlciksXG4gICAgc2hhcmUoKVxuICApIHNhdGlzZmllcyBPYnNlcnZhYmxlPFBvaW50PjtcblxuICBwdWJsaWMgcG9pbnRlck1vdmVtZW50JDogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnQ+ID0gbWVyZ2UoXG4gICAgdGhpcy5tb3VzZU1vdmVtZW50JCxcbiAgICB0aGlzLnRvdWNoTW92ZW1lbnQkXG4gIClcblxuICBwdWJsaWMgdG91Y2hFbmQkID0gZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuaG9zdCwgJ3RvdWNoZW5kJykucGlwZShcbiAgICBtYXAoKG9yaWdpbmFsRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHggPSBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdPy5jbGllbnRYID8/IDBcbiAgICAgIGNvbnN0IHkgPSBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdPy5jbGllbnRZID8/IDBcbiAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSlcblxuICAgICAgcmV0dXJuIHsgeCwgeSwgdGFyZ2V0LCBvcmlnaW5hbEV2ZW50IH1cbiAgICB9KSxcbiAgICB0YXAoKCkgPT4gdGhpcy5wcmV2VG91Y2hFdmVudCA9IG51bGwpLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD5cblxuICBwdWJsaWMgbW91c2VVcCQgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2V1cCcpLnBpcGUoXG4gICAgbWFwKChvcmlnaW5hbEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB4ID0gb3JpZ2luYWxFdmVudC5jbGllbnRYXG4gICAgICBjb25zdCB5ID0gb3JpZ2luYWxFdmVudC5jbGllbnRZXG4gICAgICBjb25zdCB0YXJnZXQgPSBvcmlnaW5hbEV2ZW50LnRhcmdldFxuXG4gICAgICByZXR1cm4geyB4LCB5LCB0YXJnZXQsIG9yaWdpbmFsRXZlbnQgfVxuICAgIH0pLFxuICAgIHNoYXJlKClcbiAgKSBzYXRpc2ZpZXMgT2JzZXJ2YWJsZTxQb2ludD5cblxuICBwdWJsaWMgZG9jdW1lbnRQb2ludGVyRW5kJCA9IG1lcmdlKFxuICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKSxcbiAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICd0b3VjaGVuZCcpXG4gICkucGlwZShcbiAgICBzaGFyZSgpXG4gIClcblxuXG4gIC8qKlxuICAgKiBXZSBzaG91bGQga25vdyB3aGVuIHVzZXIgc3RhcnRlZCBhIHRvdWNoIGluIG9yZGVyIHRvIG5vdFxuICAgKiBzaG93IG9sZCB0b3VjaCBwb3NpdGlvbiB3aGVuIGNvbm5lY3Rpb24gY3JlYXRpb24gaXMgc3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHNldEluaXRpYWxUb3VjaChldmVudDogVG91Y2hFdmVudCkge1xuICAgIHRoaXMuaW5pdGlhbFRvdWNoJC5uZXh0KGV2ZW50KVxuICB9XG59XG4iXX0=
@@ -27,7 +27,7 @@ export class SelectableDirective {
27
27
  return null;
28
28
  }
29
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
30
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectableDirective, selector: "[selectable]", host: { listeners: { "mousedown": "onMousedown()" } }, ngImport: i0 }); }
30
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectableDirective, selector: "[selectable]", host: { listeners: { "mousedown": "onMousedown()", "touchstart": "onMousedown()" } }, ngImport: i0 }); }
31
31
  }
32
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectableDirective, decorators: [{
33
33
  type: Directive,
@@ -35,5 +35,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35
35
  }], propDecorators: { onMousedown: [{
36
36
  type: HostListener,
37
37
  args: ['mousedown']
38
+ }, {
39
+ type: HostListener,
40
+ args: ['touchstart']
38
41
  }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9zZWxlY3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHeEUsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUVVLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ2pELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDdEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtLQW1CL0Q7SUFoQlcsV0FBVztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDNUIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNyQztJQUNILENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUE7U0FDakM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQTtTQUM3QjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQzsrR0F0QlUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFOzhCQVEzQixXQUFXO3NCQURwQixZQUFZO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZS9lZGdlLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZsb3dFbnRpdHkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zsb3ctZW50aXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbc2VsZWN0YWJsZV0nIH0pXG5leHBvcnQgY2xhc3MgU2VsZWN0YWJsZURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKVxuICBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSlcbiAgcHJpdmF0ZSBwYXJlbnRFZGdlID0gaW5qZWN0KEVkZ2VDb21wb25lbnQsIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgcHJpdmF0ZSBwYXJlbnROb2RlID0gaW5qZWN0KE5vZGVDb21wb25lbnQsIHsgb3B0aW9uYWw6IHRydWUgfSlcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKVxuICBwcm90ZWN0ZWQgb25Nb3VzZWRvd24oKSB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdHkoKVxuICAgIGlmIChlbnRpdHkgJiYgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmVudGl0aWVzU2VsZWN0YWJsZSgpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KGVudGl0eSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVudGl0eSgpOiBGbG93RW50aXR5IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5ub2RlTW9kZWxcbiAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50RWRnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RWRnZS5tb2RlbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvZGlyZWN0aXZlcy9zZWxlY3RhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7QUFHeEUsTUFBTSxPQUFPLG1CQUFtQjtJQURoQztRQUVVLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ2pELHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDdEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtLQW9CL0Q7SUFoQlcsV0FBVztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDNUIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNyQztJQUNILENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUE7U0FDakM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQTtTQUM3QjtRQUVELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQzsrR0F2QlUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFOzhCQVMzQixXQUFXO3NCQUZwQixZQUFZO3VCQUFDLFdBQVc7O3NCQUN4QixZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZS9lZGdlLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZsb3dFbnRpdHkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zsb3ctZW50aXR5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9ub2RlL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbc2VsZWN0YWJsZV0nIH0pXG5leHBvcnQgY2xhc3MgU2VsZWN0YWJsZURpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZmxvd1NldHRpbmdzU2VydmljZSA9IGluamVjdChGbG93U2V0dGluZ3NTZXJ2aWNlKVxuICBwcml2YXRlIHNlbGVjdGlvblNlcnZpY2UgPSBpbmplY3QoU2VsZWN0aW9uU2VydmljZSlcbiAgcHJpdmF0ZSBwYXJlbnRFZGdlID0gaW5qZWN0KEVkZ2VDb21wb25lbnQsIHsgb3B0aW9uYWw6IHRydWUgfSlcbiAgcHJpdmF0ZSBwYXJlbnROb2RlID0gaW5qZWN0KE5vZGVDb21wb25lbnQsIHsgb3B0aW9uYWw6IHRydWUgfSlcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JylcbiAgcHJvdGVjdGVkIG9uTW91c2Vkb3duKCkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXR5KClcbiAgICBpZiAoZW50aXR5ICYmIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdChlbnRpdHkpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbnRpdHkoKTogRmxvd0VudGl0eSB8IG51bGwge1xuICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudE5vZGUubm9kZU1vZGVsXG4gICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudEVkZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudEVkZ2UubW9kZWxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ import { signal } from "@angular/core";
2
+ export class MinimapModel {
3
+ constructor() {
4
+ this.template = signal(null);
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9tb2RlbHMvbWluaW1hcC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRXBELE1BQU0sT0FBTyxZQUFZO0lBQXpCO1FBQ1MsYUFBUSxHQUFHLE1BQU0sQ0FBOEIsSUFBSSxDQUFDLENBQUE7SUFDN0QsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2lnbmFsLCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBNaW5pbWFwTW9kZWwge1xuICBwdWJsaWMgdGVtcGxhdGUgPSBzaWduYWw8VGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsPihudWxsKVxufVxuIl19
@@ -0,0 +1,119 @@
1
+ import { Component, computed, inject, Injector, Input, signal, ViewChild } from '@angular/core';
2
+ import { FlowEntitiesService } from '../../services/flow-entities.service';
3
+ import { MinimapModel } from '../../models/minimap.model';
4
+ import { FlowSettingsService } from '../../services/flow-settings.service';
5
+ import { getViewportForBounds } from '../../utils/viewport';
6
+ import { getNodesBounds } from '../../utils/nodes';
7
+ import { ViewportService } from '../../services/viewport.service';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "../../components/default-node/default-node.component";
11
+ export class MiniMapComponent {
12
+ constructor() {
13
+ this.entitiesService = inject(FlowEntitiesService);
14
+ this.flowSettingsService = inject(FlowSettingsService);
15
+ this.viewportService = inject(ViewportService);
16
+ this.injector = inject(Injector);
17
+ /**
18
+ * The color outside the viewport (invisible area)
19
+ */
20
+ this.maskColor = `rgba(215, 215, 215, 0.6)`;
21
+ /**
22
+ * The minimap stroke color
23
+ */
24
+ this.strokeColor = `rgb(200, 200, 200)`;
25
+ this.minimapOffset = 10;
26
+ this.minimapScale = computed(() => {
27
+ if (this.scaleOnHoverSignal()) {
28
+ return this.hovered() ? 0.4 : 0.2;
29
+ }
30
+ return 0.2;
31
+ });
32
+ this.viewportColor = computed(() => this.flowSettingsService.background().color ?? '#fff');
33
+ this.hovered = signal(false);
34
+ this.minimapPoint = computed(() => {
35
+ switch (this.minimapPosition()) {
36
+ case 'top-left':
37
+ return { x: this.minimapOffset, y: this.minimapOffset };
38
+ case 'top-right':
39
+ return {
40
+ x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,
41
+ y: this.minimapOffset
42
+ };
43
+ case 'bottom-left':
44
+ return {
45
+ x: this.minimapOffset,
46
+ y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset
47
+ };
48
+ case 'bottom-right':
49
+ return {
50
+ x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,
51
+ y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset
52
+ };
53
+ }
54
+ });
55
+ this.minimapWidth = computed(() => this.flowSettingsService.computedFlowWidth() * this.minimapScale());
56
+ this.minimapHeight = computed(() => this.flowSettingsService.computedFlowHeight() * this.minimapScale());
57
+ this.viewportTransform = computed(() => {
58
+ const viewport = this.viewportService.readableViewport();
59
+ let scale = 1 / viewport.zoom;
60
+ let x = -(viewport.x * this.minimapScale()) * scale;
61
+ x /= this.minimapScale();
62
+ let y = -(viewport.y * this.minimapScale()) * scale;
63
+ y /= this.minimapScale();
64
+ scale /= this.minimapScale();
65
+ return `translate(${x}, ${y}) scale(${scale})`;
66
+ });
67
+ this.boundsViewport = computed(() => {
68
+ const nodes = this.entitiesService.nodes();
69
+ return getViewportForBounds(getNodesBounds(nodes), this.flowSettingsService.computedFlowWidth(), this.flowSettingsService.computedFlowHeight(), -Infinity, 1.5, 0);
70
+ });
71
+ this.minimapTransform = computed(() => {
72
+ const vport = this.boundsViewport();
73
+ const x = vport.x * this.minimapScale();
74
+ const y = vport.y * this.minimapScale();
75
+ const scale = vport.zoom * this.minimapScale();
76
+ return `translate(${x} ${y}) scale(${scale})`;
77
+ });
78
+ this.minimapPosition = signal('bottom-right');
79
+ this.scaleOnHoverSignal = signal(false);
80
+ }
81
+ /**
82
+ * The corner of the flow where to render a mini-map
83
+ */
84
+ set position(value) {
85
+ this.minimapPosition.set(value);
86
+ }
87
+ /**
88
+ * Make a minimap bigger on hover
89
+ */
90
+ set scaleOnHover(value) {
91
+ this.scaleOnHoverSignal.set(value);
92
+ }
93
+ ngOnInit() {
94
+ const model = new MinimapModel();
95
+ model.template.set(this.minimap);
96
+ this.entitiesService.minimap.set(model);
97
+ }
98
+ trackNodes(idx, { node }) {
99
+ return node;
100
+ }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MiniMapComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MiniMapComponent, selector: "mini-map", inputs: { position: "position", maskColor: "maskColor", strokeColor: "strokeColor", scaleOnHover: "scaleOnHover" }, viewQueries: [{ propertyName: "minimap", first: true, predicate: ["minimap"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n <ng-container\n *ngFor=\"let model of entitiesService.nodes(); trackBy: trackNodes\"\n >\n <svg:foreignObject\n *ngIf=\"model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType\"\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n\n <svg:rect\n *ngIf=\"model.node.type === 'default-group' || model.node.type === 'template-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\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 />\n\n </ng-container>\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }] }); }
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MiniMapComponent, decorators: [{
105
+ type: Component,
106
+ args: [{ selector: 'mini-map', template: "<ng-template #minimap>\n <svg:rect\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor\"\n fill=\"none\"\n />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\"\n >\n <svg:rect\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.fill]=\"maskColor\"\n />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n />\n\n <ng-container\n *ngFor=\"let model of entitiesService.nodes(); trackBy: trackNodes\"\n >\n <svg:foreignObject\n *ngIf=\"model.node.type === 'default' || model.node.type === 'html-template' || model.isComponentType\"\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n >\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\"\n >\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n\n <svg:rect\n *ngIf=\"model.node.type === 'default-group' || model.node.type === 'template-group'\"\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\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 />\n\n </ng-container>\n </svg:g>\n </svg:svg>\n</ng-template>\n", styles: [".default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}\n"] }]
107
+ }], propDecorators: { position: [{
108
+ type: Input
109
+ }], maskColor: [{
110
+ type: Input
111
+ }], strokeColor: [{
112
+ type: Input
113
+ }], scaleOnHover: [{
114
+ type: Input
115
+ }], minimap: [{
116
+ type: ViewChild,
117
+ args: ['minimap', { static: true }]
118
+ }] } });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvcHVibGljLWNvbXBvbmVudHMvbWluaW1hcC9taW5pbWFwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9wdWJsaWMtY29tcG9uZW50cy9taW5pbWFwL21pbmltYXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFlLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQVNsRSxNQUFNLE9BQU8sZ0JBQWdCO0lBTDdCO1FBTVksb0JBQWUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUM3Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUNqRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBVXJDOztXQUVHO1FBRUksY0FBUyxH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eEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQWNEOztPQUVHO0lBQ0gsSUFDVyxZQUFZLENBQUMsS0FBYztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUE0Rk0sUUFBUTtRQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDaEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxFQUFFLElBQUksRUFBYTtRQUNuRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7K0dBcklVLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHNSQ2hCN0IsNHZFQXFFQTs7NEZEckRhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxVQUFVOzhCQWNULFFBQVE7c0JBRGxCLEtBQUs7Z0JBU0MsU0FBUztzQkFEZixLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBT0ssWUFBWTtzQkFEdEIsS0FBSztnQkFNRSxPQUFPO3NCQURkLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIHNpZ25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd0VudGl0aWVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctZW50aXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBNaW5pbWFwTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbWluaW1hcC5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBGbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFZpZXdwb3J0Rm9yQm91bmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmlld3BvcnQnO1xuaW1wb3J0IHsgZ2V0Tm9kZXNCb3VuZHMgfSBmcm9tICcuLi8uLi91dGlscy9ub2Rlcyc7XG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92aWV3cG9ydC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgTWluaU1hcFBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21pbmktbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21pbmltYXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtgLi9taW5pbWFwLmNvbXBvbmVudC5zY3NzYF1cbn0pXG5leHBvcnQgY2xhc3MgTWluaU1hcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByb3RlY3RlZCBlbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSlcbiAgcHJvdGVjdGVkIGZsb3dTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSlcbiAgcHJvdGVjdGVkIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpXG4gIHByb3RlY3RlZCBpbmplY3RvciA9IGluamVjdChJbmplY3RvcilcblxuICAvKipcbiAgICogVGhlIGNvcm5lciBvZiB0aGUgZmxvdyB3aGVyZSB0byByZW5kZXIgYSBtaW5pLW1hcFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwb3NpdGlvbih2YWx1ZTogTWluaU1hcFBvc2l0aW9uKSB7XG4gICAgdGhpcy5taW5pbWFwUG9zaXRpb24uc2V0KHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvdXRzaWRlIHRoZSB2aWV3cG9ydCAoaW52aXNpYmxlIGFyZWEpXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWFza0NvbG9yID0gYHJnYmEoMjE1LCAyMTUsIDIxNSwgMC42KWBcblxuICAvKipcbiAgICogVGhlIG1pbmltYXAgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3Ryb2tlQ29sb3IgPSBgcmdiKDIwMCwgMjAwLCAyMDApYFxuXG4gIC8qKlxuICAgKiBNYWtlIGEgbWluaW1hcCBiaWdnZXIgb24gaG92ZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2NhbGVPbkhvdmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zY2FsZU9uSG92ZXJTaWduYWwuc2V0KHZhbHVlKVxuICB9XG5cbiAgQFZpZXdDaGlsZCgnbWluaW1hcCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgbWluaW1hcCE6IFRlbXBsYXRlUmVmPHVua25vd24+XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbWFwT2Zmc2V0ID0gMTBcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltYXBTY2FsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5zY2FsZU9uSG92ZXJTaWduYWwoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaG92ZXJlZCgpID8gMC40IDogMC4yXG4gICAgfVxuXG4gICAgcmV0dXJuIDAuMlxuICB9KVxuXG4gIHByb3RlY3RlZCB2aWV3cG9ydENvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmJhY2tncm91bmQoKS5jb2xvciA/PyAnI2ZmZicpXG5cbiAgcHJvdGVjdGVkIGhvdmVyZWQgPSBzaWduYWwoZmFsc2UpXG5cbiAgcHJvdGVjdGVkIG1pbmltYXBQb2ludCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBzd2l0Y2ggKHRoaXMubWluaW1hcFBvc2l0aW9uKCkpIHtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgeDogdGhpcy5taW5pbWFwT2Zmc2V0LCB5OiB0aGlzLm1pbmltYXBPZmZzZXQgfVxuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAtIHRoaXMubWluaW1hcFdpZHRoKCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5taW5pbWFwT2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpIC0gdGhpcy5taW5pbWFwSGVpZ2h0KCkgLSB0aGlzLm1pbmltYXBPZmZzZXRcbiAgICAgICAgfVxuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAtIHRoaXMubWluaW1hcFdpZHRoKCkgLSB0aGlzLm1pbmltYXBPZmZzZXQsXG4gICAgICAgICAgeTogdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpIC0gdGhpcy5taW5pbWFwSGVpZ2h0KCkgLSB0aGlzLm1pbmltYXBPZmZzZXRcbiAgICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBwcm90ZWN0ZWQgbWluaW1hcFdpZHRoID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSAqIHRoaXMubWluaW1hcFNjYWxlKClcbiAgKVxuICBwcm90ZWN0ZWQgbWluaW1hcEhlaWdodCA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLmNvbXB1dGVkRmxvd0hlaWdodCgpICogdGhpcy5taW5pbWFwU2NhbGUoKVxuICApXG5cbiAgcHJvdGVjdGVkIHZpZXdwb3J0VHJhbnNmb3JtID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpO1xuICAgIGxldCBzY2FsZSA9IDEgLyB2aWV3cG9ydC56b29tXG5cbiAgICBsZXQgeCA9IC0odmlld3BvcnQueCAqIHRoaXMubWluaW1hcFNjYWxlKCkpICogc2NhbGVcbiAgICB4IC89IHRoaXMubWluaW1hcFNjYWxlKClcblxuICAgIGxldCB5ID0gLSh2aWV3cG9ydC55ICogdGhpcy5taW5pbWFwU2NhbGUoKSkgKiBzY2FsZVxuICAgIHkgLz0gdGhpcy5taW5pbWFwU2NhbGUoKVxuXG4gICAgc2NhbGUgLz0gdGhpcy5taW5pbWFwU2NhbGUoKVxuXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSwgJHt5fSkgc2NhbGUoJHtzY2FsZX0pYDtcbiAgfSk7XG5cblxuICBwcm90ZWN0ZWQgYm91bmRzVmlld3BvcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmVudGl0aWVzU2VydmljZS5ub2RlcygpXG5cbiAgICByZXR1cm4gZ2V0Vmlld3BvcnRGb3JCb3VuZHMoXG4gICAgICBnZXROb2Rlc0JvdW5kcyhub2RlcyksXG4gICAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93V2lkdGgoKSxcbiAgICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dIZWlnaHQoKSxcbiAgICAgIC1JbmZpbml0eSxcbiAgICAgIDEuNSxcbiAgICAgIDBcbiAgICApXG5cbiAgfSlcblxuICBwcm90ZWN0ZWQgbWluaW1hcFRyYW5zZm9ybSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB2cG9ydCA9IHRoaXMuYm91bmRzVmlld3BvcnQoKVxuXG4gICAgY29uc3QgeCA9IHZwb3J0LnggKiB0aGlzLm1pbmltYXBTY2FsZSgpXG4gICAgY29uc3QgeSA9IHZwb3J0LnkgKiB0aGlzLm1pbmltYXBTY2FsZSgpXG4gICAgY29uc3Qgc2NhbGUgPSB2cG9ydC56b29tICogdGhpcy5taW5pbWFwU2NhbGUoKVxuXG4gICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSAke3l9KSBzY2FsZSgke3NjYWxlfSlgXG4gIH0pXG5cbiAgcHJpdmF0ZSBtaW5pbWFwUG9zaXRpb24gPSBzaWduYWw8TWluaU1hcFBvc2l0aW9uPignYm90dG9tLXJpZ2h0JylcblxuICBwcml2YXRlIHNjYWxlT25Ib3ZlclNpZ25hbCA9IHNpZ25hbChmYWxzZSlcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgbW9kZWwgPSBuZXcgTWluaW1hcE1vZGVsKClcbiAgICBtb2RlbC50ZW1wbGF0ZS5zZXQodGhpcy5taW5pbWFwKVxuXG4gICAgdGhpcy5lbnRpdGllc1NlcnZpY2UubWluaW1hcC5zZXQobW9kZWwpXG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlXG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbWluaW1hcD5cbiAgPHN2ZzpyZWN0XG4gICAgW2F0dHIueF09XCJtaW5pbWFwUG9pbnQoKS54XCJcbiAgICBbYXR0ci55XT1cIm1pbmltYXBQb2ludCgpLnlcIlxuICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibWluaW1hcEhlaWdodCgpXCJcbiAgICBbYXR0ci5zdHJva2VdPVwic3Ryb2tlQ29sb3JcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgLz5cblxuICA8c3ZnOnN2Z1xuICAgIFthdHRyLnhdPVwibWluaW1hcFBvaW50KCkueFwiXG4gICAgW2F0dHIueV09XCJtaW5pbWFwUG9pbnQoKS55XCJcbiAgICBbYXR0ci53aWR0aF09XCJtaW5pbWFwV2lkdGgoKVwiXG4gICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgKG1vdXNlb3Zlcik9XCJob3ZlcmVkLnNldCh0cnVlKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZC5zZXQoZmFsc2UpXCJcbiAgPlxuICAgIDxzdmc6cmVjdFxuICAgICAgW2F0dHIud2lkdGhdPVwibWluaW1hcFdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgICBbYXR0ci5maWxsXT1cIm1hc2tDb2xvclwiXG4gICAgLz5cblxuICAgIDxzdmc6ZyBbYXR0ci50cmFuc2Zvcm1dPVwibWluaW1hcFRyYW5zZm9ybSgpXCI+XG4gICAgICA8c3ZnOnJlY3RcbiAgICAgICAgW2F0dHIuZmlsbF09XCJ2aWV3cG9ydENvbG9yKClcIlxuICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwidmlld3BvcnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cIm1pbmltYXBXaWR0aCgpXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cIm1pbmltYXBIZWlnaHQoKVwiXG4gICAgICAvPlxuXG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBlbnRpdGllc1NlcnZpY2Uubm9kZXMoKTsgdHJhY2tCeTogdHJhY2tOb2Rlc1wiXG4gICAgICA+XG4gICAgICAgIDxzdmc6Zm9yZWlnbk9iamVjdFxuICAgICAgICAgICpuZ0lmPVwibW9kZWwubm9kZS50eXBlID09PSAnZGVmYXVsdCcgfHwgbW9kZWwubm9kZS50eXBlID09PSAnaHRtbC10ZW1wbGF0ZScgfHwgbW9kZWwuaXNDb21wb25lbnRUeXBlXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiXG4gICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGVmYXVsdC1ub2RlXG4gICAgICAgICAgICBbc2VsZWN0ZWRdPVwibW9kZWwuc2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIm1vZGVsLnNpemUoKS53aWR0aFwiXG4gICAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJtb2RlbC5zaXplKCkuaGVpZ2h0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IFtvdXRlckhUTUxdPVwibW9kZWwudGV4dCgpXCI+PC9kaXY+XG4gICAgICAgICAgPC9kZWZhdWx0LW5vZGU+XG4gICAgICAgIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG5cbiAgICAgICAgPHN2ZzpyZWN0XG4gICAgICAgICAgKm5nSWY9XCJtb2RlbC5ub2RlLnR5cGUgPT09ICdkZWZhdWx0LWdyb3VwJyB8fCBtb2RlbC5ub2RlLnR5cGUgPT09ICd0ZW1wbGF0ZS1ncm91cCdcIlxuICAgICAgICAgIGNsYXNzPVwiZGVmYXVsdC1ncm91cC1ub2RlXCJcbiAgICAgICAgICByeD1cIjVcIlxuICAgICAgICAgIHJ5PVwiNVwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIlxuICAgICAgICAgIFtjbGFzcy5kZWZhdWx0LWdyb3VwLW5vZGVfc2VsZWN0ZWRdPVwibW9kZWwuc2VsZWN0ZWQoKVwiXG4gICAgICAgICAgW2F0dHIud2lkdGhdPVwibW9kZWwuc2l6ZSgpLndpZHRoXCJcbiAgICAgICAgICBbYXR0ci5oZWlnaHRdPVwibW9kZWwuc2l6ZSgpLmhlaWdodFwiXG4gICAgICAgICAgW3N0eWxlLnN0cm9rZV09XCJtb2RlbC5jb2xvcigpXCJcbiAgICAgICAgICBbc3R5bGUuZmlsbF09XCJtb2RlbC5jb2xvcigpXCJcbiAgICAgICAgLz5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9zdmc6Zz5cbiAgPC9zdmc6c3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==