@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,205 @@
1
+ import { isVisible } from '../vendor/bootstrap-vue/src/utils/dom';
2
+ export { isVisible } from '../vendor/bootstrap-vue/src/utils/dom';
3
+ import { COMMA, labelColorOptions, CONTRAST_LEVELS, focusableTags } from './constants';
4
+
5
+ function debounceByAnimationFrame(fn) {
6
+ let requestId;
7
+ return function debounced() {
8
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
9
+ args[_key] = arguments[_key];
10
+ }
11
+ if (requestId) {
12
+ window.cancelAnimationFrame(requestId);
13
+ }
14
+ requestId = window.requestAnimationFrame(() => fn.apply(this, args));
15
+ };
16
+ }
17
+ function throttle(fn) {
18
+ let frameId = null;
19
+ return function () {
20
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
21
+ args[_key2] = arguments[_key2];
22
+ }
23
+ if (frameId) {
24
+ return;
25
+ }
26
+ frameId = window.requestAnimationFrame(() => {
27
+ fn(...args);
28
+ frameId = null;
29
+ });
30
+ };
31
+ }
32
+ function rgbFromHex(hex) {
33
+ const cleanHex = hex.replace('#', '');
34
+ const rgb = cleanHex.length === 3 ? cleanHex.split('').map(val => val + val) : cleanHex.match(/[\da-f]{2}/gi);
35
+ const [r, g, b] = rgb.map(val => parseInt(val, 16));
36
+ return [r, g, b];
37
+ }
38
+ function rgbFromString(color, sub) {
39
+ const rgb = color.substring(sub, color.length - 1).split(COMMA);
40
+ const [r, g, b] = rgb.map(i => parseInt(i, 10));
41
+ return [r, g, b];
42
+ }
43
+ function hexToRgba(hex) {
44
+ let opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
45
+ const [r, g, b] = rgbFromHex(hex);
46
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
47
+ }
48
+ function toSrgb(value) {
49
+ const normalized = value / 255;
50
+ return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;
51
+ }
52
+ function relativeLuminance(rgb) {
53
+ // WCAG 2.1 formula: https://www.w3.org/TR/WCAG21/#dfn-relative-luminance
54
+ // -
55
+ // WCAG 3.0 will use APAC
56
+ // Using APAC would be the ultimate goal, but was dismissed by engineering as of now
57
+ // See https://gitlab.com/gitlab-org/gitlab-ui/-/merge_requests/3418#note_1370107090
58
+ return 0.2126 * toSrgb(rgb[0]) + 0.7152 * toSrgb(rgb[1]) + 0.0722 * toSrgb(rgb[2]);
59
+ }
60
+ function colorFromBackground(backgroundColor) {
61
+ let contrastRatio = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2.4;
62
+ let color;
63
+ const lightColor = rgbFromHex('#FFFFFF');
64
+ const darkColor = rgbFromHex('#18171d');
65
+ if (backgroundColor.startsWith('#')) {
66
+ color = rgbFromHex(backgroundColor);
67
+ } else if (backgroundColor.startsWith('rgba(')) {
68
+ color = rgbFromString(backgroundColor, 5);
69
+ } else if (backgroundColor.startsWith('rgb(')) {
70
+ color = rgbFromString(backgroundColor, 4);
71
+ }
72
+ const luminance = relativeLuminance(color);
73
+ const lightLuminance = relativeLuminance(lightColor);
74
+ const darkLuminance = relativeLuminance(darkColor);
75
+ const contrastLight = (lightLuminance + 0.05) / (luminance + 0.05);
76
+ const contrastDark = (luminance + 0.05) / (darkLuminance + 0.05);
77
+
78
+ // Using a default threshold contrast of 2.4 instead of 3
79
+ // as this will solve weird color combinations in the mid tones
80
+ return contrastLight >= contrastRatio || contrastLight > contrastDark ? labelColorOptions.light : labelColorOptions.dark;
81
+ }
82
+ function getColorContrast(foreground, background) {
83
+ // Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
84
+ const backgroundLuminance = relativeLuminance(rgbFromHex(background)) + 0.05;
85
+ const foregroundLuminance = relativeLuminance(rgbFromHex(foreground)) + 0.05;
86
+ let score = backgroundLuminance / foregroundLuminance;
87
+ if (foregroundLuminance > backgroundLuminance) {
88
+ score = 1 / score;
89
+ }
90
+ const level = CONTRAST_LEVELS.find(_ref => {
91
+ let {
92
+ min,
93
+ max
94
+ } = _ref;
95
+ return score >= min && score < max;
96
+ });
97
+ return {
98
+ score: (Math.round(score * 10) / 10).toFixed(1),
99
+ level
100
+ };
101
+ }
102
+ function uid() {
103
+ return Math.random().toString(36).substring(2);
104
+ }
105
+
106
+ /**
107
+ * Receives an element and validates that it can be focused
108
+ * @param { HTMLElement } The element we want to validate
109
+ * @return { boolean } Is the element focusable
110
+ */
111
+
112
+ function isElementFocusable(elt) {
113
+ if (!elt) return false;
114
+ const {
115
+ tagName
116
+ } = elt;
117
+ const isValidTag = focusableTags.includes(tagName);
118
+ const hasValidType = elt.getAttribute('type') !== 'hidden';
119
+ const isDisabled = elt.getAttribute('disabled') === '' || elt.getAttribute('disabled');
120
+ const hasValidZIndex = elt.getAttribute('z-index') !== '-1';
121
+ const isInvalidAnchorTag = tagName === 'A' && !elt.getAttribute('href');
122
+ return isValidTag && hasValidType && !isDisabled && hasValidZIndex && !isInvalidAnchorTag;
123
+ }
124
+
125
+ /**
126
+ * Receives an element and validates that it is reachable via sequential keyboard navigation
127
+ * @param { HTMLElement } The element to validate
128
+ * @return { boolean } Is the element focusable in a sequential tab order
129
+ */
130
+
131
+ function isElementTabbable(el) {
132
+ if (!el) return false;
133
+ const tabindex = parseInt(el.getAttribute('tabindex'), 10);
134
+ return tabindex > -1;
135
+ }
136
+
137
+ /**
138
+ * Receives an array of HTML elements and focus the first one possible
139
+ * @param { Array.<HTMLElement> } An array of element to potentially focus
140
+ * @return { undefined }
141
+ */
142
+
143
+ function focusFirstFocusableElement(elts) {
144
+ const focusableElt = elts.find(el => isElementFocusable(el));
145
+ if (focusableElt) focusableElt.focus();
146
+ }
147
+
148
+ /**
149
+ * Returns true if the current environment is considered a development environment (it's not
150
+ * production or test).
151
+ *
152
+ * @returns {boolean}
153
+ */
154
+ function isDev() {
155
+ return !['test', 'production'].includes(process.env.NODE_ENV);
156
+ }
157
+
158
+ /**
159
+ * Prints a warning message to the console in non-test and non-production environments.
160
+ * @param {string} message Message to print to the console.
161
+ * @param {Object} [context] Optional object with additional context.
162
+ * @param {string} [context.name] The name of the context of the message. Usually the component's name.
163
+ * @param {HTMLElement} [context.element] The element relevant to the message.
164
+ */
165
+ function logWarning(message) {
166
+ let context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
167
+ if (isDev()) {
168
+ const {
169
+ name,
170
+ element
171
+ } = context;
172
+ const formattedMessage = name ? `[${name}] ${message}` : message;
173
+ const args = element ? [formattedMessage, element] : [formattedMessage];
174
+ console.warn(...args); // eslint-disable-line no-console
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Stop default event handling and propagation
180
+ */
181
+ function stopEvent(event) {
182
+ let {
183
+ preventDefault = true,
184
+ stopPropagation = true,
185
+ stopImmediatePropagation = false
186
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
187
+ if (preventDefault) {
188
+ event.preventDefault();
189
+ }
190
+ if (stopPropagation) {
191
+ event.stopPropagation();
192
+ }
193
+ if (stopImmediatePropagation) {
194
+ event.stopImmediatePropagation();
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Return an Array of visible items
200
+ */
201
+ function filterVisible(els) {
202
+ return (els || []).filter(el => isVisible(el));
203
+ }
204
+
205
+ export { colorFromBackground, debounceByAnimationFrame, filterVisible, focusFirstFocusableElement, getColorContrast, hexToRgba, isDev, isElementFocusable, isElementTabbable, logWarning, relativeLuminance, rgbFromHex, rgbFromString, stopEvent, throttle, toSrgb, uid };
@@ -0,0 +1,57 @@
1
+ import Vue from 'vue';
2
+
3
+ /**
4
+ * Checks whether the global Vue version is Vue 3 (or the Vue 3 compat build).
5
+ *
6
+ * Use this for module-level checks where no component instance is available,
7
+ * such as conditional test logic or static configuration.
8
+ *
9
+ * @type {boolean}
10
+ */
11
+ const isGlobalVue3 = Boolean(Vue.Fragment);
12
+
13
+ /**
14
+ * Checks whether a component instance is running under Vue 3 (or compat mode).
15
+ *
16
+ * In Vue 3, component instances expose an internal `$` property that holds
17
+ * the component's internal instance. This property does not exist in Vue 2.
18
+ *
19
+ * Prefer this over {@link isGlobalVue3} when you have access to a component
20
+ * instance, as it checks at the instance level rather than the global level.
21
+ *
22
+ * @param {object} instance - The Vue component instance (`this`).
23
+ * @returns {boolean} `true` if the instance is a Vue 3 component.
24
+ */
25
+ const isVue3 = instance => Boolean(instance.$);
26
+
27
+ /**
28
+ * Wraps a Vue component instance to safely access properties without
29
+ * triggering Vue 3 development warnings.
30
+ *
31
+ * In Vue 3 (and compat mode), component instances are Proxies. Accessing a
32
+ * property that doesn't exist on the instance (e.g. `this.$router` when no
33
+ * router is installed) triggers a development warning from Vue's `get` trap:
34
+ * "Property X was accessed during render but is not defined on instance."
35
+ *
36
+ * This utility returns a Proxy that uses the `in` operator (which hits Vue's
37
+ * `has` trap, which is silent) to check for property existence before accessing
38
+ * it. If the property doesn't exist, `undefined` is returned without ever
39
+ * hitting Vue's `get` trap.
40
+ *
41
+ * In Vue 2, the instance is returned as-is since there are no Proxy warnings.
42
+ *
43
+ * @param {object} target - The Vue component instance (`this`).
44
+ * @returns {object} The original instance (Vue 2) or a safe Proxy wrapper (Vue 3).
45
+ */
46
+ function safeVueInstance(target) {
47
+ if (!isVue3(target)) {
48
+ return target;
49
+ }
50
+ return new Proxy(target, {
51
+ get(obj, prop) {
52
+ return prop in obj ? obj[prop] : undefined;
53
+ }
54
+ });
55
+ }
56
+
57
+ export { isGlobalVue3, isVue3, safeVueInstance };
package/dist/utils.js ADDED
@@ -0,0 +1,5 @@
1
+ export { GlBreakpointInstance, breakpoints } from './utils/breakpoints';
2
+ import * as validators from './components/base/form/form_fields/validators';
3
+ export { validators as formValidators };
4
+ import * as mappers from './components/base/form/form_fields/mappers';
5
+ export { mappers as formMappers };
@@ -0,0 +1,8 @@
1
+ import { pluginFactory } from './utils/plugins';
2
+
3
+ //
4
+ // Utility Plugin for setting the configuration
5
+ //
6
+ const BVConfigPlugin = /*#__PURE__*/pluginFactory();
7
+
8
+ export { BVConfigPlugin };
@@ -0,0 +1,81 @@
1
+ import { extend, mergeData } from '../../vue';
2
+ import { NAME_BUTTON_CLOSE } from '../../constants/components';
3
+ import { PROP_TYPE_STRING, PROP_TYPE_BOOLEAN } from '../../constants/props';
4
+ import { SLOT_NAME_DEFAULT } from '../../constants/slots';
5
+ import { stopEvent } from '../../utils/events';
6
+ import { isEvent } from '../../utils/inspect';
7
+ import { hasNormalizedSlot, normalizeSlot } from '../../utils/normalize-slot';
8
+
9
+ // --- Props ---
10
+
11
+ const props = {
12
+ ariaLabel: {
13
+ type: PROP_TYPE_STRING,
14
+ required: false,
15
+ default: 'Close'
16
+ },
17
+ content: {
18
+ type: PROP_TYPE_STRING,
19
+ required: false,
20
+ default: '&times;'
21
+ },
22
+ disabled: {
23
+ type: PROP_TYPE_BOOLEAN,
24
+ required: false,
25
+ default: false
26
+ },
27
+ textVariant: {
28
+ type: PROP_TYPE_STRING,
29
+ required: false,
30
+ default: undefined
31
+ }
32
+ };
33
+
34
+ // --- Main component ---
35
+
36
+ // @vue/component
37
+ const BButtonClose = /*#__PURE__*/extend({
38
+ name: NAME_BUTTON_CLOSE,
39
+ functional: true,
40
+ props,
41
+ render(h, _ref) {
42
+ let {
43
+ props,
44
+ data,
45
+ slots,
46
+ scopedSlots
47
+ } = _ref;
48
+ const $slots = slots();
49
+ const $scopedSlots = scopedSlots || {};
50
+ const componentData = {
51
+ staticClass: 'close',
52
+ class: {
53
+ [`text-${props.textVariant}`]: props.textVariant
54
+ },
55
+ attrs: {
56
+ type: 'button',
57
+ disabled: props.disabled,
58
+ 'aria-label': props.ariaLabel ? String(props.ariaLabel) : null
59
+ },
60
+ on: {
61
+ click(event) {
62
+ // Ensure click on button HTML content is also disabled
63
+ /* istanbul ignore if: bug in JSDOM still emits click on inner element */
64
+ if (props.disabled && isEvent(event)) {
65
+ stopEvent(event);
66
+ }
67
+ }
68
+ }
69
+ };
70
+
71
+ // Careful not to override the default slot with innerHTML
72
+ if (!hasNormalizedSlot(SLOT_NAME_DEFAULT, $scopedSlots, $slots)) {
73
+ componentData.domProps = {
74
+ innerHTML: props.content
75
+ };
76
+ }
77
+ return h('button', mergeData(data, componentData), normalizeSlot(SLOT_NAME_DEFAULT, {}, $scopedSlots, $slots));
78
+ }
79
+ });
80
+
81
+ export { BButtonClose, props };
@@ -0,0 +1,204 @@
1
+ import { extend, mergeData } from '../../vue';
2
+ import { NAME_BUTTON } from '../../constants/components';
3
+ import { CODE_SPACE, CODE_ENTER } from '../../constants/key-codes';
4
+ import { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING } from '../../constants/props';
5
+ import { concat } from '../../utils/array';
6
+ import { isTag, addClass, removeClass } from '../../utils/dom';
7
+ import { stopEvent } from '../../utils/events';
8
+ import { isBoolean, isEvent, isFunction } from '../../utils/inspect';
9
+ import { omit, sortKeys } from '../../utils/object';
10
+ import { pluckProps } from '../../utils/props';
11
+ import { isLink as isLink$1 } from '../../utils/router';
12
+ import { props as props$1, BLink } from '../link/link';
13
+
14
+ // --- Props ---
15
+
16
+ const linkProps = omit(props$1, ['event', 'routerTag']);
17
+ delete linkProps.href.default;
18
+ delete linkProps.to.default;
19
+ const props = sortKeys({
20
+ ...linkProps,
21
+ block: {
22
+ type: PROP_TYPE_BOOLEAN,
23
+ required: false,
24
+ default: false
25
+ },
26
+ disabled: {
27
+ type: PROP_TYPE_BOOLEAN,
28
+ required: false,
29
+ default: false
30
+ },
31
+ // Tri-state: `true`, `false` or `null`
32
+ // => On, off, not a toggle
33
+ pressed: {
34
+ type: PROP_TYPE_BOOLEAN,
35
+ required: false,
36
+ default: null
37
+ },
38
+ size: {
39
+ type: PROP_TYPE_STRING,
40
+ required: false,
41
+ default: undefined
42
+ },
43
+ tag: {
44
+ type: PROP_TYPE_STRING,
45
+ required: false,
46
+ default: 'button'
47
+ },
48
+ type: {
49
+ type: PROP_TYPE_STRING,
50
+ required: false,
51
+ default: 'button'
52
+ },
53
+ variant: {
54
+ type: PROP_TYPE_STRING,
55
+ required: false,
56
+ default: 'secondary'
57
+ }
58
+ });
59
+
60
+ // --- Helper methods ---
61
+
62
+ // Focus handler for toggle buttons
63
+ // Needs class of 'focus' when focused
64
+ const handleFocus = event => {
65
+ if (event.type === 'focusin') {
66
+ addClass(event.target, 'focus');
67
+ } else if (event.type === 'focusout') {
68
+ removeClass(event.target, 'focus');
69
+ }
70
+ };
71
+
72
+ // Is the requested button a link?
73
+ // If tag prop is set to `a`, we use a <b-link> to get proper disabled handling
74
+ const isLink = props => isLink$1(props) || isTag(props.tag, 'a');
75
+
76
+ // Is the button to be a toggle button?
77
+ const isToggle = props => isBoolean(props.pressed);
78
+
79
+ // Is the button "really" a button?
80
+ const isButton = props => !(isLink(props) || props.tag && !isTag(props.tag, 'button'));
81
+
82
+ // Is the requested tag not a button or link?
83
+ const isNonStandardTag = props => !isLink(props) && !isButton(props);
84
+
85
+ // Compute required classes (non static classes)
86
+ const computeClass = props => [`btn-${props.variant || 'secondary'}`, {
87
+ [`btn-${props.size}`]: props.size,
88
+ 'btn-block': props.block,
89
+ disabled: props.disabled,
90
+ active: props.pressed
91
+ }];
92
+
93
+ // Compute the link props to pass to b-link (if required)
94
+ const computeLinkProps = props => isLink(props) ? pluckProps(linkProps, props) : {};
95
+
96
+ // Compute the attributes for a button
97
+ const computeAttrs = (props, data) => {
98
+ const button = isButton(props);
99
+ const link = isLink(props);
100
+ const toggle = isToggle(props);
101
+ const nonStandardTag = isNonStandardTag(props);
102
+ const hashLink = link && props.href === '#';
103
+ const role = data.attrs && data.attrs.role ? data.attrs.role : null;
104
+ let tabindex = data.attrs ? data.attrs.tabindex : null;
105
+ if (nonStandardTag || hashLink) {
106
+ tabindex = '0';
107
+ }
108
+ return {
109
+ // Type only used for "real" buttons
110
+ type: button && !link ? props.type : null,
111
+ // Disabled only set on "real" buttons
112
+ disabled: button ? props.disabled : null,
113
+ // We add a role of button when the tag is not a link or button for ARIA
114
+ // Don't bork any role provided in `data.attrs` when `isLink` or `isButton`
115
+ // Except when link has `href` of `#`
116
+ role: nonStandardTag || hashLink ? 'button' : role,
117
+ // We set the `aria-disabled` state for non-standard tags
118
+ 'aria-disabled': nonStandardTag ? String(props.disabled) : null,
119
+ // For toggles, we need to set the pressed state for ARIA
120
+ 'aria-pressed': toggle ? String(props.pressed) : null,
121
+ // `autocomplete="off"` is needed in toggle mode to prevent some browsers
122
+ // from remembering the previous setting when using the back button
123
+ autocomplete: toggle ? 'off' : null,
124
+ // `tabindex` is used when the component is not a button
125
+ // Links are tabbable, but don't allow disabled, while non buttons or links
126
+ // are not tabbable, so we mimic that functionality by disabling tabbing
127
+ // when disabled, and adding a `tabindex="0"` to non buttons or non links
128
+ tabindex: props.disabled && !button ? '-1' : tabindex
129
+ };
130
+ };
131
+
132
+ // --- Main component ---
133
+
134
+ // @vue/component
135
+ const BButton = /*#__PURE__*/extend({
136
+ name: NAME_BUTTON,
137
+ functional: true,
138
+ props,
139
+ render(h, _ref) {
140
+ let {
141
+ props,
142
+ data,
143
+ listeners,
144
+ children
145
+ } = _ref;
146
+ const toggle = isToggle(props);
147
+ const link = isLink(props);
148
+ const nonStandardTag = isNonStandardTag(props);
149
+ const hashLink = link && props.href === '#';
150
+ const on = {
151
+ keydown(event) {
152
+ // When the link is a `href="#"` or a non-standard tag (has `role="button"`),
153
+ // we add a keydown handlers for CODE_SPACE/CODE_ENTER
154
+ /* istanbul ignore next */
155
+ if (props.disabled || !(nonStandardTag || hashLink)) {
156
+ return;
157
+ }
158
+ const {
159
+ keyCode
160
+ } = event;
161
+ // Add CODE_SPACE handler for `href="#"` and CODE_ENTER handler for non-standard tags
162
+ if (keyCode === CODE_SPACE || keyCode === CODE_ENTER && nonStandardTag) {
163
+ const target = event.currentTarget || event.target;
164
+ stopEvent(event, {
165
+ propagation: false
166
+ });
167
+ target.click();
168
+ }
169
+ },
170
+ click(event) {
171
+ /* istanbul ignore if: blink/button disabled should handle this */
172
+ if (props.disabled && isEvent(event)) {
173
+ stopEvent(event);
174
+ } else if (toggle && listeners && listeners['update:pressed']) {
175
+ // Send `.sync` updates to any "pressed" prop (if `.sync` listeners)
176
+ // `concat()` will normalize the value to an array without
177
+ // double wrapping an array value in an array
178
+ concat(listeners['update:pressed']).forEach(fn => {
179
+ if (isFunction(fn)) {
180
+ fn(!props.pressed);
181
+ }
182
+ });
183
+ }
184
+ }
185
+ };
186
+ if (toggle) {
187
+ on.focusin = handleFocus;
188
+ on.focusout = handleFocus;
189
+ }
190
+ const componentData = {
191
+ staticClass: 'btn',
192
+ class: computeClass(props),
193
+ props: computeLinkProps(props),
194
+ attrs: computeAttrs(props, data),
195
+ on
196
+ };
197
+ return h(link ? BLink : props.tag, mergeData({
198
+ ...data,
199
+ props: undefined
200
+ }, componentData), children);
201
+ }
202
+ });
203
+
204
+ export { BButton, props };
@@ -0,0 +1,2 @@
1
+ export { BButton } from './button';
2
+ export { BButtonClose } from './button-close';
@@ -0,0 +1,41 @@
1
+ import { extend, mergeData } from '../../vue';
2
+ import { NAME_DROPDOWN_DIVIDER } from '../../constants/components';
3
+ import { PROP_TYPE_STRING } from '../../constants/props';
4
+ import { makeProp } from '../../utils/props';
5
+ import { omit } from '../../utils/object';
6
+
7
+ // --- Props ---
8
+
9
+ const props = {
10
+ tag: makeProp(PROP_TYPE_STRING, 'hr')
11
+ };
12
+
13
+ // --- Main component ---
14
+
15
+ // @vue/component
16
+ const BDropdownDivider = /*#__PURE__*/extend({
17
+ name: NAME_DROPDOWN_DIVIDER,
18
+ functional: true,
19
+ props,
20
+ render(h, _ref) {
21
+ let {
22
+ props,
23
+ data
24
+ } = _ref;
25
+ return h('li', mergeData(omit(data, ['attrs']), {
26
+ attrs: {
27
+ role: 'presentation'
28
+ }
29
+ }), [h(props.tag, {
30
+ staticClass: 'dropdown-divider',
31
+ attrs: {
32
+ ...(data.attrs || {}),
33
+ role: 'separator',
34
+ 'aria-orientation': 'horizontal'
35
+ },
36
+ ref: 'divider'
37
+ })]);
38
+ }
39
+ });
40
+
41
+ export { BDropdownDivider, props };
@@ -0,0 +1,52 @@
1
+ import { extend, mergeData } from '../../vue';
2
+ import { NAME_DROPDOWN_FORM } from '../../constants/components';
3
+ import { PROP_TYPE_BOOLEAN, PROP_TYPE_ARRAY_OBJECT_STRING } from '../../constants/props';
4
+ import { sortKeys, omit } from '../../utils/object';
5
+ import { makeProp } from '../../utils/props';
6
+ import { props as props$1, BForm } from '../form/form';
7
+
8
+ // --- Props ---
9
+
10
+ const props = sortKeys({
11
+ ...props$1,
12
+ disabled: makeProp(PROP_TYPE_BOOLEAN, false),
13
+ formClass: makeProp(PROP_TYPE_ARRAY_OBJECT_STRING)
14
+ });
15
+
16
+ // --- Main component ---
17
+
18
+ // @vue/component
19
+ const BDropdownForm = /*#__PURE__*/extend({
20
+ name: NAME_DROPDOWN_FORM,
21
+ functional: true,
22
+ props,
23
+ render(h, _ref) {
24
+ let {
25
+ props,
26
+ data,
27
+ listeners,
28
+ children
29
+ } = _ref;
30
+ return h('li', mergeData(omit(data, ['attrs', 'on']), {
31
+ attrs: {
32
+ role: 'presentation'
33
+ }
34
+ }), [h(BForm, {
35
+ staticClass: 'b-dropdown-form',
36
+ class: [props.formClass, {
37
+ disabled: props.disabled
38
+ }],
39
+ props,
40
+ attrs: {
41
+ ...(data.attrs || {}),
42
+ disabled: props.disabled,
43
+ // Tab index of -1 for keyboard navigation
44
+ tabindex: props.disabled ? null : '-1'
45
+ },
46
+ on: listeners,
47
+ ref: 'form'
48
+ }, children)]);
49
+ }
50
+ });
51
+
52
+ export { BDropdownForm, props };