@gitlab/ui 115.7.0 → 115.9.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.
@@ -8724,6 +8724,160 @@
8724
8724
  "color"
8725
8725
  ],
8726
8726
  "cssWithValue": "var(--gl-dropdown-background-color, var(--gl-background-color-overlap, #fff))"
8727
+ },
8728
+ "control": {
8729
+ "default": {
8730
+ "key": "{control.background.color.default}",
8731
+ "$value": "#fff",
8732
+ "$type": "color",
8733
+ "$description": "Used for form control (input, radio button, checkbox, textarea) default background.",
8734
+ "$extensions": {
8735
+ "com.figma.scope": [
8736
+ "FRAME_FILL",
8737
+ "SHAPE_FILL"
8738
+ ]
8739
+ },
8740
+ "filePath": "src/tokens/semantic/control.tokens.json",
8741
+ "isSource": true,
8742
+ "original": {
8743
+ "$value": {
8744
+ "default": "{color.neutral.0}",
8745
+ "dark": "{color.alpha.dark.40}"
8746
+ },
8747
+ "$type": "color",
8748
+ "$description": "Used for form control (input, radio button, checkbox, textarea) default background.",
8749
+ "$extensions": {
8750
+ "com.figma.scope": [
8751
+ "FRAME_FILL",
8752
+ "SHAPE_FILL"
8753
+ ]
8754
+ },
8755
+ "key": "{control.background.color.default}"
8756
+ },
8757
+ "name": "CONTROL_BACKGROUND_COLOR_DEFAULT",
8758
+ "attributes": {},
8759
+ "path": [
8760
+ "control",
8761
+ "background",
8762
+ "color",
8763
+ "default"
8764
+ ],
8765
+ "cssWithValue": "var(--gl-control-background-color-default, var(--gl-color-neutral-0, #fff))"
8766
+ },
8767
+ "disabled": {
8768
+ "key": "{control.background.color.disabled}",
8769
+ "$value": "#fbfafd",
8770
+ "$type": "color",
8771
+ "$description": "Used for disabled form control (checkbox, input, radio button, textarea) background.",
8772
+ "$extensions": {
8773
+ "com.figma.scope": [
8774
+ "FRAME_FILL",
8775
+ "SHAPE_FILL"
8776
+ ]
8777
+ },
8778
+ "filePath": "src/tokens/semantic/control.tokens.json",
8779
+ "isSource": true,
8780
+ "original": {
8781
+ "$value": {
8782
+ "default": "{color.neutral.10}",
8783
+ "dark": "{color.alpha.light.4}"
8784
+ },
8785
+ "$type": "color",
8786
+ "$description": "Used for disabled form control (checkbox, input, radio button, textarea) background.",
8787
+ "$extensions": {
8788
+ "com.figma.scope": [
8789
+ "FRAME_FILL",
8790
+ "SHAPE_FILL"
8791
+ ]
8792
+ },
8793
+ "key": "{control.background.color.disabled}"
8794
+ },
8795
+ "name": "CONTROL_BACKGROUND_COLOR_DISABLED",
8796
+ "attributes": {},
8797
+ "path": [
8798
+ "control",
8799
+ "background",
8800
+ "color",
8801
+ "disabled"
8802
+ ],
8803
+ "cssWithValue": "var(--gl-control-background-color-disabled, var(--gl-color-neutral-10, #fbfafd))"
8804
+ },
8805
+ "concatenation": {
8806
+ "key": "{control.background.color.concatenation}",
8807
+ "$value": "#fbfafd",
8808
+ "$type": "color",
8809
+ "$description": "Used for the background of static content that prepends or appends a text input.",
8810
+ "$extensions": {
8811
+ "com.figma.scope": [
8812
+ "FRAME_FILL",
8813
+ "SHAPE_FILL"
8814
+ ]
8815
+ },
8816
+ "filePath": "src/tokens/semantic/control.tokens.json",
8817
+ "isSource": true,
8818
+ "original": {
8819
+ "$value": {
8820
+ "default": "{color.neutral.10}",
8821
+ "dark": "{color.alpha.light.4}"
8822
+ },
8823
+ "$type": "color",
8824
+ "$description": "Used for the background of static content that prepends or appends a text input.",
8825
+ "$extensions": {
8826
+ "com.figma.scope": [
8827
+ "FRAME_FILL",
8828
+ "SHAPE_FILL"
8829
+ ]
8830
+ },
8831
+ "key": "{control.background.color.concatenation}"
8832
+ },
8833
+ "name": "CONTROL_BACKGROUND_COLOR_CONCATENATION",
8834
+ "attributes": {},
8835
+ "path": [
8836
+ "control",
8837
+ "background",
8838
+ "color",
8839
+ "concatenation"
8840
+ ],
8841
+ "cssWithValue": "var(--gl-control-background-color-concatenation, var(--gl-color-neutral-10, #fbfafd))"
8842
+ },
8843
+ "readonly": {
8844
+ "key": "{control.background.color.readonly}",
8845
+ "$value": "rgba(05, 05, 06, 0.02)",
8846
+ "$type": "color",
8847
+ "$description": "Used for the background of static content that prepends or appends a text input.",
8848
+ "$extensions": {
8849
+ "com.figma.scope": [
8850
+ "FRAME_FILL",
8851
+ "SHAPE_FILL"
8852
+ ]
8853
+ },
8854
+ "filePath": "src/tokens/semantic/control.tokens.json",
8855
+ "isSource": true,
8856
+ "original": {
8857
+ "$value": {
8858
+ "default": "{color.alpha.dark.2}",
8859
+ "dark": "{color.alpha.light.8}"
8860
+ },
8861
+ "$type": "color",
8862
+ "$description": "Used for the background of static content that prepends or appends a text input.",
8863
+ "$extensions": {
8864
+ "com.figma.scope": [
8865
+ "FRAME_FILL",
8866
+ "SHAPE_FILL"
8867
+ ]
8868
+ },
8869
+ "key": "{control.background.color.readonly}"
8870
+ },
8871
+ "name": "CONTROL_BACKGROUND_COLOR_READONLY",
8872
+ "attributes": {},
8873
+ "path": [
8874
+ "control",
8875
+ "background",
8876
+ "color",
8877
+ "readonly"
8878
+ ],
8879
+ "cssWithValue": "var(--gl-control-background-color-readonly, var(--gl-color-alpha-dark-2, rgba(05, 05, 06, 0.02)))"
8880
+ }
8727
8881
  }
