@copilotkitnext/angular 0.0.9-alpha.3 → 0.0.11
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/dist/esm2022/index.mjs +2 -70
- package/dist/esm2022/lib/agent.mjs +73 -0
- package/dist/esm2022/lib/chat-config.mjs +35 -0
- package/dist/esm2022/lib/chat-state.mjs +18 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +344 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +260 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +22 -0
- package/dist/esm2022/{components/chat/copilot-chat-assistant-message.component.mjs → lib/components/chat/copilot-chat-assistant-message.mjs} +216 -240
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +196 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +299 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +39 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +634 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +10 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +27 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +268 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +139 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +36 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +20 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +203 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +118 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +182 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +28 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +25 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +306 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +48 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +41 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +19 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +96 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +89 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +456 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +404 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat.mjs +167 -0
- package/dist/esm2022/lib/config.mjs +9 -0
- package/dist/esm2022/lib/copilotkit.mjs +124 -0
- package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +130 -0
- package/dist/esm2022/lib/directives/stick-to-bottom.mjs +170 -0
- package/dist/esm2022/lib/directives/tooltip.mjs +217 -0
- package/dist/esm2022/lib/human-in-the-loop.mjs +19 -0
- package/dist/esm2022/lib/render-tool-calls.mjs +131 -0
- package/dist/esm2022/lib/resize-observer.mjs +152 -0
- package/dist/esm2022/lib/scroll-position.mjs +124 -0
- package/dist/esm2022/lib/slots/copilot-slot.mjs +156 -0
- package/dist/esm2022/lib/slots/index.mjs +4 -0
- package/dist/esm2022/lib/slots/slot.types.mjs +3 -3
- package/dist/esm2022/lib/slots/slot.utils.mjs +19 -15
- package/dist/esm2022/lib/tools.mjs +31 -0
- package/dist/esm2022/lib/utils.mjs +3 -3
- package/dist/esm2022/public-api.mjs +47 -0
- package/dist/fesm2022/copilotkitnext-angular.mjs +5249 -8271
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/dist/index.d.ts +1 -55
- package/dist/lib/agent.d.ts +53 -0
- package/dist/{core/chat-configuration/chat-configuration.types.d.ts → lib/chat-config.d.ts} +4 -8
- package/dist/lib/chat-state.d.ts +10 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-buttons.d.ts +68 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-renderer.d.ts +26 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +178 -0
- package/dist/{components → lib/components}/chat/copilot-chat-assistant-message.types.d.ts +1 -1
- package/dist/{components/chat/copilot-chat-audio-recorder.component.d.ts → lib/components/chat/copilot-chat-audio-recorder.d.ts} +10 -10
- package/dist/lib/components/chat/copilot-chat-buttons.d.ts +65 -0
- package/dist/lib/components/chat/copilot-chat-input-defaults.d.ts +38 -0
- package/dist/lib/components/chat/copilot-chat-input.d.ts +133 -0
- package/dist/{components → lib/components}/chat/copilot-chat-input.types.d.ts +11 -11
- package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
- package/dist/{components/chat/copilot-chat-message-view.component.d.ts → lib/components/chat/copilot-chat-message-view.d.ts} +68 -36
- package/dist/{components → lib/components}/chat/copilot-chat-message-view.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
- package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +55 -0
- package/dist/lib/components/chat/copilot-chat-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-tools-menu.d.ts +20 -0
- package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +20 -0
- package/dist/lib/components/chat/copilot-chat-user-message-buttons.d.ts +35 -0
- package/dist/lib/components/chat/copilot-chat-user-message-renderer.d.ts +8 -0
- package/dist/lib/components/chat/copilot-chat-user-message-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-user-message.d.ts +55 -0
- package/dist/{components → lib/components}/chat/copilot-chat-user-message.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
- package/dist/{components/chat/copilot-chat-view-feather.component.d.ts → lib/components/chat/copilot-chat-view-feather.d.ts} +6 -6
- package/dist/{components/chat/copilot-chat-view-handlers.service.d.ts → lib/components/chat/copilot-chat-view-handlers.d.ts} +3 -3
- package/dist/lib/components/chat/copilot-chat-view-input-container.d.ts +23 -0
- package/dist/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.d.ts +16 -0
- package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +114 -0
- package/dist/lib/components/chat/copilot-chat-view.d.ts +239 -0
- package/dist/{components → lib/components}/chat/copilot-chat-view.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat.d.ts +67 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/copilotkit.d.ts +29 -0
- package/dist/{directives/copilotkit-agent-context.directive.d.ts → lib/directives/copilotkit-agent-context.d.ts} +5 -5
- package/dist/lib/directives/stick-to-bottom.d.ts +62 -0
- package/dist/lib/directives/tooltip.d.ts +33 -0
- package/dist/lib/human-in-the-loop.d.ts +13 -0
- package/dist/lib/render-tool-calls.d.ts +75 -0
- package/dist/{services/resize-observer.service.d.ts → lib/resize-observer.d.ts} +2 -2
- package/dist/{services/scroll-position.service.d.ts → lib/scroll-position.d.ts} +6 -6
- package/dist/lib/slots/copilot-slot.d.ts +34 -0
- package/dist/lib/slots/index.d.ts +3 -0
- package/dist/lib/slots/slot.types.d.ts +1 -1
- package/dist/lib/slots/slot.utils.d.ts +6 -4
- package/dist/lib/tools.d.ts +63 -0
- package/dist/lib/utils.d.ts +1 -1
- package/dist/public-api.d.ts +46 -0
- package/dist/styles.css +0 -69
- package/package.json +5 -5
- package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +0 -75
- package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +0 -31
- package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +0 -132
- package/dist/components/chat/copilot-chat-buttons.component.d.ts +0 -66
- package/dist/components/chat/copilot-chat-input-defaults.d.ts +0 -37
- package/dist/components/chat/copilot-chat-input.component.d.ts +0 -133
- package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +0 -15
- package/dist/components/chat/copilot-chat-textarea.component.d.ts +0 -45
- package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +0 -35
- package/dist/components/chat/copilot-chat-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +0 -20
- package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +0 -23
- package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +0 -39
- package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +0 -9
- package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-user-message.component.d.ts +0 -55
- package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +0 -15
- package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +0 -23
- package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +0 -17
- package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +0 -84
- package/dist/components/chat/copilot-chat-view.component.d.ts +0 -205
- package/dist/components/chat/copilot-chat.component.d.ts +0 -36
- package/dist/components/copilotkit-tool-render.component.d.ts +0 -25
- package/dist/core/chat-configuration/chat-configuration.providers.d.ts +0 -54
- package/dist/core/chat-configuration/chat-configuration.service.d.ts +0 -75
- package/dist/core/copilotkit.providers.d.ts +0 -13
- package/dist/core/copilotkit.service.d.ts +0 -119
- package/dist/core/copilotkit.types.d.ts +0 -81
- package/dist/directives/copilotkit-agent.directive.d.ts +0 -106
- package/dist/directives/copilotkit-chat-config.directive.d.ts +0 -84
- package/dist/directives/copilotkit-config.directive.d.ts +0 -44
- package/dist/directives/copilotkit-frontend-tool.directive.d.ts +0 -25
- package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +0 -124
- package/dist/directives/stick-to-bottom.directive.d.ts +0 -62
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +0 -384
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +0 -286
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +0 -27
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +0 -202
- package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +0 -321
- package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +0 -38
- package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +0 -666
- package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +0 -10
- package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +0 -45
- package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +0 -296
- package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +0 -188
- package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +0 -222
- package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +0 -25
- package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +0 -199
- package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +0 -137
- package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +0 -207
- package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +0 -35
- package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +0 -34
- package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +0 -341
- package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +0 -52
- package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +0 -55
- package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +0 -19
- package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +0 -110
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +0 -93
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +0 -443
- package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +0 -479
- package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +0 -220
- package/dist/esm2022/components/copilotkit-tool-render.component.mjs +0 -150
- package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +0 -65
- package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +0 -145
- package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +0 -26
- package/dist/esm2022/core/copilotkit.providers.mjs +0 -34
- package/dist/esm2022/core/copilotkit.service.mjs +0 -411
- package/dist/esm2022/core/copilotkit.types.mjs +0 -13
- package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +0 -130
- package/dist/esm2022/directives/copilotkit-agent.directive.mjs +0 -221
- package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +0 -218
- package/dist/esm2022/directives/copilotkit-config.directive.mjs +0 -94
- package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +0 -128
- package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +0 -265
- package/dist/esm2022/directives/stick-to-bottom.directive.mjs +0 -181
- package/dist/esm2022/lib/directives/tooltip.directive.mjs +0 -211
- package/dist/esm2022/lib/slots/copilot-slot.component.mjs +0 -154
- package/dist/esm2022/services/resize-observer.service.mjs +0 -152
- package/dist/esm2022/services/scroll-position.service.mjs +0 -124
- package/dist/esm2022/types/frontend-tool.mjs +0 -2
- package/dist/esm2022/types/human-in-the-loop.mjs +0 -2
- package/dist/esm2022/utils/agent-context.utils.mjs +0 -114
- package/dist/esm2022/utils/agent.utils.mjs +0 -212
- package/dist/esm2022/utils/chat-config.utils.mjs +0 -186
- package/dist/esm2022/utils/copilotkit.utils.mjs +0 -20
- package/dist/esm2022/utils/frontend-tool.utils.mjs +0 -224
- package/dist/esm2022/utils/human-in-the-loop.utils.mjs +0 -293
- package/dist/lib/directives/tooltip.directive.d.ts +0 -33
- package/dist/lib/slots/copilot-slot.component.d.ts +0 -34
- package/dist/types/frontend-tool.d.ts +0 -37
- package/dist/types/human-in-the-loop.d.ts +0 -44
- package/dist/utils/agent-context.utils.d.ts +0 -75
- package/dist/utils/agent.utils.d.ts +0 -108
- package/dist/utils/chat-config.utils.d.ts +0 -166
- package/dist/utils/copilotkit.utils.d.ts +0 -16
- package/dist/utils/frontend-tool.utils.d.ts +0 -119
- package/dist/utils/human-in-the-loop.utils.d.ts +0 -92
|
@@ -1,479 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ContentChild, ViewChild, ElementRef, ChangeDetectionStrategy, ViewEncapsulation, signal, computed, effect } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { CopilotSlotComponent } from '../../lib/slots/copilot-slot.component';
|
|
4
|
-
import { CopilotChatMessageViewComponent } from './copilot-chat-message-view.component';
|
|
5
|
-
import { CopilotChatInputComponent } from './copilot-chat-input.component';
|
|
6
|
-
import { CopilotChatViewScrollViewComponent } from './copilot-chat-view-scroll-view.component';
|
|
7
|
-
import { CopilotChatViewScrollToBottomButtonComponent } from './copilot-chat-view-scroll-to-bottom-button.component';
|
|
8
|
-
import { CopilotChatViewFeatherComponent } from './copilot-chat-view-feather.component';
|
|
9
|
-
import { CopilotChatViewInputContainerComponent } from './copilot-chat-view-input-container.component';
|
|
10
|
-
import { CopilotChatViewDisclaimerComponent } from './copilot-chat-view-disclaimer.component';
|
|
11
|
-
import { cn } from '../../lib/utils';
|
|
12
|
-
import { ResizeObserverService } from '../../services/resize-observer.service';
|
|
13
|
-
import { CopilotChatViewHandlersService } from './copilot-chat-view-handlers.service';
|
|
14
|
-
import { Subject } from 'rxjs';
|
|
15
|
-
import { takeUntil } from 'rxjs/operators';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "../../services/resize-observer.service";
|
|
18
|
-
import * as i2 from "./copilot-chat-view-handlers.service";
|
|
19
|
-
import * as i3 from "@angular/common";
|
|
20
|
-
/**
|
|
21
|
-
* CopilotChatView component - Angular port of the React component.
|
|
22
|
-
* A complete chat interface with message feed and input components.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```html
|
|
26
|
-
* <copilot-chat-view
|
|
27
|
-
* [messages]="messages"
|
|
28
|
-
* [autoScroll]="true"
|
|
29
|
-
* [messageViewProps]="{ assistantMessage: { onThumbsUp: handleThumbsUp } }">
|
|
30
|
-
* </copilot-chat-view>
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
export class CopilotChatViewComponent {
|
|
34
|
-
resizeObserverService;
|
|
35
|
-
cdr;
|
|
36
|
-
handlers;
|
|
37
|
-
// Core inputs matching React props
|
|
38
|
-
messages = [];
|
|
39
|
-
autoScroll = true;
|
|
40
|
-
showCursor = false;
|
|
41
|
-
// MessageView slot inputs
|
|
42
|
-
messageViewComponent;
|
|
43
|
-
messageViewTemplate;
|
|
44
|
-
messageViewClass;
|
|
45
|
-
// ScrollView slot inputs
|
|
46
|
-
scrollViewComponent;
|
|
47
|
-
scrollViewTemplate;
|
|
48
|
-
scrollViewClass;
|
|
49
|
-
// ScrollToBottomButton slot inputs
|
|
50
|
-
scrollToBottomButtonComponent;
|
|
51
|
-
scrollToBottomButtonTemplate;
|
|
52
|
-
scrollToBottomButtonClass;
|
|
53
|
-
// Input slot inputs
|
|
54
|
-
inputComponent;
|
|
55
|
-
inputTemplate;
|
|
56
|
-
// InputContainer slot inputs
|
|
57
|
-
inputContainerComponent;
|
|
58
|
-
inputContainerTemplate;
|
|
59
|
-
inputContainerClass;
|
|
60
|
-
// Feather slot inputs
|
|
61
|
-
featherComponent;
|
|
62
|
-
featherTemplate;
|
|
63
|
-
featherClass;
|
|
64
|
-
// Disclaimer slot inputs
|
|
65
|
-
disclaimerComponent;
|
|
66
|
-
disclaimerTemplate;
|
|
67
|
-
disclaimerClass;
|
|
68
|
-
disclaimerText;
|
|
69
|
-
// Custom layout template (render prop pattern)
|
|
70
|
-
customLayoutTemplate;
|
|
71
|
-
// Named template slots for deep customization
|
|
72
|
-
sendButtonTemplate;
|
|
73
|
-
toolbarTemplate;
|
|
74
|
-
textAreaTemplate;
|
|
75
|
-
audioRecorderTemplate;
|
|
76
|
-
assistantMessageMarkdownRendererTemplate;
|
|
77
|
-
thumbsUpButtonTemplate;
|
|
78
|
-
thumbsDownButtonTemplate;
|
|
79
|
-
readAloudButtonTemplate;
|
|
80
|
-
regenerateButtonTemplate;
|
|
81
|
-
// Output events for assistant message actions (bubbled from child components)
|
|
82
|
-
assistantMessageThumbsUp = new EventEmitter();
|
|
83
|
-
assistantMessageThumbsDown = new EventEmitter();
|
|
84
|
-
assistantMessageReadAloud = new EventEmitter();
|
|
85
|
-
assistantMessageRegenerate = new EventEmitter();
|
|
86
|
-
// Output events for user message actions (if applicable)
|
|
87
|
-
userMessageCopy = new EventEmitter();
|
|
88
|
-
userMessageEdit = new EventEmitter();
|
|
89
|
-
// ViewChild references
|
|
90
|
-
inputContainerSlotRef;
|
|
91
|
-
// Default components for slots
|
|
92
|
-
defaultScrollViewComponent = CopilotChatViewScrollViewComponent;
|
|
93
|
-
defaultScrollToBottomButtonComponent = CopilotChatViewScrollToBottomButtonComponent;
|
|
94
|
-
defaultInputContainerComponent = CopilotChatViewInputContainerComponent;
|
|
95
|
-
defaultFeatherComponent = CopilotChatViewFeatherComponent;
|
|
96
|
-
defaultDisclaimerComponent = CopilotChatViewDisclaimerComponent;
|
|
97
|
-
// Signals for reactive state
|
|
98
|
-
messagesSignal = signal([]);
|
|
99
|
-
autoScrollSignal = signal(true);
|
|
100
|
-
showCursorSignal = signal(false);
|
|
101
|
-
disclaimerTextSignal = signal(undefined);
|
|
102
|
-
disclaimerClassSignal = signal(undefined);
|
|
103
|
-
inputContainerHeight = signal(0);
|
|
104
|
-
isResizing = signal(false);
|
|
105
|
-
contentPaddingBottom = computed(() => this.inputContainerHeight() + 32);
|
|
106
|
-
// Computed signals
|
|
107
|
-
computedClass = computed(() => cn('relative h-full'));
|
|
108
|
-
// Slot resolution computed signals
|
|
109
|
-
messageViewSlot = computed(() => this.messageViewTemplate || this.messageViewComponent);
|
|
110
|
-
scrollViewSlot = computed(() => this.scrollViewTemplate || this.scrollViewComponent);
|
|
111
|
-
scrollToBottomButtonSlot = computed(() => this.scrollToBottomButtonTemplate || this.scrollToBottomButtonComponent);
|
|
112
|
-
inputSlot = computed(() => this.inputTemplate || this.inputComponent);
|
|
113
|
-
inputContainerSlot = computed(() => this.inputContainerTemplate || this.inputContainerComponent);
|
|
114
|
-
featherSlot = computed(() => this.featherTemplate || this.featherComponent);
|
|
115
|
-
disclaimerSlot = computed(() => this.disclaimerTemplate || this.disclaimerComponent);
|
|
116
|
-
// Context objects for slots
|
|
117
|
-
scrollViewContext = computed(() => ({
|
|
118
|
-
autoScroll: this.autoScrollSignal(),
|
|
119
|
-
scrollToBottomButton: this.scrollToBottomButtonSlot(),
|
|
120
|
-
scrollToBottomButtonClass: this.scrollToBottomButtonClass,
|
|
121
|
-
inputContainerHeight: this.inputContainerHeight(),
|
|
122
|
-
isResizing: this.isResizing(),
|
|
123
|
-
messages: this.messagesSignal(),
|
|
124
|
-
messageView: this.messageViewSlot(),
|
|
125
|
-
messageViewClass: this.messageViewClass
|
|
126
|
-
}));
|
|
127
|
-
// Removed scrollViewPropsComputed - no longer needed
|
|
128
|
-
inputContainerContext = computed(() => ({
|
|
129
|
-
input: this.inputSlot(),
|
|
130
|
-
disclaimer: this.disclaimerSlot(),
|
|
131
|
-
disclaimerText: this.disclaimerTextSignal(),
|
|
132
|
-
disclaimerClass: this.disclaimerClassSignal(),
|
|
133
|
-
inputContainerClass: this.inputContainerClass
|
|
134
|
-
}));
|
|
135
|
-
// Removed inputContainerPropsComputed - no longer needed
|
|
136
|
-
// Layout context for custom templates (render prop pattern)
|
|
137
|
-
layoutContext = computed(() => ({
|
|
138
|
-
messageView: this.messageViewSlot(),
|
|
139
|
-
input: this.inputSlot(),
|
|
140
|
-
scrollView: this.scrollViewSlot(),
|
|
141
|
-
scrollToBottomButton: this.scrollToBottomButtonSlot(),
|
|
142
|
-
feather: this.featherSlot(),
|
|
143
|
-
inputContainer: this.inputContainerSlot(),
|
|
144
|
-
disclaimer: this.disclaimerSlot()
|
|
145
|
-
}));
|
|
146
|
-
destroy$ = new Subject();
|
|
147
|
-
resizeTimeoutRef;
|
|
148
|
-
constructor(resizeObserverService, cdr, handlers) {
|
|
149
|
-
this.resizeObserverService = resizeObserverService;
|
|
150
|
-
this.cdr = cdr;
|
|
151
|
-
this.handlers = handlers;
|
|
152
|
-
// Set up effect to handle resize state timeout
|
|
153
|
-
effect(() => {
|
|
154
|
-
const resizing = this.isResizing();
|
|
155
|
-
if (resizing && this.resizeTimeoutRef) {
|
|
156
|
-
clearTimeout(this.resizeTimeoutRef);
|
|
157
|
-
this.resizeTimeoutRef = undefined;
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
ngOnInit() {
|
|
162
|
-
// Initialize signals with input values
|
|
163
|
-
this.messagesSignal.set(this.messages);
|
|
164
|
-
this.autoScrollSignal.set(this.autoScroll);
|
|
165
|
-
this.showCursorSignal.set(this.showCursor);
|
|
166
|
-
this.disclaimerTextSignal.set(this.disclaimerText);
|
|
167
|
-
this.disclaimerClassSignal.set(this.disclaimerClass);
|
|
168
|
-
// Initialize handler availability in the view-scoped service
|
|
169
|
-
this.handlers.hasAssistantThumbsUpHandler.set(this.assistantMessageThumbsUp.observed);
|
|
170
|
-
this.handlers.hasAssistantThumbsDownHandler.set(this.assistantMessageThumbsDown.observed);
|
|
171
|
-
this.handlers.hasAssistantReadAloudHandler.set(this.assistantMessageReadAloud.observed);
|
|
172
|
-
this.handlers.hasAssistantRegenerateHandler.set(this.assistantMessageRegenerate.observed);
|
|
173
|
-
this.handlers.hasUserCopyHandler.set(this.userMessageCopy.observed);
|
|
174
|
-
this.handlers.hasUserEditHandler.set(this.userMessageEdit.observed);
|
|
175
|
-
}
|
|
176
|
-
ngOnChanges() {
|
|
177
|
-
// Update signals when inputs change
|
|
178
|
-
this.messagesSignal.set(this.messages);
|
|
179
|
-
this.autoScrollSignal.set(this.autoScroll);
|
|
180
|
-
this.showCursorSignal.set(this.showCursor);
|
|
181
|
-
this.disclaimerTextSignal.set(this.disclaimerText);
|
|
182
|
-
this.disclaimerClassSignal.set(this.disclaimerClass);
|
|
183
|
-
// Keep handler availability in sync
|
|
184
|
-
this.handlers.hasAssistantThumbsUpHandler.set(this.assistantMessageThumbsUp.observed);
|
|
185
|
-
this.handlers.hasAssistantThumbsDownHandler.set(this.assistantMessageThumbsDown.observed);
|
|
186
|
-
this.handlers.hasAssistantReadAloudHandler.set(this.assistantMessageReadAloud.observed);
|
|
187
|
-
this.handlers.hasAssistantRegenerateHandler.set(this.assistantMessageRegenerate.observed);
|
|
188
|
-
this.handlers.hasUserCopyHandler.set(this.userMessageCopy.observed);
|
|
189
|
-
this.handlers.hasUserEditHandler.set(this.userMessageEdit.observed);
|
|
190
|
-
}
|
|
191
|
-
ngAfterViewInit() {
|
|
192
|
-
// Don't set a default height - measure it dynamically
|
|
193
|
-
// Set up input container height monitoring
|
|
194
|
-
const measureAndObserve = () => {
|
|
195
|
-
if (!this.inputContainerSlotRef || !this.inputContainerSlotRef.nativeElement) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
// The slot ref points to the copilot-slot element
|
|
199
|
-
// We need to find the actual input container component inside it
|
|
200
|
-
const slotElement = this.inputContainerSlotRef.nativeElement;
|
|
201
|
-
const componentElement = slotElement.querySelector('copilot-chat-view-input-container');
|
|
202
|
-
if (!componentElement) {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
// Look for the absolute positioned div that contains the input
|
|
206
|
-
let innerDiv = componentElement.querySelector('div.absolute');
|
|
207
|
-
// If not found by class, try first child
|
|
208
|
-
if (!innerDiv) {
|
|
209
|
-
innerDiv = componentElement.firstElementChild;
|
|
210
|
-
}
|
|
211
|
-
if (!innerDiv) {
|
|
212
|
-
return false;
|
|
213
|
-
}
|
|
214
|
-
// Measure the actual height
|
|
215
|
-
const measuredHeight = innerDiv.offsetHeight;
|
|
216
|
-
if (measuredHeight === 0) {
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
// Success! Set the initial height
|
|
220
|
-
this.inputContainerHeight.set(measuredHeight);
|
|
221
|
-
this.cdr.detectChanges();
|
|
222
|
-
// Create an ElementRef wrapper for ResizeObserver
|
|
223
|
-
const innerDivRef = new ElementRef(innerDiv);
|
|
224
|
-
// Set up ResizeObserver to track changes
|
|
225
|
-
this.resizeObserverService.observeElement(innerDivRef, 0, 250)
|
|
226
|
-
.pipe(takeUntil(this.destroy$))
|
|
227
|
-
.subscribe(state => {
|
|
228
|
-
const newHeight = state.height;
|
|
229
|
-
if (newHeight !== this.inputContainerHeight() && newHeight > 0) {
|
|
230
|
-
this.inputContainerHeight.set(newHeight);
|
|
231
|
-
this.isResizing.set(true);
|
|
232
|
-
this.cdr.detectChanges();
|
|
233
|
-
// Clear existing timeout
|
|
234
|
-
if (this.resizeTimeoutRef) {
|
|
235
|
-
clearTimeout(this.resizeTimeoutRef);
|
|
236
|
-
}
|
|
237
|
-
// Set isResizing to false after a short delay
|
|
238
|
-
this.resizeTimeoutRef = window.setTimeout(() => {
|
|
239
|
-
this.isResizing.set(false);
|
|
240
|
-
this.resizeTimeoutRef = undefined;
|
|
241
|
-
this.cdr.detectChanges();
|
|
242
|
-
}, 250);
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
return true;
|
|
246
|
-
};
|
|
247
|
-
// Try to measure immediately
|
|
248
|
-
if (!measureAndObserve()) {
|
|
249
|
-
// If failed, retry with increasing delays
|
|
250
|
-
let attempts = 0;
|
|
251
|
-
const maxAttempts = 10;
|
|
252
|
-
const retry = () => {
|
|
253
|
-
attempts++;
|
|
254
|
-
if (measureAndObserve()) {
|
|
255
|
-
// Successfully measured
|
|
256
|
-
}
|
|
257
|
-
else if (attempts < maxAttempts) {
|
|
258
|
-
// Exponential backoff: 50ms, 100ms, 200ms, 400ms, etc.
|
|
259
|
-
const delay = 50 * Math.pow(2, Math.min(attempts - 1, 4));
|
|
260
|
-
setTimeout(retry, delay);
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
// Failed to measure after max attempts
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
// Start retry with first delay
|
|
267
|
-
setTimeout(retry, 50);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
ngOnDestroy() {
|
|
271
|
-
if (this.resizeTimeoutRef) {
|
|
272
|
-
clearTimeout(this.resizeTimeoutRef);
|
|
273
|
-
}
|
|
274
|
-
this.destroy$.next();
|
|
275
|
-
this.destroy$.complete();
|
|
276
|
-
}
|
|
277
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewComponent, deps: [{ token: i1.ResizeObserverService }, { token: i0.ChangeDetectorRef }, { token: i2.CopilotChatViewHandlersService }], target: i0.ɵɵFactoryTarget.Component });
|
|
278
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CopilotChatViewComponent, isStandalone: true, selector: "copilot-chat-view", inputs: { messages: "messages", autoScroll: "autoScroll", showCursor: "showCursor", messageViewComponent: "messageViewComponent", messageViewTemplate: "messageViewTemplate", messageViewClass: "messageViewClass", scrollViewComponent: "scrollViewComponent", scrollViewTemplate: "scrollViewTemplate", scrollViewClass: "scrollViewClass", scrollToBottomButtonComponent: "scrollToBottomButtonComponent", scrollToBottomButtonTemplate: "scrollToBottomButtonTemplate", scrollToBottomButtonClass: "scrollToBottomButtonClass", inputComponent: "inputComponent", inputTemplate: "inputTemplate", inputContainerComponent: "inputContainerComponent", inputContainerTemplate: "inputContainerTemplate", inputContainerClass: "inputContainerClass", featherComponent: "featherComponent", featherTemplate: "featherTemplate", featherClass: "featherClass", disclaimerComponent: "disclaimerComponent", disclaimerTemplate: "disclaimerTemplate", disclaimerClass: "disclaimerClass", disclaimerText: "disclaimerText" }, outputs: { assistantMessageThumbsUp: "assistantMessageThumbsUp", assistantMessageThumbsDown: "assistantMessageThumbsDown", assistantMessageReadAloud: "assistantMessageReadAloud", assistantMessageRegenerate: "assistantMessageRegenerate", userMessageCopy: "userMessageCopy", userMessageEdit: "userMessageEdit" }, providers: [ResizeObserverService, CopilotChatViewHandlersService], queries: [{ propertyName: "customLayoutTemplate", first: true, predicate: ["customLayout"], descendants: true }, { propertyName: "sendButtonTemplate", first: true, predicate: ["sendButton"], descendants: true }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "textAreaTemplate", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "audioRecorderTemplate", first: true, predicate: ["audioRecorder"], descendants: true }, { propertyName: "assistantMessageMarkdownRendererTemplate", first: true, predicate: ["assistantMessageMarkdownRenderer"], descendants: true }, { propertyName: "thumbsUpButtonTemplate", first: true, predicate: ["thumbsUpButton"], descendants: true }, { propertyName: "thumbsDownButtonTemplate", first: true, predicate: ["thumbsDownButton"], descendants: true }, { propertyName: "readAloudButtonTemplate", first: true, predicate: ["readAloudButton"], descendants: true }, { propertyName: "regenerateButtonTemplate", first: true, predicate: ["regenerateButton"], descendants: true }], viewQueries: [{ propertyName: "inputContainerSlotRef", first: true, predicate: ["inputContainerSlotRef"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
|
|
279
|
-
<!-- Custom layout template support (render prop pattern) -->
|
|
280
|
-
@if (customLayoutTemplate) {
|
|
281
|
-
<ng-container *ngTemplateOutlet="customLayoutTemplate; context: layoutContext()"></ng-container>
|
|
282
|
-
} @else {
|
|
283
|
-
<!-- Default layout - exact React DOM structure -->
|
|
284
|
-
<div [class]="computedClass()">
|
|
285
|
-
<!-- ScrollView -->
|
|
286
|
-
<copilot-chat-view-scroll-view
|
|
287
|
-
[autoScroll]="autoScrollSignal()"
|
|
288
|
-
[inputContainerHeight]="inputContainerHeight()"
|
|
289
|
-
[isResizing]="isResizing()"
|
|
290
|
-
[messages]="messagesSignal()"
|
|
291
|
-
[messageView]="messageViewSlot()"
|
|
292
|
-
[messageViewClass]="messageViewClass"
|
|
293
|
-
[scrollToBottomButton]="scrollToBottomButtonSlot()"
|
|
294
|
-
[scrollToBottomButtonClass]="scrollToBottomButtonClass"
|
|
295
|
-
[showCursor]="showCursorSignal()"
|
|
296
|
-
(assistantMessageThumbsUp)="assistantMessageThumbsUp.emit($event)"
|
|
297
|
-
(assistantMessageThumbsDown)="assistantMessageThumbsDown.emit($event)"
|
|
298
|
-
(assistantMessageReadAloud)="assistantMessageReadAloud.emit($event)"
|
|
299
|
-
(assistantMessageRegenerate)="assistantMessageRegenerate.emit($event)"
|
|
300
|
-
(userMessageCopy)="userMessageCopy.emit($event)"
|
|
301
|
-
(userMessageEdit)="userMessageEdit.emit($event)">
|
|
302
|
-
</copilot-chat-view-scroll-view>
|
|
303
|
-
|
|
304
|
-
<!-- Feather effect -->
|
|
305
|
-
<copilot-slot
|
|
306
|
-
[slot]="featherSlot()"
|
|
307
|
-
[context]="{ inputClass: featherClass }"
|
|
308
|
-
[defaultComponent]="defaultFeatherComponent">
|
|
309
|
-
</copilot-slot>
|
|
310
|
-
|
|
311
|
-
<!-- Input container -->
|
|
312
|
-
<copilot-slot
|
|
313
|
-
#inputContainerSlotRef
|
|
314
|
-
[slot]="inputContainerSlot()"
|
|
315
|
-
[context]="inputContainerContext()"
|
|
316
|
-
[defaultComponent]="defaultInputContainerComponent">
|
|
317
|
-
</copilot-slot>
|
|
318
|
-
</div>
|
|
319
|
-
}
|
|
320
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CopilotSlotComponent, selector: "copilot-slot", inputs: ["slot", "context", "defaultComponent", "outputs"] }, { kind: "component", type: CopilotChatViewScrollViewComponent, selector: "copilot-chat-view-scroll-view", inputs: ["autoScroll", "inputContainerHeight", "isResizing", "inputClass", "messages", "messageView", "messageViewClass", "showCursor", "scrollToBottomButton", "scrollToBottomButtonClass"], outputs: ["assistantMessageThumbsUp", "assistantMessageThumbsDown", "assistantMessageReadAloud", "assistantMessageRegenerate", "userMessageCopy", "userMessageEdit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
321
|
-
}
|
|
322
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatViewComponent, decorators: [{
|
|
323
|
-
type: Component,
|
|
324
|
-
args: [{
|
|
325
|
-
selector: 'copilot-chat-view',
|
|
326
|
-
standalone: true,
|
|
327
|
-
imports: [
|
|
328
|
-
CommonModule,
|
|
329
|
-
CopilotSlotComponent,
|
|
330
|
-
CopilotChatMessageViewComponent,
|
|
331
|
-
CopilotChatInputComponent,
|
|
332
|
-
CopilotChatViewScrollViewComponent,
|
|
333
|
-
CopilotChatViewScrollToBottomButtonComponent,
|
|
334
|
-
CopilotChatViewFeatherComponent,
|
|
335
|
-
CopilotChatViewInputContainerComponent,
|
|
336
|
-
CopilotChatViewDisclaimerComponent
|
|
337
|
-
],
|
|
338
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
339
|
-
encapsulation: ViewEncapsulation.None,
|
|
340
|
-
providers: [ResizeObserverService, CopilotChatViewHandlersService],
|
|
341
|
-
template: `
|
|
342
|
-
<!-- Custom layout template support (render prop pattern) -->
|
|
343
|
-
@if (customLayoutTemplate) {
|
|
344
|
-
<ng-container *ngTemplateOutlet="customLayoutTemplate; context: layoutContext()"></ng-container>
|
|
345
|
-
} @else {
|
|
346
|
-
<!-- Default layout - exact React DOM structure -->
|
|
347
|
-
<div [class]="computedClass()">
|
|
348
|
-
<!-- ScrollView -->
|
|
349
|
-
<copilot-chat-view-scroll-view
|
|
350
|
-
[autoScroll]="autoScrollSignal()"
|
|
351
|
-
[inputContainerHeight]="inputContainerHeight()"
|
|
352
|
-
[isResizing]="isResizing()"
|
|
353
|
-
[messages]="messagesSignal()"
|
|
354
|
-
[messageView]="messageViewSlot()"
|
|
355
|
-
[messageViewClass]="messageViewClass"
|
|
356
|
-
[scrollToBottomButton]="scrollToBottomButtonSlot()"
|
|
357
|
-
[scrollToBottomButtonClass]="scrollToBottomButtonClass"
|
|
358
|
-
[showCursor]="showCursorSignal()"
|
|
359
|
-
(assistantMessageThumbsUp)="assistantMessageThumbsUp.emit($event)"
|
|
360
|
-
(assistantMessageThumbsDown)="assistantMessageThumbsDown.emit($event)"
|
|
361
|
-
(assistantMessageReadAloud)="assistantMessageReadAloud.emit($event)"
|
|
362
|
-
(assistantMessageRegenerate)="assistantMessageRegenerate.emit($event)"
|
|
363
|
-
(userMessageCopy)="userMessageCopy.emit($event)"
|
|
364
|
-
(userMessageEdit)="userMessageEdit.emit($event)">
|
|
365
|
-
</copilot-chat-view-scroll-view>
|
|
366
|
-
|
|
367
|
-
<!-- Feather effect -->
|
|
368
|
-
<copilot-slot
|
|
369
|
-
[slot]="featherSlot()"
|
|
370
|
-
[context]="{ inputClass: featherClass }"
|
|
371
|
-
[defaultComponent]="defaultFeatherComponent">
|
|
372
|
-
</copilot-slot>
|
|
373
|
-
|
|
374
|
-
<!-- Input container -->
|
|
375
|
-
<copilot-slot
|
|
376
|
-
#inputContainerSlotRef
|
|
377
|
-
[slot]="inputContainerSlot()"
|
|
378
|
-
[context]="inputContainerContext()"
|
|
379
|
-
[defaultComponent]="defaultInputContainerComponent">
|
|
380
|
-
</copilot-slot>
|
|
381
|
-
</div>
|
|
382
|
-
}
|
|
383
|
-
`
|
|
384
|
-
}]
|
|
385
|
-
}], ctorParameters: () => [{ type: i1.ResizeObserverService }, { type: i0.ChangeDetectorRef }, { type: i2.CopilotChatViewHandlersService }], propDecorators: { messages: [{
|
|
386
|
-
type: Input
|
|
387
|
-
}], autoScroll: [{
|
|
388
|
-
type: Input
|
|
389
|
-
}], showCursor: [{
|
|
390
|
-
type: Input
|
|
391
|
-
}], messageViewComponent: [{
|
|
392
|
-
type: Input
|
|
393
|
-
}], messageViewTemplate: [{
|
|
394
|
-
type: Input
|
|
395
|
-
}], messageViewClass: [{
|
|
396
|
-
type: Input
|
|
397
|
-
}], scrollViewComponent: [{
|
|
398
|
-
type: Input
|
|
399
|
-
}], scrollViewTemplate: [{
|
|
400
|
-
type: Input
|
|
401
|
-
}], scrollViewClass: [{
|
|
402
|
-
type: Input
|
|
403
|
-
}], scrollToBottomButtonComponent: [{
|
|
404
|
-
type: Input
|
|
405
|
-
}], scrollToBottomButtonTemplate: [{
|
|
406
|
-
type: Input
|
|
407
|
-
}], scrollToBottomButtonClass: [{
|
|
408
|
-
type: Input
|
|
409
|
-
}], inputComponent: [{
|
|
410
|
-
type: Input
|
|
411
|
-
}], inputTemplate: [{
|
|
412
|
-
type: Input
|
|
413
|
-
}], inputContainerComponent: [{
|
|
414
|
-
type: Input
|
|
415
|
-
}], inputContainerTemplate: [{
|
|
416
|
-
type: Input
|
|
417
|
-
}], inputContainerClass: [{
|
|
418
|
-
type: Input
|
|
419
|
-
}], featherComponent: [{
|
|
420
|
-
type: Input
|
|
421
|
-
}], featherTemplate: [{
|
|
422
|
-
type: Input
|
|
423
|
-
}], featherClass: [{
|
|
424
|
-
type: Input
|
|
425
|
-
}], disclaimerComponent: [{
|
|
426
|
-
type: Input
|
|
427
|
-
}], disclaimerTemplate: [{
|
|
428
|
-
type: Input
|
|
429
|
-
}], disclaimerClass: [{
|
|
430
|
-
type: Input
|
|
431
|
-
}], disclaimerText: [{
|
|
432
|
-
type: Input
|
|
433
|
-
}], customLayoutTemplate: [{
|
|
434
|
-
type: ContentChild,
|
|
435
|
-
args: ['customLayout']
|
|
436
|
-
}], sendButtonTemplate: [{
|
|
437
|
-
type: ContentChild,
|
|
438
|
-
args: ['sendButton']
|
|
439
|
-
}], toolbarTemplate: [{
|
|
440
|
-
type: ContentChild,
|
|
441
|
-
args: ['toolbar']
|
|
442
|
-
}], textAreaTemplate: [{
|
|
443
|
-
type: ContentChild,
|
|
444
|
-
args: ['textArea']
|
|
445
|
-
}], audioRecorderTemplate: [{
|
|
446
|
-
type: ContentChild,
|
|
447
|
-
args: ['audioRecorder']
|
|
448
|
-
}], assistantMessageMarkdownRendererTemplate: [{
|
|
449
|
-
type: ContentChild,
|
|
450
|
-
args: ['assistantMessageMarkdownRenderer']
|
|
451
|
-
}], thumbsUpButtonTemplate: [{
|
|
452
|
-
type: ContentChild,
|
|
453
|
-
args: ['thumbsUpButton']
|
|
454
|
-
}], thumbsDownButtonTemplate: [{
|
|
455
|
-
type: ContentChild,
|
|
456
|
-
args: ['thumbsDownButton']
|
|
457
|
-
}], readAloudButtonTemplate: [{
|
|
458
|
-
type: ContentChild,
|
|
459
|
-
args: ['readAloudButton']
|
|
460
|
-
}], regenerateButtonTemplate: [{
|
|
461
|
-
type: ContentChild,
|
|
462
|
-
args: ['regenerateButton']
|
|
463
|
-
}], assistantMessageThumbsUp: [{
|
|
464
|
-
type: Output
|
|
465
|
-
}], assistantMessageThumbsDown: [{
|
|
466
|
-
type: Output
|
|
467
|
-
}], assistantMessageReadAloud: [{
|
|
468
|
-
type: Output
|
|
469
|
-
}], assistantMessageRegenerate: [{
|
|
470
|
-
type: Output
|
|
471
|
-
}], userMessageCopy: [{
|
|
472
|
-
type: Output
|
|
473
|
-
}], userMessageEdit: [{
|
|
474
|
-
type: Output
|
|
475
|
-
}], inputContainerSlotRef: [{
|
|
476
|
-
type: ViewChild,
|
|
477
|
-
args: ['inputContainerSlotRef', { read: ElementRef }]
|
|
478
|
-
}] } });
|
|
479
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixZQUFZLEVBR1osU0FBUyxFQUNULFVBQVUsRUFDVix1QkFBdUIsRUFFdkIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixRQUFRLEVBTVIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRixPQUFPLEVBQUUsNENBQTRDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUNySCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN2RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU5RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FB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ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDb250ZW50Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIGVmZmVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb3BpbG90U2xvdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2xpYi9zbG90cy9jb3BpbG90LXNsb3QuY29tcG9uZW50JztcbmltcG9ydCB7IENvcGlsb3RDaGF0TWVzc2FnZVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENvcGlsb3RDaGF0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3U2Nyb2xsVmlld0NvbXBvbmVudCB9IGZyb20gJy4vY29waWxvdC1jaGF0LXZpZXctc2Nyb2xsLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IENvcGlsb3RDaGF0Vmlld1Njcm9sbFRvQm90dG9tQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb3BpbG90LWNoYXQtdmlldy1zY3JvbGwtdG8tYm90dG9tLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3RmVhdGhlckNvbXBvbmVudCB9IGZyb20gJy4vY29waWxvdC1jaGF0LXZpZXctZmVhdGhlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3SW5wdXRDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvcGlsb3QtY2hhdC12aWV3LWlucHV0LWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3RGlzY2xhaW1lckNvbXBvbmVudCB9IGZyb20gJy4vY29waWxvdC1jaGF0LXZpZXctZGlzY2xhaW1lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJ0BhZy11aS9jbGllbnQnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVzaXplLW9ic2VydmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3SGFuZGxlcnNTZXJ2aWNlIH0gZnJvbSAnLi9jb3BpbG90LWNoYXQtdmlldy1oYW5kbGVycy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBDb3BpbG90Q2hhdFZpZXcgY29tcG9uZW50IC0gQW5ndWxhciBwb3J0IG9mIHRoZSBSZWFjdCBjb21wb25lbnQuXG4gKiBBIGNvbXBsZXRlIGNoYXQgaW50ZXJmYWNlIHdpdGggbWVzc2FnZSBmZWVkIGFuZCBpbnB1dCBjb21wb25lbnRzLlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGNvcGlsb3QtY2hhdC12aWV3XG4gKiAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gKiAgIFthdXRvU2Nyb2xsXT1cInRydWVcIlxuICogICBbbWVzc2FnZVZpZXdQcm9wc109XCJ7IGFzc2lzdGFudE1lc3NhZ2U6IHsgb25UaHVtYnNVcDogaGFuZGxlVGh1bWJzVXAgfSB9XCI+XG4gKiA8L2NvcGlsb3QtY2hhdC12aWV3PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvcGlsb3QtY2hhdC12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBDb3BpbG90U2xvdENvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdE1lc3NhZ2VWaWV3Q29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0SW5wdXRDb21wb25lbnQsXG4gICAgQ29waWxvdENoYXRWaWV3U2Nyb2xsVmlld0NvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdFZpZXdTY3JvbGxUb0JvdHRvbUJ1dHRvbkNvbXBvbmVudCxcbiAgICBDb3BpbG90Q2hhdFZpZXdGZWF0aGVyQ29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0Vmlld0lucHV0Q29udGFpbmVyQ29tcG9uZW50LFxuICAgIENvcGlsb3RDaGF0Vmlld0Rpc2NsYWltZXJDb21wb25lbnRcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1Jlc2l6ZU9ic2VydmVyU2VydmljZSwgQ29waWxvdENoYXRWaWV3SGFuZGxlcnNTZXJ2aWNlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tIEN1c3RvbSBsYXlvdXQgdGVtcGxhdGUgc3VwcG9ydCAocmVuZGVyIHByb3AgcGF0dGVybikgLS0+XG4gICAgQGlmIChjdXN0b21MYXlvdXRUZW1wbGF0ZSkge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUxheW91dFRlbXBsYXRlOyBjb250ZXh0OiBsYXlvdXRDb250ZXh0KClcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDwhLS0gRGVmYXVsdCBsYXlvdXQgLSBleGFjdCBSZWFjdCBET00gc3RydWN0dXJlIC0tPlxuICAgICAgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzcygpXCI+XG4gICAgICAgIDwhLS0gU2Nyb2xsVmlldyAtLT5cbiAgICAgICAgPGNvcGlsb3QtY2hhdC12aWV3LXNjcm9sbC12aWV3XG4gICAgICAgICAgW2F1dG9TY3JvbGxdPVwiYXV0b1Njcm9sbFNpZ25hbCgpXCJcbiAgICAgICAgICBbaW5wdXRDb250YWluZXJIZWlnaHRdPVwiaW5wdXRDb250YWluZXJIZWlnaHQoKVwiXG4gICAgICAgICAgW2lzUmVzaXppbmddPVwiaXNSZXNpemluZygpXCJcbiAgICAgICAgICBbbWVzc2FnZXNdPVwibWVzc2FnZXNTaWduYWwoKVwiXG4gICAgICAgICAgW21lc3NhZ2VWaWV3XT1cIm1lc3NhZ2VWaWV3U2xvdCgpXCJcbiAgICAgICAgICBbbWVzc2FnZVZpZXdDbGFzc109XCJtZXNzYWdlVmlld0NsYXNzXCJcbiAgICAgICAgICBbc2Nyb2xsVG9Cb3R0b21CdXR0b25dPVwic2Nyb2xsVG9Cb3R0b21CdXR0b25TbG90KClcIlxuICAgICAgICAgIFtzY3JvbGxUb0JvdHRvbUJ1dHRvbkNsYXNzXT1cInNjcm9sbFRvQm90dG9tQnV0dG9uQ2xhc3NcIlxuICAgICAgICAgIFtzaG93Q3Vyc29yXT1cInNob3dDdXJzb3JTaWduYWwoKVwiXG4gICAgICAgICAgKGFzc2lzdGFudE1lc3NhZ2VUaHVtYnNVcCk9XCJhc3Npc3RhbnRNZXNzYWdlVGh1bWJzVXAuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXNzaXN0YW50TWVzc2FnZVRodW1ic0Rvd24pPVwiYXNzaXN0YW50TWVzc2FnZVRodW1ic0Rvd24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoYXNzaXN0YW50TWVzc2FnZVJlYWRBbG91ZCk9XCJhc3Npc3RhbnRNZXNzYWdlUmVhZEFsb3VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKGFzc2lzdGFudE1lc3NhZ2VSZWdlbmVyYXRlKT1cImFzc2lzdGFudE1lc3NhZ2VSZWdlbmVyYXRlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHVzZXJNZXNzYWdlQ29weSk9XCJ1c2VyTWVzc2FnZUNvcHkuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAodXNlck1lc3NhZ2VFZGl0KT1cInVzZXJNZXNzYWdlRWRpdC5lbWl0KCRldmVudClcIj5cbiAgICAgICAgPC9jb3BpbG90LWNoYXQtdmlldy1zY3JvbGwtdmlldz5cblxuICAgICAgICA8IS0tIEZlYXRoZXIgZWZmZWN0IC0tPlxuICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgW3Nsb3RdPVwiZmVhdGhlclNsb3QoKVwiXG4gICAgICAgICAgW2NvbnRleHRdPVwieyBpbnB1dENsYXNzOiBmZWF0aGVyQ2xhc3MgfVwiXG4gICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiZGVmYXVsdEZlYXRoZXJDb21wb25lbnRcIj5cbiAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG5cbiAgICAgICAgPCEtLSBJbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICAjaW5wdXRDb250YWluZXJTbG90UmVmXG4gICAgICAgICAgW3Nsb3RdPVwiaW5wdXRDb250YWluZXJTbG90KClcIlxuICAgICAgICAgIFtjb250ZXh0XT1cImlucHV0Q29udGFpbmVyQ29udGV4dCgpXCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0SW5wdXRDb250YWluZXJDb21wb25lbnRcIj5cbiAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIC8vIENvcmUgaW5wdXRzIG1hdGNoaW5nIFJlYWN0IHByb3BzXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcbiAgQElucHV0KCkgYXV0b1Njcm9sbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dDdXJzb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIC8vIE1lc3NhZ2VWaWV3IHNsb3QgaW5wdXRzXG4gIEBJbnB1dCgpIG1lc3NhZ2VWaWV3Q29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlVmlld1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbWVzc2FnZVZpZXdDbGFzcz86IHN0cmluZztcbiAgXG4gIC8vIFNjcm9sbFZpZXcgc2xvdCBpbnB1dHNcbiAgQElucHV0KCkgc2Nyb2xsVmlld0NvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgQElucHV0KCkgc2Nyb2xsVmlld1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgc2Nyb2xsVmlld0NsYXNzPzogc3RyaW5nO1xuICBcbiAgLy8gU2Nyb2xsVG9Cb3R0b21CdXR0b24gc2xvdCBpbnB1dHNcbiAgQElucHV0KCkgc2Nyb2xsVG9Cb3R0b21CdXR0b25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIHNjcm9sbFRvQm90dG9tQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBzY3JvbGxUb0JvdHRvbUJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICBcbiAgLy8gSW5wdXQgc2xvdCBpbnB1dHNcbiAgQElucHV0KCkgaW5wdXRDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIGlucHV0VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBcbiAgLy8gSW5wdXRDb250YWluZXIgc2xvdCBpbnB1dHNcbiAgQElucHV0KCkgaW5wdXRDb250YWluZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIGlucHV0Q29udGFpbmVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBpbnB1dENvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuICBcbiAgLy8gRmVhdGhlciBzbG90IGlucHV0c1xuICBASW5wdXQoKSBmZWF0aGVyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBASW5wdXQoKSBmZWF0aGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBmZWF0aGVyQ2xhc3M/OiBzdHJpbmc7XG4gIFxuICAvLyBEaXNjbGFpbWVyIHNsb3QgaW5wdXRzXG4gIEBJbnB1dCgpIGRpc2NsYWltZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIEBJbnB1dCgpIGRpc2NsYWltZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGRpc2NsYWltZXJDbGFzcz86IHN0cmluZztcbiAgQElucHV0KCkgZGlzY2xhaW1lclRleHQ/OiBzdHJpbmc7XG4gIFxuICAvLyBDdXN0b20gbGF5b3V0IHRlbXBsYXRlIChyZW5kZXIgcHJvcCBwYXR0ZXJuKVxuICBAQ29udGVudENoaWxkKCdjdXN0b21MYXlvdXQnKSBjdXN0b21MYXlvdXRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIFxuICAvLyBOYW1lZCB0ZW1wbGF0ZSBzbG90cyBmb3IgZGVlcCBjdXN0b21pemF0aW9uXG4gIEBDb250ZW50Q2hpbGQoJ3NlbmRCdXR0b24nKSBzZW5kQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKCd0b29sYmFyJykgdG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZCgndGV4dEFyZWEnKSB0ZXh0QXJlYVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZCgnYXVkaW9SZWNvcmRlcicpIGF1ZGlvUmVjb3JkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ2Fzc2lzdGFudE1lc3NhZ2VNYXJrZG93blJlbmRlcmVyJykgYXNzaXN0YW50TWVzc2FnZU1hcmtkb3duUmVuZGVyZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ3RodW1ic1VwQnV0dG9uJykgdGh1bWJzVXBCdXR0b25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ3RodW1ic0Rvd25CdXR0b24nKSB0aHVtYnNEb3duQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKCdyZWFkQWxvdWRCdXR0b24nKSByZWFkQWxvdWRCdXR0b25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ3JlZ2VuZXJhdGVCdXR0b24nKSByZWdlbmVyYXRlQnV0dG9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBcbiAgLy8gT3V0cHV0IGV2ZW50cyBmb3IgYXNzaXN0YW50IG1lc3NhZ2UgYWN0aW9ucyAoYnViYmxlZCBmcm9tIGNoaWxkIGNvbXBvbmVudHMpXG4gIEBPdXRwdXQoKSBhc3Npc3RhbnRNZXNzYWdlVGh1bWJzVXAgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogTWVzc2FnZSB9PigpO1xuICBAT3V0cHV0KCkgYXNzaXN0YW50TWVzc2FnZVRodW1ic0Rvd24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogTWVzc2FnZSB9PigpO1xuICBAT3V0cHV0KCkgYXNzaXN0YW50TWVzc2FnZVJlYWRBbG91ZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBNZXNzYWdlIH0+KCk7XG4gIEBPdXRwdXQoKSBhc3Npc3RhbnRNZXNzYWdlUmVnZW5lcmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBNZXNzYWdlIH0+KCk7XG4gIFxuICAvLyBPdXRwdXQgZXZlbnRzIGZvciB1c2VyIG1lc3NhZ2UgYWN0aW9ucyAoaWYgYXBwbGljYWJsZSlcbiAgQE91dHB1dCgpIHVzZXJNZXNzYWdlQ29weSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBNZXNzYWdlIH0+KCk7XG4gIEBPdXRwdXQoKSB1c2VyTWVzc2FnZUVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogTWVzc2FnZSB9PigpO1xuICBcbiAgLy8gVmlld0NoaWxkIHJlZmVyZW5jZXNcbiAgQFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXJTbG90UmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGlucHV0Q29udGFpbmVyU2xvdFJlZj86IEVsZW1lbnRSZWY7XG4gIFxuICAvLyBEZWZhdWx0IGNvbXBvbmVudHMgZm9yIHNsb3RzXG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0U2Nyb2xsVmlld0NvbXBvbmVudCA9IENvcGlsb3RDaGF0Vmlld1Njcm9sbFZpZXdDb21wb25lbnQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0U2Nyb2xsVG9Cb3R0b21CdXR0b25Db21wb25lbnQgPSBDb3BpbG90Q2hhdFZpZXdTY3JvbGxUb0JvdHRvbUJ1dHRvbkNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRJbnB1dENvbnRhaW5lckNvbXBvbmVudCA9IENvcGlsb3RDaGF0Vmlld0lucHV0Q29udGFpbmVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdEZlYXRoZXJDb21wb25lbnQgPSBDb3BpbG90Q2hhdFZpZXdGZWF0aGVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdERpc2NsYWltZXJDb21wb25lbnQgPSBDb3BpbG90Q2hhdFZpZXdEaXNjbGFpbWVyQ29tcG9uZW50O1xuICBcbiAgLy8gU2lnbmFscyBmb3IgcmVhY3RpdmUgc3RhdGVcbiAgcHJvdGVjdGVkIG1lc3NhZ2VzU2lnbmFsID0gc2lnbmFsPE1lc3NhZ2VbXT4oW10pO1xuICBwcm90ZWN0ZWQgYXV0b1Njcm9sbFNpZ25hbCA9IHNpZ25hbCh0cnVlKTtcbiAgcHJvdGVjdGVkIHNob3dDdXJzb3JTaWduYWwgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgZGlzY2xhaW1lclRleHRTaWduYWwgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgZGlzY2xhaW1lckNsYXNzU2lnbmFsID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGlucHV0Q29udGFpbmVySGVpZ2h0ID0gc2lnbmFsPG51bWJlcj4oMCk7XG4gIHByb3RlY3RlZCBpc1Jlc2l6aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGNvbnRlbnRQYWRkaW5nQm90dG9tID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dENvbnRhaW5lckhlaWdodCgpICsgMzIpO1xuICBcbiAgLy8gQ29tcHV0ZWQgc2lnbmFsc1xuICBwcm90ZWN0ZWQgY29tcHV0ZWRDbGFzcyA9IGNvbXB1dGVkKCgpID0+IGNuKCdyZWxhdGl2ZSBoLWZ1bGwnKSk7XG4gIFxuICAvLyBTbG90IHJlc29sdXRpb24gY29tcHV0ZWQgc2lnbmFsc1xuICBwcm90ZWN0ZWQgbWVzc2FnZVZpZXdTbG90ID0gY29tcHV0ZWQoKCkgPT4gXG4gICAgdGhpcy5tZXNzYWdlVmlld1RlbXBsYXRlIHx8IHRoaXMubWVzc2FnZVZpZXdDb21wb25lbnRcbiAgKTtcbiAgXG4gIHByb3RlY3RlZCBzY3JvbGxWaWV3U2xvdCA9IGNvbXB1dGVkKCgpID0+IFxuICAgIHRoaXMuc2Nyb2xsVmlld1RlbXBsYXRlIHx8IHRoaXMuc2Nyb2xsVmlld0NvbXBvbmVudFxuICApO1xuICBcbiAgcHJvdGVjdGVkIHNjcm9sbFRvQm90dG9tQnV0dG9uU2xvdCA9IGNvbXB1dGVkKCgpID0+IFxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b21CdXR0b25UZW1wbGF0ZSB8fCB0aGlzLnNjcm9sbFRvQm90dG9tQnV0dG9uQ29tcG9uZW50XG4gICk7XG4gIFxuICBwcm90ZWN0ZWQgaW5wdXRTbG90ID0gY29tcHV0ZWQoKCkgPT4gXG4gICAgdGhpcy5pbnB1dFRlbXBsYXRlIHx8IHRoaXMuaW5wdXRDb21wb25lbnRcbiAgKTtcbiAgXG4gIHByb3RlY3RlZCBpbnB1dENvbnRhaW5lclNsb3QgPSBjb21wdXRlZCgoKSA9PiBcbiAgICB0aGlzLmlucHV0Q29udGFpbmVyVGVtcGxhdGUgfHwgdGhpcy5pbnB1dENvbnRhaW5lckNvbXBvbmVudFxuICApO1xuICBcbiAgcHJvdGVjdGVkIGZlYXRoZXJTbG90ID0gY29tcHV0ZWQoKCkgPT4gXG4gICAgdGhpcy5mZWF0aGVyVGVtcGxhdGUgfHwgdGhpcy5mZWF0aGVyQ29tcG9uZW50XG4gICk7XG4gIFxuICBwcm90ZWN0ZWQgZGlzY2xhaW1lclNsb3QgPSBjb21wdXRlZCgoKSA9PiBcbiAgICB0aGlzLmRpc2NsYWltZXJUZW1wbGF0ZSB8fCB0aGlzLmRpc2NsYWltZXJDb21wb25lbnRcbiAgKTtcbiAgXG4gIC8vIENvbnRleHQgb2JqZWN0cyBmb3Igc2xvdHNcbiAgcHJvdGVjdGVkIHNjcm9sbFZpZXdDb250ZXh0ID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICBhdXRvU2Nyb2xsOiB0aGlzLmF1dG9TY3JvbGxTaWduYWwoKSxcbiAgICBzY3JvbGxUb0JvdHRvbUJ1dHRvbjogdGhpcy5zY3JvbGxUb0JvdHRvbUJ1dHRvblNsb3QoKSxcbiAgICBzY3JvbGxUb0JvdHRvbUJ1dHRvbkNsYXNzOiB0aGlzLnNjcm9sbFRvQm90dG9tQnV0dG9uQ2xhc3MsXG4gICAgaW5wdXRDb250YWluZXJIZWlnaHQ6IHRoaXMuaW5wdXRDb250YWluZXJIZWlnaHQoKSxcbiAgICBpc1Jlc2l6aW5nOiB0aGlzLmlzUmVzaXppbmcoKSxcbiAgICBtZXNzYWdlczogdGhpcy5tZXNzYWdlc1NpZ25hbCgpLFxuICAgIG1lc3NhZ2VWaWV3OiB0aGlzLm1lc3NhZ2VWaWV3U2xvdCgpLFxuICAgIG1lc3NhZ2VWaWV3Q2xhc3M6IHRoaXMubWVzc2FnZVZpZXdDbGFzc1xuICB9KSk7XG4gIFxuICAvLyBSZW1vdmVkIHNjcm9sbFZpZXdQcm9wc0NvbXB1dGVkIC0gbm8gbG9uZ2VyIG5lZWRlZFxuICBcbiAgcHJvdGVjdGVkIGlucHV0Q29udGFpbmVyQ29udGV4dCA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgaW5wdXQ6IHRoaXMuaW5wdXRTbG90KCksXG4gICAgZGlzY2xhaW1lcjogdGhpcy5kaXNjbGFpbWVyU2xvdCgpLFxuICAgIGRpc2NsYWltZXJUZXh0OiB0aGlzLmRpc2NsYWltZXJUZXh0U2lnbmFsKCksXG4gICAgZGlzY2xhaW1lckNsYXNzOiB0aGlzLmRpc2NsYWltZXJDbGFzc1NpZ25hbCgpLFxuICAgIGlucHV0Q29udGFpbmVyQ2xhc3M6IHRoaXMuaW5wdXRDb250YWluZXJDbGFzc1xuICB9KSk7XG4gIFxuICAvLyBSZW1vdmVkIGlucHV0Q29udGFpbmVyUHJvcHNDb21wdXRlZCAtIG5vIGxvbmdlciBuZWVkZWRcbiAgXG4gIC8vIExheW91dCBjb250ZXh0IGZvciBjdXN0b20gdGVtcGxhdGVzIChyZW5kZXIgcHJvcCBwYXR0ZXJuKVxuICBwcm90ZWN0ZWQgbGF5b3V0Q29udGV4dCA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgbWVzc2FnZVZpZXc6IHRoaXMubWVzc2FnZVZpZXdTbG90KCksXG4gICAgaW5wdXQ6IHRoaXMuaW5wdXRTbG90KCksXG4gICAgc2Nyb2xsVmlldzogdGhpcy5zY3JvbGxWaWV3U2xvdCgpLFxuICAgIHNjcm9sbFRvQm90dG9tQnV0dG9uOiB0aGlzLnNjcm9sbFRvQm90dG9tQnV0dG9uU2xvdCgpLFxuICAgIGZlYXRoZXI6IHRoaXMuZmVhdGhlclNsb3QoKSxcbiAgICBpbnB1dENvbnRhaW5lcjogdGhpcy5pbnB1dENvbnRhaW5lclNsb3QoKSxcbiAgICBkaXNjbGFpbWVyOiB0aGlzLmRpc2NsYWltZXJTbG90KClcbiAgfSkpO1xuICBcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVzaXplVGltZW91dFJlZj86IG51bWJlcjtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaGFuZGxlcnM6IENvcGlsb3RDaGF0Vmlld0hhbmRsZXJzU2VydmljZVxuICApIHtcbiAgICAvLyBTZXQgdXAgZWZmZWN0IHRvIGhhbmRsZSByZXNpemUgc3RhdGUgdGltZW91dFxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCByZXNpemluZyA9IHRoaXMuaXNSZXNpemluZygpO1xuICAgICAgaWYgKHJlc2l6aW5nICYmIHRoaXMucmVzaXplVGltZW91dFJlZikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0UmVmKTtcbiAgICAgICAgdGhpcy5yZXNpemVUaW1lb3V0UmVmID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsaXplIHNpZ25hbHMgd2l0aCBpbnB1dCB2YWx1ZXNcbiAgICB0aGlzLm1lc3NhZ2VzU2lnbmFsLnNldCh0aGlzLm1lc3NhZ2VzKTtcbiAgICB0aGlzLmF1dG9TY3JvbGxTaWduYWwuc2V0KHRoaXMuYXV0b1Njcm9sbCk7XG4gICAgdGhpcy5zaG93Q3Vyc29yU2lnbmFsLnNldCh0aGlzLnNob3dDdXJzb3IpO1xuICAgIHRoaXMuZGlzY2xhaW1lclRleHRTaWduYWwuc2V0KHRoaXMuZGlzY2xhaW1lclRleHQpO1xuICAgIHRoaXMuZGlzY2xhaW1lckNsYXNzU2lnbmFsLnNldCh0aGlzLmRpc2NsYWltZXJDbGFzcyk7XG5cbiAgICAvLyBJbml0aWFsaXplIGhhbmRsZXIgYXZhaWxhYmlsaXR5IGluIHRoZSB2aWV3LXNjb3BlZCBzZXJ2aWNlXG4gICAgdGhpcy5oYW5kbGVycy5oYXNBc3Npc3RhbnRUaHVtYnNVcEhhbmRsZXIuc2V0KHRoaXMuYXNzaXN0YW50TWVzc2FnZVRodW1ic1VwLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhbmRsZXJzLmhhc0Fzc2lzdGFudFRodW1ic0Rvd25IYW5kbGVyLnNldCh0aGlzLmFzc2lzdGFudE1lc3NhZ2VUaHVtYnNEb3duLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhbmRsZXJzLmhhc0Fzc2lzdGFudFJlYWRBbG91ZEhhbmRsZXIuc2V0KHRoaXMuYXNzaXN0YW50TWVzc2FnZVJlYWRBbG91ZC5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYW5kbGVycy5oYXNBc3Npc3RhbnRSZWdlbmVyYXRlSGFuZGxlci5zZXQodGhpcy5hc3Npc3RhbnRNZXNzYWdlUmVnZW5lcmF0ZS5vYnNlcnZlZCk7XG4gICAgdGhpcy5oYW5kbGVycy5oYXNVc2VyQ29weUhhbmRsZXIuc2V0KHRoaXMudXNlck1lc3NhZ2VDb3B5Lm9ic2VydmVkKTtcbiAgICB0aGlzLmhhbmRsZXJzLmhhc1VzZXJFZGl0SGFuZGxlci5zZXQodGhpcy51c2VyTWVzc2FnZUVkaXQub2JzZXJ2ZWQpO1xuICB9XG4gIFxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgc2lnbmFscyB3aGVuIGlucHV0cyBjaGFuZ2VcbiAgICB0aGlzLm1lc3NhZ2VzU2lnbmFsLnNldCh0aGlzLm1lc3NhZ2VzKTtcbiAgICB0aGlzLmF1dG9TY3JvbGxTaWduYWwuc2V0KHRoaXMuYXV0b1Njcm9sbCk7XG4gICAgdGhpcy5zaG93Q3Vyc29yU2lnbmFsLnNldCh0aGlzLnNob3dDdXJzb3IpO1xuICAgIHRoaXMuZGlzY2xhaW1lclRleHRTaWduYWwuc2V0KHRoaXMuZGlzY2xhaW1lclRleHQpO1xuICAgIHRoaXMuZGlzY2xhaW1lckNsYXNzU2lnbmFsLnNldCh0aGlzLmRpc2NsYWltZXJDbGFzcyk7XG5cbiAgICAvLyBLZWVwIGhhbmRsZXIgYXZhaWxhYmlsaXR5IGluIHN5bmNcbiAgICB0aGlzLmhhbmRsZXJzLmhhc0Fzc2lzdGFudFRodW1ic1VwSGFuZGxlci5zZXQodGhpcy5hc3Npc3RhbnRNZXNzYWdlVGh1bWJzVXAub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFuZGxlcnMuaGFzQXNzaXN0YW50VGh1bWJzRG93bkhhbmRsZXIuc2V0KHRoaXMuYXNzaXN0YW50TWVzc2FnZVRodW1ic0Rvd24ub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFuZGxlcnMuaGFzQXNzaXN0YW50UmVhZEFsb3VkSGFuZGxlci5zZXQodGhpcy5hc3Npc3RhbnRNZXNzYWdlUmVhZEFsb3VkLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhbmRsZXJzLmhhc0Fzc2lzdGFudFJlZ2VuZXJhdGVIYW5kbGVyLnNldCh0aGlzLmFzc2lzdGFudE1lc3NhZ2VSZWdlbmVyYXRlLm9ic2VydmVkKTtcbiAgICB0aGlzLmhhbmRsZXJzLmhhc1VzZXJDb3B5SGFuZGxlci5zZXQodGhpcy51c2VyTWVzc2FnZUNvcHkub2JzZXJ2ZWQpO1xuICAgIHRoaXMuaGFuZGxlcnMuaGFzVXNlckVkaXRIYW5kbGVyLnNldCh0aGlzLnVzZXJNZXNzYWdlRWRpdC5vYnNlcnZlZCk7XG4gIH1cbiAgXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBEb24ndCBzZXQgYSBkZWZhdWx0IGhlaWdodCAtIG1lYXN1cmUgaXQgZHluYW1pY2FsbHlcbiAgICBcbiAgICAvLyBTZXQgdXAgaW5wdXQgY29udGFpbmVyIGhlaWdodCBtb25pdG9yaW5nXG4gICAgY29uc3QgbWVhc3VyZUFuZE9ic2VydmUgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaW5wdXRDb250YWluZXJTbG90UmVmIHx8ICF0aGlzLmlucHV0Q29udGFpbmVyU2xvdFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVGhlIHNsb3QgcmVmIHBvaW50cyB0byB0aGUgY29waWxvdC1zbG90IGVsZW1lbnRcbiAgICAgIC8vIFdlIG5lZWQgdG8gZmluZCB0aGUgYWN0dWFsIGlucHV0IGNvbnRhaW5lciBjb21wb25lbnQgaW5zaWRlIGl0XG4gICAgICBjb25zdCBzbG90RWxlbWVudCA9IHRoaXMuaW5wdXRDb250YWluZXJTbG90UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50ID0gc2xvdEVsZW1lbnQucXVlcnlTZWxlY3RvcignY29waWxvdC1jaGF0LXZpZXctaW5wdXQtY29udGFpbmVyJyk7XG4gICAgICBcbiAgICAgIGlmICghY29tcG9uZW50RWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIExvb2sgZm9yIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbmVkIGRpdiB0aGF0IGNvbnRhaW5zIHRoZSBpbnB1dFxuICAgICAgbGV0IGlubmVyRGl2ID0gY29tcG9uZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdkaXYuYWJzb2x1dGUnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIFxuICAgICAgLy8gSWYgbm90IGZvdW5kIGJ5IGNsYXNzLCB0cnkgZmlyc3QgY2hpbGRcbiAgICAgIGlmICghaW5uZXJEaXYpIHtcbiAgICAgICAgaW5uZXJEaXYgPSBjb21wb25lbnRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50O1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIWlubmVyRGl2KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGhlaWdodFxuICAgICAgY29uc3QgbWVhc3VyZWRIZWlnaHQgPSBpbm5lckRpdi5vZmZzZXRIZWlnaHQ7XG4gICAgICBcbiAgICAgIGlmIChtZWFzdXJlZEhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFN1Y2Nlc3MhIFNldCB0aGUgaW5pdGlhbCBoZWlnaHRcbiAgICAgIHRoaXMuaW5wdXRDb250YWluZXJIZWlnaHQuc2V0KG1lYXN1cmVkSGVpZ2h0KTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGFuIEVsZW1lbnRSZWYgd3JhcHBlciBmb3IgUmVzaXplT2JzZXJ2ZXJcbiAgICAgIGNvbnN0IGlubmVyRGl2UmVmID0gbmV3IEVsZW1lbnRSZWYoaW5uZXJEaXYpO1xuICAgICAgXG4gICAgICAvLyBTZXQgdXAgUmVzaXplT2JzZXJ2ZXIgdG8gdHJhY2sgY2hhbmdlc1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZUVsZW1lbnQoaW5uZXJEaXZSZWYsIDAsIDI1MClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSBzdGF0ZS5oZWlnaHQ7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG5ld0hlaWdodCAhPT0gdGhpcy5pbnB1dENvbnRhaW5lckhlaWdodCgpICYmIG5ld0hlaWdodCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb250YWluZXJIZWlnaHQuc2V0KG5ld0hlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmlzUmVzaXppbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBDbGVhciBleGlzdGluZyB0aW1lb3V0XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0UmVmKSB7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXRSZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTZXQgaXNSZXNpemluZyB0byBmYWxzZSBhZnRlciBhIHNob3J0IGRlbGF5XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXRSZWYgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNSZXNpemluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXRSZWYgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICBcbiAgICAvLyBUcnkgdG8gbWVhc3VyZSBpbW1lZGlhdGVseVxuICAgIGlmICghbWVhc3VyZUFuZE9ic2VydmUoKSkge1xuICAgICAgLy8gSWYgZmFpbGVkLCByZXRyeSB3aXRoIGluY3JlYXNpbmcgZGVsYXlzXG4gICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xuICAgICAgY29uc3QgbWF4QXR0ZW1wdHMgPSAxMDtcbiAgICAgIFxuICAgICAgY29uc3QgcmV0cnkgPSAoKSA9PiB7XG4gICAgICAgIGF0dGVtcHRzKys7XG4gICAgICAgIGlmIChtZWFzdXJlQW5kT2JzZXJ2ZSgpKSB7XG4gICAgICAgICAgLy8gU3VjY2Vzc2Z1bGx5IG1lYXN1cmVkXG4gICAgICAgIH0gZWxzZSBpZiAoYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cykge1xuICAgICAgICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmY6IDUwbXMsIDEwMG1zLCAyMDBtcywgNDAwbXMsIGV0Yy5cbiAgICAgICAgICBjb25zdCBkZWxheSA9IDUwICogTWF0aC5wb3coMiwgTWF0aC5taW4oYXR0ZW1wdHMgLSAxLCA0KSk7XG4gICAgICAgICAgc2V0VGltZW91dChyZXRyeSwgZGVsYXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhaWxlZCB0byBtZWFzdXJlIGFmdGVyIG1heCBhdHRlbXB0c1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBTdGFydCByZXRyeSB3aXRoIGZpcnN0IGRlbGF5XG4gICAgICBzZXRUaW1lb3V0KHJldHJ5LCA1MCk7XG4gICAgfVxuICB9XG4gIFxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0UmVmKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0UmVmKTtcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXcudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJ0BhZy11aS9jbGllbnQnO1xuXG4vKipcbiAqIFByb3BzIGZvciBDb3BpbG90Q2hhdFZpZXcgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29waWxvdENoYXRWaWV3UHJvcHMge1xuICBtZXNzYWdlcz86IE1lc3NhZ2VbXTtcbiAgYXV0b1Njcm9sbD86IGJvb2xlYW47XG4gIFxuICAvLyBTbG90IGNvbmZpZ3VyYXRpb25zXG4gIG1lc3NhZ2VWaWV3Q29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBtZXNzYWdlVmlld1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgbWVzc2FnZVZpZXdDbGFzcz86IHN0cmluZztcbiAgXG4gIHNjcm9sbFZpZXdDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIHNjcm9sbFZpZXdUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIHNjcm9sbFZpZXdDbGFzcz86IHN0cmluZztcbiAgXG4gIHNjcm9sbFRvQm90dG9tQnV0dG9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBzY3JvbGxUb0JvdHRvbUJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgc2Nyb2xsVG9Cb3R0b21CdXR0b25DbGFzcz86IHN0cmluZztcbiAgXG4gIGlucHV0Q29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBpbnB1dFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgXG4gIGlucHV0Q29udGFpbmVyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBpbnB1dENvbnRhaW5lclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgaW5wdXRDb250YWluZXJDbGFzcz86IHN0cmluZztcbiAgXG4gIGZlYXRoZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIGZlYXRoZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIGZlYXRoZXJDbGFzcz86IHN0cmluZztcbiAgXG4gIGRpc2NsYWltZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG4gIGRpc2NsYWltZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIGRpc2NsYWltZXJDbGFzcz86IHN0cmluZztcbiAgZGlzY2xhaW1lclRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udGV4dCBmb3IgY3VzdG9tIGxheW91dCB0ZW1wbGF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvcGlsb3RDaGF0Vmlld0xheW91dENvbnRleHQge1xuICBtZXNzYWdlVmlldzogYW55O1xuICBpbnB1dDogYW55O1xuICBzY3JvbGxWaWV3OiBhbnk7XG4gIHNjcm9sbFRvQm90dG9tQnV0dG9uOiBhbnk7XG4gIGZlYXRoZXI6IGFueTtcbiAgaW5wdXRDb250YWluZXI6IGFueTtcbiAgZGlzY2xhaW1lcjogYW55O1xufVxuIl19
|