@datarailsshared/datarailsshared 1.5.311 → 1.5.312
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/assets/styles/vars.scss +2 -1
- package/datarailsshared-datarailsshared-1.5.312.tgz +0 -0
- package/esm2022/lib/dr-chat/chat.component.mjs +2 -2
- package/esm2022/lib/dr-chat/dr-chat-form/chat-form.component.mjs +2 -2
- package/esm2022/lib/dr-chat/dr-chat-message/chat-message.component.mjs +6 -3
- package/esm2022/lib/dr-chat/dr-chat-suggestions/chat-suggestions.component.mjs +3 -3
- package/fesm2022/datarailsshared-datarailsshared.mjs +11 -8
- package/fesm2022/datarailsshared-datarailsshared.mjs.map +1 -1
- package/lib/dr-chat/dr-chat-message/chat-message.component.d.ts +1 -0
- package/package.json +1 -1
- package/datarailsshared-datarailsshared-1.5.311.tgz +0 -0
package/assets/styles/vars.scss
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
$dr-chat-max-width: 956px;
|
|
2
|
-
$dr-chat-horizontal-padding:
|
|
2
|
+
$dr-chat-horizontal-padding: 16px;
|
|
3
3
|
$dr-chat-main-color: #25258C;
|
|
4
4
|
$dr-chat-avatar-width: 28px;
|
|
5
5
|
$dr-chat-avatar-left-indent: 0;
|
|
6
6
|
$dr-chat-avatar-right-indent: 16px;
|
|
7
7
|
$dr-chat-header-text-indent: 20px;
|
|
8
|
+
$dr-chat-box-shadow: 0px 2px 36px 0px rgba(0, 0, 0, 0.15);
|
|
8
9
|
|
|
9
10
|
// DR spacing variables (margin, paddings, etc.)
|
|
10
11
|
$dr-spacing-xxx-small: 2px;
|
|
Binary file
|
|
@@ -83,11 +83,11 @@ export class DrChatComponent {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
86
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatComponent, selector: "dr-chat", inputs: { fullScreen: "fullScreen", noMessagesPlaceholder: "noMessagesPlaceholder", contentUpdateSubject: "contentUpdateSubject", scrollBottom: "scrollBottom", suggestions: "suggestions", reopen: "reopen", waitForReply: "waitForReply" }, outputs: { suggestionSelect: "suggestionSelect" }, providers: [DrChatCustomMessageService], queries: [{ propertyName: "chatForm", first: true, predicate: DrChatFormComponent, descendants: true }, { propertyName: "chatHeader", first: true, predicate: ["drChatHeader"], descendants: true }, { propertyName: "messages", predicate: DrChatMessageComponent }], viewQueries: [{ propertyName: "messagesContainer", first: true, predicate: ["messagesContainer"], descendants: true }, { propertyName: "_chatSuggestions", first: true, predicate: DrChatSuggestionsComponent, descendants: true }], ngImport: i0, template: "<div class=\"chat\" [class.chat--in-full-screen]=\"fullScreen\">\n <div class=\"chat__sticky-top\">\n <ng-container *ngIf=\"chatHeader\" [ngTemplateOutlet]=\"chatHeader\"></ng-container>\n\n <div class=\"chat__alert\">\n <ng-content select=\"dr-chat-alert\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"!messages?.length\" class=\"chat__empty-state\">\n <span class=\"chat__empty-state__text\">{{ noMessagesPlaceholder }}</span>\n </div>\n\n <div *ngIf=\"messages?.length\" class=\"chat__messages\">\n <div #messagesContainer class=\"chat__messages__container\"\n [class.chat__messages__container--scroll]=\"messagesContainerWithScroll\">\n <ng-content select=\"dr-chat-message\"></ng-content>\n </div>\n </div>\n\n <dr-chat-suggestions *ngIf=\"suggestions?.length\"\n [values]=\"suggestions\"\n [fullScreen]=\"fullScreen\"\n [waitForReply]=\"waitForReply\"\n class=\"chat__suggestions\"\n [class.chat__suggestions--full-height]=\"fullScreen && !messages?.length\"\n [buttonMode]=\"!!messages?.length\"\n (suggestionSelect)=\"suggestionSelect.emit($event)\">\n </dr-chat-suggestions>\n\n <div class=\"form\">\n <ng-content select=\"dr-chat-form\"></ng-content>\n </div>\n</div>\n", styles: [":host{height:100%;width:100%;display:flex;flex-direction:column}.chat{position:relative;display:flex;flex-grow:1;flex-direction:column;height:100%;background-color:#fff;color:#4e566c;font-family:Poppins,sans-serif;font-size:14px;font-weight:400;line-height:22px}.chat__sticky-top{display:flex;flex-direction:column;box-shadow:0 1px 3px #0003;z-index:1}.chat__empty-state{display:flex;justify-content:center}.chat__empty-state__text{padding:44px 0;font-family:Poppins,sans-serif;font-size:18px;font-weight:400;line-height:28px;text-align:center;max-width:440px;color:#4646ce}.chat__messages{display:flex;flex-grow:1;overflow-x:hidden;overflow-y:auto;height:100%;width:100%}.chat__messages__container{overflow-y:auto;overflow-x:hidden;display:flex;flex-shrink:0;flex-direction:column;width:100%;padding-bottom:1px}.chat__messages__container--scroll::ng-deep dr-chat-message{padding-right:
|
|
86
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatComponent, selector: "dr-chat", inputs: { fullScreen: "fullScreen", noMessagesPlaceholder: "noMessagesPlaceholder", contentUpdateSubject: "contentUpdateSubject", scrollBottom: "scrollBottom", suggestions: "suggestions", reopen: "reopen", waitForReply: "waitForReply" }, outputs: { suggestionSelect: "suggestionSelect" }, providers: [DrChatCustomMessageService], queries: [{ propertyName: "chatForm", first: true, predicate: DrChatFormComponent, descendants: true }, { propertyName: "chatHeader", first: true, predicate: ["drChatHeader"], descendants: true }, { propertyName: "messages", predicate: DrChatMessageComponent }], viewQueries: [{ propertyName: "messagesContainer", first: true, predicate: ["messagesContainer"], descendants: true }, { propertyName: "_chatSuggestions", first: true, predicate: DrChatSuggestionsComponent, descendants: true }], ngImport: i0, template: "<div class=\"chat\" [class.chat--in-full-screen]=\"fullScreen\">\n <div class=\"chat__sticky-top\">\n <ng-container *ngIf=\"chatHeader\" [ngTemplateOutlet]=\"chatHeader\"></ng-container>\n\n <div class=\"chat__alert\">\n <ng-content select=\"dr-chat-alert\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"!messages?.length\" class=\"chat__empty-state\">\n <span class=\"chat__empty-state__text\">{{ noMessagesPlaceholder }}</span>\n </div>\n\n <div *ngIf=\"messages?.length\" class=\"chat__messages\">\n <div #messagesContainer class=\"chat__messages__container\"\n [class.chat__messages__container--scroll]=\"messagesContainerWithScroll\">\n <ng-content select=\"dr-chat-message\"></ng-content>\n </div>\n </div>\n\n <dr-chat-suggestions *ngIf=\"suggestions?.length\"\n [values]=\"suggestions\"\n [fullScreen]=\"fullScreen\"\n [waitForReply]=\"waitForReply\"\n class=\"chat__suggestions\"\n [class.chat__suggestions--full-height]=\"fullScreen && !messages?.length\"\n [buttonMode]=\"!!messages?.length\"\n (suggestionSelect)=\"suggestionSelect.emit($event)\">\n </dr-chat-suggestions>\n\n <div class=\"form\">\n <ng-content select=\"dr-chat-form\"></ng-content>\n </div>\n</div>\n", styles: [":host{height:100%;width:100%;display:flex;flex-direction:column}.chat{position:relative;display:flex;flex-grow:1;flex-direction:column;height:100%;background-color:#fff;color:#4e566c;font-family:Poppins,sans-serif;font-size:14px;font-weight:400;line-height:22px;box-shadow:0 2px 36px #00000026}.chat__sticky-top{display:flex;flex-direction:column;box-shadow:0 1px 3px #0003;z-index:1}.chat__empty-state{display:flex;justify-content:center}.chat__empty-state__text{padding:44px 0;font-family:Poppins,sans-serif;font-size:18px;font-weight:400;line-height:28px;text-align:center;max-width:440px;color:#4646ce}.chat__messages{display:flex;flex-grow:1;overflow-x:hidden;overflow-y:auto;height:100%;width:100%}.chat__messages__container{overflow-y:auto;overflow-x:hidden;display:flex;flex-shrink:0;flex-direction:column;width:100%;padding-bottom:1px}.chat__messages__container--scroll::ng-deep dr-chat-message{padding-right:8px}.chat__suggestions{flex:1}.chat__suggestions ::ng-deep .chat-suggestions__container{padding:0}.chat__suggestions--full-height{flex-grow:1;height:1px;overflow:auto}.chat--in-full-screen .chat__header{padding-left:32px;padding-right:32px}.chat--in-full-screen .chat__empty-state__text{padding:77px 0;font-size:28px;line-height:46px;max-width:570px}.chat--in-full-screen .chat__messages::ng-deep dr-chat-message{justify-content:center}.chat--in-full-screen .chat__messages::ng-deep .message{max-width:912px}.chat--in-full-screen .chat__suggestions::ng-deep .chat-suggestions__items{padding-left:0;padding-right:0}.chat--in-full-screen .chat__suggestions::ng-deep .chat-suggestions__items__item{font-size:16px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DrChatSuggestionsComponent, selector: "dr-chat-suggestions", inputs: ["values", "fullScreen", "buttonMode", "waitForReply"], outputs: ["suggestionSelect"] }] }); }
|
|
87
87
|
}
|
|
88
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatComponent, decorators: [{
|
|
89
89
|
type: Component,
|
|
90
|
-
args: [{ selector: 'dr-chat', providers: [DrChatCustomMessageService], template: "<div class=\"chat\" [class.chat--in-full-screen]=\"fullScreen\">\n <div class=\"chat__sticky-top\">\n <ng-container *ngIf=\"chatHeader\" [ngTemplateOutlet]=\"chatHeader\"></ng-container>\n\n <div class=\"chat__alert\">\n <ng-content select=\"dr-chat-alert\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"!messages?.length\" class=\"chat__empty-state\">\n <span class=\"chat__empty-state__text\">{{ noMessagesPlaceholder }}</span>\n </div>\n\n <div *ngIf=\"messages?.length\" class=\"chat__messages\">\n <div #messagesContainer class=\"chat__messages__container\"\n [class.chat__messages__container--scroll]=\"messagesContainerWithScroll\">\n <ng-content select=\"dr-chat-message\"></ng-content>\n </div>\n </div>\n\n <dr-chat-suggestions *ngIf=\"suggestions?.length\"\n [values]=\"suggestions\"\n [fullScreen]=\"fullScreen\"\n [waitForReply]=\"waitForReply\"\n class=\"chat__suggestions\"\n [class.chat__suggestions--full-height]=\"fullScreen && !messages?.length\"\n [buttonMode]=\"!!messages?.length\"\n (suggestionSelect)=\"suggestionSelect.emit($event)\">\n </dr-chat-suggestions>\n\n <div class=\"form\">\n <ng-content select=\"dr-chat-form\"></ng-content>\n </div>\n</div>\n", styles: [":host{height:100%;width:100%;display:flex;flex-direction:column}.chat{position:relative;display:flex;flex-grow:1;flex-direction:column;height:100%;background-color:#fff;color:#4e566c;font-family:Poppins,sans-serif;font-size:14px;font-weight:400;line-height:22px}.chat__sticky-top{display:flex;flex-direction:column;box-shadow:0 1px 3px #0003;z-index:1}.chat__empty-state{display:flex;justify-content:center}.chat__empty-state__text{padding:44px 0;font-family:Poppins,sans-serif;font-size:18px;font-weight:400;line-height:28px;text-align:center;max-width:440px;color:#4646ce}.chat__messages{display:flex;flex-grow:1;overflow-x:hidden;overflow-y:auto;height:100%;width:100%}.chat__messages__container{overflow-y:auto;overflow-x:hidden;display:flex;flex-shrink:0;flex-direction:column;width:100%;padding-bottom:1px}.chat__messages__container--scroll::ng-deep dr-chat-message{padding-right:
|
|
90
|
+
args: [{ selector: 'dr-chat', providers: [DrChatCustomMessageService], template: "<div class=\"chat\" [class.chat--in-full-screen]=\"fullScreen\">\n <div class=\"chat__sticky-top\">\n <ng-container *ngIf=\"chatHeader\" [ngTemplateOutlet]=\"chatHeader\"></ng-container>\n\n <div class=\"chat__alert\">\n <ng-content select=\"dr-chat-alert\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"!messages?.length\" class=\"chat__empty-state\">\n <span class=\"chat__empty-state__text\">{{ noMessagesPlaceholder }}</span>\n </div>\n\n <div *ngIf=\"messages?.length\" class=\"chat__messages\">\n <div #messagesContainer class=\"chat__messages__container\"\n [class.chat__messages__container--scroll]=\"messagesContainerWithScroll\">\n <ng-content select=\"dr-chat-message\"></ng-content>\n </div>\n </div>\n\n <dr-chat-suggestions *ngIf=\"suggestions?.length\"\n [values]=\"suggestions\"\n [fullScreen]=\"fullScreen\"\n [waitForReply]=\"waitForReply\"\n class=\"chat__suggestions\"\n [class.chat__suggestions--full-height]=\"fullScreen && !messages?.length\"\n [buttonMode]=\"!!messages?.length\"\n (suggestionSelect)=\"suggestionSelect.emit($event)\">\n </dr-chat-suggestions>\n\n <div class=\"form\">\n <ng-content select=\"dr-chat-form\"></ng-content>\n </div>\n</div>\n", styles: [":host{height:100%;width:100%;display:flex;flex-direction:column}.chat{position:relative;display:flex;flex-grow:1;flex-direction:column;height:100%;background-color:#fff;color:#4e566c;font-family:Poppins,sans-serif;font-size:14px;font-weight:400;line-height:22px;box-shadow:0 2px 36px #00000026}.chat__sticky-top{display:flex;flex-direction:column;box-shadow:0 1px 3px #0003;z-index:1}.chat__empty-state{display:flex;justify-content:center}.chat__empty-state__text{padding:44px 0;font-family:Poppins,sans-serif;font-size:18px;font-weight:400;line-height:28px;text-align:center;max-width:440px;color:#4646ce}.chat__messages{display:flex;flex-grow:1;overflow-x:hidden;overflow-y:auto;height:100%;width:100%}.chat__messages__container{overflow-y:auto;overflow-x:hidden;display:flex;flex-shrink:0;flex-direction:column;width:100%;padding-bottom:1px}.chat__messages__container--scroll::ng-deep dr-chat-message{padding-right:8px}.chat__suggestions{flex:1}.chat__suggestions ::ng-deep .chat-suggestions__container{padding:0}.chat__suggestions--full-height{flex-grow:1;height:1px;overflow:auto}.chat--in-full-screen .chat__header{padding-left:32px;padding-right:32px}.chat--in-full-screen .chat__empty-state__text{padding:77px 0;font-size:28px;line-height:46px;max-width:570px}.chat--in-full-screen .chat__messages::ng-deep dr-chat-message{justify-content:center}.chat--in-full-screen .chat__messages::ng-deep .message{max-width:912px}.chat--in-full-screen .chat__suggestions::ng-deep .chat-suggestions__items{padding-left:0;padding-right:0}.chat--in-full-screen .chat__suggestions::ng-deep .chat-suggestions__items__item{font-size:16px}\n"] }]
|
|
91
91
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { fullScreen: [{
|
|
92
92
|
type: Input
|
|
93
93
|
}], noMessagesPlaceholder: [{
|
|
@@ -131,11 +131,11 @@ export class DrChatFormComponent {
|
|
|
131
131
|
return `height: ${height}px;`;
|
|
132
132
|
}
|
|
133
133
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatFormComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
134
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatFormComponent, selector: "dr-chat-form", inputs: { message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply" }, outputs: { send: "send", abort: "abort", inputChange: "inputChange" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" }, properties: { "class.file-over": "this.fileOver" } }, ngImport: i0, template: "<div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <div class=\"dropped-files__item\" *ngFor=\"let file of droppedFiles\">\n <div class=\"dropped-files__item__preview\" [style.background-image]=\"file.urlStyle || 'none'\">\n <i class=\"dr-icon-file\" *ngIf=\"!file.urlStyle\"></i>\n </div>\n <div class=\"dropped-files__item__name\">{{ file.name }}</div>\n <i class=\"dropped-files__item__remove dr-icon-exit\" (click)=\"removeFile(file)\"></i>\n </div>\n</div>\n<div class=\"message-row\">\n <div\n class=\"message-row__input\"\n [ngClass]=\"{ 'message-row__input--focused': inputFocus, 'message-row__input--filled': !!message?.length }\">\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 (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0
|
|
134
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatFormComponent, selector: "dr-chat-form", inputs: { message: "message", messagePlaceholder: "messagePlaceholder", dropFiles: "dropFiles", dropFilePlaceholder: "dropFilePlaceholder", waitForReply: "waitForReply" }, outputs: { send: "send", abort: "abort", inputChange: "inputChange" }, host: { listeners: { "drop": "onDrop($event)", "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)" }, properties: { "class.file-over": "this.fileOver" } }, ngImport: i0, template: "<div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <div class=\"dropped-files__item\" *ngFor=\"let file of droppedFiles\">\n <div class=\"dropped-files__item__preview\" [style.background-image]=\"file.urlStyle || 'none'\">\n <i class=\"dr-icon-file\" *ngIf=\"!file.urlStyle\"></i>\n </div>\n <div class=\"dropped-files__item__name\">{{ file.name }}</div>\n <i class=\"dropped-files__item__remove dr-icon-exit\" (click)=\"removeFile(file)\"></i>\n </div>\n</div>\n<div class=\"message-row\">\n <div\n class=\"message-row__input\"\n [ngClass]=\"{ 'message-row__input--focused': inputFocus, 'message-row__input--filled': !!message?.length }\">\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 (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0 16px;margin-top:12px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{position:relative;display:flex;align-items:center;flex-grow:1;flex-direction:row;height:auto;overflow:visible;min-width:265px;border-radius:24px;background:#dfe0e3 border-box;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29}:host .message-row__input .send-button{position:absolute;right:4px;top:2.5px;cursor:pointer;font-size:28px;width:68px;border-radius:100px;display:flex;align-items:center;justify-content:center;height:40px;background:#f0f1f4;color:#aeabac}:host .message-row__input--focused{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled .send-button{color:#fff;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input textarea{font-size:14px;color:#333;line-height:19px;flex-grow:1;resize:none;padding:14px 76px 12px 23px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus{border:none}:host .message-row__input textarea::placeholder{color:#9ea1aa}:host .message-row__input .wait-reply-dot-flashing{position:absolute;right:20px}:host .message-row__input .abort-button{position:absolute;right:0;top:-44px}:host .message-row__input .abort-button::ng-deep button{background:#f2f2ff!important;border-radius:4px}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}:host .dropped-files{display:flex;flex-direction:row;margin-bottom:.5rem;flex-wrap:wrap}:host .dropped-files__item{display:flex;flex-direction:column;justify-content:center;margin:0 10px 10px 0;position:relative}:host .dropped-files__item__preview{background-size:cover;background-position:center;width:64px;height:64px;border-radius:8px;border:1px solid #ccc}:host .dropped-files__item__preview i{font-size:62px}:host .dropped-files__item__name{white-space:nowrap;font-size:12px;color:#8f929e;margin-top:4px;max-width:64px;overflow:hidden;text-overflow:ellipsis}:host .dropped-files__item__remove{position:absolute;right:-4px;top:-4px;cursor:pointer;background:#fff;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }, { kind: "component", type: i5.DrDotFlashingComponent, selector: "dr-dot-flashing" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
135
135
|
}
|
|
136
136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatFormComponent, decorators: [{
|
|
137
137
|
type: Component,
|
|
138
|
-
args: [{ selector: 'dr-chat-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <div class=\"dropped-files__item\" *ngFor=\"let file of droppedFiles\">\n <div class=\"dropped-files__item__preview\" [style.background-image]=\"file.urlStyle || 'none'\">\n <i class=\"dr-icon-file\" *ngIf=\"!file.urlStyle\"></i>\n </div>\n <div class=\"dropped-files__item__name\">{{ file.name }}</div>\n <i class=\"dropped-files__item__remove dr-icon-exit\" (click)=\"removeFile(file)\"></i>\n </div>\n</div>\n<div class=\"message-row\">\n <div\n class=\"message-row__input\"\n [ngClass]=\"{ 'message-row__input--focused': inputFocus, 'message-row__input--filled': !!message?.length }\">\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 (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0
|
|
138
|
+
args: [{ selector: 'dr-chat-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"dropped-files\" *ngIf=\"droppedFiles?.length\">\n <div class=\"dropped-files__item\" *ngFor=\"let file of droppedFiles\">\n <div class=\"dropped-files__item__preview\" [style.background-image]=\"file.urlStyle || 'none'\">\n <i class=\"dr-icon-file\" *ngIf=\"!file.urlStyle\"></i>\n </div>\n <div class=\"dropped-files__item__name\">{{ file.name }}</div>\n <i class=\"dropped-files__item__remove dr-icon-exit\" (click)=\"removeFile(file)\"></i>\n </div>\n</div>\n<div class=\"message-row\">\n <div\n class=\"message-row__input\"\n [ngClass]=\"{ 'message-row__input--focused': inputFocus, 'message-row__input--filled': !!message?.length }\">\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 (keyup.enter)=\"sendMessage()\">\n </textarea>\n <i *ngIf=\"!waitForReply\" (click)=\"sendMessage()\" class=\"dr-icon-notify send-button\"></i>\n <dr-dot-flashing *ngIf=\"waitForReply\" class=\"wait-reply-dot-flashing\"></dr-dot-flashing>\n <dr-button *ngIf=\"waitForReply\" (click)=\"abortMessage()\" theme=\"ghost\" class=\"abort-button\">Stop generating</dr-button>\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;align-items:center;padding:0 16px;margin-top:12px}:host .message-row{display:flex;justify-content:center;width:100%;padding:0 0 21px;max-width:956px}:host .message-row__input{position:relative;display:flex;align-items:center;flex-grow:1;flex-direction:row;height:auto;overflow:visible;min-width:265px;border-radius:24px;background:#dfe0e3 border-box;border:1.5px solid transparent;box-shadow:0 2px 16px -10px #603cff29}:host .message-row__input .send-button{position:absolute;right:4px;top:2.5px;cursor:pointer;font-size:28px;width:68px;border-radius:100px;display:flex;align-items:center;justify-content:center;height:40px;background:#f0f1f4;color:#aeabac}:host .message-row__input--focused{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled{background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input--filled .send-button{color:#fff;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box}:host .message-row__input textarea{font-size:14px;color:#333;line-height:19px;flex-grow:1;resize:none;padding:14px 76px 12px 23px;margin:auto;border:none;border-radius:22.5px}:host .message-row__input textarea:focus{border:none}:host .message-row__input textarea::placeholder{color:#9ea1aa}:host .message-row__input .wait-reply-dot-flashing{position:absolute;right:20px}:host .message-row__input .abort-button{position:absolute;right:0;top:-44px}:host .message-row__input .abort-button::ng-deep button{background:#f2f2ff!important;border-radius:4px}:host input{flex:1}:host input.with-button{border-bottom-right-radius:0;border-top-right-radius:0}:host .dropped-files{display:flex;flex-direction:row;margin-bottom:.5rem;flex-wrap:wrap}:host .dropped-files__item{display:flex;flex-direction:column;justify-content:center;margin:0 10px 10px 0;position:relative}:host .dropped-files__item__preview{background-size:cover;background-position:center;width:64px;height:64px;border-radius:8px;border:1px solid #ccc}:host .dropped-files__item__preview i{font-size:62px}:host .dropped-files__item__name{white-space:nowrap;font-size:12px;color:#8f929e;margin-top:4px;max-width:64px;overflow:hidden;text-overflow:ellipsis}:host .dropped-files__item__remove{position:absolute;right:-4px;top:-4px;cursor:pointer;background:#fff;border-radius:12px;color:#8f929e;border:1px solid #8f929e;font-size:14px}\n"] }]
|
|
139
139
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.DomSanitizer }]; }, propDecorators: { message: [{
|
|
140
140
|
type: Input
|
|
141
141
|
}], messagePlaceholder: [{
|
|
@@ -45,8 +45,11 @@ export class DrChatMessageComponent {
|
|
|
45
45
|
}
|
|
46
46
|
return customMessageDirective;
|
|
47
47
|
}
|
|
48
|
+
applyMessageGroupClass(message) {
|
|
49
|
+
return message.role === 'assistant' && message.kind === 'text' ? 'messageGroup' : '';
|
|
50
|
+
}
|
|
48
51
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatMessageComponent, deps: [{ token: i1.DrChatCustomMessageService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatMessageComponent, selector: "dr-chat-message", inputs: { reply: "reply", type: "type", message: "message", customMessageData: "customMessageData", user: "user" }, host: { properties: { "@flyInOut": "this.flyInOut", "class.not-reply": "this.notReply", "class.reply": "this.reply" } }, queries: [{ propertyName: "drChatMessageActions", first: true, predicate: ["drChatMessageActions"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"message.avatarUrl; else userAvatar\">\n <div class=\"avatar\" [style.background-image]=\"'url(' + message.avatarUrl + ')'\"></div>\n</ng-container>\n<ng-template #userAvatar>\n <dr-avatar *ngIf=\"message.user\" [users]=\"message.user\"></dr-avatar>\n</ng-template>\n<div class=\"message\" [class.message--custom]=\"customMessage\">\n <ng-container [ngSwitch]=\"message.kind\">\n <dr-chat-message-text *ngSwitchCase=\"MESSAGE_TYPE.TEXT\" [message]=\"message\"></dr-chat-message-text>\n <dr-chat-message-file *ngSwitchCase=\"MESSAGE_TYPE.DOWNLOAD_FILE\" [message]=\"message\"></dr-chat-message-file>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getTemplate()\" [ngTemplateOutletContext]=\"getTemplateContext()\"></ng-container>\n </ng-container>\n </ng-container>\n <div class=\"message__actions\" *ngIf=\"drChatMessageActions;\">\n <ng-container [ngTemplateOutlet]=\"drChatMessageActions\"></ng-container>\n </div>\n</div>\n", styles: [":host{position:relative;display:flex;flex-direction:row;width:100%;background:#f9faffb3;border-top:1px solid #E5E5E5;padding:16px
|
|
52
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatMessageComponent, selector: "dr-chat-message", inputs: { reply: "reply", type: "type", message: "message", customMessageData: "customMessageData", user: "user" }, host: { properties: { "@flyInOut": "this.flyInOut", "class.not-reply": "this.notReply", "class.reply": "this.reply" } }, queries: [{ propertyName: "drChatMessageActions", first: true, predicate: ["drChatMessageActions"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"message.avatarUrl; else userAvatar\">\n <div class=\"avatar\" [style.background-image]=\"'url(' + message.avatarUrl + ')'\"></div>\n</ng-container>\n<ng-template #userAvatar>\n <dr-avatar *ngIf=\"message.user\" [users]=\"message.user\"></dr-avatar>\n</ng-template>\n<div class=\"message\" [class.message--custom]=\"customMessage\" [ngClass]=applyMessageGroupClass(message)>\n <ng-container [ngSwitch]=\"message.kind\">\n <dr-chat-message-text *ngSwitchCase=\"MESSAGE_TYPE.TEXT\" [message]=\"message\"></dr-chat-message-text>\n <dr-chat-message-file *ngSwitchCase=\"MESSAGE_TYPE.DOWNLOAD_FILE\" [message]=\"message\"></dr-chat-message-file>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getTemplate()\" [ngTemplateOutletContext]=\"getTemplateContext()\"></ng-container>\n </ng-container>\n </ng-container>\n <div class=\"message__actions\" *ngIf=\"drChatMessageActions;\">\n <ng-container [ngTemplateOutlet]=\"drChatMessageActions\"></ng-container>\n </div>\n</div>\n", styles: [":host{position:relative;display:flex;flex-direction:row;width:100%;background:#f9faffb3;border-top:1px solid #E5E5E5;padding:16px}:host:first-child{border:none}:host:last-child{border-bottom:1px solid #E5E5E5}.reply+:host.reply,.not-reply+:host.not-reply{border-top:none;padding-top:0;padding-left:60px}.reply+:host.reply .avatar,.reply+:host.reply dr-avatar,.not-reply+:host.not-reply .avatar,.not-reply+:host.not-reply dr-avatar{display:none}:host.not-reply{background-color:#fff}:host .avatar{display:flex;width:28px;height:28px;background-color:#fff;border-radius:16px;flex-shrink:0;border:1px solid #DFE0E3;background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22Layer_1%22 data-name%3D%22Layer 1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 viewBox%3D%220 0 74 65%22%3E %3Cdefs%3E %3Cstyle%3E .cls-1%2C .cls-2%2C .cls-3 %7B fill%3A none%3B %7D .cls-4 %7B fill%3A url(%23linear-gradient)%3B %7D .cls-5 %7B fill%3A %234eb7df%3B %7D .cls-2 %7B stroke%3A %23a6a8aa%3B stroke-miterlimit%3A 10%3B stroke-width%3A .37px%3B %7D .cls-6 %7B fill%3A url(%23linear-gradient-3)%3B %7D .cls-7 %7B fill%3A url(%23linear-gradient-2)%3B %7D .cls-3 %7B clip-path%3A url(%23clippath)%3B %7D %3C%2Fstyle%3E %3CclipPath id%3D%22clippath%22%3E %3Crect class%3D%22cls-1%22 width%3D%2274%22 height%3D%2265%22%2F%3E %3C%2FclipPath%3E %3ClinearGradient id%3D%22linear-gradient%22 x1%3D%2224.26%22 y1%3D%22-3.79%22 x2%3D%2295.63%22 y2%3D%2288.82%22 gradientTransform%3D%22translate(0 65.89) scale(1 -1)%22 gradientUnits%3D%22userSpaceOnUse%22%3E %3Cstop offset%3D%220%22 stop-color%3D%22%237676ff%22%2F%3E %3Cstop offset%3D%22.18%22 stop-color%3D%22%235959ff%22%2F%3E %3Cstop offset%3D%22.35%22 stop-color%3D%22%235757e0%22%2F%3E %3Cstop offset%3D%22.61%22 stop-color%3D%22%234646ce%22%2F%3E %3Cstop offset%3D%22.84%22 stop-color%3D%22%234b4be4%22%2F%3E %3Cstop offset%3D%221%22 stop-color%3D%22%234444eb%22%2F%3E %3C%2FlinearGradient%3E %3ClinearGradient id%3D%22linear-gradient-2%22 x1%3D%2212.05%22 y1%3D%2277.06%22 x2%3D%2210.77%22 y2%3D%2213.85%22 gradientTransform%3D%22translate(0 65.89) scale(1 -1)%22 gradientUnits%3D%22userSpaceOnUse%22%3E %3Cstop offset%3D%22.45%22 stop-color%3D%22%232f92b8%22%2F%3E %3Cstop offset%3D%22.84%22 stop-color%3D%22%234eb7df%22%2F%3E %3Cstop offset%3D%221%22 stop-color%3D%22%234eb7df%22%2F%3E %3C%2FlinearGradient%3E %3ClinearGradient id%3D%22linear-gradient-3%22 x1%3D%2262.26%22 y1%3D%22-2.54%22 x2%3D%2261.76%22 y2%3D%2285.91%22 gradientTransform%3D%22translate(0 65.89) scale(1 -1)%22 gradientUnits%3D%22userSpaceOnUse%22%3E %3Cstop offset%3D%220%22 stop-color%3D%22%2336369b%22%2F%3E %3Cstop offset%3D%22.52%22 stop-color%3D%22%234848d0%22%2F%3E %3C%2FlinearGradient%3E %3C%2Fdefs%3E %3Cg class%3D%22cls-3%22%3E %3Cg%3E %3Cpath class%3D%22cls-4%22 d%3D%22m73.32%2C24.79v15.73c0%2C13.12-9.87%2C23.79-22%2C23.79h-21.32c-3.46-.06-6.25-3.11-6.25-6.87s2.79-6.81%2C6.25-6.87h21.32c5.13%2C0%2C9.29-4.51%2C9.29-10.05v-15.73c0-5.54-4.17-10.05-9.29-10.05h-7.46c3.51%2C0%2C6.35-3.08%2C6.35-6.88s-2.79-6.8-6.25-6.87h7.35c12.12%2C0%2C22%2C10.67%2C22%2C23.79h0Z%22%2F%3E %3Cpath class%3D%22cls-5%22 d%3D%22m50.26%2C7.82c0%2C3.8-2.9%2C6.93-6.41%2C6.93h-21.86c-5.13%2C0-9.29%2C4.51-9.29%2C10.05v15.73c0%2C5.54%2C4.17%2C10.05%2C9.29%2C10.05h8.01c-3.46.06-6.25%2C3.11-6.25%2C6.87s2.79%2C6.81%2C6.25%2C6.87h-8.01c-12.12%2C0-22-10.67-22-23.79v-15.73C0%2C11.68%2C9.87%2C1%2C21.99%2C1h21.97c3.46.06%2C6.3%2C3.06%2C6.3%2C6.82Z%22%2F%3E %3Cpath class%3D%22cls-2%22 d%3D%22m66.45%2C1h-.22.22%2C0Z%22%2F%3E %3Cpath class%3D%22cls-2%22 d%3D%22m36.05%2C50.58h-.22.22%2C0Z%22%2F%3E %3Cpath class%3D%22cls-7%22 d%3D%22m0%2C33.78v-2.76C0%2C12.9%2C13.62%2C14.48%2C13.62%2C14.48h8.38c-5.5.46-9.5%2C4.71-9.5%2C9.96l.02%2C15.8c0%2C5.54%2C4.44%2C10.59%2C9.48%2C10.59l-8-.5S0%2C51.88%2C0%2C33.77h0Z%22%2F%3E %3Cpath class%3D%22cls-6%22 d%3D%22m73%2C31.51v2.76c0%2C18.12-13.62%2C16.53-13.62%2C16.53h-7.99c5.61-.85%2C9.09-4.76%2C9.09-10.02l.02-16.33c0-5.54-4.46-10-9.5-10h8s13.99-1.05%2C13.99%2C17.07h0Z%22%2F%3E %3C%2Fg%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-size:18px;background-repeat:no-repeat;background-position-x:4px;background-position-y:5px}:host .avatar,:host dr-avatar{margin:0 16px 0 0}:host .avatar::ng-deep .users-section__user,:host dr-avatar::ng-deep .users-section__user{border:1px solid #DFE0E3}:host .message{display:flex;align-items:center;flex-grow:1}:host .message__actions{display:flex;align-items:center;margin-top:12px;flex-grow:1;justify-content:flex-start}:host .message__actions::ng-deep button:not(:hover) i[class*=dr-icon]{color:#b9b9ec!important}:host .messageGroup{display:flex;flex-direction:column;align-items:flex-start}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.DrAvatarComponent, selector: "dr-avatar", inputs: ["users", "warning", "showUnassigned", "drAvatarTooltipPosition", "drAvatarTooltipClass", "drAvatarSize", "drAvatarIsClickable"], outputs: ["userClicked"] }, { kind: "component", type: i4.DrChatMessageTextComponent, selector: "dr-chat-message-text", inputs: ["message"] }, { kind: "component", type: i5.DrChatMessageFileComponent, selector: "dr-chat-message-file", inputs: ["message", "files"] }], animations: [
|
|
50
53
|
trigger('flyInOut', [
|
|
51
54
|
state('in', style({ transform: 'translateX(0)' })),
|
|
52
55
|
transition('void => *', [style({ transform: 'translateX(-100%)' }), animate(80)]),
|
|
@@ -62,7 +65,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
62
65
|
transition('void => *', [style({ transform: 'translateX(-100%)' }), animate(80)]),
|
|
63
66
|
transition('* => void', [animate(80, style({ transform: 'translateX(100%)' }))]),
|
|
64
67
|
]),
|
|
65
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"message.avatarUrl; else userAvatar\">\n <div class=\"avatar\" [style.background-image]=\"'url(' + message.avatarUrl + ')'\"></div>\n</ng-container>\n<ng-template #userAvatar>\n <dr-avatar *ngIf=\"message.user\" [users]=\"message.user\"></dr-avatar>\n</ng-template>\n<div class=\"message\" [class.message--custom]=\"customMessage\">\n <ng-container [ngSwitch]=\"message.kind\">\n <dr-chat-message-text *ngSwitchCase=\"MESSAGE_TYPE.TEXT\" [message]=\"message\"></dr-chat-message-text>\n <dr-chat-message-file *ngSwitchCase=\"MESSAGE_TYPE.DOWNLOAD_FILE\" [message]=\"message\"></dr-chat-message-file>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getTemplate()\" [ngTemplateOutletContext]=\"getTemplateContext()\"></ng-container>\n </ng-container>\n </ng-container>\n <div class=\"message__actions\" *ngIf=\"drChatMessageActions;\">\n <ng-container [ngTemplateOutlet]=\"drChatMessageActions\"></ng-container>\n </div>\n</div>\n", styles: [":host{position:relative;display:flex;flex-direction:row;width:100%;background:#f9faffb3;border-top:1px solid #E5E5E5;padding:16px
|
|
68
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"message.avatarUrl; else userAvatar\">\n <div class=\"avatar\" [style.background-image]=\"'url(' + message.avatarUrl + ')'\"></div>\n</ng-container>\n<ng-template #userAvatar>\n <dr-avatar *ngIf=\"message.user\" [users]=\"message.user\"></dr-avatar>\n</ng-template>\n<div class=\"message\" [class.message--custom]=\"customMessage\" [ngClass]=applyMessageGroupClass(message)>\n <ng-container [ngSwitch]=\"message.kind\">\n <dr-chat-message-text *ngSwitchCase=\"MESSAGE_TYPE.TEXT\" [message]=\"message\"></dr-chat-message-text>\n <dr-chat-message-file *ngSwitchCase=\"MESSAGE_TYPE.DOWNLOAD_FILE\" [message]=\"message\"></dr-chat-message-file>\n <ng-container *ngSwitchDefault>\n <ng-container [ngTemplateOutlet]=\"getTemplate()\" [ngTemplateOutletContext]=\"getTemplateContext()\"></ng-container>\n </ng-container>\n </ng-container>\n <div class=\"message__actions\" *ngIf=\"drChatMessageActions;\">\n <ng-container [ngTemplateOutlet]=\"drChatMessageActions\"></ng-container>\n </div>\n</div>\n", styles: [":host{position:relative;display:flex;flex-direction:row;width:100%;background:#f9faffb3;border-top:1px solid #E5E5E5;padding:16px}:host:first-child{border:none}:host:last-child{border-bottom:1px solid #E5E5E5}.reply+:host.reply,.not-reply+:host.not-reply{border-top:none;padding-top:0;padding-left:60px}.reply+:host.reply .avatar,.reply+:host.reply dr-avatar,.not-reply+:host.not-reply .avatar,.not-reply+:host.not-reply dr-avatar{display:none}:host.not-reply{background-color:#fff}:host .avatar{display:flex;width:28px;height:28px;background-color:#fff;border-radius:16px;flex-shrink:0;border:1px solid #DFE0E3;background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22Layer_1%22 data-name%3D%22Layer 1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 viewBox%3D%220 0 74 65%22%3E %3Cdefs%3E %3Cstyle%3E .cls-1%2C .cls-2%2C .cls-3 %7B fill%3A none%3B %7D .cls-4 %7B fill%3A url(%23linear-gradient)%3B %7D .cls-5 %7B fill%3A %234eb7df%3B %7D .cls-2 %7B stroke%3A %23a6a8aa%3B stroke-miterlimit%3A 10%3B stroke-width%3A .37px%3B %7D .cls-6 %7B fill%3A url(%23linear-gradient-3)%3B %7D .cls-7 %7B fill%3A url(%23linear-gradient-2)%3B %7D .cls-3 %7B clip-path%3A url(%23clippath)%3B %7D %3C%2Fstyle%3E %3CclipPath id%3D%22clippath%22%3E %3Crect class%3D%22cls-1%22 width%3D%2274%22 height%3D%2265%22%2F%3E %3C%2FclipPath%3E %3ClinearGradient id%3D%22linear-gradient%22 x1%3D%2224.26%22 y1%3D%22-3.79%22 x2%3D%2295.63%22 y2%3D%2288.82%22 gradientTransform%3D%22translate(0 65.89) scale(1 -1)%22 gradientUnits%3D%22userSpaceOnUse%22%3E %3Cstop offset%3D%220%22 stop-color%3D%22%237676ff%22%2F%3E %3Cstop offset%3D%22.18%22 stop-color%3D%22%235959ff%22%2F%3E %3Cstop offset%3D%22.35%22 stop-color%3D%22%235757e0%22%2F%3E %3Cstop offset%3D%22.61%22 stop-color%3D%22%234646ce%22%2F%3E %3Cstop offset%3D%22.84%22 stop-color%3D%22%234b4be4%22%2F%3E %3Cstop offset%3D%221%22 stop-color%3D%22%234444eb%22%2F%3E %3C%2FlinearGradient%3E %3ClinearGradient id%3D%22linear-gradient-2%22 x1%3D%2212.05%22 y1%3D%2277.06%22 x2%3D%2210.77%22 y2%3D%2213.85%22 gradientTransform%3D%22translate(0 65.89) scale(1 -1)%22 gradientUnits%3D%22userSpaceOnUse%22%3E %3Cstop offset%3D%22.45%22 stop-color%3D%22%232f92b8%22%2F%3E %3Cstop offset%3D%22.84%22 stop-color%3D%22%234eb7df%22%2F%3E %3Cstop offset%3D%221%22 stop-color%3D%22%234eb7df%22%2F%3E %3C%2FlinearGradient%3E %3ClinearGradient id%3D%22linear-gradient-3%22 x1%3D%2262.26%22 y1%3D%22-2.54%22 x2%3D%2261.76%22 y2%3D%2285.91%22 gradientTransform%3D%22translate(0 65.89) scale(1 -1)%22 gradientUnits%3D%22userSpaceOnUse%22%3E %3Cstop offset%3D%220%22 stop-color%3D%22%2336369b%22%2F%3E %3Cstop offset%3D%22.52%22 stop-color%3D%22%234848d0%22%2F%3E %3C%2FlinearGradient%3E %3C%2Fdefs%3E %3Cg class%3D%22cls-3%22%3E %3Cg%3E %3Cpath class%3D%22cls-4%22 d%3D%22m73.32%2C24.79v15.73c0%2C13.12-9.87%2C23.79-22%2C23.79h-21.32c-3.46-.06-6.25-3.11-6.25-6.87s2.79-6.81%2C6.25-6.87h21.32c5.13%2C0%2C9.29-4.51%2C9.29-10.05v-15.73c0-5.54-4.17-10.05-9.29-10.05h-7.46c3.51%2C0%2C6.35-3.08%2C6.35-6.88s-2.79-6.8-6.25-6.87h7.35c12.12%2C0%2C22%2C10.67%2C22%2C23.79h0Z%22%2F%3E %3Cpath class%3D%22cls-5%22 d%3D%22m50.26%2C7.82c0%2C3.8-2.9%2C6.93-6.41%2C6.93h-21.86c-5.13%2C0-9.29%2C4.51-9.29%2C10.05v15.73c0%2C5.54%2C4.17%2C10.05%2C9.29%2C10.05h8.01c-3.46.06-6.25%2C3.11-6.25%2C6.87s2.79%2C6.81%2C6.25%2C6.87h-8.01c-12.12%2C0-22-10.67-22-23.79v-15.73C0%2C11.68%2C9.87%2C1%2C21.99%2C1h21.97c3.46.06%2C6.3%2C3.06%2C6.3%2C6.82Z%22%2F%3E %3Cpath class%3D%22cls-2%22 d%3D%22m66.45%2C1h-.22.22%2C0Z%22%2F%3E %3Cpath class%3D%22cls-2%22 d%3D%22m36.05%2C50.58h-.22.22%2C0Z%22%2F%3E %3Cpath class%3D%22cls-7%22 d%3D%22m0%2C33.78v-2.76C0%2C12.9%2C13.62%2C14.48%2C13.62%2C14.48h8.38c-5.5.46-9.5%2C4.71-9.5%2C9.96l.02%2C15.8c0%2C5.54%2C4.44%2C10.59%2C9.48%2C10.59l-8-.5S0%2C51.88%2C0%2C33.77h0Z%22%2F%3E %3Cpath class%3D%22cls-6%22 d%3D%22m73%2C31.51v2.76c0%2C18.12-13.62%2C16.53-13.62%2C16.53h-7.99c5.61-.85%2C9.09-4.76%2C9.09-10.02l.02-16.33c0-5.54-4.46-10-9.5-10h8s13.99-1.05%2C13.99%2C17.07h0Z%22%2F%3E %3C%2Fg%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-size:18px;background-repeat:no-repeat;background-position-x:4px;background-position-y:5px}:host .avatar,:host dr-avatar{margin:0 16px 0 0}:host .avatar::ng-deep .users-section__user,:host dr-avatar::ng-deep .users-section__user{border:1px solid #DFE0E3}:host .message{display:flex;align-items:center;flex-grow:1}:host .message__actions{display:flex;align-items:center;margin-top:12px;flex-grow:1;justify-content:flex-start}:host .message__actions::ng-deep button:not(:hover) i[class*=dr-icon]{color:#b9b9ec!important}:host .messageGroup{display:flex;flex-direction:column;align-items:flex-start}\n"] }]
|
|
66
69
|
}], ctorParameters: function () { return [{ type: i1.DrChatCustomMessageService }]; }, propDecorators: { flyInOut: [{
|
|
67
70
|
type: HostBinding,
|
|
68
71
|
args: ['@flyInOut']
|
|
@@ -86,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
86
89
|
type: ContentChild,
|
|
87
90
|
args: ['drChatMessageActions']
|
|
88
91
|
}] } });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGFyYWlsc3NoYXJlZC9zcmMvbGliL2RyLWNoYXQvZHItY2hhdC1tZXNzYWdlL2NoYXQtbWVzc2FnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtbWVzc2FnZS9jaGF0LW1lc3NhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFFcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7QUFlbEcsTUFBTSxPQUFPLHNCQUFzQjtJQUkvQixJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFFSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFjO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBNkJELFlBQW9CLG9CQUFnRDtRQUFoRCx5QkFBb0IsR0FBcEIsb0JB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YXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBIb3N0QmluZGluZywgSW5wdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENIQVRfTUVTU0FHRV9UWVBFLCBJQ2hhdE1lc3NhZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2hhdCc7XG5pbXBvcnQgeyBEckNoYXRDdXN0b21NZXNzYWdlRGlyZWN0aXZlIH0gZnJvbSAnLi9kci1jaGF0LW1lc3NhZ2UtY3VzdG9tL2NoYXQtY3VzdG9tLW1lc3NhZ2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyQ2hhdEN1c3RvbU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9kci1jaGF0LW1lc3NhZ2UtY3VzdG9tL2NoYXQtY3VzdG9tLW1lc3NhZ2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItY2hhdC1tZXNzYWdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoYXQtbWVzc2FnZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hhdC1tZXNzYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICB0cmlnZ2VyKCdmbHlJbk91dCcsIFtcbiAgICAgICAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgwKScgfSkpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW3N0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgtMTAwJSknIH0pLCBhbmltYXRlKDgwKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW2FuaW1hdGUoODAsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMDAlKScgfSkpXSksXG4gICAgICAgIF0pLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERyQ2hhdE1lc3NhZ2VDb21wb25lbnQge1xuXG4gICAgTUVTU0FHRV9UWVBFID0gQ0hBVF9NRVNTQUdFX1RZUEU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ0BmbHlJbk91dCcpXG4gICAgZ2V0IGZseUluT3V0KCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vdC1yZXBseScpXG4gICAgZ2V0IG5vdFJlcGx5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMucmVwbHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiBhIG1lc3NhZ2UgaXMgYSByZXBseVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZXBseScpXG4gICAgZ2V0IHJlcGx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVwbHk7XG4gICAgfVxuXG4gICAgc2V0IHJlcGx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcGx5ID0gISF2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3JlcGx5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNZXNzYWdlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SUNoYXRNZXNzYWdlfVxuICAgICAqL1xuICAgIEBJbnB1dCgpIG1lc3NhZ2U6IElDaGF0TWVzc2FnZTtcblxuICAgIC8qKlxuICAgICAqIERhdGEgd2hpY2ggd2lsbCBiZSBzZXQgYXMgY3VzdG9tIG1lc3NhZ2UgdGVtcGxhdGUgY29udGV4dFxuICAgICAqXG4gICAgICogQHR5cGUge2FueX1cbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXN0b21NZXNzYWdlRGF0YTogYW55O1xuXG4gICAgLyoqXG4gICAgICogVXNlciBpbmZvIGZvciBhdmF0YXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSB1c2VyOiBhbnk7XG5cbiAgICBAQ29udGVudENoaWxkKCdkckNoYXRNZXNzYWdlQWN0aW9ucycpIGRyQ2hhdE1lc3NhZ2VBY3Rpb25zOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHVibGljIGN1c3RvbU1lc3NhZ2U6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN1c3RvbU1lc3NhZ2VTZXJ2aWNlOiBEckNoYXRDdXN0b21NZXNzYWdlU2VydmljZSkge1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgdGhpcy5jdXN0b21NZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY3VzdG9tTWVzc2FnZSA9IHRoaXMuZ2V0Q3VzdG9tTWVzc2FnZSh0aGlzLnR5cGUpO1xuICAgICAgICByZXR1cm4gY3VzdG9tTWVzc2FnZS50ZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGVDb250ZXh0KCk6IHsgJGltcGxpY2l0OiBhbnk7IGlzUmVwbHk6IGJvb2xlYW4gfSB7XG4gICAgICAgIHJldHVybiB7ICRpbXBsaWNpdDogdGhpcy5jdXN0b21NZXNzYWdlRGF0YSwgaXNSZXBseTogdGhpcy5yZXBseSB9O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDdXN0b21NZXNzYWdlKHR5cGU6IHN0cmluZyk6IERyQ2hhdEN1c3RvbU1lc3NhZ2VEaXJlY3RpdmUge1xuICAgICAgICBjb25zdCBjdXN0b21NZXNzYWdlRGlyZWN0aXZlID0gdGhpcy5jdXN0b21NZXNzYWdlU2VydmljZS5nZXRJbnN0YW5jZSh0eXBlKTtcblxuICAgICAgICBpZiAoIWN1c3RvbU1lc3NhZ2VEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgZHItY2hhdDogQ2FuJ3QgZmluZCB0ZW1wbGF0ZSBmb3IgY3VzdG9tIHR5cGUgJyR7IHR5cGUgfScuIGAgK1xuICAgICAgICAgICAgICAgIGBNYWtlIHN1cmUgeW91IHByb3ZpZGUgaXQgaW4gdGhlIGNoYXQgY29tcG9uZW50IHdpdGggKmRyQ3VzdG9tTWVzc2FnZT0nJHsgdHlwZSB9Jy5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdXN0b21NZXNzYWdlRGlyZWN0aXZlO1xuICAgIH1cblxuICAgIGFwcGx5TWVzc2FnZUdyb3VwQ2xhc3MgKG1lc3NhZ2U6IElDaGF0TWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiBtZXNzYWdlLmtpbmQgPT09J3RleHQnID8gJ21lc3NhZ2VHcm91cCcgOiAnJ1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlLmF2YXRhclVybDsgZWxzZSB1c2VyQXZhdGFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIid1cmwoJyArIG1lc3NhZ2UuYXZhdGFyVXJsICsgJyknXCI+PC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjdXNlckF2YXRhcj5cbiAgICA8ZHItYXZhdGFyICpuZ0lmPVwibWVzc2FnZS51c2VyXCIgW3VzZXJzXT1cIm1lc3NhZ2UudXNlclwiPjwvZHItYXZhdGFyPlxuPC9uZy10ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJtZXNzYWdlXCIgW2NsYXNzLm1lc3NhZ2UtLWN1c3RvbV09XCJjdXN0b21NZXNzYWdlXCIgW25nQ2xhc3NdPWFwcGx5TWVzc2FnZUdyb3VwQ2xhc3MobWVzc2FnZSk+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwibWVzc2FnZS5raW5kXCI+XG4gICAgICAgIDxkci1jaGF0LW1lc3NhZ2UtdGV4dCAqbmdTd2l0Y2hDYXNlPVwiTUVTU0FHRV9UWVBFLlRFWFRcIiBbbWVzc2FnZV09XCJtZXNzYWdlXCI+PC9kci1jaGF0LW1lc3NhZ2UtdGV4dD5cbiAgICAgICAgPGRyLWNoYXQtbWVzc2FnZS1maWxlICpuZ1N3aXRjaENhc2U9XCJNRVNTQUdFX1RZUEUuRE9XTkxPQURfRklMRVwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj48L2RyLWNoYXQtbWVzc2FnZS1maWxlPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldFRlbXBsYXRlKClcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0VGVtcGxhdGVDb250ZXh0KClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VfX2FjdGlvbnNcIiAqbmdJZj1cImRyQ2hhdE1lc3NhZ2VBY3Rpb25zO1wiPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyQ2hhdE1lc3NhZ2VBY3Rpb25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -99,11 +99,11 @@ export class DrChatSuggestionsComponent {
|
|
|
99
99
|
this.destroy$.complete();
|
|
100
100
|
}
|
|
101
101
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatSuggestionsComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatSuggestionsComponent, selector: "dr-chat-suggestions", inputs: { values: "values", fullScreen: "fullScreen", buttonMode: "buttonMode", waitForReply: "waitForReply" }, outputs: { suggestionSelect: "suggestionSelect" }, viewQueries: [{ propertyName: "suggestionContainer", first: true, predicate: ["suggestionsContainer"], descendants: true }], ngImport: i0, template: "<div class=\"chat-suggestions\" #suggestionsContainer\n [ngClass]=\"{'chat-suggestions--three-cols': colsCount === 3,\n 'chat-suggestions--two-cols': colsCount === 2,\n 'chat-suggestions--one-col': colsCount === 1,\n 'chat-suggestions--button-mode': buttonMode }\">\n <ng-container *ngIf=\"buttonMode; else suggestionCards\">\n <div class=\"chat-suggestions__container\"\n [class.chat-suggestions__container--opened]=\"isSuggestedMenuOpen\"\n *ngIf=\"visibleValues.length\">\n <dr-button theme=\"
|
|
102
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DrChatSuggestionsComponent, selector: "dr-chat-suggestions", inputs: { values: "values", fullScreen: "fullScreen", buttonMode: "buttonMode", waitForReply: "waitForReply" }, outputs: { suggestionSelect: "suggestionSelect" }, viewQueries: [{ propertyName: "suggestionContainer", first: true, predicate: ["suggestionsContainer"], descendants: true }], ngImport: i0, template: "<div class=\"chat-suggestions\" #suggestionsContainer\n [ngClass]=\"{'chat-suggestions--three-cols': colsCount === 3,\n 'chat-suggestions--two-cols': colsCount === 2,\n 'chat-suggestions--one-col': colsCount === 1,\n 'chat-suggestions--button-mode': buttonMode }\">\n <ng-container *ngIf=\"buttonMode; else suggestionCards\">\n <div class=\"chat-suggestions__container\"\n [class.chat-suggestions__container--opened]=\"isSuggestedMenuOpen\"\n *ngIf=\"visibleValues.length\">\n <dr-button theme=\"secondary\" class=\"chat-suggestions__container__button\" (click)=\"toggleSuggestedMenu()\">\n Suggested chats\n </dr-button>\n <ng-container *ngTemplateOutlet=\"suggestionCards\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #suggestionCards>\n <div class=\"chat-suggestions__items\"\n [ngClass]=\"{'chat-suggestions__items--three-cols': colsCount === 3,\n 'chat-suggestions__items--two-cols': colsCount === 2,\n 'chat-suggestions__items--one-col': colsCount === 1 }\">\n <div *ngFor=\"let item of visibleValues\"\n class=\"chat-suggestions__items__item\" (click)=\"onItemClick(item)\">\n {{ item }}\n </div>\n </div>\n</ng-template>\n", styles: [":host{display:flex;align-items:flex-start;justify-content:center}:host .chat-suggestions{display:flex;width:100%;justify-content:center;max-width:956px}:host .chat-suggestions--button-mode{justify-content:flex-start}:host .chat-suggestions--button-mode .chat-suggestions__items{padding-top:32px}:host .chat-suggestions--one-col{padding-left:0;grid-template-columns:repeat(1,300px)}:host .chat-suggestions--one-col .chat-suggestions__items{grid-template-columns:repeat(1,300px)}:host .chat-suggestions--two-cols{padding-left:0;grid-template-columns:repeat(2,300px)}:host .chat-suggestions--two-cols .chat-suggestions__items{grid-template-columns:repeat(2,300px)}:host .chat-suggestions--three-cols{padding-left:0;grid-template-columns:repeat(3,300px)}:host .chat-suggestions--three-cols .chat-suggestions__container{padding-left:0}:host .chat-suggestions--three-cols .chat-suggestions__items{grid-template-columns:repeat(3,300px)}:host .chat-suggestions__container{display:flex;position:relative;width:auto;margin-top:12px;padding:0 16px}:host .chat-suggestions__container__button{z-index:3;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box;border-radius:2em;border:1.5px solid transparent}:host .chat-suggestions__container__button::ng-deep button{background:#fff;border-radius:24px;color:#4646ce;border:none;cursor:pointer}:host .chat-suggestions__container .chat-suggestions__items{display:none;position:absolute;width:100%;bottom:0;left:0;padding-bottom:56px;z-index:2}:host .chat-suggestions__container--opened{width:100%}:host .chat-suggestions__container--opened .chat-suggestions__container__button::ng-deep button{color:#4646ce;background:#f2f2fb}:host .chat-suggestions__container--opened .chat-suggestions__items{display:grid;align-items:center;justify-content:center}:host .chat-suggestions__items{padding:0 16px;display:grid;gap:28px;grid-auto-rows:minmax(86px,auto);background:#ffffffb3}:host .chat-suggestions__items__item{display:inline-flex;min-height:86px;width:300px;align-items:center;justify-content:center;text-align:center;padding:16px;border-radius:8px;background:#f2f2fb;box-shadow:0 1px 2px #00000026;font-size:14px;line-height:24px;color:#25258c}:host .chat-suggestions__items__item:hover{cursor:pointer;background:#eaeaff}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.DrButtonComponent, selector: "dr-button", inputs: ["theme", "icon", "iconColor", "iconSize", "iconAfter", "iconAfterColor", "iconAfterSize", "disabled", "isLoading", "isActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
103
103
|
}
|
|
104
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DrChatSuggestionsComponent, decorators: [{
|
|
105
105
|
type: Component,
|
|
106
|
-
args: [{ selector: 'dr-chat-suggestions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chat-suggestions\" #suggestionsContainer\n [ngClass]=\"{'chat-suggestions--three-cols': colsCount === 3,\n 'chat-suggestions--two-cols': colsCount === 2,\n 'chat-suggestions--one-col': colsCount === 1,\n 'chat-suggestions--button-mode': buttonMode }\">\n <ng-container *ngIf=\"buttonMode; else suggestionCards\">\n <div class=\"chat-suggestions__container\"\n [class.chat-suggestions__container--opened]=\"isSuggestedMenuOpen\"\n *ngIf=\"visibleValues.length\">\n <dr-button theme=\"
|
|
106
|
+
args: [{ selector: 'dr-chat-suggestions', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"chat-suggestions\" #suggestionsContainer\n [ngClass]=\"{'chat-suggestions--three-cols': colsCount === 3,\n 'chat-suggestions--two-cols': colsCount === 2,\n 'chat-suggestions--one-col': colsCount === 1,\n 'chat-suggestions--button-mode': buttonMode }\">\n <ng-container *ngIf=\"buttonMode; else suggestionCards\">\n <div class=\"chat-suggestions__container\"\n [class.chat-suggestions__container--opened]=\"isSuggestedMenuOpen\"\n *ngIf=\"visibleValues.length\">\n <dr-button theme=\"secondary\" class=\"chat-suggestions__container__button\" (click)=\"toggleSuggestedMenu()\">\n Suggested chats\n </dr-button>\n <ng-container *ngTemplateOutlet=\"suggestionCards\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #suggestionCards>\n <div class=\"chat-suggestions__items\"\n [ngClass]=\"{'chat-suggestions__items--three-cols': colsCount === 3,\n 'chat-suggestions__items--two-cols': colsCount === 2,\n 'chat-suggestions__items--one-col': colsCount === 1 }\">\n <div *ngFor=\"let item of visibleValues\"\n class=\"chat-suggestions__items__item\" (click)=\"onItemClick(item)\">\n {{ item }}\n </div>\n </div>\n</ng-template>\n", styles: [":host{display:flex;align-items:flex-start;justify-content:center}:host .chat-suggestions{display:flex;width:100%;justify-content:center;max-width:956px}:host .chat-suggestions--button-mode{justify-content:flex-start}:host .chat-suggestions--button-mode .chat-suggestions__items{padding-top:32px}:host .chat-suggestions--one-col{padding-left:0;grid-template-columns:repeat(1,300px)}:host .chat-suggestions--one-col .chat-suggestions__items{grid-template-columns:repeat(1,300px)}:host .chat-suggestions--two-cols{padding-left:0;grid-template-columns:repeat(2,300px)}:host .chat-suggestions--two-cols .chat-suggestions__items{grid-template-columns:repeat(2,300px)}:host .chat-suggestions--three-cols{padding-left:0;grid-template-columns:repeat(3,300px)}:host .chat-suggestions--three-cols .chat-suggestions__container{padding-left:0}:host .chat-suggestions--three-cols .chat-suggestions__items{grid-template-columns:repeat(3,300px)}:host .chat-suggestions__container{display:flex;position:relative;width:auto;margin-top:12px;padding:0 16px}:host .chat-suggestions__container__button{z-index:3;background:linear-gradient(-90deg,#6969ff,#4eb7df) border-box;border-radius:2em;border:1.5px solid transparent}:host .chat-suggestions__container__button::ng-deep button{background:#fff;border-radius:24px;color:#4646ce;border:none;cursor:pointer}:host .chat-suggestions__container .chat-suggestions__items{display:none;position:absolute;width:100%;bottom:0;left:0;padding-bottom:56px;z-index:2}:host .chat-suggestions__container--opened{width:100%}:host .chat-suggestions__container--opened .chat-suggestions__container__button::ng-deep button{color:#4646ce;background:#f2f2fb}:host .chat-suggestions__container--opened .chat-suggestions__items{display:grid;align-items:center;justify-content:center}:host .chat-suggestions__items{padding:0 16px;display:grid;gap:28px;grid-auto-rows:minmax(86px,auto);background:#ffffffb3}:host .chat-suggestions__items__item{display:inline-flex;min-height:86px;width:300px;align-items:center;justify-content:center;text-align:center;padding:16px;border-radius:8px;background:#f2f2fb;box-shadow:0 1px 2px #00000026;font-size:14px;line-height:24px;color:#25258c}:host .chat-suggestions__items__item:hover{cursor:pointer;background:#eaeaff}\n"] }]
|
|
107
107
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { values: [{
|
|
108
108
|
type: Input
|
|
109
109
|
}], fullScreen: [{
|
|
@@ -118,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
118
118
|
type: ViewChild,
|
|
119
119
|
args: ['suggestionsContainer', { static: false }]
|
|
120
120
|
}] } });
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1zdWdnZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtc3VnZ2VzdGlvbnMvY2hhdC1zdWdnZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtc3VnZ2VzdGlvbnMvY2hhdC1zdWdnZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQVcsVUFBVSxFQUFFLFlBQVksRUFBZ0IsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxHQUMxRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRM0MsTUFBTSxPQUFPLDBCQUEwQjtJQXVCbkMsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTTtRQUNuQixZQUFZLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBT0QsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FB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QVM7K0JBQ0kscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07d0dBVXRDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBT0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRTZDLG1CQUFtQjtzQkFBdEUsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEclNoYXJlZFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZHItc2hhcmVkLXV0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1jaGF0LXN1Z2dlc3Rpb25zJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoYXQtc3VnZ2VzdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtc3VnZ2VzdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRHJDaGF0U3VnZ2VzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBfbm9uSGlkZGVuVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHZpc2libGVWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgaXNTdWdnZXN0ZWRNZW51T3BlbiA9IGZhbHNlO1xuICAgIGNvbHNDb3VudCA9IDE7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBASW5wdXQoKSB2YWx1ZXM6IHN0cmluZyBbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGZ1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBidXR0b25Nb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgdG8gY2hlY2sgaXMgc2VuZCBtZXNzYWdlIGZ1bmN0aW9uIGF2YWlsYWJsZVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgd2FpdEZvclJlcGx5ID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc3VnZ2VzdGlvblNlbGVjdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N1Z2dlc3Rpb25zQ29udGFpbmVyJywge3N0YXRpYzogZmFsc2V9KSBzdWdnZXN0aW9uQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IGhpZGRlblZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhaUNoYXRTdWdnZXN0aW9ucycpKSB8fCBbXTtcbiAgICB9XG4gICAgc2V0IGhpZGRlblZhbHVlcyh2YWx1ZXMpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FpQ2hhdFN1Z2dlc3Rpb25zJywgSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuXG4gICAgb25SZXNpemUkOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT47XG5cbiAgICBjb2xXaWR0aCA9IDMwMDtcbiAgICBjb2xHYXAgPSAyODtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZSQgPSBEclNoYXJlZFV0aWxzLmZyb21SZXNpemVPYnNlcnZlcih0aGlzLnN1Z2dlc3Rpb25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLm9uUmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2xzQ291bnQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2xzQ291bnQoKTtcbiAgICB9XG5cbiAgICBvbkl0ZW1DbGljayhpdGVtOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMud2FpdEZvclJlcGx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1N1Z2dlc3RlZE1lbnVPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvblNlbGVjdC5lbWl0KGl0ZW0pO1xuICAgICAgICB0aGlzLmhpZGRlblZhbHVlcyA9IFsuLi50aGlzLmhpZGRlblZhbHVlcywgaXRlbV07XG4gICAgICAgIHRoaXMuZmlsdGVyVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBoaWRkZW5WYWx1ZXMgPSB0aGlzLmhpZGRlblZhbHVlcztcbiAgICAgICAgdGhpcy5fbm9uSGlkZGVuVmFsdWVzID0gXy5maWx0ZXIodGhpcy52YWx1ZXMsIHZhbCA9PiAhaGlkZGVuVmFsdWVzLmluY2x1ZGVzKHZhbCkpO1xuICAgICAgICB0aGlzLmZpbGxWaXNpYmxlVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgZmlsbFZpc2libGVWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IG1heEl0ZW1zQ291bnQgPSB0aGlzLmZ1bGxTY3JlZW4gPyA2IDogMztcbiAgICAgICAgY29uc3Qgbm9uSGlkZGVuVmFsdWVzID0gXy5jbG9uZSh0aGlzLl9ub25IaWRkZW5WYWx1ZXMpO1xuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhJdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbm9uSGlkZGVuVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub25IaWRkZW5WYWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBub25IaWRkZW5WYWx1ZXMuc3BsaWNlKHJhbmRvbUluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNsZWFySGlkZGVuKCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWlDaGF0U3VnZ2VzdGlvbnMnLCBudWxsKTtcbiAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZUNvbHNDb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPj0gKHRoaXMuY29sV2lkdGggKiAzICsgdGhpcy5jb2xHYXAgKiAyKSkge1xuICAgICAgICAgICAgdGhpcy5jb2xzQ291bnQgPSAzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3VnZ2VzdGlvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPiAodGhpcy5jb2xXaWR0aCAqIDIgKyB0aGlzLmNvbEdhcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29sc0NvdW50ID0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29sc0NvdW50ID0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTdWdnZXN0ZWRNZW51KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU3VnZ2VzdGVkTWVudU9wZW4gPSAhdGhpcy5pc1N1Z2dlc3RlZE1lbnVPcGVuO1xuICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RlZE1lbnVPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxWaXNpYmxlVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNoYXQtc3VnZ2VzdGlvbnNcIiAjc3VnZ2VzdGlvbnNDb250YWluZXJcbiAgICAgW25nQ2xhc3NdPVwieydjaGF0LXN1Z2dlc3Rpb25zLS10aHJlZS1jb2xzJzogY29sc0NvdW50ID09PSAzLFxuICAgICAgICAgICAgICAgICAnY2hhdC1zdWdnZXN0aW9ucy0tdHdvLWNvbHMnOiBjb2xzQ291bnQgPT09IDIsXG4gICAgICAgICAgICAgICAgICdjaGF0LXN1Z2dlc3Rpb25zLS1vbmUtY29sJzogY29sc0NvdW50ID09PSAxLFxuICAgICAgICAgICAgICAgICAnY2hhdC1zdWdnZXN0aW9ucy0tYnV0dG9uLW1vZGUnOiBidXR0b25Nb2RlIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTW9kZTsgZWxzZSBzdWdnZXN0aW9uQ2FyZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtc3VnZ2VzdGlvbnNfX2NvbnRhaW5lclwiXG4gICAgICAgICAgICAgW2NsYXNzLmNoYXQtc3VnZ2VzdGlvbnNfX2NvbnRhaW5lci0tb3BlbmVkXT1cImlzU3VnZ2VzdGVkTWVudU9wZW5cIlxuICAgICAgICAgICAgICpuZ0lmPVwidmlzaWJsZVZhbHVlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkci1idXR0b24gdGhlbWU9XCJnaG9zdFwiIGNsYXNzPVwiY2hhdC1zdWdnZXN0aW9uc19fY29udGFpbmVyX19idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU3VnZ2VzdGVkTWVudSgpXCI+XG4gICAgICAgICAgICAgICAgU3VnZ2VzdGVkIGNoYXRzXG4gICAgICAgICAgICA8L2RyLWJ1dHRvbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWdnZXN0aW9uQ2FyZHNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzdWdnZXN0aW9uQ2FyZHM+XG4gICAgPGRpdiBjbGFzcz1cImNoYXQtc3VnZ2VzdGlvbnNfX2l0ZW1zXCJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsnY2hhdC1zdWdnZXN0aW9uc19faXRlbXMtLXRocmVlLWNvbHMnOiBjb2xzQ291bnQgPT09IDMsXG4gICAgICAgICAgICAgICAgICAgICdjaGF0LXN1Z2dlc3Rpb25zX19pdGVtcy0tdHdvLWNvbHMnOiBjb2xzQ291bnQgPT09IDIsXG4gICAgICAgICAgICAgICAgICAgICdjaGF0LXN1Z2dlc3Rpb25zX19pdGVtcy0tb25lLWNvbCc6IGNvbHNDb3VudCA9PT0gMSB9XCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmlzaWJsZVZhbHVlc1wiXG4gICAgICAgICAgICAgY2xhc3M9XCJjaGF0LXN1Z2dlc3Rpb25zX19pdGVtc19faXRlbVwiIChjbGljayk9XCJvbkl0ZW1DbGljayhpdGVtKVwiPlxuICAgICAgICAgICAge3sgaXRlbSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1zdWdnZXN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtc3VnZ2VzdGlvbnMvY2hhdC1zdWdnZXN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1jaGF0L2RyLWNoYXQtc3VnZ2VzdGlvbnMvY2hhdC1zdWdnZXN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQVcsVUFBVSxFQUFFLFlBQVksRUFBZ0IsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxHQUMxRyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRM0MsTUFBTSxPQUFPLDBCQUEwQjtJQXVCbkMsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTTtRQUNuQixZQUFZLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBT0QsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FB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QVM7K0JBQ0kscUJBQXFCLG1CQUdkLHVCQUF1QixDQUFDLE1BQU07d0dBVXRDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBT0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRTZDLG1CQUFtQjtzQkFBdEUsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBEclNoYXJlZFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZHItc2hhcmVkLXV0aWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdkci1jaGF0LXN1Z2dlc3Rpb25zJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2NoYXQtc3VnZ2VzdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NoYXQtc3VnZ2VzdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRHJDaGF0U3VnZ2VzdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBfbm9uSGlkZGVuVmFsdWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHZpc2libGVWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgaXNTdWdnZXN0ZWRNZW51T3BlbiA9IGZhbHNlO1xuICAgIGNvbHNDb3VudCA9IDE7XG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBASW5wdXQoKSB2YWx1ZXM6IHN0cmluZyBbXSA9IFtdO1xuICAgIEBJbnB1dCgpIGZ1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBidXR0b25Nb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBQYXJhbWV0ZXIgdG8gY2hlY2sgaXMgc2VuZCBtZXNzYWdlIGZ1bmN0aW9uIGF2YWlsYWJsZVxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgQElucHV0KCkgd2FpdEZvclJlcGx5ID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgc3VnZ2VzdGlvblNlbGVjdDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N1Z2dlc3Rpb25zQ29udGFpbmVyJywge3N0YXRpYzogZmFsc2V9KSBzdWdnZXN0aW9uQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgZ2V0IGhpZGRlblZhbHVlcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhaUNoYXRTdWdnZXN0aW9ucycpKSB8fCBbXTtcbiAgICB9XG4gICAgc2V0IGhpZGRlblZhbHVlcyh2YWx1ZXMpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FpQ2hhdFN1Z2dlc3Rpb25zJywgSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuXG4gICAgb25SZXNpemUkOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnlbXT47XG5cbiAgICBjb2xXaWR0aCA9IDMwMDtcbiAgICBjb2xHYXAgPSAyODtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlcygpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5vblJlc2l6ZSQgPSBEclNoYXJlZFV0aWxzLmZyb21SZXNpemVPYnNlcnZlcih0aGlzLnN1Z2dlc3Rpb25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLm9uUmVzaXplJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2xzQ291bnQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2xzQ291bnQoKTtcbiAgICB9XG5cbiAgICBvbkl0ZW1DbGljayhpdGVtOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMud2FpdEZvclJlcGx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1N1Z2dlc3RlZE1lbnVPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvblNlbGVjdC5lbWl0KGl0ZW0pO1xuICAgICAgICB0aGlzLmhpZGRlblZhbHVlcyA9IFsuLi50aGlzLmhpZGRlblZhbHVlcywgaXRlbV07XG4gICAgICAgIHRoaXMuZmlsdGVyVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBoaWRkZW5WYWx1ZXMgPSB0aGlzLmhpZGRlblZhbHVlcztcbiAgICAgICAgdGhpcy5fbm9uSGlkZGVuVmFsdWVzID0gXy5maWx0ZXIodGhpcy52YWx1ZXMsIHZhbCA9PiAhaGlkZGVuVmFsdWVzLmluY2x1ZGVzKHZhbCkpO1xuICAgICAgICB0aGlzLmZpbGxWaXNpYmxlVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgZmlsbFZpc2libGVWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IG1heEl0ZW1zQ291bnQgPSB0aGlzLmZ1bGxTY3JlZW4gPyA2IDogMztcbiAgICAgICAgY29uc3Qgbm9uSGlkZGVuVmFsdWVzID0gXy5jbG9uZSh0aGlzLl9ub25IaWRkZW5WYWx1ZXMpO1xuICAgICAgICB0aGlzLnZpc2libGVWYWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhJdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbm9uSGlkZGVuVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub25IaWRkZW5WYWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBub25IaWRkZW5WYWx1ZXMuc3BsaWNlKHJhbmRvbUluZGV4LCAxKVswXTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZVZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNsZWFySGlkZGVuKCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYWlDaGF0U3VnZ2VzdGlvbnMnLCBudWxsKTtcbiAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZUNvbHNDb3VudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPj0gKHRoaXMuY29sV2lkdGggKiAzICsgdGhpcy5jb2xHYXAgKiAyKSkge1xuICAgICAgICAgICAgdGhpcy5jb2xzQ291bnQgPSAzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3VnZ2VzdGlvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPiAodGhpcy5jb2xXaWR0aCAqIDIgKyB0aGlzLmNvbEdhcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29sc0NvdW50ID0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29sc0NvdW50ID0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTdWdnZXN0ZWRNZW51KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU3VnZ2VzdGVkTWVudU9wZW4gPSAhdGhpcy5pc1N1Z2dlc3RlZE1lbnVPcGVuO1xuICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RlZE1lbnVPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGxWaXNpYmxlVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNoYXQtc3VnZ2VzdGlvbnNcIiAjc3VnZ2VzdGlvbnNDb250YWluZXJcbiAgICAgW25nQ2xhc3NdPVwieydjaGF0LXN1Z2dlc3Rpb25zLS10aHJlZS1jb2xzJzogY29sc0NvdW50ID09PSAzLFxuICAgICAgICAgICAgICAgICAnY2hhdC1zdWdnZXN0aW9ucy0tdHdvLWNvbHMnOiBjb2xzQ291bnQgPT09IDIsXG4gICAgICAgICAgICAgICAgICdjaGF0LXN1Z2dlc3Rpb25zLS1vbmUtY29sJzogY29sc0NvdW50ID09PSAxLFxuICAgICAgICAgICAgICAgICAnY2hhdC1zdWdnZXN0aW9ucy0tYnV0dG9uLW1vZGUnOiBidXR0b25Nb2RlIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTW9kZTsgZWxzZSBzdWdnZXN0aW9uQ2FyZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXQtc3VnZ2VzdGlvbnNfX2NvbnRhaW5lclwiXG4gICAgICAgICAgICAgW2NsYXNzLmNoYXQtc3VnZ2VzdGlvbnNfX2NvbnRhaW5lci0tb3BlbmVkXT1cImlzU3VnZ2VzdGVkTWVudU9wZW5cIlxuICAgICAgICAgICAgICpuZ0lmPVwidmlzaWJsZVZhbHVlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkci1idXR0b24gdGhlbWU9XCJzZWNvbmRhcnlcIiBjbGFzcz1cImNoYXQtc3VnZ2VzdGlvbnNfX2NvbnRhaW5lcl9fYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVN1Z2dlc3RlZE1lbnUoKVwiPlxuICAgICAgICAgICAgICAgIFN1Z2dlc3RlZCBjaGF0c1xuICAgICAgICAgICAgPC9kci1idXR0b24+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VnZ2VzdGlvbkNhcmRzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc3VnZ2VzdGlvbkNhcmRzPlxuICAgIDxkaXYgY2xhc3M9XCJjaGF0LXN1Z2dlc3Rpb25zX19pdGVtc1wiXG4gICAgICAgICBbbmdDbGFzc109XCJ7J2NoYXQtc3VnZ2VzdGlvbnNfX2l0ZW1zLS10aHJlZS1jb2xzJzogY29sc0NvdW50ID09PSAzLFxuICAgICAgICAgICAgICAgICAgICAnY2hhdC1zdWdnZXN0aW9uc19faXRlbXMtLXR3by1jb2xzJzogY29sc0NvdW50ID09PSAyLFxuICAgICAgICAgICAgICAgICAgICAnY2hhdC1zdWdnZXN0aW9uc19faXRlbXMtLW9uZS1jb2wnOiBjb2xzQ291bnQgPT09IDEgfVwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpc2libGVWYWx1ZXNcIlxuICAgICAgICAgICAgIGNsYXNzPVwiY2hhdC1zdWdnZXN0aW9uc19faXRlbXNfX2l0ZW1cIiAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIj5cbiAgICAgICAgICAgIHt7IGl0ZW0gfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|