asksuite-citrus 3.20.9 → 3.20.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/classes/bubble-toolbox.mjs +101 -3
- package/esm2022/lib/directives/richtext-toolbox/richtext-toolbox.directive.mjs +12 -3
- package/fesm2022/asksuite-citrus.mjs +111 -6
- package/fesm2022/asksuite-citrus.mjs.map +1 -1
- package/lib/classes/bubble-toolbox.d.ts +38 -1
- package/lib/directives/richtext-toolbox/richtext-toolbox.directive.d.ts +8 -1
- package/package.json +1 -1
|
@@ -1,15 +1,60 @@
|
|
|
1
1
|
import { Toolbox } from "./toolbox";
|
|
2
|
+
import { Overlay, } from "@angular/cdk/overlay";
|
|
3
|
+
import { DomPortal } from "@angular/cdk/portal";
|
|
2
4
|
const TOOLBOX_HEIGHT = 40;
|
|
3
5
|
const MARGIN = 8;
|
|
4
6
|
const MOUSE_EVENT = 'mouseup';
|
|
7
|
+
/** Pane's top-left lands exactly at the anchor moveOverlay() positions. */
|
|
8
|
+
const OVERLAY_POSITIONS = [
|
|
9
|
+
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },
|
|
10
|
+
];
|
|
5
11
|
class BubbleToolbox extends Toolbox {
|
|
6
|
-
|
|
12
|
+
/**
|
|
13
|
+
* `useOverlay` opts into rendering through a CDK Overlay (portaled to
|
|
14
|
+
* <body>) instead of a plain `position:absolute` child of the editor
|
|
15
|
+
* itself. Defaults to false — the plain-append behavior is unchanged
|
|
16
|
+
* for every existing consumer (e.g. the main chat-input's bubble
|
|
17
|
+
* toolbar, which today renders correctly with no clipping ancestor).
|
|
18
|
+
* Opt in only where the editor lives inside a `overflow:hidden/auto`
|
|
19
|
+
* ancestor (e.g. a scrollable list row), which clips a plain popup
|
|
20
|
+
* above its own viewport no matter the z-index — same reasoning as why
|
|
21
|
+
* the economy queue's emoji picker uses a CDK Overlay instead of a
|
|
22
|
+
* plain popup.
|
|
23
|
+
*/
|
|
24
|
+
constructor(injector, useOverlay = false) {
|
|
7
25
|
super(injector);
|
|
26
|
+
this.injector = injector;
|
|
27
|
+
this.useOverlay = useOverlay;
|
|
8
28
|
}
|
|
9
29
|
move(bounds) {
|
|
30
|
+
if (this.useOverlay) {
|
|
31
|
+
this.moveOverlay(bounds);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
10
34
|
this.renderer2.setStyle(this.componentEl, 'top', `${bounds.top - (TOOLBOX_HEIGHT + MARGIN)}px`);
|
|
11
35
|
this.renderer2.setStyle(this.componentEl, 'left', `${bounds.left}px`);
|
|
12
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Quill's bounds are relative to the editor's own container (`hostEl`)
|
|
39
|
+
* — the SAME coordinate space the plain local-append path already uses
|
|
40
|
+
* for `componentEl`'s `top`/`left` above, so the hidden anchor is moved
|
|
41
|
+
* exactly the same way. The overlay connects to this anchor (a real,
|
|
42
|
+
* live DOM node) rather than a bare viewport point: CDK's position
|
|
43
|
+
* strategy re-queries an anchor's `getBoundingClientRect()` fresh on
|
|
44
|
+
* every reposition, but a bare point origin is a one-time snapshot that
|
|
45
|
+
* never changes — `reposition()`'s scroll listener would still fire,
|
|
46
|
+
* but it'd just keep reapplying those same stale coordinates, leaving
|
|
47
|
+
* the toolbar stuck at its original screen position once a scrollable
|
|
48
|
+
* ancestor (e.g. the economy queue's list) actually scrolls, exactly
|
|
49
|
+
* where this overlay path is needed most.
|
|
50
|
+
*/
|
|
51
|
+
moveOverlay(bounds) {
|
|
52
|
+
if (!this.overlayAnchorEl)
|
|
53
|
+
return;
|
|
54
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'top', `${bounds.top - (TOOLBOX_HEIGHT + MARGIN)}px`);
|
|
55
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'left', `${bounds.left}px`);
|
|
56
|
+
this.overlayRef?.updatePosition();
|
|
57
|
+
}
|
|
13
58
|
listenOutsideClicks() {
|
|
14
59
|
this.clickListener = (event) => {
|
|
15
60
|
if (!this.componentEl?.contains(event.target)
|
|
@@ -35,15 +80,68 @@ class BubbleToolbox extends Toolbox {
|
|
|
35
80
|
displayComponent() {
|
|
36
81
|
super.displayComponent();
|
|
37
82
|
this.listenOutsideClicks();
|
|
38
|
-
|
|
83
|
+
if (this.useOverlay) {
|
|
84
|
+
// Makes hostEl the anchor's containing block regardless of whatever
|
|
85
|
+
// the consumer's own CSS happens to do — neither Quill's nor
|
|
86
|
+
// citrus's stylesheets put `position` on the editor container
|
|
87
|
+
// (`.ql-container`), so without this the anchor's top/left would
|
|
88
|
+
// resolve against whichever ancestor further up happens to be
|
|
89
|
+
// positioned instead, silently offsetting it.
|
|
90
|
+
this.renderer2.setStyle(this.hostEl.nativeElement, 'position', 'relative');
|
|
91
|
+
this.overlayAnchorEl = this.renderer2.createElement('span');
|
|
92
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'position', 'absolute');
|
|
93
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'width', '1px');
|
|
94
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'height', '1px');
|
|
95
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'visibility', 'hidden');
|
|
96
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'pointer-events', 'none');
|
|
97
|
+
// Appended before the overlay is created so CDK's ancestor-scroll
|
|
98
|
+
// detection (run at attach time) walks up from where the anchor
|
|
99
|
+
// actually lives in the DOM, not from a detached node.
|
|
100
|
+
this.renderer2.appendChild(this.hostEl.nativeElement, this.overlayAnchorEl);
|
|
101
|
+
const overlay = this.injector.get(Overlay);
|
|
102
|
+
this.overlayPositionStrategy = overlay.position()
|
|
103
|
+
.flexibleConnectedTo(this.overlayAnchorEl)
|
|
104
|
+
.withPositions(OVERLAY_POSITIONS);
|
|
105
|
+
this.overlayRef = overlay.create({
|
|
106
|
+
positionStrategy: this.overlayPositionStrategy,
|
|
107
|
+
scrollStrategy: overlay.scrollStrategies.reposition(),
|
|
108
|
+
});
|
|
109
|
+
// A plain appendChild into overlayElement skips the position
|
|
110
|
+
// strategy's own attach() lifecycle (it never gets a reference to
|
|
111
|
+
// the pane), which crashes the next reposition — DomPortal goes
|
|
112
|
+
// through OverlayRef's normal attach path instead, so everything
|
|
113
|
+
// (including the anchor-based restore on dispose) is wired up
|
|
114
|
+
// the same way a ComponentPortal's would be.
|
|
115
|
+
this.overlayRef.attach(new DomPortal(this.componentEl));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.renderer2.appendChild(this.hostEl?.nativeElement, this.componentEl);
|
|
119
|
+
}
|
|
39
120
|
this.componentRef.setInput('type', 'bubble');
|
|
40
121
|
}
|
|
122
|
+
// `isVisible()`'s base implementation checks whether componentEl is a
|
|
123
|
+
// DOM descendant of hostEl — never true once componentEl lives inside
|
|
124
|
+
// the overlay pane in <body> instead.
|
|
125
|
+
isVisible() {
|
|
126
|
+
return this.useOverlay ? !!this.overlayRef : super.isVisible();
|
|
127
|
+
}
|
|
41
128
|
destroyComponent() {
|
|
42
129
|
document.body.removeEventListener(MOUSE_EVENT, this.clickListener);
|
|
130
|
+
// Disposing first restores componentEl to where it lived before the
|
|
131
|
+
// DomPortal moved it (its own anchor-based teardown) — doing this
|
|
132
|
+
// AFTER destroying the Angular component would instead re-insert an
|
|
133
|
+
// already-destroyed, inert DOM node back into the page.
|
|
134
|
+
this.overlayRef?.dispose();
|
|
135
|
+
this.overlayRef = undefined;
|
|
136
|
+
this.overlayPositionStrategy = undefined;
|
|
137
|
+
if (this.overlayAnchorEl) {
|
|
138
|
+
this.renderer2.removeChild(this.hostEl.nativeElement, this.overlayAnchorEl);
|
|
139
|
+
this.overlayAnchorEl = undefined;
|
|
140
|
+
}
|
|
43
141
|
super.destroyComponent();
|
|
44
142
|
}
|
|
45
143
|
}
|
|
46
144
|
export const BubbleToolboxProxy = {
|
|
47
145
|
BubbleToolbox
|
|
48
146
|
};
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLXRvb2xib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jbGFzc2VzL2J1YmJsZS10b29sYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHcEMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFFN0IsTUFBTSxhQUFjLFNBQVEsT0FBTztJQUcvQixZQUFZLFFBQWtCO1FBQzVCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRU8sSUFBSSxDQUFDLE1BQW9CO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxNQUFNLEVBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM3QixJQUNFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQWMsQ0FBQzttQkFDOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUNwQixDQUFDO2dCQUNBLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDLENBQUE7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVRLGNBQWMsQ0FBQyxLQUFpQjtRQUN2QyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNCLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNqRCxJQUFJLFlBQVksSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLFFBQVE7Z0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRVEsZ0JBQWdCO1FBQ3ZCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsWUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVRLGdCQUFnQjtRQUN2QixRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYyxDQUFDLENBQUM7UUFDcEUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBR0gsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsYUFBYTtDQUNkLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCb3VuZHNTdGF0aWMgfSBmcm9tIFwicXVpbGxcIjtcbmltcG9ydCB7IFRvb2xib3ggfSBmcm9tIFwiLi90b29sYm94XCI7XG5pbXBvcnQgeyBUb29sc1N0YXRlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvcmljaHRleHQtdG9vbGJveC5pbnRlcmZhY2VcIjtcblxuY29uc3QgVE9PTEJPWF9IRUlHSFQgPSA0MDtcbmNvbnN0IE1BUkdJTiA9IDg7XG5jb25zdCBNT1VTRV9FVkVOVCA9ICdtb3VzZXVwJ1xuXG5jbGFzcyBCdWJibGVUb29sYm94IGV4dGVuZHMgVG9vbGJveCB7XG4gICAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBcbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgbW92ZShib3VuZHM6IEJvdW5kc1N0YXRpYykge1xuICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5jb21wb25lbnRFbCwndG9wJyxgJHtib3VuZHMudG9wIC0gKFRPT0xCT1hfSEVJR0hUICsgTUFSR0lOKX1weGApO1xuICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5jb21wb25lbnRFbCwnbGVmdCcsYCR7Ym91bmRzLmxlZnR9cHhgKTtcbiAgICB9XG4gIFxuICAgIHByaXZhdGUgbGlzdGVuT3V0c2lkZUNsaWNrcygpe1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmKFxuICAgICAgICAgICF0aGlzLmNvbXBvbmVudEVsPy5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgXG4gICAgICAgICAgJiYgdGhpcy5pc1Zpc2libGUoKVxuICAgICAgICApe1xuICAgICAgICAgIHRoaXMuZGVzdHJveUNvbXBvbmVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoTU9VU0VfRVZFTlQsIHRoaXMuY2xpY2tMaXN0ZW5lcik7XG4gICAgfVxuICAgIFxuICAgIG92ZXJyaWRlIG9uVG9vbHNDaGFuZ2VkKHN0YXRlOiBUb29sc1N0YXRlKTogdm9pZCB7XG4gICAgICBzdXBlci5vblRvb2xzQ2hhbmdlZChzdGF0ZSlcbiAgICAgIGNvbnN0IHsgaGFzU2VsZWN0aW9uLCBoYXNGb2N1cywgYm91bmRzIH0gPSBzdGF0ZTtcbiAgICAgIGlmIChoYXNTZWxlY3Rpb24gJiYgYm91bmRzKSB7XG4gICAgICAgIGlmKCF0aGlzLmlzVmlzaWJsZSgpKVxuICAgICAgICAgIHRoaXMuZGlzcGxheUNvbXBvbmVudCgpO1xuICAgICAgICB0aGlzLm1vdmUoYm91bmRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKHRoaXMuaXNWaXNpYmxlKCkgJiYgaGFzRm9jdXMpXG4gICAgICAgICAgdGhpcy5kZXN0cm95Q29tcG9uZW50KCk7XG4gICAgICB9XG4gICAgfVxuICBcbiAgICBvdmVycmlkZSBkaXNwbGF5Q29tcG9uZW50KCkge1xuICAgICAgc3VwZXIuZGlzcGxheUNvbXBvbmVudCgpO1xuICAgICAgdGhpcy5saXN0ZW5PdXRzaWRlQ2xpY2tzKCk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLmhvc3RFbD8ubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEVsKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmIS5zZXRJbnB1dCgndHlwZScsJ2J1YmJsZScpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGRlc3Ryb3lDb21wb25lbnQoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoTU9VU0VfRVZFTlQsIHRoaXMuY2xpY2tMaXN0ZW5lciEpO1xuICAgICAgc3VwZXIuZGVzdHJveUNvbXBvbmVudCgpO1xuICAgIH1cbiAgfVxuXG5cbmV4cG9ydCBjb25zdCBCdWJibGVUb29sYm94UHJveHkgPSB7XG4gIEJ1YmJsZVRvb2xib3hcbn0iXX0=
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLXRvb2xib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9jbGFzc2VzL2J1YmJsZS10b29sYm94LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsT0FBTyxFQUdMLE9BQU8sR0FFUixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQTtBQUU3QiwyRUFBMkU7QUFDM0UsTUFBTSxpQkFBaUIsR0FBd0I7SUFDN0MsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0NBQ3pFLENBQUM7QUFFRixNQUFNLGFBQWMsU0FBUSxPQUFPO0lBVS9COzs7Ozs7Ozs7OztPQVdHO0lBQ0gsWUFBb0IsUUFBa0IsRUFBVSxhQUFhLEtBQUs7UUFDaEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7SUFFbEUsQ0FBQztJQUVPLElBQUksQ0FBQyxNQUFvQjtRQUMvQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxH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QUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLHNFQUFzRTtJQUN0RSxzQ0FBc0M7SUFDbkIsU0FBUztRQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVRLGdCQUFnQjtRQUN2QixRQUFRLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYyxDQUFDLENBQUM7UUFDcEUsb0VBQW9FO1FBQ3BFLGtFQUFrRTtRQUNsRSxvRUFBb0U7UUFDcEUsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7UUFDbkMsQ0FBQztRQUNELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQUdILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLGFBQWE7Q0FDZCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQm91bmRzU3RhdGljIH0gZnJvbSBcInF1aWxsXCI7XG5pbXBvcnQgeyBUb29sYm94IH0gZnJvbSBcIi4vdG9vbGJveFwiO1xuaW1wb3J0IHsgVG9vbHNTdGF0ZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3JpY2h0ZXh0LXRvb2xib3guaW50ZXJmYWNlXCI7XG5pbXBvcnQge1xuICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBPdmVybGF5LFxuICBPdmVybGF5UmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7IERvbVBvcnRhbCB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5cbmNvbnN0IFRPT0xCT1hfSEVJR0hUID0gNDA7XG5jb25zdCBNQVJHSU4gPSA4O1xuY29uc3QgTU9VU0VfRVZFTlQgPSAnbW91c2V1cCdcblxuLyoqIFBhbmUncyB0b3AtbGVmdCBsYW5kcyBleGFjdGx5IGF0IHRoZSBhbmNob3IgbW92ZU92ZXJsYXkoKSBwb3NpdGlvbnMuICovXG5jb25zdCBPVkVSTEFZX1BPU0lUSU9OUzogQ29ubmVjdGVkUG9zaXRpb25bXSA9IFtcbiAgeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAndG9wJyB9LFxuXTtcblxuY2xhc3MgQnViYmxlVG9vbGJveCBleHRlbmRzIFRvb2xib3gge1xuICAgIHByaXZhdGUgY2xpY2tMaXN0ZW5lcj86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICAgIHByaXZhdGUgb3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3k/OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgLyoqXG4gICAgICogUmVhbCwgaGlkZGVuIDF4MSBET00gbm9kZSB0aGUgb3ZlcmxheSBjb25uZWN0cyB0byDigJQgc2VlIG1vdmVPdmVybGF5KClcbiAgICAgKiBmb3Igd2h5IHRoaXMgcmVwbGFjZXMgYSBiYXJlIHZpZXdwb3J0IHBvaW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgb3ZlcmxheUFuY2hvckVsPzogSFRNTEVsZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBgdXNlT3ZlcmxheWAgb3B0cyBpbnRvIHJlbmRlcmluZyB0aHJvdWdoIGEgQ0RLIE92ZXJsYXkgKHBvcnRhbGVkIHRvXG4gICAgICogPGJvZHk+KSBpbnN0ZWFkIG9mIGEgcGxhaW4gYHBvc2l0aW9uOmFic29sdXRlYCBjaGlsZCBvZiB0aGUgZWRpdG9yXG4gICAgICogaXRzZWxmLiBEZWZhdWx0cyB0byBmYWxzZSDigJQgdGhlIHBsYWluLWFwcGVuZCBiZWhhdmlvciBpcyB1bmNoYW5nZWRcbiAgICAgKiBmb3IgZXZlcnkgZXhpc3RpbmcgY29uc3VtZXIgKGUuZy4gdGhlIG1haW4gY2hhdC1pbnB1dCdzIGJ1YmJsZVxuICAgICAqIHRvb2xiYXIsIHdoaWNoIHRvZGF5IHJlbmRlcnMgY29ycmVjdGx5IHdpdGggbm8gY2xpcHBpbmcgYW5jZXN0b3IpLlxuICAgICAqIE9wdCBpbiBvbmx5IHdoZXJlIHRoZSBlZGl0b3IgbGl2ZXMgaW5zaWRlIGEgYG92ZXJmbG93OmhpZGRlbi9hdXRvYFxuICAgICAqIGFuY2VzdG9yIChlLmcuIGEgc2Nyb2xsYWJsZSBsaXN0IHJvdyksIHdoaWNoIGNsaXBzIGEgcGxhaW4gcG9wdXBcbiAgICAgKiBhYm92ZSBpdHMgb3duIHZpZXdwb3J0IG5vIG1hdHRlciB0aGUgei1pbmRleCDigJQgc2FtZSByZWFzb25pbmcgYXMgd2h5XG4gICAgICogdGhlIGVjb25vbXkgcXVldWUncyBlbW9qaSBwaWNrZXIgdXNlcyBhIENESyBPdmVybGF5IGluc3RlYWQgb2YgYVxuICAgICAqIHBsYWluIHBvcHVwLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIHVzZU92ZXJsYXkgPSBmYWxzZSkge1xuICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW92ZShib3VuZHM6IEJvdW5kc1N0YXRpYykge1xuICAgICAgaWYgKHRoaXMudXNlT3ZlcmxheSkge1xuICAgICAgICB0aGlzLm1vdmVPdmVybGF5KGJvdW5kcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuY29tcG9uZW50RWwsJ3RvcCcsYCR7Ym91bmRzLnRvcCAtIChUT09MQk9YX0hFSUdIVCArIE1BUkdJTil9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuY29tcG9uZW50RWwsJ2xlZnQnLGAke2JvdW5kcy5sZWZ0fXB4YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVpbGwncyBib3VuZHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBlZGl0b3IncyBvd24gY29udGFpbmVyIChgaG9zdEVsYClcbiAgICAgKiDigJQgdGhlIFNBTUUgY29vcmRpbmF0ZSBzcGFjZSB0aGUgcGxhaW4gbG9jYWwtYXBwZW5kIHBhdGggYWxyZWFkeSB1c2VzXG4gICAgICogZm9yIGBjb21wb25lbnRFbGAncyBgdG9wYC9gbGVmdGAgYWJvdmUsIHNvIHRoZSBoaWRkZW4gYW5jaG9yIGlzIG1vdmVkXG4gICAgICogZXhhY3RseSB0aGUgc2FtZSB3YXkuIFRoZSBvdmVybGF5IGNvbm5lY3RzIHRvIHRoaXMgYW5jaG9yIChhIHJlYWwsXG4gICAgICogbGl2ZSBET00gbm9kZSkgcmF0aGVyIHRoYW4gYSBiYXJlIHZpZXdwb3J0IHBvaW50OiBDREsncyBwb3NpdGlvblxuICAgICAqIHN0cmF0ZWd5IHJlLXF1ZXJpZXMgYW4gYW5jaG9yJ3MgYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYCBmcmVzaCBvblxuICAgICAqIGV2ZXJ5IHJlcG9zaXRpb24sIGJ1dCBhIGJhcmUgcG9pbnQgb3JpZ2luIGlzIGEgb25lLXRpbWUgc25hcHNob3QgdGhhdFxuICAgICAqIG5ldmVyIGNoYW5nZXMg4oCUIGByZXBvc2l0aW9uKClgJ3Mgc2Nyb2xsIGxpc3RlbmVyIHdvdWxkIHN0aWxsIGZpcmUsXG4gICAgICogYnV0IGl0J2QganVzdCBrZWVwIHJlYXBwbHlpbmcgdGhvc2Ugc2FtZSBzdGFsZSBjb29yZGluYXRlcywgbGVhdmluZ1xuICAgICAqIHRoZSB0b29sYmFyIHN0dWNrIGF0IGl0cyBvcmlnaW5hbCBzY3JlZW4gcG9zaXRpb24gb25jZSBhIHNjcm9sbGFibGVcbiAgICAgKiBhbmNlc3RvciAoZS5nLiB0aGUgZWNvbm9teSBxdWV1ZSdzIGxpc3QpIGFjdHVhbGx5IHNjcm9sbHMsIGV4YWN0bHlcbiAgICAgKiB3aGVyZSB0aGlzIG92ZXJsYXkgcGF0aCBpcyBuZWVkZWQgbW9zdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdmVPdmVybGF5KGJvdW5kczogQm91bmRzU3RhdGljKSB7XG4gICAgICBpZiAoIXRoaXMub3ZlcmxheUFuY2hvckVsKSByZXR1cm47XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLm92ZXJsYXlBbmNob3JFbCwgJ3RvcCcsIGAke2JvdW5kcy50b3AgLSAoVE9PTEJPWF9IRUlHSFQgKyBNQVJHSU4pfXB4YCk7XG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLm92ZXJsYXlBbmNob3JFbCwgJ2xlZnQnLCBgJHtib3VuZHMubGVmdH1weGApO1xuICAgICAgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGlzdGVuT3V0c2lkZUNsaWNrcygpe1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmKFxuICAgICAgICAgICF0aGlzLmNvbXBvbmVudEVsPy5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSlcbiAgICAgICAgICAmJiB0aGlzLmlzVmlzaWJsZSgpXG4gICAgICAgICl7XG4gICAgICAgICAgdGhpcy5kZXN0cm95Q29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihNT1VTRV9FVkVOVCwgdGhpcy5jbGlja0xpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBvblRvb2xzQ2hhbmdlZChzdGF0ZTogVG9vbHNTdGF0ZSk6IHZvaWQge1xuICAgICAgc3VwZXIub25Ub29sc0NoYW5nZWQoc3RhdGUpXG4gICAgICBjb25zdCB7IGhhc1NlbGVjdGlvbiwgaGFzRm9jdXMsIGJvdW5kcyB9ID0gc3RhdGU7XG4gICAgICBpZiAoaGFzU2VsZWN0aW9uICYmIGJvdW5kcykge1xuICAgICAgICBpZighdGhpcy5pc1Zpc2libGUoKSlcbiAgICAgICAgICB0aGlzLmRpc3BsYXlDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy5tb3ZlKGJvdW5kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZih0aGlzLmlzVmlzaWJsZSgpICYmIGhhc0ZvY3VzKVxuICAgICAgICAgIHRoaXMuZGVzdHJveUNvbXBvbmVudCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc3BsYXlDb21wb25lbnQoKSB7XG4gICAgICBzdXBlci5kaXNwbGF5Q29tcG9uZW50KCk7XG4gICAgICB0aGlzLmxpc3Rlbk91dHNpZGVDbGlja3MoKTtcbiAgICAgIGlmICh0aGlzLnVzZU92ZXJsYXkpIHtcbiAgICAgICAgLy8gTWFrZXMgaG9zdEVsIHRoZSBhbmNob3IncyBjb250YWluaW5nIGJsb2NrIHJlZ2FyZGxlc3Mgb2Ygd2hhdGV2ZXJcbiAgICAgICAgLy8gdGhlIGNvbnN1bWVyJ3Mgb3duIENTUyBoYXBwZW5zIHRvIGRvIOKAlCBuZWl0aGVyIFF1aWxsJ3Mgbm9yXG4gICAgICAgIC8vIGNpdHJ1cydzIHN0eWxlc2hlZXRzIHB1dCBgcG9zaXRpb25gIG9uIHRoZSBlZGl0b3IgY29udGFpbmVyXG4gICAgICAgIC8vIChgLnFsLWNvbnRhaW5lcmApLCBzbyB3aXRob3V0IHRoaXMgdGhlIGFuY2hvcidzIHRvcC9sZWZ0IHdvdWxkXG4gICAgICAgIC8vIHJlc29sdmUgYWdhaW5zdCB3aGljaGV2ZXIgYW5jZXN0b3IgZnVydGhlciB1cCBoYXBwZW5zIHRvIGJlXG4gICAgICAgIC8vIHBvc2l0aW9uZWQgaW5zdGVhZCwgc2lsZW50bHkgb2Zmc2V0dGluZyBpdC5cbiAgICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCwgJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgIHRoaXMub3ZlcmxheUFuY2hvckVsID0gdGhpcy5yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLm92ZXJsYXlBbmNob3JFbCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMub3ZlcmxheUFuY2hvckVsLCAnd2lkdGgnLCAnMXB4Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMub3ZlcmxheUFuY2hvckVsLCAnaGVpZ2h0JywgJzFweCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLm92ZXJsYXlBbmNob3JFbCwgJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMub3ZlcmxheUFuY2hvckVsLCAncG9pbnRlci1ldmVudHMnLCAnbm9uZScpO1xuICAgICAgICAvLyBBcHBlbmRlZCBiZWZvcmUgdGhlIG92ZXJsYXkgaXMgY3JlYXRlZCBzbyBDREsncyBhbmNlc3Rvci1zY3JvbGxcbiAgICAgICAgLy8gZGV0ZWN0aW9uIChydW4gYXQgYXR0YWNoIHRpbWUpIHdhbGtzIHVwIGZyb20gd2hlcmUgdGhlIGFuY2hvclxuICAgICAgICAvLyBhY3R1YWxseSBsaXZlcyBpbiB0aGUgRE9NLCBub3QgZnJvbSBhIGRldGFjaGVkIG5vZGUuXG4gICAgICAgIHRoaXMucmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMub3ZlcmxheUFuY2hvckVsKTtcblxuICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5pbmplY3Rvci5nZXQoT3ZlcmxheSk7XG4gICAgICAgIHRoaXMub3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kgPSBvdmVybGF5LnBvc2l0aW9uKClcbiAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLm92ZXJsYXlBbmNob3JFbCEpXG4gICAgICAgICAgLndpdGhQb3NpdGlvbnMoT1ZFUkxBWV9QT1NJVElPTlMpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBvdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5UG9zaXRpb25TdHJhdGVneSxcbiAgICAgICAgICBzY3JvbGxTdHJhdGVneTogb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEEgcGxhaW4gYXBwZW5kQ2hpbGQgaW50byBvdmVybGF5RWxlbWVudCBza2lwcyB0aGUgcG9zaXRpb25cbiAgICAgICAgLy8gc3RyYXRlZ3kncyBvd24gYXR0YWNoKCkgbGlmZWN5Y2xlIChpdCBuZXZlciBnZXRzIGEgcmVmZXJlbmNlIHRvXG4gICAgICAgIC8vIHRoZSBwYW5lKSwgd2hpY2ggY3Jhc2hlcyB0aGUgbmV4dCByZXBvc2l0aW9uIOKAlCBEb21Qb3J0YWwgZ29lc1xuICAgICAgICAvLyB0aHJvdWdoIE92ZXJsYXlSZWYncyBub3JtYWwgYXR0YWNoIHBhdGggaW5zdGVhZCwgc28gZXZlcnl0aGluZ1xuICAgICAgICAvLyAoaW5jbHVkaW5nIHRoZSBhbmNob3ItYmFzZWQgcmVzdG9yZSBvbiBkaXNwb3NlKSBpcyB3aXJlZCB1cFxuICAgICAgICAvLyB0aGUgc2FtZSB3YXkgYSBDb21wb25lbnRQb3J0YWwncyB3b3VsZCBiZS5cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgRG9tUG9ydGFsKHRoaXMuY29tcG9uZW50RWwhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLmhvc3RFbD8ubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEVsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tcG9uZW50UmVmIS5zZXRJbnB1dCgndHlwZScsJ2J1YmJsZScpO1xuICAgIH1cblxuICAgIC8vIGBpc1Zpc2libGUoKWAncyBiYXNlIGltcGxlbWVudGF0aW9uIGNoZWNrcyB3aGV0aGVyIGNvbXBvbmVudEVsIGlzIGFcbiAgICAvLyBET00gZGVzY2VuZGFudCBvZiBob3N0RWwg4oCUIG5ldmVyIHRydWUgb25jZSBjb21wb25lbnRFbCBsaXZlcyBpbnNpZGVcbiAgICAvLyB0aGUgb3ZlcmxheSBwYW5lIGluIDxib2R5PiBpbnN0ZWFkLlxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBpc1Zpc2libGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy51c2VPdmVybGF5ID8gISF0aGlzLm92ZXJsYXlSZWYgOiBzdXBlci5pc1Zpc2libGUoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZXN0cm95Q29tcG9uZW50KCkge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKE1PVVNFX0VWRU5ULCB0aGlzLmNsaWNrTGlzdGVuZXIhKTtcbiAgICAgIC8vIERpc3Bvc2luZyBmaXJzdCByZXN0b3JlcyBjb21wb25lbnRFbCB0byB3aGVyZSBpdCBsaXZlZCBiZWZvcmUgdGhlXG4gICAgICAvLyBEb21Qb3J0YWwgbW92ZWQgaXQgKGl0cyBvd24gYW5jaG9yLWJhc2VkIHRlYXJkb3duKSDigJQgZG9pbmcgdGhpc1xuICAgICAgLy8gQUZURVIgZGVzdHJveWluZyB0aGUgQW5ndWxhciBjb21wb25lbnQgd291bGQgaW5zdGVhZCByZS1pbnNlcnQgYW5cbiAgICAgIC8vIGFscmVhZHktZGVzdHJveWVkLCBpbmVydCBET00gbm9kZSBiYWNrIGludG8gdGhlIHBhZ2UuXG4gICAgICB0aGlzLm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMub3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5vdmVybGF5QW5jaG9yRWwpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2hpbGQodGhpcy5ob3N0RWwubmF0aXZlRWxlbWVudCwgdGhpcy5vdmVybGF5QW5jaG9yRWwpO1xuICAgICAgICB0aGlzLm92ZXJsYXlBbmNob3JFbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHN1cGVyLmRlc3Ryb3lDb21wb25lbnQoKTtcbiAgICB9XG4gIH1cblxuXG5leHBvcnQgY29uc3QgQnViYmxlVG9vbGJveFByb3h5ID0ge1xuICBCdWJibGVUb29sYm94XG59Il19
|
|
@@ -18,6 +18,13 @@ export class RichtextToolboxDirective {
|
|
|
18
18
|
this.rtEditorClass = '';
|
|
19
19
|
this.rtBreakOnEnter = false;
|
|
20
20
|
this.rtAllowImages = false;
|
|
21
|
+
/**
|
|
22
|
+
* `rtType="bubble"` only: portals the floating toolbar through a CDK
|
|
23
|
+
* Overlay instead of appending it as a plain `position:absolute` child of
|
|
24
|
+
* the editor. Needed when the editor lives inside a scrollable/clipping
|
|
25
|
+
* ancestor (e.g. a list row) — see BubbleToolbox for the full rationale.
|
|
26
|
+
*/
|
|
27
|
+
this.rtBubbleOverlay = false;
|
|
21
28
|
this.inputChange = new EventEmitter();
|
|
22
29
|
this.inputEnter = new EventEmitter();
|
|
23
30
|
this.inputEscape = new EventEmitter();
|
|
@@ -141,13 +148,13 @@ export class RichtextToolboxDirective {
|
|
|
141
148
|
getToolbox(type) {
|
|
142
149
|
switch (type) {
|
|
143
150
|
case 'bubble':
|
|
144
|
-
return new BubbleToolboxProxy.BubbleToolbox(this.injector);
|
|
151
|
+
return new BubbleToolboxProxy.BubbleToolbox(this.injector, this.rtBubbleOverlay);
|
|
145
152
|
case 'topbar':
|
|
146
153
|
return new TopbarToolboxProxy.TopbarToolbox(this.injector);
|
|
147
154
|
}
|
|
148
155
|
}
|
|
149
156
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: RichtextToolboxDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
150
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: RichtextToolboxDirective, selector: "[askRichtextToolbox]", inputs: { rtPlaceholder: "rtPlaceholder", rtTools: "rtTools", rtDisabledTools: "rtDisabledTools", rtType: "rtType", rtToolbarOnly: "rtToolbarOnly", rtMaxlength: "rtMaxlength", rtToolbarClass: "rtToolbarClass", rtEditorClass: "rtEditorClass", rtBreakOnEnter: "rtBreakOnEnter", rtAllowImages: "rtAllowImages", rtShortcutTemplate: "rtShortcutTemplate" }, outputs: { inputChange: "inputChange", inputEnter: "inputEnter", inputEscape: "inputEscape", inputFocus: "inputFocus", toolChange: "toolChange" }, providers: [
|
|
157
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: RichtextToolboxDirective, selector: "[askRichtextToolbox]", inputs: { rtPlaceholder: "rtPlaceholder", rtTools: "rtTools", rtDisabledTools: "rtDisabledTools", rtType: "rtType", rtToolbarOnly: "rtToolbarOnly", rtMaxlength: "rtMaxlength", rtToolbarClass: "rtToolbarClass", rtEditorClass: "rtEditorClass", rtBreakOnEnter: "rtBreakOnEnter", rtAllowImages: "rtAllowImages", rtBubbleOverlay: "rtBubbleOverlay", rtShortcutTemplate: "rtShortcutTemplate" }, outputs: { inputChange: "inputChange", inputEnter: "inputEnter", inputEscape: "inputEscape", inputFocus: "inputFocus", toolChange: "toolChange" }, providers: [
|
|
151
158
|
{
|
|
152
159
|
multi: true,
|
|
153
160
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -187,6 +194,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
187
194
|
type: Input
|
|
188
195
|
}], rtAllowImages: [{
|
|
189
196
|
type: Input
|
|
197
|
+
}], rtBubbleOverlay: [{
|
|
198
|
+
type: Input
|
|
190
199
|
}], rtShortcutTemplate: [{
|
|
191
200
|
type: Input
|
|
192
201
|
}], inputChange: [{
|
|
@@ -200,4 +209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
200
209
|
}], toolChange: [{
|
|
201
210
|
type: Output
|
|
202
211
|
}] } });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaHRleHQtdG9vbGJveC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9kaXJlY3RpdmVzL3JpY2h0ZXh0LXRvb2xib3gvcmljaHRleHQtdG9vbGJveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBRVosS0FBSyxFQUVMLE1BQU0sRUFFTixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQWlCbEUsTUFBTSxPQUFPLHdCQUF3QjtJQTJCbkMsWUFBb0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWxCN0Isa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQWUsUUFBUSxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDekIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHckIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFB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QVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgVG9vbEtleXMsXG4gIFRvb2xMYXlvdXQsXG4gIFRvb2xzU3RhdGUsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmljaHRleHQtdG9vbGJveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBhcmVPYmplY3RzRXF1YWwgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2FyZS1vYmplY3RzLWVxdWFsLmhlbHBlcic7XG5pbXBvcnQgeyBUb29sYm94IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90b29sYm94JztcbmltcG9ydCB7IEJ1YmJsZVRvb2xib3hQcm94eSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYnViYmxlLXRvb2xib3gnO1xuaW1wb3J0IHsgVG9wYmFyVG9vbGJveFByb3h5IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90b3BiYXItdG9vbGJveCc7XG5cbmV4cG9ydCB0eXBlIFNob3J0Y3V0VGVtcGxhdGUgPSB7XG4gIGtleTogc3RyaW5nO1xuICB0ZW1wbGF0ZTogc3RyaW5nO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXNrUmljaHRleHRUb29sYm94XScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSaWNodGV4dFRvb2xib3hEaXJlY3RpdmUpLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0VG9vbGJveERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgcHJpdmF0ZSB0b29sYm94PzogVG9vbGJveDtcblxuICBwcml2YXRlIG9uQ2hhbmdlITogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgb25Ub3VjaGVkITogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgQElucHV0KCkgcnRQbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBydFRvb2xzOiBUb29sS2V5cyA9IFtdO1xuICBASW5wdXQoKSBydERpc2FibGVkVG9vbHM6IFRvb2xLZXlzID0gW107XG4gIEBJbnB1dCgpIHJ0VHlwZTogVG9vbExheW91dCA9ICd0b3BiYXInO1xuICBASW5wdXQoKSBydFRvb2xiYXJPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJ0TWF4bGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgQElucHV0KCkgcnRUb29sYmFyQ2xhc3MgPSAnJztcbiAgQElucHV0KCkgcnRFZGl0b3JDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBydEJyZWFrT25FbnRlciA9IGZhbHNlO1xuICBASW5wdXQoKSBydEFsbG93SW1hZ2VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJ0U2hvcnRjdXRUZW1wbGF0ZT86ICBTaG9ydGN1dFRlbXBsYXRlO1xuXG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgaW5wdXRFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGlucHV0RXNjYXBlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaW5wdXRGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRvb2xDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRvb2xzU3RhdGU+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgbmdPbkNoYW5nZXMoc3A6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoc3BbJ3J0VHlwZSddKSB7XG4gICAgICB0aGlzLnByZXBhcmVUb29sYmFyKCk7XG4gICAgfVxuXG4gICAgaWYgKHNwWydydFBsYWNlaG9sZGVyJ10pIHtcbiAgICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldFBsYWNlaG9sZGVyKHRoaXMucnRQbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChzcFsncnRUb29sYmFyT25seSddKSB7XG4gICAgICB0aGlzLnRvb2xib3g/LnRvZ2dsZUlucHV0RGlzcGxheSghdGhpcy5ydFRvb2xiYXJPbmx5KVxuICAgIH1cblxuICAgIGlmKHNwWydydE1heGxlbmd0aCddKXtcbiAgICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldE1heExlbmd0aCh0aGlzLnJ0TWF4bGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZihzcFsncnRBbGxvd0ltYWdlcyddKXtcbiAgICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldEFsbG93SW1hZ2VzKHRoaXMucnRBbGxvd0ltYWdlcyk7XG4gICAgfVxuXG4gICAgaWYgKHNwWydydERpc2FibGVkVG9vbHMnXSB8fCBzcFsncnRUb29scyddIHx8IHNwWydydFRvb2xiYXJDbGFzcyddKSB7XG4gICAgICB0aGlzLnRvb2xib3g/LnNldFRvb2xJbnB1dCh7XG4gICAgICAgIGF2YWlsYWJsZVRvb2xzOiB0aGlzLnJ0VG9vbHMsXG4gICAgICAgIGRpc2FibGVkVG9vbHM6IHRoaXMucnREaXNhYmxlZFRvb2xzLFxuICAgICAgICBjbGFzczogdGhpcy5ydFRvb2xiYXJDbGFzcyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYoc3BbJ3J0RWRpdG9yQ2xhc3MnXSl7XG4gICAgICB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5zZXRFZGl0b3JDbGFzcyh0aGlzLnJ0RWRpdG9yQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmKHNwWydydEJyZWFrT25FbnRlciddKXtcbiAgICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldEJyZWFrT25FbnRlcih0aGlzLnJ0QnJlYWtPbkVudGVyKTtcbiAgICB9XG5cbiAgICBpZihzcFsncnRTaG9ydGN1dFRlbXBsYXRlJ10gJiYgdGhpcy5ydFNob3J0Y3V0VGVtcGxhdGUpe1xuICAgICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuc2V0U2hvcnRjdXRUZW1wbGF0ZShcbiAgICAgICAgdGhpcy5ydFNob3J0Y3V0VGVtcGxhdGUhLmtleSxcbiAgICAgICAgdGhpcy5ydFNob3J0Y3V0VGVtcGxhdGUhLnRlbXBsYXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveUFsbCgpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuZm9jdXMoKTtcbiAgfVxuXG4gIGdldFRleHRMZW5ndGgoKXtcbiAgICByZXR1cm4gdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuZ2V0VGV4dExlbmd0aCgpO1xuICB9XG5cbiAgLy9DVkFcblxuICB3cml0ZVZhbHVlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldFRleHQodGV4dCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc0Rpc2FibGVkKSB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5kaXNhYmxlKCk7XG4gICAgZWxzZSB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5lbmFibGUoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRDdXJzb3JQb3NpdGlvbigpe1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5nZXRDdXJyZW50Q3Vyc29yUG9zaXRpb24oKTtcbiAgfVxuXG4gIHNldEN1cnNvclBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIpe1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5zZXRDdXJzb3JQb3NpdGlvbihwb3NpdGlvbik7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGV4dFdpdGhvdXRIdG1sVGFncygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5nZXRUZXh0V2l0aG91dEh0bWxUYWdzKCkgfHwgJyc7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0VGV4dChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGVtaXRFdmVudCA9IHRydWUpe1xuICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLmluc2VydFRleHQoaW5kZXgsIHRleHQsIGVtaXRFdmVudCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVUb29sYmFyKCl7XG4gICAgaWYgKHRoaXMudG9vbGJveCkgdGhpcy5kZXN0cm95QWxsKCk7XG5cbiAgICB0aGlzLnRvb2xib3ggPSB0aGlzLmdlbmVyYXRlVG9vbGJveExheW91dCh0aGlzLnJ0VHlwZSk7XG4gICAgdGhpcy5wcmVwYXJlTGlzdGVuZXJzKHRoaXMudG9vbGJveCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVMaXN0ZW5lcnModG9vbGJveDogVG9vbGJveCkge1xuICAgIGlmKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5saXN0ZW5UZXh0Q2hhbmdlcyRcbiAgICAuc3Vic2NyaWJlKCh2KT0+e3RoaXMudXBkYXRlKHYpfSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5saXN0ZW5PblRvdWNoZWQkLnN1YnNjcmliZSgodG91Y2hlZCk9PntcbiAgICAgIHRoaXMub25Ub3VjaGVkKClcbiAgICAgIHRoaXMuaW5wdXRGb2N1cy5lbWl0KHRvdWNoZWQpO1xuICAgIH0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodG9vbGJveC5yaWNodGV4dFdyYXBwZXIubGlzdGVuRW50ZXIkLnN1YnNjcmliZSgoKT0+e3RoaXMuaW5wdXRFbnRlci5lbWl0KCl9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRvb2xib3gucmljaHRleHRXcmFwcGVyLmxpc3RlbkVzY2FwZSQuc3Vic2NyaWJlKCgpPT57dGhpcy5pbnB1dEVzY2FwZS5lbWl0KCl9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRvb2xib3gucmljaHRleHRXcmFwcGVyLnN0YXRlJFxuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IGFyZU9iamVjdHNFcXVhbChhLCBiKSkpXG4gICAgICAuc3Vic2NyaWJlKChzdGF0ZSk9Pnt0aGlzLnRvb2xDaGFuZ2UuZW1pdChzdGF0ZSl9KSlcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlKHZhbHVlOiBzdHJpbmcpe1xuICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lBbGwoKSB7XG4gICAgdGhpcy50b29sYm94Py5kZXN0cm95QWxsKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlVG9vbGJveExheW91dCh0eXBlOiBUb29sTGF5b3V0KSB7XG4gICAgY29uc3QgdG9vbGJveCA9IHRoaXMuZ2V0VG9vbGJveCh0eXBlKTtcbiAgICB0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5zZXRQbGFjZWhvbGRlcih0aGlzLnJ0UGxhY2Vob2xkZXIpO1xuICAgIHRvb2xib3guc2V0VG9vbElucHV0KHtcbiAgICAgIGF2YWlsYWJsZVRvb2xzOiB0aGlzLnJ0VG9vbHMsXG4gICAgICBkaXNhYmxlZFRvb2xzOiB0aGlzLnJ0RGlzYWJsZWRUb29scyxcbiAgICAgIGNsYXNzOiB0aGlzLnJ0VG9vbGJhckNsYXNzLFxuICAgIH0pXG4gICAgdG9vbGJveC50b2dnbGVJbnB1dERpc3BsYXkoIXRoaXMucnRUb29sYmFyT25seSlcbiAgICB0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5zZXRNYXhMZW5ndGgodGhpcy5ydE1heGxlbmd0aCk7XG4gICAgdG9vbGJveC5yaWNodGV4dFdyYXBwZXIuc2V0QWxsb3dJbWFnZXModGhpcy5ydEFsbG93SW1hZ2VzKTtcbiAgICB0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5zZXRFZGl0b3JDbGFzcyh0aGlzLnJ0RWRpdG9yQ2xhc3MpO1xuICAgIHJldHVybiB0b29sYm94O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb29sYm94KHR5cGU6IFRvb2xMYXlvdXQpe1xuICAgIHN3aXRjaCh0eXBlKXtcbiAgICAgIGNhc2UgJ2J1YmJsZSc6XG4gICAgICAgIHJldHVybiBuZXcgQnViYmxlVG9vbGJveFByb3h5LkJ1YmJsZVRvb2xib3godGhpcy5pbmplY3Rvcik7XG4gICAgICBjYXNlICd0b3BiYXInOlxuICAgICAgICByZXR1cm4gbmV3IFRvcGJhclRvb2xib3hQcm94eS5Ub3BiYXJUb29sYm94KHRoaXMuaW5qZWN0b3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaHRleHQtdG9vbGJveC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2tzdWl0ZS1jaXRydXMvc3JjL2xpYi9kaXJlY3RpdmVzL3JpY2h0ZXh0LXRvb2xib3gvcmljaHRleHQtdG9vbGJveC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBRVosS0FBSyxFQUVMLE1BQU0sRUFFTixVQUFVLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQWlCbEUsTUFBTSxPQUFPLHdCQUF3QjtJQWtDbkMsWUFBb0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQXpCN0Isa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQWUsUUFBUSxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLGdCQUFXLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDekIsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDL0I7Ozs7O1dBS0c7UUFDTSxvQkFBZSxHQUFH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S0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGZvcndhcmRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgVG9vbEtleXMsXG4gIFRvb2xMYXlvdXQsXG4gIFRvb2xzU3RhdGUsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmljaHRleHQtdG9vbGJveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBhcmVPYmplY3RzRXF1YWwgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2FyZS1vYmplY3RzLWVxdWFsLmhlbHBlcic7XG5pbXBvcnQgeyBUb29sYm94IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90b29sYm94JztcbmltcG9ydCB7IEJ1YmJsZVRvb2xib3hQcm94eSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYnViYmxlLXRvb2xib3gnO1xuaW1wb3J0IHsgVG9wYmFyVG9vbGJveFByb3h5IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90b3BiYXItdG9vbGJveCc7XG5cbmV4cG9ydCB0eXBlIFNob3J0Y3V0VGVtcGxhdGUgPSB7XG4gIGtleTogc3RyaW5nO1xuICB0ZW1wbGF0ZTogc3RyaW5nO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXNrUmljaHRleHRUb29sYm94XScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSaWNodGV4dFRvb2xib3hEaXJlY3RpdmUpLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFJpY2h0ZXh0VG9vbGJveERpcmVjdGl2ZVxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgcHJpdmF0ZSB0b29sYm94PzogVG9vbGJveDtcblxuICBwcml2YXRlIG9uQ2hhbmdlITogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgb25Ub3VjaGVkITogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgQElucHV0KCkgcnRQbGFjZWhvbGRlciA9ICcnO1xuICBASW5wdXQoKSBydFRvb2xzOiBUb29sS2V5cyA9IFtdO1xuICBASW5wdXQoKSBydERpc2FibGVkVG9vbHM6IFRvb2xLZXlzID0gW107XG4gIEBJbnB1dCgpIHJ0VHlwZTogVG9vbExheW91dCA9ICd0b3BiYXInO1xuICBASW5wdXQoKSBydFRvb2xiYXJPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJ0TWF4bGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgQElucHV0KCkgcnRUb29sYmFyQ2xhc3MgPSAnJztcbiAgQElucHV0KCkgcnRFZGl0b3JDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBydEJyZWFrT25FbnRlciA9IGZhbHNlO1xuICBASW5wdXQoKSBydEFsbG93SW1hZ2VzID0gZmFsc2U7XG4gIC8qKlxuICAgKiBgcnRUeXBlPVwiYnViYmxlXCJgIG9ubHk6IHBvcnRhbHMgdGhlIGZsb2F0aW5nIHRvb2xiYXIgdGhyb3VnaCBhIENES1xuICAgKiBPdmVybGF5IGluc3RlYWQgb2YgYXBwZW5kaW5nIGl0IGFzIGEgcGxhaW4gYHBvc2l0aW9uOmFic29sdXRlYCBjaGlsZCBvZlxuICAgKiB0aGUgZWRpdG9yLiBOZWVkZWQgd2hlbiB0aGUgZWRpdG9yIGxpdmVzIGluc2lkZSBhIHNjcm9sbGFibGUvY2xpcHBpbmdcbiAgICogYW5jZXN0b3IgKGUuZy4gYSBsaXN0IHJvdykg4oCUIHNlZSBCdWJibGVUb29sYm94IGZvciB0aGUgZnVsbCByYXRpb25hbGUuXG4gICAqL1xuICBASW5wdXQoKSBydEJ1YmJsZU92ZXJsYXkgPSBmYWxzZTtcbiAgQElucHV0KCkgcnRTaG9ydGN1dFRlbXBsYXRlPzogIFNob3J0Y3V0VGVtcGxhdGU7XG5cbiAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBpbnB1dEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaW5wdXRFc2NhcGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBpbnB1dEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdG9vbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VG9vbHNTdGF0ZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBuZ09uQ2hhbmdlcyhzcDogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChzcFsncnRUeXBlJ10pIHtcbiAgICAgIHRoaXMucHJlcGFyZVRvb2xiYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoc3BbJ3J0UGxhY2Vob2xkZXInXSkge1xuICAgICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuc2V0UGxhY2Vob2xkZXIodGhpcy5ydFBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgaWYgKHNwWydydFRvb2xiYXJPbmx5J10pIHtcbiAgICAgIHRoaXMudG9vbGJveD8udG9nZ2xlSW5wdXREaXNwbGF5KCF0aGlzLnJ0VG9vbGJhck9ubHkpXG4gICAgfVxuXG4gICAgaWYoc3BbJ3J0TWF4bGVuZ3RoJ10pe1xuICAgICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuc2V0TWF4TGVuZ3RoKHRoaXMucnRNYXhsZW5ndGgpO1xuICAgIH1cblxuICAgIGlmKHNwWydydEFsbG93SW1hZ2VzJ10pe1xuICAgICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuc2V0QWxsb3dJbWFnZXModGhpcy5ydEFsbG93SW1hZ2VzKTtcbiAgICB9XG5cbiAgICBpZiAoc3BbJ3J0RGlzYWJsZWRUb29scyddIHx8IHNwWydydFRvb2xzJ10gfHwgc3BbJ3J0VG9vbGJhckNsYXNzJ10pIHtcbiAgICAgIHRoaXMudG9vbGJveD8uc2V0VG9vbElucHV0KHtcbiAgICAgICAgYXZhaWxhYmxlVG9vbHM6IHRoaXMucnRUb29scyxcbiAgICAgICAgZGlzYWJsZWRUb29sczogdGhpcy5ydERpc2FibGVkVG9vbHMsXG4gICAgICAgIGNsYXNzOiB0aGlzLnJ0VG9vbGJhckNsYXNzLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZihzcFsncnRFZGl0b3JDbGFzcyddKXtcbiAgICAgIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldEVkaXRvckNsYXNzKHRoaXMucnRFZGl0b3JDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYoc3BbJ3J0QnJlYWtPbkVudGVyJ10pe1xuICAgICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuc2V0QnJlYWtPbkVudGVyKHRoaXMucnRCcmVha09uRW50ZXIpO1xuICAgIH1cblxuICAgIGlmKHNwWydydFNob3J0Y3V0VGVtcGxhdGUnXSAmJiB0aGlzLnJ0U2hvcnRjdXRUZW1wbGF0ZSl7XG4gICAgICB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5zZXRTaG9ydGN1dFRlbXBsYXRlKFxuICAgICAgICB0aGlzLnJ0U2hvcnRjdXRUZW1wbGF0ZSEua2V5LFxuICAgICAgICB0aGlzLnJ0U2hvcnRjdXRUZW1wbGF0ZSEudGVtcGxhdGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95QWxsKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5mb2N1cygpO1xuICB9XG5cbiAgZ2V0VGV4dExlbmd0aCgpe1xuICAgIHJldHVybiB0aGlzLnRvb2xib3g/LnJpY2h0ZXh0V3JhcHBlci5nZXRUZXh0TGVuZ3RoKCk7XG4gIH1cblxuICAvL0NWQVxuXG4gIHdyaXRlVmFsdWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuc2V0VGV4dCh0ZXh0KTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLmRpc2FibGUoKTtcbiAgICBlbHNlIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLmVuYWJsZSgpO1xuICB9XG5cbiAgZ2V0Q3VycmVudEN1cnNvclBvc2l0aW9uKCl7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLmdldEN1cnJlbnRDdXJzb3JQb3NpdGlvbigpO1xuICB9XG5cbiAgc2V0Q3Vyc29yUG9zaXRpb24ocG9zaXRpb246IG51bWJlcil7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLnNldEN1cnNvclBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRUZXh0V2l0aG91dEh0bWxUYWdzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9vbGJveD8ucmljaHRleHRXcmFwcGVyLmdldFRleHRXaXRob3V0SHRtbFRhZ3MoKSB8fCAnJztcbiAgfVxuXG4gIHB1YmxpYyBpbnNlcnRUZXh0KGluZGV4OiBudW1iZXIsIHRleHQ6IHN0cmluZywgZW1pdEV2ZW50ID0gdHJ1ZSl7XG4gICAgdGhpcy50b29sYm94Py5yaWNodGV4dFdyYXBwZXIuaW5zZXJ0VGV4dChpbmRleCwgdGV4dCwgZW1pdEV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVRvb2xiYXIoKXtcbiAgICBpZiAodGhpcy50b29sYm94KSB0aGlzLmRlc3Ryb3lBbGwoKTtcblxuICAgIHRoaXMudG9vbGJveCA9IHRoaXMuZ2VuZXJhdGVUb29sYm94TGF5b3V0KHRoaXMucnRUeXBlKTtcbiAgICB0aGlzLnByZXBhcmVMaXN0ZW5lcnModGhpcy50b29sYm94KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUxpc3RlbmVycyh0b29sYm94OiBUb29sYm94KSB7XG4gICAgaWYodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRvb2xib3gucmljaHRleHRXcmFwcGVyLmxpc3RlblRleHRDaGFuZ2VzJFxuICAgIC5zdWJzY3JpYmUoKHYpPT57dGhpcy51cGRhdGUodil9KSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRvb2xib3gucmljaHRleHRXcmFwcGVyLmxpc3Rlbk9uVG91Y2hlZCQuc3Vic2NyaWJlKCh0b3VjaGVkKT0+e1xuICAgICAgdGhpcy5vblRvdWNoZWQoKVxuICAgICAgdGhpcy5pbnB1dEZvY3VzLmVtaXQodG91Y2hlZCk7XG4gICAgfSkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5saXN0ZW5FbnRlciQuc3Vic2NyaWJlKCgpPT57dGhpcy5pbnB1dEVudGVyLmVtaXQoKX0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodG9vbGJveC5yaWNodGV4dFdyYXBwZXIubGlzdGVuRXNjYXBlJC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmlucHV0RXNjYXBlLmVtaXQoKX0pKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQodG9vbGJveC5yaWNodGV4dFdyYXBwZXIuc3RhdGUkXG4gICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYXJlT2JqZWN0c0VxdWFsKGEsIGIpKSlcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXRlKT0+e3RoaXMudG9vbENoYW5nZS5lbWl0KHN0YXRlKX0pKVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUodmFsdWU6IHN0cmluZyl7XG4gICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUFsbCgpIHtcbiAgICB0aGlzLnRvb2xib3g/LmRlc3Ryb3lBbGwoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVUb29sYm94TGF5b3V0KHR5cGU6IFRvb2xMYXlvdXQpIHtcbiAgICBjb25zdCB0b29sYm94ID0gdGhpcy5nZXRUb29sYm94KHR5cGUpO1xuICAgIHRvb2xib3gucmljaHRleHRXcmFwcGVyLnNldFBsYWNlaG9sZGVyKHRoaXMucnRQbGFjZWhvbGRlcik7XG4gICAgdG9vbGJveC5zZXRUb29sSW5wdXQoe1xuICAgICAgYXZhaWxhYmxlVG9vbHM6IHRoaXMucnRUb29scyxcbiAgICAgIGRpc2FibGVkVG9vbHM6IHRoaXMucnREaXNhYmxlZFRvb2xzLFxuICAgICAgY2xhc3M6IHRoaXMucnRUb29sYmFyQ2xhc3MsXG4gICAgfSlcbiAgICB0b29sYm94LnRvZ2dsZUlucHV0RGlzcGxheSghdGhpcy5ydFRvb2xiYXJPbmx5KVxuICAgIHRvb2xib3gucmljaHRleHRXcmFwcGVyLnNldE1heExlbmd0aCh0aGlzLnJ0TWF4bGVuZ3RoKTtcbiAgICB0b29sYm94LnJpY2h0ZXh0V3JhcHBlci5zZXRBbGxvd0ltYWdlcyh0aGlzLnJ0QWxsb3dJbWFnZXMpO1xuICAgIHRvb2xib3gucmljaHRleHRXcmFwcGVyLnNldEVkaXRvckNsYXNzKHRoaXMucnRFZGl0b3JDbGFzcyk7XG4gICAgcmV0dXJuIHRvb2xib3g7XG4gIH1cblxuICBwcml2YXRlIGdldFRvb2xib3godHlwZTogVG9vbExheW91dCl7XG4gICAgc3dpdGNoKHR5cGUpe1xuICAgICAgY2FzZSAnYnViYmxlJzpcbiAgICAgICAgcmV0dXJuIG5ldyBCdWJibGVUb29sYm94UHJveHkuQnViYmxlVG9vbGJveCh0aGlzLmluamVjdG9yLCB0aGlzLnJ0QnViYmxlT3ZlcmxheSk7XG4gICAgICBjYXNlICd0b3BiYXInOlxuICAgICAgICByZXR1cm4gbmV3IFRvcGJhclRvb2xib3hQcm94eS5Ub3BiYXJUb29sYm94KHRoaXMuaW5qZWN0b3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -10,9 +10,9 @@ import * as i3 from 'ngx-mask';
|
|
|
10
10
|
import { NgxMaskDirective, NgxMaskPipe, provideNgxMask } from 'ngx-mask';
|
|
11
11
|
import { debounceTime, tap, map, fromEvent, filter, BehaviorSubject, Subject, delay, Subscription, distinctUntilChanged, of, shareReplay } from 'rxjs';
|
|
12
12
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
13
|
-
import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
|
|
13
|
+
import { TemplatePortal, ComponentPortal, DomPortal } from '@angular/cdk/portal';
|
|
14
14
|
import * as i1$3 from '@angular/cdk/overlay';
|
|
15
|
-
import { CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule, OverlayConfig } from '@angular/cdk/overlay';
|
|
15
|
+
import { Overlay, CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule, OverlayConfig } from '@angular/cdk/overlay';
|
|
16
16
|
import * as i3$1 from '@ngx-translate/core';
|
|
17
17
|
import { TranslateModule } from '@ngx-translate/core';
|
|
18
18
|
import moment from 'moment';
|
|
@@ -4227,14 +4227,57 @@ class Toolbox {
|
|
|
4227
4227
|
const TOOLBOX_HEIGHT = 40;
|
|
4228
4228
|
const MARGIN = 8;
|
|
4229
4229
|
const MOUSE_EVENT = 'mouseup';
|
|
4230
|
+
/** Pane's top-left lands exactly at the anchor moveOverlay() positions. */
|
|
4231
|
+
const OVERLAY_POSITIONS = [
|
|
4232
|
+
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },
|
|
4233
|
+
];
|
|
4230
4234
|
class BubbleToolbox extends Toolbox {
|
|
4231
|
-
|
|
4235
|
+
/**
|
|
4236
|
+
* `useOverlay` opts into rendering through a CDK Overlay (portaled to
|
|
4237
|
+
* <body>) instead of a plain `position:absolute` child of the editor
|
|
4238
|
+
* itself. Defaults to false — the plain-append behavior is unchanged
|
|
4239
|
+
* for every existing consumer (e.g. the main chat-input's bubble
|
|
4240
|
+
* toolbar, which today renders correctly with no clipping ancestor).
|
|
4241
|
+
* Opt in only where the editor lives inside a `overflow:hidden/auto`
|
|
4242
|
+
* ancestor (e.g. a scrollable list row), which clips a plain popup
|
|
4243
|
+
* above its own viewport no matter the z-index — same reasoning as why
|
|
4244
|
+
* the economy queue's emoji picker uses a CDK Overlay instead of a
|
|
4245
|
+
* plain popup.
|
|
4246
|
+
*/
|
|
4247
|
+
constructor(injector, useOverlay = false) {
|
|
4232
4248
|
super(injector);
|
|
4249
|
+
this.injector = injector;
|
|
4250
|
+
this.useOverlay = useOverlay;
|
|
4233
4251
|
}
|
|
4234
4252
|
move(bounds) {
|
|
4253
|
+
if (this.useOverlay) {
|
|
4254
|
+
this.moveOverlay(bounds);
|
|
4255
|
+
return;
|
|
4256
|
+
}
|
|
4235
4257
|
this.renderer2.setStyle(this.componentEl, 'top', `${bounds.top - (TOOLBOX_HEIGHT + MARGIN)}px`);
|
|
4236
4258
|
this.renderer2.setStyle(this.componentEl, 'left', `${bounds.left}px`);
|
|
4237
4259
|
}
|
|
4260
|
+
/**
|
|
4261
|
+
* Quill's bounds are relative to the editor's own container (`hostEl`)
|
|
4262
|
+
* — the SAME coordinate space the plain local-append path already uses
|
|
4263
|
+
* for `componentEl`'s `top`/`left` above, so the hidden anchor is moved
|
|
4264
|
+
* exactly the same way. The overlay connects to this anchor (a real,
|
|
4265
|
+
* live DOM node) rather than a bare viewport point: CDK's position
|
|
4266
|
+
* strategy re-queries an anchor's `getBoundingClientRect()` fresh on
|
|
4267
|
+
* every reposition, but a bare point origin is a one-time snapshot that
|
|
4268
|
+
* never changes — `reposition()`'s scroll listener would still fire,
|
|
4269
|
+
* but it'd just keep reapplying those same stale coordinates, leaving
|
|
4270
|
+
* the toolbar stuck at its original screen position once a scrollable
|
|
4271
|
+
* ancestor (e.g. the economy queue's list) actually scrolls, exactly
|
|
4272
|
+
* where this overlay path is needed most.
|
|
4273
|
+
*/
|
|
4274
|
+
moveOverlay(bounds) {
|
|
4275
|
+
if (!this.overlayAnchorEl)
|
|
4276
|
+
return;
|
|
4277
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'top', `${bounds.top - (TOOLBOX_HEIGHT + MARGIN)}px`);
|
|
4278
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'left', `${bounds.left}px`);
|
|
4279
|
+
this.overlayRef?.updatePosition();
|
|
4280
|
+
}
|
|
4238
4281
|
listenOutsideClicks() {
|
|
4239
4282
|
this.clickListener = (event) => {
|
|
4240
4283
|
if (!this.componentEl?.contains(event.target)
|
|
@@ -4260,11 +4303,64 @@ class BubbleToolbox extends Toolbox {
|
|
|
4260
4303
|
displayComponent() {
|
|
4261
4304
|
super.displayComponent();
|
|
4262
4305
|
this.listenOutsideClicks();
|
|
4263
|
-
|
|
4306
|
+
if (this.useOverlay) {
|
|
4307
|
+
// Makes hostEl the anchor's containing block regardless of whatever
|
|
4308
|
+
// the consumer's own CSS happens to do — neither Quill's nor
|
|
4309
|
+
// citrus's stylesheets put `position` on the editor container
|
|
4310
|
+
// (`.ql-container`), so without this the anchor's top/left would
|
|
4311
|
+
// resolve against whichever ancestor further up happens to be
|
|
4312
|
+
// positioned instead, silently offsetting it.
|
|
4313
|
+
this.renderer2.setStyle(this.hostEl.nativeElement, 'position', 'relative');
|
|
4314
|
+
this.overlayAnchorEl = this.renderer2.createElement('span');
|
|
4315
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'position', 'absolute');
|
|
4316
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'width', '1px');
|
|
4317
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'height', '1px');
|
|
4318
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'visibility', 'hidden');
|
|
4319
|
+
this.renderer2.setStyle(this.overlayAnchorEl, 'pointer-events', 'none');
|
|
4320
|
+
// Appended before the overlay is created so CDK's ancestor-scroll
|
|
4321
|
+
// detection (run at attach time) walks up from where the anchor
|
|
4322
|
+
// actually lives in the DOM, not from a detached node.
|
|
4323
|
+
this.renderer2.appendChild(this.hostEl.nativeElement, this.overlayAnchorEl);
|
|
4324
|
+
const overlay = this.injector.get(Overlay);
|
|
4325
|
+
this.overlayPositionStrategy = overlay.position()
|
|
4326
|
+
.flexibleConnectedTo(this.overlayAnchorEl)
|
|
4327
|
+
.withPositions(OVERLAY_POSITIONS);
|
|
4328
|
+
this.overlayRef = overlay.create({
|
|
4329
|
+
positionStrategy: this.overlayPositionStrategy,
|
|
4330
|
+
scrollStrategy: overlay.scrollStrategies.reposition(),
|
|
4331
|
+
});
|
|
4332
|
+
// A plain appendChild into overlayElement skips the position
|
|
4333
|
+
// strategy's own attach() lifecycle (it never gets a reference to
|
|
4334
|
+
// the pane), which crashes the next reposition — DomPortal goes
|
|
4335
|
+
// through OverlayRef's normal attach path instead, so everything
|
|
4336
|
+
// (including the anchor-based restore on dispose) is wired up
|
|
4337
|
+
// the same way a ComponentPortal's would be.
|
|
4338
|
+
this.overlayRef.attach(new DomPortal(this.componentEl));
|
|
4339
|
+
}
|
|
4340
|
+
else {
|
|
4341
|
+
this.renderer2.appendChild(this.hostEl?.nativeElement, this.componentEl);
|
|
4342
|
+
}
|
|
4264
4343
|
this.componentRef.setInput('type', 'bubble');
|
|
4265
4344
|
}
|
|
4345
|
+
// `isVisible()`'s base implementation checks whether componentEl is a
|
|
4346
|
+
// DOM descendant of hostEl — never true once componentEl lives inside
|
|
4347
|
+
// the overlay pane in <body> instead.
|
|
4348
|
+
isVisible() {
|
|
4349
|
+
return this.useOverlay ? !!this.overlayRef : super.isVisible();
|
|
4350
|
+
}
|
|
4266
4351
|
destroyComponent() {
|
|
4267
4352
|
document.body.removeEventListener(MOUSE_EVENT, this.clickListener);
|
|
4353
|
+
// Disposing first restores componentEl to where it lived before the
|
|
4354
|
+
// DomPortal moved it (its own anchor-based teardown) — doing this
|
|
4355
|
+
// AFTER destroying the Angular component would instead re-insert an
|
|
4356
|
+
// already-destroyed, inert DOM node back into the page.
|
|
4357
|
+
this.overlayRef?.dispose();
|
|
4358
|
+
this.overlayRef = undefined;
|
|
4359
|
+
this.overlayPositionStrategy = undefined;
|
|
4360
|
+
if (this.overlayAnchorEl) {
|
|
4361
|
+
this.renderer2.removeChild(this.hostEl.nativeElement, this.overlayAnchorEl);
|
|
4362
|
+
this.overlayAnchorEl = undefined;
|
|
4363
|
+
}
|
|
4268
4364
|
super.destroyComponent();
|
|
4269
4365
|
}
|
|
4270
4366
|
}
|
|
@@ -4321,6 +4417,13 @@ class RichtextToolboxDirective {
|
|
|
4321
4417
|
this.rtEditorClass = '';
|
|
4322
4418
|
this.rtBreakOnEnter = false;
|
|
4323
4419
|
this.rtAllowImages = false;
|
|
4420
|
+
/**
|
|
4421
|
+
* `rtType="bubble"` only: portals the floating toolbar through a CDK
|
|
4422
|
+
* Overlay instead of appending it as a plain `position:absolute` child of
|
|
4423
|
+
* the editor. Needed when the editor lives inside a scrollable/clipping
|
|
4424
|
+
* ancestor (e.g. a list row) — see BubbleToolbox for the full rationale.
|
|
4425
|
+
*/
|
|
4426
|
+
this.rtBubbleOverlay = false;
|
|
4324
4427
|
this.inputChange = new EventEmitter();
|
|
4325
4428
|
this.inputEnter = new EventEmitter();
|
|
4326
4429
|
this.inputEscape = new EventEmitter();
|
|
@@ -4444,13 +4547,13 @@ class RichtextToolboxDirective {
|
|
|
4444
4547
|
getToolbox(type) {
|
|
4445
4548
|
switch (type) {
|
|
4446
4549
|
case 'bubble':
|
|
4447
|
-
return new BubbleToolboxProxy.BubbleToolbox(this.injector);
|
|
4550
|
+
return new BubbleToolboxProxy.BubbleToolbox(this.injector, this.rtBubbleOverlay);
|
|
4448
4551
|
case 'topbar':
|
|
4449
4552
|
return new TopbarToolboxProxy.TopbarToolbox(this.injector);
|
|
4450
4553
|
}
|
|
4451
4554
|
}
|
|
4452
4555
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: RichtextToolboxDirective, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
4453
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: RichtextToolboxDirective, selector: "[askRichtextToolbox]", inputs: { rtPlaceholder: "rtPlaceholder", rtTools: "rtTools", rtDisabledTools: "rtDisabledTools", rtType: "rtType", rtToolbarOnly: "rtToolbarOnly", rtMaxlength: "rtMaxlength", rtToolbarClass: "rtToolbarClass", rtEditorClass: "rtEditorClass", rtBreakOnEnter: "rtBreakOnEnter", rtAllowImages: "rtAllowImages", rtShortcutTemplate: "rtShortcutTemplate" }, outputs: { inputChange: "inputChange", inputEnter: "inputEnter", inputEscape: "inputEscape", inputFocus: "inputFocus", toolChange: "toolChange" }, providers: [
|
|
4556
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.7", type: RichtextToolboxDirective, selector: "[askRichtextToolbox]", inputs: { rtPlaceholder: "rtPlaceholder", rtTools: "rtTools", rtDisabledTools: "rtDisabledTools", rtType: "rtType", rtToolbarOnly: "rtToolbarOnly", rtMaxlength: "rtMaxlength", rtToolbarClass: "rtToolbarClass", rtEditorClass: "rtEditorClass", rtBreakOnEnter: "rtBreakOnEnter", rtAllowImages: "rtAllowImages", rtBubbleOverlay: "rtBubbleOverlay", rtShortcutTemplate: "rtShortcutTemplate" }, outputs: { inputChange: "inputChange", inputEnter: "inputEnter", inputEscape: "inputEscape", inputFocus: "inputFocus", toolChange: "toolChange" }, providers: [
|
|
4454
4557
|
{
|
|
4455
4558
|
multi: true,
|
|
4456
4559
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -4490,6 +4593,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.7", ngImpor
|
|
|
4490
4593
|
type: Input
|
|
4491
4594
|
}], rtAllowImages: [{
|
|
4492
4595
|
type: Input
|
|
4596
|
+
}], rtBubbleOverlay: [{
|
|
4597
|
+
type: Input
|
|
4493
4598
|
}], rtShortcutTemplate: [{
|
|
4494
4599
|
type: Input
|
|
4495
4600
|
}], inputChange: [{
|