@datarailsshared/datarailsshared 1.5.572 → 1.5.576
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/datarailsshared-datarailsshared-1.5.576.tgz +0 -0
- package/esm2022/lib/directives/let/let.directive.mjs +35 -0
- package/esm2022/lib/directives/ng-track-by-property/ng-track-by-property.directive.mjs +23 -0
- package/esm2022/lib/dr-chat/chat.component.mjs +7 -6
- package/esm2022/lib/dr-chat/chat.module.mjs +29 -4
- package/esm2022/lib/dr-chat/dr-chat-form-with-history/chat-form-with-history.component.mjs +380 -0
- package/esm2022/lib/pipes/filter/filter.pipe.mjs +48 -0
- package/esm2022/lib/pipes/img/img.pipe.mjs +19 -0
- package/esm2022/lib/utils/dr-shared-utils.mjs +28 -1
- package/esm2022/public-api.mjs +6 -1
- package/fesm2022/datarailsshared-datarailsshared.mjs +701 -169
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/directives/let/let.directive.d.ts +19 -0
- package/lib/directives/ng-track-by-property/ng-track-by-property.directive.d.ts +8 -0
- package/lib/dr-chat/chat.component.d.ts +1 -1
- package/lib/dr-chat/chat.module.d.ts +14 -12
- package/lib/dr-chat/dr-chat-form-with-history/chat-form-with-history.component.d.ts +81 -0
- package/lib/pipes/filter/filter.pipe.d.ts +7 -0
- package/lib/pipes/img/img.pipe.d.ts +7 -0
- package/lib/utils/dr-shared-utils.d.ts +6 -0
- package/package.json +1 -1
- package/public-api.d.ts +4 -0
- package/datarailsshared-datarailsshared-1.5.572.tgz +0 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
+
import { IMAGE_TYPES } from '../../models/chat';
|
|
4
|
+
import { trigger, state, style, transition, animate, query, animateChild } from '@angular/animations';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/platform-browser";
|
|
7
|
+
import * as i2 from "@angular/forms";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "../../dr-inputs/button/button.component";
|
|
10
|
+
import * as i5 from "../../directives/click-outside/click-outside.directive";
|
|
11
|
+
import * as i6 from "../dr-dot-flashing/dr-dot-flashing.component";
|
|
12
|
+
const _c0 = ["textAreaElement"];
|
|
13
|
+
function DrChatFormWithHistoryComponent_div_2_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
15
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
16
|
+
i0.ɵɵelement(1, "i", 19);
|
|
17
|
+
i0.ɵɵelementStart(2, "div", 20);
|
|
18
|
+
i0.ɵɵtext(3);
|
|
19
|
+
i0.ɵɵelementEnd();
|
|
20
|
+
i0.ɵɵelementStart(4, "i", 21);
|
|
21
|
+
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_div_2_div_1_Template_i_click_4_listener() { const restoredCtx = i0.ɵɵrestoreView(_r11); const file_r9 = restoredCtx.$implicit; const ctx_r10 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r10.removeFile(file_r9)); });
|
|
22
|
+
i0.ɵɵelementEnd()();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const file_r9 = ctx.$implicit;
|
|
25
|
+
i0.ɵɵadvance(3);
|
|
26
|
+
i0.ɵɵtextInterpolate(file_r9.name);
|
|
27
|
+
} }
|
|
28
|
+
function DrChatFormWithHistoryComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
29
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
30
|
+
i0.ɵɵtemplate(1, DrChatFormWithHistoryComponent_div_2_div_1_Template, 5, 1, "div", 17);
|
|
31
|
+
i0.ɵɵelementEnd();
|
|
32
|
+
} if (rf & 2) {
|
|
33
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
34
|
+
i0.ɵɵadvance(1);
|
|
35
|
+
i0.ɵɵproperty("ngForOf", ctx_r0.droppedFiles);
|
|
36
|
+
} }
|
|
37
|
+
function DrChatFormWithHistoryComponent_i_13_Template(rf, ctx) { if (rf & 1) {
|
|
38
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
39
|
+
i0.ɵɵelementStart(0, "i", 22);
|
|
40
|
+
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_i_13_Template_i_click_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.sendMessage($event)); });
|
|
41
|
+
i0.ɵɵelementEnd();
|
|
42
|
+
} if (rf & 2) {
|
|
43
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
44
|
+
const _r1 = i0.ɵɵreference(5);
|
|
45
|
+
i0.ɵɵstyleMap(ctx_r3.getSendButtonPosition(_r1));
|
|
46
|
+
} }
|
|
47
|
+
function DrChatFormWithHistoryComponent_i_14_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
49
|
+
i0.ɵɵelementStart(0, "i", 23);
|
|
50
|
+
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_i_14_Template_i_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r14.sendMessage($event)); });
|
|
51
|
+
i0.ɵɵelementEnd();
|
|
52
|
+
} }
|
|
53
|
+
function DrChatFormWithHistoryComponent_dr_dot_flashing_15_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵelement(0, "dr-dot-flashing", 24);
|
|
55
|
+
} }
|
|
56
|
+
function DrChatFormWithHistoryComponent_dr_button_16_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
58
|
+
i0.ɵɵelementStart(0, "dr-button", 25);
|
|
59
|
+
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_dr_button_16_Template_dr_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.abortMessage()); });
|
|
60
|
+
i0.ɵɵtext(1, "Stop generating");
|
|
61
|
+
i0.ɵɵelementEnd();
|
|
62
|
+
} }
|
|
63
|
+
function DrChatFormWithHistoryComponent_ng_container_17_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
65
|
+
i0.ɵɵelementContainerStart(0);
|
|
66
|
+
i0.ɵɵelementStart(1, "div", 26);
|
|
67
|
+
i0.ɵɵlistener("clickOutside", function DrChatFormWithHistoryComponent_ng_container_17_Template_div_clickOutside_1_listener() { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r18.closeHistory()); });
|
|
68
|
+
i0.ɵɵprojection(2);
|
|
69
|
+
i0.ɵɵelementEnd();
|
|
70
|
+
i0.ɵɵelementContainerEnd();
|
|
71
|
+
} if (rf & 2) {
|
|
72
|
+
const ctx_r7 = i0.ɵɵnextContext();
|
|
73
|
+
i0.ɵɵadvance(1);
|
|
74
|
+
i0.ɵɵproperty("@dropdownAnimation", ctx_r7.isShowedHistory ? "visible" : "hidden")("exclude", ".dr-icon-history");
|
|
75
|
+
} }
|
|
76
|
+
const _c1 = function (a0) { return { height: a0 }; };
|
|
77
|
+
const _c2 = function (a0, a1) { return { value: a0, params: a1 }; };
|
|
78
|
+
const _c3 = function (a0, a1, a2) { return { "message-row__input--focused": a0, "message-row__input--filled": a1, "showed-dropdown": a2 }; };
|
|
79
|
+
const _c4 = ["*"];
|
|
80
|
+
export class DrChatFormWithHistoryComponent {
|
|
81
|
+
constructor(cdr, domSanitizer) {
|
|
82
|
+
this.cdr = cdr;
|
|
83
|
+
this.domSanitizer = domSanitizer;
|
|
84
|
+
this._textareaInitialHeight = true;
|
|
85
|
+
this.inputFocus = false;
|
|
86
|
+
this.inputHover = false;
|
|
87
|
+
this.droppedFiles = [];
|
|
88
|
+
this.isShowedHistory = false;
|
|
89
|
+
this.isChatMode = false;
|
|
90
|
+
/**
|
|
91
|
+
* Predefined message text
|
|
92
|
+
*
|
|
93
|
+
* @type {string}
|
|
94
|
+
*/
|
|
95
|
+
this.message = '';
|
|
96
|
+
/**
|
|
97
|
+
* Message placeholder text
|
|
98
|
+
*
|
|
99
|
+
* @type {string}
|
|
100
|
+
*/
|
|
101
|
+
this.messagePlaceholder = 'Type a message';
|
|
102
|
+
/**
|
|
103
|
+
* Show send button
|
|
104
|
+
*
|
|
105
|
+
* @type {boolean}
|
|
106
|
+
*/
|
|
107
|
+
this.dropFiles = false;
|
|
108
|
+
/**
|
|
109
|
+
* File drop placeholder text
|
|
110
|
+
*
|
|
111
|
+
* @type {string}
|
|
112
|
+
*/
|
|
113
|
+
this.dropFilePlaceholder = 'Drop file to send';
|
|
114
|
+
/**
|
|
115
|
+
* Parameter to check is send message function available
|
|
116
|
+
*
|
|
117
|
+
* @type {boolean}
|
|
118
|
+
*/
|
|
119
|
+
this.waitForReply = false;
|
|
120
|
+
/**
|
|
121
|
+
* Parameter to check is send message function available
|
|
122
|
+
*
|
|
123
|
+
* @type {boolean}
|
|
124
|
+
*/
|
|
125
|
+
this.showDisabledButtonInsteadOfDotFlashing = false;
|
|
126
|
+
/**
|
|
127
|
+
*
|
|
128
|
+
* @type {EventEmitter<{ message: string, files: File[] }>}
|
|
129
|
+
*/
|
|
130
|
+
this.send = new EventEmitter();
|
|
131
|
+
this.abort = new EventEmitter();
|
|
132
|
+
/**
|
|
133
|
+
* Emits when message input value has been changed
|
|
134
|
+
*
|
|
135
|
+
* @type {EventEmitter<string>}
|
|
136
|
+
*/
|
|
137
|
+
this.inputChange = new EventEmitter();
|
|
138
|
+
this.fileOver = false;
|
|
139
|
+
}
|
|
140
|
+
onDrop(event) {
|
|
141
|
+
if (this.dropFiles) {
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
event.stopPropagation();
|
|
144
|
+
this.fileOver = false;
|
|
145
|
+
if (event.dataTransfer?.files) {
|
|
146
|
+
for (const file of event.dataTransfer.files) {
|
|
147
|
+
const res = file;
|
|
148
|
+
if (IMAGE_TYPES.includes(file.type)) {
|
|
149
|
+
const fr = new FileReader();
|
|
150
|
+
fr.onload = (e) => {
|
|
151
|
+
res.src = e.target.result;
|
|
152
|
+
res.urlStyle = this.domSanitizer.bypassSecurityTrustStyle(`url(${res.src})`);
|
|
153
|
+
this.cdr.detectChanges();
|
|
154
|
+
};
|
|
155
|
+
fr.readAsDataURL(file);
|
|
156
|
+
}
|
|
157
|
+
this.droppedFiles.push(res);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
removeFile(file) {
|
|
163
|
+
const index = this.droppedFiles.indexOf(file);
|
|
164
|
+
if (index >= 0) {
|
|
165
|
+
this.droppedFiles.splice(index, 1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
onDragOver(event) {
|
|
169
|
+
event.preventDefault();
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
if (this.dropFiles) {
|
|
172
|
+
this.fileOver = true;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
onDragLeave(event) {
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
event.stopPropagation();
|
|
178
|
+
if (this.dropFiles) {
|
|
179
|
+
this.fileOver = false;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
sendMessage($event) {
|
|
183
|
+
if (!$event || !$event.shiftKey) {
|
|
184
|
+
$event && $event.preventDefault();
|
|
185
|
+
if (this.waitForReply) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (this.droppedFiles.length || String(this.message).trim().length) {
|
|
189
|
+
this._textareaInitialHeight = true;
|
|
190
|
+
this.send.emit({ message: this.message, files: this.droppedFiles });
|
|
191
|
+
this.message = '';
|
|
192
|
+
this.droppedFiles = [];
|
|
193
|
+
this.cdr.markForCheck();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
abortMessage() {
|
|
198
|
+
this.abort.emit();
|
|
199
|
+
}
|
|
200
|
+
onModelChange(value) {
|
|
201
|
+
this._textareaInitialHeight = false;
|
|
202
|
+
this.inputChange.emit(value);
|
|
203
|
+
}
|
|
204
|
+
getTextAreaHeight(textAreaElement) {
|
|
205
|
+
if (this._textareaInitialHeight) {
|
|
206
|
+
textAreaElement.style.height = '48px';
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
textAreaElement.style.height = 'auto';
|
|
210
|
+
textAreaElement.style.height = textAreaElement.scrollHeight + 'px';
|
|
211
|
+
}
|
|
212
|
+
return `${textAreaElement.style.height}`;
|
|
213
|
+
}
|
|
214
|
+
getSendButtonPosition(textAreaElement) {
|
|
215
|
+
return `top: calc(${this.getTextAreaHeight(textAreaElement)} - var(--send-button-offset));`;
|
|
216
|
+
}
|
|
217
|
+
showHistory() {
|
|
218
|
+
this.isShowedHistory = !this.isShowedHistory;
|
|
219
|
+
}
|
|
220
|
+
closeHistory() {
|
|
221
|
+
this.isShowedHistory = false;
|
|
222
|
+
this.cdr.markForCheck();
|
|
223
|
+
}
|
|
224
|
+
onFileSelected(event) {
|
|
225
|
+
const input = event.target;
|
|
226
|
+
}
|
|
227
|
+
/** @nocollapse */ static { this.ɵfac = function DrChatFormWithHistoryComponent_Factory(t) { return new (t || DrChatFormWithHistoryComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.DomSanitizer)); }; }
|
|
228
|
+
/** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrChatFormWithHistoryComponent, selectors: [["dr-chat-form-with-history"]], viewQuery: function DrChatFormWithHistoryComponent_Query(rf, ctx) { if (rf & 1) {
|
|
229
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
230
|
+
} if (rf & 2) {
|
|
231
|
+
let _t;
|
|
232
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.textAreaElementRef = _t.first);
|
|
233
|
+
} }, hostVars: 2, hostBindings: function DrChatFormWithHistoryComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
234
|
+
i0.ɵɵlistener("drop", function DrChatFormWithHistoryComponent_drop_HostBindingHandler($event) { return ctx.onDrop($event); })("dragover", function DrChatFormWithHistoryComponent_dragover_HostBindingHandler($event) { return ctx.onDragOver($event); })("dragleave", function DrChatFormWithHistoryComponent_dragleave_HostBindingHandler($event) { return ctx.onDragLeave($event); });
|
|
235
|
+
} if (rf & 2) {
|
|
236
|
+
i0.ɵɵclassProp("file-over", ctx.fileOver);
|
|
237
|
+
} }, inputs: { isChatMode: "isChatMode", message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply", showDisabledButtonInsteadOfDotFlashing: "showDisabledButtonInsteadOfDotFlashing" }, outputs: { send: "send", abort: "abort", inputChange: "inputChange" }, ngContentSelectors: _c4, decls: 18, vars: 23, consts: [[1, "message-row"], [1, "message-row__input", 3, "ngClass"], ["class", "dropped-files", 4, "ngIf"], [1, "message-row__input-textarea-wrap"], ["type", "text", 3, "ngModel", "rows", "placeholder", "focus", "blur", "mouseenter", "mouseleave", "ngModelChange", "keydown.enter"], ["textAreaElement", ""], [1, "message-input-tmp"], ["type", "file", "hidden", "", "multiple", "", 3, "change"], ["fileInput", ""], [1, "dr-icon-history", 3, "click"], [1, "dr-icon-attachment", 3, "click"], ["class", "dr-icon-send-arrow-up send-button", 3, "style", "click", 4, "ngIf"], ["class", "dr-icon-send-arrow-up send-button-disabled", 3, "click", 4, "ngIf"], ["class", "wait-reply-dot-flashing", 4, "ngIf"], ["theme", "ghost", "class", "abort-button", 3, "click", 4, "ngIf"], [4, "ngIf"], [1, "dropped-files"], ["class", "dropped-files__item", 4, "ngFor", "ngForOf"], [1, "dropped-files__item"], [1, "dr-icon-file"], [1, "dropped-files__item-name"], [1, "dr-icon-noty-error", "dropped-files__item-remove", 3, "click"], [1, "dr-icon-send-arrow-up", "send-button", 3, "click"], [1, "dr-icon-send-arrow-up", "send-button-disabled", 3, "click"], [1, "wait-reply-dot-flashing"], ["theme", "ghost", 1, "abort-button", 3, "click"], [1, "history-dropdown", 3, "exclude", "clickOutside"]], template: function DrChatFormWithHistoryComponent_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
239
|
+
i0.ɵɵprojectionDef();
|
|
240
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
241
|
+
i0.ɵɵtemplate(2, DrChatFormWithHistoryComponent_div_2_Template, 2, 1, "div", 2);
|
|
242
|
+
i0.ɵɵelementStart(3, "div", 3)(4, "textarea", 4, 5);
|
|
243
|
+
i0.ɵɵlistener("focus", function DrChatFormWithHistoryComponent_Template_textarea_focus_4_listener() { return ctx.inputFocus = true; })("blur", function DrChatFormWithHistoryComponent_Template_textarea_blur_4_listener() { return ctx.inputFocus = false; })("mouseenter", function DrChatFormWithHistoryComponent_Template_textarea_mouseenter_4_listener() { return ctx.inputHover = true; })("mouseleave", function DrChatFormWithHistoryComponent_Template_textarea_mouseleave_4_listener() { return ctx.inputHover = false; })("ngModelChange", function DrChatFormWithHistoryComponent_Template_textarea_ngModelChange_4_listener($event) { return ctx.message = $event; })("ngModelChange", function DrChatFormWithHistoryComponent_Template_textarea_ngModelChange_4_listener($event) { return ctx.onModelChange($event); })("keydown.enter", function DrChatFormWithHistoryComponent_Template_textarea_keydown_enter_4_listener($event) { return ctx.sendMessage($event); });
|
|
244
|
+
i0.ɵɵtext(6, " ");
|
|
245
|
+
i0.ɵɵelementEnd();
|
|
246
|
+
i0.ɵɵelementStart(7, "div", 6);
|
|
247
|
+
i0.ɵɵtext(8);
|
|
248
|
+
i0.ɵɵelementEnd();
|
|
249
|
+
i0.ɵɵelementStart(9, "input", 7, 8);
|
|
250
|
+
i0.ɵɵlistener("change", function DrChatFormWithHistoryComponent_Template_input_change_9_listener($event) { return ctx.onFileSelected($event); });
|
|
251
|
+
i0.ɵɵelementEnd();
|
|
252
|
+
i0.ɵɵelementStart(11, "i", 9);
|
|
253
|
+
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_Template_i_click_11_listener() { return ctx.showHistory(); });
|
|
254
|
+
i0.ɵɵelementEnd();
|
|
255
|
+
i0.ɵɵelementStart(12, "i", 10);
|
|
256
|
+
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_Template_i_click_12_listener() { i0.ɵɵrestoreView(_r20); const _r2 = i0.ɵɵreference(10); return i0.ɵɵresetView(_r2.click()); });
|
|
257
|
+
i0.ɵɵelementEnd();
|
|
258
|
+
i0.ɵɵtemplate(13, DrChatFormWithHistoryComponent_i_13_Template, 1, 2, "i", 11);
|
|
259
|
+
i0.ɵɵtemplate(14, DrChatFormWithHistoryComponent_i_14_Template, 1, 0, "i", 12);
|
|
260
|
+
i0.ɵɵtemplate(15, DrChatFormWithHistoryComponent_dr_dot_flashing_15_Template, 1, 0, "dr-dot-flashing", 13);
|
|
261
|
+
i0.ɵɵtemplate(16, DrChatFormWithHistoryComponent_dr_button_16_Template, 2, 0, "dr-button", 14);
|
|
262
|
+
i0.ɵɵelementEnd();
|
|
263
|
+
i0.ɵɵtemplate(17, DrChatFormWithHistoryComponent_ng_container_17_Template, 3, 2, "ng-container", 15);
|
|
264
|
+
i0.ɵɵelementEnd()();
|
|
265
|
+
} if (rf & 2) {
|
|
266
|
+
const _r1 = i0.ɵɵreference(5);
|
|
267
|
+
i0.ɵɵadvance(1);
|
|
268
|
+
i0.ɵɵproperty("@containerHeightAnimation", i0.ɵɵpureFunction2(16, _c2, ctx.showHistory ? "expanded" : "collapsed", i0.ɵɵpureFunction1(14, _c1, ctx.getTextAreaHeight(_r1))))("ngClass", i0.ɵɵpureFunction3(19, _c3, ctx.inputFocus, !!(ctx.message == null ? null : ctx.message.length), ctx.isShowedHistory));
|
|
269
|
+
i0.ɵɵadvance(1);
|
|
270
|
+
i0.ɵɵproperty("ngIf", ctx.droppedFiles == null ? null : ctx.droppedFiles.length);
|
|
271
|
+
i0.ɵɵadvance(2);
|
|
272
|
+
i0.ɵɵstyleMap(ctx.getTextAreaHeight(_r1));
|
|
273
|
+
i0.ɵɵpropertyInterpolate("placeholder", ctx.fileOver ? ctx.dropFilePlaceholder : ctx.messagePlaceholder);
|
|
274
|
+
i0.ɵɵproperty("ngModel", ctx.message)("rows", 1);
|
|
275
|
+
i0.ɵɵadvance(4);
|
|
276
|
+
i0.ɵɵtextInterpolate(_r1.value);
|
|
277
|
+
i0.ɵɵadvance(5);
|
|
278
|
+
i0.ɵɵproperty("ngIf", !ctx.waitForReply);
|
|
279
|
+
i0.ɵɵadvance(1);
|
|
280
|
+
i0.ɵɵproperty("ngIf", ctx.waitForReply && ctx.showDisabledButtonInsteadOfDotFlashing);
|
|
281
|
+
i0.ɵɵadvance(1);
|
|
282
|
+
i0.ɵɵproperty("ngIf", ctx.waitForReply && !ctx.showDisabledButtonInsteadOfDotFlashing);
|
|
283
|
+
i0.ɵɵadvance(1);
|
|
284
|
+
i0.ɵɵproperty("ngIf", ctx.waitForReply);
|
|
285
|
+
i0.ɵɵadvance(1);
|
|
286
|
+
i0.ɵɵproperty("ngIf", !ctx.isChatMode);
|
|
287
|
+
} }, dependencies: [i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.NgClass, i3.NgForOf, i3.NgIf, i4.DrButtonComponent, i5.ClickOutsideDirective, i6.DrDotFlashingComponent], styles: ["[_nghost-%COMP%]{--send-button-offset: 42px;display:flex;flex-direction:column;align-items:center;padding:0 16px}[_nghost-%COMP%] .message-row[_ngcontent-%COMP%]{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%]{flex-direction:column;background-color:#fff;position:relative;display:flex;align-items:center;flex-grow:1;height:auto;overflow:visible;min-width:265px;border-radius:24px;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29;transition:.35s ease}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%], [_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .send-button-disabled[_ngcontent-%COMP%]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;position:absolute;top:2.5px;right:8px;cursor:pointer;font-size:24px;border-radius:100px;background:#f0f1f4;color:#aeabac;transition:.15s ease-in-out}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .dr-icon-history[_ngcontent-%COMP%], [_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .dr-icon-attachment[_ngcontent-%COMP%]{display:flex;align-items:center;position:absolute;cursor:pointer;width:32px;height:48px;left:16px;top:-1px}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .dr-icon-attachment[_ngcontent-%COMP%]{left:52px}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%]{color:#fff;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box;opacity:.5}[_nghost-%COMP%] .message-row__input--focused[_ngcontent-%COMP%]{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;height:auto!important;background:#fff}[_nghost-%COMP%] .message-row__input--filled[_ngcontent-%COMP%]{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;background:#fff}[_nghost-%COMP%] .message-row__input--filled[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%]{opacity:1}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .message-input-tmp[_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .message-row__input.showed-dropdown[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%]{opacity:.5}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%]:before{content:\"\";position:absolute;inset:-3px;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%);border-radius:25px;z-index:-1}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%], [_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .message-input-tmp[_ngcontent-%COMP%]{font-size:14px;color:#333;width:100%;outline:none;min-height:48px;line-height:19px;flex-grow:1;resize:none;padding:13px 55px 13px 88px;margin:auto;border:none;border-radius:22.5px}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus, [_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .message-input-tmp[_ngcontent-%COMP%]:focus{border:none}[_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]::placeholder, [_nghost-%COMP%] .message-row__input[_ngcontent-%COMP%] .message-input-tmp[_ngcontent-%COMP%]::placeholder{color:#9ea1aa}[_nghost-%COMP%] .message-row__input-textarea-wrap[_ngcontent-%COMP%]{display:flex;width:100%;position:relative}[_nghost-%COMP%] .history-dropdown[_ngcontent-%COMP%]{width:100%;max-height:220px;overflow-y:auto;padding:12px 16px 0}[_nghost-%COMP%] .showed-dropdown[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{visibility:hidden;position:absolute}[_nghost-%COMP%] .showed-dropdown[_ngcontent-%COMP%] .message-input-tmp[_ngcontent-%COMP%]{display:block;margin-left:inherit;white-space:nowrap;font-family:monospace;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .showed-dropdown[_ngcontent-%COMP%] .send-button[_ngcontent-%COMP%]{top:2.5px!important}[_nghost-%COMP%] .dropped-files[_ngcontent-%COMP%]{display:flex;flex-direction:row;margin-bottom:.5rem;flex-wrap:wrap;gap:8px;padding-left:16px}[_nghost-%COMP%] .dropped-files__item[_ngcontent-%COMP%]{max-width:183px;display:flex;flex-direction:row;gap:4px;justify-content:space-between;align-items:center;margin-top:16px;padding:4px 8px;border:1px solid rgb(223,224,227);box-sizing:border-box;border-radius:8px}[_nghost-%COMP%] .dropped-files__item-name[_ngcontent-%COMP%]{font-family:Poppins,sans-serif;font-size:12px;line-height:20px;font-weight:500;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .dropped-files__item-remove[_ngcontent-%COMP%]{cursor:pointer}"], data: { animation: [
|
|
288
|
+
trigger('containerHeightAnimation', [
|
|
289
|
+
state('collapsed', style({ height: '{{height}}' }), { params: { height: '48px' } }),
|
|
290
|
+
state('expanded', style({
|
|
291
|
+
height: '*',
|
|
292
|
+
})),
|
|
293
|
+
transition('collapsed => expanded', [animate('300ms ease-in-out')]),
|
|
294
|
+
transition('expanded => collapsed', [query('@dropdownAnimation', animateChild()), animate('300ms ease-in-out')]),
|
|
295
|
+
]),
|
|
296
|
+
trigger('dropdownAnimation', [
|
|
297
|
+
state('hidden', style({
|
|
298
|
+
opacity: 0,
|
|
299
|
+
transform: 'translateY(-30px)',
|
|
300
|
+
display: 'none',
|
|
301
|
+
})),
|
|
302
|
+
state('visible', style({
|
|
303
|
+
opacity: 1,
|
|
304
|
+
transform: 'translateY(0)',
|
|
305
|
+
display: 'block',
|
|
306
|
+
})),
|
|
307
|
+
transition('hidden => visible', [style({ display: 'block' }), animate('300ms ease-in-out')]),
|
|
308
|
+
transition('visible => hidden', [
|
|
309
|
+
animate('300ms ease-in-out', style({ opacity: 0, transform: 'translateY(-30px)' })),
|
|
310
|
+
style({ display: 'none' }),
|
|
311
|
+
]),
|
|
312
|
+
]),
|
|
313
|
+
] }, changeDetection: 0 }); }
|
|
314
|
+
}
|
|
315
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrChatFormWithHistoryComponent, [{
|
|
316
|
+
type: Component,
|
|
317
|
+
args: [{ selector: 'dr-chat-form-with-history', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
318
|
+
trigger('containerHeightAnimation', [
|
|
319
|
+
state('collapsed', style({ height: '{{height}}' }), { params: { height: '48px' } }),
|
|
320
|
+
state('expanded', style({
|
|
321
|
+
height: '*',
|
|
322
|
+
})),
|
|
323
|
+
transition('collapsed => expanded', [animate('300ms ease-in-out')]),
|
|
324
|
+
transition('expanded => collapsed', [query('@dropdownAnimation', animateChild()), animate('300ms ease-in-out')]),
|
|
325
|
+
]),
|
|
326
|
+
trigger('dropdownAnimation', [
|
|
327
|
+
state('hidden', style({
|
|
328
|
+
opacity: 0,
|
|
329
|
+
transform: 'translateY(-30px)',
|
|
330
|
+
display: 'none',
|
|
331
|
+
})),
|
|
332
|
+
state('visible', style({
|
|
333
|
+
opacity: 1,
|
|
334
|
+
transform: 'translateY(0)',
|
|
335
|
+
display: 'block',
|
|
336
|
+
})),
|
|
337
|
+
transition('hidden => visible', [style({ display: 'block' }), animate('300ms ease-in-out')]),
|
|
338
|
+
transition('visible => hidden', [
|
|
339
|
+
animate('300ms ease-in-out', style({ opacity: 0, transform: 'translateY(-30px)' })),
|
|
340
|
+
style({ display: 'none' }),
|
|
341
|
+
]),
|
|
342
|
+
]),
|
|
343
|
+
], template: "<div class=\"message-row\">\n <div\n [@containerHeightAnimation]=\"{\n value: showHistory ? 'expanded' : 'collapsed',\n params: { height: getTextAreaHeight(textAreaElement) },\n }\"\n class=\"message-row__input\"\n [ngClass]=\"{\n 'message-row__input--focused': inputFocus,\n 'message-row__input--filled': !!message?.length,\n 'showed-dropdown': isShowedHistory,\n }\">\n <div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <div class=\"dropped-files__item\" *ngFor=\"let file of droppedFiles\">\n <i class=\"dr-icon-file\"></i>\n <div class=\"dropped-files__item-name\">{{ file.name }}</div>\n <i class=\"dr-icon-noty-error dropped-files__item-remove\" (click)=\"removeFile(file)\"></i>\n </div>\n </div>\n\n <div class=\"message-row__input-textarea-wrap\">\n <textarea\n #textAreaElement\n (focus)=\"inputFocus = true\"\n (blur)=\"inputFocus = false\"\n (mouseenter)=\"inputHover = true\"\n (mouseleave)=\"inputHover = false\"\n [(ngModel)]=\"message\"\n [rows]=\"1\"\n [style]=\"getTextAreaHeight(textAreaElement)\"\n (ngModelChange)=\"onModelChange($event)\"\n type=\"text\"\n placeholder=\"{{ fileOver ? dropFilePlaceholder : messagePlaceholder }}\"\n (keydown.enter)=\"sendMessage($event)\">\n </textarea>\n\n <div class=\"message-input-tmp\">{{ textAreaElement.value }}</div>\n\n <input #fileInput type=\"file\" hidden multiple (change)=\"onFileSelected($event)\" />\n <i (click)=\"showHistory()\" class=\"dr-icon-history\"></i>\n <i (click)=\"fileInput.click()\" class=\"dr-icon-attachment\"></i>\n\n <i\n *ngIf=\"!waitForReply\"\n [style]=\"getSendButtonPosition(textAreaElement)\"\n (click)=\"sendMessage($event)\"\n class=\"dr-icon-send-arrow-up send-button\"></i>\n <i\n *ngIf=\"waitForReply && showDisabledButtonInsteadOfDotFlashing\"\n (click)=\"sendMessage($event)\"\n class=\"dr-icon-send-arrow-up send-button-disabled\"></i>\n\n <dr-dot-flashing\n *ngIf=\"waitForReply && !showDisabledButtonInsteadOfDotFlashing\"\n class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\"\n >Stop generating</dr-button\n >\n </div>\n\n <ng-container *ngIf=\"!isChatMode\">\n <div\n [@dropdownAnimation]=\"isShowedHistory ? 'visible' : 'hidden'\"\n class=\"history-dropdown\"\n [exclude]=\"'.dr-icon-history'\"\n (clickOutside)=\"closeHistory()\">\n <ng-content></ng-content>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [":host{--send-button-offset: 42px;display:flex;flex-direction:column;align-items:center;padding:0 16px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{flex-direction:column;background-color:#fff;position:relative;display:flex;align-items:center;flex-grow:1;height:auto;overflow:visible;min-width:265px;border-radius:24px;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29;transition:.35s ease}:host .message-row__input .send-button,:host .message-row__input .send-button-disabled{width:32px;height:32px;display:flex;align-items:center;justify-content:center;position:absolute;top:2.5px;right:8px;cursor:pointer;font-size:24px;border-radius:100px;background:#f0f1f4;color:#aeabac;transition:.15s ease-in-out}:host .message-row__input .dr-icon-history,:host .message-row__input .dr-icon-attachment{display:flex;align-items:center;position:absolute;cursor:pointer;width:32px;height:48px;left:16px;top:-1px}:host .message-row__input .dr-icon-attachment{left:52px}:host .message-row__input .send-button{color:#fff;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box;opacity:.5}:host .message-row__input--focused{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;height:auto!important;background:#fff}:host .message-row__input--filled{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;background:#fff}:host .message-row__input--filled .send-button{opacity:1}:host .message-row__input .message-input-tmp{display:none}:host .message-row__input.showed-dropdown .send-button{opacity:.5}:host .message-row__input:before{content:\"\";position:absolute;inset:-3px;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%);border-radius:25px;z-index:-1}:host .message-row__input textarea,:host .message-row__input .message-input-tmp{font-size:14px;color:#333;width:100%;outline:none;min-height:48px;line-height:19px;flex-grow:1;resize:none;padding:13px 55px 13px 88px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus,:host .message-row__input .message-input-tmp:focus{border:none}:host .message-row__input textarea::placeholder,:host .message-row__input .message-input-tmp::placeholder{color:#9ea1aa}:host .message-row__input-textarea-wrap{display:flex;width:100%;position:relative}:host .history-dropdown{width:100%;max-height:220px;overflow-y:auto;padding:12px 16px 0}:host .showed-dropdown textarea{visibility:hidden;position:absolute}:host .showed-dropdown .message-input-tmp{display:block;margin-left:inherit;white-space:nowrap;font-family:monospace;overflow:hidden;text-overflow:ellipsis}:host .showed-dropdown .send-button{top:2.5px!important}:host .dropped-files{display:flex;flex-direction:row;margin-bottom:.5rem;flex-wrap:wrap;gap:8px;padding-left:16px}:host .dropped-files__item{max-width:183px;display:flex;flex-direction:row;gap:4px;justify-content:space-between;align-items:center;margin-top:16px;padding:4px 8px;border:1px solid rgb(223,224,227);box-sizing:border-box;border-radius:8px}:host .dropped-files__item-name{font-family:Poppins,sans-serif;font-size:12px;line-height:20px;font-weight:500;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host .dropped-files__item-remove{cursor:pointer}\n"] }]
|
|
344
|
+
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }]; }, { textAreaElementRef: [{
|
|
345
|
+
type: ViewChild,
|
|
346
|
+
args: ['textAreaElement']
|
|
347
|
+
}], isChatMode: [{
|
|
348
|
+
type: Input
|
|
349
|
+
}], message: [{
|
|
350
|
+
type: Input
|
|
351
|
+
}], messagePlaceholder: [{
|
|
352
|
+
type: Input
|
|
353
|
+
}], dropFiles: [{
|
|
354
|
+
type: Input
|
|
355
|
+
}], dropFilePlaceholder: [{
|
|
356
|
+
type: Input
|
|
357
|
+
}], waitForReply: [{
|
|
358
|
+
type: Input
|
|
359
|
+
}], showDisabledButtonInsteadOfDotFlashing: [{
|
|
360
|
+
type: Input
|
|
361
|
+
}], send: [{
|
|
362
|
+
type: Output
|
|
363
|
+
}], abort: [{
|
|
364
|
+
type: Output
|
|
365
|
+
}], inputChange: [{
|
|
366
|
+
type: Output
|
|
367
|
+
}], fileOver: [{
|
|
368
|
+
type: HostBinding,
|
|
369
|
+
args: ['class.file-over']
|
|
370
|
+
}], onDrop: [{
|
|
371
|
+
type: HostListener,
|
|
372
|
+
args: ['drop', ['$event']]
|
|
373
|
+
}], onDragOver: [{
|
|
374
|
+
type: HostListener,
|
|
375
|
+
args: ['dragover', ['$event']]
|
|
376
|
+
}], onDragLeave: [{
|
|
377
|
+
type: HostListener,
|
|
378
|
+
args: ['dragleave', ['$event']]
|
|
379
|
+
}] }); })();
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtZm9ybS13aXRoLWhpc3RvcnkvY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtZm9ybS13aXRoLWhpc3RvcnkvY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7SUNEMUYsK0JBQW1FO0lBQy9ELHdCQUE0QjtJQUM1QiwrQkFBc0M7SUFBQSxZQUFlO0lBQUEsaUJBQU07SUFDM0QsNkJBQW9GO0lBQTNCLDBPQUFTLGVBQUEsMkJBQWdCLENBQUEsSUFBQztJQUFDLGlCQUFJLEVBQUE7OztJQURsRCxlQUFlO0lBQWYsa0NBQWU7OztJQUg3RCwrQkFBd0Q7SUFDcEQsc0ZBSU07SUFDVixpQkFBTTs7O0lBTGdELGVBQWU7SUFBZiw2Q0FB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QUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7d0JBQzVGLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTs0QkFDNUIsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQzs0QkFDbkYsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO3lCQUM3QixDQUFDO3FCQUNMLENBQUM7aUJBQ0w7K0ZBRzZCLGtCQUFrQjtrQkFBL0MsU0FBUzttQkFBQyxpQkFBaUI7WUFRbkIsVUFBVTtrQkFBbEIsS0FBSztZQU9HLE9BQU87a0JBQWYsS0FBSztZQU9HLGtCQUFrQjtrQkFBMUIsS0FBSztZQU9HLFNBQVM7a0JBQWpCLEtBQUs7WUFPRyxtQkFBbUI7a0JBQTNCLEtBQUs7WUFPRyxZQUFZO2tCQUFwQixLQUFLO1lBT0csc0NBQXNDO2tCQUE5QyxLQUFLO1lBTUksSUFBSTtrQkFBYixNQUFNO1lBQ0csS0FBSztrQkFBZCxNQUFNO1lBUUcsV0FBVztrQkFBcEIsTUFBTTtZQUV5QixRQUFRO2tCQUF2QyxXQUFXO21CQUFDLGlCQUFpQjtZQVE5QixNQUFNO2tCQURMLFlBQVk7bUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBbUNoQyxVQUFVO2tCQURULFlBQVk7bUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBVXBDLFdBQVc7a0JBRFYsWUFBWTttQkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElNQUdFX1RZUEVTIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXQnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlLCBxdWVyeSwgYW5pbWF0ZUNoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItY2hhdC1mb3JtLXdpdGgtaGlzdG9yeScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZm9ybS13aXRoLWhpc3RvcnkuLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jaGF0LWZvcm0td2l0aC1oaXN0b3J5Li5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignY29udGFpbmVySGVpZ2h0QW5pbWF0aW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAne3toZWlnaHR9fScgfSksIHsgcGFyYW1zOiB7IGhlaWdodDogJzQ4cHgnIH0gfSksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAnZXhwYW5kZWQnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnKicsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignY29sbGFwc2VkID0+IGV4cGFuZGVkJywgW2FuaW1hdGUoJzMwMG1zIGVhc2UtaW4tb3V0JyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkID0+IGNvbGxhcHNlZCcsIFtxdWVyeSgnQGRyb3Bkb3duQW5pbWF0aW9uJywgYW5pbWF0ZUNoaWxkKCkpLCBhbmltYXRlKCczMDBtcyBlYXNlLWluLW91dCcpXSksXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdkcm9wZG93bkFuaW1hdGlvbicsIFtcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMzBweCknLFxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZGVuID0+IHZpc2libGUnLCBbc3R5bGUoeyBkaXNwbGF5OiAnYmxvY2snIH0pLCBhbmltYXRlKCczMDBtcyBlYXNlLWluLW91dCcpXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlLWluLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMzBweCknIH0pKSxcbiAgICAgICAgICAgICAgICBzdHlsZSh7IGRpc3BsYXk6ICdub25lJyB9KSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEckNoYXRGb3JtV2l0aEhpc3RvcnlDb21wb25lbnQge1xuICAgIEBWaWV3Q2hpbGQoJ3RleHRBcmVhRWxlbWVudCcpIHRleHRBcmVhRWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgICBfdGV4dGFyZWFJbml0aWFsSGVpZ2h0ID0gdHJ1ZTtcbiAgICBpbnB1dEZvY3VzID0gZmFsc2U7XG4gICAgaW5wdXRIb3ZlciA9IGZhbHNlO1xuXG4gICAgZHJvcHBlZEZpbGVzOiBhbnlbXSA9IFtdO1xuICAgIGlzU2hvd2VkSGlzdG9yeSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaXNDaGF0TW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUHJlZGVmaW5lZCBtZXNzYWdlIHRleHRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgQElucHV0KCkgbWVzc2FnZSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogTWVzc2FnZSBwbGFjZWhvbGRlciB0ZXh0XG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1lc3NhZ2VQbGFjZWhvbGRlciA9ICdUeXBlIGEgbWVzc2FnZSc7XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHNlbmQgYnV0dG9uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBASW5wdXQoKSBkcm9wRmlsZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZpbGUgZHJvcCBwbGFjZWhvbGRlciB0ZXh0XG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyb3BGaWxlUGxhY2Vob2xkZXIgPSAnRHJvcCBmaWxlIHRvIHNlbmQnO1xuXG4gICAgLyoqXG4gICAgICogUGFyYW1ldGVyIHRvIGNoZWNrIGlzIHNlbmQgbWVzc2FnZSBmdW5jdGlvbiBhdmFpbGFibGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHdhaXRGb3JSZXBseSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUGFyYW1ldGVyIHRvIGNoZWNrIGlzIHNlbmQgbWVzc2FnZSBmdW5jdGlvbiBhdmFpbGFibGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHNob3dEaXNhYmxlZEJ1dHRvbkluc3RlYWRPZkRvdEZsYXNoaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmcsIGZpbGVzOiBGaWxlW10gfT59XG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbmQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nOyBmaWxlczogRmlsZVtdIH0+KCk7XG4gICAgQE91dHB1dCgpIGFib3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIG1lc3NhZ2UgaW5wdXQgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZFxuICAgICAqXG4gICAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmc+fVxuICAgICAqL1xuXG4gICAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpbGUtb3ZlcicpIGZpbGVPdmVyID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICApIHt9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgICBvbkRyb3AoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5maWxlT3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGZpbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKElNQUdFX1RZUEVTLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMuc3JjID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy51cmxTdHlsZSA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgdXJsKCR7cmVzLnNyY30pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BwZWRGaWxlcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kcm9wcGVkRmlsZXMuaW5kZXhPZihmaWxlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcHBlZEZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gICAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZU92ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJhZ2xlYXZlJywgWyckZXZlbnQnXSlcbiAgICBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZU92ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbmRNZXNzYWdlKCRldmVudCkge1xuICAgICAgICBpZiAoISRldmVudCB8fCAhJGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAkZXZlbnQgJiYgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy53YWl0Rm9yUmVwbHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3BwZWRGaWxlcy5sZW5ndGggfHwgU3RyaW5nKHRoaXMubWVzc2FnZSkudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHRhcmVhSW5pdGlhbEhlaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kLmVtaXQoeyBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsIGZpbGVzOiB0aGlzLmRyb3BwZWRGaWxlcyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BwZWRGaWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJvcnRNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLmFib3J0LmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGV4dGFyZWFJbml0aWFsSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0VGV4dEFyZWFIZWlnaHQodGV4dEFyZWFFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl90ZXh0YXJlYUluaXRpYWxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnNDhweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRleHRBcmVhRWxlbWVudC5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3RleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHR9YDtcbiAgICB9XG5cbiAgICBnZXRTZW5kQnV0dG9uUG9zaXRpb24odGV4dEFyZWFFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBgdG9wOiBjYWxjKCR7dGhpcy5nZXRUZXh0QXJlYUhlaWdodCh0ZXh0QXJlYUVsZW1lbnQpfSAtIHZhcigtLXNlbmQtYnV0dG9uLW9mZnNldCkpO2A7XG4gICAgfVxuXG4gICAgc2hvd0hpc3RvcnkoKSB7XG4gICAgICAgIHRoaXMuaXNTaG93ZWRIaXN0b3J5ID0gIXRoaXMuaXNTaG93ZWRIaXN0b3J5O1xuICAgIH1cblxuICAgIGNsb3NlSGlzdG9yeSgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dlZEhpc3RvcnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1lc3NhZ2Utcm93XCI+XG4gICAgPGRpdlxuICAgICAgICBbQGNvbnRhaW5lckhlaWdodEFuaW1hdGlvbl09XCJ7XG4gICAgICAgICAgICB2YWx1ZTogc2hvd0hpc3RvcnkgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCcsXG4gICAgICAgICAgICBwYXJhbXM6IHsgaGVpZ2h0OiBnZXRUZXh0QXJlYUhlaWdodCh0ZXh0QXJlYUVsZW1lbnQpIH0sXG4gICAgICAgIH1cIlxuICAgICAgICBjbGFzcz1cIm1lc3NhZ2Utcm93X19pbnB1dFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdtZXNzYWdlLXJvd19faW5wdXQtLWZvY3VzZWQnOiBpbnB1dEZvY3VzLFxuICAgICAgICAgICAgJ21lc3NhZ2Utcm93X19pbnB1dC0tZmlsbGVkJzogISFtZXNzYWdlPy5sZW5ndGgsXG4gICAgICAgICAgICAnc2hvd2VkLWRyb3Bkb3duJzogaXNTaG93ZWRIaXN0b3J5LFxuICAgICAgICB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wcGVkLWZpbGVzXCIgKm5nSWY9XCJkcm9wcGVkRmlsZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3BwZWQtZmlsZXNfX2l0ZW1cIiAqbmdGb3I9XCJsZXQgZmlsZSBvZiBkcm9wcGVkRmlsZXNcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImRyLWljb24tZmlsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHBlZC1maWxlc19faXRlbS1uYW1lXCI+e3sgZmlsZS5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJkci1pY29uLW5vdHktZXJyb3IgZHJvcHBlZC1maWxlc19faXRlbS1yZW1vdmVcIiAoY2xpY2spPVwicmVtb3ZlRmlsZShmaWxlKVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1yb3dfX2lucHV0LXRleHRhcmVhLXdyYXBcIj5cbiAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICN0ZXh0QXJlYUVsZW1lbnRcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwiaW5wdXRGb2N1cyA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cImlucHV0Rm9jdXMgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaW5wdXRIb3ZlciA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlucHV0SG92ZXIgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtZXNzYWdlXCJcbiAgICAgICAgICAgICAgICBbcm93c109XCIxXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiZ2V0VGV4dEFyZWFIZWlnaHQodGV4dEFyZWFFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBmaWxlT3ZlciA/IGRyb3BGaWxlUGxhY2Vob2xkZXIgOiBtZXNzYWdlUGxhY2Vob2xkZXIgfX1cIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbmRNZXNzYWdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvdGV4dGFyZWE+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWlucHV0LXRtcFwiPnt7IHRleHRBcmVhRWxlbWVudC52YWx1ZSB9fTwvZGl2PlxuXG4gICAgICAgICAgICA8aW5wdXQgI2ZpbGVJbnB1dCB0eXBlPVwiZmlsZVwiIGhpZGRlbiBtdWx0aXBsZSAoY2hhbmdlKT1cIm9uRmlsZVNlbGVjdGVkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgPGkgKGNsaWNrKT1cInNob3dIaXN0b3J5KClcIiBjbGFzcz1cImRyLWljb24taGlzdG9yeVwiPjwvaT5cbiAgICAgICAgICAgIDxpIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiIGNsYXNzPVwiZHItaWNvbi1hdHRhY2htZW50XCI+PC9pPlxuXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXdhaXRGb3JSZXBseVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldFNlbmRCdXR0b25Qb3NpdGlvbih0ZXh0QXJlYUVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VuZE1lc3NhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkci1pY29uLXNlbmQtYXJyb3ctdXAgc2VuZC1idXR0b25cIj48L2k+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICpuZ0lmPVwid2FpdEZvclJlcGx5ICYmIHNob3dEaXNhYmxlZEJ1dHRvbkluc3RlYWRPZkRvdEZsYXNoaW5nXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VuZE1lc3NhZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkci1pY29uLXNlbmQtYXJyb3ctdXAgc2VuZC1idXR0b24tZGlzYWJsZWRcIj48L2k+XG5cbiAgICAgICAgICAgIDxkci1kb3QtZmxhc2hpbmdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIndhaXRGb3JSZXBseSAmJiAhc2hvd0Rpc2FibGVkQnV0dG9uSW5zdGVhZE9mRG90Rmxhc2hpbmdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwid2FpdC1yZXBseS1kb3QtZmxhc2hpbmdcIj48L2RyLWRvdC1mbGFzaGluZz5cbiAgICAgICAgICAgIDxkci1idXR0b24gKm5nSWY9XCJ3YWl0Rm9yUmVwbHlcIiAoY2xpY2spPVwiYWJvcnRNZXNzYWdlKClcIiB0aGVtZT1cImdob3N0XCIgY2xhc3M9XCJhYm9ydC1idXR0b25cIlxuICAgICAgICAgICAgICAgID5TdG9wIGdlbmVyYXRpbmc8L2RyLWJ1dHRvblxuICAgICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ2hhdE1vZGVcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbQGRyb3Bkb3duQW5pbWF0aW9uXT1cImlzU2hvd2VkSGlzdG9yeSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImhpc3RvcnktZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgIFtleGNsdWRlXT1cIicuZHItaWNvbi1oaXN0b3J5J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZUhpc3RvcnkoKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as _ from 'lodash';
|
|
3
|
+
import { DrSharedUtils } from '../../utils/dr-shared-utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class FilterPipe {
|
|
6
|
+
transform(arr, fn, type, refresh) {
|
|
7
|
+
if (!fn) {
|
|
8
|
+
return arr;
|
|
9
|
+
}
|
|
10
|
+
if (!_.isArray(arr)) {
|
|
11
|
+
return arr;
|
|
12
|
+
}
|
|
13
|
+
if (_.isFunction(fn)) {
|
|
14
|
+
return arr.filter(fn);
|
|
15
|
+
}
|
|
16
|
+
else if (_.isArray(fn)) {
|
|
17
|
+
const [key, value] = fn;
|
|
18
|
+
if (_.isUndefined(value)) {
|
|
19
|
+
return arr;
|
|
20
|
+
}
|
|
21
|
+
if (type === 'text') {
|
|
22
|
+
if (key) {
|
|
23
|
+
return arr.filter((item) => item[key].toLowerCase().includes(value.toLowerCase()));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return arr.filter((item) => item.toString().toLowerCase().includes(value.toLowerCase()));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return arr.filter((item) => DrSharedUtils.getProperty(item, key) === value || item.system === 1);
|
|
30
|
+
}
|
|
31
|
+
else if (fn) {
|
|
32
|
+
return arr.filter((item) => item === fn);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return arr;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** @nocollapse */ static { this.ɵfac = function FilterPipe_Factory(t) { return new (t || FilterPipe)(); }; }
|
|
39
|
+
/** @nocollapse */ static { this.ɵpipe = /** @pureOrBreakMyCode */ i0.ɵɵdefinePipe({ name: "filter", type: FilterPipe, pure: true, standalone: true }); }
|
|
40
|
+
}
|
|
41
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FilterPipe, [{
|
|
42
|
+
type: Pipe,
|
|
43
|
+
args: [{
|
|
44
|
+
name: 'filter',
|
|
45
|
+
standalone: true,
|
|
46
|
+
}]
|
|
47
|
+
}], null, null); })();
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9waXBlcy9maWx0ZXIvZmlsdGVyLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQU01RCxNQUFNLE9BQU8sVUFBVTtJQUNuQixTQUFTLENBQUksR0FBUSxFQUFFLEVBQU8sRUFBRSxJQUFhLEVBQUUsT0FBaUI7UUFDNUQsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNqQixPQUFPLEdBQUcsQ0FBQztTQUNkO1FBQ0QsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjthQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxFQUFFO29CQUNMLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUMzRjtxQkFBTTtvQkFDSCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDakc7YUFDSjtZQUNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDekc7YUFBTSxJQUFJLEVBQUUsRUFBRTtZQUNYLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO2FBQU07WUFDSCxPQUFPLEdBQUcsQ0FBQztTQUNkO0lBQ0wsQ0FBQzs4RkE1QlEsVUFBVTsrR0FBVixVQUFVOzt1RkFBVixVQUFVO2NBSnRCLElBQUk7ZUFBQztnQkFDRixJQUFJLEVBQUUsUUFBUTtnQkFDZCxVQUFVLEVBQUUsSUFBSTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERyU2hhcmVkVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy9kci1zaGFyZWQtdXRpbHMnO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ2ZpbHRlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHRyYW5zZm9ybTxUPihhcnI6IFRbXSwgZm46IGFueSwgdHlwZT86IHN0cmluZywgcmVmcmVzaD86IGJvb2xlYW4pOiBUW10ge1xuICAgICAgICBpZiAoIWZuKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc0FycmF5KGFycikpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnIuZmlsdGVyKGZuKTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzQXJyYXkoZm4pKSB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBmbjtcbiAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtW2tleV0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyci5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IERyU2hhcmVkVXRpbHMuZ2V0UHJvcGVydHkoaXRlbSwga2V5KSA9PT0gdmFsdWUgfHwgaXRlbS5zeXN0ZW0gPT09IDEpO1xuICAgICAgICB9IGVsc2UgaWYgKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtID09PSBmbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ImgPipe {
|
|
4
|
+
transform(value, ...args) {
|
|
5
|
+
const isLocalHost = STATIC_URL.indexOf('localhost') >= 0 || STATIC_URL.indexOf('127.0.0.1') >= 0;
|
|
6
|
+
const path = value.startsWith('./') ? value.replace('./', '/') : value.startsWith('/') ? value : '/' + value;
|
|
7
|
+
return isLocalHost ? value : document.staticFunc(path);
|
|
8
|
+
}
|
|
9
|
+
/** @nocollapse */ static { this.ɵfac = function ImgPipe_Factory(t) { return new (t || ImgPipe)(); }; }
|
|
10
|
+
/** @nocollapse */ static { this.ɵpipe = /** @pureOrBreakMyCode */ i0.ɵɵdefinePipe({ name: "img", type: ImgPipe, pure: true, standalone: true }); }
|
|
11
|
+
}
|
|
12
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImgPipe, [{
|
|
13
|
+
type: Pipe,
|
|
14
|
+
args: [{
|
|
15
|
+
name: 'img',
|
|
16
|
+
standalone: true,
|
|
17
|
+
}]
|
|
18
|
+
}], null, null); })();
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1nLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9waXBlcy9pbWcvaW1nLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBUXBELE1BQU0sT0FBTyxPQUFPO0lBQ2hCLFNBQVMsQ0FBQyxLQUFhLEVBQUUsR0FBRyxJQUFlO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFDN0csT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsUUFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQzsyRkFMUSxPQUFPOzRHQUFQLE9BQU87O3VGQUFQLE9BQU87Y0FKbkIsSUFBSTtlQUFDO2dCQUNGLElBQUksRUFBRSxLQUFLO2dCQUNYLFVBQVUsRUFBRSxJQUFJO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGNvbnN0IFNUQVRJQ19VUkw6IHN0cmluZztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdpbWcnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEltZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxIb3N0ID0gU1RBVElDX1VSTC5pbmRleE9mKCdsb2NhbGhvc3QnKSA+PSAwIHx8IFNUQVRJQ19VUkwuaW5kZXhPZignMTI3LjAuMC4xJykgPj0gMDtcbiAgICAgICAgY29uc3QgcGF0aCA9IHZhbHVlLnN0YXJ0c1dpdGgoJy4vJykgPyB2YWx1ZS5yZXBsYWNlKCcuLycsICcvJykgOiB2YWx1ZS5zdGFydHNXaXRoKCcvJykgPyB2YWx1ZSA6ICcvJyArIHZhbHVlO1xuICAgICAgICByZXR1cm4gaXNMb2NhbEhvc3QgPyB2YWx1ZSA6IChkb2N1bWVudCBhcyBhbnkpLnN0YXRpY0Z1bmMocGF0aCk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import moment from 'moment';
|
|
2
2
|
import { DateTags, TimeframeOption } from '../models/datePicker';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
|
+
import { isNil, isObject } from 'lodash';
|
|
4
5
|
export class DrSharedUtils {
|
|
5
6
|
/**
|
|
6
7
|
* Get timeframe (day, year, month, quarter) based on passed format
|
|
@@ -54,5 +55,31 @@ export class DrSharedUtils {
|
|
|
54
55
|
static { this.normalizeLineEndings = (str) => {
|
|
55
56
|
return str ? str.replace(/\r\n|\r/g, '\n') : str;
|
|
56
57
|
}; }
|
|
58
|
+
static { this.isLocalhost = () => window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1'; }
|
|
59
|
+
static { this.getRouteDataAttributeValue = (activatedRoute, attribute, defaultValue) => {
|
|
60
|
+
if (activatedRoute.snapshot.data.hasOwnProperty(attribute)) {
|
|
61
|
+
defaultValue = activatedRoute.snapshot.data[attribute];
|
|
62
|
+
}
|
|
63
|
+
if (activatedRoute?.children?.length) {
|
|
64
|
+
activatedRoute.children.forEach((child) => {
|
|
65
|
+
defaultValue = DrSharedUtils.getRouteDataAttributeValue(child, attribute, defaultValue);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return defaultValue;
|
|
69
|
+
}; }
|
|
70
|
+
static { this.getProperty = (value, key) => {
|
|
71
|
+
if (isNil(value) || !isObject(value)) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
const keys = key.split('.');
|
|
75
|
+
let result = value[keys.shift()];
|
|
76
|
+
for (const k of keys) {
|
|
77
|
+
if (isNil(result) || !isObject(result)) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
result = result[k];
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}; }
|
|
57
84
|
}
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItc2hhcmVkLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvdXRpbHMvZHItc2hhcmVkLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFekMsTUFBTSxPQUFPLGFBQWE7SUFDdEI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFjO1FBQ2pELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7UUFFekMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU8sWUFBWSxDQUFDO1NBQ3ZCO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdDLFFBQVEsSUFBSSxFQUFFO1lBQ1YsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDOUIsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDO1lBQ25DLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQzlCLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUMvQixLQUFLLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUM5QixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDaEMsS0FBSyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDOUIsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQ2pDLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7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QyxJQUFJLENBQUMsS0FBSyxFQUFHLENBQUMsQ0FBQztRQUV2QyxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtZQUNsQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDcEMsT0FBTyxTQUFTLENBQUM7YUFDcEI7WUFFRCxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRGF0ZVRhZ3MsIFRpbWVmcmFtZU9wdGlvbiB9IGZyb20gJy4uL21vZGVscy9kYXRlUGlja2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjbGFzcyBEclNoYXJlZFV0aWxzIHtcbiAgICAvKipcbiAgICAgKiBHZXQgdGltZWZyYW1lIChkYXksIHllYXIsIG1vbnRoLCBxdWFydGVyKSBiYXNlZCBvbiBwYXNzZWQgZm9ybWF0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm9ybWF0IC0gZGF0ZSBmb3JtYXQgc3RyaW5nLiBFeGFtcGxlczogTU0vREQvWVlZWSwgUS9ZWVlZXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRUaW1lZnJhbWVCeURhdGVGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiBUaW1lZnJhbWVPcHRpb24ge1xuICAgICAgICBjb25zdCBkZWZhdWx0RnJhbWUgPSBUaW1lZnJhbWVPcHRpb24uREFZO1xuXG4gICAgICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG93ZXJDYXNlRm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgY2FzZSBsb3dlckNhc2VGb3JtYXQuaW5jbHVkZXMoJ3EnKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gVGltZWZyYW1lT3B0aW9uLlFVQVJURVI7XG4gICAgICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygnZCcpOlxuICAgICAgICAgICAgICAgIHJldHVybiBUaW1lZnJhbWVPcHRpb24uREFZO1xuICAgICAgICAgICAgY2FzZSBsb3dlckNhc2VGb3JtYXQuaW5jbHVkZXMoJ3cnKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gVGltZWZyYW1lT3B0aW9uLldFRUs7XG4gICAgICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygnbScpOlxuICAgICAgICAgICAgICAgIHJldHVybiBUaW1lZnJhbWVPcHRpb24uTU9OVEg7XG4gICAgICAgICAgICBjYXNlIGxvd2VyQ2FzZUZvcm1hdC5pbmNsdWRlcygneScpOlxuICAgICAgICAgICAgICAgIHJldHVybiBUaW1lZnJhbWVPcHRpb24uWUVBUjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGcmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZUJ5VGFnKHRhZzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3QgdG9kYXlEYXRlID0gbW9tZW50KCkudXRjKCkuZW5kT2YoJ2RheScpO1xuICAgICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICAgICAgY2FzZSBEYXRlVGFncy5UT0RBWTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9kYXlEYXRlO1xuICAgICAgICAgICAgY2FzZSBEYXRlVGFncy5ZRVNURVJEQVk6XG4gICAgICAgICAgICAgICAgdG9kYXlEYXRlLnN1YnRyYWN0KDEsICdkYXlzJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvZGF5RGF0ZTtcbiAgICAgICAgICAgIGNhc2UgRGF0ZVRhZ3MuVEhJU19NT05USDpcbiAgICAgICAgICAgICAgICB0b2RheURhdGUuZW5kT2YoJ21vbnRoJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvZGF5RGF0ZTtcbiAgICAgICAgICAgIGNhc2UgRGF0ZVRhZ3MuUFJFVl9NT05USDpcbiAgICAgICAgICAgICAgICB0b2RheURhdGUuc3VidHJhY3QoMSwgJ21vbnRocycpLmVuZE9mKCdtb250aCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2RheURhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21SZXNpemVPYnNlcnZlciA9ICh0YXJnZXQ6IEVsZW1lbnQpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT4gPT5cbiAgICAgICAgbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4gb2JzZXJ2ZXIubmV4dChlbnRyaWVzKSk7XG5cbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGFyZ2V0KTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgIHB1YmxpYyBzdGF0aWMgbm9ybWFsaXplTGluZUVuZGluZ3MgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gc3RyID8gc3RyLnJlcGxhY2UoL1xcclxcbnxcXHIvZywgJ1xcbicpIDogc3RyO1xuICAgIH07XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzTG9jYWxob3N0ID0gKCk6IGJvb2xlYW4gPT5cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09ICcxMjcuMC4wLjEnO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRSb3V0ZURhdGFBdHRyaWJ1dGVWYWx1ZSA9IDxUPihcbiAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBhdHRyaWJ1dGU6IHN0cmluZyxcbiAgICAgICAgZGVmYXVsdFZhbHVlPzogVCxcbiAgICApOiBUIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgICAgaWYgKGFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmRhdGEuaGFzT3duUHJvcGVydHkoYXR0cmlidXRlKSkge1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YVthdHRyaWJ1dGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdGl2YXRlZFJvdXRlPy5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IERyU2hhcmVkVXRpbHMuZ2V0Um91dGVEYXRhQXR0cmlidXRlVmFsdWUoY2hpbGQsIGF0dHJpYnV0ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9O1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0eSA9ICh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwga2V5OiBzdHJpbmcpOiBhbnkgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodmFsdWUpIHx8ICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnkgPSB2YWx1ZVtrZXlzLnNoaWZ0KCkhXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGsgb2Yga2V5cykge1xuICAgICAgICAgICAgaWYgKGlzTmlsKHJlc3VsdCkgfHwgIWlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRba107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG59XG4iXX0=
|