@gitlab/duo-ui 15.6.0 → 15.7.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 +7 -0
- package/dist/components/agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.js +1 -1
- package/dist/components/agentic_chat/web_agentic_duo_chat.js +9 -1
- package/dist/components/chat/components/duo_chat_conversation/duo_chat_conversation.js +19 -1
- package/dist/components/chat/components/duo_chat_message/duo_chat_message.js +20 -2
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/package.json +2 -2
- package/src/components/agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.scss +6 -2
- package/src/components/agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.vue +1 -4
- package/src/components/agentic_chat/web_agentic_duo_chat.vue +9 -0
- package/src/components/chat/components/duo_chat_conversation/duo_chat_conversation.vue +20 -0
- package/src/components/chat/components/duo_chat_message/duo_chat_message.vue +40 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# [15.7.0](https://gitlab.com/gitlab-org/duo-ui/compare/v15.6.0...v15.7.0) (2026-01-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **agentic-chat:** add binary feedback component ([a143471](https://gitlab.com/gitlab-org/duo-ui/commit/a1434711ed187da15920971bb9fef158d8dd4b8b))
|
|
7
|
+
|
|
1
8
|
# [15.6.0](https://gitlab.com/gitlab-org/duo-ui/compare/v15.5.1...v15.6.0) (2026-01-16)
|
|
2
9
|
|
|
3
10
|
|
package/dist/components/agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.js
CHANGED
|
@@ -51,7 +51,7 @@ var script = {
|
|
|
51
51
|
const __vue_script__ = script;
|
|
52
52
|
|
|
53
53
|
/* template */
|
|
54
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"agentic-binary-feedback gl-flex gl-items-center gl-gap-2"},[(!_vm.feedbackGiven)?[_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.THUMBS_UP,"aria-label":_vm.$options.i18n.THUMBS_UP,"icon":"thumb-up","category":"tertiary","size":"small","data-testid":"thumb-up-button"},on:{"click":function($event){return _vm.submitFeedback('thumbs_up')}}}),_vm._v(" "),_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.THUMBS_DOWN,"aria-label":_vm.$options.i18n.THUMBS_DOWN,"icon":"thumb-down","category":"tertiary","size":"small","data-testid":"thumb-down-button"},on:{"click":function($event){return _vm.submitFeedback('thumbs_down')}}})]:_c('div',{staticClass:"gl-relative gl-flex gl-items-center gl-gap-2",attrs:{"data-testid":"feedback-given"}},[_c('div',{staticClass:"feedback-colored-icon",attrs:{"data-testid":"feedback-colored-icon"}},[(_vm.isThumbsUp)?_c('gl-icon',{staticClass:"gl-text-success",attrs:{"name":"thumb-up","size":16,"data-testid":"thumb-up-icon-success"}}):(_vm.isThumbsDown)?_c('gl-icon',{staticClass:"gl-text-danger",attrs:{"name":"thumb-down","size":16,"data-testid":"thumb-down-icon-danger"}}):_vm._e()],1),_vm._v(" "),_c('div',{staticClass:"feedback-thanks gl-
|
|
54
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"agentic-binary-feedback gl-flex gl-items-center gl-gap-2"},[(!_vm.feedbackGiven)?[_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.THUMBS_UP,"aria-label":_vm.$options.i18n.THUMBS_UP,"icon":"thumb-up","category":"tertiary","size":"small","data-testid":"thumb-up-button"},on:{"click":function($event){return _vm.submitFeedback('thumbs_up')}}}),_vm._v(" "),_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"title":_vm.$options.i18n.THUMBS_DOWN,"aria-label":_vm.$options.i18n.THUMBS_DOWN,"icon":"thumb-down","category":"tertiary","size":"small","data-testid":"thumb-down-button"},on:{"click":function($event){return _vm.submitFeedback('thumbs_down')}}})]:_c('div',{staticClass:"gl-relative gl-flex gl-items-center gl-gap-2",attrs:{"data-testid":"feedback-given"}},[_c('div',{staticClass:"feedback-colored-icon",attrs:{"data-testid":"feedback-colored-icon"}},[(_vm.isThumbsUp)?_c('gl-icon',{staticClass:"gl-text-success",attrs:{"name":"thumb-up","size":16,"data-testid":"thumb-up-icon-success"}}):(_vm.isThumbsDown)?_c('gl-icon',{staticClass:"gl-text-danger",attrs:{"name":"thumb-down","size":16,"data-testid":"thumb-down-icon-danger"}}):_vm._e()],1),_vm._v(" "),_c('div',{staticClass:"feedback-thanks gl-whitespace-nowrap gl-opacity-0",attrs:{"data-testid":"feedback-thanks"}},[_c('gl-icon',{staticClass:"gl-text-success",attrs:{"name":"check-xs","size":16,"data-testid":"check-icon"}}),_vm._v(" "),_c('span',{staticClass:"gl-text-sm gl-text-subtle"},[_vm._v(_vm._s(_vm.$options.i18n.THANKS))])],1)])],2)};
|
|
55
55
|
var __vue_staticRenderFns__ = [];
|
|
56
56
|
|
|
57
57
|
/* style */
|
|
@@ -333,6 +333,14 @@ var script = {
|
|
|
333
333
|
required: false,
|
|
334
334
|
default: () => [],
|
|
335
335
|
validator: urls => urls.every(url => typeof url === 'string')
|
|
336
|
+
},
|
|
337
|
+
/**
|
|
338
|
+
* Whether to show agentic binary feedback (thumbs up/down) instead of the full feedback modal.
|
|
339
|
+
*/
|
|
340
|
+
isBinaryFeedbackEnabled: {
|
|
341
|
+
type: Boolean,
|
|
342
|
+
required: false,
|
|
343
|
+
default: false
|
|
336
344
|
}
|
|
337
345
|
},
|
|
338
346
|
data() {
|
|
@@ -764,7 +772,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
764
772
|
'duo-chat-history gl-px-4',
|
|
765
773
|
_vm.$scopedSlots['custom-empty-state'] && !_vm.hasMessages && !_vm.isLoading
|
|
766
774
|
? 'gl-m-auto'
|
|
767
|
-
: 'gl-mt-auto gl-pb-4 gl-pt-6' ],attrs:{"mode":"out-in","tag":"section","name":_vm.$scopedSlots['custom-empty-state'] ? '' : 'message',"data-testid":"chat-messages"}},[_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-container"},[_vm._t("custom-empty-state",function(){return [_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-default gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[_c('div',{staticClass:"gl-mb-[3.75rem] gl-flex gl-flex-col gl-items-center gl-justify-center gl-gap-3 gl-text-center"},[_c('h1',{staticClass:"gl-my-0 gl-text-[3.5rem]",attrs:{"data-testid":"gl-duo-chat-empty-state-emoji"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_EMPTY_STATE_EMOJI)+"\n ")]),_vm._v(" "),(_vm.agentName)?_c('h2',{staticClass:"gl-heading-2 gl-my-0",attrs:{"data-testid":"gl-duo-chat-empty-state-greeting"}},[_vm._v("\n "+_vm._s(_vm.emptyStateGreeting)+"\n ")]):_vm._e(),_vm._v(" "),_c('h2',{staticClass:"gl-my-0 gl-text-size-h2",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateMainText)+"\n ")]),_vm._v(" "),_c('p',{staticClass:"gl-text-base gl-text-subtle",attrs:{"data-testid":"gl-duo-chat-empty-state-subtitle"}},[_vm._v("\n "+_vm._s(_vm.emptyStateSubText)+"\n ")])]),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]})],2)]:_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"}},[_c('p',{staticClass:"gl-mb-3 gl-text-sm gl-text-subtle",class:{ 'gl-invisible': !_vm.hasAssistantMessages },attrs:{"data-testid":"chat-disclaimer"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_DISCLAIMER)+"\n ")]),_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('div',{staticClass:"duo-chat-input gl-relative gl-min-h-8 gl-max-w-full gl-grow gl-flex-col gl-rounded-bl-[12px] gl-rounded-br-[18px] gl-rounded-tl-[12px] gl-rounded-tr-[12px] gl-align-top forced-colors:gl-border"},[(_vm.$scopedSlots['agentic-model'] || _vm.$scopedSlots['agentic-switch'])?_c('div',{staticClass:"gl-flex gl-items-center gl-justify-between gl-gap-5 gl-border-0 gl-border-b-1 gl-border-solid gl-border-strong gl-px-4 gl-py-4 forced-colors:gl-border-none"},[_c('div',{staticClass:"duo-model-switcher gl-min-w-0 gl-max-w-full"},[_vm._t("agentic-model")],2),_vm._v(" "),_c('div',{staticClass:"duo-agent-mode-switcher gl-min-w-0 gl-max-w-full gl-shrink-0"},[_vm._t("agentic-switch")],2)]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-h-[80px] gl-grow",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":[
|
|
775
|
+
: 'gl-mt-auto gl-pb-4 gl-pt-6' ],attrs:{"mode":"out-in","tag":"section","name":_vm.$scopedSlots['custom-empty-state'] ? '' : 'message',"data-testid":"chat-messages"}},[_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,"is-binary-feedback-enabled":_vm.isBinaryFeedbackEnabled},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-container"},[_vm._t("custom-empty-state",function(){return [_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-default gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[_c('div',{staticClass:"gl-mb-[3.75rem] gl-flex gl-flex-col gl-items-center gl-justify-center gl-gap-3 gl-text-center"},[_c('h1',{staticClass:"gl-my-0 gl-text-[3.5rem]",attrs:{"data-testid":"gl-duo-chat-empty-state-emoji"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_EMPTY_STATE_EMOJI)+"\n ")]),_vm._v(" "),(_vm.agentName)?_c('h2',{staticClass:"gl-heading-2 gl-my-0",attrs:{"data-testid":"gl-duo-chat-empty-state-greeting"}},[_vm._v("\n "+_vm._s(_vm.emptyStateGreeting)+"\n ")]):_vm._e(),_vm._v(" "),_c('h2',{staticClass:"gl-my-0 gl-text-size-h2",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateMainText)+"\n ")]),_vm._v(" "),_c('p',{staticClass:"gl-text-base gl-text-subtle",attrs:{"data-testid":"gl-duo-chat-empty-state-subtitle"}},[_vm._v("\n "+_vm._s(_vm.emptyStateSubText)+"\n ")])]),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]})],2)]:_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"}},[_c('p',{staticClass:"gl-mb-3 gl-text-sm gl-text-subtle",class:{ 'gl-invisible': !_vm.hasAssistantMessages },attrs:{"data-testid":"chat-disclaimer"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.CHAT_DISCLAIMER)+"\n ")]),_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('div',{staticClass:"duo-chat-input gl-relative gl-min-h-8 gl-max-w-full gl-grow gl-flex-col gl-rounded-bl-[12px] gl-rounded-br-[18px] gl-rounded-tl-[12px] gl-rounded-tr-[12px] gl-align-top forced-colors:gl-border"},[(_vm.$scopedSlots['agentic-model'] || _vm.$scopedSlots['agentic-switch'])?_c('div',{staticClass:"gl-flex gl-items-center gl-justify-between gl-gap-5 gl-border-0 gl-border-b-1 gl-border-solid gl-border-strong gl-px-4 gl-py-4 forced-colors:gl-border-none"},[_c('div',{staticClass:"duo-model-switcher gl-min-w-0 gl-max-w-full"},[_vm._t("agentic-model")],2),_vm._v(" "),_c('div',{staticClass:"duo-agent-mode-switcher gl-min-w-0 gl-max-w-full gl-shrink-0"},[_vm._t("agentic-switch")],2)]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-h-[80px] gl-grow",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":[
|
|
768
776
|
'!gl-h-full',
|
|
769
777
|
'!gl-bg-transparent',
|
|
770
778
|
'!gl-py-4',
|
|
@@ -80,6 +80,14 @@ var script = {
|
|
|
80
80
|
type: String,
|
|
81
81
|
required: false,
|
|
82
82
|
default: ''
|
|
83
|
+
},
|
|
84
|
+
/**
|
|
85
|
+
* Whether to show agentic binary feedback (thumbs up/down) instead of the full feedback modal.
|
|
86
|
+
*/
|
|
87
|
+
isBinaryFeedbackEnabled: {
|
|
88
|
+
type: Boolean,
|
|
89
|
+
required: false,
|
|
90
|
+
default: false
|
|
83
91
|
}
|
|
84
92
|
},
|
|
85
93
|
computed: {
|
|
@@ -114,6 +122,16 @@ var script = {
|
|
|
114
122
|
var _this$pendingToolAppr;
|
|
115
123
|
const lastIndex = this.pendingToolApprovals.length - 1;
|
|
116
124
|
return (_this$pendingToolAppr = this.pendingToolApprovals[lastIndex]) === null || _this$pendingToolAppr === void 0 ? void 0 : _this$pendingToolAppr.approvalOptions;
|
|
125
|
+
},
|
|
126
|
+
/**
|
|
127
|
+
* Returns the index of the last assistant message in the messages array.
|
|
128
|
+
* @returns {number} Index of last assistant message, or -1 if none found
|
|
129
|
+
*/
|
|
130
|
+
lastAssistantMessageIndex() {
|
|
131
|
+
return this.messages.findLastIndex(msg => {
|
|
132
|
+
var _msg$role, _msg$message_type;
|
|
133
|
+
return (msg === null || msg === void 0 ? void 0 : (_msg$role = msg.role) === null || _msg$role === void 0 ? void 0 : _msg$role.toLowerCase()) === 'assistant' || (msg === null || msg === void 0 ? void 0 : (_msg$message_type = msg.message_type) === null || _msg$message_type === void 0 ? void 0 : _msg$message_type.toLowerCase()) === 'agent';
|
|
134
|
+
});
|
|
117
135
|
}
|
|
118
136
|
},
|
|
119
137
|
methods: {
|
|
@@ -155,7 +173,7 @@ const __vue_script__ = script;
|
|
|
155
173
|
/* template */
|
|
156
174
|
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:[
|
|
157
175
|
'gl-flex gl-flex-col gl-justify-end gl-gap-6',
|
|
158
|
-
{ '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('duo-chat-message',{key:((msg.role) + "-" + index),attrs:{"message":msg,"trusted-urls":_vm.trustedUrls,"is-cancelled":_vm.canceledRequestIds.includes(msg.requestId),"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory},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,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(_vm.hasPendingToolApprovals)?_c('duo-chat-message-tool-approval',{attrs:{"messages":_vm.pendingToolApprovals,"is-processing":_vm.isToolApprovalProcessing,"approval-options":_vm.toolApprovalOptions},on:{"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall}}):_vm._e()],2)};
|
|
176
|
+
{ '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('duo-chat-message',{key:((msg.role) + "-" + index),attrs:{"message":msg,"trusted-urls":_vm.trustedUrls,"is-cancelled":_vm.canceledRequestIds.includes(msg.requestId),"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"is-binary-feedback-enabled":_vm.isBinaryFeedbackEnabled,"show-binary-feedback":index === _vm.lastAssistantMessageIndex},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,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(_vm.hasPendingToolApprovals)?_c('duo-chat-message-tool-approval',{attrs:{"messages":_vm.pendingToolApprovals,"is-processing":_vm.isToolApprovalProcessing,"approval-options":_vm.toolApprovalOptions},on:{"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall}}):_vm._e()],2)};
|
|
159
177
|
var __vue_staticRenderFns__ = [];
|
|
160
178
|
|
|
161
179
|
/* style */
|
|
@@ -5,6 +5,7 @@ import DuoChatContextItemSelections from '../duo_chat_context/duo_chat_context_i
|
|
|
5
5
|
import { SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED, MESSAGE_MODEL_ROLES } from '../../constants';
|
|
6
6
|
import DocumentationSources from '../duo_chat_message_sources/duo_chat_message_sources';
|
|
7
7
|
import { concatUntilEmpty, copyToClipboard } from '../utils';
|
|
8
|
+
import AgenticBinaryFeedback from '../../../agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback';
|
|
8
9
|
import MessageFeedback from './message_feedback';
|
|
9
10
|
import MarkdownRenderer from './markdown_renderer';
|
|
10
11
|
import { CopyCodeElement } from './copy_code_element';
|
|
@@ -26,6 +27,7 @@ var script = {
|
|
|
26
27
|
ADD_TAGS: ['copy-code', 'insert-code-snippet']
|
|
27
28
|
},
|
|
28
29
|
components: {
|
|
30
|
+
AgenticBinaryFeedback,
|
|
29
31
|
DocumentationSources,
|
|
30
32
|
DuoChatContextItemSelections,
|
|
31
33
|
MessageFeedback,
|
|
@@ -89,6 +91,22 @@ var script = {
|
|
|
89
91
|
type: String,
|
|
90
92
|
required: false,
|
|
91
93
|
default: ''
|
|
94
|
+
},
|
|
95
|
+
/**
|
|
96
|
+
* Whether to show agentic binary feedback (thumbs up/down) instead of the full feedback modal.
|
|
97
|
+
*/
|
|
98
|
+
isBinaryFeedbackEnabled: {
|
|
99
|
+
type: Boolean,
|
|
100
|
+
required: false,
|
|
101
|
+
default: false
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Whether to show the binary feedback UI (always visible) vs hover behavior for older messages.
|
|
105
|
+
*/
|
|
106
|
+
showBinaryFeedback: {
|
|
107
|
+
type: Boolean,
|
|
108
|
+
required: false,
|
|
109
|
+
default: false
|
|
92
110
|
}
|
|
93
111
|
},
|
|
94
112
|
data() {
|
|
@@ -301,13 +319,13 @@ var script = {
|
|
|
301
319
|
const __vue_script__ = script;
|
|
302
320
|
|
|
303
321
|
/* template */
|
|
304
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"content-wrapper",staticClass:"duo-chat-message-container gl-flex gl-flex-col gl-gap-4 gl-text-base gl-break-anywhere",class:{
|
|
322
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"content-wrapper",staticClass:"duo-chat-message-container gl-group gl-flex gl-flex-col gl-gap-4 gl-text-base gl-break-anywhere",class:{
|
|
305
323
|
'gl-pr-7': _vm.isAssistantMessage,
|
|
306
324
|
'gl-justify-end gl-pl-7': _vm.isUserMessage,
|
|
307
325
|
'duo-chat-message-complete': _vm.isDoneStreaming,
|
|
308
326
|
},on:{"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}},[(_vm.error)?_c('div',{ref:"error-message",staticClass:"duo-chat-message-with-error gl-flex gl-bg-feedback-danger gl-p-4"},[(_vm.error)?_c('gl-icon',{staticClass:"error-icon !gl-mt-1 gl-mr-3 gl-shrink-0 gl-text-danger",attrs:{"aria-label":_vm.$options.i18n.MESSAGE_ERROR,"name":"error","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),(_vm.error)?_c('markdown-renderer',{ref:"error-message",staticClass:"duo-chat-message-error",attrs:{"markdown":_vm.renderedError,"trusted-urls":_vm.trustedUrls}}):_vm._e()],1):(_vm.isAssistantMessage || _vm.isUserMessage)?[_c('div',{staticClass:"gl-sr-only"},[_vm._v("\n "+_vm._s(_vm.isUserMessage ? _vm.$options.i18n.FROM_ME : _vm.$options.i18n.FROM_DUO)+"\n ")]),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isAssistantMessage)?_c('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(" "),_c('markdown-renderer',{ref:"content",staticClass:"duo-chat-message",class:{
|
|
309
327
|
'gl-bg-feedback-info gl-p-4 gl-text-feedback-info': _vm.isUserMessage,
|
|
310
|
-
},attrs:{"is-html":_vm.hasContentHtml,"markdown":_vm.messageContent,"trusted-urls":_vm.trustedUrls}}),_vm._v(" "),(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),(_vm.isAssistantMessage)?_c('div',{staticClass:"duo-chat-message-actions -gl-ml-2 gl-flex gl-items-start gl-gap-3"},[(_vm.shouldShowCopyAction)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip
|
|
328
|
+
},attrs:{"is-html":_vm.hasContentHtml,"markdown":_vm.messageContent,"trusted-urls":_vm.trustedUrls}}),_vm._v(" "),(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),(_vm.isAssistantMessage)?_c('div',{staticClass:"duo-chat-message-actions -gl-ml-2 gl-flex gl-items-start gl-gap-3"},[(_vm.isChunkAndNotCancelled)?_c('gl-animated-loader-icon',{attrs:{"is-on":true}}):_vm._e(),_vm._v(" "),(_vm.shouldShowFeedbackLink && _vm.isBinaryFeedbackEnabled)?[(_vm.showBinaryFeedback)?_c('agentic-binary-feedback',{attrs:{"data-testid":"agentic-feedback-latest"},on:{"feedback":_vm.logEvent}}):_c('div',{staticClass:"group-hover:gl-opacity-100 gl-opacity-0 gl-transition-opacity",attrs:{"data-testid":"agentic-feedback-hover-container"}},[_c('agentic-binary-feedback',{on:{"feedback":_vm.logEvent}})],1)]:(_vm.shouldShowFeedbackLink)?_c('message-feedback',{attrs:{"has-feedback":_vm.hasFeedback},on:{"feedback":_vm.logEvent}}):_vm._e(),_vm._v(" "),(_vm.shouldShowCopyAction)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],class:{ '!gl-text-success': _vm.copied, '!gl-text-subtle': !_vm.copied },attrs:{"title":_vm.copied ? _vm.$options.i18n.CHAT_MESSAGE_COPIED : _vm.$options.i18n.CHAT_MESSAGE_COPY,"icon":_vm.copied ? 'check-circle-filled' : 'copy-to-clipboard',"category":"tertiary","size":"small"},on:{"click":_vm.copyMessage,"focusout":function($event){_vm.copied = false;}}}):_vm._e()],2):_vm._e(),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isUserMessage)?_c('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()]:_c('message-map',{attrs:{"message":_vm.message,"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent}})],2)};
|
|
311
329
|
var __vue_staticRenderFns__ = [];
|
|
312
330
|
|
|
313
331
|
/* style */
|
package/dist/components.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@charset "UTF-8";.resizable-content{--tw-shadow:var(--gl-shadow-lg);--tw-shadow-colored:var(--gl-shadow-lg);background:var(--gl-background-color-default);border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-size:var(--gl-font-size-base);height:100%;overflow-y:auto;width:100%}.recents-wrapper .resizable-content{margin-top:var(--gl-spacing-scale-0)}.resizable-content{display:flex;flex-direction:column;line-height:1rem}.resizable-component .resizable-l,.resizable-component .resizable-t{background-color:initial;border-radius:3px;transition:background-color .2s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.resizable-component .resizable-l,.resizable-component .resizable-t{transition-delay:0ms!important;transition-duration:.01ms!important}}.resizable-component .resizable-l:hover,.resizable-component .resizable-t:hover{background-color:var(--gl-color-blue-200)}.resizable-component .resizable-t{height:4px!important;left:50%!important;top:2px!important;transform:translateX(-50%);width:95%!important}.resizable-component .resizable-l{height:95%!important;left:2px!important;top:50%!important;transform:translateY(-50%);width:4px!important}.resizable-component .duo-chat{z-index:var(--gl-zindex-0)}.resizable-component .resizable-l,.resizable-component .resizable-lt,.resizable-component .resizable-t{z-index:var(--gl-zindex-1)}.duo-chat{font-family:var(--gl-font-family-regular);z-index:999}.duo-chat .message-enter-active,.duo-chat .message-leave-active{transition:all .5s ease}.duo-chat .message-enter,.duo-chat .message-leave-to{opacity:var(--gl-opacity-0);transform:translateY(10px)}.duo-chat .duo-chat-loader.message-leave,.duo-chat .duo-chat-loader.message-leave-to{transition:none}.duo-chat .duo-agent-mode-switcher>*,.duo-chat .duo-model-switcher>*{width:100%}.duo-chat-drawer{--tw-shadow:var(--gl-shadow-lg);--tw-shadow-colored:var(--gl-shadow-lg);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-size:var(--gl-font-size-base);height:100%;overflow-y:auto;position:fixed;right:0;transition-duration:.2s;transition-property:all;transition-timing-function:ease;width:100%}.recents-wrapper .duo-chat-drawer{margin-top:var(--gl-spacing-scale-0)}.duo-chat-drawer{display:flex;flex-direction:column;line-height:1rem}.duo-chat-drawer-footer{padding-bottom:var(--gl-spacing-scale-4);padding-left:var(--gl-spacing-scale-4);padding-right:var(--gl-spacing-scale-4)}.duo-chat-drawer-footer:before{--tw-translate-y:-100%;background:linear-gradient(to bottom,#0000,var(--gl-background-color-default));content:"";height:var(--gl-spacing-scale-4);left:0;pointer-events:none;position:absolute;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:100%}.duo-chat-history{scroll-behavior:smooth}.duo-chat-history *{overflow-anchor:none}.duo-chat-history .scroll-anchor{height:1px;margin-top:-1px;overflow-anchor:auto}.history-item{align-items:center;background:var(--gl-button-default-tertiary-background-color-default);border-radius:var(--gl-border-radius-lg);display:flex;gap:var(--gl-spacing-scale-3);margin-left:calc(var(--gl-spacing-scale-3)*-1);margin-right:calc(var(--gl-spacing-scale-3)*-1);padding-right:var(--gl-spacing-scale-2);transition:background-color .2s cubic-bezier(.22,.61,.36,1)}.history-item:focus,.history-item:focus-within,.history-item:hover{background:var(--gl-button-default-tertiary-background-color-hover)}.history-item:focus .history-remove-button,.history-item:focus-within .history-remove-button,.history-item:hover .history-remove-button{opacity:1}.history-item .history-remove-button{opacity:0;transition:opacity .2s cubic-bezier(.22,.61,.36,1)}.history-item .history-item-name{border-radius:var(--gl-border-radius-lg);border-width:0;padding:var(--gl-spacing-scale-3)}.history-item .history-item-name,.history-item .history-item-name:active,.history-item .history-item-name:focus,.history-item .history-item-name:hover{background-color:initial!important}.history-item .gl-button-text{align-items:center;display:flex;flex-direction:row;gap:var(--gl-spacing-scale-3);text-align:left;width:100%}.duo-chat-input{background:var(--gl-control-background-color-default);border-radius:1.25rem;box-shadow:inset 0 0 0 1px var(--gl-control-border-color-default);display:flex;flex-direction:column;max-height:240px;overflow:hidden}.duo-chat-input:focus-within{box-shadow:inset 0 0 0 1px var(--gl-control-border-color-focus),0 0 0 1px var(--gl-focus-ring-inner-color),0 0 0 3px var(--gl-focus-ring-outer-color);outline:none}@media (forced-colors:active){.duo-chat-input:focus-within{outline:2px solid LinkText}}.duo-chat-input .gl-form-textarea.form-control{border-radius:1.25rem;flex:1;max-height:240px;padding-right:40px;resize:none}.duo-chat-input:after{content:attr(data-value) " ";font-family:var(--gl-font-family-regular);padding:var(--gl-spacing-scale-4);padding-right:40px;visibility:hidden;word-break:break-word}.duo-chat .duo-chat-suggestion-button{border-radius:1rem}.slash-commands{margin-top:calc(var(--gl-spacing-scale-2)*-1)}.slash-commands .active-command{background-color:var(--gl-background-color-strong);border-radius:.25rem}.slash-commands .gl-dropdown-item button.dropdown-item{background-color:initial;font-size:var(--gl-font-size-sm);padding-left:var(--gl-spacing-scale-3);padding-right:var(--gl-spacing-scale-3)}.slash-commands .gl-dropdown-item button.dropdown-item:hover{background-color:initial}.duo-chat-markdown{color:#3a383f;font-family:var(--gl-font-family-regular);font-size:var(--gl-font-size-lg);font-weight:var(--gl-font-weight-normal);line-height:var(--gl-line-height-24)}.duo-chat-markdown :first-child{margin-top:var(--gl-spacing-scale-0)}.duo-chat-markdown .gl-h1,.duo-chat-markdown h1{color:var(--gl-heading-1-color);font-size:var(--gl-heading-1-font-size);font-weight:var(--gl-heading-1-font-weight);letter-spacing:var(--gl-heading-1-letter-spacing);line-height:var(--gl-heading-1-line-height);margin-bottom:var(--gl-heading-1-margin-bottom);margin-top:var(--gl-spacing-scale-7)}.duo-chat-markdown .gl-h2,.duo-chat-markdown h2{color:var(--gl-heading-2-color);font-size:var(--gl-heading-2-font-size);font-weight:var(--gl-heading-2-font-weight);letter-spacing:var(--gl-heading-2-letter-spacing);line-height:var(--gl-heading-2-line-height);margin-bottom:var(--gl-heading-2-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h3,.duo-chat-markdown h3{color:var(--gl-heading-3-color);font-size:var(--gl-heading-3-font-size);font-weight:var(--gl-heading-3-font-weight);letter-spacing:var(--gl-heading-3-letter-spacing);line-height:var(--gl-heading-3-line-height);margin-bottom:var(--gl-heading-3-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h4,.duo-chat-markdown h4{color:var(--gl-heading-4-color);font-size:var(--gl-heading-4-font-size);font-weight:var(--gl-heading-4-font-weight);letter-spacing:var(--gl-heading-4-letter-spacing);line-height:var(--gl-heading-4-line-height);margin-bottom:var(--gl-heading-4-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h5,.duo-chat-markdown h5{color:var(--gl-heading-5-color);font-size:var(--gl-heading-5-font-size);font-weight:var(--gl-heading-5-font-weight);letter-spacing:var(--gl-heading-5-letter-spacing);line-height:var(--gl-heading-5-line-height);margin-bottom:var(--gl-heading-5-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h6,.duo-chat-markdown h6{color:var(--gl-heading-6-color);font-size:var(--gl-heading-6-font-size);font-weight:var(--gl-heading-6-font-weight);letter-spacing:var(--gl-heading-6-letter-spacing);line-height:var(--gl-heading-6-line-height);margin-bottom:var(--gl-heading-6-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-paragraph,.duo-chat-markdown p{margin-bottom:var(--gl-spacing-scale-0);margin-top:var(--gl-spacing-scale-0)}.duo-chat-markdown .gl-paragraph+.gl-paragraph,.duo-chat-markdown .gl-paragraph+p,.duo-chat-markdown p+.gl-paragraph,.duo-chat-markdown p+p{margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-paragraph.sm,.duo-chat-markdown .sm,.duo-chat-markdown p.sm{font-size:.875rem;line-height:var(--gl-line-height-20)}.duo-chat-markdown .monospace,.duo-chat-markdown code{font-family:var(--gl-font-family-monospace);font-family:var(--default-mono-font,"GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace;font-variant-ligatures:none}.duo-chat-markdown blockquote{box-shadow:inset 4px 0 0 0 #dcdcde;color:var(--gray-700);margin:var(--gl-spacing-scale-3) var(--gl-spacing-scale-0);padding-bottom:var(--gl-spacing-scale-3);padding-left:var(--gl-spacing-scale-6);padding-top:var(--gl-spacing-scale-3)}.duo-chat-markdown .idiff{border-radius:.25rem;display:inline-flex;padding-left:var(--gl-spacing-scale-2);padding-right:var(--gl-spacing-scale-2)}.duo-chat-markdown .deletion{background-color:var(--red-100)}.duo-chat-markdown .addition{background-color:var(--green-100)}.duo-chat-markdown code{background-color:var(--gray-50);border-radius:.25rem;color:var(--gray-950);padding:var(--gl-spacing-scale-1) var(--gl-spacing-scale-2)}.duo-chat-markdown pre{border-radius:.25rem;box-shadow:inset 0 0 0 1px #dcdcde;margin-bottom:var(--gl-spacing-scale-7);margin-top:var(--gl-spacing-scale-7);overflow:auto;padding:var(--gl-spacing-scale-3) var(--gl-spacing-scale-4)}.duo-chat-markdown pre code{background-color:var(--white);border-radius:var(--gl-border-radius-none);color:var(--gray-900);padding:var(--gl-spacing-scale-0)}.duo-chat-markdown .audio-container{display:inline-flex;flex-direction:column;width:100%}.duo-chat-markdown .audio-container audio{width:100%}.duo-chat-markdown .audio-container a{margin-top:var(--gl-spacing-scale-3)}.duo-chat-markdown .audio-container a:before{-webkit-font-smoothing:antialiased;content:"📎";margin-right:var(--gl-spacing-scale-2);text-rendering:auto}.duo-chat-markdown table{margin-bottom:var(--gl-spacing-scale-7);margin-top:var(--gl-spacing-scale-7)}.duo-chat-markdown table td,.duo-chat-markdown table th{box-shadow:inset 0 -1px 0 0 #dcdcde;padding:var(--gl-spacing-scale-4) var(--gl-spacing-scale-3);vertical-align:top}.duo-chat-markdown table th{box-shadow:inset 0 1px 0 0 #dcdcde,inset 0 -1px 0 0 #dcdcde;font-weight:var(--gl-font-weight-bold)}.duo-chat-markdown table thead{background-color:var(--gray-50)}.duo-chat-markdown table tr:nth-child(2n){background-color:var(--gray-10)}.duo-chat-compact-markdown{font-size:var(--gl-font-size-base)}.recents-wrapper .duo-chat-compact-markdown{margin-top:var(--gl-spacing-scale-0)}.duo-chat-compact-markdown{line-height:var(--gl-line-height-20)}.duo-chat-compact-markdown .gl-h1,.duo-chat-compact-markdown h1{color:var(--gl-heading-1-fixed-color);font-size:var(--gl-heading-1-fixed-font-size);font-weight:var(--gl-heading-1-fixed-font-weight);letter-spacing:var(--gl-heading-1-fixed-letter-spacing);line-height:var(--gl-heading-1-fixed-line-height);margin-bottom:var(--gl-heading-1-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-7)}.duo-chat-compact-markdown .gl-h2,.duo-chat-compact-markdown h2{color:var(--gl-heading-2-fixed-color);font-size:var(--gl-heading-2-fixed-font-size);font-weight:var(--gl-heading-2-fixed-font-weight);letter-spacing:var(--gl-heading-2-fixed-letter-spacing);line-height:var(--gl-heading-2-fixed-line-height);margin-bottom:var(--gl-heading-2-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-compact-markdown .gl-h3,.duo-chat-compact-markdown h3{color:var(--gl-heading-3-fixed-color);font-size:var(--gl-heading-3-fixed-font-size);font-weight:var(--gl-heading-3-fixed-font-weight);letter-spacing:var(--gl-heading-3-fixed-letter-spacing);line-height:var(--gl-heading-3-fixed-line-height);margin-bottom:var(--gl-heading-3-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-compact-markdown .gl-h4,.duo-chat-compact-markdown h4{color:var(--gl-heading-4-fixed-color);font-size:var(--gl-heading-4-fixed-font-size);font-weight:var(--gl-heading-4-fixed-font-weight);letter-spacing:var(--gl-heading-4-fixed-letter-spacing);line-height:var(--gl-heading-4-fixed-line-height);margin-bottom:var(--gl-heading-4-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .gl-h5,.duo-chat-compact-markdown h5{color:var(--gl-heading-5-fixed-color);font-size:var(--gl-heading-5-fixed-font-size);font-weight:var(--gl-heading-5-fixed-font-weight);letter-spacing:var(--gl-heading-5-fixed-letter-spacing);line-height:var(--gl-heading-5-fixed-line-height);margin-bottom:var(--gl-heading-5-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .gl-h6,.duo-chat-compact-markdown h6{color:var(--gl-heading-6-fixed-color);font-size:var(--gl-heading-6-fixed-font-size);font-weight:var(--gl-heading-6-fixed-font-weight);letter-spacing:var(--gl-heading-6-fixed-letter-spacing);line-height:var(--gl-heading-6-fixed-line-height);margin-bottom:var(--gl-heading-6-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .sm{font-size:var(--gl-font-size-sm)}.duo-chat-compact-markdown .monospace,.duo-chat-compact-markdown code{font-family:var(--gl-font-family-monospace);font-family:var(--default-mono-font,"GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace;font-variant-ligatures:none}.duo-chat-compact-markdown table td,.duo-chat-compact-markdown table th{padding-bottom:var(--gl-spacing-scale-3);padding-top:var(--gl-spacing-scale-3)}.message-tool-approval-collapsed{border-bottom:0}.message-tool-approval-collapsed-header{border-bottom-left-radius:calc(var(--gl-card-border-radius) - 1px);border-bottom-right-radius:calc(var(--gl-card-border-radius) - 1px)}.web-only .duo-chat-input{overflow:visible;position:relative}.web-only .duo-chat-input:after{padding:var(--gl-spacing-scale-2)}.web-only .duo-chat-message pre code{background-color:initial!important;color:inherit!important}.duo-chat-loader{display:flex}.duo-chat-loader .transition{transition:width .2s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.duo-chat-loader .transition{transition-delay:0ms!important;transition-duration:.01ms!important}}.duo-chat-loader .text-enter{opacity:var(--gl-opacity-0)}.duo-chat-loader .text-enter-active{transition:opacity .4s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.duo-chat-loader .text-enter-active{transition-delay:0ms!important;transition-duration:.01ms!important}}.duo-chat-loader .text-enter-to,.duo-chat-loader .text-leave{opacity:var(--gl-opacity-10)}.duo-chat-loader .text-leave-active{transition:opacity .2s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.duo-chat-loader .text-leave-active{transition-delay:0ms!important;transition-duration:.01ms!important}}.duo-chat-loader .text-leave-to{opacity:var(--gl-opacity-0)}.duo-chat-message{--gl-text-color-heading:var(--duo-chat-message-heading-color,inherit)!important;border-radius:1rem 1rem 0;color:var(--duo-chat-message-color,inherit)!important;position:relative}.duo-chat-message code{background-color:var(--gl-status-neutral-background-color)}.duo-chat-message pre{background-color:var(--gl-background-color-preformat,var(--gl-background-color-default));border-color:var(--gl-border-color-default);border-style:solid;border-width:1px;box-shadow:none!important;color:inherit;max-height:60vh;padding:var(--gl-spacing-scale-3) var(--gl-spacing-scale-4);scroll-behavior:smooth}.duo-chat-message pre:after,.duo-chat-message pre:before{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;content:"";height:var(--gl-spacing-scale-7);left:1px;pointer-events:none;position:absolute;width:calc(100% - 2px)}.duo-chat-message pre.scrim-top:before{--tw-rotate:-180deg;background:linear-gradient(to bottom,#0000,var(--gl-background-color-default));top:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.duo-chat-message pre.scrim-bottom:after{background:linear-gradient(to bottom,#0000,var(--gl-background-color-default));bottom:1px}.duo-chat-message pre code{background-color:initial;display:block;font-size:var(--gl-font-size-sm);white-space:pre-wrap;word-break:break-all}.duo-chat-message p:not(:last-of-type){margin-bottom:var(--gl-spacing-scale-4)}.duo-chat-message p:last-of-type{margin-bottom:var(--gl-spacing-scale-0)}.duo-chat-message copy-code,.duo-chat-message insert-code-snippet{opacity:var(--gl-opacity-0);position:absolute;right:.5rem;top:.5rem;transition-duration:.2s;transition-property:all;transition-timing-function:ease}.duo-chat-message copy-code [role=tooltip],.duo-chat-message insert-code-snippet [role=tooltip]{background-color:var(--gray-100);border-radius:.25rem;display:none;left:0;position:absolute;top:0;width:max-content}.duo-chat-message copy-code [role=tooltip] .arrow,.duo-chat-message insert-code-snippet [role=tooltip] .arrow{background:inherit;height:var(--gl-spacing-scale-3);position:absolute;transform:rotate(45deg);width:var(--gl-spacing-scale-3)}.duo-chat-message copy-code{margin-right:2.5rem}.insert-code-hidden insert-code-snippet{display:none}.insert-code-hidden copy-code{margin-right:0}.duo-chat-message-complete .duo-message-pre-block:focus .copy-to-clipboard-button-container,.duo-chat-message-complete .duo-message-pre-block:focus copy-code,.duo-chat-message-complete .duo-message-pre-block:focus insert-code-snippet,.duo-chat-message-complete .duo-message-pre-block:has(button:focus) .copy-to-clipboard-button-container,.duo-chat-message-complete .duo-message-pre-block:has(button:focus) copy-code,.duo-chat-message-complete .duo-message-pre-block:has(button:focus) insert-code-snippet,.duo-chat-message-complete .duo-message-pre-block:hover .copy-to-clipboard-button-container,.duo-chat-message-complete .duo-message-pre-block:hover copy-code,.duo-chat-message-complete .duo-message-pre-block:hover insert-code-snippet{opacity:1}.duo-chat-message-error>p{margin:0}.recents-wrapper .gl-accordion-item-header .gl-button.gl-button.btn-link{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-radius:var(--gl-border-radius-none);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:block;font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-bold);padding-bottom:var(--gl-spacing-scale-2);padding-left:var(--gl-spacing-scale-3);padding-top:var(--gl-spacing-scale-2);text-decoration-line:none;text-transform:uppercase;width:100%}.recents-wrapper .gl-accordion-item-header>.collapse{margin-left:var(--gl-spacing-scale-0)}.recents-wrapper .gl-text-base{margin-top:var(--gl-spacing-scale-0)}.agentic-binary-feedback .feedback-colored-icon{animation:feedback-fade-out .3s ease-in-out forwards;animation-delay:2s;will-change:opacity}.agentic-binary-feedback .feedback-thanks{animation:feedback-fade-in .3s ease-in-out forwards;animation-delay:2s;pointer-events:none;will-change:opacity}@keyframes feedback-fade-out{to{opacity:0;pointer-events:none;transform:scaleX(0)}}@media (prefers-reduced-motion:reduce){.feedback-colored-icon,.feedback-thanks{animation:none}}@keyframes feedback-fade-in{to{opacity:1;pointer-events:auto}}
|
|
1
|
+
@charset "UTF-8";.resizable-content{--tw-shadow:var(--gl-shadow-lg);--tw-shadow-colored:var(--gl-shadow-lg);background:var(--gl-background-color-default);border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-size:var(--gl-font-size-base);height:100%;overflow-y:auto;width:100%}.recents-wrapper .resizable-content{margin-top:var(--gl-spacing-scale-0)}.resizable-content{display:flex;flex-direction:column;line-height:1rem}.resizable-component .resizable-l,.resizable-component .resizable-t{background-color:initial;border-radius:3px;transition:background-color .2s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.resizable-component .resizable-l,.resizable-component .resizable-t{transition-delay:0ms!important;transition-duration:.01ms!important}}.resizable-component .resizable-l:hover,.resizable-component .resizable-t:hover{background-color:var(--gl-color-blue-200)}.resizable-component .resizable-t{height:4px!important;left:50%!important;top:2px!important;transform:translateX(-50%);width:95%!important}.resizable-component .resizable-l{height:95%!important;left:2px!important;top:50%!important;transform:translateY(-50%);width:4px!important}.resizable-component .duo-chat{z-index:var(--gl-zindex-0)}.resizable-component .resizable-l,.resizable-component .resizable-lt,.resizable-component .resizable-t{z-index:var(--gl-zindex-1)}.duo-chat{font-family:var(--gl-font-family-regular);z-index:999}.duo-chat .message-enter-active,.duo-chat .message-leave-active{transition:all .5s ease}.duo-chat .message-enter,.duo-chat .message-leave-to{opacity:var(--gl-opacity-0);transform:translateY(10px)}.duo-chat .duo-chat-loader.message-leave,.duo-chat .duo-chat-loader.message-leave-to{transition:none}.duo-chat .duo-agent-mode-switcher>*,.duo-chat .duo-model-switcher>*{width:100%}.duo-chat-drawer{--tw-shadow:var(--gl-shadow-lg);--tw-shadow-colored:var(--gl-shadow-lg);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-size:var(--gl-font-size-base);height:100%;overflow-y:auto;position:fixed;right:0;transition-duration:.2s;transition-property:all;transition-timing-function:ease;width:100%}.recents-wrapper .duo-chat-drawer{margin-top:var(--gl-spacing-scale-0)}.duo-chat-drawer{display:flex;flex-direction:column;line-height:1rem}.duo-chat-drawer-footer{padding-bottom:var(--gl-spacing-scale-4);padding-left:var(--gl-spacing-scale-4);padding-right:var(--gl-spacing-scale-4)}.duo-chat-drawer-footer:before{--tw-translate-y:-100%;background:linear-gradient(to bottom,#0000,var(--gl-background-color-default));content:"";height:var(--gl-spacing-scale-4);left:0;pointer-events:none;position:absolute;top:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));width:100%}.duo-chat-history{scroll-behavior:smooth}.duo-chat-history *{overflow-anchor:none}.duo-chat-history .scroll-anchor{height:1px;margin-top:-1px;overflow-anchor:auto}.history-item{align-items:center;background:var(--gl-button-default-tertiary-background-color-default);border-radius:var(--gl-border-radius-lg);display:flex;gap:var(--gl-spacing-scale-3);margin-left:calc(var(--gl-spacing-scale-3)*-1);margin-right:calc(var(--gl-spacing-scale-3)*-1);padding-right:var(--gl-spacing-scale-2);transition:background-color .2s cubic-bezier(.22,.61,.36,1)}.history-item:focus,.history-item:focus-within,.history-item:hover{background:var(--gl-button-default-tertiary-background-color-hover)}.history-item:focus .history-remove-button,.history-item:focus-within .history-remove-button,.history-item:hover .history-remove-button{opacity:1}.history-item .history-remove-button{opacity:0;transition:opacity .2s cubic-bezier(.22,.61,.36,1)}.history-item .history-item-name{border-radius:var(--gl-border-radius-lg);border-width:0;padding:var(--gl-spacing-scale-3)}.history-item .history-item-name,.history-item .history-item-name:active,.history-item .history-item-name:focus,.history-item .history-item-name:hover{background-color:initial!important}.history-item .gl-button-text{align-items:center;display:flex;flex-direction:row;gap:var(--gl-spacing-scale-3);text-align:left;width:100%}.duo-chat-input{background:var(--gl-control-background-color-default);border-radius:1.25rem;box-shadow:inset 0 0 0 1px var(--gl-control-border-color-default);display:flex;flex-direction:column;max-height:240px;overflow:hidden}.duo-chat-input:focus-within{box-shadow:inset 0 0 0 1px var(--gl-control-border-color-focus),0 0 0 1px var(--gl-focus-ring-inner-color),0 0 0 3px var(--gl-focus-ring-outer-color);outline:none}@media (forced-colors:active){.duo-chat-input:focus-within{outline:2px solid LinkText}}.duo-chat-input .gl-form-textarea.form-control{border-radius:1.25rem;flex:1;max-height:240px;padding-right:40px;resize:none}.duo-chat-input:after{content:attr(data-value) " ";font-family:var(--gl-font-family-regular);padding:var(--gl-spacing-scale-4);padding-right:40px;visibility:hidden;word-break:break-word}.duo-chat .duo-chat-suggestion-button{border-radius:1rem}.slash-commands{margin-top:calc(var(--gl-spacing-scale-2)*-1)}.slash-commands .active-command{background-color:var(--gl-background-color-strong);border-radius:.25rem}.slash-commands .gl-dropdown-item button.dropdown-item{background-color:initial;font-size:var(--gl-font-size-sm);padding-left:var(--gl-spacing-scale-3);padding-right:var(--gl-spacing-scale-3)}.slash-commands .gl-dropdown-item button.dropdown-item:hover{background-color:initial}.duo-chat-markdown{color:#3a383f;font-family:var(--gl-font-family-regular);font-size:var(--gl-font-size-lg);font-weight:var(--gl-font-weight-normal);line-height:var(--gl-line-height-24)}.duo-chat-markdown :first-child{margin-top:var(--gl-spacing-scale-0)}.duo-chat-markdown .gl-h1,.duo-chat-markdown h1{color:var(--gl-heading-1-color);font-size:var(--gl-heading-1-font-size);font-weight:var(--gl-heading-1-font-weight);letter-spacing:var(--gl-heading-1-letter-spacing);line-height:var(--gl-heading-1-line-height);margin-bottom:var(--gl-heading-1-margin-bottom);margin-top:var(--gl-spacing-scale-7)}.duo-chat-markdown .gl-h2,.duo-chat-markdown h2{color:var(--gl-heading-2-color);font-size:var(--gl-heading-2-font-size);font-weight:var(--gl-heading-2-font-weight);letter-spacing:var(--gl-heading-2-letter-spacing);line-height:var(--gl-heading-2-line-height);margin-bottom:var(--gl-heading-2-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h3,.duo-chat-markdown h3{color:var(--gl-heading-3-color);font-size:var(--gl-heading-3-font-size);font-weight:var(--gl-heading-3-font-weight);letter-spacing:var(--gl-heading-3-letter-spacing);line-height:var(--gl-heading-3-line-height);margin-bottom:var(--gl-heading-3-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h4,.duo-chat-markdown h4{color:var(--gl-heading-4-color);font-size:var(--gl-heading-4-font-size);font-weight:var(--gl-heading-4-font-weight);letter-spacing:var(--gl-heading-4-letter-spacing);line-height:var(--gl-heading-4-line-height);margin-bottom:var(--gl-heading-4-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h5,.duo-chat-markdown h5{color:var(--gl-heading-5-color);font-size:var(--gl-heading-5-font-size);font-weight:var(--gl-heading-5-font-weight);letter-spacing:var(--gl-heading-5-letter-spacing);line-height:var(--gl-heading-5-line-height);margin-bottom:var(--gl-heading-5-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h6,.duo-chat-markdown h6{color:var(--gl-heading-6-color);font-size:var(--gl-heading-6-font-size);font-weight:var(--gl-heading-6-font-weight);letter-spacing:var(--gl-heading-6-letter-spacing);line-height:var(--gl-heading-6-line-height);margin-bottom:var(--gl-heading-6-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-paragraph,.duo-chat-markdown p{margin-bottom:var(--gl-spacing-scale-0);margin-top:var(--gl-spacing-scale-0)}.duo-chat-markdown .gl-paragraph+.gl-paragraph,.duo-chat-markdown .gl-paragraph+p,.duo-chat-markdown p+.gl-paragraph,.duo-chat-markdown p+p{margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-paragraph.sm,.duo-chat-markdown .sm,.duo-chat-markdown p.sm{font-size:.875rem;line-height:var(--gl-line-height-20)}.duo-chat-markdown .monospace,.duo-chat-markdown code{font-family:var(--gl-font-family-monospace);font-family:var(--default-mono-font,"GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace;font-variant-ligatures:none}.duo-chat-markdown blockquote{box-shadow:inset 4px 0 0 0 #dcdcde;color:var(--gray-700);margin:var(--gl-spacing-scale-3) var(--gl-spacing-scale-0);padding-bottom:var(--gl-spacing-scale-3);padding-left:var(--gl-spacing-scale-6);padding-top:var(--gl-spacing-scale-3)}.duo-chat-markdown .idiff{border-radius:.25rem;display:inline-flex;padding-left:var(--gl-spacing-scale-2);padding-right:var(--gl-spacing-scale-2)}.duo-chat-markdown .deletion{background-color:var(--red-100)}.duo-chat-markdown .addition{background-color:var(--green-100)}.duo-chat-markdown code{background-color:var(--gray-50);border-radius:.25rem;color:var(--gray-950);padding:var(--gl-spacing-scale-1) var(--gl-spacing-scale-2)}.duo-chat-markdown pre{border-radius:.25rem;box-shadow:inset 0 0 0 1px #dcdcde;margin-bottom:var(--gl-spacing-scale-7);margin-top:var(--gl-spacing-scale-7);overflow:auto;padding:var(--gl-spacing-scale-3) var(--gl-spacing-scale-4)}.duo-chat-markdown pre code{background-color:var(--white);border-radius:var(--gl-border-radius-none);color:var(--gray-900);padding:var(--gl-spacing-scale-0)}.duo-chat-markdown .audio-container{display:inline-flex;flex-direction:column;width:100%}.duo-chat-markdown .audio-container audio{width:100%}.duo-chat-markdown .audio-container a{margin-top:var(--gl-spacing-scale-3)}.duo-chat-markdown .audio-container a:before{-webkit-font-smoothing:antialiased;content:"📎";margin-right:var(--gl-spacing-scale-2);text-rendering:auto}.duo-chat-markdown table{margin-bottom:var(--gl-spacing-scale-7);margin-top:var(--gl-spacing-scale-7)}.duo-chat-markdown table td,.duo-chat-markdown table th{box-shadow:inset 0 -1px 0 0 #dcdcde;padding:var(--gl-spacing-scale-4) var(--gl-spacing-scale-3);vertical-align:top}.duo-chat-markdown table th{box-shadow:inset 0 1px 0 0 #dcdcde,inset 0 -1px 0 0 #dcdcde;font-weight:var(--gl-font-weight-bold)}.duo-chat-markdown table thead{background-color:var(--gray-50)}.duo-chat-markdown table tr:nth-child(2n){background-color:var(--gray-10)}.duo-chat-compact-markdown{font-size:var(--gl-font-size-base)}.recents-wrapper .duo-chat-compact-markdown{margin-top:var(--gl-spacing-scale-0)}.duo-chat-compact-markdown{line-height:var(--gl-line-height-20)}.duo-chat-compact-markdown .gl-h1,.duo-chat-compact-markdown h1{color:var(--gl-heading-1-fixed-color);font-size:var(--gl-heading-1-fixed-font-size);font-weight:var(--gl-heading-1-fixed-font-weight);letter-spacing:var(--gl-heading-1-fixed-letter-spacing);line-height:var(--gl-heading-1-fixed-line-height);margin-bottom:var(--gl-heading-1-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-7)}.duo-chat-compact-markdown .gl-h2,.duo-chat-compact-markdown h2{color:var(--gl-heading-2-fixed-color);font-size:var(--gl-heading-2-fixed-font-size);font-weight:var(--gl-heading-2-fixed-font-weight);letter-spacing:var(--gl-heading-2-fixed-letter-spacing);line-height:var(--gl-heading-2-fixed-line-height);margin-bottom:var(--gl-heading-2-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-compact-markdown .gl-h3,.duo-chat-compact-markdown h3{color:var(--gl-heading-3-fixed-color);font-size:var(--gl-heading-3-fixed-font-size);font-weight:var(--gl-heading-3-fixed-font-weight);letter-spacing:var(--gl-heading-3-fixed-letter-spacing);line-height:var(--gl-heading-3-fixed-line-height);margin-bottom:var(--gl-heading-3-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-6)}.duo-chat-compact-markdown .gl-h4,.duo-chat-compact-markdown h4{color:var(--gl-heading-4-fixed-color);font-size:var(--gl-heading-4-fixed-font-size);font-weight:var(--gl-heading-4-fixed-font-weight);letter-spacing:var(--gl-heading-4-fixed-letter-spacing);line-height:var(--gl-heading-4-fixed-line-height);margin-bottom:var(--gl-heading-4-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .gl-h5,.duo-chat-compact-markdown h5{color:var(--gl-heading-5-fixed-color);font-size:var(--gl-heading-5-fixed-font-size);font-weight:var(--gl-heading-5-fixed-font-weight);letter-spacing:var(--gl-heading-5-fixed-letter-spacing);line-height:var(--gl-heading-5-fixed-line-height);margin-bottom:var(--gl-heading-5-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .gl-h6,.duo-chat-compact-markdown h6{color:var(--gl-heading-6-fixed-color);font-size:var(--gl-heading-6-fixed-font-size);font-weight:var(--gl-heading-6-fixed-font-weight);letter-spacing:var(--gl-heading-6-fixed-letter-spacing);line-height:var(--gl-heading-6-fixed-line-height);margin-bottom:var(--gl-heading-6-fixed-margin-bottom);margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .sm{font-size:var(--gl-font-size-sm)}.duo-chat-compact-markdown .monospace,.duo-chat-compact-markdown code{font-family:var(--gl-font-family-monospace);font-family:var(--default-mono-font,"GitLab Mono"),"JetBrains Mono","Menlo","DejaVu Sans Mono","Liberation Mono","Consolas","Ubuntu Mono","Courier New","andale mono","lucida console",monospace;font-variant-ligatures:none}.duo-chat-compact-markdown table td,.duo-chat-compact-markdown table th{padding-bottom:var(--gl-spacing-scale-3);padding-top:var(--gl-spacing-scale-3)}.message-tool-approval-collapsed{border-bottom:0}.message-tool-approval-collapsed-header{border-bottom-left-radius:calc(var(--gl-card-border-radius) - 1px);border-bottom-right-radius:calc(var(--gl-card-border-radius) - 1px)}.web-only .duo-chat-input{overflow:visible;position:relative}.web-only .duo-chat-input:after{padding:var(--gl-spacing-scale-2)}.web-only .duo-chat-message pre code{background-color:initial!important;color:inherit!important}.duo-chat-loader{display:flex}.duo-chat-loader .transition{transition:width .2s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.duo-chat-loader .transition{transition-delay:0ms!important;transition-duration:.01ms!important}}.duo-chat-loader .text-enter{opacity:var(--gl-opacity-0)}.duo-chat-loader .text-enter-active{transition:opacity .4s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.duo-chat-loader .text-enter-active{transition-delay:0ms!important;transition-duration:.01ms!important}}.duo-chat-loader .text-enter-to,.duo-chat-loader .text-leave{opacity:var(--gl-opacity-10)}.duo-chat-loader .text-leave-active{transition:opacity .2s cubic-bezier(.22,.61,.36,1)}@media (prefers-reduced-motion){.duo-chat-loader .text-leave-active{transition-delay:0ms!important;transition-duration:.01ms!important}}.duo-chat-loader .text-leave-to{opacity:var(--gl-opacity-0)}.duo-chat-message{--gl-text-color-heading:var(--duo-chat-message-heading-color,inherit)!important;border-radius:1rem 1rem 0;color:var(--duo-chat-message-color,inherit)!important;position:relative}.duo-chat-message code{background-color:var(--gl-status-neutral-background-color)}.duo-chat-message pre{background-color:var(--gl-background-color-preformat,var(--gl-background-color-default));border-color:var(--gl-border-color-default);border-style:solid;border-width:1px;box-shadow:none!important;color:inherit;max-height:60vh;padding:var(--gl-spacing-scale-3) var(--gl-spacing-scale-4);scroll-behavior:smooth}.duo-chat-message pre:after,.duo-chat-message pre:before{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;content:"";height:var(--gl-spacing-scale-7);left:1px;pointer-events:none;position:absolute;width:calc(100% - 2px)}.duo-chat-message pre.scrim-top:before{--tw-rotate:-180deg;background:linear-gradient(to bottom,#0000,var(--gl-background-color-default));top:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.duo-chat-message pre.scrim-bottom:after{background:linear-gradient(to bottom,#0000,var(--gl-background-color-default));bottom:1px}.duo-chat-message pre code{background-color:initial;display:block;font-size:var(--gl-font-size-sm);white-space:pre-wrap;word-break:break-all}.duo-chat-message p:not(:last-of-type){margin-bottom:var(--gl-spacing-scale-4)}.duo-chat-message p:last-of-type{margin-bottom:var(--gl-spacing-scale-0)}.duo-chat-message copy-code,.duo-chat-message insert-code-snippet{opacity:var(--gl-opacity-0);position:absolute;right:.5rem;top:.5rem;transition-duration:.2s;transition-property:all;transition-timing-function:ease}.duo-chat-message copy-code [role=tooltip],.duo-chat-message insert-code-snippet [role=tooltip]{background-color:var(--gray-100);border-radius:.25rem;display:none;left:0;position:absolute;top:0;width:max-content}.duo-chat-message copy-code [role=tooltip] .arrow,.duo-chat-message insert-code-snippet [role=tooltip] .arrow{background:inherit;height:var(--gl-spacing-scale-3);position:absolute;transform:rotate(45deg);width:var(--gl-spacing-scale-3)}.duo-chat-message copy-code{margin-right:2.5rem}.insert-code-hidden insert-code-snippet{display:none}.insert-code-hidden copy-code{margin-right:0}.duo-chat-message-complete .duo-message-pre-block:focus .copy-to-clipboard-button-container,.duo-chat-message-complete .duo-message-pre-block:focus copy-code,.duo-chat-message-complete .duo-message-pre-block:focus insert-code-snippet,.duo-chat-message-complete .duo-message-pre-block:has(button:focus) .copy-to-clipboard-button-container,.duo-chat-message-complete .duo-message-pre-block:has(button:focus) copy-code,.duo-chat-message-complete .duo-message-pre-block:has(button:focus) insert-code-snippet,.duo-chat-message-complete .duo-message-pre-block:hover .copy-to-clipboard-button-container,.duo-chat-message-complete .duo-message-pre-block:hover copy-code,.duo-chat-message-complete .duo-message-pre-block:hover insert-code-snippet{opacity:1}.duo-chat-message-error>p{margin:0}.recents-wrapper .gl-accordion-item-header .gl-button.gl-button.btn-link{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-radius:var(--gl-border-radius-none);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);display:block;font-size:var(--gl-font-size-sm);font-weight:var(--gl-font-weight-bold);padding-bottom:var(--gl-spacing-scale-2);padding-left:var(--gl-spacing-scale-3);padding-top:var(--gl-spacing-scale-2);text-decoration-line:none;text-transform:uppercase;width:100%}.recents-wrapper .gl-accordion-item-header>.collapse{margin-left:var(--gl-spacing-scale-0)}.recents-wrapper .gl-text-base{margin-top:var(--gl-spacing-scale-0)}.agentic-binary-feedback .feedback-colored-icon{animation:feedback-fade-out .3s ease-in-out forwards;animation-delay:2s;will-change:opacity}.agentic-binary-feedback .feedback-thanks{animation:feedback-fade-in .3s ease-in-out forwards;animation-delay:2s;overflow:hidden;pointer-events:none;width:0;will-change:opacity,width}@keyframes feedback-fade-out{to{opacity:0;overflow:hidden;pointer-events:none;width:0}}@media (prefers-reduced-motion:reduce){.feedback-colored-icon,.feedback-thanks{animation:none}}@keyframes feedback-fade-in{to{opacity:1;pointer-events:auto;width:auto}}
|
|
2
2
|
/*# sourceMappingURL=components.css.map */
|
package/dist/components.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["components.scss"],"names":[],"mappings":"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","file":"components.css","sourcesContent":["@charset \"UTF-8\";\n/*\n* SASS preserves units in arithmetic operations. For example:\n* 12em * 0 = 0em. This function return the unit of a numeric value.\n*\n* For more examples, see: https://codepen.io/paulgv/pen/XWrqMgQ\n*/\n/* stylelint-disable @gitlab/no-gl-deprecated-design-tokens */\n/* stylelint-enable @gitlab/no-gl-deprecated-design-tokens */\n/* stylelint-disable-next-line @gitlab/no-gl-deprecated-design-tokens */\n/* stylelint-disable-next-line @gitlab/no-gl-deprecated-design-tokens */\n/**\n* Declares a property with a fluid value that decreases or\n* rises depending on the viewport’s size. The property type\n* should be numeric.\n*\n* Values are expected in rem units.\n* Fluid range: between 48rem (768px) – 75rem (1200px).\n*\n* @param $property Property name, i.e. line-height, font-size, width, height, etc.\n* @param $min Property value lower bound.\n* @param $max Property value upper bound.\n*/\n/**\n* Helper function for :focus\n*\n* @param $size is deprecated and should not be used anymore\n*/\n/**\n* Helper function for @media of at least the minimum\n* breakpoint width.\n*\n* @param $name Breakpoint name, such as `sm` or `md`.\n*/\n/**\n* Helper function for @media of at most the maximum\n* breakpoint width.\n*\n* Note: Before using, consider using a mobile-first\n* approach, and define @media for larger breakpoints\n* using `gl-media-breakpoint-up` while using this rule as\n* the starting point instead.\n*\n* @param $name Breakpoint, such as `sm` or `md`. `xs` is not valid\n*/\n/**\n* Helper function to resolve font-size value from $gl-font-sizes and\n* $gl-font-sizes-fixed maps.\n*\n* @param $size Number font-size scale\n* @param $fixed Boolean toggle default and fixed font size scales\n*/\n.resizable-content {\n height: 100%;\n width: 100%;\n background: var(--gl-background-color-default);\n border-radius: 0.5rem;\n @apply gl-overflow-y-auto;\n @apply gl-shadow-lg;\n @apply gl-text-base;\n @apply gl-leading-normal;\n @apply gl-flex;\n @apply gl-flex-col;\n}\n\n.resizable-component .resizable-t,\n.resizable-component .resizable-l {\n background-color: transparent;\n border-radius: 3px;\n transition: background-color 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .resizable-component .resizable-t,\n.resizable-component .resizable-l {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.resizable-component .resizable-t:hover,\n.resizable-component .resizable-l:hover {\n background-color: var(--gl-color-blue-200);\n}\n.resizable-component .resizable-t {\n width: 95% !important;\n transform: translateX(-50%);\n left: 50% !important;\n height: 4px !important;\n top: 2px !important;\n}\n.resizable-component .resizable-l {\n height: 95% !important;\n transform: translateY(-50%);\n top: 50% !important;\n width: 4px !important;\n left: 2px !important;\n}\n.resizable-component .duo-chat {\n @apply gl-z-0;\n}\n.resizable-component .resizable-l,\n.resizable-component .resizable-lt,\n.resizable-component .resizable-t {\n @apply gl-z-1;\n}\n\n.duo-chat {\n z-index: 999;\n @apply gl-font-regular;\n}\n.duo-chat .message-enter-active,\n.duo-chat .message-leave-active {\n transition: all 0.5s ease;\n}\n.duo-chat .message-enter,\n.duo-chat .message-leave-to {\n @apply gl-opacity-0;\n transform: translateY(10px);\n}\n.duo-chat .duo-chat-loader.message-leave,\n.duo-chat .duo-chat-loader.message-leave-to {\n transition: none;\n}\n.duo-chat .duo-agent-mode-switcher > *,\n.duo-chat .duo-model-switcher > * {\n width: 100%;\n}\n\n.duo-chat-drawer {\n right: 0;\n @apply gl-transition-all;\n position: fixed;\n @apply gl-h-full;\n @apply gl-w-full;\n @apply gl-overflow-y-auto;\n @apply gl-shadow-lg;\n @apply gl-text-base;\n @apply gl-leading-normal;\n @apply gl-flex;\n @apply gl-flex-col;\n}\n\n.duo-chat-drawer-footer {\n @apply gl-px-4;\n @apply gl-pb-4;\n}\n.duo-chat-drawer-footer::before {\n background: linear-gradient(to bottom, transparent, var(--gl-background-color-default));\n top: 0;\n @apply -gl-translate-y-full;\n content: \"\";\n left: 0;\n position: absolute;\n @apply gl-pointer-events-none;\n @apply gl-w-full;\n @apply gl-h-4;\n}\n\n.duo-chat-history {\n scroll-behavior: smooth;\n /*\n Browsers a are pretty good at keeping the focus on an element while\n the parent element grows in size. With this we mark all child elements\n of the chat history as \"non\" anchors.\n https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor\n */\n /*\n Right at the bottom of the chat history we add a scroll-anchor element.\n This scroll-anchor element is the only \"possible\" anchor. The beauty of it:\n It only will be used as an anchor _if_ it is currently inside the view port.\n So if the user manually scrolls up while a chunked message is coming in,\n it won't stick to the bottom while the message still loads.\n */\n}\n.duo-chat-history * {\n overflow-anchor: none;\n}\n.duo-chat-history .scroll-anchor {\n overflow-anchor: auto;\n height: 1px;\n margin-top: -1px;\n}\n\n.history-item {\n @apply gl-pr-2;\n @apply -gl-mx-3;\n @apply gl-rounded-lg;\n @apply gl-flex;\n @apply gl-gap-3;\n @apply gl-items-center;\n background: var(--gl-button-default-tertiary-background-color-default);\n transition: background-color 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n.history-item:hover, .history-item:focus, .history-item:focus-within {\n background: var(--gl-button-default-tertiary-background-color-hover);\n}\n.history-item:hover .history-remove-button, .history-item:focus .history-remove-button, .history-item:focus-within .history-remove-button {\n opacity: 1;\n}\n.history-item .history-remove-button {\n opacity: 0;\n transition: opacity 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n.history-item .history-item-name {\n @apply gl-py-3;\n @apply gl-px-3;\n @apply gl-rounded-lg;\n @apply gl-border-0;\n}\n.history-item .history-item-name, .history-item .history-item-name:hover, .history-item .history-item-name:active, .history-item .history-item-name:focus {\n background-color: transparent !important;\n}\n.history-item .gl-button-text {\n @apply gl-w-full;\n @apply gl-flex;\n @apply gl-flex-row;\n @apply gl-items-center;\n @apply gl-gap-3;\n @apply gl-text-left;\n}\n\n.duo-chat-input {\n @apply gl-flex;\n @apply gl-flex-col;\n max-height: 240px;\n overflow: hidden;\n background: var(--gl-control-background-color-default);\n box-shadow: inset 0 0 0 1px var(--gl-control-border-color-default);\n border-radius: 1.25rem;\n}\n.duo-chat-input:focus-within {\n box-shadow: inset 0 0 0 1px var(--gl-control-border-color-focus), 0 0 0 1px var(--gl-focus-ring-inner-color), 0 0 0 3px var(--gl-focus-ring-outer-color);\n outline: none;\n}\n@media (forced-colors: active) {\n .duo-chat-input:focus-within {\n outline: 2px solid LinkText;\n }\n}\n.duo-chat-input .gl-form-textarea.form-control {\n flex: 1;\n resize: none;\n max-height: 240px;\n padding-right: 40px;\n border-radius: 1.25rem;\n}\n.duo-chat-input::after {\n content: attr(data-value) \" \";\n @apply gl-invisible;\n @apply gl-p-4;\n @apply gl-font-regular;\n padding-right: 40px;\n word-break: break-word;\n}\n\n.duo-chat .duo-chat-suggestion-button {\n @apply gl-rounded-[1rem];\n}\n\n.slash-commands {\n @apply -gl-mt-2;\n}\n.slash-commands .active-command {\n @apply gl-bg-strong;\n @apply gl-rounded-base;\n}\n.slash-commands .gl-dropdown-item button.dropdown-item {\n @apply gl-text-sm;\n @apply gl-px-3;\n @apply gl-bg-transparent;\n}\n.slash-commands .gl-dropdown-item button.dropdown-item:hover {\n @apply gl-bg-transparent;\n}\n\n.duo-chat-markdown {\n @apply gl-text-lg;\n @apply gl-leading-24;\n color: #3a383f;\n @apply gl-font-regular;\n @apply gl-font-normal;\n}\n.duo-chat-markdown :first-child {\n @apply gl-mt-0;\n}\n.duo-chat-markdown h1,\n.duo-chat-markdown .gl-h1 {\n @apply gl-heading-1;\n @apply gl-mt-7;\n}\n.duo-chat-markdown h2,\n.duo-chat-markdown .gl-h2 {\n @apply gl-heading-2;\n @apply gl-mt-6;\n}\n.duo-chat-markdown h3,\n.duo-chat-markdown .gl-h3 {\n @apply gl-heading-3;\n @apply gl-mt-6;\n}\n.duo-chat-markdown h4,\n.duo-chat-markdown .gl-h4 {\n @apply gl-heading-4;\n @apply gl-mt-5;\n}\n.duo-chat-markdown h5,\n.duo-chat-markdown .gl-h5 {\n @apply gl-heading-5;\n @apply gl-mt-5;\n}\n.duo-chat-markdown h6,\n.duo-chat-markdown .gl-h6 {\n @apply gl-heading-6;\n @apply gl-mt-5;\n}\n.duo-chat-markdown p,\n.duo-chat-markdown .gl-paragraph {\n @apply gl-mt-0;\n @apply gl-mb-0;\n}\n.duo-chat-markdown p + p,\n.duo-chat-markdown p + .gl-paragraph,\n.duo-chat-markdown .gl-paragraph + p,\n.duo-chat-markdown .gl-paragraph + .gl-paragraph {\n @apply gl-mt-5;\n}\n.duo-chat-markdown p.sm,\n.duo-chat-markdown .gl-paragraph.sm {\n font-size: 0.875rem;\n @apply gl-leading-20;\n}\n.duo-chat-markdown .sm {\n font-size: 0.875rem;\n @apply gl-leading-20;\n}\n.duo-chat-markdown .monospace,\n.duo-chat-markdown code {\n @apply gl-font-monospace;\n}\n.duo-chat-markdown blockquote {\n @apply gl-text-gray-700;\n @apply gl-py-3;\n @apply gl-pl-6;\n @apply gl-my-3;\n @apply gl-mx-0;\n box-shadow: inset 4px 0 0 0 #dcdcde;\n}\n.duo-chat-markdown .idiff {\n @apply gl-rounded-base;\n @apply gl-inline-flex;\n @apply gl-px-2;\n}\n.duo-chat-markdown .deletion {\n @apply gl-bg-red-100;\n}\n.duo-chat-markdown .addition {\n @apply gl-bg-green-100;\n}\n.duo-chat-markdown code {\n @apply gl-rounded-base;\n @apply gl-bg-gray-50;\n @apply gl-text-gray-950;\n @apply gl-px-2;\n @apply gl-py-1;\n}\n.duo-chat-markdown pre {\n @apply gl-rounded-base;\n @apply gl-py-3;\n @apply gl-px-4;\n box-shadow: inset 0 0 0 1px #dcdcde;\n @apply gl-my-7;\n @apply gl-overflow-auto;\n}\n.duo-chat-markdown pre code {\n @apply gl-bg-white;\n @apply gl-rounded-none;\n @apply gl-text-gray-900;\n @apply gl-p-0;\n}\n.duo-chat-markdown .audio-container {\n @apply gl-inline-flex;\n @apply gl-flex-col;\n @apply gl-w-full;\n}\n.duo-chat-markdown .audio-container audio {\n @apply gl-w-full;\n}\n.duo-chat-markdown .audio-container a {\n @apply gl-mt-3;\n}\n.duo-chat-markdown .audio-container a::before {\n @apply gl-mr-2;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n content: \"📎\";\n}\n.duo-chat-markdown table {\n @apply gl-my-7;\n}\n.duo-chat-markdown table th,\n.duo-chat-markdown table td {\n @apply gl-px-3;\n @apply gl-py-4;\n box-shadow: inset 0 -1px 0 0 #dcdcde;\n @apply gl-align-top;\n}\n.duo-chat-markdown table th {\n box-shadow: inset 0 1px 0 0 #dcdcde, inset 0 -1px 0 0 #dcdcde;\n @apply gl-font-bold;\n}\n.duo-chat-markdown table thead {\n @apply gl-bg-gray-50;\n}\n.duo-chat-markdown table tr:nth-child(even) {\n @apply gl-bg-gray-10;\n}\n\n.duo-chat-compact-markdown {\n @apply gl-text-base;\n @apply gl-leading-20;\n}\n.duo-chat-compact-markdown h1,\n.duo-chat-compact-markdown .gl-h1 {\n @apply gl-heading-1-fixed;\n @apply gl-mt-7;\n}\n.duo-chat-compact-markdown h2,\n.duo-chat-compact-markdown .gl-h2 {\n @apply gl-heading-2-fixed;\n @apply gl-mt-6;\n}\n.duo-chat-compact-markdown h3,\n.duo-chat-compact-markdown .gl-h3 {\n @apply gl-heading-3-fixed;\n @apply gl-mt-6;\n}\n.duo-chat-compact-markdown h4,\n.duo-chat-compact-markdown .gl-h4 {\n @apply gl-heading-4-fixed;\n @apply gl-mt-5;\n}\n.duo-chat-compact-markdown h5,\n.duo-chat-compact-markdown .gl-h5 {\n @apply gl-heading-5-fixed;\n @apply gl-mt-5;\n}\n.duo-chat-compact-markdown h6,\n.duo-chat-compact-markdown .gl-h6 {\n @apply gl-heading-6-fixed;\n @apply gl-mt-5;\n}\n.duo-chat-compact-markdown .sm {\n @apply gl-text-sm;\n}\n.duo-chat-compact-markdown .monospace,\n.duo-chat-compact-markdown code {\n @apply gl-font-monospace;\n}\n.duo-chat-compact-markdown table th,\n.duo-chat-compact-markdown table td {\n @apply gl-py-3;\n}\n\n.message-tool-approval-collapsed {\n border-bottom: 0;\n}\n\n.message-tool-approval-collapsed-header {\n border-bottom-left-radius: calc(var(--gl-card-border-radius) - 1px);\n border-bottom-right-radius: calc(var(--gl-card-border-radius) - 1px);\n}\n\n.web-only .duo-chat-input {\n position: relative;\n overflow: visible;\n}\n.web-only .duo-chat-input::after {\n @apply gl-p-2;\n}\n\n.web-only .duo-chat-message pre code {\n color: inherit !important;\n background-color: transparent !important;\n}\n\n.duo-chat-loader {\n @apply gl-flex;\n}\n.duo-chat-loader .transition {\n transition: width 200ms cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .duo-chat-loader .transition {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.duo-chat-loader .text-enter {\n @apply gl-opacity-0;\n}\n.duo-chat-loader .text-enter-active {\n transition: opacity 400ms cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .duo-chat-loader .text-enter-active {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.duo-chat-loader .text-enter-to {\n @apply gl-opacity-10;\n}\n.duo-chat-loader .text-leave {\n @apply gl-opacity-10;\n}\n.duo-chat-loader .text-leave-active {\n transition: opacity 200ms cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .duo-chat-loader .text-leave-active {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.duo-chat-loader .text-leave-to {\n @apply gl-opacity-0;\n}\n\n.duo-chat-message {\n position: relative;\n border-radius: 1rem 1rem 0;\n color: var(--duo-chat-message-color, inherit) !important;\n --gl-text-color-heading: var(--duo-chat-message-heading-color, inherit) !important;\n}\n.duo-chat-message code {\n @apply gl-bg-status-neutral;\n}\n.duo-chat-message pre {\n box-shadow: none !important;\n @apply gl-border gl-max-h-[60vh] gl-scroll-smooth gl-px-4 gl-py-3 gl-text-inherit;\n background-color: var(--gl-background-color-preformat, var(--gl-background-color-default));\n}\n.duo-chat-message pre::before, .duo-chat-message pre::after {\n content: \"\";\n left: 1px;\n width: calc(100% - 2px);\n position: absolute;\n @apply gl-pointer-events-none gl-h-7 gl-rounded-b-base;\n}\n.duo-chat-message pre.scrim-top::before {\n background: linear-gradient(to bottom, transparent, var(--gl-background-color-default));\n top: 1px;\n @apply -gl-rotate-180;\n}\n.duo-chat-message pre.scrim-bottom::after {\n background: linear-gradient(to bottom, transparent, var(--gl-background-color-default));\n bottom: 1px;\n}\n.duo-chat-message pre code {\n @apply gl-text-sm;\n @apply gl-bg-transparent;\n @apply gl-block;\n @apply gl-whitespace-pre-wrap;\n @apply gl-break-all;\n}\n.duo-chat-message p:not(:last-of-type) {\n @apply gl-mb-4;\n}\n.duo-chat-message p:last-of-type {\n @apply gl-mb-0;\n}\n.duo-chat-message copy-code,\n.duo-chat-message insert-code-snippet {\n position: absolute;\n @apply gl-transition-all;\n @apply gl-opacity-0;\n right: 0.5rem;\n top: 0.5rem;\n}\n.duo-chat-message copy-code [role=tooltip],\n.duo-chat-message insert-code-snippet [role=tooltip] {\n display: none;\n @apply gl-bg-gray-100;\n width: max-content;\n position: absolute;\n top: 0;\n left: 0;\n @apply gl-rounded-base;\n}\n.duo-chat-message copy-code [role=tooltip] .arrow,\n.duo-chat-message insert-code-snippet [role=tooltip] .arrow {\n position: absolute;\n background: inherit;\n @apply gl-h-3 gl-w-3;\n transform: rotate(45deg);\n}\n.duo-chat-message copy-code {\n margin-right: 2.5rem;\n}\n\n.insert-code-hidden insert-code-snippet {\n display: none;\n}\n.insert-code-hidden copy-code {\n margin-right: 0;\n}\n\n.duo-chat-message-complete .duo-message-pre-block:focus copy-code,\n.duo-chat-message-complete .duo-message-pre-block:focus insert-code-snippet,\n.duo-chat-message-complete .duo-message-pre-block:focus .copy-to-clipboard-button-container,\n.duo-chat-message-complete .duo-message-pre-block:hover copy-code,\n.duo-chat-message-complete .duo-message-pre-block:hover insert-code-snippet,\n.duo-chat-message-complete .duo-message-pre-block:hover .copy-to-clipboard-button-container,\n.duo-chat-message-complete .duo-message-pre-block:has(button:focus) copy-code,\n.duo-chat-message-complete .duo-message-pre-block:has(button:focus) insert-code-snippet,\n.duo-chat-message-complete .duo-message-pre-block:has(button:focus) .copy-to-clipboard-button-container {\n opacity: 1;\n}\n\n.duo-chat-message-error > p {\n margin: 0;\n}\n\n.recents-wrapper .gl-accordion-item-header .gl-button.gl-button.btn-link {\n @apply gl-block;\n @apply gl-w-full;\n @apply gl-pl-3;\n @apply gl-py-2;\n @apply gl-rounded-none;\n @apply gl-shadow-none;\n @apply gl-no-underline;\n @apply gl-uppercase;\n @apply gl-font-bold;\n @apply gl-text-sm;\n}\n.recents-wrapper .gl-accordion-item-header > .collapse {\n @apply gl-ml-0;\n}\n.recents-wrapper .gl-text-base {\n @apply gl-mt-0;\n}\n\n.agentic-binary-feedback .feedback-colored-icon {\n animation: feedback-fade-out 0.3s ease-in-out forwards;\n animation-delay: 2s;\n will-change: opacity;\n}\n.agentic-binary-feedback .feedback-thanks {\n pointer-events: none;\n animation: feedback-fade-in 0.3s ease-in-out forwards;\n animation-delay: 2s;\n will-change: opacity;\n}\n\n@keyframes feedback-fade-out {\n to {\n opacity: 0;\n transform: scaleX(0);\n pointer-events: none;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .feedback-colored-icon,\n.feedback-thanks {\n animation: none;\n }\n}\n@keyframes feedback-fade-in {\n to {\n opacity: 1;\n pointer-events: auto;\n }\n}"]}
|
|
1
|
+
{"version":3,"sources":["components.scss"],"names":[],"mappings":"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","file":"components.css","sourcesContent":["@charset \"UTF-8\";\n/*\n* SASS preserves units in arithmetic operations. For example:\n* 12em * 0 = 0em. This function return the unit of a numeric value.\n*\n* For more examples, see: https://codepen.io/paulgv/pen/XWrqMgQ\n*/\n/* stylelint-disable @gitlab/no-gl-deprecated-design-tokens */\n/* stylelint-enable @gitlab/no-gl-deprecated-design-tokens */\n/* stylelint-disable-next-line @gitlab/no-gl-deprecated-design-tokens */\n/* stylelint-disable-next-line @gitlab/no-gl-deprecated-design-tokens */\n/**\n* Declares a property with a fluid value that decreases or\n* rises depending on the viewport’s size. The property type\n* should be numeric.\n*\n* Values are expected in rem units.\n* Fluid range: between 48rem (768px) – 75rem (1200px).\n*\n* @param $property Property name, i.e. line-height, font-size, width, height, etc.\n* @param $min Property value lower bound.\n* @param $max Property value upper bound.\n*/\n/**\n* Helper function for :focus\n*\n* @param $size is deprecated and should not be used anymore\n*/\n/**\n* Helper function for @media of at least the minimum\n* breakpoint width.\n*\n* @param $name Breakpoint name, such as `sm` or `md`.\n*/\n/**\n* Helper function for @media of at most the maximum\n* breakpoint width.\n*\n* Note: Before using, consider using a mobile-first\n* approach, and define @media for larger breakpoints\n* using `gl-media-breakpoint-up` while using this rule as\n* the starting point instead.\n*\n* @param $name Breakpoint, such as `sm` or `md`. `xs` is not valid\n*/\n/**\n* Helper function to resolve font-size value from $gl-font-sizes and\n* $gl-font-sizes-fixed maps.\n*\n* @param $size Number font-size scale\n* @param $fixed Boolean toggle default and fixed font size scales\n*/\n.resizable-content {\n height: 100%;\n width: 100%;\n background: var(--gl-background-color-default);\n border-radius: 0.5rem;\n @apply gl-overflow-y-auto;\n @apply gl-shadow-lg;\n @apply gl-text-base;\n @apply gl-leading-normal;\n @apply gl-flex;\n @apply gl-flex-col;\n}\n\n.resizable-component .resizable-t,\n.resizable-component .resizable-l {\n background-color: transparent;\n border-radius: 3px;\n transition: background-color 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .resizable-component .resizable-t,\n.resizable-component .resizable-l {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.resizable-component .resizable-t:hover,\n.resizable-component .resizable-l:hover {\n background-color: var(--gl-color-blue-200);\n}\n.resizable-component .resizable-t {\n width: 95% !important;\n transform: translateX(-50%);\n left: 50% !important;\n height: 4px !important;\n top: 2px !important;\n}\n.resizable-component .resizable-l {\n height: 95% !important;\n transform: translateY(-50%);\n top: 50% !important;\n width: 4px !important;\n left: 2px !important;\n}\n.resizable-component .duo-chat {\n @apply gl-z-0;\n}\n.resizable-component .resizable-l,\n.resizable-component .resizable-lt,\n.resizable-component .resizable-t {\n @apply gl-z-1;\n}\n\n.duo-chat {\n z-index: 999;\n @apply gl-font-regular;\n}\n.duo-chat .message-enter-active,\n.duo-chat .message-leave-active {\n transition: all 0.5s ease;\n}\n.duo-chat .message-enter,\n.duo-chat .message-leave-to {\n @apply gl-opacity-0;\n transform: translateY(10px);\n}\n.duo-chat .duo-chat-loader.message-leave,\n.duo-chat .duo-chat-loader.message-leave-to {\n transition: none;\n}\n.duo-chat .duo-agent-mode-switcher > *,\n.duo-chat .duo-model-switcher > * {\n width: 100%;\n}\n\n.duo-chat-drawer {\n right: 0;\n @apply gl-transition-all;\n position: fixed;\n @apply gl-h-full;\n @apply gl-w-full;\n @apply gl-overflow-y-auto;\n @apply gl-shadow-lg;\n @apply gl-text-base;\n @apply gl-leading-normal;\n @apply gl-flex;\n @apply gl-flex-col;\n}\n\n.duo-chat-drawer-footer {\n @apply gl-px-4;\n @apply gl-pb-4;\n}\n.duo-chat-drawer-footer::before {\n background: linear-gradient(to bottom, transparent, var(--gl-background-color-default));\n top: 0;\n @apply -gl-translate-y-full;\n content: \"\";\n left: 0;\n position: absolute;\n @apply gl-pointer-events-none;\n @apply gl-w-full;\n @apply gl-h-4;\n}\n\n.duo-chat-history {\n scroll-behavior: smooth;\n /*\n Browsers a are pretty good at keeping the focus on an element while\n the parent element grows in size. With this we mark all child elements\n of the chat history as \"non\" anchors.\n https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor\n */\n /*\n Right at the bottom of the chat history we add a scroll-anchor element.\n This scroll-anchor element is the only \"possible\" anchor. The beauty of it:\n It only will be used as an anchor _if_ it is currently inside the view port.\n So if the user manually scrolls up while a chunked message is coming in,\n it won't stick to the bottom while the message still loads.\n */\n}\n.duo-chat-history * {\n overflow-anchor: none;\n}\n.duo-chat-history .scroll-anchor {\n overflow-anchor: auto;\n height: 1px;\n margin-top: -1px;\n}\n\n.history-item {\n @apply gl-pr-2;\n @apply -gl-mx-3;\n @apply gl-rounded-lg;\n @apply gl-flex;\n @apply gl-gap-3;\n @apply gl-items-center;\n background: var(--gl-button-default-tertiary-background-color-default);\n transition: background-color 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n.history-item:hover, .history-item:focus, .history-item:focus-within {\n background: var(--gl-button-default-tertiary-background-color-hover);\n}\n.history-item:hover .history-remove-button, .history-item:focus .history-remove-button, .history-item:focus-within .history-remove-button {\n opacity: 1;\n}\n.history-item .history-remove-button {\n opacity: 0;\n transition: opacity 0.2s cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n.history-item .history-item-name {\n @apply gl-py-3;\n @apply gl-px-3;\n @apply gl-rounded-lg;\n @apply gl-border-0;\n}\n.history-item .history-item-name, .history-item .history-item-name:hover, .history-item .history-item-name:active, .history-item .history-item-name:focus {\n background-color: transparent !important;\n}\n.history-item .gl-button-text {\n @apply gl-w-full;\n @apply gl-flex;\n @apply gl-flex-row;\n @apply gl-items-center;\n @apply gl-gap-3;\n @apply gl-text-left;\n}\n\n.duo-chat-input {\n @apply gl-flex;\n @apply gl-flex-col;\n max-height: 240px;\n overflow: hidden;\n background: var(--gl-control-background-color-default);\n box-shadow: inset 0 0 0 1px var(--gl-control-border-color-default);\n border-radius: 1.25rem;\n}\n.duo-chat-input:focus-within {\n box-shadow: inset 0 0 0 1px var(--gl-control-border-color-focus), 0 0 0 1px var(--gl-focus-ring-inner-color), 0 0 0 3px var(--gl-focus-ring-outer-color);\n outline: none;\n}\n@media (forced-colors: active) {\n .duo-chat-input:focus-within {\n outline: 2px solid LinkText;\n }\n}\n.duo-chat-input .gl-form-textarea.form-control {\n flex: 1;\n resize: none;\n max-height: 240px;\n padding-right: 40px;\n border-radius: 1.25rem;\n}\n.duo-chat-input::after {\n content: attr(data-value) \" \";\n @apply gl-invisible;\n @apply gl-p-4;\n @apply gl-font-regular;\n padding-right: 40px;\n word-break: break-word;\n}\n\n.duo-chat .duo-chat-suggestion-button {\n @apply gl-rounded-[1rem];\n}\n\n.slash-commands {\n @apply -gl-mt-2;\n}\n.slash-commands .active-command {\n @apply gl-bg-strong;\n @apply gl-rounded-base;\n}\n.slash-commands .gl-dropdown-item button.dropdown-item {\n @apply gl-text-sm;\n @apply gl-px-3;\n @apply gl-bg-transparent;\n}\n.slash-commands .gl-dropdown-item button.dropdown-item:hover {\n @apply gl-bg-transparent;\n}\n\n.duo-chat-markdown {\n @apply gl-text-lg;\n @apply gl-leading-24;\n color: #3a383f;\n @apply gl-font-regular;\n @apply gl-font-normal;\n}\n.duo-chat-markdown :first-child {\n @apply gl-mt-0;\n}\n.duo-chat-markdown h1,\n.duo-chat-markdown .gl-h1 {\n @apply gl-heading-1;\n @apply gl-mt-7;\n}\n.duo-chat-markdown h2,\n.duo-chat-markdown .gl-h2 {\n @apply gl-heading-2;\n @apply gl-mt-6;\n}\n.duo-chat-markdown h3,\n.duo-chat-markdown .gl-h3 {\n @apply gl-heading-3;\n @apply gl-mt-6;\n}\n.duo-chat-markdown h4,\n.duo-chat-markdown .gl-h4 {\n @apply gl-heading-4;\n @apply gl-mt-5;\n}\n.duo-chat-markdown h5,\n.duo-chat-markdown .gl-h5 {\n @apply gl-heading-5;\n @apply gl-mt-5;\n}\n.duo-chat-markdown h6,\n.duo-chat-markdown .gl-h6 {\n @apply gl-heading-6;\n @apply gl-mt-5;\n}\n.duo-chat-markdown p,\n.duo-chat-markdown .gl-paragraph {\n @apply gl-mt-0;\n @apply gl-mb-0;\n}\n.duo-chat-markdown p + p,\n.duo-chat-markdown p + .gl-paragraph,\n.duo-chat-markdown .gl-paragraph + p,\n.duo-chat-markdown .gl-paragraph + .gl-paragraph {\n @apply gl-mt-5;\n}\n.duo-chat-markdown p.sm,\n.duo-chat-markdown .gl-paragraph.sm {\n font-size: 0.875rem;\n @apply gl-leading-20;\n}\n.duo-chat-markdown .sm {\n font-size: 0.875rem;\n @apply gl-leading-20;\n}\n.duo-chat-markdown .monospace,\n.duo-chat-markdown code {\n @apply gl-font-monospace;\n}\n.duo-chat-markdown blockquote {\n @apply gl-text-gray-700;\n @apply gl-py-3;\n @apply gl-pl-6;\n @apply gl-my-3;\n @apply gl-mx-0;\n box-shadow: inset 4px 0 0 0 #dcdcde;\n}\n.duo-chat-markdown .idiff {\n @apply gl-rounded-base;\n @apply gl-inline-flex;\n @apply gl-px-2;\n}\n.duo-chat-markdown .deletion {\n @apply gl-bg-red-100;\n}\n.duo-chat-markdown .addition {\n @apply gl-bg-green-100;\n}\n.duo-chat-markdown code {\n @apply gl-rounded-base;\n @apply gl-bg-gray-50;\n @apply gl-text-gray-950;\n @apply gl-px-2;\n @apply gl-py-1;\n}\n.duo-chat-markdown pre {\n @apply gl-rounded-base;\n @apply gl-py-3;\n @apply gl-px-4;\n box-shadow: inset 0 0 0 1px #dcdcde;\n @apply gl-my-7;\n @apply gl-overflow-auto;\n}\n.duo-chat-markdown pre code {\n @apply gl-bg-white;\n @apply gl-rounded-none;\n @apply gl-text-gray-900;\n @apply gl-p-0;\n}\n.duo-chat-markdown .audio-container {\n @apply gl-inline-flex;\n @apply gl-flex-col;\n @apply gl-w-full;\n}\n.duo-chat-markdown .audio-container audio {\n @apply gl-w-full;\n}\n.duo-chat-markdown .audio-container a {\n @apply gl-mt-3;\n}\n.duo-chat-markdown .audio-container a::before {\n @apply gl-mr-2;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n content: \"📎\";\n}\n.duo-chat-markdown table {\n @apply gl-my-7;\n}\n.duo-chat-markdown table th,\n.duo-chat-markdown table td {\n @apply gl-px-3;\n @apply gl-py-4;\n box-shadow: inset 0 -1px 0 0 #dcdcde;\n @apply gl-align-top;\n}\n.duo-chat-markdown table th {\n box-shadow: inset 0 1px 0 0 #dcdcde, inset 0 -1px 0 0 #dcdcde;\n @apply gl-font-bold;\n}\n.duo-chat-markdown table thead {\n @apply gl-bg-gray-50;\n}\n.duo-chat-markdown table tr:nth-child(even) {\n @apply gl-bg-gray-10;\n}\n\n.duo-chat-compact-markdown {\n @apply gl-text-base;\n @apply gl-leading-20;\n}\n.duo-chat-compact-markdown h1,\n.duo-chat-compact-markdown .gl-h1 {\n @apply gl-heading-1-fixed;\n @apply gl-mt-7;\n}\n.duo-chat-compact-markdown h2,\n.duo-chat-compact-markdown .gl-h2 {\n @apply gl-heading-2-fixed;\n @apply gl-mt-6;\n}\n.duo-chat-compact-markdown h3,\n.duo-chat-compact-markdown .gl-h3 {\n @apply gl-heading-3-fixed;\n @apply gl-mt-6;\n}\n.duo-chat-compact-markdown h4,\n.duo-chat-compact-markdown .gl-h4 {\n @apply gl-heading-4-fixed;\n @apply gl-mt-5;\n}\n.duo-chat-compact-markdown h5,\n.duo-chat-compact-markdown .gl-h5 {\n @apply gl-heading-5-fixed;\n @apply gl-mt-5;\n}\n.duo-chat-compact-markdown h6,\n.duo-chat-compact-markdown .gl-h6 {\n @apply gl-heading-6-fixed;\n @apply gl-mt-5;\n}\n.duo-chat-compact-markdown .sm {\n @apply gl-text-sm;\n}\n.duo-chat-compact-markdown .monospace,\n.duo-chat-compact-markdown code {\n @apply gl-font-monospace;\n}\n.duo-chat-compact-markdown table th,\n.duo-chat-compact-markdown table td {\n @apply gl-py-3;\n}\n\n.message-tool-approval-collapsed {\n border-bottom: 0;\n}\n\n.message-tool-approval-collapsed-header {\n border-bottom-left-radius: calc(var(--gl-card-border-radius) - 1px);\n border-bottom-right-radius: calc(var(--gl-card-border-radius) - 1px);\n}\n\n.web-only .duo-chat-input {\n position: relative;\n overflow: visible;\n}\n.web-only .duo-chat-input::after {\n @apply gl-p-2;\n}\n\n.web-only .duo-chat-message pre code {\n color: inherit !important;\n background-color: transparent !important;\n}\n\n.duo-chat-loader {\n @apply gl-flex;\n}\n.duo-chat-loader .transition {\n transition: width 200ms cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .duo-chat-loader .transition {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.duo-chat-loader .text-enter {\n @apply gl-opacity-0;\n}\n.duo-chat-loader .text-enter-active {\n transition: opacity 400ms cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .duo-chat-loader .text-enter-active {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.duo-chat-loader .text-enter-to {\n @apply gl-opacity-10;\n}\n.duo-chat-loader .text-leave {\n @apply gl-opacity-10;\n}\n.duo-chat-loader .text-leave-active {\n transition: opacity 200ms cubic-bezier(0.22, 0.61, 0.36, 1);\n}\n@media (prefers-reduced-motion) {\n .duo-chat-loader .text-leave-active {\n transition-duration: 0.01ms !important;\n transition-delay: 0ms !important;\n }\n}\n.duo-chat-loader .text-leave-to {\n @apply gl-opacity-0;\n}\n\n.duo-chat-message {\n position: relative;\n border-radius: 1rem 1rem 0;\n color: var(--duo-chat-message-color, inherit) !important;\n --gl-text-color-heading: var(--duo-chat-message-heading-color, inherit) !important;\n}\n.duo-chat-message code {\n @apply gl-bg-status-neutral;\n}\n.duo-chat-message pre {\n box-shadow: none !important;\n @apply gl-border gl-max-h-[60vh] gl-scroll-smooth gl-px-4 gl-py-3 gl-text-inherit;\n background-color: var(--gl-background-color-preformat, var(--gl-background-color-default));\n}\n.duo-chat-message pre::before, .duo-chat-message pre::after {\n content: \"\";\n left: 1px;\n width: calc(100% - 2px);\n position: absolute;\n @apply gl-pointer-events-none gl-h-7 gl-rounded-b-base;\n}\n.duo-chat-message pre.scrim-top::before {\n background: linear-gradient(to bottom, transparent, var(--gl-background-color-default));\n top: 1px;\n @apply -gl-rotate-180;\n}\n.duo-chat-message pre.scrim-bottom::after {\n background: linear-gradient(to bottom, transparent, var(--gl-background-color-default));\n bottom: 1px;\n}\n.duo-chat-message pre code {\n @apply gl-text-sm;\n @apply gl-bg-transparent;\n @apply gl-block;\n @apply gl-whitespace-pre-wrap;\n @apply gl-break-all;\n}\n.duo-chat-message p:not(:last-of-type) {\n @apply gl-mb-4;\n}\n.duo-chat-message p:last-of-type {\n @apply gl-mb-0;\n}\n.duo-chat-message copy-code,\n.duo-chat-message insert-code-snippet {\n position: absolute;\n @apply gl-transition-all;\n @apply gl-opacity-0;\n right: 0.5rem;\n top: 0.5rem;\n}\n.duo-chat-message copy-code [role=tooltip],\n.duo-chat-message insert-code-snippet [role=tooltip] {\n display: none;\n @apply gl-bg-gray-100;\n width: max-content;\n position: absolute;\n top: 0;\n left: 0;\n @apply gl-rounded-base;\n}\n.duo-chat-message copy-code [role=tooltip] .arrow,\n.duo-chat-message insert-code-snippet [role=tooltip] .arrow {\n position: absolute;\n background: inherit;\n @apply gl-h-3 gl-w-3;\n transform: rotate(45deg);\n}\n.duo-chat-message copy-code {\n margin-right: 2.5rem;\n}\n\n.insert-code-hidden insert-code-snippet {\n display: none;\n}\n.insert-code-hidden copy-code {\n margin-right: 0;\n}\n\n.duo-chat-message-complete .duo-message-pre-block:focus copy-code,\n.duo-chat-message-complete .duo-message-pre-block:focus insert-code-snippet,\n.duo-chat-message-complete .duo-message-pre-block:focus .copy-to-clipboard-button-container,\n.duo-chat-message-complete .duo-message-pre-block:hover copy-code,\n.duo-chat-message-complete .duo-message-pre-block:hover insert-code-snippet,\n.duo-chat-message-complete .duo-message-pre-block:hover .copy-to-clipboard-button-container,\n.duo-chat-message-complete .duo-message-pre-block:has(button:focus) copy-code,\n.duo-chat-message-complete .duo-message-pre-block:has(button:focus) insert-code-snippet,\n.duo-chat-message-complete .duo-message-pre-block:has(button:focus) .copy-to-clipboard-button-container {\n opacity: 1;\n}\n\n.duo-chat-message-error > p {\n margin: 0;\n}\n\n.recents-wrapper .gl-accordion-item-header .gl-button.gl-button.btn-link {\n @apply gl-block;\n @apply gl-w-full;\n @apply gl-pl-3;\n @apply gl-py-2;\n @apply gl-rounded-none;\n @apply gl-shadow-none;\n @apply gl-no-underline;\n @apply gl-uppercase;\n @apply gl-font-bold;\n @apply gl-text-sm;\n}\n.recents-wrapper .gl-accordion-item-header > .collapse {\n @apply gl-ml-0;\n}\n.recents-wrapper .gl-text-base {\n @apply gl-mt-0;\n}\n\n.agentic-binary-feedback .feedback-colored-icon {\n animation: feedback-fade-out 0.3s ease-in-out forwards;\n animation-delay: 2s;\n will-change: opacity;\n}\n.agentic-binary-feedback .feedback-thanks {\n width: 0;\n overflow: hidden;\n pointer-events: none;\n animation: feedback-fade-in 0.3s ease-in-out forwards;\n animation-delay: 2s;\n will-change: opacity, width;\n}\n\n@keyframes feedback-fade-out {\n to {\n opacity: 0;\n width: 0;\n overflow: hidden;\n pointer-events: none;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .feedback-colored-icon,\n.feedback-thanks {\n animation: none;\n }\n}\n@keyframes feedback-fade-in {\n to {\n opacity: 1;\n width: auto;\n pointer-events: auto;\n }\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gitlab/duo-ui",
|
|
3
|
-
"version": "15.
|
|
3
|
+
"version": "15.7.0",
|
|
4
4
|
"description": "Duo UI Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
"@gitlab/fonts": "^1.3.1",
|
|
106
106
|
"@gitlab/stylelint-config": "6.2.2",
|
|
107
107
|
"@gitlab/svgs": "^3.152.0",
|
|
108
|
-
"@gitlab/ui": "^
|
|
108
|
+
"@gitlab/ui": "^127.0.0",
|
|
109
109
|
"@jest/test-sequencer": "^29.7.0",
|
|
110
110
|
"@rollup/plugin-commonjs": "^11.1.0",
|
|
111
111
|
"@rollup/plugin-node-resolve": "^7.1.3",
|
package/src/components/agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.scss
CHANGED
|
@@ -6,17 +6,20 @@
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
.feedback-thanks {
|
|
9
|
+
width: 0;
|
|
10
|
+
overflow: hidden;
|
|
9
11
|
pointer-events: none;
|
|
10
12
|
animation: feedback-fade-in 0.3s ease-in-out forwards;
|
|
11
13
|
animation-delay: 2s;
|
|
12
|
-
will-change: opacity;
|
|
14
|
+
will-change: opacity, width;
|
|
13
15
|
}
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
@keyframes feedback-fade-out {
|
|
17
19
|
to {
|
|
18
20
|
opacity: 0;
|
|
19
|
-
|
|
21
|
+
width: 0;
|
|
22
|
+
overflow: hidden;
|
|
20
23
|
pointer-events: none;
|
|
21
24
|
}
|
|
22
25
|
}
|
|
@@ -31,6 +34,7 @@
|
|
|
31
34
|
@keyframes feedback-fade-in {
|
|
32
35
|
to {
|
|
33
36
|
opacity: 1;
|
|
37
|
+
width: auto;
|
|
34
38
|
pointer-events: auto;
|
|
35
39
|
}
|
|
36
40
|
}
|
package/src/components/agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.vue
CHANGED
|
@@ -87,10 +87,7 @@ export default {
|
|
|
87
87
|
data-testid="thumb-down-icon-danger"
|
|
88
88
|
/>
|
|
89
89
|
</div>
|
|
90
|
-
<div
|
|
91
|
-
class="feedback-thanks gl-absolute gl-left-0 gl-top-0 gl-whitespace-nowrap gl-opacity-0"
|
|
92
|
-
data-testid="feedback-thanks"
|
|
93
|
-
>
|
|
90
|
+
<div class="feedback-thanks gl-whitespace-nowrap gl-opacity-0" data-testid="feedback-thanks">
|
|
94
91
|
<gl-icon name="check-xs" :size="16" class="gl-text-success" data-testid="check-icon" />
|
|
95
92
|
<span class="gl-text-sm gl-text-subtle">{{ $options.i18n.THANKS }}</span>
|
|
96
93
|
</div>
|
|
@@ -398,6 +398,14 @@ export default {
|
|
|
398
398
|
default: () => [],
|
|
399
399
|
validator: (urls) => urls.every((url) => typeof url === 'string'),
|
|
400
400
|
},
|
|
401
|
+
/**
|
|
402
|
+
* Whether to show agentic binary feedback (thumbs up/down) instead of the full feedback modal.
|
|
403
|
+
*/
|
|
404
|
+
isBinaryFeedbackEnabled: {
|
|
405
|
+
type: Boolean,
|
|
406
|
+
required: false,
|
|
407
|
+
default: false,
|
|
408
|
+
},
|
|
401
409
|
},
|
|
402
410
|
data() {
|
|
403
411
|
return {
|
|
@@ -913,6 +921,7 @@ export default {
|
|
|
913
921
|
:is-tool-approval-processing="isToolApprovalProcessing"
|
|
914
922
|
:working-directory="workingDirectory"
|
|
915
923
|
:trusted-urls="trustedUrls"
|
|
924
|
+
:is-binary-feedback-enabled="isBinaryFeedbackEnabled"
|
|
916
925
|
@track-feedback="onTrackFeedback"
|
|
917
926
|
@insert-code-snippet="onInsertCodeSnippet"
|
|
918
927
|
@copy-code-snippet="onCopyCodeSnippet"
|
|
@@ -83,6 +83,14 @@ export default {
|
|
|
83
83
|
required: false,
|
|
84
84
|
default: '',
|
|
85
85
|
},
|
|
86
|
+
/**
|
|
87
|
+
* Whether to show agentic binary feedback (thumbs up/down) instead of the full feedback modal.
|
|
88
|
+
*/
|
|
89
|
+
isBinaryFeedbackEnabled: {
|
|
90
|
+
type: Boolean,
|
|
91
|
+
required: false,
|
|
92
|
+
default: false,
|
|
93
|
+
},
|
|
86
94
|
},
|
|
87
95
|
computed: {
|
|
88
96
|
/**
|
|
@@ -118,6 +126,16 @@ export default {
|
|
|
118
126
|
const lastIndex = this.pendingToolApprovals.length - 1;
|
|
119
127
|
return this.pendingToolApprovals[lastIndex]?.approvalOptions;
|
|
120
128
|
},
|
|
129
|
+
/**
|
|
130
|
+
* Returns the index of the last assistant message in the messages array.
|
|
131
|
+
* @returns {number} Index of last assistant message, or -1 if none found
|
|
132
|
+
*/
|
|
133
|
+
lastAssistantMessageIndex() {
|
|
134
|
+
return this.messages.findLastIndex(
|
|
135
|
+
(msg) =>
|
|
136
|
+
msg?.role?.toLowerCase() === 'assistant' || msg?.message_type?.toLowerCase() === 'agent'
|
|
137
|
+
);
|
|
138
|
+
},
|
|
121
139
|
},
|
|
122
140
|
methods: {
|
|
123
141
|
onTrackFeedback(event) {
|
|
@@ -176,6 +194,8 @@ export default {
|
|
|
176
194
|
:is-cancelled="canceledRequestIds.includes(msg.requestId)"
|
|
177
195
|
:with-feedback="withFeedback"
|
|
178
196
|
:working-directory="workingDirectory"
|
|
197
|
+
:is-binary-feedback-enabled="isBinaryFeedbackEnabled"
|
|
198
|
+
:show-binary-feedback="index === lastAssistantMessageIndex"
|
|
179
199
|
@track-feedback="onTrackFeedback"
|
|
180
200
|
@insert-code-snippet="onInsertCodeSnippet"
|
|
181
201
|
@copy-code-snippet="onCopyCodeSnippet"
|
|
@@ -15,6 +15,7 @@ import { MESSAGE_MODEL_ROLES, SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED } from '.
|
|
|
15
15
|
import DocumentationSources from '../duo_chat_message_sources/duo_chat_message_sources.vue';
|
|
16
16
|
// eslint-disable-next-line no-restricted-imports
|
|
17
17
|
import { copyToClipboard, concatUntilEmpty } from '../utils';
|
|
18
|
+
import AgenticBinaryFeedback from '../../../agentic_chat/components/agentic_binary_feedback/agentic_binary_feedback.vue';
|
|
18
19
|
import MessageFeedback from './message_feedback.vue';
|
|
19
20
|
import MarkdownRenderer from './markdown_renderer.vue';
|
|
20
21
|
import { CopyCodeElement } from './copy_code_element';
|
|
@@ -41,6 +42,7 @@ export default {
|
|
|
41
42
|
ADD_TAGS: ['copy-code', 'insert-code-snippet'],
|
|
42
43
|
},
|
|
43
44
|
components: {
|
|
45
|
+
AgenticBinaryFeedback,
|
|
44
46
|
DocumentationSources,
|
|
45
47
|
DuoChatContextItemSelections,
|
|
46
48
|
MessageFeedback,
|
|
@@ -105,6 +107,22 @@ export default {
|
|
|
105
107
|
required: false,
|
|
106
108
|
default: '',
|
|
107
109
|
},
|
|
110
|
+
/**
|
|
111
|
+
* Whether to show agentic binary feedback (thumbs up/down) instead of the full feedback modal.
|
|
112
|
+
*/
|
|
113
|
+
isBinaryFeedbackEnabled: {
|
|
114
|
+
type: Boolean,
|
|
115
|
+
required: false,
|
|
116
|
+
default: false,
|
|
117
|
+
},
|
|
118
|
+
/**
|
|
119
|
+
* Whether to show the binary feedback UI (always visible) vs hover behavior for older messages.
|
|
120
|
+
*/
|
|
121
|
+
showBinaryFeedback: {
|
|
122
|
+
type: Boolean,
|
|
123
|
+
required: false,
|
|
124
|
+
default: false,
|
|
125
|
+
},
|
|
108
126
|
},
|
|
109
127
|
data() {
|
|
110
128
|
return {
|
|
@@ -328,7 +346,7 @@ export default {
|
|
|
328
346
|
<template>
|
|
329
347
|
<div
|
|
330
348
|
ref="content-wrapper"
|
|
331
|
-
class="duo-chat-message-container gl-flex gl-flex-col gl-gap-4 gl-text-base gl-break-anywhere"
|
|
349
|
+
class="duo-chat-message-container gl-group gl-flex gl-flex-col gl-gap-4 gl-text-base gl-break-anywhere"
|
|
332
350
|
:class="{
|
|
333
351
|
'gl-pr-7': isAssistantMessage,
|
|
334
352
|
'gl-justify-end gl-pl-7': isUserMessage,
|
|
@@ -389,9 +407,29 @@ export default {
|
|
|
389
407
|
v-if="isAssistantMessage"
|
|
390
408
|
class="duo-chat-message-actions -gl-ml-2 gl-flex gl-items-start gl-gap-3"
|
|
391
409
|
>
|
|
410
|
+
<gl-animated-loader-icon v-if="isChunkAndNotCancelled" :is-on="true" />
|
|
411
|
+
<template v-if="shouldShowFeedbackLink && isBinaryFeedbackEnabled">
|
|
412
|
+
<agentic-binary-feedback
|
|
413
|
+
v-if="showBinaryFeedback"
|
|
414
|
+
data-testid="agentic-feedback-latest"
|
|
415
|
+
@feedback="logEvent"
|
|
416
|
+
/>
|
|
417
|
+
<div
|
|
418
|
+
v-else
|
|
419
|
+
class="group-hover:gl-opacity-100 gl-opacity-0 gl-transition-opacity"
|
|
420
|
+
data-testid="agentic-feedback-hover-container"
|
|
421
|
+
>
|
|
422
|
+
<agentic-binary-feedback @feedback="logEvent" />
|
|
423
|
+
</div>
|
|
424
|
+
</template>
|
|
425
|
+
<message-feedback
|
|
426
|
+
v-else-if="shouldShowFeedbackLink"
|
|
427
|
+
:has-feedback="hasFeedback"
|
|
428
|
+
@feedback="logEvent"
|
|
429
|
+
/>
|
|
392
430
|
<gl-button
|
|
393
431
|
v-if="shouldShowCopyAction"
|
|
394
|
-
v-gl-tooltip
|
|
432
|
+
v-gl-tooltip
|
|
395
433
|
:title="copied ? $options.i18n.CHAT_MESSAGE_COPIED : $options.i18n.CHAT_MESSAGE_COPY"
|
|
396
434
|
:icon="copied ? 'check-circle-filled' : 'copy-to-clipboard'"
|
|
397
435
|
:class="{ '!gl-text-success': copied, '!gl-text-subtle': !copied }"
|
|
@@ -400,12 +438,6 @@ export default {
|
|
|
400
438
|
@click="copyMessage"
|
|
401
439
|
@focusout="copied = false"
|
|
402
440
|
/>
|
|
403
|
-
<gl-animated-loader-icon v-if="isChunkAndNotCancelled" :is-on="true" />
|
|
404
|
-
<message-feedback
|
|
405
|
-
v-if="shouldShowFeedbackLink"
|
|
406
|
-
:has-feedback="hasFeedback"
|
|
407
|
-
@feedback="logEvent"
|
|
408
|
-
/>
|
|
409
441
|
</div>
|
|
410
442
|
|
|
411
443
|
<duo-chat-context-item-selections
|