@gitlab/ui 95.0.0 → 95.1.1

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 (24) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/bin/migrate_custom_utils_to_tw.bundled.mjs +0 -19
  3. package/dist/components/experimental/duo/chat/components/duo_chat_context/constants.js +4 -1
  4. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.js +120 -0
  5. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +11 -1
  6. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +29 -2
  7. package/dist/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +14 -1
  8. package/dist/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.js +4 -1
  9. package/dist/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.js +7 -1
  10. package/dist/components/experimental/duo/chat/duo_chat.js +9 -1
  11. package/dist/index.css +1 -1
  12. package/dist/index.css.map +1 -1
  13. package/package.json +1 -1
  14. package/src/components/base/dropdown/dropdown.scss +1 -1
  15. package/src/components/base/dropdown/dropdown_section_header.scss +1 -1
  16. package/src/components/experimental/duo/chat/components/duo_chat_context/constants.js +4 -0
  17. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.vue +114 -0
  18. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +10 -0
  19. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +42 -0
  20. package/src/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +15 -0
  21. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.vue +4 -0
  22. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.vue +8 -0
  23. package/src/components/experimental/duo/chat/duo_chat.vue +9 -0
  24. package/translations.js +1 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## [95.1.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v95.1.0...v95.1.1) (2024-10-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * update dropdown headers to use strong text color ([6f6b208](https://gitlab.com/gitlab-org/gitlab-ui/commit/6f6b208f892257c02d92c9f49f1675226b71b5a8))
