@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,397 @@
1
+ import { isFunction, debounce, range } from 'lodash-es';
2
+ import { breakpoints, GlBreakpointInstance } from '../../../utils/breakpoints';
3
+ import { alignOptions, resizeDebounceTime } from '../../../utils/constants';
4
+ import { translate, sprintf } from '../../../utils/i18n';
5
+ import GlIcon from '../icon/icon';
6
+ import GlLink from '../link/link';
7
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
8
+
9
+ const pageRange = (from, to) => range(from, to + 1, 1);
10
+ var script = {
11
+ name: 'GlPagination',
12
+ components: {
13
+ GlLink,
14
+ GlIcon
15
+ },
16
+ model: {
17
+ prop: 'value',
18
+ event: 'input'
19
+ },
20
+ props: {
21
+ /**
22
+ * The current page number. Must be greater than 0.
23
+ */
24
+ value: {
25
+ type: Number,
26
+ required: false,
27
+ default: 1,
28
+ validator: x => x > 0
29
+ },
30
+ /**
31
+ * Number of items per page
32
+ */
33
+ perPage: {
34
+ type: Number,
35
+ required: false,
36
+ default: 20,
37
+ validator: x => x > 0
38
+ },
39
+ /**
40
+ * Total number of items
41
+ */
42
+ totalItems: {
43
+ type: Number,
44
+ required: false,
45
+ default: 0
46
+ },
47
+ /**
48
+ * The object must contain the xs, sm, md and default keys
49
+ */
50
+ limits: {
51
+ type: Object,
52
+ required: false,
53
+ default: () => ({
54
+ xs: 0,
55
+ sm: 3,
56
+ md: 9,
57
+ default: 9
58
+ }),
59
+ validator: value => {
60
+ const missingSizes = Object.keys(breakpoints).filter(size => !value[size]).length;
61
+ return missingSizes === 0 ? true : value.default;
62
+ }
63
+ },
64
+ /**
65
+ * A function that receives the page number and that returns a string representing the page URL
66
+ */
67
+ linkGen: {
68
+ type: Function,
69
+ required: false,
70
+ default: null
71
+ },
72
+ /**
73
+ * When using the compact pagination, use this prop to pass the previous page number
74
+ */
75
+ prevPage: {
76
+ type: Number,
77
+ required: false,
78
+ default: null
79
+ },
80
+ /**
81
+ * When using the compact pagination, use this prop to pass the next page number
82
+ */
83
+ nextPage: {
84
+ type: Number,
85
+ required: false,
86
+ default: null
87
+ },
88
+ /**
89
+ * Text for the ellipsis (overridden by "ellipsis-left" and "ellipsis-right" slots)
90
+ */
91
+ ellipsisText: {
92
+ type: String,
93
+ required: false,
94
+ default: '…'
95
+ },
96
+ /**
97
+ * aria-label for the nav
98
+ */
99
+ labelNav: {
100
+ type: String,
101
+ required: false,
102
+ default: translate('GlPagination.nav', 'Pagination')
103
+ },
104
+ /**
105
+ * aria-label for the first page item
106
+ */
107
+ labelFirstPage: {
108
+ type: String,
109
+ required: false,
110
+ default: translate('GlPagination.labelFirstPage', 'Go to first page')
111
+ },
112
+ /**
113
+ * aria-label for the previous page item
114
+ */
115
+ labelPrevPage: {
116
+ type: String,
117
+ required: false,
118
+ default: translate('GlPagination.labelPrevPage', 'Go to previous page')
119
+ },
120
+ /**
121
+ * aria-label for the next page item
122
+ */
123
+ labelNextPage: {
124
+ type: String,
125
+ required: false,
126
+ default: translate('GlPagination.labelNextPage', 'Go to next page')
127
+ },
128
+ /**
129
+ * aria-label for the last page item
130
+ */
131
+ labelLastPage: {
132
+ type: String,
133
+ required: false,
134
+ default: translate('GlPagination.labelLastPage', 'Go to last page')
135
+ },
136
+ /**
137
+ * aria-label getter for numbered page items, defaults to "Go to page <page_number>"
138
+ */
139
+ labelPage: {
140
+ // note: `Function` support is for legacy reasons
141
+ type: [Function, String],
142
+ required: false,
143
+ default: translate('GlPagination.labelPage', 'Go to page %{page}')
144
+ },
145
+ /**
146
+ * Controls the component\'s horizontal alignment, value should be one of "left", "center", "right" or "fill"
147
+ */
148
+ align: {
149
+ type: String,
150
+ required: false,
151
+ default: alignOptions.left,
152
+ validator: value => Object.keys(alignOptions).includes(value)
153
+ }
154
+ },
155
+ data() {
156
+ return {
157
+ breakpoint: GlBreakpointInstance.getBreakpointSize(),
158
+ // If total pages count is below or equal to minTotalPagesToCollapse, collapsing is disabled
159
+ minTotalPagesToCollapse: 4
160
+ };
161
+ },
162
+ computed: {
163
+ isVisible() {
164
+ return this.totalPages > 1 || this.isCompactPagination;
165
+ },
166
+ isLinkBased() {
167
+ return isFunction(this.linkGen);
168
+ },
169
+ paginationLimit() {
170
+ return typeof this.limits[this.breakpoint] !== 'undefined' ? this.limits[this.breakpoint] : this.limits.default;
171
+ },
172
+ maxAdjacentPages() {
173
+ return Math.max(Math.ceil((this.paginationLimit - 1) / 2), 0);
174
+ },
175
+ totalPages() {
176
+ return Math.ceil(this.totalItems / this.perPage);
177
+ },
178
+ isFillAlign() {
179
+ return this.align === alignOptions.fill;
180
+ },
181
+ wrapperClasses() {
182
+ const classes = [];
183
+ if (this.align === alignOptions.center) {
184
+ classes.push('gl-justify-center');
185
+ }
186
+ if (this.align === alignOptions.right) {
187
+ classes.push('gl-justify-end');
188
+ }
189
+ if (this.isFillAlign) {
190
+ classes.push('gl-text-center');
191
+ }
192
+ return classes;
193
+ },
194
+ shouldCollapseLeftSide() {
195
+ const diff = this.value - this.maxAdjacentPages;
196
+
197
+ // Magic 3: prevents collapsing a single page on the left side
198
+ return diff >= this.maxAdjacentPages && diff > 3 && this.totalPages > this.minTotalPagesToCollapse;
199
+ },
200
+ shouldCollapseRightSide() {
201
+ // Magic 2: prevents collapsing a single page on the right side
202
+ const diff = this.totalPages - 2 - this.value;
203
+ return diff > this.maxAdjacentPages && this.totalPages > this.minTotalPagesToCollapse;
204
+ },
205
+ visibleItems() {
206
+ let items = [];
207
+ if (!this.isCompactPagination) {
208
+ let firstPage = this.shouldCollapseLeftSide ? this.value - this.maxAdjacentPages : 1;
209
+ // If we're on last page, show at least one page to the left
210
+ firstPage = Math.min(firstPage, this.totalPages - 1);
211
+ let lastPage = this.shouldCollapseRightSide ? this.value + this.maxAdjacentPages : this.totalPages;
212
+ // If we're on first page, show at least one page to the right
213
+ lastPage = Math.max(lastPage, 2);
214
+
215
+ // Default numbered items
216
+ items = pageRange(firstPage, lastPage).map(page => this.getPageItem(page));
217
+ if (this.shouldCollapseLeftSide) {
218
+ items.splice(0, 0, this.getPageItem(1, this.labelFirstPage), this.getEllipsisItem('left'));
219
+ }
220
+ if (this.shouldCollapseRightSide) {
221
+ items.push(this.getEllipsisItem('right'), this.getPageItem(this.totalPages, this.labelLastPage));
222
+ }
223
+ }
224
+ return items;
225
+ },
226
+ isCompactPagination() {
227
+ return Boolean(!this.totalItems && (this.prevPage || this.nextPage));
228
+ },
229
+ prevPageIsDisabled() {
230
+ return this.pageIsDisabled(this.value - 1);
231
+ },
232
+ nextPageIsDisabled() {
233
+ return this.pageIsDisabled(this.value + 1);
234
+ },
235
+ prevPageAriaLabel() {
236
+ return this.prevPageIsDisabled ? false : this.labelPrevPage || this.labelForPage(this.value - 1);
237
+ },
238
+ nextPageAriaLabel() {
239
+ return this.nextPageIsDisabled ? false : this.labelNextPage || this.labelForPage(this.value + 1);
240
+ },
241
+ prevPageHref() {
242
+ if (this.prevPageIsDisabled) return false;
243
+ if (this.isLinkBased) return this.linkGen(this.value - 1);
244
+ return '#';
245
+ },
246
+ nextPageHref() {
247
+ if (this.nextPageIsDisabled) return false;
248
+ if (this.isLinkBased) return this.linkGen(this.value + 1);
249
+ return '#';
250
+ }
251
+ },
252
+ created() {
253
+ this.resizeDebounced = debounce(this.setBreakpoint, resizeDebounceTime);
254
+ window.addEventListener('resize', this.resizeDebounced);
255
+ },
256
+ beforeDestroy() {
257
+ window.removeEventListener('resize', this.resizeDebounced);
258
+ },
259
+ methods: {
260
+ labelForPage(page) {
261
+ if (isFunction(this.labelPage)) {
262
+ return this.labelPage(page);
263
+ }
264
+ return sprintf(this.labelPage, {
265
+ page
266
+ });
267
+ },
268
+ setBreakpoint() {
269
+ this.breakpoint = GlBreakpointInstance.getBreakpointSize();
270
+ },
271
+ pageIsDisabled(page) {
272
+ return page < 1 || this.isCompactPagination && page > this.value && !this.nextPage || !this.isCompactPagination && page > this.totalPages;
273
+ },
274
+ getPageItem(page) {
275
+ let label = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
276
+ const commonAttrs = {
277
+ 'aria-label': label || this.labelForPage(page),
278
+ href: '#',
279
+ class: []
280
+ };
281
+ const isActivePage = page === this.value;
282
+ const isDisabled = this.pageIsDisabled(page);
283
+ const attrs = {
284
+ ...commonAttrs
285
+ };
286
+ const listeners = {};
287
+ if (isActivePage) {
288
+ attrs.class.push('active');
289
+ attrs['aria-current'] = 'page';
290
+ }
291
+ // Disable previous and/or next buttons if needed
292
+ if (this.isLinkBased) {
293
+ attrs.href = this.linkGen(page);
294
+ }
295
+ listeners.click = e => this.handleClick(e, page);
296
+ return {
297
+ content: page,
298
+ component: isDisabled ? 'span' : GlLink,
299
+ disabled: isDisabled,
300
+ key: `page_${page}`,
301
+ slot: 'page-number',
302
+ slotData: {
303
+ page,
304
+ active: isActivePage,
305
+ disabled: isDisabled
306
+ },
307
+ attrs,
308
+ listeners
309
+ };
310
+ },
311
+ getEllipsisItem(side) {
312
+ return {
313
+ content: this.ellipsisText,
314
+ key: `ellipsis_${side}`,
315
+ slot: `ellipsis-${side}`,
316
+ component: 'span',
317
+ disabled: true,
318
+ slotData: {},
319
+ listeners: {}
320
+ };
321
+ },
322
+ handleClick(event, value) {
323
+ if (!this.isLinkBased) {
324
+ event.preventDefault();
325
+ /**
326
+ * Emitted when the page changes
327
+ * @event input
328
+ * @arg {number} value The page that just got loaded
329
+ */
330
+ this.$emit('input', value);
331
+ }
332
+ },
333
+ handlePrevious(event, value) {
334
+ this.handleClick(event, value);
335
+ /**
336
+ * Emitted when the "previous" button is clicked
337
+ * @event previous
338
+ */
339
+ this.$emit('previous');
340
+ },
341
+ handleNext(event, value) {
342
+ this.handleClick(event, value);
343
+ /**
344
+ * Emitted when the "next" button is clicked
345
+ * @event next
346
+ */
347
+ this.$emit('next');
348
+ }
349
+ }
350
+ };
351
+
352
+ /* script */
353
+ const __vue_script__ = script;
354
+
355
+ /* template */
356
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('nav',{staticClass:"gl-pagination",attrs:{"aria-label":_vm.labelNav}},[_c('ul',{class:_vm.wrapperClasses},[_c('li',{class:{
357
+ disabled: _vm.prevPageIsDisabled,
358
+ 'gl-flex-auto': _vm.isFillAlign,
359
+ },attrs:{"aria-hidden":_vm.prevPageIsDisabled,"data-testid":"gl-pagination-li"}},[_c(_vm.prevPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-prev","aria-label":_vm.prevPageAriaLabel,"href":_vm.prevPageHref},on:{"click":function($event){!_vm.prevPageIsDisabled ? _vm.handlePrevious($event, _vm.value - 1) : null;}}},[_vm._t("previous",function(){return [_c('gl-icon',{attrs:{"name":"chevron-lg-left"}})]},null,{ page: _vm.value - 1, disabled: _vm.prevPageIsDisabled })],2)],1),_vm._v(" "),_vm._l((_vm.visibleItems),function(item){return _c('li',{key:item.key,class:{
360
+ disabled: item.disabled,
361
+ 'gl-flex-auto': _vm.isFillAlign,
362
+ },attrs:{"data-testid":"gl-pagination-li"}},[_c(item.component,_vm._g(_vm._b({tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-item","size":"md","aria-disabled":item.disabled}},'component',item.attrs,false),item.listeners),[_vm._t(item.slot,function(){return [_vm._v(_vm._s(item.content))]},null,item.slotData)],2)],1)}),_vm._v(" "),_c('li',{class:{
363
+ disabled: _vm.nextPageIsDisabled,
364
+ 'gl-flex-auto': _vm.isFillAlign,
365
+ },attrs:{"aria-hidden":_vm.nextPageIsDisabled,"data-testid":"gl-pagination-li"}},[_c(_vm.nextPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-pagination-item",attrs:{"data-testid":"gl-pagination-next","aria-label":_vm.nextPageAriaLabel,"href":_vm.nextPageHref},on:{"click":function($event){!_vm.nextPageIsDisabled ? _vm.handleNext($event, _vm.value + 1) : null;}}},[_vm._t("next",function(){return [_c('gl-icon',{attrs:{"name":"chevron-lg-right"}})]},null,{ page: _vm.value + 1, disabled: _vm.nextPageIsDisabled })],2)],1)],2)]):_vm._e()};
366
+ var __vue_staticRenderFns__ = [];
367
+
368
+ /* style */
369
+ const __vue_inject_styles__ = undefined;
370
+ /* scoped */
371
+ const __vue_scope_id__ = undefined;
372
+ /* module identifier */
373
+ const __vue_module_identifier__ = undefined;
374
+ /* functional template */
375
+ const __vue_is_functional_template__ = false;
376
+ /* style inject */
377
+
378
+ /* style inject SSR */
379
+
380
+ /* style inject shadow dom */
381
+
382
+
383
+
384
+ const __vue_component__ = /*#__PURE__*/__vue_normalize__(
385
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
386
+ __vue_inject_styles__,
387
+ __vue_script__,
388
+ __vue_scope_id__,
389
+ __vue_is_functional_template__,
390
+ __vue_module_identifier__,
391
+ false,
392
+ undefined,
393
+ undefined,
394
+ undefined
395
+ );
396
+
397
+ export { __vue_component__ as default };
@@ -0,0 +1,34 @@
1
+ const mockPathItems = () => [{
2
+ title: 'First',
3
+ metric: '1d'
4
+ }, {
5
+ title: 'Second',
6
+ metric: '2d'
7
+ }, {
8
+ title: 'Third',
9
+ metric: '3d'
10
+ }, {
11
+ title: 'Fourth',
12
+ metric: '4d'
13
+ }, {
14
+ title: 'Fifth',
15
+ metric: '5d'
16
+ }, {
17
+ title: 'Sixth',
18
+ metric: '6d'
19
+ }, {
20
+ title: 'Seventh',
21
+ metric: '7d'
22
+ }, {
23
+ title: 'Eighth',
24
+ metric: '8d',
25
+ disabled: true
26
+ }, {
27
+ title: 'Ninth',
28
+ metric: '9d'
29
+ }, {
30
+ title: 'Tenth',
31
+ metric: '10d'
32
+ }];
33
+
34
+ export { mockPathItems };
@@ -0,0 +1,177 @@
1
+ import iconSpriteInfo from '@gitlab/svgs/dist/icons.json';
2
+ import { uniqueId, findLast } from 'lodash-es';
3
+ import { GlResizeObserverDirective } from '../../../directives/resize_observer/resize_observer';
4
+ import GlIcon from '../icon/icon';
5
+ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
6
+
7
+ const BOUNDARY_WIDTH = 40;
8
+ const PATH_ITEM_CLASS = 'gl-path-button';
9
+ const PATH_ACTIVE_ITEM_CLASS = 'gl-path-active-item';
10
+ var script = {
11
+ name: 'GlPath',
12
+ components: {
13
+ GlIcon
14
+ },
15
+ directives: {
16
+ GlResizeObserverDirective
17
+ },
18
+ props: {
19
+ /**
20
+ * A list of path items in the form:
21
+ * ```
22
+ * {
23
+ * title: String, required
24
+ * metric: Any, optional
25
+ * icon: String, optional
26
+ * disabled: Boolean, optional
27
+ * }
28
+ * ```
29
+ */
30
+ items: {
31
+ type: Array,
32
+ required: false,
33
+ default: () => []
34
+ },
35
+ /**
36
+ * The items' background color.
37
+ */
38
+ backgroundColor: {
39
+ type: String,
40
+ required: false,
41
+ default: 'rgba(0,0,0,0)'
42
+ }
43
+ },
44
+ data() {
45
+ return {
46
+ selectedIndex: 0,
47
+ width: 0,
48
+ scrollLeft: 0
49
+ };
50
+ },
51
+ computed: {
52
+ entireListVisible() {
53
+ return this.width >= this.getScrollWidth();
54
+ },
55
+ displayScrollLeft() {
56
+ return !this.entireListVisible && this.scrollLeft;
57
+ },
58
+ displayScrollRight() {
59
+ const scrollOffset = this.getScrollWidth() - this.width;
60
+ return !this.entireListVisible && scrollOffset !== this.scrollLeft;
61
+ },
62
+ rightHandBoundary() {
63
+ return this.width - BOUNDARY_WIDTH + this.scrollLeft;
64
+ },
65
+ leftHandBoundary() {
66
+ return this.scrollLeft + BOUNDARY_WIDTH;
67
+ }
68
+ },
69
+ watch: {
70
+ items: {
71
+ immediate: true,
72
+ handler(items) {
73
+ const selectedIndex = items.findIndex(item => item.selected);
74
+ this.selectedIndex = selectedIndex > 0 ? selectedIndex : 0;
75
+ }
76
+ }
77
+ },
78
+ beforeCreate() {
79
+ this.pathUuid = uniqueId('path-');
80
+ },
81
+ methods: {
82
+ pathItemClass(index) {
83
+ return index === this.selectedIndex ? `${PATH_ITEM_CLASS} ${PATH_ACTIVE_ITEM_CLASS}` : PATH_ITEM_CLASS;
84
+ },
85
+ onItemClicked(selectedIndex) {
86
+ this.selectedIndex = selectedIndex;
87
+ /**
88
+ * Emitted when an item is selected.
89
+ */
90
+ this.$emit('selected', this.items[this.selectedIndex]);
91
+ },
92
+ handleResize(_ref) {
93
+ let {
94
+ contentRect: {
95
+ width
96
+ }
97
+ } = _ref;
98
+ this.width = width;
99
+ },
100
+ scrollPathLeft() {
101
+ const previousItemToScollTo = findLast(this.$refs.pathListItems, listItem => {
102
+ return listItem.offsetLeft < this.leftHandBoundary;
103
+ });
104
+ const availableWidth = this.width - previousItemToScollTo.offsetWidth - BOUNDARY_WIDTH - BOUNDARY_WIDTH;
105
+ let scrollTo = previousItemToScollTo.offsetLeft - BOUNDARY_WIDTH - availableWidth;
106
+ if (scrollTo < 0) {
107
+ scrollTo = 0;
108
+ }
109
+ this.scrollPath(scrollTo);
110
+ },
111
+ scrollPathRight() {
112
+ const nextItemToScollTo = this.$refs.pathListItems.find(listItem => listItem.offsetLeft + listItem.offsetWidth > this.rightHandBoundary);
113
+ let scrollTo = nextItemToScollTo.offsetLeft - BOUNDARY_WIDTH;
114
+ if (scrollTo > this.getScrollWidth() - this.width) {
115
+ scrollTo = this.getScrollWidth() - this.width;
116
+ }
117
+ this.scrollPath(scrollTo);
118
+ },
119
+ scrollPath(scrollTo) {
120
+ this.$refs.pathNavList.scrollTo({
121
+ left: scrollTo,
122
+ behavior: 'smooth'
123
+ });
124
+ this.scrollLeft = scrollTo;
125
+ },
126
+ getScrollWidth() {
127
+ return this.$refs.pathNavList ? this.$refs.pathNavList.scrollWidth : 0;
128
+ },
129
+ shouldDisplayIcon(icon) {
130
+ return icon && iconSpriteInfo.icons.includes(icon);
131
+ },
132
+ pathId(index) {
133
+ return `${this.pathUuid}-item-${index}`;
134
+ },
135
+ getAriaCurrentAttr(index) {
136
+ return index === this.selectedIndex;
137
+ }
138
+ }
139
+ };
140
+
141
+ /* script */
142
+ const __vue_script__ = script;
143
+
144
+ /* template */
145
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:"gl-resize-observer-directive",rawName:"v-gl-resize-observer-directive",value:(_vm.handleResize),expression:"handleResize"}],staticClass:"gl-path-nav",style:({ '--path-bg-color': _vm.backgroundColor }),attrs:{"data-testid":"gl-path-nav"}},[_c('span',{directives:[{name:"show",rawName:"v-show",value:(_vm.displayScrollLeft),expression:"displayScrollLeft"}],staticClass:"gl-path-fade gl-path-fade-left"},[_c('button',{staticClass:"gl-clear-icon-button",attrs:{"aria-label":"Scroll left"},on:{"click":_vm.scrollPathLeft}},[_c('gl-icon',{attrs:{"size":32,"name":"chevron-left"}})],1)]),_vm._v(" "),_c('ul',{ref:"pathNavList",staticClass:"gl-path-nav-list"},_vm._l((_vm.items),function(item,index){return _c('li',{key:index,ref:"pathListItems",refInFor:true,staticClass:"gl-path-nav-list-item"},[_c('button',{class:_vm.pathItemClass(index),attrs:{"id":_vm.pathId(index),"aria-current":_vm.getAriaCurrentAttr(index),"category":item.disabled ? 'tertiary' : undefined,"disabled":item.disabled},on:{"click":function($event){return _vm.onItemClicked(index)}}},[(_vm.shouldDisplayIcon(item.icon))?_c('gl-icon',{staticClass:"gl-mr-2",attrs:{"name":item.icon,"data-testid":"gl-path-item-icon"}}):_vm._e(),_vm._v(_vm._s(item.title)),(item.metric)?_c('span',{staticClass:"gl-pl-2 gl-font-normal"},[_vm._v(_vm._s(item.metric))]):_vm._e()],1),_vm._v(" "),_vm._t("default",null,{"pathItem":item,"pathId":_vm.pathId(index)})],2)}),0),_vm._v(" "),_c('span',{directives:[{name:"show",rawName:"v-show",value:(_vm.displayScrollRight),expression:"displayScrollRight"}],staticClass:"gl-path-fade gl-path-fade-right"},[_c('button',{staticClass:"gl-clear-icon-button",attrs:{"aria-label":"Scroll right"},on:{"click":_vm.scrollPathRight}},[_c('gl-icon',{attrs:{"size":32,"name":"chevron-right"}})],1)])])};
146
+ var __vue_staticRenderFns__ = [];
147
+
148
+ /* style */
149
+ const __vue_inject_styles__ = undefined;
150
+ /* scoped */
151
+ const __vue_scope_id__ = undefined;
152
+ /* module identifier */
153
+ const __vue_module_identifier__ = undefined;
154
+ /* functional template */
155
+ const __vue_is_functional_template__ = false;
156
+ /* style inject */
157
+
158
+ /* style inject SSR */
159
+
160
+ /* style inject shadow dom */
161
+
162
+
163
+
164
+ const __vue_component__ = /*#__PURE__*/__vue_normalize__(
165
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
166
+ __vue_inject_styles__,
167
+ __vue_script__,
168
+ __vue_scope_id__,
169
+ __vue_is_functional_template__,
170
+ __vue_module_identifier__,
171
+ false,
172
+ undefined,
173
+ undefined,
174
+ undefined
175
+ );
176
+
177
+ export { __vue_component__ as default };