@gitlab/ui 91.13.0 → 91.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/components/base/form/form_date/form_date.js +2 -2
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +83 -15
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.js +81 -0
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.js +16 -5
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.js +19 -15
- package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +5 -5
- package/dist/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +4 -1
- package/dist/components/experimental/duo/chat/components/duo_chat_context/utils.js +20 -1
- package/dist/tailwind.css +1 -1
- package/dist/tailwind.css.map +1 -1
- package/package.json +5 -5
- package/src/components/base/form/form_character_count/form_character_count.md +2 -2
- package/src/components/base/form/form_character_count/form_character_count.vue +2 -2
- package/src/components/base/form/form_date/form_date.vue +2 -2
- package/src/components/base/form/form_textarea/form_textarea.vue +2 -2
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +86 -13
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue +71 -0
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue +26 -12
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.vue +24 -20
- package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +12 -12
- package/src/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +4 -0
- package/src/components/experimental/duo/chat/components/duo_chat_context/utils.js +23 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [91.15.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v91.14.0...v91.15.0) (2024-09-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add duo chat context menu keyboard interactions ([a031d8c](https://gitlab.com/gitlab-org/gitlab-ui/commit/a031d8c823757e7a22138c3bdc7de9ff24c25da9))
|
|
7
|
+
|
|
8
|
+
# [91.14.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v91.13.0...v91.14.0) (2024-09-10)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* add duo chat context menu search item styling ([1b97743](https://gitlab.com/gitlab-org/gitlab-ui/commit/1b977438f4566fc24e51cab05b3b5dd3553cc61a))
|
|
14
|
+
|
|
1
15
|
# [91.13.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v91.12.0...v91.13.0) (2024-09-06)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -31,12 +31,12 @@ var script = {
|
|
|
31
31
|
minInvalidFeedback: {
|
|
32
32
|
type: String,
|
|
33
33
|
required: false,
|
|
34
|
-
default: 'Must be after minimum date'
|
|
34
|
+
default: 'Must be after minimum date.'
|
|
35
35
|
},
|
|
36
36
|
maxInvalidFeedback: {
|
|
37
37
|
type: String,
|
|
38
38
|
required: false,
|
|
39
|
-
default: 'Must be before maximum date'
|
|
39
|
+
default: 'Must be before maximum date.'
|
|
40
40
|
},
|
|
41
41
|
value: {
|
|
42
42
|
type: String,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import debounce from 'lodash/debounce';
|
|
2
2
|
import { translate } from '../../../../../../../utils/i18n';
|
|
3
3
|
import GlCard from '../../../../../../base/card/card';
|
|
4
|
-
import { contextItemsValidator, categoriesValidator } from '../utils';
|
|
5
4
|
import GlDuoChatContextItemSelections from '../duo_chat_context_item_selections/duo_chat_context_item_selections';
|
|
5
|
+
import { contextItemsValidator, categoriesValidator, wrapIndex } from '../utils';
|
|
6
6
|
import GlDuoChatContextItemMenuCategoryItems from './duo_chat_context_item_menu_category_items';
|
|
7
7
|
import GlDuoChatContextItemMenuSearchItems from './duo_chat_context_item_menu_search_items';
|
|
8
8
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
@@ -66,14 +66,17 @@ var script = {
|
|
|
66
66
|
},
|
|
67
67
|
data() {
|
|
68
68
|
return {
|
|
69
|
-
|
|
69
|
+
selectedCategory: null,
|
|
70
70
|
searchQuery: '',
|
|
71
|
-
|
|
71
|
+
activeIndex: 0
|
|
72
72
|
};
|
|
73
73
|
},
|
|
74
74
|
computed: {
|
|
75
75
|
showCategorySelection() {
|
|
76
76
|
return this.open && !this.selectedCategory;
|
|
77
|
+
},
|
|
78
|
+
allResultsAreDisabled() {
|
|
79
|
+
return this.results.every(result => !result.isEnabled);
|
|
77
80
|
}
|
|
78
81
|
},
|
|
79
82
|
watch: {
|
|
@@ -84,14 +87,22 @@ var script = {
|
|
|
84
87
|
},
|
|
85
88
|
searchQuery(query) {
|
|
86
89
|
this.debouncedSearch(query);
|
|
90
|
+
},
|
|
91
|
+
results(newResults) {
|
|
92
|
+
const firstEnabledIndex = newResults.findIndex(result => result.isEnabled);
|
|
93
|
+
this.activeIndex = firstEnabledIndex >= 0 ? firstEnabledIndex : 0;
|
|
87
94
|
}
|
|
88
95
|
},
|
|
89
96
|
methods: {
|
|
90
97
|
selectCategory(category) {
|
|
91
|
-
this.activeIndex = 0;
|
|
92
98
|
this.searchQuery = '';
|
|
93
99
|
this.selectedCategory = category;
|
|
94
|
-
|
|
100
|
+
this.$emit('search', {
|
|
101
|
+
category: category.value,
|
|
102
|
+
query: ''
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
debouncedSearch: debounce(function search(query) {
|
|
95
106
|
/**
|
|
96
107
|
* Emitted when a search should be performed.
|
|
97
108
|
* @property {Object} filter
|
|
@@ -99,10 +110,10 @@ var script = {
|
|
|
99
110
|
* @property {string} filter.query - The search query
|
|
100
111
|
*/
|
|
101
112
|
this.$emit('search', {
|
|
102
|
-
category:
|
|
103
|
-
query
|
|
113
|
+
category: this.selectedCategory.value,
|
|
114
|
+
query
|
|
104
115
|
});
|
|
105
|
-
},
|
|
116
|
+
}, SEARCH_DEBOUNCE_MS),
|
|
106
117
|
selectItem(item) {
|
|
107
118
|
if (!item.isEnabled) {
|
|
108
119
|
return;
|
|
@@ -127,15 +138,72 @@ var script = {
|
|
|
127
138
|
*/
|
|
128
139
|
this.$emit('remove', item);
|
|
129
140
|
},
|
|
130
|
-
debouncedSearch: debounce(function search(query) {
|
|
131
|
-
this.$emit('search', {
|
|
132
|
-
category: this.selectedCategory.value,
|
|
133
|
-
query
|
|
134
|
-
});
|
|
135
|
-
}, SEARCH_DEBOUNCE_MS),
|
|
136
141
|
resetSelection() {
|
|
137
142
|
this.selectedCategory = null;
|
|
143
|
+
this.searchQuery = '';
|
|
138
144
|
this.activeIndex = 0;
|
|
145
|
+
},
|
|
146
|
+
async scrollActiveItemIntoView() {
|
|
147
|
+
await this.$nextTick();
|
|
148
|
+
const activeItem = document.getElementById(`dropdown-item-${this.activeIndex}`);
|
|
149
|
+
if (activeItem) {
|
|
150
|
+
activeItem.scrollIntoView({
|
|
151
|
+
block: 'nearest',
|
|
152
|
+
inline: 'start'
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
handleKeyUp(e) {
|
|
157
|
+
switch (e.key) {
|
|
158
|
+
case 'ArrowDown':
|
|
159
|
+
case 'ArrowUp':
|
|
160
|
+
e.preventDefault();
|
|
161
|
+
this.moveActiveIndex(e.key === 'ArrowDown' ? 1 : -1);
|
|
162
|
+
this.scrollActiveItemIntoView();
|
|
163
|
+
break;
|
|
164
|
+
case 'Enter':
|
|
165
|
+
e.preventDefault();
|
|
166
|
+
if (this.showCategorySelection) {
|
|
167
|
+
this.selectCategory(this.categories[this.activeIndex]);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (!this.results.length) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.selectItem(this.results[this.activeIndex]);
|
|
174
|
+
break;
|
|
175
|
+
case 'Escape':
|
|
176
|
+
e.preventDefault();
|
|
177
|
+
if (this.showCategorySelection) {
|
|
178
|
+
this.$emit('close');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
this.selectedCategory = null;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
moveActiveIndex(step) {
|
|
186
|
+
if (this.showCategorySelection) {
|
|
187
|
+
// Categories cannot be disabled, so just loop to the next/prev one
|
|
188
|
+
this.activeIndex = wrapIndex(this.activeIndex, step, this.categories.length);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Return early if there are no results or all results are disabled
|
|
193
|
+
if (!this.results.length || this.allResultsAreDisabled) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// contextItems CAN be disabled, so loop to next/prev but ensure we don't land on a disabled one
|
|
198
|
+
let newIndex = this.activeIndex;
|
|
199
|
+
do {
|
|
200
|
+
newIndex = wrapIndex(newIndex, step, this.results.length);
|
|
201
|
+
if (newIndex === this.activeIndex) {
|
|
202
|
+
// If we've looped through all items and found no enabled ones, keep the current index
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
} while (!this.results[newIndex].isEnabled);
|
|
206
|
+
this.activeIndex = newIndex;
|
|
139
207
|
}
|
|
140
208
|
},
|
|
141
209
|
i18n: {
|
|
@@ -147,7 +215,7 @@ var script = {
|
|
|
147
215
|
const __vue_script__ = script;
|
|
148
216
|
|
|
149
217
|
/* template */
|
|
150
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.selections.length)?_c('gl-duo-chat-context-item-selections',{staticClass:"gl-mb-3",attrs:{"selections":_vm.selections,"removable":true,"title":_vm.$options.i18n.selectedContextItemsTitle,"default-collapsed":false},on:{"remove":_vm.removeItem}}):_vm._e(),_vm._v(" "),(_vm.open)?_c('gl-card',{staticClass:"slash-commands !gl-absolute gl-bottom-0 gl-w-full gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2","data-testid":"context-item-menu"}},[(_vm.showCategorySelection)?_c('gl-duo-chat-context-item-menu-category-items',{attrs:{"active-index":_vm.activeIndex,"categories":_vm.categories},on:{"select":_vm.selectCategory,"active-index-change":function($event){_vm.activeIndex = $event;}}}):_c('gl-duo-chat-context-item-menu-search-items',{attrs:{"active-index":_vm.activeIndex,"category":_vm.selectedCategory,"loading":_vm.loading,"error":_vm.error,"results":_vm.results},on:{"select":_vm.selectItem,"active-index-change":function($event){_vm.activeIndex = $event;}},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v;},expression:"searchQuery"}})],1):_vm._e()],1)};
|
|
218
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.selections.length)?_c('gl-duo-chat-context-item-selections',{staticClass:"gl-mb-3",attrs:{"selections":_vm.selections,"removable":true,"title":_vm.$options.i18n.selectedContextItemsTitle,"default-collapsed":false},on:{"remove":_vm.removeItem}}):_vm._e(),_vm._v(" "),(_vm.open)?_c('gl-card',{staticClass:"slash-commands !gl-absolute gl-bottom-0 gl-w-full gl-pl-0 gl-shadow-md",attrs:{"body-class":"!gl-p-2","data-testid":"context-item-menu"}},[(_vm.showCategorySelection)?_c('gl-duo-chat-context-item-menu-category-items',{attrs:{"active-index":_vm.activeIndex,"categories":_vm.categories},on:{"select":_vm.selectCategory,"active-index-change":function($event){_vm.activeIndex = $event;}}}):_c('gl-duo-chat-context-item-menu-search-items',{attrs:{"active-index":_vm.activeIndex,"category":_vm.selectedCategory,"loading":_vm.loading,"error":_vm.error,"results":_vm.results},on:{"select":_vm.selectItem,"keyup":_vm.handleKeyUp,"active-index-change":function($event){_vm.activeIndex = $event;}},model:{value:(_vm.searchQuery),callback:function ($$v) {_vm.searchQuery=$$v;},expression:"searchQuery"}})],1):_vm._e()],1)};
|
|
151
219
|
var __vue_staticRenderFns__ = [];
|
|
152
220
|
|
|
153
221
|
/* style */
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover';
|
|
2
|
+
import GlIcon from '../../../../../../base/icon/icon';
|
|
3
|
+
import { categoryValidator, contextItemValidator, formatMergeRequestId, formatIssueId } from '../utils';
|
|
4
|
+
import { CONTEXT_ITEM_TYPE_MERGE_REQUEST, CONTEXT_ITEM_TYPE_ISSUE, CONTEXT_ITEM_TYPE_PROJECT_FILE } from '../constants';
|
|
5
|
+
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
6
|
+
|
|
7
|
+
var script = {
|
|
8
|
+
name: 'GlDuoChatContextItemMenuSearchItem',
|
|
9
|
+
components: {
|
|
10
|
+
GlIcon,
|
|
11
|
+
GlDuoChatContextItemPopover
|
|
12
|
+
},
|
|
13
|
+
props: {
|
|
14
|
+
category: {
|
|
15
|
+
type: Object,
|
|
16
|
+
required: true,
|
|
17
|
+
validator: categoryValidator
|
|
18
|
+
},
|
|
19
|
+
contextItem: {
|
|
20
|
+
type: Object,
|
|
21
|
+
required: true,
|
|
22
|
+
validator: contextItemValidator
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
computed: {
|
|
26
|
+
title() {
|
|
27
|
+
var _this$contextItem$met;
|
|
28
|
+
return ((_this$contextItem$met = this.contextItem.metadata) === null || _this$contextItem$met === void 0 ? void 0 : _this$contextItem$met.name) || '';
|
|
29
|
+
},
|
|
30
|
+
secondaryText() {
|
|
31
|
+
switch (this.category.value) {
|
|
32
|
+
case CONTEXT_ITEM_TYPE_PROJECT_FILE:
|
|
33
|
+
return this.contextItem.metadata.info.relFilePath;
|
|
34
|
+
case CONTEXT_ITEM_TYPE_ISSUE:
|
|
35
|
+
return formatIssueId(this.contextItem.metadata.info.iid);
|
|
36
|
+
case CONTEXT_ITEM_TYPE_MERGE_REQUEST:
|
|
37
|
+
return formatMergeRequestId(this.contextItem.metadata.info.iid);
|
|
38
|
+
default:
|
|
39
|
+
return '';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/* script */
|
|
46
|
+
const __vue_script__ = script;
|
|
47
|
+
|
|
48
|
+
/* template */
|
|
49
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-flex gl-flex-col"},[_c('div',{staticClass:"gl-flex gl-items-center"},[_c('gl-icon',{staticClass:"gl-mr-2 gl-shrink-0",attrs:{"name":_vm.category.icon,"data-testid":"category-icon"}}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.title))]),_vm._v(" "),_c('gl-icon',{staticClass:"gl-ml-2 gl-shrink-0 gl-cursor-pointer gl-text-secondary",attrs:{"id":("info-icon-" + (_vm.contextItem.id)),"name":"information-o","size":12}}),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":_vm.contextItem,"target":("info-icon-" + (_vm.contextItem.id)),"placement":"left"}})],1),_vm._v(" "),_c('div',{staticClass:"gl-mt-1 gl-shrink-0 gl-whitespace-nowrap gl-text-secondary"},[_vm._v("\n "+_vm._s(_vm.secondaryText)+"\n ")])])};
|
|
50
|
+
var __vue_staticRenderFns__ = [];
|
|
51
|
+
|
|
52
|
+
/* style */
|
|
53
|
+
const __vue_inject_styles__ = undefined;
|
|
54
|
+
/* scoped */
|
|
55
|
+
const __vue_scope_id__ = undefined;
|
|
56
|
+
/* module identifier */
|
|
57
|
+
const __vue_module_identifier__ = undefined;
|
|
58
|
+
/* functional template */
|
|
59
|
+
const __vue_is_functional_template__ = false;
|
|
60
|
+
/* style inject */
|
|
61
|
+
|
|
62
|
+
/* style inject SSR */
|
|
63
|
+
|
|
64
|
+
/* style inject shadow dom */
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
const __vue_component__ = __vue_normalize__(
|
|
69
|
+
{ render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
|
|
70
|
+
__vue_inject_styles__,
|
|
71
|
+
__vue_script__,
|
|
72
|
+
__vue_scope_id__,
|
|
73
|
+
__vue_is_functional_template__,
|
|
74
|
+
__vue_module_identifier__,
|
|
75
|
+
false,
|
|
76
|
+
undefined,
|
|
77
|
+
undefined,
|
|
78
|
+
undefined
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
export default __vue_component__;
|
|
@@ -4,15 +4,17 @@ import GlAlert from '../../../../../../base/alert/alert';
|
|
|
4
4
|
import { sprintf, translate } from '../../../../../../../utils/i18n';
|
|
5
5
|
import { categoryValidator, contextItemsValidator } from '../utils';
|
|
6
6
|
import GlDuoChatContextItemMenuSearchItemsLoading from './duo_chat_context_item_menu_search_items_loading';
|
|
7
|
+
import GlDuoChatContextItemMenuSearchItem from './duo_chat_context_item_menu_search_item';
|
|
7
8
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
8
9
|
|
|
9
10
|
var script = {
|
|
10
11
|
name: 'GlDuoChatContextItemMenuSearchItems',
|
|
11
12
|
components: {
|
|
12
13
|
GlAlert,
|
|
13
|
-
GlFormInput,
|
|
14
14
|
GlDropdownItem,
|
|
15
|
-
|
|
15
|
+
GlDuoChatContextItemMenuSearchItem,
|
|
16
|
+
GlDuoChatContextItemMenuSearchItemsLoading,
|
|
17
|
+
GlFormInput
|
|
16
18
|
},
|
|
17
19
|
model: {
|
|
18
20
|
prop: 'searchQuery',
|
|
@@ -72,15 +74,21 @@ var script = {
|
|
|
72
74
|
}
|
|
73
75
|
},
|
|
74
76
|
methods: {
|
|
75
|
-
selectItem(
|
|
76
|
-
this.$emit('select',
|
|
77
|
+
selectItem(contextItem) {
|
|
78
|
+
this.$emit('select', contextItem);
|
|
77
79
|
this.userInitiatedSearch = false;
|
|
78
80
|
},
|
|
81
|
+
handleKeyUp(e) {
|
|
82
|
+
this.$emit('keyup', e);
|
|
83
|
+
},
|
|
79
84
|
setActiveIndex(index) {
|
|
80
85
|
var _this$results$index;
|
|
81
86
|
if ((_this$results$index = this.results[index]) !== null && _this$results$index !== void 0 && _this$results$index.isEnabled) {
|
|
82
87
|
this.$emit('active-index-change', index);
|
|
83
88
|
}
|
|
89
|
+
},
|
|
90
|
+
isActiveItem(contextItem, index) {
|
|
91
|
+
return index === this.activeIndex && contextItem.isEnabled;
|
|
84
92
|
}
|
|
85
93
|
},
|
|
86
94
|
i18n: {
|
|
@@ -92,7 +100,10 @@ var script = {
|
|
|
92
100
|
const __vue_script__ = script;
|
|
93
101
|
|
|
94
102
|
/* template */
|
|
95
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:"gl-max-h-31 gl-overflow-y-scroll"},[(_vm.loading)?_c('gl-duo-chat-context-item-menu-search-items-loading',{attrs:{"rows":_vm.numLoadingItems}}):(_vm.error)?_c('gl-alert',{staticClass:"gl-m-3",attrs:{"variant":"danger","dismissible":false,"data-testid":"search-results-error"}},[_vm._v("\n "+_vm._s(_vm.error)+"\n ")]):(_vm.showEmptyState)?_c('div',{staticClass:"gl-rounded-base gl-p-3 gl-text-center gl-text-secondary",attrs:{"data-testid":"search-results-empty-state"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.emptyStateMessage)+"\n ")]):_c('ul',{staticClass:"gl-mb-1 gl-list-none gl-flex-row gl-pl-0"},_vm._l((_vm.results),function(
|
|
103
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:"gl-max-h-31 gl-overflow-y-scroll"},[(_vm.loading)?_c('gl-duo-chat-context-item-menu-search-items-loading',{attrs:{"rows":_vm.numLoadingItems}}):(_vm.error)?_c('gl-alert',{staticClass:"gl-m-3",attrs:{"variant":"danger","dismissible":false,"data-testid":"search-results-error"}},[_vm._v("\n "+_vm._s(_vm.error)+"\n ")]):(_vm.showEmptyState)?_c('div',{staticClass:"gl-rounded-base gl-p-3 gl-text-center gl-text-secondary",attrs:{"data-testid":"search-results-empty-state"}},[_vm._v("\n "+_vm._s(_vm.$options.i18n.emptyStateMessage)+"\n ")]):_c('ul',{staticClass:"gl-mb-1 gl-list-none gl-flex-row gl-pl-0"},_vm._l((_vm.results),function(contextItem,index){return _c('gl-dropdown-item',{key:contextItem.id,staticClass:"duo-chat-context-search-result-item",class:{
|
|
104
|
+
'active-command': _vm.isActiveItem(contextItem, index),
|
|
105
|
+
'gl-cursor-not-allowed [&>button]:focus-within:!gl-shadow-none': !contextItem.isEnabled,
|
|
106
|
+
},attrs:{"id":("dropdown-item-" + index),"tabindex":!contextItem.isEnabled ? -1 : undefined,"data-testid":"search-result-item"},on:{"click":function($event){return _vm.selectItem(contextItem)}}},[_c('div',{on:{"mouseenter":function($event){return _vm.setActiveIndex(index)}}},[_c('gl-duo-chat-context-item-menu-search-item',{class:{ 'gl-text-secondary': !contextItem.isEnabled },attrs:{"context-item":contextItem,"category":_vm.category,"data-testid":"search-result-item-details"}})],1)])}),1)],1),_vm._v(" "),_c('gl-form-input',{ref:"contextMenuSearchInput",attrs:{"value":_vm.searchQuery,"placeholder":_vm.searchInputPlaceholder,"autofocus":"","data-testid":"context-menu-search-input"},on:{"input":function($event){return _vm.$emit('update:searchQuery', $event)},"keyup":_vm.handleKeyUp}})],1)};
|
|
96
107
|
var __vue_staticRenderFns__ = [];
|
|
97
108
|
|
|
98
109
|
/* style */
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import GlPopover from '../../../../../../base/popover/popover';
|
|
2
2
|
import { translate } from '../../../../../../../utils/i18n';
|
|
3
3
|
import { CONTEXT_ITEM_TYPE_ISSUE, CONTEXT_ITEM_TYPE_MERGE_REQUEST, CONTEXT_ITEM_TYPE_PROJECT_FILE } from '../constants';
|
|
4
|
+
import { formatMergeRequestId, formatIssueId } from '../utils';
|
|
4
5
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
5
6
|
|
|
6
|
-
const ID_PREFIXES = {
|
|
7
|
-
issue: '#',
|
|
8
|
-
merge_request: '!'
|
|
9
|
-
};
|
|
10
7
|
var script = {
|
|
11
8
|
name: 'DuoChatContextItemPopover',
|
|
12
9
|
components: {
|
|
@@ -14,9 +11,9 @@ var script = {
|
|
|
14
11
|
},
|
|
15
12
|
props: {
|
|
16
13
|
/**
|
|
17
|
-
* The context
|
|
14
|
+
* The context contextItem to display in the popover.
|
|
18
15
|
*/
|
|
19
|
-
|
|
16
|
+
contextItem: {
|
|
20
17
|
type: Object,
|
|
21
18
|
required: true
|
|
22
19
|
},
|
|
@@ -38,24 +35,31 @@ var script = {
|
|
|
38
35
|
},
|
|
39
36
|
computed: {
|
|
40
37
|
itemInfo() {
|
|
41
|
-
var _this$
|
|
42
|
-
return ((_this$
|
|
38
|
+
var _this$contextItem$met;
|
|
39
|
+
return ((_this$contextItem$met = this.contextItem.metadata) === null || _this$contextItem$met === void 0 ? void 0 : _this$contextItem$met.info) || {};
|
|
43
40
|
},
|
|
44
41
|
id() {
|
|
45
|
-
const isIssuable = this.
|
|
42
|
+
const isIssuable = this.contextItem.type === CONTEXT_ITEM_TYPE_ISSUE || this.contextItem.type === CONTEXT_ITEM_TYPE_MERGE_REQUEST;
|
|
46
43
|
return isIssuable ? this.itemInfo.iid || '' : null;
|
|
47
44
|
},
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
formattedId() {
|
|
46
|
+
switch (this.contextItem.type) {
|
|
47
|
+
case CONTEXT_ITEM_TYPE_ISSUE:
|
|
48
|
+
return formatIssueId(this.id);
|
|
49
|
+
case CONTEXT_ITEM_TYPE_MERGE_REQUEST:
|
|
50
|
+
return formatMergeRequestId(this.id);
|
|
51
|
+
default:
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
50
54
|
},
|
|
51
55
|
filePath() {
|
|
52
|
-
return this.
|
|
56
|
+
return this.contextItem.type === CONTEXT_ITEM_TYPE_PROJECT_FILE ? this.itemInfo.relFilePath || '' : null;
|
|
53
57
|
},
|
|
54
58
|
isEnabled() {
|
|
55
|
-
return this.
|
|
59
|
+
return this.contextItem.isEnabled !== false;
|
|
56
60
|
},
|
|
57
61
|
disabledMessage() {
|
|
58
|
-
return Array.isArray(this.
|
|
62
|
+
return Array.isArray(this.contextItem.disabledReasons) && this.contextItem.disabledReasons.length > 0 ? this.contextItem.disabledReasons.join(', ') : translate('DuoChatContextItemPopover.DisabledReason', 'This item is disabled');
|
|
59
63
|
}
|
|
60
64
|
},
|
|
61
65
|
methods: {
|
|
@@ -67,7 +71,7 @@ var script = {
|
|
|
67
71
|
const __vue_script__ = script;
|
|
68
72
|
|
|
69
73
|
/* template */
|
|
70
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-popover',{attrs:{"target":_vm.target,"triggers":"hover focus","placement":_vm.placement,"title":_vm.
|
|
74
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-popover',{attrs:{"target":_vm.target,"triggers":"hover focus","placement":_vm.placement,"title":_vm.contextItem.metadata.name,"custom-class":"gl-duo-chat-item-popover"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('span',{staticClass:"gl-text-sm gl-text-gray-500",attrs:{"data-testid":"chat-context-popover-title"}},[_vm._v(_vm._s(_vm.contextItem.metadata.name))])]},proxy:true}])},[_vm._v(" "),_c('div',{staticClass:"gl-p-3"},[_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.ProjectLabel', 'Project:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.itemInfo.project))])]),_vm._v(" "),(_vm.filePath !== null)?_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.PathLabel', 'Path:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.filePath))])]):_vm._e(),_vm._v(" "),(_vm.id !== null)?_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.IdLabel', 'ID:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.formattedId))])]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-mb-2"},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.TypeLabel', 'Type:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.contextItem.type))])]),_vm._v(" "),(!_vm.isEnabled)?_c('div',{staticClass:"gl-text-red-500",attrs:{"data-testid":"chat-context-popover-disabled"}},[_c('strong',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.translate('DuoChatContextItemPopover.DisabledMessageLabel', 'Note:')))]),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.disabledMessage))])]):_vm._e()])])};
|
|
71
75
|
var __vue_staticRenderFns__ = [];
|
|
72
76
|
|
|
73
77
|
/* style */
|
|
@@ -68,12 +68,12 @@ var script = {
|
|
|
68
68
|
toggleCollapse() {
|
|
69
69
|
this.isCollapsed = !this.isCollapsed;
|
|
70
70
|
},
|
|
71
|
-
onRemoveItem(
|
|
71
|
+
onRemoveItem(contextItem) {
|
|
72
72
|
/**
|
|
73
|
-
* Emitted when a context
|
|
74
|
-
* @property {Object} item - The context
|
|
73
|
+
* Emitted when a context contextItem should be removed.
|
|
74
|
+
* @property {Object} item - The context contextItem to be removed
|
|
75
75
|
*/
|
|
76
|
-
this.$emit('remove',
|
|
76
|
+
this.$emit('remove', contextItem);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
};
|
|
@@ -82,7 +82,7 @@ var script = {
|
|
|
82
82
|
const __vue_script__ = script;
|
|
83
83
|
|
|
84
84
|
/* template */
|
|
85
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-mb-3 gl-flex gl-flex-col"},[_c('button',{staticClass:"gl-flex gl-w-full gl-items-center gl-border-0 gl-bg-transparent gl-p-0 gl-text-left gl-text-xs gl-lowercase gl-text-gray-500",attrs:{"data-testid":"chat-context-selections-title"},on:{"click":_vm.toggleCollapse}},[_c('gl-icon',{attrs:{"name":_vm.collapseIconName,"data-testid":"chat-context-collapse-icon"}}),_vm._v(" "+_vm._s(_vm.title)+"\n ")],1),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(!_vm.isCollapsed),expression:"!isCollapsed"}],staticClass:"gl-mt-1 gl-flex gl-grow gl-flex-wrap",attrs:{"data-testid":"chat-context-tokens-wrapper"}},_vm._l((_vm.selections),function(
|
|
85
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-mb-3 gl-flex gl-flex-col"},[_c('button',{staticClass:"gl-flex gl-w-full gl-items-center gl-border-0 gl-bg-transparent gl-p-0 gl-text-left gl-text-xs gl-lowercase gl-text-gray-500",attrs:{"data-testid":"chat-context-selections-title"},on:{"click":_vm.toggleCollapse}},[_c('gl-icon',{attrs:{"name":_vm.collapseIconName,"data-testid":"chat-context-collapse-icon"}}),_vm._v(" "+_vm._s(_vm.title)+"\n ")],1),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(!_vm.isCollapsed),expression:"!isCollapsed"}],staticClass:"gl-mt-1 gl-flex gl-grow gl-flex-wrap",attrs:{"data-testid":"chat-context-tokens-wrapper"}},_vm._l((_vm.selections),function(contextItem){return _c('gl-token',{key:contextItem.id,staticClass:"gl-mb-2 gl-mr-2",attrs:{"view-only":!_vm.removable,"variant":"default"},on:{"close":function($event){return _vm.onRemoveItem(contextItem)}}},[_c('div',{staticClass:"gl-flex gl-items-center",attrs:{"id":("context-item-" + (contextItem.id) + "-" + _vm.selectionsId)}},[_c('gl-icon',{staticClass:"gl-mr-1",attrs:{"name":_vm.getIconName(contextItem.type),"size":12}}),_vm._v("\n "+_vm._s(contextItem.metadata.name)+"\n ")],1),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":contextItem,"target":("context-item-" + (contextItem.id) + "-" + _vm.selectionsId),"placement":"bottom"}})],1)}),1)])};
|
|
86
86
|
var __vue_staticRenderFns__ = [];
|
|
87
87
|
|
|
88
88
|
/* style */
|
package/dist/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js
CHANGED
|
@@ -13,6 +13,9 @@ const MOCK_CATEGORIES = [{
|
|
|
13
13
|
value: CONTEXT_ITEM_TYPE_MERGE_REQUEST,
|
|
14
14
|
icon: 'merge-request'
|
|
15
15
|
}];
|
|
16
|
+
function getMockCategory(categoryValue) {
|
|
17
|
+
return MOCK_CATEGORIES.find(cat => cat.value === categoryValue);
|
|
18
|
+
}
|
|
16
19
|
const MOCK_CONTEXT_ITEM_FILE = {
|
|
17
20
|
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
18
21
|
isEnabled: true,
|
|
@@ -133,4 +136,4 @@ const getMockContextItems = () => {
|
|
|
133
136
|
return [...enabledItems, ...disabledItems];
|
|
134
137
|
};
|
|
135
138
|
|
|
136
|
-
export { MOCK_CATEGORIES, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockContextItems };
|
|
139
|
+
export { MOCK_CATEGORIES, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
|
|
@@ -13,5 +13,24 @@ function contextItemValidator(item) {
|
|
|
13
13
|
function contextItemsValidator(items) {
|
|
14
14
|
return Array.isArray(items) && items.every(item => contextItemValidator(item));
|
|
15
15
|
}
|
|
16
|
+
function formatIssueId(iid) {
|
|
17
|
+
if (!iid) return '';
|
|
18
|
+
return `#${iid}`;
|
|
19
|
+
}
|
|
20
|
+
function formatMergeRequestId(iid) {
|
|
21
|
+
if (!iid) return '';
|
|
22
|
+
return `!${iid}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Calculates a new index within a range. If the new index would fall out of bounds, wraps to the start/end of the range.
|
|
27
|
+
* @param {number} currentIndex - The starting index.
|
|
28
|
+
* @param {number} step - The number of steps to move (positive or negative).
|
|
29
|
+
* @param {number} totalLength - The total number of items in the range.
|
|
30
|
+
* @returns {number} The new index.
|
|
31
|
+
*/
|
|
32
|
+
function wrapIndex(currentIndex, step, totalLength) {
|
|
33
|
+
return (currentIndex + step + totalLength) % totalLength;
|
|
34
|
+
}
|
|
16
35
|
|
|
17
|
-
export { categoriesValidator, categoryValidator, contextItemValidator, contextItemsValidator };
|
|
36
|
+
export { categoriesValidator, categoryValidator, contextItemValidator, contextItemsValidator, formatIssueId, formatMergeRequestId, wrapIndex };
|
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-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--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-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--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-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--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(--gray-100,#dcdcde);background-image:linear-gradient(to right,var(--gray-100,#dcdcde) 0,var(--gray-50,#ececef) 23%,var(--gray-50,#ececef) 27%,var(--gray-100,#dcdcde) 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}}.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-border-l{border-left-color:var(--gl-border-color-default);border-left-style:solid}.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-fixed{position:fixed}.\!gl-absolute{position:absolute!important}.gl-absolute{position:absolute}.gl-relative{position:relative}.gl-bottom-0{bottom:0}.gl-bottom-2{bottom:.25rem}.gl-left-0{left:0}.gl-right-2{right:.25rem}.\!gl-z-9999{z-index:9999!important}.gl-z-200{z-index:200}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.gl-m-3{margin:.5rem}.gl-m-7{margin:2rem}.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-5{margin-bottom:1rem;margin-top:1rem}.\!gl-mt-2{margin-top:.25rem!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-mb-8{margin-bottom:2.5rem}.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-4{margin-right:.75rem}.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-block{display:block!important}.gl-block{display:block}.gl-inline-block{display:inline-block}.\!gl-flex{display:flex!important}.gl-flex{display:flex}.gl-inline-flex{display:inline-flex}.gl-table{display:table}.gl-grid{display:grid}.\!gl-hidden{display:none!important}.gl-hidden{display:none}.\!gl-h-full{height:100%!important}.gl-h-0{height:0}.gl-h-11{height:4rem}.gl-h-13{height:6rem}.gl-h-4{height:.75rem}.gl-h-5{height:1rem}.gl-h-auto{height:auto}.gl-h-full{height:100%}.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-10{width:3.5rem}.gl-w-20{width:10rem}.gl-w-30{width:15rem}.gl-w-4\/10{width:40%}.gl-w-5{width:1rem}.gl-w-full{width:100%}.gl-max-w-1\/2{max-width:50%}.gl-max-w-75{max-width:37.5rem}.gl-max-w-full{max-width:100%}.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-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-place-items-center{place-items: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-2{gap:.25rem}.gl-gap-3{gap:.5rem}.gl-gap-4{gap:.75rem}.gl-gap-5{gap:1rem}.gl-gap-6{gap:1.5rem}.gl-gap-x-3{column-gap:.5rem}.gl-self-start{align-self:flex-start}.gl-overflow-hidden{overflow:hidden}.gl-overflow-visible{overflow:visible}.gl-overflow-y-auto{overflow-y:auto}.gl-overflow-y-scroll{overflow-y:scroll}.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-line{white-space:pre-line}.\!gl-rounded-base{border-radius:.25rem!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-bl-none{border-bottom-left-radius:0}.gl-rounded-br-none{border-bottom-right-radius:0}.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{border-bottom-width:1px}.gl-border-b-0{border-bottom-width:0}.gl-border-b-1{border-bottom-width:1px}.gl-border-l{border-left-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-solid{border-style:solid}.\!gl-border-none{border-style:none!important}.gl-border-none{border-style:none}.gl-border-gray-200{border-color:var(--gray-200,#bfbfc3)}.gl-border-gray-50{border-color:var(--gray-50,#ececef)}.gl-border-red-500{border-color:var(--red-500,#dd2b0e)}.gl-border-section{border-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-b-gray-200{border-bottom-color:var(--gray-200,#bfbfc3)}.gl-border-b-section{border-bottom-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-t-gray-200{border-top-color:var(--gray-200,#bfbfc3)}.\!gl-bg-data-viz-green-700{background-color:var(--data-viz-green-700,#366800)!important}.\!gl-bg-data-viz-magenta-950{background-color:var(--data-viz-magenta-950,#541d31)!important}.\!gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)!important}.\!gl-bg-transparent{background-color:initial!important}.gl-bg-blue-100{background-color:var(--blue-100,#cbe2f9)}.gl-bg-data-viz-blue-500{background-color:var(--data-viz-blue-500,#617ae2)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)}.gl-bg-gray-50{background-color:var(--gray-50,#ececef)}.gl-bg-gray-900{background-color:var(--gray-900,#28272d)}.gl-bg-gray-950{background-color:var(--gray-950,#18171d)}.gl-bg-green-100{background-color:var(--green-100,#c3e6cd)}.gl-bg-overlap{background-color:var(--gl-background-color-overlap,var(--gl-color-neutral-0,#fff))}.gl-bg-overlay{background-color:var(--gl-background-color-overlay,var(--gl-color-alpha-dark-24,#0505063d))}.gl-bg-purple-50{background-color:var(--purple-50,#f4f0ff)}.gl-bg-red-100{background-color:var(--red-100,#fdd4cd)}.gl-bg-red-50{background-color:var(--red-50,#fcf1ef)}.gl-bg-section{background-color:var(--gl-background-color-section,var(--gl-background-color-overlap,#fff))}.gl-bg-strong{background-color:var(--gl-background-color-strong,var(--gl-color-neutral-50,#ececef))}.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-color-red-600,#c91c00))}.gl-fill-icon-default{fill:var(--gl-icon-color-default,var(--gl-color-neutral-700,#4c4b51))}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled,var(--gl-color-neutral-300,#a4a3a8))}.gl-fill-icon-info{fill:var(--gl-icon-color-info,var(--gl-color-blue-600,#1068bf))}.gl-fill-icon-link{fill:var(--gl-icon-color-link,var(--gl-color-blue-600,#1068bf))}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong,var(--gl-color-neutral-900,#28272d))}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle,var(--gl-color-neutral-500,#737278))}.gl-fill-icon-success{fill:var(--gl-icon-color-success,var(--gl-color-green-600,#217645))}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning,var(--gl-color-orange-600,#9e5400))}.\!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-p-7{padding:2rem}.\!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-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-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-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-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-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-lg{font-size:1rem}.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-gray-500{color:var(--gray-500,#737278)!important}.\!gl-text-red-500{color:var(--red-500,#dd2b0e)!important}.\!gl-text-white{color:var(--white,#fff)!important}.gl-text-blue-100{color:var(--blue-100,#cbe2f9)}.gl-text-blue-500{color:var(--blue-500,#1f75cb)}.gl-text-blue-900{color:var(--blue-900,#033464)}.gl-text-danger{color:var(--gl-text-color-danger,var(--gl-color-red-600,#c91c00))}.gl-text-gray-400{color:var(--gray-400,#89888d)}.gl-text-gray-500{color:var(--gray-500,#737278)}.gl-text-gray-600{color:var(--gray-600,#626168)}.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-green-600{color:var(--green-600,#217645)}.gl-text-inherit{color:inherit}.gl-text-orange-500{color:var(--orange-500,#ab6100)}.gl-text-red-300{color:var(--red-300,#f57f6c)}.gl-text-red-500{color:var(--red-500,#dd2b0e)}.gl-text-red-600{color:var(--red-600,#c91c00)}.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-inner-1-gray-400{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.\!gl-shadow-inner-1-gray-400{--tw-shadow:inset 0 0 0 1px var(--gray-400,#89888d)!important;--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)!important}.\!gl-shadow-inner-1-red-500{--tw-shadow:inset 0 0 0 1px var(--red-500,#dd2b0e)!important;--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)!important}.\!gl-shadow-inner-1-red-500,.\!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-inner-1-gray-400{--tw-shadow:inset 0 0 0 1px var(--gray-400,#89888d);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.gl-shadow-inner-1-gray-400,.gl-shadow-inner-1-red-300{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-shadow-inner-1-red-300{--tw-shadow:inset 0 0 0 1px var(--red-300,#f57f6c);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.gl-shadow-inner-1-red-500{--tw-shadow:inset 0 0 0 1px var(--red-500,#dd2b0e);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.gl-shadow-inner-1-red-500,.gl-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-shadow-md{--tw-shadow:0 2px 8px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 2px 8px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color)}.gl-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;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-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}.hover\:\!gl-cursor-not-allowed:hover{cursor:not-allowed!important}.hover\:gl-cursor-pointer:hover{cursor:pointer}.focus\:\!gl-shadow-inner-2-blue-400:focus{--tw-shadow:inset 0 0 0 2px var(--blue-400,#428fdc)!important;--tw-shadow-colored:inset 0 0 0 2px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!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}}@media (min-width:768px){.md\:gl-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
|
|
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-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--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-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--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-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--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(--gray-100,#dcdcde);background-image:linear-gradient(to right,var(--gray-100,#dcdcde) 0,var(--gray-50,#ececef) 23%,var(--gray-50,#ececef) 27%,var(--gray-100,#dcdcde) 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}}.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-border-l{border-left-color:var(--gl-border-color-default);border-left-style:solid}.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-fixed{position:fixed}.\!gl-absolute{position:absolute!important}.gl-absolute{position:absolute}.gl-relative{position:relative}.gl-bottom-0{bottom:0}.gl-bottom-2{bottom:.25rem}.gl-left-0{left:0}.gl-right-2{right:.25rem}.\!gl-z-9999{z-index:9999!important}.gl-z-200{z-index:200}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.gl-m-3{margin:.5rem}.gl-m-7{margin:2rem}.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-5{margin-bottom:1rem;margin-top:1rem}.\!gl-mt-2{margin-top:.25rem!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-mb-8{margin-bottom:2.5rem}.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-4{margin-right:.75rem}.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-block{display:block!important}.gl-block{display:block}.gl-inline-block{display:inline-block}.\!gl-flex{display:flex!important}.gl-flex{display:flex}.gl-inline-flex{display:inline-flex}.gl-table{display:table}.gl-grid{display:grid}.\!gl-hidden{display:none!important}.gl-hidden{display:none}.\!gl-h-full{height:100%!important}.gl-h-0{height:0}.gl-h-11{height:4rem}.gl-h-13{height:6rem}.gl-h-4{height:.75rem}.gl-h-5{height:1rem}.gl-h-auto{height:auto}.gl-h-full{height:100%}.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-10{width:3.5rem}.gl-w-20{width:10rem}.gl-w-30{width:15rem}.gl-w-4\/10{width:40%}.gl-w-5{width:1rem}.gl-w-full{width:100%}.gl-max-w-1\/2{max-width:50%}.gl-max-w-75{max-width:37.5rem}.gl-max-w-full{max-width:100%}.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-place-items-center{place-items: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-2{gap:.25rem}.gl-gap-3{gap:.5rem}.gl-gap-4{gap:.75rem}.gl-gap-5{gap:1rem}.gl-gap-6{gap:1.5rem}.gl-gap-x-3{column-gap:.5rem}.gl-self-start{align-self:flex-start}.gl-overflow-hidden{overflow:hidden}.gl-overflow-visible{overflow:visible}.gl-overflow-y-auto{overflow-y:auto}.gl-overflow-y-scroll{overflow-y:scroll}.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-line{white-space:pre-line}.\!gl-rounded-base{border-radius:.25rem!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-bl-none{border-bottom-left-radius:0}.gl-rounded-br-none{border-bottom-right-radius:0}.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{border-bottom-width:1px}.gl-border-b-0{border-bottom-width:0}.gl-border-b-1{border-bottom-width:1px}.gl-border-l{border-left-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-solid{border-style:solid}.\!gl-border-none{border-style:none!important}.gl-border-none{border-style:none}.gl-border-gray-200{border-color:var(--gray-200,#bfbfc3)}.gl-border-gray-50{border-color:var(--gray-50,#ececef)}.gl-border-red-500{border-color:var(--red-500,#dd2b0e)}.gl-border-section{border-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-b-gray-200{border-bottom-color:var(--gray-200,#bfbfc3)}.gl-border-b-section{border-bottom-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-t-gray-200{border-top-color:var(--gray-200,#bfbfc3)}.\!gl-bg-data-viz-green-700{background-color:var(--data-viz-green-700,#366800)!important}.\!gl-bg-data-viz-magenta-950{background-color:var(--data-viz-magenta-950,#541d31)!important}.\!gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)!important}.\!gl-bg-transparent{background-color:initial!important}.gl-bg-blue-100{background-color:var(--blue-100,#cbe2f9)}.gl-bg-data-viz-blue-500{background-color:var(--data-viz-blue-500,#617ae2)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)}.gl-bg-gray-50{background-color:var(--gray-50,#ececef)}.gl-bg-gray-900{background-color:var(--gray-900,#28272d)}.gl-bg-gray-950{background-color:var(--gray-950,#18171d)}.gl-bg-green-100{background-color:var(--green-100,#c3e6cd)}.gl-bg-overlap{background-color:var(--gl-background-color-overlap,var(--gl-color-neutral-0,#fff))}.gl-bg-overlay{background-color:var(--gl-background-color-overlay,var(--gl-color-alpha-dark-24,#0505063d))}.gl-bg-purple-50{background-color:var(--purple-50,#f4f0ff)}.gl-bg-red-100{background-color:var(--red-100,#fdd4cd)}.gl-bg-red-50{background-color:var(--red-50,#fcf1ef)}.gl-bg-section{background-color:var(--gl-background-color-section,var(--gl-background-color-overlap,#fff))}.gl-bg-strong{background-color:var(--gl-background-color-strong,var(--gl-color-neutral-50,#ececef))}.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-color-red-600,#c91c00))}.gl-fill-icon-default{fill:var(--gl-icon-color-default,var(--gl-color-neutral-700,#4c4b51))}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled,var(--gl-color-neutral-300,#a4a3a8))}.gl-fill-icon-info{fill:var(--gl-icon-color-info,var(--gl-color-blue-600,#1068bf))}.gl-fill-icon-link{fill:var(--gl-icon-color-link,var(--gl-color-blue-600,#1068bf))}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong,var(--gl-color-neutral-900,#28272d))}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle,var(--gl-color-neutral-500,#737278))}.gl-fill-icon-success{fill:var(--gl-icon-color-success,var(--gl-color-green-600,#217645))}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning,var(--gl-color-orange-600,#9e5400))}.\!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-p-7{padding:2rem}.\!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-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-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-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-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-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-lg{font-size:1rem}.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-gray-500{color:var(--gray-500,#737278)!important}.\!gl-text-red-500{color:var(--red-500,#dd2b0e)!important}.\!gl-text-white{color:var(--white,#fff)!important}.gl-text-blue-100{color:var(--blue-100,#cbe2f9)}.gl-text-blue-500{color:var(--blue-500,#1f75cb)}.gl-text-blue-900{color:var(--blue-900,#033464)}.gl-text-danger{color:var(--gl-text-color-danger,var(--gl-color-red-600,#c91c00))}.gl-text-gray-400{color:var(--gray-400,#89888d)}.gl-text-gray-500{color:var(--gray-500,#737278)}.gl-text-gray-600{color:var(--gray-600,#626168)}.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-green-600{color:var(--green-600,#217645)}.gl-text-inherit{color:inherit}.gl-text-orange-500{color:var(--orange-500,#ab6100)}.gl-text-red-300{color:var(--red-300,#f57f6c)}.gl-text-red-500{color:var(--red-500,#dd2b0e)}.gl-text-red-600{color:var(--red-600,#c91c00)}.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-inner-1-gray-400{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.\!gl-shadow-inner-1-gray-400{--tw-shadow:inset 0 0 0 1px var(--gray-400,#89888d)!important;--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)!important}.\!gl-shadow-inner-1-red-500{--tw-shadow:inset 0 0 0 1px var(--red-500,#dd2b0e)!important;--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)!important}.\!gl-shadow-inner-1-red-500,.\!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-inner-1-gray-400{--tw-shadow:inset 0 0 0 1px var(--gray-400,#89888d);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.gl-shadow-inner-1-gray-400,.gl-shadow-inner-1-red-300{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-shadow-inner-1-red-300{--tw-shadow:inset 0 0 0 1px var(--red-300,#f57f6c);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.gl-shadow-inner-1-red-500{--tw-shadow:inset 0 0 0 1px var(--red-500,#dd2b0e);--tw-shadow-colored:inset 0 0 0 1px var(--tw-shadow-color)}.gl-shadow-inner-1-red-500,.gl-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-shadow-md{--tw-shadow:0 2px 8px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 2px 8px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color)}.gl-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;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-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}.focus\:\!gl-shadow-inner-2-blue-400:focus{--tw-shadow:inset 0 0 0 2px var(--blue-400,#428fdc)!important;--tw-shadow-colored:inset 0 0 0 2px var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!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}}@media (min-width:768px){.md\:gl-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&\>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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","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/ui",
|
|
3
|
-
"version": "91.
|
|
3
|
+
"version": "91.15.0",
|
|
4
4
|
"description": "GitLab UI Components",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
"@babel/preset-env": "^7.25.4",
|
|
112
112
|
"@babel/preset-react": "^7.24.7",
|
|
113
113
|
"@cypress/grep": "^4.0.1",
|
|
114
|
-
"@gitlab/eslint-plugin": "20.1
|
|
114
|
+
"@gitlab/eslint-plugin": "20.2.1",
|
|
115
115
|
"@gitlab/fonts": "^1.3.0",
|
|
116
116
|
"@gitlab/stylelint-config": "6.2.1",
|
|
117
117
|
"@gitlab/svgs": "3.114.0",
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
"babel-loader": "^8.0.5",
|
|
149
149
|
"bootstrap": "4.6.2",
|
|
150
150
|
"cobertura-merge": "^1.0.4",
|
|
151
|
-
"cypress": "13.14.
|
|
151
|
+
"cypress": "13.14.2",
|
|
152
152
|
"cypress-axe": "^1.4.0",
|
|
153
153
|
"cypress-real-events": "^1.11.0",
|
|
154
154
|
"dompurify": "^3.1.2",
|
|
@@ -172,8 +172,8 @@
|
|
|
172
172
|
"module-alias": "^2.2.2",
|
|
173
173
|
"npm-run-all": "^4.1.5",
|
|
174
174
|
"pikaday": "^1.8.0",
|
|
175
|
-
"playwright": "^1.
|
|
176
|
-
"playwright-core": "^1.
|
|
175
|
+
"playwright": "^1.47.0",
|
|
176
|
+
"playwright-core": "^1.47.0",
|
|
177
177
|
"plop": "^2.5.4",
|
|
178
178
|
"postcss": "8.4.28",
|
|
179
179
|
"postcss-loader": "^7.0.2",
|
|
@@ -23,10 +23,10 @@ count separate from the input, use `GlFormCharacterCount`.
|
|
|
23
23
|
},
|
|
24
24
|
methods: {
|
|
25
25
|
remainingCountText(count) {
|
|
26
|
-
return n__('%d character remaining', '%d characters remaining', count)
|
|
26
|
+
return n__('%d character remaining.', '%d characters remaining.', count)
|
|
27
27
|
},
|
|
28
28
|
overLimitText(count) {
|
|
29
|
-
return n__('%d character over limit', '%d characters over limit', count);
|
|
29
|
+
return n__('%d character over limit.', '%d characters over limit.', count);
|
|
30
30
|
},
|
|
31
31
|
},
|
|
32
32
|
}
|
|
@@ -73,12 +73,12 @@ export default {
|
|
|
73
73
|
<div>
|
|
74
74
|
<small :class="['form-text', countTextClass]" aria-hidden="true">
|
|
75
75
|
<!--
|
|
76
|
-
@slot Internationalized over limit text. Example: `<template #over-limit-text="{ count }">{{ n__('%d character over limit', '%d characters over limit', count) }}</template>`
|
|
76
|
+
@slot Internationalized over limit text. Example: `<template #over-limit-text="{ count }">{{ n__('%d character over limit.', '%d characters over limit.', count) }}</template>`
|
|
77
77
|
@binding {number} count
|
|
78
78
|
-->
|
|
79
79
|
<slot v-if="isOverLimit" name="over-limit-text" :count="Math.abs(remainingCount)"></slot>
|
|
80
80
|
<!--
|
|
81
|
-
@slot Internationalized character count text. Example: `<template #remaining-count-text="{ count }">{{ n__('%d character remaining', '%d characters remaining', count) }}</template>`
|
|
81
|
+
@slot Internationalized character count text. Example: `<template #remaining-count-text="{ count }">{{ n__('%d character remaining.', '%d characters remaining.', count) }}</template>`
|
|
82
82
|
@binding {number} count
|
|
83
83
|
-->
|
|
84
84
|
|
|
@@ -31,12 +31,12 @@ export default {
|
|
|
31
31
|
minInvalidFeedback: {
|
|
32
32
|
type: String,
|
|
33
33
|
required: false,
|
|
34
|
-
default: 'Must be after minimum date',
|
|
34
|
+
default: 'Must be after minimum date.',
|
|
35
35
|
},
|
|
36
36
|
maxInvalidFeedback: {
|
|
37
37
|
type: String,
|
|
38
38
|
required: false,
|
|
39
|
-
default: 'Must be before maximum date',
|
|
39
|
+
default: 'Must be before maximum date.',
|
|
40
40
|
},
|
|
41
41
|
value: {
|
|
42
42
|
type: String,
|
|
@@ -116,7 +116,7 @@ export default {
|
|
|
116
116
|
>
|
|
117
117
|
<template #over-limit-text="{ count }">
|
|
118
118
|
<!--
|
|
119
|
-
@slot Internationalized over character count text. Example: `<template #character-count-over-limit-text="{ count }">{{ n__('%d character over limit', '%d characters over limit', count) }}</template>`
|
|
119
|
+
@slot Internationalized over character count text. Example: `<template #character-count-over-limit-text="{ count }">{{ n__('%d character over limit.', '%d characters over limit.', count) }}</template>`
|
|
120
120
|
@binding {number} count
|
|
121
121
|
-->
|
|
122
122
|
<slot name="character-count-over-limit-text" :count="count"></slot>
|
|
@@ -124,7 +124,7 @@ export default {
|
|
|
124
124
|
|
|
125
125
|
<template #remaining-count-text="{ count }">
|
|
126
126
|
<!--
|
|
127
|
-
@slot Internationalized character count text. Example: `<template #remaining-character-count-text="{ count }">{{ n__('%d character remaining', '%d characters remaining', count) }}</template>`
|
|
127
|
+
@slot Internationalized character count text. Example: `<template #remaining-character-count-text="{ count }">{{ n__('%d character remaining.', '%d characters remaining.', count) }}</template>`
|
|
128
128
|
@binding {number} count
|
|
129
129
|
-->
|
|
130
130
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import debounce from 'lodash/debounce';
|
|
3
3
|
import { translate } from '../../../../../../../utils/i18n';
|
|
4
4
|
import GlCard from '../../../../../../base/card/card.vue';
|
|
5
|
-
import { categoriesValidator, contextItemsValidator } from '../utils';
|
|
6
5
|
import GlDuoChatContextItemSelections from '../duo_chat_context_item_selections/duo_chat_context_item_selections.vue';
|
|
6
|
+
import { categoriesValidator, contextItemsValidator, wrapIndex } from '../utils';
|
|
7
7
|
import GlDuoChatContextItemMenuCategoryItems from './duo_chat_context_item_menu_category_items.vue';
|
|
8
8
|
import GlDuoChatContextItemMenuSearchItems from './duo_chat_context_item_menu_search_items.vue';
|
|
9
9
|
|
|
@@ -67,15 +67,18 @@ export default {
|
|
|
67
67
|
},
|
|
68
68
|
data() {
|
|
69
69
|
return {
|
|
70
|
-
activeIndex: 0,
|
|
71
|
-
searchQuery: '',
|
|
72
70
|
selectedCategory: null,
|
|
71
|
+
searchQuery: '',
|
|
72
|
+
activeIndex: 0,
|
|
73
73
|
};
|
|
74
74
|
},
|
|
75
75
|
computed: {
|
|
76
76
|
showCategorySelection() {
|
|
77
77
|
return this.open && !this.selectedCategory;
|
|
78
78
|
},
|
|
79
|
+
allResultsAreDisabled() {
|
|
80
|
+
return this.results.every((result) => !result.isEnabled);
|
|
81
|
+
},
|
|
79
82
|
},
|
|
80
83
|
watch: {
|
|
81
84
|
open(isOpen) {
|
|
@@ -86,13 +89,22 @@ export default {
|
|
|
86
89
|
searchQuery(query) {
|
|
87
90
|
this.debouncedSearch(query);
|
|
88
91
|
},
|
|
92
|
+
results(newResults) {
|
|
93
|
+
const firstEnabledIndex = newResults.findIndex((result) => result.isEnabled);
|
|
94
|
+
this.activeIndex = firstEnabledIndex >= 0 ? firstEnabledIndex : 0;
|
|
95
|
+
},
|
|
89
96
|
},
|
|
90
97
|
methods: {
|
|
91
98
|
selectCategory(category) {
|
|
92
|
-
this.activeIndex = 0;
|
|
93
99
|
this.searchQuery = '';
|
|
94
100
|
this.selectedCategory = category;
|
|
95
101
|
|
|
102
|
+
this.$emit('search', {
|
|
103
|
+
category: category.value,
|
|
104
|
+
query: '',
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
debouncedSearch: debounce(function search(query) {
|
|
96
108
|
/**
|
|
97
109
|
* Emitted when a search should be performed.
|
|
98
110
|
* @property {Object} filter
|
|
@@ -100,10 +112,10 @@ export default {
|
|
|
100
112
|
* @property {string} filter.query - The search query
|
|
101
113
|
*/
|
|
102
114
|
this.$emit('search', {
|
|
103
|
-
category:
|
|
104
|
-
query
|
|
115
|
+
category: this.selectedCategory.value,
|
|
116
|
+
query,
|
|
105
117
|
});
|
|
106
|
-
},
|
|
118
|
+
}, SEARCH_DEBOUNCE_MS),
|
|
107
119
|
selectItem(item) {
|
|
108
120
|
if (!item.isEnabled) {
|
|
109
121
|
return;
|
|
@@ -131,16 +143,76 @@ export default {
|
|
|
131
143
|
*/
|
|
132
144
|
this.$emit('remove', item);
|
|
133
145
|
},
|
|
134
|
-
debouncedSearch: debounce(function search(query) {
|
|
135
|
-
this.$emit('search', {
|
|
136
|
-
category: this.selectedCategory.value,
|
|
137
|
-
query,
|
|
138
|
-
});
|
|
139
|
-
}, SEARCH_DEBOUNCE_MS),
|
|
140
146
|
resetSelection() {
|
|
141
147
|
this.selectedCategory = null;
|
|
148
|
+
this.searchQuery = '';
|
|
142
149
|
this.activeIndex = 0;
|
|
143
150
|
},
|
|
151
|
+
async scrollActiveItemIntoView() {
|
|
152
|
+
await this.$nextTick();
|
|
153
|
+
|
|
154
|
+
const activeItem = document.getElementById(`dropdown-item-${this.activeIndex}`);
|
|
155
|
+
if (activeItem) {
|
|
156
|
+
activeItem.scrollIntoView({ block: 'nearest', inline: 'start' });
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
handleKeyUp(e) {
|
|
160
|
+
switch (e.key) {
|
|
161
|
+
case 'ArrowDown':
|
|
162
|
+
case 'ArrowUp':
|
|
163
|
+
e.preventDefault();
|
|
164
|
+
this.moveActiveIndex(e.key === 'ArrowDown' ? 1 : -1);
|
|
165
|
+
this.scrollActiveItemIntoView();
|
|
166
|
+
break;
|
|
167
|
+
case 'Enter':
|
|
168
|
+
e.preventDefault();
|
|
169
|
+
if (this.showCategorySelection) {
|
|
170
|
+
this.selectCategory(this.categories[this.activeIndex]);
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (!this.results.length) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
this.selectItem(this.results[this.activeIndex]);
|
|
177
|
+
break;
|
|
178
|
+
case 'Escape':
|
|
179
|
+
e.preventDefault();
|
|
180
|
+
if (this.showCategorySelection) {
|
|
181
|
+
this.$emit('close');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
this.selectedCategory = null;
|
|
186
|
+
break;
|
|
187
|
+
default:
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
moveActiveIndex(step) {
|
|
192
|
+
if (this.showCategorySelection) {
|
|
193
|
+
// Categories cannot be disabled, so just loop to the next/prev one
|
|
194
|
+
this.activeIndex = wrapIndex(this.activeIndex, step, this.categories.length);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Return early if there are no results or all results are disabled
|
|
199
|
+
if (!this.results.length || this.allResultsAreDisabled) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// contextItems CAN be disabled, so loop to next/prev but ensure we don't land on a disabled one
|
|
204
|
+
let newIndex = this.activeIndex;
|
|
205
|
+
do {
|
|
206
|
+
newIndex = wrapIndex(newIndex, step, this.results.length);
|
|
207
|
+
|
|
208
|
+
if (newIndex === this.activeIndex) {
|
|
209
|
+
// If we've looped through all items and found no enabled ones, keep the current index
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
} while (!this.results[newIndex].isEnabled);
|
|
213
|
+
|
|
214
|
+
this.activeIndex = newIndex;
|
|
215
|
+
},
|
|
144
216
|
},
|
|
145
217
|
i18n: {
|
|
146
218
|
selectedContextItemsTitle: translate(
|
|
@@ -184,6 +256,7 @@ export default {
|
|
|
184
256
|
:error="error"
|
|
185
257
|
:results="results"
|
|
186
258
|
@select="selectItem"
|
|
259
|
+
@keyup="handleKeyUp"
|
|
187
260
|
@active-index-change="activeIndex = $event"
|
|
188
261
|
/>
|
|
189
262
|
</gl-card>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover.vue';
|
|
3
|
+
import GlIcon from '../../../../../../base/icon/icon.vue';
|
|
4
|
+
import {
|
|
5
|
+
categoryValidator,
|
|
6
|
+
contextItemValidator,
|
|
7
|
+
formatIssueId,
|
|
8
|
+
formatMergeRequestId,
|
|
9
|
+
} from '../utils';
|
|
10
|
+
import {
|
|
11
|
+
CONTEXT_ITEM_TYPE_ISSUE,
|
|
12
|
+
CONTEXT_ITEM_TYPE_MERGE_REQUEST,
|
|
13
|
+
CONTEXT_ITEM_TYPE_PROJECT_FILE,
|
|
14
|
+
} from '../constants';
|
|
15
|
+
|
|
16
|
+
export default {
|
|
17
|
+
name: 'GlDuoChatContextItemMenuSearchItem',
|
|
18
|
+
components: { GlIcon, GlDuoChatContextItemPopover },
|
|
19
|
+
props: {
|
|
20
|
+
category: {
|
|
21
|
+
type: Object,
|
|
22
|
+
required: true,
|
|
23
|
+
validator: categoryValidator,
|
|
24
|
+
},
|
|
25
|
+
contextItem: {
|
|
26
|
+
type: Object,
|
|
27
|
+
required: true,
|
|
28
|
+
validator: contextItemValidator,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
computed: {
|
|
32
|
+
title() {
|
|
33
|
+
return this.contextItem.metadata?.name || '';
|
|
34
|
+
},
|
|
35
|
+
secondaryText() {
|
|
36
|
+
switch (this.category.value) {
|
|
37
|
+
case CONTEXT_ITEM_TYPE_PROJECT_FILE:
|
|
38
|
+
return this.contextItem.metadata.info.relFilePath;
|
|
39
|
+
case CONTEXT_ITEM_TYPE_ISSUE:
|
|
40
|
+
return formatIssueId(this.contextItem.metadata.info.iid);
|
|
41
|
+
case CONTEXT_ITEM_TYPE_MERGE_REQUEST:
|
|
42
|
+
return formatMergeRequestId(this.contextItem.metadata.info.iid);
|
|
43
|
+
default:
|
|
44
|
+
return '';
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
</script>
|
|
50
|
+
<template>
|
|
51
|
+
<div class="gl-flex gl-flex-col">
|
|
52
|
+
<div class="gl-flex gl-items-center">
|
|
53
|
+
<gl-icon :name="category.icon" class="gl-mr-2 gl-shrink-0" data-testid="category-icon" />
|
|
54
|
+
<span>{{ title }}</span>
|
|
55
|
+
<gl-icon
|
|
56
|
+
:id="`info-icon-${contextItem.id}`"
|
|
57
|
+
name="information-o"
|
|
58
|
+
class="gl-ml-2 gl-shrink-0 gl-cursor-pointer gl-text-secondary"
|
|
59
|
+
:size="12"
|
|
60
|
+
/>
|
|
61
|
+
<gl-duo-chat-context-item-popover
|
|
62
|
+
:context-item="contextItem"
|
|
63
|
+
:target="`info-icon-${contextItem.id}`"
|
|
64
|
+
placement="left"
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="gl-mt-1 gl-shrink-0 gl-whitespace-nowrap gl-text-secondary">
|
|
68
|
+
{{ secondaryText }}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</template>
|
|
@@ -5,14 +5,16 @@ import GlAlert from '../../../../../../base/alert/alert.vue';
|
|
|
5
5
|
import { sprintf, translate } from '../../../../../../../utils/i18n';
|
|
6
6
|
import { categoryValidator, contextItemsValidator } from '../utils';
|
|
7
7
|
import GlDuoChatContextItemMenuSearchItemsLoading from './duo_chat_context_item_menu_search_items_loading.vue';
|
|
8
|
+
import GlDuoChatContextItemMenuSearchItem from './duo_chat_context_item_menu_search_item.vue';
|
|
8
9
|
|
|
9
10
|
export default {
|
|
10
11
|
name: 'GlDuoChatContextItemMenuSearchItems',
|
|
11
12
|
components: {
|
|
12
13
|
GlAlert,
|
|
13
|
-
GlFormInput,
|
|
14
14
|
GlDropdownItem,
|
|
15
|
+
GlDuoChatContextItemMenuSearchItem,
|
|
15
16
|
GlDuoChatContextItemMenuSearchItemsLoading,
|
|
17
|
+
GlFormInput,
|
|
16
18
|
},
|
|
17
19
|
model: {
|
|
18
20
|
prop: 'searchQuery',
|
|
@@ -77,15 +79,21 @@ export default {
|
|
|
77
79
|
},
|
|
78
80
|
},
|
|
79
81
|
methods: {
|
|
80
|
-
selectItem(
|
|
81
|
-
this.$emit('select',
|
|
82
|
+
selectItem(contextItem) {
|
|
83
|
+
this.$emit('select', contextItem);
|
|
82
84
|
this.userInitiatedSearch = false;
|
|
83
85
|
},
|
|
86
|
+
handleKeyUp(e) {
|
|
87
|
+
this.$emit('keyup', e);
|
|
88
|
+
},
|
|
84
89
|
setActiveIndex(index) {
|
|
85
90
|
if (this.results[index]?.isEnabled) {
|
|
86
91
|
this.$emit('active-index-change', index);
|
|
87
92
|
}
|
|
88
93
|
},
|
|
94
|
+
isActiveItem(contextItem, index) {
|
|
95
|
+
return index === this.activeIndex && contextItem.isEnabled;
|
|
96
|
+
},
|
|
89
97
|
},
|
|
90
98
|
i18n: {
|
|
91
99
|
emptyStateMessage: translate('GlDuoChatContextItemMenu.emptyStateMessage', 'No results found'),
|
|
@@ -114,20 +122,25 @@ export default {
|
|
|
114
122
|
</div>
|
|
115
123
|
<ul v-else class="gl-mb-1 gl-list-none gl-flex-row gl-pl-0">
|
|
116
124
|
<gl-dropdown-item
|
|
117
|
-
v-for="(
|
|
125
|
+
v-for="(contextItem, index) in results"
|
|
118
126
|
:id="`dropdown-item-${index}`"
|
|
119
|
-
:key="
|
|
120
|
-
:class="
|
|
121
|
-
|
|
127
|
+
:key="contextItem.id"
|
|
128
|
+
:class="{
|
|
129
|
+
'active-command': isActiveItem(contextItem, index),
|
|
130
|
+
'gl-cursor-not-allowed [&>button]:focus-within:!gl-shadow-none': !contextItem.isEnabled,
|
|
131
|
+
}"
|
|
132
|
+
:tabindex="!contextItem.isEnabled ? -1 : undefined"
|
|
122
133
|
class="duo-chat-context-search-result-item"
|
|
123
134
|
data-testid="search-result-item"
|
|
124
|
-
@click="selectItem(
|
|
135
|
+
@click="selectItem(contextItem)"
|
|
125
136
|
>
|
|
126
137
|
<div @mouseenter="setActiveIndex(index)">
|
|
127
|
-
<
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
<gl-duo-chat-context-item-menu-search-item
|
|
139
|
+
:context-item="contextItem"
|
|
140
|
+
:category="category"
|
|
141
|
+
:class="{ 'gl-text-secondary': !contextItem.isEnabled }"
|
|
142
|
+
data-testid="search-result-item-details"
|
|
143
|
+
/>
|
|
131
144
|
</div>
|
|
132
145
|
</gl-dropdown-item>
|
|
133
146
|
</ul>
|
|
@@ -139,6 +152,7 @@ export default {
|
|
|
139
152
|
autofocus
|
|
140
153
|
data-testid="context-menu-search-input"
|
|
141
154
|
@input="$emit('update:searchQuery', $event)"
|
|
155
|
+
@keyup="handleKeyUp"
|
|
142
156
|
/>
|
|
143
157
|
</div>
|
|
144
158
|
</template>
|
|
@@ -6,11 +6,7 @@ import {
|
|
|
6
6
|
CONTEXT_ITEM_TYPE_MERGE_REQUEST,
|
|
7
7
|
CONTEXT_ITEM_TYPE_PROJECT_FILE,
|
|
8
8
|
} from '../constants';
|
|
9
|
-
|
|
10
|
-
const ID_PREFIXES = {
|
|
11
|
-
issue: '#',
|
|
12
|
-
merge_request: '!',
|
|
13
|
-
};
|
|
9
|
+
import { formatIssueId, formatMergeRequestId } from '../utils';
|
|
14
10
|
|
|
15
11
|
export default {
|
|
16
12
|
name: 'DuoChatContextItemPopover',
|
|
@@ -19,9 +15,9 @@ export default {
|
|
|
19
15
|
},
|
|
20
16
|
props: {
|
|
21
17
|
/**
|
|
22
|
-
* The context
|
|
18
|
+
* The context contextItem to display in the popover.
|
|
23
19
|
*/
|
|
24
|
-
|
|
20
|
+
contextItem: {
|
|
25
21
|
type: Object,
|
|
26
22
|
required: true,
|
|
27
23
|
},
|
|
@@ -43,28 +39,36 @@ export default {
|
|
|
43
39
|
},
|
|
44
40
|
computed: {
|
|
45
41
|
itemInfo() {
|
|
46
|
-
return this.
|
|
42
|
+
return this.contextItem.metadata?.info || {};
|
|
47
43
|
},
|
|
48
44
|
id() {
|
|
49
45
|
const isIssuable =
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
46
|
+
this.contextItem.type === CONTEXT_ITEM_TYPE_ISSUE ||
|
|
47
|
+
this.contextItem.type === CONTEXT_ITEM_TYPE_MERGE_REQUEST;
|
|
52
48
|
return isIssuable ? this.itemInfo.iid || '' : null;
|
|
53
49
|
},
|
|
54
|
-
|
|
55
|
-
|
|
50
|
+
formattedId() {
|
|
51
|
+
switch (this.contextItem.type) {
|
|
52
|
+
case CONTEXT_ITEM_TYPE_ISSUE:
|
|
53
|
+
return formatIssueId(this.id);
|
|
54
|
+
case CONTEXT_ITEM_TYPE_MERGE_REQUEST:
|
|
55
|
+
return formatMergeRequestId(this.id);
|
|
56
|
+
default:
|
|
57
|
+
return '';
|
|
58
|
+
}
|
|
56
59
|
},
|
|
57
60
|
filePath() {
|
|
58
|
-
return this.
|
|
61
|
+
return this.contextItem.type === CONTEXT_ITEM_TYPE_PROJECT_FILE
|
|
59
62
|
? this.itemInfo.relFilePath || ''
|
|
60
63
|
: null;
|
|
61
64
|
},
|
|
62
65
|
isEnabled() {
|
|
63
|
-
return this.
|
|
66
|
+
return this.contextItem.isEnabled !== false;
|
|
64
67
|
},
|
|
65
68
|
disabledMessage() {
|
|
66
|
-
return Array.isArray(this.
|
|
67
|
-
|
|
69
|
+
return Array.isArray(this.contextItem.disabledReasons) &&
|
|
70
|
+
this.contextItem.disabledReasons.length > 0
|
|
71
|
+
? this.contextItem.disabledReasons.join(', ')
|
|
68
72
|
: translate('DuoChatContextItemPopover.DisabledReason', 'This item is disabled');
|
|
69
73
|
},
|
|
70
74
|
},
|
|
@@ -78,12 +82,12 @@ export default {
|
|
|
78
82
|
:target="target"
|
|
79
83
|
triggers="hover focus"
|
|
80
84
|
:placement="placement"
|
|
81
|
-
:title="
|
|
85
|
+
:title="contextItem.metadata.name"
|
|
82
86
|
custom-class="gl-duo-chat-item-popover"
|
|
83
87
|
>
|
|
84
88
|
<template #title>
|
|
85
89
|
<span class="gl-text-sm gl-text-gray-500" data-testid="chat-context-popover-title">{{
|
|
86
|
-
|
|
90
|
+
contextItem.metadata.name
|
|
87
91
|
}}</span>
|
|
88
92
|
</template>
|
|
89
93
|
<div class="gl-p-3">
|
|
@@ -101,13 +105,13 @@ export default {
|
|
|
101
105
|
</div>
|
|
102
106
|
<div v-if="id !== null" class="gl-mb-2">
|
|
103
107
|
<strong class="gl-mr-1">{{ translate('DuoChatContextItemPopover.IdLabel', 'ID:') }}</strong>
|
|
104
|
-
<span>{{
|
|
108
|
+
<span>{{ formattedId }}</span>
|
|
105
109
|
</div>
|
|
106
110
|
<div class="gl-mb-2">
|
|
107
111
|
<strong class="gl-mr-1">{{
|
|
108
112
|
translate('DuoChatContextItemPopover.TypeLabel', 'Type:')
|
|
109
113
|
}}</strong>
|
|
110
|
-
<span>{{
|
|
114
|
+
<span>{{ contextItem.type }}</span>
|
|
111
115
|
</div>
|
|
112
116
|
<div v-if="!isEnabled" class="gl-text-red-500" data-testid="chat-context-popover-disabled">
|
|
113
117
|
<strong class="gl-mr-1">{{
|
|
@@ -72,12 +72,12 @@ export default {
|
|
|
72
72
|
toggleCollapse() {
|
|
73
73
|
this.isCollapsed = !this.isCollapsed;
|
|
74
74
|
},
|
|
75
|
-
onRemoveItem(
|
|
75
|
+
onRemoveItem(contextItem) {
|
|
76
76
|
/**
|
|
77
|
-
* Emitted when a context
|
|
78
|
-
* @property {Object} item - The context
|
|
77
|
+
* Emitted when a context contextItem should be removed.
|
|
78
|
+
* @property {Object} item - The context contextItem to be removed
|
|
79
79
|
*/
|
|
80
|
-
this.$emit('remove',
|
|
80
|
+
this.$emit('remove', contextItem);
|
|
81
81
|
},
|
|
82
82
|
},
|
|
83
83
|
};
|
|
@@ -99,20 +99,20 @@ export default {
|
|
|
99
99
|
data-testid="chat-context-tokens-wrapper"
|
|
100
100
|
>
|
|
101
101
|
<gl-token
|
|
102
|
-
v-for="
|
|
103
|
-
:key="
|
|
102
|
+
v-for="contextItem in selections"
|
|
103
|
+
:key="contextItem.id"
|
|
104
104
|
:view-only="!removable"
|
|
105
105
|
variant="default"
|
|
106
106
|
class="gl-mb-2 gl-mr-2"
|
|
107
|
-
@close="onRemoveItem(
|
|
107
|
+
@close="onRemoveItem(contextItem)"
|
|
108
108
|
>
|
|
109
|
-
<div :id="`context-item-${
|
|
110
|
-
<gl-icon :name="getIconName(
|
|
111
|
-
{{
|
|
109
|
+
<div :id="`context-item-${contextItem.id}-${selectionsId}`" class="gl-flex gl-items-center">
|
|
110
|
+
<gl-icon :name="getIconName(contextItem.type)" :size="12" class="gl-mr-1" />
|
|
111
|
+
{{ contextItem.metadata.name }}
|
|
112
112
|
</div>
|
|
113
113
|
<gl-duo-chat-context-item-popover
|
|
114
|
-
:item="
|
|
115
|
-
:target="`context-item-${
|
|
114
|
+
:context-item="contextItem"
|
|
115
|
+
:target="`context-item-${contextItem.id}-${selectionsId}`"
|
|
116
116
|
placement="bottom"
|
|
117
117
|
/>
|
|
118
118
|
</gl-token>
|
package/src/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js
CHANGED
|
@@ -10,6 +10,10 @@ export const MOCK_CATEGORIES = [
|
|
|
10
10
|
{ label: 'Merge Requests', value: CONTEXT_ITEM_TYPE_MERGE_REQUEST, icon: 'merge-request' },
|
|
11
11
|
];
|
|
12
12
|
|
|
13
|
+
export function getMockCategory(categoryValue) {
|
|
14
|
+
return MOCK_CATEGORIES.find((cat) => cat.value === categoryValue);
|
|
15
|
+
}
|
|
16
|
+
|
|
13
17
|
export const MOCK_CONTEXT_ITEM_FILE = {
|
|
14
18
|
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
15
19
|
isEnabled: true,
|
|
@@ -27,3 +27,26 @@ export function contextItemValidator(item) {
|
|
|
27
27
|
export function contextItemsValidator(items) {
|
|
28
28
|
return Array.isArray(items) && items.every((item) => contextItemValidator(item));
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
export function formatIssueId(iid) {
|
|
32
|
+
if (!iid) return '';
|
|
33
|
+
|
|
34
|
+
return `#${iid}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function formatMergeRequestId(iid) {
|
|
38
|
+
if (!iid) return '';
|
|
39
|
+
|
|
40
|
+
return `!${iid}`;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Calculates a new index within a range. If the new index would fall out of bounds, wraps to the start/end of the range.
|
|
45
|
+
* @param {number} currentIndex - The starting index.
|
|
46
|
+
* @param {number} step - The number of steps to move (positive or negative).
|
|
47
|
+
* @param {number} totalLength - The total number of items in the range.
|
|
48
|
+
* @returns {number} The new index.
|
|
49
|
+
*/
|
|
50
|
+
export function wrapIndex(currentIndex, step, totalLength) {
|
|
51
|
+
return (currentIndex + step + totalLength) % totalLength;
|
|
52
|
+
}
|