7
+
8
+ # [95.1.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v95.0.0...v95.1.0) (2024-10-04)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * don't open details modal if selecting close button via keyboard ([8e8a4c3](https://gitlab.com/gitlab-org/gitlab-ui/commit/8e8a4c3dc7fc9f30d4c02a3a9a4acf7da96c2aac))
14
+
15
+
16
+ ### Features
17
+
18
+ * **GlDuoChat:** view context item content/details ([63909dd](https://gitlab.com/gitlab-org/gitlab-ui/commit/63909dd79aa2570ecd7375c22619d892ea1935c2))
19
+
1
20
  # [95.0.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v94.10.0...v95.0.0) (2024-10-04)
2
21
 
3
22
 
@@ -184396,24 +184396,12 @@ async function prettify(tailwindConfig, files) {
184396
184396
  }
184397
184397
  function validateMigrations(processedMigrations) {
184398
184398
  const errors = [];
184399
- for (const { from, to: to4 } of processedMigrations) {
184400
- if (from.endsWith("!") !== /!-?gl/.test(to4)) {
184401
- errors.push(`Inconsistent importance: ${from}, ${to4}`);
184402
- }
184403
- }
184404
184399
  const froms = /* @__PURE__ */ new Set();
184405
184400
  const tos = /* @__PURE__ */ new Set();
184406
184401
  for (const { from, to: to4 } of processedMigrations) {
184407
184402
  froms.add(from);
184408
184403
  tos.add(to4);
184409
184404
  }
184410
- for (const { from } of processedMigrations) {
184411
- if (from.endsWith("!"))
184412
- continue;
184413
- if (!froms.has(`${from}!`)) {
184414
- errors.push(`Missing important class for ${from}`);
184415
- }
184416
- }
184417
184405
  for (const { from, to: to4 } of processedMigrations) {
184418
184406
  for (const bp2 of ["xs", "sm", "md", "lg", "xl"]) {
184419
184407
  if (from.includes(`-${bp2}-`) !== to4.startsWith(`${bp2}:`)) {
@@ -184421,13 +184409,6 @@ function validateMigrations(processedMigrations) {
184421
184409
  }
184422
184410
  }
184423
184411
  }
184424
- for (const from of froms) {
184425
- for (const to4 of tos) {
184426
- if (to4.includes(from)) {
184427
- errors.push(`Tailwind class "${to4}" contains legacy class "${from}" as substring`);
184428
- }
184429
- }
184430
- }
184431
184412
  processedMigrations.forEach(({ from }, i3, arr) => {
184432
184413
  const nextFrom = arr[i3 + 1]?.from;
184433
184414
  if (from.length < nextFrom?.length) {
@@ -4,5 +4,8 @@ const CONTEXT_ITEM_CATEGORY_FILE = 'file';
4
4
  const CONTEXT_ITEM_CATEGORY_LOCAL_GIT = 'local_git';
5
5
  const CONTEXT_ITEM_LOCAL_GIT_COMMIT = 'commit';
6
6
  const CONTEXT_ITEM_LOCAL_GIT_DIFF = 'diff';
7
+ const LANGUAGE_IDENTIFIER_PREFIX = 'language-';
8
+ const LANGUAGE_IDENTIFIER_DIFF = 'language-diff';
9
+ const LANGUAGE_IDENTIFIER_PLAINTEXT = 'language-plaintext';
7
10
 
8
- export { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF };
11
+ export { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PLAINTEXT, LANGUAGE_IDENTIFIER_PREFIX };
@@ -0,0 +1,120 @@
1
+ import { nextTick } from 'vue';
2
+ import { contextItemValidator } from '../utils';
3
+ import GlModal from '../../../../../../base/modal/modal';
4
+ import { SafeHtmlDirective } from '../../../../../../../directives/safe_html/safe_html';
5
+ import GlSkeletonLoader from '../../../../../../base/skeleton_loader/skeleton_loader';
6
+ import { translate } from '../../../../../../../utils/i18n';
7
+ import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PREFIX, LANGUAGE_IDENTIFIER_PLAINTEXT } from '../constants';
8
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
9
+
10
+ var script = {
11
+ name: 'GlDuoChatContextItemDetailsModal',
12
+ components: {
13
+ GlSkeletonLoader,
14
+ GlModal
15
+ },
16
+ directives: {
17
+ SafeHtml: SafeHtmlDirective
18
+ },
19
+ inject: {
20
+ renderGFM: {
21
+ from: 'renderGFM',
22
+ default: () => element => {
23
+ element.classList.add('gl-markdown', 'gl-compact-markdown');
24
+ }
25
+ }
26
+ },
27
+ props: {
28
+ /**
29
+ * Context items to preview. If it has no `content`, the loading state will be displayed.
30
+ */
31
+ contextItem: {
32
+ type: Object,
33
+ required: true,
34
+ validator: contextItemValidator
35
+ }
36
+ },
37
+ computed: {
38
+ isLoadingContent() {
39
+ return this.contextItem.content === undefined;
40
+ },
41
+ languageIdentifierClass() {
42
+ var _this$contextItem$met, _this$contextItem$met2, _this$contextItem$met3;
43
+ if (this.contextItem.category === CONTEXT_ITEM_CATEGORY_LOCAL_GIT) {
44
+ return LANGUAGE_IDENTIFIER_DIFF;
45
+ }
46
+ const fileExtension = (_this$contextItem$met = this.contextItem.metadata) === null || _this$contextItem$met === void 0 ? void 0 : (_this$contextItem$met2 = _this$contextItem$met.relativePath) === null || _this$contextItem$met2 === void 0 ? void 0 : _this$contextItem$met2.split('.').at(-1);
47
+ if (fileExtension && fileExtension !== ((_this$contextItem$met3 = this.contextItem.metadata) === null || _this$contextItem$met3 === void 0 ? void 0 : _this$contextItem$met3.relativePath)) {
48
+ return `${LANGUAGE_IDENTIFIER_PREFIX}${fileExtension}`;
49
+ }
50
+ return LANGUAGE_IDENTIFIER_PLAINTEXT;
51
+ },
52
+ title() {
53
+ var _this$contextItem$met4, _this$contextItem$met5;
54
+ return ((_this$contextItem$met4 = this.contextItem.metadata) === null || _this$contextItem$met4 === void 0 ? void 0 : _this$contextItem$met4.title) || ((_this$contextItem$met5 = this.contextItem.metadata) === null || _this$contextItem$met5 === void 0 ? void 0 : _this$contextItem$met5.relativePath) || translate('GlDuoChatContextItemDetailsModal.title', 'Preview');
55
+ }
56
+ },
57
+ watch: {
58
+ contextItem: {
59
+ async handler(newVal, oldVal) {
60
+ const shouldFormat = (newVal === null || newVal === void 0 ? void 0 : newVal.content) !== (oldVal === null || oldVal === void 0 ? void 0 : oldVal.content) && (newVal === null || newVal === void 0 ? void 0 : newVal.content);
61
+ if (shouldFormat) {
62
+ await nextTick();
63
+ await this.hydrateContentWithGFM();
64
+ }
65
+ },
66
+ immediate: true
67
+ }
68
+ },
69
+ methods: {
70
+ async hydrateContentWithGFM() {
71
+ await nextTick();
72
+ if (this.$refs.content) {
73
+ this.renderGFM(this.$refs.content);
74
+ }
75
+ },
76
+ onModalVisibilityChange(isVisible) {
77
+ if (!isVisible) {
78
+ this.$emit('close');
79
+ }
80
+ }
81
+ }
82
+ };
83
+
84
+ /* script */
85
+ const __vue_script__ = script;
86
+
87
+ /* template */
88
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-modal',{attrs:{"modal-id":"context-item-details-modal","title":_vm.title,"visible":true,"scrollable":true,"hide-footer":"","size":"lg"},on:{"change":_vm.onModalVisibilityChange}},[(_vm.isLoadingContent)?_c('gl-skeleton-loader'):_c('div',{ref:"content",attrs:{"data-testid":"context-item-content"}},[_c('pre',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.contextItem.content),expression:"contextItem.content"}],staticClass:"code js-syntax-highlight gl-p-3",class:_vm.languageIdentifierClass})])],1)};
89
+ var __vue_staticRenderFns__ = [];
90
+
91
+ /* style */
92
+ const __vue_inject_styles__ = undefined;
93
+ /* scoped */
94
+ const __vue_scope_id__ = undefined;
95
+ /* module identifier */
96
+ const __vue_module_identifier__ = undefined;
97
+ /* functional template */
98
+ const __vue_is_functional_template__ = false;
99
+ /* style inject */
100
+
101
+ /* style inject SSR */
102
+
103
+ /* style inject shadow dom */
104
+
105
+
106
+
107
+ const __vue_component__ = __vue_normalize__(
108
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
109
+ __vue_inject_styles__,
110
+ __vue_script__,
111
+ __vue_scope_id__,
112
+ __vue_is_functional_template__,
113
+ __vue_module_identifier__,
114
+ false,
115
+ undefined,
116
+ undefined,
117
+ undefined
118
+ );
119
+
120
+ export default __vue_component__;
@@ -209,6 +209,16 @@ var script = {
209
209
  }
210
210
  } while (!this.results[newIndex].metadata.enabled);
211
211
  this.activeIndex = newIndex;
212
+ },
213
+ onGetContextItemContent(contextItem) {
214
+ /**
215
+ * Emit get-context-item-content event that tells clients to load the full file content for a selected context item.
216
+ * The fully hydrated context item should be updated in the context item selections.
217
+ * @param {*} event An event containing the context item to hydrate
218
+ */
219
+ this.$emit('get-context-item-content', {
220
+ contextItem
221
+ });
212
222
  }
213
223
  },
214
224
  i18n: {
@@ -220,7 +230,7 @@ var script = {
220
230
  const __vue_script__ = script;
221
231
 
222
232
  /* template */
223
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.selections.length)?_c('gl-duo-chat-context-item-selections',{staticClass:"gl-mb-3",attrs:{"selections":_vm.selections,"removable":true,"title":_vm.$options.i18n.selectedContextItemsTitle,"default-collapsed":false},on:{"remove":_vm.removeItem}}):_vm._e(),_vm._v(" "),(_vm.open)?_c('gl-card',{staticClass:"slash-commands !gl-absolute gl-bottom-0 gl-w-full gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2","data-testid":"context-item-menu"}},[(_vm.showCategorySelection)?_c('gl-duo-chat-context-item-menu-category-items',{attrs:{"active-index":_vm.activeIndex,"categories":_vm.categories},on:{"select":_vm.selectCategory,"active-index-change":function($event){_vm.activeIndex = $event;}}}):_c('gl-duo-chat-context-item-menu-search-items',{attrs:{"active-index":_vm.activeIndex,"category":_vm.selectedCategory,"loading":_vm.loading,"error":_vm.error,"results":_vm.results},on:{"select":_vm.selectItem,"keyup":_vm.handleKeyUp,"active-index-change":function($event){_vm.activeIndex = $event;}},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v;},expression:"searchQuery"}})],1):_vm._e()],1)};
233
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.selections.length)?_c('gl-duo-chat-context-item-selections',{staticClass:"gl-mb-3",attrs:{"selections":_vm.selections,"categories":_vm.categories,"removable":true,"title":_vm.$options.i18n.selectedContextItemsTitle,"default-collapsed":false},on:{"remove":_vm.removeItem,"get-content":_vm.onGetContextItemContent}}):_vm._e(),_vm._v(" "),(_vm.open)?_c('gl-card',{staticClass:"slash-commands !gl-absolute gl-bottom-0 gl-w-full gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2","data-testid":"context-item-menu"}},[(_vm.showCategorySelection)?_c('gl-duo-chat-context-item-menu-category-items',{attrs:{"active-index":_vm.activeIndex,"categories":_vm.categories},on:{"select":_vm.selectCategory,"active-index-change":function($event){_vm.activeIndex = $event;}}}):_c('gl-duo-chat-context-item-menu-search-items',{attrs:{"active-index":_vm.activeIndex,"category":_vm.selectedCategory,"loading":_vm.loading,"error":_vm.error,"results":_vm.results},on:{"select":_vm.selectItem,"keyup":_vm.handleKeyUp,"active-index-change":function($event){_vm.activeIndex = $event;}},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v;},expression:"searchQuery"}})],1):_vm._e()],1)};
224
234
  var __vue_staticRenderFns__ = [];
