@gitlab/duo-ui 8.23.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/components/chat/components/duo_chat_message/duo_chat_message.js +1 -1
- package/dist/components/chat/components/duo_chat_message/message_types/message_agent.js +16 -1
- package/dist/components/chat/mock_data.js +24 -1
- package/dist/index.js +1 -2
- package/dist/tailwind.css +1 -1
- package/dist/tailwind.css.map +1 -1
- package/package.json +3 -3
- package/src/components/chat/components/duo_chat_message/duo_chat_message.vue +2 -0
- package/src/components/chat/components/duo_chat_message/message_types/message_agent.vue +23 -1
- package/src/components/chat/mock_data.js +24 -1
- package/src/index.js +3 -4
- package/translations.js +0 -12
- package/dist/components/workflow/components/duo_workflow_panel/duo_workflow_panel.js +0 -95
- package/dist/components/workflow/components/duo_workflow_prompt/duo_workflow_prompt.js +0 -235
- package/src/components/workflow/components/duo_workflow_panel/duo_workflow_panel.md +0 -33
- package/src/components/workflow/components/duo_workflow_panel/duo_workflow_panel.vue +0 -84
- package/src/components/workflow/components/duo_workflow_prompt/duo_workflow_prompt.md +0 -37
- package/src/components/workflow/components/duo_workflow_prompt/duo_workflow_prompt.vue +0 -258
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
# [9.0.0](https://gitlab.com/gitlab-org/duo-ui/compare/v8.24.0...v9.0.0) (2025-07-01)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### chore
|
|
5
|
+
|
|
6
|
+
* remove unused duo workflow components ([54be435](https://gitlab.com/gitlab-org/duo-ui/commit/54be43542f3400365574212b712c3d2aaa0ba53e))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### BREAKING CHANGES
|
|
10
|
+
|
|
11
|
+
* removing duo ui components
|
|
12
|
+
remove duo_workflow_prompt from duo ui
|
|
13
|
+
remove duo_workflow_panel from duo ui
|
|
14
|
+
update translations
|
|
15
|
+
|
|
16
|
+
# [8.24.0](https://gitlab.com/gitlab-org/duo-ui/compare/v8.23.0...v8.24.0) (2025-06-27)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* enable insert snippet and copy code ([16dd03d](https://gitlab.com/gitlab-org/duo-ui/commit/16dd03d88d429db5dd198c1149d7e370ffdce150))
|
|
22
|
+
|
|
1
23
|
# [8.23.0](https://gitlab.com/gitlab-org/duo-ui/compare/v8.22.1...v8.23.0) (2025-06-26)
|
|
2
24
|
|
|
3
25
|
|
|
@@ -305,7 +305,7 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
|
|
|
305
305
|
'gl-bg-subtle': _vm.isAssistantMessage && !_vm.error,
|
|
306
306
|
'duo-chat-message-with-error gl-bg-feedback-danger': _vm.error,
|
|
307
307
|
'!gl-rounded-br-none': _vm.shouldShowCopyAction,
|
|
308
|
-
},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(" "),(_vm.error)?_c('gl-icon',{staticClass:"error-icon 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',{ref:"content-wrapper",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',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.renderedError),expression:"renderedError",arg:_vm.$options.safeHtmlConfigExtension}],ref:"error-message"}):_c('div',[_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content"}),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-message-feedback gl-mt-4 gl-flex gl-items-end"},[(_vm.isChunkAndNotCancelled)?_c('gl-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)],1),_vm._v(" "),_c('transition',{attrs:{"name":"duo-chat-message-actions"}},[(_vm.shouldShowCopyAction)?_c('div',{staticClass:"gl-bg-subtle duo-chat-message-actions gl-rounded-tr-lg gl-rounded-br-lg"},[_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(_vm.componentForMessageType(_vm.message),{tag:"component",attrs:{"message":_vm.message,"with-feedback":_vm.withFeedback,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent}})],2)};
|
|
308
|
+
},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(" "),(_vm.error)?_c('gl-icon',{staticClass:"error-icon 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',{ref:"content-wrapper",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',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.renderedError),expression:"renderedError",arg:_vm.$options.safeHtmlConfigExtension}],ref:"error-message"}):_c('div',[_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content"}),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"duo-chat-message-feedback gl-mt-4 gl-flex gl-items-end"},[(_vm.isChunkAndNotCancelled)?_c('gl-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)],1),_vm._v(" "),_c('transition',{attrs:{"name":"duo-chat-message-actions"}},[(_vm.shouldShowCopyAction)?_c('div',{staticClass:"gl-bg-subtle duo-chat-message-actions gl-rounded-tr-lg gl-rounded-br-lg"},[_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(_vm.componentForMessageType(_vm.message),{tag:"component",attrs:{"message":_vm.message,"with-feedback":_vm.withFeedback,"data-testid":"workflow-message"},on:{"open-file-path":_vm.onOpenFilePath,"feedback":_vm.logEvent,"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}})],2)};
|
|
309
309
|
var __vue_staticRenderFns__ = [];
|
|
310
310
|
|
|
311
311
|
/* style */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GlSafeHtmlDirective } from '@gitlab/ui';
|
|
1
2
|
import MessageFeedback from '../message_feedback';
|
|
2
3
|
import BaseMessage from './message_base';
|
|
3
4
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
@@ -8,6 +9,12 @@ var script = {
|
|
|
8
9
|
BaseMessage,
|
|
9
10
|
MessageFeedback
|
|
10
11
|
},
|
|
12
|
+
directives: {
|
|
13
|
+
SafeHtml: GlSafeHtmlDirective
|
|
14
|
+
},
|
|
15
|
+
safeHtmlConfigExtension: {
|
|
16
|
+
ADD_TAGS: ['copy-code', 'insert-code-snippet']
|
|
17
|
+
},
|
|
11
18
|
props: {
|
|
12
19
|
message: {
|
|
13
20
|
required: true,
|
|
@@ -24,6 +31,14 @@ var script = {
|
|
|
24
31
|
var _this$message, _this$message$errors;
|
|
25
32
|
return Boolean((_this$message = this.message) === null || _this$message === void 0 ? void 0 : (_this$message$errors = _this$message.errors) === null || _this$message$errors === void 0 ? void 0 : _this$message$errors.length);
|
|
26
33
|
}
|
|
34
|
+
},
|
|
35
|
+
methods: {
|
|
36
|
+
onInsertCodeSnippet(e) {
|
|
37
|
+
this.$emit('insert-code-snippet', e);
|
|
38
|
+
},
|
|
39
|
+
onCopyCodeSnippet(e) {
|
|
40
|
+
this.$emit('copy-code-snippet', e);
|
|
41
|
+
}
|
|
27
42
|
}
|
|
28
43
|
};
|
|
29
44
|
|
|
@@ -33,7 +48,7 @@ const __vue_script__ = script;
|
|
|
33
48
|
/* template */
|
|
34
49
|
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-message',{staticClass:"gl-rounded-bl-none gl-border-1 gl-border-solid gl-text-gray-900 gl-p-4 gl-border-gray-50",class:{
|
|
35
50
|
'gl-border-red-100': _vm.hasError,
|
|
36
|
-
},attrs:{"message":_vm.message},scopedSlots:_vm._u([{key:"message",fn:function(slotProps){return [_vm._t("message",function(){return [
|
|
51
|
+
},attrs:{"message":_vm.message},scopedSlots:_vm._u([{key:"message",fn:function(slotProps){return [_vm._t("message",function(){return [_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(slotProps.htmlContent),expression:"slotProps.htmlContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content",on:{"insert-code-snippet":_vm.onInsertCodeSnippet,"copy-code-snippet":_vm.onCopyCodeSnippet}})]},null,slotProps),_vm._v(" "),(_vm.withFeedback)?_c('message-feedback',{on:{"feedback":function($event){return _vm.$emit('feedback', $event)}}}):_vm._e()]}}],null,true)})};
|
|
37
52
|
var __vue_staticRenderFns__ = [];
|
|
38
53
|
|
|
39
54
|
/* style */
|
|
@@ -76,7 +76,30 @@ const MOCK_TOOL_MESSAGE = {
|
|
|
76
76
|
};
|
|
77
77
|
const MOCK_AGENT_MESSAGE = {
|
|
78
78
|
id: '123',
|
|
79
|
-
content:
|
|
79
|
+
content: `I'll write a simple Python function with comments for you. Here's an example:\n\n<div class="gl-relative markdown-code-block js-markdown-code"><pre><code class="language-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">factorial</span>(<span class="hljs-params">n</span>):
|
|
80
|
+
<span class="hljs-string">"""
|
|
81
|
+
Calculate the factorial of a non-negative integer.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
n (int): A non-negative integer
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
int: The factorial of n (n!)
|
|
88
|
+
|
|
89
|
+
Examples:
|
|
90
|
+
>>> factorial(5)
|
|
91
|
+
120
|
|
92
|
+
>>> factorial(0)
|
|
93
|
+
1
|
|
94
|
+
"""</span>
|
|
95
|
+
<span class="hljs-comment"># Base case: factorial of 0 or 1 is 1</span>
|
|
96
|
+
<span class="hljs-keyword">if</span> n <= <span class="hljs-number">1</span>:
|
|
97
|
+
<span class="hljs-keyword">return</span> <span class="hljs-number">1</span>
|
|
98
|
+
|
|
99
|
+
<span class="hljs-comment"># Recursive case: n! = n * (n-1)!</span>
|
|
100
|
+
<span class="hljs-keyword">return</span> n * factorial(n - <span class="hljs-number">1</span>)
|
|
101
|
+
</code></pre>
|
|
102
|
+
<copy-code></copy-code><insert-code-snippet></insert-code-snippet></div>\n\n\nThis function calculates the factorial of a number using recursion. It includes a docstring explaining what the function does, its parameters, return value, and usage examples, plus inline comments explaining the logic.`,
|
|
80
103
|
message_type: MESSAGE_MODEL_ROLES.agent
|
|
81
104
|
};
|
|
82
105
|
const MOCK_TOOL_MESSAGE_WITH_LINK = {
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
export { default as DuoUserFeedback } from './components/user_feedback/user_feedback';
|
|
2
|
-
export { default as DuoWorkflowPanel } from './components/workflow/components/duo_workflow_panel/duo_workflow_panel';
|
|
3
|
-
export { default as DuoWorkflowPrompt } from './components/workflow/components/duo_workflow_prompt/duo_workflow_prompt';
|
|
4
2
|
export { default as DuoChat } from './components/chat/duo_chat';
|
|
5
3
|
export { default as DuoChatContextConversation } from './components/chat/components/duo_chat_conversation/duo_chat_conversation';
|
|
6
4
|
export { default as DuoChatLoader } from './components/chat/components/duo_chat_loader/duo_chat_loader';
|
|
@@ -18,4 +16,5 @@ export { default as DuoChatContextItemMenu } from './components/chat/components/
|
|
|
18
16
|
export { default as DuoChatContextItemPopover } from './components/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover';
|
|
19
17
|
export { default as DuoChatContextItemSelections } from './components/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections';
|
|
20
18
|
export { InsertCodeSnippetElement as DuoChatInsertCodeSnippetElement } from './components/chat/components/duo_chat_message/insert_code_snippet_element';
|
|
19
|
+
export { default as DuoTerminalCommand } from './components/ui/duo_terminal_command/duo_terminal_command';
|
|
21
20
|
export { addDuoMarkdownPlugin } from './components/chat/markdown_renderer';
|
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-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-none{pointer-events:none}.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:0}.gl-bottom-2{bottom:.25rem}.gl-left-0{left:0}.gl-right-2{right:.25rem}.gl-top-0{top:0}.\!gl-z-9999{z-index:9999!important}.gl-z-2{z-index:2}.gl-z-9999{z-index:9999}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.gl-m-3{margin:.5rem}.gl-m-auto{margin:auto}.\!gl-mx-2{margin-left:.25rem!important;margin-right:.25rem!important}.-gl-mx-1{margin-left:-.125rem;margin-right:-.125rem}.-gl-mx-4{margin-left:-.75rem;margin-right:-.75rem}.-gl-my-1{margin-bottom:-.125rem;margin-top:-.125rem}.-gl-my-3{margin-bottom:-.5rem;margin-top:-.5rem}.gl-mx-2{margin-left:.25rem;margin-right:.25rem}.gl-mx-3{margin-left:.5rem;margin-right:.5rem}.gl-mx-4{margin-left:.75rem;margin-right:.75rem}.gl-mx-auto{margin-left:auto;margin-right:auto}.gl-my-0{margin-bottom:0;margin-top:0}.gl-my-3{margin-bottom:.5rem;margin-top:.5rem}.gl-my-4{margin-bottom:.75rem;margin-top:.75rem}.gl-my-5{margin-bottom:1rem;margin-top:1rem}.\!gl-mb-0{margin-bottom:0!important}.\!gl-mb-4{margin-bottom:.75rem!important}.-gl-ml-2{margin-left:-.25rem}.-gl-mr-3{margin-right:-.5rem}.-gl-mt-2{margin-top:-.25rem}.gl-mb-0{margin-bottom:0}.gl-mb-1{margin-bottom:.125rem}.gl-mb-2{margin-bottom:.25rem}.gl-mb-3{margin-bottom:.5rem}.gl-mb-4{margin-bottom:.75rem}.gl-mb-5{margin-bottom:1rem}.gl-ml-1{margin-left:.125rem}.gl-ml-2{margin-left:.25rem}.gl-ml-3{margin-left:.5rem}.gl-ml-5{margin-left:1rem}.gl-ml-6{margin-left:1.5rem}.gl-ml-7{margin-left:2rem}.gl-ml-auto{margin-left:auto}.gl-mr-1{margin-right:.125rem}.gl-mr-2{margin-right:.25rem}.gl-mr-3{margin-right:.5rem}.gl-mr-auto{margin-right:auto}.gl-mt-0{margin-top:0}.gl-mt-1{margin-top:.125rem}.gl-mt-2{margin-top:.25rem}.gl-mt-3{margin-top:.5rem}.gl-mt-4{margin-top:.75rem}.gl-mt-5{margin-top:1rem}.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-hidden{display:none}.\!gl-h-full{height:100%!important}.gl-h-0{height:0}.gl-h-4{height:.75rem}.gl-h-5{height:1rem}.gl-h-auto{height:auto}.gl-h-full{height:100%}.gl-max-h-13{max-height:6rem}.gl-max-h-31{max-height:15.5rem}.gl-max-h-full{max-height:100%}.gl-min-h-8{min-height:2.5rem}.\!gl-w-31{width:15.5rem!important}.\!gl-w-auto{width:auto!important}.gl-w-1\/2{width:50%}.gl-w-3\/4{width:75%}.gl-w-4\/10{width:40%}.gl-w-5{width:1rem}.gl-w-auto{width:auto}.gl-w-full{width:100%}.gl-min-w-0{min-width:0}.gl-min-w-\[33\%\]{min-width:33%}.gl-max-w-1\/2{max-width:50%}.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: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-not-allowed{cursor:not-allowed!important}.\!gl-cursor-text{cursor:text!important}.gl-cursor-default{cursor:default}.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-3{gap:.5rem}.gl-gap-4{gap:.75rem}.gl-gap-5{gap:1rem}.gl-self-start{align-self:flex-start}.gl-self-center{align-self:center}.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-break-words{overflow-wrap:break-word}.gl-break-all{word-break:break-all}.\!gl-rounded-base{border-radius:.25rem!important}.\!gl-rounded-full{border-radius:50%!important}.\!gl-rounded-none{border-radius:0!important}.gl-rounded-base{border-radius:.25rem}.gl-rounded-full{border-radius:50%}.gl-rounded-lg{border-radius:.5rem}.gl-rounded-t-base{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.\!gl-rounded-br-none{border-bottom-right-radius:0!important}.gl-rounded-bl-none{border-bottom-left-radius:0}.gl-rounded-br-lg{border-bottom-right-radius:.5rem}.gl-rounded-br-none{border-bottom-right-radius:0}.gl-rounded-tr-lg{border-top-right-radius:.5rem}.gl-rounded-tr-none{border-top-right-radius:0}.gl-border{border-width:1px}.gl-border-0{border-width:0}.gl-border-1{border-width:1px}.\!gl-border-b-0{border-bottom-width:0!important}.gl-border-b,.gl-border-b-1{border-bottom-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,var(--gl-border-color-strong,#bfbfc3))}.gl-border-gray-50{border-color:var(--gray-50,#ececef)}.gl-border-gray-500{border-color:var(--gray-500,#737278)}.gl-border-neutral-600{border-color:var(--gl-color-neutral-600,#626168)}.gl-border-red-100{border-color:var(--red-100,#fdd4cd)}.gl-border-red-500{border-color:var(--red-500,#dd2b0e)}.gl-border-transparent{border-color:var(--gl-border-color-transparent,var(--gl-color-alpha-0,#0000))}.gl-border-b-dropdown-divider{border-bottom-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.gl-border-t-dropdown-divider{border-top-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.\!gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)!important}.\!gl-bg-transparent{background-color:initial!important}.gl-bg-black{background-color:var(--black,#050506)}.gl-bg-blue-50{background-color:var(--blue-50,#e9f3fc)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color,var(--gl-background-color-overlap,#fff))}.gl-bg-feedback-danger{background-color:var(--gl-feedback-danger-background-color,var(--gl-color-red-50,#fcf1ef))}.gl-bg-feedback-info{background-color:var(--gl-feedback-info-background-color,var(--gl-color-blue-50,#e9f3fc))}.gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)}.gl-bg-gray-50{background-color:var(--gray-50,#ececef)}.gl-bg-inherit{background-color:inherit}.gl-bg-status-neutral{background-color:var(--gl-status-neutral-background-color,var(--gl-color-neutral-100,#dcdcde))}.gl-bg-subtle{background-color:var(--gl-background-color-subtle,var(--gl-color-neutral-10,#fbfafd))}.gl-bg-transparent{background-color:initial}.gl-bg-white{background-color:var(--white,#fff)}.gl-fill-current{fill:currentColor}.gl-fill-gray-100{fill:var(--gray-100,#dcdcde)}.gl-fill-icon-danger{fill:var(--gl-icon-color-danger,var(--gl-text-color-danger,#c02f12))}.gl-fill-icon-default{fill:var(--gl-icon-color-default,var(--gl-text-color-default,#3a383f))}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled,var(--gl-text-color-disabled,#89888d))}.gl-fill-icon-info{fill:var(--gl-icon-color-info,var(--gl-color-blue-700,#2f5ca0))}.gl-fill-icon-link{fill:var(--gl-icon-color-link,var(--gl-text-color-link,#2f5ca0))}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong,var(--gl-text-color-strong,#18171d))}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle,var(--gl-text-color-subtle,#626168))}.gl-fill-icon-success{fill:var(--gl-icon-color-success,var(--gl-text-color-success,#2f7549))}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning,var(--gl-text-color-warning,#995715))}.\!gl-p-0{padding:0!important}.\!gl-p-2{padding:.25rem!important}.\!gl-p-4{padding:.75rem!important}.gl-p-0{padding:0}.gl-p-1{padding:.125rem}.gl-p-2{padding:.25rem}.gl-p-3{padding:.5rem}.gl-p-4{padding:.75rem}.gl-p-5{padding:1rem}.\!gl-px-2{padding-left:.25rem!important;padding-right:.25rem!important}.\!gl-px-3{padding-left:.5rem!important;padding-right:.5rem!important}.\!gl-py-2{padding-bottom:.25rem!important;padding-top:.25rem!important}.\!gl-py-4{padding-bottom:.75rem!important;padding-top:.75rem!important}.gl-px-1{padding-left:.125rem;padding-right:.125rem}.gl-px-2{padding-left:.25rem;padding-right:.25rem}.gl-px-3{padding-left:.5rem;padding-right:.5rem}.gl-px-4{padding-left:.75rem;padding-right:.75rem}.gl-px-5{padding-left:1rem;padding-right:1rem}.gl-py-2{padding-bottom:.25rem;padding-top:.25rem}.gl-py-3{padding-bottom:.5rem;padding-top:.5rem}.gl-py-5{padding-bottom:1rem;padding-top:1rem}.gl-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.\!gl-pl-9{padding-left:3rem!important}.\!gl-pr-7{padding-right:2rem!important}.\!gl-pr-9{padding-right:3rem!important}.\!gl-pt-0{padding-top:0!important}.gl-pb-2{padding-bottom:.25rem}.gl-pb-3{padding-bottom:.5rem}.gl-pl-0{padding-left:0}.gl-pl-2{padding-left:.25rem}.gl-pl-3{padding-left:.5rem}.gl-pl-4{padding-left:.75rem}.gl-pl-5{padding-left:1rem}.gl-pl-6{padding-left:1.5rem}.gl-pl-7{padding-left:2rem}.gl-pr-2{padding-right:.25rem}.gl-pr-3{padding-right:.5rem}.gl-pr-5{padding-right:1rem}.gl-pr-6{padding-right:1.5rem}.gl-pr-8{padding-right:2.5rem}.gl-pt-1{padding-top:.125rem}.gl-pt-2{padding-top:.25rem}.gl-pt-3{padding-top:.5rem}.gl-pt-4{padding-top:.75rem}.\!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-regular{font-family:var(--default-regular-font,"GitLab Sans"),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\!gl-text-sm{font-size:.75rem!important}.gl-text-base{font-size:.875rem}.gl-text-size-h-display{font-size:1.75rem}.gl-text-size-h2{font-size:1.1875rem}.gl-text-sm{font-size:.75rem}.gl-text-xs{font-size:.625rem}.gl-font-bold{font-weight:600}.gl-font-normal{font-weight:400}.gl-lowercase{text-transform:lowercase}.gl-italic{font-style:italic}.gl-leading-1{line-height:1}.gl-leading-20{line-height:1.25rem}.gl-leading-36{line-height:2.25rem}.gl-leading-normal{line-height:1rem}.\!gl-text-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))!important}.\!gl-text-subtle{color:var(--gl-text-color-subtle,var(--gl-color-neutral-600,#626168))!important}.\!gl-text-success{color:var(--gl-text-color-success,var(--gl-color-green-600,#2f7549))!important}.gl-text-blue-100{color:var(--blue-100,#cbe2f9)}.gl-text-blue-500{color:var(--blue-500,#1f75cb)}.gl-text-blue-600{color:var(--blue-600,#2f68b4)}.gl-text-blue-700{color:var(--blue-700,#2f5ca0)}.gl-text-danger{color:var(--gl-text-color-danger,var(--gl-color-red-600,#c02f12))}.gl-text-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))}.gl-text-feedback-info{color:var(--gl-feedback-info-text-color,var(--gl-color-blue-700,#2f5ca0))}.gl-text-gray-500{color:var(--gray-500,#737278)}.gl-text-gray-700{color:var(--gray-700,#4c4b51)}.gl-text-gray-900{color:var(--gray-900,#28272d)}.gl-text-gray-950{color:var(--gray-950,#18171d)}.gl-text-green-500{color:var(--green-500,#108548)}.gl-text-inherit{color:inherit}.gl-text-orange-500{color:var(--orange-500,#ab6100)}.gl-text-red-500{color:var(--red-500,#dd2b0e)}.gl-text-red-600{color:var(--red-600,#c02f12)}.gl-text-secondary{color:var(--gl-text-secondary,#737278)}.gl-text-strong{color:var(--gl-text-color-strong,var(--gl-color-neutral-950,#18171d))}.gl-text-subtle{color:var(--gl-text-color-subtle,var(--gl-color-neutral-600,#626168))}.gl-text-white{color:var(--white,#fff)}.\!gl-opacity-0{opacity:0!important}.gl-opacity-10{opacity:1}.\!gl-shadow-inner-1-gray-100{--tw-shadow:inset 0 0 0 1px var(--gray-100,#dcdcde)!important;--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)!important}.\!gl-shadow-inner-1-gray-100,.\!gl-shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.\!gl-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.gl-shadow-md{--tw-shadow:0 0 1px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629),0 2px 8px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 1px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color),0 2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-outline-none{outline:2px solid #0000;outline-offset:2px}.gl-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:ease}.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,#ececef)}.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-hidden{display:none!important}.sm\:gl-flex-nowrap{flex-wrap:nowrap}.sm\:gl-gap-3{gap:.5rem}}.\[\&\>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-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-none{pointer-events:none}.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:0}.gl-bottom-2{bottom:.25rem}.gl-left-0{left:0}.gl-right-2{right:.25rem}.gl-top-0{top:0}.\!gl-z-9999{z-index:9999!important}.gl-z-2{z-index:2}.gl-z-9999{z-index:9999}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.gl-m-3{margin:.5rem}.gl-m-auto{margin:auto}.\!gl-mx-2{margin-left:.25rem!important;margin-right:.25rem!important}.-gl-mx-1{margin-left:-.125rem;margin-right:-.125rem}.-gl-mx-4{margin-left:-.75rem;margin-right:-.75rem}.-gl-my-1{margin-bottom:-.125rem;margin-top:-.125rem}.-gl-my-3{margin-bottom:-.5rem;margin-top:-.5rem}.gl-mx-2{margin-left:.25rem;margin-right:.25rem}.gl-mx-3{margin-left:.5rem;margin-right:.5rem}.gl-mx-4{margin-left:.75rem;margin-right:.75rem}.gl-mx-auto{margin-left:auto;margin-right:auto}.gl-my-0{margin-bottom:0;margin-top:0}.gl-my-3{margin-bottom:.5rem;margin-top:.5rem}.gl-my-4{margin-bottom:.75rem;margin-top:.75rem}.gl-my-5{margin-bottom:1rem;margin-top:1rem}.\!gl-mb-0{margin-bottom:0!important}.\!gl-mb-4{margin-bottom:.75rem!important}.-gl-ml-2{margin-left:-.25rem}.-gl-mr-3{margin-right:-.5rem}.-gl-mt-2{margin-top:-.25rem}.gl-mb-0{margin-bottom:0}.gl-mb-1{margin-bottom:.125rem}.gl-mb-2{margin-bottom:.25rem}.gl-mb-3{margin-bottom:.5rem}.gl-mb-4{margin-bottom:.75rem}.gl-mb-5{margin-bottom:1rem}.gl-ml-1{margin-left:.125rem}.gl-ml-2{margin-left:.25rem}.gl-ml-3{margin-left:.5rem}.gl-ml-5{margin-left:1rem}.gl-ml-6{margin-left:1.5rem}.gl-ml-auto{margin-left:auto}.gl-mr-1{margin-right:.125rem}.gl-mr-2{margin-right:.25rem}.gl-mr-3{margin-right:.5rem}.gl-mr-auto{margin-right:auto}.gl-mt-0{margin-top:0}.gl-mt-1{margin-top:.125rem}.gl-mt-2{margin-top:.25rem}.gl-mt-3{margin-top:.5rem}.gl-mt-4{margin-top:.75rem}.gl-mt-5{margin-top:1rem}.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-hidden{display:none}.\!gl-h-full{height:100%!important}.gl-h-0{height:0}.gl-h-4{height:.75rem}.gl-h-5{height:1rem}.gl-h-auto{height:auto}.gl-h-full{height:100%}.gl-max-h-13{max-height:6rem}.gl-max-h-31{max-height:15.5rem}.gl-max-h-full{max-height:100%}.gl-min-h-8{min-height:2.5rem}.\!gl-w-31{width:15.5rem!important}.\!gl-w-auto{width:auto!important}.gl-w-1\/2{width:50%}.gl-w-3\/4{width:75%}.gl-w-4\/10{width:40%}.gl-w-5{width:1rem}.gl-w-auto{width:auto}.gl-w-full{width:100%}.gl-min-w-0{min-width:0}.gl-min-w-\[33\%\]{min-width:33%}.gl-max-w-1\/2{max-width:50%}.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: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-not-allowed{cursor:not-allowed!important}.\!gl-cursor-text{cursor:text!important}.gl-cursor-default{cursor:default}.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-3{gap:.5rem}.gl-gap-4{gap:.75rem}.gl-gap-5{gap:1rem}.gl-self-start{align-self:flex-start}.gl-self-center{align-self:center}.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-break-words{overflow-wrap:break-word}.gl-break-all{word-break:break-all}.\!gl-rounded-base{border-radius:.25rem!important}.\!gl-rounded-full{border-radius:50%!important}.\!gl-rounded-none{border-radius:0!important}.gl-rounded-base{border-radius:.25rem}.gl-rounded-full{border-radius:50%}.gl-rounded-lg{border-radius:.5rem}.gl-rounded-t-base{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.\!gl-rounded-br-none{border-bottom-right-radius:0!important}.gl-rounded-bl-none{border-bottom-left-radius:0}.gl-rounded-br-lg{border-bottom-right-radius:.5rem}.gl-rounded-br-none{border-bottom-right-radius:0}.gl-rounded-tr-lg{border-top-right-radius:.5rem}.gl-rounded-tr-none{border-top-right-radius:0}.gl-border{border-width:1px}.gl-border-0{border-width:0}.gl-border-1{border-width:1px}.\!gl-border-b-0{border-bottom-width:0!important}.gl-border-b,.gl-border-b-1{border-bottom-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,var(--gl-border-color-strong,#bfbfc3))}.gl-border-gray-50{border-color:var(--gray-50,#ececef)}.gl-border-gray-500{border-color:var(--gray-500,#737278)}.gl-border-neutral-600{border-color:var(--gl-color-neutral-600,#626168)}.gl-border-red-100{border-color:var(--red-100,#fdd4cd)}.gl-border-red-500{border-color:var(--red-500,#dd2b0e)}.gl-border-transparent{border-color:var(--gl-border-color-transparent,var(--gl-color-alpha-0,#0000))}.gl-border-b-dropdown-divider{border-bottom-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.gl-border-t-dropdown-divider{border-top-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.\!gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)!important}.\!gl-bg-transparent{background-color:initial!important}.gl-bg-black{background-color:var(--black,#050506)}.gl-bg-blue-50{background-color:var(--blue-50,#e9f3fc)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color,var(--gl-background-color-overlap,#fff))}.gl-bg-feedback-danger{background-color:var(--gl-feedback-danger-background-color,var(--gl-color-red-50,#fcf1ef))}.gl-bg-feedback-info{background-color:var(--gl-feedback-info-background-color,var(--gl-color-blue-50,#e9f3fc))}.gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)}.gl-bg-gray-50{background-color:var(--gray-50,#ececef)}.gl-bg-inherit{background-color:inherit}.gl-bg-status-neutral{background-color:var(--gl-status-neutral-background-color,var(--gl-color-neutral-100,#dcdcde))}.gl-bg-subtle{background-color:var(--gl-background-color-subtle,var(--gl-color-neutral-10,#fbfafd))}.gl-bg-transparent{background-color:initial}.gl-bg-white{background-color:var(--white,#fff)}.gl-fill-current{fill:currentColor}.gl-fill-gray-100{fill:var(--gray-100,#dcdcde)}.gl-fill-icon-danger{fill:var(--gl-icon-color-danger,var(--gl-text-color-danger,#c02f12))}.gl-fill-icon-default{fill:var(--gl-icon-color-default,var(--gl-text-color-default,#3a383f))}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled,var(--gl-text-color-disabled,#89888d))}.gl-fill-icon-info{fill:var(--gl-icon-color-info,var(--gl-color-blue-700,#2f5ca0))}.gl-fill-icon-link{fill:var(--gl-icon-color-link,var(--gl-text-color-link,#2f5ca0))}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong,var(--gl-text-color-strong,#18171d))}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle,var(--gl-text-color-subtle,#626168))}.gl-fill-icon-success{fill:var(--gl-icon-color-success,var(--gl-text-color-success,#2f7549))}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning,var(--gl-text-color-warning,#995715))}.\!gl-p-0{padding:0!important}.\!gl-p-2{padding:.25rem!important}.\!gl-p-4{padding:.75rem!important}.gl-p-0{padding:0}.gl-p-1{padding:.125rem}.gl-p-2{padding:.25rem}.gl-p-3{padding:.5rem}.gl-p-4{padding:.75rem}.gl-p-5{padding:1rem}.\!gl-px-2{padding-left:.25rem!important;padding-right:.25rem!important}.\!gl-px-3{padding-left:.5rem!important;padding-right:.5rem!important}.\!gl-py-2{padding-bottom:.25rem!important;padding-top:.25rem!important}.\!gl-py-4{padding-bottom:.75rem!important;padding-top:.75rem!important}.gl-px-1{padding-left:.125rem;padding-right:.125rem}.gl-px-2{padding-left:.25rem;padding-right:.25rem}.gl-px-3{padding-left:.5rem;padding-right:.5rem}.gl-px-4{padding-left:.75rem;padding-right:.75rem}.gl-px-5{padding-left:1rem;padding-right:1rem}.gl-py-2{padding-bottom:.25rem;padding-top:.25rem}.gl-py-3{padding-bottom:.5rem;padding-top:.5rem}.gl-py-5{padding-bottom:1rem;padding-top:1rem}.gl-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.\!gl-pl-9{padding-left:3rem!important}.\!gl-pr-7{padding-right:2rem!important}.\!gl-pr-9{padding-right:3rem!important}.\!gl-pt-0{padding-top:0!important}.gl-pb-2{padding-bottom:.25rem}.gl-pb-3{padding-bottom:.5rem}.gl-pl-0{padding-left:0}.gl-pl-2{padding-left:.25rem}.gl-pl-3{padding-left:.5rem}.gl-pl-4{padding-left:.75rem}.gl-pl-5{padding-left:1rem}.gl-pl-6{padding-left:1.5rem}.gl-pl-7{padding-left:2rem}.gl-pr-2{padding-right:.25rem}.gl-pr-3{padding-right:.5rem}.gl-pr-5{padding-right:1rem}.gl-pr-6{padding-right:1.5rem}.gl-pr-8{padding-right:2.5rem}.gl-pt-1{padding-top:.125rem}.gl-pt-2{padding-top:.25rem}.gl-pt-3{padding-top:.5rem}.gl-pt-4{padding-top:.75rem}.\!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-regular{font-family:var(--default-regular-font,"GitLab Sans"),-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans",Ubuntu,Cantarell,"Helvetica Neue",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}.\!gl-text-sm{font-size:.75rem!important}.gl-text-base{font-size:.875rem}.gl-text-size-h-display{font-size:1.75rem}.gl-text-size-h2{font-size:1.1875rem}.gl-text-sm{font-size:.75rem}.gl-text-xs{font-size:.625rem}.gl-font-bold{font-weight:600}.gl-font-normal{font-weight:400}.gl-lowercase{text-transform:lowercase}.gl-italic{font-style:italic}.gl-leading-1{line-height:1}.gl-leading-20{line-height:1.25rem}.gl-leading-36{line-height:2.25rem}.gl-leading-normal{line-height:1rem}.\!gl-text-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))!important}.\!gl-text-subtle{color:var(--gl-text-color-subtle,var(--gl-color-neutral-600,#626168))!important}.\!gl-text-success{color:var(--gl-text-color-success,var(--gl-color-green-600,#2f7549))!important}.gl-text-blue-100{color:var(--blue-100,#cbe2f9)}.gl-text-blue-500{color:var(--blue-500,#1f75cb)}.gl-text-blue-600{color:var(--blue-600,#2f68b4)}.gl-text-blue-700{color:var(--blue-700,#2f5ca0)}.gl-text-danger{color:var(--gl-text-color-danger,var(--gl-color-red-600,#c02f12))}.gl-text-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))}.gl-text-feedback-info{color:var(--gl-feedback-info-text-color,var(--gl-color-blue-700,#2f5ca0))}.gl-text-gray-500{color:var(--gray-500,#737278)}.gl-text-gray-700{color:var(--gray-700,#4c4b51)}.gl-text-gray-900{color:var(--gray-900,#28272d)}.gl-text-gray-950{color:var(--gray-950,#18171d)}.gl-text-green-500{color:var(--green-500,#108548)}.gl-text-inherit{color:inherit}.gl-text-orange-500{color:var(--orange-500,#ab6100)}.gl-text-red-500{color:var(--red-500,#dd2b0e)}.gl-text-red-600{color:var(--red-600,#c02f12)}.gl-text-secondary{color:var(--gl-text-secondary,#737278)}.gl-text-strong{color:var(--gl-text-color-strong,var(--gl-color-neutral-950,#18171d))}.gl-text-subtle{color:var(--gl-text-color-subtle,var(--gl-color-neutral-600,#626168))}.gl-text-white{color:var(--white,#fff)}.\!gl-opacity-0{opacity:0!important}.gl-opacity-10{opacity:1}.\!gl-shadow-inner-1-gray-100{--tw-shadow:inset 0 0 0 1px var(--gray-100,#dcdcde)!important;--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)!important}.\!gl-shadow-inner-1-gray-100,.\!gl-shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.\!gl-shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important}.gl-shadow-md{--tw-shadow:0 0 1px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629),0 2px 8px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 1px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color),0 2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-outline-none{outline:2px solid #0000;outline-offset:2px}.gl-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:ease}.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,#ececef)}.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-hidden{display:none!important}.sm\:gl-flex-nowrap{flex-wrap:nowrap}.sm\:gl-gap-3{gap:.5rem}}.\[\&\>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 */
|
package/dist/tailwind.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["tailwind.css"],"names":[],"mappings":"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
|
|
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": "
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "Duo UI Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@arkweid/lefthook": "0.7.7",
|
|
95
|
-
"@babel/core": "^7.27.
|
|
95
|
+
"@babel/core": "^7.27.7",
|
|
96
96
|
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
|
|
97
97
|
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
|
|
98
98
|
"@babel/preset-env": "^7.27.2",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"@gitlab/eslint-plugin": "21.1.0",
|
|
101
101
|
"@gitlab/fonts": "^1.3.0",
|
|
102
102
|
"@gitlab/stylelint-config": "6.2.2",
|
|
103
|
-
"@gitlab/svgs": "^3.
|
|
103
|
+
"@gitlab/svgs": "^3.137.0",
|
|
104
104
|
"@gitlab/ui": "latest",
|
|
105
105
|
"@jest/test-sequencer": "^29.7.0",
|
|
106
106
|
"@rollup/plugin-commonjs": "^11.1.0",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
<script>
|
|
2
|
+
import { GlSafeHtmlDirective as SafeHtml } from '@gitlab/ui';
|
|
2
3
|
import MessageFeedback from '../message_feedback.vue';
|
|
3
4
|
import BaseMessage from './message_base.vue';
|
|
4
5
|
|
|
@@ -8,6 +9,12 @@ export default {
|
|
|
8
9
|
BaseMessage,
|
|
9
10
|
MessageFeedback,
|
|
10
11
|
},
|
|
12
|
+
directives: {
|
|
13
|
+
SafeHtml,
|
|
14
|
+
},
|
|
15
|
+
safeHtmlConfigExtension: {
|
|
16
|
+
ADD_TAGS: ['copy-code', 'insert-code-snippet'],
|
|
17
|
+
},
|
|
11
18
|
props: {
|
|
12
19
|
message: {
|
|
13
20
|
required: true,
|
|
@@ -24,6 +31,14 @@ export default {
|
|
|
24
31
|
return Boolean(this.message?.errors?.length);
|
|
25
32
|
},
|
|
26
33
|
},
|
|
34
|
+
methods: {
|
|
35
|
+
onInsertCodeSnippet(e) {
|
|
36
|
+
this.$emit('insert-code-snippet', e);
|
|
37
|
+
},
|
|
38
|
+
onCopyCodeSnippet(e) {
|
|
39
|
+
this.$emit('copy-code-snippet', e);
|
|
40
|
+
},
|
|
41
|
+
},
|
|
27
42
|
};
|
|
28
43
|
</script>
|
|
29
44
|
<template>
|
|
@@ -35,7 +50,14 @@ export default {
|
|
|
35
50
|
}"
|
|
36
51
|
>
|
|
37
52
|
<template #message="slotProps">
|
|
38
|
-
<slot name="message" v-bind="slotProps">
|
|
53
|
+
<slot name="message" v-bind="slotProps">
|
|
54
|
+
<div
|
|
55
|
+
ref="content"
|
|
56
|
+
v-safe-html:[$options.safeHtmlConfigExtension]="slotProps.htmlContent"
|
|
57
|
+
@insert-code-snippet="onInsertCodeSnippet"
|
|
58
|
+
@copy-code-snippet="onCopyCodeSnippet"
|
|
59
|
+
></div>
|
|
60
|
+
</slot>
|
|
39
61
|
|
|
40
62
|
<message-feedback v-if="withFeedback" @feedback="$emit('feedback', $event)" />
|
|
41
63
|
</template>
|
|
@@ -91,7 +91,30 @@ export const MOCK_TOOL_MESSAGE = {
|
|
|
91
91
|
|
|
92
92
|
export const MOCK_AGENT_MESSAGE = {
|
|
93
93
|
id: '123',
|
|
94
|
-
content:
|
|
94
|
+
content: `I'll write a simple Python function with comments for you. Here's an example:\n\n<div class="gl-relative markdown-code-block js-markdown-code"><pre><code class="language-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">factorial</span>(<span class="hljs-params">n</span>):
|
|
95
|
+
<span class="hljs-string">"""
|
|
96
|
+
Calculate the factorial of a non-negative integer.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
n (int): A non-negative integer
|
|
100
|
+
|
|
101
|
+
Returns:
|
|
102
|
+
int: The factorial of n (n!)
|
|
103
|
+
|
|
104
|
+
Examples:
|
|
105
|
+
>>> factorial(5)
|
|
106
|
+
120
|
|
107
|
+
>>> factorial(0)
|
|
108
|
+
1
|
|
109
|
+
"""</span>
|
|
110
|
+
<span class="hljs-comment"># Base case: factorial of 0 or 1 is 1</span>
|
|
111
|
+
<span class="hljs-keyword">if</span> n <= <span class="hljs-number">1</span>:
|
|
112
|
+
<span class="hljs-keyword">return</span> <span class="hljs-number">1</span>
|
|
113
|
+
|
|
114
|
+
<span class="hljs-comment"># Recursive case: n! = n * (n-1)!</span>
|
|
115
|
+
<span class="hljs-keyword">return</span> n * factorial(n - <span class="hljs-number">1</span>)
|
|
116
|
+
</code></pre>
|
|
117
|
+
<copy-code></copy-code><insert-code-snippet></insert-code-snippet></div>\n\n\nThis function calculates the factorial of a number using recursion. It includes a docstring explaining what the function does, its parameters, return value, and usage examples, plus inline comments explaining the logic.`,
|
|
95
118
|
message_type: MESSAGE_MODEL_ROLES.agent,
|
|
96
119
|
};
|
|
97
120
|
|
package/src/index.js
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
export { default as DuoUserFeedback } from './components/user_feedback/user_feedback.vue';
|
|
2
2
|
|
|
3
|
-
// Duo Workflow components
|
|
4
|
-
export { default as DuoWorkflowPanel } from './components/workflow/components/duo_workflow_panel/duo_workflow_panel.vue';
|
|
5
|
-
export { default as DuoWorkflowPrompt } from './components/workflow/components/duo_workflow_prompt/duo_workflow_prompt.vue';
|
|
6
|
-
|
|
7
3
|
// Duo Chat component
|
|
8
4
|
export { default as DuoChat } from './components/chat/duo_chat.vue';
|
|
9
5
|
export { default as DuoChatContextConversation } from './components/chat/components/duo_chat_conversation/duo_chat_conversation.vue';
|
|
@@ -31,4 +27,7 @@ export { default as DuoChatContextItemSelections } from './components/chat/compo
|
|
|
31
27
|
// Duo Chat Action components
|
|
32
28
|
export { InsertCodeSnippetElement as DuoChatInsertCodeSnippetElement } from './components/chat/components/duo_chat_message/insert_code_snippet_element';
|
|
33
29
|
|
|
30
|
+
// Duo UI components
|
|
31
|
+
export { default as DuoTerminalCommand } from './components/ui/duo_terminal_command/duo_terminal_command.vue';
|
|
32
|
+
|
|
34
33
|
export { addDuoMarkdownPlugin } from './components/chat/markdown_renderer';
|
package/translations.js
CHANGED
|
@@ -87,16 +87,4 @@ export default {
|
|
|
87
87
|
'DuoChatMessageSources.messageSources': null,
|
|
88
88
|
'GlDuoChat.chatDisclamer': 'Responses may be inaccurate. Verify before use.',
|
|
89
89
|
'GlDuoChat.chatHistoryTitle': 'Chat history',
|
|
90
|
-
'GlDuoWorkflowPanel.collapseButtonTitle': 'Collapse',
|
|
91
|
-
'GlDuoWorkflowPanel.expandButtonTitle': 'Expand',
|
|
92
|
-
'GlDuoWorkflowPrompt.cancelButtonText': 'Cancel',
|
|
93
|
-
'GlDuoWorkflowPrompt.confirmButtonText': 'Generate plan',
|
|
94
|
-
'GlDuoWorkflowPrompt.imageDescription':
|
|
95
|
-
'It should have any tools necessary for the workflow installed.',
|
|
96
|
-
'GlDuoWorkflowPrompt.imageLabel': 'Image',
|
|
97
|
-
'GlDuoWorkflowPrompt.imageLabelDescription': 'The container image to run the workflow in.',
|
|
98
|
-
'GlDuoWorkflowPrompt.promptDescription': 'Be specific and include any requirements.',
|
|
99
|
-
'GlDuoWorkflowPrompt.promptLabel': 'Description',
|
|
100
|
-
'GlDuoWorkflowPrompt.promptLabelDescription': 'What would you like to do and how.',
|
|
101
|
-
'GlDuoWorkflowPrompt.title': 'Goal',
|
|
102
90
|
};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { GlCollapse, GlButton, GlIcon, GlTooltipDirective } from '@gitlab/ui';
|
|
2
|
-
import { translate } from '../../../../utils/i18n';
|
|
3
|
-
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
4
|
-
|
|
5
|
-
var script = {
|
|
6
|
-
name: 'GlDuoWorkflowPanel',
|
|
7
|
-
components: {
|
|
8
|
-
GlCollapse,
|
|
9
|
-
GlButton,
|
|
10
|
-
GlIcon
|
|
11
|
-
},
|
|
12
|
-
directives: {
|
|
13
|
-
GlTooltip: GlTooltipDirective
|
|
14
|
-
},
|
|
15
|
-
props: {
|
|
16
|
-
/**
|
|
17
|
-
* The icon to show in the header.
|
|
18
|
-
*/
|
|
19
|
-
headerIcon: {
|
|
20
|
-
type: String,
|
|
21
|
-
required: false,
|
|
22
|
-
default: ''
|
|
23
|
-
},
|
|
24
|
-
/**
|
|
25
|
-
* The text used as the title and aria-label for the button when the collapse is collapsed
|
|
26
|
-
*/
|
|
27
|
-
expandPanelButtonTitle: {
|
|
28
|
-
type: String,
|
|
29
|
-
required: false,
|
|
30
|
-
default: translate('GlDuoWorkflowPanel.expandButtonTitle', 'Expand')
|
|
31
|
-
},
|
|
32
|
-
/**
|
|
33
|
-
* The text used as the title and aria-label for the button when the collapse is expanded
|
|
34
|
-
*/
|
|
35
|
-
collapsePanelButtonTitle: {
|
|
36
|
-
type: String,
|
|
37
|
-
required: false,
|
|
38
|
-
default: translate('GlDuoWorkflowPanel.collapseButtonTitle', 'Collapse')
|
|
39
|
-
},
|
|
40
|
-
/**
|
|
41
|
-
* Whether the panel is expanded or not
|
|
42
|
-
*/
|
|
43
|
-
expanded: {
|
|
44
|
-
type: Boolean,
|
|
45
|
-
required: false,
|
|
46
|
-
default: true
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
computed: {
|
|
50
|
-
buttonIcon() {
|
|
51
|
-
return this.expanded ? 'chevron-up' : 'chevron-down';
|
|
52
|
-
},
|
|
53
|
-
buttonTitle() {
|
|
54
|
-
return this.expanded ? this.collapsePanelButtonTitle : this.expandPanelButtonTitle;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
/* script */
|
|
60
|
-
const __vue_script__ = script;
|
|
61
|
-
|
|
62
|
-
/* template */
|
|
63
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:"gl-flex gl-flex-nowrap gl-items-center"},[(_vm.headerIcon)?_c('gl-icon',{staticClass:"gl-mr-3",attrs:{"name":_vm.headerIcon,"size":24}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-flex-grow gl-items-baseline"},[_c('h2',{staticClass:"gl-mb-0"},[_vm._t("title")],2),_vm._v(" "),_c('small',{staticClass:"gl-ml-3"},[_vm._t("subtitle")],2)]),_vm._v(" "),_c('gl-button',{directives:[{name:"gl-tooltip",rawName:"v-gl-tooltip"}],attrs:{"category":"tertiary","icon":_vm.buttonIcon,"title":_vm.buttonTitle,"aria-label":_vm.buttonTitle},on:{"click":function($event){return _vm.$emit('toggle-panel')}}})],1),_vm._v(" "),_c('gl-collapse',{attrs:{"visible":_vm.expanded}},[_c('div',{staticClass:"gl-ml-7 gl-mt-4 gl-flex-grow"},[_vm._t("content")],2)])],1)};
|
|
64
|
-
var __vue_staticRenderFns__ = [];
|
|
65
|
-
|
|
66
|
-
/* style */
|
|
67
|
-
const __vue_inject_styles__ = undefined;
|
|
68
|
-
/* scoped */
|
|
69
|
-
const __vue_scope_id__ = undefined;
|
|
70
|
-
/* module identifier */
|
|
71
|
-
const __vue_module_identifier__ = undefined;
|
|
72
|
-
/* functional template */
|
|
73
|
-
const __vue_is_functional_template__ = false;
|
|
74
|
-
/* style inject */
|
|
75
|
-
|
|
76
|
-
/* style inject SSR */
|
|
77
|
-
|
|
78
|
-
/* style inject shadow dom */
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
const __vue_component__ = __vue_normalize__(
|
|
83
|
-
{ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
|
|
84
|
-
__vue_inject_styles__,
|
|
85
|
-
__vue_script__,
|
|
86
|
-
__vue_scope_id__,
|
|
87
|
-
__vue_is_functional_template__,
|
|
88
|
-
__vue_module_identifier__,
|
|
89
|
-
false,
|
|
90
|
-
undefined,
|
|
91
|
-
undefined,
|
|
92
|
-
undefined
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
export default __vue_component__;
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import { GlButton, GlFormGroup, GlFormInput, GlFormTextarea } from '@gitlab/ui';
|
|
2
|
-
import { translate } from '../../../../utils/i18n';
|
|
3
|
-
import GlDuoWorkflowPanel from '../duo_workflow_panel/duo_workflow_panel';
|
|
4
|
-
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
5
|
-
|
|
6
|
-
var script = {
|
|
7
|
-
name: 'GlDuoWorkflowPrompt',
|
|
8
|
-
components: {
|
|
9
|
-
GlDuoWorkflowPanel,
|
|
10
|
-
GlButton,
|
|
11
|
-
GlFormGroup,
|
|
12
|
-
GlFormInput,
|
|
13
|
-
GlFormTextarea
|
|
14
|
-
},
|
|
15
|
-
props: {
|
|
16
|
-
/**
|
|
17
|
-
* The prompt the user has entered
|
|
18
|
-
*/
|
|
19
|
-
prompt: {
|
|
20
|
-
type: String,
|
|
21
|
-
required: false,
|
|
22
|
-
default: ''
|
|
23
|
-
},
|
|
24
|
-
/**
|
|
25
|
-
* The image to run the workflow in
|
|
26
|
-
*/
|
|
27
|
-
image: {
|
|
28
|
-
type: String,
|
|
29
|
-
required: false,
|
|
30
|
-
default: ''
|
|
31
|
-
},
|
|
32
|
-
/**
|
|
33
|
-
* The text for the title of the panel
|
|
34
|
-
*/
|
|
35
|
-
title: {
|
|
36
|
-
type: String,
|
|
37
|
-
required: false,
|
|
38
|
-
default: translate('GlDuoWorkflowPrompt.title', 'Goal')
|
|
39
|
-
},
|
|
40
|
-
/**
|
|
41
|
-
* The summary of the ongoing workflow plan
|
|
42
|
-
*/
|
|
43
|
-
summary: {
|
|
44
|
-
type: String,
|
|
45
|
-
required: false,
|
|
46
|
-
default: ''
|
|
47
|
-
},
|
|
48
|
-
/**
|
|
49
|
-
* Whether or not the panel is loading
|
|
50
|
-
*/
|
|
51
|
-
loading: {
|
|
52
|
-
type: Boolean,
|
|
53
|
-
required: false,
|
|
54
|
-
default: false
|
|
55
|
-
},
|
|
56
|
-
/**
|
|
57
|
-
* The label of the prompt text area
|
|
58
|
-
*
|
|
59
|
-
* See `GlFormGroup` for text placement.
|
|
60
|
-
*/
|
|
61
|
-
promptLabel: {
|
|
62
|
-
type: String,
|
|
63
|
-
required: false,
|
|
64
|
-
default: translate('GlDuoWorkflowPrompt.promptLabel', 'Description')
|
|
65
|
-
},
|
|
66
|
-
/**
|
|
67
|
-
* The label description of the prompt text area
|
|
68
|
-
*
|
|
69
|
-
* See `GlFormGroup` for text placement.
|
|
70
|
-
*/
|
|
71
|
-
promptLabelDescription: {
|
|
72
|
-
type: String,
|
|
73
|
-
required: false,
|
|
74
|
-
default: translate('GlDuoWorkflowPrompt.promptLabelDescription', 'What would you like to do and how.')
|
|
75
|
-
},
|
|
76
|
-
/**
|
|
77
|
-
* The description of the prompt text area
|
|
78
|
-
*
|
|
79
|
-
* See `GlFormGroup` for text placement.
|
|
80
|
-
*/
|
|
81
|
-
promptDescription: {
|
|
82
|
-
type: String,
|
|
83
|
-
required: false,
|
|
84
|
-
default: translate('GlDuoWorkflowPrompt.promptDescription', 'Be specific and include any requirements.')
|
|
85
|
-
},
|
|
86
|
-
/**
|
|
87
|
-
* The HTML ID of the textarea for the prompt
|
|
88
|
-
*/
|
|
89
|
-
promptId: {
|
|
90
|
-
type: String,
|
|
91
|
-
required: false,
|
|
92
|
-
default: 'duo-workflow-prompt'
|
|
93
|
-
},
|
|
94
|
-
/**
|
|
95
|
-
* The label of the image input
|
|
96
|
-
*/
|
|
97
|
-
imageLabel: {
|
|
98
|
-
type: String,
|
|
99
|
-
required: false,
|
|
100
|
-
default: translate('GlDuoWorkflowPrompt.imageLabel', 'Image')
|
|
101
|
-
},
|
|
102
|
-
/**
|
|
103
|
-
* The label description of the image input
|
|
104
|
-
*
|
|
105
|
-
* See `GlFormGroup` for text placement.
|
|
106
|
-
*/
|
|
107
|
-
imageLabelDescription: {
|
|
108
|
-
type: String,
|
|
109
|
-
required: false,
|
|
110
|
-
default: translate('GlDuoWorkflowPrompt.imageLabelDescription', 'The container image to run the workflow in.')
|
|
111
|
-
},
|
|
112
|
-
/**
|
|
113
|
-
* The description of the image input
|
|
114
|
-
*
|
|
115
|
-
* See `GlFormGroup` for text placement.
|
|
116
|
-
*/
|
|
117
|
-
imageDescription: {
|
|
118
|
-
type: String,
|
|
119
|
-
required: false,
|
|
120
|
-
default: translate('GlDuoWorkflowPrompt.imageDescription', 'It should have any tools necessary for the workflow installed.')
|
|
121
|
-
},
|
|
122
|
-
/**
|
|
123
|
-
* The ID of the image input
|
|
124
|
-
*/
|
|
125
|
-
imageId: {
|
|
126
|
-
type: String,
|
|
127
|
-
required: false,
|
|
128
|
-
default: 'duo-workflow-image'
|
|
129
|
-
},
|
|
130
|
-
/**
|
|
131
|
-
* The text for the confirmation button. This button emits a `confirm` event.
|
|
132
|
-
*/
|
|
133
|
-
confirmButtonText: {
|
|
134
|
-
type: String,
|
|
135
|
-
required: false,
|
|
136
|
-
default: translate('GlDuoWorkflowPrompt.confirmButtonText', 'Generate plan')
|
|
137
|
-
},
|
|
138
|
-
/**
|
|
139
|
-
* The text for the cancellation button. This button emits a `cancel` event.
|
|
140
|
-
*/
|
|
141
|
-
cancelButtonText: {
|
|
142
|
-
type: String,
|
|
143
|
-
required: false,
|
|
144
|
-
default: translate('GlDuoWorkflowPrompt.cancelButtonText', 'Cancel')
|
|
145
|
-
},
|
|
146
|
-
/**
|
|
147
|
-
* The text used as the title and aria-label for the button when the collapse is collapsed
|
|
148
|
-
*
|
|
149
|
-
* See `GlDuoWorkflowPanel`
|
|
150
|
-
*/
|
|
151
|
-
expandPanelButtonTitle: {
|
|
152
|
-
type: String,
|
|
153
|
-
required: false,
|
|
154
|
-
default: ''
|
|
155
|
-
},
|
|
156
|
-
/**
|
|
157
|
-
* The text used as the title and aria-label for the button when the collapse is expanded
|
|
158
|
-
*
|
|
159
|
-
* See `GlDuoWorkflowPanel`
|
|
160
|
-
*/
|
|
161
|
-
collapsePanelButtonTitle: {
|
|
162
|
-
type: String,
|
|
163
|
-
required: false,
|
|
164
|
-
default: ''
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
|
-
methods: {
|
|
168
|
-
emitChange(prompt) {
|
|
169
|
-
/**
|
|
170
|
-
* Notify listeners about prompt change
|
|
171
|
-
* @param {string} prompt The newly entered prompt
|
|
172
|
-
*/
|
|
173
|
-
this.$emit('update:prompt', prompt);
|
|
174
|
-
},
|
|
175
|
-
emitImage(image) {
|
|
176
|
-
/**
|
|
177
|
-
* Notify listeners about image change
|
|
178
|
-
* @param {string} image The newly entered image
|
|
179
|
-
*/
|
|
180
|
-
this.$emit('update:image', image);
|
|
181
|
-
},
|
|
182
|
-
clickConfirm(event) {
|
|
183
|
-
/**
|
|
184
|
-
* Notify listeners about prompt submission
|
|
185
|
-
* @param {*} event A click event
|
|
186
|
-
*/
|
|
187
|
-
this.$emit('confirm', event);
|
|
188
|
-
},
|
|
189
|
-
clickCancel(event) {
|
|
190
|
-
/**
|
|
191
|
-
* Notify listeners about prompt submission cancellation.
|
|
192
|
-
* @param {*} event A click event
|
|
193
|
-
*/
|
|
194
|
-
this.$emit('cancel', event);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
/* script */
|
|
200
|
-
const __vue_script__ = script;
|
|
201
|
-
|
|
202
|
-
/* template */
|
|
203
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-duo-workflow-panel',{attrs:{"header-icon":"issue-type-objective","expand-panel-button-title":_vm.expandPanelButtonTitle,"collapse-panel-button-title":_vm.collapsePanelButtonTitle},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v(_vm._s(_vm.title))]},proxy:true},{key:"subtitle",fn:function(){return [_vm._v(_vm._s(_vm.summary))]},proxy:true},{key:"content",fn:function(){return [_c('gl-form-group',{attrs:{"label":_vm.promptLabel,"label-for":_vm.promptId,"label-description":_vm.promptLabelDescription,"description":_vm.promptDescription}},[_c('gl-form-textarea',{attrs:{"id":_vm.promptId,"value":_vm.prompt,"disable":_vm.loading,"no-resize":false},on:{"input":_vm.emitChange}})],1),_vm._v(" "),_c('gl-form-group',{attrs:{"label":_vm.imageLabel,"label-for":_vm.imageId,"label-description":_vm.imageLabelDescription,"description":_vm.imageDescription}},[_c('gl-form-input',{attrs:{"id":_vm.imageId,"value":_vm.image,"disable":_vm.loading},on:{"input":_vm.emitImage}})],1),_vm._v(" "),_c('div',{staticClass:"gl-flex gl-gap-3"},[_c('gl-button',{attrs:{"variant":"confirm","data-test-id":"duo-workflow-prompt-confirm","loading":_vm.loading},on:{"click":_vm.clickConfirm}},[_vm._v(_vm._s(_vm.confirmButtonText))]),_vm._v(" "),_c('gl-button',{attrs:{"data-test-id":"duo-workflow-prompt-cancel"},on:{"click":_vm.clickCancel}},[_vm._v(_vm._s(_vm.cancelButtonText))])],1)]},proxy:true}])})};
|
|
204
|
-
var __vue_staticRenderFns__ = [];
|
|
205
|
-
|
|
206
|
-
/* style */
|
|
207
|
-
const __vue_inject_styles__ = undefined;
|
|
208
|
-
/* scoped */
|
|
209
|
-
const __vue_scope_id__ = undefined;
|
|
210
|
-
/* module identifier */
|
|
211
|
-
const __vue_module_identifier__ = undefined;
|
|
212
|
-
/* functional template */
|
|
213
|
-
const __vue_is_functional_template__ = false;
|
|
214
|
-
/* style inject */
|
|
215
|
-
|
|
216
|
-
/* style inject SSR */
|
|
217
|
-
|
|
218
|
-
/* style inject shadow dom */
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
const __vue_component__ = __vue_normalize__(
|
|
223
|
-
{ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
|
|
224
|
-
__vue_inject_styles__,
|
|
225
|
-
__vue_script__,
|
|
226
|
-
__vue_scope_id__,
|
|
227
|
-
__vue_is_functional_template__,
|
|
228
|
-
__vue_module_identifier__,
|
|
229
|
-
false,
|
|
230
|
-
undefined,
|
|
231
|
-
undefined,
|
|
232
|
-
undefined
|
|
233
|
-
);
|
|
234
|
-
|
|
235
|
-
export default __vue_component__;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
This is the main UI panel used in the larger Duo Workflow Plan UI for the IDE
|
|
2
|
-
and WebUI.
|
|
3
|
-
|
|
4
|
-
## Usage
|
|
5
|
-
|
|
6
|
-
To use this component, import it and fill out the available slots:
|
|
7
|
-
|
|
8
|
-
- `title`: the main title for the panel
|
|
9
|
-
- `subtitle`: the small text adjacent to the title
|
|
10
|
-
- `content`: the content of the panel, hidden away when the collapse is toggled
|
|
11
|
-
|
|
12
|
-
Also provide an icon via the `headerIcon` prop. This icon is displayed adjacent
|
|
13
|
-
to the title.
|
|
14
|
-
|
|
15
|
-
You can pass `expanded` prop set to `false` if you need a section to be
|
|
16
|
-
collapsed by default. You can also listen to `toggle-panel` event to know
|
|
17
|
-
when the expanded state changed.
|
|
18
|
-
|
|
19
|
-
Translations for the title of the single button can be provided either via the
|
|
20
|
-
props `expandButtonTitle` and `collapseTitleButton` or via the translation
|
|
21
|
-
configuration:
|
|
22
|
-
|
|
23
|
-
```js
|
|
24
|
-
setConfigs({
|
|
25
|
-
translations: {
|
|
26
|
-
'GlDuoWorkflowPanel.expandButtonTitle': __('Expand Panel'),
|
|
27
|
-
'GlDuoWorkflowPanel.collapseButtonTitle': __('Collapse Panel'),
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
These translations are tied to the action of the button, not its state, so
|
|
33
|
-
ensure they are set properly!
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { GlIcon, GlCollapse, GlButton, GlTooltipDirective as GlTooltip } from '@gitlab/ui';
|
|
3
|
-
import { translate } from '../../../../utils/i18n';
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
name: 'GlDuoWorkflowPanel',
|
|
7
|
-
components: { GlCollapse, GlButton, GlIcon },
|
|
8
|
-
directives: { GlTooltip },
|
|
9
|
-
props: {
|
|
10
|
-
/**
|
|
11
|
-
* The icon to show in the header.
|
|
12
|
-
*/
|
|
13
|
-
headerIcon: {
|
|
14
|
-
type: String,
|
|
15
|
-
required: false,
|
|
16
|
-
default: '',
|
|
17
|
-
},
|
|
18
|
-
/**
|
|
19
|
-
* The text used as the title and aria-label for the button when the collapse is collapsed
|
|
20
|
-
*/
|
|
21
|
-
expandPanelButtonTitle: {
|
|
22
|
-
type: String,
|
|
23
|
-
required: false,
|
|
24
|
-
default: translate('GlDuoWorkflowPanel.expandButtonTitle', 'Expand'),
|
|
25
|
-
},
|
|
26
|
-
/**
|
|
27
|
-
* The text used as the title and aria-label for the button when the collapse is expanded
|
|
28
|
-
*/
|
|
29
|
-
collapsePanelButtonTitle: {
|
|
30
|
-
type: String,
|
|
31
|
-
required: false,
|
|
32
|
-
default: translate('GlDuoWorkflowPanel.collapseButtonTitle', 'Collapse'),
|
|
33
|
-
},
|
|
34
|
-
/**
|
|
35
|
-
* Whether the panel is expanded or not
|
|
36
|
-
*/
|
|
37
|
-
expanded: {
|
|
38
|
-
type: Boolean,
|
|
39
|
-
required: false,
|
|
40
|
-
default: true,
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
computed: {
|
|
44
|
-
buttonIcon() {
|
|
45
|
-
return this.expanded ? 'chevron-up' : 'chevron-down';
|
|
46
|
-
},
|
|
47
|
-
buttonTitle() {
|
|
48
|
-
return this.expanded ? this.collapsePanelButtonTitle : this.expandPanelButtonTitle;
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
</script>
|
|
53
|
-
<template>
|
|
54
|
-
<div>
|
|
55
|
-
<div class="gl-flex gl-flex-nowrap gl-items-center">
|
|
56
|
-
<gl-icon v-if="headerIcon" :name="headerIcon" :size="24" class="gl-mr-3" />
|
|
57
|
-
<div class="gl-flex gl-flex-grow gl-items-baseline">
|
|
58
|
-
<h2 class="gl-mb-0">
|
|
59
|
-
<!-- @slot Panel title. -->
|
|
60
|
-
<slot name="title"></slot>
|
|
61
|
-
</h2>
|
|
62
|
-
<small class="gl-ml-3">
|
|
63
|
-
<!-- @slot Panel subtitle. -->
|
|
64
|
-
<slot name="subtitle"></slot
|
|
65
|
-
></small>
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
<gl-button
|
|
69
|
-
v-gl-tooltip
|
|
70
|
-
category="tertiary"
|
|
71
|
-
:icon="buttonIcon"
|
|
72
|
-
:title="buttonTitle"
|
|
73
|
-
:aria-label="buttonTitle"
|
|
74
|
-
@click="$emit('toggle-panel')"
|
|
75
|
-
/>
|
|
76
|
-
</div>
|
|
77
|
-
<gl-collapse :visible="expanded">
|
|
78
|
-
<div class="gl-ml-7 gl-mt-4 gl-flex-grow">
|
|
79
|
-
<!-- @slot Panel content. -->
|
|
80
|
-
<slot name="content"></slot>
|
|
81
|
-
</div>
|
|
82
|
-
</gl-collapse>
|
|
83
|
-
</div>
|
|
84
|
-
</template>
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
This is the UI panel to capture the user's AI prompt for Duo Workflow. This
|
|
2
|
-
prompt is emitted upwards so it may be sent to the Duo Workflow service.
|
|
3
|
-
|
|
4
|
-
## Usage
|
|
5
|
-
|
|
6
|
-
To use this component, import it and be sure to set the following props:
|
|
7
|
-
|
|
8
|
-
* `prompt`: the prompt the user enters, can be provided if the prompt has been
|
|
9
|
-
cached
|
|
10
|
-
* `summary`: the summary of the goal as provided by the Duo Workflow service,
|
|
11
|
-
displayed adjacent to the title
|
|
12
|
-
* `loading`: sets the loading state for the panel while waiting on responses
|
|
13
|
-
|
|
14
|
-
Also listen to the following events:
|
|
15
|
-
|
|
16
|
-
* `update:prompt`: Emitted when the prompt textarea's `input` event fires, when
|
|
17
|
-
the text within the textarea is changed
|
|
18
|
-
* `update:image`: Emitted when the image input's `input` event fires, when the
|
|
19
|
-
text within the input is changed
|
|
20
|
-
* `confirm`: Emitted when the confirm button is clicked
|
|
21
|
-
* `cancel`: Emitted when the cancel button is clicked
|
|
22
|
-
|
|
23
|
-
Translations for the title of the panel, labels, and other strings can be set via
|
|
24
|
-
the props as documented or via translation configuration:
|
|
25
|
-
|
|
26
|
-
```js
|
|
27
|
-
setConfigs({
|
|
28
|
-
translations: {
|
|
29
|
-
'GlDuoWorkflowPrompt.header': __('Plan'),
|
|
30
|
-
'GlDuoWorkflowPrompt.promptLabel': __('Prompt'),
|
|
31
|
-
'GlDuoWorkflowPrompt.promptLabelDescription': __('What is your task?'),
|
|
32
|
-
'GlDuoWorkflowPrompt.promptDescription': __('Be specific and include references!'),
|
|
33
|
-
'GlDuoWorkflowPrompt.confirmButtonText': __('Start plan'),
|
|
34
|
-
'GlDuoWorkflowPrompt.cancelButtonText': __('Stop'),
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
```
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { GlButton, GlFormGroup, GlFormTextarea, GlFormInput } from '@gitlab/ui';
|
|
3
|
-
import { translate } from '../../../../utils/i18n';
|
|
4
|
-
import GlDuoWorkflowPanel from '../duo_workflow_panel/duo_workflow_panel.vue';
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
name: 'GlDuoWorkflowPrompt',
|
|
8
|
-
components: {
|
|
9
|
-
GlDuoWorkflowPanel,
|
|
10
|
-
GlButton,
|
|
11
|
-
GlFormGroup,
|
|
12
|
-
GlFormInput,
|
|
13
|
-
GlFormTextarea,
|
|
14
|
-
},
|
|
15
|
-
props: {
|
|
16
|
-
/**
|
|
17
|
-
* The prompt the user has entered
|
|
18
|
-
*/
|
|
19
|
-
prompt: {
|
|
20
|
-
type: String,
|
|
21
|
-
required: false,
|
|
22
|
-
default: '',
|
|
23
|
-
},
|
|
24
|
-
/**
|
|
25
|
-
* The image to run the workflow in
|
|
26
|
-
*/
|
|
27
|
-
image: {
|
|
28
|
-
type: String,
|
|
29
|
-
required: false,
|
|
30
|
-
default: '',
|
|
31
|
-
},
|
|
32
|
-
/**
|
|
33
|
-
* The text for the title of the panel
|
|
34
|
-
*/
|
|
35
|
-
title: {
|
|
36
|
-
type: String,
|
|
37
|
-
required: false,
|
|
38
|
-
default: translate('GlDuoWorkflowPrompt.title', 'Goal'),
|
|
39
|
-
},
|
|
40
|
-
/**
|
|
41
|
-
* The summary of the ongoing workflow plan
|
|
42
|
-
*/
|
|
43
|
-
summary: {
|
|
44
|
-
type: String,
|
|
45
|
-
required: false,
|
|
46
|
-
default: '',
|
|
47
|
-
},
|
|
48
|
-
/**
|
|
49
|
-
* Whether or not the panel is loading
|
|
50
|
-
*/
|
|
51
|
-
loading: {
|
|
52
|
-
type: Boolean,
|
|
53
|
-
required: false,
|
|
54
|
-
default: false,
|
|
55
|
-
},
|
|
56
|
-
/**
|
|
57
|
-
* The label of the prompt text area
|
|
58
|
-
*
|
|
59
|
-
* See `GlFormGroup` for text placement.
|
|
60
|
-
*/
|
|
61
|
-
promptLabel: {
|
|
62
|
-
type: String,
|
|
63
|
-
required: false,
|
|
64
|
-
default: translate('GlDuoWorkflowPrompt.promptLabel', 'Description'),
|
|
65
|
-
},
|
|
66
|
-
/**
|
|
67
|
-
* The label description of the prompt text area
|
|
68
|
-
*
|
|
69
|
-
* See `GlFormGroup` for text placement.
|
|
70
|
-
*/
|
|
71
|
-
promptLabelDescription: {
|
|
72
|
-
type: String,
|
|
73
|
-
required: false,
|
|
74
|
-
default: translate(
|
|
75
|
-
'GlDuoWorkflowPrompt.promptLabelDescription',
|
|
76
|
-
'What would you like to do and how.'
|
|
77
|
-
),
|
|
78
|
-
},
|
|
79
|
-
/**
|
|
80
|
-
* The description of the prompt text area
|
|
81
|
-
*
|
|
82
|
-
* See `GlFormGroup` for text placement.
|
|
83
|
-
*/
|
|
84
|
-
promptDescription: {
|
|
85
|
-
type: String,
|
|
86
|
-
required: false,
|
|
87
|
-
default: translate(
|
|
88
|
-
'GlDuoWorkflowPrompt.promptDescription',
|
|
89
|
-
'Be specific and include any requirements.'
|
|
90
|
-
),
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* The HTML ID of the textarea for the prompt
|
|
95
|
-
*/
|
|
96
|
-
promptId: {
|
|
97
|
-
type: String,
|
|
98
|
-
required: false,
|
|
99
|
-
default: 'duo-workflow-prompt',
|
|
100
|
-
},
|
|
101
|
-
/**
|
|
102
|
-
* The label of the image input
|
|
103
|
-
*/
|
|
104
|
-
imageLabel: {
|
|
105
|
-
type: String,
|
|
106
|
-
required: false,
|
|
107
|
-
default: translate('GlDuoWorkflowPrompt.imageLabel', 'Image'),
|
|
108
|
-
},
|
|
109
|
-
/**
|
|
110
|
-
* The label description of the image input
|
|
111
|
-
*
|
|
112
|
-
* See `GlFormGroup` for text placement.
|
|
113
|
-
*/
|
|
114
|
-
imageLabelDescription: {
|
|
115
|
-
type: String,
|
|
116
|
-
required: false,
|
|
117
|
-
default: translate(
|
|
118
|
-
'GlDuoWorkflowPrompt.imageLabelDescription',
|
|
119
|
-
'The container image to run the workflow in.'
|
|
120
|
-
),
|
|
121
|
-
},
|
|
122
|
-
/**
|
|
123
|
-
* The description of the image input
|
|
124
|
-
*
|
|
125
|
-
* See `GlFormGroup` for text placement.
|
|
126
|
-
*/
|
|
127
|
-
imageDescription: {
|
|
128
|
-
type: String,
|
|
129
|
-
required: false,
|
|
130
|
-
default: translate(
|
|
131
|
-
'GlDuoWorkflowPrompt.imageDescription',
|
|
132
|
-
'It should have any tools necessary for the workflow installed.'
|
|
133
|
-
),
|
|
134
|
-
},
|
|
135
|
-
/**
|
|
136
|
-
* The ID of the image input
|
|
137
|
-
*/
|
|
138
|
-
imageId: {
|
|
139
|
-
type: String,
|
|
140
|
-
required: false,
|
|
141
|
-
default: 'duo-workflow-image',
|
|
142
|
-
},
|
|
143
|
-
/**
|
|
144
|
-
* The text for the confirmation button. This button emits a `confirm` event.
|
|
145
|
-
*/
|
|
146
|
-
confirmButtonText: {
|
|
147
|
-
type: String,
|
|
148
|
-
required: false,
|
|
149
|
-
default: translate('GlDuoWorkflowPrompt.confirmButtonText', 'Generate plan'),
|
|
150
|
-
},
|
|
151
|
-
/**
|
|
152
|
-
* The text for the cancellation button. This button emits a `cancel` event.
|
|
153
|
-
*/
|
|
154
|
-
cancelButtonText: {
|
|
155
|
-
type: String,
|
|
156
|
-
required: false,
|
|
157
|
-
default: translate('GlDuoWorkflowPrompt.cancelButtonText', 'Cancel'),
|
|
158
|
-
},
|
|
159
|
-
/**
|
|
160
|
-
* The text used as the title and aria-label for the button when the collapse is collapsed
|
|
161
|
-
*
|
|
162
|
-
* See `GlDuoWorkflowPanel`
|
|
163
|
-
*/
|
|
164
|
-
expandPanelButtonTitle: {
|
|
165
|
-
type: String,
|
|
166
|
-
required: false,
|
|
167
|
-
default: '',
|
|
168
|
-
},
|
|
169
|
-
/**
|
|
170
|
-
* The text used as the title and aria-label for the button when the collapse is expanded
|
|
171
|
-
*
|
|
172
|
-
* See `GlDuoWorkflowPanel`
|
|
173
|
-
*/
|
|
174
|
-
collapsePanelButtonTitle: {
|
|
175
|
-
type: String,
|
|
176
|
-
required: false,
|
|
177
|
-
default: '',
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
methods: {
|
|
181
|
-
emitChange(prompt) {
|
|
182
|
-
/**
|
|
183
|
-
* Notify listeners about prompt change
|
|
184
|
-
* @param {string} prompt The newly entered prompt
|
|
185
|
-
*/
|
|
186
|
-
this.$emit('update:prompt', prompt);
|
|
187
|
-
},
|
|
188
|
-
emitImage(image) {
|
|
189
|
-
/**
|
|
190
|
-
* Notify listeners about image change
|
|
191
|
-
* @param {string} image The newly entered image
|
|
192
|
-
*/
|
|
193
|
-
this.$emit('update:image', image);
|
|
194
|
-
},
|
|
195
|
-
clickConfirm(event) {
|
|
196
|
-
/**
|
|
197
|
-
* Notify listeners about prompt submission
|
|
198
|
-
* @param {*} event A click event
|
|
199
|
-
*/
|
|
200
|
-
this.$emit('confirm', event);
|
|
201
|
-
},
|
|
202
|
-
clickCancel(event) {
|
|
203
|
-
/**
|
|
204
|
-
* Notify listeners about prompt submission cancellation.
|
|
205
|
-
* @param {*} event A click event
|
|
206
|
-
*/
|
|
207
|
-
this.$emit('cancel', event);
|
|
208
|
-
},
|
|
209
|
-
},
|
|
210
|
-
};
|
|
211
|
-
</script>
|
|
212
|
-
|
|
213
|
-
<template>
|
|
214
|
-
<gl-duo-workflow-panel
|
|
215
|
-
header-icon="issue-type-objective"
|
|
216
|
-
:expand-panel-button-title="expandPanelButtonTitle"
|
|
217
|
-
:collapse-panel-button-title="collapsePanelButtonTitle"
|
|
218
|
-
>
|
|
219
|
-
<template #title>{{ title }}</template>
|
|
220
|
-
<template #subtitle>{{ summary }}</template>
|
|
221
|
-
<template #content>
|
|
222
|
-
<gl-form-group
|
|
223
|
-
:label="promptLabel"
|
|
224
|
-
:label-for="promptId"
|
|
225
|
-
:label-description="promptLabelDescription"
|
|
226
|
-
:description="promptDescription"
|
|
227
|
-
>
|
|
228
|
-
<gl-form-textarea
|
|
229
|
-
:id="promptId"
|
|
230
|
-
:value="prompt"
|
|
231
|
-
:disable="loading"
|
|
232
|
-
:no-resize="false"
|
|
233
|
-
@input="emitChange"
|
|
234
|
-
/>
|
|
235
|
-
</gl-form-group>
|
|
236
|
-
<gl-form-group
|
|
237
|
-
:label="imageLabel"
|
|
238
|
-
:label-for="imageId"
|
|
239
|
-
:label-description="imageLabelDescription"
|
|
240
|
-
:description="imageDescription"
|
|
241
|
-
>
|
|
242
|
-
<gl-form-input :id="imageId" :value="image" :disable="loading" @input="emitImage" />
|
|
243
|
-
</gl-form-group>
|
|
244
|
-
<div class="gl-flex gl-gap-3">
|
|
245
|
-
<gl-button
|
|
246
|
-
variant="confirm"
|
|
247
|
-
data-test-id="duo-workflow-prompt-confirm"
|
|
248
|
-
:loading="loading"
|
|
249
|
-
@click="clickConfirm"
|
|
250
|
-
>{{ confirmButtonText }}</gl-button
|
|
251
|
-
>
|
|
252
|
-
<gl-button data-test-id="duo-workflow-prompt-cancel" @click="clickCancel">{{
|
|
253
|
-
cancelButtonText
|
|
254
|
-
}}</gl-button>
|
|
255
|
-
</div>
|
|
256
|
-
</template>
|
|
257
|
-
</gl-duo-workflow-panel>
|
|
258
|
-
</template>
|