@digipair/skill-web-chatbot 0.90.0 → 0.91.0-0

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.
Files changed (136) hide show
  1. package/.swcrc +28 -0
  2. package/README.md +7 -0
  3. package/eslint.config.mjs +22 -0
  4. package/package.json +22 -7
  5. package/rollup.config.cjs +28 -0
  6. package/src/digipair__engine.d.ts +2 -0
  7. package/src/handlebars.d.ts +1 -0
  8. package/src/index.html +18 -0
  9. package/src/lib/chat.element.ts +603 -0
  10. package/src/lib/common.data.ts +1 -0
  11. package/src/lib/config.ts +30 -0
  12. package/src/lib/digipair-full.data.ts +101 -0
  13. package/src/lib/digipair-full.element.ts +358 -0
  14. package/src/lib/digipair.data.ts +103 -0
  15. package/src/lib/digipair.element.ts +446 -0
  16. package/src/lib/inputs.element.ts +46 -0
  17. package/src/lib/mermaid.d.ts +1 -0
  18. package/src/lib/message.interface.ts +10 -0
  19. package/src/lib/pins/chatbot.actions.ts +32 -0
  20. package/src/lib/tools/css-selector.ts +12 -0
  21. package/tsconfig.json +13 -0
  22. package/tsconfig.lib.json +19 -0
  23. package/SAP-icons.cjs.js +0 -2489
  24. package/SAP-icons.cjs2.js +0 -2489
  25. package/SAP-icons.esm.js +0 -2482
  26. package/SAP-icons.esm2.js +0 -2482
  27. package/Tableau10-558cc280.cjs.js +0 -9
  28. package/Tableau10-558cc280.esm.js +0 -7
  29. package/arc-d1f6357e.cjs.js +0 -88
  30. package/arc-d1f6357e.esm.js +0 -86
  31. package/array-2ff2c7a6.cjs.js +0 -7
  32. package/array-2ff2c7a6.esm.js +0 -5
  33. package/blockDiagram-5dc23a45.cjs.js +0 -2921
  34. package/blockDiagram-5dc23a45.esm.js +0 -2919
  35. package/c4Diagram-1e775db3.cjs.js +0 -4387
  36. package/c4Diagram-1e775db3.esm.js +0 -4385
  37. package/channel-ebbc4130.cjs.js +0 -9
  38. package/channel-ebbc4130.esm.js +0 -7
  39. package/classDiagram-f52caa06.cjs.js +0 -209
  40. package/classDiagram-f52caa06.esm.js +0 -207
  41. package/classDiagram-v2-640c694e.cjs.js +0 -401
  42. package/classDiagram-v2-640c694e.esm.js +0 -399
  43. package/clone-afc2f047.cjs.js +0 -10
  44. package/clone-afc2f047.esm.js +0 -8
  45. package/createText-03b82060.cjs.js +0 -2936
  46. package/createText-03b82060.esm.js +0 -2933
  47. package/edges-16357fde.cjs.js +0 -1998
  48. package/edges-16357fde.esm.js +0 -1981
  49. package/erDiagram-c7ff1bec.cjs.js +0 -1807
  50. package/erDiagram-c7ff1bec.esm.js +0 -1805
  51. package/flowDb-9a89ea33.cjs.js +0 -5542
  52. package/flowDb-9a89ea33.esm.js +0 -5538
  53. package/flowDiagram-aadb13b0.cjs.js +0 -1351
  54. package/flowDiagram-aadb13b0.esm.js +0 -1349
  55. package/flowDiagram-v2-f2119625.cjs.js +0 -31
  56. package/flowDiagram-v2-f2119625.esm.js +0 -29
  57. package/flowchart-elk-definition-cf813a97.cjs.js +0 -50257
  58. package/flowchart-elk-definition-cf813a97.esm.js +0 -50255
  59. package/ganttDiagram-3c2fde2b.cjs.js +0 -3710
  60. package/ganttDiagram-3c2fde2b.esm.js +0 -3708
  61. package/gitGraphDiagram-c3a0619c.cjs.js +0 -3820
  62. package/gitGraphDiagram-c3a0619c.esm.js +0 -3818
  63. package/graph-0ee63739.cjs.js +0 -961
  64. package/graph-0ee63739.esm.js +0 -938
  65. package/index-bb6d8841.cjs.js +0 -648
  66. package/index-bb6d8841.esm.js +0 -646
  67. package/index.cjs.d.ts +0 -1
  68. package/index.cjs.js +0 -17
  69. package/index.cjs2.js +0 -60723
  70. package/index.esm.js +0 -1
  71. package/index.esm2.js +0 -60574
  72. package/infoDiagram-2f5c50c0.cjs.js +0 -460
  73. package/infoDiagram-2f5c50c0.esm.js +0 -458
  74. package/init-f9637058.cjs.js +0 -17
  75. package/init-f9637058.esm.js +0 -15
  76. package/journeyDiagram-14fe341a.cjs.js +0 -1061
  77. package/journeyDiagram-14fe341a.esm.js +0 -1059
  78. package/katex-d90b6d29.cjs.js +0 -25690
  79. package/katex-d90b6d29.esm.js +0 -25688
  80. package/layout-fd473db2.cjs.js +0 -1626
  81. package/layout-fd473db2.esm.js +0 -1619
  82. package/libs/engine/src/index.d.ts +0 -2
  83. package/libs/engine/src/lib/alias.interface.d.ts +0 -9
  84. package/libs/engine/src/lib/engine.d.ts +0 -13
  85. package/libs/engine/src/lib/pins-settings.interface.d.ts +0 -15
  86. package/libs/skill-web-chatbot/src/lib/chat.element.d.ts +0 -28
  87. package/libs/skill-web-chatbot/src/lib/common.data.d.ts +0 -1
  88. package/libs/skill-web-chatbot/src/lib/config.d.ts +0 -9
  89. package/libs/skill-web-chatbot/src/lib/digipair-full.data.d.ts +0 -1
  90. package/libs/skill-web-chatbot/src/lib/digipair-full.element.d.ts +0 -36
  91. package/libs/skill-web-chatbot/src/lib/digipair.data.d.ts +0 -1
  92. package/libs/skill-web-chatbot/src/lib/digipair.element.d.ts +0 -44
  93. package/libs/skill-web-chatbot/src/lib/inputs.element.d.ts +0 -10
  94. package/libs/skill-web-chatbot/src/lib/message.interface.d.ts +0 -10
  95. package/libs/skill-web-chatbot/src/lib/pins/chatbot.actions.d.ts +0 -1
  96. package/libs/skill-web-chatbot/src/lib/tools/css-selector.d.ts +0 -1
  97. package/line-24d93f1b.cjs.js +0 -34
  98. package/line-24d93f1b.esm.js +0 -32
  99. package/linear-9bcf74c4.cjs.js +0 -537
  100. package/linear-9bcf74c4.esm.js +0 -531
  101. package/mindmap-definition-9399c7e6.cjs.js +0 -20489
  102. package/mindmap-definition-9399c7e6.esm.js +0 -20487
  103. package/ordinal-5695958c.cjs.js +0 -331
  104. package/ordinal-5695958c.esm.js +0 -329
  105. package/path-428ebac9.cjs.js +0 -317
  106. package/path-428ebac9.esm.js +0 -314
  107. package/pieDiagram-828dae43.cjs.js +0 -951
  108. package/pieDiagram-828dae43.esm.js +0 -949
  109. package/quadrantDiagram-5fa00455.cjs.js +0 -2410
  110. package/quadrantDiagram-5fa00455.esm.js +0 -2408
  111. package/requirementDiagram-03163dc4.cjs.js +0 -2267
  112. package/requirementDiagram-03163dc4.esm.js +0 -2265
  113. package/sankeyDiagram-52ec8976.cjs.js +0 -1848
  114. package/sankeyDiagram-52ec8976.esm.js +0 -1846
  115. package/sequenceDiagram-b517d154.cjs.js +0 -5949
  116. package/sequenceDiagram-b517d154.esm.js +0 -5947
  117. package/stateDiagram-fca82b5b.cjs.js +0 -283
  118. package/stateDiagram-fca82b5b.esm.js +0 -281
  119. package/stateDiagram-v2-ed04200a.cjs.js +0 -373
  120. package/stateDiagram-v2-ed04200a.esm.js +0 -371
  121. package/styles-11e81fdd.cjs.js +0 -3944
  122. package/styles-11e81fdd.esm.js +0 -3940
  123. package/styles-cacbff60.cjs.js +0 -2120
  124. package/styles-cacbff60.esm.js +0 -2111
  125. package/styles-e75131e4.cjs.js +0 -671
  126. package/styles-e75131e4.esm.js +0 -661
  127. package/svgDrawCommon-ecc5f780.cjs.js +0 -68
  128. package/svgDrawCommon-ecc5f780.esm.js +0 -60
  129. package/timeline-definition-4ee9bff4.cjs.js +0 -1161
  130. package/timeline-definition-4ee9bff4.esm.js +0 -1159
  131. package/xychartDiagram-e5e6b652.cjs.js +0 -3150
  132. package/xychartDiagram-e5e6b652.esm.js +0 -3148
  133. /package/{index.d.ts → src/index.d.ts} +0 -0
  134. /package/{libs/skill-web-chatbot/src/index.d.ts → src/index.ts} +0 -0
  135. /package/{schema.fr.json → src/schema.fr.json} +0 -0
  136. /package/{schema.json → src/schema.json} +0 -0