8728
8882
  },
8729
8883
  "border": {
@@ -16947,6 +17101,116 @@
16947
17101
  "color"
16948
17102
  ],
16949
17103
  "cssWithValue": "var(--gl-dropdown-divider-color, var(--gl-border-color-default, #dcdcde))"
17104
+ },
17105
+ "control": {
17106
+ "default": {
17107
+ "key": "{control.border.color.default}",
17108
+ "$value": "#89888d",
17109
+ "$type": "color",
17110
+ "$description": "Used for form control (input, radio button, checkbox, textarea) default border.",
17111
+ "$extensions": {
17112
+ "com.figma.scope": [
17113
+ "STROKE_COLOR"
17114
+ ]
17115
+ },
17116
+ "filePath": "src/tokens/semantic/control.tokens.json",
17117
+ "isSource": true,
17118
+ "original": {
17119
+ "$value": {
17120
+ "default": "{color.neutral.400}",
17121
+ "dark": "{color.neutral.500}"
17122
+ },
17123
+ "$type": "color",
17124
+ "$description": "Used for form control (input, radio button, checkbox, textarea) default border.",
17125
+ "$extensions": {
17126
+ "com.figma.scope": [
17127
+ "STROKE_COLOR"
17128
+ ]
17129
+ },
17130
+ "key": "{control.border.color.default}"
17131
+ },
17132
+ "name": "CONTROL_BORDER_COLOR_DEFAULT",
17133
+ "attributes": {},
17134
+ "path": [
17135
+ "control",
17136
+ "border",
17137
+ "color",
17138
+ "default"
17139
+ ],
17140
+ "cssWithValue": "var(--gl-control-border-color-default, var(--gl-color-neutral-400, #89888d))"
17141
+ },
17142
+ "disabled": {
17143
+ "key": "{control.border.color.disabled}",
17144
+ "$value": "#dcdcde",
17145
+ "$type": "color",
17146
+ "$description": "Used for disabled form control (input, radio button, checkbox, textarea) border.",
17147
+ "$extensions": {
17148
+ "com.figma.scope": [
17149
+ "STROKE_COLOR"
17150
+ ]
17151
+ },
17152
+ "filePath": "src/tokens/semantic/control.tokens.json",
17153
+ "isSource": true,
17154
+ "original": {
17155
+ "$value": {
17156
+ "default": "{color.neutral.100}",
17157
+ "dark": "{color.neutral.800}"
17158
+ },
17159
+ "$type": "color",
17160
+ "$description": "Used for disabled form control (input, radio button, checkbox, textarea) border.",
17161
+ "$extensions": {
17162
+ "com.figma.scope": [
17163
+ "STROKE_COLOR"
17164
+ ]
17165
+ },
17166
+ "key": "{control.border.color.disabled}"
17167
+ },
17168
+ "name": "CONTROL_BORDER_COLOR_DISABLED",
17169
+ "attributes": {},
17170
+ "path": [
17171
+ "control",
17172
+ "border",
17173
+ "color",
17174
+ "disabled"
17175
+ ],
17176
+ "cssWithValue": "var(--gl-control-border-color-disabled, var(--gl-color-neutral-100, #dcdcde))"
17177
+ },
17178
+ "error": {
17179
+ "key": "{control.border.color.error}",
17180
+ "$value": "#dd2b0e",
17181
+ "$type": "color",
17182
+ "$description": "Used for invalid form control (input, textarea) border.",
17183
+ "$extensions": {
17184
+ "com.figma.scope": [
17185
+ "STROKE_COLOR"
17186
+ ]
17187
+ },
17188
+ "filePath": "src/tokens/semantic/control.tokens.json",
17189
+ "isSource": true,
17190
+ "original": {
17191
+ "$value": {
17192
+ "default": "{color.red.500}",
17193
+ "dark": "{color.red.300}"
17194
+ },
17195
+ "$type": "color",
17196
+ "$description": "Used for invalid form control (input, textarea) border.",
17197
+ "$extensions": {
17198
+ "com.figma.scope": [
17199
+ "STROKE_COLOR"
17200
+ ]
17201
+ },
17202
+ "key": "{control.border.color.error}"
17203
+ },
17204
+ "name": "CONTROL_BORDER_COLOR_ERROR",
17205
+ "attributes": {},
17206
+ "path": [
17207
+ "control",
17208
+ "border",
17209
+ "color",
17210
+ "error"
17211
+ ],
17212
+ "cssWithValue": "var(--gl-control-border-color-error, var(--gl-color-red-500, #dd2b0e))"
17213
+ }
16950
17214
  }
