@datarailsshared/datarailsshared 1.6.25 → 1.6.27
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.6.27.tgz +0 -0
- package/esm2022/lib/dr-chat/chat.component.mjs +4 -4
- package/esm2022/lib/dr-chat/chat.module.mjs +5 -5
- package/esm2022/lib/dr-chat/dr-chat-form-dropdown/dr-chat-form-dropdown.component.mjs +288 -0
- package/esm2022/lib/dr-dropdown/dr-dropdown.directive.mjs +8 -2
- package/esm2022/lib/dr-dropdown/dr-dropdown.service.mjs +4 -4
- package/esm2022/lib/models/popover.mjs +1 -1
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/datarailsshared-datarailsshared.mjs +152 -248
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/dr-chat/chat.component.d.ts +1 -1
- package/lib/dr-chat/chat.module.d.ts +2 -2
- package/lib/dr-chat/{dr-chat-form-with-history/chat-form-with-history.component.d.ts → dr-chat-form-dropdown/dr-chat-form-dropdown.component.d.ts} +4 -9
- package/lib/dr-dropdown/dr-dropdown.directive.d.ts +3 -1
- package/lib/dr-dropdown/dr-dropdown.service.d.ts +3 -1
- package/lib/models/popover.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/datarailsshared-datarailsshared-1.6.25.tgz +0 -0
- package/esm2022/lib/dr-chat/dr-chat-form-with-history/chat-form-with-history.component.mjs +0 -392
|
@@ -39,5 +39,5 @@ export declare class DrChatComponent implements AfterViewInit, OnDestroy {
|
|
|
39
39
|
clearHiddenSuggestions(): void;
|
|
40
40
|
hideSuggestions(): void;
|
|
41
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<DrChatComponent, never>;
|
|
42
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DrChatComponent, "dr-chat", never, { "fullScreen": { "alias": "fullScreen"; "required": false; }; "noMessagesPlaceholder": { "alias": "noMessagesPlaceholder"; "required": false; }; "contentUpdateSubject": { "alias": "contentUpdateSubject"; "required": false; }; "scrollBottom": { "alias": "scrollBottom"; "required": false; }; "suggestions": { "alias": "suggestions"; "required": false; }; "reopen": { "alias": "reopen"; "required": false; }; "waitForReply": { "alias": "waitForReply"; "required": false; }; }, { "suggestionSelect": "suggestionSelect"; }, ["chatForm", "chatHeader", "messages"], ["dr-chat-alert", "dr-chat-message", "dr-chat-form", "dr-
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DrChatComponent, "dr-chat", never, { "fullScreen": { "alias": "fullScreen"; "required": false; }; "noMessagesPlaceholder": { "alias": "noMessagesPlaceholder"; "required": false; }; "contentUpdateSubject": { "alias": "contentUpdateSubject"; "required": false; }; "scrollBottom": { "alias": "scrollBottom"; "required": false; }; "suggestions": { "alias": "suggestions"; "required": false; }; "reopen": { "alias": "reopen"; "required": false; }; "waitForReply": { "alias": "waitForReply"; "required": false; }; }, { "suggestionSelect": "suggestionSelect"; }, ["chatForm", "chatHeader", "messages"], ["dr-chat-alert", "dr-chat-message", "dr-chat-form", "dr-ai-search-input"], false, never>;
|
|
43
43
|
}
|
|
@@ -2,7 +2,7 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./chat.component";
|
|
3
3
|
import * as i2 from "./dr-chat-message/chat-message.component";
|
|
4
4
|
import * as i3 from "./dr-chat-form/chat-form.component";
|
|
5
|
-
import * as i4 from "./dr-chat-form-
|
|
5
|
+
import * as i4 from "./dr-chat-form-dropdown/dr-chat-form-dropdown.component";
|
|
6
6
|
import * as i5 from "./dr-chat-message/dr-chat-message-text/chat-message-text.component";
|
|
7
7
|
import * as i6 from "./dr-chat-message/dr-chat-message-file/chat-message-file.component";
|
|
8
8
|
import * as i7 from "./dr-chat-suggestions/chat-suggestions.component";
|
|
@@ -19,6 +19,6 @@ import * as i17 from "../dr-tooltip/dr-tooltip.module";
|
|
|
19
19
|
import * as i18 from "../directives/click-outside/click-outside.module";
|
|
20
20
|
export declare class DrChatModule {
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<DrChatModule, never>;
|
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<DrChatModule, [typeof i1.DrChatComponent, typeof i2.DrChatMessageComponent, typeof i3.DrChatFormComponent, typeof i4.
|
|
22
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DrChatModule, [typeof i1.DrChatComponent, typeof i2.DrChatMessageComponent, typeof i3.DrChatFormComponent, typeof i4.DrChatFormDropdownComponent, typeof i5.DrChatMessageTextComponent, typeof i6.DrChatMessageFileComponent, typeof i7.DrChatSuggestionsComponent, typeof i8.DrDotFlashingComponent, typeof i9.DrChatAlertComponent, typeof i10.DrChatDroppedFilesComponent, typeof i11.DrChatCustomMessageDirective, typeof i12.ShorterNamingPipe], [typeof i13.FormsModule, typeof i13.ReactiveFormsModule, typeof i14.CommonModule, typeof i15.DrAvatarModule, typeof i16.DrInputsModule, typeof i17.DrTooltipModule, typeof i18.ClickOutsideModule], [typeof i1.DrChatComponent, typeof i2.DrChatMessageComponent, typeof i3.DrChatFormComponent, typeof i4.DrChatFormDropdownComponent, typeof i5.DrChatMessageTextComponent, typeof i6.DrChatMessageFileComponent, typeof i7.DrChatSuggestionsComponent, typeof i8.DrDotFlashingComponent, typeof i9.DrChatAlertComponent, typeof i10.DrChatDroppedFilesComponent, typeof i11.DrChatCustomMessageDirective]>;
|
|
23
23
|
static ɵinj: i0.ɵɵInjectorDeclaration<DrChatModule>;
|
|
24
24
|
}
|
|
@@ -3,7 +3,7 @@ import { DomSanitizer } from '@angular/platform-browser';
|
|
|
3
3
|
import { IFIle } from '../../models/chat';
|
|
4
4
|
import { BehaviorSubject } from 'rxjs';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class
|
|
6
|
+
export declare class DrChatFormDropdownComponent {
|
|
7
7
|
protected cdr: ChangeDetectorRef;
|
|
8
8
|
protected domSanitizer: DomSanitizer;
|
|
9
9
|
textAreaElementRef: ElementRef;
|
|
@@ -12,8 +12,6 @@ export declare class DrChatFormWithHistoryComponent {
|
|
|
12
12
|
inputFocus: boolean;
|
|
13
13
|
inputHover: boolean;
|
|
14
14
|
droppedFiles$: BehaviorSubject<IFIle[]>;
|
|
15
|
-
isShowedHistory: boolean;
|
|
16
|
-
isChatMode: boolean;
|
|
17
15
|
isLoading: boolean;
|
|
18
16
|
/**
|
|
19
17
|
* Predefined message text
|
|
@@ -60,7 +58,7 @@ export declare class DrChatFormWithHistoryComponent {
|
|
|
60
58
|
files: IFIle[];
|
|
61
59
|
}>;
|
|
62
60
|
uploadFiles: EventEmitter<IFIle[]>;
|
|
63
|
-
abort: EventEmitter<
|
|
61
|
+
abort: EventEmitter<void>;
|
|
64
62
|
/**
|
|
65
63
|
* Emits when message input value has been changed
|
|
66
64
|
*
|
|
@@ -77,12 +75,9 @@ export declare class DrChatFormWithHistoryComponent {
|
|
|
77
75
|
abortMessage(): void;
|
|
78
76
|
onModelChange(value: string): void;
|
|
79
77
|
getTextAreaHeight(textAreaElement: HTMLTextAreaElement): string;
|
|
80
|
-
getSendButtonPosition(textAreaElement: HTMLTextAreaElement): string;
|
|
81
|
-
showHistory(): void;
|
|
82
|
-
closeHistory(): void;
|
|
83
78
|
onFileSelected(event: Event): void;
|
|
84
79
|
private saveFiles;
|
|
85
80
|
private base64Convert;
|
|
86
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
87
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<
|
|
81
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DrChatFormDropdownComponent, never>;
|
|
82
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DrChatFormDropdownComponent, "dr-chat-form-dropdown", never, { "isLoading": { "alias": "isLoading"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messagePlaceholder": { "alias": "messagePlaceholder"; "required": false; }; "dropFiles": { "alias": "dropFiles"; "required": false; }; "dropFilePlaceholder": { "alias": "dropFilePlaceholder"; "required": false; }; "waitForReply": { "alias": "waitForReply"; "required": false; }; "showDotFlashing": { "alias": "showDotFlashing"; "required": false; }; }, { "send": "send"; "uploadFiles": "uploadFiles"; "abort": "abort"; "inputChange": "inputChange"; }, never, ["*"], false, never>;
|
|
88
83
|
}
|
|
@@ -11,6 +11,8 @@ export declare class DrDropdownDirective<T> implements OnDestroy {
|
|
|
11
11
|
drDropdownClass: string;
|
|
12
12
|
drDropdownInHover: boolean;
|
|
13
13
|
dataAnalytics: string;
|
|
14
|
+
drDropdownPositionOffsetX: number;
|
|
15
|
+
drDropdownPositionOffsetY: number;
|
|
14
16
|
drDropdownAction: EventEmitter<IDropdownAction<T>>;
|
|
15
17
|
dropdownClosed: EventEmitter<void>;
|
|
16
18
|
dropdownOpened: EventEmitter<void>;
|
|
@@ -24,7 +26,7 @@ export declare class DrDropdownDirective<T> implements OnDestroy {
|
|
|
24
26
|
private close;
|
|
25
27
|
ngOnDestroy(): void;
|
|
26
28
|
static ɵfac: i0.ɵɵFactoryDeclaration<DrDropdownDirective<any>, never>;
|
|
27
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DrDropdownDirective<any>, "[drDropdown]", never, { "drDropdown": { "alias": "drDropdown"; "required": true; }; "drDropdownPosition": { "alias": "drDropdownPosition"; "required": false; }; "drDropdownClass": { "alias": "drDropdownClass"; "required": false; }; "drDropdownInHover": { "alias": "drDropdownInHover"; "required": false; }; "dataAnalytics": { "alias": "data-analytics"; "required": false; }; }, { "drDropdownAction": "drDropdownAction"; "dropdownClosed": "drDropdownClose"; "dropdownOpened": "drDropdownOpened"; }, never, never, false, never>;
|
|
29
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DrDropdownDirective<any>, "[drDropdown]", never, { "drDropdown": { "alias": "drDropdown"; "required": true; }; "drDropdownPosition": { "alias": "drDropdownPosition"; "required": false; }; "drDropdownClass": { "alias": "drDropdownClass"; "required": false; }; "drDropdownInHover": { "alias": "drDropdownInHover"; "required": false; }; "dataAnalytics": { "alias": "data-analytics"; "required": false; }; "drDropdownPositionOffsetX": { "alias": "drDropdownPositionOffsetX"; "required": false; }; "drDropdownPositionOffsetY": { "alias": "drDropdownPositionOffsetY"; "required": false; }; }, { "drDropdownAction": "drDropdownAction"; "dropdownClosed": "drDropdownClose"; "dropdownOpened": "drDropdownOpened"; }, never, never, false, never>;
|
|
28
30
|
}
|
|
29
31
|
export declare class DrDropdownChildDirective {
|
|
30
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<DrDropdownChildDirective, never>;
|
|
@@ -5,11 +5,13 @@ import { IDrPopoverComponentModel } from '../models/popover';
|
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class DrDropdownService {
|
|
7
7
|
private readonly popoverService;
|
|
8
|
-
open({ hostRef, options, position, asChild, providers, action$, }: Pick<IDrPopoverComponentModel, 'hostRef' | 'position'> & {
|
|
8
|
+
open({ hostRef, options, position, asChild, providers, action$, positionOffsetX, positionOffsetY, }: Pick<IDrPopoverComponentModel, 'hostRef' | 'position'> & {
|
|
9
9
|
options: IDropdown<IDropdownItem<unknown>>;
|
|
10
10
|
asChild?: boolean;
|
|
11
11
|
providers?: StaticProvider[];
|
|
12
12
|
action$?: EventEmitter<IDropdownAction<unknown>>;
|
|
13
|
+
positionOffsetX?: number;
|
|
14
|
+
positionOffsetY?: number;
|
|
13
15
|
}): import("../dr-popover/dr-popover-ref").DrPopoverRef<DrDropdownComponent>;
|
|
14
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<DrDropdownService, never>;
|
|
15
17
|
static ɵprov: i0.ɵɵInjectableDeclaration<DrDropdownService>;
|
package/lib/models/popover.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface IDrPopoverComponentModel<C = any> {
|
|
|
19
19
|
targetElement?: HTMLElement;
|
|
20
20
|
alignment?: DrPopoverAlignment;
|
|
21
21
|
freezeToContainerSelector?: string;
|
|
22
|
+
positionOffsetX?: number;
|
|
23
|
+
positionOffsetY?: number;
|
|
22
24
|
}
|
|
23
25
|
export interface DrPopoverConfig extends OverlayConfig {
|
|
24
26
|
closeOnBackdropClick?: boolean;
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export * from './lib/dr-tooltip/components/tooltip-info/tooltip-info.component';
|
|
|
29
29
|
export * from './lib/stepper/stepper.component';
|
|
30
30
|
export * from './lib/dr-chat/chat.component';
|
|
31
31
|
export * from './lib/dr-chat/dr-chat-form/chat-form.component';
|
|
32
|
-
export * from './lib/dr-chat/dr-chat-form-
|
|
32
|
+
export * from './lib/dr-chat/dr-chat-form-dropdown/dr-chat-form-dropdown.component';
|
|
33
33
|
export * from './lib/dr-chat/dr-chat-dropped-files/dr-chat-dropped-files.component';
|
|
34
34
|
export * from './lib/dr-chat/dr-chat-suggestions/chat-suggestions.component';
|
|
35
35
|
export * from './lib/dr-chat/dr-chat-message/chat-message.component';
|
|
Binary file
|
|
@@ -1,392 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
3
|
-
import { trigger, state, style, transition, animate, query, animateChild } from '@angular/animations';
|
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
|
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 "../../directives/click-outside/click-outside.directive";
|
|
10
|
-
import * as i5 from "../dr-dot-flashing/dr-dot-flashing.component";
|
|
11
|
-
import * as i6 from "../dr-chat-dropped-files/dr-chat-dropped-files.component";
|
|
12
|
-
const _c0 = ["textAreaElement"];
|
|
13
|
-
const _c1 = ["fileInput"];
|
|
14
|
-
function DrChatFormWithHistoryComponent_dr_chat_dropped_files_2_Template(rf, ctx) { if (rf & 1) {
|
|
15
|
-
const _r8 = i0.ɵɵgetCurrentView();
|
|
16
|
-
i0.ɵɵelementStart(0, "dr-chat-dropped-files", 15);
|
|
17
|
-
i0.ɵɵlistener("removeFileEvent", function DrChatFormWithHistoryComponent_dr_chat_dropped_files_2_Template_dr_chat_dropped_files_removeFileEvent_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.removeFile($event)); });
|
|
18
|
-
i0.ɵɵpipe(1, "async");
|
|
19
|
-
i0.ɵɵelementEnd();
|
|
20
|
-
} if (rf & 2) {
|
|
21
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
22
|
-
i0.ɵɵproperty("files", i0.ɵɵpipeBind1(1, 3, ctx_r0.droppedFiles$))("isRemovable", true)("maxLengthText", 15);
|
|
23
|
-
} }
|
|
24
|
-
function DrChatFormWithHistoryComponent_i_14_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
-
const _r10 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵelementStart(0, "i", 16);
|
|
27
|
-
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_i_14_Template_i_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.sendMessage($event)); });
|
|
28
|
-
i0.ɵɵelementEnd();
|
|
29
|
-
} if (rf & 2) {
|
|
30
|
-
const ctx_r3 = i0.ɵɵnextContext();
|
|
31
|
-
const _r1 = i0.ɵɵreference(6);
|
|
32
|
-
i0.ɵɵstyleMap(ctx_r3.getSendButtonPosition(_r1));
|
|
33
|
-
} }
|
|
34
|
-
function DrChatFormWithHistoryComponent_i_15_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
-
const _r12 = i0.ɵɵgetCurrentView();
|
|
36
|
-
i0.ɵɵelementStart(0, "i", 17);
|
|
37
|
-
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_i_15_Template_i_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.abortMessage()); });
|
|
38
|
-
i0.ɵɵelementEnd();
|
|
39
|
-
} if (rf & 2) {
|
|
40
|
-
const ctx_r4 = i0.ɵɵnextContext();
|
|
41
|
-
const _r1 = i0.ɵɵreference(6);
|
|
42
|
-
i0.ɵɵstyleMap(ctx_r4.getSendButtonPosition(_r1));
|
|
43
|
-
} }
|
|
44
|
-
function DrChatFormWithHistoryComponent_dr_dot_flashing_16_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
-
i0.ɵɵelement(0, "dr-dot-flashing", 18);
|
|
46
|
-
} }
|
|
47
|
-
function DrChatFormWithHistoryComponent_ng_container_17_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
-
const _r14 = i0.ɵɵgetCurrentView();
|
|
49
|
-
i0.ɵɵelementContainerStart(0);
|
|
50
|
-
i0.ɵɵelementStart(1, "div", 19);
|
|
51
|
-
i0.ɵɵlistener("clickOutside", function DrChatFormWithHistoryComponent_ng_container_17_Template_div_clickOutside_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.closeHistory()); });
|
|
52
|
-
i0.ɵɵprojection(2);
|
|
53
|
-
i0.ɵɵelementEnd();
|
|
54
|
-
i0.ɵɵelementContainerEnd();
|
|
55
|
-
} if (rf & 2) {
|
|
56
|
-
const ctx_r6 = i0.ɵɵnextContext();
|
|
57
|
-
i0.ɵɵadvance(1);
|
|
58
|
-
i0.ɵɵproperty("@dropdownAnimation", ctx_r6.isShowedHistory ? "visible" : "hidden")("exclude", ".dr-icon-history");
|
|
59
|
-
} }
|
|
60
|
-
const _c2 = function (a0) { return { "message-row_loading": a0 }; };
|
|
61
|
-
const _c3 = function (a0) { return { height: a0 }; };
|
|
62
|
-
const _c4 = function (a0, a1) { return { value: a0, params: a1 }; };
|
|
63
|
-
const _c5 = function (a0, a1, a2) { return { "message-row__input--focused": a0, "message-row__input--filled": a1, "showed-dropdown": a2 }; };
|
|
64
|
-
const _c6 = ["*"];
|
|
65
|
-
export class DrChatFormWithHistoryComponent {
|
|
66
|
-
constructor(cdr, domSanitizer) {
|
|
67
|
-
this.cdr = cdr;
|
|
68
|
-
this.domSanitizer = domSanitizer;
|
|
69
|
-
this._textareaInitialHeight = true;
|
|
70
|
-
this.inputFocus = false;
|
|
71
|
-
this.inputHover = false;
|
|
72
|
-
this.droppedFiles$ = new BehaviorSubject([]);
|
|
73
|
-
this.isShowedHistory = false;
|
|
74
|
-
this.isChatMode = false;
|
|
75
|
-
this.isLoading = false;
|
|
76
|
-
/**
|
|
77
|
-
* Predefined message text
|
|
78
|
-
*
|
|
79
|
-
* @type {string}
|
|
80
|
-
*/
|
|
81
|
-
this.message = '';
|
|
82
|
-
/**
|
|
83
|
-
* Message placeholder text
|
|
84
|
-
*
|
|
85
|
-
* @type {string}
|
|
86
|
-
*/
|
|
87
|
-
this.messagePlaceholder = 'Type a message';
|
|
88
|
-
/**
|
|
89
|
-
* Show send button
|
|
90
|
-
*
|
|
91
|
-
* @type {boolean}
|
|
92
|
-
*/
|
|
93
|
-
this.dropFiles = false;
|
|
94
|
-
/**
|
|
95
|
-
* File drop placeholder text
|
|
96
|
-
*
|
|
97
|
-
* @type {string}
|
|
98
|
-
*/
|
|
99
|
-
this.dropFilePlaceholder = 'Drop file to send';
|
|
100
|
-
/**
|
|
101
|
-
* Parameter to check is send message function available
|
|
102
|
-
*
|
|
103
|
-
* @type {boolean}
|
|
104
|
-
*/
|
|
105
|
-
this.waitForReply = false;
|
|
106
|
-
/**
|
|
107
|
-
* Parameter to check is send message function available
|
|
108
|
-
*
|
|
109
|
-
* @type {boolean}
|
|
110
|
-
*/
|
|
111
|
-
this.showDotFlashing = false;
|
|
112
|
-
/**
|
|
113
|
-
*
|
|
114
|
-
* @type {EventEmitter<{ message: string, files: IFile[] }>}
|
|
115
|
-
*/
|
|
116
|
-
this.send = new EventEmitter();
|
|
117
|
-
this.uploadFiles = new EventEmitter();
|
|
118
|
-
this.abort = new EventEmitter();
|
|
119
|
-
/**
|
|
120
|
-
* Emits when message input value has been changed
|
|
121
|
-
*
|
|
122
|
-
* @type {EventEmitter<string>}
|
|
123
|
-
*/
|
|
124
|
-
this.inputChange = new EventEmitter();
|
|
125
|
-
this.fileOver = false;
|
|
126
|
-
}
|
|
127
|
-
onDrop(event) {
|
|
128
|
-
if (this.dropFiles) {
|
|
129
|
-
event.preventDefault();
|
|
130
|
-
event.stopPropagation();
|
|
131
|
-
this.fileOver = false;
|
|
132
|
-
const files = event.dataTransfer?.files;
|
|
133
|
-
if (files) {
|
|
134
|
-
this.saveFiles(files);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
removeFile(file) {
|
|
139
|
-
const droppedFiles = this.droppedFiles$.value;
|
|
140
|
-
const index = droppedFiles.indexOf(file);
|
|
141
|
-
if (index >= 0) {
|
|
142
|
-
droppedFiles.splice(index, 1);
|
|
143
|
-
this.droppedFiles$.next(droppedFiles);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
onDragOver(event) {
|
|
147
|
-
event.preventDefault();
|
|
148
|
-
event.stopPropagation();
|
|
149
|
-
if (this.dropFiles) {
|
|
150
|
-
this.fileOver = true;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
onDragLeave(event) {
|
|
154
|
-
event.preventDefault();
|
|
155
|
-
event.stopPropagation();
|
|
156
|
-
if (this.dropFiles) {
|
|
157
|
-
this.fileOver = false;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
sendMessage($event) {
|
|
161
|
-
if (!$event || !$event.shiftKey) {
|
|
162
|
-
$event?.preventDefault();
|
|
163
|
-
$event?.stopPropagation();
|
|
164
|
-
if (this.waitForReply) {
|
|
165
|
-
return;
|
|
166
|
-
}
|
|
167
|
-
else if (this.droppedFiles$.value.length || String(this.message).trim().length) {
|
|
168
|
-
this._textareaInitialHeight = true;
|
|
169
|
-
this.send.emit({ message: this.message, files: this.droppedFiles$.value });
|
|
170
|
-
this.message = '';
|
|
171
|
-
this.droppedFiles$.next([]);
|
|
172
|
-
this.cdr.markForCheck();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
abortMessage() {
|
|
177
|
-
this.abort.emit();
|
|
178
|
-
}
|
|
179
|
-
onModelChange(value) {
|
|
180
|
-
this._textareaInitialHeight = false;
|
|
181
|
-
this.inputChange.emit(value);
|
|
182
|
-
}
|
|
183
|
-
getTextAreaHeight(textAreaElement) {
|
|
184
|
-
if (this._textareaInitialHeight) {
|
|
185
|
-
textAreaElement.style.height = '48px';
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
textAreaElement.style.height = 'auto';
|
|
189
|
-
textAreaElement.style.height = textAreaElement.scrollHeight + 'px';
|
|
190
|
-
}
|
|
191
|
-
return `${textAreaElement.style.height}`;
|
|
192
|
-
}
|
|
193
|
-
getSendButtonPosition(textAreaElement) {
|
|
194
|
-
return `top: calc(${this.getTextAreaHeight(textAreaElement)} - var(--send-button-offset));`;
|
|
195
|
-
}
|
|
196
|
-
showHistory() {
|
|
197
|
-
this.isShowedHistory = !this.isShowedHistory;
|
|
198
|
-
}
|
|
199
|
-
closeHistory() {
|
|
200
|
-
this.isShowedHistory = false;
|
|
201
|
-
this.cdr.markForCheck();
|
|
202
|
-
}
|
|
203
|
-
onFileSelected(event) {
|
|
204
|
-
const input = event.target;
|
|
205
|
-
this.fileOver = false;
|
|
206
|
-
if (input.files.length) {
|
|
207
|
-
this.saveFiles(Array.from(input.files));
|
|
208
|
-
}
|
|
209
|
-
this.fileInput.nativeElement.value = '';
|
|
210
|
-
}
|
|
211
|
-
async saveFiles(files) {
|
|
212
|
-
const uploadedFiles = [];
|
|
213
|
-
for (const file of files) {
|
|
214
|
-
let res = file;
|
|
215
|
-
res.data = (await this.base64Convert(res));
|
|
216
|
-
this.droppedFiles$.next([...this.droppedFiles$.value, res]);
|
|
217
|
-
uploadedFiles.push(res);
|
|
218
|
-
this.cdr.markForCheck();
|
|
219
|
-
this.cdr.detectChanges();
|
|
220
|
-
}
|
|
221
|
-
this.uploadFiles.emit(uploadedFiles.map((item) => ({ data: item.data, name: item.name })));
|
|
222
|
-
}
|
|
223
|
-
base64Convert(file) {
|
|
224
|
-
return new Promise((resolve, reject) => {
|
|
225
|
-
const reader = new FileReader();
|
|
226
|
-
reader.onload = () => resolve(reader.result);
|
|
227
|
-
reader.onerror = (error) => reject(error);
|
|
228
|
-
reader.readAsDataURL(file);
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
/** @nocollapse */ static { this.ɵfac = function DrChatFormWithHistoryComponent_Factory(t) { return new (t || DrChatFormWithHistoryComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.DomSanitizer)); }; }
|
|
232
|
-
/** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: DrChatFormWithHistoryComponent, selectors: [["dr-chat-form-with-history"]], viewQuery: function DrChatFormWithHistoryComponent_Query(rf, ctx) { if (rf & 1) {
|
|
233
|
-
i0.ɵɵviewQuery(_c0, 5);
|
|
234
|
-
i0.ɵɵviewQuery(_c1, 5);
|
|
235
|
-
} if (rf & 2) {
|
|
236
|
-
let _t;
|
|
237
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.textAreaElementRef = _t.first);
|
|
238
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
|
|
239
|
-
} }, hostVars: 2, hostBindings: function DrChatFormWithHistoryComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
240
|
-
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); });
|
|
241
|
-
} if (rf & 2) {
|
|
242
|
-
i0.ɵɵclassProp("file-over", ctx.fileOver);
|
|
243
|
-
} }, inputs: { isChatMode: "isChatMode", isLoading: "isLoading", message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply", showDotFlashing: "showDotFlashing" }, outputs: { send: "send", uploadFiles: "uploadFiles", abort: "abort", inputChange: "inputChange" }, ngContentSelectors: _c6, decls: 18, vars: 27, consts: [[1, "message-row", 3, "ngClass"], [1, "message-row__input", 3, "ngClass"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent", 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-stop abort-button", 3, "style", "click", 4, "ngIf"], ["class", "wait-reply-dot-flashing", 4, "ngIf"], [4, "ngIf"], [3, "files", "isRemovable", "maxLengthText", "removeFileEvent"], [1, "dr-icon-send-arrow-up", "send-button", 3, "click"], [1, "dr-icon-stop", "abort-button", 3, "click"], [1, "wait-reply-dot-flashing"], [1, "history-dropdown", 3, "exclude", "clickOutside"]], template: function DrChatFormWithHistoryComponent_Template(rf, ctx) { if (rf & 1) {
|
|
244
|
-
const _r15 = i0.ɵɵgetCurrentView();
|
|
245
|
-
i0.ɵɵprojectionDef();
|
|
246
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
|
|
247
|
-
i0.ɵɵtemplate(2, DrChatFormWithHistoryComponent_dr_chat_dropped_files_2_Template, 2, 5, "dr-chat-dropped-files", 2);
|
|
248
|
-
i0.ɵɵpipe(3, "async");
|
|
249
|
-
i0.ɵɵelementStart(4, "div", 3)(5, "textarea", 4, 5);
|
|
250
|
-
i0.ɵɵlistener("focus", function DrChatFormWithHistoryComponent_Template_textarea_focus_5_listener() { return ctx.inputFocus = true; })("blur", function DrChatFormWithHistoryComponent_Template_textarea_blur_5_listener() { return ctx.inputFocus = false; })("mouseenter", function DrChatFormWithHistoryComponent_Template_textarea_mouseenter_5_listener() { return ctx.inputHover = true; })("mouseleave", function DrChatFormWithHistoryComponent_Template_textarea_mouseleave_5_listener() { return ctx.inputHover = false; })("ngModelChange", function DrChatFormWithHistoryComponent_Template_textarea_ngModelChange_5_listener($event) { return ctx.message = $event; })("ngModelChange", function DrChatFormWithHistoryComponent_Template_textarea_ngModelChange_5_listener($event) { return ctx.onModelChange($event); })("keydown.enter", function DrChatFormWithHistoryComponent_Template_textarea_keydown_enter_5_listener($event) { return ctx.sendMessage($event); });
|
|
251
|
-
i0.ɵɵtext(7, " ");
|
|
252
|
-
i0.ɵɵelementEnd();
|
|
253
|
-
i0.ɵɵelementStart(8, "div", 6);
|
|
254
|
-
i0.ɵɵtext(9);
|
|
255
|
-
i0.ɵɵelementEnd();
|
|
256
|
-
i0.ɵɵelementStart(10, "input", 7, 8);
|
|
257
|
-
i0.ɵɵlistener("change", function DrChatFormWithHistoryComponent_Template_input_change_10_listener($event) { return ctx.onFileSelected($event); });
|
|
258
|
-
i0.ɵɵelementEnd();
|
|
259
|
-
i0.ɵɵelementStart(12, "i", 9);
|
|
260
|
-
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_Template_i_click_12_listener() { return ctx.showHistory(); });
|
|
261
|
-
i0.ɵɵelementEnd();
|
|
262
|
-
i0.ɵɵelementStart(13, "i", 10);
|
|
263
|
-
i0.ɵɵlistener("click", function DrChatFormWithHistoryComponent_Template_i_click_13_listener() { i0.ɵɵrestoreView(_r15); const _r2 = i0.ɵɵreference(11); return i0.ɵɵresetView(_r2.click()); });
|
|
264
|
-
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵtemplate(14, DrChatFormWithHistoryComponent_i_14_Template, 1, 2, "i", 11);
|
|
266
|
-
i0.ɵɵtemplate(15, DrChatFormWithHistoryComponent_i_15_Template, 1, 2, "i", 12);
|
|
267
|
-
i0.ɵɵtemplate(16, DrChatFormWithHistoryComponent_dr_dot_flashing_16_Template, 1, 0, "dr-dot-flashing", 13);
|
|
268
|
-
i0.ɵɵelementEnd();
|
|
269
|
-
i0.ɵɵtemplate(17, DrChatFormWithHistoryComponent_ng_container_17_Template, 3, 2, "ng-container", 14);
|
|
270
|
-
i0.ɵɵelementEnd()();
|
|
271
|
-
} if (rf & 2) {
|
|
272
|
-
const _r1 = i0.ɵɵreference(6);
|
|
273
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(16, _c2, ctx.isLoading));
|
|
274
|
-
i0.ɵɵadvance(1);
|
|
275
|
-
i0.ɵɵproperty("@containerHeightAnimation", i0.ɵɵpureFunction2(20, _c4, ctx.showHistory ? "expanded" : "collapsed", i0.ɵɵpureFunction1(18, _c3, ctx.getTextAreaHeight(_r1))))("ngClass", i0.ɵɵpureFunction3(23, _c5, ctx.inputFocus, !!(ctx.message == null ? null : ctx.message.length), ctx.isShowedHistory));
|
|
276
|
-
i0.ɵɵadvance(1);
|
|
277
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(3, 14, ctx.droppedFiles$).length);
|
|
278
|
-
i0.ɵɵadvance(3);
|
|
279
|
-
i0.ɵɵstyleMap(ctx.getTextAreaHeight(_r1));
|
|
280
|
-
i0.ɵɵpropertyInterpolate("placeholder", ctx.fileOver ? ctx.dropFilePlaceholder : ctx.messagePlaceholder);
|
|
281
|
-
i0.ɵɵproperty("ngModel", ctx.message)("rows", 1);
|
|
282
|
-
i0.ɵɵadvance(4);
|
|
283
|
-
i0.ɵɵtextInterpolate(_r1.value);
|
|
284
|
-
i0.ɵɵadvance(5);
|
|
285
|
-
i0.ɵɵproperty("ngIf", !ctx.waitForReply);
|
|
286
|
-
i0.ɵɵadvance(1);
|
|
287
|
-
i0.ɵɵproperty("ngIf", ctx.waitForReply && !ctx.showDotFlashing);
|
|
288
|
-
i0.ɵɵadvance(1);
|
|
289
|
-
i0.ɵɵproperty("ngIf", ctx.waitForReply && ctx.showDotFlashing);
|
|
290
|
-
i0.ɵɵadvance(1);
|
|
291
|
-
i0.ɵɵproperty("ngIf", !ctx.isChatMode);
|
|
292
|
-
} }, dependencies: [i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.NgClass, i3.NgIf, i4.ClickOutsideDirective, i5.DrDotFlashingComponent, i6.DrChatDroppedFilesComponent, i3.AsyncPipe], styles: ["[_nghost-%COMP%] {--send-button-offset: 42px;display:flex;flex-direction:column;align-items:center;padding:0 16px}[_nghost-%COMP%] .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}[_nghost-%COMP%] .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}[_nghost-%COMP%] .message-row__input .abort-button, [_nghost-%COMP%] .message-row__input .send-button{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;color:#fff;transition:.15s ease-in-out;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box}[_nghost-%COMP%] .message-row__input .dr-icon-history, [_nghost-%COMP%] .message-row__input .dr-icon-attachment{display:flex;align-items:center;position:absolute;cursor:pointer;width:32px;height:48px;left:16px;top:-1px}[_nghost-%COMP%] .message-row__input .dr-icon-attachment{left:52px}[_nghost-%COMP%] .message-row__input .send-button{opacity:.5;pointer-events:none}[_nghost-%COMP%] .message-row__input--focused{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{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;background:#fff}[_nghost-%COMP%] .message-row__input--filled .send-button{opacity:1;pointer-events:all}[_nghost-%COMP%] .message-row__input .message-input-tmp{display:none}[_nghost-%COMP%] .message-row__input.showed-dropdown .send-button{opacity:.5}[_nghost-%COMP%] .message-row__input .wait-reply-dot-flashing{display:flex;position:absolute;align-items:center;width:32px;height:48px;right:25px}[_nghost-%COMP%] .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}[_nghost-%COMP%] .message-row__input textarea, [_nghost-%COMP%] .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}[_nghost-%COMP%] .message-row__input textarea:focus, [_nghost-%COMP%] .message-row__input .message-input-tmp:focus{border:none}[_nghost-%COMP%] .message-row__input textarea::placeholder, [_nghost-%COMP%] .message-row__input .message-input-tmp::placeholder{color:#9ea1aa}[_nghost-%COMP%] .message-row__input-textarea-wrap{display:flex;width:100%;position:relative}[_nghost-%COMP%] .history-dropdown{width:100%;max-height:220px;overflow-y:auto;padding:12px 16px 0}[_nghost-%COMP%] .showed-dropdown textarea{visibility:hidden;position:absolute}[_nghost-%COMP%] .showed-dropdown .message-input-tmp{display:block;margin-left:inherit;white-space:nowrap;font-family:monospace;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .showed-dropdown .send-button{top:2.5px!important}[_nghost-%COMP%] dr-chat-dropped-files{margin-right:auto}[_nghost-%COMP%] .message-row_loading .send-button, [_nghost-%COMP%] .message-row_loading .dropped-files__item{opacity:.5;pointer-events:none}"], data: { animation: [
|
|
293
|
-
trigger('containerHeightAnimation', [
|
|
294
|
-
state('collapsed', style({ height: '{{height}}' }), { params: { height: '48px' } }),
|
|
295
|
-
state('expanded', style({
|
|
296
|
-
height: '*',
|
|
297
|
-
})),
|
|
298
|
-
transition('collapsed => expanded', [animate('300ms ease-in-out')]),
|
|
299
|
-
transition('expanded => collapsed', [query('@dropdownAnimation', animateChild()), animate('300ms ease-in-out')]),
|
|
300
|
-
]),
|
|
301
|
-
trigger('dropdownAnimation', [
|
|
302
|
-
state('hidden', style({
|
|
303
|
-
opacity: 0,
|
|
304
|
-
transform: 'translateY(-30px)',
|
|
305
|
-
display: 'none',
|
|
306
|
-
})),
|
|
307
|
-
state('visible', style({
|
|
308
|
-
opacity: 1,
|
|
309
|
-
transform: 'translateY(0)',
|
|
310
|
-
display: 'block',
|
|
311
|
-
})),
|
|
312
|
-
transition('hidden => visible', [style({ display: 'block' }), animate('300ms ease-in-out')]),
|
|
313
|
-
transition('visible => hidden', [
|
|
314
|
-
animate('300ms ease-in-out', style({ opacity: 0, transform: 'translateY(-30px)' })),
|
|
315
|
-
style({ display: 'none' }),
|
|
316
|
-
]),
|
|
317
|
-
]),
|
|
318
|
-
] }, changeDetection: 0 }); }
|
|
319
|
-
}
|
|
320
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrChatFormWithHistoryComponent, [{
|
|
321
|
-
type: Component,
|
|
322
|
-
args: [{ selector: 'dr-chat-form-with-history', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
323
|
-
trigger('containerHeightAnimation', [
|
|
324
|
-
state('collapsed', style({ height: '{{height}}' }), { params: { height: '48px' } }),
|
|
325
|
-
state('expanded', style({
|
|
326
|
-
height: '*',
|
|
327
|
-
})),
|
|
328
|
-
transition('collapsed => expanded', [animate('300ms ease-in-out')]),
|
|
329
|
-
transition('expanded => collapsed', [query('@dropdownAnimation', animateChild()), animate('300ms ease-in-out')]),
|
|
330
|
-
]),
|
|
331
|
-
trigger('dropdownAnimation', [
|
|
332
|
-
state('hidden', style({
|
|
333
|
-
opacity: 0,
|
|
334
|
-
transform: 'translateY(-30px)',
|
|
335
|
-
display: 'none',
|
|
336
|
-
})),
|
|
337
|
-
state('visible', style({
|
|
338
|
-
opacity: 1,
|
|
339
|
-
transform: 'translateY(0)',
|
|
340
|
-
display: 'block',
|
|
341
|
-
})),
|
|
342
|
-
transition('hidden => visible', [style({ display: 'block' }), animate('300ms ease-in-out')]),
|
|
343
|
-
transition('visible => hidden', [
|
|
344
|
-
animate('300ms ease-in-out', style({ opacity: 0, transform: 'translateY(-30px)' })),
|
|
345
|
-
style({ display: 'none' }),
|
|
346
|
-
]),
|
|
347
|
-
]),
|
|
348
|
-
], template: "<div class=\"message-row\" [ngClass]=\"{ 'message-row_loading': isLoading }\">\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 <dr-chat-dropped-files\n *ngIf=\"(droppedFiles$ | async).length\"\n [files]=\"droppedFiles$ | async\"\n [isRemovable]=\"true\"\n [maxLengthText]=\"15\"\n (removeFileEvent)=\"removeFile($event)\"></dr-chat-dropped-files>\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\n <i\n *ngIf=\"waitForReply && !showDotFlashing\"\n [style]=\"getSendButtonPosition(textAreaElement)\"\n class=\"dr-icon-stop abort-button\"\n (click)=\"abortMessage()\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply && showDotFlashing\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\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::ng-deep{--send-button-offset: 42px;display:flex;flex-direction:column;align-items:center;padding:0 16px}:host::ng-deep .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host::ng-deep .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::ng-deep .message-row__input .abort-button,:host::ng-deep .message-row__input .send-button{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;color:#fff;transition:.15s ease-in-out;background:linear-gradient(266deg,#6969ff 25.2%,#4eb7df 90.24%) border-box}:host::ng-deep .message-row__input .dr-icon-history,:host::ng-deep .message-row__input .dr-icon-attachment{display:flex;align-items:center;position:absolute;cursor:pointer;width:32px;height:48px;left:16px;top:-1px}:host::ng-deep .message-row__input .dr-icon-attachment{left:52px}:host::ng-deep .message-row__input .send-button{opacity:.5;pointer-events:none}:host::ng-deep .message-row__input--focused{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;height:auto!important;background:#fff}:host::ng-deep .message-row__input--filled{box-shadow:8px 8px 16px #6969ff40,-4px -4px 8px #40b6e340,8px 8px 60px #00000040;background:#fff}:host::ng-deep .message-row__input--filled .send-button{opacity:1;pointer-events:all}:host::ng-deep .message-row__input .message-input-tmp{display:none}:host::ng-deep .message-row__input.showed-dropdown .send-button{opacity:.5}:host::ng-deep .message-row__input .wait-reply-dot-flashing{display:flex;position:absolute;align-items:center;width:32px;height:48px;right:25px}:host::ng-deep .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::ng-deep .message-row__input textarea,:host::ng-deep .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::ng-deep .message-row__input textarea:focus,:host::ng-deep .message-row__input .message-input-tmp:focus{border:none}:host::ng-deep .message-row__input textarea::placeholder,:host::ng-deep .message-row__input .message-input-tmp::placeholder{color:#9ea1aa}:host::ng-deep .message-row__input-textarea-wrap{display:flex;width:100%;position:relative}:host::ng-deep .history-dropdown{width:100%;max-height:220px;overflow-y:auto;padding:12px 16px 0}:host::ng-deep .showed-dropdown textarea{visibility:hidden;position:absolute}:host::ng-deep .showed-dropdown .message-input-tmp{display:block;margin-left:inherit;white-space:nowrap;font-family:monospace;overflow:hidden;text-overflow:ellipsis}:host::ng-deep .showed-dropdown .send-button{top:2.5px!important}:host::ng-deep dr-chat-dropped-files{margin-right:auto}:host::ng-deep .message-row_loading .send-button,:host::ng-deep .message-row_loading .dropped-files__item{opacity:.5;pointer-events:none}\n"] }]
|
|
349
|
-
}], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }]; }, { textAreaElementRef: [{
|
|
350
|
-
type: ViewChild,
|
|
351
|
-
args: ['textAreaElement']
|
|
352
|
-
}], fileInput: [{
|
|
353
|
-
type: ViewChild,
|
|
354
|
-
args: ['fileInput']
|
|
355
|
-
}], isChatMode: [{
|
|
356
|
-
type: Input
|
|
357
|
-
}], isLoading: [{
|
|
358
|
-
type: Input
|
|
359
|
-
}], message: [{
|
|
360
|
-
type: Input
|
|
361
|
-
}], messagePlaceholder: [{
|
|
362
|
-
type: Input
|
|
363
|
-
}], dropFiles: [{
|
|
364
|
-
type: Input
|
|
365
|
-
}], dropFilePlaceholder: [{
|
|
366
|
-
type: Input
|
|
367
|
-
}], waitForReply: [{
|
|
368
|
-
type: Input
|
|
369
|
-
}], showDotFlashing: [{
|
|
370
|
-
type: Input
|
|
371
|
-
}], send: [{
|
|
372
|
-
type: Output
|
|
373
|
-
}], uploadFiles: [{
|
|
374
|
-
type: Output
|
|
375
|
-
}], abort: [{
|
|
376
|
-
type: Output
|
|
377
|
-
}], inputChange: [{
|
|
378
|
-
type: Output
|
|
379
|
-
}], fileOver: [{
|
|
380
|
-
type: HostBinding,
|
|
381
|
-
args: ['class.file-over']
|
|
382
|
-
}], onDrop: [{
|
|
383
|
-
type: HostListener,
|
|
384
|
-
args: ['drop', ['$event']]
|
|
385
|
-
}], onDragOver: [{
|
|
386
|
-
type: HostListener,
|
|
387
|
-
args: ['dragover', ['$event']]
|
|
388
|
-
}], onDragLeave: [{
|
|
389
|
-
type: HostListener,
|
|
390
|
-
args: ['dragleave', ['$event']]
|
|
391
|
-
}] }); })();
|
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtZm9ybS13aXRoLWhpc3RvcnkvY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtZm9ybS13aXRoLWhpc3RvcnkvY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7OztJQ0gvQixpREFLMkM7SUFBdkMsc09BQW1CLGVBQUEseUJBQWtCLENBQUEsSUFBQzs7SUFBQyxpQkFBd0I7OztJQUgvRCxrRUFBK0IscUJBQUEscUJBQUE7Ozs7SUEyQi9CLDZCQUk4QztJQUQxQyw0S0FBUyxlQUFBLDBCQUFtQixDQUFBLElBQUM7SUFDYSxpQkFBSTs7OztJQUY5QyxnREFBZ0Q7Ozs7SUFJcEQsNkJBSTZCO0lBQXpCLHVLQUFTLGVBQUEsc0JBQWMsQ0FB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RUFBRSxNQUFNLEVBQUUsQ0FBQzt5QkFDN0IsQ0FBQztxQkFDTCxDQUFDO2lCQUNMOytGQUc2QixrQkFBa0I7a0JBQS9DLFNBQVM7bUJBQUMsaUJBQWlCO1lBQ0osU0FBUztrQkFBaEMsU0FBUzttQkFBQyxXQUFXO1lBUWIsVUFBVTtrQkFBbEIsS0FBSztZQUVHLFNBQVM7a0JBQWpCLEtBQUs7WUFPRyxPQUFPO2tCQUFmLEtBQUs7WUFPRyxrQkFBa0I7a0JBQTFCLEtBQUs7WUFPRyxTQUFTO2tCQUFqQixLQUFLO1lBT0csbUJBQW1CO2tCQUEzQixLQUFLO1lBT0csWUFBWTtrQkFBcEIsS0FBSztZQU9HLGVBQWU7a0JBQXZCLEtBQUs7WUFNSSxJQUFJO2tCQUFiLE1BQU07WUFDRyxXQUFXO2tCQUFwQixNQUFNO1lBQ0csS0FBSztrQkFBZCxNQUFNO1lBUUcsV0FBVztrQkFBcEIsTUFBTTtZQUV5QixRQUFRO2tCQUF2QyxXQUFXO21CQUFDLGlCQUFpQjtZQVE5QixNQUFNO2tCQURMLFlBQVk7bUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBd0JoQyxVQUFVO2tCQURULFlBQVk7bUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO1lBVXBDLFdBQVc7a0JBRFYsWUFBWTttQkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElGSWxlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NoYXQnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlLCBxdWVyeSwgYW5pbWF0ZUNoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1jaGF0LWZvcm0td2l0aC1oaXN0b3J5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hhdC1mb3JtLXdpdGgtaGlzdG9yeS4uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtZm9ybS13aXRoLWhpc3RvcnkuLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdjb250YWluZXJIZWlnaHRBbmltYXRpb24nLCBbXG4gICAgICAgICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICd7e2hlaWdodH19JyB9KSwgeyBwYXJhbXM6IHsgaGVpZ2h0OiAnNDhweCcgfSB9KSxcbiAgICAgICAgICAgIHN0YXRlKFxuICAgICAgICAgICAgICAgICdleHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcqJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdjb2xsYXBzZWQgPT4gZXhwYW5kZWQnLCBbYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbi1vdXQnKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPT4gY29sbGFwc2VkJywgW3F1ZXJ5KCdAZHJvcGRvd25BbmltYXRpb24nLCBhbmltYXRlQ2hpbGQoKSksIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4tb3V0JyldKSxcbiAgICAgICAgXSksXG4gICAgICAgIHRyaWdnZXIoJ2Ryb3Bkb3duQW5pbWF0aW9uJywgW1xuICAgICAgICAgICAgc3RhdGUoXG4gICAgICAgICAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0zMHB4KScsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGF0ZShcbiAgICAgICAgICAgICAgICAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdoaWRkZW4gPT4gdmlzaWJsZScsIFtzdHlsZSh7IGRpc3BsYXk6ICdibG9jaycgfSksIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4tb3V0JyldKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gaGlkZGVuJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UtaW4tb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0zMHB4KScgfSkpLFxuICAgICAgICAgICAgICAgIHN0eWxlKHsgZGlzcGxheTogJ25vbmUnIH0pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIERyQ2hhdEZvcm1XaXRoSGlzdG9yeUNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgndGV4dEFyZWFFbGVtZW50JykgdGV4dEFyZWFFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIGZpbGVJbnB1dDogRWxlbWVudFJlZjtcbiAgICBfdGV4dGFyZWFJbml0aWFsSGVpZ2h0ID0gdHJ1ZTtcbiAgICBpbnB1dEZvY3VzID0gZmFsc2U7XG4gICAgaW5wdXRIb3ZlciA9IGZhbHNlO1xuXG4gICAgZHJvcHBlZEZpbGVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUZJbGVbXT4oW10pO1xuICAgIGlzU2hvd2VkSGlzdG9yeSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaXNDaGF0TW9kZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQcmVkZWZpbmVkIG1lc3NhZ2UgdGV4dFxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBASW5wdXQoKSBtZXNzYWdlID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlIHBsYWNlaG9sZGVyIHRleHRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgQElucHV0KCkgbWVzc2FnZVBsYWNlaG9sZGVyID0gJ1R5cGUgYSBtZXNzYWdlJztcblxuICAgIC8qKlxuICAgICAqIFNob3cgc2VuZCBidXR0b25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRyb3BGaWxlcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmlsZSBkcm9wIHBsYWNlaG9sZGVyIHRleHRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgQElucHV0KCkgZHJvcEZpbGVQbGFjZWhvbGRlciA9ICdEcm9wIGZpbGUgdG8gc2VuZCc7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgdG8gY2hlY2sgaXMgc2VuZCBtZXNzYWdlIGZ1bmN0aW9uIGF2YWlsYWJsZVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgd2FpdEZvclJlcGx5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgdG8gY2hlY2sgaXMgc2VuZCBtZXNzYWdlIGZ1bmN0aW9uIGF2YWlsYWJsZVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgc2hvd0RvdEZsYXNoaW5nID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmcsIGZpbGVzOiBJRmlsZVtdIH0+fVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzZW5kID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZzsgZmlsZXM6IElGSWxlW10gfT4oKTtcbiAgICBAT3V0cHV0KCkgdXBsb2FkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPElGSWxlW10+KCk7XG4gICAgQE91dHB1dCgpIGFib3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIG1lc3NhZ2UgaW5wdXQgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZFxuICAgICAqXG4gICAgICogQHR5cGUge0V2ZW50RW1pdHRlcjxzdHJpbmc+fVxuICAgICAqL1xuXG4gICAgQE91dHB1dCgpIGlucHV0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpbGUtb3ZlcicpIGZpbGVPdmVyID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICApIHt9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcm9wJywgWyckZXZlbnQnXSlcbiAgICBvbkRyb3AoZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5kcm9wRmlsZXMpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgICAgdGhpcy5maWxlT3ZlciA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgICAgICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRmlsZXMoZmlsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICAgIGNvbnN0IGRyb3BwZWRGaWxlcyA9IHRoaXMuZHJvcHBlZEZpbGVzJC52YWx1ZTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkcm9wcGVkRmlsZXMuaW5kZXhPZihmaWxlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGRyb3BwZWRGaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5kcm9wcGVkRmlsZXMkLm5leHQoZHJvcHBlZEZpbGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcbiAgICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmRyb3BGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5maWxlT3ZlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICAgIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmRyb3BGaWxlcykge1xuICAgICAgICAgICAgdGhpcy5maWxlT3ZlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VuZE1lc3NhZ2UoJGV2ZW50KSB7XG4gICAgICAgIGlmICghJGV2ZW50IHx8ICEkZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICRldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICRldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBpZiAodGhpcy53YWl0Rm9yUmVwbHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJvcHBlZEZpbGVzJC52YWx1ZS5sZW5ndGggfHwgU3RyaW5nKHRoaXMubWVzc2FnZSkudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RleHRhcmVhSW5pdGlhbEhlaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kLmVtaXQoeyBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsIGZpbGVzOiB0aGlzLmRyb3BwZWRGaWxlcyQudmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wcGVkRmlsZXMkLm5leHQoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJvcnRNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLmFib3J0LmVtaXQoKTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGV4dGFyZWFJbml0aWFsSGVpZ2h0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0VGV4dEFyZWFIZWlnaHQodGV4dEFyZWFFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl90ZXh0YXJlYUluaXRpYWxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnNDhweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRleHRBcmVhRWxlbWVudC5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3RleHRBcmVhRWxlbWVudC5zdHlsZS5oZWlnaHR9YDtcbiAgICB9XG5cbiAgICBnZXRTZW5kQnV0dG9uUG9zaXRpb24odGV4dEFyZWFFbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBgdG9wOiBjYWxjKCR7dGhpcy5nZXRUZXh0QXJlYUhlaWdodCh0ZXh0QXJlYUVsZW1lbnQpfSAtIHZhcigtLXNlbmQtYnV0dG9uLW9mZnNldCkpO2A7XG4gICAgfVxuXG4gICAgc2hvd0hpc3RvcnkoKSB7XG4gICAgICAgIHRoaXMuaXNTaG93ZWRIaXN0b3J5ID0gIXRoaXMuaXNTaG93ZWRIaXN0b3J5O1xuICAgIH1cblxuICAgIGNsb3NlSGlzdG9yeSgpIHtcbiAgICAgICAgdGhpcy5pc1Nob3dlZEhpc3RvcnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZmlsZU92ZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlucHV0LmZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlRmlsZXMoQXJyYXkuZnJvbShpbnB1dC5maWxlcykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNhdmVGaWxlcyhmaWxlczogQXJyYXk8RmlsZT4pIHtcbiAgICAgICAgY29uc3QgdXBsb2FkZWRGaWxlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGxldCByZXMgPSBmaWxlIGFzIElGSWxlO1xuICAgICAgICAgICAgcmVzLmRhdGEgPSAoYXdhaXQgdGhpcy5iYXNlNjRDb252ZXJ0KHJlcykpIGFzIHN0cmluZztcbiAgICAgICAgICAgIHRoaXMuZHJvcHBlZEZpbGVzJC5uZXh0KFsuLi50aGlzLmRyb3BwZWRGaWxlcyQudmFsdWUsIHJlc10pO1xuICAgICAgICAgICAgdXBsb2FkZWRGaWxlcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwbG9hZEZpbGVzLmVtaXQodXBsb2FkZWRGaWxlcy5tYXAoKGl0ZW0pID0+ICh7IGRhdGE6IGl0ZW0uZGF0YSwgbmFtZTogaXRlbS5uYW1lIH0pKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiYXNlNjRDb252ZXJ0KGZpbGU6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZXNzYWdlLXJvd1wiIFtuZ0NsYXNzXT1cInsgJ21lc3NhZ2Utcm93X2xvYWRpbmcnOiBpc0xvYWRpbmcgfVwiPlxuICAgIDxkaXZcbiAgICAgICAgW0Bjb250YWluZXJIZWlnaHRBbmltYXRpb25dPVwie1xuICAgICAgICAgICAgdmFsdWU6IHNob3dIaXN0b3J5ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnLFxuICAgICAgICAgICAgcGFyYW1zOiB7IGhlaWdodDogZ2V0VGV4dEFyZWFIZWlnaHQodGV4dEFyZWFFbGVtZW50KSB9LFxuICAgICAgICB9XCJcbiAgICAgICAgY2xhc3M9XCJtZXNzYWdlLXJvd19faW5wdXRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnbWVzc2FnZS1yb3dfX2lucHV0LS1mb2N1c2VkJzogaW5wdXRGb2N1cyxcbiAgICAgICAgICAgICdtZXNzYWdlLXJvd19faW5wdXQtLWZpbGxlZCc6ICEhbWVzc2FnZT8ubGVuZ3RoLFxuICAgICAgICAgICAgJ3Nob3dlZC1kcm9wZG93bic6IGlzU2hvd2VkSGlzdG9yeSxcbiAgICAgICAgfVwiPlxuICAgICAgICA8ZHItY2hhdC1kcm9wcGVkLWZpbGVzXG4gICAgICAgICAgICAqbmdJZj1cIihkcm9wcGVkRmlsZXMkIHwgYXN5bmMpLmxlbmd0aFwiXG4gICAgICAgICAgICBbZmlsZXNdPVwiZHJvcHBlZEZpbGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtpc1JlbW92YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFttYXhMZW5ndGhUZXh0XT1cIjE1XCJcbiAgICAgICAgICAgIChyZW1vdmVGaWxlRXZlbnQpPVwicmVtb3ZlRmlsZSgkZXZlbnQpXCI+PC9kci1jaGF0LWRyb3BwZWQtZmlsZXM+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2Utcm93X19pbnB1dC10ZXh0YXJlYS13cmFwXCI+XG4gICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAjdGV4dEFyZWFFbGVtZW50XG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cImlucHV0Rm9jdXMgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJpbnB1dEZvY3VzID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImlucHV0SG92ZXIgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpbnB1dEhvdmVyID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW3Jvd3NdPVwiMVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldFRleHRBcmVhSGVpZ2h0KHRleHRBcmVhRWxlbWVudClcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgZmlsZU92ZXIgPyBkcm9wRmlsZVBsYWNlaG9sZGVyIDogbWVzc2FnZVBsYWNlaG9sZGVyIH19XCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZW5kTWVzc2FnZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3RleHRhcmVhPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1pbnB1dC10bXBcIj57eyB0ZXh0QXJlYUVsZW1lbnQudmFsdWUgfX08L2Rpdj5cblxuICAgICAgICAgICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBoaWRkZW4gbXVsdGlwbGUgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDxpIChjbGljayk9XCJzaG93SGlzdG9yeSgpXCIgY2xhc3M9XCJkci1pY29uLWhpc3RvcnlcIj48L2k+XG4gICAgICAgICAgICA8aSAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIiBjbGFzcz1cImRyLWljb24tYXR0YWNobWVudFwiPjwvaT5cblxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiF3YWl0Rm9yUmVwbHlcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJnZXRTZW5kQnV0dG9uUG9zaXRpb24odGV4dEFyZWFFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRNZXNzYWdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHItaWNvbi1zZW5kLWFycm93LXVwIHNlbmQtYnV0dG9uXCI+PC9pPlxuXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICpuZ0lmPVwid2FpdEZvclJlcGx5ICYmICFzaG93RG90Rmxhc2hpbmdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJnZXRTZW5kQnV0dG9uUG9zaXRpb24odGV4dEFyZWFFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkci1pY29uLXN0b3AgYWJvcnQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWJvcnRNZXNzYWdlKClcIj48L2k+XG4gICAgICAgICAgICA8ZHItZG90LWZsYXNoaW5nICpuZ0lmPVwid2FpdEZvclJlcGx5ICYmIHNob3dEb3RGbGFzaGluZ1wiIGNsYXNzPVwid2FpdC1yZXBseS1kb3QtZmxhc2hpbmdcIj48L2RyLWRvdC1mbGFzaGluZz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0NoYXRNb2RlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW0Bkcm9wZG93bkFuaW1hdGlvbl09XCJpc1Nob3dlZEhpc3RvcnkgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoaXN0b3J5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBbZXhjbHVkZV09XCInLmRyLWljb24taGlzdG9yeSdcIlxuICAgICAgICAgICAgICAgIChjbGlja091dHNpZGUpPVwiY2xvc2VIaXN0b3J5KClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|