@gitlab/ui 113.7.0 → 114.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ## [114.0.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v114.0.0...v114.0.1) (2025-05-16)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **GlColumnChart:** Use correct stack values ([6565a48](https://gitlab.com/gitlab-org/gitlab-ui/commit/6565a4895b9ec4fb907c9f0292c1bf49321cf310))
7
+
8
+ # [114.0.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v113.7.0...v114.0.0) (2025-05-15)
9
+
10
+
11
+ ### Features
12
+
13
+ * **GlButton:** remove BButton from GlButton ([fcdca4e](https://gitlab.com/gitlab-org/gitlab-ui/commit/fcdca4ee51ed98d71d93a94a2ffa741cf720c4db))
14
+
15
+
16
+ ### BREAKING CHANGES
17
+
18
+ * **GlButton:** support for following props have been dropped:
19
+ - pressed
20
+ - router-component-name
21
+ - exact
22
+ - exact-path
23
+ - exact-path-active-class (replaced with exact-active-class)
24
+ - no-prefetch (use prefetch instead)
25
+
1
26
  # [113.7.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v113.6.0...v113.7.0) (2025-05-15)
2
27
 
3
28
 
@@ -1,74 +1,213 @@
1
- import { BButton } from '../../../vendor/bootstrap-vue/src/components/button/button';
2
- import { buttonCategoryOptions, buttonVariantOptions, buttonSizeOptions } from '../../../utils/constants';
3
- import { logWarning } from '../../../utils/utils';
1
+ import GlLink from '../link/link';
2
+ import { buttonCategoryOptions, buttonVariantOptions, buttonSizeOptions, linkVariantUnstyled } from '../../../utils/constants';
3
+ import { logWarning, stopEvent } from '../../../utils/utils';
4
4
  import { isSlotEmpty } from '../../../utils/is_slot_empty';
5
5
  import { SafeLinkMixin } from '../../mixins/safe_link_mixin';
6
+ import { isEvent } from '../../../vendor/bootstrap-vue/src/utils/inspect';
6
7
  import GlIcon from '../icon/icon';
7
8
  import GlLoadingIcon from '../loading_icon/loading_icon';
9
+ import { SPACE, ENTER } from '../new_dropdowns/constants';
8
10
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
9
11
 
10
12
  //
11
13
  var script = {
12
14
  name: 'GlButton',
13
15
  components: {
14
- BButton,
15
16
  GlIcon,
16
17
  GlLoadingIcon
17
18
  },
18
19
  mixins: [SafeLinkMixin],
19
20
  props: {
21
+ /**
22
+ * Set the category of the button.
23
+ */
20
24
  category: {
21
25
  type: String,
22
26
  required: false,
23
27
  default: buttonCategoryOptions.primary,
24
28
  validator: value => Object.keys(buttonCategoryOptions).includes(value)
25
29
  },
30
+ /**
31
+ * Set the variant of the button.
32
+ */
26
33
  variant: {
27
34
  type: String,
28
35
  required: false,
29
36
  default: buttonVariantOptions.default,
30
37
  validator: value => Object.keys(buttonVariantOptions).includes(value)
31
38
  },
39
+ /**
40
+ * Specify the size of the button. Options are `small` and `medium`.
41
+ */
32
42
  size: {
33
43
  type: String,
34
44
  required: false,
35
45
  default: 'medium',
36
46
  validator: value => Object.keys(buttonSizeOptions).includes(value)
37
47
  },
48
+ /**
49
+ * Style the button as selected.
50
+ */
38
51
  selected: {
39
52
  type: Boolean,
40
53
  required: false,
41
54
  default: false
42
55
  },
56
+ /**
57
+ * Specify an icon to render in the button.
58
+ */
43
59
  icon: {
44
60
  type: String,
45
61
  required: false,
46
62
  default: ''
47
63
  },
64
+ /**
65
+ * Render a non-interactive label button, a `span` styled as a button.
66
+ */
48
67
  label: {
49
68
  type: Boolean,
50
69
  required: false,
51
70
  default: false
52
71
  },
72
+ /**
73
+ * Set the loading state of the button.
74
+ */
53
75
  loading: {
54
76
  type: Boolean,
55
77
  required: false,
56
78
  default: false
57
79
  },
80
+ /**
81
+ * CSS classes to add to the button text.
82
+ */
58
83
  buttonTextClasses: {
59
84
  type: String,
60
85
  required: false,
61
86
  default: ''
62
87
  },
88
+ /**
89
+ * Renders a 100% width button (expands to the width of its parent container).
90
+ */
63
91
  block: {
64
92
  type: Boolean,
65
93
  required: false,
66
94
  default: false
67
95
  },
96
+ /**
97
+ * Specify the HTML tag to render instead of the default tag.
98
+ */
99
+ tag: {
100
+ type: String,
101
+ required: false,
102
+ default: 'button'
103
+ },
104
+ /**
105
+ * The value to set the button's `type` attribute to. Can be one of `button`, `submit`, or `reset`.
106
+ */
107
+ type: {
108
+ type: String,
109
+ required: false,
110
+ default: 'button',
111
+ validator: value => ['button', 'submit', 'reset'].includes(value)
112
+ },
113
+ /**
114
+ * Disables the component's functionality and places it in a disabled state.
115
+ */
68
116
  disabled: {
69
117
  type: Boolean,
70
118
  required: false,
71
119
  default: false
120
+ },
121
+ /**
122
+ * Denotes the target URL of the link for standard links.
123
+ */
124
+ href: {
125
+ type: String,
126
+ required: false,
127
+ default: undefined
128
+ },
129
+ /**
130
+ * Skips sanitization of href if true. This should be used sparingly.
131
+ * Consult security team before setting to true.
132
+ */
133
+ isUnsafeLink: {
134
+ type: Boolean,
135
+ required: false,
136
+ default: false
137
+ },
138
+ /**
139
+ * Sets the 'rel' attribute on the rendered link.
140
+ */
141
+ rel: {
142
+ type: String,
143
+ required: false,
144
+ default: null
145
+ },
146
+ /**
147
+ * Sets the 'target' attribute on the rendered link.
148
+ */
149
+ target: {
150
+ type: String,
151
+ required: false,
152
+ default: null
153
+ },
154
+ /**
155
+ * Places the component in the active state with active styling
156
+ */
157
+ active: {
158
+ type: Boolean,
159
+ required: false,
160
+ default: false
161
+ },
162
+ /**
163
+ * <router-link> prop: Denotes the target route of the link.
164
+ * When clicked, the value of the to prop will be passed to `router.push()` internally,
165
+ * so the value can be either a string or a Location descriptor object.
166
+ */
167
+ to: {
168
+ type: [Object, String],
169
+ required: false,
170
+ default: undefined
171
+ },
172
+ /**
173
+ * <router-link> prop: Configure the active CSS class applied when the link is active.
174
+ */
175
+ activeClass: {
176
+ type: String,
177
+ required: false,
178
+ default: undefined
179
+ },
180
+ /**
181
+ * <router-link> prop: Configure the active CSS class applied when the link is active with exact match.
182
+ */
183
+ exactActiveClass: {
184
+ type: String,
185
+ required: false,
186
+ default: undefined
187
+ },
188
+ /**
189
+ * <router-link> prop: Setting the replace prop will call `router.replace()` instead of `router.push()`
190
+ * when clicked, so the navigation will not leave a history record.
191
+ */
192
+ replace: {
193
+ type: Boolean,
194
+ required: false,
195
+ default: false
196
+ },
197
+ /**
198
+ * <nuxt-link> prop: To improve the responsiveness of your Nuxt.js applications, when the link will be displayed within the viewport,
199
+ * Nuxt.js will automatically prefetch the code splitted page. Setting `prefetch` to `true` or `false` will overwrite the default value of `router.prefetchLinks`
200
+ */
201
+ prefetch: {
202
+ type: Boolean,
203
+ required: false,
204
+ // Must be `null` to fall back to the value defined in the
205
+ // `nuxt.config.js` configuration file for `router.prefetchLinks`
206
+ // We convert `null` to `undefined`, so that Nuxt.js will use the
207
+ // compiled default
208
+ // Vue treats `undefined` as default of `false` for Boolean props,
209
+ // so we must set it as `null` here to be a true tri-state prop
210
+ default: null
72
211
  }
73
212
  },
74
213
  computed: {
@@ -82,17 +221,19 @@ var script = {
82
221
  return this.disabled || this.loading;
83
222
  },
84
223
  buttonClasses() {
85
- const classes = ['gl-button'];
224
+ const classes = ['btn', 'gl-button', `btn-${this.variant}`, `btn-${this.buttonSize}`];
86
225
  if (this.category !== buttonCategoryOptions.primary) {
87
226
  classes.push(`btn-${this.variant}-${this.category}`);
88
227
  }
89
228
  classes.push({
90
229
  'btn-icon': this.hasIconOnly,
91
230
  'button-ellipsis-horizontal': this.hasIconOnly && this.icon === 'ellipsis_h',
92
- selected: this.selected
231
+ selected: this.selected,
232
+ 'btn-block': this.displayBlock,
233
+ disabled: this.disabled
93
234
  });
94
235
  if (this.label) {
95
- classes.push('btn', 'btn-label', `btn-${this.buttonSize}`);
236
+ classes.push('btn', 'btn-label');
96
237
  }
97
238
  return classes;
98
239
  },
@@ -101,6 +242,84 @@ var script = {
101
242
  },
102
243
  displayBlock() {
103
244
  return !this.label && this.block;
245
+ },
246
+ isLink() {
247
+ return this.href || this.to;
248
+ },
249
+ isHashLink() {
250
+ return this.isLink && this.href === '#';
251
+ },
252
+ isButton() {
253
+ return this.componentIs === 'button';
254
+ },
255
+ isNonStandardTag() {
256
+ if (this.label) {
257
+ return false;
258
+ }
259
+ return !this.isLink && !this.isButton;
260
+ },
261
+ tabindex() {
262
+ // When disabled remove links and non-standard tags from tab order
263
+ if (this.disabled) {
264
+ return this.isLink || this.isNonStandardTag ? '-1' : this.$attrs.tabindex;
265
+ }
266
+
267
+ // Add hash links and non-standard tags to tab order
268
+ return this.isNonStandardTag || this.isHashLink ? '0' : this.$attrs.tabindex;
269
+ },
270
+ computedPropsAndAttributes() {
271
+ var _this$$attrs;
272
+ const base = {
273
+ // Type only used for "real" buttons
274
+ type: this.isButton ? this.type : null,
275
+ // Disabled only set on "real" buttons
276
+ disabled: this.isButton ? this.isButtonDisabled : null,
277
+ // We add a role of button when the tag is not a link or button or when link has `href` of `#`
278
+ role: this.isNonStandardTag || this.isHashLink ? 'button' : (_this$$attrs = this.$attrs) === null || _this$$attrs === void 0 ? void 0 : _this$$attrs.role,
279
+ // We set the `aria-disabled` state for non-standard tags
280
+ ...(this.isNonStandardTag ? {
281
+ 'aria-disabled': String(this.disabled)
282
+ } : {}),
283
+ tabindex: this.tabindex
284
+ };
285
+ if (this.isLink) {
286
+ return {
287
+ ...this.$attrs,
288
+ ...base,
289
+ variant: linkVariantUnstyled,
290
+ disabled: this.disabled,
291
+ href: this.href,
292
+ isUnsafeLink: this.isUnsafeLink,
293
+ rel: this.rel,
294
+ target: this.target,
295
+ active: this.active,
296
+ to: this.to,
297
+ activeClass: this.activeClass,
298
+ exactActiveClass: this.exactActiveClass,
299
+ replace: this.replace,
300
+ prefetch: this.prefetch
301
+ };
302
+ }
303
+ return {
304
+ ...this.$attrs,
305
+ ...base
306
+ };
307
+ },
308
+ computedListeners() {
309
+ return {
310
+ click: this.onClick,
311
+ keydown: this.onKeydown,
312
+ ...this.$listeners
313
+ };
314
+ },
315
+ componentIs() {
316
+ if (this.label) {
317
+ return 'span';
318
+ }
319
+ if (this.isLink) {
320
+ return GlLink;
321
+ }
322
+ return this.tag;
104
323
  }
105
324
  },
106
325
  mounted() {
@@ -108,6 +327,30 @@ var script = {
108
327
  if (!this.$slots.default && !this.$attrs['aria-label'] && !this.$props.label) {
109
328
  logWarning('[gl-button]: Accessible name missing. Please add inner text or aria-label.', this.$el);
110
329
  }
330
+ },
331
+ methods: {
332
+ onKeydown(event) {
333
+ // Skip if disabled
334
+ // Add SPACE keydown handler for link has `href` of `#`
335
+ // Add ENTER handler for non-standard tags
336
+ if (!this.disabled && (this.isNonStandardTag || this.isHashLink)) {
337
+ const {
338
+ code
339
+ } = event;
340
+ if (code === SPACE || code === ENTER && this.isNonStandardTag) {
341
+ const target = event.currentTarget || event.target;
342
+ stopEvent(event, {
343
+ propagation: false
344
+ });
345
+ target.click();
346
+ }
347
+ }
348
+ },
349
+ onClick(event) {
350
+ if (this.disabled && isEvent(event)) {
351
+ stopEvent(event);
352
+ }
353
+ }
111
354
  }
112
355
  };
113
356
 
@@ -115,7 +358,7 @@ var script = {
115
358
  const __vue_script__ = script;
116
359
 
117
360
  /* template */
118
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.label ? 'span' : 'b-button',_vm._g(_vm._b({directives:[{name:"safe-link",rawName:"v-safe-link:[safeLinkConfig]",arg:_vm.safeLinkConfig}],tag:"component",class:_vm.buttonClasses,attrs:{"block":_vm.displayBlock,"target":_vm.target,"variant":_vm.variant,"size":_vm.buttonSize,"disabled":_vm.isButtonDisabled}},'component',_vm.$attrs,false),_vm.$listeners),[(_vm.loading)?_c('gl-loading-icon',{staticClass:"gl-button-icon gl-button-loading-indicator",attrs:{"inline":""}}):_vm._e(),_vm._v(" "),(_vm.hasIcon && !(_vm.hasIconOnly && _vm.loading))?_c('gl-icon',{staticClass:"gl-button-icon",attrs:{"name":_vm.icon}}):_vm._e(),_vm._v(" "),_vm._t("emoji"),_vm._v(" "),(!_vm.hasIconOnly)?_c('span',{staticClass:"gl-button-text",class:_vm.buttonTextClasses},[_vm._t("default")],2):_vm._e()],2)};
361
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.componentIs,_vm._g(_vm._b({directives:[{name:"safe-link",rawName:"v-safe-link:[safeLinkConfig]",arg:_vm.safeLinkConfig}],tag:"component",class:_vm.buttonClasses},'component',_vm.computedPropsAndAttributes,false),_vm.computedListeners),[(_vm.loading)?_c('gl-loading-icon',{staticClass:"gl-button-icon gl-button-loading-indicator",attrs:{"inline":""}}):_vm._e(),_vm._v(" "),(_vm.hasIcon && !(_vm.hasIconOnly && _vm.loading))?_c('gl-icon',{staticClass:"gl-button-icon",attrs:{"name":_vm.icon}}):_vm._e(),_vm._v(" "),_vm._t("emoji"),_vm._v(" "),(!_vm.hasIconOnly)?_c('span',{staticClass:"gl-button-text",class:_vm.buttonTextClasses},[_vm._t("default")],2):_vm._e()],2)};
119
362
  var __vue_staticRenderFns__ = [];
