@tetacom/svg-charts 1.4.21 → 1.4.22

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 (137) hide show
  1. package/chart/base/series-base.component.d.ts +1 -1
  2. package/chart/chart/chart.component.d.ts +1 -1
  3. package/chart/chart-container/annotation/annotation.component.d.ts +1 -1
  4. package/chart/chart-container/chart-container.component.d.ts +1 -1
  5. package/chart/chart-container/crosshair/crosshair.component.d.ts +1 -1
  6. package/chart/chart-container/gridlines/gridlines.component.d.ts +1 -1
  7. package/chart/chart-container/plotband/plot-band.component.d.ts +1 -1
  8. package/chart/chart-container/plotline/plotline.component.d.ts +1 -1
  9. package/chart/chart-container/series/area-series/area-series.component.d.ts +1 -1
  10. package/chart/chart-container/series/bar/bar-series.component.d.ts +1 -1
  11. package/chart/chart-container/series/block-area-series/block-area-series.component.d.ts +1 -1
  12. package/chart/chart-container/series/block-series/block-series.component.d.ts +1 -1
  13. package/chart/chart-container/series/line/line-series.component.d.ts +1 -1
  14. package/chart/chart-container/series/linear-series-base.d.ts +1 -1
  15. package/chart/chart-container/series/scatter-series/scatter-series.component.d.ts +1 -1
  16. package/chart/chart-container/series-host/series-host.component.d.ts +1 -1
  17. package/chart/chart-container/tooltip/tooltip.component.d.ts +1 -1
  18. package/chart/chart-container/x-axis/x-axis.component.d.ts +1 -1
  19. package/chart/chart-container/y-axis/y-axis.component.d.ts +1 -1
  20. package/chart/directives/brushable.directive.d.ts +1 -1
  21. package/chart/directives/draggable-point.directive.d.ts +1 -1
  22. package/chart/directives/zoomable.directive.d.ts +1 -1
  23. package/chart/legend/legend.component.d.ts +1 -1
  24. package/chart/model/i-broadcast-message.d.ts +2 -2
  25. package/chart/stories/bandseries/bandseries.component.d.ts +1 -1
  26. package/esm2022/chart/base/series-base.component.mjs +50 -0
  27. package/esm2022/chart/chart/chart.component.mjs +175 -0
  28. package/esm2022/chart/chart-container/annotation/annotation.component.mjs +108 -0
  29. package/esm2022/chart/chart-container/chart-container.component.mjs +194 -0
  30. package/esm2022/chart/chart-container/crosshair/crosshair.component.mjs +39 -0
  31. package/esm2022/chart/chart-container/gridlines/gridlines.component.mjs +45 -0
  32. package/esm2022/chart/chart-container/plotband/plot-band.component.mjs +174 -0
  33. package/esm2022/chart/chart-container/plotline/plotline.component.mjs +98 -0
  34. package/esm2022/chart/chart-container/series/area-series/area-series.component.mjs +74 -0
  35. package/esm2022/chart/chart-container/series/bar/bar-series.component.mjs +68 -0
  36. package/esm2022/chart/chart-container/series/block-area-series/block-area-series.component.mjs +69 -0
  37. package/esm2022/chart/chart-container/series/block-series/block-series.component.mjs +69 -0
  38. package/{esm2020 → esm2022}/chart/chart-container/series/line/line-series.component.mjs +37 -30
  39. package/esm2022/chart/chart-container/series/linear-series-base.mjs +210 -0
  40. package/esm2022/chart/chart-container/series/scatter-series/scatter-series.component.mjs +53 -0
  41. package/esm2022/chart/chart-container/series-host/series-host.component.mjs +50 -0
  42. package/{esm2020 → esm2022}/chart/chart-container/tooltip/tooltip.component.mjs +18 -5
  43. package/esm2022/chart/chart-container/x-axis/x-axis.component.mjs +54 -0
  44. package/esm2022/chart/chart-container/y-axis/y-axis.component.mjs +40 -0
  45. package/{esm2020 → esm2022}/chart/chart.module.mjs +36 -36
  46. package/esm2022/chart/core/axis/axis.mjs +135 -0
  47. package/esm2022/chart/core/axis/builders/axis-size-builder.mjs +31 -0
  48. package/esm2022/chart/core/axis/builders/extremes-builder.mjs +33 -0
  49. package/esm2022/chart/directives/brushable.directive.mjs +162 -0
  50. package/esm2022/chart/directives/draggable-point.directive.mjs +147 -0
  51. package/esm2022/chart/directives/zoomable.directive.mjs +263 -0
  52. package/esm2022/chart/legend/legend.component.mjs +38 -0
  53. package/{esm2020 → esm2022}/chart/model/chart-bounds.mjs +5 -5
  54. package/esm2022/chart/model/i-broadcast-message.mjs +27 -0
  55. package/esm2022/chart/model/plot-band.mjs +28 -0
  56. package/esm2022/chart/model/plot-line.mjs +21 -0
  57. package/esm2022/chart/service/broadcast.service.mjs +24 -0
  58. package/esm2022/chart/service/brush.service.mjs +22 -0
  59. package/esm2022/chart/service/chart.service.mjs +244 -0
  60. package/esm2022/chart/service/scale.service.mjs +206 -0
  61. package/esm2022/chart/service/zoom.service.mjs +85 -0
  62. package/esm2022/chart/stories/bandseries/bandseries.component.mjs +36 -0
  63. package/{fesm2020 → fesm2022}/tetacom-svg-charts.mjs +583 -337
  64. package/{fesm2020 → fesm2022}/tetacom-svg-charts.mjs.map +1 -1
  65. package/package.json +8 -14
  66. package/esm2020/chart/base/series-base.component.mjs +0 -42
  67. package/esm2020/chart/chart/chart.component.mjs +0 -172
  68. package/esm2020/chart/chart-container/annotation/annotation.component.mjs +0 -99
  69. package/esm2020/chart/chart-container/chart-container.component.mjs +0 -182
  70. package/esm2020/chart/chart-container/crosshair/crosshair.component.mjs +0 -34
  71. package/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +0 -37
  72. package/esm2020/chart/chart-container/plotband/plot-band.component.mjs +0 -163
  73. package/esm2020/chart/chart-container/plotline/plotline.component.mjs +0 -87
  74. package/esm2020/chart/chart-container/series/area-series/area-series.component.mjs +0 -67
  75. package/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +0 -59
  76. package/esm2020/chart/chart-container/series/block-area-series/block-area-series.component.mjs +0 -60
  77. package/esm2020/chart/chart-container/series/block-series/block-series.component.mjs +0 -60
  78. package/esm2020/chart/chart-container/series/linear-series-base.mjs +0 -198
  79. package/esm2020/chart/chart-container/series/scatter-series/scatter-series.component.mjs +0 -43
  80. package/esm2020/chart/chart-container/series-host/series-host.component.mjs +0 -46
  81. package/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +0 -48
  82. package/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +0 -36
  83. package/esm2020/chart/core/axis/axis.mjs +0 -128
  84. package/esm2020/chart/core/axis/builders/axis-size-builder.mjs +0 -33
  85. package/esm2020/chart/core/axis/builders/extremes-builder.mjs +0 -35
  86. package/esm2020/chart/directives/brushable.directive.mjs +0 -153
  87. package/esm2020/chart/directives/draggable-point.directive.mjs +0 -141
  88. package/esm2020/chart/directives/zoomable.directive.mjs +0 -254
  89. package/esm2020/chart/legend/legend.component.mjs +0 -36
  90. package/esm2020/chart/model/i-broadcast-message.mjs +0 -18
  91. package/esm2020/chart/model/plot-band.mjs +0 -17
  92. package/esm2020/chart/model/plot-line.mjs +0 -13
  93. package/esm2020/chart/service/broadcast.service.mjs +0 -23
  94. package/esm2020/chart/service/brush.service.mjs +0 -21
  95. package/esm2020/chart/service/chart.service.mjs +0 -229
  96. package/esm2020/chart/service/scale.service.mjs +0 -203
  97. package/esm2020/chart/service/zoom.service.mjs +0 -80
  98. package/esm2020/chart/stories/bandseries/bandseries.component.mjs +0 -29
  99. package/fesm2015/tetacom-svg-charts.mjs +0 -3095
  100. package/fesm2015/tetacom-svg-charts.mjs.map +0 -1
  101. /package/{esm2020 → esm2022}/chart/chart-container/series/public-api.mjs +0 -0
  102. /package/{esm2020 → esm2022}/chart/core/axis/builders/public-api.mjs +0 -0
  103. /package/{esm2020 → esm2022}/chart/core/utils/generate-ticks.mjs +0 -0
  104. /package/{esm2020 → esm2022}/chart/core/utils/get-text-width.mjs +0 -0
  105. /package/{esm2020 → esm2022}/chart/core/utils/public-api.mjs +0 -0
  106. /package/{esm2020 → esm2022}/chart/default/default-axis-config.mjs +0 -0
  107. /package/{esm2020 → esm2022}/chart/default/default-chart-config.mjs +0 -0
  108. /package/{esm2020 → esm2022}/chart/default/default-series-config.mjs +0 -0
  109. /package/{esm2020 → esm2022}/chart/default/defaultSeriesTypeMapping.mjs +0 -0
  110. /package/{esm2020 → esm2022}/chart/model/annotation.mjs +0 -0
  111. /package/{esm2020 → esm2022}/chart/model/axis-options.mjs +0 -0
  112. /package/{esm2020 → esm2022}/chart/model/base-point.mjs +0 -0
  113. /package/{esm2020 → esm2022}/chart/model/enum/axis-orientation.mjs +0 -0
  114. /package/{esm2020 → esm2022}/chart/model/enum/brush-type.mjs +0 -0
  115. /package/{esm2020 → esm2022}/chart/model/enum/clip-points-direction.mjs +0 -0
  116. /package/{esm2020 → esm2022}/chart/model/enum/drag-point-type.mjs +0 -0
  117. /package/{esm2020 → esm2022}/chart/model/enum/fill-type.mjs +0 -0
  118. /package/{esm2020 → esm2022}/chart/model/enum/public-api.mjs +0 -0
  119. /package/{esm2020 → esm2022}/chart/model/enum/scale-type.mjs +0 -0
  120. /package/{esm2020 → esm2022}/chart/model/enum/series-type.mjs +0 -0
  121. /package/{esm2020 → esm2022}/chart/model/enum/tooltip-tracking.mjs +0 -0
  122. /package/{esm2020 → esm2022}/chart/model/enum/zoom-behavior-type.mjs +0 -0
  123. /package/{esm2020 → esm2022}/chart/model/enum/zoom-type.mjs +0 -0
  124. /package/{esm2020 → esm2022}/chart/model/i-builder.mjs +0 -0
  125. /package/{esm2020 → esm2022}/chart/model/i-chart-config.mjs +0 -0
  126. /package/{esm2020 → esm2022}/chart/model/i-chart-event.mjs +0 -0
  127. /package/{esm2020 → esm2022}/chart/model/i-display-tooltip.mjs +0 -0
  128. /package/{esm2020 → esm2022}/chart/model/i-point-move.mjs +0 -0
  129. /package/{esm2020 → esm2022}/chart/model/i-scales-map.mjs +0 -0
  130. /package/{esm2020 → esm2022}/chart/model/marker-options.mjs +0 -0
  131. /package/{esm2020 → esm2022}/chart/model/public-api.mjs +0 -0
  132. /package/{esm2020 → esm2022}/chart/model/series.mjs +0 -0
  133. /package/{esm2020 → esm2022}/chart/model/svg-attributes.mjs +0 -0
  134. /package/{esm2020 → esm2022}/chart/model/tooltip-options.mjs +0 -0
  135. /package/{esm2020 → esm2022}/chart/service/public-api.mjs +0 -0
  136. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  137. /package/{esm2020 → esm2022}/tetacom-svg-charts.mjs +0 -0
