@libs-ui/components-minimap 0.2.356-41 → 0.2.356-43

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
@@ -1,39 +1,39 @@
1
1
  # @libs-ui/components-minimap
2
2
 
3
- > Thêm bản đồ thu nhỏ (Minimap) cho các vùng chứa có nội dung lớn hoặc cuộn.
3
+ > Directive tạo bản đồ thu nhỏ (minimap) cho các vùng nội dung lớn, hỗ trợ điều hướng trực quan và đồng bộ cuộn hai chiều.
4
4
 
5
5
  ## Giới thiệu
6
6
 
7
- `LibsUiComponentsMinimapDirective` là một standalone directive giúp tạo ra một trải nghiệm chuyển hướng trực quan cho người dùng trong các bảng vẽ (canvas), đồ hoặc các vùng nội dung rộng lớn. tự động theo dõi thay đổi trong DOM đồng bộ hóa vị trí cuộn giữa nội dung chính bản đồ thu nhỏ.
7
+ `LibsUiComponentsMinimapDirective` là một standalone directive Angular giúp tạo ra một minimap nổi (floating) hiển thị toàn bộ nội dung được thu nhỏ theo tỷ lệ, đồng thời cho phép người dùng kéo viewport trên minimap để cuộn nội dung chính. Directive sử dụng `MutationObserver` để tự động cập nhật khi DOM thay đổi và lắng nghe sự kiện `scroll` cùng `resize` để đồng bộ trạng thái liên tục.
8
8
 
9
- ### Tính năng
9
+ ## Tính năng
10
10
 
11
- - ✅ **Standalone Directive**: Dễ dàng tích hợp vào bất kỳ phần tử nào thuộc tính cuộn.
12
- - ✅ **Đồng bộ hai chiều**: Cuộn nội dung chính cập nhật Minimap, kéo viewport trên Minimap cập nhật nội dung chính.
13
- - ✅ **Theo dõi thay đổi**: Sử dụng `MutationObserver` để tự động cập nhật hình ảnh trên Minimap khi nội dung thay đổi.
14
- - ✅ **Tùy biến cao**: Cho phép cấu hình vị trí, kích thước, màu sắc z-index của cả Minimap Viewport.
15
- - ✅ **Hỗ trợ Scale**: Khả năng nhận diện tỷ lệ phóng to/thu nhỏ của nội dung để hiển thị chính xác.
11
+ - ✅ **Standalone Directive**: Tích hợp trực tiếp bằng attribute selector, không cần module.
12
+ - ✅ **Đồng bộ hai chiều**: Cuộn nội dung chính cập nhật viewport trên minimap, kéo viewport trên minimap cuộn nội dung chính.
13
+ - ✅ **Tự động cập nhật DOM**: Dùng `MutationObserver` để phát hiện thay đổi cấu trúc hoặc thuộc tính vẽ lại minimap.
14
+ - ✅ **Hỗ trợ Scale Transform**: Nhận diện tỷ lệ phóng to/thu nhỏ của nội dung (qua CSS transform matrix) để tính toán viewport chính xác.
15
+ - ✅ **Tùy biến cao**: Cấu hình vị trí (top/bottom/left/right), kích thước, border, borderRadius, background, z-index cho cả khung minimap khung viewport.
16
+ - ✅ **Function Controls**: Cung cấp API `show()`, `hidden()`, `toggle()` để điều khiển minimap từ code.
17
+ - ✅ **Tự dọn bộ nhớ**: Dùng `DestroyRef` + `takeUntilDestroyed` và `MutationObserver.disconnect()` khi component destroy.
16
18
 
17
19
  ## Khi nào sử dụng
18
20
 
19
- - Khi có các vùng chứa nội dung lớn vượt quá kích thước màn hình (sơ đồ, bản đồ văn phòng, editor đồ họa).
20
- - Khi người dùng cần cái nhìn tổng quan về cấu trúc nội dung và khả năng di chuyển nhanh chóng đến các vùng cụ thể.
21
- - Thay thế hoặc hỗ trợ cho thanh cuộn truyền thống trên các giao diện phức tạp.
21
+ - Khi có các vùng chứa nội dung lớn vượt quá kích thước màn hình (sơ đồ, bản đồ văn phòng, diagram editor, canvas đồ họa).
22
+ - Khi người dùng cần cái nhìn tổng quan về cấu trúc nội dung và khả năng di chuyển nhanh đến các vùng cụ thể.
23
+ - Thay thế hoặc hỗ trợ cho thanh cuộn truyền thống trên các giao diện phức tạp, nhiều node.
24
+ - Khi cần tích hợp điều hướng vào các màn hình diagram (flow chart, org chart, network topology).
22
25
 
23
26
  ## Cài đặt
24
27
 
25
28
  ```bash
26
- # npm
27
29
  npm install @libs-ui/components-minimap
28
-
29
- # yarn
30
- yarn add @libs-ui/components-minimap
31
30
  ```
32
31
 
33
32
  ## Import
34
33
 
35
34
  ```typescript
36
35
  import { LibsUiComponentsMinimapDirective } from '@libs-ui/components-minimap';
36
+ import { IMiniMapFunctionControl, IMiniMapStyleConfig } from '@libs-ui/components-minimap';
37
37
 
38
38
  @Component({
39
39
  standalone: true,
@@ -43,96 +43,290 @@ import { LibsUiComponentsMinimapDirective } from '@libs-ui/components-minimap';
43
43
  export class YourComponent {}
44
44
  ```
45
45
 
46
- ## Ví dụ
46
+ ## Ví dụ sử dụng
47
+
48
+ ### Ví dụ 1 — Cơ bản
47
49
 
48
- ### bản
50
+ Gán directive vào bất kỳ phần tử nào có `overflow: auto` hoặc `overflow: scroll`.
49
51
 
50
- ```html
51
- <div
52
- class="w-full h-[500px] overflow-auto"
53
- LibsUiComponentsMinimapDirective>
54
- <!-- Nội dung lớn ở đây -->
55
- <div class="w-[2000px] h-[2000px]">...</div>
56
- </div>
52
+ ```typescript
53
+ // your.component.ts
54
+ import { LibsUiComponentsMinimapDirective } from '@libs-ui/components-minimap';
55
+
56
+ @Component({
57
+ standalone: true,
58
+ changeDetection: ChangeDetectionStrategy.OnPush,
59
+ imports: [LibsUiComponentsMinimapDirective],
60
+ template: `
61
+ <div
62
+ class="w-full h-[500px] overflow-auto border rounded-lg"
63
+ LibsUiComponentsMinimapDirective>
64
+ <div class="w-[3000px] h-[3000px] p-10 bg-gray-50">
65
+ <p class="text-2xl font-bold">Nội dung lớn</p>
66
+ </div>
67
+ </div>
68
+ `,
69
+ })
70
+ export class BasicMinimapComponent {}
57
71
  ```
58
72
 
59
- ### Với cấu hình StylesControls
73
+ ### dụ 2 Tùy chỉnh vị trí style, điều khiển qua FunctionControl
60
74
 
61
- ```html
62
- <div
63
- class="scroll-container"
64
- LibsUiComponentsMinimapDirective
65
- [styleImageElement]="{ bottom: 20, right: 20, width: 200, height: 120 }"
66
- [styleRectangleElement]="{ border: '2px solid #3b82f6' }"
67
- (outFunctionControls)="controls = $event">
68
- ...
69
- </div>
75
+ Đặt minimap ở góc dưới bên phải, tùy chỉnh màu viền viewport, và lấy controls để ẩn/hiện từ nút bấm.
76
+
77
+ ```typescript
78
+ // diagram.component.ts
79
+ import { Component, ChangeDetectionStrategy, signal } from '@angular/core';
80
+ import { LibsUiComponentsMinimapDirective, IMiniMapFunctionControl } from '@libs-ui/components-minimap';
70
81
 
71
- <button (click)="controls.toggle()">Bật/Tắt Minimap</button>
82
+ @Component({
83
+ standalone: true,
84
+ changeDetection: ChangeDetectionStrategy.OnPush,
85
+ imports: [LibsUiComponentsMinimapDirective],
86
+ template: `
87
+ <div class="flex gap-2 mb-3">
88
+ <button class="px-4 py-2 bg-blue-600 text-white rounded text-sm" (click)="handlerShow($event)">
89
+ Hiện Minimap
90
+ </button>
91
+ <button class="px-4 py-2 border border-blue-600 text-blue-600 rounded text-sm" (click)="handlerHide($event)">
92
+ Ẩn Minimap
93
+ </button>
94
+ <button class="px-4 py-2 border border-gray-300 rounded text-sm" (click)="handlerToggle($event)">
95
+ Toggle
96
+ </button>
97
+ </div>
98
+
99
+ <div
100
+ class="w-full h-[500px] overflow-auto border rounded-xl bg-black relative"
101
+ LibsUiComponentsMinimapDirective
102
+ [styleImageElement]="{ bottom: 20, right: 20, width: 220, height: 130, background: 'white', border: '1px solid #cbd5e1', zIndex: 10 }"
103
+ [styleRectangleElement]="{ border: '2px solid #3b82f6', background: 'rgba(59, 130, 246, 0.1)' }"
104
+ [minimapCloneBackground]="'white'"
105
+ [timerStartDrawMinimap]="300"
106
+ (outFunctionControls)="handlerControlsInit($event)">
107
+ <div class="w-[3000px] h-[3000px] p-10">
108
+ <div class="grid grid-cols-6 gap-10">
109
+ @for (item of items(); track item) {
110
+ <div class="h-64 bg-gray-800 rounded-2xl border border-dashed border-gray-600 flex items-center justify-center">
111
+ <span class="text-4xl font-black text-gray-500">{{ item }}</span>
112
+ </div>
113
+ }
114
+ </div>
115
+ </div>
116
+ </div>
117
+ `,
118
+ })
119
+ export class DiagramComponent {
120
+ protected items = signal([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
121
+ private minimapControls?: IMiniMapFunctionControl;
122
+
123
+ handlerControlsInit(controls: IMiniMapFunctionControl) {
124
+ this.minimapControls = controls;
125
+ this.minimapControls.show();
126
+ }
127
+
128
+ handlerShow(event: MouseEvent) {
129
+ event.stopPropagation();
130
+ this.minimapControls?.show();
131
+ }
132
+
133
+ handlerHide(event: MouseEvent) {
134
+ event.stopPropagation();
135
+ this.minimapControls?.hidden();
136
+ }
137
+
138
+ handlerToggle(event: MouseEvent) {
139
+ event.stopPropagation();
140
+ this.minimapControls?.toggle();
141
+ }
142
+ }
72
143
  ```