225
235
 
226
236
  /* style */
@@ -3,6 +3,8 @@ import GlIcon from '../../../../../../base/icon/icon';
3
3
  import GlToken from '../../../../../../base/token/token';
4
4
  import GlTruncate from '../../../../../../utilities/truncate/truncate';
5
5
  import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover';
6
+ import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE } from '../constants';
7
+ import GlDuoChatContextItemDetailsModal from '../duo_chat_context_item_details_modal/duo_chat_context_item_details_modal';
6
8
  import { contextItemsValidator, getContextItemIcon } from '../utils';
7
9
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
8
10
 
@@ -10,6 +12,7 @@ var script = {
10
12
  name: 'GlDuoChatContextItemSelections',
11
13
  components: {
12
14
  GlTruncate,
15
+ GlDuoChatContextItemDetailsModal,
13
16
  GlIcon,
14
17
  GlDuoChatContextItemPopover,
15
18
  GlToken
@@ -54,7 +57,8 @@ var script = {
54
57
  data() {
55
58
  return {
56
59
  isCollapsed: this.defaultCollapsed,
57
- selectionsId: uniqueId()
60
+ selectionsId: uniqueId(),
61
+ previewContextItemId: null
58
62
  };
59
63
  },
60
64
  computed: {
@@ -72,6 +76,9 @@ var script = {
72
76
  return 'gl-bg-blue-50 gl-text-blue-600';
73
77
  }
74
78
  return '';
79
+ },
80
+ contextItemPreview() {
81
+ return this.selections.find(item => item.id === this.previewContextItemId);
75
82
  }
76
83
  },
77
84
  methods: {
@@ -85,6 +92,26 @@ var script = {
85
92
  * @property {Object} item - The context contextItem to be removed
86
93
  */
87
94
  this.$emit('remove', contextItem);
95
+ },
96
+ onOpenItem(event, contextItem) {
97
+ const isKeypressOnCloseButton = event.type === 'keydown' && event.target !== event.currentTarget;
98
+ if (isKeypressOnCloseButton) {
99
+ // don't respond to events triggered by the gl-token children (e.g. the close button)
100
+ return;
101
+ }
102
+ if (!this.canOpen(contextItem)) {
103
+ return;
104
+ }
105
+ if (!contextItem.content) {
106
+ this.$emit('get-content', contextItem);
107
+ }
108
+ this.previewContextItemId = contextItem.id;
109
+ },
110
+ canOpen(contextItem) {
111
+ return [CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE].includes(contextItem.category);
112
+ },
113
+ onClosePreview() {
114
+ this.previewContextItemId = null;
88
115
  }
89
116
  }
90
117
  };
@@ -93,7 +120,7 @@ var script = {
93
120
  const __vue_script__ = script;
94
121
 
95
122
  /* template */
96
- 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 gl-max-w-full",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-min-w-0 gl-items-center",attrs:{"id":("context-item-" + (item.id) + "-" + _vm.selectionsId)}},[(_vm.getContextItemIcon(item))?_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.getContextItemIcon(item),"size":12}}):_vm._e(),_vm._v(" "),_c('gl-truncate',{attrs:{"text":item.metadata.title,"position":"middle"}})],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)])};
123
+ 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 gl-max-w-full",class:_vm.tokenVariantClasses,attrs:{"id":("context-item-" + (item.id) + "-" + _vm.selectionsId + "-token"),"view-only":!_vm.removable,"variant":"default","tabindex":_vm.canOpen(item) ? 0 : -1,"role":_vm.canOpen(item) ? 'button' : undefined},on:{"click":function($event){return _vm.onOpenItem($event, item)},"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }return _vm.onOpenItem($event, item)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"space",32,$event.key,[" ","Spacebar"])){ return null; }$event.preventDefault();return _vm.onOpenItem($event, item)}],"close":function($event){return _vm.onRemoveItem(item)}}},[_c('div',{staticClass:"gl-flex gl-min-w-0 gl-items-center",attrs:{"id":("context-item-" + (item.id) + "-" + _vm.selectionsId)}},[(_vm.getContextItemIcon(item))?_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.getContextItemIcon(item),"size":12}}):_vm._e(),_vm._v(" "),_c('gl-truncate',{attrs:{"text":item.metadata.title,"position":"middle"}})],1),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":item,"target":("context-item-" + (item.id) + "-" + _vm.selectionsId + "-token"),"placement":"bottom"},on:{"show-git-diff":function($event){return _vm.onOpenItem(item)}}})],1)}),1),_vm._v(" "),(_vm.contextItemPreview)?_c('gl-duo-chat-context-item-details-modal',{attrs:{"context-item":_vm.contextItemPreview},on:{"close":_vm.onClosePreview}}):_vm._e()],1)};
97
124
  var __vue_staticRenderFns__ = [];
