@gitlab/duo-ui 13.5.3 → 13.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/components/chat/components/duo_chat_header/web_duo_chat_header.js +6 -1
  3. package/dist/components/chat/components/duo_chat_message/duo_chat_message.js +1 -1
  4. package/dist/components/chat/components/duo_chat_message/message_types/message_base.js +1 -1
  5. package/dist/components/chat/components/duo_chat_message/message_types/message_tool.js +17 -4
  6. package/dist/components/chat/components/duo_chat_message/message_types/message_tool_details.js +10 -1
  7. package/dist/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.js +18 -54
  8. package/dist/components/chat/components/duo_chat_message_tool_approval/components/pre_block.js +1 -1
  9. package/dist/components/chat/mock_data.js +16 -1
  10. package/dist/components/user_feedback/user_feedback.js +1 -1
  11. package/dist/tailwind.css +1 -1
  12. package/dist/tailwind.css.map +1 -1
  13. package/package.json +1 -1
  14. package/src/components/chat/components/duo_chat_header/web_duo_chat_header.vue +14 -9
  15. package/src/components/chat/components/duo_chat_message/duo_chat_message.vue +1 -1
  16. package/src/components/chat/components/duo_chat_message/message_types/message_base.vue +1 -1
  17. package/src/components/chat/components/duo_chat_message/message_types/message_tool.vue +52 -36
  18. package/src/components/chat/components/duo_chat_message/message_types/message_tool_details.vue +21 -4
  19. package/src/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.vue +35 -65
  20. package/src/components/chat/components/duo_chat_message_tool_approval/components/pre_block.vue +2 -2
  21. package/src/components/chat/mock_data.js +20 -0
  22. package/src/components/user_feedback/user_feedback.vue +2 -2
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [13.6.1](https://gitlab.com/gitlab-org/duo-ui/compare/v13.6.0...v13.6.1) (2025-11-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * message tool copy emit event to ide ([cc4a030](https://gitlab.com/gitlab-org/duo-ui/commit/cc4a030f7ce56b2109ab4c71085c44781916196b))
7
+
8
+ # [13.6.0](https://gitlab.com/gitlab-org/duo-ui/compare/v13.5.3...v13.6.0) (2025-11-04)
9
+
10
+
11
+ ### Features
12
+
13
+ * **WebDuoChatHeader:** Align with design ([75497be](https://gitlab.com/gitlab-org/duo-ui/commit/75497be7e7a78bf81e0ffe7b580ee6a682a3745d))
14
+
1
15
  ## [13.5.3](https://gitlab.com/gitlab-org/duo-ui/compare/v13.5.2...v13.5.3) (2025-11-04)
2
16
 
3
17
 
@@ -36,6 +36,11 @@ var script = {
36
36
  required: false,
37
37
  default: i18n.CHAT_TITLE
38
38
  },
39
+ agentHandler: {
40
+ type: String,
41
+ required: false,
42
+ default: null
43
+ },
39
44
  subtitle: {
40
45
  type: String,
41
46
  required: false,
@@ -150,7 +155,7 @@ var script = {
150
155
  const __vue_script__ = script;
151
156
 
152
157
  /* template */
153
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:"gl-border-b gl-shrink-0 gl-p-0",attrs:{"data-testid":"chat-header"}},[(!_vm.showStudioHeader)?_c('div',{staticClass:"gl-border-b gl-flex gl-w-full gl-items-center gl-px-5 gl-py-3",attrs:{"data-testid":"chat-top-header"}},[(_vm.subtitle)?_c('h4',{staticClass:"gl-mb-0 gl-max-w-17/20 gl-flex-1 gl-shrink-0 gl-overflow-hidden gl-truncate gl-text-ellipsis gl-whitespace-nowrap gl-pr-3 gl-text-sm gl-font-normal gl-text-subtle",attrs:{"data-testid":"chat-subtitle"}},[_vm._v("\n "+_vm._s(_vm.subtitle)+"\n ")]):_vm._e(),_vm._v(" "),_c('gl-button',{staticClass:"gl-ml-auto",attrs:{"category":"tertiary","variant":"default","icon":"close","size":"small","data-testid":"chat-close-button","aria-label":_vm.$options.i18n.CHAT_CLOSE_LABEL},on:{"click":function($event){return _vm.$emit('close')}}})],1):_vm._e(),_vm._v(" "),_c('div',{staticClass:"drawer-title gl-flex gl-items-center gl-justify-start gl-p-5",class:{ 'gl-p-4': _vm.showStudioHeader }},[_c('div',{staticClass:"gl-flex gl-flex-1 gl-overflow-hidden"},[_c('gl-avatar',{staticClass:"gl-mr-3",attrs:{"size":32,"entity-name":_vm.title,"shape":"circle"}}),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-items-center"},[_c('h3',{staticClass:"gl-my-0 gl-text-[0.875rem]"},[_vm._v(_vm._s(_vm.title))])])],1),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-gap-3"},[(
158
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:"gl-border-b gl-shrink-0 gl-p-0",attrs:{"data-testid":"chat-header"}},[(!_vm.showStudioHeader)?_c('div',{staticClass:"gl-border-b gl-flex gl-w-full gl-items-center gl-px-4 gl-py-3",attrs:{"data-testid":"chat-top-header"}},[(_vm.subtitle)?_c('h4',{staticClass:"gl-mb-0 gl-max-w-17/20 gl-flex-1 gl-shrink-0 gl-overflow-hidden gl-truncate gl-text-ellipsis gl-whitespace-nowrap gl-pr-3 gl-text-sm gl-font-normal gl-text-subtle",attrs:{"data-testid":"chat-subtitle"}},[_vm._v("\n "+_vm._s(_vm.subtitle)+"\n ")]):_vm._e(),_vm._v(" "),_c('gl-button',{staticClass:"gl-ml-auto",attrs:{"category":"tertiary","variant":"default","icon":"close","size":"small","data-testid":"chat-close-button","aria-label":_vm.$options.i18n.CHAT_CLOSE_LABEL},on:{"click":function($event){return _vm.$emit('close')}}})],1):_vm._e(),_vm._v(" "),_c('div',{staticClass:"drawer-title gl-flex gl-items-center gl-justify-start gl-gap-4 gl-px-4 gl-py-3"},[_c('div',{staticClass:"gl-flex gl-grow gl-gap-3"},[_c('gl-avatar',{staticClass:"gl-shrink-0",attrs:{"size":32,"entity-name":_vm.title,"shape":"circle"}}),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-col gl-justify-center"},[_c('h3',{staticClass:"gl-my-0 gl-line-clamp-1 gl-text-[0.875rem] gl-text-default"},[_vm._v(_vm._s(_vm.title))]),_vm._v(" "),(_vm.agentHandler)?_c('p',{staticClass:"gl-my-0 gl-text-[0.75rem] gl-text-subtle"},[_vm._v("\n "+_vm._s(_vm.agentHandler)+"\n ")]):_vm._e()])],1),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-gap-3"},[(
154
159
  _vm.isMultithreaded && (_vm.activeThreadId || _vm.currentView === _vm.VIEW_TYPES.LIST || _vm.hasManyAgents)
155
160
  )?[(_vm.hasManyAgents)?_c('gl-disclosure-dropdown',{attrs:{"title":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"toggle-text":_vm.$options.i18n.CHAT_NEW_TOOLTIP,"items":_vm.agents,"data-testid":"chat-new-button","variant":"confirm","category":"tertiary","size":"small","icon":"duo-chat-new","text-sr-only":"","aria-label":_vm.$options.i18n.CHAT_NEW_LABEL,"no-caret":""},on:{"action":_vm.startNewChat},scopedSlots:_vm._u([{key:"list-item",fn:function(ref){
156
161
  var item = ref.item;
@@ -315,7 +315,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
315
315
  'gl-pb-3': _vm.displaySelectedContextItems && _vm.isUserMessage,
316
316
  'gl-max-w-full gl-flex-grow gl-text-default': _vm.isAssistantMessage && !_vm.error,
317
317
  'duo-chat-message-with-error gl-bg-feedback-danger gl-p-4': _vm.error,
318
- },on:{"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}},[(_vm.showA11yFromText)?_c('div',{staticClass:"gl-sr-only"},[_vm._v("\n "+_vm._s(_vm.isUserMessage ? _vm.$options.i18n.FROM_ME : _vm.$options.i18n.FROM_DUO)+"\n ")]):_vm._e(),_vm._v(" "),_c('div',{ref:"content-wrapper",staticClass:"gl-max-w-full gl-flex-grow",class:{ 'has-error': _vm.error }},[(_vm.displaySelectedContextItems && _vm.isAssistantMessage)?_c('duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"assistant"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e(),_vm._v(" "),(_vm.error)?_c('div',{staticClass:"gl-flex"},[(_vm.error)?_c('gl-icon',{staticClass:"error-icon !gl-mt-1 gl-mr-3 gl-shrink-0 gl-text-danger",attrs:{"aria-label":_vm.$options.i18n.MESSAGE_ERROR,"name":"error","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.renderedError),expression:"renderedError",arg:_vm.$options.safeHtmlConfigExtension}],ref:"error-message"})],1):_c('div',[_c('div',{staticClass:"gl-flex"},[(_vm.isUserMessage)?_c('gl-avatar',{staticClass:"!gl-mt-1 gl-mr-3",attrs:{"size":16,"entity-name":"User","src":_vm.avatarUrl}}):_vm._e(),_vm._v(" "),_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content",staticClass:"gl-min-w-0 gl-max-w-full gl-flex-grow"})],1),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-message-feedback gl-mt-4 gl-flex gl-items-end"},[(_vm.isChunkAndNotCancelled)?_c('gl-animated-loader-icon',{attrs:{"is-on":true}}):_vm._e(),_vm._v(" "),(_vm.shouldShowFeedbackLink)?_c('message-feedback',{attrs:{"has-feedback":_vm.hasFeedback},on:{"feedback":_vm.logEvent}}):_vm._e()],1)]:_vm._e()],2),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isUserMessage)?_c('duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"user"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e()],1)]),_vm._v(" "),_c('transition',{attrs:{"name":"duo-chat-message-actions"}},[(_vm.shouldShowCopyAction)?_c('div',{staticClass:"duo-chat-message-actions gl-z-1099 gl-absolute gl-bottom-0 gl-right-0 gl-rounded-br-lg gl-rounded-tr-lg gl-bg-subtle"},[_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip.hover",modifiers:{"hover":true}}],class:{ '!gl-text-success': _vm.copied },attrs:{"title":_vm.copied ? _vm.$options.i18n.CHAT_MESSAGE_COPIED : _vm.$options.i18n.CHAT_MESSAGE_COPY,"icon":_vm.copied ? 'check-circle-filled' : 'copy-to-clipboard',"category":"tertiary"},on:{"click":_vm.copyMessage}})],1):_vm._e()])]:_c('message-map',{attrs:{"message":_vm.message,"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}})],2)};
318
+ },on:{"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}},[(_vm.showA11yFromText)?_c('div',{staticClass:"gl-sr-only"},[_vm._v("\n "+_vm._s(_vm.isUserMessage ? _vm.$options.i18n.FROM_ME : _vm.$options.i18n.FROM_DUO)+"\n ")]):_vm._e(),_vm._v(" "),_c('div',{ref:"content-wrapper",staticClass:"gl-max-w-full gl-flex-grow",class:{ 'has-error': _vm.error }},[(_vm.displaySelectedContextItems && _vm.isAssistantMessage)?_c('duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"assistant"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e(),_vm._v(" "),(_vm.error)?_c('div',{staticClass:"gl-flex"},[(_vm.error)?_c('gl-icon',{staticClass:"error-icon !gl-mt-1 gl-mr-3 gl-shrink-0 gl-text-danger",attrs:{"aria-label":_vm.$options.i18n.MESSAGE_ERROR,"name":"error","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.renderedError),expression:"renderedError",arg:_vm.$options.safeHtmlConfigExtension}],ref:"error-message"})],1):_c('div',[_c('div',{staticClass:"gl-flex"},[(_vm.isUserMessage)?_c('gl-avatar',{staticClass:"!gl-mt-1 gl-mr-3",attrs:{"size":16,"entity-name":"User","src":_vm.avatarUrl}}):_vm._e(),_vm._v(" "),_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content",staticClass:"gl-min-w-0 gl-max-w-full gl-flex-grow"})],1),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-message-feedback gl-mt-2 gl-flex gl-items-end"},[(_vm.isChunkAndNotCancelled)?_c('gl-animated-loader-icon',{attrs:{"is-on":true}}):_vm._e(),_vm._v(" "),(_vm.shouldShowFeedbackLink)?_c('message-feedback',{attrs:{"has-feedback":_vm.hasFeedback},on:{"feedback":_vm.logEvent}}):_vm._e()],1)]:_vm._e()],2),_vm._v(" "),(_vm.displaySelectedContextItems && _vm.isUserMessage)?_c('duo-chat-context-item-selections',{attrs:{"selections":_vm.selectedContextItems,"title":_vm.selectedContextItemsTitle,"default-collapsed":_vm.selectedContextItemsDefaultCollapsed,"variant":"user"},on:{"get-content":_vm.onGetContextItemContent}}):_vm._e()],1)]),_vm._v(" "),_c('transition',{attrs:{"name":"duo-chat-message-actions"}},[(_vm.shouldShowCopyAction)?_c('div',{staticClass:"duo-chat-message-actions gl-z-1099 gl-absolute gl-bottom-0 gl-right-0 gl-rounded-br-lg gl-rounded-tr-lg gl-bg-subtle"},[_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip.hover",modifiers:{"hover":true}}],class:{ '!gl-text-success': _vm.copied },attrs:{"title":_vm.copied ? _vm.$options.i18n.CHAT_MESSAGE_COPIED : _vm.$options.i18n.CHAT_MESSAGE_COPY,"icon":_vm.copied ? 'check-circle-filled' : 'copy-to-clipboard',"category":"tertiary"},on:{"click":_vm.copyMessage}})],1):_vm._e()])]:_c('message-map',{attrs:{"message":_vm.message,"with-feedback":_vm.withFeedback,"working-directory":_vm.workingDirectory,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}})],2)};
319
319
  var __vue_staticRenderFns__ = [];
320
320
 
321
321
  /* style */
@@ -73,7 +73,7 @@ var script = {
73
73
  const __vue_script__ = script;
74
74
 
75
75
  /* template */
76
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"duo-chat-message gl-leading-20 gl-break-anywhere",class:{
76
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"duo-chat-message gl-w-full gl-flex-grow gl-leading-20 gl-break-anywhere",class:{
77
77
  'gl-items-top gl-flex': _vm.hasError,
78
78
  }},[(_vm.hasError)?_c('gl-icon',{staticClass:"error-icon gl-border gl-mr-3 gl-mt-2 gl-shrink-0 gl-rounded-full gl-border-red-500 gl-text-red-600",attrs:{"name":"status_warning_borderless","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),_c('div',{ref:"content-wrapper",class:{ 'has-error': _vm.hasError }},[(_vm.hasError)?_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.renderedError),expression:"renderedError"}],ref:"error-message"}):_c('div',[_vm._t("message",function(){return [_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.messageContent),expression:"messageContent"}],ref:"content"})]},null,{ content: _vm.message.content, htmlContent: _vm.messageContent })],2)])],1)};
79
79
  var __vue_staticRenderFns__ = [];
@@ -1,4 +1,4 @@
1
- import { GlIcon, GlLink } from '@gitlab/ui';
1
+ import { GlIcon, GlLink, GlButton } from '@gitlab/ui';
2
2
  import { translate } from '../../../../../utils/i18n';
3
3
  import MessageToolApproval from '../../duo_chat_message_tool_approval/message_tool_approval';
4
4
  import { APPROVAL_TOOL_NAMES } from '../../../constants';
@@ -26,7 +26,8 @@ var script = {
26
26
  MessageToolApproval,
27
27
  MessageToolDetails,
28
28
  GlIcon,
29
- GlLink
29
+ GlLink,
30
+ GlButton
30
31
  },
31
32
  i18n,
32
33
  provide: {
@@ -38,6 +39,11 @@ var script = {
38
39
  }
39
40
  }
40
41
  },
42
+ inject: {
43
+ detailsExpanded: {
44
+ default: false
45
+ }
46
+ },
41
47
  props: {
42
48
  message: {
43
49
  required: true,
@@ -54,7 +60,7 @@ var script = {
54
60
  },
55
61
  data() {
56
62
  return {
57
- isDetailsOpen: false
63
+ isDetailsOpen: this.detailsExpanded
58
64
  };
59
65
  },
60
66
  computed: {
@@ -144,6 +150,13 @@ var script = {
144
150
  e.preventDefault();
145
151
  this.isDetailsOpen = !this.isDetailsOpen;
146
152
  }
153
+ },
154
+ onCopyCodeSnippet(e) {
155
+ /**
156
+ * Emit copy-code-snippet event that clients can use to interact with a suggested code.
157
+ * @param {*} event An event containing code string in the "detail.code" field.
158
+ */
159
+ this.$emit('copy-code-snippet', e);
147
160
  }
148
161
  }
149
162
  };
@@ -154,7 +167,7 @@ const __vue_script__ = script;
154
167
  /* template */
155
168
  var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.requiresApproval)?_c('message-tool-approval',{attrs:{"message":_vm.message,"working-directory":_vm.workingDirectory,"approval-status":"approved"}}):_c('base-message',{attrs:{"message":_vm.message},scopedSlots:_vm._u([{key:"message",fn:function(ref){
156
169
  var content = ref.content;
157
- return [_c('div',{staticClass:"gl-flex gl-items-baseline !gl-text-subtle"},[_c('div',{staticClass:"gl-mr-3 gl-flex-shrink-0"},[_c('gl-icon',{attrs:{"name":_vm.iconName}})],1),_vm._v(" "),_c('div',{staticClass:"gl-flex-1"},[_c('div',{staticClass:"gl-mb-2",class:{ 'gl-cursor-pointer': _vm.shouldShowDetails },on:{"click":_vm.toggleClickToolDetails,"keydown":_vm.toggleKeydownToolDetails}},[_c('span',{attrs:{"data-testid":"tool-message-content"}},[_vm._v(_vm._s(content))]),_vm._v(" "),(_vm.shouldShowDetails)?_c('gl-icon',{attrs:{"name":_vm.collapseIconName}}):_vm._e()],1),_vm._v(" "),(_vm.projectId)?_c('div',{staticClass:"gl-mb-2",attrs:{"data-testid":"tool-message-project-info"}},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.PROJECT_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-ml-2",attrs:{"data-testid":"tool-message-project-id"}},[_vm._v(_vm._s(_vm.projectId))])]):_vm._e(),_vm._v(" "),(_vm.branchName)?_c('div',{staticClass:"gl-mb-2",attrs:{"data-testid":"tool-message-branch-info"}},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.BRANCH_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-ml-2",attrs:{"data-testid":"tool-message-branch-name"}},[_vm._v(_vm._s(_vm.branchName))])]):_vm._e(),_vm._v(" "),(_vm.startBranch)?_c('div',{staticClass:"gl-mb-2",attrs:{"data-testid":"tool-message-start-branch-info"}},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.START_BRANCH_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-ml-2",attrs:{"data-testid":"tool-message-start-branch-name"}},[_vm._v(_vm._s(_vm.startBranch))])]):(_vm.messageFilePath)?_c('div',{staticClass:"gl-mb-2"},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.FILE_PATH_LABEL)+":")]),_vm._v(" "),_c('gl-link',{staticClass:"gl-markdown file-path-link gl-ml-2 gl-break-all",attrs:{"data-testid":"tool-message-file-path-link"},on:{"click":function($event){$event.preventDefault();return _vm.onOpenFilePath(_vm.messageFilePath)}}},[_c('code',[_vm._v(_vm._s(_vm.messageFilePath))])])],1):_vm._e()])]),_vm._v(" "),(_vm.shouldShowDetails)?_c('message-tool-details',{attrs:{"message":_vm.message,"is-expanded":_vm.isDetailsOpen}}):_vm._e()]}}])})};
170
+ return [_c('div',{staticClass:"gl-flex gl-items-baseline !gl-text-subtle"},[_c('div',{staticClass:"gl-mb-2"},[(_vm.shouldShowDetails)?_c('gl-button',{attrs:{"button-text-classes":"!gl-whitespace-normal gl-text-left","icon":_vm.iconName,"variant":"link"},on:{"click":_vm.toggleClickToolDetails}},[_c('span',{attrs:{"data-testid":"tool-message-content"}},[_vm._v(_vm._s(content))]),_vm._v(" "),(_vm.shouldShowDetails)?_c('gl-icon',{attrs:{"name":_vm.collapseIconName}}):_vm._e()],1):_c('div',{staticClass:"gl-flex gl-items-center"},[_c('span',{staticClass:"gl-mr-3 gl-flex-shrink-0"},[_c('gl-icon',{attrs:{"name":_vm.iconName}})],1),_vm._v(" "),_c('span',{attrs:{"data-testid":"tool-message-content"}},[_vm._v(_vm._s(content))])])],1)]),_vm._v(" "),(_vm.projectId)?_c('div',{staticClass:"gl-mb-2",attrs:{"data-testid":"tool-message-project-info"}},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.PROJECT_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-ml-2",attrs:{"data-testid":"tool-message-project-id"}},[_vm._v(_vm._s(_vm.projectId))])]):_vm._e(),_vm._v(" "),(_vm.branchName)?_c('div',{staticClass:"gl-mb-2",attrs:{"data-testid":"tool-message-branch-info"}},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.BRANCH_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-ml-2",attrs:{"data-testid":"tool-message-branch-name"}},[_vm._v(_vm._s(_vm.branchName))])]):_vm._e(),_vm._v(" "),(_vm.startBranch)?_c('div',{staticClass:"gl-mb-2",attrs:{"data-testid":"tool-message-start-branch-info"}},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.START_BRANCH_LABEL)+":")]),_vm._v(" "),_c('span',{staticClass:"gl-ml-2",attrs:{"data-testid":"tool-message-start-branch-name"}},[_vm._v(_vm._s(_vm.startBranch))])]):(_vm.messageFilePath)?_c('div',{staticClass:"gl-mb-2"},[_c('span',{staticClass:"gl-font-weight-bold"},[_vm._v(_vm._s(_vm.$options.i18n.FILE_PATH_LABEL)+":")]),_vm._v(" "),_c('gl-link',{staticClass:"gl-markdown file-path-link gl-ml-2 gl-break-all",attrs:{"data-testid":"tool-message-file-path-link"},on:{"click":function($event){$event.preventDefault();return _vm.onOpenFilePath(_vm.messageFilePath)}}},[_c('code',[_vm._v(_vm._s(_vm.messageFilePath))])])],1):_vm._e(),_vm._v(" "),(_vm.shouldShowDetails)?_c('message-tool-details',{attrs:{"message":_vm.message,"is-expanded":_vm.isDetailsOpen},on:{"copy-code-snippet":_vm.onCopyCodeSnippet}}):_vm._e()]}}])})};
158
171
  var __vue_staticRenderFns__ = [];
159
172
 
160
173
  /* style */
@@ -28,6 +28,15 @@ var script = {
28
28
  var _this$message2;
29
29
  return `tool-details-${((_this$message2 = this.message) === null || _this$message2 === void 0 ? void 0 : _this$message2.id) || Math.random().toString(36).slice(2)}`;
30
30
  }
31
+ },
32
+ methods: {
33
+ onCopyCodeSnippet(e) {
34
+ /**
35
+ * Emit copy-code-snippet event that clients can use to interact with a suggested code.
36
+ * @param {*} event An event containing code string in the "detail.code" field.
37
+ */
38
+ this.$emit('copy-code-snippet', e);
39
+ }
31
40
  }
32
41
  };
