@gitlab/ui 32.39.0 → 32.43.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 (137) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/components/base/form/form_input_group/form_input_group.js +6 -1
  3. package/dist/components/base/markdown/markdown.documentation.js +2 -6
  4. package/dist/components/base/search_box_by_click/search_box_by_click.js +1 -0
  5. package/dist/components/base/search_box_by_type/search_box_by_type.js +1 -1
  6. package/dist/components/base/token_selector/token_selector.documentation.js +2 -106
  7. package/dist/components/base/token_selector/token_selector.js +85 -1
  8. package/dist/components/base/tooltip/tooltip.documentation.js +2 -6
  9. package/dist/components/charts/area/area.js +1 -1
  10. package/dist/components/charts/column/column.js +1 -1
  11. package/dist/components/charts/discrete_scatter/discrete_scatter.js +1 -1
  12. package/dist/components/charts/line/line.js +1 -1
  13. package/dist/utility_classes.css +1 -1
  14. package/dist/utility_classes.css.map +1 -1
  15. package/documentation/documented_stories.js +3 -0
  16. package/package.json +13 -13
  17. package/src/components/base/accordion/accordion.spec.js +0 -4
  18. package/src/components/base/accordion/accordion_item.spec.js +0 -4
  19. package/src/components/base/alert/alert.spec.js +0 -4
  20. package/src/components/base/avatar_labeled/avatar_labeled.spec.js +0 -2
  21. package/src/components/base/avatars_inline/avatars_inline.spec.js +0 -2
  22. package/src/components/base/badge/badge.spec.js +0 -2
  23. package/src/components/base/broadcast_message/broadcast_message.spec.js +0 -4
  24. package/src/components/base/button/button.spec.js +0 -5
  25. package/src/components/base/card/card.spec.js +0 -5
  26. package/src/components/base/carousel/carousel.spec.js +0 -4
  27. package/src/components/base/collapse/collapse.spec.js +0 -4
  28. package/src/components/base/datepicker/datepicker.spec.js +0 -4
  29. package/src/components/base/daterange_picker/daterange_picker.spec.js +0 -5
  30. package/src/components/base/drawer/drawer.spec.js +0 -4
  31. package/src/components/base/dropdown/dropdown.spec.js +0 -2
  32. package/src/components/base/dropdown/dropdown_item.spec.js +0 -2
  33. package/src/components/base/filtered_search/filtered_search.spec.js +0 -10
  34. package/src/components/base/filtered_search/filtered_search_suggestion.spec.js +0 -5
  35. package/src/components/base/filtered_search/filtered_search_suggestion_list.spec.js +0 -5
  36. package/src/components/base/filtered_search/filtered_search_term.spec.js +0 -5
  37. package/src/components/base/filtered_search/filtered_search_token.spec.js +0 -5
  38. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.spec.js +0 -5
  39. package/src/components/base/form/form_combobox/form_combobox.spec.js +0 -4
  40. package/src/components/base/form/form_input/form_input.spec.js +0 -5
  41. package/src/components/base/form/form_input_group/form_input_group.spec.js +18 -5
  42. package/src/components/base/form/form_input_group/form_input_group.vue +6 -1
  43. package/src/components/base/form/form_radio/form_radio.spec.js +0 -4
  44. package/src/components/base/form/form_radio_group/form_radio_group.spec.js +0 -4
  45. package/src/components/base/form/form_select/form_select.spec.js +0 -5
  46. package/src/components/base/form/form_textarea/form_textarea.spec.js +0 -5
  47. package/src/components/base/icon/icon.spec.js +0 -2
  48. package/src/components/base/infinite_scroll/infinite_scroll.spec.js +0 -1
  49. package/src/components/base/keyset_pagination/keyset_pagination.spec.js +0 -5
  50. package/src/components/base/label/label.spec.js +0 -4
  51. package/src/components/base/link/link.spec.js +0 -5
  52. package/src/components/base/loading_icon/loading_icon.spec.js +0 -4
  53. package/src/components/base/markdown/markdown.documentation.js +0 -3
  54. package/src/components/base/markdown/markdown.md +0 -2
  55. package/src/components/base/markdown/markdown.stories.js +25 -24
  56. package/src/components/base/modal/modal.spec.js +0 -1
  57. package/src/components/base/nav/nav.spec.js +0 -4
  58. package/src/components/base/nav/nav_item.spec.js +0 -4
  59. package/src/components/base/nav/nav_item_dropdown.spec.js +0 -4
  60. package/src/components/base/paginated_list/paginated_list.spec.js +0 -6
  61. package/src/components/base/pagination/pagination.spec.js +0 -1
  62. package/src/components/base/path/path.spec.js +0 -5
  63. package/src/components/base/popover/popover.spec.js +0 -5
  64. package/src/components/base/search_box_by_click/search_box_by_click.spec.js +0 -4
  65. package/src/components/base/search_box_by_click/search_box_by_click.vue +1 -0
  66. package/src/components/base/search_box_by_type/search_box_by_type.spec.js +0 -5
  67. package/src/components/base/search_box_by_type/search_box_by_type.vue +1 -1
  68. package/src/components/base/segmented_control/segmented_control.spec.js +0 -4
  69. package/src/components/base/skeleton_loader/skeleton_loader.spec.js +0 -5
  70. package/src/components/base/sorting/sorting.spec.js +0 -4
  71. package/src/components/base/sorting/sorting_item.spec.js +0 -4
  72. package/src/components/base/tabs/tabs/scrollable_tabs.spec.js +0 -5
  73. package/src/components/base/toggle/toggle.spec.js +0 -4
  74. package/src/components/base/token/token.spec.js +0 -4
  75. package/src/components/base/token_selector/token_container.spec.js +0 -2
  76. package/src/components/base/token_selector/token_selector.documentation.js +0 -137
  77. package/src/components/base/token_selector/token_selector.md +0 -6
  78. package/src/components/base/token_selector/token_selector.spec.js +0 -5
  79. package/src/components/base/token_selector/token_selector.stories.js +96 -113
  80. package/src/components/base/token_selector/token_selector.vue +89 -1
  81. package/src/components/base/token_selector/token_selector_dropdown.spec.js +0 -5
  82. package/src/components/base/tooltip/tooltip.documentation.js +0 -3
  83. package/src/components/base/tooltip/tooltip.md +3 -5
  84. package/src/components/base/tooltip/tooltip.spec.js +0 -5
  85. package/src/components/base/tooltip/tooltip.stories.js +49 -25
  86. package/src/components/base/tooltip/tooltip.vue +1 -0
  87. package/src/components/charts/area/area.spec.js +8 -24
  88. package/src/components/charts/area/area.vue +9 -12
  89. package/src/components/charts/bar/bar.spec.js +4 -11
  90. package/src/components/charts/chart/chart.spec.js +0 -4
  91. package/src/components/charts/column/column.vue +3 -2
  92. package/src/components/charts/column/column_chart.spec.js +35 -19
  93. package/src/components/charts/discrete_scatter/discrete_scatter.stories.js +1 -0
  94. package/src/components/charts/discrete_scatter/discrete_scatter.vue +5 -8
  95. package/src/components/charts/gauge/gauge.spec.js +2 -24
  96. package/src/components/charts/heatmap/heatmap.spec.js +6 -23
  97. package/src/components/charts/legend/legend.spec.js +8 -14
  98. package/src/components/charts/line/line.spec.js +19 -30
  99. package/src/components/charts/line/line.vue +3 -2
  100. package/src/components/charts/single_stat/single_stat.spec.js +0 -4
  101. package/src/components/charts/sparkline/sparkline.spec.js +9 -15
  102. package/src/components/charts/stacked_column/stacked_column.spec.js +2 -30
  103. package/src/components/shared_components/clear_icon_button/clear_icon_button.spec.js +0 -4
  104. package/src/components/shared_components/close_button/close_button.spec.js +0 -4
  105. package/src/components/utilities/friendly_wrap/friendly_wrap.spec.js +0 -4
  106. package/src/components/utilities/intersection_observer/intersection_observer.spec.js +1 -1
  107. package/src/components/utilities/sprintf/sprintf.spec.js +0 -4
  108. package/src/components/utilities/truncate/truncate.spec.js +10 -15
  109. package/src/directives/hover_load/hover_load.spec.js +0 -1
  110. package/src/directives/outside/outside.spec.js +0 -4
  111. package/src/directives/resize_observer/resize_observer.spec.js +0 -4
  112. package/src/directives/safe_html/safe_html.spec.js +0 -4
  113. package/src/directives/safe_link/safe_link.spec.js +0 -5
  114. package/src/scss/utilities.scss +26 -0
  115. package/src/scss/utility-mixins/sizing.scss +6 -0
  116. package/src/scss/utility-mixins/spacing.scss +4 -0
  117. package/src/scss/utility-mixins/z-index.scss +4 -0
  118. package/dist/components/base/markdown/examples/index.js +0 -13
  119. package/dist/components/base/markdown/examples/markdown.basic.example.js +0 -38
  120. package/dist/components/base/token_selector/examples/index.js +0 -19
  121. package/dist/components/base/token_selector/examples/token_selector.user_defined_tokens.example.js +0 -48
  122. package/dist/components/base/token_selector/examples/token_selector.users.example.js +0 -202
  123. package/dist/components/base/tooltip/examples/index.js +0 -31
  124. package/dist/components/base/tooltip/examples/tooltip.directive_bottom.example.js +0 -38
  125. package/dist/components/base/tooltip/examples/tooltip.directive_default.example.js +0 -38
  126. package/dist/components/base/tooltip/examples/tooltip.directive_left.example.js +0 -38
  127. package/dist/components/base/tooltip/examples/tooltip.directive_right.example.js +0 -38
  128. package/src/components/base/markdown/examples/index.js +0 -15
  129. package/src/components/base/markdown/examples/markdown.basic.example.vue +0 -15
  130. package/src/components/base/token_selector/examples/index.js +0 -22
  131. package/src/components/base/token_selector/examples/token_selector.user_defined_tokens.example.vue +0 -17
  132. package/src/components/base/token_selector/examples/token_selector.users.example.vue +0 -212
  133. package/src/components/base/tooltip/examples/index.js +0 -36
  134. package/src/components/base/tooltip/examples/tooltip.directive_bottom.example.vue +0 -7
  135. package/src/components/base/tooltip/examples/tooltip.directive_default.example.vue +0 -5
  136. package/src/components/base/tooltip/examples/tooltip.directive_left.example.vue +0 -7
  137. package/src/components/base/tooltip/examples/tooltip.directive_right.example.vue +0 -7