@@ -0,0 +1,603 @@
1
+ import mermaid from 'mermaid/dist/mermaid.esm.min.mjs';
2
+ import { LitElement, TemplateResult, css, html, nothing } from 'lit';
3
+ import { customElement, property, query, state } from 'lit/decorators.js';
4
+ import { unsafeHTML } from 'lit/directives/unsafe-html.js';
5
+ import * as showdown from 'showdown';
6
+ import { InputsElement } from './inputs.element';
7
+ import { WRITTING_IMAGE } from './common.data';
8
+ import './inputs.element';
9
+
10
+ @customElement('digipair-chatbot-chat')
11
+ export class ChatElement extends LitElement {
12
+ @property({ type: Boolean })
13
+ loading!: boolean;
14
+
15
+ @property({ type: Array })
16
+ messages!: any[];
17
+
18
+ @property({ type: Object })
19
+ currentBoost: any;
20
+
21
+ @property({ type: Object })
22
+ context: any;
23
+
24
+ @property({ type: Array })
25
+ get inputs(): { [key: string]: any }[] {
26
+ return this.inputsElement?.values || [];
27
+ }
28
+
29
+ @property()
30
+ loadingStep!: string;
31
+
32
+ @query('#messageInput')
33
+ private messageInput!: HTMLInputElement;
34
+
35
+ @query('digipair-chatbot-inputs')
36
+ private inputsElement!: InputsElement;
37
+
38
+ private previousMessages = '';
39
+ private converter!: showdown.Converter;
40
+
41
+ static override styles = [
42
+ css`
43
+ /* Pour Chrome et Edge */
44
+ .container::-webkit-scrollbar {
45
+ width: 8px; /* Largeur de la barre de défilement */
46
+ background-color: transparent; /* Couleur de fond du rail de la barre de défilement */
47
+ }
48
+
49
+ .container::-webkit-scrollbar-thumb {
50
+ background-color: #bfc1c3;
51
+ border-radius: 10px; /* Pour rendre la barre de défilement arrondie */
52
+ background-clip: padding-box;
53
+ border: 2px solid transparent; /* Espace entre la barre de défilement et son rail */
54
+ }
55
+
56
+ .container::-webkit-scrollbar-track {
57
+ background-color: transparent; /* Couleur de fond de la zone de défilement */
58
+ }
59
+ .container {
60
+ position: absolute;
61
+ top: 0;
62
+ bottom: 70px;
63
+ left: 0;
64
+ right: 0;
65
+ padding: 20px;
66
+ overflow-y: scroll;
67
+ margin-top: 1px;
68
+ margin-bottom: 2px;
69
+ margin-right: 3px;
70
+ }
71
+
72
+ .container > section {
73
+ overflow: auto;
74
+ }
75
+ .container > section::-webkit-scrollbar {
76
+ height: 8px; /* Largeur de la barre de défilement */
77
+ background-color: transparent; /* Couleur de fond du rail de la barre de défilement */
78
+ }
79
+ .container > section::-webkit-scrollbar-thumb {
80
+ background-color: #bfc1c3;
81
+ border-radius: 10px; /* Pour rendre la barre de défilement arrondie */
82
+ background-clip: padding-box;
83
+ border: 2px solid transparent; /* Espace entre la barre de défilement et son rail */
84
+ }
85
+ .container > section::-webkit-scrollbar-track {
86
+ background-color: transparent; /* Couleur de fond de la zone de défilement */
87
+ }
88
+
89
+ .assistant,
90
+ .user {
91
+ max-width: 70%; /* Largeur maximale des bulles de chat */
92
+ padding: 10px 15px;
93
+ margin-bottom: 10px;
94
+ border-radius: 20px;
95
+ line-height: 1.4;
96
+ }
97
+
98
+ .assistant {
99
+ background-color: var(
100
+ --digipair-color-primary,
101
+ #52dfdb
102
+ ); /* Couleur de fond des messages de l'assistant */
103
+ color: var(
104
+ --digipair-color-text-primary,
105
+ #242e3b
106
+ ); /* Couleur du texte des messages de l'assistant */
107
+ align-self: flex-start;
108
+ margin-right: auto;
109
+ }
110
+
111
+ .user {
112
+ background-color: var(--digipair-color-secondary, #242e3b);
113
+ color: var(
114
+ --digipair-color-text-secondary,
115
+ #ffffff
116
+ ); /* Couleur du texte des messages de l'utilisateur */
117
+ align-self: flex-end;
118
+ margin-left: auto;
119
+ }
120
+
121
+ .assistant a {
122
+ color: var(--digipair-color-text-primary, #242e3b);
123
+ }
124
+
125
+ .user a {
126
+ color: var(--digipair-color-text-secondary, #ffffff);
127
+ }
128
+
129
+ .input-container {
130
+ position: absolute;
131
+ bottom: 0px;
132
+ right: 0;
133
+ left: 0;
134
+ height: 50px;
135
+ margin-top: 0px;
136
+ padding-top: 10px;
137
+ padding-left: 10px;
138
+ padding-bottom: 10px;
139
+ border-radius: 20px 5px 0px 20px;
140
+ border: 1px solid rgba(112, 183, 253, 0.3);
141
+ }
142
+
143
+ .input-container input {
144
+ outline: none;
145
+ width: 250px;
146
+ border-top: none;
147
+ border-left: none;
148
+ border-right: none;
149
+ border-bottom: 1px solid #bababa;
150
+ background-color: transparent;
151
+ margin-right: 6px;
152
+ padding-bottom: 0px;
153
+ }
154
+
155
+ .button {
156
+ margin-left: 5px;
157
+ }
158
+ .button:not(.disabled) {
159
+ cursor: pointer;
160
+ }
161
+ .button:hover:not(.disabled) {
162
+ color: rgb(112, 183, 253);
163
+ }
164
+ .button.disabled {
165
+ color: rgb(220 220 220);
166
+ }
167
+
168
+ .input {
169
+ position: absolute;
170
+ top: 0;
171
+ bottom: 5px;
172
+ left: 8px;
173
+ right: 40px;
174
+ margin-top: 5px;
175
+ margin-left: 4px;
176
+ margin-bottom: 5px;
177
+ }
178
+
179
+ #messageInput {
180
+ width: 100%;
181
+ height: 45px;
182
+ border: none;
183
+ outline: none;
184
+ resize: none;
185
+ background-color: white;
186
+ color: black;
187
+ }
188
+ #messageInput::-webkit-scrollbar {
189
+ width: 8px; /* Largeur de la barre de défilement */
190
+ background-color: transparent; /* Couleur de fond du rail de la barre de défilement */
191
+ }
192
+ #messageInput::-webkit-scrollbar-thumb {
193
+ background-color: #bfc1c3;
194
+ border-radius: 10px; /* Pour rendre la barre de défilement arrondie */
195
+ background-clip: padding-box;
196
+ border: 2px solid transparent; /* Espace entre la barre de défilement et son rail */
197
+ }
198
+ #messageInput::-webkit-scrollbar-track {
199
+ background-color: transparent; /* Couleur de fond de la zone de défilement */
200
+ }
201
+
202
+ p {
203
+ margin: 0;
204
+ }
205
+
206
+ [name='microphone'] {
207
+ position: absolute;
208
+ right: 10px;
209
+ top: 12px;
210
+ }
211
+
212
+ [name='begin'] {
213
+ position: absolute;
214
+ right: 10px;
215
+ top: 40px;
216
+ }
217
+
218
+ .container.with-boost {
219
+ bottom: 105px;
220
+ }
221
+
222
+ .input-container.with-boost {
223
+ height: 85px;
224
+ }
225
+
226
+ .input .assistant {
227
+ height: 18px;
228
+ max-width: 100%;
229
+ width: 235px;
230
+ overflow: hidden;
231
+ opacity: 0.3;
232
+ }
233
+
234
+ .input .assistant p {
235
+ text-overflow: ellipsis;
236
+ white-space: nowrap;
237
+ overflow: hidden;
238
+ }
239
+
240
+ .button.action {
241
+ float: right;
242
+ }
243
+
244
+ .loading {
245
+ overflow: visible !important;
246
+ }
247
+
248
+ .loading .step {
249
+ color: #bfc1c3;
250
+ margin-left: 45px;
251
+ padding-top: 15px;
252
+ display: block;
253
+ }
254
+
255
+ .loading img {
256
+ float: left;
257
+ }
258
+
259
+ .sources {
260
+ margin-top: 10px;
261
+ }
262
+
263
+ .sources > .source {
264
+ background-color: rgba(255, 255, 255, 0.5);
265
+ font-size: 12px;
266
+ color: rgb(60, 60, 60);
267
+ padding: 0px 8px;
268
+ display: inline-block;
269
+ transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) 0s;
270
+ transform: scale(0.95);
271
+ margin-bottom: 4px;
272
+ border-radius: 5px;
273
+ text-decoration: none;
274
+ cursor: default;
275
+ }
276
+
277
+ .sources > .source.has-link {
278
+ background-color: rgba(255, 255, 255, 0.9);
279
+ cursor: pointer;
280
+ }
281
+
282
+ .sources > .source.has-link:hover {
283
+ transform: scale(1);
284
+ }
285
+
286
+ .trust-bar {
287
+ position: relative;
288
+ width: 100%;
289
+ height: 3px;
290
+ background-color: rgba(82, 223, 219, 0.2);
291
+ border-radius: 5px;
292
+ overflow: hidden;
293
+ margin-bottom: 5px;
294
+ }
295
+
296
+ .trust-bar-fill {
297
+ height: 100%;
298
+ background-color: green;
299
+ transition: width 0.3s ease;
300
+ border-radius: 5px;
301
+ }
302
+
303
+ .boosts {
304
+ margin-top: 10px;
305
+ margin-bottom: 5px;
306
+ }
307
+
308
+ .boosts.loading {
309
+ display: none;
310
+ }
311
+
312
+ .boosts > .boost {
313
+ background-color: rgba(255, 255, 255, 0.7);
314
+ border-radius: 20px;
315
+ font-size: 10px;
316
+ color: rgb(60, 60, 60);
317
+ padding: 4px 14px;
318
+ cursor: pointer;
319
+ display: inline-block;
320
+ transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) 0s;
321
+ transform: scale(0.95);
322
+ margin-bottom: 1px;
323
+ }
324
+
325
+ .boosts > .boost:hover {
326
+ transform: scale(1);
327
+ }
328
+ `,
329
+ ];
330
+
331
+ override connectedCallback(): void {
332
+ super.connectedCallback();
333
+
334
+ mermaid.initialize({ startOnLoad: false });
335
+ showdown.extension('mermaid', function () {
336
+ return [
337
+ {
338
+ type: 'lang',
339
+ filter: function (text: string) {
340
+ return text.replace(/```mermaid([^`]+)```/g, (_match, diagramCode) => {
341
+ return '<div class="mermaid">' + diagramCode + '</div>';
342
+ });
343
+ },
344
+ },
345
+ ];
346
+ });
347
+ this.converter = new showdown.Converter({
348
+ simplifiedAutoLink: true,
349
+ strikethrough: true,
350
+ tables: true,
351
+ tasklists: true,
352
+ smoothLivePreview: true,
353
+ });
354
+ this.converter.addExtension('mermaid' as any, {} as any);
355
+ }
356
+
357
+ private async addMessage(content: string): Promise<void> {
358
+ if (this.currentBoost && !this.currentBoost.prompt) {
359
+ this.dispatchEvent(new CustomEvent('prompt', { detail: { prompt: '' } }));
360
+ return;
361
+ }
362
+
363
+ this.messageInput.value = '';
364
+ this.dispatchEvent(new CustomEvent('prompt', { detail: { prompt: content } }));
365
+ }
366
+
367
+ private scrollDown(): void {
368
+ const container = this.renderRoot.querySelector('.container') as Element;
369
+ container.scrollTop = container.scrollHeight;
370
+ }
371
+
372
+ private keypressManagement(event: any) {
373
+ if (event.key !== 'Enter' || event.shiftKey) {
374
+ this.requestUpdate();
375
+ return;
376
+ }
377
+
378
+ if (
379
+ (this.currentBoost && !this.canAnswerToMessageBoost(this.currentBoost)) ||
380
+ this.loading ||
381
+ ((!this.messageInput || this.messageInput.value === '') &&
382
+ (!this.currentBoost || this.currentBoost.required)) ||
383
+ !this.hasInputsValues()
384
+ ) {
385
+ this.requestUpdate();
386
+ return;
387
+ }
388
+
389
+ event.preventDefault();
390
+ this.addMessage(this.messageInput.value.trim());
391
+ }
392
+
393
+ private hasInputsValues(): boolean {
394
+ return this.inputsElement.values.reduce(
395
+ (acc, { value, required }) => (required && value === '' ? false : acc),
396
+ true,
397
+ );
398
+ }
399
+
400
+ private answer(message: any): void {
401
+ const boost = message.boost;
402
+
403
+ this.dispatchEvent(
404
+ new CustomEvent('boost', {
405
+ detail: {
406
+ parent_history: message.uuid,
407
+ parent_conversation: message.parent_conversation || message.uuid,
408
+ ...boost,
409
+ },
410
+ }),
411
+ );
412
+ }
413
+
414
+ private canAnswerToMessageBoost(boost: any): boolean {
415
+ if (!boost) {
416
+ return false;
417
+ }
418
+
419
+ if (boost.checkUrl && !boost.checkUrl.test(window.location.href)) {
420
+ return false;
421
+ }
422
+
423
+ if (boost.selector && !document.querySelector(boost.selector)) {
424
+ return false;
425
+ }
426
+
427
+ return true;
428
+ }
429
+
430
+ private executeBoost(boost: any): void {
431
+ this.dispatchEvent(
432
+ new CustomEvent('executeboost', {
433
+ detail: boost,
434
+ }),
435
+ );
436
+ }
437
+
438
+ private getAvailableBoosts(boosts: any[]): any[] {
439
+ return boosts
440
+ .filter(
441
+ (boost: any) =>
442
+ boost &&
443
+ (boost.standalone || boost.selector) &&
444
+ (boost.standalone || document.querySelectorAll(boost.selector).length === 1),
445
+ )
446
+ .map(boost => ({
447
+ ...boost,
448
+ context: {
449
+ element: boost.standalone ? null : boost.selector,
450
+ },
451
+ checkUrl: new RegExp(boost.url),
452
+ }))
453
+ .filter(boost => boost.checkUrl.test(window.location.href));
454
+ }
455
+
456
+ pushMessage(message: any): void {
457
+ this.messages.push(message);
458
+ this.requestUpdate();
459
+ }
460
+
461
+ override render(): TemplateResult {
462
+ if (this.previousMessages !== JSON.stringify(this.messages)) {
463
+ this.previousMessages = JSON.stringify(this.messages);
464
+ setTimeout(() => this.scrollDown(), 1);
465
+ }
466
+
467
+ setTimeout(() => {
468
+ this.renderRoot.querySelectorAll('.mermaid:not([data-processed=true]').forEach(async el => {
469
+ const { svg } = await mermaid.render('graphDiv', el.textContent);
470
+ el.innerHTML = svg;
471
+ el.setAttribute('data-processed', 'true');
472
+ });
473
+ }, 1);
474
+
475
+ return html`
476
+ <section class="container ${this.currentBoost ? 'with-boost' : ''}">
477
+ ${this.messages.map(
478
+ message =>
479
+ html`<section class="${message.role}">
480
+ ${this.canAnswerToMessageBoost(message.boost)
481
+ ? html`<ui5-icon
482
+ name="response"
483
+ class="button action"
484
+ @click=${() => this.answer(message)}
485
+ ></ui5-icon>`
486
+ : nothing}
487
+ ${unsafeHTML(
488
+ this.converter.makeHtml(
489
+ message.role === 'user'
490
+ ? message.content.replace(/\n/g, ' \n')
491
+ : message.content.replace(
492
+ /```markdown([\s\S]*?)```/g,
493
+ (_: unknown, group: string) => group,
494
+ ),
495
+ ),
496
+ )}
497
+ </section>`,
498
+ )}
499
+ <digipair-chatbot-inputs
500
+ @change=${() => this.requestUpdate()}
501
+ .inputs=${this.currentBoost?.inputs || []}
502
+ .context=${{ ...this.context, ...(this.currentBoost?.context || {}) }}
503
+ ></digipair-chatbot-inputs>
504
+
505
+ ${!this.loading
506
+ ? nothing
507
+ : html`<section class="loading">
508
+ <img src=${WRITTING_IMAGE} /><span class="step">${this.loadingStep}</span>
509
+ </section>`}
510
+ </section>
511
+
512
+ <section class="input-container ${this.currentBoost ? 'with-boost' : ''}">
513
+ <section class="input">
514
+ ${this.currentBoost?.parent_history
515
+ ? html`
516
+ <section class="assistant">
517
+ ${this.messages
518
+ .filter(message => message.uuid === this.currentBoost?.parent_history)
519
+ .map(
520
+ message => html`
521
+ <ui5-icon
522
+ name="decline"
523
+ class="button action"
524
+ @click=${() =>
525
+ this.dispatchEvent(new CustomEvent('boost', { detail: null }))}
526
+ ></ui5-icon>
527
+ ${unsafeHTML(
528
+ this.converter.makeHtml(
529
+ message.content.replace(
530
+ /```markdown([\s\S]*?)```/g,
531
+ (_: unknown, group: string) => group,
532
+ ),
533
+ ),
534
+ )}
535
+
536
+ <section class="sources">
537
+ ${message.sources?.map(
538
+ (source: any) => html`
539
+ <a
540
+ class="source ${source.document_url ? 'has-link' : ''}"
541
+ href=${source.document_url ?? 'javascript:'}
542
+ target="_blank"
543
+ >
544
+ ${source.document_name}
545
+ <div class="trust-bar">
546
+ <div
547
+ class="trust-bar-fill"
548
+ style="width: ${source.rank * 100}%;"
549
+ ></div>
550
+ </div>
551
+ </a>
552
+ `,
553
+ )}
554
+ </section>
555
+
556
+ <section class="actions ${this.loading ? 'loading' : ''}">
557
+ ${this.getAvailableBoosts(message.boosts || []).map(
558
+ boost => html`
559
+ <span class="action" @click=${() => this.executeBoost(boost)}
560
+ >${boost.summary}</span
561
+ >
562
+ `,
563
+ )}
564
+ </section>
565
+ `,
566
+ )}
567
+ </section>
568
+ `
569
+ : nothing}
570
+ <textarea
571
+ id="messageInput"
572
+ value=""
573
+ placeholder=${this.currentBoost && !this.currentBoost.prompt
574
+ ? ''
575
+ : 'Saisir votre message'}
576
+ @keydown=${() => this.requestUpdate()}
577
+ @keyup=${(event: Event) => this.keypressManagement(event)}
578
+ ?disabled=${this.loading || (this.currentBoost && !this.currentBoost.prompt)}
579
+ ></textarea>
580
+ </section>
581
+
582
+ <ui5-icon
583
+ name="begin"
584
+ class="button ${(this.currentBoost && !this.canAnswerToMessageBoost(this.currentBoost)) ||
585
+ this.loading ||
586
+ ((!this.messageInput || this.messageInput.value === '') &&
587
+ (!this.currentBoost || this.currentBoost.required)) ||
588
+ !this.hasInputsValues()
589
+ ? 'disabled'
590
+ : ''}"
591
+ @click=${() =>
592
+ (this.currentBoost && !this.canAnswerToMessageBoost(this.currentBoost)) ||
593
+ this.loading ||
594
+ ((!this.messageInput || this.messageInput.value === '') &&
595
+ (!this.currentBoost || this.currentBoost.required)) ||
596
+ !this.hasInputsValues()
597
+ ? void 0
598
+ : this.addMessage(this.messageInput.value.trim())}
599
+ ></ui5-icon>
600
+ </section>
601
+ `;
602
+ }
603
+ }
@@ -0,0 +1 @@
1
+ export const WRITTING_IMAGE = 'data:image/gif;base64,R0lGODlhKAAoAPD/AHp6ent7eyH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAgACACwAAAAAKAAoAAACSJSPqcvtD6OctNqLs968+w+G4kiW5omm6sqOAPMqAQYEdlLfiB3EFN/bAQ853W94APqAswoyyUs8Kz7potrKarfcrvcLDoszBQAh+QQJAgAAACwAAAAAHQAbAAACGoSPqcvtD6OctNqLs968+w+G4kiW5omm6noUACH5BAkCAAIALAkAFQAWAAYAAAIblGCZqMYQYoNSxXuZwSFxbmXLV3lXgzmNtyoFACH5BAUCAAIALAkAFQAWAAYAAAIdlGCZqAcIgmxxJilrVtieDnIY84Ge0VEe2QRNUwAAIfkECQIAAgAsGgAVAAUABQAAAgiUEgLG3RvAKgAh+QQJAgACACwaABQABQAFAAACCVQQgsHNy8wRBQAh+QQJAgACACwaABQABQAFAAACCFQegHt2IEwsACH5BAkCAAIALBoAEwAFAAUAAAIIVAJ2uAebnCgAIfkECQIAAgAsGgASAAUABQAAAghUbhegx5qCKAAh+QQJAgACACwaABEABQAFAAACCBRuoafdIJooACH5BAkCAAIALBoAEAAFAAUAAAIHlBAXy93SCgAh+QQJAgACACwUAA8ACwAMAAACE5RvAYjhwQR4kNFq3Yq8+w+GYgEAIfkECQIAAgAsEgAOAA0ADAAAAhqUj4Fr4cCac1GAqeqE1fYIcNrUYeJijsG5FAAh+QQJAgACACwSAA4ADQAMAAACF5R/oYG42tKLElIDrt7G3vmBkTgq2VUAACH5BAkCAAIALBIADQANAA0AAAIalH+hgKjfDnghGlrtZbr7L0xKh2mlRXmTVwAAIfkECQIAAgAsEgAMAA0ADQAAAhqUf6HI6pxcgAY4QE0AOPsPVpMnkVcmjVCZFQAh+QQJAgACACwSAAsADQAOAAACHJR/oMjhztIL0UxQDQg4+w+G1uNd2URVT3emWQEAIfkECQIAAgAsEgALAA0ADQAAAhqUf6GAqN/SC1EGVg3OvHvxbNHETVQFQOWZFQAh+QQJAgACACwSAAoADQANAAACG5R/oMgQH9iBTxoHrXlA+w9Oi0Z5VGeVGoZaBQAh+QQJAgACACwSAAoADQAMAAACGpR/oYEIy5p5SyYF7NW8i5BxVGRBoQSRzcgVACH5BAkCAAIALBIACQANAAwAAAIZlI8RyKLazINxriiAArh77U3dxFVP2ZxdAQAh+QQJAgACACwLAAkAFAASAAACI5SPaQDqF2J8DshA1cU52dmFSNCIUFSamyms5sex8kzX9n0XACH5BAkCAAIALAkACQAWABEAAAInlI+JEOoZYnxUTuqYxM9iAHDdJkJSWB5WkxpeC8emrLJyhMaknrcFACH5BAkCAAIALAkACQAWABEAAAIrlI+Jod0BmXMgyqnsxSmCWQVfMk4al1koCZXrAbjvTGdVLZy0JaM83sIVAAAh+QQJAgACACwJAAoAFgAQAAACKZSPecHqyeKbIIZpkQU48gNUk7CNTtWYTqq27gtrUowG31vC9RXb91sAACH5BAkCAAIALAkACgAWAA8AAAIplI95AaGfgmRQTICmrDp3qGFHI4JThTYOyrbuCzNlfMFGaAsqlZO5UAAAIfkECQIAAgAsCQALABYADgAAAieUjxBoGsBSmGjaeCxtGpueWZDnLMzjperKti4LvoJmvtpoX3K2GwUAIfkECQIAAgAsCQALABYADQAAAieUfxABKNscWvRQJi2NQtX8QIiHgV0giebKtm6rvsaFymH8XpyMvwUAIfkECQIAAgAsCQAKABYADQAAAimUjwCB7Rcie9TIAFKs4uqYUcrybZyzgOeTrmvrIlcYd14tpBhuLHRdAAAh+QQJAgACACwJAAoAFgAMAAACJpR/oYDtqQJ7VETVwKRgtVtZm3EF4VOeT4dJpppFI5zCkGdDM1wAACH5BAkCAAIALAkACQAWAAwAAAImlI8RyJ0KnDyqTllDvK1uCixcE1rjY2mnUELeCQnZt2biKse4UQAAIfkEBQIAAgAsCQAJABYACwAAAiSUjxDInQGdPBCCKWvErV78cZShbKKnLVyZBuHEupVIzsJLGwUAIfkECQIAAAAsAAAAAB8AFAAAAheEj6nL7Q+jnLTai7PevPsPhuJIlmZXAAAh+QQJAgACACwJAAoAFgAKAAACI5R/oYHtudibIkrqgAI0usB1S4gJwFmNpRlpysouBlm2cCMXACH5BAkCAAIALAkACgAWAAsAAAIklH8Qi+232JsmSqcCaJbawG1eRz3ZVSoimkZiyZEwYr0zBGwFACH5BAkCAAIALAkACgAWAAwAAAInlI8QyI0BlzMKsBisU/HhiUlGpDlY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';
@@ -0,0 +1,30 @@
1
+ import { config as configEngine } from '@digipair/engine';
2
+ import * as actionsChatbot from './pins/chatbot.actions';
3
+
4
+ configEngine.set('LIBRARIES', {
5
+ '@digipair/actions-chatbot': actionsChatbot,
6
+ });
7
+
8
+ type CONFIG_KEY = 'API_URL' | 'COMMON_EXPERIENCE' | 'BASE_URL' | 'LIBRARIES' | 'VERSIONS';
9
+ export const _config = {
10
+ API_URL: window.location.origin,
11
+ COMMON_EXPERIENCE: 'common',
12
+ };
13
+ export const config = {
14
+ set: (key: CONFIG_KEY, value: any) => {
15
+ if (key === 'LIBRARIES') {
16
+ configEngine.set('LIBRARIES', {
17
+ '@digipair/actions-chatbot': actionsChatbot,
18
+ ...value,
19
+ });
20
+ return;
21
+ }
22
+
23
+ if (['BASE_URL', 'VERSIONS'].indexOf(key) >= 0) {
24
+ configEngine.set('BASE_URL', value);
25
+ return;
26
+ }
27
+
28
+ _config[key as 'API_URL' | 'COMMON_EXPERIENCE'] = value;
29
+ },
30
+ };