33
42
 
@@ -35,7 +44,7 @@ var script = {
35
44
  const __vue_script__ = script;
36
45
 
37
46
  /* template */
38
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-collapse',{attrs:{"id":_vm.collapseId,"visible":_vm.isExpanded}},[_c('gl-card',{staticClass:"gl-mt-2"},[_c('div',{staticClass:"gl-grid gl-gap-7 gl-px-3 gl-py-3"},[_c('tool-kv-section',{attrs:{"title":"Request","value":_vm.toolInfo.args}}),_vm._v(" "),_c('tool-kv-section',{attrs:{"title":"Response","value":_vm.toolInfo.tool_response}})],1)])],1)};
47
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-collapse',{attrs:{"id":_vm.collapseId,"visible":_vm.isExpanded}},[_c('gl-card',[_c('div',{staticClass:"gl-grid gl-gap-3 gl-px-3 gl-py-3"},[_c('tool-kv-section',{attrs:{"title":"Request","value":_vm.toolInfo.args},on:{"copy-code-snippet":_vm.onCopyCodeSnippet}}),_vm._v(" "),_c('tool-kv-section',{attrs:{"title":"Response","value":_vm.toolInfo.tool_response},on:{"copy-code-snippet":_vm.onCopyCodeSnippet}})],1)])],1)};
39
48
  var __vue_staticRenderFns__ = [];
40
49
 
41
50
  /* style */
@@ -1,49 +1,31 @@
1
- import { nextTick } from 'vue';
2
- import { GlTooltipDirective, GlButton } from '@gitlab/ui';
3
1
  import isEmpty from 'lodash/isEmpty';
2
+ import { GlTooltipDirective, GlButton } from '@gitlab/ui';
3
+ import PreBlock from '../../duo_chat_message_tool_approval/components/pre_block';
4
4
  import { checkClipboardPermissions } from '../utils';
5
5
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
6
6
 
7
7
  function makePretty(value) {
8
8
  let visited = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new WeakSet();
9
- if (isEmpty(value)) return {
10
- result: '',
11
- isJson: false
12
- };
9
+ if (isEmpty(value)) return '';
13
10
  if (typeof value === 'string') {
14
11
  try {
15
12
  const parsed = JSON.parse(value);
16
- return {
17
- result: JSON.stringify(parsed, null, 2),
18
- isJson: true
19
- };
13
+ return JSON.stringify(parsed, null, 2);
20
14
  } catch (e) {
21
- return {
22
- result: value,
23
- isJson: false
24
- };
15
+ return value;
25
16
  }
26
17
  }
27
18
  try {
28
19
  if (typeof value === 'object' && visited.has(value)) {
29
- return {
30
- result: '',
31
- isJson: false
32
- };
20
+ return '';
33
21
  }
34
22
  if ('content' in value) {
35
23
  visited.add(value);
36
24
  return makePretty(value.content, visited);
37
25
  }
38
- return {
39
- result: JSON.stringify(value, null, 2),
40
- isJson: true
41
- };
26
+ return JSON.stringify(value, null, 2);
42
27
  } catch (e) {
43
- return {
44
- result: String(value),
45
- isJson: false
46
- };
28
+ return String(value);
47
29
  }
48
30
  }
49
31
  var script = {
@@ -52,7 +34,8 @@ var script = {
52
34
  GlTooltip: GlTooltipDirective
53
35
  },
54
36
  components: {
55
- GlButton
37
+ GlButton,
38
+ PreBlock
56
39
  },
57
40
  inject: {
58
41
  renderGFM: {
@@ -80,39 +63,25 @@ var script = {
80
63
  }
81
64
  },
82
65
  computed: {
83
- prettyResult() {
66
+ prettyText() {
84
67
  return makePretty(this.value);
85
68
  },
86
- pretty() {
87
- return this.prettyResult.result;
88
- },
89
69
  hasContent() {
90
- return this.pretty && this.pretty.length > 0;
91
- },
92
- isJson() {
93
- return this.prettyResult.isJson;
94
- }
95
- },
96
- async mounted() {
97
- if (this.isJson) {
98
- await nextTick();
99
- this.applyJsonHighlight();
70
+ return this.prettyText && this.prettyText.length > 0;
100
71
  }
101
72
  },
102
73
  methods: {
103
- async copy() {
104
- const textToCopy = this.pretty;
74
+ async onCopyCodeSnippet() {
75
+ const textToCopy = this.prettyText;
105
76
  const hasClipboardPermission = await checkClipboardPermissions();
106
77
  try {
107
- // Dispatch custom event for VS Code and other environments
78
+ // Emit custom event for VS Code and other environments
108
79
  // This bubbles up to parent components that handle clipboard operations
109
- this.$el.dispatchEvent(new CustomEvent('copy-code-snippet', {
110
- bubbles: true,
111
- cancelable: true,
80
+ this.$emit('copy-code-snippet', {
112
81
  detail: {
113
82
  code: textToCopy
114
83
  }
115
- }));
84
+ });
116
85
 
117
86
  // If we have clipboard permission, also copy directly
118
87
  if (hasClipboardPermission) {
@@ -123,11 +92,6 @@ var script = {
123
92
  // eslint-disable-next-line no-console
124
93
  console.warn('Failed to copy:', e);
125
94
  }
126
- },
127
- async applyJsonHighlight() {
128
- if (this.renderGFM && typeof this.renderGFM === 'function' && this.$refs.content) {
129
- this.renderGFM(this.$refs.content);
130
- }
131
95
  }
132
96
  }
133
97
  };
@@ -136,7 +100,7 @@ var script = {
136
100
  const __vue_script__ = script;
137
101
 
138
102
  /* template */
139
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasContent)?_c('section',[_c('header',{staticClass:"gl-display-flex gl-align-items-center gl-justify-content-space-between gl-mb-2",attrs:{"data-testid":"tool-section-header"}},[_c('div',{staticClass:"gl-display-flex gl-align-items-center gl-gap-2"},[_c('strong',{staticClass:"gl-text-gray-900"},[_vm._v(_vm._s(_vm.title))])])]),_vm._v(" "),_c('div',{staticClass:"gl-display-block gl-relative gl-block gl-rounded-base gl-border-gray-100 gl-bg-gray-50 gl-p-5",style:({ maxHeight: _vm.maxHeight, overflow: 'auto' })},[_c('div',{staticClass:"gl-absolute gl-right-5 gl-top-5 gl-z-1"},[(_vm.pretty)?_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"category":"tertiary","size":"small","icon":"copy-to-clipboard","title":"Copy to clipboard","aria-label":"Copy to clipboard"},on:{"click":function($event){$event.stopPropagation();return _vm.copy.apply(null, arguments)}}}):_vm._e()],1),_vm._v(" "),_c('pre',{ref:"content",staticClass:"gl-font-mono gl-m-0 !gl-border-0 gl-text-gray-900",class:_vm.isJson ? 'code js-syntax-highlight language-json' : '',staticStyle:{"white-space":"pre-wrap"}},[_vm._v(_vm._s(_vm.pretty))])])]):_vm._e()};
103
+ 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-overflow-auto"},[_c('figcaption',{staticClass:"gl-mb-3",attrs:{"data-testid":"tool-section-header"}},[_c('strong',[_vm._v(_vm._s(_vm.title))])]),_vm._v(" "),_c('div',{staticClass:"gl-relative gl-block gl-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-font-mono gl-m-0 !gl-border-0 gl-text-gray-900",style:({ maxHeight: _vm.maxHeight })},[_vm._v(_vm._s(_vm.prettyText))])],1)]):_vm._e()};
140
104
  var __vue_staticRenderFns__ = [];
141
105
 
142
106
  /* style */
@@ -3,7 +3,7 @@ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
3
3
  /* script */
4
4
 
5
5
  /* 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-text-pretty gl-rounded-lg gl-border-strong gl-bg-strong gl-p-5 gl-font-monospace"},[_c('code',[_vm._t("default")],2)])};
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-overflow-auto gl-whitespace-pre-wrap gl-text-pretty gl-rounded-lg gl-border-strong gl-bg-strong !gl-p-5 gl-font-monospace"},[_c('code',{staticClass:"!gl-leading-20 gl-break-all"},[_vm._t("default")],2)])};
7
7
  var __vue_staticRenderFns__ = [];
8
8
 
9
9
  /* style */
@@ -113,6 +113,21 @@ const MOCK_TOOL_MESSAGE_WITH_LINK = {
113
113
  }
114
114
  }
115
115
  };
