@libs-ui/components-minimap 0.2.304 → 0.2.306-10

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.
package/README.md CHANGED
@@ -39,18 +39,17 @@ import { LibsUiComponentsMinimapDirective } from '@libs-ui/components-minimap';
39
39
  standalone: true,
40
40
  imports: [LibsUiComponentsMinimapDirective],
41
41
  template: `
42
- <div
42
+ <div
43
43
  LibsUiComponentsMinimapDirective
44
44
  class="scrollable-content"
45
45
  style="width: 500px; height: 300px; overflow: auto;">
46
-
47
46
  <!-- Nội dung lớn cần minimap -->
48
47
  <div style="width: 1500px; height: 1000px; background: linear-gradient(45deg, #ff6b6b, #4ecdc4);">
49
48
  <h2>Nội dung rất lớn</h2>
50
49
  <p>Cuộn để xem minimap hoạt động...</p>
51
50
  </div>
52
51
  </div>
53
- `
52
+ `,
54
53
  })
55
54
  export class ExampleComponent {}
56
55
  ```
@@ -58,6 +57,7 @@ export class ExampleComponent {}
58
57
  ### Ví dụ với file HTML riêng
59
58
 
60
59
  **Component:**
60
+
61
61
  ```typescript
62
62
  import { Component } from '@angular/core';
63
63
  import { LibsUiComponentsMinimapDirective, IMiniMapFunctionControl, IMiniMapStyleConfig } from '@libs-ui/components-minimap';
@@ -67,10 +67,9 @@ import { LibsUiComponentsMinimapDirective, IMiniMapFunctionControl, IMiniMapStyl
67
67
  standalone: true,
68
68
  imports: [LibsUiComponentsMinimapDirective],
69
69
  templateUrl: './minimap-demo.component.html',
70
- styleUrls: ['./minimap-demo.component.scss']
70
+ styleUrls: ['./minimap-demo.component.scss'],
71
71
  })
72
72
  export class MinimapDemoComponent {
73
-
74
73
  // Cấu hình style cho minimap container
75
74
  minimapStyle: IMiniMapStyleConfig = {
76
75
  width: 250,
@@ -80,14 +79,14 @@ export class MinimapDemoComponent {
80
79
  background: '#f8f9fa',
81
80
  border: '2px solid #007bff',
82
81
  borderRadius: 8,
83
- zIndex: 1500
82
+ zIndex: 1500,
84
83
  };
85
84
 
86
85
  // Cấu hình style cho viewport rectangle
87
86
  viewportStyle: IMiniMapStyleConfig = {
88
87
  border: '2px solid #ff6b6b',
89
88
  background: 'rgba(255, 107, 107, 0.1)',
90
- borderRadius: 4
89
+ borderRadius: 4,
91
90
  };
92
91
 
93
92
  minimapControls: IMiniMapFunctionControl | null = null;
@@ -113,24 +112,30 @@ export class MinimapDemoComponent {
113
112
  ```
114
113
 
115
114
  **Template (minimap-demo.component.html):**
115
+
116
116
  ```html
117
117
  <div class="demo-container">
118
-
119
118
  <!-- Control buttons -->
120
119
  <div class="controls mb-3">
121
- <button (click)="showMinimap()" class="btn btn-success me-2">
120
+ <button
121
+ (click)="showMinimap()"
122
+ class="btn btn-success me-2">
122
123
  Hiện Minimap
123
124
  </button>
124
- <button (click)="hideMinimap()" class="btn btn-warning me-2">
125
+ <button
126
+ (click)="hideMinimap()"
127
+ class="btn btn-warning me-2">
125
128
  Ẩn Minimap
126
129
  </button>
127
- <button (click)="toggleMinimap()" class="btn btn-info">
130
+ <button
131
+ (click)="toggleMinimap()"
132
+ class="btn btn-info">
128
133
  Toggle Minimap
129
134
  </button>
130
135
  </div>
131
136
 
132
137
  <!-- Scrollable content với minimap -->
133
- <div
138
+ <div
134
139
  LibsUiComponentsMinimapDirective
135
140
  [styleImageElement]="minimapStyle"
136
141
  [styleRectangleElement]="viewportStyle"
@@ -138,21 +143,26 @@ export class MinimapDemoComponent {
138
143
  (outFunctionControls)="onMinimapReady($event)"
139
144
  class="scrollable-area"
140
145
  style="width: 600px; height: 400px; overflow: auto; border: 1px solid #ddd;">
141
-
142
146
  <!-- Large content -->
143
- <div class="large-content" style="width: 1200px; height: 800px; padding: 20px;">
147
+ <div
148
+ class="large-content"
149
+ style="width: 1200px; height: 800px; padding: 20px;">
144
150
  <h1>Nội dung lớn với Minimap</h1>
145
-
146
- <div class="mo-minimap-flag-element-scale" style="transform: scale(1.2);">
151
+
152
+ <div
153
+ class="mo-minimap-flag-element-scale"
154
+ style="transform: scale(1.2);">
147
155
  <!-- Element có scale để test tính năng scale detection -->
148
156
  <div class="grid-content">
149
157
  <!-- Tạo grid content để dễ nhận biết vị trí -->
150
- <div *ngFor="let row of [1,2,3,4,5,6,7,8,9,10]"
151
- class="row"
152
- style="display: flex; margin: 10px 0;">
153
- <div *ngFor="let col of [1,2,3,4,5,6,7,8,9,10]"
154
- class="cell"
155
- style="width: 80px; height: 60px; border: 1px solid #ccc;
158
+ <div
159
+ *ngFor="let row of [1,2,3,4,5,6,7,8,9,10]"
160
+ class="row"
161
+ style="display: flex; margin: 10px 0;">
162
+ <div
163
+ *ngFor="let col of [1,2,3,4,5,6,7,8,9,10]"
164
+ class="cell"
165
+ style="width: 80px; height: 60px; border: 1px solid #ccc;
156
166
  margin: 2px; display: flex; align-items: center;
157
167
  justify-content: center; background: #f0f0f0;">
158
168
  {{row}}-{{col}}
@@ -176,18 +186,18 @@ export class MinimapDemoComponent {
176
186
 
177
187
  ### Inputs
178
188
 
179
- | Tên | Kiểu | Mặc định | Mô tả |
180
- |-----|------|----------|-------|
181
- | `classNameFlagElementScale` | `string` | `'mo-minimap-flag-element-scale'` | Class name của element có scale transform để directive detect |
182
- | `timerStartDrawMinimap` | `number` | `250` | Thời gian delay (ms) trước khi bắt đầu vẽ minimap |
183
- | `elementScroll` | `HTMLElement` | `undefined` | Element cuộn tùy chỉnh (mặc định dùng host element) |
184
- | `styleRectangleElement` | `IMiniMapStyleConfig` | `undefined` | Cấu hình style cho viewport rectangle |
185
- | `styleImageElement` | `IMiniMapStyleConfig` | `undefined` | Cấu hình style cho minimap container |
189
+ | Tên | Kiểu | Mặc định | Mô tả |
190
+ | --------------------------- | --------------------- | --------------------------------- | ------------------------------------------------------------- |
191
+ | `classNameFlagElementScale` | `string` | `'mo-minimap-flag-element-scale'` | Class name của element có scale transform để directive detect |
192
+ | `timerStartDrawMinimap` | `number` | `250` | Thời gian delay (ms) trước khi bắt đầu vẽ minimap |
193
+ | `elementScroll` | `HTMLElement` | `undefined` | Element cuộn tùy chỉnh (mặc định dùng host element) |
194
+ | `styleRectangleElement` | `IMiniMapStyleConfig` | `undefined` | Cấu hình style cho viewport rectangle |
195
+ | `styleImageElement` | `IMiniMapStyleConfig` | `undefined` | Cấu hình style cho minimap container |
186
196
 
187
197
  ### Outputs
188
198
 
189
- | Tên | Kiểu | Mô tả |
190
- |-----|------|-------|
199
+ | Tên | Kiểu | Mô tả |
200
+ | --------------------- | ------------------------- | ------------------------------------------------ |
191
201
  | `outFunctionControls` | `IMiniMapFunctionControl` | Emit object chứa các function để control minimap |
192
202
 
193
203
  ### Interfaces
@@ -196,18 +206,18 @@ export class MinimapDemoComponent {
196
206
 
197
207
  ```typescript
198
208
  interface IMiniMapStyleConfig {
199
- x?: number; // Vị trí x (không sử dụng)
200
- y?: number; // Vị trí y (không sử dụng)
201
- width?: number; // Chiều rộng minimap (px)
202
- height?: number; // Chiều cao minimap (px)
203
- zIndex?: number; // Z-index layer
204
- border?: string; // CSS border
205
- borderRadius?: number; // CSS border-radius (px)
206
- background?: string; // CSS background
207
- top?: number; // Vị trí top (px)
208
- left?: number; // Vị trí left (px)
209
- bottom?: number; // Vị trí bottom (px) - ưu tiên hơn top
210
- right?: number; // Vị trí right (px) - ưu tiên hơn left
209
+ x?: number; // Vị trí x (không sử dụng)
210
+ y?: number; // Vị trí y (không sử dụng)
211
+ width?: number; // Chiều rộng minimap (px)
212
+ height?: number; // Chiều cao minimap (px)
213
+ zIndex?: number; // Z-index layer
214
+ border?: string; // CSS border
215
+ borderRadius?: number; // CSS border-radius (px)
216
+ background?: string; // CSS background
217
+ top?: number; // Vị trí top (px)
218
+ left?: number; // Vị trí left (px)
219
+ bottom?: number; // Vị trí bottom (px) - ưu tiên hơn top
220
+ right?: number; // Vị trí right (px) - ưu tiên hơn left
211
221
  }
212
222
  ```
213
223
 
@@ -217,9 +227,9 @@ Cấu hình style cho minimap container hoặc viewport rectangle. Tất cả th
217
227
 
218
228
  ```typescript
219
229
  interface IMiniMapFunctionControl {
220
- show: () => void; // Hiển thị minimap
221
- hidden: () => void; // Ẩn minimap
222
- toggle: () => void; // Toggle hiển thị/ẩn minimap
230
+ show: () => void; // Hiển thị minimap
231
+ hidden: () => void; // Ẩn minimap
232
+ toggle: () => void; // Toggle hiển thị/ẩn minimap
223
233
  }