73
144
 
74
- ## API
145
+ ### Ví dụ 3 — Scroll theo phần tử khác (elementScroll)
75
146
 
76
- ### [LibsUiComponentsMinimapDirective]
147
+ Khi vùng cuộn thực tế là một phần tử khác với host element của directive.
148
+
149
+ ```typescript
150
+ // canvas-layout.component.ts
151
+ import { Component, ChangeDetectionStrategy, ViewChild, ElementRef } from '@angular/core';
152
+ import { LibsUiComponentsMinimapDirective, IMiniMapFunctionControl } from '@libs-ui/components-minimap';
77
153
 
78
- #### Inputs
154
+ @Component({
155
+ standalone: true,
156
+ changeDetection: ChangeDetectionStrategy.OnPush,
157
+ imports: [LibsUiComponentsMinimapDirective],
158
+ template: `
159
+ <div
160
+ LibsUiComponentsMinimapDirective
161
+ [elementScroll]="scrollContainer"
162
+ [styleImageElement]="{ top: 10, right: 10, width: 180, height: 100 }"
163
+ (outFunctionControls)="handlerControlsInit($event)">
164
+
165
+ <div #scrollContainer class="w-full h-[600px] overflow-auto border rounded">
166
+ <div class="w-[4000px] h-[4000px] bg-gray-50 p-8">
167
+ <p class="text-xl font-semibold">Canvas nội dung</p>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ `,
172
+ })
173
+ export class CanvasLayoutComponent {
174
+ @ViewChild('scrollContainer') scrollContainerRef!: ElementRef<HTMLElement>;
175
+ private minimapControls?: IMiniMapFunctionControl;
79
176
 
80
- | Property | Type | Default | Description |
81
- | ----------------------------- | --------------------- | -------------------------------------- | ---------------------------------------------------- |
82
- | `[elementScroll]` | `HTMLElement` | `Host Element` | Phần tử đích để theo dõi cuộn (nếu khác host). |
83
- | `[styleImageElement]` | `IMiniMapStyleConfig` | `undefined` | Cấu hình phong cách và vị trí cho khung Minimap. |
84
- | `[styleRectangleElement]` | `IMiniMapStyleConfig` | `undefined` | Cấu hình cho khung Viewport trên Minimap. |
85
- | `[timerStartDrawMinimap]` | `number` | `250` | Thời gian chờ (ms) trước khi bắt đầu vẽ Minimap. |
86
- | `[classNameFlagElementScale]` | `string` | `'libs-ui-minimap-flag-element-scale'` | Class name để xác định phần tử chứa scale transform. |
177
+ get scrollContainer(): HTMLElement {
178
+ return this.scrollContainerRef?.nativeElement;
179
+ }
87
180
 
88
- #### Outputs
181
+ handlerControlsInit(controls: IMiniMapFunctionControl) {
182
+ this.minimapControls = controls;
183
+ }
184
+ }
185
+ ```
89
186
 
90
- | Property | Type | Description |
91
- | ----------------------- | --------------------------------------- | ---------------------------------------------------- |
92
- | `(outFunctionControls)` | `EventEmitter<IMiniMapFunctionControl>` | Phát ra bộ điều khiển để điều khiển Minimap từ code. |
187
+ ### dụ 4 — Nội dung có scale transform (diagram zoom)
93
188
 
94
- #### Methods (via Controls)
189
+ Khi nội dung bên trong có phần tử áp dụng CSS `transform: scale(...)`, truyền class vào `classNameFlagElementScale` để directive tính toán tỷ lệ đúng.
95
190
 
96
- | Method | Parameters | Description |
97
- | ---------- | ---------- | ------------------------------- |
98
- | `show()` | `-` | Hiển thị Minimap. |
99
- | `hidden()` | `-` | Ẩn Minimap. |
100
- | `toggle()` | `-` | Chuyển đổi trạng thái hiển thị. |
191
+ ```typescript
192
+ // zoom-diagram.component.ts
193
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
194
+ import { LibsUiComponentsMinimapDirective } from '@libs-ui/components-minimap';
195
+
196
+ @Component({
197
+ standalone: true,
198
+ changeDetection: ChangeDetectionStrategy.OnPush,
199
+ imports: [LibsUiComponentsMinimapDirective],
200
+ template: `
201
+ <div
202
+ class="w-full h-[600px] overflow-auto border rounded"
203
+ LibsUiComponentsMinimapDirective
204
+ classNameFlagElementScale="my-diagram-scale-element"
205
+ [styleImageElement]="{ bottom: 16, right: 16, width: 200, height: 120 }">
206
+
207
+ <div class="my-diagram-scale-element" style="transform: scale(0.8); transform-origin: top left;">
208
+ <!-- Nội dung diagram được zoom out 80% -->
209
+ <div class="w-[5000px] h-[5000px] bg-white">
210
+ <p class="text-lg font-bold p-4">Diagram đã scale 80%</p>
211
+ </div>
212
+ </div>
213
+ </div>
214
+ `,
215
+ })
216
+ export class ZoomDiagramComponent {}
217
+ ```
218
+
219
+ ## @Input()
220
+
221
+ | Input | Type | Default | Mô tả | Ví dụ |
222
+ |---|---|---|---|---|
223
+ | `[elementScroll]` | `HTMLElement \| undefined` | Host element | Phần tử đích để theo dõi và đồng bộ cuộn. Nếu không truyền, sử dụng host element của directive. | `[elementScroll]="scrollContainerRef"` |
224
+ | `[timerStartDrawMinimap]` | `number \| undefined` | `250` | Thời gian delay (ms) trước khi vẽ minimap lần đầu sau `ngAfterViewInit`. Tăng giá trị nếu nội dung cần thêm thời gian render. | `[timerStartDrawMinimap]="500"` |
225
+ | `[styleImageElement]` | `IMiniMapStyleConfig \| undefined` | `undefined` | Cấu hình style cho khung container bao ngoài của minimap (vị trí, kích thước, màu nền, viền, z-index). | `[styleImageElement]="{ bottom: 20, right: 20, width: 220, height: 130 }"` |
226
+ | `[styleRectangleElement]` | `IMiniMapStyleConfig \| undefined` | `undefined` | Cấu hình style cho khung viewport (hình chữ nhật di động) trên minimap thể hiện vùng đang xem. | `[styleRectangleElement]="{ border: '2px solid #3b82f6', background: 'rgba(59,130,246,0.1)' }"` |
227
+ | `[classNameFlagElementScale]` | `string \| undefined` | `'libs-ui-minimap-flag-element-scale'` | Tên class CSS dùng để xác định phần tử chứa CSS `transform: scale(...)`. Directive đọc matrix để tính toán tỷ lệ viewport chính xác khi nội dung bị zoom. | `classNameFlagElementScale="my-scale-node"` |
228
+ | `[minimapCloneBackground]` | `string \| undefined` | `undefined` | Override giá trị `background` của cloned node trên minimap. Hữu ích khi element gốc có nền trong suốt hoặc màu tối, muốn minimap hiển thị với nền sáng hơn. | `[minimapCloneBackground]="'white'"` |
229
+
230
+ ## @Output()
231
+
232
+ | Output | Type | Mô tả | Handler TS | Binding HTML |
233
+ |---|---|---|---|---|
234
+ | `(outFunctionControls)` | `IMiniMapFunctionControl` | Phát ra object chứa ba hàm điều khiển minimap sau khi directive khởi tạo xong. Dùng để ẩn/hiện/toggle minimap từ code component. | `handlerControlsInit(controls: IMiniMapFunctionControl): void { event.stopPropagation(); this.minimapControls = controls; }` | `(outFunctionControls)="handlerControlsInit($event)"` |
235
+
236
+ ## IMiniMapFunctionControl — Methods
237
+
238
+ Các hàm điều khiển được nhận qua `(outFunctionControls)`:
239
+
240
+ | Method | Signature | Mô tả |
241
+ |---|---|---|
242
+ | `show()` | `() => void` | Hiển thị minimap (xóa class `invisible` khỏi container và viewport). |
243
+ | `hidden()` | `() => void` | Ẩn minimap (thêm class `invisible` vào container và viewport). |
244
+ | `toggle()` | `() => void` | Chuyển đổi trạng thái ẩn/hiện dựa trên trạng thái hiện tại. |
245
+
246
+ ```typescript
247
+ // Nhận controls và gọi các method
248
+ handlerControlsInit(controls: IMiniMapFunctionControl): void {
249
+ this.minimapControls = controls;
250
+ this.minimapControls.show(); // Hiện ngay sau khi init
251
+ }
252
+
253
+ handlerToggleMinimap(event: MouseEvent): void {
254
+ event.stopPropagation();
255
+ this.minimapControls?.toggle();
256
+ }
257
+ ```
101
258
 
102
259
  ## Types & Interfaces
103
260
 