116
+ const MOCK_TOOL_MESSAGE_WITH_REQUEST_AND_RESPONSE_DETAILS = {
117
+ id: '123',
118
+ content: "Search for 'duo.*chat.*message' in directory",
119
+ message_type: MESSAGE_MODEL_ROLES.tool,
120
+ tool_info: {
121
+ name: 'search_code',
122
+ args: {
123
+ query: 'clipboard copy button code snippet',
124
+ path: 'src/components'
125
+ },
126
+ tool_response: {
127
+ matches: ['src/components/chat/components/duo_chat_message/copy_code_element.js', 'src/components/chat/components/duo_chat_message/utils.js', 'src/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.vue']
128
+ }
129
+ }
130
+ };
116
131
  const MOCK_REQUEST_MESSAGE = {
117
132
  id: '123',
118
133
  content: 'On the left, review the proposed plan. Then ask questions or request changes. To execute the plan, select Approve plan.',
@@ -756,4 +771,4 @@ const AGENTIC_THREADLIST = [{
756
771
  }
757
772
  }];
758
773
 
759
- export { AGENTIC_THREADLIST, INCLUDE_SLASH_COMMAND, MOCK_AGENT_MESSAGE, MOCK_REQUEST_MESSAGE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT_AUTO_BRANCH, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT_MESSAGE_ONLY, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT_OLD_NEW_CONTENT, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_EPIC, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_ISSUE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_ISSUE_NOTE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_MERGE_REQUEST, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_MERGE_REQUEST_NOTE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_WORK_ITEM, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_WORK_ITEM_NOTE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_PARAMS, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_RUN_COMMAND, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_RUN_COMMAND_WITH_RESPONSE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_RUN_GIT_COMMAND, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_UPDATE_ISSUE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_UPDATE_WORK_ITEM, MOCK_RESPONSE_MESSAGE, MOCK_RESPONSE_MESSAGE_FOR_STREAMING, MOCK_TOOL_MESSAGE, MOCK_TOOL_MESSAGE_WITH_LINK, MOCK_USER_PROMPT_MESSAGE, MOCK_WORKFLOW_END_MESSAGE, SLASH_COMMANDS, THREADLIST, generateMockResponseChunks, generateSeparateChunks, renderGFM, renderMarkdown };
774
+ export { AGENTIC_THREADLIST, INCLUDE_SLASH_COMMAND, MOCK_AGENT_MESSAGE, MOCK_REQUEST_MESSAGE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT_AUTO_BRANCH, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT_MESSAGE_ONLY, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_COMMIT_OLD_NEW_CONTENT, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_EPIC, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_ISSUE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_ISSUE_NOTE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_MERGE_REQUEST, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_MERGE_REQUEST_NOTE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_WORK_ITEM, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_CREATE_WORK_ITEM_NOTE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_PARAMS, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_RUN_COMMAND, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_RUN_COMMAND_WITH_RESPONSE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_RUN_GIT_COMMAND, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_UPDATE_ISSUE, MOCK_REQUEST_MESSAGE_WITH_TOOL_APPROVAL_UPDATE_WORK_ITEM, MOCK_RESPONSE_MESSAGE, MOCK_RESPONSE_MESSAGE_FOR_STREAMING, MOCK_TOOL_MESSAGE, MOCK_TOOL_MESSAGE_WITH_LINK, MOCK_TOOL_MESSAGE_WITH_REQUEST_AND_RESPONSE_DETAILS, MOCK_USER_PROMPT_MESSAGE, MOCK_WORKFLOW_END_MESSAGE, SLASH_COMMANDS, THREADLIST, generateMockResponseChunks, generateSeparateChunks, renderGFM, renderMarkdown };
@@ -61,7 +61,7 @@ var script = {
61
61
  const __vue_script__ = script;
62
62
 
63
63
  /* template */
64
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-w-full gl-pt-4"},[_c('div',[(!_vm.feedbackReceived)?_c('gl-button',{attrs:{"variant":"link","target":"_blank","href":_vm.feedbackLinkUrl,"button-text-classes":"!gl-whitespace-normal gl-text-left"},on:{"click":function($event){_vm.shouldRenderModal && _vm.$refs.feedbackModal.show();}}},[_vm._v(_vm._s(_vm.feedbackLinkText))]):_c('gl-alert',{attrs:{"variant":"success","dismissible":false}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.FEEDBACK_THANKS)+"\n ")])],1),_vm._v(" "),(_vm.shouldRenderModal)?_c('feedback-modal',{ref:"feedbackModal",on:{"feedback-submitted":_vm.notify},scopedSlots:_vm._u([{key:"feedback-extra-fields",fn:function(){return [_vm._t("feedback-extra-fields")]},proxy:true}],null,true)}):_vm._e()],1)};
64
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-w-full gl-pt-2"},[_c('div',[(!_vm.feedbackReceived)?_c('gl-button',{attrs:{"variant":"link","target":"_blank","href":_vm.feedbackLinkUrl,"button-text-classes":"!gl-whitespace-normal gl-text-left gl-text-sm"},on:{"click":function($event){_vm.shouldRenderModal && _vm.$refs.feedbackModal.show();}}},[_vm._v(_vm._s(_vm.feedbackLinkText))]):_c('gl-alert',{attrs:{"variant":"success","dismissible":false}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.FEEDBACK_THANKS)+"\n ")])],1),_vm._v(" "),(_vm.shouldRenderModal)?_c('feedback-modal',{ref:"feedbackModal",on:{"feedback-submitted":_vm.notify},scopedSlots:_vm._u([{key:"feedback-extra-fields",fn:function(){return [_vm._t("feedback-extra-fields")]},proxy:true}],null,true)}):_vm._e()],1)};
65
65
  var __vue_staticRenderFns__ = [];
66
66
 
67
67
  /* style */
package/dist/tailwind.css CHANGED
@@ -1,2 +1,2 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.gl-animate-skeleton-loader{background-color:var(--gl-skeleton-loader-background-color);background-image:linear-gradient(to right,var(--gl-skeleton-loader-background-color) 0,var(--gl-skeleton-loader-shimmer-color) 23%,var(--gl-skeleton-loader-shimmer-color) 27%,var(--gl-skeleton-loader-background-color) 50%);background-position:-32rem 0;background-repeat:no-repeat;background-size:32rem 100%;max-width:32rem;overflow:hidden}@media (prefers-reduced-motion:no-preference){.gl-animate-skeleton-loader{animation:gl-keyframes-skeleton-loader 2.5s linear;animation-delay:inherit;animation-iteration-count:3}}@keyframes gl-keyframes-skeleton-loader{0%{background-position-x:-32rem}to{background-position-x:32rem}}.gl-border{border-color:var(--gl-border-color-default);border-style:solid}.gl-border-t{border-top-color:var(--gl-border-color-default);border-top-style:solid}.gl-border-r{border-right-color:var(--gl-border-color-default);border-right-style:solid}.gl-border-b{border-bottom-color:var(--gl-border-color-default);border-bottom-style:solid}.gl-heading-4{font-size:1rem}.gl-heading-3,.gl-heading-4{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0}.gl-heading-3{font-size:clamp(1.125rem,.9027777778rem + .462962963vw,1.25rem)}.gl-sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.gl-pointer-events-auto{pointer-events:auto}.gl-invisible{visibility:hidden}.gl-collapse{visibility:collapse}.gl-static{position:static}.gl-fixed{position:fixed}.\!gl-absolute{position:absolute!important}.gl-absolute{position:absolute}.gl-relative{position:relative}.gl-sticky{position:sticky}.gl-bottom-0{bottom:var(--gl-spacing-scale-0)}.gl-bottom-2{bottom:var(--gl-spacing-scale-2)}.gl-bottom-\[-1\.6rem\]{bottom:-1.6rem}.gl-bottom-\[-25px\]{bottom:-25px}.gl-bottom-\[-5rem\]{bottom:-5rem}.gl-left-0{left:var(--gl-spacing-scale-0)}.gl-right-0{right:var(--gl-spacing-scale-0)}.gl-right-2{right:var(--gl-spacing-scale-2)}.gl-right-3{right:var(--gl-spacing-scale-3)}.gl-right-5{right:var(--gl-spacing-scale-5)}.gl-right-px{right:var(--gl-spacing-scale-px)}.gl-top-0{top:var(--gl-spacing-scale-0)}.gl-top-5{top:var(--gl-spacing-scale-5)}.\!gl-z-9999{z-index:var(--gl-zindex-9999)!important}.gl-z-1{z-index:var(--gl-zindex-1)}.gl-z-2{z-index:var(--gl-zindex-2)}.gl-z-9999{z-index:var(--gl-zindex-9999)}.gl-float-right{float:right}.\!gl-m-0{margin:var(--gl-spacing-scale-0)!important}.gl-m-0{margin:var(--gl-spacing-scale-0)}.gl-m-3{margin:var(--gl-spacing-scale-3)}.gl-m-auto{margin:auto}.\!gl-mx-2{margin-left:var(--gl-spacing-scale-2)!important;margin-right:var(--gl-spacing-scale-2)!important}.-gl-mx-1{margin-left:calc(var(--gl-spacing-scale-1)*-1);margin-right:calc(var(--gl-spacing-scale-1)*-1)}.-gl-mx-2{margin-left:calc(var(--gl-spacing-scale-2)*-1);margin-right:calc(var(--gl-spacing-scale-2)*-1)}.-gl-mx-3{margin-left:calc(var(--gl-spacing-scale-3)*-1);margin-right:calc(var(--gl-spacing-scale-3)*-1)}.-gl-mx-4{margin-left:calc(var(--gl-spacing-scale-4)*-1);margin-right:calc(var(--gl-spacing-scale-4)*-1)}.-gl-my-1{margin-bottom:calc(var(--gl-spacing-scale-1)*-1);margin-top:calc(var(--gl-spacing-scale-1)*-1)}.-gl-my-3{margin-bottom:calc(var(--gl-spacing-scale-3)*-1);margin-top:calc(var(--gl-spacing-scale-3)*-1)}.gl-mx-0{margin-left:var(--gl-spacing-scale-0);margin-right:var(--gl-spacing-scale-0)}.gl-mx-2{margin-left:var(--gl-spacing-scale-2);margin-right:var(--gl-spacing-scale-2)}.gl-mx-3{margin-left:var(--gl-spacing-scale-3);margin-right:var(--gl-spacing-scale-3)}.gl-mx-4{margin-left:var(--gl-spacing-scale-4);margin-right:var(--gl-spacing-scale-4)}.gl-mx-auto{margin-left:auto;margin-right:auto}.gl-my-0{margin-bottom:var(--gl-spacing-scale-0);margin-top:var(--gl-spacing-scale-0)}.gl-my-2{margin-bottom:var(--gl-spacing-scale-2);margin-top:var(--gl-spacing-scale-2)}.gl-my-3{margin-bottom:var(--gl-spacing-scale-3);margin-top:var(--gl-spacing-scale-3)}.gl-my-4{margin-bottom:var(--gl-spacing-scale-4);margin-top:var(--gl-spacing-scale-4)}.gl-my-5{margin-bottom:var(--gl-spacing-scale-5);margin-top:var(--gl-spacing-scale-5)}.\!gl-mb-0{margin-bottom:var(--gl-spacing-scale-0)!important}.\!gl-mb-4{margin-bottom:var(--gl-spacing-scale-4)!important}.\!gl-mt-1{margin-top:var(--gl-spacing-scale-1)!important}.-gl-ml-2{margin-left:calc(var(--gl-spacing-scale-2)*-1)}.-gl-mr-3{margin-right:calc(var(--gl-spacing-scale-3)*-1)}.-gl-mt-2{margin-top:calc(var(--gl-spacing-scale-2)*-1)}.gl-mb-0{margin-bottom:var(--gl-spacing-scale-0)}.gl-mb-1{margin-bottom:var(--gl-spacing-scale-1)}.gl-mb-2{margin-bottom:var(--gl-spacing-scale-2)}.gl-mb-3{margin-bottom:var(--gl-spacing-scale-3)}.gl-mb-4{margin-bottom:var(--gl-spacing-scale-4)}.gl-mb-5{margin-bottom:var(--gl-spacing-scale-5)}.gl-mb-8{margin-bottom:var(--gl-spacing-scale-8)}.gl-ml-1{margin-left:var(--gl-spacing-scale-1)}.gl-ml-2{margin-left:var(--gl-spacing-scale-2)}.gl-ml-3{margin-left:var(--gl-spacing-scale-3)}.gl-ml-5{margin-left:var(--gl-spacing-scale-5)}.gl-ml-auto{margin-left:auto}.gl-mr-1{margin-right:var(--gl-spacing-scale-1)}.gl-mr-2{margin-right:var(--gl-spacing-scale-2)}.gl-mr-3{margin-right:var(--gl-spacing-scale-3)}.gl-mr-auto{margin-right:auto}.gl-mt-0{margin-top:var(--gl-spacing-scale-0)}.gl-mt-1{margin-top:var(--gl-spacing-scale-1)}.gl-mt-2{margin-top:var(--gl-spacing-scale-2)}.gl-mt-3{margin-top:var(--gl-spacing-scale-3)}.gl-mt-4{margin-top:var(--gl-spacing-scale-4)}.gl-mt-5{margin-top:var(--gl-spacing-scale-5)}.gl-mt-6{margin-top:var(--gl-spacing-scale-6)}.gl-mt-auto{margin-top:auto}.\!gl-block{display:block!important}.gl-block{display:block}.gl-inline-block{display:inline-block}.gl-flex{display:flex}.gl-inline-flex{display:inline-flex}.gl-table{display:table}.gl-grid{display:grid}.gl-hidden{display:none}.\!gl-h-full{height:100%!important}.gl-h-0{height:var(--gl-spacing-scale-0)}.gl-h-1{height:var(--gl-spacing-scale-1)}.gl-h-4{height:var(--gl-spacing-scale-4)}.gl-h-5{height:var(--gl-spacing-scale-5)}.gl-h-\[80px\]{height:80px}.gl-h-auto{height:auto}.gl-h-full{height:100%}.gl-max-h-13{max-height:var(--gl-spacing-scale-13)}.gl-max-h-31{max-height:var(--gl-spacing-scale-31)}.gl-max-h-full{max-height:100%}.gl-min-h-8{min-height:var(--gl-spacing-scale-8)}.gl-min-h-full{min-height:100%}.\!gl-w-31{width:var(--gl-spacing-scale-31)!important}.\!gl-w-auto{width:auto!important}.gl-w-1\/2{width:50%}.gl-w-1\/3{width:33.333333%}.gl-w-2\/3{width:66.666667%}.gl-w-3\/4{width:75%}.gl-w-4\/10{width:40%}.gl-w-5{width:var(--gl-spacing-scale-5)}.gl-w-6{width:var(--gl-spacing-scale-6)}.gl-w-9{width:var(--gl-spacing-scale-9)}.gl-w-auto{width:auto}.gl-w-full{width:100%}.gl-min-w-0{min-width:var(--gl-spacing-scale-0)}.gl-min-w-5{min-width:var(--gl-spacing-scale-5)}.gl-min-w-9{min-width:var(--gl-spacing-scale-9)}.gl-min-w-\[33\%\]{min-width:33%}.gl-max-w-1\/2{max-width:50%}.gl-max-w-17\/20{max-width:85%}.gl-max-w-full{max-width:100%}.gl-flex-1{flex:1 1 0%}.gl-flex-auto{flex:1 1 auto}.gl-flex-shrink-0,.gl-shrink-0{flex-shrink:0}.gl-flex-grow,.gl-grow{flex-grow:1}.gl-basis-0{flex-basis:var(--gl-spacing-scale-0)}.-gl-translate-y-full{--tw-translate-y:-100%;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))}.\!gl-cursor-grabbing{cursor:grabbing!important}.\!gl-cursor-not-allowed{cursor:not-allowed!important}.\!gl-cursor-text{cursor:text!important}.gl-cursor-default{cursor:default}.gl-cursor-grab{cursor:grab}.gl-cursor-not-allowed{cursor:not-allowed}.gl-cursor-pointer{cursor:pointer}.gl-cursor-text{cursor:text}.gl-list-none{list-style-type:none}.gl-flex-row{flex-direction:row}.gl-flex-col{flex-direction:column}.gl-flex-wrap{flex-wrap:wrap}.gl-flex-nowrap{flex-wrap:nowrap}.gl-content-center{align-content:center}.gl-items-start{align-items:flex-start}.gl-items-end{align-items:flex-end}.gl-items-center{align-items:center}.gl-items-baseline{align-items:baseline}.\!gl-justify-start{justify-content:flex-start!important}.gl-justify-start{justify-content:flex-start}.gl-justify-end{justify-content:flex-end}.gl-justify-center{justify-content:center}.gl-justify-between{justify-content:space-between}.gl-gap-1{gap:var(--gl-spacing-scale-1)}.gl-gap-2{gap:var(--gl-spacing-scale-2)}.gl-gap-3{gap:var(--gl-spacing-scale-3)}.gl-gap-4{gap:var(--gl-spacing-scale-4)}.gl-gap-5{gap:var(--gl-spacing-scale-5)}.gl-gap-7{gap:var(--gl-spacing-scale-7)}.gl-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(var(--gl-spacing-scale-1)*var(--tw-space-y-reverse));margin-top:calc(var(--gl-spacing-scale-1)*(1 - var(--tw-space-y-reverse)))}.gl-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(var(--gl-spacing-scale-2)*var(--tw-space-y-reverse));margin-top:calc(var(--gl-spacing-scale-2)*(1 - var(--tw-space-y-reverse)))}.gl-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(var(--gl-spacing-scale-3)*var(--tw-space-y-reverse));margin-top:calc(var(--gl-spacing-scale-3)*(1 - var(--tw-space-y-reverse)))}.gl-self-start{align-self:flex-start}.gl-self-center{align-self:center}.gl-overflow-auto{overflow:auto}.gl-overflow-hidden{overflow:hidden}.\!gl-overflow-visible{overflow:visible!important}.gl-overflow-visible{overflow:visible}.gl-overflow-y-auto{overflow-y:auto}.gl-overflow-x-hidden{overflow-x:hidden}.gl-overflow-y-scroll{overflow-y:scroll}.gl-overscroll-contain{overscroll-behavior:contain}.gl-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\!gl-text-ellipsis{text-overflow:ellipsis!important}.gl-text-ellipsis{text-overflow:ellipsis}.\!gl-whitespace-normal{white-space:normal!important}.gl-whitespace-normal{white-space:normal}.gl-whitespace-nowrap{white-space:nowrap}.gl-whitespace-pre-wrap{white-space:pre-wrap}.gl-text-pretty{text-wrap:pretty}.gl-break-words{overflow-wrap:break-word}.gl-break-all{word-break:break-all}.\!gl-rounded-control{border-radius:var(--gl-control-border-radius)!important}.\!gl-rounded-default{border-radius:var(--gl-border-radius-default)!important}.\!gl-rounded-full{border-radius:var(--gl-border-radius-full)!important}.\!gl-rounded-none{border-radius:var(--gl-border-radius-none)!important}.gl-rounded-\[1rem\]{border-radius:1rem}.gl-rounded-base{border-radius:.25rem}.gl-rounded-full{border-radius:var(--gl-border-radius-full)}.gl-rounded-lg{border-radius:var(--gl-border-radius-lg)}.gl-rounded-t-default{border-top-left-radius:var(--gl-border-radius-default);border-top-right-radius:var(--gl-border-radius-default)}.gl-rounded-bl-\[12px\]{border-bottom-left-radius:12px}.gl-rounded-bl-none{border-bottom-left-radius:var(--gl-border-radius-none)}.gl-rounded-br-\[18px\]{border-bottom-right-radius:18px}.gl-rounded-br-lg{border-bottom-right-radius:var(--gl-border-radius-lg)}.gl-rounded-br-none{border-bottom-right-radius:var(--gl-border-radius-none)}.gl-rounded-tl-\[12px\]{border-top-left-radius:12px}.gl-rounded-tr-\[12px\]{border-top-right-radius:12px}.gl-rounded-tr-lg{border-top-right-radius:var(--gl-border-radius-lg)}.gl-rounded-tr-none{border-top-right-radius:var(--gl-border-radius-none)}.\!gl-border-0{border-width:0!important}.gl-border{border-width:1px}.gl-border-0{border-width:0}.\!gl-border-b-0{border-bottom-width:0!important}.gl-border-b,.gl-border-b-1{border-bottom-width:1px}.gl-border-r{border-right-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-t-2{border-top-width:2px}.gl-border-solid{border-style:solid}.gl-border-dashed{border-style:dashed}.gl-border-none{border-style:none}.gl-border-dropdown{border-color:var(--gl-dropdown-border-color)}.gl-border-gray-100{border-color:var(--gray-100)}.gl-border-gray-500{border-color:var(--gray-500)}.gl-border-red-500{border-color:var(--red-500)}.gl-border-strong{border-color:var(--gl-border-color-strong)}.gl-border-subtle{border-color:var(--gl-border-color-subtle)}.gl-border-b-dropdown-divider{border-bottom-color:var(--gl-dropdown-divider-color)}.gl-border-t-dropdown-divider{border-top-color:var(--gl-dropdown-divider-color)}.\!gl-bg-transparent{background-color:initial!important}.gl-bg-blue-100{background-color:var(--blue-100)}.gl-bg-blue-50{background-color:var(--blue-50)}.gl-bg-default{background-color:var(--gl-background-color-default)}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color)}.gl-bg-feedback-danger{background-color:var(--gl-feedback-danger-background-color)}.gl-bg-feedback-info{background-color:var(--gl-feedback-info-background-color)}.gl-bg-gray-10{background-color:var(--gray-10)}.gl-bg-gray-50{background-color:var(--gray-50)}.gl-bg-inherit{background-color:inherit}.gl-bg-status-neutral{background-color:var(--gl-status-neutral-background-color)}.gl-bg-strong{background-color:var(--gl-background-color-strong)}.gl-bg-subtle{background-color:var(--gl-background-color-subtle)}.gl-bg-transparent{background-color:initial}.gl-bg-white{background-color:var(--white)}.gl-fill-current{fill:currentColor}.gl-fill-icon-danger{fill:var(--gl-icon-color-danger)}.gl-fill-icon-default{fill:var(--gl-icon-color-default)}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled)}.gl-fill-icon-info{fill:var(--gl-icon-color-info)}.gl-fill-icon-link{fill:var(--gl-icon-color-link)}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong)}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle)}.gl-fill-icon-success{fill:var(--gl-icon-color-success)}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning)}.\!gl-p-0{padding:var(--gl-spacing-scale-0)!important}.\!gl-p-2{padding:var(--gl-spacing-scale-2)!important}.\!gl-p-4{padding:var(--gl-spacing-scale-4)!important}.gl-p-0{padding:var(--gl-spacing-scale-0)}.gl-p-1{padding:var(--gl-spacing-scale-1)}.gl-p-2{padding:var(--gl-spacing-scale-2)}.gl-p-3{padding:var(--gl-spacing-scale-3)}.gl-p-4{padding:var(--gl-spacing-scale-4)}.gl-p-5{padding:var(--gl-spacing-scale-5)}.\!gl-px-2{padding-left:var(--gl-spacing-scale-2)!important;padding-right:var(--gl-spacing-scale-2)!important}.\!gl-px-3{padding-left:var(--gl-spacing-scale-3)!important;padding-right:var(--gl-spacing-scale-3)!important}.\!gl-py-2{padding-bottom:var(--gl-spacing-scale-2)!important;padding-top:var(--gl-spacing-scale-2)!important}.\!gl-py-4{padding-bottom:var(--gl-spacing-scale-4)!important;padding-top:var(--gl-spacing-scale-4)!important}.gl-px-0{padding-left:var(--gl-spacing-scale-0);padding-right:var(--gl-spacing-scale-0)}.gl-px-1{padding-left:var(--gl-spacing-scale-1);padding-right:var(--gl-spacing-scale-1)}.gl-px-2{padding-left:var(--gl-spacing-scale-2);padding-right:var(--gl-spacing-scale-2)}.gl-px-3{padding-left:var(--gl-spacing-scale-3);padding-right:var(--gl-spacing-scale-3)}.gl-px-4{padding-left:var(--gl-spacing-scale-4);padding-right:var(--gl-spacing-scale-4)}.gl-px-5{padding-left:var(--gl-spacing-scale-5);padding-right:var(--gl-spacing-scale-5)}.gl-py-2{padding-bottom:var(--gl-spacing-scale-2);padding-top:var(--gl-spacing-scale-2)}.gl-py-3{padding-bottom:var(--gl-spacing-scale-3);padding-top:var(--gl-spacing-scale-3)}.gl-py-4{padding-bottom:var(--gl-spacing-scale-4);padding-top:var(--gl-spacing-scale-4)}.gl-py-5{padding-bottom:var(--gl-spacing-scale-5);padding-top:var(--gl-spacing-scale-5)}.gl-py-6{padding-bottom:var(--gl-spacing-scale-6);padding-top:var(--gl-spacing-scale-6)}.\!gl-pl-9{padding-left:var(--gl-spacing-scale-9)!important}.\!gl-pr-7{padding-right:var(--gl-spacing-scale-7)!important}.\!gl-pr-9{padding-right:var(--gl-spacing-scale-9)!important}.\!gl-pt-0{padding-top:var(--gl-spacing-scale-0)!important}.gl-pb-2{padding-bottom:var(--gl-spacing-scale-2)}.gl-pb-3{padding-bottom:var(--gl-spacing-scale-3)}.gl-pb-4{padding-bottom:var(--gl-spacing-scale-4)}.gl-pl-0{padding-left:var(--gl-spacing-scale-0)}.gl-pl-2{padding-left:var(--gl-spacing-scale-2)}.gl-pl-3{padding-left:var(--gl-spacing-scale-3)}.gl-pl-4{padding-left:var(--gl-spacing-scale-4)}.gl-pl-5{padding-left:var(--gl-spacing-scale-5)}.gl-pl-6{padding-left:var(--gl-spacing-scale-6)}.gl-pl-7{padding-left:var(--gl-spacing-scale-7)}.gl-pr-2{padding-right:var(--gl-spacing-scale-2)}.gl-pr-3{padding-right:var(--gl-spacing-scale-3)}.gl-pr-5{padding-right:var(--gl-spacing-scale-5)}.gl-pr-6{padding-right:var(--gl-spacing-scale-6)}.gl-pr-7{padding-right:var(--gl-spacing-scale-7)}.gl-pr-8{padding-right:var(--gl-spacing-scale-8)}.gl-pt-1{padding-top:var(--gl-spacing-scale-1)}.gl-pt-2{padding-top:var(--gl-spacing-scale-2)}.gl-pt-3{padding-top:var(--gl-spacing-scale-3)}.gl-pt-4{padding-top:var(--gl-spacing-scale-4)}.gl-pt-6{padding-top:var(--gl-spacing-scale-6)}.\!gl-text-left{text-align:left!important}.gl-text-left{text-align:left}.gl-text-center{text-align:center}.gl-text-right{text-align:right}.gl-align-top{vertical-align:top}.gl-align-middle{vertical-align:middle}.gl-align-bottom{vertical-align:bottom}.\!gl-align-text-bottom{vertical-align:text-bottom!important}.gl-font-monospace{font-family:var(--gl-font-family-monospace)}.gl-font-regular{font-family:var(--gl-font-family-regular)}.\!gl-text-sm{font-size:var(--gl-font-size-sm)!important}.gl-text-\[0\.875rem\]{font-size:.875rem}.gl-text-base{font-size:var(--gl-font-size-base)}.gl-text-lg{font-size:var(--gl-font-size-lg)}.gl-text-md{font-size:var(--gl-font-size-md)}.gl-text-size-h-display{font-size:1.75rem}.gl-text-size-h2{font-size:1.1875rem}.gl-text-sm{font-size:var(--gl-font-size-sm)}.gl-text-xs{font-size:var(--gl-font-size-xs)}.gl-font-bold{font-weight:var(--gl-font-weight-bold)}.gl-font-normal{font-weight:var(--gl-font-weight-normal)}.gl-font-semibold{font-weight:var(--gl-font-weight-semibold)}.gl-lowercase{text-transform:lowercase}.gl-italic{font-style:italic}.gl-leading-1{line-height:1}.gl-leading-20{line-height:var(--gl-line-height-20)}.gl-leading-36{line-height:var(--gl-line-height-36)}.gl-leading-normal{line-height:1rem}.\!gl-text-default{color:var(--gl-text-color-default)!important}.\!gl-text-subtle{color:var(--gl-text-color-subtle)!important}.\!gl-text-success{color:var(--gl-text-color-success)!important}.gl-text-blue-100{color:var(--blue-100)}.gl-text-blue-500{color:var(--blue-500)}.gl-text-blue-600{color:var(--blue-600)}.gl-text-blue-700{color:var(--blue-700)}.gl-text-blue-900{color:var(--blue-900)}.gl-text-danger{color:var(--gl-text-color-danger)}.gl-text-default{color:var(--gl-text-color-default)}.gl-text-feedback-info{color:var(--gl-feedback-info-text-color)}.gl-text-gray-500{color:var(--gray-500)}.gl-text-gray-700{color:var(--gray-700)}.gl-text-gray-900{color:var(--gray-900)}.gl-text-green-500{color:var(--green-500)}.gl-text-green-600{color:var(--green-600)}.gl-text-inherit{color:inherit}.gl-text-neutral-0{color:var(--gl-color-neutral-0)}.gl-text-neutral-950{color:var(--gl-color-neutral-950)}.gl-text-orange-500{color:var(--orange-500)}.gl-text-red-500{color:var(--red-500)}.gl-text-red-600{color:var(--red-600)}.gl-text-strong{color:var(--gl-text-color-strong)}.gl-text-subtle{color:var(--gl-text-color-subtle)}.\!gl-opacity-0{opacity:var(--gl-opacity-0)!important}.gl-opacity-10{opacity:var(--gl-opacity-10)}.gl-opacity-\[50\%\]{opacity:50%}.\!gl-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.gl-shadow-md{--tw-shadow:var(--gl-shadow-md);--tw-shadow-colored:var(--gl-shadow-md)}.gl-shadow-md,.gl-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-shadow-sm{--tw-shadow:var(--gl-shadow-sm);--tw-shadow-colored:var(--gl-shadow-sm)}.gl-outline-none{outline:2px solid #0000;outline-offset:2px}.gl-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:ease}.gl-font-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}.gl-break-anywhere{overflow-wrap:anywhere;word-break:normal}.gl-border-b-solid{border-bottom-style:solid}.gl-border-t-solid{border-top-style:solid}.focus-within\:\!gl-shadow-none:focus-within{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.hover\:\!gl-cursor-not-allowed:hover{cursor:not-allowed!important}.hover\:gl-cursor-pointer:hover{cursor:pointer}.hover\:gl-bg-gray-50:hover{background-color:var(--gray-50)}.hover\:gl-no-underline:hover{text-decoration-line:none}.focus\:\!gl-focus-inset:focus{box-shadow:inset 0 0 0 2px var(--gl-focus-ring-outer-color),inset 0 0 0 3px var(--gl-focus-ring-inner-color),inset 0 0 0 1px var(--gl-focus-ring-inner-color)!important;outline:none!important}@media (min-width:576px){.\@sm\:gl-block{display:block}.\@sm\:gl-flex-nowrap{flex-wrap:nowrap}.\@sm\:gl-gap-3{gap:var(--gl-spacing-scale-3)}.sm\:gl-mt-3{margin-top:var(--gl-spacing-scale-3)}.sm\:\!gl-hidden{display:none!important}.sm\:gl-max-w-1\/2{max-width:50%}}.\[\&\>button\]\:focus-within\:\!gl-shadow-none:focus-within>button{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.gl-animate-skeleton-loader{background-color:var(--gl-skeleton-loader-background-color);background-image:linear-gradient(to right,var(--gl-skeleton-loader-background-color) 0,var(--gl-skeleton-loader-shimmer-color) 23%,var(--gl-skeleton-loader-shimmer-color) 27%,var(--gl-skeleton-loader-background-color) 50%);background-position:-32rem 0;background-repeat:no-repeat;background-size:32rem 100%;max-width:32rem;overflow:hidden}@media (prefers-reduced-motion:no-preference){.gl-animate-skeleton-loader{animation:gl-keyframes-skeleton-loader 2.5s linear;animation-delay:inherit;animation-iteration-count:3}}@keyframes gl-keyframes-skeleton-loader{0%{background-position-x:-32rem}to{background-position-x:32rem}}.gl-border{border-color:var(--gl-border-color-default);border-style:solid}.gl-border-t{border-top-color:var(--gl-border-color-default);border-top-style:solid}.gl-border-r{border-right-color:var(--gl-border-color-default);border-right-style:solid}.gl-border-b{border-bottom-color:var(--gl-border-color-default);border-bottom-style:solid}.gl-heading-4{font-size:1rem}.gl-heading-3,.gl-heading-4{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0}.gl-heading-3{font-size:clamp(1.125rem,.9027777778rem + .462962963vw,1.25rem)}.gl-sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.gl-pointer-events-auto{pointer-events:auto}.gl-invisible{visibility:hidden}.gl-collapse{visibility:collapse}.gl-static{position:static}.gl-fixed{position:fixed}.\!gl-absolute{position:absolute!important}.gl-absolute{position:absolute}.gl-relative{position:relative}.gl-sticky{position:sticky}.gl-bottom-0{bottom:var(--gl-spacing-scale-0)}.gl-bottom-2{bottom:var(--gl-spacing-scale-2)}.gl-bottom-\[-1\.6rem\]{bottom:-1.6rem}.gl-bottom-\[-25px\]{bottom:-25px}.gl-bottom-\[-5rem\]{bottom:-5rem}.gl-left-0{left:var(--gl-spacing-scale-0)}.gl-right-0{right:var(--gl-spacing-scale-0)}.gl-right-2{right:var(--gl-spacing-scale-2)}.gl-right-3{right:var(--gl-spacing-scale-3)}.gl-right-5{right:var(--gl-spacing-scale-5)}.gl-right-px{right:var(--gl-spacing-scale-px)}.gl-top-0{top:var(--gl-spacing-scale-0)}.gl-top-5{top:var(--gl-spacing-scale-5)}.\!gl-z-9999{z-index:var(--gl-zindex-9999)!important}.gl-z-1{z-index:var(--gl-zindex-1)}.gl-z-2{z-index:var(--gl-zindex-2)}.gl-z-9999{z-index:var(--gl-zindex-9999)}.gl-float-right{float:right}.\!gl-m-0{margin:var(--gl-spacing-scale-0)!important}.gl-m-0{margin:var(--gl-spacing-scale-0)}.gl-m-3{margin:var(--gl-spacing-scale-3)}.gl-m-auto{margin:auto}.\!gl-mx-2{margin-left:var(--gl-spacing-scale-2)!important;margin-right:var(--gl-spacing-scale-2)!important}.-gl-mx-1{margin-left:calc(var(--gl-spacing-scale-1)*-1);margin-right:calc(var(--gl-spacing-scale-1)*-1)}.-gl-mx-2{margin-left:calc(var(--gl-spacing-scale-2)*-1);margin-right:calc(var(--gl-spacing-scale-2)*-1)}.-gl-mx-3{margin-left:calc(var(--gl-spacing-scale-3)*-1);margin-right:calc(var(--gl-spacing-scale-3)*-1)}.-gl-mx-4{margin-left:calc(var(--gl-spacing-scale-4)*-1);margin-right:calc(var(--gl-spacing-scale-4)*-1)}.-gl-my-1{margin-bottom:calc(var(--gl-spacing-scale-1)*-1);margin-top:calc(var(--gl-spacing-scale-1)*-1)}.-gl-my-3{margin-bottom:calc(var(--gl-spacing-scale-3)*-1);margin-top:calc(var(--gl-spacing-scale-3)*-1)}.gl-mx-0{margin-left:var(--gl-spacing-scale-0);margin-right:var(--gl-spacing-scale-0)}.gl-mx-2{margin-left:var(--gl-spacing-scale-2);margin-right:var(--gl-spacing-scale-2)}.gl-mx-3{margin-left:var(--gl-spacing-scale-3);margin-right:var(--gl-spacing-scale-3)}.gl-mx-4{margin-left:var(--gl-spacing-scale-4);margin-right:var(--gl-spacing-scale-4)}.gl-mx-auto{margin-left:auto;margin-right:auto}.gl-my-0{margin-bottom:var(--gl-spacing-scale-0);margin-top:var(--gl-spacing-scale-0)}.gl-my-2{margin-bottom:var(--gl-spacing-scale-2);margin-top:var(--gl-spacing-scale-2)}.gl-my-3{margin-bottom:var(--gl-spacing-scale-3);margin-top:var(--gl-spacing-scale-3)}.gl-my-4{margin-bottom:var(--gl-spacing-scale-4);margin-top:var(--gl-spacing-scale-4)}.gl-my-5{margin-bottom:var(--gl-spacing-scale-5);margin-top:var(--gl-spacing-scale-5)}.\!gl-mb-0{margin-bottom:var(--gl-spacing-scale-0)!important}.\!gl-mb-4{margin-bottom:var(--gl-spacing-scale-4)!important}.\!gl-mt-1{margin-top:var(--gl-spacing-scale-1)!important}.-gl-ml-2{margin-left:calc(var(--gl-spacing-scale-2)*-1)}.-gl-mr-3{margin-right:calc(var(--gl-spacing-scale-3)*-1)}.-gl-mt-2{margin-top:calc(var(--gl-spacing-scale-2)*-1)}.gl-mb-0{margin-bottom:var(--gl-spacing-scale-0)}.gl-mb-1{margin-bottom:var(--gl-spacing-scale-1)}.gl-mb-2{margin-bottom:var(--gl-spacing-scale-2)}.gl-mb-3{margin-bottom:var(--gl-spacing-scale-3)}.gl-mb-4{margin-bottom:var(--gl-spacing-scale-4)}.gl-mb-5{margin-bottom:var(--gl-spacing-scale-5)}.gl-mb-8{margin-bottom:var(--gl-spacing-scale-8)}.gl-ml-1{margin-left:var(--gl-spacing-scale-1)}.gl-ml-2{margin-left:var(--gl-spacing-scale-2)}.gl-ml-3{margin-left:var(--gl-spacing-scale-3)}.gl-ml-5{margin-left:var(--gl-spacing-scale-5)}.gl-ml-auto{margin-left:auto}.gl-mr-1{margin-right:var(--gl-spacing-scale-1)}.gl-mr-2{margin-right:var(--gl-spacing-scale-2)}.gl-mr-3{margin-right:var(--gl-spacing-scale-3)}.gl-mr-auto{margin-right:auto}.gl-mt-0{margin-top:var(--gl-spacing-scale-0)}.gl-mt-1{margin-top:var(--gl-spacing-scale-1)}.gl-mt-2{margin-top:var(--gl-spacing-scale-2)}.gl-mt-3{margin-top:var(--gl-spacing-scale-3)}.gl-mt-4{margin-top:var(--gl-spacing-scale-4)}.gl-mt-5{margin-top:var(--gl-spacing-scale-5)}.gl-mt-6{margin-top:var(--gl-spacing-scale-6)}.gl-mt-auto{margin-top:auto}.gl-line-clamp-1{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden}.\!gl-block{display:block!important}.gl-block{display:block}.gl-inline-block{display:inline-block}.gl-flex{display:flex}.gl-inline-flex{display:inline-flex}.gl-table{display:table}.gl-grid{display:grid}.gl-hidden{display:none}.\!gl-h-full{height:100%!important}.gl-h-0{height:var(--gl-spacing-scale-0)}.gl-h-1{height:var(--gl-spacing-scale-1)}.gl-h-4{height:var(--gl-spacing-scale-4)}.gl-h-5{height:var(--gl-spacing-scale-5)}.gl-h-\[80px\]{height:80px}.gl-h-auto{height:auto}.gl-h-full{height:100%}.gl-max-h-13{max-height:var(--gl-spacing-scale-13)}.gl-max-h-31{max-height:var(--gl-spacing-scale-31)}.gl-max-h-full{max-height:100%}.gl-min-h-8{min-height:var(--gl-spacing-scale-8)}.gl-min-h-full{min-height:100%}.\!gl-w-31{width:var(--gl-spacing-scale-31)!important}.\!gl-w-auto{width:auto!important}.gl-w-1\/2{width:50%}.gl-w-1\/3{width:33.333333%}.gl-w-2\/3{width:66.666667%}.gl-w-3\/4{width:75%}.gl-w-4\/10{width:40%}.gl-w-5{width:var(--gl-spacing-scale-5)}.gl-w-6{width:var(--gl-spacing-scale-6)}.gl-w-9{width:var(--gl-spacing-scale-9)}.gl-w-auto{width:auto}.gl-w-full{width:100%}.gl-min-w-0{min-width:var(--gl-spacing-scale-0)}.gl-min-w-5{min-width:var(--gl-spacing-scale-5)}.gl-min-w-9{min-width:var(--gl-spacing-scale-9)}.gl-min-w-\[33\%\]{min-width:33%}.gl-max-w-1\/2{max-width:50%}.gl-max-w-17\/20{max-width:85%}.gl-max-w-full{max-width:100%}.gl-flex-1{flex:1 1 0%}.gl-flex-auto{flex:1 1 auto}.gl-flex-shrink-0,.gl-shrink-0{flex-shrink:0}.gl-flex-grow,.gl-grow{flex-grow:1}.gl-basis-0{flex-basis:var(--gl-spacing-scale-0)}.-gl-translate-y-full{--tw-translate-y:-100%;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))}.\!gl-cursor-grabbing{cursor:grabbing!important}.\!gl-cursor-not-allowed{cursor:not-allowed!important}.\!gl-cursor-text{cursor:text!important}.gl-cursor-default{cursor:default}.gl-cursor-grab{cursor:grab}.gl-cursor-not-allowed{cursor:not-allowed}.gl-cursor-pointer{cursor:pointer}.gl-cursor-text{cursor:text}.gl-list-none{list-style-type:none}.gl-flex-row{flex-direction:row}.gl-flex-col{flex-direction:column}.gl-flex-wrap{flex-wrap:wrap}.gl-flex-nowrap{flex-wrap:nowrap}.gl-content-center{align-content:center}.gl-items-start{align-items:flex-start}.gl-items-end{align-items:flex-end}.gl-items-center{align-items:center}.gl-items-baseline{align-items:baseline}.\!gl-justify-start{justify-content:flex-start!important}.gl-justify-start{justify-content:flex-start}.gl-justify-end{justify-content:flex-end}.gl-justify-center{justify-content:center}.gl-justify-between{justify-content:space-between}.gl-gap-1{gap:var(--gl-spacing-scale-1)}.gl-gap-2{gap:var(--gl-spacing-scale-2)}.gl-gap-3{gap:var(--gl-spacing-scale-3)}.gl-gap-4{gap:var(--gl-spacing-scale-4)}.gl-gap-5{gap:var(--gl-spacing-scale-5)}.gl-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(var(--gl-spacing-scale-1)*var(--tw-space-y-reverse));margin-top:calc(var(--gl-spacing-scale-1)*(1 - var(--tw-space-y-reverse)))}.gl-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(var(--gl-spacing-scale-2)*var(--tw-space-y-reverse));margin-top:calc(var(--gl-spacing-scale-2)*(1 - var(--tw-space-y-reverse)))}.gl-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(var(--gl-spacing-scale-3)*var(--tw-space-y-reverse));margin-top:calc(var(--gl-spacing-scale-3)*(1 - var(--tw-space-y-reverse)))}.gl-self-start{align-self:flex-start}.gl-self-center{align-self:center}.gl-overflow-auto{overflow:auto}.gl-overflow-hidden{overflow:hidden}.\!gl-overflow-visible{overflow:visible!important}.gl-overflow-visible{overflow:visible}.gl-overflow-y-auto{overflow-y:auto}.gl-overflow-x-hidden{overflow-x:hidden}.gl-overflow-y-scroll{overflow-y:scroll}.gl-overscroll-contain{overscroll-behavior:contain}.gl-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\!gl-text-ellipsis{text-overflow:ellipsis!important}.gl-text-ellipsis{text-overflow:ellipsis}.\!gl-whitespace-normal{white-space:normal!important}.gl-whitespace-normal{white-space:normal}.gl-whitespace-nowrap{white-space:nowrap}.gl-whitespace-pre-wrap{white-space:pre-wrap}.gl-text-pretty{text-wrap:pretty}.gl-break-words{overflow-wrap:break-word}.gl-break-all{word-break:break-all}.\!gl-rounded-control{border-radius:var(--gl-control-border-radius)!important}.\!gl-rounded-default{border-radius:var(--gl-border-radius-default)!important}.\!gl-rounded-full{border-radius:var(--gl-border-radius-full)!important}.\!gl-rounded-none{border-radius:var(--gl-border-radius-none)!important}.gl-rounded-\[1rem\]{border-radius:1rem}.gl-rounded-base{border-radius:.25rem}.gl-rounded-full{border-radius:var(--gl-border-radius-full)}.gl-rounded-lg{border-radius:var(--gl-border-radius-lg)}.gl-rounded-t-default{border-top-left-radius:var(--gl-border-radius-default);border-top-right-radius:var(--gl-border-radius-default)}.gl-rounded-bl-\[12px\]{border-bottom-left-radius:12px}.gl-rounded-bl-none{border-bottom-left-radius:var(--gl-border-radius-none)}.gl-rounded-br-\[18px\]{border-bottom-right-radius:18px}.gl-rounded-br-lg{border-bottom-right-radius:var(--gl-border-radius-lg)}.gl-rounded-br-none{border-bottom-right-radius:var(--gl-border-radius-none)}.gl-rounded-tl-\[12px\]{border-top-left-radius:12px}.gl-rounded-tr-\[12px\]{border-top-right-radius:12px}.gl-rounded-tr-lg{border-top-right-radius:var(--gl-border-radius-lg)}.gl-rounded-tr-none{border-top-right-radius:var(--gl-border-radius-none)}.\!gl-border-0{border-width:0!important}.gl-border{border-width:1px}.gl-border-0{border-width:0}.\!gl-border-b-0{border-bottom-width:0!important}.gl-border-b,.gl-border-b-1{border-bottom-width:1px}.gl-border-r{border-right-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-t-2{border-top-width:2px}.gl-border-solid{border-style:solid}.gl-border-dashed{border-style:dashed}.gl-border-none{border-style:none}.gl-border-dropdown{border-color:var(--gl-dropdown-border-color)}.gl-border-gray-100{border-color:var(--gray-100)}.gl-border-gray-500{border-color:var(--gray-500)}.gl-border-red-500{border-color:var(--red-500)}.gl-border-strong{border-color:var(--gl-border-color-strong)}.gl-border-subtle{border-color:var(--gl-border-color-subtle)}.gl-border-b-dropdown-divider{border-bottom-color:var(--gl-dropdown-divider-color)}.gl-border-t-dropdown-divider{border-top-color:var(--gl-dropdown-divider-color)}.\!gl-bg-transparent{background-color:initial!important}.gl-bg-blue-100{background-color:var(--blue-100)}.gl-bg-blue-50{background-color:var(--blue-50)}.gl-bg-default{background-color:var(--gl-background-color-default)}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color)}.gl-bg-feedback-danger{background-color:var(--gl-feedback-danger-background-color)}.gl-bg-feedback-info{background-color:var(--gl-feedback-info-background-color)}.gl-bg-gray-10{background-color:var(--gray-10)}.gl-bg-gray-50{background-color:var(--gray-50)}.gl-bg-inherit{background-color:inherit}.gl-bg-status-neutral{background-color:var(--gl-status-neutral-background-color)}.gl-bg-strong{background-color:var(--gl-background-color-strong)}.gl-bg-subtle{background-color:var(--gl-background-color-subtle)}.gl-bg-transparent{background-color:initial}.gl-bg-white{background-color:var(--white)}.gl-fill-current{fill:currentColor}.gl-fill-icon-danger{fill:var(--gl-icon-color-danger)}.gl-fill-icon-default{fill:var(--gl-icon-color-default)}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled)}.gl-fill-icon-info{fill:var(--gl-icon-color-info)}.gl-fill-icon-link{fill:var(--gl-icon-color-link)}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong)}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle)}.gl-fill-icon-success{fill:var(--gl-icon-color-success)}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning)}.\!gl-p-0{padding:var(--gl-spacing-scale-0)!important}.\!gl-p-2{padding:var(--gl-spacing-scale-2)!important}.\!gl-p-4{padding:var(--gl-spacing-scale-4)!important}.\!gl-p-5{padding:var(--gl-spacing-scale-5)!important}.gl-p-0{padding:var(--gl-spacing-scale-0)}.gl-p-1{padding:var(--gl-spacing-scale-1)}.gl-p-2{padding:var(--gl-spacing-scale-2)}.gl-p-3{padding:var(--gl-spacing-scale-3)}.gl-p-4{padding:var(--gl-spacing-scale-4)}.gl-p-5{padding:var(--gl-spacing-scale-5)}.\!gl-px-2{padding-left:var(--gl-spacing-scale-2)!important;padding-right:var(--gl-spacing-scale-2)!important}.\!gl-px-3{padding-left:var(--gl-spacing-scale-3)!important;padding-right:var(--gl-spacing-scale-3)!important}.\!gl-py-2{padding-bottom:var(--gl-spacing-scale-2)!important;padding-top:var(--gl-spacing-scale-2)!important}.\!gl-py-4{padding-bottom:var(--gl-spacing-scale-4)!important;padding-top:var(--gl-spacing-scale-4)!important}.gl-px-0{padding-left:var(--gl-spacing-scale-0);padding-right:var(--gl-spacing-scale-0)}.gl-px-1{padding-left:var(--gl-spacing-scale-1);padding-right:var(--gl-spacing-scale-1)}.gl-px-2{padding-left:var(--gl-spacing-scale-2);padding-right:var(--gl-spacing-scale-2)}.gl-px-3{padding-left:var(--gl-spacing-scale-3);padding-right:var(--gl-spacing-scale-3)}.gl-px-4{padding-left:var(--gl-spacing-scale-4);padding-right:var(--gl-spacing-scale-4)}.gl-px-5{padding-left:var(--gl-spacing-scale-5);padding-right:var(--gl-spacing-scale-5)}.gl-py-2{padding-bottom:var(--gl-spacing-scale-2);padding-top:var(--gl-spacing-scale-2)}.gl-py-3{padding-bottom:var(--gl-spacing-scale-3);padding-top:var(--gl-spacing-scale-3)}.gl-py-4{padding-bottom:var(--gl-spacing-scale-4);padding-top:var(--gl-spacing-scale-4)}.gl-py-5{padding-bottom:var(--gl-spacing-scale-5);padding-top:var(--gl-spacing-scale-5)}.gl-py-6{padding-bottom:var(--gl-spacing-scale-6);padding-top:var(--gl-spacing-scale-6)}.\!gl-pl-9{padding-left:var(--gl-spacing-scale-9)!important}.\!gl-pr-7{padding-right:var(--gl-spacing-scale-7)!important}.\!gl-pr-9{padding-right:var(--gl-spacing-scale-9)!important}.\!gl-pt-0{padding-top:var(--gl-spacing-scale-0)!important}.gl-pb-2{padding-bottom:var(--gl-spacing-scale-2)}.gl-pb-3{padding-bottom:var(--gl-spacing-scale-3)}.gl-pb-4{padding-bottom:var(--gl-spacing-scale-4)}.gl-pl-0{padding-left:var(--gl-spacing-scale-0)}.gl-pl-2{padding-left:var(--gl-spacing-scale-2)}.gl-pl-3{padding-left:var(--gl-spacing-scale-3)}.gl-pl-4{padding-left:var(--gl-spacing-scale-4)}.gl-pl-5{padding-left:var(--gl-spacing-scale-5)}.gl-pl-6{padding-left:var(--gl-spacing-scale-6)}.gl-pl-7{padding-left:var(--gl-spacing-scale-7)}.gl-pr-2{padding-right:var(--gl-spacing-scale-2)}.gl-pr-3{padding-right:var(--gl-spacing-scale-3)}.gl-pr-5{padding-right:var(--gl-spacing-scale-5)}.gl-pr-6{padding-right:var(--gl-spacing-scale-6)}.gl-pr-7{padding-right:var(--gl-spacing-scale-7)}.gl-pr-8{padding-right:var(--gl-spacing-scale-8)}.gl-pt-1{padding-top:var(--gl-spacing-scale-1)}.gl-pt-2{padding-top:var(--gl-spacing-scale-2)}.gl-pt-3{padding-top:var(--gl-spacing-scale-3)}.gl-pt-4{padding-top:var(--gl-spacing-scale-4)}.gl-pt-6{padding-top:var(--gl-spacing-scale-6)}.\!gl-text-left{text-align:left!important}.gl-text-left{text-align:left}.gl-text-center{text-align:center}.gl-text-right{text-align:right}.gl-align-top{vertical-align:top}.gl-align-middle{vertical-align:middle}.gl-align-bottom{vertical-align:bottom}.\!gl-align-text-bottom{vertical-align:text-bottom!important}.gl-font-monospace{font-family:var(--gl-font-family-monospace)}.gl-font-regular{font-family:var(--gl-font-family-regular)}.\!gl-text-sm{font-size:var(--gl-font-size-sm)!important}.gl-text-\[0\.75rem\]{font-size:.75rem}.gl-text-\[0\.875rem\]{font-size:.875rem}.gl-text-base{font-size:var(--gl-font-size-base)}.gl-text-lg{font-size:var(--gl-font-size-lg)}.gl-text-md{font-size:var(--gl-font-size-md)}.gl-text-size-h-display{font-size:1.75rem}.gl-text-size-h2{font-size:1.1875rem}.gl-text-sm{font-size:var(--gl-font-size-sm)}.gl-text-xs{font-size:var(--gl-font-size-xs)}.gl-font-bold{font-weight:var(--gl-font-weight-bold)}.gl-font-normal{font-weight:var(--gl-font-weight-normal)}.gl-font-semibold{font-weight:var(--gl-font-weight-semibold)}.gl-lowercase{text-transform:lowercase}.gl-italic{font-style:italic}.\!gl-leading-20{line-height:var(--gl-line-height-20)!important}.gl-leading-1{line-height:1}.gl-leading-20{line-height:var(--gl-line-height-20)}.gl-leading-36{line-height:var(--gl-line-height-36)}.gl-leading-normal{line-height:1rem}.\!gl-text-default{color:var(--gl-text-color-default)!important}.\!gl-text-subtle{color:var(--gl-text-color-subtle)!important}.\!gl-text-success{color:var(--gl-text-color-success)!important}.gl-text-blue-100{color:var(--blue-100)}.gl-text-blue-500{color:var(--blue-500)}.gl-text-blue-600{color:var(--blue-600)}.gl-text-blue-700{color:var(--blue-700)}.gl-text-blue-900{color:var(--blue-900)}.gl-text-danger{color:var(--gl-text-color-danger)}.gl-text-default{color:var(--gl-text-color-default)}.gl-text-feedback-info{color:var(--gl-feedback-info-text-color)}.gl-text-gray-500{color:var(--gray-500)}.gl-text-gray-700{color:var(--gray-700)}.gl-text-gray-900{color:var(--gray-900)}.gl-text-green-500{color:var(--green-500)}.gl-text-green-600{color:var(--green-600)}.gl-text-inherit{color:inherit}.gl-text-neutral-0{color:var(--gl-color-neutral-0)}.gl-text-neutral-950{color:var(--gl-color-neutral-950)}.gl-text-orange-500{color:var(--orange-500)}.gl-text-red-500{color:var(--red-500)}.gl-text-red-600{color:var(--red-600)}.gl-text-strong{color:var(--gl-text-color-strong)}.gl-text-subtle{color:var(--gl-text-color-subtle)}.\!gl-opacity-0{opacity:var(--gl-opacity-0)!important}.gl-opacity-10{opacity:var(--gl-opacity-10)}.gl-opacity-\[50\%\]{opacity:50%}.\!gl-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.gl-shadow-md{--tw-shadow:var(--gl-shadow-md);--tw-shadow-colored:var(--gl-shadow-md)}.gl-shadow-md,.gl-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-shadow-sm{--tw-shadow:var(--gl-shadow-sm);--tw-shadow-colored:var(--gl-shadow-sm)}.gl-outline-none{outline:2px solid #0000;outline-offset:2px}.gl-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:ease}.gl-font-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}.gl-break-anywhere{overflow-wrap:anywhere;word-break:normal}.gl-border-b-solid{border-bottom-style:solid}.gl-border-t-solid{border-top-style:solid}.focus-within\:\!gl-shadow-none:focus-within{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.hover\:\!gl-cursor-not-allowed:hover{cursor:not-allowed!important}.hover\:gl-cursor-pointer:hover{cursor:pointer}.hover\:gl-bg-gray-50:hover{background-color:var(--gray-50)}.hover\:gl-no-underline:hover{text-decoration-line:none}.focus\:\!gl-focus-inset:focus{box-shadow:inset 0 0 0 2px var(--gl-focus-ring-outer-color),inset 0 0 0 3px var(--gl-focus-ring-inner-color),inset 0 0 0 1px var(--gl-focus-ring-inner-color)!important;outline:none!important}@media (min-width:576px){.\@sm\:gl-block{display:block}.\@sm\:gl-flex-nowrap{flex-wrap:nowrap}.\@sm\:gl-gap-3{gap:var(--gl-spacing-scale-3)}.sm\:gl-mt-3{margin-top:var(--gl-spacing-scale-3)}.sm\:\!gl-hidden{display:none!important}.sm\:gl-max-w-1\/2{max-width:50%}}.\[\&\>button\]\:focus-within\:\!gl-shadow-none:focus-within>button{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}
2
2
  /*# sourceMappingURL=tailwind.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["tailwind.css"],"names":[],"mappings":"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","file":"tailwind.css","sourcesContent":["@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"]}
1
+ {"version":3,"sources":["tailwind.css"],"names":[],"mappings":"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","file":"tailwind.css","sourcesContent":["@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/duo-ui",
3
- "version": "13.5.3",
3
+ "version": "13.6.1",
4
4
  "description": "Duo UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -53,6 +53,11 @@ export default {
53
53
  required: false,
54
54
  default: i18n.CHAT_TITLE,
55
55
  },
56
+ agentHandler: {
57
+ type: String,
58
+ required: false,
59
+ default: null,
60
+ },
56
61
  subtitle: {
57
62
  type: String,
58
63
  required: false,
@@ -168,7 +173,7 @@ export default {
168
173
  <header data-testid="chat-header" class="gl-border-b gl-shrink-0 gl-p-0">
169
174
  <div
170
175
  v-if="!showStudioHeader"
171
- class="gl-border-b gl-flex gl-w-full gl-items-center gl-px-5 gl-py-3"
176
+ class="gl-border-b gl-flex gl-w-full gl-items-center gl-px-4 gl-py-3"
172
177
  data-testid="chat-top-header"
173
178
  >
174
179
  <h4
@@ -189,14 +194,14 @@ export default {
189
194
  @click="$emit('close')"
190
195
  />
191
196
  </div>
192
- <div
193
- class="drawer-title gl-flex gl-items-center gl-justify-start gl-p-5"
194
- :class="{ 'gl-p-4': showStudioHeader }"
195
- >
196
- <div class="gl-flex gl-flex-1 gl-overflow-hidden">
197
- <gl-avatar :size="32" :entity-name="title" shape="circle" class="gl-mr-3" />
198
- <div class="gl-flex gl-items-center">
199
- <h3 class="gl-my-0 gl-text-[0.875rem]">{{ title }}</h3>
197
+ <div class="drawer-title gl-flex gl-items-center gl-justify-start gl-gap-4 gl-px-4 gl-py-3">
198
+ <div class="gl-flex gl-grow gl-gap-3">
199
+ <gl-avatar :size="32" :entity-name="title" shape="circle" class="gl-shrink-0" />
200
+ <div class="gl-flex gl-flex-col gl-justify-center">
201
+ <h3 class="gl-my-0 gl-line-clamp-1 gl-text-[0.875rem] gl-text-default">{{ title }}</h3>
202
+ <p v-if="agentHandler" class="gl-my-0 gl-text-[0.75rem] gl-text-subtle">
203
+ {{ agentHandler }}
204
+ </p>
200
205
  </div>
201
206
  </div>
202
207
 
@@ -409,7 +409,7 @@ export default {
409
409
  <template v-if="isAssistantMessage">
410
410
  <documentation-sources v-if="sources" :sources="sources" />
411
411
 
412
- <div class="duo-chat-message-feedback gl-mt-4 gl-flex gl-items-end">
412
+ <div class="duo-chat-message-feedback gl-mt-2 gl-flex gl-items-end">
413
413
  <gl-animated-loader-icon v-if="isChunkAndNotCancelled" :is-on="true" />
414
414
  <message-feedback
415
415
  v-if="shouldShowFeedbackLink"
@@ -70,7 +70,7 @@ export default {
70
70
  </script>
71
71
  <template>
72
72
  <div
73
- class="duo-chat-message gl-leading-20 gl-break-anywhere"
73
+ class="duo-chat-message gl-w-full gl-flex-grow gl-leading-20 gl-break-anywhere"
74
74
  :class="{
75
75
  'gl-items-top gl-flex': hasError,
76
76
  }"
@@ -1,5 +1,5 @@
1
1
  <script>
2
- import { GlIcon, GlLink } from '@gitlab/ui';
2
+ import { GlIcon, GlLink, GlButton } from '@gitlab/ui';
3
3
  import { translate } from '../../../../../utils/i18n';
4
4
  import MessageToolApproval from '../../duo_chat_message_tool_approval/message_tool_approval.vue';
5
5
  import { APPROVAL_TOOL_NAMES } from '../../../constants';
@@ -28,6 +28,7 @@ export default {
28
28
  MessageToolDetails,
29
29
  GlIcon,
30
30
  GlLink,
31
+ GlButton,
31
32
  },
32
33
  i18n,
33
34
  provide: {
@@ -39,6 +40,12 @@ export default {
39
40
  },
40
41
  },
41
42
  },
43
+ inject: {
44
+ detailsExpanded: {
45
+ default: false,
46
+ },
47
+ },
48
+
42
49
  props: {
43
50
  message: {
44
51
  required: true,
@@ -54,7 +61,7 @@ export default {
54
61
  },
55
62
  },
56
63
  data() {
57
- return { isDetailsOpen: false };
64
+ return { isDetailsOpen: this.detailsExpanded };
58
65
  },
59
66
  computed: {
60
67
  iconName() {
@@ -142,6 +149,13 @@ export default {
142
149
  this.isDetailsOpen = !this.isDetailsOpen;
143
150
  }
144
151
  },
152
+ onCopyCodeSnippet(e) {
153
+ /**
154
+ * Emit copy-code-snippet event that clients can use to interact with a suggested code.
155
+ * @param {*} event An event containing code string in the "detail.code" field.
156
+ */
157
+ this.$emit('copy-code-snippet', e);
158
+ },
145
159
  },
