@gitlab/ui 122.4.0 → 122.6.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.
Files changed (44) hide show
  1. package/dist/components/charts/bar/bar.js +3 -58
  2. package/dist/components/charts/shared/tooltip/tooltip.js +26 -7
  3. package/dist/components/dashboards/dashboard_panel/dashboard_panel.js +12 -3
  4. package/dist/index.css +2 -2
  5. package/dist/index.css.map +1 -1
  6. package/dist/tailwind.css +1 -1
  7. package/dist/tailwind.css.map +1 -1
  8. package/dist/tokens/build/js/tokens.dark.js +33 -1
  9. package/dist/tokens/build/js/tokens.js +33 -1
  10. package/dist/tokens/css/tokens.css +32 -0
  11. package/dist/tokens/css/tokens.dark.css +32 -0
  12. package/dist/tokens/docs/tokens-tailwind-docs.dark.json +802 -0
  13. package/dist/tokens/docs/tokens-tailwind-docs.json +802 -0
  14. package/dist/tokens/figma/constants.tokens.json +226 -0
  15. package/dist/tokens/js/tokens.dark.js +32 -0
  16. package/dist/tokens/js/tokens.js +32 -0
  17. package/dist/tokens/json/tokens.dark.json +770 -0
  18. package/dist/tokens/json/tokens.json +770 -0
  19. package/dist/tokens/scss/_tokens.dark.scss +32 -0
  20. package/dist/tokens/scss/_tokens.scss +32 -0
  21. package/dist/tokens/scss/_tokens_custom_properties.scss +32 -0
  22. package/dist/tokens/tailwind/tokens.cjs +2 -0
  23. package/dist/utils/charts/config.js +26 -7
  24. package/package.json +1 -1
  25. package/src/components/charts/bar/bar.vue +14 -55
  26. package/src/components/charts/shared/tooltip/tooltip.vue +29 -6
  27. package/src/components/dashboards/dashboard_panel/dashboard_panel.vue +33 -10
  28. package/src/scss/variables.scss +0 -29
  29. package/src/tokens/build/css/tokens.css +32 -0
  30. package/src/tokens/build/css/tokens.dark.css +32 -0
  31. package/src/tokens/build/docs/tokens-tailwind-docs.dark.json +802 -0
  32. package/src/tokens/build/docs/tokens-tailwind-docs.json +802 -0
  33. package/src/tokens/build/figma/constants.tokens.json +226 -0
  34. package/src/tokens/build/js/tokens.dark.js +32 -0
  35. package/src/tokens/build/js/tokens.js +32 -0
  36. package/src/tokens/build/json/tokens.dark.json +770 -0
  37. package/src/tokens/build/json/tokens.json +770 -0
  38. package/src/tokens/build/scss/_tokens.dark.scss +32 -0
  39. package/src/tokens/build/scss/_tokens.scss +32 -0
  40. package/src/tokens/build/scss/_tokens_custom_properties.scss +32 -0
  41. package/src/tokens/build/tailwind/tokens.cjs +35 -0
  42. package/src/tokens/constant/spacing_scale.tokens.json +228 -0
  43. package/src/utils/charts/config.js +22 -11
  44. package/tailwind.defaults.js +1 -38
@@ -237,6 +237,38 @@ $gl-line-height-36: 2.25rem;
237
237
  $gl-line-height-42: 2.625rem;
238
238
  $gl-line-height-44: 2.75rem;
239
239
  $gl-line-height-52: 3.25rem;
240
+ $gl-spacing-scale-0: 0;
241
+ $gl-spacing-scale-1: 0.125rem;
242
+ $gl-spacing-scale-2: 0.25rem;
243
+ $gl-spacing-scale-3: 0.5rem;
244
+ $gl-spacing-scale-4: 0.75rem;
245
+ $gl-spacing-scale-5: 1rem;
246
+ $gl-spacing-scale-6: 1.5rem;
247
+ $gl-spacing-scale-7: 2rem;
248
+ $gl-spacing-scale-8: 2.5rem;
249
+ $gl-spacing-scale-9: 3rem;
250
+ $gl-spacing-scale-10: 3.5rem;
251
+ $gl-spacing-scale-11: 4rem;
252
+ $gl-spacing-scale-12: 5rem;
253
+ $gl-spacing-scale-13: 6rem;
254
+ $gl-spacing-scale-15: 7.5rem;
255
+ $gl-spacing-scale-18: 9rem;
256
+ $gl-spacing-scale-20: 10rem;
257
+ $gl-spacing-scale-26: 13rem;
258
+ $gl-spacing-scale-28: 14rem;
259
+ $gl-spacing-scale-30: 15rem;
260
+ $gl-spacing-scale-31: 15.5rem;
261
+ $gl-spacing-scale-33: 16.5rem;
262
+ $gl-spacing-scale-34: 17rem;
263
+ $gl-spacing-scale-37: 18.5rem;
264
+ $gl-spacing-scale-48: 24rem;
265
+ $gl-spacing-scale-62: 31rem;
266
+ $gl-spacing-scale-75: 37.5rem;
267
+ $gl-spacing-scale-80: 40rem;
268
+ $gl-spacing-scale-88: 44rem;
269
+ $gl-spacing-scale-px: 1px;
270
+ $gl-spacing-scale-2-5: 0.375rem;
271
+ $gl-spacing-scale-11-5: 4.5rem;
240
272
  $gl-avatar-fallback-background-color-red: #fcb5aa3d; // Red background for avatar fallback with no particular meaning.
