@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,840 +0,0 @@
1
- import {
2
- buttonCategoryOptions,
3
- buttonSizeOptions,
4
- buttonVariantOptions,
5
- dropdownPlacements,
6
- } from '../../../../utils/constants';
7
- import GlIcon from '../../icon/icon.vue';
8
- import GlSearchBoxByType from '../../search_box_by_type/search_box_by_type.vue';
9
- import GlButtonGroup from '../../button_group/button_group.vue';
10
- import GlButton from '../../button/button.vue';
11
- import GlBadge from '../../badge/badge.vue';
12
- import GlAvatar from '../../avatar/avatar.vue';
13
- import GlTruncate from '../../../utilities/truncate/truncate.vue';
14
- import { makeContainer } from '../../../../utils/story_decorators/container';
15
- import { setStoryTimeout } from '../../../../utils/test_utils';
16
- import { disableControls } from '../../../../utils/stories_utils';
17
- import {
18
- ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
19
- ARG_TYPE_SUBCATEGORY_STATE,
20
- ARG_TYPE_SUBCATEGORY_SEARCH,
21
- ARG_TYPE_SUBCATEGORY_ACCESSIBILITY,
22
- ARG_TYPE_SUBCATEGORY_INFINITE_SCROLL,
23
- LISTBOX_CONTAINER_HEIGHT,
24
- } from '../../../../utils/stories_constants';
25
- import { POSITION } from '../../../utilities/truncate/constants';
26
- import readme from './listbox.md';
27
- import { mockOptions, mockGroups, mockGroupsWithTextSrOnly, mockUsers } from './mock_data';
28
- import { flattenedOptions } from './utils';
29
- import GlCollapsibleListbox from './listbox.vue';
30
-
31
- const defaultValue = (prop) => GlCollapsibleListbox.props[prop].default;
32
-
33
- const generateProps = ({
34
- items = mockOptions,
35
- category = defaultValue('category'),
36
- variant = defaultValue('variant'),
37
- size = defaultValue('size'),
38
- disabled = defaultValue('disabled'),
39
- block = defaultValue('block'),
40
- loading = defaultValue('loading'),
41
- searchable = defaultValue('searchable'),
42
- searching = defaultValue('searching'),
43
- infiniteScroll = defaultValue('infiniteScroll'),
44
- infiniteScrollLoading = defaultValue('infiniteScrollLoading'),
45
- noResultsText = defaultValue('noResultsText'),
46
- searchPlaceholder = defaultValue('searchPlaceholder'),
47
- noCaret = defaultValue('noCaret'),
48
- placement = defaultValue('placement'),
49
- toggleClass,
50
- toggleText,
51
- textSrOnly = defaultValue('textSrOnly'),
52
- headerText = defaultValue('headerText'),
53
- icon = '',
54
- multiple = defaultValue('multiple'),
55
- isCheckCentered = defaultValue('isCheckCentered'),
56
- toggleAriaLabelledBy,
57
- listAriaLabelledBy,
58
- resetButtonLabel = defaultValue('resetButtonLabel'),
59
- showSelectAllButtonLabel = defaultValue('showSelectAllButtonLabel'),
60
- startOpened = true,
61
- fluidWidth,
62
- positioningStrategy,
63
- srOnlyResultsLabel,
64
- } = {}) => ({
65
- items,
66
- category,
67
- variant,
68
- size,
69
- disabled,
70
- block,
71
- loading,
72
- searchable,
73
- searching,
74
- infiniteScroll,
75
- infiniteScrollLoading,
76
- noResultsText,
77
- searchPlaceholder,
78
- noCaret,
79
- placement,
80
- toggleClass,
81
- toggleText,
82
- textSrOnly,
83
- headerText,
84
- icon,
85
- multiple,
86
- isCheckCentered,
87
- toggleAriaLabelledBy,
88
- listAriaLabelledBy,
89
- resetButtonLabel,
90
- showSelectAllButtonLabel,
91
- startOpened,
92
- fluidWidth,
93
- positioningStrategy,
94
- srOnlyResultsLabel,
95
- });
96
-
97
- const makeBindings = (overrides = {}) =>
98
- Object.entries({
99
- ':items': 'items',
100
- ':category': 'category',
101
- ':variant': 'variant',
102
- ':block': 'block',
103
- ':size': 'size',
104
- ':disabled': 'disabled',
105
- ':loading': 'loading',
106
- ':searchable': 'searchable',
107
- ':searching': 'searching',
108
- ':infinite-scroll': 'infiniteScroll',
109
- ':infinite-scroll-loading': 'infiniteScrollLoading',
110
- ':no-results-text': 'noResultsText',
111
- ':search-placeholder': 'searchPlaceholder',
112
- ':no-caret': 'noCaret',
113
- ':placement': 'placement',
114
- ':toggle-class': 'toggleClass',
115
- ':toggle-text': 'toggleText',
116
- ':text-sr-only': 'textSrOnly',
117
- ':header-text': 'headerText',
118
- ':icon': 'icon',
119
- ':multiple': 'multiple',
120
- ':is-check-centered': 'isCheckCentered',
121
- ':toggle-aria-labelled-by': 'toggleAriaLabelledBy',
122
- ':list-aria-labelled-by': 'listAriaLabelledBy',
123
- ':reset-button-label': 'resetButtonLabel',
124
- ':show-select-all-button-label': 'showSelectAllButtonLabel',
125
- ':fluid-width': 'fluidWidth',
126
- ':positioning-strategy': 'positioningStrategy',
127
- ':startOpened': 'startOpened',
128
- ':sr-only-results-label': 'srOnlyResultsLabel',
129
- ...overrides,
130
- })
131
- .map(([key, value]) => `${key}="${value}"`)
132
- .join('\n');
133
-
134
- const template = (content, { label = '', bindingOverrides = {} } = {}) => `
135
- <div>
136
- ${label}
137
- ${label && '<br/>'}
138
- <gl-collapsible-listbox
139
- ref="listbox"
140
- v-model="selected"
141
- ${makeBindings(bindingOverrides)}
142
- >
143
- ${content}
144
- </gl-collapsible-listbox>
145
- </div>
146
- `;
147
-
148
- export const Default = (args, { argTypes }) => ({
149
- props: Object.keys(argTypes),
150
- components: {
151
- GlCollapsibleListbox,
152
- },
153
- data() {
154
- return {
155
- selected: mockOptions[1].value,
156
- };
157
- },
158
- template: template('', {
159
- label: `<span class="gl-my-0" id="listbox-label">Select a department</span>`,
160
- }),
161
- });
162
- Default.args = generateProps({ toggleAriaLabelledBy: 'listbox-label' });
163
- Default.decorators = [makeContainer({ height: LISTBOX_CONTAINER_HEIGHT })];
164
-
165
- export const HeaderAndFooter = (args, { argTypes }) => ({
166
- props: Object.keys(argTypes),
167
- components: {
168
- GlCollapsibleListbox,
169
- GlSearchBoxByType,
170
- GlButtonGroup,
171
- GlButton,
172
- },
173
- data() {
174
- return {
175
- selected: [],
176
- };
177
- },
178
- template: template(
179
- `
180
- <template #footer>
181
- <div class="gl-border-t-solid gl-border-t-1 gl-border-t-gray-200 gl-display-flex gl-flex-direction-column gl-p-2! gl-pt-0!">
182
- <gl-button category="tertiary" block class="gl-justify-content-start! gl-mt-2!" data-testid="footer-bottom-button">
183
- Manage departments
184
- </gl-button>
185
- </div>
186
- </template>
187
- `,
188
- {
189
- bindingOverrides: {
190
- '@reset': 'onReset',
191
- },
192
- }
193
- ),
194
- });
195
- HeaderAndFooter.args = generateProps({
196
- toggleText: 'Header and Footer',
197
- headerText: 'Assign to department',
198
- resetButtonLabel: 'Unassign',
199
- multiple: true,
200
- block: true,
201
- });
202
- HeaderAndFooter.decorators = [makeContainer({ height: LISTBOX_CONTAINER_HEIGHT })];
203
-
204
- export const HeaderActions = (args, { argTypes }) => ({
205
- props: Object.keys(argTypes),
206
- components: {
207
- GlCollapsibleListbox,
208
- GlSearchBoxByType,
209
- GlButtonGroup,
210
- GlButton,
211
- },
212
- data() {
213
- return {
214
- selected: [],
215
- };
216
- },
217
- computed: {
218
- allValues() {
219
- return mockOptions.map(({ value }) => value);
220
- },
221
- },
222
- methods: {
223
- selectAllItems() {
224
- this.selected = [...this.allValues];
225
- },
226
- onReset() {
227
- this.selected = [];
228
- },
229
- },
230
- template: template('', {
231
- bindingOverrides: {
232
- '@reset': 'onReset',
233
- '@select-all': 'selectAllItems',
234
- },
235
- }),
236
- });
237
-
238
- HeaderActions.args = generateProps({
239
- toggleText: 'Header actions',
240
- headerText: 'Assign to department',
241
- resetButtonLabel: 'Unassign',
242
- showSelectAllButtonLabel: 'Select all',
243
- multiple: true,
244
- block: true,
245
- });
246
- HeaderActions.decorators = [makeContainer({ height: LISTBOX_CONTAINER_HEIGHT })];
247
-
248
- export const CustomListItem = (args, { argTypes }) => ({
249
- props: Object.keys(argTypes),
250
- data() {
251
- return {
252
- selected: [mockUsers[0].value],
253
- };
254
- },
255
- components: {
256
- GlCollapsibleListbox,
257
- GlIcon,
258
- GlAvatar,
259
- },
260
- computed: {
261
- customToggleText() {
262
- if (this.selected.length === 0) return 'Select assignee(s)';
263
- if (this.selected.length === 1)
264
- return this.items.find(({ value }) => value === this.selected[0]).text;
265
- return `${this.selected.length} assignees`;
266
- },
267
- },
268
- methods: {
269
- onReset() {
270
- this.selected = [];
271
- },
272
- },
273
- template: template(
274
- `<template #list-item="{ item }">
275
- <span class="gl-display-flex gl-align-items-center">
276
- <gl-avatar :size="32" :entity-name="item.value" class="gl-mr-3"/>
277
- <span class="gl-display-flex gl-flex-direction-column">
278
- <span class="gl-font-weight-bold gl-white-space-nowrap">{{ item.text }}</span>
279
- <span class="gl-text-subtle"> {{ item.secondaryText }}</span>
280
- </span>
281
- </span>
282
- </template>
283
- `,
284
- {
285
- bindingOverrides: {
286
- ':toggle-text': 'customToggleText',
287
- '@reset': 'onReset',
288
- },
289
- }
290
- ),
291
- });
292
-
293
- CustomListItem.args = generateProps({
294
- items: mockUsers,
295
- multiple: true,
296
- isCheckCentered: true,
297
- headerText: 'Select assignees',
298
- resetButtonLabel: 'Unassign',
299
- });
300
- CustomListItem.decorators = [makeContainer({ height: '200px' })];
301
-
302
- export const CustomToggle = (args, { argTypes }) => ({
303
- props: Object.keys(argTypes),
304
- components: {
305
- GlCollapsibleListbox,
306
- GlAvatar,
307
- },
308
- data() {
309
- return {
310
- selected: mockUsers[1].value,
311
- };
312
- },
313
- template: template(
314
- `
315
- <template #toggle>
316
- <button class="gl-rounded-base gl-border-none gl-p-2 gl-bg-gray-50 ">
317
- <span class="gl-sr-only">
318
- {{selected}}
319
- </span>
320
- <gl-avatar :size="32" :entity-name="selected" aria-hidden="true"/>
321
- </button>
322
- </template>
323
- <template #list-item="{ item }">
324
- <span class="gl-display-flex gl-align-items-center">
325
- <gl-avatar :size="32" :entity-name="item.value" class="gl-mr-3"/>
326
- <span class="gl-display-flex gl-flex-direction-column">
327
- <span class="gl-font-weight-bold gl-white-space-nowrap">{{ item.text }}</span>
328
- <span class="gl-text-subtle"> {{ item.secondaryText }}</span>
329
- </span>
330
- </span>
331
- </template>
332
- `
333
- ),
334
- });
335
- CustomToggle.args = generateProps({
336
- items: mockUsers,
337
- isCheckCentered: true,
338
- });
339
- CustomToggle.decorators = [makeContainer({ height: '200px' })];
340
-
341
- const makeGroupedExample = (changes) => {
342
- const story = (args, { argTypes }) => ({
343
- props: Object.keys(argTypes),
344
- components: {
345
- GlBadge,
346
- GlCollapsibleListbox,
347
- },
348
- data() {
349
- return {
350
- selected: 'v1.0',
351
- };
352
- },
353
- ...changes,
354
- });
355
-
356
- story.args = generateProps({ items: mockGroups });
357
- story.decorators = [makeContainer({ height: '280px' })];
358
-
359
- return story;
360
- };
361
-
362
- export const Groups = makeGroupedExample({
363
- template: template('', {
364
- bindingOverrides: {
365
- ':toggle-text': 'customToggleText',
366
- ':items': 'computedItems',
367
- },
368
- }),
369
- data() {
370
- return {
371
- selected: ['v1.0'],
372
- };
373
- },
374
- computed: {
375
- customToggleText() {
376
- return this.selected.length ? `${this.selected.length} refs selected` : 'Select refs';
377
- },
378
- computedItems() {
379
- const isSelected = (option) => this.selected.includes(option.value);
380
- const notSelected = (option) => !isSelected(option);
381
-
382
- // eslint-disable-next-line unicorn/no-array-callback-reference
383
- const selectedBranches = mockGroups[0].options.filter(isSelected);
384
- // eslint-disable-next-line unicorn/no-array-callback-reference
385
- const availableBranches = mockGroups[0].options.filter(notSelected);
386
- // eslint-disable-next-line unicorn/no-array-callback-reference
387
- const selectedTags = mockGroups[1].options.filter(isSelected);
388
- // eslint-disable-next-line unicorn/no-array-callback-reference
389
- const availableTags = mockGroups[1].options.filter(notSelected);
390
-
391
- return [
392
- {
393
- text: 'Selected branches',
394
- options: selectedBranches,
395
- },
396
- {
397
- text: 'Selected tags',
398
- options: selectedTags,
399
- },
400
- {
401
- text: 'Branches',
402
- options: availableBranches,
403
- },
404
- {
405
- text: 'Tags',
406
- options: availableTags,
407
- },
408
- ].filter((group) => group.options.length);
409
- },
410
- },
411
- });
412
- Groups.args = generateProps({ multiple: true });
413
-
414
- export const CustomGroupsAndItems = makeGroupedExample({
415
- template: template(`
416
- <template #group-label="{ group }">
417
- {{ group.text }} <gl-badge size="sm">{{ group.options.length }}</gl-badge>
418
- </template>
419
- <template #list-item="{ item }">
420
- {{ item.text }} <gl-badge v-if="item.value === 'main'" size="sm">default</gl-badge>
421
- </template>
422
- `),
423
- });
424
-
425
- export const GroupWithoutLabel = (args, { argTypes }) => ({
426
- props: Object.keys(argTypes),
427
- components: {
428
- GlBadge,
429
- GlCollapsibleListbox,
430
- },
431
- data() {
432
- return {
433
- selected: mockGroupsWithTextSrOnly[1].options[1].value,
434
- };
435
- },
436
- template: template(`
437
- <template #list-item="{ item }">
438
- {{ item.text }} <gl-badge v-if="item.value === 'main'" size="sm">default</gl-badge>
439
- </template>
440
- `),
441
- });
442
- GroupWithoutLabel.args = generateProps({
443
- items: mockGroupsWithTextSrOnly,
444
- headerText: 'Select branch',
445
- });
446
-
447
- export default {
448
- title: 'base/dropdown/collapsible-listbox',
449
- component: GlCollapsibleListbox,
450
- parameters: {
451
- docs: {
452
- description: {
453
- component: readme,
454
- },
455
- },
456
- },
457
- argTypes: {
458
- category: {
459
- control: 'select',
460
- options: buttonCategoryOptions,
461
- table: {
462
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
463
- },
464
- },
465
- variant: {
466
- control: 'select',
467
- options: buttonVariantOptions,
468
- table: {
469
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
470
- },
471
- },
472
- size: {
473
- control: 'select',
474
- options: Object.keys(buttonSizeOptions),
475
- table: {
476
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
477
- },
478
- },
479
- block: {
480
- table: {
481
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
482
- },
483
- },
484
- noCaret: {
485
- table: {
486
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
487
- },
488
- },
489
- placement: {
490
- control: 'select',
491
- options: Object.keys(dropdownPlacements),
492
- table: {
493
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
494
- },
495
- },
496
- toggleText: {
497
- table: {
498
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
499
- },
500
- },
501
- icon: {
502
- table: {
503
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
504
- },
505
- },
506
- isCheckCentered: {
507
- table: {
508
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
509
- },
510
- },
511
- headerText: {
512
- table: {
513
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
514
- },
515
- },
516
- resetButtonLabel: {
517
- table: {
518
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
519
- },
520
- },
521
- toggleClass: {
522
- table: {
523
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
524
- },
525
- },
526
- fluidWidth: {
527
- table: {
528
- subcategory: ARG_TYPE_SUBCATEGORY_LOOK_AND_FEEL,
529
- },
530
- },
531
- disabled: {
532
- table: {
533
- subcategory: ARG_TYPE_SUBCATEGORY_STATE,
534
- },
535
- },
536
- loading: {
537
- table: {
538
- subcategory: ARG_TYPE_SUBCATEGORY_STATE,
539
- },
540
- },
541
- searchable: {
542
- table: {
543
- subcategory: ARG_TYPE_SUBCATEGORY_SEARCH,
544
- },
545
- },
546
- searching: {
547
- table: {
548
- subcategory: ARG_TYPE_SUBCATEGORY_SEARCH,
549
- },
550
- },
551
- noResultsText: {
552
- table: {
553
- subcategory: ARG_TYPE_SUBCATEGORY_SEARCH,
554
- },
555
- },
556
- searchPlaceholder: {
557
- table: {
558
- subcategory: ARG_TYPE_SUBCATEGORY_SEARCH,
559
- },
560
- },
561
- textSrOnly: {
562
- table: {
563
- subcategory: ARG_TYPE_SUBCATEGORY_ACCESSIBILITY,
564
- },
565
- },
566
- toggleAriaLabelledBy: {
567
- table: {
568
- subcategory: ARG_TYPE_SUBCATEGORY_ACCESSIBILITY,
569
- },
570
- },
571
- srOnlyResultsLabel: {
572
- table: {
573
- subcategory: ARG_TYPE_SUBCATEGORY_ACCESSIBILITY,
574
- },
575
- },
576
- listAriaLabelledBy: {
577
- table: {
578
- subcategory: ARG_TYPE_SUBCATEGORY_ACCESSIBILITY,
579
- },
580
- },
581
- infiniteScroll: {
582
- table: {
583
- subcategory: ARG_TYPE_SUBCATEGORY_INFINITE_SCROLL,
584
- },
585
- },
586
- infiniteScrollLoading: {
587
- table: {
588
- subcategory: ARG_TYPE_SUBCATEGORY_INFINITE_SCROLL,
589
- },
590
- },
591
- totalItems: {
592
- table: {
593
- subcategory: ARG_TYPE_SUBCATEGORY_INFINITE_SCROLL,
594
- },
595
- },
596
- },
597
- };
598
-
599
- export const Searchable = (args, { argTypes }) => ({
600
- props: Object.keys(argTypes),
601
- components: {
602
- GlCollapsibleListbox,
603
- },
604
- data() {
605
- return {
606
- selected: mockOptions[1].value,
607
- filteredItems: mockOptions,
608
- searchInProgress: false,
609
- timeoutId: null,
610
- };
611
- },
612
- methods: {
613
- filterList(searchTerm) {
614
- if (this.timeoutId) {
615
- clearTimeout(this.timeoutId);
616
- }
617
- this.searchInProgress = true;
618
-
619
- // eslint-disable-next-line no-restricted-globals
620
- this.timeoutId = setTimeout(() => {
621
- this.filteredItems = this.items.filter(({ text }) =>
622
- text.toLowerCase().includes(searchTerm.toLowerCase())
623
- );
624
-
625
- this.searchInProgress = false;
626
- }, 2000);
627
- },
628
- },
629
- computed: {
630
- customToggleText() {
631
- let toggleText = 'Search for department';
632
- const selectedValues = Array.isArray(this.selected) ? this.selected : [this.selected];
633
-
634
- if (selectedValues.length === 1) {
635
- toggleText = this.items.find(({ value }) => value === selectedValues[0]).text;
636
- } else {
637
- toggleText = `Selected ${selectedValues.length} departments`;
638
- }
639
-
640
- return toggleText;
641
- },
642
- numberOfSearchResults() {
643
- return `${this.filteredItems.length} department${this.filteredItems.length > 1 ? 's' : ''}`;
644
- },
645
- },
646
- template: template(
647
- `<template #search-summary-sr-only>
648
- {{ numberOfSearchResults }}
649
- </template>`,
650
- {
651
- bindingOverrides: {
652
- ':items': 'filteredItems',
653
- ':toggle-text': 'customToggleText',
654
- ':searching': 'searchInProgress',
655
- '@search': 'filterList',
656
- },
657
- }
658
- ),
659
- });
660
- Searchable.args = generateProps({
661
- headerText: 'Assign to department',
662
- searchable: true,
663
- searchPlaceholder: 'Find department',
664
- });
665
- Searchable.decorators = [makeContainer({ height: LISTBOX_CONTAINER_HEIGHT })];
666
-
667
- export const SearchableGroups = (args, { argTypes }) => ({
668
- props: Object.keys(argTypes),
669
- components: {
670
- GlCollapsibleListbox,
671
- },
672
- data() {
673
- return {
674
- selected: mockGroups[1].options[0].value,
675
- filteredGroupOptions: mockGroups,
676
- searchInProgress: false,
677
- timeoutId: null,
678
- };
679
- },
680
- computed: {
681
- flattenedOptions() {
682
- return flattenedOptions(this.items);
683
- },
684
- flattenedFilteredOptions() {
685
- return flattenedOptions(this.filteredGroupOptions);
686
- },
687
- customToggleText() {
688
- let toggleText = 'Search for department';
689
- const selectedValues = Array.isArray(this.selected) ? this.selected : [this.selected];
690
-
691
- if (selectedValues.length === 1) {
692
- toggleText = this.flattenedOptions.find(({ value }) => value === selectedValues[0]).text;
693
- } else {
694
- toggleText = `Selected ${selectedValues.length} departments`;
695
- }
696
-
697
- return toggleText;
698
- },
699
- },
700
- methods: {
701
- filterList(searchTerm) {
702
- if (this.timeoutId) {
703
- clearTimeout(this.timeoutId);
704
- }
705
- this.searchInProgress = true;
706
-
707
- // eslint-disable-next-line no-restricted-globals
708
- this.timeoutId = setTimeout(() => {
709
- this.filteredGroupOptions = this.items
710
- .map(({ text, options }) => {
711
- return {
712
- text,
713
- options: options.filter((option) =>
714
- option.text.toLowerCase().includes(searchTerm.toLowerCase())
715
- ),
716
- };
717
- })
718
- .filter(({ options }) => options.length);
719
-
720
- this.searchInProgress = false;
721
- }, 2000);
722
- },
723
- srOnlyResultsLabel(count) {
724
- return `${count} branch${count > 1 ? 'es' : ''} or tag${count > 1 ? 's' : ''}`;
725
- },
726
- },
727
- template: template('', {
728
- bindingOverrides: {
729
- ':items': 'filteredGroupOptions',
730
- ':toggle-text': 'customToggleText',
731
- ':searching': 'searchInProgress',
732
- ':sr-only-results-label': 'srOnlyResultsLabel',
733
- '@search': 'filterList',
734
- },
735
- }),
736
- });
737
- SearchableGroups.args = generateProps({
738
- headerText: 'Select ref',
739
- searchable: true,
740
- items: mockGroups,
741
- });
742
- SearchableGroups.decorators = [makeContainer({ height: LISTBOX_CONTAINER_HEIGHT })];
743
-
744
- export const InfiniteScroll = (
745
- args,
746
- { argTypes: { infiniteScroll, infiniteScrollLoading, items, ...argTypes } }
747
- ) => ({
748
- props: Object.keys(argTypes),
749
- components: {
750
- GlCollapsibleListbox,
751
- },
752
- data() {
753
- return {
754
- selected: mockOptions[1].value,
755
- items: mockOptions.slice(0, 10),
756
- infiniteScrollLoading: false,
757
- infiniteScroll: true,
758
- };
759
- },
760
- methods: {
761
- onBottomReached() {
762
- this.infiniteScrollLoading = true;
763
-
764
- setStoryTimeout(() => {
765
- this.items.push(...mockOptions.slice(10, 12));
766
- this.infiniteScrollLoading = false;
767
- this.infiniteScroll = false;
768
- }, 1000);
769
- },
770
- },
771
- template: template('', {
772
- label: `<span class="gl-my-0" id="listbox-label">Select a department</span>`,
773
- bindingOverrides: {
774
- ':items': 'items',
775
- ':infinite-scroll': 'infiniteScroll',
776
- ':infinite-scroll-loading': 'infiniteScrollLoading',
777
- ':total-items': 12,
778
- '@bottom-reached': 'onBottomReached',
779
- },
780
- }),
781
- });
782
- InfiniteScroll.argTypes = {
783
- ...disableControls(['infiniteScroll', 'infiniteScrollLoading', 'items']),
784
- };
785
- InfiniteScroll.tags = ['skip-visual-test'];
786
- InfiniteScroll.args = generateProps();
787
- InfiniteScroll.decorators = [makeContainer({ height: LISTBOX_CONTAINER_HEIGHT })];
788
-
789
- export const WithLongContent = (args, { argTypes: { items, ...argTypes } }) => ({
790
- props: Object.keys(argTypes),
791
- components: {
792
- GlCollapsibleListbox,
793
- GlButton,
794
- GlTruncate,
795
- },
796
- data() {
797
- const positions = Object.values(POSITION);
798
- const longItems = Array.from({ length: positions.length }).map((_, index) => ({
799
- value: `long_value_${index}`,
800
- text: `${
801
- index + 1
802
- }. This is a super long option. Its text is so long that it overflows the max content width. Thankfully, we are truncating it!`,
803
- truncatePosition: positions[index],
804
- }));
805
-
806
- return {
807
- selected: longItems[0].value,
808
- items: longItems,
809
- };
810
- },
811
- computed: {
812
- customToggleText() {
813
- return this.items.find(({ value }) => value === this.selected).text;
814
- },
815
- numberOfSearchResults() {
816
- return this.filteredItems.length === 1 ? '1 result' : `${this.filteredItems.length} results`;
817
- },
818
- },
819
- template: template(
820
- `
821
- <template #toggle>
822
- <gl-button class="gl-w-30">
823
- <gl-truncate :text="customToggleText" />
824
- </gl-button>
825
- </template>
826
- <template #list-item="{ item }">
827
- <gl-truncate :text="item.text" :position="item.truncatePosition" />
828
- </template>
829
- `,
830
- {
831
- label: `<span class="gl-my-0" id="listbox-label">Select the longest option</span>`,
832
- bindingOverrides: {
833
- ':items': 'items',
834
- },
835
- }
836
- ),
837
- });
838
- WithLongContent.args = generateProps({
839
- fluidWidth: true,
840
- });