146
160
  };
147
161
  </script>
@@ -155,53 +169,55 @@ export default {
155
169
  <base-message v-else :message="message">
156
170
  <template #message="{ content }">
157
171
  <div class="gl-flex gl-items-baseline !gl-text-subtle">
158
- <div class="gl-mr-3 gl-flex-shrink-0">
159
- <gl-icon :name="iconName" />
160
- </div>
161
- <div class="gl-flex-1">
162
- <div
163
- class="gl-mb-2"
164
- :class="{ 'gl-cursor-pointer': shouldShowDetails }"
172
+ <div class="gl-mb-2">
173
+ <gl-button
174
+ v-if="shouldShowDetails"
175
+ button-text-classes="!gl-whitespace-normal gl-text-left"
176
+ :icon="iconName"
177
+ variant="link"
165
178
  @click="toggleClickToolDetails"
166
- @keydown="toggleKeydownToolDetails"
167
179
  >
168
180
  <span data-testid="tool-message-content">{{ content }}</span>
169
181
  <gl-icon v-if="shouldShowDetails" :name="collapseIconName" />
182
+ </gl-button>
183
+ <div v-else class="gl-flex gl-items-center">
184
+ <span class="gl-mr-3 gl-flex-shrink-0">
185
+ <gl-icon :name="iconName" />
186
+ </span>
187
+ <span data-testid="tool-message-content">{{ content }}</span>
170
188
  </div>
189
+ </div>
190
+ </div>
191
+ <div v-if="projectId" class="gl-mb-2" data-testid="tool-message-project-info">
192
+ <span class="gl-font-weight-bold">{{ $options.i18n.PROJECT_LABEL }}:</span>
193
+ <span class="gl-ml-2" data-testid="tool-message-project-id">{{ projectId }}</span>
194
+ </div>
171
195
 
172
- <div v-if="projectId" class="gl-mb-2" data-testid="tool-message-project-info">
173
- <span class="gl-font-weight-bold">{{ $options.i18n.PROJECT_LABEL }}:</span>
174
- <span class="gl-ml-2" data-testid="tool-message-project-id">{{ projectId }}</span>
175
- </div>
176
-
177
- <div v-if="branchName" class="gl-mb-2" data-testid="tool-message-branch-info">
178
- <span class="gl-font-weight-bold">{{ $options.i18n.BRANCH_LABEL }}:</span>
179
- <span class="gl-ml-2" data-testid="tool-message-branch-name">{{ branchName }}</span>
180
- </div>
196
+ <div v-if="branchName" class="gl-mb-2" data-testid="tool-message-branch-info">
197
+ <span class="gl-font-weight-bold">{{ $options.i18n.BRANCH_LABEL }}:</span>
198
+ <span class="gl-ml-2" data-testid="tool-message-branch-name">{{ branchName }}</span>
199
+ </div>
181
200
 
182
- <div v-if="startBranch" class="gl-mb-2" data-testid="tool-message-start-branch-info">
183
- <span class="gl-font-weight-bold">{{ $options.i18n.START_BRANCH_LABEL }}:</span>
184
- <span class="gl-ml-2" data-testid="tool-message-start-branch-name">{{
185
- startBranch
186
- }}</span>
187
- </div>
201
+ <div v-if="startBranch" class="gl-mb-2" data-testid="tool-message-start-branch-info">
202
+ <span class="gl-font-weight-bold">{{ $options.i18n.START_BRANCH_LABEL }}:</span>
203
+ <span class="gl-ml-2" data-testid="tool-message-start-branch-name">{{ startBranch }}</span>
204
+ </div>
188
205
 
189
- <div v-else-if="messageFilePath" class="gl-mb-2">
190
- <span class="gl-font-weight-bold">{{ $options.i18n.FILE_PATH_LABEL }}:</span>
191
- <gl-link
192
- class="gl-markdown file-path-link gl-ml-2 gl-break-all"
193
- data-testid="tool-message-file-path-link"
194
- @click.prevent="onOpenFilePath(messageFilePath)"
195
- >
196
- <code>{{ messageFilePath }}</code>
197
- </gl-link>
198
- </div>
199
- </div>
206
+ <div v-else-if="messageFilePath" class="gl-mb-2">
207
+ <span class="gl-font-weight-bold">{{ $options.i18n.FILE_PATH_LABEL }}:</span>
208
+ <gl-link
209
+ class="gl-markdown file-path-link gl-ml-2 gl-break-all"
210
+ data-testid="tool-message-file-path-link"
211
+ @click.prevent="onOpenFilePath(messageFilePath)"
212
+ >
213
+ <code>{{ messageFilePath }}</code>
214
+ </gl-link>
200
215
  </div>
201
216
  <message-tool-details
202
217
  v-if="shouldShowDetails"
203
218
  :message="message"
204
219
  :is-expanded="isDetailsOpen"
220
+ @copy-code-snippet="onCopyCodeSnippet"
205
221
  />
206
222
  </template>
207
223
  </base-message>
@@ -17,15 +17,32 @@ export default {
17
17
  return `tool-details-${this.message?.id || Math.random().toString(36).slice(2)}`;
18
18
  },
19
19
  },