104
261
  ```typescript
262
+ import { IMiniMapStyleConfig, IMiniMapFunctionControl } from '@libs-ui/components-minimap';
263
+
264
+ /**
265
+ * Cấu hình style và vị trí cho container minimap hoặc viewport rectangle.
266
+ * Tất cả các trường đều là tùy chọn — chỉ truyền những gì cần override.
267
+ */
105
268
  export interface IMiniMapStyleConfig {
269
+ /** Z-index của phần tử. Mặc định container: 1300, viewport: 1301 */
106
270
  zIndex?: number;
271
+ /** CSS border string. VD: '1px solid #E6E7EA' */
107
272
  border?: string;
273
+ /** Border radius tính bằng px. Mặc định container: 4 */
108
274
  borderRadius?: number;
275
+ /** Màu nền. Mặc định container: 'white' */
109
276
  background?: string;
277
+ /** Khoảng cách từ cạnh trên (px). Áp dụng khi không có bottom. */
110
278
  top?: number;
279
+ /** Khoảng cách từ cạnh trái (px). Áp dụng khi không có right. */
111
280
  left?: number;
281
+ /** Khoảng cách từ cạnh dưới (px). Ưu tiên hơn top khi cả hai được truyền. */
112
282
  bottom?: number;
283
+ /** Khoảng cách từ cạnh phải (px). Ưu tiên hơn left khi cả hai được truyền. */
113
284
  right?: number;
285
+ /** Chiều rộng container tính bằng px. Mặc định: 198 */
114
286
  width?: number;
287
+ /** Chiều cao container tính bằng px. Mặc định: 108 */
115
288
  height?: number;
289
+ /** Tọa độ X (dùng nội bộ, không cần truyền thủ công) */
116
290
  x?: number;
291
+ /** Tọa độ Y (dùng nội bộ, không cần truyền thủ công) */
117
292
  y?: number;
293
+ /** CSS overflow. Mặc định: 'hidden' */
294
+ overflow?: string;
118
295
  }
119
296
 
297
+ /**
298
+ * Object chứa các hàm điều khiển minimap, nhận được qua (outFunctionControls).
299
+ */
120
300
  export interface IMiniMapFunctionControl {
301
+ /** Hiển thị minimap */
121
302
  show: () => void;
303
+ /** Ẩn minimap */
122
304
  hidden: () => void;
305
+ /** Chuyển đổi ẩn/hiện */
123
306
  toggle: () => void;
124
307
  }
125
308
  ```
126
309
 
127
- ## Công nghệ
310
+ ## Lưu ý quan trọng
311
+
312
+ ⚠️ **Container phải có overflow scroll/auto**: Vùng chứa host element (hoặc phần tử truyền vào `elementScroll`) bắt buộc phải có `overflow: auto` hoặc `overflow: scroll`. Nếu không, sự kiện `scroll` sẽ không được kích hoạt và minimap sẽ không đồng bộ.
313
+
314
+ ⚠️ **Minimap được append vào document.body**: Container minimap được tạo động và gắn thẳng vào `document.body` với `position: fixed`. Mặc định z-index là `1300`. Đảm bảo không có phần tử nào trong ứng dụng có z-index cao hơn che khuất minimap ngoài ý muốn.
315
+
316
+ ⚠️ **Hiệu năng với DOM lớn**: Directive dùng `cloneNode(true)` để render nội dung lên minimap mỗi khi có thay đổi DOM (`MutationObserver`). Với các DOM tree cực lớn (hàng nghìn node), tần suất mutation cao có thể ảnh hưởng đến hiệu năng. Cân nhắc giảm số lượng node hoặc tối ưu cấu trúc DOM.
128
317
 
129
- | Technology | Purpose |
130
- | ---------------- | ------------------------- |
131
- | Angular 18+ | Framework chính |
132
- | Angular Signals | Quản lý trạng thái nội bộ |
133
- | MutationObserver | Theo dõi thay đổi DOM |
134
- | DOM Cloning | Tạo hình ảnh thu nhỏ |
318
+ ⚠️ **timerStartDrawMinimap**: Minimap không vẽ ngay lập tức sau `ngAfterViewInit` mà chờ một khoảng delay (mặc định 250ms) để đảm bảo nội dung đã render xong. Nếu nội dung cần thêm thời gian (load ảnh, animation), tăng giá trị này lên.
319
+
320
+ ⚠️ **Scale transform**: Khi nội dung bên trong có phần tử áp dụng CSS `transform: scale()`, truyền đúng tên class vào `classNameFlagElementScale`. Nếu không, viewport trên minimap sẽ không khớp với vùng thực sự đang hiển thị.
321
+
322
+ ⚠️ **Minimap ẩn theo mặc định**: Sau khi init, minimap được tạo ra nhưng ở trạng thái `invisible`. Cần gọi `controls.show()` trong handler `(outFunctionControls)` để hiện ngay, hoặc gọi sau theo logic nghiệp vụ.
323
+
324
+ ## Demo
325
+
326
+ ```bash
327
+ npx nx serve core-ui
328
+ ```
135
329
 
136
- ## License
330
+ Truy cập: http://localhost:4500/components/minimap
137
331
 
138
- MIT
332
+ hoặc: http://localhost:4500/directives/minimap
@@ -16,6 +16,7 @@ export class LibsUiComponentsMinimapDirective {
16
16
  elementScroll = input();
17
17
  styleRectangleElement = input();
18
18
  styleImageElement = input();
19
+ minimapCloneBackground = input();
19
20
  // #endregion
20
21
  // #region OUTPUT
21
22
  outFunctionControls = output();
@@ -57,12 +58,13 @@ export class LibsUiComponentsMinimapDirective {
57
58
  this.containerElement.classList.add('fixed', 'flex', 'invisible', 'libs-ui-directive-minimap-container', 'select-none');
58
59
  this.imgElement.classList.add('relative', 'w-full', 'h-full', 'overflow-hidden');
59
60
  setStylesElement(this.containerElement, {
60
- zIndex: `${this.styleImageElement()?.zIndex ?? '1300'}`,
61
+ zIndex: `${this.styleImageElement()?.zIndex ?? 1300}`,
61
62
  background: `${this.styleImageElement()?.background ?? 'white'}`,
62
63
  border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,
63
- borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,
64
- width: `${this.styleImageElement()?.width ?? '198'}px`,
65
- height: `${this.styleImageElement()?.height ?? '108'}px`,
64
+ borderRadius: `${this.styleImageElement()?.borderRadius ?? 4}px`,
65
+ width: `${this.styleImageElement()?.width ?? 198}px`,
66
+ height: `${this.styleImageElement()?.height ?? 108}px`,
67
+ overflow: `${this.styleImageElement()?.overflow ?? 'hidden'}`,
66
68
  });
67
69
  this.styleRectTopBottomElement(rectElement);
68
70
  this.styleRectLeftRightElement(rectElement);
@@ -185,6 +187,10 @@ export class LibsUiComponentsMinimapDirective {
185
187
  const nodeClone = this.Element.cloneNode(true);
186
188
  nodeClone.style.width = `${this.Element.scrollWidth}px`;
187
189
  nodeClone.style.height = `${this.Element.scrollHeight}px`;
190
+ const cloneBg = this.minimapCloneBackground();
191
+ if (cloneBg) {
192
+ nodeClone.style.background = cloneBg;
193
+ }
188
194
  const { scaleX, scaleY } = this.getScaleElement();
189
195
  ratioX = this.reverseMultiplication(ratioX, scaleX);
190
196
  ratioY = this.reverseMultiplication(ratioY, scaleY);
@@ -223,7 +229,7 @@ export class LibsUiComponentsMinimapDirective {
223
229
  return this.elementScroll() || this.elementRef.nativeElement;
224
230
  }
225
231
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsMinimapDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
226
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsMinimapDirective, isStandalone: true, selector: "[LibsUiComponentsMinimapDirective]", inputs: { classNameFlagElementScale: { classPropertyName: "classNameFlagElementScale", publicName: "classNameFlagElementScale", isSignal: true, isRequired: false, transformFunction: null }, timerStartDrawMinimap: { classPropertyName: "timerStartDrawMinimap", publicName: "timerStartDrawMinimap", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null }, styleRectangleElement: { classPropertyName: "styleRectangleElement", publicName: "styleRectangleElement", isSignal: true, isRequired: false, transformFunction: null }, styleImageElement: { classPropertyName: "styleImageElement", publicName: "styleImageElement", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionControls: "outFunctionControls" }, ngImport: i0 });
232
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsMinimapDirective, isStandalone: true, selector: "[LibsUiComponentsMinimapDirective]", inputs: { classNameFlagElementScale: { classPropertyName: "classNameFlagElementScale", publicName: "classNameFlagElementScale", isSignal: true, isRequired: false, transformFunction: null }, timerStartDrawMinimap: { classPropertyName: "timerStartDrawMinimap", publicName: "timerStartDrawMinimap", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null }, styleRectangleElement: { classPropertyName: "styleRectangleElement", publicName: "styleRectangleElement", isSignal: true, isRequired: false, transformFunction: null }, styleImageElement: { classPropertyName: "styleImageElement", publicName: "styleImageElement", isSignal: true, isRequired: false, transformFunction: null }, minimapCloneBackground: { classPropertyName: "minimapCloneBackground", publicName: "minimapCloneBackground", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionControls: "outFunctionControls" }, ngImport: i0 });
227
233
  }
228
234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsMinimapDirective, decorators: [{
229
235
  type: Directive,
@@ -233,4 +239,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
233
239
  standalone: true,
234
240
  }]
