@gitlab/duo-ui 14.1.1 โ†’ 14.3.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.
Files changed (28) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/components/agentic_chat/web_agentic_duo_chat.js +7 -6
  3. package/dist/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.js +1 -44
  4. package/dist/components/chat/components/duo_chat_message_tool_approval/components/base_tool_params.js +1 -1
  5. package/dist/components/chat/components/duo_chat_message_tool_approval/components/create_commit_tool_params.js +1 -1
  6. package/dist/components/chat/components/duo_chat_message_tool_approval/components/pre_block.js +77 -2
  7. package/dist/components/chat/components/duo_chat_message_tool_approval/components/tool_params_json_view.js +1 -1
  8. package/dist/components/chat/components/duo_chat_message_tool_approval/services/highlight.js +21 -0
  9. package/dist/components/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.js +1 -1
  10. package/dist/components/chat/web_duo_chat.js +14 -3
  11. package/dist/components.css +1 -1
  12. package/dist/components.css.map +1 -1
  13. package/dist/tailwind.css +1 -1
  14. package/dist/tailwind.css.map +1 -1
  15. package/package.json +3 -1
  16. package/src/components/agentic_chat/agentic_duo_chat.scss +1 -2
  17. package/src/components/agentic_chat/web_agentic_duo_chat.vue +26 -16
  18. package/src/components/chat/components/duo_chat_message/duo_chat_message.scss +11 -0
  19. package/src/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.vue +4 -60
  20. package/src/components/chat/components/duo_chat_message_tool_approval/components/base_tool_params.vue +1 -1
  21. package/src/components/chat/components/duo_chat_message_tool_approval/components/create_commit_tool_params.vue +2 -2
  22. package/src/components/chat/components/duo_chat_message_tool_approval/components/pre_block.vue +96 -2
  23. package/src/components/chat/components/duo_chat_message_tool_approval/components/tool_params_json_view.vue +1 -1
  24. package/src/components/chat/components/duo_chat_message_tool_approval/services/highlight.js +18 -0
  25. package/src/components/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.vue +3 -3
  26. package/src/components/chat/duo_chat.scss +1 -1
  27. package/src/components/chat/web_duo_chat.vue +29 -8
  28. package/translations.js +4 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [14.3.0](https://gitlab.com/gitlab-org/duo-ui/compare/v14.2.0...v14.3.0) (2025-11-20)
2
+
3
+
4
+ ### Features
5
+
6
+ * Update styling of chat empty state ([38fb901](https://gitlab.com/gitlab-org/duo-ui/commit/38fb9015e9e57ec92c24451cd07cbe91b7c40d1d))
7
+
8
+ # [14.2.0](https://gitlab.com/gitlab-org/duo-ui/compare/v14.1.1...v14.2.0) (2025-11-20)
9
+
10
+
11
+ ### Features
12
+
13
+ * Tool code block improvements ([967859d](https://gitlab.com/gitlab-org/duo-ui/commit/967859d7ac0d3d2888529c2adc741f437717f8de))
14
+
1
15
  ## [14.1.1](https://gitlab.com/gitlab-org/duo-ui/compare/v14.1.0...v14.1.1) (2025-11-20)
2
16
 
3
17
 
@@ -14,7 +14,8 @@ const i18n = {
14
14
  CHAT_DEFAULT_TITLE: translate('WebAgenticDuoChat.chatDefaultTitle', 'GitLab Duo Agentic Chat'),
15
15
  CHAT_HISTORY_TITLE: translate('WebAgenticDuoChat.chatHistoryTitle', 'Chat history'),
16
16
  CHAT_DISCLAIMER: translate('WebAgenticDuoChat.chatDisclamer', 'Responses may be inaccurate. Verify before use.'),
17
- CHAT_EMPTY_STATE_TITLE: translate('WebAgenticDuoChat.chatEmptyStateTitle', 'I am GitLab Duo Agentic Chat, your personal AI-powered assistant. How can I help you today?'),
17
+ CHAT_EMPTY_STATE_EMOJI: '๐Ÿ‘‹',
18
+ CHAT_EMPTY_STATE_TITLE: translate('WebAgenticDuoChat.chatEmptyStateTitle', 'I am GitLab Duo Agentic Chat, your personal AI-powered assistant.'),
18
19
  CHAT_EMPTY_STATE_DESCRIPTION: translate('WebAgenticDuoChat.chatEmptyStateDescription', 'How can I help you today?'),
19
20
  CHAT_PROMPT_PLACEHOLDER_DEFAULT: translate('WebAgenticDuoChat.chatPromptPlaceholderDefault', "Let's work through this together..."),
20
21
  CHAT_MODEL_PLACEHOLDER: translate('WebAgenticDuoChat.chatModelPlaceholder', 'GitLab Duo Agentic Chat'),
@@ -411,14 +412,14 @@ var script = {
411
412
  agentName: this.agentName
412
413
  });
413
414
  },
414
- emptyStateText() {
415
+ emptyStateMainText() {
415
416
  if (this.emptyStateTitle) {
416
417
  return this.emptyStateTitle;
417
418
  }
418
- if (this.agentName) {
419
- return i18n.CHAT_EMPTY_STATE_DESCRIPTION;
420
- }
421
419
  return i18n.CHAT_EMPTY_STATE_TITLE;
420
+ },
421
+ emptyStateSubText() {
422
+ return i18n.CHAT_EMPTY_STATE_DESCRIPTION;
422
423
  }
423
424
  },
424
425
  watch: {
@@ -724,7 +725,7 @@ var script = {
724
725
  const __vue_script__ = script;
725
726
 
726
727
  /* template */
727
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"markdown-code-block duo-chat web-only gl-bottom-0 gl-flex gl-max-h-full gl-flex-grow gl-flex-col",attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('web-duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"error":_vm.error,"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"session-id":_vm.sessionId,"agents":_vm.agents,"show-studio-header":_vm.showStudioHeader},on:{"go-back":_vm.onGoBack,"new-chat":_vm.onNewChat,"close":_vm.hideChat},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",class:{ 'gl-border-t': !_vm.showStudioHeader },attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-gray-900 gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[_c('div',{staticClass:"gl-heading-display"},[_vm._v("๐Ÿ‘‹")]),_vm._v(" "),(_vm.agentName)?_c('h2',{staticClass:"gl-heading-2 gl-mb-4",attrs:{"data-testid":"gl-duo-chat-empty-state-greeting"}},[_vm._v("\n "+_vm._s(_vm.emptyStateGreeting)+"\n ")]):_vm._e(),_vm._v(" "),_c('p',{staticClass:"!gl-mb-7 gl-text-base",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateText)+"\n ")]),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],1)]:_vm._e(),_vm._v(" "),(_vm.isLoading)?_c('duo-chat-loader',{key:"loader",attrs:{"tool-name":_vm.toolName}}):_vm._e(),_vm._v(" "),_c('div',{key:"anchor",ref:"anchor",staticClass:"scroll-anchor"})],2)],1),_vm._v(" "),(_vm.isChatAvailable && !_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,"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"character-count-limit":_vm.maxPromptLength,"textarea-classes":[
728
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"markdown-code-block duo-chat web-only gl-bottom-0 gl-flex gl-max-h-full gl-flex-grow gl-flex-col",attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('web-duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"error":_vm.error,"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"session-id":_vm.sessionId,"agents":_vm.agents,"show-studio-header":_vm.showStudioHeader},on:{"go-back":_vm.onGoBack,"new-chat":_vm.onNewChat,"close":_vm.hideChat},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",class:{ 'gl-border-t': !_vm.showStudioHeader },attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"show-delimiter":index > 0,"with-feedback":_vm.withFeedback,"is-tool-approval-processing":_vm.isToolApprovalProcessing,"working-directory":_vm.workingDirectory},on:{"track-feedback":_vm.onTrackFeedback,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet,"copy-message":_vm.onCopyMessage,"get-context-item-content":_vm.onGetContextItemContent,"approve-tool":_vm.onApproveToolCall,"deny-tool":_vm.onDenyToolCall,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-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)]:_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.isChatAvailable && !_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,"data-testid":"chat-prompt-input","placeholder":_vm.inputPlaceholder,"character-count-limit":_vm.maxPromptLength,"textarea-classes":[
728
729
  '!gl-h-full',
729
730
  '!gl-bg-transparent',
730
731
  '!gl-py-4',
@@ -1,7 +1,5 @@
1
1
  import isEmpty from 'lodash/isEmpty';
2
- import { GlTooltipDirective, GlButton } from '@gitlab/ui';
3
2
  import PreBlock from '../../duo_chat_message_tool_approval/components/pre_block';
4
- import { checkClipboardPermissions } from '../utils';
5
3
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
6
4
 
7
5
  function makePretty(value) {
@@ -30,11 +28,7 @@ function makePretty(value) {
30
28
  }
31
29
  var script = {
32
30
  name: 'ToolKvSection',
33
- directives: {
34
- GlTooltip: GlTooltipDirective
35
- },
36
31
  components: {
37
- GlButton,
38
32
  PreBlock
39
33
  },
40
34
  inject: {
@@ -54,12 +48,6 @@ var script = {
54
48
  type: [String, Number, Boolean, Array, Object, null],
55
49
  required: false,
56
50
  default: null
57
- },
58
- // Optional monospace + scroll (useful for JSON / logs)
59
- maxHeight: {
60
- type: String,
61
- required: false,
62
- default: '260px'
63
51
  }
64
52
  },
65
53
  computed: {
@@ -69,37 +57,6 @@ var script = {
69
57
  hasContent() {
70
58
  return this.prettyText && this.prettyText.length > 0;
71
59
  }
72
- },
73
- methods: {
74
- async onCopyCodeSnippet() {
75
- const textToCopy = this.prettyText;
76
- const hasClipboardPermission = await checkClipboardPermissions();
77
- try {
78
- const event = new CustomEvent('copy-code-snippet', {
79
- bubbles: true,
80
- detail: {
81
- code: textToCopy
82
- }
83
- });
84
- // Emit custom event for VS Code and other environments
85
- // This bubbles up to parent components that handle clipboard operations
86
- this.$emit('copy-code-snippet', {
87
- detail: {
88
- code: textToCopy
89
- }
90
- });
91
- this.$el.dispatchEvent(event);
92
-
93
- // If we have clipboard permission, also copy directly
94
- if (hasClipboardPermission) {
95
- await navigator.clipboard.writeText(textToCopy);
96
- }
97
- this.$emit('copied', this.title);
98
- } catch (e) {
99
- // eslint-disable-next-line no-console
100
- console.warn('Failed to copy:', e);
101
- }
102
- }
103
60
  }
104
61
  };
105
62
 
@@ -107,7 +64,7 @@ var script = {
107
64
  const __vue_script__ = script;
108
65
 
109
66
  /* template */
110
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasContent)?_c('figure',{staticClass:"gl-mb-0 gl-rounded-[0.75rem] gl-bg-strong gl-p-2 forced-colors:gl-border"},[_c('figcaption',{staticClass:"gl-display-flex gl-align-items-center gl-gap-2 gl-px-4 gl-py-3 gl-font-monospace gl-text-base gl-font-semibold gl-text-subtle",attrs:{"data-testid":"tool-section-header"}},[_vm._v("\n "+_vm._s(_vm.title)+"\n ")]),_vm._v(" "),_c('div',{staticClass:"gl-relative gl-block gl-overflow-auto gl-rounded-base",style:({ maxHeight: _vm.maxHeight, overflow: 'auto' })},[_c('div',{staticClass:"gl-absolute gl-right-5 gl-top-5 gl-z-1"},[(_vm.prettyText)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip.viewport",value:({ boundary: 'viewport' }),expression:"{ boundary: 'viewport' }",modifiers:{"viewport":true}}],attrs:{"size":"small","icon":"copy-to-clipboard","title":"Copy to clipboard","aria-label":"Copy to clipboard"},on:{"click":function($event){$event.stopPropagation();return _vm.onCopyCodeSnippet.apply(null, arguments)}}}):_vm._e()],1),_vm._v(" "),_c('pre-block',{ref:"content",staticClass:"gl-m-0 !gl-border-0",style:({ maxHeight: _vm.maxHeight })},[_vm._v(_vm._s(_vm.prettyText))])],1)]):_vm._e()};
67
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasContent)?_c('figure',{staticClass:"gl-mb-0 gl-rounded-[0.75rem] gl-bg-strong gl-p-2 forced-colors:gl-border"},[_c('figcaption',{staticClass:"gl-display-flex gl-align-items-center gl-gap-2 gl-px-4 gl-py-3 gl-font-monospace gl-text-base gl-font-semibold gl-text-subtle",attrs:{"data-testid":"tool-section-header"}},[_vm._v("\n "+_vm._s(_vm.title)+"\n ")]),_vm._v(" "),_c('pre-block',{ref:"content",staticClass:"gl-m-0 !gl-border-0",attrs:{"language":"json"}},[_vm._v(_vm._s(_vm.prettyText))])],1):_vm._e()};
111
68
  var __vue_staticRenderFns__ = [];
112
69
 
113
70
  /* style */
@@ -206,7 +206,7 @@ var script = {
206
206
  const __vue_script__ = script;
207
207
 
208
208
  /* template */
209
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-flex gl-flex-col gl-gap-3"},[(_vm.hasMetadataProperties)?_c('div',{staticClass:"gl-flex gl-flex-wrap gl-gap-2"},_vm._l((_vm.metadataProperties),function(property){return _c('span',{key:property.key,staticClass:"gl-overflow-hidden"},[(property.type == 'url')?_c('gl-badge',{attrs:{"icon":property.icon,"href":property.value,"title":property.value}},[_c('span',{staticClass:"gl-truncate"},[_vm._v("\n "+_vm._s(property.value)+"\n ")])]):_c('gl-badge',{attrs:{"icon":_vm.processPropertyIcon(property.icon, property.value)}},[_vm._v("\n "+_vm._s(property.label)+": "+_vm._s(_vm.formatPropertyValue(property.value))+"\n ")])],1)}),0):_vm._e(),_vm._v(" "),(_vm.message)?_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.message),expression:"message"}]}):_vm._t("default"),_vm._v(" "),(_vm.message || _vm.description)?_c('gl-accordion',{staticClass:"-gl-ml-2",attrs:{"header-level":3}},[(_vm.description)?_c('gl-accordion-item',{staticClass:"gl-mb-3",attrs:{"title":_vm.accordionTitle}},[_c('pre-block',[_vm._v(_vm._s(_vm.description))])],1):_vm._e(),_vm._v(" "),(_vm.withJsonView)?_c('gl-accordion-item',{attrs:{"title":_vm.$options.i18n.EXPAND_JSON_VIEW_TITLE}},[_c('tool-params-json-view',{attrs:{"tool-params":_vm.toolParams}})],1):_vm._e()],1):(!_vm.message && !_vm.description && _vm.withJsonView)?_c('tool-params-json-view',{attrs:{"tool-params":_vm.toolParams}}):_vm._e()],2)};
209
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-flex gl-flex-col gl-gap-3"},[(_vm.hasMetadataProperties)?_c('div',{staticClass:"gl-flex gl-flex-wrap gl-gap-2"},_vm._l((_vm.metadataProperties),function(property){return _c('span',{key:property.key,staticClass:"gl-overflow-hidden"},[(property.type == 'url')?_c('gl-badge',{attrs:{"icon":property.icon,"href":property.value,"title":property.value}},[_c('span',{staticClass:"gl-truncate"},[_vm._v("\n "+_vm._s(property.value)+"\n ")])]):_c('gl-badge',{attrs:{"icon":_vm.processPropertyIcon(property.icon, property.value)}},[_vm._v("\n "+_vm._s(property.label)+": "+_vm._s(_vm.formatPropertyValue(property.value))+"\n ")])],1)}),0):_vm._e(),_vm._v(" "),(_vm.message)?_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.message),expression:"message"}]}):_vm._t("default"),_vm._v(" "),(_vm.message || _vm.description)?_c('gl-accordion',{staticClass:"-gl-ml-2",attrs:{"header-level":3}},[(_vm.description)?_c('gl-accordion-item',{staticClass:"gl-mb-3",attrs:{"title":_vm.accordionTitle}},[_c('pre-block',{attrs:{"language":"markdown"}},[_vm._v(_vm._s(_vm.description))])],1):_vm._e(),_vm._v(" "),(_vm.withJsonView)?_c('gl-accordion-item',{attrs:{"title":_vm.$options.i18n.EXPAND_JSON_VIEW_TITLE}},[_c('tool-params-json-view',{attrs:{"tool-params":_vm.toolParams}})],1):_vm._e()],1):(!_vm.message && !_vm.description && _vm.withJsonView)?_c('tool-params-json-view',{attrs:{"tool-params":_vm.toolParams}}):_vm._e()],2)};
210
210
  var __vue_staticRenderFns__ = [];
211
211
 
212
212
  /* style */
@@ -123,7 +123,7 @@ const __vue_script__ = script;
123
123
  /* template */
124
124
  var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-tool-params',{attrs:{"tool-params":_vm.toolParams}},[_c('div',[_c('gl-sprintf',{attrs:{"message":_vm.branch
125
125
  ? _vm.$options.i18n.COMMIT_SUMMARY_MESSAGE
126
- : _vm.$options.i18n.COMMIT_SUMMARY_AUTO_BRANCH_MESSAGE},scopedSlots:_vm._u([(_vm.branch)?{key:"branch",fn:function(){return [_c('code',[_vm._v(_vm._s(_vm.branch))])]},proxy:true}:null],null,true)}),_vm._v("\n "+_vm._s(_vm.actionsCountMessage)+"\n ")],1),_vm._v(" "),_c('gl-accordion',{staticClass:"-gl-ml-2",attrs:{"header-level":3}},[(_vm.commitMessage)?_c('gl-accordion-item',{staticClass:"gl-mb-3",attrs:{"title":_vm.$options.i18n.READ_COMMIT_MESSAGE}},[_c('pre-block',[_vm._v(_vm._s(_vm.commitMessage))])],1):_vm._e(),_vm._v(" "),(_vm.actionsCount)?_c('gl-accordion-item',{attrs:{"title":_vm.$options.i18n.EXPAND_CHANGES}},[_c('gl-accordion',{attrs:{"header-level":4}},_vm._l((_vm.actions),function(action,index){return _c('gl-accordion-item',{key:index,staticClass:"gl-mb-3",attrs:{"title":_vm.getActionTitle(action)}},[_c('pre-block',{staticClass:"language-diff"},[_vm._v(_vm._s(_vm.getActionContent(action)))])],1)}),1)],1):_vm._e()],1)],1)};
126
+ : _vm.$options.i18n.COMMIT_SUMMARY_AUTO_BRANCH_MESSAGE},scopedSlots:_vm._u([(_vm.branch)?{key:"branch",fn:function(){return [_c('code',[_vm._v(_vm._s(_vm.branch))])]},proxy:true}:null],null,true)}),_vm._v("\n "+_vm._s(_vm.actionsCountMessage)+"\n ")],1),_vm._v(" "),_c('gl-accordion',{staticClass:"-gl-ml-2",attrs:{"header-level":3}},[(_vm.commitMessage)?_c('gl-accordion-item',{staticClass:"gl-mb-3",attrs:{"title":_vm.$options.i18n.READ_COMMIT_MESSAGE}},[_c('pre-block',{attrs:{"language":"markdown"}},[_vm._v(_vm._s(_vm.commitMessage))])],1):_vm._e(),_vm._v(" "),(_vm.actionsCount)?_c('gl-accordion-item',{attrs:{"title":_vm.$options.i18n.EXPAND_CHANGES}},[_c('gl-accordion',{attrs:{"header-level":4}},_vm._l((_vm.actions),function(action,index){return _c('gl-accordion-item',{key:index,staticClass:"gl-mb-3",attrs:{"title":_vm.getActionTitle(action)}},[_c('pre-block',{attrs:{"language":"diff"}},[_vm._v(_vm._s(_vm.getActionContent(action)))])],1)}),1)],1):_vm._e()],1)],1)};
127
127
  var __vue_staticRenderFns__ = [];
