@gitlab/duo-ui 15.0.8 → 15.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 +14 -0
- package/dist/components/agentic_chat/agentic_duo_chat.js +20 -1
- package/dist/components/chat/components/duo_chat_header/duo_chat_header.js +6 -1
- package/dist/components/chat/components/duo_chat_message/message_types/message_agent.js +4 -3
- package/package.json +1 -1
- package/src/components/agentic_chat/agentic_duo_chat.vue +22 -3
- package/src/components/chat/components/duo_chat_header/duo_chat_header.vue +17 -0
- package/src/components/chat/components/duo_chat_message/message_types/message_agent.vue +13 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [15.2.0](https://gitlab.com/gitlab-org/duo-ui/compare/v15.1.0...v15.2.0) (2025-12-11)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Update agent message to render title and icon ([0a910d7](https://gitlab.com/gitlab-org/duo-ui/commit/0a910d7b519488eff16bc51798481d070f4d0ef3))
|
|
7
|
+
|
|
8
|
+
# [15.1.0](https://gitlab.com/gitlab-org/duo-ui/compare/v15.0.8...v15.1.0) (2025-12-10)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* Support IDE chat global state ([e7ffb8c](https://gitlab.com/gitlab-org/duo-ui/commit/e7ffb8c270985dba5e006e4e535c68b12f4550e7))
|
|
14
|
+
|
|
1
15
|
## [15.0.8](https://gitlab.com/gitlab-org/duo-ui/compare/v15.0.7...v15.0.8) (2025-12-08)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -164,6 +164,25 @@ var script = {
|
|
|
164
164
|
required: false,
|
|
165
165
|
default: true
|
|
166
166
|
},
|
|
167
|
+
/**
|
|
168
|
+
* Chat state object that contains enablement state and optional reason message.
|
|
169
|
+
* When chat is disabled (isEnabled: false), a reason message must be provided.
|
|
170
|
+
*/
|
|
171
|
+
chatState: {
|
|
172
|
+
type: Object,
|
|
173
|
+
required: false,
|
|
174
|
+
default: () => ({
|
|
175
|
+
isEnabled: true,
|
|
176
|
+
reason: null
|
|
177
|
+
}),
|
|
178
|
+
validator: value => {
|
|
179
|
+
// If chat is disabled, reason must be provided
|
|
180
|
+
if (!value.isEnabled && !value.reason) {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
},
|
|
167
186
|
/**
|
|
168
187
|
* Whether the insertCode feature should be available.
|
|
169
188
|
*/
|
|
@@ -721,7 +740,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
721
740
|
},attrs:{"width":_vm.shouldRenderResizable ? _vm.dimensions.width : null,"height":_vm.shouldRenderResizable ? _vm.dimensions.height : null,"max-width":_vm.shouldRenderResizable ? _vm.dimensions.maxWidth : null,"max-height":_vm.shouldRenderResizable ? _vm.dimensions.maxHeight : null,"min-width":_vm.shouldRenderResizable ? _vm.dimensions.minWidth : null,"left":_vm.shouldRenderResizable ? _vm.dimensions.left : null,"top":_vm.shouldRenderResizable ? _vm.dimensions.top : null,"fit-parent":true,"min-height":_vm.shouldRenderResizable ? _vm.dimensions.minHeight : null,"active":_vm.shouldRenderResizable ? ['l', 't', 'lt'] : null},on:{"resize:end":_vm.updateSize}},[(!_vm.isHidden)?_c('aside',{staticClass:"markdown-code-block duo-chat gl-bottom-0 gl-flex gl-max-h-full gl-flex-col",class:{
|
|
722
741
|
'resizable-content': _vm.shouldRenderResizable,
|
|
723
742
|
'duo-chat-drawer': !_vm.shouldRenderResizable,
|
|
724
|
-
},attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"error":_vm.error,"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"session-id":_vm.sessionId,"agents":_vm.agents},on:{"go-back":_vm.onGoBack,"new-chat":_vm.onNewChat,"close":_vm.hideChat},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory,"trusted-urls":_vm.trustedUrls},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-gray-900 gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[(_vm.emptyStateTitle)?_c('p',{staticClass:"gl-m-0",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateTitle)+"\n ")]):_vm._e(),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('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(" "),(
|
|
743
|
+
},attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"error":_vm.error,"info":_vm.hasMessages ? _vm.chatState.reason : '',"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"session-id":_vm.sessionId,"agents":_vm.agents},on:{"go-back":_vm.onGoBack,"new-chat":_vm.onNewChat,"close":_vm.hideChat},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory,"trusted-urls":_vm.trustedUrls},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-gray-900 gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[(_vm.emptyStateTitle)?_c('p',{staticClass:"gl-m-0",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateTitle)+"\n ")]):_vm._e(),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('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.shouldShowThreadList)?_c('footer',{staticClass:"duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0",attrs:{"data-testid":"chat-footer"}},[(_vm.$scopedSlots['footer-panel'])?_c('div',{staticClass:"gl-relative gl-max-w-full",attrs:{"data-testid":"footer-panel-wrapper"}},[_vm._t("footer-panel")],2):_vm._e(),_vm._v(" "),(_vm.$scopedSlots['footer-actions'])?_c('div',{staticClass:"gl-my-4 gl-flex gl-items-center gl-justify-between gl-gap-x-4 gl-px-4",attrs:{"data-testid":"footer-actions-wrapper"}},[_vm._t("footer-actions")],2):_vm._e(),_vm._v(" "),_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.canSubmit)?_c('gl-button',{staticClass:"!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-full",attrs:{"icon":"paper-airplane","category":"primary","variant":"confirm","type":"submit","disabled":!_vm.isChatAvailable || !_vm.chatState.isEnabled || _vm.isPromptEmpty || !_vm.hasValidPrompt,"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-full",attrs:{"icon":"stop","category":"primary","variant":"default","data-testid":"chat-prompt-cancel-button","aria-label":_vm.$options.i18n.CHAT_CANCEL_LABEL,"disabled":!_vm.canCancelInternal},on:{"click":_vm.cancelPrompt}})]},proxy:true}],null,false,4037582087)},[_c('div',{staticClass:"duo-chat-input gl-min-h-8 gl-max-w-full gl-grow gl-align-top",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-subtle"},[_vm._v(_vm._s(command.description))])])])}),1):_vm._e(),_vm._v(" "),_c('gl-form-textarea',{ref:"prompt",attrs:{"disabled":!_vm.canSubmit || !_vm.isChatAvailable || !_vm.chatState.isEnabled,"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"character-count-limit":_vm.maxPromptLength,"textarea-classes":[
|
|
725
744
|
'gl-absolute',
|
|
726
745
|
'!gl-h-full',
|
|
727
746
|
'gl-rounded-br-none',
|
|
@@ -54,6 +54,11 @@ var script = {
|
|
|
54
54
|
required: false,
|
|
55
55
|
default: ''
|
|
56
56
|
},
|
|
57
|
+
info: {
|
|
58
|
+
type: String,
|
|
59
|
+
required: false,
|
|
60
|
+
default: ''
|
|
61
|
+
},
|
|
57
62
|
isMultithreaded: {
|
|
58
63
|
type: Boolean,
|
|
59
64
|
required: false,
|
|
@@ -152,7 +157,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
152
157
|
_vm.isMultithreaded && (_vm.activeThreadId || _vm.currentView === _vm.VIEW_TYPES.LIST || _vm.hasManyAgents)
|
|
153
158
|
)?[(_vm.hasManyAgents)?_c('gl-disclosure-dropdown',{attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"toggle-text":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"items":_vm.agents,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","text-sr-only":"","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL,"no-caret":""},on:{"action":_vm.startNewChat},scopedSlots:_vm._u([{key:"list-item",fn:function(ref){
|
|
154
159
|
var item = ref.item;
|
|
155
|
-
return [_c('duo-chat-header-agent-item',{attrs:{"agent":item}})]}}],null,false,1406306174)}):_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL},on:{"click":_vm.startNewChat}})]:_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.currentView === _vm.VIEW_TYPES.CHAT)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_HISTORY_TOOLTIP,"data-testid":"go-back-to-list-button","category":"tertiary","size":"small","icon":"history","aria-label":_vm.$options.i18n.CHAT_BACK_LABEL},on:{"click":function($event){return _vm.$emit('go-back')}}}):_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.activeThreadId && _vm.currentView === _vm.VIEW_TYPES.LIST)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP,"data-testid":"go-back-to-chat-button","category":"tertiary","size":"small","icon":"go-back","aria-label":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP},on:{"click":function($event){return _vm.$emit('go-back-to-chat')}}}):_vm._e(),_vm._v(" "),(_vm.sessionId)?_c('gl-disclosure-dropdown',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip",value:(_vm.showSessionDropdownTooltip),expression:"showSessionDropdownTooltip"}],attrs:{"icon":"ellipsis_v","category":"tertiary","text-sr-only":"","size":"small","toggle-text":_vm.$options.i18n.CHAT_DROPDOWN_MORE_OPTIONS,"items":_vm.sessionIdItems,"no-caret":""},on:{"shown":_vm.showSessionDropdown,"hidden":_vm.hideSessionDropdown}}):_vm._e(),_vm._v(" "),_c('gl-button',{staticClass:"gl-ml-auto",attrs:{"category":"tertiary","variant":"default","icon":"close","size":"small","data-testid":"chat-close-button","aria-label":_vm.$options.i18n.CHAT_CLOSE_LABEL},on:{"click":function($event){return _vm.$emit('close')}}})],2)]),_vm._v(" "),_vm._t("subheader"),_vm._v(" "),(_vm.error)?_c('gl-alert',{key:"error",staticClass:"!gl-pl-9",attrs:{"dismissible":false,"variant":"danger","role":"alert","data-testid":"chat-error"}},[_c('span',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.error),expression:"error"}]})]):_vm._e()],2)};
|
|
160
|
+
return [_c('duo-chat-header-agent-item',{attrs:{"agent":item}})]}}],null,false,1406306174)}):_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL},on:{"click":_vm.startNewChat}})]:_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.currentView === _vm.VIEW_TYPES.CHAT)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_HISTORY_TOOLTIP,"data-testid":"go-back-to-list-button","category":"tertiary","size":"small","icon":"history","aria-label":_vm.$options.i18n.CHAT_BACK_LABEL},on:{"click":function($event){return _vm.$emit('go-back')}}}):_vm._e(),_vm._v(" "),(_vm.isMultithreaded && _vm.activeThreadId && _vm.currentView === _vm.VIEW_TYPES.LIST)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP,"data-testid":"go-back-to-chat-button","category":"tertiary","size":"small","icon":"go-back","aria-label":_vm.$options.i18n.CHAT_BACK_TO_CHAT_TOOLTIP},on:{"click":function($event){return _vm.$emit('go-back-to-chat')}}}):_vm._e(),_vm._v(" "),(_vm.sessionId)?_c('gl-disclosure-dropdown',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip",value:(_vm.showSessionDropdownTooltip),expression:"showSessionDropdownTooltip"}],attrs:{"icon":"ellipsis_v","category":"tertiary","text-sr-only":"","size":"small","toggle-text":_vm.$options.i18n.CHAT_DROPDOWN_MORE_OPTIONS,"items":_vm.sessionIdItems,"no-caret":""},on:{"shown":_vm.showSessionDropdown,"hidden":_vm.hideSessionDropdown}}):_vm._e(),_vm._v(" "),_c('gl-button',{staticClass:"gl-ml-auto",attrs:{"category":"tertiary","variant":"default","icon":"close","size":"small","data-testid":"chat-close-button","aria-label":_vm.$options.i18n.CHAT_CLOSE_LABEL},on:{"click":function($event){return _vm.$emit('close')}}})],2)]),_vm._v(" "),_vm._t("subheader"),_vm._v(" "),(_vm.info)?_c('gl-alert',{key:"info",staticClass:"!gl-pl-9",attrs:{"dismissible":false,"variant":"info","role":"alert","data-testid":"chat-info"}},[_c('span',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.info),expression:"info"}]})]):_vm._e(),_vm._v(" "),(_vm.error)?_c('gl-alert',{key:"error",staticClass:"!gl-pl-9",attrs:{"dismissible":false,"variant":"danger","role":"alert","data-testid":"chat-error"}},[_c('span',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.error),expression:"error"}]})]):_vm._e()],2)};
|
|
156
161
|
var __vue_staticRenderFns__ = [];
|
|
157
162
|
|
|
158
163
|
/* style */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GlSafeHtmlDirective } from '@gitlab/ui';
|
|
1
|
+
import { GlIcon, GlSafeHtmlDirective } from '@gitlab/ui';
|
|
2
2
|
import MessageFeedback from '../message_feedback';
|
|
3
3
|
import BaseMessage from './message_base';
|
|
4
4
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
@@ -7,7 +7,8 @@ var script = {
|
|
|
7
7
|
name: 'DuoAgentMessage',
|
|
8
8
|
components: {
|
|
9
9
|
BaseMessage,
|
|
10
|
-
MessageFeedback
|
|
10
|
+
MessageFeedback,
|
|
11
|
+
GlIcon
|
|
11
12
|
},
|
|
12
13
|
directives: {
|
|
13
14
|
SafeHtml: GlSafeHtmlDirective
|
|
@@ -46,7 +47,7 @@ var script = {
|
|
|
46
47
|
const __vue_script__ = script;
|
|
47
48
|
|
|
48
49
|
/* template */
|
|
49
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-message',{staticClass:"gl-text-gray-900",attrs:{"message":_vm.message},scopedSlots:_vm._u([{key:"message",fn:function(slotProps){return [_vm._t("message",function(){return [_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(slotProps.htmlContent),expression:"slotProps.htmlContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content",on:{"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}})]},null,slotProps),_vm._v(" "),(_vm.withFeedback)?_c('message-feedback',{on:{"feedback":function($event){return _vm.$emit('feedback', $event)}}}):_vm._e()]}}],null,true)})};
|
|
50
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-message',{staticClass:"gl-text-gray-900",attrs:{"message":_vm.message},scopedSlots:_vm._u([{key:"message",fn:function(slotProps){return [(_vm.message.title)?_c('div',{staticClass:"gl-my-3 gl-flex gl-flex-col"},[_c('div',{staticClass:"gl-flex gl-items-center gl-gap-x-2"},[(_vm.message.icon)?_c('gl-icon',{attrs:{"name":_vm.message.icon,"size":_vm.message.iconSize,"variant":_vm.message.iconVariant}}):_vm._e(),_vm._v(" "),_c('span',{staticClass:"gl-text-lg",attrs:{"data-testid":"message-title"}},[_vm._v(_vm._s(_vm.message.title))])],1)]):_vm._e(),_vm._v(" "),_vm._t("message",function(){return [_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(slotProps.htmlContent),expression:"slotProps.htmlContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content",on:{"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}})]},null,slotProps),_vm._v(" "),(_vm.withFeedback)?_c('message-feedback',{on:{"feedback":function($event){return _vm.$emit('feedback', $event)}}}):_vm._e()]}}],null,true)})};
|
|
50
51
|
var __vue_staticRenderFns__ = [];
|
|
51
52
|
|
|
52
53
|
/* style */
|
package/package.json
CHANGED
|
@@ -224,6 +224,22 @@ export default {
|
|
|
224
224
|
required: false,
|
|
225
225
|
default: true,
|
|
226
226
|
},
|
|
227
|
+
/**
|
|
228
|
+
* Chat state object that contains enablement state and optional reason message.
|
|
229
|
+
* When chat is disabled (isEnabled: false), a reason message must be provided.
|
|
230
|
+
*/
|
|
231
|
+
chatState: {
|
|
232
|
+
type: Object,
|
|
233
|
+
required: false,
|
|
234
|
+
default: () => ({ isEnabled: true, reason: null }),
|
|
235
|
+
validator: (value) => {
|
|
236
|
+
// If chat is disabled, reason must be provided
|
|
237
|
+
if (!value.isEnabled && !value.reason) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
return true;
|
|
241
|
+
},
|
|
242
|
+
},
|
|
227
243
|
/**
|
|
228
244
|
* Whether the insertCode feature should be available.
|
|
229
245
|
*/
|
|
@@ -837,6 +853,7 @@ export default {
|
|
|
837
853
|
"
|
|
838
854
|
:subtitle="activeThreadTitleForView"
|
|
839
855
|
:error="error"
|
|
856
|
+
:info="hasMessages ? chatState.reason : ''"
|
|
840
857
|
:is-multithreaded="isMultithreaded"
|
|
841
858
|
:current-view="currentView"
|
|
842
859
|
:should-render-resizable="shouldRenderResizable"
|
|
@@ -913,7 +930,7 @@ export default {
|
|
|
913
930
|
</transition-group>
|
|
914
931
|
</div>
|
|
915
932
|
<footer
|
|
916
|
-
v-if="
|
|
933
|
+
v-if="!shouldShowThreadList"
|
|
917
934
|
data-testid="chat-footer"
|
|
918
935
|
class="duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0"
|
|
919
936
|
>
|
|
@@ -977,7 +994,7 @@ export default {
|
|
|
977
994
|
<gl-form-textarea
|
|
978
995
|
ref="prompt"
|
|
979
996
|
v-model="prompt"
|
|
980
|
-
:disabled="!canSubmit"
|
|
997
|
+
:disabled="!canSubmit || !isChatAvailable || !chatState.isEnabled"
|
|
981
998
|
data-testid="chat-prompt-input"
|
|
982
999
|
:placeholder="inputPlaceholder"
|
|
983
1000
|
:character-count-limit="maxPromptLength"
|
|
@@ -1029,7 +1046,9 @@ export default {
|
|
|
1029
1046
|
variant="confirm"
|
|
1030
1047
|
class="!gl-absolute gl-bottom-2 gl-right-2 !gl-rounded-full"
|
|
1031
1048
|
type="submit"
|
|
1032
|
-
:disabled="
|
|
1049
|
+
:disabled="
|
|
1050
|
+
!isChatAvailable || !chatState.isEnabled || isPromptEmpty || !hasValidPrompt
|
|
1051
|
+
"
|
|
1033
1052
|
data-testid="chat-prompt-submit-button"
|
|
1034
1053
|
:aria-label="$options.i18n.CHAT_SUBMIT_LABEL"
|
|
1035
1054
|
/>
|
|
@@ -71,6 +71,11 @@ export default {
|
|
|
71
71
|
required: false,
|
|
72
72
|
default: '',
|
|
73
73
|
},
|
|
74
|
+
info: {
|
|
75
|
+
type: String,
|
|
76
|
+
required: false,
|
|
77
|
+
default: '',
|
|
78
|
+
},
|
|
74
79
|
isMultithreaded: {
|
|
75
80
|
type: Boolean,
|
|
76
81
|
required: false,
|
|
@@ -268,6 +273,18 @@ export default {
|
|
|
268
273
|
|
|
269
274
|
<slot name="subheader"></slot>
|
|
270
275
|
|
|
276
|
+
<gl-alert
|
|
277
|
+
v-if="info"
|
|
278
|
+
key="info"
|
|
279
|
+
:dismissible="false"
|
|
280
|
+
variant="info"
|
|
281
|
+
class="!gl-pl-9"
|
|
282
|
+
role="alert"
|
|
283
|
+
data-testid="chat-info"
|
|
284
|
+
>
|
|
285
|
+
<span v-safe-html="info"></span>
|
|
286
|
+
</gl-alert>
|
|
287
|
+
|
|
271
288
|
<gl-alert
|
|
272
289
|
v-if="error"
|
|
273
290
|
key="error"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { GlSafeHtmlDirective as SafeHtml } from '@gitlab/ui';
|
|
2
|
+
import { GlIcon, GlSafeHtmlDirective as SafeHtml } from '@gitlab/ui';
|
|
3
3
|
import MessageFeedback from '../message_feedback.vue';
|
|
4
4
|
import BaseMessage from './message_base.vue';
|
|
5
5
|
|
|
@@ -8,6 +8,7 @@ export default {
|
|
|
8
8
|
components: {
|
|
9
9
|
BaseMessage,
|
|
10
10
|
MessageFeedback,
|
|
11
|
+
GlIcon,
|
|
11
12
|
},
|
|
12
13
|
directives: {
|
|
13
14
|
SafeHtml,
|
|
@@ -44,6 +45,17 @@ export default {
|
|
|
44
45
|
<template>
|
|
45
46
|
<base-message :message="message" class="gl-text-gray-900">
|
|
46
47
|
<template #message="slotProps">
|
|
48
|
+
<div v-if="message.title" class="gl-my-3 gl-flex gl-flex-col">
|
|
49
|
+
<div class="gl-flex gl-items-center gl-gap-x-2">
|
|
50
|
+
<gl-icon
|
|
51
|
+
v-if="message.icon"
|
|
52
|
+
:name="message.icon"
|
|
53
|
+
:size="message.iconSize"
|
|
54
|
+
:variant="message.iconVariant"
|
|
55
|
+
/>
|
|
56
|
+
<span data-testid="message-title" class="gl-text-lg">{{ message.title }}</span>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
47
59
|
<slot name="message" v-bind="slotProps">
|
|
48
60
|
<div
|
|
49
61
|
ref="content"
|