16951
17215
  },
16952
17216
  "fill": {
@@ -34523,6 +34787,106 @@
34523
34787
  "tertiary"
34524
34788
  ],
34525
34789
  "cssWithValue": "var(--gl-text-tertiary, #89888d)"
34790
+ },
34791
+ "control": {
34792
+ "placeholder": {
34793
+ "key": "{control.placeholder.color}",
34794
+ "$value": "#89888d",
34795
+ "$type": "color",
34796
+ "$description": "Used for placeholder text within inputs.",
34797
+ "$extensions": {
34798
+ "com.figma.scope": [
34799
+ "TEXT_FILL"
34800
+ ]
34801
+ },
34802
+ "filePath": "src/tokens/semantic/control.tokens.json",
34803
+ "isSource": true,
34804
+ "original": {
34805
+ "$value": "{text.color.disabled}",
34806
+ "$type": "color",
34807
+ "$description": "Used for placeholder text within inputs.",
34808
+ "$extensions": {
34809
+ "com.figma.scope": [
34810
+ "TEXT_FILL"
34811
+ ]
34812
+ },
34813
+ "key": "{control.placeholder.color}"
34814
+ },
34815
+ "name": "CONTROL_PLACEHOLDER_COLOR",
34816
+ "attributes": {},
34817
+ "path": [
34818
+ "control",
34819
+ "placeholder",
34820
+ "color"
34821
+ ],
34822
+ "cssWithValue": "var(--gl-control-placeholder-color, var(--gl-text-color-disabled, #89888d))"
34823
+ },
34824
+ "error": {
34825
+ "key": "{control.text.color.error}",
34826
+ "$value": "#c02f12",
34827
+ "$type": "color",
34828
+ "$description": "Used for the helper text when the input is invalid.",
34829
+ "$extensions": {
34830
+ "com.figma.scope": [
34831
+ "TEXT_FILL"
34832
+ ]
34833
+ },
34834
+ "filePath": "src/tokens/semantic/control.tokens.json",
34835
+ "isSource": true,
34836
+ "original": {
34837
+ "$value": "{text.color.danger}",
34838
+ "$type": "color",
34839
+ "$description": "Used for the helper text when the input is invalid.",
34840
+ "$extensions": {
34841
+ "com.figma.scope": [
34842
+ "TEXT_FILL"
34843
+ ]
34844
+ },
34845
+ "key": "{control.text.color.error}"
34846
+ },
34847
+ "name": "CONTROL_TEXT_COLOR_ERROR",
34848
+ "attributes": {},
34849
+ "path": [
34850
+ "control",
34851
+ "text",
34852
+ "color",
34853
+ "error"
34854
+ ],
34855
+ "cssWithValue": "var(--gl-control-text-color-error, var(--gl-text-color-danger, #c02f12))"
34856
+ },
34857
+ "valid": {
34858
+ "key": "{control.text.color.valid}",
34859
+ "$value": "#2f7549",
34860
+ "$type": "color",
34861
+ "$description": "Used for the helper text when the input is valid.",
34862
+ "$extensions": {
34863
+ "com.figma.scope": [
34864
+ "TEXT_FILL"
34865
+ ]
34866
+ },
34867
+ "filePath": "src/tokens/semantic/control.tokens.json",
34868
+ "isSource": true,
34869
+ "original": {
34870
+ "$value": "{text.color.success}",
34871
+ "$type": "color",
34872
+ "$description": "Used for the helper text when the input is valid.",
34873
+ "$extensions": {
34874
+ "com.figma.scope": [
34875
+ "TEXT_FILL"
34876
+ ]
34877
+ },
34878
+ "key": "{control.text.color.valid}"
34879
+ },
34880
+ "name": "CONTROL_TEXT_COLOR_VALID",
34881
+ "attributes": {},
34882
+ "path": [
34883
+ "control",
34884
+ "text",
34885
+ "color",
34886
+ "valid"
34887
+ ],
34888
+ "cssWithValue": "var(--gl-control-text-color-valid, var(--gl-text-color-success, #2f7549))"
34889
+ }
34526
34890
  }
