@gitlab/ui 91.15.0 → 92.1.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.
- package/CHANGELOG.md +23 -0
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +5 -0
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +1 -1
- package/dist/components/experimental/duo/chat/constants.js +2 -1
- package/dist/components/experimental/duo/chat/duo_chat.js +65 -15
- package/dist/components/experimental/duo/chat/mock_data.js +6 -2
- package/dist/index.css +2 -2
- package/dist/index.css.map +1 -1
- package/dist/index.js +1 -0
- package/dist/tokens/build/js/tokens.dark.js +3 -4
- package/dist/tokens/build/js/tokens.js +2 -3
- package/dist/tokens/css/tokens.css +1 -2
- package/dist/tokens/css/tokens.dark.css +2 -3
- package/dist/tokens/js/tokens.dark.js +2 -3
- package/dist/tokens/js/tokens.js +1 -2
- package/dist/tokens/json/tokens.dark.json +4 -36
- package/dist/tokens/json/tokens.json +3 -35
- package/dist/tokens/scss/_tokens.dark.scss +2 -3
- package/dist/tokens/scss/_tokens.scss +1 -2
- package/dist/tokens/scss/_tokens_custom_properties.scss +0 -1
- package/package.json +1 -1
- package/src/components/base/modal/modal.scss +1 -1
- package/src/components/base/popover/popover.scss +10 -10
- package/src/components/base/toast/toast.scss +2 -1
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +5 -0
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +1 -0
- package/src/components/experimental/duo/chat/constants.js +1 -0
- package/src/components/experimental/duo/chat/duo_chat.vue +95 -15
- package/src/components/experimental/duo/chat/mock_data.js +6 -0
- package/src/index.js +1 -0
- package/src/scss/variables.scss +0 -1
- package/src/tokens/build/css/tokens.css +1 -2
- package/src/tokens/build/css/tokens.dark.css +2 -3
- package/src/tokens/build/js/tokens.dark.js +2 -3
- package/src/tokens/build/js/tokens.js +1 -2
- package/src/tokens/build/json/tokens.dark.json +4 -36
- package/src/tokens/build/json/tokens.json +3 -35
- package/src/tokens/build/scss/_tokens.dark.scss +2 -3
- package/src/tokens/build/scss/_tokens.scss +1 -2
- package/src/tokens/build/scss/_tokens_custom_properties.scss +0 -1
- package/src/tokens/feedback.tokens.json +2 -8
- package/src/tokens/contextual/popover.tokens.json +0 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
# [92.1.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v92.0.0...v92.1.0) (2024-09-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **GlDuoChat:** add /include command, integrate context-item-menu ([3f664f8](https://gitlab.com/gitlab-org/gitlab-ui/commit/3f664f89a35aa426bb043f1563cd2bdb9722878c))
|
|
7
|
+
|
|
8
|
+
# [92.0.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v91.15.0...v92.0.0) (2024-09-10)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **Feedback:** Update feedback tokens ([2f47efa](https://gitlab.com/gitlab-org/gitlab-ui/commit/2f47efa9e71154b7567f59d4c2029095ea35d91b))
|
|
14
|
+
* **Modal:** Use new semantic bg tokens ([bf79388](https://gitlab.com/gitlab-org/gitlab-ui/commit/bf79388fc22d83a85408d9184b1072f288b144ac))
|
|
15
|
+
* **Popover:** Use new semantic bg tokens ([6113aa2](https://gitlab.com/gitlab-org/gitlab-ui/commit/6113aa2e62a1c898ab484ae6ef0ca3047405de25))
|
|
16
|
+
* **Toast:** Remove SCSS var ([fe32492](https://gitlab.com/gitlab-org/gitlab-ui/commit/fe3249273e048ace87c2e98398711032e3afc58a))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### BREAKING CHANGES
|
|
20
|
+
|
|
21
|
+
* **Popover:** Update the popover to use new semantic overlap design
|
|
22
|
+
tokens and remove the contextual ones.
|
|
23
|
+
|
|
1
24
|
# [91.15.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v91.14.0...v91.15.0) (2024-09-10)
|
|
2
25
|
|
|
3
26
|
|
|
@@ -82,7 +82,7 @@ var script = {
|
|
|
82
82
|
const __vue_script__ = script;
|
|
83
83
|
|
|
84
84
|
/* template */
|
|
85
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-mb-3 gl-flex gl-flex-col"},[_c('button',{staticClass:"gl-flex gl-w-full gl-items-center gl-border-0 gl-bg-transparent gl-p-0 gl-text-left gl-text-xs gl-lowercase gl-text-gray-500",attrs:{"data-testid":"chat-context-selections-title"},on:{"click":_vm.toggleCollapse}},[_c('gl-icon',{attrs:{"name":_vm.collapseIconName,"data-testid":"chat-context-collapse-icon"}}),_vm._v(" "+_vm._s(_vm.title)+"\n ")],1),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(!_vm.isCollapsed),expression:"!isCollapsed"}],staticClass:"gl-mt-1 gl-flex gl-grow gl-flex-wrap",attrs:{"data-testid":"chat-context-tokens-wrapper"}},_vm._l((_vm.selections),function(contextItem){return _c('gl-token',{key:contextItem.id,staticClass:"gl-mb-2 gl-mr-2",attrs:{"view-only":!_vm.removable,"variant":"default"},on:{"close":function($event){return _vm.onRemoveItem(contextItem)}}},[_c('div',{staticClass:"gl-flex gl-items-center",attrs:{"id":("context-item-" + (contextItem.id) + "-" + _vm.selectionsId)}},[_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.getIconName(contextItem.type),"size":12}}),_vm._v("\n "+_vm._s(contextItem.metadata.name)+"\n ")],1),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":contextItem,"target":("context-item-" + (contextItem.id) + "-" + _vm.selectionsId),"placement":"bottom"}})],1)}),1)])};
|
|
85
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-mb-3 gl-flex gl-flex-col"},[_c('button',{staticClass:"gl-flex gl-w-full gl-items-center gl-border-0 gl-bg-transparent gl-p-0 gl-text-left gl-text-xs gl-lowercase gl-text-gray-500",attrs:{"data-testid":"chat-context-selections-title","type":"button"},on:{"click":_vm.toggleCollapse}},[_c('gl-icon',{attrs:{"name":_vm.collapseIconName,"data-testid":"chat-context-collapse-icon"}}),_vm._v(" "+_vm._s(_vm.title)+"\n ")],1),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(!_vm.isCollapsed),expression:"!isCollapsed"}],staticClass:"gl-mt-1 gl-flex gl-grow gl-flex-wrap",attrs:{"data-testid":"chat-context-tokens-wrapper"}},_vm._l((_vm.selections),function(contextItem){return _c('gl-token',{key:contextItem.id,staticClass:"gl-mb-2 gl-mr-2",attrs:{"view-only":!_vm.removable,"variant":"default"},on:{"close":function($event){return _vm.onRemoveItem(contextItem)}}},[_c('div',{staticClass:"gl-flex gl-items-center",attrs:{"id":("context-item-" + (contextItem.id) + "-" + _vm.selectionsId)}},[_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.getIconName(contextItem.type),"size":12}}),_vm._v("\n "+_vm._s(contextItem.metadata.name)+"\n ")],1),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":contextItem,"target":("context-item-" + (contextItem.id) + "-" + _vm.selectionsId),"placement":"bottom"}})],1)}),1)])};
|
|
86
86
|
var __vue_staticRenderFns__ = [];
|
|
87
87
|
|
|
88
88
|
/* style */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const CHAT_RESET_MESSAGE = '/reset';
|
|
2
2
|
const CHAT_CLEAN_MESSAGE = '/clean';
|
|
3
3
|
const CHAT_CLEAR_MESSAGE = '/clear';
|
|
4
|
+
const CHAT_INCLUDE_MESSAGE = '/include';
|
|
4
5
|
const LOADING_TRANSITION_DURATION = 7500;
|
|
5
6
|
const DOCUMENTATION_SOURCE_TYPES = {
|
|
6
7
|
HANDBOOK: {
|
|
@@ -22,4 +23,4 @@ const MESSAGE_MODEL_ROLES = {
|
|
|
22
23
|
assistant: 'assistant'
|
|
23
24
|
};
|
|
24
25
|
|
|
25
|
-
export { CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE, CHAT_RESET_MESSAGE, DOCUMENTATION_SOURCE_TYPES, LOADING_TRANSITION_DURATION, MESSAGE_MODEL_ROLES };
|
|
26
|
+
export { CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE, CHAT_INCLUDE_MESSAGE, CHAT_RESET_MESSAGE, DOCUMENTATION_SOURCE_TYPES, LOADING_TRANSITION_DURATION, MESSAGE_MODEL_ROLES };
|
|
@@ -14,7 +14,8 @@ import { SafeHtmlDirective } from '../../../../directives/safe_html/safe_html';
|
|
|
14
14
|
import GlDuoChatLoader from './components/duo_chat_loader/duo_chat_loader';
|
|
15
15
|
import GlDuoChatPredefinedPrompts from './components/duo_chat_predefined_prompts/duo_chat_predefined_prompts';
|
|
16
16
|
import GlDuoChatConversation from './components/duo_chat_conversation/duo_chat_conversation';
|
|
17
|
-
import { CHAT_RESET_MESSAGE, CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE } from './constants';
|
|
17
|
+
import { CHAT_RESET_MESSAGE, CHAT_INCLUDE_MESSAGE, CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE } from './constants';
|
|
18
|
+
import { INCLUDE_SLASH_COMMAND } from './mock_data';
|
|
18
19
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
19
20
|
|
|
20
21
|
const i18n = {
|
|
@@ -205,7 +206,9 @@ var script = {
|
|
|
205
206
|
scrolledToBottom: true,
|
|
206
207
|
activeCommandIndex: 0,
|
|
207
208
|
displaySubmitButton: true,
|
|
208
|
-
compositionJustEnded: false
|
|
209
|
+
compositionJustEnded: false,
|
|
210
|
+
contextItemsMenuIsOpen: false,
|
|
211
|
+
contextItemMenuRef: null
|
|
209
212
|
};
|
|
210
213
|
},
|
|
211
214
|
computed: {
|
|
@@ -231,6 +234,9 @@ var script = {
|
|
|
231
234
|
var _this$messages2;
|
|
232
235
|
return (_this$messages2 = this.messages) === null || _this$messages2 === void 0 ? void 0 : _this$messages2[this.messages.length - 1];
|
|
233
236
|
},
|
|
237
|
+
caseInsensitivePrompt() {
|
|
238
|
+
return this.prompt.toLowerCase().trim();
|
|
239
|
+
},
|
|
234
240
|
resetDisabled() {
|
|
235
241
|
var _this$lastMessage;
|
|
236
242
|
if (this.isLoading || !this.hasMessages) {
|
|
@@ -246,21 +252,38 @@ var script = {
|
|
|
246
252
|
return Boolean(((_this$lastMessage3 = this.lastMessage) === null || _this$lastMessage3 === void 0 ? void 0 : (_this$lastMessage3$ch = _this$lastMessage3.chunks) === null || _this$lastMessage3$ch === void 0 ? void 0 : _this$lastMessage3$ch.length) > 0 && !((_this$lastMessage4 = this.lastMessage) !== null && _this$lastMessage4 !== void 0 && _this$lastMessage4.content) || typeof ((_this$lastMessage5 = this.lastMessage) === null || _this$lastMessage5 === void 0 ? void 0 : _this$lastMessage5.chunkId) === 'number');
|
|
247
253
|
},
|
|
248
254
|
filteredSlashCommands() {
|
|
249
|
-
|
|
250
|
-
|
|
255
|
+
return this.slashCommands.filter(c => c.name.toLowerCase().startsWith(this.caseInsensitivePrompt)).filter(c => {
|
|
256
|
+
if (c.name === CHAT_INCLUDE_MESSAGE) {
|
|
257
|
+
return this.hasContextItemSelectionMenu;
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
});
|
|
251
261
|
},
|
|
252
262
|
shouldShowSlashCommands() {
|
|
253
|
-
if (!this.withSlashCommands) return false;
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
-
const startsWithSlashCommand = this.slashCommands.some(c => caseInsensitivePrompt.startsWith(c.name));
|
|
263
|
+
if (!this.withSlashCommands || this.contextItemsMenuIsOpen) return false;
|
|
264
|
+
const startsWithSlash = this.caseInsensitivePrompt.startsWith('/');
|
|
265
|
+
const startsWithSlashCommand = this.slashCommands.some(c => this.caseInsensitivePrompt.startsWith(c.name));
|
|
257
266
|
return startsWithSlash && this.filteredSlashCommands.length && !startsWithSlashCommand;
|
|
258
267
|
},
|
|
268
|
+
shouldShowContextItemSelectionMenu() {
|
|
269
|
+
if (!this.hasContextItemSelectionMenu) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
const isSlash = this.caseInsensitivePrompt === '/';
|
|
273
|
+
if (!this.caseInsensitivePrompt || isSlash) {
|
|
274
|
+
// if user has removed entire command (or whole command except for '/') we should close context item menu and allow slash command menu to show again
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
return INCLUDE_SLASH_COMMAND.name.startsWith(this.caseInsensitivePrompt);
|
|
278
|
+
},
|
|
259
279
|
inputPlaceholder() {
|
|
260
280
|
if (this.chatPromptPlaceholder) {
|
|
261
281
|
return this.chatPromptPlaceholder;
|
|
262
282
|
}
|
|
263
283
|
return this.withSlashCommands ? i18n.CHAT_PROMPT_PLACEHOLDER_WITH_COMMANDS : i18n.CHAT_PROMPT_PLACEHOLDER_DEFAULT;
|
|
284
|
+
},
|
|
285
|
+
hasContextItemSelectionMenu() {
|
|
286
|
+
return Boolean(this.contextItemMenuRef);
|
|
264
287
|
}
|
|
265
288
|
},
|
|
266
289
|
watch: {
|
|
@@ -304,27 +327,32 @@ var script = {
|
|
|
304
327
|
this.setPromptAndFocus();
|
|
305
328
|
},
|
|
306
329
|
sendChatPrompt() {
|
|
307
|
-
if (!this.displaySubmitButton) {
|
|
330
|
+
if (!this.displaySubmitButton || this.contextItemsMenuIsOpen) {
|
|
308
331
|
return;
|
|
309
332
|
}
|
|
310
333
|
if (this.prompt) {
|
|
311
|
-
if (this.
|
|
334
|
+
if (this.caseInsensitivePrompt === CHAT_RESET_MESSAGE && this.resetDisabled) {
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
if (this.caseInsensitivePrompt.startsWith(CHAT_INCLUDE_MESSAGE) && this.hasContextItemSelectionMenu) {
|
|
338
|
+
this.contextItemsMenuIsOpen = true;
|
|
312
339
|
return;
|
|
313
340
|
}
|
|
341
|
+
if (![CHAT_RESET_MESSAGE, CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE].includes(this.caseInsensitivePrompt)) {
|
|
342
|
+
this.displaySubmitButton = false;
|
|
343
|
+
}
|
|
344
|
+
|
|
314
345
|
/**
|
|
315
346
|
* Emitted when a new user prompt should be sent out.
|
|
316
347
|
*
|
|
317
348
|
* @param {String} prompt The user prompt to send.
|
|
318
349
|
*/
|
|
319
|
-
|
|
320
|
-
if (![CHAT_RESET_MESSAGE, CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE].includes(this.prompt)) {
|
|
321
|
-
this.displaySubmitButton = false;
|
|
322
|
-
}
|
|
323
350
|
this.$emit('send-chat-prompt', this.prompt.trim());
|
|
324
351
|
this.setPromptAndFocus();
|
|
325
352
|
}
|
|
326
353
|
},
|
|
327
354
|
sendPredefinedPrompt(prompt) {
|
|
355
|
+
this.contextItemsMenuIsOpen = false;
|
|
328
356
|
this.prompt = prompt;
|
|
329
357
|
this.sendChatPrompt();
|
|
330
358
|
},
|
|
@@ -371,6 +399,18 @@ var script = {
|
|
|
371
399
|
const {
|
|
372
400
|
key
|
|
373
401
|
} = e;
|
|
402
|
+
if (this.contextItemsMenuIsOpen) {
|
|
403
|
+
var _this$contextItemMenu;
|
|
404
|
+
if (!this.shouldShowContextItemSelectionMenu) {
|
|
405
|
+
this.contextItemsMenuIsOpen = false;
|
|
406
|
+
}
|
|
407
|
+
(_this$contextItemMenu = this.contextItemMenuRef) === null || _this$contextItemMenu === void 0 ? void 0 : _this$contextItemMenu.handleKeyUp(e);
|
|
408
|
+
return;
|
|
409
|
+
}
|
|
410
|
+
if (this.caseInsensitivePrompt === INCLUDE_SLASH_COMMAND.name) {
|
|
411
|
+
this.contextItemsMenuIsOpen = true;
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
374
414
|
if (this.shouldShowSlashCommands) {
|
|
375
415
|
e.preventDefault();
|
|
376
416
|
if (key === 'Enter') {
|
|
@@ -416,6 +456,9 @@ var script = {
|
|
|
416
456
|
this.sendChatPrompt();
|
|
417
457
|
} else {
|
|
418
458
|
this.setPromptAndFocus(`${command.name} `);
|
|
459
|
+
if (command.name === CHAT_INCLUDE_MESSAGE && this.hasContextItemSelectionMenu) {
|
|
460
|
+
this.contextItemsMenuIsOpen = true;
|
|
461
|
+
}
|
|
419
462
|
}
|
|
420
463
|
},
|
|
421
464
|
onInsertCodeSnippet(e) {
|
|
@@ -424,6 +467,13 @@ var script = {
|
|
|
424
467
|
* @param {*} event An event containing code string in the "detail.code" field.
|
|
425
468
|
*/
|
|
426
469
|
this.$emit('insert-code-snippet', e);
|
|
470
|
+
},
|
|
471
|
+
closeContextItemsMenuOpen() {
|
|
472
|
+
this.contextItemsMenuIsOpen = false;
|
|
473
|
+
this.setPromptAndFocus();
|
|
474
|
+
},
|
|
475
|
+
setContextItemsMenuRef(ref) {
|
|
476
|
+
this.contextItemMenuRef = ref;
|
|
427
477
|
}
|
|
428
478
|
},
|
|
429
479
|
i18n,
|
|
@@ -438,7 +488,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
438
488
|
{
|
|
439
489
|
'gl-h-full': !_vm.hasMessages,
|
|
440
490
|
'force-scroll-bar': _vm.hasMessages,
|
|
441
|
-
} ],attrs:{"tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('gl-duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"canceled-request-ids":_vm.canceledRequestIds,"show-delimiter":index > 0},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('gl-empty-state',{key:"empty-state",staticClass:"gl-flex-grow gl-justify-center",attrs:{"svg-path":_vm.$options.emptySvg,"svg-height":145,"title":_vm.emptyStateTitle},scopedSlots:_vm._u([{key:"description",fn:function(){return [_c('p',{staticClass:"gl-mb-3",attrs:{"data-testid":"gl-duo-chat-empty-state-description"}},[_vm._v("\n "+_vm._s(_vm.emptyStateDescription)+"\n ")]),_vm._v(" "),_c('p',{staticClass:"gl-mt-3 gl-text-sm gl-text-subtle",attrs:{"data-testid":"gl-duo-chat-empty-state-secondary-description"}},[_vm._v("\n "+_vm._s(_vm.emptyStateSecondaryDescription)+"\n ")])]},proxy:true}],null,false,460840487)}),_vm._v(" "),_c('gl-duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('gl-duo-chat-loader',{key:"loader",attrs:{"tool-name":_vm.toolName}}):_vm._e(),_vm._v(" "),_c('div',{key:"anchor",ref:"anchor",staticClass:"scroll-anchor"})],2)],1),_vm._v(" "),(_vm.isChatAvailable)?_c('footer',{staticClass:"duo-chat-drawer-footer duo-chat-drawer-footer-sticky gl-border-t gl-bg-gray-10 gl-p-5",class:{ 'duo-chat-drawer-body-scrim-on-footer': !_vm.scrolledToBottom },attrs:{"data-testid":"chat-footer"}},[_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('gl-form-input-group',{scopedSlots:_vm._u([{key:"append",fn:function(){return [(_vm.displaySubmitButton)?_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-base",attrs:{"icon":"paper-airplane","category":"primary","variant":"confirm","type":"submit","data-testid":"chat-prompt-submit-button","aria-label":_vm.$options.i18n.CHAT_SUBMIT_LABEL}}):_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-base",attrs:{"icon":"stop","category":"primary","variant":"default","data-testid":"chat-prompt-cancel-button","aria-label":_vm.$options.i18n.CHAT_CANCEL_LABEL},on:{"click":_vm.cancelPrompt}})]},proxy:true}],null,false,677611116)},[_c('div',{staticClass:"duo-chat-input gl-min-h-8 gl-max-w-full gl-grow gl-rounded-base gl-bg-white gl-align-top gl-shadow-inner-1-gray-400",attrs:{"data-value":_vm.prompt}},[(_vm.shouldShowSlashCommands)?_c('gl-card',{ref:"commands",staticClass:"slash-commands !gl-absolute gl-w-full -gl-translate-y-full gl-list-none gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2"}},_vm._l((_vm.filteredSlashCommands),function(command,index){return _c('gl-dropdown-item',{key:command.name,class:{ 'active-command': index === _vm.activeCommandIndex },on:{"click":function($event){return _vm.selectSlashCommand(index)}},nativeOn:{"mouseenter":function($event){_vm.activeCommandIndex = index;}}},[_c('span',{staticClass:"gl-flex gl-justify-between"},[_c('span',{staticClass:"gl-block"},[_vm._v(_vm._s(command.name))]),_vm._v(" "),_c('small',{staticClass:"gl-pl-3 gl-text-right gl-italic gl-text-gray-500"},[_vm._v(_vm._s(command.description))])])])}),1):_vm._e(),_vm._v(" "),_c('gl-form-textarea',{ref:"prompt",staticClass:"gl-absolute !gl-h-full gl-rounded-br-none gl-rounded-tr-none !gl-bg-transparent !gl-py-4 !gl-shadow-none",class:{ 'gl-truncate': !_vm.prompt },attrs:{"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"autofocus":""},on:{"compositionend":_vm.compositionEnd},nativeOn:{"keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }$event.preventDefault();},"keyup":function($event){return _vm.onInputKeyup.apply(null, arguments)}},model:{value:(_vm.prompt),callback:function ($$v) {_vm.prompt=$$v;},expression:"prompt"}})],1)]),_vm._v(" "),_c('p',{staticClass:"gl-mb-0 gl-mt-3 gl-text-sm gl-leading-20 gl-text-subtle",attrs:{"data-testid":"chat-legal-disclaimer"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_LEGAL_DISCLAIMER)+"\n ")])],1)],1):_vm._e()]):_vm._e()};
|
|
491
|
+
} ],attrs:{"tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('gl-duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"canceled-request-ids":_vm.canceledRequestIds,"show-delimiter":index > 0},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('gl-empty-state',{key:"empty-state",staticClass:"gl-flex-grow gl-justify-center",attrs:{"svg-path":_vm.$options.emptySvg,"svg-height":145,"title":_vm.emptyStateTitle},scopedSlots:_vm._u([{key:"description",fn:function(){return [_c('p',{staticClass:"gl-mb-3",attrs:{"data-testid":"gl-duo-chat-empty-state-description"}},[_vm._v("\n "+_vm._s(_vm.emptyStateDescription)+"\n ")]),_vm._v(" "),_c('p',{staticClass:"gl-mt-3 gl-text-sm gl-text-subtle",attrs:{"data-testid":"gl-duo-chat-empty-state-secondary-description"}},[_vm._v("\n "+_vm._s(_vm.emptyStateSecondaryDescription)+"\n ")])]},proxy:true}],null,false,460840487)}),_vm._v(" "),_c('gl-duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('gl-duo-chat-loader',{key:"loader",attrs:{"tool-name":_vm.toolName}}):_vm._e(),_vm._v(" "),_c('div',{key:"anchor",ref:"anchor",staticClass:"scroll-anchor"})],2)],1),_vm._v(" "),(_vm.isChatAvailable)?_c('footer',{staticClass:"duo-chat-drawer-footer duo-chat-drawer-footer-sticky gl-border-t gl-bg-gray-10 gl-p-5",class:{ 'duo-chat-drawer-body-scrim-on-footer': !_vm.scrolledToBottom },attrs:{"data-testid":"chat-footer"}},[_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('div',{staticClass:"gl-relative gl-max-w-full"},[_vm._t("context-items-menu",null,{"isOpen":_vm.contextItemsMenuIsOpen,"onClose":_vm.closeContextItemsMenuOpen,"setRef":_vm.setContextItemsMenuRef,"focusPrompt":_vm.focusChatInput})],2),_vm._v(" "),_c('gl-form-input-group',{scopedSlots:_vm._u([{key:"append",fn:function(){return [(_vm.displaySubmitButton)?_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-base",attrs:{"icon":"paper-airplane","category":"primary","variant":"confirm","type":"submit","data-testid":"chat-prompt-submit-button","aria-label":_vm.$options.i18n.CHAT_SUBMIT_LABEL}}):_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-base",attrs:{"icon":"stop","category":"primary","variant":"default","data-testid":"chat-prompt-cancel-button","aria-label":_vm.$options.i18n.CHAT_CANCEL_LABEL},on:{"click":_vm.cancelPrompt}})]},proxy:true}],null,false,677611116)},[_c('div',{staticClass:"duo-chat-input gl-min-h-8 gl-max-w-full gl-grow gl-rounded-base gl-bg-white gl-align-top gl-shadow-inner-1-gray-400",attrs:{"data-value":_vm.prompt}},[(_vm.shouldShowSlashCommands)?_c('gl-card',{ref:"commands",staticClass:"slash-commands !gl-absolute gl-w-full -gl-translate-y-full gl-list-none gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2"}},_vm._l((_vm.filteredSlashCommands),function(command,index){return _c('gl-dropdown-item',{key:command.name,class:{ 'active-command': index === _vm.activeCommandIndex },on:{"click":function($event){return _vm.selectSlashCommand(index)}},nativeOn:{"mouseenter":function($event){_vm.activeCommandIndex = index;}}},[_c('span',{staticClass:"gl-flex gl-justify-between"},[_c('span',{staticClass:"gl-block"},[_vm._v(_vm._s(command.name))]),_vm._v(" "),_c('small',{staticClass:"gl-pl-3 gl-text-right gl-italic gl-text-gray-500"},[_vm._v(_vm._s(command.description))])])])}),1):_vm._e(),_vm._v(" "),_c('gl-form-textarea',{ref:"prompt",staticClass:"gl-absolute !gl-h-full gl-rounded-br-none gl-rounded-tr-none !gl-bg-transparent !gl-py-4 !gl-shadow-none",class:{ 'gl-truncate': !_vm.prompt },attrs:{"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"autofocus":""},on:{"compositionend":_vm.compositionEnd},nativeOn:{"keydown":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }$event.preventDefault();},"keyup":function($event){return _vm.onInputKeyup.apply(null, arguments)}},model:{value:(_vm.prompt),callback:function ($$v) {_vm.prompt=$$v;},expression:"prompt"}})],1)]),_vm._v(" "),_c('p',{staticClass:"gl-mb-0 gl-mt-3 gl-text-sm gl-leading-20 gl-text-subtle",attrs:{"data-testid":"chat-legal-disclaimer"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_LEGAL_DISCLAIMER)+"\n ")])],1)],1):_vm._e()]):_vm._e()};
|
|
442
492
|
var __vue_staticRenderFns__ = [];
|
|
443
493
|
|
|
444
494
|
/* style */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { setStoryTimeout } from '../../../../utils/test_utils';
|
|
2
|
-
import { DOCUMENTATION_SOURCE_TYPES, MESSAGE_MODEL_ROLES, CHAT_RESET_MESSAGE, CHAT_CLEAN_MESSAGE } from './constants';
|
|
2
|
+
import { DOCUMENTATION_SOURCE_TYPES, MESSAGE_MODEL_ROLES, CHAT_RESET_MESSAGE, CHAT_CLEAN_MESSAGE, CHAT_INCLUDE_MESSAGE } from './constants';
|
|
3
3
|
import { getMockContextItems } from './components/duo_chat_context/mock_context_data';
|
|
4
4
|
|
|
5
5
|
const MOCK_SOURCES = [{
|
|
@@ -154,5 +154,9 @@ const SLASH_COMMANDS = [{
|
|
|
154
154
|
name: '/explain',
|
|
155
155
|
description: 'Explain the selected snippet.'
|
|
156
156
|
}];
|
|
157
|
+
const INCLUDE_SLASH_COMMAND = {
|
|
158
|
+
name: CHAT_INCLUDE_MESSAGE,
|
|
159
|
+
description: 'Include additional context in the conversation.'
|
|
160
|
+
};
|
|
157
161
|
|
|
158
|
-
export { MOCK_RESPONSE_MESSAGE, MOCK_RESPONSE_MESSAGE_FOR_STREAMING, MOCK_USER_PROMPT_MESSAGE, SLASH_COMMANDS, generateMockResponseChunks, generateSeparateChunks, renderGFM, renderMarkdown };
|
|
162
|
+
export { INCLUDE_SLASH_COMMAND, MOCK_RESPONSE_MESSAGE, MOCK_RESPONSE_MESSAGE_FOR_STREAMING, MOCK_USER_PROMPT_MESSAGE, SLASH_COMMANDS, generateMockResponseChunks, generateSeparateChunks, renderGFM, renderMarkdown };
|