20
+ methods: {
21
+ onCopyCodeSnippet(e) {
22
+ /**
23
+ * Emit copy-code-snippet event that clients can use to interact with a suggested code.
24
+ * @param {*} event An event containing code string in the "detail.code" field.
25
+ */
26
+ this.$emit('copy-code-snippet', e);
27
+ },
28
+ },
20
29
  };
21
30
  </script>
22
31
 
23
32
  <template>
24
33
  <gl-collapse :id="collapseId" :visible="isExpanded">
25
- <gl-card class="gl-mt-2">
26
- <div class="gl-grid gl-gap-7 gl-px-3 gl-py-3">
27
- <tool-kv-section title="Request" :value="toolInfo.args" />
28
- <tool-kv-section title="Response" :value="toolInfo.tool_response" />
34
+ <gl-card>
35
+ <div class="gl-grid gl-gap-3 gl-px-3 gl-py-3">
36
+ <tool-kv-section
37
+ title="Request"
38
+ :value="toolInfo.args"
39
+ @copy-code-snippet="onCopyCodeSnippet"
40
+ />
41
+ <tool-kv-section
42
+ title="Response"
43
+ :value="toolInfo.tool_response"
44
+ @copy-code-snippet="onCopyCodeSnippet"
45
+ />
29
46
  </div>
