@memberjunction/ng-skip-chat 2.19.0 → 2.19.2

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.
@@ -21,13 +21,12 @@ import * as i0 from "@angular/core";
21
21
  import * as i1 from "@angular/router";
22
22
  import * as i2 from "@angular/common";
23
23
  import * as i3 from "@memberjunction/ng-notifications";
24
- import * as i4 from "@progress/kendo-angular-layout";
25
- import * as i5 from "@angular/forms";
26
- import * as i6 from "@progress/kendo-angular-dialog";
27
- import * as i7 from "@memberjunction/ng-container-directives";
28
- import * as i8 from "@progress/kendo-angular-listview";
29
- import * as i9 from "@progress/kendo-angular-buttons";
30
- import * as i10 from "@memberjunction/ng-data-context";
24
+ import * as i4 from "@angular/forms";
25
+ import * as i5 from "@progress/kendo-angular-dialog";
26
+ import * as i6 from "@memberjunction/ng-container-directives";
27
+ import * as i7 from "@progress/kendo-angular-listview";
28
+ import * as i8 from "@progress/kendo-angular-buttons";
29
+ import * as i9 from "@memberjunction/ng-data-context";
31
30
  const _c0 = ["AskSkipPanel"];
32
31
  const _c1 = ["mjContainer"];
33
32
  const _c2 = ["conversationList"];
@@ -35,17 +34,22 @@ const _c3 = ["AskSkipInput"];
35
34
  const _c4 = ["scrollContainer"];
36
35
  const _c5 = ["topLevelDiv"];
37
36
  const _c6 = () => ({ "item-border": true });
38
- function SkipChatComponent_kendo_splitter_pane_3_div_1_button_3_Template(rf, ctx) { if (rf & 1) {
37
+ function SkipChatComponent_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelement(0, "img", 26);
39
+ } if (rf & 2) {
40
+ const ctx_r2 = i0.ɵɵnextContext(2);
41
+ i0.ɵɵproperty("src", ctx_r2.SkipLogoURL, i0.ɵɵsanitizeUrl);
42
+ } }
43
+ function SkipChatComponent_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
39
44
  const _r4 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "button", 29);
41
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_splitter_pane_3_div_1_button_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.CreateNewConversation()); });
42
- i0.ɵɵtext(1, "+");
45
+ i0.ɵɵelementStart(0, "span", 30);
46
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_Conditional_5_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.CreateNewConversation()); });
43
47
  i0.ɵɵelementEnd();
44
48
  } }
45
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_span_1_Template(rf, ctx) { if (rf & 1) {
46
- i0.ɵɵelement(0, "span", 35);
49
+ function SkipChatComponent_Conditional_3_ng_template_8_span_1_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelement(0, "span", 36);
47
51
  } }
48
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_span_3_Template(rf, ctx) { if (rf & 1) {
52
+ function SkipChatComponent_Conditional_3_ng_template_8_span_3_Template(rf, ctx) { if (rf & 1) {
49
53
  i0.ɵɵelementStart(0, "span");
50
54
  i0.ɵɵtext(1);
51
55
  i0.ɵɵelementEnd();
@@ -54,45 +58,45 @@ function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_span_3_Temp
54
58
  i0.ɵɵadvance();
55
59
  i0.ɵɵtextInterpolate(dataItem_r6.Name);
56
60
  } }
57
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_textarea_4_Template(rf, ctx) { if (rf & 1) {
61
+ function SkipChatComponent_Conditional_3_ng_template_8_textarea_4_Template(rf, ctx) { if (rf & 1) {
58
62
  const _r7 = i0.ɵɵgetCurrentView();
59
- i0.ɵɵelementStart(0, "textarea", 36);
60
- i0.ɵɵtwoWayListener("ngModelChange", function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_textarea_4_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const dataItem_r6 = i0.ɵɵnextContext().dataItem; i0.ɵɵtwoWayBindingSet(dataItem_r6.Name, $event) || (dataItem_r6.Name = $event); return i0.ɵɵresetView($event); });
63
+ i0.ɵɵelementStart(0, "textarea", 37);
64
+ i0.ɵɵtwoWayListener("ngModelChange", function SkipChatComponent_Conditional_3_ng_template_8_textarea_4_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const dataItem_r6 = i0.ɵɵnextContext().dataItem; i0.ɵɵtwoWayBindingSet(dataItem_r6.Name, $event) || (dataItem_r6.Name = $event); return i0.ɵɵresetView($event); });
61
65
  i0.ɵɵelementEnd();
62
66
  } if (rf & 2) {
63
67
  const dataItem_r6 = i0.ɵɵnextContext().dataItem;
64
68
  i0.ɵɵtwoWayProperty("ngModel", dataItem_r6.Name);
65
69
  } }
66
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_1_Template(rf, ctx) { if (rf & 1) {
70
+ function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_1_Template(rf, ctx) { if (rf & 1) {
67
71
  const _r8 = i0.ɵɵgetCurrentView();
68
- i0.ɵɵelementStart(0, "span", 42);
69
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_1_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r8); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editConvo(dataItem_r6)); });
72
+ i0.ɵɵelementStart(0, "span", 43);
73
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_1_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r8); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.editConvo(dataItem_r6)); });
70
74
  i0.ɵɵelementEnd();
71
75
  } }
72
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_2_Template(rf, ctx) { if (rf & 1) {
76
+ function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_2_Template(rf, ctx) { if (rf & 1) {
73
77
  const _r9 = i0.ɵɵgetCurrentView();
74
- i0.ɵɵelementStart(0, "span", 43);
75
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_2_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r9); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.showDeleteConvoDialog(dataItem_r6)); });
78
+ i0.ɵɵelementStart(0, "span", 44);
79
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_2_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r9); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.showDeleteConvoDialog(dataItem_r6)); });
76
80
  i0.ɵɵelementEnd();
77
81
  } }
78
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
82
+ function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_3_Template(rf, ctx) { if (rf & 1) {
79
83
  const _r10 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "span", 44);
81
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_3_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r10); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.saveConvoName(dataItem_r6)); });
84
+ i0.ɵɵelementStart(0, "span", 45);
85
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_3_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r10); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.saveConvoName(dataItem_r6)); });
82
86
  i0.ɵɵelementEnd();
83
87
  } }
84
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
88
+ function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_4_Template(rf, ctx) { if (rf & 1) {
85
89
  const _r11 = i0.ɵɵgetCurrentView();
86
- i0.ɵɵelementStart(0, "span", 45);
87
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r11); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.cancelConvoEdit(dataItem_r6)); });
90
+ i0.ɵɵelementStart(0, "span", 46);
91
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_ng_template_8_div_5_span_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r11); const dataItem_r6 = i0.ɵɵnextContext(2).dataItem; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.cancelConvoEdit(dataItem_r6)); });
88
92
  i0.ɵɵelementEnd();
89
93
  } }
90
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_Template(rf, ctx) { if (rf & 1) {
91
- i0.ɵɵelementStart(0, "div", 37);
92
- i0.ɵɵtemplate(1, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_1_Template, 1, 0, "span", 38)(2, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_2_Template, 1, 0, "span", 39)(3, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_3_Template, 1, 0, "span", 40)(4, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_span_4_Template, 1, 0, "span", 41);
94
+ function SkipChatComponent_Conditional_3_ng_template_8_div_5_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementStart(0, "div", 38);
96
+ i0.ɵɵtemplate(1, SkipChatComponent_Conditional_3_ng_template_8_div_5_span_1_Template, 1, 0, "span", 39)(2, SkipChatComponent_Conditional_3_ng_template_8_div_5_span_2_Template, 1, 0, "span", 40)(3, SkipChatComponent_Conditional_3_ng_template_8_div_5_span_3_Template, 1, 0, "span", 41)(4, SkipChatComponent_Conditional_3_ng_template_8_div_5_span_4_Template, 1, 0, "span", 42);
93
97
  i0.ɵɵelementEnd();
94
98
  } if (rf & 2) {
95
- const ctx_r2 = i0.ɵɵnextContext(4);
99
+ const ctx_r2 = i0.ɵɵnextContext(3);
96
100
  i0.ɵɵadvance();
97
101
  i0.ɵɵproperty("ngIf", !ctx_r2.ConversationEditMode);
98
102
  i0.ɵɵadvance();
@@ -102,19 +106,19 @@ function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_Templ
102
106
  i0.ɵɵadvance();
103
107
  i0.ɵɵproperty("ngIf", ctx_r2.ConversationEditMode);
104
108
  } }
105
- function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_Template(rf, ctx) { if (rf & 1) {
109
+ function SkipChatComponent_Conditional_3_ng_template_8_Template(rf, ctx) { if (rf & 1) {
106
110
  const _r5 = i0.ɵɵgetCurrentView();
107
- i0.ɵɵelementStart(0, "div", 30);
108
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_Template_div_click_0_listener() { const dataItem_r6 = i0.ɵɵrestoreView(_r5).dataItem; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.SelectConversation(dataItem_r6)); });
109
- i0.ɵɵtemplate(1, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_span_1_Template, 1, 0, "span", 31);
110
- i0.ɵɵelementStart(2, "div", 32);
111
- i0.ɵɵtemplate(3, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_span_3_Template, 2, 1, "span", 19)(4, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_textarea_4_Template, 1, 1, "textarea", 33);
111
+ i0.ɵɵelementStart(0, "div", 31);
112
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_ng_template_8_Template_div_click_0_listener() { const dataItem_r6 = i0.ɵɵrestoreView(_r5).dataItem; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.SelectConversation(dataItem_r6)); });
113
+ i0.ɵɵtemplate(1, SkipChatComponent_Conditional_3_ng_template_8_span_1_Template, 1, 0, "span", 32);
114
+ i0.ɵɵelementStart(2, "div", 33);
115
+ i0.ɵɵtemplate(3, SkipChatComponent_Conditional_3_ng_template_8_span_3_Template, 2, 1, "span", 21)(4, SkipChatComponent_Conditional_3_ng_template_8_textarea_4_Template, 1, 1, "textarea", 34);
112
116
  i0.ɵɵelementEnd();
113
- i0.ɵɵtemplate(5, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_div_5_Template, 5, 4, "div", 34);
117
+ i0.ɵɵtemplate(5, SkipChatComponent_Conditional_3_ng_template_8_div_5_Template, 5, 4, "div", 35);
114
118
  i0.ɵɵelementEnd();
115
119
  } if (rf & 2) {
116
120
  const dataItem_r6 = ctx.dataItem;
117
- const ctx_r2 = i0.ɵɵnextContext(3);
121
+ const ctx_r2 = i0.ɵɵnextContext(2);
118
122
  i0.ɵɵproperty("ngClass", ctx_r2.GetConversationItemClass(dataItem_r6))("title", dataItem_r6.Name);
119
123
  i0.ɵɵadvance();
120
124
  i0.ɵɵproperty("ngIf", ctx_r2.SelectedConversation && ctx_r2.IsSkipProcessing(dataItem_r6));
@@ -125,73 +129,69 @@ function SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_Template(rf
125
129
  i0.ɵɵadvance();
126
130
  i0.ɵɵproperty("ngIf", (ctx_r2.SelectedConversation == null ? null : ctx_r2.SelectedConversation.ID) === dataItem_r6.ID);
127
131
  } }
128
- function SkipChatComponent_kendo_splitter_pane_3_div_1_Template(rf, ctx) { if (rf & 1) {
129
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24);
130
- i0.ɵɵelement(2, "img", 25);
131
- i0.ɵɵtemplate(3, SkipChatComponent_kendo_splitter_pane_3_div_1_button_3_Template, 2, 0, "button", 26);
132
+ function SkipChatComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
133
+ const _r2 = i0.ɵɵgetCurrentView();
134
+ i0.ɵɵelementStart(0, "div", 6)(1, "div", 23)(2, "div", 24)(3, "span", 25);
135
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_3_Template_span_click_3_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.DisplayConversationList(false)); });
132
136
  i0.ɵɵelementEnd();
133
- i0.ɵɵelementStart(4, "kendo-listview", 27, 3);
134
- i0.ɵɵtemplate(6, SkipChatComponent_kendo_splitter_pane_3_div_1_ng_template_6_Template, 6, 6, "ng-template", 28);
135
- i0.ɵɵelementEnd()();
137
+ i0.ɵɵtemplate(4, SkipChatComponent_Conditional_3_Conditional_4_Template, 1, 1, "img", 26)(5, SkipChatComponent_Conditional_3_Conditional_5_Template, 1, 0, "span", 27);
138
+ i0.ɵɵelementEnd();
139
+ i0.ɵɵelementStart(6, "kendo-listview", 28, 3);
140
+ i0.ɵɵtemplate(8, SkipChatComponent_Conditional_3_ng_template_8_Template, 6, 6, "ng-template", 29);
141
+ i0.ɵɵelementEnd()()();
136
142
  } if (rf & 2) {
137
- const ctx_r2 = i0.ɵɵnextContext(2);
138
- i0.ɵɵadvance(2);
139
- i0.ɵɵproperty("src", ctx_r2.SkipLogoURL, i0.ɵɵsanitizeUrl);
143
+ const ctx_r2 = i0.ɵɵnextContext();
144
+ i0.ɵɵadvance(4);
145
+ i0.ɵɵconditional(ctx_r2.ShowSkipLogoInConversationList ? 4 : -1);
140
146
  i0.ɵɵadvance();
141
- i0.ɵɵproperty("ngIf", ctx_r2.AllowNewConversations);
147
+ i0.ɵɵconditional(ctx_r2.AllowNewConversations ? 5 : -1);
142
148
  i0.ɵɵadvance();
143
149
  i0.ɵɵstyleProp("height", 280, "px");
144
- i0.ɵɵproperty("data", ctx_r2.Conversations)("itemClass", i0.ɵɵpureFunction0(8, _c6))("fillWidth", false)("bottomMargin", 20);
150
+ i0.ɵɵproperty("data", ctx_r2.Conversations)("itemClass", i0.ɵɵpureFunction0(8, _c6))("fillWidth", false)("bottomMargin", 50);
145
151
  } }
146
- function SkipChatComponent_kendo_splitter_pane_3_Template(rf, ctx) { if (rf & 1) {
147
- const _r2 = i0.ɵɵgetCurrentView();
148
- i0.ɵɵelementStart(0, "kendo-splitter-pane", 21);
149
- i0.ɵɵlistener("collapsedChange", function SkipChatComponent_kendo_splitter_pane_3_Template_kendo_splitter_pane_collapsedChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.splitterCollapseStateChanged($event)); });
150
- i0.ɵɵtemplate(1, SkipChatComponent_kendo_splitter_pane_3_div_1_Template, 7, 9, "div", 22);
152
+ function SkipChatComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
153
+ const _r12 = i0.ɵɵgetCurrentView();
154
+ i0.ɵɵelementStart(0, "span", 25);
155
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_4_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.DisplayConversationList(true)); });
151
156
  i0.ɵɵelementEnd();