120
363
 
121
364
  /* style */
@@ -1,8 +1,7 @@
1
1
  import merge from 'lodash/merge';
2
2
  import { yAxis, generateBarSeries, generateLineSeries, defaultChartOptions, gridWithSecondaryYAxis, grid, dataZoomAdjustments, mergeSeriesToOptions } from '../../../utils/charts/config';
3
- import { CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES } from '../../../utils/charts/constants';
3
+ import { CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES, CHART_DEFAULT_SERIES_STACK, CHART_DEFAULT_SERIES_SECONDARY_STACK } from '../../../utils/charts/constants';
4
4
  import { colorFromDefaultPalette } from '../../../utils/charts/theme';
5
- import { columnOptions } from '../../../utils/constants';
6
5
  import Chart from '../chart/chart';
7
6
  import ChartTooltip from '../shared/tooltip/tooltip';
8
7
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
@@ -84,7 +83,7 @@ var script = {
84
83
  let {
85
84
  name,
86
85
  data,
87
- stack
86
+ stack = CHART_DEFAULT_SERIES_STACK
88
87
  } = _ref;
89
88
  const color = colorFromDefaultPalette(index);
90
89
  return generateBarSeries({
@@ -117,7 +116,7 @@ var script = {
117
116
  name,
118
117
  data,
119
118
  type,
120
- stack = columnOptions.tiled
119
+ stack = CHART_DEFAULT_SERIES_SECONDARY_STACK
121
120
  } = _ref3;
122
121
  const color = colorFromDefaultPalette(offset + index);
123
122
  return type === CHART_TYPE_LINE ? generateLineSeries({
@@ -1,8 +1,8 @@
1
1
  import merge from 'lodash/merge';
2
2
  import { yAxis, generateBarSeries, generateLineSeries, gridWithSecondaryYAxis, grid, defaultChartOptions, dataZoomAdjustments, mergeSeriesToOptions } from '../../../utils/charts/config';
3
- import { LEGEND_AVERAGE_TEXT, LEGEND_MAX_TEXT, LEGEND_MIN_TEXT, LEGEND_CURRENT_TEXT, LEGEND_LAYOUT_INLINE, LEGEND_LAYOUT_TABLE, CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES } from '../../../utils/charts/constants';
3
+ import { LEGEND_AVERAGE_TEXT, LEGEND_MAX_TEXT, LEGEND_MIN_TEXT, LEGEND_CURRENT_TEXT, LEGEND_LAYOUT_INLINE, LEGEND_LAYOUT_TABLE, CHART_DEFAULT_SERIES_STACK, CHART_DEFAULT_SERIES_SECONDARY_STACK, CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES } from '../../../utils/charts/constants';
4
4
  import { colorFromDefaultPalette } from '../../../utils/charts/theme';
5
- import { columnOptions } from '../../../utils/constants';
5
+ import { stackedPresentationOptions } from '../../../utils/constants';
6
6
  import TooltipDefaultFormat from '../shared/tooltip/tooltip_default_format/tooltip_default_format';
7
7
  import Chart from '../chart/chart';
8
8
  import ChartLegend from '../legend/legend';
@@ -49,8 +49,8 @@ var script = {
49
49
  presentation: {
50
50
  type: String,
51
51
  required: false,
52
- default: 'stacked',
53
- validator: value => ['stacked', 'tiled'].indexOf(value) !== -1
52
+ default: stackedPresentationOptions.stacked,
53
+ validator: value => Object.values(stackedPresentationOptions).indexOf(value) !== -1
54
54
  },
55
55
  groupBy: {
56
56
  type: Array,
@@ -151,12 +151,13 @@ var script = {
151
151
  return this.bars.map((_ref, index) => {
152
152
  let {
153
153
  name,
154
- data
154
+ data,
155
+ stack
155
156
  } = _ref;
156
- const stack = this.presentation === 'stacked' ? this.groupBy : null;
157
157
  const color = this.getColor(index);
158
+ const seriesStack = this.presentation === stackedPresentationOptions.stacked ? stack || CHART_DEFAULT_SERIES_STACK : null;
158
159
  return generateBarSeries({
159
- stack,
160
+ stack: seriesStack,
160
161
  name,
161
162
  data,
162
163
  color
@@ -185,9 +186,10 @@ var script = {
185
186
  name,
186
187
  data,
187
188
  type,
188
- stack = columnOptions.tiled
189
+ stack
189
190
  } = _ref3;
190
191
  const color = this.getColor(offset + index);
192
+ const seriesStack = this.presentation === stackedPresentationOptions.stacked ? stack || CHART_DEFAULT_SERIES_SECONDARY_STACK : null;
191
193
  return type === CHART_TYPE_LINE ? generateLineSeries({
192
194
  color,
193
195
  name,
@@ -197,8 +199,8 @@ var script = {
197
199
  color,
198
200
  name,
199
201
  data,
200
- yAxisIndex: 1,
201
- stack
202
+ stack: seriesStack,
203
+ yAxisIndex: 1
202
204
  });
203
205
  });
204
206
  },
package/dist/tailwind.css CHANGED
@@ -1,2 +1,2 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.gl-animate-skeleton-loader{background-color:var(--gl-skeleton-loader-background-color);background-image:linear-gradient(to right,var(--gl-skeleton-loader-background-color) 0,var(--gl-skeleton-loader-shimmer-color) 23%,var(--gl-skeleton-loader-shimmer-color) 27%,var(--gl-skeleton-loader-background-color) 50%);background-position:-32rem 0;background-repeat:no-repeat;background-size:32rem 100%;max-width:32rem;overflow:hidden}@media (prefers-reduced-motion:no-preference){.gl-animate-skeleton-loader{animation:gl-keyframes-skeleton-loader 2.5s linear;animation-delay:inherit;animation-iteration-count:3}}@keyframes gl-keyframes-skeleton-loader{0%{background-position-x:-32rem}to{background-position-x:32rem}}.gl-border{border-color:var(--gl-border-color-default);border-style:solid}.gl-border-t{border-top-color:var(--gl-border-color-default);border-top-style:solid}.gl-border-b{border-bottom-color:var(--gl-border-color-default);border-bottom-style:solid}.gl-heading-4{font-size:1rem;letter-spacing:inherit}.gl-heading-2,.gl-heading-4{color:var(--gl-text-color-heading);font-weight:600;line-height:1.25;margin-bottom:1rem;margin-top:0}.gl-heading-2{font-size:clamp(1.3125rem,.8680555556rem + .9259259259vw,1.5625rem);letter-spacing:-.01em}.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-top-0{top:0}.\!gl-z-9999{z-index:9999!important}.gl-z-9999{z-index:9999}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.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-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-2{margin-bottom:.25rem!important}.\!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-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-1{margin-left:.125rem}.gl-ml-2{margin-left:.25rem}.gl-ml-3{margin-left:.5rem}.gl-ml-5{margin-left:1rem}.gl-ml-6{margin-left:1.5rem}.gl-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-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-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-h-screen{height:100vh}.gl-min-h-8{min-height:2.5rem}.\!gl-w-31{width:15.5rem!important}.\!gl-w-auto{width:auto!important}.gl-w-1\/5{width:20%}.gl-w-10{width:3.5rem}.gl-w-12{width: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-auto{width:auto}.gl-w-full{width:100%}.gl-min-w-0{min-width:0}.\!gl-max-w-20{max-width:10rem!important}.\!gl-max-w-26{max-width:13rem!important}.\!gl-max-w-30{max-width:15rem!important}.gl-max-w-1\/2{max-width:50%}.gl-max-w-48{max-width:24rem}.gl-max-w-75{max-width:37.5rem}.gl-max-w-full{max-width:100%}.gl-flex-1{flex:1 1 0%}.gl-flex-auto{flex:1 1 auto}.gl-flex-shrink-0,.gl-shrink-0{flex-shrink:0}.gl-grow{flex-grow:1}.gl-basis-0{flex-basis:0}.\!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-select-none{-webkit-user-select:none;user-select:none}.gl-list-none{list-style-type:none}.gl-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.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-content-center{align-content:center}.gl-items-start{align-items:flex-start}.gl-items-center{align-items:center}.gl-items-baseline{align-items:baseline}.\!gl-justify-start{justify-content:flex-start!important}.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-5{gap:1rem}.gl-gap-6{gap:1.5rem}.gl-gap-x-3{column-gap:.5rem}.gl-self-start{align-self:flex-start}.gl-self-center{align-self:center}.gl-overflow-hidden{overflow:hidden}.\!gl-overflow-visible{overflow:visible!important}.gl-overflow-visible{overflow:visible}.gl-overflow-y-auto{overflow-y:auto}.gl-overflow-x-hidden{overflow-x:hidden}.gl-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\!gl-text-ellipsis{text-overflow:ellipsis!important}.gl-text-ellipsis{text-overflow:ellipsis}.gl-whitespace-nowrap{white-space:nowrap}.gl-whitespace-pre-line{white-space:pre-line}.gl-break-words{overflow-wrap:break-word}.\!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-t-base{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.gl-border{border-width:1px}.\!gl-border-b-0{border-bottom-width:0!important}.gl-border-b,.gl-border-b-1{border-bottom-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-t-2{border-top-width:2px}.gl-border-dashed{border-style:dashed}.gl-border-none{border-style:none}.gl-border-default{border-color:var(--gl-border-color-default,var(--gl-color-neutral-100,#dcdcde))}.gl-border-dropdown{border-color:var(--gl-dropdown-border-color,var(--gl-border-color-strong,#bfbfc3))}.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-strong{border-color:var(--gl-border-color-strong,var(--gl-color-neutral-200,#bfbfc3))}.gl-border-subtle{border-color:var(--gl-border-color-subtle,var(--gl-color-neutral-50,#ececef))}.gl-border-b-dropdown-divider{border-bottom-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.gl-border-b-section{border-bottom-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-t-blue-500{border-top-color:var(--blue-500,#1f75cb)}.gl-border-t-dropdown-divider{border-top-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.gl-border-t-red-500{border-top-color:var(--red-500,#dd2b0e)}.\!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-blue-100{background-color:var(--blue-100,#cbe2f9)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color,var(--gl-background-color-overlap,#fff))}.gl-bg-feedback-danger{background-color:var(--gl-feedback-danger-background-color,var(--gl-color-red-50,#fcf1ef))}.gl-bg-feedback-info{background-color:var(--gl-feedback-info-background-color,var(--gl-color-blue-50,#e9f3fc))}.gl-bg-feedback-neutral{background-color:var(--gl-feedback-neutral-background-color,var(--gl-color-neutral-50,#ececef))}.gl-bg-feedback-strong{background-color:var(--gl-feedback-strong-background-color,var(--gl-color-neutral-800,#3a383f))}.gl-bg-feedback-success{background-color:var(--gl-feedback-success-background-color,var(--gl-color-green-50,#ecf4ee))}.gl-bg-feedback-warning{background-color:var(--gl-feedback-warning-background-color,var(--gl-color-orange-50,#fdf1dd))}.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-section{background-color:var(--gl-background-color-section,var(--gl-color-neutral-0,#fff))}.gl-bg-status-brand{background-color:var(--gl-status-brand-background-color,var(--gl-color-purple-100,#e1d8f9))}.gl-bg-status-danger{background-color:var(--gl-status-danger-background-color,var(--gl-color-red-100,#fdd4cd))}.gl-bg-status-info{background-color:var(--gl-status-info-background-color,var(--gl-color-blue-100,#cbe2f9))}.gl-bg-status-neutral{background-color:var(--gl-status-neutral-background-color,var(--gl-color-neutral-100,#dcdcde))}.gl-bg-status-success{background-color:var(--gl-status-success-background-color,var(--gl-color-green-100,#c3e6cd))}.gl-bg-status-warning{background-color:var(--gl-status-warning-background-color,var(--gl-color-orange-100,#f5d9a8))}.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-feedback-danger{fill:var(--gl-feedback-danger-icon-color,var(--gl-color-red-600,#c02f12))}.gl-fill-feedback-info{fill:var(--gl-feedback-info-icon-color,var(--gl-color-blue-600,#2f68b4))}.gl-fill-feedback-neutral{fill:var(--gl-feedback-neutral-icon-color,var(--gl-color-neutral-600,#626168))}.gl-fill-feedback-strong{fill:var(--gl-feedback-strong-icon-color,var(--gl-color-neutral-0,#fff))}.gl-fill-feedback-success{fill:var(--gl-feedback-success-icon-color,var(--gl-color-green-600,#2f7549))}.gl-fill-feedback-warning{fill:var(--gl-feedback-warning-icon-color,var(--gl-color-orange-600,#995715))}.gl-fill-icon-danger{fill:var(--gl-icon-color-danger,var(--gl-text-color-danger,#c02f12))}.gl-fill-icon-default{fill:var(--gl-icon-color-default,var(--gl-text-color-default,#3a383f))}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled,var(--gl-text-color-disabled,#89888d))}.gl-fill-icon-info{fill:var(--gl-icon-color-info,var(--gl-color-blue-700,#2f5ca0))}.gl-fill-icon-link{fill:var(--gl-icon-color-link,var(--gl-text-color-link,#2f5ca0))}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong,var(--gl-text-color-strong,#18171d))}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle,var(--gl-text-color-subtle,#626168))}.gl-fill-icon-success{fill:var(--gl-icon-color-success,var(--gl-text-color-success,#2f7549))}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning,var(--gl-text-color-warning,#995715))}.gl-fill-status-brand{fill:var(--gl-status-brand-icon-color,var(--gl-color-purple-500,#7b58cf))}.gl-fill-status-danger{fill:var(--gl-status-danger-icon-color,var(--gl-color-red-500,#dd2b0e))}.gl-fill-status-info{fill:var(--gl-status-info-icon-color,var(--gl-color-blue-500,#1f75cb))}.gl-fill-status-neutral{fill:var(--gl-status-neutral-icon-color,var(--gl-color-neutral-500,#737278))}.gl-fill-status-success{fill:var(--gl-status-success-icon-color,var(--gl-color-green-500,#108548))}.gl-fill-status-warning{fill:var(--gl-status-warning-icon-color,var(--gl-color-orange-500,#ab6100))}.\!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-p-8{padding:2.5rem}.\!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-px-1{padding-left:.125rem;padding-right:.125rem}.gl-px-2{padding-left:.25rem;padding-right:.25rem}.gl-px-3{padding-left:.5rem;padding-right:.5rem}.gl-px-4{padding-left:.75rem;padding-right:.75rem}.gl-px-5{padding-left:1rem;padding-right:1rem}.gl-py-2{padding-bottom:.25rem;padding-top:.25rem}.gl-py-3{padding-bottom:.5rem;padding-top:.5rem}.gl-py-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-pr-7{padding-right:2rem!important}.\!gl-pr-9{padding-right:3rem!important}.\!gl-pt-0{padding-top:0!important}.gl-pb-10{padding-bottom:3.5rem}.gl-pb-2{padding-bottom:.25rem}.gl-pb-3{padding-bottom:.5rem}.gl-pb-5{padding-bottom:1rem}.gl-pl-0{padding-left:0}.gl-pl-2{padding-left:.25rem}.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-text-left{text-align:left!important}.gl-text-center{text-align:center}.gl-text-right{text-align:right}.gl-align-middle{vertical-align:middle}.\!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-sm{font-size:.75rem}.gl-text-xs{font-size:.625rem}.gl-font-bold{font-weight:600}.gl-font-normal{font-weight:400}.gl-capitalize{text-transform:capitalize}.gl-leading-1{line-height:1}.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-danger{color:var(--gl-text-color-danger,var(--gl-color-red-600,#c02f12))}.gl-text-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))}.gl-text-feedback-danger{color:var(--gl-feedback-danger-text-color,var(--gl-color-red-700,#a32c12))}.gl-text-feedback-info{color:var(--gl-feedback-info-text-color,var(--gl-color-blue-700,#2f5ca0))}.gl-text-feedback-neutral{color:var(--gl-feedback-neutral-text-color,var(--gl-color-neutral-700,#4c4b51))}.gl-text-feedback-strong{color:var(--gl-feedback-strong-text-color,var(--gl-color-neutral-0,#fff))}.gl-text-feedback-success{color:var(--gl-feedback-success-text-color,var(--gl-color-green-700,#306440))}.gl-text-feedback-warning{color:var(--gl-feedback-warning-text-color,var(--gl-color-orange-700,#894b16))}.gl-text-gray-500{color:var(--gray-500,#737278)}.gl-text-gray-700{color:var(--gray-700,#4c4b51)}.gl-text-gray-900{color:var(--gray-900,#28272d)}.gl-text-green-500{color:var(--green-500,#108548)}.gl-text-green-600{color:var(--green-600,#2f7549)}.gl-text-inherit{color:inherit}.gl-text-neutral-0{color:var(--gl-color-neutral-0,#fff)}.gl-text-neutral-950{color:var(--gl-color-neutral-950,#18171d)}.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-secondary{color:var(--gl-text-secondary,#737278)}.gl-text-status-brand{color:var(--gl-status-brand-text-color,var(--gl-color-purple-700,#5c47a6))}.gl-text-status-danger{color:var(--gl-status-danger-text-color,var(--gl-color-red-700,#a32c12))}.gl-text-status-info{color:var(--gl-status-info-text-color,var(--gl-color-blue-700,#2f5ca0))}.gl-text-status-neutral{color:var(--gl-status-neutral-text-color,var(--gl-color-neutral-700,#4c4b51))}.gl-text-status-success{color:var(--gl-status-success-text-color,var(--gl-color-green-700,#306440))}.gl-text-status-warning{color:var(--gl-status-warning-text-color,var(--gl-color-orange-700,#894b16))}.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-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-lg{--tw-shadow:0 0 2px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629),0 4px 12px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 2px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color),0 4px 12px var(--tw-shadow-color)}.gl-shadow-lg,.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 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)}.gl-shadow-sm{--tw-shadow:0 0 2px var(--gl-shadow-color-default,#05050629),0 1px 4px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 2px var(--tw-shadow-color),0 1px 4px 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-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-focus-inset:focus{box-shadow:inset 0 0 0 2px var(--gl-focus-ring-outer-color),inset 0 0 0 3px var(--gl-focus-ring-inner-color),inset 0 0 0 1px var(--gl-focus-ring-inner-color)!important;outline:none!important}@media (min-width:576px){.sm\:gl-block{display:block}.sm\:\!gl-hidden{display:none!important}.sm\:gl-flex-nowrap{flex-wrap:nowrap}.sm\:gl-gap-3{gap:.5rem}}@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-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.gl-animate-skeleton-loader{background-color:var(--gl-skeleton-loader-background-color);background-image:linear-gradient(to right,var(--gl-skeleton-loader-background-color) 0,var(--gl-skeleton-loader-shimmer-color) 23%,var(--gl-skeleton-loader-shimmer-color) 27%,var(--gl-skeleton-loader-background-color) 50%);background-position:-32rem 0;background-repeat:no-repeat;background-size:32rem 100%;max-width:32rem;overflow:hidden}@media (prefers-reduced-motion:no-preference){.gl-animate-skeleton-loader{animation:gl-keyframes-skeleton-loader 2.5s linear;animation-delay:inherit;animation-iteration-count:3}}@keyframes gl-keyframes-skeleton-loader{0%{background-position-x:-32rem}to{background-position-x:32rem}}.gl-border{border-color:var(--gl-border-color-default);border-style:solid}.gl-border-t{border-top-color:var(--gl-border-color-default);border-top-style:solid}.gl-border-b{border-bottom-color:var(--gl-border-color-default);border-bottom-style:solid}.gl-heading-4{font-size:1rem;letter-spacing:inherit}.gl-heading-2,.gl-heading-4{color:var(--gl-text-color-heading);font-weight:600;line-height:1.25;margin-bottom:1rem;margin-top:0}.gl-heading-2{font-size:clamp(1.3125rem,.8680555556rem + .9259259259vw,1.5625rem);letter-spacing:-.01em}.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-top-0{top:0}.\!gl-z-9999{z-index:9999!important}.gl-z-9999{z-index:9999}.gl-float-right{float:right}.\!gl-m-0{margin:0!important}.gl-m-0{margin:0}.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-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-2{margin-bottom:.25rem!important}.\!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-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-1{margin-left:.125rem}.gl-ml-2{margin-left:.25rem}.gl-ml-3{margin-left:.5rem}.gl-ml-5{margin-left:1rem}.gl-ml-6{margin-left:1.5rem}.gl-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-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-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-h-screen{height:100vh}.gl-min-h-8{min-height:2.5rem}.\!gl-w-31{width:15.5rem!important}.\!gl-w-auto{width:auto!important}.gl-w-1\/5{width:20%}.gl-w-10{width:3.5rem}.gl-w-12{width: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-auto{width:auto}.gl-w-full{width:100%}.gl-min-w-0{min-width:0}.\!gl-max-w-20{max-width:10rem!important}.\!gl-max-w-26{max-width:13rem!important}.\!gl-max-w-30{max-width:15rem!important}.gl-max-w-1\/2{max-width:50%}.gl-max-w-48{max-width:24rem}.gl-max-w-75{max-width:37.5rem}.gl-max-w-full{max-width:100%}.gl-flex-1{flex:1 1 0%}.gl-flex-auto{flex:1 1 auto}.gl-flex-shrink-0,.gl-shrink-0{flex-shrink:0}.gl-grow{flex-grow:1}.gl-basis-0{flex-basis:0}.\!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-select-none{-webkit-user-select:none;user-select:none}.gl-list-none{list-style-type:none}.gl-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.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-content-center{align-content:center}.gl-items-start{align-items:flex-start}.gl-items-center{align-items:center}.gl-items-baseline{align-items:baseline}.\!gl-justify-start{justify-content:flex-start!important}.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-5{gap:1rem}.gl-gap-6{gap:1.5rem}.gl-gap-x-3{column-gap:.5rem}.gl-self-start{align-self:flex-start}.gl-self-center{align-self:center}.gl-overflow-hidden{overflow:hidden}.\!gl-overflow-visible{overflow:visible!important}.gl-overflow-visible{overflow:visible}.gl-overflow-y-auto{overflow-y:auto}.gl-overflow-x-hidden{overflow-x:hidden}.gl-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.\!gl-text-ellipsis{text-overflow:ellipsis!important}.gl-text-ellipsis{text-overflow:ellipsis}.gl-whitespace-nowrap{white-space:nowrap}.gl-whitespace-pre-line{white-space:pre-line}.gl-break-words{overflow-wrap:break-word}.\!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-t-base{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.gl-border{border-width:1px}.\!gl-border-b-0{border-bottom-width:0!important}.gl-border-b,.gl-border-b-1{border-bottom-width:1px}.gl-border-t,.gl-border-t-1{border-top-width:1px}.gl-border-t-2{border-top-width:2px}.gl-border-dashed{border-style:dashed}.gl-border-none{border-style:none}.gl-border-default{border-color:var(--gl-border-color-default,var(--gl-color-neutral-100,#dcdcde))}.gl-border-dropdown{border-color:var(--gl-dropdown-border-color,var(--gl-border-color-strong,#bfbfc3))}.gl-border-gray-500{border-color:var(--gray-500,#737278)}.gl-border-section{border-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-strong{border-color:var(--gl-border-color-strong,var(--gl-color-neutral-200,#bfbfc3))}.gl-border-subtle{border-color:var(--gl-border-color-subtle,var(--gl-color-neutral-50,#ececef))}.gl-border-b-dropdown-divider{border-bottom-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.gl-border-b-section{border-bottom-color:var(--gl-border-color-section,var(--gl-border-color-default,#dcdcde))}.gl-border-t-blue-500{border-top-color:var(--blue-500,#1f75cb)}.gl-border-t-dropdown-divider{border-top-color:var(--gl-dropdown-divider-color,var(--gl-border-color-default,#dcdcde))}.gl-border-t-red-500{border-top-color:var(--red-500,#dd2b0e)}.\!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-blue-100{background-color:var(--blue-100,#cbe2f9)}.gl-bg-default{background-color:var(--gl-background-color-default,var(--gl-color-neutral-0,#fff))}.gl-bg-dropdown{background-color:var(--gl-dropdown-background-color,var(--gl-background-color-overlap,#fff))}.gl-bg-feedback-danger{background-color:var(--gl-feedback-danger-background-color,var(--gl-color-red-50,#fcf1ef))}.gl-bg-feedback-info{background-color:var(--gl-feedback-info-background-color,var(--gl-color-blue-50,#e9f3fc))}.gl-bg-feedback-neutral{background-color:var(--gl-feedback-neutral-background-color,var(--gl-color-neutral-50,#ececef))}.gl-bg-feedback-strong{background-color:var(--gl-feedback-strong-background-color,var(--gl-color-neutral-800,#3a383f))}.gl-bg-feedback-success{background-color:var(--gl-feedback-success-background-color,var(--gl-color-green-50,#ecf4ee))}.gl-bg-feedback-warning{background-color:var(--gl-feedback-warning-background-color,var(--gl-color-orange-50,#fdf1dd))}.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-section{background-color:var(--gl-background-color-section,var(--gl-color-neutral-0,#fff))}.gl-bg-status-brand{background-color:var(--gl-status-brand-background-color,var(--gl-color-purple-100,#e1d8f9))}.gl-bg-status-danger{background-color:var(--gl-status-danger-background-color,var(--gl-color-red-100,#fdd4cd))}.gl-bg-status-info{background-color:var(--gl-status-info-background-color,var(--gl-color-blue-100,#cbe2f9))}.gl-bg-status-neutral{background-color:var(--gl-status-neutral-background-color,var(--gl-color-neutral-100,#dcdcde))}.gl-bg-status-success{background-color:var(--gl-status-success-background-color,var(--gl-color-green-100,#c3e6cd))}.gl-bg-status-warning{background-color:var(--gl-status-warning-background-color,var(--gl-color-orange-100,#f5d9a8))}.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-feedback-danger{fill:var(--gl-feedback-danger-icon-color,var(--gl-color-red-600,#c02f12))}.gl-fill-feedback-info{fill:var(--gl-feedback-info-icon-color,var(--gl-color-blue-600,#2f68b4))}.gl-fill-feedback-neutral{fill:var(--gl-feedback-neutral-icon-color,var(--gl-color-neutral-600,#626168))}.gl-fill-feedback-strong{fill:var(--gl-feedback-strong-icon-color,var(--gl-color-neutral-0,#fff))}.gl-fill-feedback-success{fill:var(--gl-feedback-success-icon-color,var(--gl-color-green-600,#2f7549))}.gl-fill-feedback-warning{fill:var(--gl-feedback-warning-icon-color,var(--gl-color-orange-600,#995715))}.gl-fill-icon-danger{fill:var(--gl-icon-color-danger,var(--gl-text-color-danger,#c02f12))}.gl-fill-icon-default{fill:var(--gl-icon-color-default,var(--gl-text-color-default,#3a383f))}.gl-fill-icon-disabled{fill:var(--gl-icon-color-disabled,var(--gl-text-color-disabled,#89888d))}.gl-fill-icon-info{fill:var(--gl-icon-color-info,var(--gl-color-blue-700,#2f5ca0))}.gl-fill-icon-link{fill:var(--gl-icon-color-link,var(--gl-text-color-link,#2f5ca0))}.gl-fill-icon-strong{fill:var(--gl-icon-color-strong,var(--gl-text-color-strong,#18171d))}.gl-fill-icon-subtle{fill:var(--gl-icon-color-subtle,var(--gl-text-color-subtle,#626168))}.gl-fill-icon-success{fill:var(--gl-icon-color-success,var(--gl-text-color-success,#2f7549))}.gl-fill-icon-warning{fill:var(--gl-icon-color-warning,var(--gl-text-color-warning,#995715))}.gl-fill-status-brand{fill:var(--gl-status-brand-icon-color,var(--gl-color-purple-500,#7b58cf))}.gl-fill-status-danger{fill:var(--gl-status-danger-icon-color,var(--gl-color-red-500,#dd2b0e))}.gl-fill-status-info{fill:var(--gl-status-info-icon-color,var(--gl-color-blue-500,#1f75cb))}.gl-fill-status-neutral{fill:var(--gl-status-neutral-icon-color,var(--gl-color-neutral-500,#737278))}.gl-fill-status-success{fill:var(--gl-status-success-icon-color,var(--gl-color-green-500,#108548))}.gl-fill-status-warning{fill:var(--gl-status-warning-icon-color,var(--gl-color-orange-500,#ab6100))}.\!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-p-8{padding:2.5rem}.\!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-px-1{padding-left:.125rem;padding-right:.125rem}.gl-px-2{padding-left:.25rem;padding-right:.25rem}.gl-px-3{padding-left:.5rem;padding-right:.5rem}.gl-px-4{padding-left:.75rem;padding-right:.75rem}.gl-px-5{padding-left:1rem;padding-right:1rem}.gl-py-2{padding-bottom:.25rem;padding-top:.25rem}.gl-py-3{padding-bottom:.5rem;padding-top:.5rem}.gl-py-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-pr-7{padding-right:2rem!important}.\!gl-pr-9{padding-right:3rem!important}.\!gl-pt-0{padding-top:0!important}.gl-pb-10{padding-bottom:3.5rem}.gl-pb-2{padding-bottom:.25rem}.gl-pb-3{padding-bottom:.5rem}.gl-pb-5{padding-bottom:1rem}.gl-pl-0{padding-left:0}.gl-pl-2{padding-left:.25rem}.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-text-left{text-align:left!important}.gl-text-center{text-align:center}.gl-text-right{text-align:right}.gl-align-middle{vertical-align:middle}.\!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-sm{font-size:.75rem}.gl-text-xs{font-size:.625rem}.gl-font-bold{font-weight:600}.gl-font-normal{font-weight:400}.gl-capitalize{text-transform:capitalize}.gl-leading-1{line-height:1}.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-danger{color:var(--gl-text-color-danger,var(--gl-color-red-600,#c02f12))}.gl-text-default{color:var(--gl-text-color-default,var(--gl-color-neutral-800,#3a383f))}.gl-text-feedback-danger{color:var(--gl-feedback-danger-text-color,var(--gl-color-red-700,#a32c12))}.gl-text-feedback-info{color:var(--gl-feedback-info-text-color,var(--gl-color-blue-700,#2f5ca0))}.gl-text-feedback-neutral{color:var(--gl-feedback-neutral-text-color,var(--gl-color-neutral-700,#4c4b51))}.gl-text-feedback-strong{color:var(--gl-feedback-strong-text-color,var(--gl-color-neutral-0,#fff))}.gl-text-feedback-success{color:var(--gl-feedback-success-text-color,var(--gl-color-green-700,#306440))}.gl-text-feedback-warning{color:var(--gl-feedback-warning-text-color,var(--gl-color-orange-700,#894b16))}.gl-text-gray-500{color:var(--gray-500,#737278)}.gl-text-gray-700{color:var(--gray-700,#4c4b51)}.gl-text-gray-900{color:var(--gray-900,#28272d)}.gl-text-green-500{color:var(--green-500,#108548)}.gl-text-green-600{color:var(--green-600,#2f7549)}.gl-text-inherit{color:inherit}.gl-text-neutral-0{color:var(--gl-color-neutral-0,#fff)}.gl-text-neutral-950{color:var(--gl-color-neutral-950,#18171d)}.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-secondary{color:var(--gl-text-secondary,#737278)}.gl-text-status-brand{color:var(--gl-status-brand-text-color,var(--gl-color-purple-700,#5c47a6))}.gl-text-status-danger{color:var(--gl-status-danger-text-color,var(--gl-color-red-700,#a32c12))}.gl-text-status-info{color:var(--gl-status-info-text-color,var(--gl-color-blue-700,#2f5ca0))}.gl-text-status-neutral{color:var(--gl-status-neutral-text-color,var(--gl-color-neutral-700,#4c4b51))}.gl-text-status-success{color:var(--gl-status-success-text-color,var(--gl-color-green-700,#306440))}.gl-text-status-warning{color:var(--gl-status-warning-text-color,var(--gl-color-orange-700,#894b16))}.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-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-lg{--tw-shadow:0 0 2px var(--gl-shadow-color-default,#05050629),0 0 2px var(--gl-shadow-color-default,#05050629),0 4px 12px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 2px var(--tw-shadow-color),0 0 2px var(--tw-shadow-color),0 4px 12px var(--tw-shadow-color)}.gl-shadow-lg,.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 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)}.gl-shadow-sm{--tw-shadow:0 0 2px var(--gl-shadow-color-default,#05050629),0 1px 4px var(--gl-shadow-color-default,#05050629);--tw-shadow-colored:0 0 2px var(--tw-shadow-color),0 1px 4px 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-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-focus-inset:focus{box-shadow:inset 0 0 0 2px var(--gl-focus-ring-outer-color),inset 0 0 0 3px var(--gl-focus-ring-inner-color),inset 0 0 0 1px var(--gl-focus-ring-inner-color)!important;outline:none!important}@media (min-width:576px){.sm\:gl-block{display:block}.sm\:\!gl-hidden{display:none!important}.sm\:gl-flex-nowrap{flex-wrap:nowrap}.sm\:gl-gap-3{gap:.5rem}}@media (min-width:768px){.md\:gl-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}
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"]}
@@ -2,7 +2,6 @@ import castArray from 'lodash/castArray';
2
2
  import merge from 'lodash/merge';
3
3
  import { BLUE_500 } from '../../tokens/build/js/tokens';
4
4
  import { GlBreakpointInstance } from '../breakpoints';
5
- import { columnOptions } from '../constants';
6
5
  import { areDatesEqual } from '../datetime_utility';
7
6
  import { engineeringNotation } from '../number_utils';
8
7
  import { hexToRgba } from '../utils';
@@ -415,8 +414,8 @@ const generateBarSeries = _ref4 => {
415
414
  let {
416
415
  name,
417
416
  color,
417
+ stack,
418
418
  data = [],
419
- stack = columnOptions.stacked,
420
419
  yAxisIndex = 0
421
420
  } = _ref4;
422
421
  return {
@@ -58,8 +58,12 @@ const arrowSymbol = 'path://m5 229 5 8h-10z';
58
58
  const CHART_TYPE_BAR = 'bar';
59
59
  const CHART_TYPE_LINE = 'line';
60
60
 
61
+ // Constants for "series.stack" option, series with the same value stack on top of each other
62
+ const CHART_DEFAULT_SERIES_STACK = 'default-series-stack';
63
+ const CHART_DEFAULT_SERIES_SECONDARY_STACK = 'default-series-secondary-stack';
64
+
61
65
  // Constants for height "auto"
62
66
  const HEIGHT_AUTO_CLASSES = 'gl-chart-h-auto gl-flex gl-flex-col gl-h-full';
63
67
  const HEIGHT_AUTO_HORIZONTAL_LAYOUT_CLASSES = 'gl-flex gl-h-full';
64
68
 
65
- export { ANNOTATIONS_COMPONENT_TYPE, ANNOTATIONS_SERIES_NAME, CHART_TYPE_BAR, CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES, HEIGHT_AUTO_HORIZONTAL_LAYOUT_CLASSES, LEGEND_AVERAGE_TEXT, LEGEND_CURRENT_TEXT, LEGEND_LAYOUT_INLINE, LEGEND_LAYOUT_TABLE, LEGEND_MAX_TEXT, LEGEND_MIN_TEXT, TOOLTIP_LEFT_OFFSET, TOOLTIP_TOP_OFFSET, arrowSymbol };
69
+ export { ANNOTATIONS_COMPONENT_TYPE, ANNOTATIONS_SERIES_NAME, CHART_DEFAULT_SERIES_SECONDARY_STACK, CHART_DEFAULT_SERIES_STACK, CHART_TYPE_BAR, CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES, HEIGHT_AUTO_HORIZONTAL_LAYOUT_CLASSES, LEGEND_AVERAGE_TEXT, LEGEND_CURRENT_TEXT, LEGEND_LAYOUT_INLINE, LEGEND_LAYOUT_TABLE, LEGEND_MAX_TEXT, LEGEND_MIN_TEXT, TOOLTIP_LEFT_OFFSET, TOOLTIP_TOP_OFFSET, arrowSymbol };
@@ -207,7 +207,7 @@ const popoverPlacements = {
207
207
  bottom: 'bottom',
208
208
  left: 'left'
209
209
  };
210
- const columnOptions = {
210
+ const stackedPresentationOptions = {
211
211
  stacked: 'stacked',
212
212
  tiled: 'tiled'
213
213
  };
@@ -325,4 +325,4 @@ const loadingIconVariants = {
325
325
  };
326
326
  const isVue3 = Boolean(Vue.Fragment);
327
327
 
328
- export { COMMA, CONTRAST_LEVELS, HEX_REGEX, LEFT_MOUSE_BUTTON, alertVariantIconMap, alertVariantOptions, alignOptions, animatedIconVariantOptions, avatarShapeOptions, avatarSizeOptions, avatarsInlineSizeOptions, badgeForButtonOptions, badgeIconSizeOptions, badgeSizeOptions, badgeVariantOptions, bannerVariants, breadCrumbSizeOptions, buttonCategoryOptions, buttonSizeOptions, buttonVariantOptions, colorThemes, columnOptions, datepickerWidthOptionsMap, defaultDateFormat, drawerVariants, dropdownAllowedAutoPlacements, dropdownItemVariantOptions, dropdownPlacements, dropdownVariantOptions, focusableTags, formInputWidths, formStateOptions, iconSizeOptions, iconVariantOptions, isVue3, keyboard, labelColorOptions, linkVariantInline, linkVariantMention, linkVariantMentionCurrent, linkVariantMeta, linkVariantOptions, linkVariantUnstyled, loadingIconSizes, loadingIconVariants, maxZIndex, modalButtonDefaults, modalSizeOptions, popoverPlacements, progressBarVariantOptions, resizeDebounceTime, tabsButtonDefaults, targetOptions, toggleLabelPosition, tokenVariants, tooltipActionEvents, tooltipDelay, tooltipPlacements, triggerVariantOptions, truncateOptions, variantCssColorMap, viewModeOptions };
328
+ export { COMMA, CONTRAST_LEVELS, HEX_REGEX, LEFT_MOUSE_BUTTON, alertVariantIconMap, alertVariantOptions, alignOptions, animatedIconVariantOptions, avatarShapeOptions, avatarSizeOptions, avatarsInlineSizeOptions, badgeForButtonOptions, badgeIconSizeOptions, badgeSizeOptions, badgeVariantOptions, bannerVariants, breadCrumbSizeOptions, buttonCategoryOptions, buttonSizeOptions, buttonVariantOptions, colorThemes, datepickerWidthOptionsMap, defaultDateFormat, drawerVariants, dropdownAllowedAutoPlacements, dropdownItemVariantOptions, dropdownPlacements, dropdownVariantOptions, focusableTags, formInputWidths, formStateOptions, iconSizeOptions, iconVariantOptions, isVue3, keyboard, labelColorOptions, linkVariantInline, linkVariantMention, linkVariantMentionCurrent, linkVariantMeta, linkVariantOptions, linkVariantUnstyled, loadingIconSizes, loadingIconVariants, maxZIndex, modalButtonDefaults, modalSizeOptions, popoverPlacements, progressBarVariantOptions, resizeDebounceTime, stackedPresentationOptions, tabsButtonDefaults, targetOptions, toggleLabelPosition, tokenVariants, tooltipActionEvents, tooltipDelay, tooltipPlacements, triggerVariantOptions, truncateOptions, variantCssColorMap, viewModeOptions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "113.7.0",
3
+ "version": "114.0.1",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -7,13 +7,11 @@ button variant.
7
7
 
8
8
  A button link is a link that is styled to look like a button, semantically speaking it's a `<a>` tag
9
9
  with the necessary classes added to make it look like a button, it shares the same functionality as
10
- [`<gl-link>`]
10
+ [<gl-link>](?path=/docs/base-link--docs)
11
11
 
12
12
  > Note: Setting a `target` attribute without a `href` attribute, will not create any side effects.
13
13
  > Without the presence of a `href` attribute, this component will render a `<button>`.
14
14
 
15
- [`<gl-link>`]: ./?path=/story/base-link--default-link
16
-
17
15
  ## Icon-only button
18
16
 
19
17
  Icon-only buttons must have an accessible name.
@@ -23,6 +21,66 @@ You can provide one with the `aria-label` attribute, which is read out by screen
23
21
  <gl-button icon="close" aria-label="Close" />
24
22
  ```
25
23
 
24
+ ## Type
25
+
26
+ You can specify the button's type by setting the prop `type` to `button`, `submit` or `reset`.
27
+ The default type is `button`.
28
+
29
+ Note the `type` prop has no effect when either `href` or `to` props are set.
30
+
31
+ ## Sizing
32
+
33
+ Specify `small` or `medium` via the `size` prop. Defaults to `medium`.
34
+
35
+ ```html
36
+ <gl-button size="small">Small Button</gl-button>
37
+ <gl-button>Default Button (medium)</gl-button>
38
+ <gl-button size="medium">Medium Button</gl-button>
39
+ ```
40
+
41
+ ## Categories
42
+
43
+ Use the `category` prop to set the button category to `primary`, `secondary`, or `tertiary`.
44
+ Defaults to `primary`.
45
+
46
+ ## Variants
47
+
48
+ Use the `variant` prop to set the button variant to `default`, `confirm`, `danger`, `dashed`, or `link`.
49
+ Defaults to `default`.
50
+
51
+ ## Block level buttons
52
+
53
+ Create block level buttons, those that span the full width of a parent, by setting the `block`
54
+ prop.
55
+
56
+ ```html
57
+ <gl-button block>Block Level Button</gl-button>
58
+ ```
59
+
60
+ ## Disabled state
61
+
62
+ Set the `disabled` prop to disable button default functionality. `disabled` also works with buttons
63
+ rendered as `<a>` elements and `<router-link>` (i.e. with the `href` or `to` prop set).
64
+
65
+ ```html
66
+ <gl-button disabled>Disabled</gl-button>
67
+ ```
68
+
69
+ ## Router link support
70
+
71
+ Refer to the [Router support](?path=/docs/base-link--docs#router-links) reference docs for
72
+ the various supported `<router-link>` related props.
73
+
74
+ ## Accessibility
75
+
76
+ When the `href` prop is set to `'#'`, `<gl-button>` will render a link (`<a>`) element with attribute
77
+ `role="button"` set and appropriate keydown listeners (<kbd>Enter</kbd> and <kbd>Space</kbd>) so
78
+ that the link acts like a native HTML `<button>` for screen reader and keyboard-only users. When
79
+ disabled, the `aria-disabled="true"` attribute will be set on the `<a>` element.
80
+
81
+ When the `href` is set to any other value (or the `to` prop is used), `role="button"` will not be
82
+ added, nor will the keyboard event listeners be enabled.
83
+
26
84
  ## Label button
27
85
 
28
86
  A label button renders a non-interactive `span` styled as a button. This can be especially useful
@@ -1,79 +1,219 @@
1
1
  <!-- eslint-disable vue/multi-word-component-names -->
2
2
  <script>
3
- import { BButton } from '../../../vendor/bootstrap-vue/src/components/button/button';
3
+ import GlLink from '../link/link.vue';
4
4
  import {
5
5
  buttonCategoryOptions,
6
6
  buttonVariantOptions,
7
7
  buttonSizeOptions,
8
+ linkVariantUnstyled,
8
9
  } from '../../../utils/constants';
9
- import { logWarning } from '../../../utils/utils';
10
+ import { logWarning, stopEvent } from '../../../utils/utils';
10
11
  import { isSlotEmpty } from '../../../utils/is_slot_empty';
11
12
  import { SafeLinkMixin } from '../../mixins/safe_link_mixin';
13
+ import { isEvent } from '../../../vendor/bootstrap-vue/src/utils/inspect';
12
14
  import GlIcon from '../icon/icon.vue';
13
15
  import GlLoadingIcon from '../loading_icon/loading_icon.vue';
16
+ import { ENTER, SPACE } from '../new_dropdowns/constants';
14
17
 
15
18
  export default {
16
19
  name: 'GlButton',
17
20
  components: {
18
- BButton,
19
21
  GlIcon,
20
22
  GlLoadingIcon,
21
23
  },
22
24
  mixins: [SafeLinkMixin],
23
25
  props: {
26
+ /**
27
+ * Set the category of the button.
28
+ */
24
29
  category: {
25
30
  type: String,
26
31
  required: false,
27
32
  default: buttonCategoryOptions.primary,
28
33
  validator: (value) => Object.keys(buttonCategoryOptions).includes(value),
29
34
  },
35
+ /**
36
+ * Set the variant of the button.
37
+ */
30
38
  variant: {
31
39
  type: String,
32
40
  required: false,
33
41
  default: buttonVariantOptions.default,
34
42
  validator: (value) => Object.keys(buttonVariantOptions).includes(value),
35
43
  },
44
+ /**
45
+ * Specify the size of the button. Options are `small` and `medium`.
46
+ */
36
47
  size: {
37
48
  type: String,
38
49
  required: false,
39
50
  default: 'medium',
40
51
  validator: (value) => Object.keys(buttonSizeOptions).includes(value),
41
52
  },
53
+ /**
54
+ * Style the button as selected.
55
+ */
42
56
  selected: {
43
57
  type: Boolean,
44
58
  required: false,
45
59
  default: false,
46
60
  },
61
+ /**
62
+ * Specify an icon to render in the button.
63
+ */
47
64
  icon: {
48
65
  type: String,
49
66
  required: false,
50
67
  default: '',
51
68
  },
69
+ /**
70
+ * Render a non-interactive label button, a `span` styled as a button.
71
+ */
52
72
  label: {
53
73
  type: Boolean,
54
74
  required: false,
55
75
  default: false,
56
76
  },
77
+ /**
78
+ * Set the loading state of the button.
79
+ */
57
80
  loading: {
58
81
  type: Boolean,
59
82
  required: false,
60
83
  default: false,
61
84
  },
85
+ /**
86
+ * CSS classes to add to the button text.
87
+ */
62
88
  buttonTextClasses: {
63
89
  type: String,
64
90
  required: false,
65
91
  default: '',
66
92
  },
93
+ /**
94
+ * Renders a 100% width button (expands to the width of its parent container).
95
+ */
67
96
  block: {
68
97
  type: Boolean,
69
98
  required: false,
70
99
  default: false,
71
100
  },
101
+ /**
102
+ * Specify the HTML tag to render instead of the default tag.
103
+ */
104
+ tag: {
105
+ type: String,
106
+ required: false,
107
+ default: 'button',
108
+ },
109
+ /**
110
+ * The value to set the button's `type` attribute to. Can be one of `button`, `submit`, or `reset`.
111
+ */
112
+ type: {
113
+ type: String,
114
+ required: false,
115
+ default: 'button',
116
+ validator: (value) => ['button', 'submit', 'reset'].includes(value),
117
+ },
118
+ /**
119
+ * Disables the component's functionality and places it in a disabled state.
120
+ */
72
121
  disabled: {
73
122
  type: Boolean,
74
123
  required: false,
75
124
  default: false,
76
125
  },
126
+ /**
127
+ * Denotes the target URL of the link for standard links.
128
+ */
129
+ href: {
130
+ type: String,
131
+ required: false,
132
+ default: undefined,
133
+ },
134
+ /**
135
+ * Skips sanitization of href if true. This should be used sparingly.
136
+ * Consult security team before setting to true.
137
+ */
138
+ isUnsafeLink: {
139
+ type: Boolean,
140
+ required: false,
141
+ default: false,
142
+ },
143
+ /**
144
+ * Sets the 'rel' attribute on the rendered link.
145
+ */
146
+ rel: {
147
+ type: String,
148
+ required: false,
149
+ default: null,
150
+ },
151
+ /**
152
+ * Sets the 'target' attribute on the rendered link.
153
+ */
154
+ target: {
155
+ type: String,
156
+ required: false,
157
+ default: null,
158
+ },
159
+ /**
160
+ * Places the component in the active state with active styling
161
+ */
162
+ active: {
163
+ type: Boolean,
164
+ required: false,
165
+ default: false,
166
+ },
167
+ /**
168
+ * <router-link> prop: Denotes the target route of the link.
169
+ * When clicked, the value of the to prop will be passed to `router.push()` internally,
170
+ * so the value can be either a string or a Location descriptor object.
171
+ */
172
+ to: {
173
+ type: [Object, String],
174
+ required: false,
175
+ default: undefined,
176
+ },
177
+ /**
178
+ * <router-link> prop: Configure the active CSS class applied when the link is active.
179
+ */
180
+ activeClass: {
181
+ type: String,
182
+ required: false,
183
+ default: undefined,
184
+ },
185
+ /**
186
+ * <router-link> prop: Configure the active CSS class applied when the link is active with exact match.
187
+ */
188
+ exactActiveClass: {
189
+ type: String,
190
+ required: false,
191
+ default: undefined,
192
+ },
193
+ /**
194
+ * <router-link> prop: Setting the replace prop will call `router.replace()` instead of `router.push()`
195
+ * when clicked, so the navigation will not leave a history record.
196
+ */
197
+ replace: {
198
+ type: Boolean,
199
+ required: false,
200
+ default: false,
201
+ },
202
+ /**
203
+ * <nuxt-link> prop: To improve the responsiveness of your Nuxt.js applications, when the link will be displayed within the viewport,
204
+ * Nuxt.js will automatically prefetch the code splitted page. Setting `prefetch` to `true` or `false` will overwrite the default value of `router.prefetchLinks`
205
+ */
206
+ prefetch: {
207
+ type: Boolean,
208
+ required: false,
209
+ // Must be `null` to fall back to the value defined in the
210
+ // `nuxt.config.js` configuration file for `router.prefetchLinks`
211
+ // We convert `null` to `undefined`, so that Nuxt.js will use the
212
+ // compiled default
213
+ // Vue treats `undefined` as default of `false` for Boolean props,
214
+ // so we must set it as `null` here to be a true tri-state prop
215
+ default: null,
216
+ },
77
217
  },
78
218
  computed: {
79
219
  hasIcon() {
@@ -86,7 +226,7 @@ export default {
86
226
  return this.disabled || this.loading;
87
227
  },
88
228
  buttonClasses() {
89
- const classes = ['gl-button'];
229
+ const classes = ['btn', 'gl-button', `btn-${this.variant}`, `btn-${this.buttonSize}`];
90
230
 
91
231
  if (this.category !== buttonCategoryOptions.primary) {
92
232
  classes.push(`btn-${this.variant}-${this.category}`);
@@ -96,10 +236,12 @@ export default {
96
236
  'btn-icon': this.hasIconOnly,
97
237
  'button-ellipsis-horizontal': this.hasIconOnly && this.icon === 'ellipsis_h',
98
238
  selected: this.selected,
239
+ 'btn-block': this.displayBlock,
240
+ disabled: this.disabled,
99
241
  });
100
242
 
101
243
  if (this.label) {
102
- classes.push('btn', 'btn-label', `btn-${this.buttonSize}`);
244
+ classes.push('btn', 'btn-label');
103
245
  }
104
246
 
105
247
  return classes;
@@ -110,6 +252,83 @@ export default {
110
252
  displayBlock() {
111
253
  return !this.label && this.block;
112
254
  },
255
+ isLink() {
256
+ return this.href || this.to;
257
+ },
258
+ isHashLink() {
259
+ return this.isLink && this.href === '#';
260
+ },
261
+ isButton() {
262
+ return this.componentIs === 'button';
263
+ },
264
+ isNonStandardTag() {
265
+ if (this.label) {
266
+ return false;
267
+ }
268
+
269
+ return !this.isLink && !this.isButton;
270
+ },
271
+ tabindex() {
272
+ // When disabled remove links and non-standard tags from tab order
273
+ if (this.disabled) {
274
+ return this.isLink || this.isNonStandardTag ? '-1' : this.$attrs.tabindex;
275
+ }
276
+
277
+ // Add hash links and non-standard tags to tab order
278
+ return this.isNonStandardTag || this.isHashLink ? '0' : this.$attrs.tabindex;
279
+ },
280
+ computedPropsAndAttributes() {
281
+ const base = {
282
+ // Type only used for "real" buttons
283
+ type: this.isButton ? this.type : null,
284
+ // Disabled only set on "real" buttons
285
+ disabled: this.isButton ? this.isButtonDisabled : null,
286
+ // We add a role of button when the tag is not a link or button or when link has `href` of `#`
287
+ role: this.isNonStandardTag || this.isHashLink ? 'button' : this.$attrs?.role,
288
+ // We set the `aria-disabled` state for non-standard tags
289
+ ...(this.isNonStandardTag ? { 'aria-disabled': String(this.disabled) } : {}),
290
+ tabindex: this.tabindex,
291
+ };
292
+
293
+ if (this.isLink) {
294
+ return {
295
+ ...this.$attrs,
296
+ ...base,
297
+ variant: linkVariantUnstyled,
298
+ disabled: this.disabled,
299
+ href: this.href,
300
+ isUnsafeLink: this.isUnsafeLink,
301
+ rel: this.rel,
302
+ target: this.target,
303
+ active: this.active,
304
+ to: this.to,
305
+ activeClass: this.activeClass,
306
+ exactActiveClass: this.exactActiveClass,
307
+ replace: this.replace,
308
+ prefetch: this.prefetch,
309
+ };
310
+ }
311
+
312
+ return { ...this.$attrs, ...base };
313
+ },
314
+ computedListeners() {
315
+ return {
316
+ click: this.onClick,
317
+ keydown: this.onKeydown,
318
+ ...this.$listeners,
319
+ };
320
+ },
321
+ componentIs() {
322
+ if (this.label) {
323
+ return 'span';
324
+ }
325
+
326
+ if (this.isLink) {
327
+ return GlLink;
328
+ }
329
+
330
+ return this.tag;
331
+ },
113
332
  },
114
333
  mounted() {
115
334
  // eslint-disable-next-line @gitlab/vue-prefer-dollar-scopedslots
@@ -120,20 +339,36 @@ export default {
120
339
  );
121
340
  }
122
341
  },
342
+ methods: {
343
+ onKeydown(event) {
344
+ // Skip if disabled
345
+ // Add SPACE keydown handler for link has `href` of `#`
346
+ // Add ENTER handler for non-standard tags
347
+ if (!this.disabled && (this.isNonStandardTag || this.isHashLink)) {
348
+ const { code } = event;
349
+
350
+ if (code === SPACE || (code === ENTER && this.isNonStandardTag)) {
351
+ const target = event.currentTarget || event.target;
352
+ stopEvent(event, { propagation: false });
353
+ target.click();
354
+ }
355
+ }
356
+ },
357
+ onClick(event) {
358
+ if (this.disabled && isEvent(event)) {
359
+ stopEvent(event);
360
+ }
361
+ },
362
+ },
123
363
  };
124
364
  </script>
125
365
  <template>
126
366
  <component
127
- :is="label ? 'span' : 'b-button'"
128
- v-bind="$attrs"
367
+ :is="componentIs"
368
+ v-bind="computedPropsAndAttributes"
129
369
  v-safe-link:[safeLinkConfig]
130
- :block="displayBlock"
131
- :target="target"
132
- :variant="variant"
133
- :size="buttonSize"
134
- :disabled="isButtonDisabled"
135
370
  :class="buttonClasses"
136
- v-on="$listeners"
371
+ v-on="computedListeners"
137
372
  >
138
373
  <gl-loading-icon v-if="loading" inline class="gl-button-icon gl-button-loading-indicator" />
139
374
  <gl-icon v-if="hasIcon && !(hasIconOnly && loading)" class="gl-button-icon" :name="icon" />
@@ -11,9 +11,13 @@ import {
11
11
  generateBarSeries,
12
12
  generateLineSeries,
13
13
  } from '../../../utils/charts/config';
14
- import { CHART_TYPE_LINE, HEIGHT_AUTO_CLASSES } from '../../../utils/charts/constants';
14
+ import {
15
+ CHART_TYPE_LINE,
16
+ HEIGHT_AUTO_CLASSES,
17
+ CHART_DEFAULT_SERIES_STACK,
18
+ CHART_DEFAULT_SERIES_SECONDARY_STACK,
19
+ } from '../../../utils/charts/constants';
15
20
  import { colorFromDefaultPalette } from '../../../utils/charts/theme';
16
- import { columnOptions } from '../../../utils/constants';
17
21
  import Chart from '../chart/chart.vue';
18
22
  import ChartTooltip from '../shared/tooltip/tooltip.vue';
19
23
 
@@ -90,7 +94,7 @@ export default {
90
94
  return Boolean(this.secondaryData.length);
91
95
  },
92
96
  barSeries() {
93
- return this.bars.map(({ name, data, stack }, index) => {
97
+ return this.bars.map(({ name, data, stack = CHART_DEFAULT_SERIES_STACK }, index) => {
94
98
  const color = colorFromDefaultPalette(index);
95
99
  return generateBarSeries({ name, data, stack, color });
96
100
  });
@@ -104,12 +108,14 @@ export default {
104
108
  },
105
109
  secondarySeries() {
106
110
  const offset = this.bars.length + this.lines.length;
107
- return this.secondaryData.map(({ name, data, type, stack = columnOptions.tiled }, index) => {
108
- const color = colorFromDefaultPalette(offset + index);
109
- return type === CHART_TYPE_LINE
110
- ? generateLineSeries({ color, name, data, yAxisIndex: 1 })
111
- : generateBarSeries({ color, name, data, yAxisIndex: 1, stack });
112
- });
111
+ return this.secondaryData.map(
112
+ ({ name, data, type, stack = CHART_DEFAULT_SERIES_SECONDARY_STACK }, index) => {
113
+ const color = colorFromDefaultPalette(offset + index);
114
+ return type === CHART_TYPE_LINE
115
+ ? generateLineSeries({ color, name, data, yAxisIndex: 1 })
116
+ : generateBarSeries({ color, name, data, yAxisIndex: 1, stack });
117
+ }
118
+ );
113
119
  },
114
120
  series() {
115
121
  return [...this.barSeries, ...this.lineSeries, ...this.secondarySeries];
@@ -19,9 +19,11 @@ import {
19
19
  LEGEND_MAX_TEXT,
20
20
  CHART_TYPE_LINE,
21
21
  HEIGHT_AUTO_CLASSES,
22
+ CHART_DEFAULT_SERIES_STACK,
23
+ CHART_DEFAULT_SERIES_SECONDARY_STACK,
22
24
  } from '../../../utils/charts/constants';
23
25
  import { colorFromDefaultPalette } from '../../../utils/charts/theme';
24
- import { columnOptions } from '../../../utils/constants';
26
+ import { stackedPresentationOptions } from '../../../utils/constants';
25
27
  import TooltipDefaultFormat from '../shared/tooltip/tooltip_default_format/tooltip_default_format.vue';
26
28
  import Chart from '../chart/chart.vue';
27
29
  import ChartLegend from '../legend/legend.vue';
@@ -68,8 +70,8 @@ export default {
68
70
  presentation: {
69
71
  type: String,
70
72
  required: false,
71
- default: 'stacked',
72
- validator: (value) => ['stacked', 'tiled'].indexOf(value) !== -1,
73
+ default: stackedPresentationOptions.stacked,
74
+ validator: (value) => Object.values(stackedPresentationOptions).indexOf(value) !== -1,
73
75
  },
74
76
  groupBy: {
75
77
  type: Array,
@@ -167,10 +169,18 @@ export default {
167
169
  return Boolean(this.secondaryData.length);
168
170
  },
169
171
  barSeries() {
170
- return this.bars.map(({ name, data }, index) => {
171
- const stack = this.presentation === 'stacked' ? this.groupBy : null;
172
+ return this.bars.map(({ name, data, stack }, index) => {
172
173
  const color = this.getColor(index);
173
- return generateBarSeries({ stack, name, data, color });
174
+ const seriesStack =
175
+ this.presentation === stackedPresentationOptions.stacked
176
+ ? stack || CHART_DEFAULT_SERIES_STACK
177
+ : null;
178
+ return generateBarSeries({
179
+ stack: seriesStack,
180
+ name,
181
+ data,
182
+ color,
183
+ });
174
184
  });
175
185
  },
176
186
  lineSeries() {
@@ -182,11 +192,21 @@ export default {
182
192
  },
183
193
  secondarySeries() {
184
194
  const offset = this.bars.length + this.lines.length;
185
- return this.secondaryData.map(({ name, data, type, stack = columnOptions.tiled }, index) => {
195
+ return this.secondaryData.map(({ name, data, type, stack }, index) => {
186
196
  const color = this.getColor(offset + index);
197
+ const seriesStack =
198
+ this.presentation === stackedPresentationOptions.stacked
199
+ ? stack || CHART_DEFAULT_SERIES_SECONDARY_STACK
200
+ : null;
187
201
  return type === CHART_TYPE_LINE
188
202
  ? generateLineSeries({ color, name, data, yAxisIndex: 1 })
189
- : generateBarSeries({ color, name, data, yAxisIndex: 1, stack });
203
+ : generateBarSeries({
204
+ color,
205
+ name,
206
+ data,
207
+ stack: seriesStack,
208
+ yAxisIndex: 1,
209
+ });
190
210
  });
191
211
  },
192
212
  series() {
@@ -2,7 +2,6 @@ import castArray from 'lodash/castArray';
2
2
  import merge from 'lodash/merge';
3
3
  import { BLUE_500 } from '../../tokens/build/js/tokens';
4
4
  import { GlBreakpointInstance } from '../breakpoints';
5
- import { columnOptions } from '../constants';
6
5
  import { areDatesEqual } from '../datetime_utility';
7
6
  import { engineeringNotation } from '../number_utils';
8
7
  import { hexToRgba } from '../utils';
@@ -395,13 +394,7 @@ export const generateAnnotationSeries = (annotations, yAxisIndex = 1) => {
395
394
  * @param {number} [options.yAxisIndex] - specifies the yAxis to use (if there are multiple)
396
395
  * @returns {Object} Bar chart series
397
396
  */
398
- export const generateBarSeries = ({
399
- name,
400
- color,
401
- data = [],
402
- stack = columnOptions.stacked,
403
- yAxisIndex = 0,
404
- }) => ({
397
+ export const generateBarSeries = ({ name, color, stack, data = [], yAxisIndex = 0 }) => ({
405
398
  type: CHART_TYPE_BAR,
406
399
  name,
407
400
  data,
@@ -58,6 +58,10 @@ export const arrowSymbol = 'path://m5 229 5 8h-10z';
58
58
  export const CHART_TYPE_BAR = 'bar';
59
59
  export const CHART_TYPE_LINE = 'line';
60
60
 
61
+ // Constants for "series.stack" option, series with the same value stack on top of each other
62
+ export const CHART_DEFAULT_SERIES_STACK = 'default-series-stack';
63
+ export const CHART_DEFAULT_SERIES_SECONDARY_STACK = 'default-series-secondary-stack';
64
+
61
65
  // Constants for height "auto"
62
66
  export const HEIGHT_AUTO_CLASSES = 'gl-chart-h-auto gl-flex gl-flex-col gl-h-full';
63
67
  export const HEIGHT_AUTO_HORIZONTAL_LAYOUT_CLASSES = 'gl-flex gl-h-full';
@@ -244,7 +244,7 @@ export const popoverPlacements = {
244
244
  left: 'left',
245
245
  };
246
246
 
247
- export const columnOptions = {
247
+ export const stackedPresentationOptions = {
248
248
  stacked: 'stacked',
249
249
  tiled: 'tiled',
250
250
  };