@gitlab/ui 101.14.0 → 101.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 CHANGED
@@ -1,3 +1,10 @@
1
+ # [101.15.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v101.14.0...v101.15.0) (2024-11-07)
2
+
3
+
4
+ ### Features
5
+
6
+ * **DuoChat:** support project dependencies context item type ([e212121](https://gitlab.com/gitlab-org/gitlab-ui/commit/e2121217e000b14361fdf45087449b0299234845))
7
+
1
8
  # [101.14.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v101.13.0...v101.14.0) (2024-11-07)
2
9
 
3
10
 
@@ -2,10 +2,11 @@ const CONTEXT_ITEM_CATEGORY_ISSUE = 'issue';
2
2
  const CONTEXT_ITEM_CATEGORY_MERGE_REQUEST = 'merge_request';
3
3
  const CONTEXT_ITEM_CATEGORY_FILE = 'file';
4
4
  const CONTEXT_ITEM_CATEGORY_LOCAL_GIT = 'local_git';
5
+ const CONTEXT_ITEM_CATEGORY_DEPENDENCY = 'dependency';
5
6
  const CONTEXT_ITEM_LOCAL_GIT_COMMIT = 'commit';
6
7
  const CONTEXT_ITEM_LOCAL_GIT_DIFF = 'diff';
7
8
  const LANGUAGE_IDENTIFIER_PREFIX = 'language-';
8
9
  const LANGUAGE_IDENTIFIER_DIFF = 'language-diff';
9
10
  const LANGUAGE_IDENTIFIER_PLAINTEXT = 'language-plaintext';
10
11
 
11
- export { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PLAINTEXT, LANGUAGE_IDENTIFIER_PREFIX };
12
+ export { CONTEXT_ITEM_CATEGORY_DEPENDENCY, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PLAINTEXT, LANGUAGE_IDENTIFIER_PREFIX };
@@ -4,12 +4,14 @@ import GlModal from '../../../../../../base/modal/modal';
4
4
  import { SafeHtmlDirective } from '../../../../../../../directives/safe_html/safe_html';
5
5
  import GlSkeletonLoader from '../../../../../../base/skeleton_loader/skeleton_loader';
6
6
  import { translate } from '../../../../../../../utils/i18n';
7
- import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PREFIX, LANGUAGE_IDENTIFIER_PLAINTEXT } from '../constants';
7
+ import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PREFIX, LANGUAGE_IDENTIFIER_PLAINTEXT, CONTEXT_ITEM_CATEGORY_DEPENDENCY } from '../constants';
8
+ import GlAlert from '../../../../../../base/alert/alert';
8
9
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
9
10
 
10
11
  var script = {
11
12
  name: 'GlDuoChatContextItemDetailsModal',
12
13
  components: {
14
+ GlAlert,
13
15
  GlSkeletonLoader,
14
16
  GlModal
15
17
  },
@@ -34,6 +36,11 @@ var script = {
34
36
  validator: contextItemValidator
35
37
  }
36
38
  },
39
+ data() {
40
+ return {
41
+ contentErrorIsVisible: false
42
+ };
43
+ },
37
44
  computed: {
38
45
  isLoadingContent() {
39
46
  return this.contextItem.content === undefined;
@@ -52,16 +59,25 @@ var script = {
52
59
  title() {
53
60
  var _this$contextItem$met4, _this$contextItem$met5;
54
61
  return ((_this$contextItem$met4 = this.contextItem.metadata) === null || _this$contextItem$met4 === void 0 ? void 0 : _this$contextItem$met4.title) || ((_this$contextItem$met5 = this.contextItem.metadata) === null || _this$contextItem$met5 === void 0 ? void 0 : _this$contextItem$met5.relativePath) || translate('GlDuoChatContextItemDetailsModal.title', 'Preview');
62
+ },
63
+ isDependencies() {
64
+ return this.contextItem.category === CONTEXT_ITEM_CATEGORY_DEPENDENCY;
55
65
  }
56
66
  },
57
67
  watch: {
58
68
  contextItem: {
59
69
  async handler(newVal, oldVal) {
60
- const shouldFormat = (newVal === null || newVal === void 0 ? void 0 : newVal.content) !== (oldVal === null || oldVal === void 0 ? void 0 : oldVal.content) && (newVal === null || newVal === void 0 ? void 0 : newVal.content);
61
- if (shouldFormat) {
62
- await nextTick();
63
- await this.hydrateContentWithGFM();
70
+ // Dependency items contain structured data as content, not code/markdown.
71
+ // So skip running this content through GFM, we'll parse and render it here in the component.
72
+ if (newVal.category === CONTEXT_ITEM_CATEGORY_DEPENDENCY) {
73
+ return;
64
74
  }
75
+ const isUnchangedOrEmptyContent = !(newVal !== null && newVal !== void 0 && newVal.content) || (newVal === null || newVal === void 0 ? void 0 : newVal.content) === (oldVal === null || oldVal === void 0 ? void 0 : oldVal.content);
76
+ if (isUnchangedOrEmptyContent) {
77
+ return;
78
+ }
79
+ await nextTick();
80
+ await this.hydrateContentWithGFM();
65
81
  },
66
82
  immediate: true
67
83
  }
@@ -73,19 +89,31 @@ var script = {
73
89
  this.renderGFM(this.$refs.content);
74
90
  }
75
91
  },
92
+ parseDependencies() {
93
+ if (this.contextItem.category !== CONTEXT_ITEM_CATEGORY_DEPENDENCY) {
94
+ return null;
95
+ }
96
+ try {
97
+ return JSON.parse(this.contextItem.content);
98
+ } catch (error) {
99
+ this.contentErrorIsVisible = true;
100
+ return {};
101
+ }
102
+ },
76
103
  onModalVisibilityChange(isVisible) {
77
104
  if (!isVisible) {
78
105
  this.$emit('close');
79
106
  }
80
107
  }
81
- }
108
+ },
109
+ CONTENT_ERROR_MESSAGE: translate('GlDuoChatContextItemDetailsModal.contentErrorMessage', 'Item content could not be displayed.')
82
110
  };
