@gitlab/ui 80.13.1 → 80.14.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 (299) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/components/experimental/experiment_badge/experiment_badge.js +6 -6
  3. package/dist/tokens/build/js/tokens.dark.js +5 -1
  4. package/dist/tokens/build/js/tokens.js +5 -1
  5. package/dist/tokens/css/tokens.css +4 -0
  6. package/dist/tokens/css/tokens.dark.css +4 -0
  7. package/dist/tokens/js/tokens.dark.js +4 -0
  8. package/dist/tokens/js/tokens.js +4 -0
  9. package/dist/tokens/json/tokens.dark.json +92 -0
  10. package/dist/tokens/json/tokens.json +92 -0
  11. package/dist/tokens/scss/_tokens.dark.scss +4 -0
  12. package/dist/tokens/scss/_tokens.scss +4 -0
  13. package/dist/tokens/scss/_tokens_custom_properties.scss +4 -0
  14. package/dist/tokens/tailwind/tokens.cjs +16 -0
  15. package/package.json +16 -12
  16. package/src/components/experimental/experiment_badge/experiment_badge.vue +12 -11
  17. package/src/tokens/background.tokens.json +38 -0
  18. package/src/tokens/build/css/tokens.css +4 -0
  19. package/src/tokens/build/css/tokens.dark.css +4 -0
  20. package/src/tokens/build/js/tokens.dark.js +4 -0
  21. package/src/tokens/build/js/tokens.js +4 -0
  22. package/src/tokens/build/json/tokens.dark.json +92 -0
  23. package/src/tokens/build/json/tokens.json +92 -0
  24. package/src/tokens/build/scss/_tokens.dark.scss +4 -0
  25. package/src/tokens/build/scss/_tokens.scss +4 -0
  26. package/src/tokens/build/scss/_tokens_custom_properties.scss +4 -0
  27. package/src/tokens/build/tailwind/tokens.cjs +16 -0
  28. package/tailwind.defaults.js +2 -1
  29. package/src/components/base/accordion/accordion.spec.js +0 -58
  30. package/src/components/base/accordion/accordion.stories.js +0 -59
  31. package/src/components/base/accordion/accordion_item.spec.js +0 -131
  32. package/src/components/base/accordion/accordion_item.stories.js +0 -57
  33. package/src/components/base/alert/alert.spec.js +0 -229
  34. package/src/components/base/alert/alert.stories.js +0 -166
  35. package/src/components/base/avatar/avatar.spec.js +0 -91
  36. package/src/components/base/avatar/avatar.stories.js +0 -160
  37. package/src/components/base/avatar_labeled/avatar_labeled.spec.js +0 -109
  38. package/src/components/base/avatar_labeled/avatar_labeled.stories.js +0 -187
  39. package/src/components/base/avatar_link/avatar_link.stories.js +0 -86
  40. package/src/components/base/avatars_inline/avatars_inline.spec.js +0 -124
  41. package/src/components/base/avatars_inline/avatars_inline.stories.js +0 -83
  42. package/src/components/base/badge/badge.spec.js +0 -83
  43. package/src/components/base/badge/badge.stories.js +0 -184
  44. package/src/components/base/banner/banner.spec.js +0 -112
  45. package/src/components/base/banner/banner.stories.js +0 -103
  46. package/src/components/base/breadcrumb/breadcrumb.spec.js +0 -240
  47. package/src/components/base/breadcrumb/breadcrumb.stories.js +0 -100
  48. package/src/components/base/breadcrumb/breadcrumb_item.spec.js +0 -45
  49. package/src/components/base/broadcast_message/broadcast_message.spec.js +0 -32
  50. package/src/components/base/broadcast_message/broadcast_message.stories.js +0 -112
  51. package/src/components/base/button/button.spec.js +0 -225
  52. package/src/components/base/button/button.stories.js +0 -529
  53. package/src/components/base/button_group/button_group.stories.js +0 -132
  54. package/src/components/base/card/card.spec.js +0 -139
  55. package/src/components/base/card/card.stories.js +0 -48
  56. package/src/components/base/carousel/carousel.spec.js +0 -24
  57. package/src/components/base/carousel/carousel.stories.js +0 -51
  58. package/src/components/base/collapse/collapse.spec.js +0 -24
  59. package/src/components/base/collapse/collapse.stories.js +0 -42
  60. package/src/components/base/datepicker/datepicker.spec.js +0 -431
  61. package/src/components/base/datepicker/datepicker.stories.js +0 -149
  62. package/src/components/base/daterange_picker/daterange_picker.spec.js +0 -307
  63. package/src/components/base/daterange_picker/daterange_picker.stories.js +0 -145
  64. package/src/components/base/drawer/drawer.spec.js +0 -136
  65. package/src/components/base/drawer/drawer.stories.js +0 -272
  66. package/src/components/base/dropdown/dropdown.spec.js +0 -457
  67. package/src/components/base/dropdown/dropdown.stories.js +0 -574
  68. package/src/components/base/dropdown/dropdown_form.spec.js +0 -9
  69. package/src/components/base/dropdown/dropdown_item.spec.js +0 -67
  70. package/src/components/base/dropdown/dropdown_item.stories.js +0 -113
  71. package/src/components/base/filtered_search/__snapshots__/filtered_search_term.spec.js.snap +0 -31
  72. package/src/components/base/filtered_search/filtered_search.spec.js +0 -908
  73. package/src/components/base/filtered_search/filtered_search.stories.js +0 -678
  74. package/src/components/base/filtered_search/filtered_search_suggestion.spec.js +0 -67
  75. package/src/components/base/filtered_search/filtered_search_suggestion.stories.js +0 -33
  76. package/src/components/base/filtered_search/filtered_search_suggestion_list.spec.js +0 -337
  77. package/src/components/base/filtered_search/filtered_search_suggestion_list.stories.js +0 -53
  78. package/src/components/base/filtered_search/filtered_search_term.spec.js +0 -212
  79. package/src/components/base/filtered_search/filtered_search_term.stories.js +0 -60
  80. package/src/components/base/filtered_search/filtered_search_token.spec.js +0 -461
  81. package/src/components/base/filtered_search/filtered_search_token.stories.js +0 -199
  82. package/src/components/base/filtered_search/filtered_search_token_segment.spec.js +0 -393
  83. package/src/components/base/filtered_search/filtered_search_token_segment.stories.js +0 -110
  84. package/src/components/base/filtered_search/filtered_search_utils.spec.js +0 -82
  85. package/src/components/base/form/form.stories.js +0 -101
  86. package/src/components/base/form/form_checkbox/form_checkbox.stories.js +0 -55
  87. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.spec.js +0 -265
  88. package/src/components/base/form/form_checkbox_tree/form_checkbox_tree.stories.js +0 -134
  89. package/src/components/base/form/form_combobox/form_combobox.spec.js +0 -301
  90. package/src/components/base/form/form_combobox/form_combobox.stories.js +0 -116
  91. package/src/components/base/form/form_date/form_date.spec.js +0 -85
  92. package/src/components/base/form/form_date/form_date.stories.js +0 -108
  93. package/src/components/base/form/form_fields/form_field_validator.spec.js +0 -51
  94. package/src/components/base/form/form_fields/form_fields.spec.js +0 -531
  95. package/src/components/base/form/form_fields/form_fields.stories.js +0 -150
  96. package/src/components/base/form/form_fields/mappers.spec.js +0 -17
  97. package/src/components/base/form/form_fields/validators.spec.js +0 -56
  98. package/src/components/base/form/form_group/form_group.spec.js +0 -110
  99. package/src/components/base/form/form_group/form_group.stories.js +0 -123
  100. package/src/components/base/form/form_input/form_input.spec.js +0 -130
  101. package/src/components/base/form/form_input/form_input.stories.js +0 -128
  102. package/src/components/base/form/form_input_group/form_input_group.spec.js +0 -121
  103. package/src/components/base/form/form_input_group/form_input_group.stories.js +0 -86
  104. package/src/components/base/form/form_radio/form_radio.spec.js +0 -116
  105. package/src/components/base/form/form_radio/form_radio.stories.js +0 -70
  106. package/src/components/base/form/form_radio_group/form_radio_group.spec.js +0 -86
  107. package/src/components/base/form/form_radio_group/form_radio_group.stories.js +0 -79
  108. package/src/components/base/form/form_select/form_select.spec.js +0 -69
  109. package/src/components/base/form/form_select/form_select.stories.js +0 -156
  110. package/src/components/base/form/form_text/form_text.stories.js +0 -27
  111. package/src/components/base/form/form_textarea/form_textarea.spec.js +0 -242
  112. package/src/components/base/form/form_textarea/form_textarea.stories.js +0 -68
  113. package/src/components/base/form/input_group_text/input_group_text.spec.js +0 -9
  114. package/src/components/base/form/input_group_text/input_group_text.stories.js +0 -30
  115. package/src/components/base/icon/__snapshots__/icon.spec.js.snap +0 -14
  116. package/src/components/base/icon/icon.spec.js +0 -92
  117. package/src/components/base/icon/icon.stories.js +0 -56
  118. package/src/components/base/infinite_scroll/infinite_scroll.spec.js +0 -182
  119. package/src/components/base/infinite_scroll/infinite_scroll.stories.js +0 -94
  120. package/src/components/base/keyset_pagination/keyset_pagination.spec.js +0 -313
  121. package/src/components/base/keyset_pagination/keyset_pagination.stories.js +0 -66
  122. package/src/components/base/label/label.spec.js +0 -257
  123. package/src/components/base/label/label.stories.js +0 -76
  124. package/src/components/base/link/link.spec.js +0 -88
  125. package/src/components/base/link/link.stories.js +0 -64
  126. package/src/components/base/loading_icon/loading_icon.spec.js +0 -109
  127. package/src/components/base/loading_icon/loading_icon.stories.js +0 -60
  128. package/src/components/base/markdown/markdown.spec.js +0 -24
  129. package/src/components/base/markdown/markdown.stories.js +0 -33
  130. package/src/components/base/modal/modal.spec.js +0 -265
  131. package/src/components/base/modal/modal.stories.js +0 -197
  132. package/src/components/base/nav/nav.spec.js +0 -19
  133. package/src/components/base/nav/nav.stories.js +0 -57
  134. package/src/components/base/nav/nav_item.spec.js +0 -16
  135. package/src/components/base/nav/nav_item_dropdown.spec.js +0 -58
  136. package/src/components/base/navbar/navbar.spec.js +0 -21
  137. package/src/components/base/navbar/navbar.stories.js +0 -28
  138. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.spec.js +0 -566
  139. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.spec.js +0 -452
  140. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown.stories.js +0 -345
  141. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.spec.js +0 -84
  142. package/src/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.spec.js +0 -200
  143. package/src/components/base/new_dropdowns/disclosure/utils.spec.js +0 -74
  144. package/src/components/base/new_dropdowns/listbox/listbox.spec.js +0 -950
  145. package/src/components/base/new_dropdowns/listbox/listbox.stories.js +0 -840
  146. package/src/components/base/new_dropdowns/listbox/listbox_group.spec.js +0 -61
  147. package/src/components/base/new_dropdowns/listbox/listbox_item.spec.js +0 -129
  148. package/src/components/base/new_dropdowns/listbox/listbox_search_input.spec.js +0 -62
  149. package/src/components/base/new_dropdowns/listbox/utils.spec.js +0 -58
  150. package/src/components/base/paginated_list/__snapshots__/paginated_list.spec.js.snap +0 -922
  151. package/src/components/base/paginated_list/paginated_list.spec.js +0 -212
  152. package/src/components/base/paginated_list/paginated_list.stories.js +0 -207
  153. package/src/components/base/pagination/pagination.spec.js +0 -401
  154. package/src/components/base/pagination/pagination.stories.js +0 -129
  155. package/src/components/base/path/__snapshots__/path.spec.js.snap +0 -586
  156. package/src/components/base/path/path.spec.js +0 -237
  157. package/src/components/base/path/path.stories.js +0 -84
  158. package/src/components/base/popover/popover.spec.js +0 -104
  159. package/src/components/base/popover/popover.stories.js +0 -109
  160. package/src/components/base/progress_bar/progress_bar.stories.js +0 -34
  161. package/src/components/base/search_box_by_click/search_box_by_click.spec.js +0 -209
  162. package/src/components/base/search_box_by_click/search_box_by_click.stories.js +0 -100
  163. package/src/components/base/search_box_by_type/search_box_by_type.spec.js +0 -164
  164. package/src/components/base/search_box_by_type/search_box_by_type.stories.js +0 -63
  165. package/src/components/base/segmented_control/segmented_control.spec.js +0 -135
  166. package/src/components/base/segmented_control/segmented_control.stories.js +0 -59
  167. package/src/components/base/skeleton_loader/skeleton_loader.spec.js +0 -151
  168. package/src/components/base/skeleton_loader/skeleton_loader.stories.js +0 -86
  169. package/src/components/base/sorting/sorting.spec.js +0 -170
  170. package/src/components/base/sorting/sorting.stories.js +0 -98
  171. package/src/components/base/table/table.spec.js +0 -192
  172. package/src/components/base/table/table.stories.js +0 -186
  173. package/src/components/base/table_lite/table_lite.spec.js +0 -40
  174. package/src/components/base/table_lite/table_lite.stories.js +0 -74
  175. package/src/components/base/tabs/tab/tab.spec.js +0 -34
  176. package/src/components/base/tabs/tabs/scrollable_tabs.spec.js +0 -260
  177. package/src/components/base/tabs/tabs/tabs.spec.js +0 -366
  178. package/src/components/base/tabs/tabs/tabs.stories.js +0 -209
  179. package/src/components/base/toast/toast.spec.js +0 -72
  180. package/src/components/base/toast/toast.stories.js +0 -88
  181. package/src/components/base/toggle/toggle.spec.js +0 -168
  182. package/src/components/base/toggle/toggle.stories.js +0 -106
  183. package/src/components/base/token/token.spec.js +0 -48
  184. package/src/components/base/token/token.stories.js +0 -58
  185. package/src/components/base/token_selector/helpers.spec.js +0 -40
  186. package/src/components/base/token_selector/token_container.spec.js +0 -306
  187. package/src/components/base/token_selector/token_selector.spec.js +0 -653
  188. package/src/components/base/token_selector/token_selector.stories.js +0 -114
  189. package/src/components/base/token_selector/token_selector_dropdown.spec.js +0 -347
  190. package/src/components/base/tooltip/tooltip.spec.js +0 -27
  191. package/src/components/base/tooltip/tooltip.stories.js +0 -70
  192. package/src/components/charts/area/area.spec.js +0 -286
  193. package/src/components/charts/area/area.stories.js +0 -208
  194. package/src/components/charts/bar/__snapshots__/bar.spec.js.snap +0 -82
  195. package/src/components/charts/bar/bar.spec.js +0 -92
  196. package/src/components/charts/bar/bar.stories.js +0 -72
  197. package/src/components/charts/chart/chart.spec.js +0 -167
  198. package/src/components/charts/chart/chart.stories.js +0 -111
  199. package/src/components/charts/column/__snapshots__/column_chart.spec.js.snap +0 -323
  200. package/src/components/charts/column/column.stories.js +0 -111
  201. package/src/components/charts/column/column_chart.spec.js +0 -223
  202. package/src/components/charts/discrete_scatter/discrete_scatter.spec.js +0 -173
  203. package/src/components/charts/discrete_scatter/discrete_scatter.stories.js +0 -64
  204. package/src/components/charts/gauge/gauge.spec.js +0 -280
  205. package/src/components/charts/gauge/gauge.stories.js +0 -97
  206. package/src/components/charts/heatmap/heatmap.spec.js +0 -103
  207. package/src/components/charts/heatmap/heatmap.stories.js +0 -78
  208. package/src/components/charts/legend/legend.spec.js +0 -274
  209. package/src/components/charts/legend/legend.stories.js +0 -174
  210. package/src/components/charts/line/line.spec.js +0 -278
  211. package/src/components/charts/line/line.stories.js +0 -238
  212. package/src/components/charts/series_label/series_label.stories.js +0 -78
  213. package/src/components/charts/single_stat/single_stat.spec.js +0 -217
  214. package/src/components/charts/single_stat/single_stat.stories.js +0 -103
  215. package/src/components/charts/sparkline/sparkline.spec.js +0 -220
  216. package/src/components/charts/sparkline/sparkline.stories.js +0 -85
  217. package/src/components/charts/stacked_column/__snapshots__/stacked_column.spec.js.snap +0 -905
  218. package/src/components/charts/stacked_column/stacked_column.spec.js +0 -194
  219. package/src/components/charts/stacked_column/stacked_column.stories.js +0 -130
  220. package/src/components/charts/tooltip/tooltip.spec.js +0 -282
  221. package/src/components/charts/tooltip/tooltip.stories.js +0 -90
  222. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.spec.js +0 -46
  223. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.stories.js +0 -62
  224. package/src/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.spec.js +0 -70
  225. package/src/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.stories.js +0 -31
  226. package/src/components/experimental/duo/chat/components/duo_chat_message/copy_code_element.spec.js +0 -64
  227. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.spec.js +0 -534
  228. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.stories.js +0 -55
  229. package/src/components/experimental/duo/chat/components/duo_chat_message/utils.spec.js +0 -24
  230. package/src/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.spec.js +0 -93
  231. package/src/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.stories.js +0 -32
  232. package/src/components/experimental/duo/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.spec.js +0 -35
  233. package/src/components/experimental/duo/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.stories.js +0 -36
  234. package/src/components/experimental/duo/chat/duo_chat.spec.js +0 -828
  235. package/src/components/experimental/duo/chat/duo_chat.stories.js +0 -240
  236. package/src/components/experimental/duo/chat/markdown_renderer.spec.js +0 -55
  237. package/src/components/experimental/duo/user_feedback/user_feedback.spec.js +0 -100
  238. package/src/components/experimental/duo/user_feedback/user_feedback.stories.js +0 -107
  239. package/src/components/experimental/duo/user_feedback/user_feedback_modal.spec.js +0 -134
  240. package/src/components/experimental/experiment_badge/experiment_badge.spec.js +0 -77
  241. package/src/components/experimental/experiment_badge/experiment_badge.stories.js +0 -58
  242. package/src/components/regions/dashboard_skeleton/dashboard_skeleton.stories.js +0 -29
  243. package/src/components/regions/empty_state/empty_state.spec.js +0 -293
  244. package/src/components/regions/empty_state/empty_state.stories.js +0 -160
  245. package/src/components/shared_components/charts/tooltip_default_format.spec.js +0 -69
  246. package/src/components/shared_components/clear_icon_button/__snapshots__/clear_icon_button.spec.js.snap +0 -15
  247. package/src/components/shared_components/clear_icon_button/clear_icon_button.spec.js +0 -23
  248. package/src/components/shared_components/close_button/__snapshots__/close_button.spec.js.snap +0 -12
  249. package/src/components/shared_components/close_button/close_button.spec.js +0 -22
  250. package/src/components/utilities/animated_number/animated_number.spec.js +0 -133
  251. package/src/components/utilities/animated_number/animated_number.stories.js +0 -63
  252. package/src/components/utilities/friendly_wrap/friendly_wrap.spec.js +0 -123
  253. package/src/components/utilities/friendly_wrap/friendly_wrap.stories.js +0 -56
  254. package/src/components/utilities/intersection_observer/intersection_observer.spec.js +0 -116
  255. package/src/components/utilities/intersection_observer/intersection_observer.stories.js +0 -162
  256. package/src/components/utilities/intersperse/intersperse.spec.js +0 -115
  257. package/src/components/utilities/intersperse/intersperse.stories.js +0 -53
  258. package/src/components/utilities/sprintf/sprintf.spec.js +0 -337
  259. package/src/components/utilities/sprintf/sprintf.stories.js +0 -104
  260. package/src/components/utilities/truncate/truncate.spec.js +0 -125
  261. package/src/components/utilities/truncate/truncate.stories.js +0 -50
  262. package/src/components/utilities/truncate_text/truncate_text.spec.js +0 -150
  263. package/src/components/utilities/truncate_text/truncate_text.stories.js +0 -45
  264. package/src/directives/hover_load/hover_load.spec.js +0 -64
  265. package/src/directives/hover_load/hover_load.stories.js +0 -51
  266. package/src/directives/outside/outside.spec.js +0 -338
  267. package/src/directives/outside/outside.stories.js +0 -35
  268. package/src/directives/resize_observer/resize_observer.spec.js +0 -125
  269. package/src/directives/resize_observer/resize_observer.stories.js +0 -76
  270. package/src/directives/safe_html/safe_html.spec.js +0 -149
  271. package/src/directives/safe_html/safe_html.stories.js +0 -60
  272. package/src/directives/safe_link/safe_link.spec.js +0 -135
  273. package/src/directives/safe_link/safe_link.stories.js +0 -39
  274. package/src/internal/color_contrast/color_contrast.spec.js +0 -34
  275. package/src/internal/color_contrast/color_contrast.stories.js +0 -41
  276. package/src/scss/functions.spec.scss +0 -54
  277. package/src/scss/mixins.spec.scss +0 -93
  278. package/src/scss/run_scss_tests.spec.js +0 -26
  279. package/src/scss/typescale/typescale.stories.js +0 -61
  280. package/src/tokens/color.constant.tokens.stories.js +0 -19
  281. package/src/tokens/color.dark.tokens.stories.js +0 -26
  282. package/src/tokens/color.data_viz.dark.tokens.stories.js +0 -19
  283. package/src/tokens/color.data_viz.tokens.stories.js +0 -19
  284. package/src/tokens/color.theme.dark.tokens.stories.js +0 -21
  285. package/src/tokens/color.theme.tokens.stories.js +0 -21
  286. package/src/tokens/color.tokens.stories.js +0 -26
  287. package/src/tokens/color.transparency.tokens.stories.js +0 -14
  288. package/src/tokens/text.dark.tokens.stories.js +0 -18
  289. package/src/tokens/text.tokens.stories.js +0 -17
  290. package/src/tokens/tokens.stories.js +0 -16
  291. package/src/utils/breakpoints.spec.js +0 -26
  292. package/src/utils/charts/config.spec.js +0 -478
  293. package/src/utils/charts/utils.spec.js +0 -106
  294. package/src/utils/datetime_utility.spec.js +0 -98
  295. package/src/utils/is_slot_empty.spec.js +0 -73
  296. package/src/utils/number_utils.spec.js +0 -110
  297. package/src/utils/stories_utils.spec.js +0 -18
  298. package/src/utils/string_utils.spec.js +0 -56
  299. 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
- });