235
241
  }] });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU83QyxNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLG1CQUFtQjtJQUNGLE1BQU0sR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEMsZ0JBQWdCLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsVUFBVSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLGFBQWE7SUFFYixnQkFBZ0I7SUFDUCx5QkFBeUIsR0FBRyxLQUFLLENBQTZCLG9DQUFvQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0lBQ3pLLHFCQUFxQixHQUFHLEtBQUssQ0FBNkIsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMs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QVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsb0NBQW9DO29CQUM5QyxVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBnZXREcmFnRXZlbnRCeUVsZW1lbnQsIHNldFN0eWxlc0VsZW1lbnQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIHRhcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElNaW5pTWFwRnVuY3Rpb25Db250cm9sLCBJTWluaU1hcFN0eWxlQ29uZmlnIH0gZnJvbSAnLi9taW5pbWFwLmludGVyZmFjZSc7XG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbTGlic1VpQ29tcG9uZW50c01pbmltYXBEaXJlY3RpdmVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c01pbmltYXBEaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIHJlYWRvbmx5IGlzU2hvdyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbWdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdQb3J0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFxuICByZWFkb25seSBjbGFzc05hbWVGbGFnRWxlbWVudFNjYWxlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdsaWJzLXVpLW1pbmltYXAtZmxhZy1lbGVtZW50LXNjYWxlJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAnbGlicy11aS1taW5pbWFwLWZsYWctZWxlbWVudC1zY2FsZScgfSk7XG4gIHJlYWRvbmx5IHRpbWVyU3RhcnREcmF3TWluaW1hcCA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigyNTAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMjUwIH0pO1xuICByZWFkb25seSBlbGVtZW50U2Nyb2xsID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IHN0eWxlUmVjdGFuZ2xlRWxlbWVudCA9IGlucHV0PElNaW5pTWFwU3R5bGVDb25maWc+KCk7XG4gIHJlYWRvbmx5IHN0eWxlSW1hZ2VFbGVtZW50ID0gaW5wdXQ8SU1pbmlNYXBTdHlsZUNvbmZpZz4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbHMgPSBvdXRwdXQ8SU1pbmlNYXBGdW5jdGlvbkNvbnRyb2w+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSB7IGF0dHJpYnV0ZXM6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9O1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy51cGRhdGVNaW5pTWFwLmJpbmQodGhpcykpO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLkVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQ/LnJlbW92ZSgpO1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgdGltZXIodGhpcy50aW1lclN0YXJ0RHJhd01pbmltYXAoKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW1nRWxlbWVudEluaXRTdHlsZUFuZEFkZFRvQm9keSgpO1xuICAgICAgICAgIHRoaXMudmlld1BvcnRFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9JbWdFbGVtZW50KCk7XG5cbiAgICAgICAgICBjb25zdCByZWN0SW1hZ2UgPSB0aGlzLmltZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgeyBjbGllbnRYOiByZWN0SW1hZ2UueCwgY2xpZW50WTogcmVjdEltYWdlLnkgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVNaW5pTWFwKCk7XG4gICAgICAgICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2xzLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgICAgICAgICB0aGlzLmluaXRFdmVudCgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vICNyZWdpb24gRlVOQ1RJT05TXG4gIHB1YmxpYyBnZXQgRnVuY3Rpb25zQ29udHJvbCgpOiBJTWluaU1hcEZ1bmN0aW9uQ29udHJvbCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3c6IHRoaXMuc2hvdy5iaW5kKHRoaXMpLFxuICAgICAgaGlkZGVuOiB0aGlzLmhpZGRlbi5iaW5kKHRoaXMpLFxuICAgICAgdG9nZ2xlOiB0aGlzLnRvZ2dsZS5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGltZ0VsZW1lbnRJbml0U3R5bGVBbmRBZGRUb0JvZHkoKSB7XG4gICAgY29uc3QgcmVjdEVsZW1lbnQgPSB0aGlzLkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZml4ZWQnLCAnZmxleCcsICdpbnZpc2libGUnLCAnbGlicy11aS1kaXJlY3RpdmUtbWluaW1hcC1jb250YWluZXInLCAnc2VsZWN0LW5vbmUnKTtcbiAgICB0aGlzLmltZ0VsZW1lbnQuY2xhc3NMaXN0LmFkZCgncmVsYXRpdmUnLCAndy1mdWxsJywgJ2gtZnVsbCcsICdvdmVyZmxvdy1oaWRkZW4nKTtcbiAgICBzZXRTdHlsZXNFbGVtZW50KHRoaXMuY29udGFpbmVyRWxlbWVudCwge1xuICAgICAgekluZGV4OiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LnpJbmRleCA/PyAnMTMwMCd9YCxcbiAgICAgIGJhY2tncm91bmQ6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYmFja2dyb3VuZCA/PyAnd2hpdGUnfWAsXG4gICAgICBib3JkZXI6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm9yZGVyID8/ICcxcHggc29saWQgI0U2RTdFQSd9YCxcbiAgICAgIGJvcmRlclJhZGl1czogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5ib3JkZXJSYWRpdXMgPz8gJzRweCd9YCxcbiAgICAgIHdpZHRoOiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LndpZHRoID8/ICcxOTgnfXB4YCxcbiAgICAgIGhlaWdodDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5oZWlnaHQgPz8gJzEwOCd9cHhgLFxuICAgIH0pO1xuICAgIHRoaXMuc3R5bGVSZWN0VG9wQm90dG9tRWxlbWVudChyZWN0RWxlbWVudCk7XG4gICAgdGhpcy5zdHlsZVJlY3RMZWZ0UmlnaHRFbGVtZW50KHJlY3RFbGVtZW50KTtcbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBwZW5kKHRoaXMuaW1nRWxlbWVudCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB2aWV3UG9ydEVsZW1lbnRJbml0U3R5bGVBbmRBZGRUb0ltZ0VsZW1lbnQoKSB7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZml4ZWQnLCAnbGlicy11aS1ib3JkZXItcHJpbWFyeS1nZW5lcmFsJywgJ2ludmlzaWJsZScsICdsaWJzLXVpLWRpcmVjdGl2ZS1taW5pbWFwLXJlY3RhbmdsZScpO1xuICAgIHNldFN0eWxlc0VsZW1lbnQodGhpcy52aWV3UG9ydEVsZW1lbnQgYXMgdW5rbm93biBhcyBIVE1MRWxlbWVudCwge1xuICAgICAgekluZGV4OiBgJHt0aGlzLnN0eWxlUmVjdGFuZ2xlRWxlbWVudCgpPy56SW5kZXggPz8gJzEzMDEnfWAsXG4gICAgICBiYWNrZ3JvdW5kOiBgJHt0aGlzLnN0eWxlUmVjdGFuZ2xlRWxlbWVudCgpPy5iYWNrZ3JvdW5kID8/ICd0cmFuc3BhcmVudCd9YCxcbiAgICAgIGJvcmRlcjogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uYm9yZGVyID8/ICdub25lJ31gLFxuICAgICAgYm9yZGVyUmFkaXVzOiBgJHt0aGlzLnN0eWxlUmVjdGFuZ2xlRWxlbWVudCgpPy5ib3JkZXJSYWRpdXMgPz8gJzAnfWAsXG4gICAgICBjdXJzb3I6ICdncmFiJyxcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52aWV3UG9ydEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHlsZVJlY3RUb3BCb3R0b21FbGVtZW50KHJlY3RFbGVtZW50OiBET01SZWN0KSB7XG4gICAgaWYgKHRoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm90dG9tKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc3R5bGUuYm90dG9tID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5ib3R0b219cHhgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5zdHlsZS50b3AgPSBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LnRvcCA/PyByZWN0RWxlbWVudC50b3B9cHhgO1xuICB9XG4gIHByaXZhdGUgc3R5bGVSZWN0TGVmdFJpZ2h0RWxlbWVudChyZWN0RWxlbWVudDogRE9NUmVjdCkge1xuICAgIGlmICh0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LnJpZ2h0KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc3R5bGUucmlnaHQgPSBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LnJpZ2h0fXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8ubGVmdCA/PyByZWN0RWxlbWVudC5sZWZ0fXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEV2ZW50KCkge1xuICAgIGxldCBwcmVFdmVudDogTW91c2VFdmVudDtcbiAgICBjb25zdCBoYW5kbGVyU2Nyb2xsRWxlbWVudCA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgcmVjdFZpZXdQb3J0ID0gdGhpcy52aWV3UG9ydEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCByZWN0SW1hZ2UgPSB0aGlzLmltZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB7IHJhdGlvWCwgcmF0aW9ZIH0gPSB0aGlzLmdldFJhdGlvKCk7XG5cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnc2Nyb2xsJykge1xuICAgICAgICBldmVudCA9IHtcbiAgICAgICAgICBjbGllbnRYOiB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdCAqIHJhdGlvWCArIHJlY3RJbWFnZS5sZWZ0ICsgcmVjdFZpZXdQb3J0LndpZHRoIC8gMixcbiAgICAgICAgICBjbGllbnRZOiB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wICogcmF0aW9ZICsgcmVjdEltYWdlLnRvcCArIHJlY3RWaWV3UG9ydC5oZWlnaHQgLyAyLFxuICAgICAgICB9IGFzIE1vdXNlRXZlbnQ7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlLCBldmVudCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG4gICAgICAgIHByZUV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFwcmVFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlWCA9IChldmVudC5jbGllbnRYIC0gcHJlRXZlbnQuY2xpZW50WCkgLyByYXRpb1g7XG4gICAgICBjb25zdCBkaXN0YW5jZVkgPSAoZXZlbnQuY2xpZW50WSAtIHByZUV2ZW50LmNsaWVudFkpIC8gcmF0aW9ZO1xuXG4gICAgICBwcmVFdmVudCA9IGV2ZW50O1xuICAgICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7XG4gICAgICAgIGxlZnQ6IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0ICsgZGlzdGFuY2VYLFxuICAgICAgICB0b3A6IHRoaXMuRWxlbWVudC5zY3JvbGxUb3AgKyBkaXN0YW5jZVksXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZ2V0RHJhZ0V2ZW50QnlFbGVtZW50KHsgZWxlbWVudE1vdXNlRG93bjogdGhpcy52aWV3UG9ydEVsZW1lbnQsIGVsZW1lbnRNb3VzZU1vdmU6IHRoaXMudmlld1BvcnRFbGVtZW50LCBpc1N0YXJ0V2l0aE1vdXNlRG93bkV2ZW50OiB0cnVlLCBkZXN0cm95UmVmOiB0aGlzLmRlc3Ryb3lSZWYgfSkuc3Vic2NyaWJlKGhhbmRsZXJTY3JvbGxFbGVtZW50KTtcbiAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuRWxlbWVudCwgJ3Njcm9sbCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChldmVudCkgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IGhhbmRsZXJTY3JvbGxFbGVtZW50KGV2ZW50IGFzIE1vdXNlRXZlbnQpKTtcbiAgICBmcm9tRXZlbnQ8RXZlbnQ+KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChldmVudCkgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLnVwZGF0ZU1pbmlNYXAuYmluZCh0aGlzKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFJhdGlvKCkge1xuICAgIGNvbnN0IHJlY3RDb250YWluZXIgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmF0aW9YID0gcmVjdENvbnRhaW5lci53aWR0aCAvIHRoaXMuRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICBjb25zdCByYXRpb1kgPSByZWN0Q29udGFpbmVyLmhlaWdodCAvIHRoaXMuRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICByZXR1cm4geyByYXRpb1g6IHJhdGlvWCwgcmF0aW9ZOiByYXRpb1kgfTtcbiAgfVxuICBwcml2YXRlIGdldFNjYWxlRWxlbWVudCgpIHtcbiAgICBsZXQgeyBzY2FsZVgsIHNjYWxlWSB9ID0geyBzY2FsZVg6IDEsIHNjYWxlWTogMSB9O1xuICAgIGNvbnN0IGVsZW1lbnRTY2FsZSA9IHRoaXMuRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuY2xhc3NOYW1lRmxhZ0VsZW1lbnRTY2FsZSgpKT8uWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKGVsZW1lbnRTY2FsZSAmJiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnRTY2FsZSkudHJhbnNmb3JtKSB7XG4gICAgICBjb25zdCBtYXRyaXggPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMuY2xhc3NOYW1lRmxhZ0VsZW1lbnRTY2FsZSgpKVswXSkudHJhbnNmb3JtO1xuICAgICAgY29uc3QgbWF0cml4QXJyYXkgPSBtYXRyaXgucmVwbGFjZSgnbWF0cml4KCcsICcnKS5zcGxpdCgnLCcpO1xuICAgICAgY29uc29sZS5sb2coJ21hdHJpeEFycmF5JywgbWF0cml4QXJyYXkpO1xuXG4gICAgICBzY2FsZVggPSBwYXJzZUZsb2F0KG1hdHJpeEFycmF5WzBdKTsgLy8gY29udmVydCBmcm9tIHN0cmluZyB0byBudW1iZXJcbiAgICAgIHNjYWxlWSA9IHBhcnNlRmxvYXQobWF0cml4QXJyYXlbM10pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHNjYWxlWCwgc2NhbGVZLCBlbGVtZW50U2NhbGUgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmV2ZXJzZU11bHRpcGxpY2F0aW9uKGF2ZzE6IG51bWJlciwgYXZnMjogbnVtYmVyKSB7XG4gICAgaWYgKGF2ZzIgPD0gMSkge1xuICAgICAgcmV0dXJuIGF2ZzEgKiBhdmcyO1xuICAgIH1cblxuICAgIHJldHVybiBhdmcxIC8gYXZnMjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlOiBJQm91bmRpbmdDbGllbnRSZWN0LCBtb3VzZVBvc2l0aW9uOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pIHtcbiAgICBjb25zdCB7IHJhdGlvWCwgcmF0aW9ZIH0gPSB0aGlzLmdldFJhdGlvKCk7XG4gICAgY29uc3QgeyBzY2FsZVgsIHNjYWxlWSB9ID0gdGhpcy5nZXRTY2FsZUVsZW1lbnQoKTtcblxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5FbGVtZW50LmNsaWVudFdpZHRoICogdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9YLCBzY2FsZVgpO1xuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuRWxlbWVudC5jbGllbnRIZWlnaHQgKiB0aGlzLnJldmVyc2VNdWx0aXBsaWNhdGlvbihyYXRpb1ksIHNjYWxlWSk7XG4gICAgbGV0IGxlZnRTdmcgPSBtb3VzZVBvc2l0aW9uLmNsaWVudFggLSB3aWR0aCAvIDI7XG4gICAgbGV0IHRvcFN2ZyA9IG1vdXNlUG9zaXRpb24uY2xpZW50WSAtIGhlaWdodCAvIDI7XG5cbiAgICBpZiAobGVmdFN2ZyA8IHJlY3RJbWFnZS5sZWZ0KSB7XG4gICAgICBsZWZ0U3ZnID0gcmVjdEltYWdlLmxlZnQ7XG4gICAgfVxuICAgIGlmIChsZWZ0U3ZnICsgd2lkdGggPj0gcmVjdEltYWdlLmxlZnQgKyByZWN0SW1hZ2Uud2lkdGgpIHtcbiAgICAgIGxlZnRTdmcgPSByZWN0SW1hZ2UubGVmdCArIHJlY3RJbWFnZS53aWR0aCAtIHdpZHRoO1xuICAgIH1cbiAgICBpZiAodG9wU3ZnIDwgcmVjdEltYWdlLnRvcCkge1xuICAgICAgdG9wU3ZnID0gcmVjdEltYWdlLnRvcDtcbiAgICB9XG4gICAgaWYgKHRvcFN2ZyArIGhlaWdodCA+PSByZWN0SW1hZ2UudG9wICsgcmVjdEltYWdlLmhlaWdodCkge1xuICAgICAgdG9wU3ZnID0gcmVjdEltYWdlLnRvcCArIHJlY3RJbWFnZS5oZWlnaHQgLSBoZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0U3ZnfXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS50b3AgPSBgJHt0b3BTdmd9cHhgO1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke01hdGgucm91bmQoaGVpZ2h0KX1weGA7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbmlNYXAoKSB7XG4gICAgdGhpcy5pbWdFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkPy5yZW1vdmUoKTtcbiAgICBsZXQgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuICAgIGNvbnN0IG5vZGVDbG9uZSA9IHRoaXMuRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgbm9kZUNsb25lLnN0eWxlLndpZHRoID0gYCR7dGhpcy5FbGVtZW50LnNjcm9sbFdpZHRofXB4YDtcbiAgICBub2RlQ2xvbmUuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5FbGVtZW50LnNjcm9sbEhlaWdodH1weGA7XG4gICAgY29uc3QgeyBzY2FsZVgsIHNjYWxlWSB9ID0gdGhpcy5nZXRTY2FsZUVsZW1lbnQoKTtcblxuICAgIHJhdGlvWCA9IHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWCwgc2NhbGVYKTtcbiAgICByYXRpb1kgPSB0aGlzLnJldmVyc2VNdWx0aXBsaWNhdGlvbihyYXRpb1ksIHNjYWxlWSk7XG4gICAgbm9kZUNsb25lLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3JhdGlvWH0sJHtyYXRpb1l9KWA7XG4gICAgbm9kZUNsb25lLmNsYXNzTGlzdC5hZGQoJ292ZXJmbG93LXVuc2V0JywgJ3NlbGVjdC1ub25lJywgJ3BvaW50ZXItZXZlbnRzLW5vbmUnKTtcbiAgICB0aGlzLmltZ0VsZW1lbnQuYXBwZW5kKG5vZGVDbG9uZSk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGVYID0gKG5vZGVDbG9uZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIC8gcmF0aW9YO1xuICAgIGNvbnN0IHRyYW5zbGF0ZVkgPSAobm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApIC8gcmF0aW9ZO1xuICAgIGNvbnN0IHZpZXdQb3J0RWxlbWVudCA9IHRoaXMudmlld1BvcnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJlY3RJbWFnZSA9IHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGNsaWVudFg6IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0ICogcmF0aW9YICsgcmVjdEltYWdlLmxlZnQgKyB2aWV3UG9ydEVsZW1lbnQud2lkdGggLyAyLFxuICAgICAgY2xpZW50WTogdGhpcy5FbGVtZW50LnNjcm9sbFRvcCAqIHJhdGlvWSArIHJlY3RJbWFnZS50b3AgKyB2aWV3UG9ydEVsZW1lbnQuaGVpZ2h0IC8gMixcbiAgICB9IGFzIE1vdXNlRXZlbnQ7XG5cbiAgICBub2RlQ2xvbmUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7cmF0aW9YfSwke3JhdGlvWX0pIHRyYW5zbGF0ZSgtJHt0cmFuc2xhdGVYfXB4LC0ke3RyYW5zbGF0ZVl9cHgpYDtcbiAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93KCkpIHtcbiAgICAgIHRoaXMuaGlkZGVuKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZGVuKCkge1xuICAgIHRoaXMuaXNTaG93LnNldChmYWxzZSk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdpbnZpc2libGUnKTtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpbnZpc2libGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdygpIHtcbiAgICB0aGlzLmlzU2hvdy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdpbnZpc2libGUnKTtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpbnZpc2libGUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRTY3JvbGwoKSB8fCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cbn1cbiJdfQ==
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU83QyxNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLG1CQUFtQjtJQUNGLE1BQU0sR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEMsZ0JBQWdCLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUQsVUFBVSxHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLGFBQWE7SUFFYixnQkFBZ0I7SUFDUCx5QkFBeUIsR0FBRyxLQUFLLENBQTZCLG9DQUFvQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0lBQ3pLLHFCQUFxQixHQUFHLEtBQUssQ0FBNkIsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMs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QUFXLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELElBQVksT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUMvRCxDQUFDO3dHQW5SVSxnQ0FBZ0M7NEZBQWhDLGdDQUFnQzs7NEZBQWhDLGdDQUFnQztrQkFMNUMsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxvQ0FBb0M7b0JBQzlDLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IGdldERyYWdFdmVudEJ5RWxlbWVudCwgc2V0U3R5bGVzRWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IGZyb21FdmVudCwgdGFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSU1pbmlNYXBGdW5jdGlvbkNvbnRyb2wsIElNaW5pTWFwU3R5bGVDb25maWcgfSBmcm9tICcuL21pbmltYXAuaW50ZXJmYWNlJztcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tMaWJzVWlDb21wb25lbnRzTWluaW1hcERpcmVjdGl2ZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTWluaW1hcERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNTaG93ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIHJlYWRvbmx5IGltZ0VsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmlld1BvcnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2xpYnMtdWktbWluaW1hcC1mbGFnLWVsZW1lbnQtc2NhbGUnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdsaWJzLXVpLW1pbmltYXAtZmxhZy1lbGVtZW50LXNjYWxlJyB9KTtcbiAgcmVhZG9ubHkgdGltZXJTdGFydERyYXdNaW5pbWFwID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDI1MCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAyNTAgfSk7XG4gIHJlYWRvbmx5IGVsZW1lbnRTY3JvbGwgPSBpbnB1dDxIVE1MRWxlbWVudD4oKTtcbiAgcmVhZG9ubHkgc3R5bGVSZWN0YW5nbGVFbGVtZW50ID0gaW5wdXQ8SU1pbmlNYXBTdHlsZUNvbmZpZz4oKTtcbiAgcmVhZG9ubHkgc3R5bGVJbWFnZUVsZW1lbnQgPSBpbnB1dDxJTWluaU1hcFN0eWxlQ29uZmlnPigpO1xuICByZWFkb25seSBtaW5pbWFwQ2xvbmVCYWNrZ3JvdW5kID0gaW5wdXQ8c3RyaW5nPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25Db250cm9scyA9IG91dHB1dDxJTWluaU1hcEZ1bmN0aW9uQ29udHJvbD4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSU5KRUNUXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcih0aGlzLnVwZGF0ZU1pbmlNYXAuYmluZCh0aGlzKSk7XG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuRWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCk7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aW1lcih0aGlzLnRpbWVyU3RhcnREcmF3TWluaW1hcCgpKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbWdFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9Cb2R5KCk7XG4gICAgICAgICAgdGhpcy52aWV3UG9ydEVsZW1lbnRJbml0U3R5bGVBbmRBZGRUb0ltZ0VsZW1lbnQoKTtcblxuICAgICAgICAgIGNvbnN0IHJlY3RJbWFnZSA9IHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlLCB7IGNsaWVudFg6IHJlY3RJbWFnZS54LCBjbGllbnRZOiByZWN0SW1hZ2UueSB9KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU1pbmlNYXAoKTtcbiAgICAgICAgICB0aGlzLm91dEZ1bmN0aW9uQ29udHJvbHMuZW1pdCh0aGlzLkZ1bmN0aW9uc0NvbnRyb2wpO1xuICAgICAgICAgIHRoaXMuaW5pdEV2ZW50KCk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBGVU5DVElPTlNcbiAgcHVibGljIGdldCBGdW5jdGlvbnNDb250cm9sKCk6IElNaW5pTWFwRnVuY3Rpb25Db250cm9sIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvdzogdGhpcy5zaG93LmJpbmQodGhpcyksXG4gICAgICBoaWRkZW46IHRoaXMuaGlkZGVuLmJpbmQodGhpcyksXG4gICAgICB0b2dnbGU6IHRoaXMudG9nZ2xlLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW1nRWxlbWVudEluaXRTdHlsZUFuZEFkZFRvQm9keSgpIHtcbiAgICBjb25zdCByZWN0RWxlbWVudCA9IHRoaXMuRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmaXhlZCcsICdmbGV4JywgJ2ludmlzaWJsZScsICdsaWJzLXVpLWRpcmVjdGl2ZS1taW5pbWFwLWNvbnRhaW5lcicsICdzZWxlY3Qtbm9uZScpO1xuICAgIHRoaXMuaW1nRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZWxhdGl2ZScsICd3LWZ1bGwnLCAnaC1mdWxsJywgJ292ZXJmbG93LWhpZGRlbicpO1xuICAgIHNldFN0eWxlc0VsZW1lbnQodGhpcy5jb250YWluZXJFbGVtZW50LCB7XG4gICAgICB6SW5kZXg6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uekluZGV4ID8/IDEzMDB9YCxcbiAgICAgIGJhY2tncm91bmQ6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYmFja2dyb3VuZCA/PyAnd2hpdGUnfWAsXG4gICAgICBib3JkZXI6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm9yZGVyID8/ICcxcHggc29saWQgI0U2RTdFQSd9YCxcbiAgICAgIGJvcmRlclJhZGl1czogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5ib3JkZXJSYWRpdXMgPz8gNH1weGAsXG4gICAgICB3aWR0aDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy53aWR0aCA/PyAxOTh9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmhlaWdodCA/PyAxMDh9cHhgLFxuICAgICAgb3ZlcmZsb3c6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8ub3ZlcmZsb3cgPz8gJ2hpZGRlbid9YCxcbiAgICB9KTtcbiAgICB0aGlzLnN0eWxlUmVjdFRvcEJvdHRvbUVsZW1lbnQocmVjdEVsZW1lbnQpO1xuICAgIHRoaXMuc3R5bGVSZWN0TGVmdFJpZ2h0RWxlbWVudChyZWN0RWxlbWVudCk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZCh0aGlzLmltZ0VsZW1lbnQpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdmlld1BvcnRFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9JbWdFbGVtZW50KCkge1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZpeGVkJywgJ2xpYnMtdWktYm9yZGVyLXByaW1hcnktZ2VuZXJhbCcsICdpbnZpc2libGUnLCAnbGlicy11aS1kaXJlY3RpdmUtbWluaW1hcC1yZWN0YW5nbGUnKTtcbiAgICBzZXRTdHlsZXNFbGVtZW50KHRoaXMudmlld1BvcnRFbGVtZW50IGFzIHVua25vd24gYXMgSFRNTEVsZW1lbnQsIHtcbiAgICAgIHpJbmRleDogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uekluZGV4ID8/ICcxMzAxJ31gLFxuICAgICAgYmFja2dyb3VuZDogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uYmFja2dyb3VuZCA/PyAndHJhbnNwYXJlbnQnfWAsXG4gICAgICBib3JkZXI6IGAke3RoaXMuc3R5bGVSZWN0YW5nbGVFbGVtZW50KCk/LmJvcmRlciA/PyAnbm9uZSd9YCxcbiAgICAgIGJvcmRlclJhZGl1czogYCR7dGhpcy5zdHlsZVJlY3RhbmdsZUVsZW1lbnQoKT8uYm9yZGVyUmFkaXVzID8/ICcwJ31gLFxuICAgICAgY3Vyc29yOiAnZ3JhYicsXG4gICAgfSk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMudmlld1BvcnRFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3R5bGVSZWN0VG9wQm90dG9tRWxlbWVudChyZWN0RWxlbWVudDogRE9NUmVjdCkge1xuICAgIGlmICh0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvdHRvbSkge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLmJvdHRvbSA9IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm90dG9tfXB4YDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuc3R5bGUudG9wID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy50b3AgPz8gcmVjdEVsZW1lbnQudG9wfXB4YDtcbiAgfVxuICBwcml2YXRlIHN0eWxlUmVjdExlZnRSaWdodEVsZW1lbnQocmVjdEVsZW1lbnQ6IERPTVJlY3QpIHtcbiAgICBpZiAodGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5yaWdodCkge1xuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLnJpZ2h0ID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5yaWdodH1weGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmxlZnQgPz8gcmVjdEVsZW1lbnQubGVmdH1weGA7XG4gIH1cblxuICBwcml2YXRlIGluaXRFdmVudCgpIHtcbiAgICBsZXQgcHJlRXZlbnQ6IE1vdXNlRXZlbnQ7XG4gICAgY29uc3QgaGFuZGxlclNjcm9sbEVsZW1lbnQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3RWaWV3UG9ydCA9IHRoaXMudmlld1BvcnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgZXZlbnQgPSB7XG4gICAgICAgICAgY2xpZW50WDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKiByYXRpb1ggKyByZWN0SW1hZ2UubGVmdCArIHJlY3RWaWV3UG9ydC53aWR0aCAvIDIsXG4gICAgICAgICAgY2xpZW50WTogdGhpcy5FbGVtZW50LnNjcm9sbFRvcCAqIHJhdGlvWSArIHJlY3RJbWFnZS50b3AgKyByZWN0Vmlld1BvcnQuaGVpZ2h0IC8gMixcbiAgICAgICAgfSBhcyBNb3VzZUV2ZW50O1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2Vkb3duJykge1xuICAgICAgICBwcmVFdmVudCA9IGV2ZW50O1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghcHJlRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkaXN0YW5jZVggPSAoZXZlbnQuY2xpZW50WCAtIHByZUV2ZW50LmNsaWVudFgpIC8gcmF0aW9YO1xuICAgICAgY29uc3QgZGlzdGFuY2VZID0gKGV2ZW50LmNsaWVudFkgLSBwcmVFdmVudC5jbGllbnRZKSAvIHJhdGlvWTtcblxuICAgICAgcHJlRXZlbnQgPSBldmVudDtcbiAgICAgIHRoaXMuRWxlbWVudC5zY3JvbGwoe1xuICAgICAgICBsZWZ0OiB0aGlzLkVsZW1lbnQuc2Nyb2xsTGVmdCArIGRpc3RhbmNlWCxcbiAgICAgICAgdG9wOiB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wICsgZGlzdGFuY2VZLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdldERyYWdFdmVudEJ5RWxlbWVudCh7IGVsZW1lbnRNb3VzZURvd246IHRoaXMudmlld1BvcnRFbGVtZW50LCBlbGVtZW50TW91c2VNb3ZlOiB0aGlzLnZpZXdQb3J0RWxlbWVudCwgaXNTdGFydFdpdGhNb3VzZURvd25FdmVudDogdHJ1ZSwgZGVzdHJveVJlZjogdGhpcy5kZXN0cm95UmVmIH0pLnN1YnNjcmliZShoYW5kbGVyU2Nyb2xsRWxlbWVudCk7XG4gICAgZnJvbUV2ZW50PEV2ZW50Pih0aGlzLkVsZW1lbnQsICdzY3JvbGwnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiBoYW5kbGVyU2Nyb2xsRWxlbWVudChldmVudCBhcyBNb3VzZUV2ZW50KSk7XG4gICAgZnJvbUV2ZW50PEV2ZW50Pih3aW5kb3csICdyZXNpemUnKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy51cGRhdGVNaW5pTWFwLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYXRpbygpIHtcbiAgICBjb25zdCByZWN0Q29udGFpbmVyID0gdGhpcy5jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJhdGlvWCA9IHJlY3RDb250YWluZXIud2lkdGggLyB0aGlzLkVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgY29uc3QgcmF0aW9ZID0gcmVjdENvbnRhaW5lci5oZWlnaHQgLyB0aGlzLkVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgcmV0dXJuIHsgcmF0aW9YOiByYXRpb1gsIHJhdGlvWTogcmF0aW9ZIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRTY2FsZUVsZW1lbnQoKSB7XG4gICAgbGV0IHsgc2NhbGVYLCBzY2FsZVkgfSA9IHsgc2NhbGVYOiAxLCBzY2FsZVk6IDEgfTtcbiAgICBjb25zdCBlbGVtZW50U2NhbGUgPSB0aGlzLkVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUoKSk/LlswXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50U2NhbGUgJiYgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50U2NhbGUpLnRyYW5zZm9ybSkge1xuICAgICAgY29uc3QgbWF0cml4ID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLkVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUoKSlbMF0pLnRyYW5zZm9ybTtcbiAgICAgIGNvbnN0IG1hdHJpeEFycmF5ID0gbWF0cml4LnJlcGxhY2UoJ21hdHJpeCgnLCAnJykuc3BsaXQoJywnKTtcbiAgICAgIGNvbnNvbGUubG9nKCdtYXRyaXhBcnJheScsIG1hdHJpeEFycmF5KTtcblxuICAgICAgc2NhbGVYID0gcGFyc2VGbG9hdChtYXRyaXhBcnJheVswXSk7IC8vIGNvbnZlcnQgZnJvbSBzdHJpbmcgdG8gbnVtYmVyXG4gICAgICBzY2FsZVkgPSBwYXJzZUZsb2F0KG1hdHJpeEFycmF5WzNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzY2FsZVgsIHNjYWxlWSwgZWxlbWVudFNjYWxlIH07XG4gIH1cblxuICBwcml2YXRlIHJldmVyc2VNdWx0aXBsaWNhdGlvbihhdmcxOiBudW1iZXIsIGF2ZzI6IG51bWJlcikge1xuICAgIGlmIChhdmcyIDw9IDEpIHtcbiAgICAgIHJldHVybiBhdmcxICogYXZnMjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXZnMSAvIGF2ZzI7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZTogSUJvdW5kaW5nQ2xpZW50UmVjdCwgbW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuICAgIGNvbnN0IHsgc2NhbGVYLCBzY2FsZVkgfSA9IHRoaXMuZ2V0U2NhbGVFbGVtZW50KCk7XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuRWxlbWVudC5jbGllbnRXaWR0aCAqIHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWCwgc2NhbGVYKTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLkVsZW1lbnQuY2xpZW50SGVpZ2h0ICogdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9ZLCBzY2FsZVkpO1xuICAgIGxldCBsZWZ0U3ZnID0gbW91c2VQb3NpdGlvbi5jbGllbnRYIC0gd2lkdGggLyAyO1xuICAgIGxldCB0b3BTdmcgPSBtb3VzZVBvc2l0aW9uLmNsaWVudFkgLSBoZWlnaHQgLyAyO1xuXG4gICAgaWYgKGxlZnRTdmcgPCByZWN0SW1hZ2UubGVmdCkge1xuICAgICAgbGVmdFN2ZyA9IHJlY3RJbWFnZS5sZWZ0O1xuICAgIH1cbiAgICBpZiAobGVmdFN2ZyArIHdpZHRoID49IHJlY3RJbWFnZS5sZWZ0ICsgcmVjdEltYWdlLndpZHRoKSB7XG4gICAgICBsZWZ0U3ZnID0gcmVjdEltYWdlLmxlZnQgKyByZWN0SW1hZ2Uud2lkdGggLSB3aWR0aDtcbiAgICB9XG4gICAgaWYgKHRvcFN2ZyA8IHJlY3RJbWFnZS50b3ApIHtcbiAgICAgIHRvcFN2ZyA9IHJlY3RJbWFnZS50b3A7XG4gICAgfVxuICAgIGlmICh0b3BTdmcgKyBoZWlnaHQgPj0gcmVjdEltYWdlLnRvcCArIHJlY3RJbWFnZS5oZWlnaHQpIHtcbiAgICAgIHRvcFN2ZyA9IHJlY3RJbWFnZS50b3AgKyByZWN0SW1hZ2UuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdFN2Z31weGA7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuc3R5bGUudG9wID0gYCR7dG9wU3ZnfXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtNYXRoLnJvdW5kKGhlaWdodCl9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW5pTWFwKCkge1xuICAgIHRoaXMuaW1nRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZD8ucmVtb3ZlKCk7XG4gICAgbGV0IHsgcmF0aW9YLCByYXRpb1kgfSA9IHRoaXMuZ2V0UmF0aW8oKTtcbiAgICBjb25zdCBub2RlQ2xvbmUgPSB0aGlzLkVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgIG5vZGVDbG9uZS5zdHlsZS53aWR0aCA9IGAke3RoaXMuRWxlbWVudC5zY3JvbGxXaWR0aH1weGA7XG4gICAgbm9kZUNsb25lLnN0eWxlLmhlaWdodCA9IGAke3RoaXMuRWxlbWVudC5zY3JvbGxIZWlnaHR9cHhgO1xuICAgIGNvbnN0IGNsb25lQmcgPSB0aGlzLm1pbmltYXBDbG9uZUJhY2tncm91bmQoKTtcbiAgICBpZiAoY2xvbmVCZykge1xuICAgICAgbm9kZUNsb25lLnN0eWxlLmJhY2tncm91bmQgPSBjbG9uZUJnO1xuICAgIH1cbiAgICBjb25zdCB7IHNjYWxlWCwgc2NhbGVZIH0gPSB0aGlzLmdldFNjYWxlRWxlbWVudCgpO1xuXG4gICAgcmF0aW9YID0gdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9YLCBzY2FsZVgpO1xuICAgIHJhdGlvWSA9IHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWSwgc2NhbGVZKTtcbiAgICBub2RlQ2xvbmUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7cmF0aW9YfSwke3JhdGlvWX0pYDtcbiAgICBub2RlQ2xvbmUuY2xhc3NMaXN0LmFkZCgnb3ZlcmZsb3ctdW5zZXQnLCAnc2VsZWN0LW5vbmUnLCAncG9pbnRlci1ldmVudHMtbm9uZScpO1xuICAgIHRoaXMuaW1nRWxlbWVudC5hcHBlbmQobm9kZUNsb25lKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSAobm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmltZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgLyByYXRpb1g7XG4gICAgY29uc3QgdHJhbnNsYXRlWSA9IChub2RlQ2xvbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCkgLyByYXRpb1k7XG4gICAgY29uc3Qgdmlld1BvcnRFbGVtZW50ID0gdGhpcy52aWV3UG9ydEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgY2xpZW50WDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKiByYXRpb1ggKyByZWN0SW1hZ2UubGVmdCArIHZpZXdQb3J0RWxlbWVudC53aWR0aCAvIDIsXG4gICAgICBjbGllbnRZOiB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wICogcmF0aW9ZICsgcmVjdEltYWdlLnRvcCArIHZpZXdQb3J0RWxlbWVudC5oZWlnaHQgLyAyLFxuICAgIH0gYXMgTW91c2VFdmVudDtcblxuICAgIG5vZGVDbG9uZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHtyYXRpb1h9LCR7cmF0aW9ZfSkgdHJhbnNsYXRlKC0ke3RyYW5zbGF0ZVh9cHgsLSR7dHJhbnNsYXRlWX1weClgO1xuICAgIHRoaXMuc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlLCBldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5pc1Nob3coKSkge1xuICAgICAgdGhpcy5oaWRkZW4oKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRkZW4oKSB7XG4gICAgdGhpcy5pc1Nob3cuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ludmlzaWJsZScpO1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ludmlzaWJsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93KCkge1xuICAgIHRoaXMuaXNTaG93LnNldCh0cnVlKTtcbiAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2ludmlzaWJsZScpO1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2ludmlzaWJsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFNjcm9sbCgpIHx8IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgLy8gI2VuZHJlZ2lvblxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSU1pbmlNYXBTdHlsZUNvbmZpZyB7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHpJbmRleD86IG51bWJlcjtcbiAgYm9yZGVyPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XG4gIGJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHRvcD86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWluaU1hcEZ1bmN0aW9uQ29udHJvbCB7XG4gIHNob3c6ICgpID0+IHZvaWQ7XG4gIGhpZGRlbjogKCkgPT4gdm9pZDtcbiAgdG9nZ2xlOiAoKSA9PiB2b2lkO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSU1pbmlNYXBTdHlsZUNvbmZpZyB7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHpJbmRleD86IG51bWJlcjtcbiAgYm9yZGVyPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XG4gIGJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHRvcD86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbiAgb3ZlcmZsb3c/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1pbmlNYXBGdW5jdGlvbkNvbnRyb2wge1xuICBzaG93OiAoKSA9PiB2b2lkO1xuICBoaWRkZW46ICgpID0+IHZvaWQ7XG4gIHRvZ2dsZTogKCkgPT4gdm9pZDtcbn1cbiJdfQ==
@@ -17,6 +17,7 @@ class LibsUiComponentsMinimapDirective {
17
17
  elementScroll = input();
18
18
  styleRectangleElement = input();
19
19
  styleImageElement = input();
20
+ minimapCloneBackground = input();
20
21
  // #endregion
21
22
  // #region OUTPUT
22
23
  outFunctionControls = output();
@@ -58,12 +59,13 @@ class LibsUiComponentsMinimapDirective {
58
59
  this.containerElement.classList.add('fixed', 'flex', 'invisible', 'libs-ui-directive-minimap-container', 'select-none');
59
60
  this.imgElement.classList.add('relative', 'w-full', 'h-full', 'overflow-hidden');
60
61
  setStylesElement(this.containerElement, {
61
- zIndex: `${this.styleImageElement()?.zIndex ?? '1300'}`,
62
+ zIndex: `${this.styleImageElement()?.zIndex ?? 1300}`,
62
63
  background: `${this.styleImageElement()?.background ?? 'white'}`,
63
64
  border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,
64
- borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,
65
- width: `${this.styleImageElement()?.width ?? '198'}px`,
66
- height: `${this.styleImageElement()?.height ?? '108'}px`,
65
+ borderRadius: `${this.styleImageElement()?.borderRadius ?? 4}px`,
66
+ width: `${this.styleImageElement()?.width ?? 198}px`,
67
+ height: `${this.styleImageElement()?.height ?? 108}px`,
68
+ overflow: `${this.styleImageElement()?.overflow ?? 'hidden'}`,
67
69
  });
68
70
  this.styleRectTopBottomElement(rectElement);
69
71
  this.styleRectLeftRightElement(rectElement);
@@ -186,6 +188,10 @@ class LibsUiComponentsMinimapDirective {
186
188
  const nodeClone = this.Element.cloneNode(true);
187
189
  nodeClone.style.width = `${this.Element.scrollWidth}px`;
188
190
  nodeClone.style.height = `${this.Element.scrollHeight}px`;
191
+ const cloneBg = this.minimapCloneBackground();
192
+ if (cloneBg) {
193
+ nodeClone.style.background = cloneBg;
194
+ }
189
195
  const { scaleX, scaleY } = this.getScaleElement();
190
196
  ratioX = this.reverseMultiplication(ratioX, scaleX);
191
197
  ratioY = this.reverseMultiplication(ratioY, scaleY);
@@ -224,7 +230,7 @@ class LibsUiComponentsMinimapDirective {
224
230
  return this.elementScroll() || this.elementRef.nativeElement;
225
231
  }
226
232
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsMinimapDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
227
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsMinimapDirective, isStandalone: true, selector: "[LibsUiComponentsMinimapDirective]", inputs: { classNameFlagElementScale: { classPropertyName: "classNameFlagElementScale", publicName: "classNameFlagElementScale", isSignal: true, isRequired: false, transformFunction: null }, timerStartDrawMinimap: { classPropertyName: "timerStartDrawMinimap", publicName: "timerStartDrawMinimap", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null }, styleRectangleElement: { classPropertyName: "styleRectangleElement", publicName: "styleRectangleElement", isSignal: true, isRequired: false, transformFunction: null }, styleImageElement: { classPropertyName: "styleImageElement", publicName: "styleImageElement", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionControls: "outFunctionControls" }, ngImport: i0 });
233
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsMinimapDirective, isStandalone: true, selector: "[LibsUiComponentsMinimapDirective]", inputs: { classNameFlagElementScale: { classPropertyName: "classNameFlagElementScale", publicName: "classNameFlagElementScale", isSignal: true, isRequired: false, transformFunction: null }, timerStartDrawMinimap: { classPropertyName: "timerStartDrawMinimap", publicName: "timerStartDrawMinimap", isSignal: true, isRequired: false, transformFunction: null }, elementScroll: { classPropertyName: "elementScroll", publicName: "elementScroll", isSignal: true, isRequired: false, transformFunction: null }, styleRectangleElement: { classPropertyName: "styleRectangleElement", publicName: "styleRectangleElement", isSignal: true, isRequired: false, transformFunction: null }, styleImageElement: { classPropertyName: "styleImageElement", publicName: "styleImageElement", isSignal: true, isRequired: false, transformFunction: null }, minimapCloneBackground: { classPropertyName: "minimapCloneBackground", publicName: "minimapCloneBackground", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outFunctionControls: "outFunctionControls" }, ngImport: i0 });
228
234
  }