128
128
 
129
129
  /* style */
@@ -1,9 +1,84 @@
1
+ import { GlTooltipDirective, GlButton } from '@gitlab/ui';
2
+ import { translate } from '../../../../../utils/i18n';
3
+ import { checkClipboardPermissions } from '../../duo_chat_message/utils';
4
+ import { highlightElement } from '../services/highlight';
1
5
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
2
6
 
7
+ var script = {
8
+ name: 'PreBlock',
9
+ directives: {
10
+ GlTooltip: GlTooltipDirective
11
+ },
12
+ components: {
13
+ GlButton
14
+ },
15
+ props: {
16
+ language: {
17
+ type: String,
18
+ required: false,
19
+ default: 'plaintext'
20
+ }
21
+ },
22
+ async mounted() {
23
+ await this.$nextTick();
24
+ this.applyHighlight();
25
+ },
26
+ methods: {
27
+ async applyHighlight() {
28
+ try {
29
+ const codeElement = this.$el.querySelector('code');
30
+ if (codeElement) {
31
+ highlightElement(codeElement);
32
+ }
33
+ } catch (error) {
34
+ // Silently fail if highlight.js is not available
35
+ // eslint-disable-next-line no-console
36
+ console.warn('highlight.js could not be loaded:', error);
37
+ }
38
+ },
39
+ async copyToClipboard() {
40
+ try {
41
+ const textToCopy = this.$refs.codeElement.textContent;
42
+ const hasClipboardPermission = await checkClipboardPermissions();
43
+ const event = new CustomEvent('copy-code-snippet', {
44
+ bubbles: true,
45
+ detail: {
46
+ code: textToCopy
47
+ }
48
+ });
49
+ // Emit custom event for VS Code and other environments
50
+ // This bubbles up to parent components that handle clipboard operations
51
+ this.$emit('copy-code-snippet', {
52
+ detail: {
53
+ code: textToCopy
54
+ }
55
+ });
56
+ this.$el.dispatchEvent(event);
57
+
58
+ // If we have clipboard permission, also copy directly
59
+ if (hasClipboardPermission) {
60
+ await navigator.clipboard.writeText(textToCopy);
61
+ }
62
+ this.$emit('copied', this.title);
63
+ setTimeout(() => {
64
+ this.$refs.copyToClipboardButton.$el.blur();
65
+ }, 100);
66
+ } catch (e) {
67
+ // eslint-disable-next-line no-console
68
+ console.warn('Failed to copy:', e);
69
+ }
70
+ }
71
+ },
72
+ i18n: {
73
+ COPY_TO_CLIPBOARD_TEXT: translate('PreBlock.COPY_TO_CLIPBOARD_TEXT', 'Copy to clipboard')
74
+ }
75
+ };
76
+
3
77
  /* script */