241
273
  $gl-avatar-fallback-background-color-purple: #cbbbf23d; // Purple background for avatar fallback with no particular meaning.
242
274
  $gl-avatar-fallback-background-color-blue: #9dc7f13d; // Blue background for avatar fallback with no particular meaning.
@@ -237,6 +237,38 @@ $gl-line-height-36: 2.25rem;
237
237
  $gl-line-height-42: 2.625rem;
238
238
  $gl-line-height-44: 2.75rem;
239
239
  $gl-line-height-52: 3.25rem;
240
+ $gl-spacing-scale-0: 0;
241
+ $gl-spacing-scale-1: 0.125rem;
242
+ $gl-spacing-scale-2: 0.25rem;
243
+ $gl-spacing-scale-3: 0.5rem;
244
+ $gl-spacing-scale-4: 0.75rem;
245
+ $gl-spacing-scale-5: 1rem;
246
+ $gl-spacing-scale-6: 1.5rem;
247
+ $gl-spacing-scale-7: 2rem;
248
+ $gl-spacing-scale-8: 2.5rem;
249
+ $gl-spacing-scale-9: 3rem;
250
+ $gl-spacing-scale-10: 3.5rem;
251
+ $gl-spacing-scale-11: 4rem;
252
+ $gl-spacing-scale-12: 5rem;
253
+ $gl-spacing-scale-13: 6rem;
254
+ $gl-spacing-scale-15: 7.5rem;
255
+ $gl-spacing-scale-18: 9rem;
256
+ $gl-spacing-scale-20: 10rem;
257
+ $gl-spacing-scale-26: 13rem;
258
+ $gl-spacing-scale-28: 14rem;
259
+ $gl-spacing-scale-30: 15rem;
260
+ $gl-spacing-scale-31: 15.5rem;
261
+ $gl-spacing-scale-33: 16.5rem;
262
+ $gl-spacing-scale-34: 17rem;
263
+ $gl-spacing-scale-37: 18.5rem;
264
+ $gl-spacing-scale-48: 24rem;
265
+ $gl-spacing-scale-62: 31rem;
266
+ $gl-spacing-scale-75: 37.5rem;
267
+ $gl-spacing-scale-80: 40rem;
268
+ $gl-spacing-scale-88: 44rem;
269
+ $gl-spacing-scale-px: 1px;
270
+ $gl-spacing-scale-2-5: 0.375rem;
271
+ $gl-spacing-scale-11-5: 4.5rem;
240
272
  $gl-avatar-fallback-background-color-red: #fcb5aa3d; // Red background for avatar fallback with no particular meaning.
241
273
  $gl-avatar-fallback-background-color-purple: #cbbbf23d; // Purple background for avatar fallback with no particular meaning.
242
274
  $gl-avatar-fallback-background-color-blue: #9dc7f13d; // Blue background for avatar fallback with no particular meaning.
@@ -238,6 +238,38 @@ $gl-line-height-36: var(--gl-line-height-36);
238
238
  $gl-line-height-42: var(--gl-line-height-42);
239
239
  $gl-line-height-44: var(--gl-line-height-44);
240
240
  $gl-line-height-52: var(--gl-line-height-52);