30
47
  </gl-card>
31
48
  </gl-collapse>
@@ -1,39 +1,41 @@
1
1
  <script>
2
- import { nextTick } from 'vue';
3
- import { GlButton, GlTooltipDirective } from '@gitlab/ui';
4
2
  import isEmpty from 'lodash/isEmpty';
3
+ import { GlButton, GlTooltipDirective } from '@gitlab/ui';
4
+ import PreBlock from '../../duo_chat_message_tool_approval/components/pre_block.vue';
5
5
  import { checkClipboardPermissions } from '../utils';
6
6
 
7
7
  function makePretty(value, visited = new WeakSet()) {
8
- if (isEmpty(value)) return { result: '', isJson: false };
8
+ if (isEmpty(value)) return '';
9
9
  if (typeof value === 'string') {
10
10
  try {
11
11
  const parsed = JSON.parse(value);
12
- return { result: JSON.stringify(parsed, null, 2), isJson: true };
12
+ return JSON.stringify(parsed, null, 2);
13
13
  } catch (e) {
14
- return { result: value, isJson: false };
14
+ return value;
15
15
  }
16
16
  }
17
17
 
18
18
  try {
19
19
  if (typeof value === 'object' && visited.has(value)) {
20
- return { result: '', isJson: false };
20
+ return '';
21
21
  }
22
22
  if ('content' in value) {
23
23
  visited.add(value);
24
24
  return makePretty(value.content, visited);
25
25
  }
26
26
 
27
- return { result: JSON.stringify(value, null, 2), isJson: true };
27
+ return JSON.stringify(value, null, 2);
28
28
  } catch (e) {
29
- return { result: String(value), isJson: false };
29
+ return String(value);
30
30
  }
31
31
  }