83
111
 
84
112
  /* script */
85
113
  const __vue_script__ = script;
86
114
 
87
115
  /* template */
88
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-modal',{attrs:{"modal-id":"context-item-details-modal","title":_vm.title,"visible":true,"scrollable":true,"hide-footer":"","size":"lg"},on:{"change":_vm.onModalVisibilityChange}},[(_vm.isLoadingContent)?_c('gl-skeleton-loader'):_c('div',{ref:"content",attrs:{"data-testid":"context-item-content"}},[_c('pre',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.contextItem.content),expression:"contextItem.content"}],staticClass:"code js-syntax-highlight gl-p-3",class:_vm.languageIdentifierClass})])],1)};
116
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-modal',{attrs:{"modal-id":"context-item-details-modal","title":_vm.title,"visible":true,"scrollable":true,"hide-footer":"","size":"lg"},on:{"change":_vm.onModalVisibilityChange}},[(_vm.isLoadingContent)?_c('gl-skeleton-loader'):(_vm.contentErrorIsVisible)?_c('gl-alert',{attrs:{"variant":"danger","dismissible":false,"data-testid":"content-error-alert"}},[_vm._v("\n "+_vm._s(_vm.$options.CONTENT_ERROR_MESSAGE)+"\n ")]):(_vm.isDependencies)?_c('div',{attrs:{"data-testid":"context-item-content"}},[_c('p',[_vm._v("Project dependencies from "+_vm._s(_vm.contextItem.metadata.secondaryText))]),_vm._v(" "),_vm._l((_vm.parseDependencies()),function(matches,index){return _c('div',{key:index},_vm._l((matches),function(dependencies,language){return _c('div',{key:language},[_c('h3',{staticClass:"gl-heading-4 gl-mb-2"},[_vm._v(_vm._s(language))]),_vm._v(" "),_c('ul',{staticClass:"gl-pl-6"},_vm._l((dependencies),function(dependency){return _c('li',{key:dependency},[_vm._v("\n "+_vm._s(dependency)+"\n ")])}),0)])}),0)})],2):_c('div',{ref:"content",attrs:{"data-testid":"context-item-content"}},[_c('pre',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.contextItem.content),expression:"contextItem.content"}],staticClass:"code js-syntax-highlight gl-p-3",class:_vm.languageIdentifierClass})])],1)};
89
117
  var __vue_staticRenderFns__ = [];
90
118
 
91
119
  /* style */
@@ -3,7 +3,7 @@ import GlIcon from '../../../../../../base/icon/icon';
3
3
  import GlToken from '../../../../../../base/token/token';
4
4
  import GlTruncate from '../../../../../../utilities/truncate/truncate';
5
5
  import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover';
6
- import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE } from '../constants';
6
+ import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_DEPENDENCY } from '../constants';
7
7
  import GlDuoChatContextItemDetailsModal from '../duo_chat_context_item_details_modal/duo_chat_context_item_details_modal';
8
8
  import { contextItemsValidator, getContextItemIcon } from '../utils';
9
9
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
@@ -108,7 +108,7 @@ var script = {
108
108
  this.previewContextItemId = contextItem.id;
109
109
  },
110
110
  canOpen(contextItem) {
111
- return [CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE].includes(contextItem.category);
111
+ return [CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_DEPENDENCY].includes(contextItem.category);
112
112
  },