78
+ const __vue_script__ = script;
4
79
 
5
80
  /* template */
6
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('pre',{staticClass:"js-syntax-highlight gl-border gl-grid gl-max-h-48 gl-overflow-auto gl-whitespace-pre-wrap gl-text-pretty gl-rounded-lg gl-border-strong !gl-p-5 gl-font-monospace gl-text-strong"},[_c('code',{staticClass:"!gl-leading-20 gl-break-all"},[_vm._t("default")],2)])};
81
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('pre',{staticClass:"duo-message-pre-block code code-syntax-highlight-theme !focus:gl-focus gl-border !gl-relative gl-grid gl-max-h-48 gl-overflow-auto gl-whitespace-pre-wrap gl-text-pretty gl-rounded-lg gl-border-strong !gl-p-5 gl-font-monospace gl-text-strong",attrs:{"tabindex":"0"}},[_c('span',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip.hover.focus.blur",modifiers:{"hover":true,"focus":true,"blur":true}}],staticClass:"copy-to-clipboard-button-container gl-inline-flex gl-absolute gl-right-5 gl-top-4 gl-z-1 gl-opacity-0 gl-transition-opacity",attrs:{"title":_vm.$options.i18n.COPY_TO_CLIPBOARD_TEXT}},[_vm._v("\n"),_c('gl-button',{ref:"copyToClipboardButton",attrs:{"icon":"copy-to-clipboard","aria-label":_vm.$options.i18n.COPY_TO_CLIPBOARD_TEXT},on:{"click":function($event){$event.stopPropagation();return _vm.copyToClipboard.apply(null, arguments)}}}),_vm._v("\n")],1),_vm._v("\n \n"),_c('code',{ref:"codeElement",staticClass:"!gl-leading-20 gl-break-all",class:("language-" + _vm.language)},[_vm._t("default")],2)])};
7
82
  var __vue_staticRenderFns__ = [];
8
83
 
9
84
  /* style */
@@ -25,7 +100,7 @@ var __vue_staticRenderFns__ = [];
25
100
  const __vue_component__ = __vue_normalize__(
26
101
  { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
27
102
  __vue_inject_styles__,
28
- {},
103
+ __vue_script__,
29
104
  __vue_scope_id__,
30
105
  __vue_is_functional_template__,
31
106
  __vue_module_identifier__,
@@ -28,7 +28,7 @@ var script = {
28
28
  const __vue_script__ = script;
29
29
 
30
30
  /* template */
31
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('figure',{staticClass:"gl-m-0 gl-flex gl-flex-col gl-gap-2"},[_c('figcaption',{staticClass:"gl-text-subtle"},[_vm._v("\n "+_vm._s(_vm.$options.i18n.REQUEST_TEXT)+"\n ")]),_vm._v(" "),(_vm.hasToolParams)?_c('pre-block',{staticClass:"language-json",attrs:{"data-testid":"tool-parameters"}},[_vm._v(_vm._s(JSON.stringify(_vm.toolParams, null, 2)))]):_c('span',{staticClass:"gl-text-sm gl-text-gray-500",attrs:{"data-testid":"no-parameters-message"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.NO_PARAMETERS_TEXT)+"\n ")])],1)};
31
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('figure',{staticClass:"gl-m-0 gl-flex gl-flex-col gl-gap-2"},[_c('figcaption',{staticClass:"gl-text-subtle"},[_vm._v("\n "+_vm._s(_vm.$options.i18n.REQUEST_TEXT)+"\n ")]),_vm._v(" "),(_vm.hasToolParams)?_c('pre-block',{attrs:{"language":"json","data-testid":"tool-parameters"}},[_vm._v(_vm._s(JSON.stringify(_vm.toolParams, null, 2)))]):_c('span',{staticClass:"gl-text-sm gl-text-gray-500",attrs:{"data-testid":"no-parameters-message"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.NO_PARAMETERS_TEXT)+"\n ")])],1)};
32
32
  var __vue_staticRenderFns__ = [];
33
33
 
34
34
  /* style */
@@ -0,0 +1,21 @@
1
+ import highlightjs from 'highlight.js/lib/core';
2
+ import json from 'highlight.js/lib/languages/json';
3
+ import diff from 'highlight.js/lib/languages/diff';
4
+ import markdown from 'highlight.js/lib/languages/markdown';
5
+
6
+ const highlightElement = element => {
7
+ if (!highlightjs.listLanguages().includes('json')) {
8
+ highlightjs.registerLanguage('json', json);
9
+ highlightjs.registerLanguage('diff', diff);
10
+ highlightjs.registerLanguage('markdown', markdown);
11
+ }
12
+ if (typeof window.requestIdleCallback === 'function') {
13
+ window.requestIdleCallback(() => highlightjs.highlightElement(element), {
14
+ timeout: 500
15
+ });
16
+ } else {
17
+ window.requestAnimationFrame(() => highlightjs.highlightElement(element));
18
+ }
19
+ };
20
+
21
+ export { highlightElement };
@@ -29,7 +29,7 @@ var script = {
29
29
  const __vue_script__ = script;
30
30
 
31
31
  /* template */
32
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-mt-5 gl-flex gl-flex-col gl-items-start gl-gap-3"},_vm._l((_vm.prompts),function(prompt,index){return _c('gl-button',{key:("question-" + index),staticClass:"duo-chat-suggestion-button gl-text-left",attrs:{"category":"secondary","variant":"default"},on:{"click":function($event){return _vm.handleClick(prompt)}}},[_c('span',{staticClass:"gl-whitespace-normal"},[_vm._v(_vm._s(prompt))])])}),1)};
32
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-mt-5 gl-flex gl-flex-col gl-items-start gl-gap-4"},_vm._l((_vm.prompts),function(prompt,index){return _c('gl-button',{key:("question-" + index),staticClass:"duo-chat-suggestion-button !gl-py-4 gl-text-left",attrs:{"category":"secondary","variant":"default"},on:{"click":function($event){return _vm.handleClick(prompt)}}},[_c('span',{staticClass:"gl-whitespace-normal gl-px-2"},[_vm._v(_vm._s(prompt))])])}),1)};
33
33
  var __vue_staticRenderFns__ = [];
34
34
 
35
35
  /* style */
@@ -14,7 +14,9 @@ const i18n = {
14
14
  CHAT_DEFAULT_TITLE: translate('WebDuoChat.chatDefaultTitle', 'GitLab Duo Chat'),
15
15
  CHAT_HISTORY_TITLE: translate('WebDuoChat.chatHistoryTitle', 'Chat history'),
16
16
  CHAT_DISCLAMER: translate('WebDuoChat.chatDisclamer', 'Responses may be inaccurate. Verify before use.'),
17
- CHAT_EMPTY_STATE_TITLE: translate('WebDuoChat.chatEmptyStateTitle', 'I am GitLab Duo Chat, your personal AI-powered assistant. How can I help you today?'),
17
+ CHAT_EMPTY_STATE_EMOJI: '๐Ÿ‘‹',
18
+ CHAT_EMPTY_STATE_TITLE: translate('WebDuoChat.chatEmptyStateTitle', 'I am GitLab Duo Chat, your personal AI-powered assistant.'),
19
+ CHAT_EMPTY_STATE_DESCRIPTION: translate('WebDuoChat.chatEmptyStateDescription', 'How can I help you today?'),
18
20
  CHAT_PROMPT_PLACEHOLDER_DEFAULT: translate('WebDuoChat.chatPromptPlaceholderDefault', "Let's work through this together..."),
19
21
  CHAT_PROMPT_PLACEHOLDER_WITH_COMMANDS: translate('WebDuoChat.chatPromptPlaceholderWithCommands', 'Type /help to learn more'),
20
22
  CHAT_SUBMIT_LABEL: translate('WebDuoChat.chatSubmitLabel', 'Send chat message.'),
@@ -198,7 +200,7 @@ var script = {
198
200
  emptyStateTitle: {
199
201
  type: String,
200
202
  required: false,
201
- default: i18n.CHAT_EMPTY_STATE_TITLE
203
+ default: null
202
204
  },
203
205
  /**
204
206
  * Override the default chat prompt placeholder text.
@@ -346,6 +348,15 @@ var script = {
346
348
  hasFooterControls() {
347
349
  var _this$$scopedSlots;
348
350
  return ((_this$$scopedSlots = this.$scopedSlots) === null || _this$$scopedSlots === void 0 ? void 0 : _this$$scopedSlots['footer-controls']) && typeof this.$scopedSlots['footer-controls'] === 'function' && this.$scopedSlots['footer-controls']();
351
+ },
352
+ emptyStateMainText() {
353
+ if (this.emptyStateTitle) {
354
+ return this.emptyStateTitle;
355
+ }
356
+ return i18n.CHAT_EMPTY_STATE_TITLE;
357
+ },
358
+ emptyStateSubText() {
359
+ return i18n.CHAT_EMPTY_STATE_DESCRIPTION;
349
360
  }
350
361
  },
351
362
  watch: {
@@ -631,7 +642,7 @@ var script = {
631
642
  const __vue_script__ = script;
632
643
 
633
644
  /* template */
634
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"markdown-code-block duo-chat web-only gl-bottom-0 gl-flex gl-max-h-full gl-flex-col",attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('web-duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"show-studio-header":_vm.showStudioHeader},on:{"go-back":_vm.onGoBack,"go-back-to-chat":_vm.onGoBackToChat,"new-chat":_vm.onNewChat,"close":_vm.hideChat},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",class:{ 'gl-border-t': !_vm.showStudioHeader },attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"canceled-request-ids":_vm.canceledRequestIds,"show-delimiter":index > 0,"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,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-gray-900 gl-break-anywhere",attrs:{"data-testid":"gl-duo-chat-empty-state"}},[(_vm.emptyStateTitle)?[_c('div',{staticClass:"gl-heading-display"},[_vm._v("๐Ÿ‘‹")]),_vm._v(" "),_c('p',{staticClass:"gl-m-0",attrs:{"data-testid":"gl-duo-chat-empty-state-title"}},[_vm._v("\n "+_vm._s(_vm.emptyStateTitle)+"\n ")])]:_vm._e(),_vm._v(" "),_c('duo-chat-predefined-prompts',{key:"predefined-prompts",attrs:{"prompts":_vm.predefinedPrompts},on:{"click":_vm.sendPredefinedPrompt}})],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.isChatAvailable && !_vm.shouldShowThreadList)?_c('footer',{staticClass:"duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0",attrs:{"data-testid":"chat-footer"}},[_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('div',{staticClass:"gl-relative gl-max-w-full"},[_vm._t("context-items-menu",null,{"isOpen":_vm.contextItemsMenuIsOpen,"onClose":_vm.closeContextItemsMenuOpen,"setRef":_vm.setContextItemsMenuRef,"focusPrompt":_vm.focusChatInput})],2),_vm._v(" "),_c('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"},[_c('div',{staticClass:"gl-flex gl-justify-between 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',[_vm._v(_vm._s(_vm.$options.i18n.CHAT_MODEL_PLACEHOLDER))]),_vm._v(" "),_c('div',[_vm._t("agentic-switch")],2)]),_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:{"data-testid":"chat-prompt-input","textarea-classes":[
645
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"markdown-code-block duo-chat web-only gl-bottom-0 gl-flex gl-max-h-full gl-flex-col",attrs:{"id":"chat-component","role":"complementary","data-testid":"chat-component"}},[(_vm.showHeader)?_c('web-duo-chat-header',{ref:"header",attrs:{"active-thread-id":_vm.activeThreadId,"title":_vm.isMultithreaded && _vm.currentView === 'list' ? _vm.$options.i18n.CHAT_HISTORY_TITLE : _vm.title,"subtitle":_vm.activeThreadTitleForView,"is-multithreaded":_vm.isMultithreaded,"current-view":_vm.currentView,"should-render-resizable":_vm.shouldRenderResizable,"badge-type":_vm.isMultithreaded ? null : _vm.badgeType,"show-studio-header":_vm.showStudioHeader},on:{"go-back":_vm.onGoBack,"go-back-to-chat":_vm.onGoBackToChat,"new-chat":_vm.onNewChat,"close":_vm.hideChat},scopedSlots:_vm._u([{key:"subheader",fn:function(){return [_vm._t("subheader")]},proxy:true}],null,true)}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-1 gl-flex-grow gl-flex-col gl-overflow-y-auto gl-overscroll-contain gl-bg-inherit",class:{ 'gl-border-t': !_vm.showStudioHeader },attrs:{"data-testid":"chat-history"},on:{"scroll":_vm.handleScrollingThrottled}},[(_vm.shouldShowThreadList)?_c('duo-chat-threads',{attrs:{"threads":_vm.threadList,"preferred-locale":_vm.preferredLocale},on:{"new-chat":_vm.onNewChat,"select-thread":_vm.onSelectThread,"delete-thread":_vm.onDeleteThread,"close":_vm.hideChat}}):_c('transition-group',{staticClass:"duo-chat-history gl-mt-auto gl-px-4 gl-pb-4 gl-pt-6",attrs:{"mode":"out-in","tag":"section","name":"message"}},[_vm._l((_vm.conversations),function(conversation,index){return _c('duo-chat-conversation',{key:("conversation-" + index),attrs:{"enable-code-insertion":_vm.enableCodeInsertion,"messages":conversation,"canceled-request-ids":_vm.canceledRequestIds,"show-delimiter":index > 0,"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,"open-file-path":_vm.onOpenFilePath}})}),_vm._v(" "),(!_vm.hasMessages && !_vm.isLoading)?[_c('div',{key:"empty-state-message",staticClass:"duo-chat-message gl-rounded-bl-none gl-leading-20 gl-text-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(" "),_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)]:_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.isChatAvailable && !_vm.shouldShowThreadList)?_c('footer',{staticClass:"duo-chat-drawer-footer gl-relative gl-z-2 gl-shrink-0",attrs:{"data-testid":"chat-footer"}},[_c('gl-form',{attrs:{"data-testid":"chat-prompt-form"},on:{"submit":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendChatPrompt.apply(null, arguments)}}},[_c('div',{staticClass:"gl-relative gl-max-w-full"},[_vm._t("context-items-menu",null,{"isOpen":_vm.contextItemsMenuIsOpen,"onClose":_vm.closeContextItemsMenuOpen,"setRef":_vm.setContextItemsMenuRef,"focusPrompt":_vm.focusChatInput})],2),_vm._v(" "),_c('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"},[_c('div',{staticClass:"gl-flex gl-justify-between 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',[_vm._v(_vm._s(_vm.$options.i18n.CHAT_MODEL_PLACEHOLDER))]),_vm._v(" "),_c('div',[_vm._t("agentic-switch")],2)]),_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:{"data-testid":"chat-prompt-input","textarea-classes":[
635
646
  '!gl-h-full',
636
647
  '!gl-bg-transparent',
637
648
  '!gl-py-4',
@@ -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:1.25rem}.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{font-size:clamp(1.5rem,.8333333333rem + 1.3888888889vw,1.875rem);margin-top:0;margin-top:var(--gl-spacing-scale-7)}.duo-chat-markdown .gl-h1,.duo-chat-markdown .gl-h2,.duo-chat-markdown h1,.duo-chat-markdown h2{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:-.01em;line-height:1.25;margin-bottom:1rem}.duo-chat-markdown .gl-h2,.duo-chat-markdown h2{font-size:clamp(1.3125rem,.8680555556rem + .9259259259vw,1.5625rem);margin-top:0;margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h3,.duo-chat-markdown h3{font-size:clamp(1.125rem,.9027777778rem + .462962963vw,1.25rem);margin-top:0;margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h3,.duo-chat-markdown .gl-h4,.duo-chat-markdown h3,.duo-chat-markdown h4{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem}.duo-chat-markdown .gl-h4,.duo-chat-markdown h4{font-size:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h5,.duo-chat-markdown h5{font-size:.875rem}.duo-chat-markdown .gl-h5,.duo-chat-markdown .gl-h6,.duo-chat-markdown h5,.duo-chat-markdown h6{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h6,.duo-chat-markdown h6{font-size:.8125rem}.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-text-color-heading);font-size:1.5rem;font-weight:600;letter-spacing:-.01em;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-7)}.duo-chat-compact-markdown .gl-h2,.duo-chat-compact-markdown h2{font-size:1.3125rem;letter-spacing:-.01em}.duo-chat-compact-markdown .gl-h2,.duo-chat-compact-markdown .gl-h3,.duo-chat-compact-markdown h2,.duo-chat-compact-markdown h3{color:var(--gl-text-color-heading);font-weight:600;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-6)}.duo-chat-compact-markdown .gl-h3,.duo-chat-compact-markdown h3{font-size:1.125rem;letter-spacing:inherit}.duo-chat-compact-markdown .gl-h4,.duo-chat-compact-markdown h4{font-size:1rem}.duo-chat-compact-markdown .gl-h4,.duo-chat-compact-markdown .gl-h5,.duo-chat-compact-markdown h4,.duo-chat-compact-markdown h5{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .gl-h5,.duo-chat-compact-markdown h5{font-size:.875rem}.duo-chat-compact-markdown .gl-h6,.duo-chat-compact-markdown h6{color:var(--gl-text-color-heading);font-size:.8125rem;font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0;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:initial!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:var(--duo-chat-message-pre-color,inherit)!important;color:inherit;max-height:60vh;padding:var(--gl-spacing-scale-3) var(--gl-spacing-scale-4)}.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;font-size:var(--gl-font-size-sm);line-height:1;white-space:inherit}.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}.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code,.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code:focus-within,.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet,.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet:focus-within{opacity:var(--gl-opacity-10)}.insert-code-hidden insert-code-snippet{display:none}.insert-code-hidden copy-code{margin-right: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)}
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{font-size:clamp(1.5rem,.8333333333rem + 1.3888888889vw,1.875rem);margin-top:0;margin-top:var(--gl-spacing-scale-7)}.duo-chat-markdown .gl-h1,.duo-chat-markdown .gl-h2,.duo-chat-markdown h1,.duo-chat-markdown h2{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:-.01em;line-height:1.25;margin-bottom:1rem}.duo-chat-markdown .gl-h2,.duo-chat-markdown h2{font-size:clamp(1.3125rem,.8680555556rem + .9259259259vw,1.5625rem);margin-top:0;margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h3,.duo-chat-markdown h3{font-size:clamp(1.125rem,.9027777778rem + .462962963vw,1.25rem);margin-top:0;margin-top:var(--gl-spacing-scale-6)}.duo-chat-markdown .gl-h3,.duo-chat-markdown .gl-h4,.duo-chat-markdown h3,.duo-chat-markdown h4{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem}.duo-chat-markdown .gl-h4,.duo-chat-markdown h4{font-size:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h5,.duo-chat-markdown h5{font-size:.875rem}.duo-chat-markdown .gl-h5,.duo-chat-markdown .gl-h6,.duo-chat-markdown h5,.duo-chat-markdown h6{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-5)}.duo-chat-markdown .gl-h6,.duo-chat-markdown h6{font-size:.8125rem}.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-text-color-heading);font-size:1.5rem;font-weight:600;letter-spacing:-.01em;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-7)}.duo-chat-compact-markdown .gl-h2,.duo-chat-compact-markdown h2{font-size:1.3125rem;letter-spacing:-.01em}.duo-chat-compact-markdown .gl-h2,.duo-chat-compact-markdown .gl-h3,.duo-chat-compact-markdown h2,.duo-chat-compact-markdown h3{color:var(--gl-text-color-heading);font-weight:600;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-6)}.duo-chat-compact-markdown .gl-h3,.duo-chat-compact-markdown h3{font-size:1.125rem;letter-spacing:inherit}.duo-chat-compact-markdown .gl-h4,.duo-chat-compact-markdown h4{font-size:1rem}.duo-chat-compact-markdown .gl-h4,.duo-chat-compact-markdown .gl-h5,.duo-chat-compact-markdown h4,.duo-chat-compact-markdown h5{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0;margin-top:var(--gl-spacing-scale-5)}.duo-chat-compact-markdown .gl-h5,.duo-chat-compact-markdown h5{font-size:.875rem}.duo-chat-compact-markdown .gl-h6,.duo-chat-compact-markdown h6{color:var(--gl-text-color-heading);font-size:.8125rem;font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0;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:initial!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:var(--duo-chat-message-pre-color,inherit)!important;color:inherit;max-height:60vh;padding:var(--gl-spacing-scale-3) var(--gl-spacing-scale-4)}.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;font-size:var(--gl-font-size-sm);line-height:1;white-space:inherit}.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}.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code,.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code:focus-within,.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet,.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet:focus-within{opacity:var(--gl-opacity-10)}.insert-code-hidden insert-code-snippet{display:none}.insert-code-hidden copy-code{margin-right:0}.duo-message-pre-block:focus .copy-to-clipboard-button-container,.duo-message-pre-block:hover .copy-to-clipboard-button-container{opacity:1}.duo-message-pre-block .copy-to-clipboard-button-container:has(button:focus){opacity:1}.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)}
2
2
  /*# sourceMappingURL=components.css.map */
@@ -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 border-radius: 1.25rem;\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: initial !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 color: var(--duo-chat-message-pre-color, inherit) !important;\n @apply gl-border gl-max-h-[60vh] 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-leading-1;\n @apply gl-bg-transparent;\n white-space: inherit;\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.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code,\n.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code:focus-within,\n.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet,\n.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet:focus-within {\n @apply gl-opacity-10;\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.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}"]}
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: initial !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 color: var(--duo-chat-message-pre-color, inherit) !important;\n @apply gl-border gl-max-h-[60vh] 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-leading-1;\n @apply gl-bg-transparent;\n white-space: inherit;\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.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code,\n.duo-chat-message .js-markdown-code.markdown-code-block:hover copy-code:focus-within,\n.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet,\n.duo-chat-message .js-markdown-code.markdown-code-block:hover insert-code-snippet:focus-within {\n @apply gl-opacity-10;\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-message-pre-block:focus .copy-to-clipboard-button-container,\n.duo-message-pre-block:hover .copy-to-clipboard-button-container {\n opacity: 1;\n}\n\n.duo-message-pre-block .copy-to-clipboard-button-container:has(button:focus) {\n opacity: 1;\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}"]}