32
32
 
33
33
  export default {
34
34
  name: 'ToolKvSection',
35
- directives: { GlTooltip: GlTooltipDirective },
36
- components: { GlButton },
35
+ directives: {
36
+ GlTooltip: GlTooltipDirective,
37
+ },
38
+ components: { GlButton, PreBlock },
37
39
  inject: {
38
40
  renderGFM: {
39
41
  from: 'renderGFM',
@@ -49,97 +51,65 @@ export default {
49
51
  maxHeight: { type: String, required: false, default: '260px' },
50
52
  },
51
53
  computed: {
52
- prettyResult() {
54
+ prettyText() {
53
55
  return makePretty(this.value);
54
56
  },
55
- pretty() {
56
- return this.prettyResult.result;
57
- },
58
57
  hasContent() {
59
- return this.pretty && this.pretty.length > 0;
58
+ return this.prettyText && this.prettyText.length > 0;
60
59
  },
61
- isJson() {
62
- return this.prettyResult.isJson;
63
- },
64
- },
65
- async mounted() {
66
- if (this.isJson) {
67
- await nextTick();
68
- this.applyJsonHighlight();
69
- }
70
60
  },
71
61
  methods: {
72
- async copy() {
73
- const textToCopy = this.pretty;
62
+ async onCopyCodeSnippet() {
63
+ const textToCopy = this.prettyText;
64
+
74
65
  const hasClipboardPermission = await checkClipboardPermissions();
75
66
 
76
67
  try {
77
- // Dispatch custom event for VS Code and other environments
68
+ // Emit custom event for VS Code and other environments
78
69
  // This bubbles up to parent components that handle clipboard operations
79
- this.$el.dispatchEvent(
80
- new CustomEvent('copy-code-snippet', {
81
- bubbles: true,
82
- cancelable: true,
83
- detail: {
84
- code: textToCopy,
85
- },
86
- })
87
- );
70
+ this.$emit('copy-code-snippet', {
71
+ detail: {
72
+ code: textToCopy,
73
+ },
74
+ });
88
75
 
89
76
  // If we have clipboard permission, also copy directly
90
77
  if (hasClipboardPermission) {
91
78
  await navigator.clipboard.writeText(textToCopy);
92
79
  }
93
-
94
80
  this.$emit('copied', this.title);
95
81
  } catch (e) {
96
82
  // eslint-disable-next-line no-console
97
83
  console.warn('Failed to copy:', e);
98
84
  }
99
85
  },
100
- async applyJsonHighlight() {
101
- if (this.renderGFM && typeof this.renderGFM === 'function' && this.$refs.content) {
102
- this.renderGFM(this.$refs.content);
103
- }
104
- },
105
86
  },
106
87
  };
107
88
  </script>
108
89
 
109
90
  <template>
110
- <section v-if="hasContent">
111
- <header
112
- class="gl-display-flex gl-align-items-center gl-justify-content-space-between gl-mb-2"
113
- data-testid="tool-section-header"
114
- >
115
- <div class="gl-display-flex gl-align-items-center gl-gap-2">
116
- <strong class="gl-text-gray-900">{{ title }}</strong>
117
- </div>
118
- </header>
119
-
120
- <div
121
- class="gl-display-block gl-relative gl-block gl-rounded-base gl-border-gray-100 gl-bg-gray-50 gl-p-5"
122
- :style="{ maxHeight, overflow: 'auto' }"
123
- >
91
+ <figure v-if="hasContent" class="gl-mb-0 gl-overflow-auto">
92
+ <figcaption class="gl-mb-3" data-testid="tool-section-header">
93
+ <strong>{{ title }}</strong>
94
+ </figcaption>
95
+ <div class="gl-relative gl-block gl-overflow-auto">
124
96
  <div class="gl-absolute gl-right-5 gl-top-5 gl-z-1">
125
97
  <gl-button
126
- v-if="pretty"
127
- v-gl-tooltip
128
- category="tertiary"
98
+ v-if="prettyText"
99
+ v-gl-tooltip.viewport="{ boundary: 'viewport' }"
129
100
  size="small"
130
101
  icon="copy-to-clipboard"
131
102
  title="Copy to clipboard"
132
103
  aria-label="Copy to clipboard"
133
- @click.stop="copy"
104
+ @click.stop="onCopyCodeSnippet"
134
105
  />
135
106
  </div>
136
- <pre
107
+ <pre-block
137
108
  ref="content"
138
109
  class="gl-font-mono gl-m-0 !gl-border-0 gl-text-gray-900"
139
- :class="isJson ? 'code js-syntax-highlight language-json' : ''"
140
- style="white-space: pre-wrap"
141
- >{{ pretty }}</pre
110
+ :style="{ maxHeight }"
111
+ >{{ prettyText }}</pre-block
142
112
  >
143
113
  </div>
144
- </section>
114
+ </figure>
145
115
  </template>
@@ -1,5 +1,5 @@
1
1
  <template>
2
2
  <pre
3
- class="js-syntax-highlight gl-border gl-grid gl-text-pretty gl-rounded-lg gl-border-strong gl-bg-strong gl-p-5 gl-font-monospace"
4
- ><code><slot></slot></code></pre>
3
+ class="js-syntax-highlight gl-border gl-grid gl-overflow-auto gl-whitespace-pre-wrap gl-text-pretty gl-rounded-lg gl-border-strong gl-bg-strong !gl-p-5 gl-font-monospace"
4
+ ><code class="!gl-leading-20 gl-break-all"><slot></slot></code></pre>
5
5
  </template>
@@ -130,6 +130,26 @@ export const MOCK_TOOL_MESSAGE_WITH_LINK = {
130
130
  },
131
131
  };
132
132
 
133
+ export const MOCK_TOOL_MESSAGE_WITH_REQUEST_AND_RESPONSE_DETAILS = {
134
+ id: '123',
135
+ content: "Search for 'duo.*chat.*message' in directory",
136
+ message_type: MESSAGE_MODEL_ROLES.tool,
137
+ tool_info: {
138
+ name: 'search_code',
139
+ args: {
140
+ query: 'clipboard copy button code snippet',
141
+ path: 'src/components',
142
+ },
143
+ tool_response: {
144
+ matches: [
145
+ 'src/components/chat/components/duo_chat_message/copy_code_element.js',
146
+ 'src/components/chat/components/duo_chat_message/utils.js',
147
+ 'src/components/chat/components/duo_chat_message/message_types/message_tool_kv_section.vue',
148
+ ],
149
+ },
150
+ },
151
+ };
152
+
133
153
  export const MOCK_REQUEST_MESSAGE = {
134
154
  id: '123',
135
155
  content:
@@ -60,14 +60,14 @@ export default {
60
60
  </script>
61
61
 
62
62
  <template>
63
- <div class="gl-w-full gl-pt-4">
63
+ <div class="gl-w-full gl-pt-2">
64
64
  <div>
65
65
  <gl-button
66
66
  v-if="!feedbackReceived"
67
67
  variant="link"
68
68
  target="_blank"
69
69
  :href="feedbackLinkUrl"
70
- button-text-classes="!gl-whitespace-normal gl-text-left"
70
+ button-text-classes="!gl-whitespace-normal gl-text-left gl-text-sm"
71
71
  @click="shouldRenderModal && $refs.feedbackModal.show()"
72
72
  >{{ feedbackLinkText }}</gl-button
73
73
  >