113
113
  onClosePreview() {
114
114
  this.previewContextItemId = null;
@@ -1,4 +1,4 @@
1
- import { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST } from './constants';
1
+ import { CONTEXT_ITEM_CATEGORY_DEPENDENCY, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST } from './constants';
2
2
 
3
3
  const MOCK_CATEGORIES = [{
4
4
  label: 'Files',
@@ -16,6 +16,10 @@ const MOCK_CATEGORIES = [{
16
16
  label: 'Merge Requests',
17
17
  value: CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
18
18
  icon: 'merge-request'
19
+ }, {
20
+ label: 'Dependencies',
21
+ value: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
22
+ icon: 'package'
19
23
  }];
20
24
  function getMockCategory(categoryValue) {
21
25
  return MOCK_CATEGORIES.find(cat => cat.value === categoryValue);
@@ -217,8 +221,75 @@ const mockGitItems = [MOCK_CONTEXT_ITEM_GIT_DIFF, {
217
221
  gitType: 'commit'
218
222
  }
219
223
  }];
224
+ const MOCK_CONTEXT_ITEM_DEPENDENCY = {
225
+ id: '823e4567-e89b-12d3-a456-426614174007',
226
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
227
+ content: JSON.stringify([{
228
+ javascript: ['@types/node@16.11.7', '@vue/compiler-sfc@3.2.37', 'typescript@4.5.5', 'vue@3.2.37']
229
+ }]),
230
+ metadata: {
231
+ enabled: true,
232
+ title: 'example/garden',
233
+ secondaryText: 'package.json',
234
+ icon: 'package',
235
+ subType: 'dependency',
236
+ subTypeLabel: 'Project dependencies',
237
+ project: 'example/garden'
238
+ }
239
+ };
240
+ const MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED = {
241
+ id: '923e4567-e89b-12d3-a456-426614174008',
242
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
243
+ content: JSON.stringify([{
244
+ javascript: ['@types/node@16.11.7', '@vue/compiler-sfc@3.2.37', 'typescript@4.5.5', 'vue@3.2.37'],
245
+ csharp: ['newtonsoft.json@13.0.1', 'microsoft.net.test.sdk@16.11.0']
246
+ }]),
247
+ metadata: {
248
+ enabled: false,
249
+ disabledReasons: ['Dependencies are not available for this project', 'Access restricted'],
250
+ title: 'example/vehicle',
251
+ secondaryText: 'package.json, vehicle.csproj',
252
+ icon: 'package',
253
+ subType: 'dependency',
254
+ subTypeLabel: 'Project dependencies',
255
+ project: 'example/vehicle'
256
+ }
257
+ };
258
+ const mockDependencies = [MOCK_CONTEXT_ITEM_DEPENDENCY, MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED, {
259
+ id: 'b23e4567-e89b-12d3-a456-426614174010',
260
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
261
+ content: JSON.stringify([{
262
+ python: ['django@3.2.9', 'djangorestframework@3.12.4', 'psycopg2@2.9.2', 'celery@5.2.1'],
263
+ csharp: ['newtonsoft.json@13.0.1', 'microsoft.net.test.sdk@16.11.0']
264
+ }]),
265
+ metadata: {
266
+ enabled: true,
267
+ title: 'example/backend',
268
+ secondaryText: 'requirements.txt, some.backend.csproj',
269
+ icon: 'package',
270
+ subType: 'dependency',
271
+ subTypeLabel: 'Project dependencies',
272
+ project: 'example/backend'
273
+ }
274
+ }, {
275
+ id: 'c23e4567-e89b-12d3-a456-426614174011',
276
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
277
+ content: JSON.stringify([{
278
+ javascript: ['jquery@3.5.1', 'backbone@1.4.0', 'underscore@1.13.1', 'moment@2.29.1']
279
+ }]),
280
+ metadata: {
281
+ enabled: false,
282
+ disabledReasons: ['Project is archived'],
283
+ title: 'example/legacy',
284
+ secondaryText: 'bower.json',
285
+ icon: 'package',
286
+ subType: 'dependency',
287
+ subTypeLabel: 'Project dependencies',
288
+ project: 'example/legacy'
289
+ }
290
+ }];
220
291
  const getMockContextItems = () => {
221
- const allItems = [...mockFiles, ...mockGitItems, ...mockIssues, ...mockMergeRequests];
292
+ const allItems = [...mockFiles, ...mockGitItems, ...mockIssues, ...mockMergeRequests, ...mockDependencies];
222
293
 
223
294
  // put disabled items in the back
224
295
  const disabledItems = allItems.filter(item => !item.metadata.enabled);
@@ -226,4 +297,4 @@ const getMockContextItems = () => {
226
297
  return [...enabledItems, ...disabledItems];
227
298
  };
228
299
 
229
- export { MOCK_CATEGORIES, MOCK_CONTEXT_FILE_CONTENT, MOCK_CONTEXT_FILE_DIFF_CONTENT, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_GIT_COMMIT, MOCK_CONTEXT_ITEM_GIT_DIFF, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
300
+ export { MOCK_CATEGORIES, MOCK_CONTEXT_FILE_CONTENT, MOCK_CONTEXT_FILE_DIFF_CONTENT, MOCK_CONTEXT_ITEM_DEPENDENCY, MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_GIT_COMMIT, MOCK_CONTEXT_ITEM_GIT_DIFF, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
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-heading-3{color:var(--gl-text-color-heading);font-size:clamp(1.125rem,.9027777778rem + .462962963vw,1.25rem);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0}.gl-sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.gl-pointer-events-none{pointer-events:none}.gl-pointer-events-auto{pointer-events:auto}.gl-invisible{visibility:hidden}.gl-collapse{visibility:collapse}.gl-static{position:static}.gl-fixed{position:fixed}.\!gl-absolute{position:absolute!important}.gl-absolute{position:absolute}.gl-relative{position:relative}.gl-sticky{position:sticky}.gl-bottom-0{bottom:0}.gl-bottom-2{bottom:.25rem}.gl-left-0{left:0}.gl-right-2{right:.25rem}.gl-top-0{top:0}.\!gl-z-9999{z-index:9999!important}.gl-z-200{z-index:200}.gl-z-9999{z-index:9999}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.gl-m-3{margin:.5rem}.gl-m-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-mb-4{margin-bottom:.75rem!important}.\!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-mt-6{margin-top:1.5rem}.\!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-4{height:.75rem}.gl-h-5{height:1rem}.gl-h-62{height:31rem}.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-3\/4{width:75%}.gl-w-30{width:15rem}.gl-w-4\/10{width:40%}.gl-w-5{width:1rem}.gl-w-full{width:100%}.gl-min-w-0{min-width:0}.gl-max-w-1\/2{max-width:50%}.gl-max-w-75{max-width:37.5rem}.gl-max-w-full{max-width:100%}.gl-flex-auto{flex:1 1 auto}.gl-flex-shrink-0,.gl-shrink-0{flex-shrink:0}.gl-flex-grow,.gl-grow{flex-grow:1}.gl-basis-0{flex-basis:0}.-gl-translate-y-full{--tw-translate-y:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!gl-cursor-not-allowed{cursor:not-allowed!important}.\!gl-cursor-text{cursor:text!important}.gl-cursor-default{cursor:default}.gl-cursor-not-allowed{cursor:not-allowed}.gl-cursor-pointer{cursor:pointer}.gl-cursor-text{cursor:text}.gl-list-none{list-style-type:none}.gl-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.gl-flex-row{flex-direction:row}.gl-flex-row-reverse{flex-direction:row-reverse}.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-divide-x-0>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(0px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(0px*var(--tw-divide-x-reverse))}.gl-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.gl-divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.gl-divide-default>:not([hidden])~:not([hidden]){border-color:var(--gl-border-color-default,var(--gl-color-neutral-100,#dcdcde))}.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-break-all{word-break:break-all}.\!gl-rounded-base{border-radius:.25rem!important}.\!gl-rounded-full{border-radius:50%!important}.\!gl-rounded-none{border-radius:0!important}.gl-rounded-base{border-radius:.25rem}.gl-rounded-full{border-radius:50%}.gl-rounded-lg{border-radius:.5rem}.gl-rounded-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,.gl-border-b-1{border-bottom-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-solid{border-style:solid}.gl-border-dashed{border-style:dashed}.gl-border-none{border-style:none}.gl-border-dropdown{border-color:var(--gl-dropdown-border-color,var(--gl-color-neutral-200,#bfbfc3))}.gl-border-gray-200{border-color:var(--gray-200,#bfbfc3)}.gl-border-gray-50{border-color:var(--gray-50,#ececef)}.gl-border-gray-500{border-color:var(--gray-500,#737278)}.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-transparent{border-color:var(--gl-border-color-transparent,var(--gl-color-alpha-0,#0000))}.gl-border-b-dropdown{border-bottom-color:var(--gl-dropdown-border-color,var(--gl-color-neutral-200,#bfbfc3))}.gl-border-b-section{border-bottom-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-t-dropdown{border-top-color:var(--gl-dropdown-border-color,var(--gl-color-neutral-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-blue-50{background-color:var(--blue-50,#e9f3fc)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color,var(--gl-background-color-overlap,#fff))}.gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)}.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-color-neutral-0,#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-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-4{padding-bottom:.75rem;padding-top:.75rem}.gl-py-5{padding-bottom:1rem;padding-top:1rem}.gl-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.\!gl-pl-9{padding-left:3rem!important}.\!gl-pr-7{padding-right:2rem!important}.\!gl-pr-9{padding-right:3rem!important}.\!gl-pt-0{padding-top:0!important}.gl-pb-2{padding-bottom:.25rem}.gl-pb-5{padding-bottom:1rem}.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-10{padding-right:3.5rem}.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-capitalize{text-transform:capitalize}.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-red-500{color:var(--red-500,#dd2b0e)!important}.\!gl-text-subtle{color:var(--gl-text-color-subtle,var(--gl-color-neutral-600,#626168))!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-600{color:var(--blue-600,#1068bf)}.gl-text-blue-700{color:var(--blue-700,#0b5cad)}.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-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))}.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-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-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-300,.gl-shadow-inner-1-red-500{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-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-md{--tw-shadow:0 0 1px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629),0 2px 8px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 1px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color),0 2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-outline-none{outline:2px solid #0000;outline-offset:2px}.gl-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:ease}.gl-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-flex{display:flex}.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}
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-heading-4{font-size:1rem}.gl-heading-3,.gl-heading-4{color:var(--gl-text-color-heading);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:1rem;margin-top:0}.gl-heading-3{font-size:clamp(1.125rem,.9027777778rem + .462962963vw,1.25rem)}.gl-sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.gl-pointer-events-none{pointer-events:none}.gl-pointer-events-auto{pointer-events:auto}.gl-invisible{visibility:hidden}.gl-collapse{visibility:collapse}.gl-static{position:static}.gl-fixed{position:fixed}.\!gl-absolute{position:absolute!important}.gl-absolute{position:absolute}.gl-relative{position:relative}.gl-sticky{position:sticky}.gl-bottom-0{bottom:0}.gl-bottom-2{bottom:.25rem}.gl-left-0{left:0}.gl-right-2{right:.25rem}.gl-top-0{top:0}.\!gl-z-9999{z-index:9999!important}.gl-z-200{z-index:200}.gl-z-9999{z-index:9999}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.gl-m-3{margin:.5rem}.gl-m-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-mb-4{margin-bottom:.75rem!important}.\!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-mt-6{margin-top:1.5rem}.\!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-4{height:.75rem}.gl-h-5{height:1rem}.gl-h-62{height:31rem}.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-3\/4{width:75%}.gl-w-30{width:15rem}.gl-w-4\/10{width:40%}.gl-w-5{width:1rem}.gl-w-full{width:100%}.gl-min-w-0{min-width:0}.gl-max-w-1\/2{max-width:50%}.gl-max-w-75{max-width:37.5rem}.gl-max-w-full{max-width:100%}.gl-flex-auto{flex:1 1 auto}.gl-flex-shrink-0,.gl-shrink-0{flex-shrink:0}.gl-flex-grow,.gl-grow{flex-grow:1}.gl-basis-0{flex-basis:0}.-gl-translate-y-full{--tw-translate-y:-100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!gl-cursor-not-allowed{cursor:not-allowed!important}.\!gl-cursor-text{cursor:text!important}.gl-cursor-default{cursor:default}.gl-cursor-not-allowed{cursor:not-allowed}.gl-cursor-pointer{cursor:pointer}.gl-cursor-text{cursor:text}.gl-list-none{list-style-type:none}.gl-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.gl-flex-row{flex-direction:row}.gl-flex-row-reverse{flex-direction:row-reverse}.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-divide-x-0>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(0px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(0px*var(--tw-divide-x-reverse))}.gl-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.gl-divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.gl-divide-default>:not([hidden])~:not([hidden]){border-color:var(--gl-border-color-default,var(--gl-color-neutral-100,#dcdcde))}.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-break-all{word-break:break-all}.\!gl-rounded-base{border-radius:.25rem!important}.\!gl-rounded-full{border-radius:50%!important}.\!gl-rounded-none{border-radius:0!important}.gl-rounded-base{border-radius:.25rem}.gl-rounded-full{border-radius:50%}.gl-rounded-lg{border-radius:.5rem}.gl-rounded-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,.gl-border-b-1{border-bottom-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-solid{border-style:solid}.gl-border-dashed{border-style:dashed}.gl-border-none{border-style:none}.gl-border-dropdown{border-color:var(--gl-dropdown-border-color,var(--gl-color-neutral-200,#bfbfc3))}.gl-border-gray-200{border-color:var(--gray-200,#bfbfc3)}.gl-border-gray-50{border-color:var(--gray-50,#ececef)}.gl-border-gray-500{border-color:var(--gray-500,#737278)}.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-transparent{border-color:var(--gl-border-color-transparent,var(--gl-color-alpha-0,#0000))}.gl-border-b-dropdown{border-bottom-color:var(--gl-dropdown-border-color,var(--gl-color-neutral-200,#bfbfc3))}.gl-border-b-section{border-bottom-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-t-dropdown{border-top-color:var(--gl-dropdown-border-color,var(--gl-color-neutral-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-blue-50{background-color:var(--blue-50,#e9f3fc)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color,var(--gl-background-color-overlap,#fff))}.gl-bg-gray-10{background-color:var(--gray-10,#fbfafd)}.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-color-neutral-0,#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-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-4{padding-bottom:.75rem;padding-top:.75rem}.gl-py-5{padding-bottom:1rem;padding-top:1rem}.gl-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.\!gl-pl-9{padding-left:3rem!important}.\!gl-pr-7{padding-right:2rem!important}.\!gl-pr-9{padding-right:3rem!important}.\!gl-pt-0{padding-top:0!important}.gl-pb-2{padding-bottom:.25rem}.gl-pb-5{padding-bottom:1rem}.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-10{padding-right:3.5rem}.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-capitalize{text-transform:capitalize}.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-red-500{color:var(--red-500,#dd2b0e)!important}.\!gl-text-subtle{color:var(--gl-text-color-subtle,var(--gl-color-neutral-600,#626168))!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-600{color:var(--blue-600,#1068bf)}.gl-text-blue-700{color:var(--blue-700,#0b5cad)}.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-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))}.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-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-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-300,.gl-shadow-inner-1-red-500{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-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-md{--tw-shadow:0 0 1px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629),0 2px 8px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 1px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color),0 2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.gl-outline-none{outline:2px solid #0000;outline-offset:2px}.gl-transition-all{transition-duration:.2s;transition-property:all;transition-timing-function:ease}.gl-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-flex{display:flex}.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 */
@@ -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": "101.14.0",
3
+ "version": "101.15.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -2,6 +2,7 @@ export const CONTEXT_ITEM_CATEGORY_ISSUE = 'issue';
2
2
  export const CONTEXT_ITEM_CATEGORY_MERGE_REQUEST = 'merge_request';
3
3
  export const CONTEXT_ITEM_CATEGORY_FILE = 'file';
4
4
  export const CONTEXT_ITEM_CATEGORY_LOCAL_GIT = 'local_git';
5
+ export const CONTEXT_ITEM_CATEGORY_DEPENDENCY = 'dependency';
5
6
 
6
7
  export const CONTEXT_ITEM_LOCAL_GIT_COMMIT = 'commit';
7
8
  export const CONTEXT_ITEM_LOCAL_GIT_DIFF = 'diff';
@@ -6,15 +6,18 @@ import { SafeHtmlDirective as SafeHtml } from '../../../../../../../directives/s
6
6
  import GlSkeletonLoader from '../../../../../../base/skeleton_loader/skeleton_loader.vue';
7
7
  import { translate } from '../../../../../../../utils/i18n';
8
8
  import {
9
+ CONTEXT_ITEM_CATEGORY_DEPENDENCY,
9
10
  CONTEXT_ITEM_CATEGORY_LOCAL_GIT,
10
11
  LANGUAGE_IDENTIFIER_DIFF,
11
12
  LANGUAGE_IDENTIFIER_PLAINTEXT,
12
13
  LANGUAGE_IDENTIFIER_PREFIX,
13
14
  } from '../constants';
15
+ import GlAlert from '../../../../../../base/alert/alert.vue';
14
16
 
15
17
  export default {
16
18
  name: 'GlDuoChatContextItemDetailsModal',
17
19
  components: {
20
+ GlAlert,
18
21
  GlSkeletonLoader,
19
22
  GlModal,
20
23
  },
@@ -39,6 +42,11 @@ export default {
39
42
  validator: contextItemValidator,
40
43
  },
41
44
  },
45
+ data() {
46
+ return {
47
+ contentErrorIsVisible: false,
48
+ };
49
+ },
42
50
  computed: {
43
51
  isLoadingContent() {
44
52
  return this.contextItem.content === undefined;
@@ -62,15 +70,26 @@ export default {
62
70
  translate('GlDuoChatContextItemDetailsModal.title', 'Preview')
63
71
  );
64
72
  },
73
+ isDependencies() {
74
+ return this.contextItem.category === CONTEXT_ITEM_CATEGORY_DEPENDENCY;
75
+ },
65
76
  },
66
77
  watch: {
67
78
  contextItem: {
68
79
  async handler(newVal, oldVal) {
69
- const shouldFormat = newVal?.content !== oldVal?.content && newVal?.content;
70
- if (shouldFormat) {
71
- await nextTick();
72
- await this.hydrateContentWithGFM();
80
+ // Dependency items contain structured data as content, not code/markdown.
81
+ // So skip running this content through GFM, we'll parse and render it here in the component.
82
+ if (newVal.category === CONTEXT_ITEM_CATEGORY_DEPENDENCY) {
83
+ return;
73
84
  }
85
+
86
+ const isUnchangedOrEmptyContent = !newVal?.content || newVal?.content === oldVal?.content;
87
+ if (isUnchangedOrEmptyContent) {
88
+ return;
89
+ }
90
+
91
+ await nextTick();
92
+ await this.hydrateContentWithGFM();
74
93
  },
75
94
  immediate: true,
76
95
  },
@@ -83,12 +102,28 @@ export default {
83
102
  this.renderGFM(this.$refs.content);
84
103
  }
85
104
  },
105
+ parseDependencies() {
106
+ if (this.contextItem.category !== CONTEXT_ITEM_CATEGORY_DEPENDENCY) {
107
+ return null;
108
+ }
109
+
110
+ try {
111
+ return JSON.parse(this.contextItem.content);
112
+ } catch (error) {
113
+ this.contentErrorIsVisible = true;
114
+ return {};
115
+ }
116
+ },
86
117
  onModalVisibilityChange(isVisible) {
87
118
  if (!isVisible) {
88
119
  this.$emit('close');
89
120
  }
90
121
  },
91
122
  },
123
+ CONTENT_ERROR_MESSAGE: translate(
124
+ 'GlDuoChatContextItemDetailsModal.contentErrorMessage',
125
+ 'Item content could not be displayed.'
126
+ ),
92
127
  };
93
128
  </script>
94
129
 
@@ -103,6 +138,27 @@ export default {
103
138
  @change="onModalVisibilityChange"
104
139
  >
105
140
  <gl-skeleton-loader v-if="isLoadingContent" />
141
+ <gl-alert
142
+ v-else-if="contentErrorIsVisible"
143
+ variant="danger"
144
+ :dismissible="false"
145
+ data-testid="content-error-alert"
146
+ >
147
+ {{ $options.CONTENT_ERROR_MESSAGE }}
148
+ </gl-alert>
149
+ <div v-else-if="isDependencies" data-testid="context-item-content">
150
+ <p>Project dependencies from {{ contextItem.metadata.secondaryText }}</p>
151
+ <div v-for="(matches, index) in parseDependencies()" :key="index">
152
+ <div v-for="(dependencies, language) in matches" :key="language">
153
+ <h3 class="gl-heading-4 gl-mb-2">{{ language }}</h3>
154
+ <ul class="gl-pl-6">
155
+ <li v-for="dependency in dependencies" :key="dependency" class="">
156
+ {{ dependency }}
157
+ </li>
158
+ </ul>
159
+ </div>
160
+ </div>
161
+ </div>
106
162
  <div v-else ref="content" data-testid="context-item-content">
107
163
  <pre
108
164
  v-safe-html="contextItem.content"
@@ -4,7 +4,11 @@ import GlIcon from '../../../../../../base/icon/icon.vue';
4
4
  import GlToken from '../../../../../../base/token/token.vue';
5
5
  import GlTruncate from '../../../../../../utilities/truncate/truncate.vue';
6
6
  import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover.vue';
7
- import { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT } from '../constants';
7
+ import {
8
+ CONTEXT_ITEM_CATEGORY_DEPENDENCY,
9
+ CONTEXT_ITEM_CATEGORY_FILE,
10
+ CONTEXT_ITEM_CATEGORY_LOCAL_GIT,
11
+ } from '../constants';
8
12
  import GlDuoChatContextItemDetailsModal from '../duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.vue';
9
13
  import { contextItemsValidator, getContextItemIcon } from '../utils';
10
14
 
@@ -110,9 +114,11 @@ export default {
110
114
  this.previewContextItemId = contextItem.id;
111
115
  },
112
116
  canOpen(contextItem) {
113
- return [CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE].includes(
114
- contextItem.category
115
- );
117
+ return [
118
+ CONTEXT_ITEM_CATEGORY_LOCAL_GIT,
119
+ CONTEXT_ITEM_CATEGORY_FILE,
120
+ CONTEXT_ITEM_CATEGORY_DEPENDENCY,
121
+ ].includes(contextItem.category);
116
122
  },
117
123
  onClosePreview() {
118
124
  this.previewContextItemId = null;
@@ -1,8 +1,9 @@
1
1
  import {
2
- CONTEXT_ITEM_CATEGORY_ISSUE,
3
- CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
2
+ CONTEXT_ITEM_CATEGORY_DEPENDENCY,
4
3
  CONTEXT_ITEM_CATEGORY_FILE,
4
+ CONTEXT_ITEM_CATEGORY_ISSUE,
5
5
  CONTEXT_ITEM_CATEGORY_LOCAL_GIT,
6
+ CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
6
7
  } from './constants';
7
8
 
8
9
  export const MOCK_CATEGORIES = [
@@ -10,6 +11,7 @@ export const MOCK_CATEGORIES = [
10
11
  { label: 'Local Git', value: CONTEXT_ITEM_CATEGORY_LOCAL_GIT, icon: 'git' },
11
12
  { label: 'Issues', value: CONTEXT_ITEM_CATEGORY_ISSUE, icon: 'issues' },
12
13
  { label: 'Merge Requests', value: CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, icon: 'merge-request' },
14
+ { label: 'Dependencies', value: CONTEXT_ITEM_CATEGORY_DEPENDENCY, icon: 'package' },
13
15
  ];
14
16
 
15
17
  export function getMockCategory(categoryValue) {
@@ -242,8 +244,107 @@ const mockGitItems = [
242
244
  },
243
245
  ];
244
246
 
247
+ export const MOCK_CONTEXT_ITEM_DEPENDENCY = {
248
+ id: '823e4567-e89b-12d3-a456-426614174007',
249
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
250
+ content: JSON.stringify([
251
+ {
252
+ javascript: [
253
+ '@types/node@16.11.7',
254
+ '@vue/compiler-sfc@3.2.37',
255
+ 'typescript@4.5.5',
256
+ 'vue@3.2.37',
257
+ ],
258
+ },
259
+ ]),
260
+ metadata: {
261
+ enabled: true,
262
+ title: 'example/garden',
263
+ secondaryText: 'package.json',
264
+ icon: 'package',
265
+ subType: 'dependency',
266
+ subTypeLabel: 'Project dependencies',
267
+ project: 'example/garden',
268
+ },
269
+ };
270
+
271
+ export const MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED = {
272
+ id: '923e4567-e89b-12d3-a456-426614174008',
273
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
274
+ content: JSON.stringify([
275
+ {
276
+ javascript: [
277
+ '@types/node@16.11.7',
278
+ '@vue/compiler-sfc@3.2.37',
279
+ 'typescript@4.5.5',
280
+ 'vue@3.2.37',
281
+ ],
282
+ csharp: ['newtonsoft.json@13.0.1', 'microsoft.net.test.sdk@16.11.0'],
283
+ },
284
+ ]),
285
+ metadata: {
286
+ enabled: false,
287
+ disabledReasons: ['Dependencies are not available for this project', 'Access restricted'],
288
+ title: 'example/vehicle',
289
+ secondaryText: 'package.json, vehicle.csproj',
290
+ icon: 'package',
291
+ subType: 'dependency',
292
+ subTypeLabel: 'Project dependencies',
293
+ project: 'example/vehicle',
294
+ },
295
+ };
296
+
297
+ const mockDependencies = [
298
+ MOCK_CONTEXT_ITEM_DEPENDENCY,
299
+ MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED,
300
+ {
301
+ id: 'b23e4567-e89b-12d3-a456-426614174010',
302
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
303
+ content: JSON.stringify([
304
+ {
305
+ python: ['django@3.2.9', 'djangorestframework@3.12.4', 'psycopg2@2.9.2', 'celery@5.2.1'],
306
+ csharp: ['newtonsoft.json@13.0.1', 'microsoft.net.test.sdk@16.11.0'],
307
+ },
308
+ ]),
309
+ metadata: {
310
+ enabled: true,
311
+ title: 'example/backend',
312
+ secondaryText: 'requirements.txt, some.backend.csproj',
313
+ icon: 'package',
314
+ subType: 'dependency',
315
+ subTypeLabel: 'Project dependencies',
316
+ project: 'example/backend',
317
+ },
318
+ },
319
+ {
320
+ id: 'c23e4567-e89b-12d3-a456-426614174011',
321
+ category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
322
+ content: JSON.stringify([
323
+ {
324
+ javascript: ['jquery@3.5.1', 'backbone@1.4.0', 'underscore@1.13.1', 'moment@2.29.1'],
325
+ },
326
+ ]),
327
+ metadata: {
328
+ enabled: false,
329
+ disabledReasons: ['Project is archived'],
330
+ title: 'example/legacy',
331
+ secondaryText: 'bower.json',
332
+ icon: 'package',
333
+ subType: 'dependency',
334
+ subTypeLabel: 'Project dependencies',
335
+ project: 'example/legacy',
336
+ },
337
+ },
338
+ ];
339
+
245
340
  export const getMockContextItems = () => {
246
- const allItems = [...mockFiles, ...mockGitItems, ...mockIssues, ...mockMergeRequests];
341
+ const allItems = [
342
+ ...mockFiles,
343
+ ...mockGitItems,
344
+ ...mockIssues,
345
+ ...mockMergeRequests,
346
+ ...mockDependencies,
347
+ ];
247
348
 
248
349
  // put disabled items in the back
249
350
  const disabledItems = allItems.filter((item) => !item.metadata.enabled);
package/translations.js CHANGED
@@ -29,6 +29,7 @@ export default {
29
29
  'GlDuoChat.chatPromptPlaceholderDefault': 'GitLab Duo Chat',
30
30
  'GlDuoChat.chatPromptPlaceholderWithCommands': 'Type /help to learn more',
31
31
  'GlDuoChat.chatSubmitLabel': 'Send chat message.',
32
+ 'GlDuoChatContextItemDetailsModal.contentErrorMessage': 'Item content could not be displayed.',
32
33
  'GlDuoChatContextItemDetailsModal.title': 'Preview',
33
34
  'GlDuoChatContextItemMenu.emptyStateMessage': 'No results found',
34
35
  'GlDuoChatContextItemMenu.loadingMessage': 'Loading...',