229
235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsMinimapDirective, decorators: [{
230
236
  type: Directive,
@@ -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, DestroyRef, Directive, ElementRef, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { getDragEventByElement, setStylesElement } from '@libs-ui/utils';\nimport { fromEvent, 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 {\n // #region PROPERTY\n private readonly isShow = signal<boolean>(false);\n private readonly containerElement: HTMLElement = document.createElement('DIV');\n private readonly imgElement: HTMLElement = document.createElement('DIV');\n private readonly viewPortElement = document.createElement('DIV');\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 readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\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.destroyRef.onDestroy(() => {\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 takeUntilDestroyed(this.destroyRef)\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(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 });\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 });\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, destroyRef: this.destroyRef }).subscribe(handlerScrollElement);\n fromEvent<Event>(this.Element, 'scroll')\n .pipe(\n tap((event) => event.stopPropagation()),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event) => handlerScrollElement(event as MouseEvent));\n fromEvent<Event>(window, 'resize')\n .pipe(\n tap((event) => event.stopPropagation()),\n takeUntilDestroyed(this.destroyRef)\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}\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, DestroyRef, Directive, ElementRef, inject, input, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { getDragEventByElement, setStylesElement } from '@libs-ui/utils';\nimport { fromEvent, 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 {\n // #region PROPERTY\n private readonly isShow = signal<boolean>(false);\n private readonly containerElement: HTMLElement = document.createElement('DIV');\n private readonly imgElement: HTMLElement = document.createElement('DIV');\n private readonly viewPortElement = document.createElement('DIV');\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 readonly minimapCloneBackground = input<string>();\n // #endregion\n\n // #region OUTPUT\n readonly outFunctionControls = output<IMiniMapFunctionControl>();\n // #endregion\n\n // #region INJECT\n private readonly elementRef = inject(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\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.destroyRef.onDestroy(() => {\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 takeUntilDestroyed(this.destroyRef)\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(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 ?? 4}px`,\n width: `${this.styleImageElement()?.width ?? 198}px`,\n height: `${this.styleImageElement()?.height ?? 108}px`,\n overflow: `${this.styleImageElement()?.overflow ?? 'hidden'}`,\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(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 });\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, destroyRef: this.destroyRef }).subscribe(handlerScrollElement);\n fromEvent<Event>(this.Element, 'scroll')\n .pipe(\n tap((event) => event.stopPropagation()),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe((event) => handlerScrollElement(event as MouseEvent));\n fromEvent<Event>(window, 'resize')\n .pipe(\n tap((event) => event.stopPropagation()),\n takeUntilDestroyed(this.destroyRef)\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 cloneBg = this.minimapCloneBackground();\n if (cloneBg) {\n nodeClone.style.background = cloneBg;\n }\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}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare class LibsUiComponentsMinimapDirective implements AfterViewInit {
11
11
  readonly elementScroll: import("@angular/core").InputSignal<HTMLElement | undefined>;
12
12
  readonly styleRectangleElement: import("@angular/core").InputSignal<IMiniMapStyleConfig | undefined>;
13
13
  readonly styleImageElement: import("@angular/core").InputSignal<IMiniMapStyleConfig | undefined>;
14
+ readonly minimapCloneBackground: import("@angular/core").InputSignal<string | undefined>;
14
15
  readonly outFunctionControls: import("@angular/core").OutputEmitterRef<IMiniMapFunctionControl>;
15
16
  private readonly elementRef;
16
17
  private readonly destroyRef;
@@ -31,5 +32,5 @@ export declare class LibsUiComponentsMinimapDirective implements AfterViewInit {
31
32
  private show;
32
33
  private get Element();
33
34
  static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsMinimapDirective, never>;
34
- static ɵdir: i0.ɵɵDirectiveDeclaration<LibsUiComponentsMinimapDirective, "[LibsUiComponentsMinimapDirective]", never, { "classNameFlagElementScale": { "alias": "classNameFlagElementScale"; "required": false; "isSignal": true; }; "timerStartDrawMinimap": { "alias": "timerStartDrawMinimap"; "required": false; "isSignal": true; }; "elementScroll": { "alias": "elementScroll"; "required": false; "isSignal": true; }; "styleRectangleElement": { "alias": "styleRectangleElement"; "required": false; "isSignal": true; }; "styleImageElement": { "alias": "styleImageElement"; "required": false; "isSignal": true; }; }, { "outFunctionControls": "outFunctionControls"; }, never, never, true, never>;
35
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LibsUiComponentsMinimapDirective, "[LibsUiComponentsMinimapDirective]", never, { "classNameFlagElementScale": { "alias": "classNameFlagElementScale"; "required": false; "isSignal": true; }; "timerStartDrawMinimap": { "alias": "timerStartDrawMinimap"; "required": false; "isSignal": true; }; "elementScroll": { "alias": "elementScroll"; "required": false; "isSignal": true; }; "styleRectangleElement": { "alias": "styleRectangleElement"; "required": false; "isSignal": true; }; "styleImageElement": { "alias": "styleImageElement"; "required": false; "isSignal": true; }; "minimapCloneBackground": { "alias": "minimapCloneBackground"; "required": false; "isSignal": true; }; }, { "outFunctionControls": "outFunctionControls"; }, never, never, true, never>;
35
36
  }
@@ -11,6 +11,7 @@ export interface IMiniMapStyleConfig {
11
11
  left?: number;
12
12
  bottom?: number;
13
13
  right?: number;
14
+ overflow?: string;
14
15
  }
15
16
  export interface IMiniMapFunctionControl {
16
17
  show: () => void;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@libs-ui/components-minimap",
3
- "version": "0.2.356-41",
3
+ "version": "0.2.356-43",
4
4
  "peerDependencies": {
5
5
  "@angular/core": ">=18.0.0",
6
- "@libs-ui/interfaces-types": "0.2.356-41",
7
- "@libs-ui/utils": "0.2.356-41",
6
+ "@libs-ui/interfaces-types": "0.2.356-43",
7
+ "@libs-ui/utils": "0.2.356-43",
8
8
  "rxjs": "~7.8.0"
9
9
  },
10
10
  "sideEffects": false,