241
+ $gl-spacing-scale-0: var(--gl-spacing-scale-0);
242
+ $gl-spacing-scale-1: var(--gl-spacing-scale-1);
243
+ $gl-spacing-scale-2: var(--gl-spacing-scale-2);
244
+ $gl-spacing-scale-3: var(--gl-spacing-scale-3);
245
+ $gl-spacing-scale-4: var(--gl-spacing-scale-4);
246
+ $gl-spacing-scale-5: var(--gl-spacing-scale-5);
247
+ $gl-spacing-scale-6: var(--gl-spacing-scale-6);
248
+ $gl-spacing-scale-7: var(--gl-spacing-scale-7);
249
+ $gl-spacing-scale-8: var(--gl-spacing-scale-8);
250
+ $gl-spacing-scale-9: var(--gl-spacing-scale-9);
251
+ $gl-spacing-scale-10: var(--gl-spacing-scale-10);
252
+ $gl-spacing-scale-11: var(--gl-spacing-scale-11);
253
+ $gl-spacing-scale-12: var(--gl-spacing-scale-12);
254
+ $gl-spacing-scale-13: var(--gl-spacing-scale-13);
255
+ $gl-spacing-scale-15: var(--gl-spacing-scale-15);
256
+ $gl-spacing-scale-18: var(--gl-spacing-scale-18);
257
+ $gl-spacing-scale-20: var(--gl-spacing-scale-20);
258
+ $gl-spacing-scale-26: var(--gl-spacing-scale-26);
259
+ $gl-spacing-scale-28: var(--gl-spacing-scale-28);
260
+ $gl-spacing-scale-30: var(--gl-spacing-scale-30);
261
+ $gl-spacing-scale-31: var(--gl-spacing-scale-31);
262
+ $gl-spacing-scale-33: var(--gl-spacing-scale-33);
263
+ $gl-spacing-scale-34: var(--gl-spacing-scale-34);
264
+ $gl-spacing-scale-37: var(--gl-spacing-scale-37);
265
+ $gl-spacing-scale-48: var(--gl-spacing-scale-48);
266
+ $gl-spacing-scale-62: var(--gl-spacing-scale-62);
267
+ $gl-spacing-scale-75: var(--gl-spacing-scale-75);
268
+ $gl-spacing-scale-80: var(--gl-spacing-scale-80);
269
+ $gl-spacing-scale-88: var(--gl-spacing-scale-88);
270
+ $gl-spacing-scale-px: var(--gl-spacing-scale-px);
271
+ $gl-spacing-scale-2-5: var(--gl-spacing-scale-2-5);
272
+ $gl-spacing-scale-11-5: var(--gl-spacing-scale-11-5);
241
273
  $gl-alert-neutral-title-color: var(--gl-alert-neutral-title-color);
242
274
  $gl-alert-neutral-background-color: var(--gl-alert-neutral-background-color);
243
275
  $gl-alert-neutral-border-top-color: var(--gl-alert-neutral-border-top-color);
@@ -20,6 +20,7 @@
20
20
  const feedbackBackgroundColors = {"feedback-strong":"var(--gl-feedback-strong-background-color, var(--gl-color-neutral-800, #3a383f))","feedback-neutral":"var(--gl-feedback-neutral-background-color, var(--gl-color-neutral-50, #ececef))","feedback-info":"var(--gl-feedback-info-background-color, var(--gl-color-blue-50, #e9f3fc))","feedback-success":"var(--gl-feedback-success-background-color, var(--gl-color-green-50, #ecf4ee))","feedback-warning":"var(--gl-feedback-warning-background-color, var(--gl-color-orange-50, #fdf1dd))","feedback-danger":"var(--gl-feedback-danger-background-color, var(--gl-color-red-50, #fcf1ef))"};
21
21
  const feedbackTextColors = {"feedback-strong":"var(--gl-feedback-strong-text-color, var(--gl-color-neutral-0, #fff))","feedback-neutral":"var(--gl-feedback-neutral-text-color, var(--gl-color-neutral-700, #4c4b51))","feedback-info":"var(--gl-feedback-info-text-color, var(--gl-color-blue-700, #2f5ca0))","feedback-success":"var(--gl-feedback-success-text-color, var(--gl-color-green-700, #306440))","feedback-warning":"var(--gl-feedback-warning-text-color, var(--gl-color-orange-700, #894b16))","feedback-danger":"var(--gl-feedback-danger-text-color, var(--gl-color-red-700, #a32c12))"};
22
22
  const feedbackIconColors = {"feedback-strong":"var(--gl-feedback-strong-icon-color, var(--gl-color-neutral-0, #fff))","feedback-neutral":"var(--gl-feedback-neutral-icon-color, var(--gl-color-neutral-600, #626168))","feedback-info":"var(--gl-feedback-info-icon-color, var(--gl-color-blue-600, #2f68b4))","feedback-success":"var(--gl-feedback-success-icon-color, var(--gl-color-green-600, #2f7549))","feedback-warning":"var(--gl-feedback-warning-icon-color, var(--gl-color-orange-600, #995715))","feedback-danger":"var(--gl-feedback-danger-icon-color, var(--gl-color-red-600, #c02f12))"};