34527
34891
  },
34528
34892
  "outline": {
@@ -44,6 +44,12 @@
44
44
  ...statusBackgroundColors,
45
45
  ...feedbackBackgroundColors,
46
46
  dropdown: 'var(--gl-dropdown-background-color, var(--gl-background-color-overlap, #fff))',
47
+ control: {
48
+ default: 'var(--gl-control-background-color-default, var(--gl-color-neutral-0, #fff))',
49
+ disabled: 'var(--gl-control-background-color-disabled, var(--gl-color-neutral-10, #fbfafd))',
50
+ concatenation: 'var(--gl-control-background-color-concatenation, var(--gl-color-neutral-10, #fbfafd))',
51
+ readonly: 'var(--gl-control-background-color-readonly, var(--gl-color-alpha-dark-2, rgba(05, 05, 06, 0.02)))',
52
+ },
47
53
  };
48
54
 
49
55
  const borderColor = {
@@ -51,6 +57,11 @@
51
57
  ...borderColors,
52
58
  dropdown: 'var(--gl-dropdown-border-color, var(--gl-border-color-strong, #bfbfc3))',
53
59
  'dropdown-divider': 'var(--gl-dropdown-divider-color, var(--gl-border-color-default, #dcdcde))',
60
+ control: {
61
+ default: 'var(--gl-control-border-color-default, var(--gl-color-neutral-400, #89888d))',
62
+ disabled: 'var(--gl-control-border-color-disabled, var(--gl-color-neutral-100, #dcdcde))',
63
+ error: 'var(--gl-control-border-color-error, var(--gl-color-red-500, #dd2b0e))',
64
+ },
54
65
  };
55
66
 