152
- } if (rf & 2) {
153
- const ctx_r2 = i0.ɵɵnextContext();
154
- i0.ɵɵproperty("collapsible", true)("scrollable", false)("resizable", false);
155
- i0.ɵɵadvance();
156
- i0.ɵɵproperty("ngIf", ctx_r2.ShowConversationList);
157
- } }
158
- function SkipChatComponent_div_9_Template(rf, ctx) { if (rf & 1) {
159
- i0.ɵɵelement(0, "div", 46);
160
157
  } }
161
158
  function SkipChatComponent_div_10_Template(rf, ctx) { if (rf & 1) {
162
- const _r12 = i0.ɵɵgetCurrentView();
163
- i0.ɵɵelementStart(0, "div", 47)(1, "div", 48);
164
- i0.ɵɵelement(2, "img", 49);
165
- i0.ɵɵelementStart(3, "div", 50);
159
+ i0.ɵɵelement(0, "div", 47);
160
+ } }
161
+ function SkipChatComponent_div_11_Template(rf, ctx) { if (rf & 1) {
162
+ const _r13 = i0.ɵɵgetCurrentView();
163
+ i0.ɵɵelementStart(0, "div", 48)(1, "div", 49);
164
+ i0.ɵɵelement(2, "img", 50);
165
+ i0.ɵɵelementStart(3, "div", 51);
166
166
  i0.ɵɵtext(4, "What can I help with today?");
167
167
  i0.ɵɵelementEnd()();
168
- i0.ɵɵelementStart(5, "div", 51)(6, "div", 52)(7, "div", 53);
169
- i0.ɵɵlistener("click", function SkipChatComponent_div_10_Template_div_click_7_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[0].prompt)); });
170
- i0.ɵɵelementStart(8, "span", 54);
168
+ i0.ɵɵelementStart(5, "div", 52)(6, "div", 53)(7, "div", 54);
169
+ i0.ɵɵlistener("click", function SkipChatComponent_div_11_Template_div_click_7_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[0].prompt)); });
170
+ i0.ɵɵelementStart(8, "span", 55);
171
171
  i0.ɵɵtext(9);
172
172
  i0.ɵɵelementEnd();
173
173
  i0.ɵɵelementStart(10, "span");
174
174
  i0.ɵɵtext(11);
175
175
  i0.ɵɵelementEnd()();
176
- i0.ɵɵelementStart(12, "div", 53);
177
- i0.ɵɵlistener("click", function SkipChatComponent_div_10_Template_div_click_12_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[1].prompt)); });
178
- i0.ɵɵelementStart(13, "span", 54);
176
+ i0.ɵɵelementStart(12, "div", 54);
177
+ i0.ɵɵlistener("click", function SkipChatComponent_div_11_Template_div_click_12_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[1].prompt)); });
178
+ i0.ɵɵelementStart(13, "span", 55);
179
179
  i0.ɵɵtext(14);
180
180
  i0.ɵɵelementEnd();
181
181
  i0.ɵɵelementStart(15, "span");
182
182
  i0.ɵɵtext(16);
183
183
  i0.ɵɵelementEnd()()();
184
- i0.ɵɵelementStart(17, "div", 52)(18, "div", 53);
185
- i0.ɵɵlistener("click", function SkipChatComponent_div_10_Template_div_click_18_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[2].prompt)); });
186
- i0.ɵɵelementStart(19, "span", 54);
184
+ i0.ɵɵelementStart(17, "div", 53)(18, "div", 54);
185
+ i0.ɵɵlistener("click", function SkipChatComponent_div_11_Template_div_click_18_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[2].prompt)); });
186
+ i0.ɵɵelementStart(19, "span", 55);
187
187
  i0.ɵɵtext(20);
188
188
  i0.ɵɵelementEnd();
189
189
  i0.ɵɵelementStart(21, "span");
190
190
  i0.ɵɵtext(22);
191
191
  i0.ɵɵelementEnd()();
192
- i0.ɵɵelementStart(23, "div", 53);
193
- i0.ɵɵlistener("click", function SkipChatComponent_div_10_Template_div_click_23_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[3].prompt)); });
194
- i0.ɵɵelementStart(24, "span", 54);
192
+ i0.ɵɵelementStart(23, "div", 54);
193
+ i0.ɵɵlistener("click", function SkipChatComponent_div_11_Template_div_click_23_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sendPrompt(ctx_r2.WelcomeQuestions[3].prompt)); });
194
+ i0.ɵɵelementStart(24, "span", 55);
195
195
  i0.ɵɵtext(25);
196
196
  i0.ɵɵelementEnd();
197
197
  i0.ɵɵelementStart(26, "span");
@@ -218,42 +218,42 @@ function SkipChatComponent_div_10_Template(rf, ctx) { if (rf & 1) {
218
218
  i0.ɵɵadvance(2);
219
219
  i0.ɵɵtextInterpolate(ctx_r2.WelcomeQuestions[3].bottomLine);
220
220
  } }
221
- function SkipChatComponent_span_12_Template(rf, ctx) { if (rf & 1) {
222
- const _r13 = i0.ɵɵgetCurrentView();
223
- i0.ɵɵelementStart(0, "span", 55);
224
- i0.ɵɵlistener("click", function SkipChatComponent_span_12_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.scrollToBottomAnimate()); });
225
- i0.ɵɵelement(1, "i", 56);
221
+ function SkipChatComponent_span_13_Template(rf, ctx) { if (rf & 1) {
222
+ const _r14 = i0.ɵɵgetCurrentView();
223
+ i0.ɵɵelementStart(0, "span", 56);
224
+ i0.ɵɵlistener("click", function SkipChatComponent_span_13_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.scrollToBottomAnimate()); });
225
+ i0.ɵɵelement(1, "i", 57);
226
226
  i0.ɵɵelementEnd();
227
227
  } }
228
- function SkipChatComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
229
- const _r14 = i0.ɵɵgetCurrentView();
230
- i0.ɵɵelementStart(0, "button", 16)(1, "span", 57);
231
- i0.ɵɵlistener("click", function SkipChatComponent_Conditional_17_Template_span_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.showDataContext()); });
228
+ function SkipChatComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
229
+ const _r15 = i0.ɵɵgetCurrentView();
230
+ i0.ɵɵelementStart(0, "button", 18)(1, "span", 58);
231
+ i0.ɵɵlistener("click", function SkipChatComponent_Conditional_18_Template_span_click_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.showDataContext()); });
232
232
  i0.ɵɵelementEnd()();
233
233
  } }
234
- function SkipChatComponent_div_20_Template(rf, ctx) { if (rf & 1) {
235
- const _r15 = i0.ɵɵgetCurrentView();
236
- i0.ɵɵelementStart(0, "div")(1, "mj-data-context-dialog", 58);
237
- i0.ɵɵlistener("dialogClosed", function SkipChatComponent_div_20_Template_mj_data_context_dialog_dialogClosed_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDataContextDialog()); });
234
+ function SkipChatComponent_div_21_Template(rf, ctx) { if (rf & 1) {
235
+ const _r16 = i0.ɵɵgetCurrentView();
236
+ i0.ɵɵelementStart(0, "div")(1, "mj-data-context-dialog", 59);
237
+ i0.ɵɵlistener("dialogClosed", function SkipChatComponent_div_21_Template_mj_data_context_dialog_dialogClosed_1_listener() { i0.ɵɵrestoreView(_r16); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDataContextDialog()); });
238
238
  i0.ɵɵelementEnd()();
239
239
  } if (rf & 2) {
240
240
  const ctx_r2 = i0.ɵɵnextContext();
241
241
  i0.ɵɵadvance();
242
242
  i0.ɵɵproperty("dataContextId", ctx_r2.DataContextID)("Provider", ctx_r2.ProviderToUse);
243
243
  } }
244
- function SkipChatComponent_kendo_dialog_21_Template(rf, ctx) { if (rf & 1) {
245
- const _r16 = i0.ɵɵgetCurrentView();
246
- i0.ɵɵelementStart(0, "kendo-dialog", 59);
247
- i0.ɵɵlistener("close", function SkipChatComponent_kendo_dialog_21_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDeleteConversation("no")); });
248
- i0.ɵɵelementStart(1, "p", 60);
244
+ function SkipChatComponent_kendo_dialog_22_Template(rf, ctx) { if (rf & 1) {
245
+ const _r17 = i0.ɵɵgetCurrentView();
246
+ i0.ɵɵelementStart(0, "kendo-dialog", 60);
247
+ i0.ɵɵlistener("close", function SkipChatComponent_kendo_dialog_22_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDeleteConversation("no")); });
248
+ i0.ɵɵelementStart(1, "p", 61);
249
249
  i0.ɵɵtext(2);
250
250
  i0.ɵɵelementEnd();
251
- i0.ɵɵelementStart(3, "kendo-dialog-actions")(4, "button", 61);
252
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_dialog_21_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r16); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDeleteConversation("yes")); });
251
+ i0.ɵɵelementStart(3, "kendo-dialog-actions")(4, "button", 62);
252
+ i0.ɵɵlistener("click", function SkipChatComponent_kendo_dialog_22_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDeleteConversation("yes")); });
253
253
  i0.ɵɵtext(5, " Yes ");
254
254
  i0.ɵɵelementEnd();
255
- i0.ɵɵelementStart(6, "button", 29);
256
- i0.ɵɵlistener("click", function SkipChatComponent_kendo_dialog_21_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r16); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDeleteConversation("no")); });
255
+ i0.ɵɵelementStart(6, "button", 63);
256
+ i0.ɵɵlistener("click", function SkipChatComponent_kendo_dialog_22_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDeleteConversation("no")); });
257
257
  i0.ɵɵtext(7, " No ");
258
258
  i0.ɵɵelementEnd()()();