224
234
  ```
225
235
 
package/esm2022/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './minimap.directive';
2
2
  export * from './minimap.interface';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9taW5pbWFwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL21pbmltYXAuaW50ZXJmYWNlJzsiXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9taW5pbWFwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL21pbmltYXAuaW50ZXJmYWNlJztcbiJdfQ==
@@ -11,8 +11,8 @@ export class LibsUiComponentsMinimapDirective {
11
11
  onDestroy = new Subject();
12
12
  // #endregion
13
13
  // #region INPUT
14
- classNameFlagElementScale = input('libs-ui-minimap-flag-element-scale', { transform: val => val ?? 'libs-ui-minimap-flag-element-scale' });
15
- timerStartDrawMinimap = input(250, { transform: val => val ?? 250 });
14
+ classNameFlagElementScale = input('libs-ui-minimap-flag-element-scale', { transform: (val) => val ?? 'libs-ui-minimap-flag-element-scale' });
15
+ timerStartDrawMinimap = input(250, { transform: (val) => val ?? 250 });
16
16
  elementScroll = input();
17
17
  styleRectangleElement = input();
18
18
  styleImageElement = input();
@@ -32,21 +32,26 @@ export class LibsUiComponentsMinimapDirective {
32
32
  this.containerElement?.remove();
33
33
  observer.disconnect();
34
34
  });
35
- timer(this.timerStartDrawMinimap()).pipe(tap(() => {
35
+ timer(this.timerStartDrawMinimap())
36
+ .pipe(tap(() => {
36
37
  this.imgElementInitStyleAndAddToBody();
37
38
  this.viewPortElementInitStyleAndAddToImgElement();
38
39
  const rectImage = this.imgElement.getBoundingClientRect();
39
40
  this.setPositionRectangle(rectImage, { clientX: rectImage.x, clientY: rectImage.y });
40
41
  this.updateMiniMap();
41
- this.outFunctionControls.emit({
42
- show: this.show.bind(this),
43
- hidden: this.hidden.bind(this),
44
- toggle: this.toggle.bind(this)
45
- });
42
+ this.outFunctionControls.emit(this.FunctionsControl);
46
43
  this.initEvent();
47
- }), takeUntil(this.onDestroy)).subscribe();
44
+ }), takeUntil(this.onDestroy))
45
+ .subscribe();
48
46
  }
49
47
  // #region FUNCTIONS
48
+ get FunctionsControl() {
49
+ return {
50
+ show: this.show.bind(this),
51
+ hidden: this.hidden.bind(this),
52
+ toggle: this.toggle.bind(this),
53
+ };
54
+ }
50
55
  imgElementInitStyleAndAddToBody() {
51
56
  const rectElement = this.Element.getBoundingClientRect();
52
57
  this.containerElement.classList.add('fixed', 'flex', 'invisible', 'libs-ui-directive-minimap-container', 'select-none');
@@ -57,7 +62,7 @@ export class LibsUiComponentsMinimapDirective {
57
62
  border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,
58
63
  borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,
59
64
  width: `${this.styleImageElement()?.width ?? '198'}px`,
60
- height: `${this.styleImageElement()?.height ?? '108'}px`
65
+ height: `${this.styleImageElement()?.height ?? '108'}px`,
61
66
  }, this.renderer2);
62
67
  this.styleRectTopBottomElement(rectElement);
63
68
  this.styleRectLeftRightElement(rectElement);
@@ -71,7 +76,7 @@ export class LibsUiComponentsMinimapDirective {
71
76
  background: `${this.styleRectangleElement()?.background ?? 'transparent'}`,
72
77
  border: `${this.styleRectangleElement()?.border ?? 'none'}`,
73
78
  borderRadius: `${this.styleRectangleElement()?.borderRadius ?? '0'}`,
74
- cursor: 'grab'
79
+ cursor: 'grab',
75
80
  }, this.renderer2);
76
81
  this.containerElement.appendChild(this.viewPortElement);
77
82
  }
@@ -98,7 +103,7 @@ export class LibsUiComponentsMinimapDirective {
98
103
  if (event.type === 'scroll') {
99
104
  event = {
100
105
  clientX: this.Element.scrollLeft * ratioX + rectImage.left + rectViewPort.width / 2,
101
- clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2
106
+ clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2,
102
107
  };
103
108
  this.setPositionRectangle(rectImage, event);
104
109
  return;
@@ -115,12 +120,16 @@ export class LibsUiComponentsMinimapDirective {
115
120
  preEvent = event;
116
121
  this.Element.scroll({
117
122
  left: this.Element.scrollLeft + distanceX,
118
- top: this.Element.scrollTop + distanceY
123
+ top: this.Element.scrollTop + distanceY,
119
124
  });
120
125
  };
121
126
  getDragEventByElement({ elementMouseDown: this.viewPortElement, elementMouseMove: this.viewPortElement, isStartWithMouseDownEvent: true, onDestroy: this.onDestroy }).subscribe(handlerScrollElement);
122
- fromEvent(this.Element, 'scroll').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe((event) => handlerScrollElement(event));
123
- fromEvent(window, 'resize').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(this.updateMiniMap.bind(this));
127
+ fromEvent(this.Element, 'scroll')
128
+ .pipe(tap((event) => event.stopPropagation()), takeUntil(this.onDestroy))
129
+ .subscribe((event) => handlerScrollElement(event));
130
+ fromEvent(window, 'resize')
131
+ .pipe(tap((event) => event.stopPropagation()), takeUntil(this.onDestroy))
132
+ .subscribe(this.updateMiniMap.bind(this));
124
133
  }
125
134
  getRatio() {
126
135
  const rectContainer = this.containerElement.getBoundingClientRect();
@@ -133,7 +142,7 @@ export class LibsUiComponentsMinimapDirective {
133
142
  const elementScale = this.Element.getElementsByClassName(this.classNameFlagElementScale())?.[0];
134
143
  if (elementScale && getComputedStyle(elementScale).transform) {
135
144
  const matrix = getComputedStyle(this.Element.getElementsByClassName(this.classNameFlagElementScale())[0]).transform;
136
- const matrixArray = matrix.replace("matrix(", "").split(",");
145
+ const matrixArray = matrix.replace('matrix(', '').split(',');
137
146
  console.log('matrixArray', matrixArray);
138
147
  scaleX = parseFloat(matrixArray[0]); // convert from string to number
139
148
  scaleY = parseFloat(matrixArray[3]);
@@ -188,7 +197,7 @@ export class LibsUiComponentsMinimapDirective {
188
197
  const rectImage = this.imgElement.getBoundingClientRect();
189
198
  const event = {
190
199
  clientX: this.Element.scrollLeft * ratioX + rectImage.left + viewPortElement.width / 2,
191
- clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2
200
+ clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2,
192
201
  };
193
202
  nodeClone.style.transform = `scale(${ratioX},${ratioY}) translate(-${translateX}px,-${translateY}px)`;
194
203
  this.setPositionRectangle(rectImage, event);
@@ -225,8 +234,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
225
234
  type: Directive,
226
235
  args: [{
227
236
  // eslint-disable-next-line @angular-eslint/directive-selector
228
- selector: "[LibsUiComponentsMinimapDirective]",
237
+ selector: '[LibsUiComponentsMinimapDirective]',
229
238
  standalone: true,
230
239
  }]
231
240
  }] });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBT2pFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFDM0MsbUJBQW1CO0lBQ1gsTUFBTSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxVQUFVLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDeEMsYUFBYTtJQUViLGdCQUFnQjtJQUNQLHlCQUF5QixHQUFHLEtBQUssQ0FBNkIsb0NBQW9DLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZLLHFCQUFxQixHQUFHLEtBQUssQ0FBNkIsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFD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LEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQWxRVSxnQ0FBZ0M7NEZBQWhDLGdDQUFnQzs7NEZBQWhDLGdDQUFnQztrQkFMNUMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxvQ0FBb0M7b0JBQzlDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBvdXRwdXQsIFJlbmRlcmVyMiwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBnZXREcmFnRXZlbnRCeUVsZW1lbnQsIHNldFN0eWxlc0VsZW1lbnQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU1pbmlNYXBGdW5jdGlvbkNvbnRyb2wsIElNaW5pTWFwU3R5bGVDb25maWcgfSBmcm9tICcuL21pbmltYXAuaW50ZXJmYWNlJztcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogXCJbTGlic1VpQ29tcG9uZW50c01pbmltYXBEaXJlY3RpdmVdXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNNaW5pbWFwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIGlzU2hvdyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgcHJpdmF0ZSBpbWdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIHZpZXdQb3J0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xpYnMtdWktbWluaW1hcC1mbGFnLWVsZW1lbnQtc2NhbGUnLCB7IHRyYW5zZm9ybTogdmFsID0+IHZhbCA/PyAnbGlicy11aS1taW5pbWFwLWZsYWctZWxlbWVudC1zY2FsZScgfSk7XG4gIHJlYWRvbmx5IHRpbWVyU3RhcnREcmF3TWluaW1hcCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigyNTAsIHsgdHJhbnNmb3JtOiB2YWwgPT4gdmFsID8/IDI1MCB9KTtcbiAgcmVhZG9ubHkgZWxlbWVudFNjcm9sbCA9IGlucHV0PEhUTUxFbGVtZW50PigpO1xuICByZWFkb25seSBzdHlsZVJlY3RhbmdsZUVsZW1lbnQgPSBpbnB1dDxJTWluaU1hcFN0eWxlQ29uZmlnPigpO1xuICByZWFkb25seSBzdHlsZUltYWdlRWxlbWVudCA9IGlucHV0PElNaW5pTWFwU3R5bGVDb25maWc+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIE9VVFBVVFxuICByZWFkb25seSBvdXRGdW5jdGlvbkNvbnRyb2xzID0gb3V0cHV0PElNaW5pTWFwRnVuY3Rpb25Db250cm9sPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJTkpFQ1RcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnVwZGF0ZU1pbmlNYXAuYmluZCh0aGlzKSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuRWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLm9uRGVzdHJveS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50Py5yZW1vdmUoKTtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9KTtcblxuICAgIHRpbWVyKHRoaXMudGltZXJTdGFydERyYXdNaW5pbWFwKCkpLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIHRoaXMuaW1nRWxlbWVudEluaXRTdHlsZUFuZEFkZFRvQm9keSgpO1xuICAgICAgdGhpcy52aWV3UG9ydEVsZW1lbnRJbml0U3R5bGVBbmRBZGRUb0ltZ0VsZW1lbnQoKTtcblxuICAgICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgeyBjbGllbnRYOiByZWN0SW1hZ2UueCwgY2xpZW50WTogcmVjdEltYWdlLnkgfSk7XG4gICAgICB0aGlzLnVwZGF0ZU1pbmlNYXAoKTtcbiAgICAgIHRoaXMub3V0RnVuY3Rpb25Db250cm9scy5lbWl0KHtcbiAgICAgICAgc2hvdzogdGhpcy5zaG93LmJpbmQodGhpcyksXG4gICAgICAgIGhpZGRlbjogdGhpcy5oaWRkZW4uYmluZCh0aGlzKSxcbiAgICAgICAgdG9nZ2xlOiB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW5pdEV2ZW50KCk7XG4gICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHByaXZhdGUgaW1nRWxlbWVudEluaXRTdHlsZUFuZEFkZFRvQm9keSgpIHtcbiAgICBjb25zdCByZWN0RWxlbWVudCA9IHRoaXMuRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmaXhlZCcsICdmbGV4JywgJ2ludmlzaWJsZScsICdsaWJzLXVpLWRpcmVjdGl2ZS1taW5pbWFwLWNvbnRhaW5lcicsJ3NlbGVjdC1ub25lJyk7XG4gICAgdGhpcy5pbWdFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3JlbGF0aXZlJywgJ3ctZnVsbCcsICdoLWZ1bGwnLCAnb3ZlcmZsb3ctaGlkZGVuJyk7XG4gICAgc2V0U3R5bGVzRWxlbWVudCh0aGlzLmNvbnRhaW5lckVsZW1lbnQsIHtcbiAgICAgIHpJbmRleDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy56SW5kZXggPz8gJzEzMDAnfWAsXG4gICAgICBiYWNrZ3JvdW5kOiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJhY2tncm91bmQgPz8gJ3doaXRlJ31gLFxuICAgICAgYm9yZGVyOiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvcmRlciA/PyAnMXB4IHNvbGlkICNFNkU3RUEnfWAsXG4gICAgICBib3JkZXJSYWRpdXM6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm9yZGVyUmFkaXVzID8/ICc0cHgnfWAsXG4gICAgICB3aWR0aDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy53aWR0aCA/PyAnMTk4J31weGAsXG4gICAgICBoZWlnaHQ6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uaGVpZ2h0ID8/ICcxMDgnfXB4YFxuICAgIH0sIHRoaXMucmVuZGVyZXIyKTtcbiAgICB0aGlzLnN0eWxlUmVjdFRvcEJvdHRvbUVsZW1lbnQocmVjdEVsZW1lbnQpO1xuICAgIHRoaXMuc3R5bGVSZWN0TGVmdFJpZ2h0RWxlbWVudChyZWN0RWxlbWVudCk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZCh0aGlzLmltZ0VsZW1lbnQpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdmlld1BvcnRFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9JbWdFbGVtZW50KCkge1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZpeGVkJywgJ2xpYnMtdWktYm9yZGVyLXByaW1hcnktZ2VuZXJhbCcsICdpbnZpc2libGUnLCAnbGlicy11aS1kaXJlY3RpdmUtbWluaW1hcC1yZWN0YW5nbGUnKTtcbiAgICBzZXRTdHlsZXNFbGVtZW50KHRoaXMudmlld1BvcnRFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsIHtcbiAgICAgIHpJbmRleDogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uekluZGV4ID8/ICcxMzAxJ31gLFxuICAgICAgYmFja2dyb3VuZDogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uYmFja2dyb3VuZCA/PyAndHJhbnNwYXJlbnQnfWAsXG4gICAgICBib3JkZXI6IGAke3RoaXMuc3R5bGVSZWN0YW5nbGVFbGVtZW50KCk/LmJvcmRlciA/PyAnbm9uZSd9YCxcbiAgICAgIGJvcmRlclJhZGl1czogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uYm9yZGVyUmFkaXVzID8/ICcwJ31gLFxuICAgICAgY3Vyc29yOiAnZ3JhYidcbiAgICB9LCB0aGlzLnJlbmRlcmVyMik7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmlld1BvcnRFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3R5bGVSZWN0VG9wQm90dG9tRWxlbWVudChyZWN0RWxlbWVudDogRE9NUmVjdCkge1xuICAgIGlmICh0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvdHRvbSkge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLmJvdHRvbSA9IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm90dG9tfXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc3R5bGUudG9wID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy50b3AgPz8gcmVjdEVsZW1lbnQudG9wfXB4YDtcbiAgfVxuICBwcml2YXRlIHN0eWxlUmVjdExlZnRSaWdodEVsZW1lbnQocmVjdEVsZW1lbnQ6IERPTVJlY3QpIHtcbiAgICBpZiAodGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5yaWdodCkge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLnJpZ2h0ID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5yaWdodH1weGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmxlZnQgPz8gcmVjdEVsZW1lbnQubGVmdH1weGA7XG4gIH1cblxuICBwcml2YXRlIGluaXRFdmVudCgpIHtcbiAgICBsZXQgcHJlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgY29uc3QgaGFuZGxlclNjcm9sbEVsZW1lbnQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3RWaWV3UG9ydCA9IHRoaXMudmlld1BvcnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgY2xpZW50WDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKiByYXRpb1ggKyByZWN0SW1hZ2UubGVmdCArIHJlY3RWaWV3UG9ydC53aWR0aCAvIDIsXG4gICAgICAgICAgY2xpZW50WTogdGhpcy5FbGVtZW50LnNjcm9sbFRvcCAqIHJhdGlvWSArIHJlY3RJbWFnZS50b3AgKyByZWN0Vmlld1BvcnQuaGVpZ2h0IC8gMlxuICAgICAgICB9IGFzIE1vdXNlRXZlbnQ7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlLCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG4gICAgICAgIHByZUV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFwcmVFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlWCA9IChldmVudC5jbGllbnRYIC0gcHJlRXZlbnQuY2xpZW50WCkgLyByYXRpb1g7XG4gICAgICBjb25zdCBkaXN0YW5jZVkgPSAoZXZlbnQuY2xpZW50WSAtIHByZUV2ZW50LmNsaWVudFkpIC8gcmF0aW9ZO1xuXG4gICAgICBwcmVFdmVudCA9IGV2ZW50O1xuICAgICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7XG4gICAgICAgIGxlZnQ6IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0ICsgZGlzdGFuY2VYLFxuICAgICAgICB0b3A6IHRoaXMuRWxlbWVudC5zY3JvbGxUb3AgKyBkaXN0YW5jZVlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBnZXREcmFnRXZlbnRCeUVsZW1lbnQoeyBlbGVtZW50TW91c2VEb3duOiB0aGlzLnZpZXdQb3J0RWxlbWVudCwgZWxlbWVudE1vdXNlTW92ZTogdGhpcy52aWV3UG9ydEVsZW1lbnQsaXNTdGFydFdpdGhNb3VzZURvd25FdmVudDp0cnVlLCBvbkRlc3Ryb3k6IHRoaXMub25EZXN0cm95IH0pLnN1YnNjcmliZShoYW5kbGVyU2Nyb2xsRWxlbWVudCk7XG4gICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLkVsZW1lbnQsICdzY3JvbGwnKS5waXBlKHRhcChldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKSksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoZXZlbnQpID0+IGhhbmRsZXJTY3JvbGxFbGVtZW50KGV2ZW50IGFzIE1vdXNlRXZlbnQpKTtcbiAgICBmcm9tRXZlbnQ8RXZlbnQ+KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFwKGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKHRoaXMudXBkYXRlTWluaU1hcC5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmF0aW8oKSB7XG4gICAgY29uc3QgcmVjdENvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByYXRpb1ggPSByZWN0Q29udGFpbmVyLndpZHRoIC8gdGhpcy5FbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgIGNvbnN0IHJhdGlvWSA9IHJlY3RDb250YWluZXIuaGVpZ2h0IC8gdGhpcy5FbGVtZW50LnNjcm9sbEhlaWdodDtcblxuICAgIHJldHVybiB7IHJhdGlvWDogcmF0aW9YLCByYXRpb1k6IHJhdGlvWSB9O1xuICB9XG4gIHByaXZhdGUgZ2V0U2NhbGVFbGVtZW50KCkge1xuICAgIGxldCB7IHNjYWxlWCwgc2NhbGVZIH0gPSB7IHNjYWxlWDogMSwgc2NhbGVZOiAxIH07XG4gICAgY29uc3QgZWxlbWVudFNjYWxlID0gdGhpcy5FbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5jbGFzc05hbWVGbGFnRWxlbWVudFNjYWxlKCkpPy5bMF0gYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoZWxlbWVudFNjYWxlICYmIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudFNjYWxlKS50cmFuc2Zvcm0pIHtcbiAgICAgIGNvbnN0IG1hdHJpeCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5FbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodGhpcy5jbGFzc05hbWVGbGFnRWxlbWVudFNjYWxlKCkpWzBdKS50cmFuc2Zvcm07XG4gICAgICBjb25zdCBtYXRyaXhBcnJheSA9IG1hdHJpeC5yZXBsYWNlKFwibWF0cml4KFwiLCBcIlwiKS5zcGxpdChcIixcIik7XG4gICAgICBjb25zb2xlLmxvZygnbWF0cml4QXJyYXknLG1hdHJpeEFycmF5KTtcblxuICAgICAgc2NhbGVYID0gcGFyc2VGbG9hdChtYXRyaXhBcnJheVswXSk7IC8vIGNvbnZlcnQgZnJvbSBzdHJpbmcgdG8gbnVtYmVyXG4gICAgICBzY2FsZVkgPSBwYXJzZUZsb2F0KG1hdHJpeEFycmF5WzNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzY2FsZVgsIHNjYWxlWSwgZWxlbWVudFNjYWxlIH07XG4gIH1cblxuICBwcml2YXRlIHJldmVyc2VNdWx0aXBsaWNhdGlvbihhdmcxOiBudW1iZXIsIGF2ZzI6IG51bWJlcikge1xuICAgIGlmIChhdmcyIDw9IDEpIHtcbiAgICAgIHJldHVybiBhdmcxICogYXZnMjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXZnMSAvIGF2ZzI7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZTogSUJvdW5kaW5nQ2xpZW50UmVjdCwgbW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuICAgIGNvbnN0IHsgc2NhbGVYLCBzY2FsZVkgfSA9IHRoaXMuZ2V0U2NhbGVFbGVtZW50KCk7XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuRWxlbWVudC5jbGllbnRXaWR0aCAqIHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWCwgc2NhbGVYKTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLkVsZW1lbnQuY2xpZW50SGVpZ2h0ICogdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9ZLCBzY2FsZVkpO1xuICAgIGxldCBsZWZ0U3ZnID0gbW91c2VQb3NpdGlvbi5jbGllbnRYIC0gd2lkdGggLyAyO1xuICAgIGxldCB0b3BTdmcgPSBtb3VzZVBvc2l0aW9uLmNsaWVudFkgLSBoZWlnaHQgLyAyO1xuXG4gICAgaWYgKGxlZnRTdmcgPCByZWN0SW1hZ2UubGVmdCkge1xuICAgICAgbGVmdFN2ZyA9IHJlY3RJbWFnZS5sZWZ0O1xuICAgIH1cbiAgICBpZiAobGVmdFN2ZyArIHdpZHRoID49IHJlY3RJbWFnZS5sZWZ0ICsgcmVjdEltYWdlLndpZHRoKSB7XG4gICAgICBsZWZ0U3ZnID0gcmVjdEltYWdlLmxlZnQgKyByZWN0SW1hZ2Uud2lkdGggLSB3aWR0aDtcbiAgICB9XG4gICAgaWYgKHRvcFN2ZyA8IHJlY3RJbWFnZS50b3ApIHtcbiAgICAgIHRvcFN2ZyA9IHJlY3RJbWFnZS50b3A7XG4gICAgfVxuICAgIGlmICh0b3BTdmcgKyBoZWlnaHQgPj0gcmVjdEltYWdlLnRvcCArIHJlY3RJbWFnZS5oZWlnaHQpIHtcbiAgICAgIHRvcFN2ZyA9IHJlY3RJbWFnZS50b3AgKyByZWN0SW1hZ2UuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdFN2Z31weGA7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuc3R5bGUudG9wID0gYCR7dG9wU3ZnfXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtNYXRoLnJvdW5kKGhlaWdodCl9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW5pTWFwKCkge1xuICAgIHRoaXMuaW1nRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZD8ucmVtb3ZlKCk7XG4gICAgbGV0IHsgcmF0aW9YLCByYXRpb1kgfSA9IHRoaXMuZ2V0UmF0aW8oKTtcbiAgICBjb25zdCBub2RlQ2xvbmUgPSB0aGlzLkVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgIG5vZGVDbG9uZS5zdHlsZS53aWR0aCA9IGAke3RoaXMuRWxlbWVudC5zY3JvbGxXaWR0aH1weGA7XG4gICAgbm9kZUNsb25lLnN0eWxlLmhlaWdodCA9IGAke3RoaXMuRWxlbWVudC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgIGNvbnN0IHsgc2NhbGVYLCBzY2FsZVkgfSA9IHRoaXMuZ2V0U2NhbGVFbGVtZW50KCk7XG5cbiAgICByYXRpb1ggPSB0aGlzLnJldmVyc2VNdWx0aXBsaWNhdGlvbihyYXRpb1gsIHNjYWxlWCk7XG4gICAgcmF0aW9ZID0gdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9ZLCBzY2FsZVkpO1xuICAgIG5vZGVDbG9uZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHtyYXRpb1h9LCR7cmF0aW9ZfSlgO1xuICAgIG5vZGVDbG9uZS5jbGFzc0xpc3QuYWRkKCdvdmVyZmxvdy11bnNldCcsJ3NlbGVjdC1ub25lJywncG9pbnRlci1ldmVudHMtbm9uZScpO1xuICAgIHRoaXMuaW1nRWxlbWVudC5hcHBlbmQobm9kZUNsb25lKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSAobm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmltZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgLyByYXRpb1g7XG4gICAgY29uc3QgdHJhbnNsYXRlWSA9IChub2RlQ2xvbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCkgLyByYXRpb1k7XG4gICAgY29uc3Qgdmlld1BvcnRFbGVtZW50ID0gdGhpcy52aWV3UG9ydEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgY2xpZW50WDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKiByYXRpb1ggKyByZWN0SW1hZ2UubGVmdCArIHZpZXdQb3J0RWxlbWVudC53aWR0aCAvIDIsXG4gICAgICBjbGllbnRZOiB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wICogcmF0aW9ZICsgcmVjdEltYWdlLnRvcCArIHZpZXdQb3J0RWxlbWVudC5oZWlnaHQgLyAyXG4gICAgfSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgbm9kZUNsb25lLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3JhdGlvWH0sJHtyYXRpb1l9KSB0cmFuc2xhdGUoLSR7dHJhbnNsYXRlWH1weCwtJHt0cmFuc2xhdGVZfXB4KWA7XG4gICAgdGhpcy5zZXRQb3NpdGlvblJlY3RhbmdsZShyZWN0SW1hZ2UsIGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmlzU2hvdygpKSB7XG4gICAgICB0aGlzLmhpZGRlbigpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGRlbigpIHtcbiAgICB0aGlzLmlzU2hvdy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnaW52aXNpYmxlJyk7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaW52aXNpYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIHNob3coKSB7XG4gICAgdGhpcy5pc1Nob3cuc2V0KHRydWUpO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnaW52aXNpYmxlJyk7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaW52aXNpYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U2Nyb2xsKCkgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59Il19
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBT2pFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFDM0MsbUJBQW1CO0lBQ1gsTUFBTSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxVQUFVLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEQsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDeEMsYUFBYTtJQUViLGdCQUFnQjtJQUNQLHlCQUF5QixHQUFHLEtBQUssQ0FBNkIsb0NBQW9DLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7SUFDeksscUJBQXFCLEdBQUcsS0FBSyxDQUE2QixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFH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QWE7SUFDYixXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBNVJVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDOzs0RkFBaEMsZ0NBQWdDO2tCQUw1QyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIG91dHB1dCwgUmVuZGVyZXIyLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IGdldERyYWdFdmVudEJ5RWxlbWVudCwgc2V0U3R5bGVzRWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJTWluaU1hcEZ1bmN0aW9uQ29udHJvbCwgSU1pbmlNYXBTdHlsZUNvbmZpZyB9IGZyb20gJy4vbWluaW1hcC5pbnRlcmZhY2UnO1xuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW0xpYnNVaUNvbXBvbmVudHNNaW5pbWFwRGlyZWN0aXZlXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNNaW5pbWFwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIGlzU2hvdyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgcHJpdmF0ZSBpbWdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIHZpZXdQb3J0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xpYnMtdWktbWluaW1hcC1mbGFnLWVsZW1lbnQtc2NhbGUnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdsaWJzLXVpLW1pbmltYXAtZmxhZy1lbGVtZW50LXNjYWxlJyB9KTtcbiAgcmVhZG9ubHkgdGltZXJTdGFydERyYXdNaW5pbWFwID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDI1MCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAyNTAgfSk7XG4gIHJlYWRvbmx5IGVsZW1lbnRTY3JvbGwgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgc3R5bGVSZWN0YW5nbGVFbGVtZW50ID0gaW5wdXQ8SU1pbmlNYXBTdHlsZUNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgc3R5bGVJbWFnZUVsZW1lbnQgPSBpbnB1dDxJTWluaU1hcFN0eWxlQ29uZmlnPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25Db250cm9scyA9IG91dHB1dDxJTWluaU1hcEZ1bmN0aW9uQ29udHJvbD4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy51cGRhdGVNaW5pTWFwLmJpbmQodGhpcykpO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLkVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aW1lcih0aGlzLnRpbWVyU3RhcnREcmF3TWluaW1hcCgpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbWdFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9Cb2R5KCk7XG4gICAgICAgICAgdGhpcy52aWV3UG9ydEVsZW1lbnRJbml0U3R5bGVBbmRBZGRUb0ltZ0VsZW1lbnQoKTtcblxuICAgICAgICAgIGNvbnN0IHJlY3RJbWFnZSA9IHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlLCB7IGNsaWVudFg6IHJlY3RJbWFnZS54LCBjbGllbnRZOiByZWN0SW1hZ2UueSB9KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1pbmlNYXAoKTtcbiAgICAgICAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbHMuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgICAgICAgIHRoaXMuaW5pdEV2ZW50KCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSU1pbmlNYXBGdW5jdGlvbkNvbnRyb2wge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93OiB0aGlzLnNob3cuYmluZCh0aGlzKSxcbiAgICAgIGhpZGRlbjogdGhpcy5oaWRkZW4uYmluZCh0aGlzKSxcbiAgICAgIHRvZ2dsZTogdGhpcy50b2dnbGUuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbWdFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9Cb2R5KCkge1xuICAgIGNvbnN0IHJlY3RFbGVtZW50ID0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZpeGVkJywgJ2ZsZXgnLCAnaW52aXNpYmxlJywgJ2xpYnMtdWktZGlyZWN0aXZlLW1pbmltYXAtY29udGFpbmVyJywgJ3NlbGVjdC1ub25lJyk7XG4gICAgdGhpcy5pbWdFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3JlbGF0aXZlJywgJ3ctZnVsbCcsICdoLWZ1bGwnLCAnb3ZlcmZsb3ctaGlkZGVuJyk7XG4gICAgc2V0U3R5bGVzRWxlbWVudChcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgekluZGV4OiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LnpJbmRleCA/PyAnMTMwMCd9YCxcbiAgICAgICAgYmFja2dyb3VuZDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5iYWNrZ3JvdW5kID8/ICd3aGl0ZSd9YCxcbiAgICAgICAgYm9yZGVyOiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvcmRlciA/PyAnMXB4IHNvbGlkICNFNkU3RUEnfWAsXG4gICAgICAgIGJvcmRlclJhZGl1czogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5ib3JkZXJSYWRpdXMgPz8gJzRweCd9YCxcbiAgICAgICAgd2lkdGg6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8ud2lkdGggPz8gJzE5OCd9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uaGVpZ2h0ID8/ICcxMDgnfXB4YCxcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlbmRlcmVyMlxuICAgICk7XG4gICAgdGhpcy5zdHlsZVJlY3RUb3BCb3R0b21FbGVtZW50KHJlY3RFbGVtZW50KTtcbiAgICB0aGlzLnN0eWxlUmVjdExlZnRSaWdodEVsZW1lbnQocmVjdEVsZW1lbnQpO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmQodGhpcy5pbWdFbGVtZW50KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHZpZXdQb3J0RWxlbWVudEluaXRTdHlsZUFuZEFkZFRvSW1nRWxlbWVudCgpIHtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmaXhlZCcsICdsaWJzLXVpLWJvcmRlci1wcmltYXJ5LWdlbmVyYWwnLCAnaW52aXNpYmxlJywgJ2xpYnMtdWktZGlyZWN0aXZlLW1pbmltYXAtcmVjdGFuZ2xlJyk7XG4gICAgc2V0U3R5bGVzRWxlbWVudChcbiAgICAgIHRoaXMudmlld1BvcnRFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIHpJbmRleDogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uekluZGV4ID8/ICcxMzAxJ31gLFxuICAgICAgICBiYWNrZ3JvdW5kOiBgJHt0aGlzLnN0eWxlUmVjdGFuZ2xlRWxlbWVudCgpPy5iYWNrZ3JvdW5kID8/ICd0cmFuc3BhcmVudCd9YCxcbiAgICAgICAgYm9yZGVyOiBgJHt0aGlzLnN0eWxlUmVjdGFuZ2xlRWxlbWVudCgpPy5ib3JkZXIgPz8gJ25vbmUnfWAsXG4gICAgICAgIGJvcmRlclJhZGl1czogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uYm9yZGVyUmFkaXVzID8/ICcwJ31gLFxuICAgICAgICBjdXJzb3I6ICdncmFiJyxcbiAgICAgIH0sXG4gICAgICB0aGlzLnJlbmRlcmVyMlxuICAgICk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmlld1BvcnRFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3R5bGVSZWN0VG9wQm90dG9tRWxlbWVudChyZWN0RWxlbWVudDogRE9NUmVjdCkge1xuICAgIGlmICh0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvdHRvbSkge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLmJvdHRvbSA9IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm90dG9tfXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc3R5bGUudG9wID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy50b3AgPz8gcmVjdEVsZW1lbnQudG9wfXB4YDtcbiAgfVxuICBwcml2YXRlIHN0eWxlUmVjdExlZnRSaWdodEVsZW1lbnQocmVjdEVsZW1lbnQ6IERPTVJlY3QpIHtcbiAgICBpZiAodGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5yaWdodCkge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLnJpZ2h0ID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5yaWdodH1weGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmxlZnQgPz8gcmVjdEVsZW1lbnQubGVmdH1weGA7XG4gIH1cblxuICBwcml2YXRlIGluaXRFdmVudCgpIHtcbiAgICBsZXQgcHJlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgY29uc3QgaGFuZGxlclNjcm9sbEVsZW1lbnQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3RWaWV3UG9ydCA9IHRoaXMudmlld1BvcnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgY2xpZW50WDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKiByYXRpb1ggKyByZWN0SW1hZ2UubGVmdCArIHJlY3RWaWV3UG9ydC53aWR0aCAvIDIsXG4gICAgICAgICAgY2xpZW50WTogdGhpcy5FbGVtZW50LnNjcm9sbFRvcCAqIHJhdGlvWSArIHJlY3RJbWFnZS50b3AgKyByZWN0Vmlld1BvcnQuaGVpZ2h0IC8gMixcbiAgICAgICAgfSBhcyBNb3VzZUV2ZW50O1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2Vkb3duJykge1xuICAgICAgICBwcmVFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghcHJlRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXN0YW5jZVggPSAoZXZlbnQuY2xpZW50WCAtIHByZUV2ZW50LmNsaWVudFgpIC8gcmF0aW9YO1xuICAgICAgY29uc3QgZGlzdGFuY2VZID0gKGV2ZW50LmNsaWVudFkgLSBwcmVFdmVudC5jbGllbnRZKSAvIHJhdGlvWTtcblxuICAgICAgcHJlRXZlbnQgPSBldmVudDtcbiAgICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoe1xuICAgICAgICBsZWZ0OiB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdCArIGRpc3RhbmNlWCxcbiAgICAgICAgdG9wOiB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wICsgZGlzdGFuY2VZLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdldERyYWdFdmVudEJ5RWxlbWVudCh7IGVsZW1lbnRNb3VzZURvd246IHRoaXMudmlld1BvcnRFbGVtZW50LCBlbGVtZW50TW91c2VNb3ZlOiB0aGlzLnZpZXdQb3J0RWxlbWVudCwgaXNTdGFydFdpdGhNb3VzZURvd25FdmVudDogdHJ1ZSwgb25EZXN0cm95OiB0aGlzLm9uRGVzdHJveSB9KS5zdWJzY3JpYmUoaGFuZGxlclNjcm9sbEVsZW1lbnQpO1xuICAgIGZyb21FdmVudDxFdmVudD4odGhpcy5FbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGV2ZW50KSA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiBoYW5kbGVyU2Nyb2xsRWxlbWVudChldmVudCBhcyBNb3VzZUV2ZW50KSk7XG4gICAgZnJvbUV2ZW50PEV2ZW50Pih3aW5kb3csICdyZXNpemUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnVwZGF0ZU1pbmlNYXAuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhdGlvKCkge1xuICAgIGNvbnN0IHJlY3RDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmF0aW9YID0gcmVjdENvbnRhaW5lci53aWR0aCAvIHRoaXMuRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICBjb25zdCByYXRpb1kgPSByZWN0Q29udGFpbmVyLmhlaWdodCAvIHRoaXMuRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICByZXR1cm4geyByYXRpb1g6IHJhdGlvWCwgcmF0aW9ZOiByYXRpb1kgfTtcbiAgfVxuICBwcml2YXRlIGdldFNjYWxlRWxlbWVudCgpIHtcbiAgICBsZXQgeyBzY2FsZVgsIHNjYWxlWSB9ID0geyBzY2FsZVg6IDEsIHNjYWxlWTogMSB9O1xuICAgIGNvbnN0IGVsZW1lbnRTY2FsZSA9IHRoaXMuRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuY2xhc3NOYW1lRmxhZ0VsZW1lbnRTY2FsZSgpKT8uWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnRTY2FsZSAmJiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRTY2FsZSkudHJhbnNmb3JtKSB7XG4gICAgICBjb25zdCBtYXRyaXggPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuY2xhc3NOYW1lRmxhZ0VsZW1lbnRTY2FsZSgpKVswXSkudHJhbnNmb3JtO1xuICAgICAgY29uc3QgbWF0cml4QXJyYXkgPSBtYXRyaXgucmVwbGFjZSgnbWF0cml4KCcsICcnKS5zcGxpdCgnLCcpO1xuICAgICAgY29uc29sZS5sb2coJ21hdHJpeEFycmF5JywgbWF0cml4QXJyYXkpO1xuXG4gICAgICBzY2FsZVggPSBwYXJzZUZsb2F0KG1hdHJpeEFycmF5WzBdKTsgLy8gY29udmVydCBmcm9tIHN0cmluZyB0byBudW1iZXJcbiAgICAgIHNjYWxlWSA9IHBhcnNlRmxvYXQobWF0cml4QXJyYXlbM10pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHNjYWxlWCwgc2NhbGVZLCBlbGVtZW50U2NhbGUgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2ZXJzZU11bHRpcGxpY2F0aW9uKGF2ZzE6IG51bWJlciwgYXZnMjogbnVtYmVyKSB7XG4gICAgaWYgKGF2ZzIgPD0gMSkge1xuICAgICAgcmV0dXJuIGF2ZzEgKiBhdmcyO1xuICAgIH1cblxuICAgIHJldHVybiBhdmcxIC8gYXZnMjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlOiBJQm91bmRpbmdDbGllbnRSZWN0LCBtb3VzZVBvc2l0aW9uOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pIHtcbiAgICBjb25zdCB7IHJhdGlvWCwgcmF0aW9ZIH0gPSB0aGlzLmdldFJhdGlvKCk7XG4gICAgY29uc3QgeyBzY2FsZVgsIHNjYWxlWSB9ID0gdGhpcy5nZXRTY2FsZUVsZW1lbnQoKTtcblxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5FbGVtZW50LmNsaWVudFdpZHRoICogdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9YLCBzY2FsZVgpO1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuRWxlbWVudC5jbGllbnRIZWlnaHQgKiB0aGlzLnJldmVyc2VNdWx0aXBsaWNhdGlvbihyYXRpb1ksIHNjYWxlWSk7XG4gICAgbGV0IGxlZnRTdmcgPSBtb3VzZVBvc2l0aW9uLmNsaWVudFggLSB3aWR0aCAvIDI7XG4gICAgbGV0IHRvcFN2ZyA9IG1vdXNlUG9zaXRpb24uY2xpZW50WSAtIGhlaWdodCAvIDI7XG5cbiAgICBpZiAobGVmdFN2ZyA8IHJlY3RJbWFnZS5sZWZ0KSB7XG4gICAgICBsZWZ0U3ZnID0gcmVjdEltYWdlLmxlZnQ7XG4gICAgfVxuICAgIGlmIChsZWZ0U3ZnICsgd2lkdGggPj0gcmVjdEltYWdlLmxlZnQgKyByZWN0SW1hZ2Uud2lkdGgpIHtcbiAgICAgIGxlZnRTdmcgPSByZWN0SW1hZ2UubGVmdCArIHJlY3RJbWFnZS53aWR0aCAtIHdpZHRoO1xuICAgIH1cbiAgICBpZiAodG9wU3ZnIDwgcmVjdEltYWdlLnRvcCkge1xuICAgICAgdG9wU3ZnID0gcmVjdEltYWdlLnRvcDtcbiAgICB9XG4gICAgaWYgKHRvcFN2ZyArIGhlaWdodCA+PSByZWN0SW1hZ2UudG9wICsgcmVjdEltYWdlLmhlaWdodCkge1xuICAgICAgdG9wU3ZnID0gcmVjdEltYWdlLnRvcCArIHJlY3RJbWFnZS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0U3ZnfXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS50b3AgPSBgJHt0b3BTdmd9cHhgO1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke01hdGgucm91bmQoaGVpZ2h0KX1weGA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbmlNYXAoKSB7XG4gICAgdGhpcy5pbWdFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkPy5yZW1vdmUoKTtcbiAgICBsZXQgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuICAgIGNvbnN0IG5vZGVDbG9uZSA9IHRoaXMuRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgbm9kZUNsb25lLnN0eWxlLndpZHRoID0gYCR7dGhpcy5FbGVtZW50LnNjcm9sbFdpZHRofXB4YDtcbiAgICBub2RlQ2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5FbGVtZW50LnNjcm9sbEhlaWdodH1weGA7XG4gICAgY29uc3QgeyBzY2FsZVgsIHNjYWxlWSB9ID0gdGhpcy5nZXRTY2FsZUVsZW1lbnQoKTtcblxuICAgIHJhdGlvWCA9IHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWCwgc2NhbGVYKTtcbiAgICByYXRpb1kgPSB0aGlzLnJldmVyc2VNdWx0aXBsaWNhdGlvbihyYXRpb1ksIHNjYWxlWSk7XG4gICAgbm9kZUNsb25lLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3JhdGlvWH0sJHtyYXRpb1l9KWA7XG4gICAgbm9kZUNsb25lLmNsYXNzTGlzdC5hZGQoJ292ZXJmbG93LXVuc2V0JywgJ3NlbGVjdC1ub25lJywgJ3BvaW50ZXItZXZlbnRzLW5vbmUnKTtcbiAgICB0aGlzLmltZ0VsZW1lbnQuYXBwZW5kKG5vZGVDbG9uZSk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGVYID0gKG5vZGVDbG9uZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIC8gcmF0aW9YO1xuICAgIGNvbnN0IHRyYW5zbGF0ZVkgPSAobm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApIC8gcmF0aW9ZO1xuICAgIGNvbnN0IHZpZXdQb3J0RWxlbWVudCA9IHRoaXMudmlld1BvcnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJlY3RJbWFnZSA9IHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGNsaWVudFg6IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0ICogcmF0aW9YICsgcmVjdEltYWdlLmxlZnQgKyB2aWV3UG9ydEVsZW1lbnQud2lkdGggLyAyLFxuICAgICAgY2xpZW50WTogdGhpcy5FbGVtZW50LnNjcm9sbFRvcCAqIHJhdGlvWSArIHJlY3RJbWFnZS50b3AgKyB2aWV3UG9ydEVsZW1lbnQuaGVpZ2h0IC8gMixcbiAgICB9IGFzIE1vdXNlRXZlbnQ7XG5cbiAgICBub2RlQ2xvbmUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7cmF0aW9YfSwke3JhdGlvWX0pIHRyYW5zbGF0ZSgtJHt0cmFuc2xhdGVYfXB4LC0ke3RyYW5zbGF0ZVl9cHgpYDtcbiAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93KCkpIHtcbiAgICAgIHRoaXMuaGlkZGVuKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZGVuKCkge1xuICAgIHRoaXMuaXNTaG93LnNldChmYWxzZSk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdpbnZpc2libGUnKTtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpbnZpc2libGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdygpIHtcbiAgICB0aGlzLmlzU2hvdy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdpbnZpc2libGUnKTtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZpc2libGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTY3JvbGwoKSB8fCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -12,8 +12,8 @@ class LibsUiComponentsMinimapDirective {
12
12
  onDestroy = new Subject();
13
13
  // #endregion
14
14
  // #region INPUT
15
- classNameFlagElementScale = input('libs-ui-minimap-flag-element-scale', { transform: val => val ?? 'libs-ui-minimap-flag-element-scale' });
16
- timerStartDrawMinimap = input(250, { transform: val => val ?? 250 });
15
+ classNameFlagElementScale = input('libs-ui-minimap-flag-element-scale', { transform: (val) => val ?? 'libs-ui-minimap-flag-element-scale' });
16
+ timerStartDrawMinimap = input(250, { transform: (val) => val ?? 250 });
17
17
  elementScroll = input();
18
18
  styleRectangleElement = input();
19
19
  styleImageElement = input();
@@ -33,21 +33,26 @@ class LibsUiComponentsMinimapDirective {
33
33
  this.containerElement?.remove();
34
34
  observer.disconnect();
35
35
  });
36
- timer(this.timerStartDrawMinimap()).pipe(tap(() => {
36
+ timer(this.timerStartDrawMinimap())
37
+ .pipe(tap(() => {
37
38
  this.imgElementInitStyleAndAddToBody();
38
39
  this.viewPortElementInitStyleAndAddToImgElement();
39
40
  const rectImage = this.imgElement.getBoundingClientRect();
40
41
  this.setPositionRectangle(rectImage, { clientX: rectImage.x, clientY: rectImage.y });
41
42
  this.updateMiniMap();
42
- this.outFunctionControls.emit({
43
- show: this.show.bind(this),
44
- hidden: this.hidden.bind(this),
45
- toggle: this.toggle.bind(this)
46
- });
43
+ this.outFunctionControls.emit(this.FunctionsControl);
47
44
  this.initEvent();
48
- }), takeUntil(this.onDestroy)).subscribe();
45
+ }), takeUntil(this.onDestroy))
46
+ .subscribe();
49
47
  }
50
48
  // #region FUNCTIONS
49
+ get FunctionsControl() {
50
+ return {
51
+ show: this.show.bind(this),
52
+ hidden: this.hidden.bind(this),
53
+ toggle: this.toggle.bind(this),
54
+ };
55
+ }
51
56
  imgElementInitStyleAndAddToBody() {
52
57
  const rectElement = this.Element.getBoundingClientRect();
53
58
  this.containerElement.classList.add('fixed', 'flex', 'invisible', 'libs-ui-directive-minimap-container', 'select-none');
@@ -58,7 +63,7 @@ class LibsUiComponentsMinimapDirective {
58
63
  border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,
59
64
  borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,
60
65
  width: `${this.styleImageElement()?.width ?? '198'}px`,
61
- height: `${this.styleImageElement()?.height ?? '108'}px`
66
+ height: `${this.styleImageElement()?.height ?? '108'}px`,
62
67
  }, this.renderer2);
63
68
  this.styleRectTopBottomElement(rectElement);
64
69
  this.styleRectLeftRightElement(rectElement);
@@ -72,7 +77,7 @@ class LibsUiComponentsMinimapDirective {
72
77
  background: `${this.styleRectangleElement()?.background ?? 'transparent'}`,
73
78
  border: `${this.styleRectangleElement()?.border ?? 'none'}`,
74
79
  borderRadius: `${this.styleRectangleElement()?.borderRadius ?? '0'}`,
75
- cursor: 'grab'
80
+ cursor: 'grab',
76
81
  }, this.renderer2);
77
82
  this.containerElement.appendChild(this.viewPortElement);
78
83
  }
@@ -99,7 +104,7 @@ class LibsUiComponentsMinimapDirective {
99
104
  if (event.type === 'scroll') {
100
105
  event = {
101
106
  clientX: this.Element.scrollLeft * ratioX + rectImage.left + rectViewPort.width / 2,
102
- clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2
107
+ clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2,
103
108
  };
104
109
  this.setPositionRectangle(rectImage, event);
105
110
  return;
@@ -116,12 +121,16 @@ class LibsUiComponentsMinimapDirective {
116
121
  preEvent = event;
117
122
  this.Element.scroll({
118
123
  left: this.Element.scrollLeft + distanceX,
119
- top: this.Element.scrollTop + distanceY
124
+ top: this.Element.scrollTop + distanceY,
120
125
  });
121
126
  };
122
127
  getDragEventByElement({ elementMouseDown: this.viewPortElement, elementMouseMove: this.viewPortElement, isStartWithMouseDownEvent: true, onDestroy: this.onDestroy }).subscribe(handlerScrollElement);
123
- fromEvent(this.Element, 'scroll').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe((event) => handlerScrollElement(event));
124
- fromEvent(window, 'resize').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(this.updateMiniMap.bind(this));
128
+ fromEvent(this.Element, 'scroll')
129
+ .pipe(tap((event) => event.stopPropagation()), takeUntil(this.onDestroy))
130
+ .subscribe((event) => handlerScrollElement(event));
131
+ fromEvent(window, 'resize')
132
+ .pipe(tap((event) => event.stopPropagation()), takeUntil(this.onDestroy))
133
+ .subscribe(this.updateMiniMap.bind(this));
125
134
  }
126
135
  getRatio() {
127
136
  const rectContainer = this.containerElement.getBoundingClientRect();
@@ -134,7 +143,7 @@ class LibsUiComponentsMinimapDirective {
134
143
  const elementScale = this.Element.getElementsByClassName(this.classNameFlagElementScale())?.[0];
135
144
  if (elementScale && getComputedStyle(elementScale).transform) {
136
145
  const matrix = getComputedStyle(this.Element.getElementsByClassName(this.classNameFlagElementScale())[0]).transform;
137
- const matrixArray = matrix.replace("matrix(", "").split(",");
146
+ const matrixArray = matrix.replace('matrix(', '').split(',');
138
147
  console.log('matrixArray', matrixArray);
139
148
  scaleX = parseFloat(matrixArray[0]); // convert from string to number
140
149
  scaleY = parseFloat(matrixArray[3]);
@@ -189,7 +198,7 @@ class LibsUiComponentsMinimapDirective {
189
198
  const rectImage = this.imgElement.getBoundingClientRect();
190
199
  const event = {
191
200
  clientX: this.Element.scrollLeft * ratioX + rectImage.left + viewPortElement.width / 2,
192
- clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2
201
+ clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2,
193
202
  };
194
203
  nodeClone.style.transform = `scale(${ratioX},${ratioY}) translate(-${translateX}px,-${translateY}px)`;
195
204
  this.setPositionRectangle(rectImage, event);
@@ -226,7 +235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
226
235
  type: Directive,
227
236
  args: [{
228
237
  // eslint-disable-next-line @angular-eslint/directive-selector
229
- selector: "[LibsUiComponentsMinimapDirective]",
238
+ selector: '[LibsUiComponentsMinimapDirective]',
230
239
  standalone: true,
231
240
  }]
232
241
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"libs-ui-components-minimap.mjs","sources":["../../../../../libs-ui/components/minimap/src/minimap.directive.ts","../../../../../libs-ui/components/minimap/src/libs-ui-components-minimap.ts"],"sourcesContent":["import { AfterViewInit, Directive, ElementRef, inject, input, OnDestroy, output, Renderer2, signal } from '@angular/core';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { getDragEventByElement, setStylesElement } from '@libs-ui/utils';\nimport { fromEvent, Subject, takeUntil, tap, timer } from 'rxjs';\nimport { IMiniMapFunctionControl, IMiniMapStyleConfig } from './minimap.interface';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: \"[LibsUiComponentsMinimapDirective]\",\n standalone: true,\n})\nexport class LibsUiComponentsMinimapDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private isShow = signal<boolean>(false);\n private containerElement: HTMLElement = document.createElement('DIV');\n private imgElement: HTMLElement = document.createElement('DIV');\n private viewPortElement = document.createElement('DIV');\n private onDestroy = new Subject<void>();\n // #endregion\n\n // #region INPUT\n readonly classNameFlagElementScale = input<string, string | undefined>('libs-ui-minimap-flag-element-scale', { transform: val => val ?? 'libs-ui-minimap-flag-element-scale' });\n readonly timerStartDrawMinimap = input<number, number | undefined>(250, { transform: val => val ?? 250 });\n readonly elementScroll = input<HTMLElement>();\n readonly styleRectangleElement = input<IMiniMapStyleConfig>();\n readonly styleImageElement = input<IMiniMapStyleConfig>();\n // #endregion\n\n // #region OUTPUT\n readonly outFunctionControls = output<IMiniMapFunctionControl>();\n // #endregion\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n private renderer2 = inject(Renderer2);\n // #endregion\n\n ngAfterViewInit(): void {\n const config = { attributes: true, childList: true, subtree: true };\n const observer = new MutationObserver(this.updateMiniMap.bind(this));\n\n observer.observe(this.Element, config);\n this.onDestroy.subscribe(() => {\n this.containerElement?.remove();\n observer.disconnect();\n });\n\n timer(this.timerStartDrawMinimap()).pipe(tap(() => {\n this.imgElementInitStyleAndAddToBody();\n this.viewPortElementInitStyleAndAddToImgElement();\n\n const rectImage = this.imgElement.getBoundingClientRect();\n\n this.setPositionRectangle(rectImage, { clientX: rectImage.x, clientY: rectImage.y });\n this.updateMiniMap();\n this.outFunctionControls.emit({\n show: this.show.bind(this),\n hidden: this.hidden.bind(this),\n toggle: this.toggle.bind(this)\n });\n this.initEvent();\n }),\n takeUntil(this.onDestroy)).subscribe();\n }\n\n // #region FUNCTIONS\n private imgElementInitStyleAndAddToBody() {\n const rectElement = this.Element.getBoundingClientRect();\n\n this.containerElement.classList.add('fixed', 'flex', 'invisible', 'libs-ui-directive-minimap-container','select-none');\n this.imgElement.classList.add('relative', 'w-full', 'h-full', 'overflow-hidden');\n setStylesElement(this.containerElement, {\n zIndex: `${this.styleImageElement()?.zIndex ?? '1300'}`,\n background: `${this.styleImageElement()?.background ?? 'white'}`,\n border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,\n borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,\n width: `${this.styleImageElement()?.width ?? '198'}px`,\n height: `${this.styleImageElement()?.height ?? '108'}px`\n }, this.renderer2);\n this.styleRectTopBottomElement(rectElement);\n this.styleRectLeftRightElement(rectElement);\n this.containerElement.append(this.imgElement);\n document.body.appendChild(this.containerElement);\n }\n\n private viewPortElementInitStyleAndAddToImgElement() {\n this.viewPortElement.classList.add('fixed', 'libs-ui-border-primary-general', 'invisible', 'libs-ui-directive-minimap-rectangle');\n setStylesElement(this.viewPortElement as unknown as HTMLElement, {\n zIndex: `${this.styleRectangleElement()?.zIndex ?? '1301'}`,\n background: `${this.styleRectangleElement()?.background ?? 'transparent'}`,\n border: `${this.styleRectangleElement()?.border ?? 'none'}`,\n borderRadius: `${this.styleRectangleElement()?.borderRadius ?? '0'}`,\n cursor: 'grab'\n }, this.renderer2);\n this.containerElement.appendChild(this.viewPortElement);\n }\n\n private styleRectTopBottomElement(rectElement: DOMRect) {\n if (this.styleImageElement()?.bottom) {\n this.containerElement.style.bottom = `${this.styleImageElement()?.bottom}px`;\n\n return;\n }\n this.containerElement.style.top = `${this.styleImageElement()?.top ?? rectElement.top}px`;\n }\n private styleRectLeftRightElement(rectElement: DOMRect) {\n if (this.styleImageElement()?.right) {\n this.containerElement.style.right = `${this.styleImageElement()?.right}px`;\n\n return;\n }\n this.containerElement.style.left = `${this.styleImageElement()?.left ?? rectElement.left}px`;\n }\n\n private initEvent() {\n let preEvent: MouseEvent;\n const handlerScrollElement = (event: MouseEvent) => {\n const rectViewPort = this.viewPortElement.getBoundingClientRect();\n const rectImage = this.imgElement.getBoundingClientRect();\n const { ratioX, ratioY } = this.getRatio();\n\n if (event.type === 'scroll') {\n event = {\n clientX: this.Element.scrollLeft * ratioX + rectImage.left + rectViewPort.width / 2,\n clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2\n } as MouseEvent;\n this.setPositionRectangle(rectImage, event);\n\n return;\n }\n if (event.type === 'mousedown') {\n preEvent = event;\n\n return;\n }\n if (!preEvent) {\n return;\n }\n\n const distanceX = (event.clientX - preEvent.clientX) / ratioX;\n const distanceY = (event.clientY - preEvent.clientY) / ratioY;\n\n preEvent = event;\n this.Element.scroll({\n left: this.Element.scrollLeft + distanceX,\n top: this.Element.scrollTop + distanceY\n });\n };\n\n getDragEventByElement({ elementMouseDown: this.viewPortElement, elementMouseMove: this.viewPortElement,isStartWithMouseDownEvent:true, onDestroy: this.onDestroy }).subscribe(handlerScrollElement);\n fromEvent<Event>(this.Element, 'scroll').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe((event) => handlerScrollElement(event as MouseEvent));\n fromEvent<Event>(window, 'resize').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(this.updateMiniMap.bind(this));\n }\n\n private getRatio() {\n const rectContainer = this.containerElement.getBoundingClientRect();\n const ratioX = rectContainer.width / this.Element.scrollWidth;\n const ratioY = rectContainer.height / this.Element.scrollHeight;\n\n return { ratioX: ratioX, ratioY: ratioY };\n }\n private getScaleElement() {\n let { scaleX, scaleY } = { scaleX: 1, scaleY: 1 };\n const elementScale = this.Element.getElementsByClassName(this.classNameFlagElementScale())?.[0] as HTMLElement;\n\n if (elementScale && getComputedStyle(elementScale).transform) {\n const matrix = getComputedStyle(this.Element.getElementsByClassName(this.classNameFlagElementScale())[0]).transform;\n const matrixArray = matrix.replace(\"matrix(\", \"\").split(\",\");\n console.log('matrixArray',matrixArray);\n\n scaleX = parseFloat(matrixArray[0]); // convert from string to number\n scaleY = parseFloat(matrixArray[3]);\n }\n\n return { scaleX, scaleY, elementScale };\n }\n\n private reverseMultiplication(avg1: number, avg2: number) {\n if (avg2 <= 1) {\n return avg1 * avg2;\n }\n\n return avg1 / avg2;\n }\n\n private setPositionRectangle(rectImage: IBoundingClientRect, mousePosition: { clientX: number, clientY: number }) {\n const { ratioX, ratioY } = this.getRatio();\n const { scaleX, scaleY } = this.getScaleElement();\n\n const width = this.Element.clientWidth * this.reverseMultiplication(ratioX, scaleX);\n const height = this.Element.clientHeight * this.reverseMultiplication(ratioY, scaleY);\n let leftSvg = mousePosition.clientX - width / 2;\n let topSvg = mousePosition.clientY - height / 2;\n\n if (leftSvg < rectImage.left) {\n leftSvg = rectImage.left;\n }\n if (leftSvg + width >= rectImage.left + rectImage.width) {\n leftSvg = rectImage.left + rectImage.width - width;\n }\n if (topSvg < rectImage.top) {\n topSvg = rectImage.top;\n }\n if (topSvg + height >= rectImage.top + rectImage.height) {\n topSvg = rectImage.top + rectImage.height - height;\n }\n this.viewPortElement.style.left = `${leftSvg}px`;\n this.viewPortElement.style.top = `${topSvg}px`;\n this.viewPortElement.style.width = `${width}px`;\n this.viewPortElement.style.height = `${Math.round(height)}px`;\n }\n\n private updateMiniMap() {\n this.imgElement.firstElementChild?.remove();\n let { ratioX, ratioY } = this.getRatio();\n const nodeClone = this.Element.cloneNode(true) as HTMLElement;\n nodeClone.style.width = `${this.Element.scrollWidth}px`;\n nodeClone.style.height = `${this.Element.scrollHeight}px`;\n const { scaleX, scaleY } = this.getScaleElement();\n\n ratioX = this.reverseMultiplication(ratioX, scaleX);\n ratioY = this.reverseMultiplication(ratioY, scaleY);\n nodeClone.style.transform = `scale(${ratioX},${ratioY})`;\n nodeClone.classList.add('overflow-unset','select-none','pointer-events-none');\n this.imgElement.append(nodeClone);\n\n const translateX = (nodeClone.getBoundingClientRect().left - this.imgElement.getBoundingClientRect().left) / ratioX;\n const translateY = (nodeClone.getBoundingClientRect().top - this.imgElement.getBoundingClientRect().top) / ratioY;\n const viewPortElement = this.viewPortElement.getBoundingClientRect();\n const rectImage = this.imgElement.getBoundingClientRect();\n const event = {\n clientX: this.Element.scrollLeft * ratioX + rectImage.left + viewPortElement.width / 2,\n clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2\n } as MouseEvent;\n\n nodeClone.style.transform = `scale(${ratioX},${ratioY}) translate(-${translateX}px,-${translateY}px)`;\n this.setPositionRectangle(rectImage, event);\n }\n\n private toggle() {\n if (this.isShow()) {\n this.hidden();\n\n return;\n }\n\n this.show();\n }\n\n private hidden() {\n this.isShow.set(false);\n this.containerElement?.classList.add('invisible');\n this.viewPortElement.classList.add('invisible');\n }\n\n private show() {\n this.isShow.set(true);\n this.containerElement?.classList.remove('invisible');\n this.viewPortElement.classList.remove('invisible');\n }\n\n private get Element(): HTMLElement {\n return this.elementScroll() || this.elementRef.nativeElement;\n }\n\n // #endregion\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libs-ui-components-minimap.mjs","sources":["../../../../../libs-ui/components/minimap/src/minimap.directive.ts","../../../../../libs-ui/components/minimap/src/libs-ui-components-minimap.ts"],"sourcesContent":["import { AfterViewInit, Directive, ElementRef, inject, input, OnDestroy, output, Renderer2, signal } from '@angular/core';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { getDragEventByElement, setStylesElement } from '@libs-ui/utils';\nimport { fromEvent, Subject, takeUntil, tap, timer } from 'rxjs';\nimport { IMiniMapFunctionControl, IMiniMapStyleConfig } from './minimap.interface';\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsMinimapDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsMinimapDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private isShow = signal<boolean>(false);\n private containerElement: HTMLElement = document.createElement('DIV');\n private imgElement: HTMLElement = document.createElement('DIV');\n private viewPortElement = document.createElement('DIV');\n private onDestroy = new Subject<void>();\n // #endregion\n\n // #region INPUT\n readonly classNameFlagElementScale = input<string, string | undefined>('libs-ui-minimap-flag-element-scale', { transform: (val) => val ?? 'libs-ui-minimap-flag-element-scale' });\n readonly timerStartDrawMinimap = input<number, number | undefined>(250, { transform: (val) => val ?? 250 });\n readonly elementScroll = input<HTMLElement>();\n readonly styleRectangleElement = input<IMiniMapStyleConfig>();\n readonly styleImageElement = input<IMiniMapStyleConfig>();\n // #endregion\n\n // #region OUTPUT\n readonly outFunctionControls = output<IMiniMapFunctionControl>();\n // #endregion\n\n // #region INJECT\n private elementRef = inject(ElementRef);\n private renderer2 = inject(Renderer2);\n // #endregion\n\n ngAfterViewInit(): void {\n const config = { attributes: true, childList: true, subtree: true };\n const observer = new MutationObserver(this.updateMiniMap.bind(this));\n\n observer.observe(this.Element, config);\n this.onDestroy.subscribe(() => {\n this.containerElement?.remove();\n observer.disconnect();\n });\n\n timer(this.timerStartDrawMinimap())\n .pipe(\n tap(() => {\n this.imgElementInitStyleAndAddToBody();\n this.viewPortElementInitStyleAndAddToImgElement();\n\n const rectImage = this.imgElement.getBoundingClientRect();\n\n this.setPositionRectangle(rectImage, { clientX: rectImage.x, clientY: rectImage.y });\n this.updateMiniMap();\n this.outFunctionControls.emit(this.FunctionsControl);\n this.initEvent();\n }),\n takeUntil(this.onDestroy)\n )\n .subscribe();\n }\n\n // #region FUNCTIONS\n public get FunctionsControl(): IMiniMapFunctionControl {\n return {\n show: this.show.bind(this),\n hidden: this.hidden.bind(this),\n toggle: this.toggle.bind(this),\n };\n }\n\n private imgElementInitStyleAndAddToBody() {\n const rectElement = this.Element.getBoundingClientRect();\n\n this.containerElement.classList.add('fixed', 'flex', 'invisible', 'libs-ui-directive-minimap-container', 'select-none');\n this.imgElement.classList.add('relative', 'w-full', 'h-full', 'overflow-hidden');\n setStylesElement(\n this.containerElement,\n {\n zIndex: `${this.styleImageElement()?.zIndex ?? '1300'}`,\n background: `${this.styleImageElement()?.background ?? 'white'}`,\n border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,\n borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,\n width: `${this.styleImageElement()?.width ?? '198'}px`,\n height: `${this.styleImageElement()?.height ?? '108'}px`,\n },\n this.renderer2\n );\n this.styleRectTopBottomElement(rectElement);\n this.styleRectLeftRightElement(rectElement);\n this.containerElement.append(this.imgElement);\n document.body.appendChild(this.containerElement);\n }\n\n private viewPortElementInitStyleAndAddToImgElement() {\n this.viewPortElement.classList.add('fixed', 'libs-ui-border-primary-general', 'invisible', 'libs-ui-directive-minimap-rectangle');\n setStylesElement(\n this.viewPortElement as unknown as HTMLElement,\n {\n zIndex: `${this.styleRectangleElement()?.zIndex ?? '1301'}`,\n background: `${this.styleRectangleElement()?.background ?? 'transparent'}`,\n border: `${this.styleRectangleElement()?.border ?? 'none'}`,\n borderRadius: `${this.styleRectangleElement()?.borderRadius ?? '0'}`,\n cursor: 'grab',\n },\n this.renderer2\n );\n this.containerElement.appendChild(this.viewPortElement);\n }\n\n private styleRectTopBottomElement(rectElement: DOMRect) {\n if (this.styleImageElement()?.bottom) {\n this.containerElement.style.bottom = `${this.styleImageElement()?.bottom}px`;\n\n return;\n }\n this.containerElement.style.top = `${this.styleImageElement()?.top ?? rectElement.top}px`;\n }\n private styleRectLeftRightElement(rectElement: DOMRect) {\n if (this.styleImageElement()?.right) {\n this.containerElement.style.right = `${this.styleImageElement()?.right}px`;\n\n return;\n }\n this.containerElement.style.left = `${this.styleImageElement()?.left ?? rectElement.left}px`;\n }\n\n private initEvent() {\n let preEvent: MouseEvent;\n const handlerScrollElement = (event: MouseEvent) => {\n const rectViewPort = this.viewPortElement.getBoundingClientRect();\n const rectImage = this.imgElement.getBoundingClientRect();\n const { ratioX, ratioY } = this.getRatio();\n\n if (event.type === 'scroll') {\n event = {\n clientX: this.Element.scrollLeft * ratioX + rectImage.left + rectViewPort.width / 2,\n clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2,\n } as MouseEvent;\n this.setPositionRectangle(rectImage, event);\n\n return;\n }\n if (event.type === 'mousedown') {\n preEvent = event;\n\n return;\n }\n if (!preEvent) {\n return;\n }\n\n const distanceX = (event.clientX - preEvent.clientX) / ratioX;\n const distanceY = (event.clientY - preEvent.clientY) / ratioY;\n\n preEvent = event;\n this.Element.scroll({\n left: this.Element.scrollLeft + distanceX,\n top: this.Element.scrollTop + distanceY,\n });\n };\n\n getDragEventByElement({ elementMouseDown: this.viewPortElement, elementMouseMove: this.viewPortElement, isStartWithMouseDownEvent: true, onDestroy: this.onDestroy }).subscribe(handlerScrollElement);\n fromEvent<Event>(this.Element, 'scroll')\n .pipe(\n tap((event) => event.stopPropagation()),\n takeUntil(this.onDestroy)\n )\n .subscribe((event) => handlerScrollElement(event as MouseEvent));\n fromEvent<Event>(window, 'resize')\n .pipe(\n tap((event) => event.stopPropagation()),\n takeUntil(this.onDestroy)\n )\n .subscribe(this.updateMiniMap.bind(this));\n }\n\n private getRatio() {\n const rectContainer = this.containerElement.getBoundingClientRect();\n const ratioX = rectContainer.width / this.Element.scrollWidth;\n const ratioY = rectContainer.height / this.Element.scrollHeight;\n\n return { ratioX: ratioX, ratioY: ratioY };\n }\n private getScaleElement() {\n let { scaleX, scaleY } = { scaleX: 1, scaleY: 1 };\n const elementScale = this.Element.getElementsByClassName(this.classNameFlagElementScale())?.[0] as HTMLElement;\n\n if (elementScale && getComputedStyle(elementScale).transform) {\n const matrix = getComputedStyle(this.Element.getElementsByClassName(this.classNameFlagElementScale())[0]).transform;\n const matrixArray = matrix.replace('matrix(', '').split(',');\n console.log('matrixArray', matrixArray);\n\n scaleX = parseFloat(matrixArray[0]); // convert from string to number\n scaleY = parseFloat(matrixArray[3]);\n }\n\n return { scaleX, scaleY, elementScale };\n }\n\n private reverseMultiplication(avg1: number, avg2: number) {\n if (avg2 <= 1) {\n return avg1 * avg2;\n }\n\n return avg1 / avg2;\n }\n\n private setPositionRectangle(rectImage: IBoundingClientRect, mousePosition: { clientX: number; clientY: number }) {\n const { ratioX, ratioY } = this.getRatio();\n const { scaleX, scaleY } = this.getScaleElement();\n\n const width = this.Element.clientWidth * this.reverseMultiplication(ratioX, scaleX);\n const height = this.Element.clientHeight * this.reverseMultiplication(ratioY, scaleY);\n let leftSvg = mousePosition.clientX - width / 2;\n let topSvg = mousePosition.clientY - height / 2;\n\n if (leftSvg < rectImage.left) {\n leftSvg = rectImage.left;\n }\n if (leftSvg + width >= rectImage.left + rectImage.width) {\n leftSvg = rectImage.left + rectImage.width - width;\n }\n if (topSvg < rectImage.top) {\n topSvg = rectImage.top;\n }\n if (topSvg + height >= rectImage.top + rectImage.height) {\n topSvg = rectImage.top + rectImage.height - height;\n }\n this.viewPortElement.style.left = `${leftSvg}px`;\n this.viewPortElement.style.top = `${topSvg}px`;\n this.viewPortElement.style.width = `${width}px`;\n this.viewPortElement.style.height = `${Math.round(height)}px`;\n }\n\n private updateMiniMap() {\n this.imgElement.firstElementChild?.remove();\n let { ratioX, ratioY } = this.getRatio();\n const nodeClone = this.Element.cloneNode(true) as HTMLElement;\n nodeClone.style.width = `${this.Element.scrollWidth}px`;\n nodeClone.style.height = `${this.Element.scrollHeight}px`;\n const { scaleX, scaleY } = this.getScaleElement();\n\n ratioX = this.reverseMultiplication(ratioX, scaleX);\n ratioY = this.reverseMultiplication(ratioY, scaleY);\n nodeClone.style.transform = `scale(${ratioX},${ratioY})`;\n nodeClone.classList.add('overflow-unset', 'select-none', 'pointer-events-none');\n this.imgElement.append(nodeClone);\n\n const translateX = (nodeClone.getBoundingClientRect().left - this.imgElement.getBoundingClientRect().left) / ratioX;\n const translateY = (nodeClone.getBoundingClientRect().top - this.imgElement.getBoundingClientRect().top) / ratioY;\n const viewPortElement = this.viewPortElement.getBoundingClientRect();\n const rectImage = this.imgElement.getBoundingClientRect();\n const event = {\n clientX: this.Element.scrollLeft * ratioX + rectImage.left + viewPortElement.width / 2,\n clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2,\n } as MouseEvent;\n\n nodeClone.style.transform = `scale(${ratioX},${ratioY}) translate(-${translateX}px,-${translateY}px)`;\n this.setPositionRectangle(rectImage, event);\n }\n\n private toggle() {\n if (this.isShow()) {\n this.hidden();\n\n return;\n }\n\n this.show();\n }\n\n private hidden() {\n this.isShow.set(false);\n this.containerElement?.classList.add('invisible');\n this.viewPortElement.classList.add('invisible');\n }\n\n private show() {\n this.isShow.set(true);\n this.containerElement?.classList.remove('invisible');\n this.viewPortElement.classList.remove('invisible');\n }\n\n private get Element(): HTMLElement {\n return this.elementScroll() || this.elementRef.nativeElement;\n }\n\n // #endregion\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export declare class LibsUiComponentsMinimapDirective implements AfterViewInit,
16
16
  private elementRef;
17
17
  private renderer2;
18
18
  ngAfterViewInit(): void;
19
+ get FunctionsControl(): IMiniMapFunctionControl;
19
20
  private imgElementInitStyleAndAddToBody;
20
21
  private viewPortElementInitStyleAndAddToImgElement;
21
22
  private styleRectTopBottomElement;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@libs-ui/components-minimap",
3
- "version": "0.2.304",
3
+ "version": "0.2.306-10",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/interfaces-types": "0.2.304",
7
- "@libs-ui/utils": "0.2.304",
6
+ "@libs-ui/interfaces-types": "0.2.306-10",
7
+ "@libs-ui/utils": "0.2.306-10",
8
8
  "rxjs": "~7.8.0"
9
9
  },
10
10
  "sideEffects": false,