@gitlab/ui 32.43.2 → 32.45.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +6 -1
  3. package/config.js +15 -3
  4. package/dist/components/base/avatar/avatar.documentation.js +2 -5
  5. package/dist/components/base/avatar_link/avatar_link.documentation.js +2 -5
  6. package/dist/components/base/form/form_input/form_input.documentation.js +2 -27
  7. package/dist/components/base/form/form_input/form_input.js +23 -6
  8. package/dist/components/base/form/form_text/form_text.documentation.js +1 -4
  9. package/dist/components/base/form/form_textarea/form_textarea.documentation.js +1 -20
  10. package/dist/components/base/form/form_textarea/form_textarea.js +8 -0
  11. package/dist/components/base/label/label.documentation.js +2 -9
  12. package/dist/components/base/label/label.js +23 -1
  13. package/dist/components/base/pagination/pagination.documentation.js +2 -85
  14. package/dist/components/base/pagination/pagination.js +76 -0
  15. package/dist/components/base/segmented_control/segmented_control.documentation.js +2 -14
  16. package/dist/components/base/segmented_control/segmented_control.js +6 -0
  17. package/dist/components/base/skeleton_loader/skeleton_loader.documentation.js +2 -28
  18. package/dist/components/base/skeleton_loader/skeleton_loader.js +30 -0
  19. package/dist/components/charts/chart/chart.js +17 -4
  20. package/dist/components/charts/heatmap/heatmap.js +1 -9
  21. package/dist/components/charts/sparkline/sparkline.js +1 -1
  22. package/dist/config.js +15 -3
  23. package/dist/utility_classes.css +1 -1
  24. package/dist/utility_classes.css.map +1 -1
  25. package/documentation/documented_stories.js +8 -0
  26. package/package.json +13 -12
  27. package/src/components/base/alert/alert.spec.js +2 -2
  28. package/src/components/base/avatar/avatar.documentation.js +0 -2
  29. package/src/components/base/avatar/avatar.md +0 -2
  30. package/src/components/base/avatar/avatar.spec.js +1 -2
  31. package/src/components/base/avatar/avatar.stories.js +88 -101
  32. package/src/components/base/avatar_link/avatar_link.documentation.js +0 -2
  33. package/src/components/base/avatar_link/avatar_link.md +4 -7
  34. package/src/components/base/avatar_link/avatar_link.stories.js +66 -54
  35. package/src/components/base/filtered_search/filtered_search.spec.js +35 -35
  36. package/src/components/base/filtered_search/filtered_search_term.spec.js +1 -1
  37. package/src/components/base/form/form_input/form_input.documentation.js +0 -31
  38. package/src/components/base/form/form_input/form_input.md +0 -2
  39. package/src/components/base/form/form_input/form_input.stories.js +50 -42
  40. package/src/components/base/form/form_input/form_input.vue +23 -6
  41. package/src/components/base/form/form_input_group/form_input_group.spec.js +1 -3
  42. package/src/components/base/form/form_text/form_text.documentation.js +0 -2
  43. package/src/components/base/form/form_text/form_text.md +1 -3
  44. package/src/components/base/form/form_text/form_text.stories.js +20 -8
  45. package/src/components/base/form/form_textarea/form_textarea.documentation.js +0 -25
  46. package/src/components/base/form/form_textarea/form_textarea.stories.js +31 -30
  47. package/src/components/base/form/form_textarea/form_textarea.vue +8 -0
  48. package/src/components/base/icon/icon.spec.js +1 -4
  49. package/src/components/base/infinite_scroll/infinite_scroll.spec.js +1 -4
  50. package/src/components/base/label/label.documentation.js +2 -12
  51. package/src/components/base/label/label.md +2 -7
  52. package/src/components/base/label/label.stories.js +66 -92
  53. package/src/components/base/label/label.vue +22 -2
  54. package/src/components/base/modal/modal.spec.js +19 -23
  55. package/src/components/base/paginated_list/__snapshots__/paginated_list.spec.js.snap +10 -10
  56. package/src/components/base/pagination/pagination.documentation.js +0 -100
  57. package/src/components/base/pagination/pagination.md +5 -9
  58. package/src/components/base/pagination/pagination.spec.js +1 -4
  59. package/src/components/base/pagination/pagination.stories.js +109 -117
  60. package/src/components/base/pagination/pagination.vue +85 -0
  61. package/src/components/base/search_box_by_click/search_box_by_click.spec.js +1 -5
  62. package/src/components/base/segmented_control/segmented_control.documentation.js +0 -15
  63. package/src/components/base/segmented_control/segmented_control.md +0 -2
  64. package/src/components/base/segmented_control/segmented_control.stories.js +46 -36
  65. package/src/components/base/segmented_control/segmented_control.vue +5 -0
  66. package/src/components/base/skeleton_loader/skeleton_loader.documentation.js +0 -27
  67. package/src/components/base/skeleton_loader/skeleton_loader.md +0 -2
  68. package/src/components/base/skeleton_loader/skeleton_loader.stories.js +23 -9
  69. package/src/components/base/skeleton_loader/skeleton_loader.vue +24 -0
  70. package/src/components/base/sorting/sorting.spec.js +1 -4
  71. package/src/components/base/toast/toast.spec.js +4 -6
  72. package/src/components/base/token/token.spec.js +1 -4
  73. package/src/components/base/token_selector/token_container.spec.js +2 -3
  74. package/src/components/charts/chart/chart.spec.js +33 -4
  75. package/src/components/charts/chart/chart.vue +16 -4
  76. package/src/components/charts/gauge/gauge.spec.js +7 -7
  77. package/src/components/charts/heatmap/heatmap.vue +2 -9
  78. package/src/components/charts/sparkline/sparkline.spec.js +1 -4
  79. package/src/components/charts/sparkline/sparkline.vue +7 -1
  80. package/src/components/utilities/friendly_wrap/friendly_wrap.spec.js +1 -4
  81. package/src/components/utilities/intersperse/intersperse.spec.js +1 -4
  82. package/src/directives/hover_load/hover_load.spec.js +2 -13
  83. package/src/directives/outside/outside.spec.js +1 -6
  84. package/src/directives/resize_observer/resize_observer.spec.js +4 -10
  85. package/src/scss/storybook.scss +8 -0
  86. package/src/scss/utilities.scss +8 -0
  87. package/src/scss/utility-mixins/transform.scss +4 -0
  88. package/dist/components/base/avatar/examples/avatar.fallback.example.js +0 -38
  89. package/dist/components/base/avatar/examples/avatar.image.example.js +0 -38
  90. package/dist/components/base/avatar/examples/avatar.rect.example.js +0 -38
  91. package/dist/components/base/avatar/examples/avatar.tooltip.example.js +0 -38
  92. package/dist/components/base/avatar/examples/index.js +0 -31
  93. package/dist/components/base/avatar_link/examples/avatar.link.example.js +0 -38
  94. package/dist/components/base/avatar_link/examples/index.js +0 -13
  95. package/dist/components/base/form/form_input/examples/form_input/form_input.text.example.js +0 -38
  96. package/dist/components/base/form/form_input/examples/form_input/form_input.text_disabled.example.js +0 -38
  97. package/dist/components/base/form/form_input/examples/form_input/form_input.text_reactive.example.js +0 -57
  98. package/dist/components/base/form/form_input/examples/form_input/index.js +0 -22
  99. package/dist/components/base/form/form_text/examples/form_text.basic.example.js +0 -38
  100. package/dist/components/base/form/form_text/examples/index.js +0 -13
  101. package/dist/components/base/form/form_textarea/examples/form_textarea.basic.example.js +0 -47
  102. package/dist/components/base/form/form_textarea/examples/form_textarea.invalid.example.js +0 -47
  103. package/dist/components/base/form/form_textarea/examples/form_textarea.plaintext.example.js +0 -47
  104. package/dist/components/base/form/form_textarea/examples/form_textarea.readonly.example.js +0 -45
  105. package/dist/components/base/form/form_textarea/examples/form_textarea.submit.example.js +0 -47
  106. package/dist/components/base/form/form_textarea/examples/index.js +0 -37
  107. package/dist/components/base/label/examples/index.js +0 -19
  108. package/dist/components/base/label/examples/label.basic.example.js +0 -38
  109. package/dist/components/base/label/examples/label.scoped.example.js +0 -38
  110. package/dist/components/base/pagination/examples/index.js +0 -37
  111. package/dist/components/base/pagination/examples/pagination.basic.example.js +0 -45
  112. package/dist/components/base/pagination/examples/pagination.compact.example.js +0 -58
  113. package/dist/components/base/pagination/examples/pagination.double_truncation.example.js +0 -45
  114. package/dist/components/base/pagination/examples/pagination.event.example.js +0 -51
  115. package/dist/components/base/pagination/examples/pagination.links.example.js +0 -45
  116. package/dist/components/base/segmented_control/examples/index.js +0 -19
  117. package/dist/components/base/segmented_control/examples/segmented_control.basic.example.js +0 -65
  118. package/dist/components/base/segmented_control/examples/segmented_control.whitespace.example.js +0 -55
  119. package/dist/components/base/skeleton_loader/examples/ci_header_skeleton.basic.example.js +0 -38
  120. package/dist/components/base/skeleton_loader/examples/default_skeleton.basic.example.js +0 -38
  121. package/dist/components/base/skeleton_loader/examples/default_skeleton_custom_props.basic.example.js +0 -38
  122. package/dist/components/base/skeleton_loader/examples/index.js +0 -37
  123. package/dist/components/base/skeleton_loader/examples/issue_card_skeleton.basic.example.js +0 -38
  124. package/dist/components/base/skeleton_loader/examples/job_log_skeleton.basic.example.js +0 -38
  125. package/src/components/base/avatar/examples/avatar.fallback.example.vue +0 -3
  126. package/src/components/base/avatar/examples/avatar.image.example.vue +0 -3
  127. package/src/components/base/avatar/examples/avatar.rect.example.vue +0 -6
  128. package/src/components/base/avatar/examples/avatar.tooltip.example.vue +0 -3
  129. package/src/components/base/avatar/examples/index.js +0 -36
  130. package/src/components/base/avatar_link/examples/avatar.link.example.vue +0 -5
  131. package/src/components/base/avatar_link/examples/index.js +0 -15
  132. package/src/components/base/form/form_input/examples/form_input/form_input.text.example.vue +0 -3
  133. package/src/components/base/form/form_input/examples/form_input/form_input.text_disabled.example.vue +0 -3
  134. package/src/components/base/form/form_input/examples/form_input/form_input.text_reactive.example.vue +0 -24
  135. package/src/components/base/form/form_input/examples/form_input/index.js +0 -26
  136. package/src/components/base/form/form_text/examples/form_text.basic.example.vue +0 -5
  137. package/src/components/base/form/form_text/examples/index.js +0 -15
  138. package/src/components/base/form/form_textarea/examples/form_textarea.basic.example.vue +0 -11
  139. package/src/components/base/form/form_textarea/examples/form_textarea.invalid.example.vue +0 -11
  140. package/src/components/base/form/form_textarea/examples/form_textarea.plaintext.example.vue +0 -13
  141. package/src/components/base/form/form_textarea/examples/form_textarea.readonly.example.vue +0 -9
  142. package/src/components/base/form/form_textarea/examples/form_textarea.submit.example.vue +0 -11
  143. package/src/components/base/form/form_textarea/examples/index.js +0 -43
  144. package/src/components/base/label/examples/index.js +0 -22
  145. package/src/components/base/label/examples/label.basic.example.vue +0 -3
  146. package/src/components/base/label/examples/label.scoped.example.vue +0 -3
  147. package/src/components/base/pagination/examples/index.js +0 -43
  148. package/src/components/base/pagination/examples/pagination.basic.example.vue +0 -17
  149. package/src/components/base/pagination/examples/pagination.compact.example.vue +0 -33
  150. package/src/components/base/pagination/examples/pagination.double_truncation.example.vue +0 -11
  151. package/src/components/base/pagination/examples/pagination.event.example.vue +0 -26
  152. package/src/components/base/pagination/examples/pagination.links.example.vue +0 -18
  153. package/src/components/base/segmented_control/examples/index.js +0 -22
  154. package/src/components/base/segmented_control/examples/segmented_control.basic.example.vue +0 -19
  155. package/src/components/base/segmented_control/examples/segmented_control.whitespace.example.vue +0 -18
  156. package/src/components/base/skeleton_loader/examples/ci_header_skeleton.basic.example.vue +0 -10
  157. package/src/components/base/skeleton_loader/examples/default_skeleton.basic.example.vue +0 -3
  158. package/src/components/base/skeleton_loader/examples/default_skeleton_custom_props.basic.example.vue +0 -9
  159. package/src/components/base/skeleton_loader/examples/index.js +0 -44
  160. package/src/components/base/skeleton_loader/examples/issue_card_skeleton.basic.example.vue +0 -26
  161. package/src/components/base/skeleton_loader/examples/job_log_skeleton.basic.example.vue +0 -13
