@gitlab/ui 92.1.0 → 92.2.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 CHANGED
@@ -1,3 +1,19 @@
1
+ # [92.2.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v92.1.1...v92.2.0) (2024-09-11)
2
+
3
+
4
+ ### Features
5
+
6
+ * **DuoChat:** MR Feedback from vanessaotto ([0cf5b57](https://gitlab.com/gitlab-org/gitlab-ui/commit/0cf5b57b8445c9e180ae3e1b7b7f1aab56eeb3a6))
7
+ * **DuoChat:** UI Polish on context ([4ab5ed8](https://gitlab.com/gitlab-org/gitlab-ui/commit/4ab5ed84c18c316317135d97851e911823df50e9))
8
+ * **GlButton:** Explicitly add btn-block styling rather than relying on bootstrap ([40dc96b](https://gitlab.com/gitlab-org/gitlab-ui/commit/40dc96b35a8885c12de9c43d7a292db5e83e22dc))
9
+
10
+ ## [92.1.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v92.1.0...v92.1.1) (2024-09-11)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * ensure chat scrolls to bottom with new message ([3d048f8](https://gitlab.com/gitlab-org/gitlab-ui/commit/3d048f82c586cd3860a7cf5c86d0572ee44d0dc6))
16
+
1
17
  # [92.1.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v92.0.0...v92.1.0) (2024-09-10)
2
18
 
3
19
 
@@ -1,12 +1,16 @@
1
1
  import GlPopover from '../../../../../../base/popover/popover';
2
+ import GlIcon from '../../../../../../base/icon/icon';
2
3
  import { translate } from '../../../../../../../utils/i18n';
3
4
  import { CONTEXT_ITEM_TYPE_ISSUE, CONTEXT_ITEM_TYPE_MERGE_REQUEST, CONTEXT_ITEM_TYPE_PROJECT_FILE } from '../constants';
4
5
  import { formatMergeRequestId, formatIssueId } from '../utils';
6
+ import GlAlert from '../../../../../../base/alert/alert';
5
7
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
6
8
 
7
9
  var script = {
8
10
  name: 'DuoChatContextItemPopover',
9
11
  components: {
12
+ GlAlert,
13
+ GlIcon,
10
14
  GlPopover
11
15
  },
12
16
  props: {
@@ -55,11 +59,35 @@ var script = {
55
59
  filePath() {
56
60
  return this.contextItem.type === CONTEXT_ITEM_TYPE_PROJECT_FILE ? this.itemInfo.relFilePath || '' : null;
57
61
  },
62
+ filePathArray() {
63
+ var _this$filePath;
64
+ return (_this$filePath = this.filePath) === null || _this$filePath === void 0 ? void 0 : _this$filePath.split('/');
65
+ },
58
66
  isEnabled() {
59
67
  return this.contextItem.isEnabled !== false;
60
68
  },
61
69
  disabledMessage() {
62
70
  return Array.isArray(this.contextItem.disabledReasons) && this.contextItem.disabledReasons.length > 0 ? this.contextItem.disabledReasons.join(', ') : translate('DuoChatContextItemPopover.DisabledReason', 'This item is disabled');
71
+ },
72
+ iconName() {
73
+ switch (this.contextItem.type) {
74
+ case 'merge_request':
75
+ return 'merge-request';
76
+ case 'issue':
77
+ return 'issues';
78
+ default:
79
+ return 'project';
80
+ }
81
+ },
82
+ itemTypeLabel() {
83
+ switch (this.contextItem.type) {
84
+ case 'merge_request':
85
+ return translate('DuoChatContextItemPopover.MergeRequest', 'Merge request');
86
+ case 'issue':
87
+ return translate('DuoChatContextItemPopover.Issue', 'Issue');
88
+ default:
89
+ return translate('DuoChatContextItemPopover.File', 'Project file');
90
+ }
63
91
  }
64
92
  },
65
93
  methods: {
@@ -71,7 +99,7 @@ var script = {
71
99
  const __vue_script__ = script;
72
100
 
73
101
  /* template */
74
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-popover',{attrs:{"target":_vm.target,"triggers":"hover focus","placement":_vm.placement,"title":_vm.contextItem.metadata.name,"custom-class":"gl-duo-chat-item-popover"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('span',{staticClass:"gl-text-sm gl-text-gray-500",attrs:{"data-testid":"chat-context-popover-title"}},[_vm._v(_vm._s(_vm.contextItem.metadata.name))])]},proxy:true}])},[_vm._v(" "),_c('div',{staticClass:"gl-p-3"},[_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.ProjectLabel', 'Project:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.itemInfo.project))])]),_vm._v(" "),(_vm.filePath !== null)?_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.PathLabel', 'Path:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.filePath))])]):_vm._e(),_vm._v(" "),(_vm.id !== null)?_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.IdLabel', 'ID:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.formattedId))])]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.TypeLabel', 'Type:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.contextItem.type))])]),_vm._v(" "),(!_vm.isEnabled)?_c('div',{staticClass:"gl-text-red-500",attrs:{"data-testid":"chat-context-popover-disabled"}},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.DisabledMessageLabel', 'Note:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.disabledMessage))])]):_vm._e()])])};
102
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-popover',{attrs:{"target":_vm.target,"triggers":"hover focus","placement":_vm.placement,"title":_vm.contextItem.metadata.name,"custom-class":"gl-duo-chat-item-popover"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('div',[_c('div',{staticClass:"gl-heading-3 gl-mb-1 gl-mt-2 gl-leading-1",attrs:{"data-testid":"chat-context-popover-title"}},[_vm._v("\n "+_vm._s(_vm.contextItem.metadata.name)+"\n ")]),_vm._v(" "),_c('div',{staticClass:"gl-font-normal gl-text-subtle"},[_vm._v(_vm._s(_vm.itemTypeLabel))])])]},proxy:true}])},[_vm._v(" "),_c('div',[(_vm.filePath !== null)?_c('div',{staticClass:"gl-flex gl-flex-wrap gl-items-center"},[_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":"document","size":12,"variant":"subtle"}}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.itemInfo.project))]),_vm._l((_vm.filePathArray),function(pathPart,index){return _c('span',{key:pathPart,staticClass:"gl-break-all"},[_vm._v(_vm._s(pathPart)+_vm._s(index + 1 < _vm.filePathArray.length ? '/' : ''))])})],2):_vm._e(),_vm._v(" "),(_vm.filePath === null)?_c('div',{staticClass:"gl-flex gl-flex-wrap gl-items-center gl-leading-1 gl-text-subtle"},[_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.iconName,"size":12,"variant":"subtle"}}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.itemInfo.project))]),(_vm.id !== null)?_c('span',[_vm._v(_vm._s(_vm.formattedId))]):_vm._e()],1):_vm._e(),_vm._v(" "),(!_vm.isEnabled)?_c('gl-alert',{staticClass:"gl-mb-1 gl-mt-3 gl-p-4 gl-text-sm",attrs:{"variant":"danger","data-testid":"chat-context-popover-disabled","dismissible":false,"show-icon":false}},[_vm._v("\n "+_vm._s(_vm.disabledMessage)+"\n ")]):_vm._e()],1)])};
75
103
  var __vue_staticRenderFns__ = [];
76
104
 
77
105
  /* style */
@@ -43,6 +43,11 @@ var script = {
43
43
  type: Boolean,
44
44
  required: false,
45
45
  default: false
46
+ },
47
+ variant: {
48
+ type: String,
49
+ required: false,
50
+ default: 'assistant'
46
51
  }
47
52
  },
48
53
  data() {
@@ -54,6 +59,18 @@ var script = {
54
59
  computed: {
55
60
  collapseIconName() {
56
61
  return this.isCollapsed ? 'chevron-right' : 'chevron-down';
62
+ },
63
+ variantClasses() {
64
+ if (this.variant === 'user') {
65
+ return 'gl-mb-0 gl-mt-2 gl-text-blue-700';
66
+ }
67
+ return 'gl-mb-2 gl-text-gray-500';
68
+ },
69
+ tokenVariantClasses() {
70
+ if (this.variant === 'user') {
71
+ return 'gl-bg-blue-50 gl-text-blue-600';
72
+ }
73
+ return '';
57
74
  }
58
75
  },
59
76
  methods: {
@@ -82,7 +99,7 @@ var script = {
82
99
  const __vue_script__ = script;
83
100
 
84
101
  /* 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","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)])};
102
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-flex gl-flex-col",class:_vm.variantClasses},[_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-inherit",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(item){return _c('gl-token',{key:item.id,staticClass:"gl-mb-2 gl-mr-2",class:_vm.tokenVariantClasses,attrs:{"id":("context-item-" + (item.id) + "-" + _vm.selectionsId + "-token"),"view-only":!_vm.removable,"variant":"default"},on:{"close":function($event){return _vm.onRemoveItem(item)}}},[_c('div',{staticClass:"gl-flex gl-items-center",attrs:{"id":("context-item-" + (item.id) + "-" + _vm.selectionsId)}},[_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.getIconName(item.type),"size":12}}),_vm._v("\n "+_vm._s(item.metadata.name)+"\n ")],1),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":item,"target":("context-item-" + (item.id) + "-" + _vm.selectionsId + "-token"),"placement":"bottom"}})],1)}),1)])};
86
103
  var __vue_staticRenderFns__ = [];
87
104
 
88
105
  /* style */
@@ -7,7 +7,7 @@ import GlFormGroup from '../../../../../base/form/form_group/form_group';
7
7
  import GlFormTextarea from '../../../../../base/form/form_textarea/form_textarea';
8
8
  import { SafeHtmlDirective } from '../../../../../../directives/safe_html/safe_html';
9
9
  import { translatePlural, sprintf } from '../../../../../../utils/i18n';
10
- import { MESSAGE_MODEL_ROLES } from '../../constants';
10
+ import { SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED, MESSAGE_MODEL_ROLES } from '../../constants';
11
11
  import DocumentationSources from '../duo_chat_message_sources/duo_chat_message_sources';
12
12
  import { renderDuoChatMarkdownPreview } from '../../markdown_renderer';
13
13
  import { CopyCodeElement } from './copy_code_element';
@@ -86,7 +86,8 @@ var script = {
86
86
  improveWhat: '',
87
87
  messageWatcher: null,
88
88
  // imperatively set up watcher on message
89
- messageChunks: []
89
+ messageChunks: [],
90
+ selectedContextItemsDefaultCollapsed: SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED
90
91
  };
91
92
  },
92
93
  computed: {
@@ -140,9 +141,6 @@ var script = {
140
141
  displaySelectedContextItems() {
141
142
  return Boolean(this.selectedContextItems.length);
142
143
  },
143
- selectedContextItemsDefaultCollapsed() {
144
- return this.isAssistantMessage;
145
- },
146
144
  selectedContextItemsTitle() {
147
145
  if (!this.displaySelectedContextItems) return '';
148
146
  const count = this.selectedContextItems.length;
@@ -228,7 +226,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
228
226
  _vm.isAssistantMessage,
229
227
  'gl-bg-white': _vm.isAssistantMessage && !_vm.error,
230
228
  '!gl-border-none gl-bg-red-50': _vm.error,
231
- },on:{"insert-code-snippet":_vm.onInsertCodeSnippet}},[(_vm.error)?_c('gl-icon',{staticClass:"error-icon gl-border gl-mr-3 gl-shrink-0 gl-rounded-full gl-border-red-500 gl-text-red-600",attrs:{"aria-label":_vm.$options.i18n.MESSAGE_ERROR,"name":"status_warning_borderless","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),_c('div',{ref:"content-wrapper",class:{ 'has-error': _vm.error }},[(_vm.displaySelectedContextItems)?_c('gl-duo-chat-context-item-selections',{staticClass:"gl-mb-3",attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed}}):_vm._e(),_vm._v(" "),(_vm.error)?_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.renderedError),expression:"renderedError",arg:_vm.$options.safeHtmlConfigExtension}],ref:"error-message"}):_c('div',[_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content"}),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-message-feedback gl-mt-4 gl-flex gl-items-end"},[(_vm.isChunkAndNotCancelled)?_c('gl-loading-icon',{staticClass:"gl-pt-4",attrs:{"variant":"dots","inline":""}}):_vm._e(),_vm._v(" "),(_vm.isNotChunkOrCancelled)?_c('gl-duo-user-feedback',{attrs:{"feedback-received":_vm.hasFeedback,"modal-title":_vm.$options.i18n.MODAL.TITLE,"modal-alert":_vm.$options.i18n.MODAL.ALERT_TEXT},on:{"feedback":_vm.logEvent},scopedSlots:_vm._u([{key:"feedback-extra-fields",fn:function(){return [_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.DID_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.INTERACTION},model:{value:(_vm.didWhat),callback:function ($$v) {_vm.didWhat=$$v;},expression:"didWhat"}})],1),_vm._v(" "),_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.IMPROVE_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.BETTER_RESPONSE},model:{value:(_vm.improveWhat),callback:function ($$v) {_vm.improveWhat=$$v;},expression:"improveWhat"}})],1)]},proxy:true}],null,false,419229417)}):_vm._e()],1)]:_vm._e()],2)],1)],1)};
229
+ },on:{"insert-code-snippet":_vm.onInsertCodeSnippet}},[(_vm.error)?_c('gl-icon',{staticClass:"error-icon gl-border gl-mr-3 gl-shrink-0 gl-rounded-full gl-border-red-500 gl-text-red-600",attrs:{"aria-label":_vm.$options.i18n.MESSAGE_ERROR,"name":"status_warning_borderless","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),_c('div',{ref:"content-wrapper",class:{ 'has-error': _vm.error }},[(_vm.displaySelectedContextItems && _vm.isAssistantMessage)?_c('gl-duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"assistant"}}):_vm._e(),_vm._v(" "),(_vm.error)?_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.renderedError),expression:"renderedError",arg:_vm.$options.safeHtmlConfigExtension}],ref:"error-message"}):_c('div',[_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content"}),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-message-feedback gl-mt-4 gl-flex gl-items-end"},[(_vm.isChunkAndNotCancelled)?_c('gl-loading-icon',{staticClass:"gl-pt-4",attrs:{"variant":"dots","inline":""}}):_vm._e(),_vm._v(" "),(_vm.isNotChunkOrCancelled)?_c('gl-duo-user-feedback',{attrs:{"feedback-received":_vm.hasFeedback,"modal-title":_vm.$options.i18n.MODAL.TITLE,"modal-alert":_vm.$options.i18n.MODAL.ALERT_TEXT},on:{"feedback":_vm.logEvent},scopedSlots:_vm._u([{key:"feedback-extra-fields",fn:function(){return [_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.DID_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.INTERACTION},model:{value:(_vm.didWhat),callback:function ($$v) {_vm.didWhat=$$v;},expression:"didWhat"}})],1),_vm._v(" "),_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.IMPROVE_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.BETTER_RESPONSE},model:{value:(_vm.improveWhat),callback:function ($$v) {_vm.improveWhat=$$v;},expression:"improveWhat"}})],1)]},proxy:true}],null,false,419229417)}):_vm._e()],1)]:_vm._e()],2),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isUserMessage)?_c('gl-duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"user"}}):_vm._e()],1)],1)};
232
230
  var __vue_staticRenderFns__ = [];
233
231
 
234
232
  /* style */
@@ -22,5 +22,6 @@ const MESSAGE_MODEL_ROLES = {
22
22
  system: 'system',
23
23
  assistant: 'assistant'
24
24
  };
25
+ const SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED = true;
25
26
 
26
- export { CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE, CHAT_INCLUDE_MESSAGE, CHAT_RESET_MESSAGE, DOCUMENTATION_SOURCE_TYPES, LOADING_TRANSITION_DURATION, MESSAGE_MODEL_ROLES };
27
+ export { CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE, CHAT_INCLUDE_MESSAGE, CHAT_RESET_MESSAGE, DOCUMENTATION_SOURCE_TYPES, LOADING_TRANSITION_DURATION, MESSAGE_MODEL_ROLES, SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED };
@@ -14,7 +14,7 @@ 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_INCLUDE_MESSAGE, CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE } from './constants';
17
+ import { CHAT_RESET_MESSAGE, CHAT_INCLUDE_MESSAGE, MESSAGE_MODEL_ROLES, CHAT_CLEAN_MESSAGE, CHAT_CLEAR_MESSAGE } from './constants';
18
18
  import { INCLUDE_SLASH_COMMAND } from './mock_data';
19
19
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
20
20
 
@@ -292,12 +292,18 @@ var script = {
292
292
  this.displaySubmitButton = true; // Re-enable submit button when loading stops
293
293
  }
294
294
  this.isHidden = false;
295
- this.scrollToBottom();
296
295
  },
297
296
  isStreaming(newVal) {
298
297
  if (!newVal && !this.isLoading) {
299
298
  this.displaySubmitButton = true; // Re-enable submit button when streaming stops
300
299
  }
300
+ },
301
+ lastMessage(newMessage) {
302
+ if (this.scrolledToBottom || newMessage.role.toLowerCase() === MESSAGE_MODEL_ROLES.user) {
303
+ // only scroll to bottom on new message if the user hasn't explicitly scrolled up to view an earlier message
304
+ // or if the user has just submitted a new message
305
+ this.scrollToBottom();
306
+ }
301
307
  }
302
308
  },
303
309
  created() {
@@ -366,8 +372,6 @@ var script = {
366
372
  },
367
373
  async scrollToBottom() {
368
374
  var _this$$refs$anchor, _this$$refs$anchor$sc;
369
- // This method is also called directly by consumers of this component
370
- // https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/blob/3269f6200dc3821c62a3992b40c971dd9ee55d87/webviews/vue2/gitlab_duo_chat/src/App.vue#L97
371
375
  await this.$nextTick();
372
376
  (_this$$refs$anchor = this.$refs.anchor) === null || _this$$refs$anchor === void 0 ? void 0 : (_this$$refs$anchor$sc = _this$$refs$anchor.scrollIntoView) === null || _this$$refs$anchor$sc === void 0 ? void 0 : _this$$refs$anchor$sc.call(_this$$refs$anchor);
373
377
  },