98
125
 
99
126
  /* style */
@@ -20,6 +20,19 @@ const MOCK_CATEGORIES = [{
20
20
  function getMockCategory(categoryValue) {
21
21
  return MOCK_CATEGORIES.find(cat => cat.value === categoryValue);
22
22
  }
23
+ const MOCK_CONTEXT_FILE_CONTENT = `export function waterPlants() {
24
+ console.log('sprinkle');
25
+ }`;
26
+ const MOCK_CONTEXT_FILE_DIFF_CONTENT = `diff --git a/src/plants/strawberry.ts b/src/plants/strawberry.ts
27
+ index 1234567..8901234 100644
28
+ --- a/src/plants/strawberry.ts
29
+ +++ b/src/plants/strawberry.ts
30
+ @@ -1,4 +1,4 @@
31
+ export const strawberry = {
32
+ name: 'Strawberry',
33
+ - waterNeeds: 'moderate',
34
+ + waterNeeds: 'high',
35
+ };`;
23
36
  const MOCK_CONTEXT_ITEM_FILE = {
24
37
  id: '123e4567-e89b-12d3-a456-426614174000',
25
38
  category: CONTEXT_ITEM_CATEGORY_FILE,
@@ -175,4 +188,4 @@ const getMockContextItems = () => {
175
188
  return [...enabledItems, ...disabledItems];
176
189
  };
177
190
 
178
- export { MOCK_CATEGORIES, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_GIT_COMMIT, MOCK_CONTEXT_ITEM_GIT_DIFF, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
191
+ export { MOCK_CATEGORIES, MOCK_CONTEXT_FILE_CONTENT, MOCK_CONTEXT_FILE_DIFF_CONTENT, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_GIT_COMMIT, MOCK_CONTEXT_ITEM_GIT_DIFF, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
@@ -54,6 +54,9 @@ var script = {
54
54
  },
55
55
  onInsertCodeSnippet(e) {
56
56
  this.$emit('insert-code-snippet', e);
57
+ },
58
+ onGetContextItemContent(e) {
59
+ this.$emit('get-context-item-content', e);
57
60
  }
58
61
  },
59
62
  i18n
@@ -63,7 +66,7 @@ var script = {
63
66
  const __vue_script__ = script;
64
67
 
65
68
  /* template */
66
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:['gl-flex gl-flex-col gl-justify-end', { 'insert-code-hidden': !_vm.enableCodeInsertion }]},[(_vm.showDelimiter)?_c('div',{staticClass:"gl-my-5 gl-flex gl-items-center gl-gap-4 gl-text-gray-500",attrs:{"data-testid":"conversation-delimiter"}},[_c('hr',{staticClass:"gl-grow"}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.$options.i18n.CONVERSATION_NEW_CHAT))]),_vm._v(" "),_c('hr',{staticClass:"gl-grow"})]):_vm._e(),_vm._v(" "),_vm._l((_vm.messages),function(msg,index){return _c('gl-duo-chat-message',{key:((msg.role) + "-" + index),attrs:{"message":msg,"is-cancelled":_vm.canceledRequestIds.includes(msg.requestId)},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet}})})],2)};
69
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:['gl-flex gl-flex-col gl-justify-end', { 'insert-code-hidden': !_vm.enableCodeInsertion }]},[(_vm.showDelimiter)?_c('div',{staticClass:"gl-my-5 gl-flex gl-items-center gl-gap-4 gl-text-gray-500",attrs:{"data-testid":"conversation-delimiter"}},[_c('hr',{staticClass:"gl-grow"}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.$options.i18n.CONVERSATION_NEW_CHAT))]),_vm._v(" "),_c('hr',{staticClass:"gl-grow"})]):_vm._e(),_vm._v(" "),_vm._l((_vm.messages),function(msg,index){return _c('gl-duo-chat-message',{key:((msg.role) + "-" + index),attrs:{"message":msg,"is-cancelled":_vm.canceledRequestIds.includes(msg.requestId)},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"get-context-item-content":_vm.onGetContextItemContent}})})],2)};
67
70
  var __vue_staticRenderFns__ = [];