@@ -91,6 +91,9 @@ export const setupStorybookReadme = () =>
91
91
  'GlDaterangePicker',
92
92
  'GlBarChart',
93
93
  'GlCarousel',
94
+ 'GlMarkdown',
95
+ 'GlTokenSelector',
96
+ 'GlTooltip',
94
97
  ],
95
98
  components: {
96
99
  GlComponentDocumentation,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitlab/ui",
3
- "version": "32.39.0",
3
+ "version": "32.43.0",
4
4
  "description": "GitLab UI Components",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -82,21 +82,21 @@
82
82
  "@arkweid/lefthook": "^0.7.6",
83
83
  "@babel/core": "^7.10.2",
84
84
  "@babel/preset-env": "^7.10.2",
85
- "@gitlab/eslint-plugin": "9.4.0",
85
+ "@gitlab/eslint-plugin": "10.0.0",
86
86
  "@gitlab/stylelint-config": "2.6.0",
87
- "@gitlab/svgs": "1.220.0",
87
+ "@gitlab/svgs": "1.225.0",
88
88
  "@rollup/plugin-commonjs": "^11.1.0",
89
89
  "@rollup/plugin-node-resolve": "^7.1.3",
90
90
  "@rollup/plugin-replace": "^2.3.2",
91
- "@storybook/addon-a11y": "6.3.12",
92
- "@storybook/addon-docs": "6.3.12",
93
- "@storybook/addon-essentials": "6.3.12",
94
- "@storybook/addon-knobs": "6.3.1",
95
- "@storybook/addon-storyshots": "6.3.12",
96
- "@storybook/addon-storyshots-puppeteer": "6.3.12",
97
- "@storybook/addon-viewport": "6.3.12",
98
- "@storybook/theming": "6.3.12",
99
- "@storybook/vue": "6.3.12",
91
+ "@storybook/addon-a11y": "6.4.5",
92
+ "@storybook/addon-docs": "6.4.5",
93
+ "@storybook/addon-essentials": "6.4.5",
94
+ "@storybook/addon-knobs": "6.4.0",
95
+ "@storybook/addon-storyshots": "6.4.5",
96
+ "@storybook/addon-storyshots-puppeteer": "6.4.5",
97
+ "@storybook/addon-viewport": "6.4.5",
98
+ "@storybook/theming": "6.4.5",
99
+ "@storybook/vue": "6.4.5",
100
100
  "@vue/test-utils": "1.1.3",
101
101
  "autoprefixer": "^9.7.6",
102
102
  "babel-jest": "^26.6.3",
@@ -129,7 +129,7 @@
129
129
  "postcss-scss": "^2.1.1",
130
130
  "prettier": "2.2.1",
131
131
  "pug": "^2.0.3",
132
- "puppeteer": "^10.4.0",
132
+ "puppeteer": "11.0.0",
133
133
  "raw-loader": "^0.5.1",
134
134
  "rollup": "^2.53.1",
135
135
  "rollup-plugin-babel": "^4.4.0",
@@ -6,10 +6,6 @@ import GlAccordionItem from './accordion_item.vue';
6
6
  describe('GlAccordion', () => {
7
7
  let wrapper;
8
8
 
9
- afterEach(() => {
10
- wrapper.destroy();
11
- });
12
-
13
9
  const createComponent = ({ headerLevel = 3, autoCollapse = false } = {}) => {
14
10
  wrapper = mount(
15
11
  Vue.extend({
@@ -10,10 +10,6 @@ describe('GlAccordionItem', () => {
10
10
  const defaultTitle = 'Item 1';
11
11
  const defaultSlot = 'Hello';
12
12
 
13
- afterEach(() => {
14
- wrapper.destroy();
15
- });
16
-
17
13
  const createComponent = (props = {}, { defaultHeaderLevel = 3, accordionSetId = false } = {}) => {
18
14
  wrapper = mount(GlAccordionItem, {
19
15
  directives: {
@@ -26,10 +26,6 @@ describe('Alert component', () => {
26
26
  const findActionsContainer = () => wrapper.find('.gl-alert-actions');
27
27
  const findActionButtons = () => wrapper.findAll('.gl-alert-action');
28
28
 
29
- afterEach(() => {
30
- wrapper.destroy();
31
- });
32
-
33
29
  describe('by default', () => {
34
30
  beforeEach(() => {
35
31
  createComponent({ slots: { default: DummyComponent } });
@@ -20,8 +20,6 @@ describe('avatar labeled', () => {
20
20
  });
21
21
  };
22
22
 
23
- afterEach(() => wrapper.destroy());
24
-
25
23
  it('sets avatar alt attribute to an empty string', () => {
26
24
  const altText = 'alt text';
27
25
 
@@ -23,8 +23,6 @@ describe('avatars inline', () => {
23
23
 
24
24
  const findBadgeTooltip = () => wrapper.findComponent(GlTooltip);
25
25
 
26
- afterEach(() => wrapper.destroy());
27
-
28
26
  it('displays all avatars when component is not collapsed', () => {
29
27
  buildWrapper({ avatars, maxVisible: 1, avatarSize: 24, collapsed: false });
30
28
 
@@ -15,8 +15,6 @@ describe('badge', () => {
15
15
  });
16
16
  };
17
17
 
18
- afterEach(() => wrapper.destroy());
19
-
20
18
  describe('with "icon" prop', () => {
21
19
  describe.each`
22
20
  scenario | hasSlot | iconName | expectedRole
@@ -14,10 +14,6 @@ describe('Broadcast message component', () => {
14
14
  createComponent({ slots: { default: 'some message' } });
15
15
  });
16
16
 
17
- afterEach(() => {
18
- wrapper.destroy();
19
- });
20
-
21
17
  it('clicking on dismiss button emits a dismiss event', () => {
22
18
  findDismissButton().vm.$emit('click');
23
19
 
@@ -10,11 +10,6 @@ describe('button component', () => {
10
10
  };
11
11
  const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon);
12
12
 
13
- afterEach(() => {
14
- wrapper.destroy();
15
- wrapper = null;
16
- });
17
-
18
13
  it('renders a button', () => {
19
14
  buildWrapper();
20
15
 
@@ -20,11 +20,6 @@ describe('GlCard', () => {
20
20
  const findHeader = () => wrapper.find('.gl-card-header');
21
21
  const findFooter = () => wrapper.find('.gl-card-footer');
22
22
 
23
- afterEach(() => {
24
- wrapper.destroy();
25
- wrapper = null;
26
- });
27
-
28
23
  describe('with just the body content', () => {
29
24
  beforeEach(() => {
30
25
  createWrapper({
@@ -17,10 +17,6 @@ describe('Carousel component', () => {
17
17
  });
18
18
  });
19
19
 
20
- afterEach(() => {
21
- wrapper.destroy();
22
- });
23
-
24
20
  it('renders a BCarousel component', () => {
25
21
  expect(wrapper.findComponent(BCarousel).exists()).toBe(true);
26
22
  });
@@ -17,10 +17,6 @@ describe('Collapse component', () => {
17
17
  });
18
18
  });
19
19
 
20
- afterEach(() => {
21
- wrapper.destroy();
22
- });
23
-
24
20
  it('renders a BCollapse', () => {
25
21
  expect(wrapper.findComponent(BCollapse).exists()).toBe(true);
26
22
  });
@@ -148,10 +148,6 @@ describe('datepicker component', () => {
148
148
  clearButton = findClearButton(wrapper);
149
149
  };
150
150
 
151
- afterEach(() => {
152
- wrapper.destroy();
153
- });
154
-
155
151
  it('renders clear button', async () => {
156
152
  await setup();
157
153
 
@@ -24,11 +24,6 @@ describe('Daterange Picker', () => {
24
24
  const findStartPicker = () => wrapper.findAllComponents(Datepicker).at(0);
25
25
  const findEndPicker = () => wrapper.findAllComponents(Datepicker).at(1);
26
26
 
27
- afterEach(() => {
28
- wrapper.destroy();
29
- wrapper = null;
30
- });
31
-
32
27
  it('renders two datepickers', () => {
33
28
  factory();
34
29
  expect(findStartPicker().exists()).toBe(true);
@@ -7,10 +7,6 @@ describe('drawer component', () => {
7
7
  wrapper = shallowMount(Drawer, { propsData: props, slots });
8
8
  };
9
9
 
10
- afterEach(() => {
11
- wrapper.destroy();
12
- });
13
-
14
10
  describe('default settings', () => {
15
11
  describe('when open is true', () => {
16
12
  it('makes gl-drawer visible when open is true', () => {
@@ -24,8 +24,6 @@ describe('new dropdown', () => {
24
24
  });
25
25
  };
26
26
 
27
- afterEach(() => wrapper.destroy());
28
-
29
27
  const findByTestId = (testId) => wrapper.find(`[data-testid="${testId}"]`);
30
28
 
31
29
  const findSplitButton = () => wrapper.find('.btn:not(.gl-dropdown-toggle)');
@@ -14,8 +14,6 @@ describe('dropdown item', () => {
14
14
 
15
15
  const findCheckbox = () => wrapper.find('[data-testid="dropdown-item-checkbox"]');
16
16
 
17
- afterEach(() => wrapper.destroy());
18
-
19
17
  describe('checkbox', () => {
20
18
  it.each`
21
19
  props | shouldExist
@@ -39,11 +39,6 @@ describe('Filtered search', () => {
39
39
  });
40
40
  };
41
41
 
42
- afterEach(() => {
43
- wrapper.destroy();
44
- wrapper = null;
45
- });
46
-
47
42
  describe('value manipulation', () => {
48
43
  it('creates term when empty', () => {
49
44
  createComponent();
@@ -423,11 +418,6 @@ describe('Filtered search integration tests', () => {
423
418
  }
424
419
  });
425
420
 
426
- afterEach(() => {
427
- wrapper.destroy();
428
- wrapper = null;
429
- });
430
-
431
421
  describe('when first term is clicked', () => {
432
422
  beforeEach(async () => {
433
423
  mountComponent();
@@ -25,11 +25,6 @@ describe('Filtered search suggestion component', () => {
25
25
  });
26
26
  });
27
27
 
28
- afterEach(() => {
29
- wrapper.destroy();
30
- wrapper = null;
31
- });
32
-
33
28
  beforeAll(() => {
34
29
  if (!HTMLElement.prototype.scrollIntoView) {
35
30
  HTMLElement.prototype.scrollIntoView = jest.fn();
@@ -12,11 +12,6 @@ describe('Filtered search suggestion list component', () => {
12
12
  });
13
13
  });
14
14
 
15
- afterEach(() => {
16
- wrapper.destroy();
17
- wrapper = null;
18
- });
19
-
20
15
  it('has expected public methods', () => {
21
16
  expect(wrapper.vm.register).toBeInstanceOf(Function);
22
17
  expect(wrapper.vm.unregister).toBeInstanceOf(Function);
@@ -29,11 +29,6 @@ describe('Filtered search term', () => {
29
29
  });
30
30
  };
31
31
 
32
- afterEach(() => {
33
- wrapper.destroy();
34
- wrapper = null;
35
- });
36
-
37
32
  it('renders value in inactive mode', () => {
38
33
  createComponent({ value: { data: 'test-value' } });
39
34
  expect(wrapper.html()).toMatchSnapshot();
@@ -38,11 +38,6 @@ describe('Filtered search token', () => {
38
38
  });
39
39
  };
40
40
 
41
- afterEach(() => {
42
- wrapper.destroy();
43
- wrapper = null;
44
- });
45
-
46
41
  describe('when activated', () => {
47
42
  it('emits activate when operator segment is clicked', () => {
48
43
  createComponent();
@@ -108,11 +108,6 @@ describe('GlFormCheckboxTree', () => {
108
108
  });
109
109
  };
110
110
 
111
- afterEach(() => {
112
- wrapper.destroy();
113
- wrapper = null;
114
- });
115
-
116
111
  describe.each`
117
112
  description | shape | expected | initiallyChecked | indeterminateBoxes
118
113
  ${'non-nested'} | ${SHAPE.NO_NESTING} | ${5} | ${['1', '2', '3']} | ${[]}
@@ -48,10 +48,6 @@ describe('GlFormCombobox', () => {
48
48
  const setInput = (val) => findInput().setValue(val);
49
49
  const arrowDown = () => findInput().trigger('keydown.down');
50
50
 
51
- afterEach(() => {
52
- wrapper.destroy();
53
- });
54
-
55
51
  describe('match and filter functionality', () => {
56
52
  beforeEach(() => {
57
53
  createComponent();
@@ -14,11 +14,6 @@ describe('GlFormInput', () => {
14
14
  });
15
15
  };
16
16
 
17
- afterEach(() => {
18
- wrapper.destroy();
19
- wrapper = null;
20
- });
21
-
22
17
  describe('size prop', () => {
23
18
  // Exclude the default null value
24
19
  const sizes = Object.values(formInputSizes).filter(Boolean);
@@ -1,5 +1,5 @@
1
1
  import { shallowMount } from '@vue/test-utils';
2
- import { BInputGroup } from 'bootstrap-vue';
2
+ import { BInputGroup, BFormInput } from 'bootstrap-vue';
3
3
  import GlDropdownItem from '../../dropdown/dropdown_item.vue';
4
4
  import InputGroup from './form_input_group.vue';
5
5
 
@@ -12,10 +12,6 @@ describe('Input Group', () => {
12
12
  });
13
13
  };
14
14
 
15
- afterEach(() => {
16
- wrapper.destroy();
17
- });
18
-
19
15
  it('renders without errors', () => {
20
16
  createWrapper();
21
17
  expect(wrapper.findComponent(BInputGroup).exists()).toBe(true);
@@ -54,6 +50,23 @@ describe('Input Group', () => {
54
50
  expect(wrapper.emitted('input')).toBeUndefined();
55
51
  });
56
52
 
53
+ describe('`inputClass` prop', () => {
54
+ it.each`
55
+ inputClass
56
+ ${'foo-bar baz'}
57
+ ${['foo-bar', 'baz']}
58
+ ${{ 'foo-bar': true, baz: true }}
59
+ `('correctly adds classes to input when `inputClass` prop is $inputClass', ({ inputClass }) => {
60
+ createWrapper({
61
+ propsData: { inputClass },
62
+ });
63
+
64
+ expect(wrapper.findComponent(BFormInput).classes()).toEqual(
65
+ expect.arrayContaining(['gl-form-input', 'foo-bar', 'baz'])
66
+ );
67
+ });
68
+ });
69
+
57
70
  describe('predefined options', () => {
58
71
  const options = [
59
72
  { name: 'Foo', value: 'foo.com' },
@@ -32,6 +32,11 @@ export default {
32
32
  required: false,
33
33
  default: undefined,
34
34
  },
35
+ inputClass: {
36
+ type: [String, Array, Object],
37
+ required: false,
38
+ default: '',
39
+ },
35
40
  },
36
41
  data() {
37
42
  return {
@@ -73,7 +78,7 @@ export default {
73
78
  <b-form-input
74
79
  ref="input"
75
80
  v-model="localValue"
76
- class="gl-form-input"
81
+ :class="['gl-form-input', inputClass]"
77
82
  :aria-label="label"
78
83
  v-bind="$attrs"
79
84
  v-on="$listeners"
@@ -44,10 +44,6 @@ describe('GlFormRadio', () => {
44
44
  createWrapper();
45
45
  });
46
46
 
47
- afterEach(() => {
48
- wrapper.destroy();
49
- });
50
-
51
47
  it('checks the radio button correctly on mount', () => {
52
48
  const radio = findRadio(firstOption.value);
53
49
  expect(radio.element.checked).toBe(true);
@@ -35,10 +35,6 @@ describe('GlFormRadioGroup', () => {
35
35
  createWrapper();
36
36
  });
37
37
 
38
- afterEach(() => {
39
- wrapper.destroy();
40
- });
41
-
42
38
  it('checks the radio button correctly on mount', () => {
43
39
  const radio = findRadio(firstOption.value);
44
40
  expect(radio.element.checked).toBe(true);
@@ -15,11 +15,6 @@ describe('GlFormSelect', () => {
15
15
  });
16
16
  };
17
17
 
18
- afterEach(() => {
19
- wrapper.destroy();
20
- wrapper = null;
21
- });
22
-
23
18
  describe('state prop', () => {
24
19
  it.each`
25
20
  state | expectedClasses
@@ -13,11 +13,6 @@ describe('GlFormTextArea', () => {
13
13
  });
14
14
  };
15
15
 
16
- afterEach(() => {
17
- wrapper.destroy();
18
- wrapper = null;
19
- });
20
-
21
16
  describe('v-model', () => {
22
17
  describe('value binding', () => {
23
18
  beforeEach(() => {
@@ -29,8 +29,6 @@ describe('Icon component', () => {
29
29
  const validateName = (name) => Icon.props.name.validator(name);
30
30
 
31
31
  afterEach(() => {
32
- wrapper.destroy();
33
-
34
32
  if (consoleSpy) {
35
33
  consoleSpy.mockRestore();
36
34
  }
@@ -60,7 +60,6 @@ describe('Infinite Scroll component', () => {
60
60
 
61
61
  afterEach(() => {
62
62
  throttle.mockClear();
63
- wrapper.destroy();
64
63
  });
65
64
 
66
65
  it('emits nothing on creation', () => {
@@ -17,11 +17,6 @@ describe('GlKeysetPagination', () => {
17
17
  });
18
18
  };
19
19
 
20
- afterEach(() => {
21
- wrapper.destroy();
22
- wrapper = null;
23
- });
24
-
25
20
  const findPrevButton = () => wrapper.find('[data-testid="prevButton"]');
26
21
  const findNextButton = () => wrapper.find('[data-testid="nextButton"]');
27
22
 
@@ -35,10 +35,6 @@ describe('Label component', () => {
35
35
  });
36
36
  };
37
37
 
38
- afterEach(() => {
39
- wrapper.destroy();
40
- });
41
-
42
38
  const findLink = () => wrapper.findComponent(GlLink);
43
39
  const findTitle = () => wrapper.find('.gl-label-text');
44
40
  const findSubTitle = () => wrapper.find('.gl-label-text-scoped');
@@ -8,11 +8,6 @@ describe('link component', () => {
8
8
  wrapper = mount(Link, options);
9
9
  };
10
10
 
11
- afterEach(() => {
12
- wrapper.destroy();
13
- wrapper = null;
14
- });
15
-
16
11
  describe('default settings', () => {
17
12
  beforeEach(() => {
18
13
  createWrapper();
@@ -11,10 +11,6 @@ describe('loading icon component', () => {
11
11
  const findSpinnerEl = () => wrapper.find(`.${baseCssClass}`);
12
12
  const getSpinnerClasses = () => findSpinnerEl().classes();
13
13
 
14
- afterEach(() => {
15
- wrapper.destroy();
16
- });
17
-
18
14
  describe('display', () => {
19
15
  it('should render as a block by default', () => {
20
16
  createComponent();
@@ -1,8 +1,5 @@
1
- import examples from './examples';
2
1
  import * as description from './markdown.md';
3
2
 
4
3
  export default {
5
4
  description,
6
- examples,
7
- propsInfo: {},
8
5
  };
@@ -1,5 +1,3 @@
1
- # GlMarkdown
2
-
3
1
  The `GlMarkdown` component styles markdown-generated HTML following the Pajamas Documentation Markdown
4
2
  [styling specifications](https://www.figma.com/file/qEddyqCrI7kPSBjGmwkZzQ/Pajamas-UI-Kit---Beta?node-id=542%3A2).
5
3
 
@@ -1,30 +1,31 @@
1
- import { withKnobs, boolean } from '@storybook/addon-knobs';
2
- import { documentedStoriesOf } from '../../../../documentation/documented_stories';
3
1
  import readme from './markdown.md';
4
2
  import GlMarkdown from './markdown.vue';
5
3
  import markdownTypescaleDemoContent from './markdown_typescale_demo.html';
6
4
 
7
- const components = {
8
- GlMarkdown,
9
- };
5
+ const template = `
6
+ <gl-markdown :compact="compact">${markdownTypescaleDemoContent}</gl-markdown>
7
+ `;
8
+
9
+ const generateProps = ({ compact = false } = {}) => ({ compact });
10
+
11
+ const Template = (args, { argTypes }) => ({
12
+ components: { GlMarkdown },
13
+ props: Object.keys(argTypes),
14
+ template,
15
+ });
10
16
 
11
- documentedStoriesOf('base/markdown', readme)
12
- .addDecorator(withKnobs)
13
- .add(
14
- 'typescale',
15
- () => ({
16
- components,
17
- props: {
18
- compact: {
19
- type: Boolean,
20
- default: boolean('compact', false),
21
- },
17
+ export const Typescale = Template.bind({});
18
+ Typescale.args = generateProps();
19
+
20
+ export default {
21
+ title: 'base/markdown',
22
+ component: GlMarkdown,
23
+ parameters: {
24
+ docs: {
25
+ description: {
26
+ component: readme,
22
27
  },
23
- template: `
24
- <gl-markdown :compact="compact">${markdownTypescaleDemoContent}</gl-markdown>
25
- `,
26
- }),
27
- {
28
- viewport: { defaultViewport: 'breakpointExtraLarge' },
29
- }
30
- );
28
+ },
29
+ knobs: { disabled: true },
30
+ },
31
+ };
@@ -59,7 +59,6 @@ describe('Modal component', () => {
59
59
  };
60
60
 
61
61
  afterEach(() => {
62
- wrapper.destroy();
63
62
  jest.clearAllMocks();
64
63
  });
65
64
 
@@ -5,10 +5,6 @@ import GlNavItem from './nav_item.vue';
5
5
  describe('GlNav', () => {
6
6
  let wrapper;
7
7
 
8
- afterEach(() => {
9
- wrapper.destroy();
10
- });
11
-
12
8
  describe('Nav style', () => {
13
9
  it('renders slot content', () => {
14
10
  wrapper = shallowMount(GlNav, {
@@ -4,10 +4,6 @@ import GlNavItem from './nav_item.vue';
4
4
  describe('GlNavItem', () => {
5
5
  let wrapper;
6
6
 
7
- afterEach(() => {
8
- wrapper.destroy();
9
- });
10
-
11
7
  it('renders the text', () => {
12
8
  wrapper = shallowMount(GlNavItem, {
13
9
  slots: {