23
+ const spacingScale = {"0":"var(--gl-spacing-scale-0, 0)","1":"var(--gl-spacing-scale-1, 0.125rem)","2":"var(--gl-spacing-scale-2, 0.25rem)","3":"var(--gl-spacing-scale-3, 0.5rem)","4":"var(--gl-spacing-scale-4, 0.75rem)","5":"var(--gl-spacing-scale-5, 1rem)","6":"var(--gl-spacing-scale-6, 1.5rem)","7":"var(--gl-spacing-scale-7, 2rem)","8":"var(--gl-spacing-scale-8, 2.5rem)","9":"var(--gl-spacing-scale-9, 3rem)","10":"var(--gl-spacing-scale-10, 3.5rem)","11":"var(--gl-spacing-scale-11, 4rem)","12":"var(--gl-spacing-scale-12, 5rem)","13":"var(--gl-spacing-scale-13, 6rem)","15":"var(--gl-spacing-scale-15, 7.5rem)","18":"var(--gl-spacing-scale-18, 9rem)","20":"var(--gl-spacing-scale-20, 10rem)","26":"var(--gl-spacing-scale-26, 13rem)","28":"var(--gl-spacing-scale-28, 14rem)","30":"var(--gl-spacing-scale-30, 15rem)","31":"var(--gl-spacing-scale-31, 15.5rem)","33":"var(--gl-spacing-scale-33, 16.5rem)","34":"var(--gl-spacing-scale-34, 17rem)","37":"var(--gl-spacing-scale-37, 18.5rem)","48":"var(--gl-spacing-scale-48, 24rem)","62":"var(--gl-spacing-scale-62, 31rem)","75":"var(--gl-spacing-scale-75, 37.5rem)","80":"var(--gl-spacing-scale-80, 40rem)","88":"var(--gl-spacing-scale-88, 44rem)","px":"var(--gl-spacing-scale-px, 1px)","2-5":"var(--gl-spacing-scale-2-5, 0.375rem)","11-5":"var(--gl-spacing-scale-11-5, 4.5rem)"};
23
24
 
24
25
  const colors = {
25
26
  inherit: 'inherit',
@@ -99,5 +100,6 @@
99
100
  outlineColor,
100
101
  textColor,
101
102
  fill,
103
+ spacing: spacingScale,
102
104
  }
103
105
 
@@ -468,24 +468,44 @@ const generateLineSeries = _ref5 => {
468
468
  }
469
469
  };
470
470
  };