259
259
  } if (rf & 2) {
@@ -262,6 +262,27 @@ function SkipChatComponent_kendo_dialog_21_Template(rf, ctx) { if (rf & 1) {
262
262
  i0.ɵɵadvance(2);
263
263
  i0.ɵɵtextInterpolate1(" Would you like to delete ", ctx_r2.SelectedConversation == null ? null : ctx_r2.SelectedConversation.Name, "? ");
264
264
  } }
265
+ function SkipChatComponent_kendo_dialog_23_Template(rf, ctx) { if (rf & 1) {
266
+ const _r18 = i0.ɵɵgetCurrentView();
267
+ i0.ɵɵelementStart(0, "kendo-dialog", 60);
268
+ i0.ɵɵlistener("close", function SkipChatComponent_kendo_dialog_23_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeMessageEditOrDeleteDialog("no")); });
269
+ i0.ɵɵelementStart(1, "p", 61);
270
+ i0.ɵɵtext(2);
271
+ i0.ɵɵelementEnd();
272
+ i0.ɵɵelementStart(3, "kendo-dialog-actions")(4, "button", 62);
273
+ i0.ɵɵlistener("click", function SkipChatComponent_kendo_dialog_23_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeMessageEditOrDeleteDialog("yes")); });
274
+ i0.ɵɵtext(5, " Yes ");
275
+ i0.ɵɵelementEnd();
276
+ i0.ɵɵelementStart(6, "button", 63);
277
+ i0.ɵɵlistener("click", function SkipChatComponent_kendo_dialog_23_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeMessageEditOrDeleteDialog("no")); });
278
+ i0.ɵɵtext(7, " No ");
279
+ i0.ɵɵelementEnd()()();
280
+ } if (rf & 2) {
281
+ const ctx_r2 = i0.ɵɵnextContext();
282
+ i0.ɵɵproperty("minWidth", 250)("width", 450);
283
+ i0.ɵɵadvance(2);
284
+ i0.ɵɵtextInterpolate1(" Would you like to ", ctx_r2.messageEditOrDeleteType, " this message? Doing so will result in any subsequent messages in the conversation being deleted. ");
285
+ } }
265
286
  export class SkipChatComponent extends BaseAngularComponent {
266
287
  constructor(el, renderer, route, router, location, cdRef, notificationService) {
267
288
  super();
@@ -276,6 +297,9 @@ export class SkipChatComponent extends BaseAngularComponent {
276
297
  this.Messages = [];
277
298
  this.Conversations = [];
278
299
  this.ConversationEditMode = false;
300
+ /**
301
+ * If true, the component will show the conversation list. Default is true.
302
+ */
279
303
  this.ShowConversationList = true;
280
304
  this.AllowNewConversations = true;
281
305
  this.Title = 'Ask Skip';
@@ -294,6 +318,18 @@ export class SkipChatComponent extends BaseAngularComponent {
294
318
  * If true, the component will update the browser URL when the conversation changes. If false, it will not update the URL. Default is true.
295
319
  */
296
320
  this.UpdateAppRoute = true;
321
+ /**
322
+ * When set to true, the small Skip logo is shown in the conversation list on the top left of the component
323
+ */
324
+ this.ShowSkipLogoInConversationList = false;
325
+ /**
326
+ * This property is used to set the placeholder text for the textbox where the user types their message to Skip.
327
+ */
328
+ this.DefaultTextboxPlaceholder = 'Type your message to Skip here...';
329
+ /**
330
+ * This property is used to set the placeholder text for the textbox where the user types their message to Skip when Skip is processing a request and the text area is disabled.
331
+ */
332
+ this.ProcessingTextBoxPlaceholder = 'Please wait...';
297
333
  /**
298
334
  * Event emitted when the user clicks on a matching report and the application needs to handle the navigation
299
335
  */
@@ -302,7 +338,16 @@ export class SkipChatComponent extends BaseAngularComponent {
302
338
  * Event emitted whenever a conversation is selected
303
339
  */
304
340
  this.ConversationSelected = new EventEmitter();
341
+ /**
342
+ * This event fires whenever a new report is created.
343
+ */
344
+ this.NewReportCreated = new EventEmitter();
345
+ /**
346
+ * Internal state variable to track if the conversation list is visible or not. Defaults to true. Conversation List only is shown if this is true and ShowConversationList is true.
347
+ */
348
+ this.IsConversationListVisible = true;
305
349
  this._showScrollToBottomIcon = false;
350
+ this._AskSkipTextboxPlaceholder = 'Type your message here...';
306
351
  this._messageInProgress = false;
307
352
  this._conversationsInProgress = {};
308
353
  this._conversationsToReload = {};
@@ -345,6 +390,8 @@ export class SkipChatComponent extends BaseAngularComponent {
345
390
  this._usedStartMessages = [];
346
391
  this._processingStatus = {};
347
392
  this.isDataContextDialogVisible = false;
393
+ this.confirmMessageEditOrDeleteDialogOpen = false;
394
+ this.messageEditOrDeleteType = 'edit';
348
395
  }
349
396
  ngOnInit() {
350
397
  this.SubscribeToNotifications();
@@ -381,6 +428,16 @@ export class SkipChatComponent extends BaseAngularComponent {
381
428
  splitterCollapseStateChanged(e) {
382
429
  InvokeManualResize();
383
430
  }
431
+ get ConversationListCurrentlyVisible() {
432
+ return this.IsConversationListVisible && this.ShowConversationList;
433
+ }
434
+ DisplayConversationList(show = true) {
435
+ if (show !== this.IsConversationListVisible) {
436
+ this.IsConversationListVisible = show;
437
+ this.cdRef.detectChanges();
438
+ InvokeManualResize();
439
+ }
440
+ }
384
441
  GetConversationItemClass(item) {
385
442
  var _a;
386
443
  let classInfo = '';
@@ -417,6 +474,7 @@ export class SkipChatComponent extends BaseAngularComponent {
417
474
  obj.RefreshMessage();
418
475
  }
419
476
  }
477
+ this._AskSkipTextboxPlaceholder = this.ProcessingTextBoxPlaceholder;
420
478
  }
421
479
  else {
422
480
  if (this._temporaryMessage) {
@@ -424,6 +482,7 @@ export class SkipChatComponent extends BaseAngularComponent {
424
482
  this.RemoveMessageFromCurrentConversation(this._temporaryMessage);
425
483
  this._temporaryMessage = undefined;
426
484
  }
485
+ this._AskSkipTextboxPlaceholder = this.DefaultTextboxPlaceholder;
427
486
  }
428
487
  }
429
488
  SetSelectedConversationUser() {
@@ -685,8 +744,9 @@ export class SkipChatComponent extends BaseAngularComponent {
685
744
  const newIdx = idx > 0 ? idx - 1 : 0;
686
745
  this.SelectConversation(this.Conversations[newIdx]);
687
746
  }
688
- else
747
+ else {
689
748
  this.Messages = [];
749
+ }
690
750
  }
691
751
  else {
692
752
  this.notificationService.CreateSimpleNotification('Error deleting conversation', 'error', 5000);
@@ -770,12 +830,15 @@ export class SkipChatComponent extends BaseAngularComponent {
770
830
  SelectConversation(conversation) {
771
831
  return __awaiter(this, void 0, void 0, function* () {
772
832
  var _a;
833
+ if (this.IsSkipProcessing(conversation)) {
834
+ return; // already processing this conversation so don't go back and forth
835
+ }
773
836
  if (conversation && conversation.ID !== ((_a = this.SelectedConversation) === null || _a === void 0 ? void 0 : _a.ID)) {
774
837
  // load up the conversation if not already the one that's loaded
775
838
  this._conversationLoadComplete = false;
776
839
  this.ClearMessages();
777
- const oldStatus = this._processingStatus[conversation.ID];
778
- this._processingStatus[conversation.ID] = true;
840
+ const oldStatus = this.IsSkipProcessing(conversation);
841
+ this.setProcessingStatus(conversation.ID, true);
779
842
  this.SelectedConversation = conversation;
780
843
  this.SetSelectedConversationUser();
781
844
  this.DataContextID = conversation.DataContextID ? conversation.DataContextID : '';
@@ -800,11 +863,11 @@ export class SkipChatComponent extends BaseAngularComponent {
800
863
  const result = yield this.RunViewToUse.RunView({
801
864
  EntityName: 'Conversation Details',
802
865
  ExtraFilter: `ConversationID='${conversation.ID}'`,
803
- OrderBy: '__mj_CreatedAt ASC', // show messages in order of creation
866
+ OrderBy: '__mj_CreatedAt ASC' // show messages in order of creation,
804
867
  });
805
868
  if (result && result.Success) {
806
869
  // copy the results into NEW objects into the array, we don't want to modify the original objects
807
- this.Messages = [...result.Results];
870
+ this.Messages = result.Results;
808
871
  // also, cache the messages within the conversation, but create new array with the same objects
809
872
  convoAny._Messages = [...this.Messages];
810
873
  }
@@ -818,7 +881,7 @@ export class SkipChatComponent extends BaseAngularComponent {
818
881
  this._scrollToBottom = true; // this results in the angular after Viewchecked scrolling to bottom when it's done
819
882
  this.cdRef.reattach(); // resume change detection
820
883
  }
821
- this._processingStatus[conversation.ID] = oldStatus; // set back to old status as it might have been processing
884
+ this.setProcessingStatus(conversation.ID, oldStatus); // set back to old status as it might have been processing
822
885
  InvokeManualResize(500);
823
886
  // ensure the list box has the conversation in view
824
887
  this.scrollToConversation(conversation.ID);
@@ -872,16 +935,25 @@ export class SkipChatComponent extends BaseAngularComponent {
872
935
  this._usedStartMessages.push(SkipChatComponent._startMessages[idx]);
873
936
  return SkipChatComponent._startMessages[idx];
874
937
  }
938
+ setProcessingStatus(conversationId, status) {
939
+ if (conversationId) {
940
+ this._processingStatus[conversationId] = status;
941
+ // if the current conversation, update the panel messages so they know we've changed our processing state
942
+ if (this.SelectedConversation && this.SelectedConversation.ID === conversationId) {
943
+ this.UpdateAllPanelMessages();
944
+ }
945
+ }
946
+ }
875
947
  sendPrompt(val) {
876
948
  return __awaiter(this, void 0, void 0, function* () {
877
- var _a, _b, _c, _d;
949
+ var _a, _b, _c;
878
950
  const convoID = this.SelectedConversation ? this.SelectedConversation.ID : '';
879
951
  if (this._conversationsInProgress[convoID]) {
880
952
  // don't allow sending another message if we're in the midst of sending one
881
953
  return;
882
954
  }
883
955
  if (this.SelectedConversation) {
884
- this._processingStatus[(_a = this.SelectedConversation) === null || _a === void 0 ? void 0 : _a.ID] = true;
956
+ this.setProcessingStatus((_a = this.SelectedConversation) === null || _a === void 0 ? void 0 : _a.ID, true);
885
957
  }
886
958
  if (val && val.length > 0) {
887
959
  this._conversationsInProgress[convoID] = true;
@@ -906,18 +978,18 @@ export class SkipChatComponent extends BaseAngularComponent {
906
978
  if (convoID !== ((_b = this.SelectedConversation) === null || _b === void 0 ? void 0 : _b.ID)) {
907
979
  // this scenario arises when we have a selected convo change after we submitted our request to skip
908
980
  // so we do nothing here other than update the status.
909
- this._processingStatus[convoID] = false;
981
+ this.setProcessingStatus(convoID, false);
910
982
  //the next time the user selects this convo, we will fetch messages
911
983
  //from the server rather than using the ones in cache
912
984
  this._conversationsToReload[convoID] = true;
913
985
  }
914
986
  else {
915
- this._processingStatus[convoID] = false;
987
+ this.setProcessingStatus(convoID, false);
916
988
  const innerResult = JSON.parse(skipResult.Result);
917
989
  if (!this.SelectedConversation) {
918
990
  const convo = yield p.GetEntityObject('Conversations', p.CurrentUser);
919
991
  yield convo.Load(skipResult.ConversationId);
920
- this._processingStatus[skipResult.ConversationId] = true;
992
+ this.setProcessingStatus(skipResult.ConversationId, true);
921
993
  this.Conversations.push(convo);
922
994
  this.SelectedConversation = convo;
923
995
  this.SetSelectedConversationUser();
@@ -945,8 +1017,9 @@ export class SkipChatComponent extends BaseAngularComponent {
945
1017
  }
946
1018
  }
947
1019
  this._scrollToBottom = true; // this results in the angular after Viewchecked scrolling to bottom when it's done
948
- if (this.SelectedConversation)
949
- this._processingStatus[(_d = this.SelectedConversation) === null || _d === void 0 ? void 0 : _d.ID] = false;
1020
+ if (this.SelectedConversation) {
1021
+ this.setProcessingStatus(this.SelectedConversation.ID, false);
1022
+ }
950
1023
  this.AllowSend = true;
951
1024
  this._conversationsInProgress[convoID] = false;
952
1025
  this._messageInProgress = false;
@@ -977,6 +1050,10 @@ export class SkipChatComponent extends BaseAngularComponent {
977
1050
  }
978
1051
  AddMessageToCurrentConversation(detail, stopChangeDetection, cacheMessage) {
979
1052
  // update the local binding for the UI
1053
+ if (this.Messages.find((m) => m.ID === detail.ID) || this.Messages.find(m => m === detail)) {
1054
+ // we already have this message, so don't add it again
1055
+ return;
1056
+ }
980
1057
  this.Messages.push(detail);
981
1058
  if (cacheMessage) {
982
1059
  // update the cache of messages for the selected conversation
@@ -1022,6 +1099,25 @@ export class SkipChatComponent extends BaseAngularComponent {
1022
1099
  this.cdRef.reattach();
1023
1100
  }
1024
1101
  }
1102
+ UpdatePanelMessage(messageDetail, invokeChangeDetection = true) {
1103
+ const ref = messageDetail._componentRef;
1104
+ if (ref) {
1105
+ const obj = ref.instance;
1106
+ obj.ConversationMessages = this.Messages; // update this so it can handle its rendering appropriately
1107
+ obj.ConversationProcessing = this.IsSkipProcessing(this.SelectedConversation); // update this so it can handle its rendering appropriately
1108
+ if (invokeChangeDetection) {
1109
+ this.cdRef.markForCheck();
1110
+ }
1111
+ }
1112
+ }
1113
+ UpdateAllPanelMessages() {
1114
+ if (this.Messages && this.Messages.length > 0) {
1115
+ this.Messages.forEach((m) => {
1116
+ this.UpdatePanelMessage(m, false);
1117
+ });
1118
+ this.cdRef.markForCheck();
1119
+ }
1120
+ }
1025
1121
  // Method to dynamically add a message
1026
1122
  AddMessageToPanel(messageDetail, stopChangeDetection) {
1027
1123
  // Temporarily stop change detection for performance
@@ -1030,9 +1126,19 @@ export class SkipChatComponent extends BaseAngularComponent {
1030
1126
  const componentRef = this.askSkip.viewContainerRef.createComponent(SkipSingleMessageComponent);
1031
1127
  // Pass the message details to the component instance
1032
1128
  const obj = componentRef.instance;
1129
+ // bubble up events from the single message component to the parent component
1033
1130
  obj.NavigateToMatchingReport.subscribe((reportId) => {
1034
1131
  this.NavigateToMatchingReport.emit(reportId);
1035
1132
  });
1133
+ obj.NewReportCreated.subscribe((reportId) => {
1134
+ this.NewReportCreated.emit(reportId);
1135
+ });
1136
+ obj.DeleteMessageRequested.subscribe((message) => {
1137
+ this.HandleMessageDeleteRequest(message);
1138
+ });
1139
+ obj.EditMessageRequested.subscribe((message) => {
1140
+ this.HandleMessageEditRequest(message);
1141
+ });
1036
1142
  obj.Provider = this.ProviderToUse;
1037
1143
  obj.SkipMarkOnlyLogoURL = this.SkipMarkOnlyLogoURL;
1038
1144
  obj.UserImage = this.UserImage;
@@ -1041,6 +1147,8 @@ export class SkipChatComponent extends BaseAngularComponent {
1041
1147
  obj.DataContext = this.DataContext;
1042
1148
  obj.ConversationUser = this.SelectedConversationUser;
1043
1149
  obj.ConversationMessages = this.Messages; // pass this on so that the single message has access to the full conversation, for example to know if it is the first/last/only message in the conversation/etc
1150
+ // bind the processing status to the component
1151
+ obj.ConversationProcessing = this.IsSkipProcessing(this.SelectedConversation);
1044
1152
  // Whenever the suggested question is clicked on by the user in the single message component, we want to bubble that up here and send the prompt
1045
1153
  obj.SuggestedQuestionSelected.subscribe((question) => {
1046
1154
  this.sendPrompt(question);
@@ -1194,11 +1302,15 @@ export class SkipChatComponent extends BaseAngularComponent {
1194
1302
  });
1195
1303
  }
1196
1304
  IsSkipProcessing(Conversation) {
1197
- if (this._processingStatus[Conversation.ID]) {
1305
+ if (!Conversation) {
1306
+ return false;
1307
+ }
1308
+ else if (this._processingStatus[Conversation.ID]) {
1198
1309
  return this._processingStatus[Conversation.ID];
1199
1310
  }
1200
- else
1311
+ else {
1201
1312
  return false;
1313
+ }
1202
1314
  }
1203
1315
  IsTextAreaEmpty() {
1204
1316
  if (this.askSkipInput && this.askSkipInput.nativeElement) {
@@ -1246,6 +1358,103 @@ export class SkipChatComponent extends BaseAngularComponent {
1246
1358
  this.loadConversations(convoIDParam);
1247
1359
  });
1248
1360
  }
1361
+ HandleMessageEditOrDeleteRequest(message, type) {
1362
+ if (this.SelectedConversation && !this.IsSkipProcessing(this.SelectedConversation)) {
1363
+ this.messageToEditOrDelete = message;
1364
+ this.messageEditOrDeleteType = type;
1365
+ this.confirmMessageEditOrDeleteDialogOpen = true;
1366
+ }
1367
+ }
1368
+ HandleMessageEditRequest(message) {
1369
+ this.HandleMessageEditOrDeleteRequest(message, 'edit');
1370
+ }
1371
+ HandleMessageDeleteRequest(message) {
1372
+ this.HandleMessageEditOrDeleteRequest(message, 'delete');
1373
+ }
1374
+ closeMessageEditOrDeleteDialog(yesno) {
1375
+ this.confirmMessageEditOrDeleteDialogOpen = false;
1376
+ if (this.messageToEditOrDelete && yesno === 'yes') {
1377
+ // the user has requested to either edit or delete the message. This situation calls
1378
+ // for (a) removing all subsequent messages in the conversation in both cases
1379
+ // in the case where they are editing an existing message, we edit the current message
1380
+ // and then resubmit it. In both cases in the UI we have to update by removing all
1381
+ // subsequent messages.
1382
+ if (this.messageEditOrDeleteType === 'edit') {
1383
+ this.editMessage(this.messageToEditOrDelete);
1384
+ }
1385
+ else {
1386
+ this.deleteMessage(this.messageToEditOrDelete);
1387
+ }
1388
+ }
1389
+ }
1390
+ editMessage(message) {
1391
+ return __awaiter(this, void 0, void 0, function* () {
1392
+ const oldMessageText = message.Message;
1393
+ yield this.deleteMessage(message);
1394
+ // now add the text from the message to the input box
1395
+ this.askSkipInput.nativeElement.value = oldMessageText;
1396
+ // this will let the user edit the message and submit it
1397
+ });
1398
+ }
1399
+ deleteMessage(message) {
1400
+ return __awaiter(this, void 0, void 0, function* () {
1401
+ if (!this.SelectedConversation || this.IsSkipProcessing(this.SelectedConversation)) {
1402
+ return; // don't allow deleting messages while we're processing or don't have a selected convo
1403
+ }
1404
+ this.setProcessingStatus(this.SelectedConversation.ID, true);
1405
+ // first find all the subsequent messages in the conversation
1406
+ const idx = this.Messages.findIndex((m) => m.ID === message.ID);
1407
+ if (idx >= 0) {
1408
+ const currentAndSubsequentMessages = this.Messages.slice(idx);
1409
+ const tg = yield this.ProviderToUse.CreateTransactionGroup();
1410
+ for (const m of currentAndSubsequentMessages) {
1411
+ // need to create the BaseEntity subclass for the conversation detail entity
1412
+ // as our initial load of the conversation detail entity is not a full object it is
1413
+ // a simple javascript object.
1414
+ const actualEntityObject = yield this.ProviderToUse.GetEntityObject('Conversation Details', this.ProviderToUse.CurrentUser);
1415
+ if (yield actualEntityObject.Load(m.ID)) {
1416
+ // check to see if it loaded succesfully or not, sometimes it is already deleted
1417
+ if (actualEntityObject.ConversationID === this.SelectedConversation.ID) {
1418
+ actualEntityObject.TransactionGroup = tg;
1419
+ actualEntityObject.Delete(); // no await as we'll await the transaciton group below
1420
+ }
1421
+ else {
1422
+ // didn't load successfully, drop to console, possibly the record was already deleted, non-fatal
1423
+ console.log('Error loading conversation detail entity for deletion', m);
1424
+ }
1425
+ }
1426
+ else {
1427
+ // problem loading the entity, drop to console, possibly the record was already deleted, non-fatal
1428
+ console.log('Error loading conversation detail entity for deletion', m);
1429
+ }
1430
+ }
1431
+ // now submit the transaction group
1432
+ if (yield tg.Submit()) {
1433
+ // now clean up the arrays within this.Messages and also the current conversation's Messages array
1434
+ // remove all messages inluding and after the idx
1435
+ // this.Messages = this.Messages.slice(0, idx);
1436
+ // const convoAny = <any>this.SelectedConversation;
1437
+ // if (convoAny) {
1438
+ // convoAny._Messages = this.Messages;
1439
+ // }
1440
+ // for (const m of currentAndSubsequentMessages) {
1441
+ // // now remove the message from the UI
1442
+ // this.RemoveMessageFromCurrentConversation(m);
1443
+ // }
1444
+ // this.UpdateAllPanelMessages(); // update remaining messages in the panel so they have the correct messages array and processing status
1445
+ this.setProcessingStatus(this.SelectedConversation.ID, false); // done
1446
+ const convo = this.SelectedConversation;
1447
+ this.SelectedConversation = undefined; // wipe out so the below does something
1448
+ this.SelectConversation(convo); // reload the conversation to get the latest messages
1449
+ }
1450
+ else {
1451
+ // alert the user to the error
1452
+ this.setProcessingStatus(this.SelectedConversation.ID, false); // done
1453
+ this.notificationService.CreateSimpleNotification('Error deleting messages', 'error', 3000);
1454
+ }
1455
+ }
1456
+ });
1457
+ }
1249
1458
  }
1250
1459
  SkipChatComponent.__skipChatWindowsCurrentlyVisible = 0;
1251
1460
  SkipChatComponent._startMessages = [
@@ -1276,29 +1485,31 @@ SkipChatComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipChatC
1276
1485
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.askSkipInput = _t.first);
1277
1486
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.scrollContainer = _t.first);
1278
1487
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.topLevelDiv = _t.first);
1279
- } }, inputs: { AllowSend: "AllowSend", Messages: "Messages", Conversations: "Conversations", SelectedConversation: "SelectedConversation", ConversationEditMode: "ConversationEditMode", ShowConversationList: "ShowConversationList", AllowNewConversations: "AllowNewConversations", Title: "Title", DataContextID: "DataContextID", LinkedEntity: "LinkedEntity", LinkedEntityCompositeKey: "LinkedEntityCompositeKey", ShowDataContextButton: "ShowDataContextButton", IncludeLinkedConversationsInList: "IncludeLinkedConversationsInList", SkipLogoURL: "SkipLogoURL", SkipMarkOnlyLogoURL: "SkipMarkOnlyLogoURL", UserImage: "UserImage", UpdateAppRoute: "UpdateAppRoute", WelcomeQuestions: "WelcomeQuestions", AutoLoad: "AutoLoad" }, outputs: { NavigateToMatchingReport: "NavigateToMatchingReport", ConversationSelected: "ConversationSelected" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 22, vars: 11, consts: [["topLevelDiv", ""], ["AskSkipPanel", "", "scrollContainer", ""], ["AskSkipInput", ""], ["conversationList", ""], ["mjFillContainer", "", 1, "chat-container", 3, "bottomMargin", "rightMargin"], ["orientation", "horizontal"], ["size", "272px", 3, "collapsible", "scrollable", "resizable", "collapsedChange", 4, "ngIf"], ["mjFillContainer", "", 1, "conversation-wrapper"], [1, "messages", 3, "scroll"], ["class", "waiting-for-ai", 4, "ngIf"], ["class", "welcome-wrapper", 4, "ngIf"], ["mjContainer", "", "mjSkipResize", "true"], ["class", "scroll-to-bottom-icon", 3, "click", 4, "ngIf"], [1, "input-area"], [1, "text-area-wrapper"], ["type", "text", "placeholder", "Ask Skip a question", 3, "keyup.enter", "input", "disabled"], ["kendoButton", ""], ["kendoButton", "", 3, "click", "disabled"], [1, "fas", "fa-solid", "fa-arrow-up"], [4, "ngIf"], ["title", "Please confirm", 3, "minWidth", "width", "close", 4, "ngIf"], ["size", "272px", 3, "collapsedChange", "collapsible", "scrollable", "resizable"], ["class", "conversation-history", 4, "ngIf"], [1, "conversation-history"], [1, "new-chat-area"], [1, "avatar", 3, "src"], ["kendoButton", "", 3, "click", 4, "ngIf"], ["mjFillContainer", "", 1, "conversation-list", 3, "data", "itemClass", "fillWidth", "bottomMargin"], ["kendoListViewItemTemplate", ""], ["kendoButton", "", 3, "click"], [1, "conversation-item", 3, "click", "ngClass", "title"], ["class", "fa-regular fa-clock", 4, "ngIf"], [1, "text-container"], ["maxlength", "100", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["class", "edit-conversation-panel", 4, "ngIf"], [1, "fa-regular", "fa-clock"], ["maxlength", "100", 3, "ngModelChange", "ngModel"], [1, "edit-conversation-panel"], ["class", "fa-solid fa-pen-to-square", 3, "click", 4, "ngIf"], ["class", "fa-regular fa-trash-can", 3, "click", 4, "ngIf"], ["class", "fa-solid fa-check", 3, "click", 4, "ngIf"], ["class", "fa-solid fa-xmark", 3, "click", 4, "ngIf"], [1, "fa-solid", "fa-pen-to-square", 3, "click"], [1, "fa-regular", "fa-trash-can", 3, "click"], [1, "fa-solid", "fa-check", 3, "click"], [1, "fa-solid", "fa-xmark", 3, "click"], [1, "waiting-for-ai"], [1, "welcome-wrapper"], [1, "welcome-message"], [3, "src"], [1, "welcome-header-text"], [1, "welcome-suggested-questions"], [1, "welcome-suggested-questions-col"], [1, "welcome-question", 3, "click"], [1, "welcome-question-header"], [1, "scroll-to-bottom-icon", 3, "click"], [1, "fas", "fa-arrow-down"], [1, "fa-solid", "fa-gear", 3, "click"], [3, "dialogClosed", "dataContextId", "Provider"], ["title", "Please confirm", 3, "close", "minWidth", "width"], [2, "margin", "30px", "text-align", "center"], ["kendoButton", "", "themeColor", "primary", 3, "click"]], template: function SkipChatComponent_Template(rf, ctx) { if (rf & 1) {
1488
+ } }, inputs: { AllowSend: "AllowSend", Messages: "Messages", Conversations: "Conversations", SelectedConversation: "SelectedConversation", ConversationEditMode: "ConversationEditMode", ShowConversationList: "ShowConversationList", AllowNewConversations: "AllowNewConversations", Title: "Title", DataContextID: "DataContextID", LinkedEntity: "LinkedEntity", LinkedEntityCompositeKey: "LinkedEntityCompositeKey", ShowDataContextButton: "ShowDataContextButton", IncludeLinkedConversationsInList: "IncludeLinkedConversationsInList", SkipLogoURL: "SkipLogoURL", SkipMarkOnlyLogoURL: "SkipMarkOnlyLogoURL", UserImage: "UserImage", UpdateAppRoute: "UpdateAppRoute", ShowSkipLogoInConversationList: "ShowSkipLogoInConversationList", DefaultTextboxPlaceholder: "DefaultTextboxPlaceholder", ProcessingTextBoxPlaceholder: "ProcessingTextBoxPlaceholder", WelcomeQuestions: "WelcomeQuestions", AutoLoad: "AutoLoad" }, outputs: { NavigateToMatchingReport: "NavigateToMatchingReport", ConversationSelected: "ConversationSelected", NewReportCreated: "NewReportCreated" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 24, vars: 14, consts: [["topLevelDiv", ""], ["AskSkipPanel", "", "scrollContainer", ""], ["AskSkipInput", ""], ["conversationList", ""], ["mjFillContainer", "", 1, "chat-container", 3, "bottomMargin", "rightMargin"], [1, "layout"], [1, "left-panel"], [1, "fa-solid", "fa-table-columns", "toggle-icon"], [1, "right-panel"], ["mjFillContainer", "", 1, "conversation-wrapper"], [1, "messages", 3, "scroll"], ["class", "waiting-for-ai", 4, "ngIf"], ["class", "welcome-wrapper", 4, "ngIf"], ["mjContainer", "", "mjSkipResize", "true"], ["class", "scroll-to-bottom-icon", 3, "click", 4, "ngIf"], [1, "input-area"], [1, "text-area-wrapper"], ["type", "text", 3, "keyup.enter", "input", "disabled", "placeholder"], ["kendoButton", ""], ["kendoButton", "", 3, "click", "disabled"], [1, "fas", "fa-solid", "fa-arrow-up"], [4, "ngIf"], ["title", "Please confirm", 3, "minWidth", "width", "close", 4, "ngIf"], [1, "conversation-history"], [1, "new-chat-area"], [1, "fa-solid", "fa-table-columns", "toggle-icon", 3, "click"], [1, "avatar", 3, "src"], [1, "fa-solid", "fa-pen-to-square", "new-convo-icon"], ["mjFillContainer", "", 1, "conversation-list", 3, "data", "itemClass", "fillWidth", "bottomMargin"], ["kendoListViewItemTemplate", ""], [1, "fa-solid", "fa-pen-to-square", "new-convo-icon", 3, "click"], [1, "conversation-item", 3, "click", "ngClass", "title"], ["class", "fa-regular fa-clock", 4, "ngIf"], [1, "text-container"], ["maxlength", "100", 3, "ngModel", "ngModelChange", 4, "ngIf"], ["class", "edit-conversation-panel", 4, "ngIf"], [1, "fa-regular", "fa-clock"], ["maxlength", "100", 3, "ngModelChange", "ngModel"], [1, "edit-conversation-panel"], ["class", "fa-solid fa-pen-to-square", 3, "click", 4, "ngIf"], ["class", "fa-regular fa-trash-can", 3, "click", 4, "ngIf"], ["class", "fa-solid fa-check", 3, "click", 4, "ngIf"], ["class", "fa-solid fa-xmark", 3, "click", 4, "ngIf"], [1, "fa-solid", "fa-pen-to-square", 3, "click"], [1, "fa-regular", "fa-trash-can", 3, "click"], [1, "fa-solid", "fa-check", 3, "click"], [1, "fa-solid", "fa-xmark", 3, "click"], [1, "waiting-for-ai"], [1, "welcome-wrapper"], [1, "welcome-message"], [3, "src"], [1, "welcome-header-text"], [1, "welcome-suggested-questions"], [1, "welcome-suggested-questions-col"], [1, "welcome-question", 3, "click"], [1, "welcome-question-header"], [1, "scroll-to-bottom-icon", 3, "click"], [1, "fas", "fa-arrow-down"], [1, "fa-solid", "fa-gear", 3, "click"], [3, "dialogClosed", "dataContextId", "Provider"], ["title", "Please confirm", 3, "close", "minWidth", "width"], [2, "margin", "30px", "text-align", "center"], ["kendoButton", "", "themeColor", "primary", 3, "click"], ["kendoButton", "", 3, "click"]], template: function SkipChatComponent_Template(rf, ctx) { if (rf & 1) {
1280
1489
  const _r1 = i0.ɵɵgetCurrentView();
1281
- i0.ɵɵelementStart(0, "div", 4, 0)(2, "kendo-splitter", 5);
1282
- i0.ɵɵtemplate(3, SkipChatComponent_kendo_splitter_pane_3_Template, 2, 4, "kendo-splitter-pane", 6);
1283
- i0.ɵɵelementStart(4, "kendo-splitter-pane")(5, "div", 7)(6, "div", 8, 1);
1284
- i0.ɵɵlistener("scroll", function SkipChatComponent_Template_div_scroll_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.checkScroll()); });
1285
- i0.ɵɵtemplate(9, SkipChatComponent_div_9_Template, 1, 0, "div", 9)(10, SkipChatComponent_div_10_Template, 28, 9, "div", 10);
1286
- i0.ɵɵelement(11, "div", 11);
1287
- i0.ɵɵtemplate(12, SkipChatComponent_span_12_Template, 2, 0, "span", 12);
1490
+ i0.ɵɵelementStart(0, "div", 4, 0)(2, "div", 5);
1491
+ i0.ɵɵtemplate(3, SkipChatComponent_Conditional_3_Template, 9, 9, "div", 6)(4, SkipChatComponent_Conditional_4_Template, 1, 0, "span", 7);
1492
+ i0.ɵɵelementStart(5, "div", 8)(6, "div", 9)(7, "div", 10, 1);
1493
+ i0.ɵɵlistener("scroll", function SkipChatComponent_Template_div_scroll_7_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.checkScroll()); });
1494
+ i0.ɵɵtemplate(10, SkipChatComponent_div_10_Template, 1, 0, "div", 11)(11, SkipChatComponent_div_11_Template, 28, 9, "div", 12);
1495
+ i0.ɵɵelement(12, "div", 13);
1496
+ i0.ɵɵtemplate(13, SkipChatComponent_span_13_Template, 2, 0, "span", 14);
1288
1497
  i0.ɵɵelementEnd();
1289
- i0.ɵɵelementStart(13, "div", 13)(14, "div", 14)(15, "textarea", 15, 2);
1290
- i0.ɵɵlistener("keyup.enter", function SkipChatComponent_Template_textarea_keyup_enter_15_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onEnter($event)); })("input", function SkipChatComponent_Template_textarea_input_15_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputChange($event)); });
1498
+ i0.ɵɵelementStart(14, "div", 15)(15, "div", 16)(16, "textarea", 17, 2);
1499
+ i0.ɵɵlistener("keyup.enter", function SkipChatComponent_Template_textarea_keyup_enter_16_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onEnter($event)); })("input", function SkipChatComponent_Template_textarea_input_16_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInputChange($event)); });
1291
1500
  i0.ɵɵelementEnd()();
1292
- i0.ɵɵtemplate(17, SkipChatComponent_Conditional_17_Template, 2, 0, "button", 16);
1293
- i0.ɵɵelementStart(18, "button", 17);
1294
- i0.ɵɵlistener("click", function SkipChatComponent_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.sendSkipMessage()); });
1295
- i0.ɵɵelement(19, "span", 18);
1501
+ i0.ɵɵtemplate(18, SkipChatComponent_Conditional_18_Template, 2, 0, "button", 18);
1502
+ i0.ɵɵelementStart(19, "button", 19);
1503
+ i0.ɵɵlistener("click", function SkipChatComponent_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.sendSkipMessage()); });
1504
+ i0.ɵɵelement(20, "span", 20);
1296
1505
  i0.ɵɵelementEnd()()()()()();
1297
- i0.ɵɵtemplate(20, SkipChatComponent_div_20_Template, 2, 2, "div", 19)(21, SkipChatComponent_kendo_dialog_21_Template, 8, 3, "kendo-dialog", 20);
1506
+ i0.ɵɵtemplate(21, SkipChatComponent_div_21_Template, 2, 2, "div", 21)(22, SkipChatComponent_kendo_dialog_22_Template, 8, 3, "kendo-dialog", 22)(23, SkipChatComponent_kendo_dialog_23_Template, 8, 3, "kendo-dialog", 22);
1298
1507
  } if (rf & 2) {
1299
1508
  i0.ɵɵproperty("bottomMargin", 10)("rightMargin", 10);
1300
1509
  i0.ɵɵadvance(3);
1301
- i0.ɵɵproperty("ngIf", ctx.ShowConversationList);
1510
+ i0.ɵɵconditional(ctx.IsConversationListVisible ? 3 : -1);
1511
+ i0.ɵɵadvance();
1512
+ i0.ɵɵconditional(!ctx.IsConversationListVisible ? 4 : -1);
1302
1513
  i0.ɵɵadvance(6);
1303
1514
  i0.ɵɵproperty("ngIf", ctx.Messages && ctx.Messages.length > 0 && ctx.SelectedConversation && ctx.IsSkipProcessing(ctx.SelectedConversation));
1304
1515
  i0.ɵɵadvance();
@@ -1306,19 +1517,21 @@ SkipChatComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipChatC
1306
1517
  i0.ɵɵadvance(2);
1307
1518
  i0.ɵɵproperty("ngIf", ctx._showScrollToBottomIcon && ctx.Messages && ctx.Messages.length > 0);
1308
1519
  i0.ɵɵadvance(3);
1309
- i0.ɵɵproperty("disabled", ctx.SelectedConversation && ctx.IsSkipProcessing(ctx.SelectedConversation));
1520
+ i0.ɵɵproperty("disabled", ctx.SelectedConversation && ctx.IsSkipProcessing(ctx.SelectedConversation))("placeholder", ctx._AskSkipTextboxPlaceholder);
1310
1521
  i0.ɵɵadvance(2);
1311
- i0.ɵɵconditional(ctx.ShowDataContextButton ? 17 : -1);
1522
+ i0.ɵɵconditional(ctx.ShowDataContextButton ? 18 : -1);
1312
1523
  i0.ɵɵadvance();
1313
1524
  i0.ɵɵproperty("disabled", ctx.IsTextAreaEmpty() || ctx.SelectedConversation !== undefined && ctx.IsSkipProcessing(ctx.SelectedConversation));
1314
1525
  i0.ɵɵadvance(2);
1315
1526
  i0.ɵɵproperty("ngIf", ctx.isDataContextDialogVisible);
1316
1527
  i0.ɵɵadvance();
1317
1528
  i0.ɵɵproperty("ngIf", ctx.confirmDeleteConversationDialogOpen);
1318
- } }, dependencies: [i2.NgClass, i2.NgIf, i4.SplitterComponent, i4.SplitterPaneComponent, i5.DefaultValueAccessor, i5.NgControlStatus, i5.MaxLengthValidator, i5.NgModel, i6.DialogComponent, i6.DialogActionsComponent, i7.FillContainer, i7.Container, i8.ItemTemplateDirective, i8.ListViewComponent, i9.ButtonComponent, i10.DataContextDialogComponent], styles: [".chat-container[_ngcontent-%COMP%] {\n padding: 5px;\n display: flex;\n flex-direction: row;\n height: 100%;\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n \n\n width: 100%;\n height: 100%;\n\n background-color: #f9f9f9;\n}\n\n.conversation-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n position: relative; \n\n background-color: #f9f9f9;\n}\n\n.new-conversation[_ngcontent-%COMP%] {\n height: 30px;\n font-size: large;\n}\n\n.conversation-history[_ngcontent-%COMP%] {\n width: 260px;\n min-width: 260px;\n height: 100%;\n overflow-y: auto; \n\n margin-right: 10px;\n padding-top: 5px;\n background-color: #f9f9f9;\n margin-top: 0px; \n padding: 12px; \n}\n\n.k-tabstrip-content-for-skip[_ngcontent-%COMP%] {\n padding: 0;\n padding-block: 0;\n}\n\n\n.conversation-history[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n height: 25px;\n}\n\n.skip-title[_ngcontent-%COMP%] {\n font-size: larger;\n margin-bottom: 5px;\n height: 20px;\n margin-top: 5px;\n}\n\n.conversation-list[_ngcontent-%COMP%] {\n margin-top: 5px;\n padding-top: 5px;\n \n border: 0;\n background-color: #f9f9f9;\n}\n\n\n\n\n\n.welcome-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.welcome-message[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n overflow: hidden;\n height: 100%;\n}\n\n.embedded-conversations[_ngcontent-%COMP%] {\n margin-left: 3px;\n margin-top: 5px;\n font-size: 10pt;\n color: rgb(48, 48, 235);\n}\n.embedded-conversations[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n margin-top: 4px;\n margin-left: 5px;\n cursor: pointer;\n}\n.conversation-item-linked[_ngcontent-%COMP%] {\n color: rgb(48, 48, 235);\n}\n\n.welcome-message[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 120px;\n height: 50px;\n margin-bottom: 20px; \n\n}\n\n.welcome-header-text[_ngcontent-%COMP%] {\n font-size: larger;\n font-weight: bold;\n}\n\n\n\n.welcome-suggested-questions[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n}\n.welcome-suggested-questions-col[_ngcontent-%COMP%] {\n display: flex;\n}\n\n\n\n.welcome-question[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column; \n\n align-items: left;;\n width: 300px; \n justify-content: space-between;\n margin: 5px; \n\n border: solid 1px rgba(41, 28, 28, 0.08);\n border-radius: 15px;\n padding: 10px;\n cursor: pointer;\n}\n\n.welcome-question[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n\n.welcome-question-header[_ngcontent-%COMP%] {\n font-size: 12pt;\n font-weight: bold;\n display: block; \n\n}\n\n\n\n.welcome-question[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:not(.welcome-question-header) {\n font-weight: normal;\n font-size: 10pt;\n}\n\n\n.messages[_ngcontent-%COMP%] {\n overflow-y: auto; \n\n overflow-x: hidden; \n\n \n\n margin-bottom: 5px;\n\n margin-top: 2px; \n\n\n background-color: #f9f9f9;\n flex: 1;\n}\n\n\n\n.new-chat-area[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between; \n\n align-items: center; \n\n}\n.avatar[_ngcontent-%COMP%] {\n max-height: 24px;\n margin-right: 10px;\n margin-left: 5px;\n margin-bottom: 3px;\n \n\n margin-right: auto; \n\n}\n\n.conversation-item[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-right: 5px;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 5px;\n cursor: pointer;\n overflow: hidden;\n max-height: 150px;\n font-size: 14px;\n\n display: flex;\n align-items: flex-start; \n\n\n flex-wrap: wrap; \n\n}\n\n.text-container[_ngcontent-%COMP%] {\n flex: 1; \n\n display: flex;\n flex-direction: column; \n\n}\n\n.text-container[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n resize: none; \n\n \n\n}\n\n.conversation-item[_ngcontent-%COMP%] > .conversation-icon[_ngcontent-%COMP%] {\n margin-top: 3px;\n}\n\n.conversation-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: inline-block;\n white-space: pre-wrap; \n\n overflow: auto;\n word-wrap: break-word;\n margin-left: 3px; \n\n}\n\n.conversation-item[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.conversation-item-selected[_ngcontent-%COMP%] {\n background-color: rgba(0, 0, 0, 0.15);\n}\n\n\n.conversation-item[_ngcontent-%COMP%] > .conversation-icon[_ngcontent-%COMP%] {\n margin-right: 11px;\n}\n.edit-conversation-panel[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end; \n\n margin-top: 2px; \n\n margin-right: 2px; \n\n}\n.edit-conversation-panel[_ngcontent-%COMP%] > .k-icon[_ngcontent-%COMP%] {\n margin-left: 5px;\n cursor: pointer;\n}\n.edit-conversation-panel[_ngcontent-%COMP%] > .k-icon[_ngcontent-%COMP%]:hover {\n color: #ff0000;\n}\n\n\n\n.input-area[_ngcontent-%COMP%] {\n min-height: 35px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 15px;\n}\n\n.input-area[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n vertical-align: top;\n width: 30px;\n height: 30px;\n margin-top: 3px;\n border-radius: 12px;\n}\n.input-area[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:first-of-type {\n margin-left: -40px;\n}\n.input-area[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:last-child {\n margin-left: -65px;\n}\n\n.text-area-wrapper[_ngcontent-%COMP%] {\n padding: 3px;\n border: solid 1px rgba(0, 0, 0, 0.08) ;\n border-radius: 15px;\n\n margin-top: 4px;\n margin-right: -1px;\n min-height: 42px;\n max-height: 100%; \n\n\n overflow: hidden; \n align-items: center;\n\n \n\n width: 710px; \n padding-right: 90px\n} \n.text-area-wrapper[_ngcontent-%COMP%] > textarea[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n resize: none;\n\n min-height: 20px; \n\n\n width: 100%;\n overflow-y: hidden; \n\n\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n margin-left: 7px;\n margin-top: 7px;\n margin-bottom: 5px;\n\n background-color: #f9f9f9;\n}\n\n.text-area-wrapper[_ngcontent-%COMP%] > textarea[_ngcontent-%COMP%]:disabled {\n background-color: white;\n}\n\n.input-wrapper[_ngcontent-%COMP%] {\n flex-grow: 1; \n\n height: 100%;\n}\n\n.waiting-for-ai[_ngcontent-%COMP%] {\n position: absolute;\n display: flex; \n\n bottom: 100px;\n z-index: 999;\n left: 10px; \n}\n \n.scroll-to-bottom-icon[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 100px; \n\n left: 50%; \n\n transform: translateX(-50%); \n\n z-index: 1000; \n\n background-color: white; \n\n color: black; \n\n border-radius: 50%; \n\n width: 40px; \n\n height: 40px; \n\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0px 0px 5px rgba(0,0,0,0.3); \n\n cursor: pointer;\n}\n\n@media (min-width: 600px) {\n .welcome-suggested-questions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap; \n\n align-content: flex-end; \n\n }\n}"] });
1529
+ i0.ɵɵadvance();
1530
+ i0.ɵɵproperty("ngIf", ctx.confirmMessageEditOrDeleteDialogOpen);
1531
+ } }, dependencies: [i2.NgClass, i2.NgIf, i4.DefaultValueAccessor, i4.NgControlStatus, i4.MaxLengthValidator, i4.NgModel, i5.DialogComponent, i5.DialogActionsComponent, i6.FillContainer, i6.Container, i7.ItemTemplateDirective, i7.ListViewComponent, i8.ButtonComponent, i9.DataContextDialogComponent], styles: [".layout[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: row; \n\n height: 100%; \n\n width: 100%; \n\n position: relative;\n}\n\n.left-panel[_ngcontent-%COMP%] {\n width: 272px; \n\n background-color: #f8f9fa; \n\n border-right: 1px solid #ddd; \n\n overflow-y: auto; \n\n overflow-x: hidden; \n\n position: relative;\n\n scrollbar-width: thin; \n\n scrollbar-color: #d3d3d3 #f8f9fa; \n\n}\n\n\n\n.left-panel[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px; \n\n background-color: #f8f9fa; \n\n}\n\n.left-panel[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background-color: #d3d3d3; \n\n border-radius: 4px; \n\n}\n\n.left-panel[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background-color: #c0c0c0; \n\n}\n\n.left-panel[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background-color: #f8f9fa; \n\n}\n\n.right-panel[_ngcontent-%COMP%] {\n flex: 1; \n\n overflow-y: auto; \n\n}\n\n\n.new-convo-icon[_ngcontent-%COMP%] {\n color: #808080; \n\n font-size: 18px; \n\n cursor: pointer; \n\n z-index: 10; \n\n padding: 5px;\n border-radius: 4px;\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: #808080; \n\n font-size: 18px; \n\n cursor: pointer; \n\n z-index: 10; \n\n margin-left: 6px;\n padding: 3px;\n border-radius: 3px;\n}\n \n\n.right-panel[_ngcontent-%COMP%] .toggle-icon[_ngcontent-%COMP%] {\n margin-left: 3px;\n margin-top: 2px;\n position: absolute;\n top: 10px;\n left: auto;\n right: 10px; \n\n}\n\n\n.chat-container[_ngcontent-%COMP%] {\n padding: 5px;\n display: flex;\n flex-direction: row;\n height: 100%;\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n \n\n width: 100%;\n height: 100%;\n\n background-color: #f9f9f9;\n}\n\n.conversation-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n position: relative; \n\n background-color: #f9f9f9;\n}\n\n.new-conversation[_ngcontent-%COMP%] {\n height: 30px;\n font-size: large;\n}\n\n.conversation-history[_ngcontent-%COMP%] {\n width: 240px;\n min-width: 240px;\n height: 95%;\n overflow-y: auto; \n\n overflow-x: hidden; \n\n margin-right: 10px;\n padding-top: 5px;\n background-color: #f9f9f9;\n margin-top: 0px; \n padding: 12px; \n}\n\n.k-tabstrip-content-for-skip[_ngcontent-%COMP%] {\n padding: 0;\n padding-block: 0;\n}\n\n\n.conversation-history[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n height: 25px;\n}\n\n.skip-title[_ngcontent-%COMP%] {\n font-size: larger;\n margin-bottom: 5px;\n height: 20px;\n margin-top: 5px;\n}\n\n.conversation-list[_ngcontent-%COMP%] {\n margin-top: 5px;\n padding-top: 5px;\n \n border: 0;\n background-color: #f9f9f9;\n}\n\n\n\n\n\n.welcome-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.welcome-message[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n overflow: hidden;\n height: 100%;\n}\n\n.embedded-conversations[_ngcontent-%COMP%] {\n margin-left: 3px;\n margin-top: 5px;\n font-size: 10pt;\n color: rgb(48, 48, 235);\n}\n.embedded-conversations[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n margin-top: 4px;\n margin-left: 5px;\n cursor: pointer;\n}\n.conversation-item-linked[_ngcontent-%COMP%] {\n color: rgb(48, 48, 235);\n}\n\n.welcome-message[_ngcontent-%COMP%] img[_ngcontent-%COMP%] {\n width: 120px;\n height: 50px;\n margin-bottom: 20px; \n\n}\n\n.welcome-header-text[_ngcontent-%COMP%] {\n font-size: larger;\n font-weight: bold;\n}\n\n\n\n.welcome-suggested-questions[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n}\n.welcome-suggested-questions-col[_ngcontent-%COMP%] {\n display: flex;\n}\n\n\n\n.welcome-question[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column; \n\n align-items: left;;\n width: 300px; \n justify-content: space-between;\n margin: 5px; \n\n border: solid 1px rgba(41, 28, 28, 0.08);\n border-radius: 15px;\n padding: 10px;\n cursor: pointer;\n}\n\n.welcome-question[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n\n.welcome-question-header[_ngcontent-%COMP%] {\n font-size: 12pt;\n font-weight: bold;\n display: block; \n\n}\n\n\n\n.welcome-question[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:not(.welcome-question-header) {\n font-weight: normal;\n font-size: 10pt;\n}\n\n\n.messages[_ngcontent-%COMP%] {\n overflow-y: auto; \n\n overflow-x: hidden; \n\n \n\n margin-bottom: 5px;\n\n margin-top: 2px; \n\n\n background-color: #f9f9f9;\n flex: 1;\n scrollbar-width: thin; \n\n scrollbar-color: #d3d3d3 #f8f9fa; \n\n}\n\n\n\n.messages[_ngcontent-%COMP%]::-webkit-scrollbar {\nwidth: 8px; \n\nbackground-color: #f8f9fa; \n\n}\n\n.messages[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\nbackground-color: #d3d3d3; \n\nborder-radius: 4px; \n\n}\n\n.messages[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\nbackground-color: #c0c0c0; \n\n}\n\n.messages[_ngcontent-%COMP%]::-webkit-scrollbar-track {\nbackground-color: #f8f9fa; \n\n}\n\n\n\n.new-chat-area[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between; \n\n align-items: center; \n\n}\n.avatar[_ngcontent-%COMP%] {\n max-height: 24px;\n margin-right: 10px;\n margin-left: 5px;\n margin-bottom: 3px;\n \n\n margin-right: auto; \n\n}\n\n.conversation-item[_ngcontent-%COMP%] {\n margin-left: 5px;\n margin-right: 5px;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 5px;\n cursor: pointer;\n overflow: hidden;\n max-height: 150px;\n font-size: 14px;\n\n display: flex;\n align-items: flex-start; \n\n\n flex-wrap: wrap; \n\n}\n\n.text-container[_ngcontent-%COMP%] {\n flex: 1; \n\n display: flex;\n flex-direction: column; \n\n}\n\n.text-container[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n resize: none; \n\n \n\n}\n\n.conversation-item[_ngcontent-%COMP%] > .conversation-icon[_ngcontent-%COMP%] {\n margin-top: 3px;\n}\n\n.conversation-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: inline-block;\n white-space: pre-wrap; \n\n overflow: auto;\n word-wrap: break-word;\n margin-left: 3px; \n\n}\n\n.conversation-item[_ngcontent-%COMP%]:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.conversation-item-selected[_ngcontent-%COMP%] {\n background-color: rgba(0, 0, 0, 0.15);\n}\n\n\n.conversation-item[_ngcontent-%COMP%] > .conversation-icon[_ngcontent-%COMP%] {\n margin-right: 11px;\n}\n.edit-conversation-panel[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end; \n\n margin-top: 2px; \n\n margin-right: 2px; \n\n}\n.edit-conversation-panel[_ngcontent-%COMP%] > .k-icon[_ngcontent-%COMP%] {\n margin-left: 5px;\n cursor: pointer;\n}\n.edit-conversation-panel[_ngcontent-%COMP%] > .k-icon[_ngcontent-%COMP%]:hover {\n color: #ff0000;\n}\n\n\n\n.input-area[_ngcontent-%COMP%] {\n min-height: 35px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 15px;\n}\n\n.input-area[_ngcontent-%COMP%] > button[_ngcontent-%COMP%] {\n vertical-align: top;\n width: 30px;\n height: 30px;\n margin-top: 3px;\n border-radius: 12px;\n}\n.input-area[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:first-of-type {\n margin-left: -40px;\n}\n.input-area[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:last-child {\n margin-left: -65px;\n}\n\n.text-area-wrapper[_ngcontent-%COMP%] {\n padding: 3px;\n border: solid 1px rgba(0, 0, 0, 0.08) ;\n border-radius: 15px;\n\n margin-top: 4px;\n margin-right: -1px;\n min-height: 42px;\n max-height: 100%; \n\n\n overflow: hidden; \n align-items: center;\n\n \n\n width: 710px; \n padding-right: 90px\n} \n.text-area-wrapper[_ngcontent-%COMP%] > textarea[_ngcontent-%COMP%] {\n border: 0;\n outline: 0;\n resize: none;\n\n min-height: 20px; \n\n\n width: 100%;\n overflow-y: hidden; \n\n\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n margin-left: 7px;\n margin-top: 7px;\n margin-bottom: 5px;\n\n background-color: #f9f9f9;\n}\n\n\n\n\n\n\n.input-wrapper[_ngcontent-%COMP%] {\n flex-grow: 1; \n\n height: 100%;\n}\n\n.waiting-for-ai[_ngcontent-%COMP%] {\n position: absolute;\n display: flex; \n\n bottom: 100px;\n z-index: 999;\n left: 10px; \n}\n \n.scroll-to-bottom-icon[_ngcontent-%COMP%] {\n position: absolute;\n bottom: 100px; \n\n left: 50%; \n\n transform: translateX(-50%); \n\n z-index: 1000; \n\n background-color: white; \n\n color: black; \n\n border-radius: 50%; \n\n width: 40px; \n\n height: 40px; \n\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0px 0px 5px rgba(0,0,0,0.3); \n\n cursor: pointer;\n}\n\n@media (min-width: 600px) {\n .welcome-suggested-questions[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap; \n\n align-content: flex-end; \n\n }\n}"] });
1319
1532
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkipChatComponent, [{
1320
1533
  type: Component,
1321
- args: [{ selector: 'skip-chat', template: "<div class = \"chat-container\" mjFillContainer #topLevelDiv [bottomMargin]=\"10\" [rightMargin]=\"10\">\n <kendo-splitter orientation=\"horizontal\">\n <kendo-splitter-pane *ngIf=\"ShowConversationList\" [collapsible]=\"true\" [scrollable]=\"false\" [resizable]=\"false\" size=\"272px\" (collapsedChange)=\"splitterCollapseStateChanged($event)\">\n <div class=\"conversation-history\" *ngIf=\"ShowConversationList\">\n <div class=\"new-chat-area\">\n <img [src]=\"SkipLogoURL\" class=\"avatar\" />\n <button kendoButton *ngIf=\"AllowNewConversations\" (click)=\"CreateNewConversation()\">+</button>\n </div>\n <kendo-listview\n class=\"conversation-list\"\n [data]=\"Conversations\"\n [style.height.px]=\"280\"\n [itemClass]=\"{ 'item-border': true }\" \n mjFillContainer \n [fillWidth]=\"false\"\n [bottomMargin]=\"20\"\n #conversationList\n >\n <ng-template kendoListViewItemTemplate let-dataItem=\"dataItem\">\n <div class=\"conversation-item\" \n [ngClass]=\"GetConversationItemClass(dataItem)\"\n [title]=\"dataItem.Name\" \n (click)=\"SelectConversation(dataItem)\"> \n <span *ngIf=\"SelectedConversation && IsSkipProcessing(dataItem)\" class=\"fa-regular fa-clock\"></span>\n <div class=\"text-container\">\n <span *ngIf=\"dataItem.ID !== SelectedConversation?.ID || !ConversationEditMode\">{{ dataItem.Name }}</span>\n <textarea *ngIf=\"dataItem.ID === SelectedConversation?.ID && ConversationEditMode\" [(ngModel)]=\"dataItem.Name\" maxlength=\"100\"></textarea>\n </div>\n <div *ngIf=\"SelectedConversation?.ID === dataItem.ID\" class=\"edit-conversation-panel\">\n <span *ngIf=\"!ConversationEditMode\" class=\"fa-solid fa-pen-to-square\" (click)=\"editConvo(dataItem)\"></span>\n <span *ngIf=\"!ConversationEditMode\" class=\"fa-regular fa-trash-can\" (click)=\"showDeleteConvoDialog(dataItem)\"></span>\n <span *ngIf=\"ConversationEditMode\" class=\"fa-solid fa-check\" (click)=\"saveConvoName(dataItem)\"></span>\n <span *ngIf=\"ConversationEditMode\" class=\"fa-solid fa-xmark\" (click)=\"cancelConvoEdit(dataItem)\"></span>\n </div>\n </div>\n </ng-template>\n </kendo-listview>\n <!-- COMMENTED OUT as we don't want to support embedded conversations in the UI for now\n <div class=\"embedded-conversations\"><input kendoCheckBox type=\"checkbox\" [(ngModel)]=\"IncludeLinkedConversationsInList\" (ngModelChange)=\"loadConversations()\"/> <span (click)=\"FlipEmbeddedConversationState()\">Show Linked Conversations</span></div> -->\n </div>\n </kendo-splitter-pane>\n <kendo-splitter-pane>\n <div class=\"conversation-wrapper\" mjFillContainer>\n <div #AskSkipPanel class=\"messages\" #scrollContainer (scroll)=\"checkScroll()\">\n <div class=\"waiting-for-ai\" *ngIf=\"Messages && Messages.length > 0 && SelectedConversation && IsSkipProcessing(SelectedConversation)\">\n <!-- MOVED THIS TO INSIDE MESSAGE - REMOVE THIS ENTIRE DIV ---- <kendo-loader></kendo-loader> -->\n </div>\n <div class=\"welcome-wrapper\" *ngIf=\"(!Messages || Messages.length ===0) && _conversationLoadComplete\">\n <div class='welcome-message'>\n <img [src]=\"SkipLogoURL\" />\n <div class=\"welcome-header-text\">What can I help with today?</div>\n </div>\n <div class='welcome-suggested-questions'>\n <div class=\"welcome-suggested-questions-col\">\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[0].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[0].topLine}}</span>\n <span>{{WelcomeQuestions[0].bottomLine}}</span>\n </div>\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[1].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[1].topLine}}</span>\n <span>{{WelcomeQuestions[1].bottomLine}}</span>\n </div> \n </div>\n <div class=\"welcome-suggested-questions-col\">\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[2].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[2].topLine}}</span>\n <span>{{WelcomeQuestions[2].bottomLine}}</span>\n </div>\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[3].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[3].topLine}}</span>\n <span>{{WelcomeQuestions[3].bottomLine}}</span>\n </div> \n </div>\n </div> \n </div>\n <div mjContainer mjSkipResize=\"true\"><!--mjSkipResize results in everything below this level NOT being resized, performance optimization-->\n <!-- Dynamic messages will be injected here -->\n </div>\n <span class=\"scroll-to-bottom-icon\" *ngIf=\"_showScrollToBottomIcon && Messages && Messages.length > 0\" (click)=\"scrollToBottomAnimate()\"><i class=\"fas fa-arrow-down\"></i></span>\n </div>\n <div class=\"input-area\">\n <div class=\"text-area-wrapper\">\n <textarea\n #AskSkipInput \n [disabled]=\"SelectedConversation && IsSkipProcessing(SelectedConversation)\" \n (keyup.enter)=\"onEnter($event)\" \n (input)=\"onInputChange($event)\"\n type=\"text\" \n placeholder=\"Ask Skip a question\"></textarea>\n </div>\n @if (ShowDataContextButton) {\n <button kendoButton >\n <span class=\"fa-solid fa-gear\" \n (click)=\"showDataContext()\"></span>\n </button> \n }\n <button kendoButton \n [disabled]=\"IsTextAreaEmpty() || (SelectedConversation !== undefined && IsSkipProcessing(SelectedConversation))\" \n (click)=\"sendSkipMessage()\">\n <span class=\"fas fa-solid fa-arrow-up\"></span>\n </button>\n </div>\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n</div> \n\n<div *ngIf=\"isDataContextDialogVisible\">\n <mj-data-context-dialog [dataContextId]=\"DataContextID\" (dialogClosed)=\"closeDataContextDialog()\" [Provider]=\"ProviderToUse\"></mj-data-context-dialog>\n</div>\n\n\n<kendo-dialog\n title=\"Please confirm\"\n *ngIf=\"confirmDeleteConversationDialogOpen\"\n (close)=\"closeDeleteConversation('no')\"\n [minWidth]=\"250\"\n [width]=\"450\"\n>\n <p style=\"margin: 30px; text-align: center;\">\n Would you like to delete {{SelectedConversation?.Name}}?\n </p>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeDeleteConversation('yes')\" themeColor=\"primary\">\n Yes\n </button>\n <button kendoButton (click)=\"closeDeleteConversation('no')\">\n No\n </button>\n </kendo-dialog-actions>\n</kendo-dialog> ", styles: [".chat-container {\n padding: 5px;\n display: flex;\n flex-direction: row;\n height: 100%;\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n /*initial sizes*/\n width: 100%;\n height: 100%;\n\n background-color: #f9f9f9;\n}\n\n.conversation-wrapper {\n display: flex;\n flex-direction: column;\n position: relative; /* Add this line if the wrapper needs to be a reference point */\n background-color: #f9f9f9;\n}\n\n.new-conversation {\n height: 30px;\n font-size: large;\n}\n\n.conversation-history {\n width: 260px;\n min-width: 260px;\n height: 100%;\n overflow-y: auto; /* Add scroll if the content exceeds the height */\n margin-right: 10px;\n padding-top: 5px;\n background-color: #f9f9f9;\n margin-top: 0px; \n padding: 12px; \n}\n\n.k-tabstrip-content-for-skip {\n padding: 0;\n padding-block: 0;\n}\n\n\n.conversation-history > button {\n height: 25px;\n}\n\n.skip-title {\n font-size: larger;\n margin-bottom: 5px;\n height: 20px;\n margin-top: 5px;\n}\n\n.conversation-list {\n margin-top: 5px;\n padding-top: 5px;\n \n border: 0;\n background-color: #f9f9f9;\n}\n\n\n\n/* Center the welcome message vertically and horizontally */\n.welcome-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.welcome-message {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n overflow: hidden;\n height: 100%;\n}\n\n.embedded-conversations {\n margin-left: 3px;\n margin-top: 5px;\n font-size: 10pt;\n color: rgb(48, 48, 235);\n}\n.embedded-conversations > span {\n margin-top: 4px;\n margin-left: 5px;\n cursor: pointer;\n}\n.conversation-item-linked {\n color: rgb(48, 48, 235);\n}\n\n.welcome-message img {\n width: 120px;\n height: 50px;\n margin-bottom: 20px; /* Adds some space between the image and the text below */\n}\n\n.welcome-header-text {\n font-size: larger;\n font-weight: bold;\n}\n\n/* Position the welcome-suggested-questions at the bottom of its container */\n.welcome-suggested-questions {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n}\n.welcome-suggested-questions-col {\n display: flex;\n}\n\n/* Flex layout for questions, two per row */\n.welcome-question {\n display: flex;\n flex-direction: column; /* Stack the header and text vertically */\n align-items: left;;\n width: 300px; \n justify-content: space-between;\n margin: 5px; /* Adds some space around each question */\n border: solid 1px rgba(41, 28, 28, 0.08);\n border-radius: 15px;\n padding: 10px;\n cursor: pointer;\n}\n\n.welcome-question:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n\n.welcome-question-header {\n font-size: 12pt;\n font-weight: bold;\n display: block; /* Ensures the header is on its own line */\n}\n\n/* Non-bold text for the content below the header */\n.welcome-question span:not(.welcome-question-header) {\n font-weight: normal;\n font-size: 10pt;\n}\n\n\n.messages {\n overflow-y: auto; /* enable scrolling if the content overflows */\n overflow-x: hidden; /* hide horizontal scrollbar */\n /* border: solid 1px rgba(0, 0, 0, 0.08); */\n margin-bottom: 5px;\n\n margin-top: 2px; /* align it with the top of converation history exactly*/\n\n background-color: #f9f9f9;\n flex: 1;\n}\n\n\n\n.new-chat-area {\n display: flex;\n justify-content: space-between; /* Aligns children (img and button) to each end */\n align-items: center; /* Centers children vertically */\n}\n.avatar {\n max-height: 24px;\n margin-right: 10px;\n margin-left: 5px;\n margin-bottom: 3px;\n /* Ensure the image aligns to the left */\n margin-right: auto; /* Pushes everything else to the right */\n}\n\n.conversation-item {\n margin-left: 5px;\n margin-right: 5px;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 5px;\n cursor: pointer;\n overflow: hidden;\n max-height: 150px;\n font-size: 14px;\n\n display: flex;\n align-items: flex-start; /* Align items to the top */\n\n flex-wrap: wrap; /* Allow items to wrap to the next line */\n}\n\n.text-container {\n flex: 1; /* Take up remaining space */\n display: flex;\n flex-direction: column; /* Stack children vertically */\n}\n\n.text-container textarea {\n resize: none; /* Disable resizing */\n /* Add more styles for the textarea if needed */\n}\n\n.conversation-item > .conversation-icon {\n margin-top: 3px;\n}\n\n.conversation-item span {\n display: inline-block;\n white-space: pre-wrap; /* Allow text to wrap */\n overflow: auto;\n word-wrap: break-word;\n margin-left: 3px; /* Move the text to the right */\n}\n\n.conversation-item:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.conversation-item-selected {\n background-color: rgba(0, 0, 0, 0.15);\n}\n\n\n.conversation-item > .conversation-icon {\n margin-right: 11px;\n}\n.edit-conversation-panel {\n display: flex;\n justify-content: flex-end; /* Align icons to the right */\n margin-top: 2px; /* litle buffer on top */\n margin-right: 2px; /* litle buffer to the right */\n}\n.edit-conversation-panel > .k-icon {\n margin-left: 5px;\n cursor: pointer;\n}\n.edit-conversation-panel > .k-icon:hover {\n color: #ff0000;\n}\n\n\n\n.input-area {\n min-height: 35px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 15px;\n}\n\n.input-area > button {\n vertical-align: top;\n width: 30px;\n height: 30px;\n margin-top: 3px;\n border-radius: 12px;\n}\n.input-area > button:first-of-type {\n margin-left: -40px;\n}\n.input-area > button:last-child {\n margin-left: -65px;\n}\n\n.text-area-wrapper {\n padding: 3px;\n border: solid 1px rgba(0, 0, 0, 0.08) ;\n border-radius: 15px;\n\n margin-top: 4px;\n margin-right: -1px;\n min-height: 42px;\n max-height: 100%; /* Prevent it from growing beyond the container */\n\n overflow: hidden; \n align-items: center;\n\n /*combined width and padding is 800*/\n width: 710px; \n padding-right: 90px\n} \n.text-area-wrapper > textarea {\n border: 0;\n outline: 0;\n resize: none;\n\n min-height: 20px; /* Initial height */\n\n width: 100%;\n overflow-y: hidden; /* Hide scrollbar */\n\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n margin-left: 7px;\n margin-top: 7px;\n margin-bottom: 5px;\n\n background-color: #f9f9f9;\n}\n\n.text-area-wrapper > textarea:disabled {\n background-color: white;\n}\n\n.input-wrapper {\n flex-grow: 1; /* This will make the input-wrapper take the remaining space */\n height: 100%;\n}\n\n.waiting-for-ai {\n position: absolute;\n display: flex; /* Use flexbox layout */\n bottom: 100px;\n z-index: 999;\n left: 10px; \n}\n \n.scroll-to-bottom-icon {\n position: absolute;\n bottom: 100px; /* Adjust as needed to position away from the bottom edge */\n left: 50%; /* Start at the exact horizontal center */\n transform: translateX(-50%); /* Shift it back by half its width to center it */\n z-index: 1000; /* Ensure it stays on top */\n background-color: white; /* Circle background color - adjust as needed */\n color: black; /* Icon color - adjust as needed */\n border-radius: 50%; /* Makes the background a circle */\n width: 40px; /* Circle size - adjust as needed */\n height: 40px; /* Circle size - adjust as needed */\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0px 0px 5px rgba(0,0,0,0.3); /* Optional: Adds a subtle shadow for better visibility */\n cursor: pointer;\n}\n\n@media (min-width: 600px) {\n .welcome-suggested-questions {\n display: flex;\n flex-wrap: wrap; /* Allows questions to wrap to the next line */\n align-content: flex-end; /* Aligns the content to the bottom */\n }\n}\n "] }]
1534
+ args: [{ selector: 'skip-chat', template: "<div class = \"chat-container\" mjFillContainer #topLevelDiv [bottomMargin]=\"10\" [rightMargin]=\"10\">\n <div class=\"layout\">\n @if (IsConversationListVisible) {\n <div class=\"left-panel\">\n <div class=\"conversation-history\">\n <div class=\"new-chat-area\">\n <span class=\"fa-solid fa-table-columns toggle-icon\" (click)=\"DisplayConversationList(false)\"></span>\n @if (ShowSkipLogoInConversationList) {\n <img [src]=\"SkipLogoURL\" class=\"avatar\" />\n }\n @if (AllowNewConversations) {\n <span class=\"fa-solid fa-pen-to-square new-convo-icon\" (click)=\"CreateNewConversation()\"></span> \n }\n </div>\n <kendo-listview\n class=\"conversation-list\"\n [data]=\"Conversations\"\n [style.height.px]=\"280\"\n [itemClass]=\"{ 'item-border': true }\" \n mjFillContainer \n [fillWidth]=\"false\"\n [bottomMargin]=\"50\"\n #conversationList\n >\n <ng-template kendoListViewItemTemplate let-dataItem=\"dataItem\">\n <div class=\"conversation-item\" \n [ngClass]=\"GetConversationItemClass(dataItem)\"\n [title]=\"dataItem.Name\" \n (click)=\"SelectConversation(dataItem)\"> \n <span *ngIf=\"SelectedConversation && IsSkipProcessing(dataItem)\" class=\"fa-regular fa-clock\"></span>\n <div class=\"text-container\">\n <span *ngIf=\"dataItem.ID !== SelectedConversation?.ID || !ConversationEditMode\">{{ dataItem.Name }}</span>\n <textarea *ngIf=\"dataItem.ID === SelectedConversation?.ID && ConversationEditMode\" [(ngModel)]=\"dataItem.Name\" maxlength=\"100\"></textarea>\n </div>\n <div *ngIf=\"SelectedConversation?.ID === dataItem.ID\" class=\"edit-conversation-panel\">\n <span *ngIf=\"!ConversationEditMode\" class=\"fa-solid fa-pen-to-square\" (click)=\"editConvo(dataItem)\"></span>\n <span *ngIf=\"!ConversationEditMode\" class=\"fa-regular fa-trash-can\" (click)=\"showDeleteConvoDialog(dataItem)\"></span>\n <span *ngIf=\"ConversationEditMode\" class=\"fa-solid fa-check\" (click)=\"saveConvoName(dataItem)\"></span>\n <span *ngIf=\"ConversationEditMode\" class=\"fa-solid fa-xmark\" (click)=\"cancelConvoEdit(dataItem)\"></span>\n </div>\n </div>\n </ng-template>\n </kendo-listview>\n <!-- COMMENTED OUT as we don't want to support embedded conversations in the UI for now\n <div class=\"embedded-conversations\"><input kendoCheckBox type=\"checkbox\" [(ngModel)]=\"IncludeLinkedConversationsInList\" (ngModelChange)=\"loadConversations()\"/> <span (click)=\"FlipEmbeddedConversationState()\">Show Linked Conversations</span></div> -->\n </div> \n </div>\n }\n @if (!IsConversationListVisible) {\n <span class=\"fa-solid fa-table-columns toggle-icon\" (click)=\"DisplayConversationList(true)\"></span>\n }\n\n <div class=\"right-panel\">\n <div class=\"conversation-wrapper\" mjFillContainer>\n <div #AskSkipPanel class=\"messages\" #scrollContainer (scroll)=\"checkScroll()\">\n <div class=\"waiting-for-ai\" *ngIf=\"Messages && Messages.length > 0 && SelectedConversation && IsSkipProcessing(SelectedConversation)\">\n <!-- MOVED THIS TO INSIDE MESSAGE - REMOVE THIS ENTIRE DIV ---- <kendo-loader></kendo-loader> -->\n </div>\n <div class=\"welcome-wrapper\" *ngIf=\"(!Messages || Messages.length ===0) && _conversationLoadComplete\">\n <div class='welcome-message'>\n <img [src]=\"SkipLogoURL\" />\n <div class=\"welcome-header-text\">What can I help with today?</div>\n </div>\n <div class='welcome-suggested-questions'>\n <div class=\"welcome-suggested-questions-col\">\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[0].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[0].topLine}}</span>\n <span>{{WelcomeQuestions[0].bottomLine}}</span>\n </div>\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[1].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[1].topLine}}</span>\n <span>{{WelcomeQuestions[1].bottomLine}}</span>\n </div> \n </div>\n <div class=\"welcome-suggested-questions-col\">\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[2].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[2].topLine}}</span>\n <span>{{WelcomeQuestions[2].bottomLine}}</span>\n </div>\n <div class=\"welcome-question\" (click)=\"sendPrompt(WelcomeQuestions[3].prompt)\">\n <span class=\"welcome-question-header\">{{WelcomeQuestions[3].topLine}}</span>\n <span>{{WelcomeQuestions[3].bottomLine}}</span>\n </div> \n </div>\n </div> \n </div>\n <div mjContainer mjSkipResize=\"true\"><!--mjSkipResize results in everything below this level NOT being resized, performance optimization-->\n <!-- Dynamic messages will be injected here -->\n </div>\n <span class=\"scroll-to-bottom-icon\" *ngIf=\"_showScrollToBottomIcon && Messages && Messages.length > 0\" (click)=\"scrollToBottomAnimate()\"><i class=\"fas fa-arrow-down\"></i></span>\n </div>\n <div class=\"input-area\">\n <div class=\"text-area-wrapper\">\n <textarea\n #AskSkipInput \n [disabled]=\"SelectedConversation && IsSkipProcessing(SelectedConversation)\" \n (keyup.enter)=\"onEnter($event)\" \n (input)=\"onInputChange($event)\"\n type=\"text\" \n [placeholder]=\"_AskSkipTextboxPlaceholder\"></textarea>\n </div>\n @if (ShowDataContextButton) {\n <button kendoButton >\n <span class=\"fa-solid fa-gear\" \n (click)=\"showDataContext()\"></span>\n </button> \n }\n <button kendoButton \n [disabled]=\"IsTextAreaEmpty() || (SelectedConversation !== undefined && IsSkipProcessing(SelectedConversation))\" \n (click)=\"sendSkipMessage()\">\n <span class=\"fas fa-solid fa-arrow-up\"></span>\n </button>\n </div>\n </div> \n </div>\n </div> \n</div> \n\n<div *ngIf=\"isDataContextDialogVisible\">\n <mj-data-context-dialog [dataContextId]=\"DataContextID\" (dialogClosed)=\"closeDataContextDialog()\" [Provider]=\"ProviderToUse\"></mj-data-context-dialog>\n</div>\n\n\n<kendo-dialog\n title=\"Please confirm\"\n *ngIf=\"confirmDeleteConversationDialogOpen\"\n (close)=\"closeDeleteConversation('no')\"\n [minWidth]=\"250\"\n [width]=\"450\"\n>\n <p style=\"margin: 30px; text-align: center;\">\n Would you like to delete {{SelectedConversation?.Name}}?\n </p>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeDeleteConversation('yes')\" themeColor=\"primary\">\n Yes\n </button>\n <button kendoButton (click)=\"closeDeleteConversation('no')\">\n No\n </button>\n </kendo-dialog-actions>\n</kendo-dialog> \n\n<kendo-dialog\n title=\"Please confirm\"\n *ngIf=\"confirmMessageEditOrDeleteDialogOpen\"\n (close)=\"closeMessageEditOrDeleteDialog('no')\"\n [minWidth]=\"250\"\n [width]=\"450\"\n>\n <p style=\"margin: 30px; text-align: center;\">\n Would you like to {{messageEditOrDeleteType}} this message? Doing so will result in any subsequent messages in the conversation being deleted.\n </p>\n <kendo-dialog-actions>\n <button kendoButton (click)=\"closeMessageEditOrDeleteDialog('yes')\" themeColor=\"primary\">\n Yes\n </button>\n <button kendoButton (click)=\"closeMessageEditOrDeleteDialog('no')\">\n No\n </button>\n </kendo-dialog-actions>\n</kendo-dialog> ", styles: [".layout {\n display: flex;\n flex-direction: row; /* Ensures left and right panels are side by side */\n height: 100%; /* Fill the available height */\n width: 100%; /* Fill the available width */\n position: relative;\n}\n\n.left-panel {\n width: 272px; /* Fixed width for the conversation list */\n background-color: #f8f9fa; /* Optional: Background color */\n border-right: 1px solid #ddd; /* Optional: Add a divider */\n overflow-y: auto; /* Enable scrolling if content overflows */\n overflow-x: hidden; /* Hide horizontal scrollbar */\n position: relative;\n\n scrollbar-width: thin; /* For Firefox */\n scrollbar-color: #d3d3d3 #f8f9fa; /* Thumb color and track color */\n}\n\n/* For WebKit-based browsers (Chrome, Edge, Safari) */\n.left-panel::-webkit-scrollbar {\n width: 8px; /* Narrower scrollbar */\n background-color: #f8f9fa; /* Scrollbar track color */\n}\n\n.left-panel::-webkit-scrollbar-thumb {\n background-color: #d3d3d3; /* Lighter gray scrollbar thumb */\n border-radius: 4px; /* Rounded corners for the thumb */\n}\n\n.left-panel::-webkit-scrollbar-thumb:hover {\n background-color: #c0c0c0; /* Slightly darker gray on hover */\n}\n\n.left-panel::-webkit-scrollbar-track {\n background-color: #f8f9fa; /* Background of the scrollbar track */\n}\n\n.right-panel {\n flex: 1; /* Take up the remaining space */\n overflow-y: auto; /* Enable scrolling for the conversation content */\n}\n\n\n.new-convo-icon {\n color: #808080; /* Mid-gray */\n font-size: 18px; /* Adjust icon size */\n cursor: pointer; /* Make it clear the icon is clickable */\n z-index: 10; /* Ensure the icon is above other content */\n padding: 5px;\n border-radius: 4px;\n}\n\n.toggle-icon {\n color: #808080; /* Mid-gray */\n font-size: 18px; /* Adjust icon size */\n cursor: pointer; /* Make it clear the icon is clickable */\n z-index: 10; /* Ensure the icon is above other content */\n margin-left: 6px;\n padding: 3px;\n border-radius: 3px;\n}\n \n\n.right-panel .toggle-icon {\n margin-left: 3px;\n margin-top: 2px;\n position: absolute;\n top: 10px;\n left: auto;\n right: 10px; /* For the right panel toggle */\n}\n\n\n.chat-container {\n padding: 5px;\n display: flex;\n flex-direction: row;\n height: 100%;\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n /*initial sizes*/\n width: 100%;\n height: 100%;\n\n background-color: #f9f9f9;\n}\n\n.conversation-wrapper {\n display: flex;\n flex-direction: column;\n position: relative; /* Add this line if the wrapper needs to be a reference point */\n background-color: #f9f9f9;\n}\n\n.new-conversation {\n height: 30px;\n font-size: large;\n}\n\n.conversation-history {\n width: 240px;\n min-width: 240px;\n height: 95%;\n overflow-y: auto; /* Add scroll if the content exceeds the height */\n overflow-x: hidden; /* Hide horizontal scrollbar */\n margin-right: 10px;\n padding-top: 5px;\n background-color: #f9f9f9;\n margin-top: 0px; \n padding: 12px; \n}\n\n.k-tabstrip-content-for-skip {\n padding: 0;\n padding-block: 0;\n}\n\n\n.conversation-history > button {\n height: 25px;\n}\n\n.skip-title {\n font-size: larger;\n margin-bottom: 5px;\n height: 20px;\n margin-top: 5px;\n}\n\n.conversation-list {\n margin-top: 5px;\n padding-top: 5px;\n \n border: 0;\n background-color: #f9f9f9;\n}\n\n\n\n/* Center the welcome message vertically and horizontally */\n.welcome-wrapper {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.welcome-message {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n overflow: hidden;\n height: 100%;\n}\n\n.embedded-conversations {\n margin-left: 3px;\n margin-top: 5px;\n font-size: 10pt;\n color: rgb(48, 48, 235);\n}\n.embedded-conversations > span {\n margin-top: 4px;\n margin-left: 5px;\n cursor: pointer;\n}\n.conversation-item-linked {\n color: rgb(48, 48, 235);\n}\n\n.welcome-message img {\n width: 120px;\n height: 50px;\n margin-bottom: 20px; /* Adds some space between the image and the text below */\n}\n\n.welcome-header-text {\n font-size: larger;\n font-weight: bold;\n}\n\n/* Position the welcome-suggested-questions at the bottom of its container */\n.welcome-suggested-questions {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-content: center;\n}\n.welcome-suggested-questions-col {\n display: flex;\n}\n\n/* Flex layout for questions, two per row */\n.welcome-question {\n display: flex;\n flex-direction: column; /* Stack the header and text vertically */\n align-items: left;;\n width: 300px; \n justify-content: space-between;\n margin: 5px; /* Adds some space around each question */\n border: solid 1px rgba(41, 28, 28, 0.08);\n border-radius: 15px;\n padding: 10px;\n cursor: pointer;\n}\n\n.welcome-question:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n\n.welcome-question-header {\n font-size: 12pt;\n font-weight: bold;\n display: block; /* Ensures the header is on its own line */\n}\n\n/* Non-bold text for the content below the header */\n.welcome-question span:not(.welcome-question-header) {\n font-weight: normal;\n font-size: 10pt;\n}\n\n\n.messages {\n overflow-y: auto; /* enable scrolling if the content overflows */\n overflow-x: hidden; /* hide horizontal scrollbar */\n /* border: solid 1px rgba(0, 0, 0, 0.08); */\n margin-bottom: 5px;\n\n margin-top: 2px; /* align it with the top of converation history exactly*/\n\n background-color: #f9f9f9;\n flex: 1;\n scrollbar-width: thin; /* For Firefox */\n scrollbar-color: #d3d3d3 #f8f9fa; /* Thumb color and track color */\n}\n\n/* For WebKit-based browsers (Chrome, Edge, Safari) */\n.messages::-webkit-scrollbar {\nwidth: 8px; /* Narrower scrollbar */\nbackground-color: #f8f9fa; /* Scrollbar track color */\n}\n\n.messages::-webkit-scrollbar-thumb {\nbackground-color: #d3d3d3; /* Lighter gray scrollbar thumb */\nborder-radius: 4px; /* Rounded corners for the thumb */\n}\n\n.messages::-webkit-scrollbar-thumb:hover {\nbackground-color: #c0c0c0; /* Slightly darker gray on hover */\n}\n\n.messages::-webkit-scrollbar-track {\nbackground-color: #f8f9fa; /* Background of the scrollbar track */\n}\n\n\n\n.new-chat-area {\n display: flex;\n justify-content: space-between; /* Aligns children (img and button) to each end */\n align-items: center; /* Centers children vertically */\n}\n.avatar {\n max-height: 24px;\n margin-right: 10px;\n margin-left: 5px;\n margin-bottom: 3px;\n /* Ensure the image aligns to the left */\n margin-right: auto; /* Pushes everything else to the right */\n}\n\n.conversation-item {\n margin-left: 5px;\n margin-right: 5px;\n padding-top: 10px;\n padding-bottom: 10px;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 5px;\n cursor: pointer;\n overflow: hidden;\n max-height: 150px;\n font-size: 14px;\n\n display: flex;\n align-items: flex-start; /* Align items to the top */\n\n flex-wrap: wrap; /* Allow items to wrap to the next line */\n}\n\n.text-container {\n flex: 1; /* Take up remaining space */\n display: flex;\n flex-direction: column; /* Stack children vertically */\n}\n\n.text-container textarea {\n resize: none; /* Disable resizing */\n /* Add more styles for the textarea if needed */\n}\n\n.conversation-item > .conversation-icon {\n margin-top: 3px;\n}\n\n.conversation-item span {\n display: inline-block;\n white-space: pre-wrap; /* Allow text to wrap */\n overflow: auto;\n word-wrap: break-word;\n margin-left: 3px; /* Move the text to the right */\n}\n\n.conversation-item:hover {\n background-color: rgba(0, 0, 0, 0.05);\n}\n.conversation-item-selected {\n background-color: rgba(0, 0, 0, 0.15);\n}\n\n\n.conversation-item > .conversation-icon {\n margin-right: 11px;\n}\n.edit-conversation-panel {\n display: flex;\n justify-content: flex-end; /* Align icons to the right */\n margin-top: 2px; /* litle buffer on top */\n margin-right: 2px; /* litle buffer to the right */\n}\n.edit-conversation-panel > .k-icon {\n margin-left: 5px;\n cursor: pointer;\n}\n.edit-conversation-panel > .k-icon:hover {\n color: #ff0000;\n}\n\n\n\n.input-area {\n min-height: 35px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 15px;\n}\n\n.input-area > button {\n vertical-align: top;\n width: 30px;\n height: 30px;\n margin-top: 3px;\n border-radius: 12px;\n}\n.input-area > button:first-of-type {\n margin-left: -40px;\n}\n.input-area > button:last-child {\n margin-left: -65px;\n}\n\n.text-area-wrapper {\n padding: 3px;\n border: solid 1px rgba(0, 0, 0, 0.08) ;\n border-radius: 15px;\n\n margin-top: 4px;\n margin-right: -1px;\n min-height: 42px;\n max-height: 100%; /* Prevent it from growing beyond the container */\n\n overflow: hidden; \n align-items: center;\n\n /*combined width and padding is 800*/\n width: 710px; \n padding-right: 90px\n} \n.text-area-wrapper > textarea {\n border: 0;\n outline: 0;\n resize: none;\n\n min-height: 20px; /* Initial height */\n\n width: 100%;\n overflow-y: hidden; /* Hide scrollbar */\n\n font-family: S\u00F6hne, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif, \"Helvetica Neue\", Arial, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n\n margin-left: 7px;\n margin-top: 7px;\n margin-bottom: 5px;\n\n background-color: #f9f9f9;\n}\n\n/* .text-area-wrapper > textarea:disabled {\n background-color: white;\n} */\n\n.input-wrapper {\n flex-grow: 1; /* This will make the input-wrapper take the remaining space */\n height: 100%;\n}\n\n.waiting-for-ai {\n position: absolute;\n display: flex; /* Use flexbox layout */\n bottom: 100px;\n z-index: 999;\n left: 10px; \n}\n \n.scroll-to-bottom-icon {\n position: absolute;\n bottom: 100px; /* Adjust as needed to position away from the bottom edge */\n left: 50%; /* Start at the exact horizontal center */\n transform: translateX(-50%); /* Shift it back by half its width to center it */\n z-index: 1000; /* Ensure it stays on top */\n background-color: white; /* Circle background color - adjust as needed */\n color: black; /* Icon color - adjust as needed */\n border-radius: 50%; /* Makes the background a circle */\n width: 40px; /* Circle size - adjust as needed */\n height: 40px; /* Circle size - adjust as needed */\n display: flex;\n justify-content: center;\n align-items: center;\n box-shadow: 0px 0px 5px rgba(0,0,0,0.3); /* Optional: Adds a subtle shadow for better visibility */\n cursor: pointer;\n}\n\n@media (min-width: 600px) {\n .welcome-suggested-questions {\n display: flex;\n flex-wrap: wrap; /* Allows questions to wrap to the next line */\n align-content: flex-end; /* Aligns the content to the bottom */\n }\n}\n "] }]
1322
1535
  }], () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.Location }, { type: i0.ChangeDetectorRef }, { type: i3.MJNotificationService }], { AllowSend: [{
1323
1536
  type: Input
1324
1537
  }], Messages: [{
@@ -1353,10 +1566,18 @@ SkipChatComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipChatC
1353
1566
  type: Input
1354
1567
  }], UpdateAppRoute: [{
1355
1568
  type: Input
1569
+ }], ShowSkipLogoInConversationList: [{
1570
+ type: Input
1571
+ }], DefaultTextboxPlaceholder: [{
1572
+ type: Input
1573
+ }], ProcessingTextBoxPlaceholder: [{
1574
+ type: Input
1356
1575
  }], NavigateToMatchingReport: [{
1357
1576
  type: Output
1358
1577
  }], ConversationSelected: [{
1359
1578
  type: Output
1579
+ }], NewReportCreated: [{
1580
+ type: Output
1360
1581
  }], askSkip: [{
1361
1582
  type: ViewChild,
1362
1583
  args: [Container, { static: true }]