@libs-ui/components-minimap 0.2.107
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 +3 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/libs-ui-components-minimap.mjs +5 -0
- package/esm2022/minimap.directive.mjs +232 -0
- package/esm2022/minimap.interface.mjs +2 -0
- package/fesm2022/libs-ui-components-minimap.mjs +239 -0
- package/fesm2022/libs-ui-components-minimap.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/minimap.directive.d.ts +36 -0
- package/minimap.interface.d.ts +19 -0
- package/package.json +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './minimap.directive';
|
|
2
|
+
export * from './minimap.interface';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9taW5pbWFwLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL21pbmltYXAuaW50ZXJmYWNlJzsiXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLW1pbmltYXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbGlicy11aS1jb21wb25lbnRzLW1pbmltYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { Directive, ElementRef, inject, input, output, Renderer2, signal } from '@angular/core';
|
|
2
|
+
import { fromEvent, mergeMap, startWith, Subject, takeUntil, tap, timer } from 'rxjs';
|
|
3
|
+
import { setStylesElement } from '@libs-ui/utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LibsUiComponentsMinimapDirective {
|
|
6
|
+
// #region PROPERTY
|
|
7
|
+
isShow = signal(false);
|
|
8
|
+
containerElement = document.createElement('DIV');
|
|
9
|
+
imgElement = document.createElement('DIV');
|
|
10
|
+
viewPortElement = document.createElement('DIV');
|
|
11
|
+
onDestroy = new Subject();
|
|
12
|
+
// #endregion
|
|
13
|
+
// #region INPUT
|
|
14
|
+
classNameFlagElementScale = input('mo-minimap-flag-element-scale', { transform: val => val ?? 'mo-minimap-flag-element-scale' });
|
|
15
|
+
timerStartDrawMinimap = input(250, { transform: val => val ?? 250 });
|
|
16
|
+
elementScroll = input();
|
|
17
|
+
styleRectangleElement = input();
|
|
18
|
+
styleImageElement = input();
|
|
19
|
+
// #endregion
|
|
20
|
+
// #region OUTPUT
|
|
21
|
+
outFunctionControls = output();
|
|
22
|
+
// #endregion
|
|
23
|
+
// #region INJECT
|
|
24
|
+
elementRef = inject(ElementRef);
|
|
25
|
+
renderer2 = inject(Renderer2);
|
|
26
|
+
// #endregion
|
|
27
|
+
ngAfterViewInit() {
|
|
28
|
+
const config = { attributes: true, childList: true, subtree: true };
|
|
29
|
+
const observer = new MutationObserver(this.updateMiniMap.bind(this));
|
|
30
|
+
observer.observe(this.Element, config);
|
|
31
|
+
this.onDestroy.subscribe(() => {
|
|
32
|
+
this.containerElement?.remove();
|
|
33
|
+
observer.disconnect();
|
|
34
|
+
});
|
|
35
|
+
timer(this.timerStartDrawMinimap()).pipe(tap(() => {
|
|
36
|
+
this.imgElementInitStyleAndAddToBody();
|
|
37
|
+
this.viewPortElementInitStyleAndAddToImgElement();
|
|
38
|
+
const rectImage = this.imgElement.getBoundingClientRect();
|
|
39
|
+
this.setPositionRectangle(rectImage, { clientX: rectImage.x, clientY: rectImage.y });
|
|
40
|
+
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
|
+
});
|
|
46
|
+
this.initEvent();
|
|
47
|
+
}), takeUntil(this.onDestroy)).subscribe();
|
|
48
|
+
}
|
|
49
|
+
// #region FUNCTIONS
|
|
50
|
+
imgElementInitStyleAndAddToBody() {
|
|
51
|
+
const rectElement = this.Element.getBoundingClientRect();
|
|
52
|
+
this.containerElement.classList.add('position-absolute', 'd-flex', 'invisible', 'mo-lib-directive-minimap-container');
|
|
53
|
+
this.imgElement.classList.add('position-relative', 'w-100', 'h-100', 'mo-lib-overflow-hidden');
|
|
54
|
+
setStylesElement(this.containerElement, {
|
|
55
|
+
zIndex: `${this.styleImageElement()?.zIndex ?? '1300'}`,
|
|
56
|
+
background: `${this.styleImageElement()?.background ?? 'white'}`,
|
|
57
|
+
border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,
|
|
58
|
+
borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,
|
|
59
|
+
width: `${this.styleImageElement()?.width ?? '198'}px`,
|
|
60
|
+
height: `${this.styleImageElement()?.height ?? '108'}px`
|
|
61
|
+
}, this.renderer2);
|
|
62
|
+
this.styleRectTopBottomElement(rectElement);
|
|
63
|
+
this.styleRectLeftRightElement(rectElement);
|
|
64
|
+
this.containerElement.append(this.imgElement);
|
|
65
|
+
document.body.appendChild(this.containerElement);
|
|
66
|
+
}
|
|
67
|
+
viewPortElementInitStyleAndAddToImgElement() {
|
|
68
|
+
this.viewPortElement.classList.add('position-fixed', 'mo-lib-border-primary-general', 'invisible', 'mo-lib-directive-minimap-rectangle');
|
|
69
|
+
setStylesElement(this.viewPortElement, {
|
|
70
|
+
zIndex: `${this.styleRectangleElement()?.zIndex ?? '1301'}`,
|
|
71
|
+
background: `${this.styleRectangleElement()?.background ?? 'transparent'}`,
|
|
72
|
+
border: `${this.styleRectangleElement()?.border ?? 'none'}`,
|
|
73
|
+
borderRadius: `${this.styleRectangleElement()?.borderRadius ?? '0'}`,
|
|
74
|
+
cursor: 'grab'
|
|
75
|
+
}, this.renderer2);
|
|
76
|
+
this.containerElement.appendChild(this.viewPortElement);
|
|
77
|
+
}
|
|
78
|
+
styleRectTopBottomElement(rectElement) {
|
|
79
|
+
if (this.styleImageElement()?.bottom) {
|
|
80
|
+
this.containerElement.style.bottom = `${this.styleImageElement()?.bottom}px`;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this.containerElement.style.top = `${this.styleImageElement()?.top ?? rectElement.top}px`;
|
|
84
|
+
}
|
|
85
|
+
styleRectLeftRightElement(rectElement) {
|
|
86
|
+
if (this.styleImageElement()?.right) {
|
|
87
|
+
this.containerElement.style.right = `${this.styleImageElement()?.right}px`;
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.containerElement.style.left = `${this.styleImageElement()?.left ?? rectElement.left}px`;
|
|
91
|
+
}
|
|
92
|
+
initEvent() {
|
|
93
|
+
let preEvent;
|
|
94
|
+
const handlerScrollElement = (event) => {
|
|
95
|
+
const rectViewPort = this.viewPortElement.getBoundingClientRect();
|
|
96
|
+
const rectImage = this.imgElement.getBoundingClientRect();
|
|
97
|
+
const { ratioX, ratioY } = this.getRatio();
|
|
98
|
+
if (event.type === 'scroll') {
|
|
99
|
+
event = {
|
|
100
|
+
clientX: this.Element.scrollLeft * ratioX + rectImage.left + rectViewPort.width / 2,
|
|
101
|
+
clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2
|
|
102
|
+
};
|
|
103
|
+
this.setPositionRectangle(rectImage, event);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (event.type === 'mousedown') {
|
|
107
|
+
preEvent = event;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!preEvent) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const distanceX = (event.clientX - preEvent.clientX) / ratioX;
|
|
114
|
+
const distanceY = (event.clientY - preEvent.clientY) / ratioY;
|
|
115
|
+
preEvent = event;
|
|
116
|
+
this.Element.scroll({
|
|
117
|
+
left: this.Element.scrollLeft + distanceX,
|
|
118
|
+
top: this.Element.scrollTop + distanceY
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
const mouseUp = fromEvent(window, 'mouseup');
|
|
122
|
+
const mousemove = fromEvent(this.viewPortElement, 'mousemove').pipe(takeUntil(mouseUp));
|
|
123
|
+
const mouseDown = fromEvent(this.viewPortElement, 'mousedown');
|
|
124
|
+
mouseDown.pipe(mergeMap((mouseEvent) => mousemove.pipe(startWith((mouseEvent)))), tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(handlerScrollElement);
|
|
125
|
+
fromEvent(this.Element, 'scroll').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe((event) => handlerScrollElement(event));
|
|
126
|
+
fromEvent(window, 'resize').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(this.updateMiniMap.bind(this));
|
|
127
|
+
}
|
|
128
|
+
getRatio() {
|
|
129
|
+
const rectContainer = this.containerElement.getBoundingClientRect();
|
|
130
|
+
const ratioX = rectContainer.width / this.Element.scrollWidth;
|
|
131
|
+
const ratioY = rectContainer.height / this.Element.scrollHeight;
|
|
132
|
+
return { ratioX: ratioX, ratioY: ratioY };
|
|
133
|
+
}
|
|
134
|
+
getScaleElement() {
|
|
135
|
+
let { scaleX, scaleY } = { scaleX: 1, scaleY: 1 };
|
|
136
|
+
const elementScale = this.Element.getElementsByClassName(this.classNameFlagElementScale())?.[0];
|
|
137
|
+
if (elementScale && getComputedStyle(elementScale).transform) {
|
|
138
|
+
const matrix = getComputedStyle(this.Element.getElementsByClassName(this.classNameFlagElementScale())[0]).transform;
|
|
139
|
+
const matrixArray = matrix.replace("matrix(", "").split(",");
|
|
140
|
+
scaleX = parseFloat(matrixArray[0]); // convert from string to number
|
|
141
|
+
scaleY = parseFloat(matrixArray[3]);
|
|
142
|
+
}
|
|
143
|
+
return { scaleX, scaleY, elementScale };
|
|
144
|
+
}
|
|
145
|
+
reverseMultiplication(avg1, avg2) {
|
|
146
|
+
if (avg2 <= 1) {
|
|
147
|
+
return avg1 * avg2;
|
|
148
|
+
}
|
|
149
|
+
return avg1 / avg2;
|
|
150
|
+
}
|
|
151
|
+
setPositionRectangle(rectImage, mousePosition) {
|
|
152
|
+
const { ratioX, ratioY } = this.getRatio();
|
|
153
|
+
const { scaleX, scaleY } = this.getScaleElement();
|
|
154
|
+
const width = this.Element.clientWidth * this.reverseMultiplication(ratioX, scaleX);
|
|
155
|
+
const height = this.Element.clientHeight * this.reverseMultiplication(ratioY, scaleY);
|
|
156
|
+
let leftSvg = mousePosition.clientX - width / 2;
|
|
157
|
+
let topSvg = mousePosition.clientY - height / 2;
|
|
158
|
+
if (leftSvg < rectImage.left) {
|
|
159
|
+
leftSvg = rectImage.left;
|
|
160
|
+
}
|
|
161
|
+
if (leftSvg + width >= rectImage.left + rectImage.width) {
|
|
162
|
+
leftSvg = rectImage.left + rectImage.width - width;
|
|
163
|
+
}
|
|
164
|
+
if (topSvg < rectImage.top) {
|
|
165
|
+
topSvg = rectImage.top;
|
|
166
|
+
}
|
|
167
|
+
if (topSvg + height >= rectImage.top + rectImage.height) {
|
|
168
|
+
topSvg = rectImage.top + rectImage.height - height;
|
|
169
|
+
}
|
|
170
|
+
this.viewPortElement.style.left = `${leftSvg}px`;
|
|
171
|
+
this.viewPortElement.style.top = `${topSvg}px`;
|
|
172
|
+
this.viewPortElement.style.width = `${width}px`;
|
|
173
|
+
this.viewPortElement.style.height = `${Math.round(height)}px`;
|
|
174
|
+
}
|
|
175
|
+
updateMiniMap() {
|
|
176
|
+
this.imgElement.firstElementChild?.remove();
|
|
177
|
+
let { ratioX, ratioY } = this.getRatio();
|
|
178
|
+
const nodeClone = this.elementRef.nativeElement.cloneNode(true);
|
|
179
|
+
const { scaleX, scaleY } = this.getScaleElement();
|
|
180
|
+
ratioX = this.reverseMultiplication(ratioX, scaleX);
|
|
181
|
+
ratioY = this.reverseMultiplication(ratioY, scaleY);
|
|
182
|
+
nodeClone.style.transform = `scale(${ratioX},${ratioY})`;
|
|
183
|
+
nodeClone.classList.add('mo-lib-overflow-unset');
|
|
184
|
+
this.imgElement.append(nodeClone);
|
|
185
|
+
const translateX = (nodeClone.getBoundingClientRect().left - this.imgElement.getBoundingClientRect().left) / ratioX;
|
|
186
|
+
const translateY = (nodeClone.getBoundingClientRect().top - this.imgElement.getBoundingClientRect().top) / ratioY;
|
|
187
|
+
const viewPortElement = this.viewPortElement.getBoundingClientRect();
|
|
188
|
+
const rectImage = this.imgElement.getBoundingClientRect();
|
|
189
|
+
const event = {
|
|
190
|
+
clientX: this.Element.scrollLeft * ratioX + rectImage.left + viewPortElement.width / 2,
|
|
191
|
+
clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2
|
|
192
|
+
};
|
|
193
|
+
nodeClone.style.transform = `scale(${ratioX},${ratioY}) translate(-${translateX}px,-${translateY}px)`;
|
|
194
|
+
this.setPositionRectangle(rectImage, event);
|
|
195
|
+
}
|
|
196
|
+
toggle() {
|
|
197
|
+
if (this.isShow()) {
|
|
198
|
+
this.hidden();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
this.show();
|
|
202
|
+
}
|
|
203
|
+
hidden() {
|
|
204
|
+
this.isShow.set(false);
|
|
205
|
+
this.containerElement?.classList.add('invisible');
|
|
206
|
+
this.viewPortElement.classList.add('invisible');
|
|
207
|
+
}
|
|
208
|
+
show() {
|
|
209
|
+
this.isShow.set(true);
|
|
210
|
+
this.containerElement?.classList.remove('invisible');
|
|
211
|
+
this.viewPortElement.classList.remove('invisible');
|
|
212
|
+
}
|
|
213
|
+
get Element() {
|
|
214
|
+
return this.elementScroll() || this.elementRef.nativeElement;
|
|
215
|
+
}
|
|
216
|
+
// #endregion
|
|
217
|
+
ngOnDestroy() {
|
|
218
|
+
this.onDestroy.next();
|
|
219
|
+
this.onDestroy.complete();
|
|
220
|
+
}
|
|
221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsMinimapDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
222
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", 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 });
|
|
223
|
+
}
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsMinimapDirective, decorators: [{
|
|
225
|
+
type: Directive,
|
|
226
|
+
args: [{
|
|
227
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
228
|
+
selector: "[LibsUiComponentsMinimapDirective]",
|
|
229
|
+
standalone: true,
|
|
230
|
+
}]
|
|
231
|
+
}] });
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFNbEQsTUFBTSxPQUFPLGdDQUFnQztJQUMzQyxtQkFBbUI7SUFDWCxNQUFNLEdBQUcsTUFBTSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLGdCQUFnQixHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlELFVBQVUsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN4QyxhQUFhO0lBRWIsZ0JBQWdCO0lBQ1AseUJBQXlCLEdBQUcsS0FBSyxDQUE2QiwrQkFBK0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSwrQkFBK0IsRUFBRSxDQUFDLENBQUM7SUFDN0oscUJBQXFCLEdBQUcsS0FBSyxDQUE2QixHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxF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Q0FBQztJQUVELGFBQWE7SUFDYixXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBcFFVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDOzs0RkFBaEMsZ0NBQWdDO2tCQUw1QyxTQUFTO21CQUFDO29CQUNULDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBPbkRlc3Ryb3ksIG91dHB1dCwgUmVuZGVyZXIyLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQm91bmRpbmdDbGllbnRSZWN0IH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBJTWluaU1hcEZ1bmN0aW9uQ29udHJvbCwgSU1pbmlNYXBTdHlsZUNvbmZpZyB9IGZyb20gJy4vbWluaW1hcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgc2V0U3R5bGVzRWxlbWVudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogXCJbTGlic1VpQ29tcG9uZW50c01pbmltYXBEaXJlY3RpdmVdXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNNaW5pbWFwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUWVxuICBwcml2YXRlIGlzU2hvdyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgcHJpdmF0ZSBpbWdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIHZpZXdQb3J0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOUFVUXG4gIHJlYWRvbmx5IGNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ21vLW1pbmltYXAtZmxhZy1lbGVtZW50LXNjYWxlJywgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gJ21vLW1pbmltYXAtZmxhZy1lbGVtZW50LXNjYWxlJyB9KTtcbiAgcmVhZG9ubHkgdGltZXJTdGFydERyYXdNaW5pbWFwID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDI1MCwgeyB0cmFuc2Zvcm06IHZhbCA9PiB2YWwgPz8gMjUwIH0pO1xuICByZWFkb25seSBlbGVtZW50U2Nyb2xsID0gaW5wdXQ8SFRNTEVsZW1lbnQ+KCk7XG4gIHJlYWRvbmx5IHN0eWxlUmVjdGFuZ2xlRWxlbWVudCA9IGlucHV0PElNaW5pTWFwU3R5bGVDb25maWc+KCk7XG4gIHJlYWRvbmx5IHN0eWxlSW1hZ2VFbGVtZW50ID0gaW5wdXQ8SU1pbmlNYXBTdHlsZUNvbmZpZz4oKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUXG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uQ29udHJvbHMgPSBvdXRwdXQ8SU1pbmlNYXBGdW5jdGlvbkNvbnRyb2w+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOSkVDVFxuICBwcml2YXRlIGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIC8vICNlbmRyZWdpb25cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfTtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMudXBkYXRlTWluaU1hcC5iaW5kKHRoaXMpKTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5FbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMub25EZXN0cm95LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQ/LnJlbW92ZSgpO1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0pO1xuXG4gICAgdGltZXIodGhpcy50aW1lclN0YXJ0RHJhd01pbmltYXAoKSkucGlwZSh0YXAoKCkgPT4ge1xuICAgICAgdGhpcy5pbWdFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9Cb2R5KCk7XG4gICAgICB0aGlzLnZpZXdQb3J0RWxlbWVudEluaXRTdHlsZUFuZEFkZFRvSW1nRWxlbWVudCgpO1xuXG4gICAgICBjb25zdCByZWN0SW1hZ2UgPSB0aGlzLmltZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIHRoaXMuc2V0UG9zaXRpb25SZWN0YW5nbGUocmVjdEltYWdlLCB7IGNsaWVudFg6IHJlY3RJbWFnZS54LCBjbGllbnRZOiByZWN0SW1hZ2UueSB9KTtcbiAgICAgIHRoaXMudXBkYXRlTWluaU1hcCgpO1xuICAgICAgdGhpcy5vdXRGdW5jdGlvbkNvbnRyb2xzLmVtaXQoe1xuICAgICAgICBzaG93OiB0aGlzLnNob3cuYmluZCh0aGlzKSxcbiAgICAgICAgaGlkZGVuOiB0aGlzLmhpZGRlbi5iaW5kKHRoaXMpLFxuICAgICAgICB0b2dnbGU6IHRoaXMudG9nZ2xlLmJpbmQodGhpcylcbiAgICAgIH0pO1xuICAgICAgdGhpcy5pbml0RXZlbnQoKTtcbiAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBGVU5DVElPTlNcbiAgcHJpdmF0ZSBpbWdFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9Cb2R5KCkge1xuICAgIGNvbnN0IHJlY3RFbGVtZW50ID0gdGhpcy5FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Bvc2l0aW9uLWFic29sdXRlJywgJ2QtZmxleCcsICdpbnZpc2libGUnLCAnbW8tbGliLWRpcmVjdGl2ZS1taW5pbWFwLWNvbnRhaW5lcicpO1xuICAgIHRoaXMuaW1nRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwb3NpdGlvbi1yZWxhdGl2ZScsICd3LTEwMCcsICdoLTEwMCcsICdtby1saWItb3ZlcmZsb3ctaGlkZGVuJyk7XG4gICAgc2V0U3R5bGVzRWxlbWVudCh0aGlzLmNvbnRhaW5lckVsZW1lbnQsIHtcbiAgICAgIHpJbmRleDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy56SW5kZXggPz8gJzEzMDAnfWAsXG4gICAgICBiYWNrZ3JvdW5kOiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJhY2tncm91bmQgPz8gJ3doaXRlJ31gLFxuICAgICAgYm9yZGVyOiBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvcmRlciA/PyAnMXB4IHNvbGlkICNFNkU3RUEnfWAsXG4gICAgICBib3JkZXJSYWRpdXM6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uYm9yZGVyUmFkaXVzID8/ICc0cHgnfWAsXG4gICAgICB3aWR0aDogYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy53aWR0aCA/PyAnMTk4J31weGAsXG4gICAgICBoZWlnaHQ6IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8uaGVpZ2h0ID8/ICcxMDgnfXB4YFxuICAgIH0sIHRoaXMucmVuZGVyZXIyKTtcbiAgICB0aGlzLnN0eWxlUmVjdFRvcEJvdHRvbUVsZW1lbnQocmVjdEVsZW1lbnQpO1xuICAgIHRoaXMuc3R5bGVSZWN0TGVmdFJpZ2h0RWxlbWVudChyZWN0RWxlbWVudCk7XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZCh0aGlzLmltZ0VsZW1lbnQpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdmlld1BvcnRFbGVtZW50SW5pdFN0eWxlQW5kQWRkVG9JbWdFbGVtZW50KCkge1xuICAgIHRoaXMudmlld1BvcnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3Bvc2l0aW9uLWZpeGVkJywgJ21vLWxpYi1ib3JkZXItcHJpbWFyeS1nZW5lcmFsJywgJ2ludmlzaWJsZScsICdtby1saWItZGlyZWN0aXZlLW1pbmltYXAtcmVjdGFuZ2xlJyk7XG4gICAgc2V0U3R5bGVzRWxlbWVudCh0aGlzLnZpZXdQb3J0RWxlbWVudCBhcyB1bmtub3duIGFzIEhUTUxFbGVtZW50LCB7XG4gICAgICB6SW5kZXg6IGAke3RoaXMuc3R5bGVSZWN0YW5nbGVFbGVtZW50KCk/LnpJbmRleCA/PyAnMTMwMSd9YCxcbiAgICAgIGJhY2tncm91bmQ6IGAke3RoaXMuc3R5bGVSZWN0YW5nbGVFbGVtZW50KCk/LmJhY2tncm91bmQgPz8gJ3RyYW5zcGFyZW50J31gLFxuICAgICAgYm9yZGVyOiBgJHt0aGlzLnN0eWxlUmVjdGFuZ2xlRWxlbWVudCgpPy5ib3JkZXIgPz8gJ25vbmUnfWAsXG4gICAgICBib3JkZXJSYWRpdXM6IGAke3RoaXMuc3R5bGVSZWN0YW5nbGVFbGVtZW50KCk/LmJvcmRlclJhZGl1cyA/PyAnMCd9YCxcbiAgICAgIGN1cnNvcjogJ2dyYWInXG4gICAgfSwgdGhpcy5yZW5kZXJlcjIpO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZpZXdQb3J0RWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHN0eWxlUmVjdFRvcEJvdHRvbUVsZW1lbnQocmVjdEVsZW1lbnQ6IERPTVJlY3QpIHtcbiAgICBpZiAodGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5ib3R0b20pIHtcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5zdHlsZS5ib3R0b20gPSBgJHt0aGlzLnN0eWxlSW1hZ2VFbGVtZW50KCk/LmJvdHRvbX1weGA7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250YWluZXJFbGVtZW50LnN0eWxlLnRvcCA9IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8udG9wID8/IHJlY3RFbGVtZW50LnRvcH1weGA7XG4gIH1cbiAgcHJpdmF0ZSBzdHlsZVJlY3RMZWZ0UmlnaHRFbGVtZW50KHJlY3RFbGVtZW50OiBET01SZWN0KSB7XG4gICAgaWYgKHRoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8ucmlnaHQpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5zdHlsZS5yaWdodCA9IGAke3RoaXMuc3R5bGVJbWFnZUVsZW1lbnQoKT8ucmlnaHR9cHhgO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7dGhpcy5zdHlsZUltYWdlRWxlbWVudCgpPy5sZWZ0ID8/IHJlY3RFbGVtZW50LmxlZnR9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RXZlbnQoKSB7XG4gICAgbGV0IHByZUV2ZW50OiBNb3VzZUV2ZW50O1xuICAgIGNvbnN0IGhhbmRsZXJTY3JvbGxFbGVtZW50ID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCByZWN0Vmlld1BvcnQgPSB0aGlzLnZpZXdQb3J0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHJlY3RJbWFnZSA9IHRoaXMuaW1nRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHsgcmF0aW9YLCByYXRpb1kgfSA9IHRoaXMuZ2V0UmF0aW8oKTtcblxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdzY3JvbGwnKSB7XG4gICAgICAgIGV2ZW50ID0ge1xuICAgICAgICAgIGNsaWVudFg6IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0ICogcmF0aW9YICsgcmVjdEltYWdlLmxlZnQgKyByZWN0Vmlld1BvcnQud2lkdGggLyAyLFxuICAgICAgICAgIGNsaWVudFk6IHRoaXMuRWxlbWVudC5zY3JvbGxUb3AgKiByYXRpb1kgKyByZWN0SW1hZ2UudG9wICsgcmVjdFZpZXdQb3J0LmhlaWdodCAvIDJcbiAgICAgICAgfSBhcyBNb3VzZUV2ZW50O1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZSwgZXZlbnQpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWRvd24nKSB7XG4gICAgICAgIHByZUV2ZW50ID0gZXZlbnQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFwcmVFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3RhbmNlWCA9IChldmVudC5jbGllbnRYIC0gcHJlRXZlbnQuY2xpZW50WCkgLyByYXRpb1g7XG4gICAgICBjb25zdCBkaXN0YW5jZVkgPSAoZXZlbnQuY2xpZW50WSAtIHByZUV2ZW50LmNsaWVudFkpIC8gcmF0aW9ZO1xuXG4gICAgICBwcmVFdmVudCA9IGV2ZW50O1xuICAgICAgdGhpcy5FbGVtZW50LnNjcm9sbCh7XG4gICAgICAgIGxlZnQ6IHRoaXMuRWxlbWVudC5zY3JvbGxMZWZ0ICsgZGlzdGFuY2VYLFxuICAgICAgICB0b3A6IHRoaXMuRWxlbWVudC5zY3JvbGxUb3AgKyBkaXN0YW5jZVlcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBtb3VzZVVwID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHdpbmRvdywgJ21vdXNldXAnKTtcbiAgICBjb25zdCBtb3VzZW1vdmUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy52aWV3UG9ydEVsZW1lbnQsICdtb3VzZW1vdmUnKS5waXBlKHRha2VVbnRpbChtb3VzZVVwKSk7XG4gICAgY29uc3QgbW91c2VEb3duID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld1BvcnRFbGVtZW50LCAnbW91c2Vkb3duJyk7XG5cbiAgICBtb3VzZURvd24ucGlwZShtZXJnZU1hcCgobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4gbW91c2Vtb3ZlLnBpcGUoc3RhcnRXaXRoKChtb3VzZUV2ZW50KSkpKSwgdGFwKGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKGhhbmRsZXJTY3JvbGxFbGVtZW50KTtcbiAgICBmcm9tRXZlbnQ8RXZlbnQ+KHRoaXMuRWxlbWVudCwgJ3Njcm9sbCcpLnBpcGUodGFwKGV2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKChldmVudCkgPT4gaGFuZGxlclNjcm9sbEVsZW1lbnQoZXZlbnQgYXMgTW91c2VFdmVudCkpO1xuICAgIGZyb21FdmVudDxFdmVudD4od2luZG93LCAncmVzaXplJykucGlwZSh0YXAoZXZlbnQgPT4gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUodGhpcy51cGRhdGVNaW5pTWFwLmJpbmQodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYXRpbygpIHtcbiAgICBjb25zdCByZWN0Q29udGFpbmVyID0gdGhpcy5jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHJhdGlvWCA9IHJlY3RDb250YWluZXIud2lkdGggLyB0aGlzLkVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgY29uc3QgcmF0aW9ZID0gcmVjdENvbnRhaW5lci5oZWlnaHQgLyB0aGlzLkVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgcmV0dXJuIHsgcmF0aW9YOiByYXRpb1gsIHJhdGlvWTogcmF0aW9ZIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRTY2FsZUVsZW1lbnQoKSB7XG4gICAgbGV0IHsgc2NhbGVYLCBzY2FsZVkgfSA9IHsgc2NhbGVYOiAxLCBzY2FsZVk6IDEgfTtcbiAgICBjb25zdCBlbGVtZW50U2NhbGUgPSB0aGlzLkVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUoKSk/LlswXSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChlbGVtZW50U2NhbGUgJiYgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50U2NhbGUpLnRyYW5zZm9ybSkge1xuICAgICAgY29uc3QgbWF0cml4ID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLkVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSh0aGlzLmNsYXNzTmFtZUZsYWdFbGVtZW50U2NhbGUoKSlbMF0pLnRyYW5zZm9ybTtcbiAgICAgIGNvbnN0IG1hdHJpeEFycmF5ID0gbWF0cml4LnJlcGxhY2UoXCJtYXRyaXgoXCIsIFwiXCIpLnNwbGl0KFwiLFwiKTtcblxuICAgICAgc2NhbGVYID0gcGFyc2VGbG9hdChtYXRyaXhBcnJheVswXSk7IC8vIGNvbnZlcnQgZnJvbSBzdHJpbmcgdG8gbnVtYmVyXG4gICAgICBzY2FsZVkgPSBwYXJzZUZsb2F0KG1hdHJpeEFycmF5WzNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzY2FsZVgsIHNjYWxlWSwgZWxlbWVudFNjYWxlIH07XG4gIH1cblxuICBwcml2YXRlIHJldmVyc2VNdWx0aXBsaWNhdGlvbihhdmcxOiBudW1iZXIsIGF2ZzI6IG51bWJlcikge1xuICAgIGlmIChhdmcyIDw9IDEpIHtcbiAgICAgIHJldHVybiBhdmcxICogYXZnMjtcbiAgICB9XG5cbiAgICByZXR1cm4gYXZnMSAvIGF2ZzI7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uUmVjdGFuZ2xlKHJlY3RJbWFnZTogSUJvdW5kaW5nQ2xpZW50UmVjdCwgbW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlciB9KSB7XG4gICAgY29uc3QgeyByYXRpb1gsIHJhdGlvWSB9ID0gdGhpcy5nZXRSYXRpbygpO1xuICAgIGNvbnN0IHsgc2NhbGVYLCBzY2FsZVkgfSA9IHRoaXMuZ2V0U2NhbGVFbGVtZW50KCk7XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuRWxlbWVudC5jbGllbnRXaWR0aCAqIHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWCwgc2NhbGVYKTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLkVsZW1lbnQuY2xpZW50SGVpZ2h0ICogdGhpcy5yZXZlcnNlTXVsdGlwbGljYXRpb24ocmF0aW9ZLCBzY2FsZVkpO1xuICAgIGxldCBsZWZ0U3ZnID0gbW91c2VQb3NpdGlvbi5jbGllbnRYIC0gd2lkdGggLyAyO1xuICAgIGxldCB0b3BTdmcgPSBtb3VzZVBvc2l0aW9uLmNsaWVudFkgLSBoZWlnaHQgLyAyO1xuXG4gICAgaWYgKGxlZnRTdmcgPCByZWN0SW1hZ2UubGVmdCkge1xuICAgICAgbGVmdFN2ZyA9IHJlY3RJbWFnZS5sZWZ0O1xuICAgIH1cbiAgICBpZiAobGVmdFN2ZyArIHdpZHRoID49IHJlY3RJbWFnZS5sZWZ0ICsgcmVjdEltYWdlLndpZHRoKSB7XG4gICAgICBsZWZ0U3ZnID0gcmVjdEltYWdlLmxlZnQgKyByZWN0SW1hZ2Uud2lkdGggLSB3aWR0aDtcbiAgICB9XG4gICAgaWYgKHRvcFN2ZyA8IHJlY3RJbWFnZS50b3ApIHtcbiAgICAgIHRvcFN2ZyA9IHJlY3RJbWFnZS50b3A7XG4gICAgfVxuICAgIGlmICh0b3BTdmcgKyBoZWlnaHQgPj0gcmVjdEltYWdlLnRvcCArIHJlY3RJbWFnZS5oZWlnaHQpIHtcbiAgICAgIHRvcFN2ZyA9IHJlY3RJbWFnZS50b3AgKyByZWN0SW1hZ2UuaGVpZ2h0IC0gaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7bGVmdFN2Z31weGA7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuc3R5bGUudG9wID0gYCR7dG9wU3ZnfXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB0aGlzLnZpZXdQb3J0RWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtNYXRoLnJvdW5kKGhlaWdodCl9cHhgO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW5pTWFwKCkge1xuICAgIHRoaXMuaW1nRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZD8ucmVtb3ZlKCk7XG4gICAgbGV0IHsgcmF0aW9YLCByYXRpb1kgfSA9IHRoaXMuZ2V0UmF0aW8oKTtcbiAgICBjb25zdCBub2RlQ2xvbmUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgeyBzY2FsZVgsIHNjYWxlWSB9ID0gdGhpcy5nZXRTY2FsZUVsZW1lbnQoKTtcblxuICAgIHJhdGlvWCA9IHRoaXMucmV2ZXJzZU11bHRpcGxpY2F0aW9uKHJhdGlvWCwgc2NhbGVYKTtcbiAgICByYXRpb1kgPSB0aGlzLnJldmVyc2VNdWx0aXBsaWNhdGlvbihyYXRpb1ksIHNjYWxlWSk7XG4gICAgbm9kZUNsb25lLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3JhdGlvWH0sJHtyYXRpb1l9KWA7XG4gICAgbm9kZUNsb25lLmNsYXNzTGlzdC5hZGQoJ21vLWxpYi1vdmVyZmxvdy11bnNldCcpO1xuICAgIHRoaXMuaW1nRWxlbWVudC5hcHBlbmQobm9kZUNsb25lKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSAobm9kZUNsb25lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLSB0aGlzLmltZ0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgLyByYXRpb1g7XG4gICAgY29uc3QgdHJhbnNsYXRlWSA9IChub2RlQ2xvbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCkgLyByYXRpb1k7XG4gICAgY29uc3Qgdmlld1BvcnRFbGVtZW50ID0gdGhpcy52aWV3UG9ydEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcmVjdEltYWdlID0gdGhpcy5pbWdFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgY2xpZW50WDogdGhpcy5FbGVtZW50LnNjcm9sbExlZnQgKiByYXRpb1ggKyByZWN0SW1hZ2UubGVmdCArIHZpZXdQb3J0RWxlbWVudC53aWR0aCAvIDIsXG4gICAgICBjbGllbnRZOiB0aGlzLkVsZW1lbnQuc2Nyb2xsVG9wICogcmF0aW9ZICsgcmVjdEltYWdlLnRvcCArIHZpZXdQb3J0RWxlbWVudC5oZWlnaHQgLyAyXG4gICAgfSBhcyBNb3VzZUV2ZW50O1xuXG4gICAgbm9kZUNsb25lLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3JhdGlvWH0sJHtyYXRpb1l9KSB0cmFuc2xhdGUoLSR7dHJhbnNsYXRlWH1weCwtJHt0cmFuc2xhdGVZfXB4KWA7XG4gICAgdGhpcy5zZXRQb3NpdGlvblJlY3RhbmdsZShyZWN0SW1hZ2UsIGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmlzU2hvdygpKSB7XG4gICAgICB0aGlzLmhpZGRlbigpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGRlbigpIHtcbiAgICB0aGlzLmlzU2hvdy5zZXQoZmFsc2UpO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnaW52aXNpYmxlJyk7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaW52aXNpYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIHNob3coKSB7XG4gICAgdGhpcy5pc1Nob3cuc2V0KHRydWUpO1xuICAgIHRoaXMuY29udGFpbmVyRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnaW52aXNpYmxlJyk7XG4gICAgdGhpcy52aWV3UG9ydEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaW52aXNpYmxlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldCBFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50U2Nyb2xsKCkgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICAvLyAjZW5kcmVnaW9uXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59Il19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluaW1hcC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbWluaW1hcC9zcmMvbWluaW1hcC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSU1pbmlNYXBTdHlsZUNvbmZpZyB7XG4gIHg/OiBudW1iZXI7XG4gIHk/OiBudW1iZXI7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIHpJbmRleD86IG51bWJlcjtcbiAgYm9yZGVyPzogc3RyaW5nO1xuICBib3JkZXJSYWRpdXM/OiBudW1iZXI7XG4gIGJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHRvcD86IG51bWJlcjtcbiAgbGVmdD86IG51bWJlcjtcbiAgYm90dG9tPzogbnVtYmVyO1xuICByaWdodD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWluaU1hcEZ1bmN0aW9uQ29udHJvbCB7XG4gIHNob3c6ICgpID0+IHZvaWQ7XG4gIGhpZGRlbjogKCkgPT4gdm9pZDtcbiAgdG9nZ2xlOiAoKSA9PiB2b2lkO1xufVxuIl19
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { signal, input, output, inject, ElementRef, Renderer2, Directive } from '@angular/core';
|
|
3
|
+
import { Subject, timer, tap, takeUntil, fromEvent, mergeMap, startWith } from 'rxjs';
|
|
4
|
+
import { setStylesElement } from '@libs-ui/utils';
|
|
5
|
+
|
|
6
|
+
class LibsUiComponentsMinimapDirective {
|
|
7
|
+
// #region PROPERTY
|
|
8
|
+
isShow = signal(false);
|
|
9
|
+
containerElement = document.createElement('DIV');
|
|
10
|
+
imgElement = document.createElement('DIV');
|
|
11
|
+
viewPortElement = document.createElement('DIV');
|
|
12
|
+
onDestroy = new Subject();
|
|
13
|
+
// #endregion
|
|
14
|
+
// #region INPUT
|
|
15
|
+
classNameFlagElementScale = input('mo-minimap-flag-element-scale', { transform: val => val ?? 'mo-minimap-flag-element-scale' });
|
|
16
|
+
timerStartDrawMinimap = input(250, { transform: val => val ?? 250 });
|
|
17
|
+
elementScroll = input();
|
|
18
|
+
styleRectangleElement = input();
|
|
19
|
+
styleImageElement = input();
|
|
20
|
+
// #endregion
|
|
21
|
+
// #region OUTPUT
|
|
22
|
+
outFunctionControls = output();
|
|
23
|
+
// #endregion
|
|
24
|
+
// #region INJECT
|
|
25
|
+
elementRef = inject(ElementRef);
|
|
26
|
+
renderer2 = inject(Renderer2);
|
|
27
|
+
// #endregion
|
|
28
|
+
ngAfterViewInit() {
|
|
29
|
+
const config = { attributes: true, childList: true, subtree: true };
|
|
30
|
+
const observer = new MutationObserver(this.updateMiniMap.bind(this));
|
|
31
|
+
observer.observe(this.Element, config);
|
|
32
|
+
this.onDestroy.subscribe(() => {
|
|
33
|
+
this.containerElement?.remove();
|
|
34
|
+
observer.disconnect();
|
|
35
|
+
});
|
|
36
|
+
timer(this.timerStartDrawMinimap()).pipe(tap(() => {
|
|
37
|
+
this.imgElementInitStyleAndAddToBody();
|
|
38
|
+
this.viewPortElementInitStyleAndAddToImgElement();
|
|
39
|
+
const rectImage = this.imgElement.getBoundingClientRect();
|
|
40
|
+
this.setPositionRectangle(rectImage, { clientX: rectImage.x, clientY: rectImage.y });
|
|
41
|
+
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
|
+
});
|
|
47
|
+
this.initEvent();
|
|
48
|
+
}), takeUntil(this.onDestroy)).subscribe();
|
|
49
|
+
}
|
|
50
|
+
// #region FUNCTIONS
|
|
51
|
+
imgElementInitStyleAndAddToBody() {
|
|
52
|
+
const rectElement = this.Element.getBoundingClientRect();
|
|
53
|
+
this.containerElement.classList.add('position-absolute', 'd-flex', 'invisible', 'mo-lib-directive-minimap-container');
|
|
54
|
+
this.imgElement.classList.add('position-relative', 'w-100', 'h-100', 'mo-lib-overflow-hidden');
|
|
55
|
+
setStylesElement(this.containerElement, {
|
|
56
|
+
zIndex: `${this.styleImageElement()?.zIndex ?? '1300'}`,
|
|
57
|
+
background: `${this.styleImageElement()?.background ?? 'white'}`,
|
|
58
|
+
border: `${this.styleImageElement()?.border ?? '1px solid #E6E7EA'}`,
|
|
59
|
+
borderRadius: `${this.styleImageElement()?.borderRadius ?? '4px'}`,
|
|
60
|
+
width: `${this.styleImageElement()?.width ?? '198'}px`,
|
|
61
|
+
height: `${this.styleImageElement()?.height ?? '108'}px`
|
|
62
|
+
}, this.renderer2);
|
|
63
|
+
this.styleRectTopBottomElement(rectElement);
|
|
64
|
+
this.styleRectLeftRightElement(rectElement);
|
|
65
|
+
this.containerElement.append(this.imgElement);
|
|
66
|
+
document.body.appendChild(this.containerElement);
|
|
67
|
+
}
|
|
68
|
+
viewPortElementInitStyleAndAddToImgElement() {
|
|
69
|
+
this.viewPortElement.classList.add('position-fixed', 'mo-lib-border-primary-general', 'invisible', 'mo-lib-directive-minimap-rectangle');
|
|
70
|
+
setStylesElement(this.viewPortElement, {
|
|
71
|
+
zIndex: `${this.styleRectangleElement()?.zIndex ?? '1301'}`,
|
|
72
|
+
background: `${this.styleRectangleElement()?.background ?? 'transparent'}`,
|
|
73
|
+
border: `${this.styleRectangleElement()?.border ?? 'none'}`,
|
|
74
|
+
borderRadius: `${this.styleRectangleElement()?.borderRadius ?? '0'}`,
|
|
75
|
+
cursor: 'grab'
|
|
76
|
+
}, this.renderer2);
|
|
77
|
+
this.containerElement.appendChild(this.viewPortElement);
|
|
78
|
+
}
|
|
79
|
+
styleRectTopBottomElement(rectElement) {
|
|
80
|
+
if (this.styleImageElement()?.bottom) {
|
|
81
|
+
this.containerElement.style.bottom = `${this.styleImageElement()?.bottom}px`;
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.containerElement.style.top = `${this.styleImageElement()?.top ?? rectElement.top}px`;
|
|
85
|
+
}
|
|
86
|
+
styleRectLeftRightElement(rectElement) {
|
|
87
|
+
if (this.styleImageElement()?.right) {
|
|
88
|
+
this.containerElement.style.right = `${this.styleImageElement()?.right}px`;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.containerElement.style.left = `${this.styleImageElement()?.left ?? rectElement.left}px`;
|
|
92
|
+
}
|
|
93
|
+
initEvent() {
|
|
94
|
+
let preEvent;
|
|
95
|
+
const handlerScrollElement = (event) => {
|
|
96
|
+
const rectViewPort = this.viewPortElement.getBoundingClientRect();
|
|
97
|
+
const rectImage = this.imgElement.getBoundingClientRect();
|
|
98
|
+
const { ratioX, ratioY } = this.getRatio();
|
|
99
|
+
if (event.type === 'scroll') {
|
|
100
|
+
event = {
|
|
101
|
+
clientX: this.Element.scrollLeft * ratioX + rectImage.left + rectViewPort.width / 2,
|
|
102
|
+
clientY: this.Element.scrollTop * ratioY + rectImage.top + rectViewPort.height / 2
|
|
103
|
+
};
|
|
104
|
+
this.setPositionRectangle(rectImage, event);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (event.type === 'mousedown') {
|
|
108
|
+
preEvent = event;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
if (!preEvent) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const distanceX = (event.clientX - preEvent.clientX) / ratioX;
|
|
115
|
+
const distanceY = (event.clientY - preEvent.clientY) / ratioY;
|
|
116
|
+
preEvent = event;
|
|
117
|
+
this.Element.scroll({
|
|
118
|
+
left: this.Element.scrollLeft + distanceX,
|
|
119
|
+
top: this.Element.scrollTop + distanceY
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
const mouseUp = fromEvent(window, 'mouseup');
|
|
123
|
+
const mousemove = fromEvent(this.viewPortElement, 'mousemove').pipe(takeUntil(mouseUp));
|
|
124
|
+
const mouseDown = fromEvent(this.viewPortElement, 'mousedown');
|
|
125
|
+
mouseDown.pipe(mergeMap((mouseEvent) => mousemove.pipe(startWith((mouseEvent)))), tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(handlerScrollElement);
|
|
126
|
+
fromEvent(this.Element, 'scroll').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe((event) => handlerScrollElement(event));
|
|
127
|
+
fromEvent(window, 'resize').pipe(tap(event => event.stopPropagation()), takeUntil(this.onDestroy)).subscribe(this.updateMiniMap.bind(this));
|
|
128
|
+
}
|
|
129
|
+
getRatio() {
|
|
130
|
+
const rectContainer = this.containerElement.getBoundingClientRect();
|
|
131
|
+
const ratioX = rectContainer.width / this.Element.scrollWidth;
|
|
132
|
+
const ratioY = rectContainer.height / this.Element.scrollHeight;
|
|
133
|
+
return { ratioX: ratioX, ratioY: ratioY };
|
|
134
|
+
}
|
|
135
|
+
getScaleElement() {
|
|
136
|
+
let { scaleX, scaleY } = { scaleX: 1, scaleY: 1 };
|
|
137
|
+
const elementScale = this.Element.getElementsByClassName(this.classNameFlagElementScale())?.[0];
|
|
138
|
+
if (elementScale && getComputedStyle(elementScale).transform) {
|
|
139
|
+
const matrix = getComputedStyle(this.Element.getElementsByClassName(this.classNameFlagElementScale())[0]).transform;
|
|
140
|
+
const matrixArray = matrix.replace("matrix(", "").split(",");
|
|
141
|
+
scaleX = parseFloat(matrixArray[0]); // convert from string to number
|
|
142
|
+
scaleY = parseFloat(matrixArray[3]);
|
|
143
|
+
}
|
|
144
|
+
return { scaleX, scaleY, elementScale };
|
|
145
|
+
}
|
|
146
|
+
reverseMultiplication(avg1, avg2) {
|
|
147
|
+
if (avg2 <= 1) {
|
|
148
|
+
return avg1 * avg2;
|
|
149
|
+
}
|
|
150
|
+
return avg1 / avg2;
|
|
151
|
+
}
|
|
152
|
+
setPositionRectangle(rectImage, mousePosition) {
|
|
153
|
+
const { ratioX, ratioY } = this.getRatio();
|
|
154
|
+
const { scaleX, scaleY } = this.getScaleElement();
|
|
155
|
+
const width = this.Element.clientWidth * this.reverseMultiplication(ratioX, scaleX);
|
|
156
|
+
const height = this.Element.clientHeight * this.reverseMultiplication(ratioY, scaleY);
|
|
157
|
+
let leftSvg = mousePosition.clientX - width / 2;
|
|
158
|
+
let topSvg = mousePosition.clientY - height / 2;
|
|
159
|
+
if (leftSvg < rectImage.left) {
|
|
160
|
+
leftSvg = rectImage.left;
|
|
161
|
+
}
|
|
162
|
+
if (leftSvg + width >= rectImage.left + rectImage.width) {
|
|
163
|
+
leftSvg = rectImage.left + rectImage.width - width;
|
|
164
|
+
}
|
|
165
|
+
if (topSvg < rectImage.top) {
|
|
166
|
+
topSvg = rectImage.top;
|
|
167
|
+
}
|
|
168
|
+
if (topSvg + height >= rectImage.top + rectImage.height) {
|
|
169
|
+
topSvg = rectImage.top + rectImage.height - height;
|
|
170
|
+
}
|
|
171
|
+
this.viewPortElement.style.left = `${leftSvg}px`;
|
|
172
|
+
this.viewPortElement.style.top = `${topSvg}px`;
|
|
173
|
+
this.viewPortElement.style.width = `${width}px`;
|
|
174
|
+
this.viewPortElement.style.height = `${Math.round(height)}px`;
|
|
175
|
+
}
|
|
176
|
+
updateMiniMap() {
|
|
177
|
+
this.imgElement.firstElementChild?.remove();
|
|
178
|
+
let { ratioX, ratioY } = this.getRatio();
|
|
179
|
+
const nodeClone = this.elementRef.nativeElement.cloneNode(true);
|
|
180
|
+
const { scaleX, scaleY } = this.getScaleElement();
|
|
181
|
+
ratioX = this.reverseMultiplication(ratioX, scaleX);
|
|
182
|
+
ratioY = this.reverseMultiplication(ratioY, scaleY);
|
|
183
|
+
nodeClone.style.transform = `scale(${ratioX},${ratioY})`;
|
|
184
|
+
nodeClone.classList.add('mo-lib-overflow-unset');
|
|
185
|
+
this.imgElement.append(nodeClone);
|
|
186
|
+
const translateX = (nodeClone.getBoundingClientRect().left - this.imgElement.getBoundingClientRect().left) / ratioX;
|
|
187
|
+
const translateY = (nodeClone.getBoundingClientRect().top - this.imgElement.getBoundingClientRect().top) / ratioY;
|
|
188
|
+
const viewPortElement = this.viewPortElement.getBoundingClientRect();
|
|
189
|
+
const rectImage = this.imgElement.getBoundingClientRect();
|
|
190
|
+
const event = {
|
|
191
|
+
clientX: this.Element.scrollLeft * ratioX + rectImage.left + viewPortElement.width / 2,
|
|
192
|
+
clientY: this.Element.scrollTop * ratioY + rectImage.top + viewPortElement.height / 2
|
|
193
|
+
};
|
|
194
|
+
nodeClone.style.transform = `scale(${ratioX},${ratioY}) translate(-${translateX}px,-${translateY}px)`;
|
|
195
|
+
this.setPositionRectangle(rectImage, event);
|
|
196
|
+
}
|
|
197
|
+
toggle() {
|
|
198
|
+
if (this.isShow()) {
|
|
199
|
+
this.hidden();
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
this.show();
|
|
203
|
+
}
|
|
204
|
+
hidden() {
|
|
205
|
+
this.isShow.set(false);
|
|
206
|
+
this.containerElement?.classList.add('invisible');
|
|
207
|
+
this.viewPortElement.classList.add('invisible');
|
|
208
|
+
}
|
|
209
|
+
show() {
|
|
210
|
+
this.isShow.set(true);
|
|
211
|
+
this.containerElement?.classList.remove('invisible');
|
|
212
|
+
this.viewPortElement.classList.remove('invisible');
|
|
213
|
+
}
|
|
214
|
+
get Element() {
|
|
215
|
+
return this.elementScroll() || this.elementRef.nativeElement;
|
|
216
|
+
}
|
|
217
|
+
// #endregion
|
|
218
|
+
ngOnDestroy() {
|
|
219
|
+
this.onDestroy.next();
|
|
220
|
+
this.onDestroy.complete();
|
|
221
|
+
}
|
|
222
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsMinimapDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
223
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", 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 });
|
|
224
|
+
}
|
|
225
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsMinimapDirective, decorators: [{
|
|
226
|
+
type: Directive,
|
|
227
|
+
args: [{
|
|
228
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
229
|
+
selector: "[LibsUiComponentsMinimapDirective]",
|
|
230
|
+
standalone: true,
|
|
231
|
+
}]
|
|
232
|
+
}] });
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Generated bundle index. Do not edit.
|
|
236
|
+
*/
|
|
237
|
+
|
|
238
|
+
export { LibsUiComponentsMinimapDirective };
|
|
239
|
+
//# sourceMappingURL=libs-ui-components-minimap.mjs.map
|
|
@@ -0,0 +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 { fromEvent, mergeMap, startWith, Subject, takeUntil, tap, timer } from 'rxjs';\nimport { IBoundingClientRect } from '@libs-ui/interfaces-types';\nimport { IMiniMapFunctionControl, IMiniMapStyleConfig } from './minimap.interface';\nimport { setStylesElement } from '@libs-ui/utils';\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>('mo-minimap-flag-element-scale', { transform: val => val ?? 'mo-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('position-absolute', 'd-flex', 'invisible', 'mo-lib-directive-minimap-container');\n this.imgElement.classList.add('position-relative', 'w-100', 'h-100', 'mo-lib-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('position-fixed', 'mo-lib-border-primary-general', 'invisible', 'mo-lib-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\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 const mouseUp = fromEvent<MouseEvent>(window, 'mouseup');\n const mousemove = fromEvent<MouseEvent>(this.viewPortElement, 'mousemove').pipe(takeUntil(mouseUp));\n const mouseDown = fromEvent<MouseEvent>(this.viewPortElement, 'mousedown');\n\n mouseDown.pipe(mergeMap((mouseEvent: MouseEvent) => mousemove.pipe(startWith((mouseEvent)))), tap(event => event.stopPropagation()), takeUntil(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\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.elementRef.nativeElement.cloneNode(true) as HTMLElement;\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('mo-lib-overflow-unset');\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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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { IMiniMapFunctionControl, IMiniMapStyleConfig } from './minimap.interface';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class LibsUiComponentsMinimapDirective implements AfterViewInit, OnDestroy {
|
|
5
|
+
private isShow;
|
|
6
|
+
private containerElement;
|
|
7
|
+
private imgElement;
|
|
8
|
+
private viewPortElement;
|
|
9
|
+
private onDestroy;
|
|
10
|
+
readonly classNameFlagElementScale: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
|
|
11
|
+
readonly timerStartDrawMinimap: import("@angular/core").InputSignalWithTransform<number, number | undefined>;
|
|
12
|
+
readonly elementScroll: import("@angular/core").InputSignal<HTMLElement | undefined>;
|
|
13
|
+
readonly styleRectangleElement: import("@angular/core").InputSignal<IMiniMapStyleConfig | undefined>;
|
|
14
|
+
readonly styleImageElement: import("@angular/core").InputSignal<IMiniMapStyleConfig | undefined>;
|
|
15
|
+
readonly outFunctionControls: import("@angular/core").OutputEmitterRef<IMiniMapFunctionControl>;
|
|
16
|
+
private elementRef;
|
|
17
|
+
private renderer2;
|
|
18
|
+
ngAfterViewInit(): void;
|
|
19
|
+
private imgElementInitStyleAndAddToBody;
|
|
20
|
+
private viewPortElementInitStyleAndAddToImgElement;
|
|
21
|
+
private styleRectTopBottomElement;
|
|
22
|
+
private styleRectLeftRightElement;
|
|
23
|
+
private initEvent;
|
|
24
|
+
private getRatio;
|
|
25
|
+
private getScaleElement;
|
|
26
|
+
private reverseMultiplication;
|
|
27
|
+
private setPositionRectangle;
|
|
28
|
+
private updateMiniMap;
|
|
29
|
+
private toggle;
|
|
30
|
+
private hidden;
|
|
31
|
+
private show;
|
|
32
|
+
private get Element();
|
|
33
|
+
ngOnDestroy(): void;
|
|
34
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsMinimapDirective, 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; }; }, { "outFunctionControls": "outFunctionControls"; }, never, never, true, never>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface IMiniMapStyleConfig {
|
|
2
|
+
x?: number;
|
|
3
|
+
y?: number;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
zIndex?: number;
|
|
7
|
+
border?: string;
|
|
8
|
+
borderRadius?: number;
|
|
9
|
+
background?: string;
|
|
10
|
+
top?: number;
|
|
11
|
+
left?: number;
|
|
12
|
+
bottom?: number;
|
|
13
|
+
right?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface IMiniMapFunctionControl {
|
|
16
|
+
show: () => void;
|
|
17
|
+
hidden: () => void;
|
|
18
|
+
toggle: () => void;
|
|
19
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libs-ui/components-minimap",
|
|
3
|
+
"version": "0.2.107",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^18.2.0",
|
|
6
|
+
"@angular/core": "^18.2.0"
|
|
7
|
+
},
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"module": "fesm2022/libs-ui-components-minimap.mjs",
|
|
10
|
+
"typings": "index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
"./package.json": {
|
|
13
|
+
"default": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./index.d.ts",
|
|
17
|
+
"esm2022": "./esm2022/libs-ui-components-minimap.mjs",
|
|
18
|
+
"esm": "./esm2022/libs-ui-components-minimap.mjs",
|
|
19
|
+
"default": "./fesm2022/libs-ui-components-minimap.mjs"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"tslib": "^2.3.0"
|
|
24
|
+
}
|
|
25
|
+
}
|