471
+ const getTooltipAxisConfig = dimensionAxis => {
472
+ if (!['xAxis', 'yAxis'].includes(dimensionAxis)) {
473
+ throw new Error(`\`dimensionAxis\` must be "xAxis" or "yAxis", received ${dimensionAxis}`);
474
+ }
475
+ if (dimensionAxis === 'xAxis') {
476
+ return {
477
+ dimensionIndex: 0,
478
+ metricIndex: 1,
479
+ valueAxis: 'yAxis'
480
+ };
481
+ }
482
+ return {
483
+ dimensionIndex: 1,
484
+ metricIndex: 0,
485
+ valueAxis: 'xAxis'
486
+ };
487
+ };
471
488
  const getTooltipTitle = function () {
472
489
  let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
473
490
  let titleAxisName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
491
+ let dimensionIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
474
492
  if (!params) return '';
475
493
  const title = params.seriesData.reduce((acc, _ref6) => {
476
494
  let {
477
495
  value
478
496
  } = _ref6;
479
- if (acc.includes(value[0])) {
497
+ const dimension = value[dimensionIndex];
498
+ if (acc.includes(dimension)) {
480
499
  return acc;
481
500
  }
482
- return [...acc, value[0]];
501
+ return [...acc, dimension];
483
502
  }, []).join(', ');
484
503
  return titleAxisName ? `${title} (${titleAxisName})` : title;
485
504
  };
486
505
  const getTooltipContent = function () {
487
506
  let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
488
507
  let valueAxisName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
508
+ let metricIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
489
509
  if (!params) {
490
510
  return {};
491
511
  }
@@ -494,12 +514,12 @@ const getTooltipContent = function () {
494
514
  } = params;
495
515
  if (seriesData.length === 1) {
496
516
  const {
497
- value: [, yValue],
517
+ value,
498
518
  seriesName
499
519
  } = seriesData[0];
500
520
  return {
501
521
  [valueAxisName || seriesName]: {
502
- value: yValue,
522
+ value: value[metricIndex],
503
523
  color: '' // ignore color when showing a single series
504
524
  }
505
525
  };
@@ -510,9 +530,8 @@ const getTooltipContent = function () {
510
530
  seriesName,
511
531
  color
512
532
  } = _ref7;
513
- const yValue = value[1];
514
533
  acc[seriesName] = {
515
- value: yValue,
534
+ value: value[metricIndex],
516
535
  color
517
536
  };
518
537
  return acc;
@@ -560,4 +579,4 @@ const getDefaultTooltipContent = function (params) {
560
579
  };
561
580
  };
562
581
 
563
- export { annotationsYAxisCoords, axes, dataZoomAdjustments, defaultAreaOpacity, defaultChartOptions, defaultFontSize, defaultHeight, defaultWidth, generateAnnotationSeries, generateBarSeries, generateLineSeries, getAnnotationsConfig, getDataZoomConfig, getDefaultTooltipContent, getThresholdConfig, getTooltipContent, getTooltipTitle, grid, gridWithSecondaryYAxis, lineStyle, mergeAnnotationAxisToOptions, mergeSeriesToOptions, parseAnnotations, symbolSize, toolboxHeight, validRenderers, xAxis, yAxis };
582
+ export { annotationsYAxisCoords, axes, dataZoomAdjustments, defaultAreaOpacity, defaultChartOptions, defaultFontSize, defaultHeight, defaultWidth, generateAnnotationSeries, generateBarSeries, generateLineSeries, getAnnotationsConfig, getDataZoomConfig, getDefaultTooltipContent, getThresholdConfig, getTooltipAxisConfig, getTooltipContent, getTooltipTitle, grid, gridWithSecondaryYAxis, lineStyle, mergeAnnotationAxisToOptions, mergeSeriesToOptions, parseAnnotations, symbolSize, toolboxHeight, validRenderers, xAxis, yAxis };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "122.4.0",
3
+ "version": "122.6.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -7,7 +7,6 @@ import { CHART_DEFAULT_SERIES_STACK, HEIGHT_AUTO_CLASSES } from '../../../utils/
7
7
  import { colorFromDefaultPalette } from '../../../utils/charts/theme';
8
8
  import { engineeringNotation } from '../../../utils/number_utils';
9
9
  import { hexToRgba } from '../../../utils/utils';
10
- import TooltipDefaultFormat from '../shared/tooltip/tooltip_default_format/tooltip_default_format.vue';
11
10
  import Chart from '../chart/chart.vue';
12
11
  import ChartTooltip from '../shared/tooltip/tooltip.vue';
13
12
  import { stackedPresentationOptions } from '../../../utils/constants';
@@ -64,7 +63,6 @@ export default {
64
63
  components: {
65
64
  Chart,
66
65
  ChartTooltip,
67
- TooltipDefaultFormat,
68
66
  },
69
67
  inheritAttrs: false,
70
68
  props: {
@@ -113,8 +111,6 @@ export default {
113
111
  data() {
114
112
  return {
115
113
  chart: null,
116
- tooltipTitle: '',
117
- tooltipContent: {},
118
114
  };
119
115
  },
120
116
  computed: {
@@ -162,13 +158,6 @@ export default {
162
158
  axisTick: {
163
159
  show: true,
164
160
  },
165
- axisPointer: {
166
- show: true,
167
- type: 'none',
168
- label: {
169
- formatter: this.onLabelChange,
170
- },
171
- },
172
161
  },
173
162
  },
174
163
  this.option,
@@ -187,46 +176,6 @@ export default {
187
176
  this.chart = chart;
188
177
  this.$emit('created', chart);
189
178
  },
190
- onLabelChange(params) {
191
- const { yLabels, tooltipContent } = this.getTooltipContent(params, this.xAxisTitle);
192
-
193
- this.$set(this, 'tooltipContent', tooltipContent);
194
- this.tooltipTitle = yLabels.join(', ');
195
- },
196
- /**
197
- * For bar charts, the tooltip should be against x-axis values.
198
- * This method will be removed after https://gitlab.com/gitlab-org/gitlab-ui/-/issues/674
199
- *
200
- * @param {Object} params series data
201
- * @param {String} xAxisTitle x-axis title
202
- * @returns {Object} tooltip title and content
203
- */
204
- getTooltipContent(params, xAxisTitle = null) {
205
- const seriesDataLength = params.seriesData.length;
206
- const { yLabels, tooltipContent } = params.seriesData.reduce(
207
- (acc, chartItem) => {
208
- const [value, title] = chartItem.value || [];
209
- // The x axis title is used instead of y axis
210
- const seriesName =
211
- seriesDataLength === 1 && xAxisTitle ? xAxisTitle : chartItem.seriesName;
212
- const color = seriesDataLength === 1 ? '' : chartItem.color;
213
- acc.tooltipContent[seriesName] = {
214
- value,
215
- color,
216
- };
217
- if (!acc.yLabels.includes(title)) {
218
- acc.yLabels.push(title);
219
- }
220
- return acc;
221
- },
222
- {
223
- yLabels: [],
224
- tooltipContent: {},
225
- },
226
- );
227
-
228
- return { yLabels, tooltipContent };
229
- },
230
179
  },
231
180
  HEIGHT_AUTO_CLASSES,
232
181
  };
@@ -242,11 +191,21 @@ export default {
242
191
  v-on="$listeners"
243
192
  @created="onCreated"
244
193
  />
245
- <chart-tooltip v-if="chart" :chart="chart">
246
- <template #title>
247
- <div>{{ tooltipTitle }} ({{ yAxisTitle }})</div>
194
+ <chart-tooltip
195
+ v-if="chart"
196
+ :chart="chart"
197
+ :use-default-tooltip-formatter="true"
198
+ dimension-axis="yAxis"
199
+ >
200
+ <template v-if="$scopedSlots['tooltip-title']" #title="scope">
201
+ <slot name="tooltip-title" v-bind="scope"></slot>
202
+ </template>
203
+ <template v-if="$scopedSlots['tooltip-content']" #default="scope">
204
+ <slot name="tooltip-content" v-bind="scope"></slot>
205
+ </template>
206
+ <template v-if="$scopedSlots['tooltip-value']" #tooltip-value="scope">
207
+ <slot name="tooltip-value" v-bind="scope"></slot>
248
208
  </template>
249
- <tooltip-default-format :tooltip-content="tooltipContent" />
250
209
  </chart-tooltip>
251
210
  </div>
252
211
  </template>
@@ -5,7 +5,11 @@ import { uid, debounceByAnimationFrame } from '../../../../utils/utils';
5
5
  import GlPopover from '../../../base/popover/popover.vue';
6
6
  import { popoverPlacements } from '../../../../utils/constants';
7
7
  import { TOOLTIP_LEFT_OFFSET, TOOLTIP_TOP_OFFSET } from '../../../../utils/charts/constants';
8
- import { getTooltipTitle, getTooltipContent } from '../../../../utils/charts/config';
8
+ import {
9
+ getTooltipTitle,
10
+ getTooltipContent,
11
+ getTooltipAxisConfig,
12
+ } from '../../../../utils/charts/config';
9
13
 
10
14
  import TooltipDefaultFormat from './tooltip_default_format/tooltip_default_format.vue';
11
15
 
@@ -127,6 +131,20 @@ export default {
127
131
  required: false,
128
132
  default: false,
129
133
  },
134
+ /**
135
+ * Specifies which axis contains the dimensional data used in the tooltip.
136
+ * When `xAxis`, x-axis value becomes the tooltip's title and
137
+ * y-axis values become the tooltip's values.
138
+ * When `yAxis`, roles are reversed.
139
+ */
140
+ dimensionAxis: {
141
+ type: String,
142
+ required: false,
143
+ default: 'xAxis',
144
+ validator(value) {
145
+ return value === 'xAxis' || value === 'yAxis';
146
+ },
147
+ },
130
148
  },
131
149
  data() {
132
150
  return {
@@ -208,17 +226,22 @@ export default {
208
226
 
209
227
  if (this.useDefaultTooltipFormatter) {
210
228
  this.chart.setOption({
211
- xAxis: {
229
+ [this.dimensionAxis]: {
212
230
  axisPointer: {
213
231
  show: true,
214
232
  label: {
215
233
  formatter: (params) => {
216
234
  const options = this.chart.getOption();
217
- const titleAxisName = options.xAxis?.[0]?.name;
218
- const valueAxisName = options.yAxis?.[0]?.name;
219
235
 
220
- this.title = getTooltipTitle(params, titleAxisName);
221
- this.content = getTooltipContent(params, valueAxisName);
236
+ const { dimensionIndex, metricIndex, valueAxis } = getTooltipAxisConfig(
237
+ this.dimensionAxis,
238
+ );
239
+
240
+ const titleAxisName = options[this.dimensionAxis]?.[0]?.name;
241
+ const valueAxisName = options[valueAxis]?.[0]?.name;
242
+
243
+ this.title = getTooltipTitle(params, titleAxisName, dimensionIndex);
244
+ this.content = getTooltipContent(params, valueAxisName, metricIndex);
222
245
  this.params = params;
223
246
  },
224
247
  },
@@ -71,12 +71,15 @@ export default {
71
71
  },
72
72
  /**
73
73
  * Configuration object for the title popover. Expected structure:
74
+ * **Deprecated:** Use slots `#info-popover-content` and `#info-popover-title` instead.
74
75
  *
75
76
  * - `description`: The popover text content with interpolation placeholders.
76
77
  * Uses `%{linkStart}` and `%{linkEnd}` as markers for where a link should be inserted.
77
78
  *
78
79
  * - `descriptionLink`: The optional URL that will be used for the link portion
79
80
  * of the description text between the linkStart and linkEnd markers.
81
+ *
82
+ * @deprecated Use slots `#info-popover-content` and `#info-popover-title` instead.
80
83
  */
81
84
  titlePopover: {
82
85
  type: Object,
@@ -153,8 +156,18 @@ export default {
153
156
  hasTitle() {
154
157
  return Boolean(this.title);
155
158
  },
159
+ hasInfoPopoverContentSlot() {
160
+ return Boolean(this.$scopedSlots['info-popover-content']);
161
+ },
162
+ hasInfoPopoverTitleSlot() {
163
+ return Boolean(this.$scopedSlots['info-popover-title']);
164
+ },
156
165
  hasTitlePopover() {
157
- return Boolean(this.titlePopover?.description);
166
+ return (
167
+ Boolean(this.titlePopover?.description) ||
168
+ this.hasInfoPopoverContentSlot ||
169
+ this.hasInfoPopoverTitleSlot
170
+ );
158
171
  },
159
172
  hasTitlePopoverLink() {
160
173
  return Boolean(this.titlePopover?.descriptionLink);
@@ -206,15 +219,25 @@ export default {
206
219
  boundary="viewport"
207
220
  :target="titlePopoverId"
208
221
  >
209
- <gl-sprintf v-if="hasTitlePopoverLink" :message="titlePopover.description">
210
- <template #link="{ content }">
211
- <gl-link :href="titlePopover.descriptionLink" class="gl-text-sm">{{
212
- content
213
- }}</gl-link>
214
- </template>
215
- </gl-sprintf>
216
- <template v-else>
217
- {{ titlePopover.description }}
222
+ <!-- @slot The title of the info popover. -->
223
+ <template v-if="hasInfoPopoverTitleSlot" #title>
224
+ <slot name="info-popover-title"></slot>
225
+ </template>
226
+
227
+ <!-- @slot The content of the info popover. -->
228
+ <template v-if="hasInfoPopoverContentSlot">
229
+ <slot name="info-popover-content"></slot>
230
+ </template>
231
+
232
+ <template v-if="!hasInfoPopoverContentSlot">
233
+ <gl-sprintf v-if="hasTitlePopoverLink" :message="titlePopover.description">
234
+ <template #link="{ content }">
235
+ <gl-link :href="titlePopover.descriptionLink" class="gl-text-sm">{{
236
+ content
237
+ }}</gl-link>
238
+ </template>
239
+ </gl-sprintf>
240
+ <template v-else> {{ titlePopover.description }} </template>
218
241
  </template>
219
242
  </gl-popover>
220
243
  </template>
@@ -4,35 +4,6 @@
4
4
 
5
5
  // Layout
6
6
  $grid-size: px-to-rem(8px);
7
- $gl-spacing-scale-1: 0.25 * $grid-size;
8
- $gl-spacing-scale-2: 0.5 * $grid-size;
9
- $gl-spacing-scale-3: $grid-size;
10
- $gl-spacing-scale-4: 1.5 * $grid-size;
11
- $gl-spacing-scale-5: 2 * $grid-size;
12
- $gl-spacing-scale-6: 3 * $grid-size;
13
- $gl-spacing-scale-7: 4 * $grid-size;
14
- $gl-spacing-scale-8: 5 * $grid-size;
15
- $gl-spacing-scale-9: 6 * $grid-size;
16
- $gl-spacing-scale-10: 7 * $grid-size;
17
- $gl-spacing-scale-11: 8 * $grid-size;
18
- $gl-spacing-scale-11-5: 9 * $grid-size;
19
- $gl-spacing-scale-12: 10 * $grid-size;
20
- $gl-spacing-scale-13: 12 * $grid-size;
21
- $gl-spacing-scale-15: 15 * $grid-size;
22
- $gl-spacing-scale-18: 18 * $grid-size;
23
- $gl-spacing-scale-20: 20 * $grid-size;
24
- $gl-spacing-scale-26: 26 * $grid-size;
25
- $gl-spacing-scale-28: 28 * $grid-size;
26
- $gl-spacing-scale-30: 30 * $grid-size;
27
- $gl-spacing-scale-31: 31 * $grid-size;
28
- $gl-spacing-scale-33: 33 * $grid-size;
29
- $gl-spacing-scale-34: 34 * $grid-size;
30
- $gl-spacing-scale-37: 37 * $grid-size;
31
- $gl-spacing-scale-48: 48 * $grid-size;
32
- $gl-spacing-scale-62: 62 * $grid-size;
33
- $gl-spacing-scale-75: 75 * $grid-size;
34
- $gl-spacing-scale-80: 80 * $grid-size;
35
- $gl-spacing-scale-88: 88 * $grid-size;
36
7
 
37
8
  // Responsive breakpoints
38
9
 
@@ -239,6 +239,38 @@
239
239
  --gl-line-height-42: 2.625rem;
240
240
  --gl-line-height-44: 2.75rem;
241
241
  --gl-line-height-52: 3.25rem;
242
+ --gl-spacing-scale-0: 0;
243
+ --gl-spacing-scale-1: 0.125rem;
244
+ --gl-spacing-scale-2: 0.25rem;
245
+ --gl-spacing-scale-3: 0.5rem;
246
+ --gl-spacing-scale-4: 0.75rem;
247
+ --gl-spacing-scale-5: 1rem;
248
+ --gl-spacing-scale-6: 1.5rem;
249
+ --gl-spacing-scale-7: 2rem;
250
+ --gl-spacing-scale-8: 2.5rem;
251
+ --gl-spacing-scale-9: 3rem;
252
+ --gl-spacing-scale-10: 3.5rem;
253
+ --gl-spacing-scale-11: 4rem;
254
+ --gl-spacing-scale-12: 5rem;
255
+ --gl-spacing-scale-13: 6rem;
256
+ --gl-spacing-scale-15: 7.5rem;
257
+ --gl-spacing-scale-18: 9rem;
258
+ --gl-spacing-scale-20: 10rem;
259
+ --gl-spacing-scale-26: 13rem;
260
+ --gl-spacing-scale-28: 14rem;
261
+ --gl-spacing-scale-30: 15rem;
262
+ --gl-spacing-scale-31: 15.5rem;
263
+ --gl-spacing-scale-33: 16.5rem;
264
+ --gl-spacing-scale-34: 17rem;
265
+ --gl-spacing-scale-37: 18.5rem;
266
+ --gl-spacing-scale-48: 24rem;
267
+ --gl-spacing-scale-62: 31rem;
268
+ --gl-spacing-scale-75: 37.5rem;
269
+ --gl-spacing-scale-80: 40rem;
270
+ --gl-spacing-scale-88: 44rem;
271
+ --gl-spacing-scale-px: 1px;
272
+ --gl-spacing-scale-2-5: 0.375rem;
273
+ --gl-spacing-scale-11-5: 4.5rem;
242
274
  --gl-avatar-fallback-background-color-red: #fcb5aa3d; /** Red background for avatar fallback with no particular meaning. */
243
275
  --gl-avatar-fallback-background-color-purple: #cbbbf23d; /** Purple background for avatar fallback with no particular meaning. */
244
276
  --gl-avatar-fallback-background-color-blue: #9dc7f13d; /** Blue background for avatar fallback with no particular meaning. */
@@ -239,6 +239,38 @@
239
239
  --gl-line-height-42: 2.625rem;
240
240
  --gl-line-height-44: 2.75rem;
241
241
  --gl-line-height-52: 3.25rem;
242
+ --gl-spacing-scale-0: 0;
243
+ --gl-spacing-scale-1: 0.125rem;
244
+ --gl-spacing-scale-2: 0.25rem;
245
+ --gl-spacing-scale-3: 0.5rem;
246
+ --gl-spacing-scale-4: 0.75rem;
247
+ --gl-spacing-scale-5: 1rem;
248
+ --gl-spacing-scale-6: 1.5rem;
249
+ --gl-spacing-scale-7: 2rem;
250
+ --gl-spacing-scale-8: 2.5rem;
251
+ --gl-spacing-scale-9: 3rem;
252
+ --gl-spacing-scale-10: 3.5rem;
253
+ --gl-spacing-scale-11: 4rem;
254
+ --gl-spacing-scale-12: 5rem;
255
+ --gl-spacing-scale-13: 6rem;
256
+ --gl-spacing-scale-15: 7.5rem;
257
+ --gl-spacing-scale-18: 9rem;
258
+ --gl-spacing-scale-20: 10rem;
259
+ --gl-spacing-scale-26: 13rem;
260
+ --gl-spacing-scale-28: 14rem;
261
+ --gl-spacing-scale-30: 15rem;
262
+ --gl-spacing-scale-31: 15.5rem;
263
+ --gl-spacing-scale-33: 16.5rem;
264
+ --gl-spacing-scale-34: 17rem;
265
+ --gl-spacing-scale-37: 18.5rem;
266
+ --gl-spacing-scale-48: 24rem;
267
+ --gl-spacing-scale-62: 31rem;
268
+ --gl-spacing-scale-75: 37.5rem;
269
+ --gl-spacing-scale-80: 40rem;
270
+ --gl-spacing-scale-88: 44rem;
271
+ --gl-spacing-scale-px: 1px;
272
+ --gl-spacing-scale-2-5: 0.375rem;
273
+ --gl-spacing-scale-11-5: 4.5rem;
242
274
  --gl-avatar-fallback-background-color-red: #fcb5aa3d; /** Red background for avatar fallback with no particular meaning. */
243
275
  --gl-avatar-fallback-background-color-purple: #cbbbf23d; /** Purple background for avatar fallback with no particular meaning. */
244
276
  --gl-avatar-fallback-background-color-blue: #9dc7f13d; /** Blue background for avatar fallback with no particular meaning. */