@@ -1,33 +0,0 @@
1
- import { AxisOrientation } from '../../../model/enum/axis-orientation';
2
- import { maxIndex } from 'd3-array';
3
- import { getTextWidth } from '../../utils/public-api';
4
- import { ScaleType } from "../../../model/enum/scale-type";
5
- export class AxisSizeBuilder {
6
- constructor() {
7
- this.titlePadding = 11;
8
- this.basePadding = 16;
9
- this.backupRatio = 0.58;
10
- }
11
- build(settings) {
12
- let finalPadding = this.basePadding;
13
- if (settings.orientation === AxisOrientation.y) {
14
- const formatter = settings.options.tickFormat || settings.defaultFormatter();
15
- finalPadding += settings.options.title ? this.titlePadding : 0;
16
- const scale = settings.defaultScale()();
17
- scale.domain(settings.extremes);
18
- if (settings.options.scaleType.type === ScaleType.band) {
19
- scale.ticks = (ticks) => {
20
- return scale.domain();
21
- };
22
- }
23
- const ticks = scale.ticks(20);
24
- const maxElementLengthIndex = maxIndex(ticks, (_) => formatter(_).length);
25
- finalPadding += getTextWidth(formatter(ticks[maxElementLengthIndex]), this.backupRatio);
26
- }
27
- if (settings.orientation === AxisOrientation.x) {
28
- finalPadding += finalPadding + 20;
29
- }
30
- return finalPadding;
31
- }
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpcy1zaXplLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY29yZS9heGlzL2J1aWxkZXJzL2F4aXMtc2l6ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFekQsTUFBTSxPQUFPLGVBQWU7SUFBNUI7UUFDVSxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUNsQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixnQkFBVyxHQUFHLElBQUksQ0FBQztJQXNDN0IsQ0FBQztJQXBDQyxLQUFLLENBQUMsUUFBYztRQUNsQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBRXBDLElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTdFLFlBQVksSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9ELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBRy9CLElBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JELEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsRUFBRTtvQkFDL0IsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7Z0JBQ3ZCLENBQUMsQ0FBQTthQUNGO1lBQ0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU5QixNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FDcEMsS0FBSyxFQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMzQixDQUFDO1lBRUYsWUFBWSxJQUFJLFlBQVksQ0FDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7U0FDSDtRQUVELElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsQ0FBQyxFQUFFO1lBQzlDLFlBQVksSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ25DO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9heGlzJztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuaW1wb3J0IHttYXhJbmRleH0gZnJvbSAnZDMtYXJyYXknO1xuaW1wb3J0IHtnZXRUZXh0V2lkdGh9IGZyb20gJy4uLy4uL3V0aWxzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHtJQnVpbGRlcn0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvaS1idWlsZGVyJztcbmltcG9ydCB7U2NhbGVUeXBlfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWwvZW51bS9zY2FsZS10eXBlXCI7XG5cbmV4cG9ydCBjbGFzcyBBeGlzU2l6ZUJ1aWxkZXIgaW1wbGVtZW50cyBJQnVpbGRlcjxBeGlzLCBudW1iZXI+IHtcbiAgcHJpdmF0ZSB0aXRsZVBhZGRpbmcgPSAxMTtcbiAgcHJpdmF0ZSBiYXNlUGFkZGluZyA9IDE2O1xuICBwcml2YXRlIGJhY2t1cFJhdGlvID0gMC41ODtcblxuICBidWlsZChzZXR0aW5nczogQXhpcyk6IG51bWJlciB7XG4gICAgbGV0IGZpbmFsUGFkZGluZyA9IHRoaXMuYmFzZVBhZGRpbmc7XG5cbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24gPT09IEF4aXNPcmllbnRhdGlvbi55KSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZXR0aW5ncy5vcHRpb25zLnRpY2tGb3JtYXQgfHwgc2V0dGluZ3MuZGVmYXVsdEZvcm1hdHRlcigpO1xuXG4gICAgICBmaW5hbFBhZGRpbmcgKz0gc2V0dGluZ3Mub3B0aW9ucy50aXRsZSA/IHRoaXMudGl0bGVQYWRkaW5nIDogMDtcblxuICAgICAgY29uc3Qgc2NhbGUgPSBzZXR0aW5ncy5kZWZhdWx0U2NhbGUoKSgpO1xuICAgICAgc2NhbGUuZG9tYWluKHNldHRpbmdzLmV4dHJlbWVzKVxuXG5cbiAgICAgIGlmKHNldHRpbmdzLm9wdGlvbnMuc2NhbGVUeXBlLnR5cGUgPT09IFNjYWxlVHlwZS5iYW5kKSB7XG4gICAgICAgIHNjYWxlLnRpY2tzID0gKHRpY2tzPzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNjYWxlLmRvbWFpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHRpY2tzID0gc2NhbGUudGlja3MoMjApO1xuXG4gICAgICBjb25zdCBtYXhFbGVtZW50TGVuZ3RoSW5kZXggPSBtYXhJbmRleChcbiAgICAgICAgdGlja3MsXG4gICAgICAgIChfKSA9PiBmb3JtYXR0ZXIoXykubGVuZ3RoXG4gICAgICApO1xuXG4gICAgICBmaW5hbFBhZGRpbmcgKz0gZ2V0VGV4dFdpZHRoKFxuICAgICAgICBmb3JtYXR0ZXIodGlja3NbbWF4RWxlbWVudExlbmd0aEluZGV4XSksXG4gICAgICAgIHRoaXMuYmFja3VwUmF0aW9cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uID09PSBBeGlzT3JpZW50YXRpb24ueCkge1xuICAgICAgZmluYWxQYWRkaW5nICs9IGZpbmFsUGFkZGluZyArIDIwO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbFBhZGRpbmc7XG4gIH1cbn1cbiJdfQ==
@@ -1,35 +0,0 @@
1
- import { AxisOrientation } from '../../../model/enum/axis-orientation';
2
- import * as d3 from 'd3';
3
- import { ScaleType } from "../../../model/enum/scale-type";
4
- export class ExtremesBuilder {
5
- constructor() {
6
- this.extentAccessorMap = new Map()
7
- .set(AxisOrientation.x, (_) => _.x)
8
- .set(AxisOrientation.y, (_) => _.y);
9
- this.extremes = [0, 0];
10
- }
11
- build(settings) {
12
- const options = settings.options;
13
- const hasMin = options?.min != null;
14
- const hasMax = options?.max != null;
15
- if (!hasMin || !hasMax) {
16
- const linkedSeries = settings.linkedSeries();
17
- const data = linkedSeries.reduce((acc, current) => {
18
- return acc.concat(current.data);
19
- }, []);
20
- const accessor = this.extentAccessorMap.get(settings.orientation);
21
- this.extremes = data.length > 1 ? d3.extent(data, accessor) : [0, 0];
22
- if (settings.options.scaleType.type === ScaleType.band) {
23
- this.extremes = data.map(accessor);
24
- }
25
- }
26
- if (hasMin) {
27
- this.extremes[0] = options?.min;
28
- }
29
- if (hasMax) {
30
- this.extremes[1] = options?.max;
31
- }
32
- return this.extremes;
33
- }
34
- }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmVtZXMtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jaGFydC9jb3JlL2F4aXMvYnVpbGRlcnMvZXh0cmVtZXMtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBQ1Usc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQ0Y7YUFDOUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5QixhQUFRLEdBQXdCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBZ0NqRCxDQUFDO0lBOUJDLEtBQUssQ0FBQyxRQUFjO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFFakMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUM7UUFFcEMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN0QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQWdCLEVBQUUsT0FBTyxFQUFFLEVBQUU7Z0JBQzdELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXJFLElBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTthQUNuQztTQUVGO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUM7U0FDakM7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQztTQUNqQztRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lCdWlsZGVyfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9pLWJ1aWxkZXInO1xuaW1wb3J0IHtBeGlzfSBmcm9tICcuLi9heGlzJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7QXhpc09yaWVudGF0aW9ufSBmcm9tICcuLi8uLi8uLi9tb2RlbC9lbnVtL2F4aXMtb3JpZW50YXRpb24nO1xuXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge1NjYWxlVHlwZX0gZnJvbSBcIi4uLy4uLy4uL21vZGVsL2VudW0vc2NhbGUtdHlwZVwiO1xuXG5leHBvcnQgY2xhc3MgRXh0cmVtZXNCdWlsZGVyIGltcGxlbWVudHMgSUJ1aWxkZXI8QXhpcywgbnVtYmVyW10gfCBzdHJpbmdbXT4ge1xuICBwcml2YXRlIGV4dGVudEFjY2Vzc29yTWFwID0gbmV3IE1hcDxBeGlzT3JpZW50YXRpb24sXG4gICAgKHBvaW50OiBCYXNlUG9pbnQpID0+IG51bWJlcj4oKVxuICAgIC5zZXQoQXhpc09yaWVudGF0aW9uLngsIChfKSA9PiBfLngpXG4gICAgLnNldChBeGlzT3JpZW50YXRpb24ueSwgKF8pID0+IF8ueSk7XG5cbiAgcHJpdmF0ZSBleHRyZW1lczogbnVtYmVyW10gfCBzdHJpbmdbXSA9IFswLCAwXTtcblxuICBidWlsZChzZXR0aW5nczogQXhpcyk6IG51bWJlcltdIHwgc3RyaW5nW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBzZXR0aW5ncy5vcHRpb25zO1xuXG4gICAgY29uc3QgaGFzTWluID0gb3B0aW9ucz8ubWluICE9IG51bGw7XG4gICAgY29uc3QgaGFzTWF4ID0gb3B0aW9ucz8ubWF4ICE9IG51bGw7XG5cbiAgICBpZiAoIWhhc01pbiB8fCAhaGFzTWF4KSB7XG4gICAgICBjb25zdCBsaW5rZWRTZXJpZXMgPSBzZXR0aW5ncy5saW5rZWRTZXJpZXMoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBsaW5rZWRTZXJpZXMucmVkdWNlKChhY2M6IEJhc2VQb2ludFtdLCBjdXJyZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KGN1cnJlbnQuZGF0YSk7XG4gICAgICB9LCBbXSk7XG4gICAgICBjb25zdCBhY2Nlc3NvciA9IHRoaXMuZXh0ZW50QWNjZXNzb3JNYXAuZ2V0KHNldHRpbmdzLm9yaWVudGF0aW9uKTtcbiAgICAgIHRoaXMuZXh0cmVtZXMgPSBkYXRhLmxlbmd0aCA+IDEgPyBkMy5leHRlbnQoZGF0YSwgYWNjZXNzb3IpIDogWzAsIDBdO1xuXG4gICAgICBpZihzZXR0aW5ncy5vcHRpb25zLnNjYWxlVHlwZS50eXBlID09PSBTY2FsZVR5cGUuYmFuZCkge1xuICAgICAgICB0aGlzLmV4dHJlbWVzID0gZGF0YS5tYXAoYWNjZXNzb3IpXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAoaGFzTWluKSB7XG4gICAgICB0aGlzLmV4dHJlbWVzWzBdID0gb3B0aW9ucz8ubWluO1xuICAgIH1cblxuICAgIGlmIChoYXNNYXgpIHtcbiAgICAgIHRoaXMuZXh0cmVtZXNbMV0gPSBvcHRpb25zPy5tYXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZXh0cmVtZXM7XG4gIH1cbn1cbiJdfQ==
@@ -1,153 +0,0 @@
1
- import { Directive, Input, } from '@angular/core';
2
- import { BrushType } from '../model/enum/brush-type';
3
- import * as d3 from 'd3';
4
- import { BrushMessage } from '../model/i-broadcast-message';
5
- import { filter, takeWhile } from 'rxjs';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../service/brush.service";
8
- import * as i2 from "../service/chart.service";
9
- export class BrushableDirective {
10
- constructor(brushService, chartService, element, zone) {
11
- this.brushService = brushService;
12
- this.chartService = chartService;
13
- this.element = element;
14
- this.zone = zone;
15
- this.brushMap = new Map()
16
- .set(BrushType.x, d3.brushX())
17
- .set(BrushType.y, d3.brushY());
18
- this._alive = true;
19
- this._container = d3.select(this.element.nativeElement);
20
- }
21
- ngOnInit() {
22
- this.brushService.brushDomain.pipe(takeWhile(() => this._alive), filter((brush) => brush.chartId !== this.config.id)).subscribe((brush) => {
23
- this._container.call(this.brush.move, [
24
- Math.floor(brush.selection[0]),
25
- Math.floor(brush.selection[1]),
26
- ].map(this.axis.scale));
27
- });
28
- }
29
- ngOnDestroy() {
30
- this._alive = false;
31
- }
32
- ngAfterViewInit() {
33
- if (this.config?.brush?.enable) {
34
- const brushMessage = new BrushMessage({
35
- chartId: this.config.id,
36
- selection: [this.config?.brush?.from, this.config?.brush?.to],
37
- mode: 'init'
38
- });
39
- this.brushService.setBrush(brushMessage);
40
- }
41
- }
42
- ngOnChanges(changes) {
43
- if (changes.hasOwnProperty('config')) {
44
- this.clearPreviousSelection();
45
- }
46
- if (this.config?.brush?.enable) {
47
- this.applyBrush(this.config, this.axis.scale);
48
- }
49
- }
50
- applyBrush(config, brushScale) {
51
- this.brush?.on('start brush end', null);
52
- if (config.brush?.enable) {
53
- this.brush = this.brushMap.get(config?.brush?.type ?? BrushType.x);
54
- this.brush.on('start brush end', (_) => {
55
- if (_.sourceEvent) {
56
- if (!_.selection)
57
- return;
58
- const [from, to] = _.selection;
59
- if (to - from === 0) {
60
- const selection = this.selection?.map(brushScale) ??
61
- [config.brush?.from, config.brush?.to].map(brushScale);
62
- const halfBrushHeight = (selection[1] - selection[0]) / 2;
63
- const invertedSelection = [
64
- from - halfBrushHeight,
65
- to + halfBrushHeight,
66
- ].map(brushScale.invert);
67
- if (invertedSelection[1] - invertedSelection[0] >
68
- config.brush?.max) {
69
- this._container.call(this.brush.move, [
70
- Math.floor(invertedSelection[0]),
71
- Math.floor(invertedSelection[0] + config.brush?.max),
72
- ].map(brushScale));
73
- return;
74
- }
75
- if (invertedSelection[1] - invertedSelection[0] <
76
- config.brush?.min) {
77
- this._container.call(this.brush.move, [
78
- Math.floor(invertedSelection[0]),
79
- Math.ceil(invertedSelection[0] + config.brush?.min),
80
- ].map(brushScale));
81
- return;
82
- }
83
- this._container.call(this.brush.move, [
84
- from - halfBrushHeight,
85
- to + halfBrushHeight,
86
- ]);
87
- return;
88
- }
89
- if (brushScale.invert(to) - brushScale.invert(from) >
90
- config.brush?.max) {
91
- this._container.call(this.brush.move, this.selection
92
- ? [
93
- this.selection[0],
94
- this.selection[0] + config.brush?.max,
95
- ].map(brushScale)
96
- : [config.brush?.from, config.brush?.to].map(brushScale));
97
- return;
98
- }
99
- if (brushScale.invert(to) - brushScale.invert(from) <
100
- config.brush?.min) {
101
- this._container.call(this.brush.move, this.selection
102
- ? [
103
- this.selection[0],
104
- this.selection[0] + config.brush?.min,
105
- ].map(brushScale)
106
- : [config.brush?.from, config.brush?.to].map(brushScale));
107
- return;
108
- }
109
- if (_.sourceEvent instanceof MouseEvent) {
110
- this.selection = _.selection.map(brushScale.invert);
111
- }
112
- const brushMessage = new BrushMessage({
113
- chartId: this.config.id,
114
- selection: [brushScale.invert(from), brushScale.invert(to)],
115
- mode: _.mode
116
- });
117
- this.brushService.setBrush(brushMessage);
118
- }
119
- });
120
- this.zone.runOutsideAngular(() => {
121
- setTimeout(() => {
122
- this._container.call(this.brush);
123
- let domain = brushScale.domain();
124
- if (config?.brush?.from) {
125
- domain[0] = config.brush.from;
126
- }
127
- if (config?.brush?.to) {
128
- domain[1] = config.brush.to;
129
- }
130
- this._container.call(this.brush.move, this.selection
131
- ? this.selection.map(brushScale)
132
- : domain.map(brushScale), {});
133
- }, 0);
134
- });
135
- }
136
- }
137
- clearPreviousSelection() {
138
- this.selection = null;
139
- }
140
- }
141
- BrushableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: BrushableDirective, deps: [{ token: i1.BrushService }, { token: i2.ChartService }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
142
- BrushableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: BrushableDirective, selector: "[tetaBrushable]", inputs: { config: "config", axis: "axis" }, usesOnChanges: true, ngImport: i0 });
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: BrushableDirective, decorators: [{
144
- type: Directive,
145
- args: [{
146
- selector: '[tetaBrushable]',
147
- }]
148
- }], ctorParameters: function () { return [{ type: i1.BrushService }, { type: i2.ChartService }, { type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { config: [{
149
- type: Input
150
- }], axis: [{
151
- type: Input
152
- }] } });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ1c2hhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9kaXJlY3RpdmVzL2JydXNoYWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7OztBQUt2QyxNQUFNLE9BQU8sa0JBQWtCO0lBWTdCLFlBQ1UsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsT0FBbUIsRUFDbkIsSUFBWTtRQUhaLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQVZkLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0M7YUFDM0QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQzdCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFTcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQzVCLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUNwRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFDZjtnQkFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUN2QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUM7Z0JBQ3BDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZCLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQzdELElBQUksRUFBRSxNQUFNO2FBQ2IsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUMvQjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQzlCLElBQUksQ0FBQyxVQUFVLENBQ2IsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDaEIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFvQixFQUFFLFVBQWU7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQXVCLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO29CQUNqQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7d0JBQUUsT0FBTztvQkFDekIsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBcUIsQ0FBQztvQkFDM0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRTt3QkFDbkIsTUFBTSxTQUFTLEdBQ2IsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDOzRCQUMvQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNLGVBQWUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzFELE1BQU0saUJBQWlCLEdBQWE7NEJBQ2xDLElBQUksR0FBRyxlQUFlOzRCQUN0QixFQUFFLEdBQUcsZUFBZTt5QkFDckIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUV6QixJQUNFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQzs0QkFDM0MsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQ2pCOzRCQUNBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFDZjtnQ0FDRSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDOzZCQUNyRCxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDbEIsQ0FBQzs0QkFDRixPQUFPO3lCQUNSO3dCQUVELElBQ0UsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOzRCQUMzQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFDakI7NEJBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUNmO2dDQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7NkJBQ3BELENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUNsQixDQUFDOzRCQUNGLE9BQU87eUJBQ1I7d0JBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7NEJBQ3BDLElBQUksR0FBRyxlQUFlOzRCQUN0QixFQUFFLEdBQUcsZUFBZTt5QkFDckIsQ0FBQyxDQUFDO3dCQUNILE9BQU87cUJBQ1I7b0JBRUQsSUFDRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUMvQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFDakI7d0JBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUNmLElBQUksQ0FBQyxTQUFTOzRCQUNaLENBQUMsQ0FBQztnQ0FDQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQ0FDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUc7NkJBQ3RDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQzs0QkFDakIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQzNELENBQUM7d0JBQ0YsT0FBTztxQkFDUjtvQkFFRCxJQUNFLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQy9DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUNqQjt3QkFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ2YsSUFBSSxDQUFDLFNBQVM7NEJBQ1osQ0FBQyxDQUFDO2dDQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRzs2QkFDdEMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDOzRCQUNqQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FDM0QsQ0FBQzt3QkFDRixPQUFPO3FCQUNSO29CQUVELElBQUksQ0FBQyxDQUFDLFdBQVcsWUFBWSxVQUFVLEVBQUU7d0JBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNyRDtvQkFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQzt3QkFDcEMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDdkIsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMzRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7cUJBQ2IsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMxQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUVqQyxJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBRWpDLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7d0JBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDL0I7b0JBRUQsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTt3QkFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3FCQUM3QjtvQkFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQ2YsSUFBSSxDQUFDLFNBQVM7d0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQzt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQzFCLEVBQUUsQ0FDSCxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNSLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7OytHQTlMVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCOzRLQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7QnJ1c2hTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL2JydXNoLnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge0F4aXN9IGZyb20gJy4uL2NvcmUvYXhpcy9heGlzJztcbmltcG9ydCB7QnJ1c2hUeXBlfSBmcm9tICcuLi9tb2RlbC9lbnVtL2JydXNoLXR5cGUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0IHtCcnVzaE1lc3NhZ2V9IGZyb20gJy4uL21vZGVsL2ktYnJvYWRjYXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VXaGlsZX0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0ZXRhQnJ1c2hhYmxlXScsXG59KVxuZXhwb3J0IGNsYXNzIEJydXNoYWJsZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjb25maWc6IElDaGFydENvbmZpZztcbiAgQElucHV0KCkgYXhpczogQXhpcztcblxuICBwcml2YXRlIHNlbGVjdGlvbjogbnVtYmVyW107XG4gIHByaXZhdGUgYnJ1c2g6IGQzLkJydXNoQmVoYXZpb3I8YW55PjtcbiAgcHJpdmF0ZSBicnVzaE1hcCA9IG5ldyBNYXA8QnJ1c2hUeXBlLCBkMy5CcnVzaEJlaGF2aW9yPGFueT4+KClcbiAgICAuc2V0KEJydXNoVHlwZS54LCBkMy5icnVzaFgoKSlcbiAgICAuc2V0KEJydXNoVHlwZS55LCBkMy5icnVzaFkoKSk7XG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfY29udGFpbmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYnJ1c2hTZXJ2aWNlOiBCcnVzaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5fY29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuYnJ1c2hTZXJ2aWNlLmJydXNoRG9tYWluLnBpcGUoXG4gICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgZmlsdGVyKChicnVzaCkgPT4gYnJ1c2guY2hhcnRJZCAhPT0gdGhpcy5jb25maWcuaWQpXG4gICAgKS5zdWJzY3JpYmUoKGJydXNoKSA9PiB7XG4gICAgICB0aGlzLl9jb250YWluZXIuY2FsbChcbiAgICAgICAgdGhpcy5icnVzaC5tb3ZlLFxuICAgICAgICBbXG4gICAgICAgICAgTWF0aC5mbG9vcihicnVzaC5zZWxlY3Rpb25bMF0pLFxuICAgICAgICAgIE1hdGguZmxvb3IoYnJ1c2guc2VsZWN0aW9uWzFdKSxcbiAgICAgICAgXS5tYXAodGhpcy5heGlzLnNjYWxlKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYodGhpcy5jb25maWc/LmJydXNoPy5lbmFibGUpIHtcbiAgICAgIGNvbnN0IGJydXNoTWVzc2FnZSA9IG5ldyBCcnVzaE1lc3NhZ2Uoe1xuICAgICAgICBjaGFydElkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgICAgc2VsZWN0aW9uOiBbdGhpcy5jb25maWc/LmJydXNoPy5mcm9tLCB0aGlzLmNvbmZpZz8uYnJ1c2g/LnRvXSxcbiAgICAgICAgbW9kZTogJ2luaXQnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYnJ1c2hTZXJ2aWNlLnNldEJydXNoKGJydXNoTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KCdjb25maWcnKSkge1xuICAgICAgdGhpcy5jbGVhclByZXZpb3VzU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5icnVzaD8uZW5hYmxlKSB7XG4gICAgICB0aGlzLmFwcGx5QnJ1c2goXG4gICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICB0aGlzLmF4aXMuc2NhbGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlCcnVzaChjb25maWc6IElDaGFydENvbmZpZywgYnJ1c2hTY2FsZTogYW55KSB7XG4gICAgdGhpcy5icnVzaD8ub24oJ3N0YXJ0IGJydXNoIGVuZCcsIG51bGwpO1xuICAgIGlmIChjb25maWcuYnJ1c2g/LmVuYWJsZSkge1xuICAgICAgdGhpcy5icnVzaCA9IHRoaXMuYnJ1c2hNYXAuZ2V0KGNvbmZpZz8uYnJ1c2g/LnR5cGUgPz8gQnJ1c2hUeXBlLngpO1xuICAgICAgdGhpcy5icnVzaC5vbignc3RhcnQgYnJ1c2ggZW5kJywgKF86IGQzLkQzQnJ1c2hFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgIGlmIChfLnNvdXJjZUV2ZW50KSB7XG4gICAgICAgICAgaWYgKCFfLnNlbGVjdGlvbikgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IFtmcm9tLCB0b10gPSBfLnNlbGVjdGlvbiBhcyBudW1iZXJbXTtcbiAgICAgICAgICBpZiAodG8gLSBmcm9tID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb246IG51bWJlcltdID1cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24/Lm1hcChicnVzaFNjYWxlKSA/P1xuICAgICAgICAgICAgICBbY29uZmlnLmJydXNoPy5mcm9tLCBjb25maWcuYnJ1c2g/LnRvXS5tYXAoYnJ1c2hTY2FsZSk7XG4gICAgICAgICAgICBjb25zdCBoYWxmQnJ1c2hIZWlnaHQgPSAoc2VsZWN0aW9uWzFdIC0gc2VsZWN0aW9uWzBdKSAvIDI7XG4gICAgICAgICAgICBjb25zdCBpbnZlcnRlZFNlbGVjdGlvbjogbnVtYmVyW10gPSBbXG4gICAgICAgICAgICAgIGZyb20gLSBoYWxmQnJ1c2hIZWlnaHQsXG4gICAgICAgICAgICAgIHRvICsgaGFsZkJydXNoSGVpZ2h0LFxuICAgICAgICAgICAgXS5tYXAoYnJ1c2hTY2FsZS5pbnZlcnQpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGludmVydGVkU2VsZWN0aW9uWzFdIC0gaW52ZXJ0ZWRTZWxlY3Rpb25bMF0gPlxuICAgICAgICAgICAgICBjb25maWcuYnJ1c2g/Lm1heFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKFxuICAgICAgICAgICAgICAgIHRoaXMuYnJ1c2gubW92ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGludmVydGVkU2VsZWN0aW9uWzBdKSxcbiAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoaW52ZXJ0ZWRTZWxlY3Rpb25bMF0gKyBjb25maWcuYnJ1c2g/Lm1heCksXG4gICAgICAgICAgICAgICAgXS5tYXAoYnJ1c2hTY2FsZSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGludmVydGVkU2VsZWN0aW9uWzFdIC0gaW52ZXJ0ZWRTZWxlY3Rpb25bMF0gPFxuICAgICAgICAgICAgICBjb25maWcuYnJ1c2g/Lm1pblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKFxuICAgICAgICAgICAgICAgIHRoaXMuYnJ1c2gubW92ZSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGludmVydGVkU2VsZWN0aW9uWzBdKSxcbiAgICAgICAgICAgICAgICAgIE1hdGguY2VpbChpbnZlcnRlZFNlbGVjdGlvblswXSArIGNvbmZpZy5icnVzaD8ubWluKSxcbiAgICAgICAgICAgICAgICBdLm1hcChicnVzaFNjYWxlKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKHRoaXMuYnJ1c2gubW92ZSwgW1xuICAgICAgICAgICAgICBmcm9tIC0gaGFsZkJydXNoSGVpZ2h0LFxuICAgICAgICAgICAgICB0byArIGhhbGZCcnVzaEhlaWdodCxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGJydXNoU2NhbGUuaW52ZXJ0KHRvKSAtIGJydXNoU2NhbGUuaW52ZXJ0KGZyb20pID5cbiAgICAgICAgICAgIGNvbmZpZy5icnVzaD8ubWF4XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2FsbChcbiAgICAgICAgICAgICAgdGhpcy5icnVzaC5tb3ZlLFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25bMF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblswXSArIGNvbmZpZy5icnVzaD8ubWF4LFxuICAgICAgICAgICAgICAgIF0ubWFwKGJydXNoU2NhbGUpXG4gICAgICAgICAgICAgICAgOiBbY29uZmlnLmJydXNoPy5mcm9tLCBjb25maWcuYnJ1c2g/LnRvXS5tYXAoYnJ1c2hTY2FsZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgYnJ1c2hTY2FsZS5pbnZlcnQodG8pIC0gYnJ1c2hTY2FsZS5pbnZlcnQoZnJvbSkgPFxuICAgICAgICAgICAgY29uZmlnLmJydXNoPy5taW5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jYWxsKFxuICAgICAgICAgICAgICB0aGlzLmJydXNoLm1vdmUsXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblswXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uWzBdICsgY29uZmlnLmJydXNoPy5taW4sXG4gICAgICAgICAgICAgICAgXS5tYXAoYnJ1c2hTY2FsZSlcbiAgICAgICAgICAgICAgICA6IFtjb25maWcuYnJ1c2g/LmZyb20sIGNvbmZpZy5icnVzaD8udG9dLm1hcChicnVzaFNjYWxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXy5zb3VyY2VFdmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gXy5zZWxlY3Rpb24ubWFwKGJydXNoU2NhbGUuaW52ZXJ0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBicnVzaE1lc3NhZ2UgPSBuZXcgQnJ1c2hNZXNzYWdlKHtcbiAgICAgICAgICAgIGNoYXJ0SWQ6IHRoaXMuY29uZmlnLmlkLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBbYnJ1c2hTY2FsZS5pbnZlcnQoZnJvbSksIGJydXNoU2NhbGUuaW52ZXJ0KHRvKV0sXG4gICAgICAgICAgICBtb2RlOiBfLm1vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJydXNoU2VydmljZS5zZXRCcnVzaChicnVzaE1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNhbGwodGhpcy5icnVzaCk7XG5cbiAgICAgICAgICBsZXQgZG9tYWluID0gYnJ1c2hTY2FsZS5kb21haW4oKTtcblxuICAgICAgICAgIGlmIChjb25maWc/LmJydXNoPy5mcm9tKSB7XG4gICAgICAgICAgICBkb21haW5bMF0gPSBjb25maWcuYnJ1c2guZnJvbTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29uZmlnPy5icnVzaD8udG8pIHtcbiAgICAgICAgICAgIGRvbWFpblsxXSA9IGNvbmZpZy5icnVzaC50bztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMuYnJ1c2gubW92ZSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICAgID8gdGhpcy5zZWxlY3Rpb24ubWFwKGJydXNoU2NhbGUpXG4gICAgICAgICAgICAgIDogZG9tYWluLm1hcChicnVzaFNjYWxlKSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjbGVhclByZXZpb3VzU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,141 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
- import { DragPointType } from '../model/enum/drag-point-type';
3
- import * as i0 from "@angular/core";
4
- export class DraggablePointDirective {
5
- constructor(_elementRef) {
6
- this._elementRef = _elementRef;
7
- this.moveStart = new EventEmitter();
8
- this.moveProcess = new EventEmitter();
9
- this.moveEnd = new EventEmitter();
10
- }
11
- mouseDown(event) {
12
- if (!this.tetaDraggablePoint) {
13
- return;
14
- }
15
- event.stopPropagation();
16
- event.preventDefault();
17
- this.startPosition = {
18
- x: event.x,
19
- y: event.y
20
- };
21
- this.moveStart.emit(this.startPosition);
22
- }
23
- mouseUp(event) {
24
- if (this.startPosition !== null && this.startPosition !== undefined) {
25
- let deltaX = event.x - this.startPosition.x;
26
- let deltaY = event.y - this.startPosition.y;
27
- if (this.dragDirection === DragPointType.x) {
28
- deltaY = 0;
29
- }
30
- if (this.dragDirection === DragPointType.y) {
31
- deltaX = 0;
32
- }
33
- if (this.allowDrag && !this.allowDrag({
34
- x: event.x,
35
- y: event.y,
36
- deltaX,
37
- deltaY
38
- })) {
39
- this.startPosition = null;
40
- return;
41
- }
42
- if (this.transformCache) {
43
- this.transformCache.x = this.transformCache.x + deltaX;
44
- this.transformCache.y = this.transformCache.y + deltaY;
45
- }
46
- else {
47
- this.transformCache = {
48
- x: deltaX,
49
- y: deltaY
50
- };
51
- }
52
- this.moveEnd.emit({
53
- x: event.x,
54
- y: event.y,
55
- deltaX,
56
- deltaY
57
- });
58
- }
59
- this.startPosition = null;
60
- }
61
- mouseMove(event) {
62
- if (this.startPosition) {
63
- let deltaX = event.x - this.startPosition.x;
64
- let deltaY = event.y - this.startPosition.y;
65
- if (this.transformCache) {
66
- deltaX = this.transformCache.x + deltaX;
67
- deltaY = this.transformCache.y + deltaY;
68
- }
69
- if (this.allowDrag && !this.allowDrag({
70
- x: event.x,
71
- y: event.y,
72
- deltaX,
73
- deltaY
74
- })) {
75
- return;
76
- }
77
- if (this.dragDirection === DragPointType.x) {
78
- deltaY = 0;
79
- }
80
- if (this.dragDirection === DragPointType.y) {
81
- deltaX = 0;
82
- }
83
- this.setTransform(deltaX, deltaY);
84
- event.stopPropagation();
85
- event.preventDefault();
86
- this.moveProcess.emit({
87
- x: event.x,
88
- y: event.y,
89
- deltaX,
90
- deltaY
91
- });
92
- }
93
- }
94
- setTransform(x, y) {
95
- this._elementRef.nativeElement.style.transform = `translate(${x}px, ${y}px)`;
96
- }
97
- resetTransform() {
98
- this.setTransform(0, 0);
99
- this.transformCache = null;
100
- }
101
- }
102
- DraggablePointDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DraggablePointDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
103
- DraggablePointDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.2", type: DraggablePointDirective, selector: "[tetaDraggablePoint]", inputs: { tetaDraggablePoint: "tetaDraggablePoint", dragDirection: "dragDirection", allowDrag: "allowDrag" }, outputs: { moveStart: "moveStart", moveProcess: "moveProcess", moveEnd: "moveEnd" }, host: { listeners: { "mousedown": "mouseDown($event)", "touchstart": "mouseDown($event)", "window:mouseup": "mouseUp($event)", "window:touchend": "mouseUp($event)", "window:mousemove": "mouseMove($event)", "window:touchmove": "mouseMove($event)" } }, exportAs: ["tetaDraggablePoint"], ngImport: i0 });
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: DraggablePointDirective, decorators: [{
105
- type: Directive,
106
- args: [{
107
- selector: '[tetaDraggablePoint]',
108
- exportAs: 'tetaDraggablePoint'
109
- }]
110
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { tetaDraggablePoint: [{
111
- type: Input
112
- }], dragDirection: [{
113
- type: Input
114
- }], allowDrag: [{
115
- type: Input
116
- }], moveStart: [{
117
- type: Output
118
- }], moveProcess: [{
119
- type: Output
120
- }], moveEnd: [{
121
- type: Output
122
- }], mouseDown: [{
123
- type: HostListener,
124
- args: ['mousedown', ['$event']]
125
- }, {
126
- type: HostListener,
127
- args: ['touchstart', ['$event']]
128
- }], mouseUp: [{
129
- type: HostListener,
130
- args: ['window:mouseup', ['$event']]
131
- }, {
132
- type: HostListener,
133
- args: ['window:touchend', ['$event']]
134
- }], mouseMove: [{
135
- type: HostListener,
136
- args: ['window:mousemove', ['$event']]
137
- }, {
138
- type: HostListener,
139
- args: ['window:touchmove', ['$event']]
140
- }] } });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXBvaW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9kaXJlY3RpdmVzL2RyYWdnYWJsZS1wb2ludC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQU01RCxNQUFNLE9BQU8sdUJBQXVCO0lBb0JsQyxZQUFvQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUdqQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBR2xDLENBQUM7UUFFSyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUtwQyxDQUFDO1FBRUssWUFBTyxHQUFHLElBQUksWUFBWSxFQUtoQyxDQUFDO0lBbkJMLENBQUM7SUF1QkQsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsT0FBTztTQUNSO1FBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNWLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNYLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUlELE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQ25FLElBQUksTUFBTSxHQUFHLEtB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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RHJhZ1BvaW50VHlwZX0gZnJvbSAnLi4vbW9kZWwvZW51bS9kcmFnLXBvaW50LXR5cGUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGV0YURyYWdnYWJsZVBvaW50XScsXG4gIGV4cG9ydEFzOiAndGV0YURyYWdnYWJsZVBvaW50J1xufSlcbmV4cG9ydCBjbGFzcyBEcmFnZ2FibGVQb2ludERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIHRldGFEcmFnZ2FibGVQb2ludDogYm9vbGVhbjtcbiAgQElucHV0KCkgZHJhZ0RpcmVjdGlvbjogRHJhZ1BvaW50VHlwZTtcbiAgQElucHV0KCkgYWxsb3dEcmFnOiAocG9pbnQ6IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIGRlbHRhWDogbnVtYmVyLFxuICAgIGRlbHRhWTogbnVtYmVyXG4gIH0pID0+IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBzdGFydFBvc2l0aW9uOiB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcjtcbiAgfTtcblxuICBwcml2YXRlIHRyYW5zZm9ybUNhY2hlOiB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcjtcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG4gIH1cblxuICBAT3V0cHV0KCkgbW92ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlclxuICB9PigpO1xuXG4gIEBPdXRwdXQoKSBtb3ZlUHJvY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICAgZGVsdGFZOiBudW1iZXJcbiAgfT4oKTtcblxuICBAT3V0cHV0KCkgbW92ZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICAgZGVsdGFZOiBudW1iZXJcbiAgfT4oKTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgWyckZXZlbnQnXSlcbiAgbW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLnRldGFEcmFnZ2FibGVQb2ludCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHtcbiAgICAgIHg6IGV2ZW50LngsXG4gICAgICB5OiBldmVudC55XG4gICAgfTtcbiAgICB0aGlzLm1vdmVTdGFydC5lbWl0KHRoaXMuc3RhcnRQb3NpdGlvbik7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp0b3VjaGVuZCcsIFsnJGV2ZW50J10pXG4gIG1vdXNlVXAoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5zdGFydFBvc2l0aW9uICE9PSBudWxsICYmIHRoaXMuc3RhcnRQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgZGVsdGFYID0gZXZlbnQueCAtIHRoaXMuc3RhcnRQb3NpdGlvbi54O1xuICAgICAgbGV0IGRlbHRhWSA9IGV2ZW50LnkgLSB0aGlzLnN0YXJ0UG9zaXRpb24ueTtcbiAgICAgIGlmICh0aGlzLmRyYWdEaXJlY3Rpb24gPT09IERyYWdQb2ludFR5cGUueCkge1xuICAgICAgICBkZWx0YVkgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGlvbiA9PT0gRHJhZ1BvaW50VHlwZS55KSB7XG4gICAgICAgIGRlbHRhWCA9IDA7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hbGxvd0RyYWcgJiYgIXRoaXMuYWxsb3dEcmFnKHtcbiAgICAgICAgeDogZXZlbnQueCxcbiAgICAgICAgeTogZXZlbnQueSxcbiAgICAgICAgZGVsdGFYLFxuICAgICAgICBkZWx0YVlcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IG51bGw7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRyYW5zZm9ybUNhY2hlKSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtQ2FjaGUueCA9IHRoaXMudHJhbnNmb3JtQ2FjaGUueCArIGRlbHRhWDtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZS55ID0gdGhpcy50cmFuc2Zvcm1DYWNoZS55ICsgZGVsdGFZO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1DYWNoZSA9IHtcbiAgICAgICAgICB4OiBkZWx0YVgsXG4gICAgICAgICAgeTogZGVsdGFZXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLm1vdmVFbmQuZW1pdCh7XG4gICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgIHk6IGV2ZW50LnksXG4gICAgICAgIGRlbHRhWCxcbiAgICAgICAgZGVsdGFZXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGFydFBvc2l0aW9uID0gbnVsbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2htb3ZlJywgWyckZXZlbnQnXSlcbiAgbW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc3RhcnRQb3NpdGlvbikge1xuICAgICAgbGV0IGRlbHRhWCA9IGV2ZW50LnggLSB0aGlzLnN0YXJ0UG9zaXRpb24ueDtcbiAgICAgIGxldCBkZWx0YVkgPSBldmVudC55IC0gdGhpcy5zdGFydFBvc2l0aW9uLnk7XG4gICAgICBpZiAodGhpcy50cmFuc2Zvcm1DYWNoZSkge1xuICAgICAgICBkZWx0YVggPSB0aGlzLnRyYW5zZm9ybUNhY2hlLnggKyBkZWx0YVg7XG4gICAgICAgIGRlbHRhWSA9IHRoaXMudHJhbnNmb3JtQ2FjaGUueSArIGRlbHRhWTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFsbG93RHJhZyAmJiAhdGhpcy5hbGxvd0RyYWcoe1xuICAgICAgICB4OiBldmVudC54LFxuICAgICAgICB5OiBldmVudC55LFxuICAgICAgICBkZWx0YVgsXG4gICAgICAgIGRlbHRhWVxuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZHJhZ0RpcmVjdGlvbiA9PT0gRHJhZ1BvaW50VHlwZS54KSB7XG4gICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kcmFnRGlyZWN0aW9uID09PSBEcmFnUG9pbnRUeXBlLnkpIHtcbiAgICAgICAgZGVsdGFYID0gMDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VHJhbnNmb3JtKGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMubW92ZVByb2Nlc3MuZW1pdCh7XG4gICAgICAgIHg6IGV2ZW50LngsXG4gICAgICAgIHk6IGV2ZW50LnksXG4gICAgICAgIGRlbHRhWCxcbiAgICAgICAgZGVsdGFZXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRUcmFuc2Zvcm0oeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICB9XG5cbiAgcmVzZXRUcmFuc2Zvcm0oKSB7XG4gICAgdGhpcy5zZXRUcmFuc2Zvcm0oMCwgMCk7XG4gICAgdGhpcy50cmFuc2Zvcm1DYWNoZSA9IG51bGw7XG4gIH1cbn1cbiJdfQ==