@gitlab/ui 80.13.1 → 80.13.2

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 (275) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/components/experimental/experiment_badge/experiment_badge.js +6 -6
  3. package/package.json +16 -12
  4. package/src/components/experimental/experiment_badge/experiment_badge.vue +12 -11
  5. package/src/components/base/accordion/accordion.spec.js +0 -58
  6. package/src/components/base/accordion/accordion.stories.js +0 -59
  7. package/src/components/base/accordion/accordion_item.spec.js +0 -131
  8. package/src/components/base/accordion/accordion_item.stories.js +0 -57
  9. package/src/components/base/alert/alert.spec.js +0 -229
  10. package/src/components/base/alert/alert.stories.js +0 -166
  11. package/src/components/base/avatar/avatar.spec.js +0 -91
  12. package/src/components/base/avatar/avatar.stories.js +0 -160
  13. package/src/components/base/avatar_labeled/avatar_labeled.spec.js +0 -109
  14. package/src/components/base/avatar_labeled/avatar_labeled.stories.js +0 -187
  15. package/src/components/base/avatar_link/avatar_link.stories.js +0 -86
  16. package/src/components/base/avatars_inline/avatars_inline.spec.js +0 -124
  17. package/src/components/base/avatars_inline/avatars_inline.stories.js +0 -83
  18. package/src/components/base/badge/badge.spec.js +0 -83
  19. package/src/components/base/badge/badge.stories.js +0 -184
  20. package/src/components/base/banner/banner.spec.js +0 -112
  21. package/src/components/base/banner/banner.stories.js +0 -103
  22. package/src/components/base/breadcrumb/breadcrumb.spec.js +0 -240
  23. package/src/components/base/breadcrumb/breadcrumb.stories.js +0 -100
  24. package/src/components/base/breadcrumb/breadcrumb_item.spec.js +0 -45
  25. package/src/components/base/broadcast_message/broadcast_message.spec.js +0 -32
  26. package/src/components/base/broadcast_message/broadcast_message.stories.js +0 -112
  27. package/src/components/base/button/button.spec.js +0 -225
  28. package/src/components/base/button/button.stories.js +0 -529
  29. package/src/components/base/button_group/button_group.stories.js +0 -132
  30. package/src/components/base/card/card.spec.js +0 -139
  31. package/src/components/base/card/card.stories.js +0 -48
  32. package/src/components/base/carousel/carousel.spec.js +0 -24
  33. package/src/components/base/carousel/carousel.stories.js +0 -51
  34. package/src/components/base/collapse/collapse.spec.js +0 -24
  35. package/src/components/base/collapse/collapse.stories.js +0 -42
  36. package/src/components/base/datepicker/datepicker.spec.js +0 -431
  37. package/src/components/base/datepicker/datepicker.stories.js +0 -149
  38. package/src/components/base/daterange_picker/daterange_picker.spec.js +0 -307
  39. package/src/components/base/daterange_picker/daterange_picker.stories.js +0 -145
  40. package/src/components/base/drawer/drawer.spec.js +0 -136
  41. package/src/components/base/drawer/drawer.stories.js +0 -272
  42. package/src/components/base/dropdown/dropdown.spec.js +0 -457
  43. package/src/components/base/dropdown/dropdown.stories.js +0 -574
  44. package/src/components/base/dropdown/dropdown_form.spec.js +0 -9
  45. package/src/components/base/dropdown/dropdown_item.spec.js +0 -67
  46. package/src/components/base/dropdown/dropdown_item.stories.js +0 -113
  47. package/src/components/base/filtered_search/__snapshots__/filtered_search_term.spec.js.snap +0 -31
  48. package/src/components/base/filtered_search/filtered_search.spec.js +0 -908
  49. package/src/components/base/filtered_search/filtered_search.stories.js +0 -678
  50. package/src/components/base/filtered_search/filtered_search_suggestion.spec.js +0 -67
  51. package/src/components/base/filtered_search/filtered_search_suggestion.stories.js +0 -33
  52. package/src/components/base/filtered_search/filtered_search_suggestion_list.spec.js +0 -337
  53. package/src/components/base/filtered_search/filtered_search_suggestion_list.stories.js +0 -53
  54. package/src/components/base/filtered_search/filtered_search_term.spec.js +0 -212
  55. package/src/components/base/filtered_search/filtered_search_term.stories.js +0 -60
  56. package/src/components/base/filtered_search/filtered_search_token.spec.js +0 -461
  57. package/src/components/base/filtered_search/filtered_search_token.stories.js +0 -199
  58. package/src/components/base/filtered_search/filtered_search_token_segment.spec.js +0 -393
  59. package/src/components/base/filtered_search/filtered_search_token_segment.stories.js +0 -110
  60. package/src/components/base/filtered_search/filtered_search_utils.spec.js +0 -82
  61. package/src/components/base/form/form.stories.js +0 -101
  62. package/src/components/base/form/form_checkbox/form_checkbox.stories.js +0 -55
  63. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.spec.js +0 -265
  64. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.stories.js +0 -134
  65. package/src/components/base/form/form_combobox/form_combobox.spec.js +0 -301
  66. package/src/components/base/form/form_combobox/form_combobox.stories.js +0 -116
  67. package/src/components/base/form/form_date/form_date.spec.js +0 -85
  68. package/src/components/base/form/form_date/form_date.stories.js +0 -108
  69. package/src/components/base/form/form_fields/form_field_validator.spec.js +0 -51
  70. package/src/components/base/form/form_fields/form_fields.spec.js +0 -531
  71. package/src/components/base/form/form_fields/form_fields.stories.js +0 -150
  72. package/src/components/base/form/form_fields/mappers.spec.js +0 -17
  73. package/src/components/base/form/form_fields/validators.spec.js +0 -56
  74. package/src/components/base/form/form_group/form_group.spec.js +0 -110
  75. package/src/components/base/form/form_group/form_group.stories.js +0 -123
  76. package/src/components/base/form/form_input/form_input.spec.js +0 -130
  77. package/src/components/base/form/form_input/form_input.stories.js +0 -128
  78. package/src/components/base/form/form_input_group/form_input_group.spec.js +0 -121
  79. package/src/components/base/form/form_input_group/form_input_group.stories.js +0 -86
  80. package/src/components/base/form/form_radio/form_radio.spec.js +0 -116
  81. package/src/components/base/form/form_radio/form_radio.stories.js +0 -70
  82. package/src/components/base/form/form_radio_group/form_radio_group.spec.js +0 -86
  83. package/src/components/base/form/form_radio_group/form_radio_group.stories.js +0 -79
  84. package/src/components/base/form/form_select/form_select.spec.js +0 -69
  85. package/src/components/base/form/form_select/form_select.stories.js +0 -156
  86. package/src/components/base/form/form_text/form_text.stories.js +0 -27
  87. package/src/components/base/form/form_textarea/form_textarea.spec.js +0 -242
  88. package/src/components/base/form/form_textarea/form_textarea.stories.js +0 -68
  89. package/src/components/base/form/input_group_text/input_group_text.spec.js +0 -9
  90. package/src/components/base/form/input_group_text/input_group_text.stories.js +0 -30
  91. package/src/components/base/icon/__snapshots__/icon.spec.js.snap +0 -14
  92. package/src/components/base/icon/icon.spec.js +0 -92
  93. package/src/components/base/icon/icon.stories.js +0 -56
  94. package/src/components/base/infinite_scroll/infinite_scroll.spec.js +0 -182
  95. package/src/components/base/infinite_scroll/infinite_scroll.stories.js +0 -94
  96. package/src/components/base/keyset_pagination/keyset_pagination.spec.js +0 -313
  97. package/src/components/base/keyset_pagination/keyset_pagination.stories.js +0 -66
  98. package/src/components/base/label/label.spec.js +0 -257
  99. package/src/components/base/label/label.stories.js +0 -76
  100. package/src/components/base/link/link.spec.js +0 -88
  101. package/src/components/base/link/link.stories.js +0 -64
  102. package/src/components/base/loading_icon/loading_icon.spec.js +0 -109
  103. package/src/components/base/loading_icon/loading_icon.stories.js +0 -60
  104. package/src/components/base/markdown/markdown.spec.js +0 -24
  105. package/src/components/base/markdown/markdown.stories.js +0 -33
  106. package/src/components/base/modal/modal.spec.js +0 -265
  107. package/src/components/base/modal/modal.stories.js +0 -197
  108. package/src/components/base/nav/nav.spec.js +0 -19
  109. package/src/components/base/nav/nav.stories.js +0 -57
  110. package/src/components/base/nav/nav_item.spec.js +0 -16
  111. package/src/components/base/nav/nav_item_dropdown.spec.js +0 -58
  112. package/src/components/base/navbar/navbar.spec.js +0 -21
  113. package/src/components/base/navbar/navbar.stories.js +0 -28
  114. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.spec.js +0 -566
  115. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.spec.js +0 -452
  116. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.stories.js +0 -345
  117. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.spec.js +0 -84
  118. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.spec.js +0 -200
  119. package/src/components/base/new_dropdowns/disclosure/utils.spec.js +0 -74
  120. package/src/components/base/new_dropdowns/listbox/listbox.spec.js +0 -950
  121. package/src/components/base/new_dropdowns/listbox/listbox.stories.js +0 -840
  122. package/src/components/base/new_dropdowns/listbox/listbox_group.spec.js +0 -61
  123. package/src/components/base/new_dropdowns/listbox/listbox_item.spec.js +0 -129
  124. package/src/components/base/new_dropdowns/listbox/listbox_search_input.spec.js +0 -62
  125. package/src/components/base/new_dropdowns/listbox/utils.spec.js +0 -58
  126. package/src/components/base/paginated_list/__snapshots__/paginated_list.spec.js.snap +0 -922
  127. package/src/components/base/paginated_list/paginated_list.spec.js +0 -212
  128. package/src/components/base/paginated_list/paginated_list.stories.js +0 -207
  129. package/src/components/base/pagination/pagination.spec.js +0 -401
  130. package/src/components/base/pagination/pagination.stories.js +0 -129
  131. package/src/components/base/path/__snapshots__/path.spec.js.snap +0 -586
  132. package/src/components/base/path/path.spec.js +0 -237
  133. package/src/components/base/path/path.stories.js +0 -84
  134. package/src/components/base/popover/popover.spec.js +0 -104
  135. package/src/components/base/popover/popover.stories.js +0 -109
  136. package/src/components/base/progress_bar/progress_bar.stories.js +0 -34
  137. package/src/components/base/search_box_by_click/search_box_by_click.spec.js +0 -209
  138. package/src/components/base/search_box_by_click/search_box_by_click.stories.js +0 -100
  139. package/src/components/base/search_box_by_type/search_box_by_type.spec.js +0 -164
  140. package/src/components/base/search_box_by_type/search_box_by_type.stories.js +0 -63
  141. package/src/components/base/segmented_control/segmented_control.spec.js +0 -135
  142. package/src/components/base/segmented_control/segmented_control.stories.js +0 -59
  143. package/src/components/base/skeleton_loader/skeleton_loader.spec.js +0 -151
  144. package/src/components/base/skeleton_loader/skeleton_loader.stories.js +0 -86
  145. package/src/components/base/sorting/sorting.spec.js +0 -170
  146. package/src/components/base/sorting/sorting.stories.js +0 -98
  147. package/src/components/base/table/table.spec.js +0 -192
  148. package/src/components/base/table/table.stories.js +0 -186
  149. package/src/components/base/table_lite/table_lite.spec.js +0 -40
  150. package/src/components/base/table_lite/table_lite.stories.js +0 -74
  151. package/src/components/base/tabs/tab/tab.spec.js +0 -34
  152. package/src/components/base/tabs/tabs/scrollable_tabs.spec.js +0 -260
  153. package/src/components/base/tabs/tabs/tabs.spec.js +0 -366
  154. package/src/components/base/tabs/tabs/tabs.stories.js +0 -209
  155. package/src/components/base/toast/toast.spec.js +0 -72
  156. package/src/components/base/toast/toast.stories.js +0 -88
  157. package/src/components/base/toggle/toggle.spec.js +0 -168
  158. package/src/components/base/toggle/toggle.stories.js +0 -106
  159. package/src/components/base/token/token.spec.js +0 -48
  160. package/src/components/base/token/token.stories.js +0 -58
  161. package/src/components/base/token_selector/helpers.spec.js +0 -40
  162. package/src/components/base/token_selector/token_container.spec.js +0 -306
  163. package/src/components/base/token_selector/token_selector.spec.js +0 -653
  164. package/src/components/base/token_selector/token_selector.stories.js +0 -114
  165. package/src/components/base/token_selector/token_selector_dropdown.spec.js +0 -347
  166. package/src/components/base/tooltip/tooltip.spec.js +0 -27
  167. package/src/components/base/tooltip/tooltip.stories.js +0 -70
  168. package/src/components/charts/area/area.spec.js +0 -286
  169. package/src/components/charts/area/area.stories.js +0 -208
  170. package/src/components/charts/bar/__snapshots__/bar.spec.js.snap +0 -82
  171. package/src/components/charts/bar/bar.spec.js +0 -92
  172. package/src/components/charts/bar/bar.stories.js +0 -72
  173. package/src/components/charts/chart/chart.spec.js +0 -167
  174. package/src/components/charts/chart/chart.stories.js +0 -111
  175. package/src/components/charts/column/__snapshots__/column_chart.spec.js.snap +0 -323
  176. package/src/components/charts/column/column.stories.js +0 -111
  177. package/src/components/charts/column/column_chart.spec.js +0 -223
  178. package/src/components/charts/discrete_scatter/discrete_scatter.spec.js +0 -173
  179. package/src/components/charts/discrete_scatter/discrete_scatter.stories.js +0 -64
  180. package/src/components/charts/gauge/gauge.spec.js +0 -280
  181. package/src/components/charts/gauge/gauge.stories.js +0 -97
  182. package/src/components/charts/heatmap/heatmap.spec.js +0 -103
  183. package/src/components/charts/heatmap/heatmap.stories.js +0 -78
  184. package/src/components/charts/legend/legend.spec.js +0 -274
  185. package/src/components/charts/legend/legend.stories.js +0 -174
  186. package/src/components/charts/line/line.spec.js +0 -278
  187. package/src/components/charts/line/line.stories.js +0 -238
  188. package/src/components/charts/series_label/series_label.stories.js +0 -78
  189. package/src/components/charts/single_stat/single_stat.spec.js +0 -217
  190. package/src/components/charts/single_stat/single_stat.stories.js +0 -103
  191. package/src/components/charts/sparkline/sparkline.spec.js +0 -220
  192. package/src/components/charts/sparkline/sparkline.stories.js +0 -85
  193. package/src/components/charts/stacked_column/__snapshots__/stacked_column.spec.js.snap +0 -905
  194. package/src/components/charts/stacked_column/stacked_column.spec.js +0 -194
  195. package/src/components/charts/stacked_column/stacked_column.stories.js +0 -130
  196. package/src/components/charts/tooltip/tooltip.spec.js +0 -282
  197. package/src/components/charts/tooltip/tooltip.stories.js +0 -90
  198. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.spec.js +0 -46
  199. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.stories.js +0 -62
  200. package/src/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.spec.js +0 -70
  201. package/src/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.stories.js +0 -31
  202. package/src/components/experimental/duo/chat/components/duo_chat_message/copy_code_element.spec.js +0 -64
  203. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.spec.js +0 -534
  204. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.stories.js +0 -55
  205. package/src/components/experimental/duo/chat/components/duo_chat_message/utils.spec.js +0 -24
  206. package/src/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.spec.js +0 -93
  207. package/src/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.stories.js +0 -32
  208. package/src/components/experimental/duo/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.spec.js +0 -35
  209. package/src/components/experimental/duo/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.stories.js +0 -36
  210. package/src/components/experimental/duo/chat/duo_chat.spec.js +0 -828
  211. package/src/components/experimental/duo/chat/duo_chat.stories.js +0 -240
  212. package/src/components/experimental/duo/chat/markdown_renderer.spec.js +0 -55
  213. package/src/components/experimental/duo/user_feedback/user_feedback.spec.js +0 -100
  214. package/src/components/experimental/duo/user_feedback/user_feedback.stories.js +0 -107
  215. package/src/components/experimental/duo/user_feedback/user_feedback_modal.spec.js +0 -134
  216. package/src/components/experimental/experiment_badge/experiment_badge.spec.js +0 -77
  217. package/src/components/experimental/experiment_badge/experiment_badge.stories.js +0 -58
  218. package/src/components/regions/dashboard_skeleton/dashboard_skeleton.stories.js +0 -29
  219. package/src/components/regions/empty_state/empty_state.spec.js +0 -293
  220. package/src/components/regions/empty_state/empty_state.stories.js +0 -160
  221. package/src/components/shared_components/charts/tooltip_default_format.spec.js +0 -69
  222. package/src/components/shared_components/clear_icon_button/__snapshots__/clear_icon_button.spec.js.snap +0 -15
  223. package/src/components/shared_components/clear_icon_button/clear_icon_button.spec.js +0 -23
  224. package/src/components/shared_components/close_button/__snapshots__/close_button.spec.js.snap +0 -12
  225. package/src/components/shared_components/close_button/close_button.spec.js +0 -22
  226. package/src/components/utilities/animated_number/animated_number.spec.js +0 -133
  227. package/src/components/utilities/animated_number/animated_number.stories.js +0 -63
  228. package/src/components/utilities/friendly_wrap/friendly_wrap.spec.js +0 -123
  229. package/src/components/utilities/friendly_wrap/friendly_wrap.stories.js +0 -56
  230. package/src/components/utilities/intersection_observer/intersection_observer.spec.js +0 -116
  231. package/src/components/utilities/intersection_observer/intersection_observer.stories.js +0 -162
  232. package/src/components/utilities/intersperse/intersperse.spec.js +0 -115
  233. package/src/components/utilities/intersperse/intersperse.stories.js +0 -53
  234. package/src/components/utilities/sprintf/sprintf.spec.js +0 -337
  235. package/src/components/utilities/sprintf/sprintf.stories.js +0 -104
  236. package/src/components/utilities/truncate/truncate.spec.js +0 -125
  237. package/src/components/utilities/truncate/truncate.stories.js +0 -50
  238. package/src/components/utilities/truncate_text/truncate_text.spec.js +0 -150
  239. package/src/components/utilities/truncate_text/truncate_text.stories.js +0 -45
  240. package/src/directives/hover_load/hover_load.spec.js +0 -64
  241. package/src/directives/hover_load/hover_load.stories.js +0 -51
  242. package/src/directives/outside/outside.spec.js +0 -338
  243. package/src/directives/outside/outside.stories.js +0 -35
  244. package/src/directives/resize_observer/resize_observer.spec.js +0 -125
  245. package/src/directives/resize_observer/resize_observer.stories.js +0 -76
  246. package/src/directives/safe_html/safe_html.spec.js +0 -149
  247. package/src/directives/safe_html/safe_html.stories.js +0 -60
  248. package/src/directives/safe_link/safe_link.spec.js +0 -135
  249. package/src/directives/safe_link/safe_link.stories.js +0 -39
  250. package/src/internal/color_contrast/color_contrast.spec.js +0 -34
  251. package/src/internal/color_contrast/color_contrast.stories.js +0 -41
  252. package/src/scss/functions.spec.scss +0 -54
  253. package/src/scss/mixins.spec.scss +0 -93
  254. package/src/scss/run_scss_tests.spec.js +0 -26
  255. package/src/scss/typescale/typescale.stories.js +0 -61
  256. package/src/tokens/color.constant.tokens.stories.js +0 -19
  257. package/src/tokens/color.dark.tokens.stories.js +0 -26
  258. package/src/tokens/color.data_viz.dark.tokens.stories.js +0 -19
  259. package/src/tokens/color.data_viz.tokens.stories.js +0 -19
  260. package/src/tokens/color.theme.dark.tokens.stories.js +0 -21
  261. package/src/tokens/color.theme.tokens.stories.js +0 -21
  262. package/src/tokens/color.tokens.stories.js +0 -26
  263. package/src/tokens/color.transparency.tokens.stories.js +0 -14
  264. package/src/tokens/text.dark.tokens.stories.js +0 -18
  265. package/src/tokens/text.tokens.stories.js +0 -17
  266. package/src/tokens/tokens.stories.js +0 -16
  267. package/src/utils/breakpoints.spec.js +0 -26
  268. package/src/utils/charts/config.spec.js +0 -478
  269. package/src/utils/charts/utils.spec.js +0 -106
  270. package/src/utils/datetime_utility.spec.js +0 -98
  271. package/src/utils/is_slot_empty.spec.js +0 -73
  272. package/src/utils/number_utils.spec.js +0 -110
  273. package/src/utils/stories_utils.spec.js +0 -18
  274. package/src/utils/string_utils.spec.js +0 -56
  275. package/src/utils/utils.spec.js +0 -156