68
71
 
69
72
  /* style */
@@ -212,6 +212,12 @@ var script = {
212
212
  },
213
213
  onInsertCodeSnippet(e) {
214
214
  this.$emit('insert-code-snippet', e);
215
+ },
216
+ onGetContextItemContent(contextItem) {
217
+ this.$emit('get-context-item-content', {
218
+ messageId: this.message.id,
219
+ contextItem
220
+ });
215
221
  }
216
222
  }
217
223
  };
@@ -226,7 +232,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
226
232
  _vm.isAssistantMessage,
227
233
  'gl-bg-white': _vm.isAssistantMessage && !_vm.error,
228
234
  '!gl-border-none gl-bg-red-50': _vm.error,
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)};
235
+ },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"},on:{"get-content":_vm.onGetContextItemContent}}):_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"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e()],1)],1)};
230
236
  var __vue_staticRenderFns__ = [];
231
237
 
232
238
  /* style */
@@ -470,6 +470,14 @@ var script = {
470
470
  */
471
471
  this.$emit('insert-code-snippet', e);
472
472
  },
473
+ onGetContextItemContent(event) {
474
+ /**
475
+ * Emit get-context-item-content event that tells clients to load the full file content for a selected context item.
476
+ * The fully hydrated context item should be updated in the chat message context item.
477
+ * @param {*} event An event containing the message ID and context item to hydrate
478
+ */
479
+ this.$emit('get-context-item-content', event);
480
+ },
473
481
  closeContextItemsMenuOpen() {
474
482
  this.contextItemsMenuIsOpen = false;
475
483
  this.setPromptAndFocus();
@@ -490,7 +498,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
490
498
  {
491
499
  'gl-h-full': !_vm.hasMessages,
492
500
  'force-scroll-bar': _vm.hasMessages,
493
- } ],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)])],1)],1):_vm._e()]):_vm._e()};
501
+ } ],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,"get-context-item-content":_vm.onGetContextItemContent}})}),_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)])],1)],1):_vm._e()]):_vm._e()};
494
502
  var __vue_staticRenderFns__ = [];
495
503
 
496
504
  /* style */