56
67
  const outlineColor = {
@@ -74,6 +85,11 @@
74
85
  primary: 'var(--gl-text-primary, #28272d)',
75
86
  secondary: 'var(--gl-text-secondary, #737278)',
76
87
  tertiary: 'var(--gl-text-tertiary, #89888d)',
88
+ control: {
89
+ placeholder: 'var(--gl-control-placeholder-color, var(--gl-text-color-disabled, #89888d))',
90
+ error: 'var(--gl-control-text-color-error, var(--gl-text-color-danger, #c02f12))',
91
+ valid: 'var(--gl-control-text-color-valid, var(--gl-text-color-success, #2f7549))',
92
+ },
77
93
  };
78
94
 
79
95
  module.exports = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "115.7.0",
3
+ "version": "115.9.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -138,7 +138,7 @@
138
138
  "cypress-real-events": "^1.14.0",
139
139
  "dompurify": "^3.1.2",
140
140
  "emoji-regex": "^10.4.0",
141
- "esbuild": "^0.25.6",
141
+ "esbuild": "^0.25.7",
142
142
  "fuse.js": "^7.1.0",
143
143
  "gitlab-api-async-iterator": "^1.3.1",
144
144
  "glob": "11.0.3",
@@ -130,6 +130,14 @@ export default {
130
130
  required: false,
131
131
  default: null,
132
132
  },
133
+ /**
134
+ * Controls whether the tooltip should be pinned when clicked.
135
+ */
136
+ clickToPinTooltip: {
137
+ type: Boolean,
138
+ required: false,
139
+ default: false,
140
+ },
133
141
  },