@@ -13,36 +13,60 @@ export default {
13
13
  name: 'GlSkeletonLoader',
14
14
  functional: true,
15
15
  props: {
16
+ /**
17
+ * It will be set in the viewbox attr in the <svg />.
18
+ * Defaults to 400 when skeleton is passed via the slot. Defaults to 235 when default skeleton is used
19
+ */
16
20
  width: {
17
21
  type: Number,
18
22
  default: null,
19
23
  required: false,
20
24
  },
25
+ /**
26
+ * It will be set in the viewbox attr in the <svg />. Defaults to 130 when skeleton is passed via the slot.
27
+ * Defaults to the combined height of the lines when default skeleton is used
28
+ */
21
29
  height: {
22
30
  type: Number,
23
31
  default: null,
24
32
  required: false,
25
33
  },
34
+ /**
35
+ * Aspect ratio option of <svg/>
36
+ */
26
37
  preserveAspectRatio: {
27
38
  type: String,
28
39
  default: 'xMidYMid meet',
29
40
  required: false,
30
41
  },
42
+ /**
43
+ * Required if you're using <base url="/" /> in your <head />. Defaults to an empty string.
44
+ * This prop is common used as: <gl-skeleton-loader :base-url="$route.fullPath" /> which will fill the SVG attribute with the relative path.
45
+ */
31
46
  baseUrl: {
32
47
  type: String,
33
48
  default: '',
34
49
  required: false,
35
50
  },
51
+ /**
52
+ * Defaults to unique id
53
+ */
36
54
  uniqueKey: {
37
55
  type: String,
38
56
  default: () => uid(),
39
57
  required: false,
40
58
  },
59
+ /**
60
+ * Number of lines to show when using the default skeleton
61
+ */
41
62
  lines: {
42
63
  type: Number,
43
64
  default: 3,
44
65
  required: false,
45
66
  },
67
+ /**
68
+ * If the default skeleton lines should all be the same width
69
+ */
46
70
  equalWidthLines: {
47
71
  type: Boolean,
48
72
  default: false,
@@ -1,12 +1,10 @@
1
- import { mount, createLocalVue } from '@vue/test-utils';
1
+ import { mount } from '@vue/test-utils';
2
2
  import GlDropdown from '../dropdown/dropdown.vue';
3
3
  import GlDropdownItem from '../dropdown/dropdown_item.vue';
4
4
  import GlIcon from '../icon/icon.vue';
5
5
  import GlSorting from './sorting.vue';
6
6
  import GlSortingItem from './sorting_item.vue';
7
7
 
8
- const localVue = createLocalVue();
9
-
10
8
  describe('sorting component', () => {
11
9
  let wrapper;
12
10
 
@@ -35,7 +33,6 @@ describe('sorting component', () => {
35
33
  '<gl-sorting-item>Third item</gl-sorting-item>',
36
34
  ],
37
35
  },
38
- localVue,
39
36
  propsData: {
40
37
  ...defaultProps,
41
38
  ...propsData,
@@ -1,8 +1,8 @@
1
- import { createLocalVue, mount } from '@vue/test-utils';
1
+ import Vue from 'vue';
2
+ import { mount } from '@vue/test-utils';
2
3
  import GlToast from './toast';
3
4
 
4
- const localVue = createLocalVue();
5
- localVue.use(GlToast);
5
+ Vue.use(GlToast);
6
6
  const Component = {
7
7
  template: `<div />`,
8
8
  };
@@ -11,9 +11,7 @@ describe('GlToast', () => {
11
11
  let wrapper;
12
12
 
13
13
  beforeEach(() => {
14
- wrapper = mount(Component, {
15
- localVue,
16
- });
14
+ wrapper = mount(Component);
17
15
  });
18
16
 
19
17
  it('attaches $toast propery', () => {
@@ -1,9 +1,7 @@
1
- import { shallowMount, createLocalVue } from '@vue/test-utils';
1
+ import { shallowMount } from '@vue/test-utils';
2
2
  import CloseButton from '../../shared_components/close_button/close_button.vue';
3
3
  import Token from './token.vue';
4
4
 
5
- const localVue = createLocalVue();
6
-
7
5
  const findIcon = (wrapper) => wrapper.findComponent(CloseButton);
8
6
 
9
7
  describe('Token component', () => {
@@ -13,7 +11,6 @@ describe('Token component', () => {
13
11
 
14
12
  const createComponent = (propsData) =>
15
13
  shallowMount(Token, {
16
- localVue,
17
14
  propsData,
18
15
  });
19
16
 
@@ -40,12 +40,12 @@ describe('GlTokenContainer', () => {
40
40
  };
41
41
 
42
42
  const findTokenByName = (name) => {
43
- const tokenWrappers = wrapper.findAllComponents({ ref: 'tokens' });
43
+ const tokenWrappers = wrapper.findAll('[role=option]');
44
44
 
45
45
  return tokenWrappers.wrappers.find((tokenWrapper) => tokenWrapper.text() === name);
46
46
  };
47
47
 
48
- const findTokenContainer = () => wrapper.find({ ref: 'tokenContainer' });
48
+ const findTokenContainer = () => wrapper.findComponent({ ref: 'tokenContainer' });
49
49
 
50
50
  const blurActiveElement = () => document.activeElement?.blur?.();
51
51
 
@@ -173,7 +173,6 @@ describe('GlTokenContainer', () => {
173
173
  describe('when escape key is pressed', () => {
174
174
  it('fires `cancel-focus` event', async () => {
175
175
  await setup(0, keyboard.escape);
176
-
177
176
  expect(wrapper.emitted('cancel-focus')).toBeTruthy();
178
177
  });
179
178
  });
@@ -2,6 +2,7 @@ import { shallowMount } from '@vue/test-utils';
2
2
  import * as echarts from 'echarts';
3
3
  import Chart from './chart.vue';
4
4
  import createTheme from '~/utils/charts/theme';
5
+ import { useMockResizeObserver } from '~helpers/mock_dom_observer';
5
6
 
6
7
  const defaultHeight = 400;
7
8
 
@@ -21,11 +22,12 @@ describe('chart component', () => {
21
22
  const themeName = 'gitlab';
22
23
  let wrapper;
23
24
 
24
- beforeEach(() => {
25
+ const { trigger: triggerResize } = useMockResizeObserver();
26
+
27
+ it('initializes chart using $refs.chart', async () => {
25
28
  wrapper = shallowMount(...mountArgs);
26
- });
29
+ await wrapper.vm.$nextTick();
27
30
 
28
- it('initializes chart using $refs.chart', () => {
29
31
  expect(echarts.init).toHaveBeenCalledWith(
30
32
  wrapper.findComponent({ ref: 'chart' }).element,
31
33
  themeName,
@@ -37,11 +39,34 @@ describe('chart component', () => {
37
39
  );
38
40
  });
39
41
 
40
- it('emits "created" after initializing chart', () => {
42
+ it('does not resize the chart when responsive = false', async () => {
43
+ wrapper = shallowMount(...mountArgs);
44
+ await wrapper.vm.$nextTick();
45
+ // initial call when chart gets created
46
+ expect(wrapper.vm.chart.resize).toHaveBeenCalledTimes(1);
47
+
48
+ triggerResize(wrapper.element);
49
+ expect(wrapper.vm.chart.resize).toHaveBeenCalledTimes(1);
50
+ });
51
+
52
+ it('resizes the chart when responsive = true', async () => {
53
+ wrapper = shallowMount(Chart, { propsData: { options: {}, responsive: true } });
54
+ await wrapper.vm.$nextTick();
55
+ expect(wrapper.vm.chart.resize).toHaveBeenCalledTimes(1);
56
+
57
+ triggerResize(wrapper.element);
58
+
59
+ expect(wrapper.vm.chart.resize).toHaveBeenCalledTimes(2);
60
+ });
61
+
62
+ it('emits "created" after initializing chart', async () => {
63
+ wrapper = shallowMount(...mountArgs);
64
+ await wrapper.vm.$nextTick();
41
65
  expect(wrapper.emitted('created')).toEqual([[wrapper.vm.chart]]);
42
66
  });
43
67
 
44
68
  it('uses GitLab theme', () => {
69
+ wrapper = shallowMount(...mountArgs);
45
70
  const [firstRegisterThemeCall] = echarts.registerTheme.mock.calls;
46
71
  expect(firstRegisterThemeCall[0]).toBe(themeName);
47
72
  expect(JSON.stringify(firstRegisterThemeCall[1])).toEqual(JSON.stringify(createTheme()));
@@ -87,6 +112,10 @@ describe('chart component', () => {
87
112
  });
88
113
 
89
114
  describe('methods', () => {
115
+ beforeEach(() => {
116
+ wrapper = shallowMount(...mountArgs);
117
+ });
118
+
90
119
  describe('draw method', () => {
91
120
  it('sets chart options', () => {
92
121
  wrapper.vm.draw();
@@ -2,8 +2,12 @@
2
2
  import * as echarts from 'echarts';
3
3
  import { defaultHeight, defaultWidth, validRenderers } from '../../../utils/charts/config';
4
4
  import createTheme, { themeName } from '../../../utils/charts/theme';
5
+ import { GlResizeObserverDirective } from '../../../directives/resize_observer/resize_observer';
5
6
 
6
7
  export default {
8
+ directives: {
9
+ resizeObserver: GlResizeObserverDirective,
10
+ },
7
11
  props: {
8
12
  options: {
9
13
  type: Object,
@@ -42,6 +46,11 @@ export default {
42
46
  return validRenderers.includes(renderer);
43
47
  },
44
48
  },
49
+ responsive: {
50
+ type: Boolean,
51
+ required: false,
52
+ default: false,
53
+ },
45
54
  },
46
55
  data() {
47
56
  return {
@@ -80,7 +89,7 @@ export default {
80
89
  echarts.connect(this.groupId);
81
90
  }
82
91
 
83
- this.chart.on('click', this.clickHandler);
92
+ this.chart.on('click', this.handleClick);
84
93
  /**
85
94
  * Emitted after calling `echarts.init`
86
95
  */
@@ -89,7 +98,7 @@ export default {
89
98
  this.setChartSize();
90
99
  },
91
100
  beforeDestroy() {
92
- this.chart.off('click', this.clickHandler);
101
+ this.chart.off('click', this.handleClick);
93
102
  },
94
103
  methods: {
95
104
  draw() {
@@ -105,7 +114,7 @@ export default {
105
114
  height: this.height || defaultHeight,
106
115
  });
107
116
  },
108
- clickHandler(params) {
117
+ handleClick(params) {
109
118
  /**
110
119
  * Emitted when clicked on a data item in the chart (e.g., a bar/column).
111
120
  *
@@ -114,10 +123,13 @@ export default {
114
123
  */
115
124
  this.$emit('chartItemClicked', { chart: this.chart, params });
116
125
  },
126
+ handleResize() {
127
+ if (this.responsive) this.chart.resize();
128
+ },
117
129
  },
118
130
  };
119
131
  </script>
120
132
 
121
133
  <template>
122
- <div ref="chart"></div>
134
+ <div ref="chart" v-resize-observer="handleResize"></div>
123
135
  </template>
@@ -108,7 +108,7 @@ describe('gauge component', () => {
108
108
  createComponent({ value: 'not a number' });
109
109
 
110
110
  return wrapper.vm.$nextTick().then(() => {
111
- global.console.error.mockReset();
111
+ expect(wrapper).toHaveLoggedVueErrors();
112
112
  expect(findDetailText()).toBe(placeholder);
113
113
  });
114
114
  });
@@ -196,7 +196,7 @@ describe('gauge component', () => {
196
196
  it('if some of them are invalid values they are skipped', () => {
197
197
  createComponent({ thresholds: [undefined, 95, 'a string', NaN, 50, 15, 25] });
198
198
 
199
- global.console.error.mockReset();
199
+ expect(wrapper).toHaveLoggedVueErrors();
200
200
 
201
201
  expect(findAxisColor().length).toBe(3);
202
202
  });
@@ -215,7 +215,7 @@ describe('gauge component', () => {
215
215
  it('when some values are invalid', () => {
216
216
  createComponent({ thresholds: [NaN, 95, undefined, 'a string', 50, 15, 25] });
217
217
 
218
- global.console.error.mockReset();
218
+ expect(wrapper).toHaveLoggedVueErrors();
219
219
 
220
220
  expect(findAxisColor().length).toBe(3);
221
221
  expect(findAxisColor()[0]).toEqual([0.5, gaugeSafeHues[0]]);
@@ -235,12 +235,12 @@ describe('gauge component', () => {
235
235
  });
236
236
 
237
237
  describe('when thresholds that are not numbers are set, they will not show on the arc', () => {
238
- beforeEach(() => {
238
+ beforeEach(async () => {
239
239
  createComponent({ thresholds: ['not a number', NaN, undefined] });
240
240
 
241
- return wrapper.vm.$nextTick().then(() => {
242
- global.console.error.mockReset();
243
- });
241
+ await wrapper.vm.$nextTick();
242
+ // eslint-disable-next-line jest/no-standalone-expect
243
+ expect(wrapper).toHaveLoggedVueErrors();
244
244
  });
245
245
 
246
246
  it('axis has a single color set', () => {
@@ -1,7 +1,6 @@
1
1
  <script>
2
2
  import merge from 'lodash/merge';
3
3
  import { white, gray100 } from '../../../../scss_to_js/scss_variables';
4
- import { GlResizeObserverDirective } from '../../../directives/resize_observer/resize_observer';
5
4
  import { getDefaultTooltipContent } from '../../../utils/charts/config';
6
5
  import { TOOLTIP_LEFT_OFFSET } from '../../../utils/charts/constants';
7
6
  import { heatmapHues } from '../../../utils/charts/theme';
@@ -49,9 +48,6 @@ export default {
49
48
  ChartTooltip,
50
49
  TooltipDefaultFormat,
51
50
  },
52
- directives: {
53
- resizeObserver: GlResizeObserverDirective,
54
- },
55
51
  mixins: [ToolboxMixin],
56
52
  props: {
57
53
  options: {
@@ -237,9 +233,6 @@ export default {
237
233
  this.chart = chart;
238
234
  this.$emit('created', chart);
239
235
  },
240
- handleResize() {
241
- return this.responsive && this.chart.resize();
242
- },
243
236
  showHideTooltip(mouseEvent) {
244
237
  this.tooltip.show = this.chart.containPixel('grid', [mouseEvent.zrX, mouseEvent.zrY]);
245
238
  },
@@ -262,8 +255,8 @@ export default {
262
255
  </script>
263
256
 
264
257
  <template>
265
- <div v-resize-observer="handleResize" class="gl-heatmap">
266
- <chart :options="computedOptions" @created="onCreated" />
258
+ <div class="gl-heatmap">
259
+ <chart v-bind="$attrs" :options="computedOptions" @created="onCreated" v-on="$listeners" />
267
260
  <chart-tooltip
268
261
  v-if="chart"
269
262
  :show="tooltip.show"
@@ -1,4 +1,4 @@
1
- import { shallowMount, createLocalVue } from '@vue/test-utils';
1
+ import { shallowMount } from '@vue/test-utils';
2
2
  import Chart from '../chart/chart.vue';
3
3
  import SparklineChart from './sparkline.vue';
4
4
  import { waitForAnimationFrame } from '~/utils/test_utils';
@@ -19,14 +19,11 @@ jest.mock('~/directives/resize_observer/resize_observer', () => ({
19
19
  },
20
20
  }));
21
21
 
22
- const localVue = createLocalVue();
23
-
24
22
  describe('sparkline chart component', () => {
25
23
  let wrapper;
26
24
  let componentOptions;
27
25
  const factory = () => {
28
26
  componentOptions = {
29
- localVue,
30
27
  propsData: {
31
28
  data: [[]],
32
29
  variant: null,
@@ -181,7 +181,13 @@ export default {
181
181
  >
182
182
  <slot name="default"></slot>
183
183
  <div class="gl-flex-grow-1 gl-relative">
184
- <chart :height="height" :options="options" @created="onChartCreated" />
184
+ <chart
185
+ v-bind="$attrs"
186
+ :height="height"
187
+ :options="options"
188
+ @created="onChartCreated"
189
+ v-on="$listeners"
190
+ />
185
191
  <chart-tooltip
186
192
  v-if="chartInstance"
187
193
  :show="tooltip.show"
@@ -115,12 +115,9 @@ describe('Friendly wrap component', () => {
115
115
  });
116
116
 
117
117
  // Assert prop validation failed
118
- expect(global.console).toHaveLoggedVueErrors();
118
+ expect(wrapper).toHaveLoggedVueErrors();
119
119
 
120
120
  // But it still rendered
121
121
  expect(wrapper.text()).toBe('');
122
-
123
- // Prevent test failure due to console.error calls
124
- global.console.error.mockReset();
125
122
  });
126
123
  });
@@ -1,14 +1,11 @@
1
- import { shallowMount, createLocalVue } from '@vue/test-utils';
1
+ import { shallowMount } from '@vue/test-utils';
2
2
  import Intersperse from './intersperse.vue';
3
3
 
4
- const localVue = createLocalVue();
5
-
6
4
  describe('Intersperse Component', () => {
7
5
  let wrapper;
8
6
 
9
7
  const createComponent = (defaultSlot = [], options = {}) => {
10
8
  wrapper = shallowMount(Intersperse, {
11
- localVue,
12
9
  slots: {
13
10
  default: defaultSlot,
14
11
  },
@@ -1,9 +1,8 @@
1
- import { shallowMount, createLocalVue } from '@vue/test-utils';
1
+ import { shallowMount } from '@vue/test-utils';
2
2
  import { HoverLoadDirective as hoverLoad } from './hover_load';
3
3
 
4
4
  describe('hover load directive', () => {
5
5
  let wrapper;
6
- const localVue = createLocalVue();
7
6
  const findTarget = () => wrapper.find('.target');
8
7
 
9
8
  const createComponent = (handleLoad) => {
@@ -19,7 +18,7 @@ describe('hover load directive', () => {
19
18
  template: `<div v-hover-load="handleLoad" class="target"></div>`,
20
19
  };
21
20
 
22
- wrapper = shallowMount(component, { localVue });
21
+ wrapper = shallowMount(component);
23
22
  };
24
23
 
25
24
  afterEach(() => {
@@ -48,16 +47,6 @@ describe('hover load directive', () => {
48
47
  }
49
48
  );
50
49
 
51
- it.each([3, '', undefined, null, false, {}, []])(
52
- 'throws if the handler is %p instead of a function',
53
- (directiveValue) => {
54
- // we are going to throw, so we need to suppress error messages in jest output
55
- jest.spyOn(global.console, 'error').mockImplementation(() => {});
56
-
57
- expect(() => createComponent(directiveValue)).toThrow(TypeError);
58
- }
59
- );
60
-
61
50
  it('cleans up the mouseover event when component is destroyed', () => {
62
51
  createComponent(jest.fn());
63
52
 
@@ -121,9 +121,6 @@ describe('outside directive', () => {
121
121
 
122
122
  expect(global.console).toHaveLoggedVueErrors();
123
123
  expect(document.addEventListener).not.toHaveBeenCalled();
124
-
125
- // Prevent test failure due to console.error calls
126
- global.console.error.mockReset();
127
124
  });
128
125
 
129
126
  it('attaches the global listener on first initialisation', async () => {
@@ -212,9 +209,6 @@ describe('outside directive', () => {
212
209
  find('outside').trigger('click');
213
210
 
214
211
  expect(onClick.mock.calls).toEqual([]);
215
-
216
- // Prevent test failure due to console.error calls
217
- global.console.error.mockReset();
218
212
  }
219
213
  );
220
214
  });
@@ -313,6 +307,7 @@ describe('outside directive', () => {
313
307
  throw new Error('mock error');
314
308
  });
315
309
 
310
+ jest.spyOn(global.console, 'error');
316
311
  await createComponent({
317
312
  methods: {
318
313
  onClickThrow,
@@ -1,4 +1,4 @@
1
- import { shallowMount, createLocalVue } from '@vue/test-utils';
1
+ import { shallowMount } from '@vue/test-utils';
2
2
  import { GlResizeObserverDirective } from './resize_observer';
3
3
  import { useMockResizeObserver } from '~helpers/mock_dom_observer';
4
4
 
@@ -6,8 +6,6 @@ describe('resize observer directive', () => {
6
6
  const { trigger, observersCount, observesElement } = useMockResizeObserver();
7
7
 
8
8
  const mockHandleResize = jest.fn();
9
-
10
- const localVue = createLocalVue();
11
9
  let wrapper;
12
10
 
13
11
  const createComponent = ({ template, data = {} } = {}) => {
@@ -26,7 +24,7 @@ describe('resize observer directive', () => {
26
24
  },
27
25
  };
28
26
 
29
- wrapper = shallowMount(component, { localVue });
27
+ wrapper = shallowMount(component);
30
28
  };
31
29
 
32
30
  it('shares one observer between multiple directive instances', () => {
@@ -102,11 +100,6 @@ describe('resize observer directive', () => {
102
100
  });
103
101
 
104
102
  describe('check directive value', () => {
105
- afterEach(() => {
106
- // we are going to throw, so we need to suppress Vue error messages in jest output
107
- global.console.error.mockReset();
108
- });
109
-
110
103
  it.each([3, '', undefined, null, false, {}, []])(
111
104
  'throws if the handler is %p instead of a function',
112
105
  (directiveValue) => {
@@ -123,8 +116,9 @@ describe('resize observer directive', () => {
123
116
  };
124
117
 
125
118
  expect(() => {
126
- wrapper = shallowMount(testComponentWithoutHandler, { localVue });
119
+ wrapper = shallowMount(testComponentWithoutHandler);
127
120
  }).toThrow(TypeError);
121
+ expect(wrapper).toHaveLoggedVueErrors();
128
122
  }
129
123
  );
130
124
  });
@@ -12,3 +12,11 @@
12
12
  @import 'utilities';
13
13
 
14
14
  @import 'components';
15
+
16
+ /**
17
+ * Custom padding for docs pages. This improves the integration in Pajamas pages.
18
+ */
19
+ .sbdocs-wrapper {
20
+ padding-top: $gl-spacing-scale-2 !important;
21
+ padding-bottom: 0 !important;
22
+ }
@@ -6113,6 +6113,14 @@
6113
6113
  transform: translateX(100%) !important
6114
6114
  }
6115
6115
 
6116
+ .gl-translate-x-n50 {
6117
+ transform: translateX(-50%)
6118
+ }
6119
+
6120
+ .gl-translate-x-n50\! {
6121
+ transform: translateX(-50%) !important
6122
+ }
6123
+
6116
6124
  .gl-translate-y-0 {
6117
6125
  transform: translateY(0)
6118
6126
  }
@@ -13,6 +13,10 @@
13
13
  transform: translateX(100%);
14
14
  }
15
15
 
16
+ @mixin gl-translate-x-n50 {
17
+ transform: translateX(-50%);
18
+ }
19
+
16
20
  @mixin gl-translate-y-0 {
17
21
  transform: translateY(0);
18
22
  }
@@ -1,38 +0,0 @@
1
- import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
2
-
3
- /* script */
4
-
5
- /* template */
6
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-avatar',{attrs:{"entity-name":"Some Project","shape":"rect"}})};
7
- var __vue_staticRenderFns__ = [];
8
-
9
- /* style */
10
- const __vue_inject_styles__ = undefined;
11
- /* scoped */
12
- const __vue_scope_id__ = undefined;
13
- /* module identifier */
14
- const __vue_module_identifier__ = undefined;
15
- /* functional template */
16
- const __vue_is_functional_template__ = false;
17
- /* style inject */
18
-
19
- /* style inject SSR */
20
-
21
- /* style inject shadow dom */
22
-
23
-
24
-
25
- const __vue_component__ = __vue_normalize__(
26
- { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
27
- __vue_inject_styles__,
28
- {},
29
- __vue_scope_id__,
30
- __vue_is_functional_template__,
31
- __vue_module_identifier__,
32
- false,
33
- undefined,
34
- undefined,
35
- undefined
36
- );
37
-
38
- export default __vue_component__;
@@ -1,38 +0,0 @@
1
- import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
2
-
3
- /* script */
4
-
5
- /* template */
6
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-avatar',{attrs:{"src":"https://about.gitlab.com/images/press/gitlab-summit-south-africa.jpg"}})};
7
- var __vue_staticRenderFns__ = [];
8
-
9
- /* style */
10
- const __vue_inject_styles__ = undefined;
11
- /* scoped */
12
- const __vue_scope_id__ = undefined;
13
- /* module identifier */
14
- const __vue_module_identifier__ = undefined;
15
- /* functional template */
16
- const __vue_is_functional_template__ = false;
17
- /* style inject */
18
-
19
- /* style inject SSR */
20
-
21
- /* style inject shadow dom */
22
-
23
-
24
-
25
- const __vue_component__ = __vue_normalize__(
26
- { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
27
- __vue_inject_styles__,
28
- {},
29
- __vue_scope_id__,
30
- __vue_is_functional_template__,
31
- __vue_module_identifier__,
32
- false,
33
- undefined,
34
- undefined,
35
- undefined
36
- );
37
-
38
- export default __vue_component__;