@gitlab/ui 132.0.0 → 132.0.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 (403) hide show
  1. package/dist/charts.js +13 -0
  2. package/dist/components/base/accordion/accordion.js +69 -0
  3. package/dist/components/base/accordion/accordion_item.js +160 -0
  4. package/dist/components/base/accordion/constants.js +3 -0
  5. package/dist/components/base/alert/alert.js +263 -0
  6. package/dist/components/base/animated_icon/animated_chevron_down_up_icon.js +45 -0
  7. package/dist/components/base/animated_icon/animated_chevron_lg_down_up_icon.js +45 -0
  8. package/dist/components/base/animated_icon/animated_chevron_lg_right_down_icon.js +45 -0
  9. package/dist/components/base/animated_icon/animated_chevron_right_down_icon.js +45 -0
  10. package/dist/components/base/animated_icon/animated_duo_chat_icon.js +45 -0
  11. package/dist/components/base/animated_icon/animated_loader_icon.js +45 -0
  12. package/dist/components/base/animated_icon/animated_notifications_icon.js +45 -0
  13. package/dist/components/base/animated_icon/animated_sidebar_icon.js +45 -0
  14. package/dist/components/base/animated_icon/animated_smile_icon.js +45 -0
  15. package/dist/components/base/animated_icon/animated_sort_icon.js +45 -0
  16. package/dist/components/base/animated_icon/animated_star_icon.js +45 -0
  17. package/dist/components/base/animated_icon/animated_todo_icon.js +45 -0
  18. package/dist/components/base/animated_icon/animated_upload_icon.js +45 -0
  19. package/dist/components/base/animated_icon/base_animated_icon.js +77 -0
  20. package/dist/components/base/attribute_list/attribute_list.js +100 -0
  21. package/dist/components/base/avatar/avatar.js +175 -0
  22. package/dist/components/base/avatar/utils.js +17 -0
  23. package/dist/components/base/avatar_labeled/avatar_labeled.js +198 -0
  24. package/dist/components/base/avatar_link/avatar_link.js +47 -0
  25. package/dist/components/base/avatars_inline/avatars_inline.js +139 -0
  26. package/dist/components/base/badge/badge.js +197 -0
  27. package/dist/components/base/banner/banner.js +149 -0
  28. package/dist/components/base/breadcrumb/breadcrumb.js +282 -0
  29. package/dist/components/base/breadcrumb/breadcrumb_item.js +96 -0
  30. package/dist/components/base/broadcast_message/broadcast_message.js +113 -0
  31. package/dist/components/base/broadcast_message/constants.js +5 -0
  32. package/dist/components/base/button/button.js +419 -0
  33. package/dist/components/base/button_group/button_group.js +53 -0
  34. package/dist/components/base/card/card.js +69 -0
  35. package/dist/components/base/collapse/collapse.js +163 -0
  36. package/dist/components/base/color_mode_toggle/color_mode_toggle.js +92 -0
  37. package/dist/components/base/datepicker/datepicker.js +475 -0
  38. package/dist/components/base/daterange_picker/daterange_picker.js +394 -0
  39. package/dist/components/base/drawer/drawer.js +156 -0
  40. package/dist/components/base/dropdown/dropdown.js +330 -0
  41. package/dist/components/base/dropdown/dropdown_divider.js +48 -0
  42. package/dist/components/base/dropdown/dropdown_form.js +48 -0
  43. package/dist/components/base/dropdown/dropdown_item.js +175 -0
  44. package/dist/components/base/dropdown/dropdown_section_header.js +48 -0
  45. package/dist/components/base/dropdown/dropdown_text.js +48 -0
  46. package/dist/components/base/filtered_search/common_story_options.js +14 -0
  47. package/dist/components/base/filtered_search/filtered_search.js +428 -0
  48. package/dist/components/base/filtered_search/filtered_search_suggestion.js +95 -0
  49. package/dist/components/base/filtered_search/filtered_search_suggestion_list.js +139 -0
  50. package/dist/components/base/filtered_search/filtered_search_term.js +217 -0
  51. package/dist/components/base/filtered_search/filtered_search_token.js +383 -0
  52. package/dist/components/base/filtered_search/filtered_search_token_segment.js +444 -0
  53. package/dist/components/base/filtered_search/filtered_search_utils.js +241 -0
  54. package/dist/components/base/form/form.js +43 -0
  55. package/dist/components/base/form/form_character_count/form_character_count.js +107 -0
  56. package/dist/components/base/form/form_checkbox/form_checkbox.js +342 -0
  57. package/dist/components/base/form/form_checkbox/form_checkbox_group.js +188 -0
  58. package/dist/components/base/form/form_combobox/constants.js +55 -0
  59. package/dist/components/base/form/form_combobox/form_combobox.js +239 -0
  60. package/dist/components/base/form/form_date/form_date.js +143 -0
  61. package/dist/components/base/form/form_fields/form_field_validator.js +93 -0
  62. package/dist/components/base/form/form_fields/form_fields.js +289 -0
  63. package/dist/components/base/form/form_fields/form_fields_loop.js +75 -0
  64. package/dist/components/base/form/form_fields/mappers.js +13 -0
  65. package/dist/components/base/form/form_fields/validators.js +48 -0
  66. package/dist/components/base/form/form_group/form_group.js +119 -0
  67. package/dist/components/base/form/form_input/form_input.js +695 -0
  68. package/dist/components/base/form/form_input_group/form_input_group.js +120 -0
  69. package/dist/components/base/form/form_input_group/form_input_group_mixin.js +41 -0
  70. package/dist/components/base/form/form_radio/form_radio.js +259 -0
  71. package/dist/components/base/form/form_radio_group/form_radio_group.js +189 -0
  72. package/dist/components/base/form/form_select/constants.js +12 -0
  73. package/dist/components/base/form/form_select/form_select.js +96 -0
  74. package/dist/components/base/form/form_textarea/form_textarea.js +166 -0
  75. package/dist/components/base/form/input_group_text/input_group_text.js +43 -0
  76. package/dist/components/base/icon/icon.js +113 -0
  77. package/dist/components/base/illustration/illustration.js +80 -0
  78. package/dist/components/base/infinite_scroll/infinite_scroll.js +196 -0
  79. package/dist/components/base/keyset_pagination/keyset_pagination.js +152 -0
  80. package/dist/components/base/label/label.js +174 -0
  81. package/dist/components/base/link/link.js +330 -0
  82. package/dist/components/base/loading_icon/loading_icon.js +120 -0
  83. package/dist/components/base/markdown/markdown.js +50 -0
  84. package/dist/components/base/modal/modal.js +259 -0
  85. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +716 -0
  86. package/dist/components/base/new_dropdowns/base_dropdown/constants.js +5 -0
  87. package/dist/components/base/new_dropdowns/base_dropdown/dropdown_container.js +32 -0
  88. package/dist/components/base/new_dropdowns/constants.js +24 -0
  89. package/dist/components/base/new_dropdowns/disclosure/constants.js +8 -0
  90. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown.js +400 -0
  91. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_group.js +112 -0
  92. package/dist/components/base/new_dropdowns/disclosure/disclosure_dropdown_item.js +196 -0
  93. package/dist/components/base/new_dropdowns/disclosure/mock_data.js +168 -0
  94. package/dist/components/base/new_dropdowns/disclosure/utils.js +84 -0
  95. package/dist/components/base/new_dropdowns/listbox/listbox.js +997 -0
  96. package/dist/components/base/new_dropdowns/listbox/listbox_group.js +58 -0
  97. package/dist/components/base/new_dropdowns/listbox/listbox_item.js +112 -0
  98. package/dist/components/base/new_dropdowns/listbox/listbox_search_input.js +94 -0
  99. package/dist/components/base/new_dropdowns/listbox/mock_data.js +131 -0
  100. package/dist/components/base/new_dropdowns/listbox/utils.js +33 -0
  101. package/dist/components/base/pagination/pagination.js +397 -0
  102. package/dist/components/base/path/data.js +34 -0
  103. package/dist/components/base/path/path.js +177 -0
  104. package/dist/components/base/popover/popover.js +142 -0
  105. package/dist/components/base/progress_bar/progress_bar.js +117 -0
  106. package/dist/components/base/search_box_by_click/search_box_by_click.js +245 -0
  107. package/dist/components/base/search_box_by_type/search_box_by_type.js +187 -0
  108. package/dist/components/base/segmented_control/segmented_control.js +73 -0
  109. package/dist/components/base/skeleton_loader/skeleton_loader.js +232 -0
  110. package/dist/components/base/sorting/sorting.js +180 -0
  111. package/dist/components/base/table/constants.js +5 -0
  112. package/dist/components/base/table/table.js +187 -0
  113. package/dist/components/base/table_lite/table_lite.js +80 -0
  114. package/dist/components/base/tabs/constants.js +3 -0
  115. package/dist/components/base/tabs/tab/tab.js +113 -0
  116. package/dist/components/base/tabs/tabs/scrollable_tabs.js +162 -0
  117. package/dist/components/base/tabs/tabs/tabs.js +223 -0
  118. package/dist/components/base/toast/index.js +66 -0
  119. package/dist/components/base/toast/toast.js +125 -0
  120. package/dist/components/base/toast/toaster.js +87 -0
  121. package/dist/components/base/toggle/toggle.js +178 -0
  122. package/dist/components/base/token/token.js +97 -0
  123. package/dist/components/base/token_selector/helpers.js +5 -0
  124. package/dist/components/base/token_selector/token_container.js +160 -0
  125. package/dist/components/base/token_selector/token_selector.js +454 -0
  126. package/dist/components/base/token_selector/token_selector_dropdown.js +223 -0
  127. package/dist/components/base/tooltip/tooltip.js +54 -0
  128. package/dist/components/charts/area/area.js +329 -0
  129. package/dist/components/charts/bar/bar.js +207 -0
  130. package/dist/components/charts/chart/chart.js +215 -0
  131. package/dist/components/charts/column/column.js +221 -0
  132. package/dist/components/charts/discrete_scatter/discrete_scatter.js +199 -0
  133. package/dist/components/charts/gauge/gauge.js +205 -0
  134. package/dist/components/charts/heatmap/heatmap.js +299 -0
  135. package/dist/components/charts/heatmap/index.js +2 -0
  136. package/dist/components/charts/legend/legend.js +245 -0
  137. package/dist/components/charts/line/line.js +340 -0
  138. package/dist/components/charts/series_label/series_label.js +101 -0
  139. package/dist/components/charts/shared/tooltip/tooltip.js +369 -0
  140. package/dist/components/charts/shared/tooltip/tooltip_default_format/tooltip_default_format.js +53 -0
  141. package/dist/components/charts/single_stat/single_stat.js +164 -0
  142. package/dist/components/charts/sparkline/sparkline.js +299 -0
  143. package/dist/components/charts/stacked_column/stacked_column.js +380 -0
  144. package/dist/components/dashboards/dashboard_layout/dashboard_layout.js +125 -0
  145. package/dist/components/dashboards/dashboard_layout/grid_layout/grid_layout.js +326 -0
  146. package/dist/components/dashboards/dashboard_layout/validators.js +14 -0
  147. package/dist/components/dashboards/dashboard_panel/dashboard_panel.js +236 -0
  148. package/dist/components/dashboards/mock_data.js +49 -0
  149. package/dist/components/experimental/experiment_badge/constants.js +4 -0
  150. package/dist/components/experimental/experiment_badge/experiment_badge.js +102 -0
  151. package/dist/components/extended/multi_step_form_template/multi_step_form_template.js +87 -0
  152. package/dist/components/index.js +107 -0
  153. package/dist/components/mixins/button_mixin.js +11 -0
  154. package/dist/components/mixins/safe_link_mixin.js +30 -0
  155. package/dist/components/mixins/tooltip_mixin.js +21 -0
  156. package/dist/components/regions/dashboard_skeleton/dashboard_skeleton.js +53 -0
  157. package/dist/components/regions/empty_state/empty_state.js +181 -0
  158. package/dist/components/shared_components/clear_icon_button/clear_icon_button.js +64 -0
  159. package/dist/components/shared_components/clipboard_button/clipboard_button.js +100 -0
  160. package/dist/components/shared_components/close_button/close_button.js +55 -0
  161. package/dist/components/utilities/animated_number/animated_number.js +131 -0
  162. package/dist/components/utilities/friendly_wrap/friendly_wrap.js +75 -0
  163. package/dist/components/utilities/intersection_observer/intersection_observer.js +88 -0
  164. package/dist/components/utilities/intersperse/intersperse.js +104 -0
  165. package/dist/components/utilities/sprintf/sprintf.js +171 -0
  166. package/dist/components/utilities/truncate/constants.js +8 -0
  167. package/dist/components/utilities/truncate/truncate.js +154 -0
  168. package/dist/components/utilities/truncate_text/constants.js +7 -0
  169. package/dist/components/utilities/truncate_text/truncate_text.js +146 -0
  170. package/dist/config.js +53 -0
  171. package/dist/directives/hover_load/hover_load.js +45 -0
  172. package/dist/directives/index.js +8 -0
  173. package/dist/directives/modal.js +1 -0
  174. package/dist/directives/outside/outside.js +149 -0
  175. package/dist/directives/resize_observer/resize_observer.js +58 -0
  176. package/dist/directives/safe_html/constants.js +6 -0
  177. package/dist/directives/safe_html/safe_html.js +39 -0
  178. package/dist/directives/safe_link/mock_data.js +10 -0
  179. package/dist/directives/safe_link/safe_link.js +67 -0
  180. package/dist/directives/tooltip/container.js +7 -0
  181. package/dist/directives/tooltip/tooltip.js +18 -0
  182. package/dist/index.css +7 -0
  183. package/dist/index.css.map +1 -0
  184. package/dist/index.js +2 -0
  185. package/dist/tailwind.css +2 -0
  186. package/dist/tailwind.css.map +1 -0
  187. package/dist/tokens/build/js/tokens.dark.js +1410 -0
  188. package/dist/tokens/build/js/tokens.js +1410 -0
  189. package/dist/tokens/common_story_options.js +29 -0
  190. package/dist/tokens/tokens_story.js +76 -0
  191. package/dist/utils/breakpoints.js +20 -0
  192. package/dist/utils/charts/config.js +616 -0
  193. package/dist/utils/charts/constants.js +69 -0
  194. package/dist/utils/charts/mock_data.js +191 -0
  195. package/dist/utils/charts/story_config.js +24 -0
  196. package/dist/utils/charts/theme.js +200 -0
  197. package/dist/utils/charts/utils.js +54 -0
  198. package/dist/utils/constants.js +331 -0
  199. package/dist/utils/data_utils.js +19 -0
  200. package/dist/utils/datetime_utility.js +61 -0
  201. package/dist/utils/equality_utils.js +84 -0
  202. package/dist/utils/form_options_utils.js +46 -0
  203. package/dist/utils/i18n.js +65 -0
  204. package/dist/utils/is_slot_empty.js +34 -0
  205. package/dist/utils/number_utils.js +132 -0
  206. package/dist/utils/play_utils.js +11 -0
  207. package/dist/utils/set_utils.js +25 -0
  208. package/dist/utils/stories_constants.js +29 -0
  209. package/dist/utils/stories_utils.js +62 -0
  210. package/dist/utils/story_decorators/container.js +19 -0
  211. package/dist/utils/string_utils.js +69 -0
  212. package/dist/utils/svgs/svg_paths.js +7 -0
  213. package/dist/utils/test_utils.js +33 -0
  214. package/dist/utils/use_fake_date.js +29 -0
  215. package/dist/utils/use_mock_intersection_observer.js +105 -0
  216. package/dist/utils/utils.js +205 -0
  217. package/dist/utils/vue_utils.js +57 -0
  218. package/dist/utils.js +5 -0
  219. package/dist/vendor/bootstrap-vue/src/bv-config.js +8 -0
  220. package/dist/vendor/bootstrap-vue/src/components/button/button-close.js +81 -0
  221. package/dist/vendor/bootstrap-vue/src/components/button/button.js +204 -0
  222. package/dist/vendor/bootstrap-vue/src/components/button/index.js +2 -0
  223. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +41 -0
  224. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +52 -0
  225. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +75 -0
  226. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +52 -0
  227. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +85 -0
  228. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +97 -0
  229. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +60 -0
  230. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +270 -0
  231. package/dist/vendor/bootstrap-vue/src/components/dropdown/index.js +8 -0
  232. package/dist/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +53 -0
  233. package/dist/vendor/bootstrap-vue/src/components/form/form-text.js +55 -0
  234. package/dist/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +53 -0
  235. package/dist/vendor/bootstrap-vue/src/components/form/form.js +56 -0
  236. package/dist/vendor/bootstrap-vue/src/components/form/index.js +4 -0
  237. package/dist/vendor/bootstrap-vue/src/components/form-group/form-group.js +347 -0
  238. package/dist/vendor/bootstrap-vue/src/components/form-group/index.js +1 -0
  239. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +54 -0
  240. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +41 -0
  241. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select.js +143 -0
  242. package/dist/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +56 -0
  243. package/dist/vendor/bootstrap-vue/src/components/form-select/index.js +3 -0
  244. package/dist/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +217 -0
  245. package/dist/vendor/bootstrap-vue/src/components/form-textarea/index.js +1 -0
  246. package/dist/vendor/bootstrap-vue/src/components/layout/col.js +155 -0
  247. package/dist/vendor/bootstrap-vue/src/components/layout/form-row.js +34 -0
  248. package/dist/vendor/bootstrap-vue/src/components/layout/index.js +2 -0
  249. package/dist/vendor/bootstrap-vue/src/components/link/index.js +1 -0
  250. package/dist/vendor/bootstrap-vue/src/components/link/link.js +283 -0
  251. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.js +21 -0
  252. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/modal-manager.js +212 -0
  253. package/dist/vendor/bootstrap-vue/src/components/modal/index.js +1 -0
  254. package/dist/vendor/bootstrap-vue/src/components/modal/modal.js +1059 -0
  255. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover-template.js +55 -0
  256. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover.js +31 -0
  257. package/dist/vendor/bootstrap-vue/src/components/popover/index.js +1 -0
  258. package/dist/vendor/bootstrap-vue/src/components/popover/popover.js +49 -0
  259. package/dist/vendor/bootstrap-vue/src/components/table/helpers/constants.js +22 -0
  260. package/dist/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.js +64 -0
  261. package/dist/vendor/bootstrap-vue/src/components/table/helpers/filter-event.js +40 -0
  262. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-bottom-row.js +43 -0
  263. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +83 -0
  264. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +50 -0
  265. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-colgroup.js +32 -0
  266. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +82 -0
  267. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +292 -0
  268. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +154 -0
  269. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +44 -0
  270. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +191 -0
  271. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +213 -0
  272. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +274 -0
  273. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +39 -0
  274. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +186 -0
  275. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +338 -0
  276. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +243 -0
  277. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +50 -0
  278. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +218 -0
  279. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-top-row.js +42 -0
  280. package/dist/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.js +86 -0
  281. package/dist/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +31 -0
  282. package/dist/vendor/bootstrap-vue/src/components/table/helpers/stringify-record-values.js +11 -0
  283. package/dist/vendor/bootstrap-vue/src/components/table/helpers/text-selection-active.js +14 -0
  284. package/dist/vendor/bootstrap-vue/src/components/table/index.js +9 -0
  285. package/dist/vendor/bootstrap-vue/src/components/table/table-lite.js +51 -0
  286. package/dist/vendor/bootstrap-vue/src/components/table/table-simple.js +44 -0
  287. package/dist/vendor/bootstrap-vue/src/components/table/table.js +67 -0
  288. package/dist/vendor/bootstrap-vue/src/components/table/tbody.js +116 -0
  289. package/dist/vendor/bootstrap-vue/src/components/table/td.js +204 -0
  290. package/dist/vendor/bootstrap-vue/src/components/table/tfoot.js +96 -0
  291. package/dist/vendor/bootstrap-vue/src/components/table/th.js +26 -0
  292. package/dist/vendor/bootstrap-vue/src/components/table/thead.js +99 -0
  293. package/dist/vendor/bootstrap-vue/src/components/table/tr.js +121 -0
  294. package/dist/vendor/bootstrap-vue/src/components/tabs/index.js +2 -0
  295. package/dist/vendor/bootstrap-vue/src/components/tabs/tab.js +238 -0
  296. package/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js +690 -0
  297. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +251 -0
  298. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +118 -0
  299. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +932 -0
  300. package/dist/vendor/bootstrap-vue/src/components/tooltip/index.js +1 -0
  301. package/dist/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +337 -0
  302. package/dist/vendor/bootstrap-vue/src/components/transition/bv-transition.js +103 -0
  303. package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +205 -0
  304. package/dist/vendor/bootstrap-vue/src/constants/components.js +55 -0
  305. package/dist/vendor/bootstrap-vue/src/constants/config.js +11 -0
  306. package/dist/vendor/bootstrap-vue/src/constants/env.js +36 -0
  307. package/dist/vendor/bootstrap-vue/src/constants/events.js +56 -0
  308. package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +11 -0
  309. package/dist/vendor/bootstrap-vue/src/constants/popper.js +10 -0
  310. package/dist/vendor/bootstrap-vue/src/constants/props.js +24 -0
  311. package/dist/vendor/bootstrap-vue/src/constants/regex.js +35 -0
  312. package/dist/vendor/bootstrap-vue/src/constants/safe-types.js +15 -0
  313. package/dist/vendor/bootstrap-vue/src/constants/slots.js +36 -0
  314. package/dist/vendor/bootstrap-vue/src/directives/modal/index.js +1 -0
  315. package/dist/vendor/bootstrap-vue/src/directives/modal/modal.js +112 -0
  316. package/dist/vendor/bootstrap-vue/src/directives/tooltip/index.js +1 -0
  317. package/dist/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +267 -0
  318. package/dist/vendor/bootstrap-vue/src/directives/visible/index.js +1 -0
  319. package/dist/vendor/bootstrap-vue/src/directives/visible/visible.js +187 -0
  320. package/dist/vendor/bootstrap-vue/src/mixins/attrs.js +5 -0
  321. package/dist/vendor/bootstrap-vue/src/mixins/click-out.js +54 -0
  322. package/dist/vendor/bootstrap-vue/src/mixins/dropdown.js +470 -0
  323. package/dist/vendor/bootstrap-vue/src/mixins/focus-in.js +46 -0
  324. package/dist/vendor/bootstrap-vue/src/mixins/form-control.js +73 -0
  325. package/dist/vendor/bootstrap-vue/src/mixins/form-custom.js +26 -0
  326. package/dist/vendor/bootstrap-vue/src/mixins/form-options.js +91 -0
  327. package/dist/vendor/bootstrap-vue/src/mixins/form-selection.js +62 -0
  328. package/dist/vendor/bootstrap-vue/src/mixins/form-size.js +26 -0
  329. package/dist/vendor/bootstrap-vue/src/mixins/form-state.js +50 -0
  330. package/dist/vendor/bootstrap-vue/src/mixins/form-text.js +293 -0
  331. package/dist/vendor/bootstrap-vue/src/mixins/form-validity.js +50 -0
  332. package/dist/vendor/bootstrap-vue/src/mixins/has-listener.js +29 -0
  333. package/dist/vendor/bootstrap-vue/src/mixins/id.js +57 -0
  334. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-document.js +62 -0
  335. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-root.js +120 -0
  336. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-window.js +62 -0
  337. package/dist/vendor/bootstrap-vue/src/mixins/listeners.js +25 -0
  338. package/dist/vendor/bootstrap-vue/src/mixins/model.js +10 -0
  339. package/dist/vendor/bootstrap-vue/src/mixins/normalize-slot.js +30 -0
  340. package/dist/vendor/bootstrap-vue/src/mixins/scoped-style.js +18 -0
  341. package/dist/vendor/bootstrap-vue/src/mixins/use-parent.js +14 -0
  342. package/dist/vendor/bootstrap-vue/src/utils/array.js +27 -0
  343. package/dist/vendor/bootstrap-vue/src/utils/bv-event.class.js +60 -0
  344. package/dist/vendor/bootstrap-vue/src/utils/cache.js +60 -0
  345. package/dist/vendor/bootstrap-vue/src/utils/clone-deep.js +18 -0
  346. package/dist/vendor/bootstrap-vue/src/utils/config-set.js +86 -0
  347. package/dist/vendor/bootstrap-vue/src/utils/config.js +71 -0
  348. package/dist/vendor/bootstrap-vue/src/utils/create-new-child-component.js +133 -0
  349. package/dist/vendor/bootstrap-vue/src/utils/css-escape.js +70 -0
  350. package/dist/vendor/bootstrap-vue/src/utils/dom.js +298 -0
  351. package/dist/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +28 -0
  352. package/dist/vendor/bootstrap-vue/src/utils/env.js +16 -0
  353. package/dist/vendor/bootstrap-vue/src/utils/events.js +78 -0
  354. package/dist/vendor/bootstrap-vue/src/utils/get-event-root.js +5 -0
  355. package/dist/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +3 -0
  356. package/dist/vendor/bootstrap-vue/src/utils/get-scope-id.js +9 -0
  357. package/dist/vendor/bootstrap-vue/src/utils/get.js +63 -0
  358. package/dist/vendor/bootstrap-vue/src/utils/html.js +16 -0
  359. package/dist/vendor/bootstrap-vue/src/utils/identity.js +3 -0
  360. package/dist/vendor/bootstrap-vue/src/utils/inspect.js +35 -0
  361. package/dist/vendor/bootstrap-vue/src/utils/locale.js +18 -0
  362. package/dist/vendor/bootstrap-vue/src/utils/loose-equal.js +59 -0
  363. package/dist/vendor/bootstrap-vue/src/utils/loose-index-of.js +13 -0
  364. package/dist/vendor/bootstrap-vue/src/utils/math.js +9 -0
  365. package/dist/vendor/bootstrap-vue/src/utils/memoize.js +14 -0
  366. package/dist/vendor/bootstrap-vue/src/utils/model.js +33 -0
  367. package/dist/vendor/bootstrap-vue/src/utils/noop.js +3 -0
  368. package/dist/vendor/bootstrap-vue/src/utils/normalize-slot.js +51 -0
  369. package/dist/vendor/bootstrap-vue/src/utils/number.js +23 -0
  370. package/dist/vendor/bootstrap-vue/src/utils/object.js +72 -0
  371. package/dist/vendor/bootstrap-vue/src/utils/observe-dom.js +76 -0
  372. package/dist/vendor/bootstrap-vue/src/utils/on-instance-destroy.js +22 -0
  373. package/dist/vendor/bootstrap-vue/src/utils/plugins.js +124 -0
  374. package/dist/vendor/bootstrap-vue/src/utils/props.js +67 -0
  375. package/dist/vendor/bootstrap-vue/src/utils/router.js +150 -0
  376. package/dist/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +14 -0
  377. package/dist/vendor/bootstrap-vue/src/utils/stable-sort.js +28 -0
  378. package/dist/vendor/bootstrap-vue/src/utils/string.js +47 -0
  379. package/dist/vendor/bootstrap-vue/src/utils/stringify-object-values.js +31 -0
  380. package/dist/vendor/bootstrap-vue/src/utils/warn.js +45 -0
  381. package/dist/vendor/bootstrap-vue/src/vue.js +55 -0
  382. package/package.json +6 -5
  383. package/src/components/base/link/link.vue +5 -8
  384. package/src/utils/constants.js +0 -3
  385. package/src/utils/vue_utils.js +56 -0
  386. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +2 -2
  387. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +2 -2
  388. package/src/vendor/bootstrap-vue/src/components/layout/col.js +2 -2
  389. package/src/vendor/bootstrap-vue/src/components/modal/modal.js +219 -52
  390. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +30 -11
  391. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +3 -3
  392. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +1 -2
  393. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +4 -4
  394. package/src/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +2 -3
  395. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +2 -2
  396. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +8 -9
  397. package/src/vendor/bootstrap-vue/src/constants/config.js +2 -2
  398. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +1 -1
  399. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.js +1 -2
  400. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.js +1 -2
  401. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.js +1 -2
  402. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -1
  403. package/src/vendor/bootstrap-vue/src/utils/locale.js +1 -2