134
142
  data() {
135
143
  // Part of the tooltip related data can be
@@ -349,6 +357,7 @@ export default {
349
357
  ref="dataTooltip"
350
358
  :chart="chart"
351
359
  :use-default-tooltip-formatter="!formatTooltipText"
360
+ :click-to-pin="clickToPinTooltip"
352
361
  >
353
362
  <template v-if="$scopedSlots['tooltip-title']" #title="scope">
354
363
  <slot name="tooltip-title" v-bind="scope"></slot>
@@ -117,11 +117,22 @@ export default {
117
117
  required: false,
118
118
  default: false,
119
119
  },
120
+ /**
121
+ * Set to true to enable click-to-pin functionality.
122
+ * When enabled, clicking on a chart point will keep the tooltip open, so the user can interact with the tooltip's content.
123
+ * The tooltip will unpin when clicking again on the chart and not on the tooltip.
124
+ */
125
+ clickToPin: {
126
+ type: Boolean,
127
+ required: false,
128
+ default: false,
129
+ },
120
130
  },
121
131
  data() {
122
132
  return {
123
- pointerPosition: null,
133
+ pointerCoords: null,
124
134
  isPointerInChart: false,
135
+ pinnedPosition: null,
125
136
 
126
137
  debouncedMouseHandler: debounceByAnimationFrame(this.mouseHandler),
127
138
 
@@ -144,6 +155,10 @@ export default {
144
155
 
145
156
  marginLeft: `${-this.xOffset}px`,
146
157
  width: `${this.xOffset * 2}px`,
158
+
159
+ pointerEvents: this.isPinned ? 'auto' : 'none',
160
+
161
+ ...this.tooltipPosition,
147
162
  };
148
163
  },
149
164
  fixedPosition() {
@@ -153,17 +168,44 @@ export default {
153
168
  }
154
169
  return null;
155
170
  },
171
+ tooltipPosition() {
172
+ if (this.fixedPosition) {
173
+ return this.fixedPosition;
174
+ }
175
+ if (this.pinnedPosition) {
176
+ return this.pinnedPosition;
177
+ }
178
+ return this.pointerPosition;
179
+ },
156
180
  shouldShowPopover() {
157
181
  if (this.show !== null) {
158
182
  return this.show;
159
183
  }
160
- return this.isPointerInChart;
184
+ return this.isPinned || this.isPointerInChart;
185
+ },
186
+ isPinned() {
187
+ return this.pinnedPosition !== null;
188
+ },
189
+ pointerPosition() {
190
+ if (!this.pointerCoords) {
191
+ return null;
192
+ }
193
+
194
+ return {
195
+ left: `${this.pointerCoords.x}px`,
196
+ top: `${this.pointerCoords.y}px`,
197
+ };
161
198
  },
162
199
  },
163
200
  created() {
164
201
  this.chart.getZr().on('mousemove', this.debouncedMouseHandler);
165
202
  this.chart.getZr().on('mouseout', this.debouncedMouseHandler);
166
203
 
204
+ if (this.clickToPin) {
205
+ document.addEventListener('keydown', this.keyDownHandler);
206
+ this.chart.getZr().on('click', this.clickHandler);
207
+ }
208
+
167
209
  if (this.useDefaultTooltipFormatter) {
168
210
  this.chart.setOption({
169
211
  xAxis: {
@@ -185,24 +227,83 @@ export default {
185
227
  });
186
228
  }
187
229
  },
188
-
189
230
  beforeDestroy() {
190
231
  this.chart.getZr().off('mousemove', this.debouncedMouseHandler);
191
232
  this.chart.getZr().off('mouseout', this.debouncedMouseHandler);
233
+
234
+ if (this.clickToPin) {
235
+ this.chart.getZr().off('click', this.clickHandler);
236
+ document.removeEventListener('keydown', this.keyDownHandler);
237
+ }
192
238
  },
193
239
  methods: {
240
+ getEventCoordsWithinChart({ event }) {
241
+ const { zrX, zrY } = event;
242
+ const x = Math.round(zrX);
243
+ const y = Math.round(zrY);
244
+
245
+ if (!Number.isFinite(x) || !Number.isFinite(y)) {
246
+ return null;
247
+ }
248
+
249
+ if (!this.chart.containPixel('grid', [x, y])) {
250
+ return null;
251
+ }
252
+
253
+ return { x, y };
254
+ },
194
255
  mouseHandler(event) {
195
- let { zrX: x, zrY: y } = event.event;
256
+ const coords = this.getEventCoordsWithinChart(event);
257
+ if (!coords) {
258
+ this.isPointerInChart = false;
259
+ return;
260
+ }
261
+
262
+ this.pointerCoords = coords;
263
+ this.isPointerInChart = true;
264
+ },
265
+ clickHandler(event) {
266
+ if (!this.getEventCoordsWithinChart(event)) {
267
+ return;
268
+ }
269
+
270
+ if (!this.isPinned) {
271
+ this.pinTooltip();
272
+ } else {
273
+ this.unpinTooltip(event.event);
274
+ }
275
+ },
276
+ pinTooltip() {
277
+ this.pinnedPosition = this.pointerPosition;
196
278
 
197
- if (Number.isFinite(x) && Number.isFinite(y)) {
198
- x = Math.round(x);
199
- y = Math.round(y);
279
+ // prevents any axis pointers from being moved to a new position, they should also be pinned
280
+ this.chart.setOption({
281
+ tooltip: {
282
+ triggerOn: 'none',
283
+ },
284
+ });
285
+ },
286
+ unpinTooltip() {
287
+ this.pinnedPosition = null;
200
288
 
201
- this.pointerPosition = {
202
- left: `${x}px`,
203
- top: `${y}px`,
204
- };
205
- this.isPointerInChart = this.chart.containPixel('grid', [x, y]);
289
+ // restores the axis pointers to be unpinned and be triggered by mousemove
290
+ this.chart.setOption({
291
+ tooltip: {
292
+ triggerOn: 'mousemove',
293
+ show: false,
294
+ },
295
+ });
296
+
297
+ // shows the tooltip and axis pointer at the position of the click
298
+ this.chart.dispatchAction({
299
+ type: 'showTip',
300
+ x: this.pointerCoords.x,
301
+ y: this.pointerCoords.y,
302
+ });
303
+ },
304
+ keyDownHandler(event) {
305
+ if (event.key === 'Escape' && this.isPinned) {
306
+ this.unpinTooltip();
206
307
  }
207
308
  },
208
309
  },
@@ -210,12 +311,8 @@ export default {
210
311
  </script>
211
312
 
212
313
  <template>
213
- <div v-if="chart" class="gl-pointer-events-none">
214
- <div
215
- :id="targetId"
216
- :style="{ ...(fixedPosition || pointerPosition), ...targetStyle }"
217
- class="gl-chart-tooltip"
218
- ></div>
314
+ <div v-if="chart">
315
+ <div :id="targetId" :style="targetStyle" class="gl-chart-tooltip"></div>
219
316
  <!--
220
317
  Is shown using `show` property directly so
221
318
  `triggers` are set to an empty string