@@ -1,257 +0,0 @@
1
- import { mount, shallowMount } from '@vue/test-utils';
2
- import GlLink from '../link/link.vue';
3
- import GlTooltip from '../tooltip/tooltip.vue';
4
- import Label from './label.vue';
5
-
6
- // Light color
7
- const grey = {
8
- hex: '#CCCCCC',
9
- rgb: 'rgb(204, 204, 204)',
10
- };
11
- // Dark color
12
- const navy = {
13
- hex: '#000080',
14
- rgb: 'rgb(0, 0, 128)',
15
- };
16
-
17
- const white = {
18
- shorthex: '#FFF',
19
- rgb: 'rgb(255, 255, 255)',
20
- rgba: 'rgba(255, 255, 255, 1)',
21
- };
22
-
23
- const defaultProps = {
24
- title: 'title',
25
- backgroundColor: grey.rgb,
26
- };
27
-
28
- describe('Label component', () => {
29
- let wrapper;
30
-
31
- const createComponent = (propsData, { mountFn = shallowMount } = {}) => {
32
- wrapper = mountFn(Label, {
33
- propsData,
34
- });
35
- };
36
-
37
- const findLink = () => wrapper.findComponent(GlLink);
38
- const findContent = () => wrapper.find('.gl-label-link');
39
- const findTitle = () => wrapper.find('.gl-label-text');
40
- const findSubTitle = () => wrapper.find('.gl-label-text-scoped');
41
- const findTooltip = () => wrapper.findComponent(GlTooltip);
42
- const findTooltipText = () => findTooltip().text();
43
- const findCloseButton = () => wrapper.find('.gl-label-close');
44
-
45
- describe('basic label', () => {
46
- it('renders the label title', () => {
47
- const title = 'Label Title';
48
- createComponent({ ...defaultProps, title });
49
- expect(findTitle().text()).toEqual(title);
50
- });
51
-
52
- it('renders a title with two colons as a basic label', () => {
53
- createComponent({ ...defaultProps, title: 'scoped::label' });
54
-
55
- expect(findTitle().text()).toEqual('scoped::label');
56
- expect(findSubTitle().exists()).toBe(false);
57
- });
58
-
59
- it('renders a black label', () => {
60
- createComponent({ ...defaultProps });
61
-
62
- expect(wrapper.classes()).toContain('gl-label-text-dark');
63
- });
64
-
65
- it('renders a white label if background color is dark', () => {
66
- createComponent({ ...defaultProps, backgroundColor: navy.hex });
67
-
68
- expect(wrapper.classes()).toContain('gl-label-text-light');
69
- });
70
-
71
- it('renders the label description without "Scoped label"', () => {
72
- const props = { ...defaultProps, description: 'lorem ipsum' };
73
-
74
- createComponent(props);
75
-
76
- expect(findTooltipText()).toContain(props.description);
77
- expect(findTooltipText()).not.toContain('Scoped label');
78
- });
79
-
80
- it('supports short hex for background color to infer text color', () => {
81
- createComponent({ ...defaultProps, backgroundColor: white.shorthex });
82
-
83
- expect(wrapper.classes()).toContain('gl-label-text-dark');
84
- });
85
-
86
- it('supports rgba for background color to infer text color', () => {
87
- createComponent({ ...defaultProps, backgroundColor: white.rgba });
88
-
89
- expect(wrapper.classes()).toContain('gl-label-text-dark');
90
- });
91
-
92
- it('renders the label description', () => {
93
- const props = { ...defaultProps, description: 'lorem ipsum' };
94
-
95
- createComponent(props);
96
-
97
- expect(wrapper.text()).toContain(props.description);
98
- });
99
-
100
- it('links to label target', () => {
101
- const props = { ...defaultProps, target: 'http://local.host' };
102
-
103
- createComponent(props);
104
-
105
- expect(wrapper.findComponent(GlLink).attributes('href')).toEqual(props.target);
106
- });
107
-
108
- describe('close button', () => {
109
- it('does not render by default', () => {
110
- createComponent({ ...defaultProps });
111
-
112
- expect(findCloseButton().exists()).toBe(false);
113
- });
114
-
115
- it('renders when showCloseButton is true', () => {
116
- const props = { ...defaultProps, showCloseButton: true };
117
-
118
- createComponent(props);
119
-
120
- expect(findCloseButton().exists()).toBe(true);
121
- });
122
-
123
- it('emits close when "x" is clicked', () => {
124
- const props = { ...defaultProps, showCloseButton: true };
125
-
126
- createComponent(props, { mountFn: mount });
127
-
128
- findCloseButton().trigger('click');
129
- expect(wrapper.emitted('close')).toHaveLength(1);
130
- });
131
-
132
- it('does not emit close when "x" is clicked when disabled', () => {
133
- const props = { ...defaultProps, showCloseButton: true, disabled: true };
134
-
135
- createComponent(props, { mountFn: mount });
136
-
137
- findCloseButton().trigger('click');
138
- expect(wrapper.emitted('close')).toBe(undefined);
139
- });
140
- });
141
-
142
- describe('label has no target', () => {
143
- const props = { ...defaultProps, target: '' };
144
-
145
- it('renders the label content as text', () => {
146
- createComponent(props, { mountFn: mount });
147
-
148
- expect(findContent().element.tagName.toLowerCase()).toBe('span');
149
- });
150
-
151
- it('does not render a link', () => {
152
- createComponent(props, { mountFn: shallowMount });
153
-
154
- expect(findLink().exists()).toBe(false);
155
- });
156
- });
157
- });
158
-
159
- describe('scoped label', () => {
160
- const scopedProps = {
161
- ...defaultProps,
162
- title: 'scoped::label',
163
- scoped: true,
164
- };
165
-
166
- it('renders the scoped title', () => {
167
- createComponent({ ...scopedProps });
168
-
169
- expect(findTitle().text()).toEqual('scoped');
170
- expect(findSubTitle().text()).toEqual('label');
171
- });
172
-
173
- it('renders a black label', () => {
174
- createComponent({ ...scopedProps });
175
-
176
- expect(wrapper.classes()).toContain('gl-label-text-dark');
177
- });
178
-
179
- it('renders a white label if background color is dark', () => {
180
- createComponent({ ...scopedProps, backgroundColor: navy.hex });
181
-
182
- expect(wrapper.classes()).toContain('gl-label-text-light');
183
- });
184
-
185
- it('renders the label description with "Scoped label"', () => {
186
- const props = { ...scopedProps, description: 'lorem ipsum' };
187
-
188
- createComponent(props);
189
-
190
- expect(findTooltipText()).toContain(props.description);
191
- expect(findTooltipText()).toContain('Scoped label');
192
- });
193
-
194
- it('links to label target', () => {
195
- const props = { ...scopedProps, target: 'http://local.host' };
196
- createComponent(props);
197
- expect(findLink().attributes('href')).toEqual(props.target);
198
- });
199
-
200
- it('supports title with multiple occurrences of ::', () => {
201
- const props = { ...scopedProps, title: 'one::two::three' };
202
- createComponent(props);
203
- expect(findTitle().text()).toEqual('one::two');
204
- expect(findSubTitle().text()).toEqual('three');
205
- });
206
-
207
- describe('close button', () => {
208
- it('does not render by default', () => {
209
- const props = { ...scopedProps };
210
- createComponent(props);
211
-
212
- expect(findCloseButton().exists()).toBe(false);
213
- });
214
-
215
- it('renders when showCloseButton is true', () => {
216
- const props = { ...scopedProps, showCloseButton: true };
217
- createComponent(props);
218
-
219
- expect(findCloseButton().exists()).toBe(true);
220
- });
221
-
222
- it('emits close when "x" is clicked', () => {
223
- const props = { ...scopedProps, showCloseButton: true };
224
-
225
- createComponent(props, { mountFn: mount });
226
-
227
- findCloseButton().trigger('click');
228
- expect(wrapper.emitted('close')).toHaveLength(1);
229
- });
230
-
231
- it('does not emit close when "x" is clicked when disabled', () => {
232
- const props = { ...scopedProps, showCloseButton: true, disabled: true };
233
-
234
- createComponent(props, { mountFn: mount });
235
-
236
- findCloseButton().trigger('click');
237
- expect(wrapper.emitted('close')).toBe(undefined);
238
- });
239
- });
240
-
241
- describe('label has no target', () => {
242
- const props = { ...defaultProps, target: '' };
243
-
244
- it('renders the label content as text', () => {
245
- createComponent(props, { mountFn: mount });
246
-
247
- expect(findContent().element.tagName.toLowerCase()).toBe('span');
248
- });
249
-
250
- it('does not render a link', () => {
251
- createComponent(props, { mountFn: shallowMount });
252
-
253
- expect(findLink().exists()).toBe(false);
254
- });
255
- });
256
- });
257
- });
@@ -1,76 +0,0 @@
1
- import { tooltipPlacements } from '../../../utils/constants';
2
- import GlLabel from './label.vue';
3
- import readme from './label.md';
4
-
5
- const template = `
6
- <div class="gl-display-flex">
7
- <gl-label
8
- :background-color="backgroundColor"
9
- :title="title"
10
- :description="description"
11
- :tooltip-placement="tooltipPlacement"
12
- :target="target"
13
- :scoped="scoped"
14
- :show-close-button="showCloseButton"
15
- :disabled="disabled"
16
- />
17
- </div>`;
18
-
19
- const Template = (args, { argTypes }) => ({
20
- components: { GlLabel },
21
- props: Object.keys(argTypes),
22
- template,
23
- });
24
-
25
- const generateProps = ({
26
- title = 'Label title',
27
- tooltipPlacement = tooltipPlacements.top,
28
- scoped = false,
29
- description = '',
30
- target = '#',
31
- backgroundColor = '#D9C2EE',
32
- showCloseButton = false,
33
- disabled = false,
34
- } = {}) => ({
35
- backgroundColor,
36
- title,
37
- description,
38
- tooltipPlacement,
39
- target,
40
- scoped,
41
- showCloseButton,
42
- disabled,
43
- });
44
-
45
- export const Default = Template.bind({});
46
- Default.args = generateProps();
47
-
48
- export const Scoped = Template.bind({});
49
- Scoped.args = generateProps({ title: 'scoped::label', scoped: true });
50
-
51
- export const WithCloseButton = Template.bind({});
52
- WithCloseButton.args = generateProps({ showCloseButton: true });
53
-
54
- export const WithoutTarget = Template.bind({});
55
- WithoutTarget.args = generateProps({ target: '' });
56
-
57
- export default {
58
- title: 'base/label',
59
- component: GlLabel,
60
- parameters: {
61
- docs: {
62
- description: {
63
- component: readme,
64
- },
65
- },
66
- },
67
- argTypes: {
68
- backgroundColor: {
69
- control: 'color',
70
- },
71
- tooltipPlacement: {
72
- options: tooltipPlacements,
73
- control: 'select',
74
- },
75
- },
76
- };
@@ -1,88 +0,0 @@
1
- import { mount } from '@vue/test-utils';
2
- import Link from './link.vue';
3
-
4
- describe('link component', () => {
5
- let wrapper;
6
-
7
- const createWrapper = (options) => {
8
- wrapper = mount(Link, options);
9
- };
10
-
11
- describe('default settings', () => {
12
- beforeEach(() => {
13
- createWrapper();
14
- });
15
-
16
- it('should not have a target attribute', () => {
17
- expect(wrapper.attributes('target')).toBeUndefined();
18
- });
19
-
20
- it('should not have a rel attribute', () => {
21
- expect(wrapper.attributes('rel')).toBeUndefined();
22
- });
23
-
24
- it('should have a default href as #', () => {
25
- expect(wrapper.attributes('href')).toBe('#');
26
- });
27
- });
28
-
29
- describe('target blank', () => {
30
- it('should set secure rels for hrefs in a different domain', () => {
31
- createWrapper({
32
- propsData: {
33
- target: '_blank',
34
- href: 'http://example.com',
35
- },
36
- });
37
-
38
- expect(wrapper.attributes('rel')).toBe('noopener noreferrer');
39
- });
40
-
41
- it('should set noopener rel for hrefs for the same domain', () => {
42
- // This behavior is due to the fact that
43
- // bootstrap-vue link component adds rel="noopener" when target is set as "_blank"
44
- // https://github.com/bootstrap-vue/bootstrap-vue/pull/418/files#diff-997fcb1eb150236aec5306a4d72229beR25
45
- createWrapper({
46
- propsData: {
47
- target: '_blank',
48
- href: window.location.hostname,
49
- },
50
- });
51
- expect(wrapper.attributes('rel')).toBe('noopener');
52
- });
53
-
54
- it('should keep rel attribute for hrefs in the same domain', () => {
55
- createWrapper({ attrs: { rel: 'nofollow', href: window.location.hostname } });
56
-
57
- expect(wrapper.attributes('rel')).toBe('nofollow');
58
- });
59
- });
60
-
61
- describe('unsafe urls', () => {
62
- // eslint-disable-next-line no-script-url
63
- const unsafeUrl = 'javascript:alert(1)';
64
-
65
- // GlSafeLinkDirective is actually responsible to handle the unsafe URLs
66
- // and GlLink uses this directive to make all the links secure by default
67
- it('should set href to blank', () => {
68
- createWrapper({
69
- propsData: {
70
- href: unsafeUrl,
71
- },
72
- });
73
-
74
- expect(wrapper.attributes('href')).toBe('about:blank');
75
- });
76
-
77
- it('should allow unsafe URL if isUnsafeLink is true', () => {
78
- createWrapper({
79
- propsData: {
80
- href: unsafeUrl,
81
- isUnsafeLink: true,
82
- },
83
- });
84
-
85
- expect(wrapper.attributes('href')).toBe(unsafeUrl);
86
- });
87
- });
88
- });
@@ -1,64 +0,0 @@
1
- import { targetOptions } from '../../../utils/constants';
2
- import GlLink from './link.vue';
3
- import readme from './link.md';
4
-
5
- const generateProps = ({ href = '#', target = null } = {}) => ({
6
- href,
7
- target,
8
- });
9
-
10
- const makeStory =
11
- (options) =>
12
- (args, { argTypes }) => ({
13
- components: {
14
- GlLink,
15
- },
16
- props: Object.keys(argTypes),
17
- ...options,
18
- });
19
-
20
- export const DefaultLink = makeStory({
21
- components: { GlLink },
22
- template: `
23
- <gl-link
24
- :href="href"
25
- :target="target"
26
- >
27
- This is a link
28
- </gl-link>`,
29
- });
30
- DefaultLink.args = generateProps();
31
-
32
- export const LongLink = makeStory({
33
- components: { GlLink },
34
- template: `
35
- <gl-link
36
- :href="href"
37
- :target="target"
38
- >
39
- Lorem ipsum dolor sit amet, consectetur adipiscing elit.
40
- Quamquam tu hanc copiosiorem etiam soles dicere.
41
- Ergo illi intellegunt quid Epicurus dicat, ego non intellego? Claudii libidini, qui tum erat summo ne imperio, dederetur.
42
- Si quicquam extra virtutem habeatur in bonis. Nunc omni virtuti vitium contrario nomine opponitur. Duo Reges: constructio interrete.
43
- </gl-link>`,
44
- });
45
- LongLink.args = generateProps();
46
-
47
- export default {
48
- title: 'base/link',
49
- component: GlLink,
50
- parameters: {
51
- bootstrapComponent: 'b-link',
52
- docs: {
53
- description: {
54
- component: readme,
55
- },
56
- },
57
- },
58
- argTypes: {
59
- target: {
60
- options: targetOptions,
61
- control: 'select',
62
- },
63
- },
64
- };
@@ -1,109 +0,0 @@
1
- import { shallowMount } from '@vue/test-utils';
2
- import LoadingIcon from './loading_icon.vue';
3
-
4
- describe('loading icon component', () => {
5
- let wrapper;
6
- const createComponent = ({ attrs, ...propsData } = {}) => {
7
- wrapper = shallowMount(LoadingIcon, { propsData, attrs });
8
- };
9
-
10
- const spinnerBaseCssClass = 'gl-spinner';
11
- const findSpinnerEl = () => wrapper.find(`.${spinnerBaseCssClass}`);
12
- const getSpinnerClasses = () => findSpinnerEl().classes();
13
-
14
- const dotsLoaderBaseCssClass = 'gl-dots-loader';
15
- const findDotsLoaderEl = () => wrapper.find(`.${dotsLoaderBaseCssClass}`);
16
- const getDotsLoaderClasses = () => findDotsLoaderEl().classes();
17
-
18
- describe.each`
19
- variant | baseCssClass | getLoaderClasses
20
- ${'spinner'} | ${spinnerBaseCssClass} | ${getSpinnerClasses}
21
- ${'dots'} | ${dotsLoaderBaseCssClass} | ${getDotsLoaderClasses}
22
- `('variant $variant', ({ variant, baseCssClass, getLoaderClasses }) => {
23
- describe('display', () => {
24
- it('should render as a block by default', () => {
25
- createComponent({ variant });
26
- expect(wrapper.element.tagName).toBe('DIV');
27
- });
28
-
29
- it('should render inline using prop', () => {
30
- createComponent({ variant, inline: true });
31
- expect(wrapper.element.tagName).toBe('SPAN');
32
- });
33
- });
34
-
35
- describe('css class', () => {
36
- const supportedSizes = ['sm', 'md', 'lg'];
37
- const supportedColors = ['dark', 'light'];
38
- const sizeColorCombinations = supportedSizes.reduce(
39
- (combinations, size) => combinations.concat(supportedColors.map((color) => [size, color])),
40
- []
41
- );
42
-
43
- it('should render the loader css class by default', () => {
44
- createComponent({ variant });
45
- const loaderClasses = getLoaderClasses();
46
-
47
- expect(loaderClasses).toContain(baseCssClass);
48
- });
49
-
50
- it.each(supportedSizes)('should render loader properly for size %s', (size) => {
51
- createComponent({ variant, size });
52
- const loaderClasses = getLoaderClasses();
53
-
54
- expect(loaderClasses).toContain(baseCssClass);
55
- expect(loaderClasses).toContain(`${baseCssClass}-${size}`);
56
- });
57
-
58
- it.each(supportedColors)('should render loader properly for color %s', (color) => {
59
- createComponent({ variant, color });
60
- const loaderClasses = getLoaderClasses();
61
-
62
- expect(loaderClasses).toContain(baseCssClass);
63
- expect(loaderClasses).toContain(`${baseCssClass}-${color}`);
64
- });
65
-
66
- it.each(sizeColorCombinations)(
67
- 'should render loader properly for combination of size: "%s" and color: "%s"',
68
- (size, color) => {
69
- createComponent({ variant, size, color });
70
- const loaderClasses = getLoaderClasses();
71
-
72
- expect(loaderClasses).toContain(baseCssClass);
73
- expect(loaderClasses).toContain(`${baseCssClass}-${size}`);
74
- expect(loaderClasses).toContain(`${baseCssClass}-${color}`);
75
- }
76
- );
77
- });
78
-
79
- describe('aria label', () => {
80
- it('should default to loading', () => {
81
- createComponent({ variant });
82
-
83
- expect(wrapper.attributes('aria-label')).toBe('Loading');
84
- });
85
-
86
- it('should change using prop', () => {
87
- const label = 'label';
88
- createComponent({ variant, label });
89
-
90
- expect(wrapper.attributes('aria-label')).toBe(label);
91
- });
92
- });
93
-
94
- describe('role', () => {
95
- it('should have default role value as status', () => {
96
- createComponent({ variant });
97
-
98
- expect(wrapper.attributes('role')).toBe('status');
99
- });
100
-
101
- it('should have role value as custom value passed', () => {
102
- const role = 'dialog';
103
- createComponent({ variant, attrs: { role } });
104
-
105
- expect(wrapper.attributes('role')).toBe(role);
106
- });
107
- });
108
- });
109
- });
@@ -1,60 +0,0 @@
1
- import { viewModeOptions, loadingIconSizes, loadingIconVariants } from '../../../utils/constants';
2
- import GlLoadingIcon from './loading_icon.vue';
3
- import readme from './loading_icon.md';
4
-
5
- const template = `
6
- <div :class="['gl-p-3', 'gl-rounded-base', 'gl-text-center', { 'bg-dark' : color === 'light' } ]" >
7
- <gl-loading-icon
8
- :label="label"
9
- :size="size"
10
- :inline="inline"
11
- :color="color"
12
- :variant="variant"
13
- />Loading
14
- </div>
15
- `;
16
-
17
- const defaultValue = (prop) => GlLoadingIcon.props[prop].default;
18
-
19
- const generateProps = () => ({
20
- label: defaultValue('label'),
21
- size: defaultValue('size'),
22
- color: defaultValue('color'),
23
- inline: defaultValue('inline'),
24
- variant: defaultValue('variant'),
25
- });
26
-
27
- const Template = (args) => ({
28
- components: { GlLoadingIcon },
29
- props: Object.keys(args),
30
- template,
31
- });
32
-
33
- export const Default = Template.bind({});
34
- Default.args = generateProps();
35
-
36
- export default {
37
- title: 'base/loading icon',
38
- component: GlLoadingIcon,
39
- parameters: {
40
- docs: {
41
- description: {
42
- component: readme,
43
- },
44
- },
45
- },
46
- argTypes: {
47
- color: {
48
- options: viewModeOptions,
49
- control: 'select',
50
- },
51
- size: {
52
- options: loadingIconSizes,
53
- control: 'select',
54
- },
55
- variant: {
56
- options: loadingIconVariants,
57
- control: 'select',
58
- },
59
- },
60
- };
@@ -1,24 +0,0 @@
1
- import { shallowMount } from '@vue/test-utils';
2
- import GlMarkdown from './markdown.vue';
3
-
4
- describe('GlMarkdown', () => {
5
- it('applies gl-compact-markdown class when compact property is true', () => {
6
- const wrapper = shallowMount(GlMarkdown, {
7
- propsData: {
8
- compact: true,
9
- },
10
- });
11
-
12
- expect(wrapper.classes()).toContain('gl-compact-markdown');
13
- });
14
-
15
- it('does not apply gl-compact-markdown class when compact property is false', () => {
16
- const wrapper = shallowMount(GlMarkdown, {
17
- propsData: {
18
- compact: false,
19
- },
20
- });
21
-
22
- expect(wrapper.classes()).not.toContain('gl-compact-markdown');
23
- });
24
- });