@@ -0,0 +1,5 @@
1
+ const FIXED_WIDTH_CLASS = '!gl-w-31';
2
+ const DEFAULT_OFFSET = 8;
3
+ const ARROW_X_MINIMUM = 24;
4
+
5
+ export { ARROW_X_MINIMUM, DEFAULT_OFFSET, FIXED_WIDTH_CLASS };
@@ -0,0 +1,32 @@
1
+ import { MountingPortal } from 'portal-vue';
2
+ import { POSITION_ABSOLUTE, POSITION_FIXED } from '../constants';
3
+
4
+ /* eslint-disable import/no-default-export */
5
+ var dropdown_container = {
6
+ props: {
7
+ /**
8
+ * Strategy to be applied by computePosition. If this is set to fixed, the dropdown's position
9
+ * needs to be set to fixed in CSS as well.
10
+ * https://floating-ui.com/docs/computePosition#strategy
11
+ */
12
+ positioningStrategy: {
13
+ type: String,
14
+ required: false,
15
+ default: POSITION_ABSOLUTE,
16
+ validator: strategy => [POSITION_ABSOLUTE, POSITION_FIXED].includes(strategy)
17
+ }
18
+ },
19
+ render(createElement) {
20
+ if (this.positioningStrategy === POSITION_FIXED) {
21
+ return createElement(MountingPortal, {
22
+ props: {
23
+ mountTo: 'body',
24
+ append: true
25
+ }
26
+ }, [this.$scopedSlots.default()]);
27
+ }
28
+ return this.$scopedSlots.default();
29
+ }
30
+ };
31
+
32
+ export { dropdown_container as default };
@@ -0,0 +1,24 @@
1
+ // base dropdown events
2
+ const GL_DROPDOWN_SHOWN = 'shown';
3
+ const GL_DROPDOWN_HIDDEN = 'hidden';
4
+ const GL_DROPDOWN_BEFORE_CLOSE = 'beforeClose';
5
+ const GL_DROPDOWN_FOCUS_CONTENT = 'focusContent';
6
+
7
+ // KeyboardEvent.code values
8
+ const ARROW_DOWN = 'ArrowDown';
9
+ const ARROW_UP = 'ArrowUp';
10
+ const END = 'End';
11
+ const ENTER = 'Enter';
12
+ const HOME = 'Home';
13
+ const SPACE = 'Space';
14
+
15
+ // KeyboardEvent.keyCode values
16
+ const KEY_CODE_ESCAPE = 27;
17
+
18
+ // Positioning strategies
19
+ // https://floating-ui.com/docs/computePosition#strategy
20
+ const POSITION_ABSOLUTE = 'absolute';
21
+ const POSITION_FIXED = 'fixed';
22
+ const GL_DROPDOWN_CONTENTS_CLASS = 'gl-new-dropdown-contents';
23
+
24
+ export { ARROW_DOWN, ARROW_UP, END, ENTER, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_FOCUS_CONTENT, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_SHOWN, HOME, KEY_CODE_ESCAPE, POSITION_ABSOLUTE, POSITION_FIXED, SPACE };
@@ -0,0 +1,8 @@
1
+ const DISCLOSURE_DROPDOWN_ITEM_NAME = 'GlDisclosureDropdownItem';
2
+ const DISCLOSURE_DROPDOWN_GROUP_NAME = 'GlDisclosureDropdownGroup';
3
+ const DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS = {
4
+ top: 'top',
5
+ bottom: 'bottom'
6
+ };
7
+
8
+ export { DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS, DISCLOSURE_DROPDOWN_GROUP_NAME, DISCLOSURE_DROPDOWN_ITEM_NAME };
@@ -0,0 +1,400 @@
1
+ import { uniqueId, clamp } from 'lodash-es';
2
+ import { logWarning, stopEvent, filterVisible } from '../../../../utils/utils';
3
+ import { GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_FOCUS_CONTENT, POSITION_ABSOLUTE, POSITION_FIXED, HOME, END, ARROW_UP, ARROW_DOWN, ENTER, SPACE, GL_DROPDOWN_CONTENTS_CLASS } from '../constants';
4
+ import { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements } from '../../../../utils/constants';
5
+ import GlBaseDropdown from '../base_dropdown/base_dropdown';
6
+ import GlDisclosureDropdownItem, { ITEM_CLASS } from './disclosure_dropdown_item';
7
+ import GlDisclosureDropdownGroup from './disclosure_dropdown_group';
8
+ import { itemsValidator, hasOnlyListItems, doSomeItemsHaveIcon, isItem } from './utils';
9
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
10
+
11
+ const ITEM_SELECTOR = `.${ITEM_CLASS}`;
12
+ var script = {
13
+ name: 'GlDisclosureDropdown',
14
+ events: {
15
+ GL_DROPDOWN_SHOWN,
16
+ GL_DROPDOWN_HIDDEN,
17
+ GL_DROPDOWN_BEFORE_CLOSE,
18
+ GL_DROPDOWN_FOCUS_CONTENT
19
+ },
20
+ components: {
21
+ GlBaseDropdown,
22
+ GlDisclosureDropdownItem,
23
+ GlDisclosureDropdownGroup
24
+ },
25
+ props: {
26
+ /**
27
+ * Items to display in the dropdown
28
+ */
29
+ items: {
30
+ type: Array,
31
+ required: false,
32
+ default: () => [],
33
+ validator: itemsValidator
34
+ },
35
+ /**
36
+ * Toggle button text
37
+ */
38
+ toggleText: {
39
+ type: String,
40
+ required: false,
41
+ default: ''
42
+ },
43
+ /**
44
+ * Toggle text to be read by screen readers only
45
+ */
46
+ textSrOnly: {
47
+ type: Boolean,
48
+ required: false,
49
+ default: false
50
+ },
51
+ /**
52
+ * Styling option - dropdown's toggle category
53
+ */
54
+ category: {
55
+ type: String,
56
+ required: false,
57
+ default: buttonCategoryOptions.primary,
58
+ validator: value => value in buttonCategoryOptions
59
+ },
60
+ /**
61
+ * Styling option - dropdown's toggle variant
62
+ */
63
+ variant: {
64
+ type: String,
65
+ required: false,
66
+ default: dropdownVariantOptions.default,
67
+ validator: value => value in dropdownVariantOptions
68
+ },
69
+ /**
70
+ * The size of the dropdown toggle
71
+ */
72
+ size: {
73
+ type: String,
74
+ required: false,
75
+ default: 'medium',
76
+ validator: value => value in buttonSizeOptions
77
+ },
78
+ /**
79
+ * Icon name that will be rendered in the toggle button
80
+ */
81
+ icon: {
82
+ type: String,
83
+ required: false,
84
+ default: ''
85
+ },
86
+ /**
87
+ * Set to "true" to disable the dropdown
88
+ */
89
+ disabled: {
90
+ type: Boolean,
91
+ required: false,
92
+ default: false
93
+ },
94
+ /**
95
+ * Set to "true" when dropdown content (items) is loading
96
+ * It will render a small loader in the dropdown toggle and make it disabled
97
+ */
98
+ loading: {
99
+ type: Boolean,
100
+ required: false,
101
+ default: false
102
+ },
103
+ /**
104
+ * Custom toggle id.
105
+ * For instance, it can be referenced by tooltip or popover
106
+ */
107
+ toggleId: {
108
+ type: String,
109
+ required: false,
110
+ default: () => uniqueId('dropdown-toggle-btn-')
111
+ },
112
+ /**
113
+ * Additional CSS classes to customize toggle appearance
114
+ */
115
+ toggleClass: {
116
+ type: [String, Array, Object],
117
+ required: false,
118
+ default: null
119
+ },
120
+ /**
121
+ * Set to "true" to hide the caret
122
+ */
123
+ noCaret: {
124
+ type: Boolean,
125
+ required: false,
126
+ default: false
127
+ },
128
+ /**
129
+ * Align disclosure dropdown with respect to the toggle button
130
+ */
131
+ placement: {
132
+ type: String,
133
+ required: false,
134
+ default: 'bottom-start',
135
+ validator: value => Object.keys(dropdownPlacements).includes(value)
136
+ },
137
+ /**
138
+ * The `aria-labelledby` attribute value for the toggle button
139
+ * Provide the string of ids seperated by space
140
+ */
141
+ toggleAriaLabelledBy: {
142
+ type: String,
143
+ required: false,
144
+ default: null
145
+ },
146
+ /**
147
+ * The `aria-label` attribute value for the toggle button.
148
+ * Use when there is no visible label element to reference with `toggleAriaLabelledBy`.
149
+ * Do not provide both `toggleAriaLabel` and `toggleAriaLabelledBy`.
150
+ * When both are present, `toggleAriaLabelledBy` takes precedence per the WAI-ARIA spec.
151
+ */
152
+ toggleAriaLabel: {
153
+ type: String,
154
+ required: false,
155
+ default: null
156
+ },
157
+ /**
158
+ * The `aria-labelledby` attribute value for the list of options
159
+ * Provide the string of ids seperated by space
160
+ */
161
+ listAriaLabelledBy: {
162
+ type: String,
163
+ required: false,
164
+ default: null
165
+ },
166
+ /**
167
+ * Render the toggle button as a block element
168
+ */
169
+ block: {
170
+ type: Boolean,
171
+ required: false,
172
+ default: false
173
+ },
174
+ /**
175
+ * Custom offset to be applied to Floating UI's offset middleware.
176
+ * https://floating-ui.com/docs/offset
177
+ */
178
+ dropdownOffset: {
179
+ type: [Number, Object],
180
+ required: false,
181
+ default: undefined
182
+ },
183
+ /**
184
+ * Lets the dropdown extend to match its content's width, up to a maximum width
185
+ * defined by the `$gl-new-dropdown-max-width` variable.
186
+ */
187
+ fluidWidth: {
188
+ type: Boolean,
189
+ required: false,
190
+ default: false
191
+ },
192
+ /**
193
+ * Close the dropdown on item click (action)
194
+ */
195
+ autoClose: {
196
+ type: Boolean,
197
+ required: false,
198
+ default: true
199
+ },
200
+ /**
201
+ * Strategy to be applied by computePosition. If the dropdown's container is too short for it to
202
+ * fit in, setting this to fixed will let it position itself above its container.
203
+ * https://floating-ui.com/docs/computePosition#strategy
204
+ */
205
+ positioningStrategy: {
206
+ type: String,
207
+ required: false,
208
+ default: POSITION_ABSOLUTE,
209
+ validator: strategy => [POSITION_ABSOLUTE, POSITION_FIXED].includes(strategy)
210
+ },
211
+ /**
212
+ * Opens dropdown on render
213
+ */
214
+ startOpened: {
215
+ type: Boolean,
216
+ required: false,
217
+ default: false
218
+ }
219
+ },
220
+ data() {
221
+ return {
222
+ disclosureId: uniqueId('disclosure-'),
223
+ nextFocusedItemIndex: null
224
+ };
225
+ },
226
+ computed: {
227
+ disclosureTag() {
228
+ var _this$items;
229
+ if ((_this$items = this.items) !== null && _this$items !== void 0 && _this$items.length ||
230
+ // eslint-disable-next-line @gitlab/vue-prefer-dollar-scopedslots
231
+ hasOnlyListItems(this.$scopedSlots.default || this.$slots.default)) {
232
+ return 'ul';
233
+ }
234
+ return 'div';
235
+ },
236
+ hasCustomToggle() {
237
+ return Boolean(this.$scopedSlots.toggle);
238
+ },
239
+ siblingsHaveIcons() {
240
+ return doSomeItemsHaveIcon(this.items);
241
+ }
242
+ },
243
+ mounted() {
244
+ if (this.toggleAriaLabel && this.toggleAriaLabelledBy) {
245
+ logWarning('Do not provide both `toggleAriaLabel` and `toggleAriaLabelledBy`. ' + 'When both are present, `toggleAriaLabelledBy` takes precedence and `toggleAriaLabel` is ignored. ' + 'See https://design.gitlab.com/components/dropdown-disclosure/#accessibility', {
246
+ name: 'GlDisclosureDropdown'
247
+ });
248
+ }
249
+ if (this.startOpened) {
250
+ this.open();
251
+ }
252
+ },
253
+ methods: {
254
+ doSomeItemsHaveIcon,
255
+ open() {
256
+ this.$refs.baseDropdown.open();
257
+ },
258
+ close() {
259
+ this.$refs.baseDropdown.close();
260
+ },
261
+ onShow() {
262
+ /**
263
+ * Emitted when dropdown is shown
264
+ *
265
+ * @event shown
266
+ */
267
+ this.$emit(GL_DROPDOWN_SHOWN);
268
+ },
269
+ onBeforeClose(event) {
270
+ /**
271
+ * Emitted when dropdown is about to be closed
272
+ *
273
+ * @event beforeClose
274
+ */
275
+ this.$emit(GL_DROPDOWN_BEFORE_CLOSE, event);
276
+ },
277
+ onHide() {
278
+ /**
279
+ * Emitted when dropdown is hidden
280
+ *
281
+ * @event hidden
282
+ */
283
+ this.$emit(GL_DROPDOWN_HIDDEN);
284
+ this.nextFocusedItemIndex = null;
285
+ },
286
+ onKeydown(event) {
287
+ const {
288
+ code
289
+ } = event;
290
+ const elements = this.getFocusableListItemElements();
291
+ if (elements.length < 1) return;
292
+ let stop = true;
293
+ if (code === HOME) {
294
+ this.focusItem(0, elements);
295
+ } else if (code === END) {
296
+ this.focusItem(elements.length - 1, elements);
297
+ } else if (code === ARROW_UP) {
298
+ this.focusNextItem(event, elements, -1);
299
+ } else if (code === ARROW_DOWN) {
300
+ this.focusNextItem(event, elements, 1);
301
+ } else if (code === ENTER || code === SPACE) {
302
+ this.handleAutoClose(event);
303
+ } else {
304
+ stop = false;
305
+ }
306
+ if (stop) {
307
+ stopEvent(event);
308
+ }
309
+ },
310
+ getFocusableListItemElements() {
311
+ var _this$$refs$content;
312
+ const items = (_this$$refs$content = this.$refs.content) === null || _this$$refs$content === void 0 ? void 0 : _this$$refs$content.querySelectorAll(ITEM_SELECTOR);
313
+ return filterVisible(Array.from(items || []));
314
+ },
315
+ focusNextItem(event, elements, offset) {
316
+ const {
317
+ target
318
+ } = event;
319
+ const currentIndex = elements.indexOf(target);
320
+ const nextIndex = clamp(currentIndex + offset, 0, elements.length - 1);
321
+ this.focusItem(nextIndex, elements);
322
+ },
323
+ focusItem(index, elements) {
324
+ var _elements$index;
325
+ this.nextFocusedItemIndex = index;
326
+ (_elements$index = elements[index]) === null || _elements$index === void 0 ? void 0 : _elements$index.focus();
327
+ },
328
+ closeAndFocus() {
329
+ this.$refs.baseDropdown.closeAndFocus();
330
+ },
331
+ handleAction(action) {
332
+ // See https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/4376 for
333
+ // detailed explanation why we need requestAnimationFrame
334
+ window.requestAnimationFrame(() => {
335
+ /**
336
+ * Emitted when one of disclosure dropdown items is clicked
337
+ *
338
+ * @event action
339
+ */
340
+ this.$emit('action', action);
341
+ });
342
+ },
343
+ handleAutoClose(e) {
344
+ var _this$$refs$baseDropd, _this$$refs$baseDropd2;
345
+ if (this.autoClose && e.target.closest(ITEM_SELECTOR) && // The optional chaining here is to accommodate specs that use shallow mounting.
346
+ // Ideally, those specs would either:
347
+ // - stub out the `BaseDropdown` component to include a stub `containsElement` method, or
348
+ // - use a full mount.
349
+ //
350
+ // Unfortunately, GitLab has many specs which do neither of these. So the simpler thing to do
351
+ // is to optionally chain the method call here.
352
+ (_this$$refs$baseDropd = (_this$$refs$baseDropd2 = this.$refs.baseDropdown).containsElement) !== null && _this$$refs$baseDropd !== void 0 && _this$$refs$baseDropd.call(_this$$refs$baseDropd2, e.target)) {
353
+ this.closeAndFocus();
354
+ }
355
+ },
356
+ uniqueItemId() {
357
+ return uniqueId(`disclosure-item-`);
358
+ },
359
+ isItem
360
+ },
361
+ GL_DROPDOWN_CONTENTS_CLASS
362
+ };
363
+
364
+ /* script */
365
+ const __vue_script__ = script;
366
+
367
+ /* template */
368
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-base-dropdown',{ref:"baseDropdown",staticClass:"gl-disclosure-dropdown",attrs:{"aria-labelledby":_vm.toggleAriaLabelledBy,"aria-label":_vm.toggleAriaLabelledBy ? undefined : _vm.toggleAriaLabel,"arrow-element":_vm.$refs.disclosureArrow,"toggle-id":_vm.toggleId,"toggle-text":_vm.toggleText,"toggle-class":_vm.toggleClass,"text-sr-only":_vm.textSrOnly,"category":_vm.category,"variant":_vm.variant,"size":_vm.size,"icon":_vm.icon,"disabled":_vm.disabled,"loading":_vm.loading,"no-caret":_vm.noCaret,"placement":_vm.placement,"block":_vm.block,"offset":_vm.dropdownOffset,"fluid-width":_vm.fluidWidth,"positioning-strategy":_vm.positioningStrategy,"is-disclosure":""},on:_vm._d({},[_vm.$options.events.GL_DROPDOWN_SHOWN,_vm.onShow,_vm.$options.events.GL_DROPDOWN_HIDDEN,_vm.onHide,_vm.$options.events.GL_DROPDOWN_BEFORE_CLOSE,_vm.onBeforeClose,_vm.$options.events.GL_DROPDOWN_FOCUS_CONTENT,_vm.onKeydown]),scopedSlots:_vm._u([(_vm.hasCustomToggle)?{key:"toggle",fn:function(slotProps){return [_vm._t("toggle",null,null,slotProps)]}}:null],null,true)},[_vm._v(" "),_vm._t("header"),_vm._v(" "),_c(_vm.disclosureTag,{ref:"content",tag:"component",class:_vm.$options.GL_DROPDOWN_CONTENTS_CLASS,attrs:{"id":_vm.disclosureId,"aria-labelledby":_vm.listAriaLabelledBy || _vm.toggleId,"data-testid":"disclosure-content","tabindex":"-1"},on:{"keydown":_vm.onKeydown,"click":_vm.handleAutoClose}},[_vm._t("default",function(){return [_vm._l((_vm.items),function(item,index){return [(_vm.isItem(item))?[_c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"siblings-have-icons":_vm.siblingsHaveIcons,"item":item},on:{"action":_vm.handleAction},scopedSlots:_vm._u([('list-item' in _vm.$scopedSlots)?{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":item})]},proxy:true}:null],null,true)})]:[_c('gl-disclosure-dropdown-group',{key:item.name,attrs:{"bordered":index !== 0,"group":item},on:{"action":_vm.handleAction},scopedSlots:_vm._u([(_vm.$scopedSlots['group-label'])?{key:"group-label",fn:function(){return [_vm._t("group-label",null,{"group":item})]},proxy:true}:null,(_vm.$scopedSlots['list-item'])?{key:"default",fn:function(){return _vm._l((item.items),function(groupItem){return _c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"siblings-have-icons":_vm.doSomeItemsHaveIcon(item.items),"item":groupItem},on:{"action":_vm.handleAction},scopedSlots:_vm._u([{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":groupItem})]},proxy:true}],null,true)})})},proxy:true}:null],null,true)})]]})]})],2),_vm._v(" "),_vm._t("footer")],2)};
369
+ var __vue_staticRenderFns__ = [];
370
+
371
+ /* style */
372
+ const __vue_inject_styles__ = undefined;
373
+ /* scoped */
374
+ const __vue_scope_id__ = undefined;
375
+ /* module identifier */
376
+ const __vue_module_identifier__ = undefined;
377
+ /* functional template */
378
+ const __vue_is_functional_template__ = false;
379
+ /* style inject */
380
+
381
+ /* style inject SSR */
382
+
383
+ /* style inject shadow dom */
384
+
385
+
386
+
387
+ const __vue_component__ = /*#__PURE__*/__vue_normalize__(
388
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
389
+ __vue_inject_styles__,
390
+ __vue_script__,
391
+ __vue_scope_id__,
392
+ __vue_is_functional_template__,
393
+ __vue_module_identifier__,
394
+ false,
395
+ undefined,
396
+ undefined,
397
+ undefined
398
+ );
399
+
400
+ export { ITEM_SELECTOR, __vue_component__ as default };
@@ -0,0 +1,112 @@
1
+ import { uniqueId } from 'lodash-es';
2
+ import GlDisclosureDropdownItem from './disclosure_dropdown_item';
3
+ import { isGroup, doSomeItemsHaveIcon } from './utils';
4
+ import { DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS, DISCLOSURE_DROPDOWN_GROUP_NAME } from './constants';
5
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
6
+
7
+ const BORDER_CLASSES = {
8
+ [DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS.top]: 'gl-border-t gl-border-t-dropdown-divider gl-pt-2 gl-mt-2',
9
+ [DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS.bottom]: 'gl-border-b gl-border-b-dropdown-divider gl-pb-2 gl-mb-2'
10
+ };
11
+ var script = {
12
+ name: DISCLOSURE_DROPDOWN_GROUP_NAME,
13
+ components: {
14
+ GlDisclosureDropdownItem
15
+ },
16
+ props: {
17
+ /**
18
+ * Group of items
19
+ */
20
+ group: {
21
+ type: Object,
22
+ required: false,
23
+ default: null,
24
+ validator: isGroup
25
+ },
26
+ /**
27
+ * If 'true', will set top border for the group
28
+ * to separate from other groups. You can control
29
+ * the border position using the `borderPosition`
30
+ * property.
31
+ */
32
+ bordered: {
33
+ type: Boolean,
34
+ required: false,
35
+ default: false
36
+ },
37
+ /**
38
+ * Controls the position of the group's border. Valid
39
+ * values are 'top' and 'bottom'.
40
+ */
41
+ borderPosition: {
42
+ type: String,
43
+ required: false,
44
+ default: DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS.top,
45
+ validator: value => Object.keys(DISCLOSURE_DROPDOWN_GROUP_BORDER_POSITIONS).includes(value)
46
+ }
47
+ },
48
+ computed: {
49
+ borderClass() {
50
+ return this.bordered ? BORDER_CLASSES[this.borderPosition] : null;
51
+ },
52
+ showHeader() {
53
+ var _this$group;
54
+ return this.$scopedSlots['group-label'] || ((_this$group = this.group) === null || _this$group === void 0 ? void 0 : _this$group.name);
55
+ },
56
+ groupLabeledBy() {
57
+ return this.showHeader ? this.nameId : null;
58
+ },
59
+ siblingsHaveIcons() {
60
+ return doSomeItemsHaveIcon(this.group.items);
61
+ }
62
+ },
63
+ created() {
64
+ this.nameId = uniqueId('gl-disclosure-dropdown-group-');
65
+ },
66
+ methods: {
67
+ handleAction(action) {
68
+ this.$emit('action', action);
69
+ },
70
+ uniqueItemId() {
71
+ return uniqueId(`disclosure-item-`);
72
+ }
73
+ }
74
+ };
75
+
76
+ /* script */
77
+ const __vue_script__ = script;
78
+
79
+ /* template */
80
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',{class:_vm.borderClass},[(_vm.showHeader)?_c('div',{staticClass:"gl-py-2 gl-pl-4 gl-text-sm gl-font-bold gl-text-strong",attrs:{"id":_vm.nameId}},[_vm._t("group-label",function(){return [_vm._v(_vm._s(_vm.group.name))]})],2):_vm._e(),_vm._v(" "),_c('ul',{staticClass:"gl-new-dropdown-item-group gl-mb-0 gl-list-none gl-pl-0",attrs:{"aria-labelledby":_vm.groupLabeledBy}},[_vm._t("default",function(){return _vm._l((_vm.group.items),function(item){return _c('gl-disclosure-dropdown-item',{key:_vm.uniqueItemId(),attrs:{"siblings-have-icons":_vm.siblingsHaveIcons,"item":item},on:{"action":_vm.handleAction},scopedSlots:_vm._u([{key:"list-item",fn:function(){return [_vm._t("list-item",null,{"item":item})]},proxy:true}],null,true)})})})],2)])};
81
+ var __vue_staticRenderFns__ = [];
82
+
83
+ /* style */
84
+ const __vue_inject_styles__ = undefined;
85
+ /* scoped */
86
+ const __vue_scope_id__ = undefined;
87
+ /* module identifier */
88
+ const __vue_module_identifier__ = undefined;
89
+ /* functional template */
90
+ const __vue_is_functional_template__ = false;
91
+ /* style inject */
92
+
93
+ /* style inject SSR */
94
+
95
+ /* style inject shadow dom */
96
+
97
+
98
+
99
+ const __vue_component__ = /*#__PURE__*/__vue_normalize__(
100
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
101
+ __vue_inject_styles__,
102
+ __vue_script__,
103
+ __vue_scope_id__,
104
+ __vue_is_functional_template__,
105
+ __vue_module_identifier__,
106
+ false,
107
+ undefined,
108
+ undefined,
109
+ undefined
110
+ );
111
+
112
+ export { BORDER_CLASSES, __vue_component__ as default };