@gitlab/ui 132.0.1 → 132.0.3

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 (427) 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/url_utils.js +56 -0
  215. package/dist/utils/use_fake_date.js +29 -0
  216. package/dist/utils/use_mock_intersection_observer.js +105 -0
  217. package/dist/utils/utils.js +205 -0
  218. package/dist/utils/vue_utils.js +57 -0
  219. package/dist/utils.js +5 -0
  220. package/dist/vendor/bootstrap-vue/src/bv-config.js +8 -0
  221. package/dist/vendor/bootstrap-vue/src/components/button/button-close.js +81 -0
  222. package/dist/vendor/bootstrap-vue/src/components/button/button.js +204 -0
  223. package/dist/vendor/bootstrap-vue/src/components/button/index.js +2 -0
  224. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +44 -0
  225. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +59 -0
  226. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +98 -0
  227. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +63 -0
  228. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +108 -0
  229. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +97 -0
  230. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +60 -0
  231. package/dist/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +270 -0
  232. package/dist/vendor/bootstrap-vue/src/components/dropdown/index.js +8 -0
  233. package/dist/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +80 -0
  234. package/dist/vendor/bootstrap-vue/src/components/form/form-text.js +55 -0
  235. package/dist/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +80 -0
  236. package/dist/vendor/bootstrap-vue/src/components/form/form.js +56 -0
  237. package/dist/vendor/bootstrap-vue/src/components/form/index.js +4 -0
  238. package/dist/vendor/bootstrap-vue/src/components/form-group/form-group.js +347 -0
  239. package/dist/vendor/bootstrap-vue/src/components/form-group/index.js +1 -0
  240. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +56 -0
  241. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +47 -0
  242. package/dist/vendor/bootstrap-vue/src/components/form-select/form-select.js +154 -0
  243. package/dist/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +63 -0
  244. package/dist/vendor/bootstrap-vue/src/components/form-select/index.js +3 -0
  245. package/dist/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +236 -0
  246. package/dist/vendor/bootstrap-vue/src/components/form-textarea/index.js +1 -0
  247. package/dist/vendor/bootstrap-vue/src/components/layout/col.js +155 -0
  248. package/dist/vendor/bootstrap-vue/src/components/layout/form-row.js +34 -0
  249. package/dist/vendor/bootstrap-vue/src/components/layout/index.js +2 -0
  250. package/dist/vendor/bootstrap-vue/src/components/link/index.js +1 -0
  251. package/dist/vendor/bootstrap-vue/src/components/link/link.js +283 -0
  252. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.js +21 -0
  253. package/dist/vendor/bootstrap-vue/src/components/modal/helpers/modal-manager.js +212 -0
  254. package/dist/vendor/bootstrap-vue/src/components/modal/index.js +1 -0
  255. package/dist/vendor/bootstrap-vue/src/components/modal/modal.js +1059 -0
  256. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover-template.js +55 -0
  257. package/dist/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover.js +31 -0
  258. package/dist/vendor/bootstrap-vue/src/components/popover/index.js +1 -0
  259. package/dist/vendor/bootstrap-vue/src/components/popover/popover.js +64 -0
  260. package/dist/vendor/bootstrap-vue/src/components/table/helpers/constants.js +22 -0
  261. package/dist/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.js +64 -0
  262. package/dist/vendor/bootstrap-vue/src/components/table/helpers/filter-event.js +40 -0
  263. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-bottom-row.js +43 -0
  264. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +86 -0
  265. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +57 -0
  266. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-colgroup.js +32 -0
  267. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +101 -0
  268. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +292 -0
  269. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +169 -0
  270. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +51 -0
  271. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +210 -0
  272. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +227 -0
  273. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +328 -0
  274. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +42 -0
  275. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +241 -0
  276. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +349 -0
  277. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +247 -0
  278. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +69 -0
  279. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +233 -0
  280. package/dist/vendor/bootstrap-vue/src/components/table/helpers/mixin-top-row.js +42 -0
  281. package/dist/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.js +86 -0
  282. package/dist/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +31 -0
  283. package/dist/vendor/bootstrap-vue/src/components/table/helpers/stringify-record-values.js +11 -0
  284. package/dist/vendor/bootstrap-vue/src/components/table/helpers/text-selection-active.js +14 -0
  285. package/dist/vendor/bootstrap-vue/src/components/table/index.js +9 -0
  286. package/dist/vendor/bootstrap-vue/src/components/table/table-lite.js +51 -0
  287. package/dist/vendor/bootstrap-vue/src/components/table/table-simple.js +44 -0
  288. package/dist/vendor/bootstrap-vue/src/components/table/table.js +67 -0
  289. package/dist/vendor/bootstrap-vue/src/components/table/tbody.js +116 -0
  290. package/dist/vendor/bootstrap-vue/src/components/table/td.js +204 -0
  291. package/dist/vendor/bootstrap-vue/src/components/table/tfoot.js +96 -0
  292. package/dist/vendor/bootstrap-vue/src/components/table/th.js +26 -0
  293. package/dist/vendor/bootstrap-vue/src/components/table/thead.js +99 -0
  294. package/dist/vendor/bootstrap-vue/src/components/table/tr.js +121 -0
  295. package/dist/vendor/bootstrap-vue/src/components/tabs/index.js +2 -0
  296. package/dist/vendor/bootstrap-vue/src/components/tabs/tab.js +238 -0
  297. package/dist/vendor/bootstrap-vue/src/components/tabs/tabs.js +690 -0
  298. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +278 -0
  299. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +125 -0
  300. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +932 -0
  301. package/dist/vendor/bootstrap-vue/src/components/tooltip/index.js +1 -0
  302. package/dist/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +337 -0
  303. package/dist/vendor/bootstrap-vue/src/components/transition/bv-transition.js +118 -0
  304. package/dist/vendor/bootstrap-vue/src/components/transporter/transporter.js +220 -0
  305. package/dist/vendor/bootstrap-vue/src/constants/components.js +55 -0
  306. package/dist/vendor/bootstrap-vue/src/constants/config.js +11 -0
  307. package/dist/vendor/bootstrap-vue/src/constants/env.js +36 -0
  308. package/dist/vendor/bootstrap-vue/src/constants/events.js +56 -0
  309. package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +11 -0
  310. package/dist/vendor/bootstrap-vue/src/constants/popper.js +10 -0
  311. package/dist/vendor/bootstrap-vue/src/constants/props.js +24 -0
  312. package/dist/vendor/bootstrap-vue/src/constants/regex.js +35 -0
  313. package/dist/vendor/bootstrap-vue/src/constants/safe-types.js +15 -0
  314. package/dist/vendor/bootstrap-vue/src/constants/slots.js +36 -0
  315. package/dist/vendor/bootstrap-vue/src/directives/modal/index.js +1 -0
  316. package/dist/vendor/bootstrap-vue/src/directives/modal/modal.js +112 -0
  317. package/dist/vendor/bootstrap-vue/src/directives/tooltip/index.js +1 -0
  318. package/dist/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +267 -0
  319. package/dist/vendor/bootstrap-vue/src/directives/visible/index.js +1 -0
  320. package/dist/vendor/bootstrap-vue/src/directives/visible/visible.js +187 -0
  321. package/dist/vendor/bootstrap-vue/src/mixins/attrs.js +5 -0
  322. package/dist/vendor/bootstrap-vue/src/mixins/click-out.js +54 -0
  323. package/dist/vendor/bootstrap-vue/src/mixins/dropdown.js +470 -0
  324. package/dist/vendor/bootstrap-vue/src/mixins/focus-in.js +46 -0
  325. package/dist/vendor/bootstrap-vue/src/mixins/form-control.js +73 -0
  326. package/dist/vendor/bootstrap-vue/src/mixins/form-custom.js +26 -0
  327. package/dist/vendor/bootstrap-vue/src/mixins/form-options.js +91 -0
  328. package/dist/vendor/bootstrap-vue/src/mixins/form-selection.js +62 -0
  329. package/dist/vendor/bootstrap-vue/src/mixins/form-size.js +26 -0
  330. package/dist/vendor/bootstrap-vue/src/mixins/form-state.js +50 -0
  331. package/dist/vendor/bootstrap-vue/src/mixins/form-text.js +293 -0
  332. package/dist/vendor/bootstrap-vue/src/mixins/form-validity.js +50 -0
  333. package/dist/vendor/bootstrap-vue/src/mixins/has-listener.js +29 -0
  334. package/dist/vendor/bootstrap-vue/src/mixins/id.js +57 -0
  335. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-document.js +62 -0
  336. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-root.js +120 -0
  337. package/dist/vendor/bootstrap-vue/src/mixins/listen-on-window.js +62 -0
  338. package/dist/vendor/bootstrap-vue/src/mixins/listeners.js +25 -0
  339. package/dist/vendor/bootstrap-vue/src/mixins/model.js +10 -0
  340. package/dist/vendor/bootstrap-vue/src/mixins/normalize-slot.js +30 -0
  341. package/dist/vendor/bootstrap-vue/src/mixins/scoped-style.js +18 -0
  342. package/dist/vendor/bootstrap-vue/src/mixins/use-parent.js +14 -0
  343. package/dist/vendor/bootstrap-vue/src/utils/array.js +27 -0
  344. package/dist/vendor/bootstrap-vue/src/utils/bv-event.class.js +60 -0
  345. package/dist/vendor/bootstrap-vue/src/utils/cache.js +60 -0
  346. package/dist/vendor/bootstrap-vue/src/utils/clone-deep.js +18 -0
  347. package/dist/vendor/bootstrap-vue/src/utils/config-set.js +86 -0
  348. package/dist/vendor/bootstrap-vue/src/utils/config.js +71 -0
  349. package/dist/vendor/bootstrap-vue/src/utils/create-new-child-component.js +133 -0
  350. package/dist/vendor/bootstrap-vue/src/utils/css-escape.js +70 -0
  351. package/dist/vendor/bootstrap-vue/src/utils/dom.js +298 -0
  352. package/dist/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +28 -0
  353. package/dist/vendor/bootstrap-vue/src/utils/env.js +16 -0
  354. package/dist/vendor/bootstrap-vue/src/utils/events.js +78 -0
  355. package/dist/vendor/bootstrap-vue/src/utils/get-event-root.js +5 -0
  356. package/dist/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +3 -0
  357. package/dist/vendor/bootstrap-vue/src/utils/get-scope-id.js +9 -0
  358. package/dist/vendor/bootstrap-vue/src/utils/get.js +63 -0
  359. package/dist/vendor/bootstrap-vue/src/utils/html.js +16 -0
  360. package/dist/vendor/bootstrap-vue/src/utils/identity.js +3 -0
  361. package/dist/vendor/bootstrap-vue/src/utils/inspect.js +35 -0
  362. package/dist/vendor/bootstrap-vue/src/utils/locale.js +18 -0
  363. package/dist/vendor/bootstrap-vue/src/utils/loose-equal.js +59 -0
  364. package/dist/vendor/bootstrap-vue/src/utils/loose-index-of.js +13 -0
  365. package/dist/vendor/bootstrap-vue/src/utils/math.js +9 -0
  366. package/dist/vendor/bootstrap-vue/src/utils/memoize.js +14 -0
  367. package/dist/vendor/bootstrap-vue/src/utils/model.js +33 -0
  368. package/dist/vendor/bootstrap-vue/src/utils/noop.js +3 -0
  369. package/dist/vendor/bootstrap-vue/src/utils/normalize-slot.js +51 -0
  370. package/dist/vendor/bootstrap-vue/src/utils/number.js +23 -0
  371. package/dist/vendor/bootstrap-vue/src/utils/object.js +72 -0
  372. package/dist/vendor/bootstrap-vue/src/utils/observe-dom.js +76 -0
  373. package/dist/vendor/bootstrap-vue/src/utils/on-instance-destroy.js +22 -0
  374. package/dist/vendor/bootstrap-vue/src/utils/plugins.js +124 -0
  375. package/dist/vendor/bootstrap-vue/src/utils/props.js +67 -0
  376. package/dist/vendor/bootstrap-vue/src/utils/router.js +150 -0
  377. package/dist/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +14 -0
  378. package/dist/vendor/bootstrap-vue/src/utils/stable-sort.js +28 -0
  379. package/dist/vendor/bootstrap-vue/src/utils/string.js +47 -0
  380. package/dist/vendor/bootstrap-vue/src/utils/stringify-object-values.js +31 -0
  381. package/dist/vendor/bootstrap-vue/src/utils/warn.js +45 -0
  382. package/dist/vendor/bootstrap-vue/src/vue.js +55 -0
  383. package/package.json +4 -3
  384. package/src/components/base/link/link.vue +2 -2
  385. package/src/utils/url_utils.js +66 -0
  386. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +5 -2
  387. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +16 -4
  388. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +31 -8
  389. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +15 -4
  390. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +32 -8
  391. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +2 -2
  392. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +35 -8
  393. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +35 -8
  394. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +2 -2
  395. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +4 -2
  396. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +9 -3
  397. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.js +16 -9
  398. package/src/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +10 -3
  399. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +26 -7
  400. package/src/vendor/bootstrap-vue/src/components/layout/col.js +2 -2
  401. package/src/vendor/bootstrap-vue/src/components/modal/modal.js +2 -2
  402. package/src/vendor/bootstrap-vue/src/components/popover/popover.js +23 -7
  403. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +5 -2
  404. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +10 -3
  405. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +25 -6
  406. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +20 -5
  407. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +11 -4
  408. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +27 -7
  409. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +21 -7
  410. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +72 -18
  411. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +6 -3
  412. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +72 -17
  413. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +18 -6
  414. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +7 -3
  415. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +27 -7
  416. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +21 -6
  417. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +2 -2
  418. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +36 -13
  419. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +10 -3
  420. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +8 -9
  421. package/src/vendor/bootstrap-vue/src/components/transition/bv-transition.js +20 -5
  422. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.js +22 -6
  423. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.js +1 -2
  424. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.js +1 -2
  425. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.js +1 -2
  426. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -1
  427. package/src/vendor/bootstrap-vue/src/utils/locale.js +1 -2
@@ -0,0 +1,349 @@
1
+ import { extend, REF_FOR_KEY } from '../../../vue';
2
+ import { EVENT_NAME_ROW_HOVERED, EVENT_NAME_ROW_UNHOVERED, EVENT_NAME_ROW_CLICKED } from '../../../constants/events';
3
+ import { PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING, PROP_TYPE_FUNCTION } from '../../../constants/props';
4
+ import { SLOT_NAME_ROW_DETAILS } from '../../../constants/slots';
5
+ import { useParentMixin } from '../../../mixins/use-parent';
6
+ import { get } from '../../../utils/get';
7
+ import { isFunction, isString, isUndefinedOrNull } from '../../../utils/inspect';
8
+ import { safeVueInstance } from '../../../utils/safe-vue-instance';
9
+ import { toString } from '../../../utils/string';
10
+ import { BTr } from '../tr';
11
+ import { BTd } from '../td';
12
+ import { BTh } from '../th';
13
+ import { FIELD_KEY_SHOW_DETAILS, FIELD_KEY_CELL_VARIANT, FIELD_KEY_ROW_VARIANT } from './constants';
14
+
15
+ // --- Props ---
16
+
17
+ const props = {
18
+ detailsTdClass: {
19
+ type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
20
+ required: false,
21
+ default: undefined
22
+ },
23
+ tbodyTrAttr: {
24
+ type: [PROP_TYPE_OBJECT, PROP_TYPE_FUNCTION],
25
+ required: false,
26
+ default: undefined
27
+ },
28
+ tbodyTrClass: {
29
+ type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING, PROP_TYPE_FUNCTION],
30
+ required: false,
31
+ default: undefined
32
+ }
33
+ };
34
+
35
+ // --- Mixin ---
36
+
37
+ // @vue/component
38
+ const tbodyRowMixin = extend({
39
+ mixins: [useParentMixin],
40
+ props,
41
+ methods: {
42
+ // Methods for computing classes, attributes and styles for table cells
43
+ getTdValues(item, key, tdValue, defaultValue) {
44
+ const {
45
+ bvParent
46
+ } = this;
47
+ if (tdValue) {
48
+ const value = get(item, key, '');
49
+ if (isFunction(tdValue)) {
50
+ return tdValue(value, key, item);
51
+ } else if (isString(tdValue) && isFunction(bvParent[tdValue])) {
52
+ return bvParent[tdValue](value, key, item);
53
+ }
54
+ return tdValue;
55
+ }
56
+ return defaultValue;
57
+ },
58
+ getThValues(item, key, thValue, type, defaultValue) {
59
+ const {
60
+ bvParent
61
+ } = this;
62
+ if (thValue) {
63
+ const value = get(item, key, '');
64
+ if (isFunction(thValue)) {
65
+ return thValue(value, key, item, type);
66
+ } else if (isString(thValue) && isFunction(bvParent[thValue])) {
67
+ return bvParent[thValue](value, key, item, type);
68
+ }
69
+ return thValue;
70
+ }
71
+ return defaultValue;
72
+ },
73
+ // Method to get the value for a field
74
+ getFormattedValue(item, field) {
75
+ const {
76
+ key
77
+ } = field;
78
+ const formatter = this.getFieldFormatter(key);
79
+ let value = get(item, key, null);
80
+ if (isFunction(formatter)) {
81
+ value = formatter(value, key, item);
82
+ }
83
+ return isUndefinedOrNull(value) ? '' : value;
84
+ },
85
+ // Factory function methods
86
+ toggleDetailsFactory(hasDetailsSlot, item) {
87
+ // Returns a function to toggle a row's details slot
88
+ return () => {
89
+ if (hasDetailsSlot) {
90
+ this.$set(item, FIELD_KEY_SHOW_DETAILS, !item[FIELD_KEY_SHOW_DETAILS]);
91
+ }
92
+ };
93
+ },
94
+ // Row event handlers
95
+ rowHovered(event) {
96
+ // `mouseenter` handler (non-bubbling)
97
+ // `this.tbodyRowEventStopped` from tbody mixin
98
+ if (!this.tbodyRowEventStopped(event)) {
99
+ // `this.emitTbodyRowEvent` from tbody mixin
100
+ this.emitTbodyRowEvent(EVENT_NAME_ROW_HOVERED, event);
101
+ }
102
+ },
103
+ rowUnhovered(event) {
104
+ // `mouseleave` handler (non-bubbling)
105
+ // `this.tbodyRowEventStopped` from tbody mixin
106
+ if (!this.tbodyRowEventStopped(event)) {
107
+ // `this.emitTbodyRowEvent` from tbody mixin
108
+ this.emitTbodyRowEvent(EVENT_NAME_ROW_UNHOVERED, event);
109
+ }
110
+ },
111
+ // Renders a TD or TH for a row's field
112
+ renderTbodyRowCell(field, colIndex, item, rowIndex) {
113
+ const {
114
+ isStacked
115
+ } = this;
116
+ const {
117
+ key,
118
+ label,
119
+ isRowHeader
120
+ } = field;
121
+ const h = this.$createElement;
122
+ const hasDetailsSlot = this.hasNormalizedSlot(SLOT_NAME_ROW_DETAILS);
123
+ const formatted = this.getFormattedValue(item, field);
124
+ const stickyColumn = !isStacked && (this.isResponsive || this.stickyHeader) && field.stickyColumn;
125
+ // We only uses the helper components for sticky columns to
126
+ // improve performance of BTable/BTableLite by reducing the
127
+ // total number of vue instances created during render
128
+ const cellTag = stickyColumn ? isRowHeader ? BTh : BTd : isRowHeader ? 'th' : 'td';
129
+ const cellVariant = item[FIELD_KEY_CELL_VARIANT] && item[FIELD_KEY_CELL_VARIANT][key] ? item[FIELD_KEY_CELL_VARIANT][key] : field.variant || null;
130
+ const data = {
131
+ // For the Vue key, we concatenate the column index and
132
+ // field key (as field keys could be duplicated)
133
+ // TODO: Although we do prevent duplicate field keys...
134
+ // So we could change this to: `row-${rowIndex}-cell-${key}`
135
+ class: [field.class ? field.class : '', this.getTdValues(item, key, field.tdClass, '')],
136
+ props: {},
137
+ attrs: {
138
+ 'aria-colindex': String(colIndex + 1),
139
+ ...(isRowHeader ? this.getThValues(item, key, field.thAttr, 'row', {}) : this.getTdValues(item, key, field.tdAttr, {}))
140
+ },
141
+ key: `row-${rowIndex}-cell-${colIndex}-${key}`
142
+ };
143
+ if (stickyColumn) {
144
+ // We are using the helper BTd or BTh
145
+ data.props = {
146
+ stackedHeading: isStacked ? label : null,
147
+ stickyColumn: true,
148
+ variant: cellVariant
149
+ };
150
+ } else {
151
+ // Using native TD or TH element, so we need to
152
+ // add in the attributes and variant class
153
+ data.attrs['data-label'] = isStacked && !isUndefinedOrNull(label) ? toString(label) : null;
154
+ data.attrs.role = isRowHeader ? 'rowheader' : 'cell';
155
+ data.attrs.scope = isRowHeader ? 'row' : null;
156
+ // Add in the variant class
157
+ if (cellVariant) {
158
+ data.class.push(`${this.dark ? 'bg' : 'table'}-${cellVariant}`);
159
+ }
160
+ }
161
+ const slotScope = {
162
+ item,
163
+ index: rowIndex,
164
+ field,
165
+ unformatted: get(item, key, ''),
166
+ value: formatted,
167
+ toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item),
168
+ detailsShowing: Boolean(item[FIELD_KEY_SHOW_DETAILS])
169
+ };
170
+ // If table supports selectable mode, then add in the following scope
171
+ // this.supportsSelectableRows will be undefined if mixin isn't loaded
172
+ if (safeVueInstance(this).supportsSelectableRows) {
173
+ slotScope.rowSelected = this.isRowSelected(rowIndex);
174
+ slotScope.selectRow = () => this.selectRow(rowIndex);
175
+ slotScope.unselectRow = () => this.unselectRow(rowIndex);
176
+ }
177
+
178
+ // The new `v-slot` syntax doesn't like a slot name starting with
179
+ // a square bracket and if using in-document HTML templates, the
180
+ // v-slot attributes are lower-cased by the browser.
181
+ // Switched to round bracket syntax to prevent confusion with
182
+ // dynamic slot name syntax.
183
+ // We look for slots in this order: `cell(${key})`, `cell(${key.toLowerCase()})`, 'cell()'
184
+ // Slot names are now cached by mixin tbody in `this.$_bodyFieldSlotNameCache`
185
+ // Will be `null` if no slot (or fallback slot) exists
186
+ const slotName = this.$_bodyFieldSlotNameCache[key];
187
+ let $childNodes = slotName ? this.normalizeSlot(slotName, slotScope) : toString(formatted);
188
+ if (this.isStacked) {
189
+ // We wrap in a DIV to ensure rendered as a single cell when visually stacked!
190
+ $childNodes = [h('div', [$childNodes])];
191
+ }
192
+
193
+ // Render either a td or th cell
194
+ return h(cellTag, data, [$childNodes]);
195
+ },
196
+ // Renders an item's row (or rows if details supported)
197
+ renderTbodyRow(item, rowIndex) {
198
+ const {
199
+ computedFields: fields,
200
+ striped,
201
+ primaryKey,
202
+ currentPage,
203
+ perPage,
204
+ tbodyTrClass,
205
+ tbodyTrAttr,
206
+ hasSelectableRowClick
207
+ } = safeVueInstance(this);
208
+ const h = this.$createElement;
209
+ const hasDetailsSlot = this.hasNormalizedSlot(SLOT_NAME_ROW_DETAILS);
210
+ const rowShowDetails = item[FIELD_KEY_SHOW_DETAILS] && hasDetailsSlot;
211
+ const hasRowClickHandler = this.$listeners[EVENT_NAME_ROW_CLICKED] || hasSelectableRowClick;
212
+
213
+ // We can return more than one TR if rowDetails enabled
214
+ const $rows = [];
215
+
216
+ // Details ID needed for `aria-details` when details showing
217
+ // We set it to `null` when not showing so that attribute
218
+ // does not appear on the element
219
+ const detailsId = rowShowDetails ? this.safeId(`_details_${rowIndex}_`) : null;
220
+
221
+ // For each item data field in row
222
+ const $tds = fields.map((field, colIndex) => {
223
+ return this.renderTbodyRowCell(field, colIndex, item, rowIndex);
224
+ });
225
+
226
+ // Calculate the row number in the dataset (indexed from 1)
227
+ let ariaRowIndex = null;
228
+ if (currentPage && perPage && perPage > 0) {
229
+ ariaRowIndex = String((currentPage - 1) * perPage + rowIndex + 1);
230
+ }
231
+
232
+ // Create a unique :key to help ensure that sub components are re-rendered rather than
233
+ // re-used, which can cause issues. If a primary key is not provided we use the rendered
234
+ // rows index within the tbody.
235
+ // See: https://github.com/bootstrap-vue/bootstrap-vue/issues/2410
236
+ const primaryKeyValue = toString(get(item, primaryKey)) || null;
237
+ const rowKey = primaryKeyValue || toString(rowIndex);
238
+
239
+ // If primary key is provided, use it to generate a unique ID on each tbody > tr
240
+ // In the format of '{tableId}__row_{primaryKeyValue}'
241
+ const rowId = primaryKeyValue ? this.safeId(`_row_${primaryKeyValue}`) : null;
242
+
243
+ // Selectable classes and attributes
244
+ const selectableClasses = safeVueInstance(this).selectableRowClasses ? this.selectableRowClasses(rowIndex) : {};
245
+ const selectableAttrs = safeVueInstance(this).selectableRowAttrs ? this.selectableRowAttrs(rowIndex) : {};
246
+
247
+ // Additional classes and attributes
248
+ const userTrClasses = isFunction(tbodyTrClass) ? tbodyTrClass(item, 'row') : tbodyTrClass;
249
+ const userTrAttrs = isFunction(tbodyTrAttr) ? /* istanbul ignore next */tbodyTrAttr(item, 'row') : tbodyTrAttr;
250
+
251
+ // Add the item row
252
+ $rows.push(h(BTr, {
253
+ class: [userTrClasses, selectableClasses, rowShowDetails ? 'b-table-has-details' : ''],
254
+ props: {
255
+ variant: item[FIELD_KEY_ROW_VARIANT] || null
256
+ },
257
+ attrs: {
258
+ id: rowId,
259
+ ...userTrAttrs,
260
+ // Users cannot override the following attributes
261
+ tabindex: hasRowClickHandler ? '0' : null,
262
+ 'data-pk': primaryKeyValue || null,
263
+ 'aria-details': detailsId,
264
+ 'aria-owns': detailsId,
265
+ 'aria-rowindex': ariaRowIndex,
266
+ ...selectableAttrs
267
+ },
268
+ on: {
269
+ // Note: These events are not A11Y friendly!
270
+ mouseenter: this.rowHovered,
271
+ mouseleave: this.rowUnhovered
272
+ },
273
+ key: `__b-table-row-${rowKey}__`,
274
+ ref: 'item-rows',
275
+ [REF_FOR_KEY]: true
276
+ }, $tds));
277
+
278
+ // Row Details slot
279
+ if (rowShowDetails) {
280
+ const detailsScope = {
281
+ item,
282
+ index: rowIndex,
283
+ fields,
284
+ toggleDetails: this.toggleDetailsFactory(hasDetailsSlot, item)
285
+ };
286
+ // If table supports selectable mode, then add in the following scope
287
+ // this.supportsSelectableRows will be undefined if mixin isn't loaded
288
+ if (safeVueInstance(this).supportsSelectableRows) {
289
+ detailsScope.rowSelected = this.isRowSelected(rowIndex);
290
+ detailsScope.selectRow = () => this.selectRow(rowIndex);
291
+ detailsScope.unselectRow = () => this.unselectRow(rowIndex);
292
+ }
293
+
294
+ // Render the details slot in a TD
295
+ const $details = h(BTd, {
296
+ props: {
297
+ colspan: fields.length
298
+ },
299
+ class: this.detailsTdClass
300
+ }, [this.normalizeSlot(SLOT_NAME_ROW_DETAILS, detailsScope)]);
301
+
302
+ // Add a hidden row to keep table row striping consistent when details showing
303
+ // Only added if the table is striped
304
+ if (striped) {
305
+ $rows.push(
306
+ // We don't use `BTr` here as we don't need the extra functionality
307
+ h('tr', {
308
+ staticClass: 'd-none',
309
+ attrs: {
310
+ 'aria-hidden': 'true',
311
+ role: 'presentation'
312
+ },
313
+ key: `__b-table-details-stripe__${rowKey}`
314
+ }));
315
+ }
316
+
317
+ // Add the actual details row
318
+ const userDetailsTrClasses = isFunction(this.tbodyTrClass) ? /* istanbul ignore next */this.tbodyTrClass(item, SLOT_NAME_ROW_DETAILS) : this.tbodyTrClass;
319
+ const userDetailsTrAttrs = isFunction(this.tbodyTrAttr) ? /* istanbul ignore next */this.tbodyTrAttr(item, SLOT_NAME_ROW_DETAILS) : this.tbodyTrAttr;
320
+ $rows.push(h(BTr, {
321
+ staticClass: 'b-table-details',
322
+ class: [userDetailsTrClasses],
323
+ props: {
324
+ variant: item[FIELD_KEY_ROW_VARIANT] || null
325
+ },
326
+ attrs: {
327
+ ...userDetailsTrAttrs,
328
+ // Users cannot override the following attributes
329
+ id: detailsId,
330
+ tabindex: '-1'
331
+ },
332
+ key: `__b-table-details__${rowKey}`
333
+ }, [$details]));
334
+ } else if (hasDetailsSlot) {
335
+ // Only add the placeholder if a the table has a row-details slot defined (but not shown)
336
+ $rows.push(h());
337
+ if (striped) {
338
+ // Add extra placeholder if table is striped
339
+ $rows.push(h());
340
+ }
341
+ }
342
+
343
+ // Return the row(s)
344
+ return $rows;
345
+ }
346
+ }
347
+ });
348
+
349
+ export { props, tbodyRowMixin };
@@ -0,0 +1,247 @@
1
+ import { extend } from '../../../vue';
2
+ import { EVENT_NAME_ROW_CLICKED, EVENT_NAME_ROW_MIDDLE_CLICKED, EVENT_NAME_ROW_CONTEXTMENU, EVENT_NAME_ROW_DBLCLICKED } from '../../../constants/events';
3
+ import { CODE_ENTER, CODE_SPACE, CODE_UP, CODE_DOWN, CODE_HOME, CODE_END } from '../../../constants/key-codes';
4
+ import { PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING } from '../../../constants/props';
5
+ import { from } from '../../../utils/array';
6
+ import { isElement, closest, isActiveElement, attemptFocus } from '../../../utils/dom';
7
+ import { safeVueInstance } from '../../../utils/safe-vue-instance';
8
+ import { stopEvent } from '../../../utils/events';
9
+ import { sortKeys } from '../../../utils/object';
10
+ import { pluckProps } from '../../../utils/props';
11
+ import { props as props$1, BTbody } from '../tbody';
12
+ import { filterEvent } from './filter-event';
13
+ import { textSelectionActive } from './text-selection-active';
14
+ import { props as props$2, tbodyRowMixin } from './mixin-tbody-row';
15
+
16
+ // --- Helper methods ---
17
+
18
+ const getCellSlotName = value => `cell(${value || ''})`;
19
+
20
+ // --- Props ---
21
+
22
+ const props = sortKeys({
23
+ ...props$1,
24
+ ...props$2,
25
+ tbodyClass: {
26
+ type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
27
+ required: false,
28
+ default: undefined
29
+ }
30
+ });
31
+
32
+ // --- Mixin ---
33
+
34
+ // @vue/component
35
+ const tbodyMixin = extend({
36
+ mixins: [tbodyRowMixin],
37
+ props,
38
+ beforeDestroy() {
39
+ this.$_bodyFieldSlotNameCache = null;
40
+ },
41
+ methods: {
42
+ // Returns all the item TR elements (excludes detail and spacer rows)
43
+ // `this.$refs['item-rows']` is an array of item TR components/elements
44
+ // Rows should all be `<b-tr>` components, but we map to TR elements
45
+ // Also note that `this.$refs['item-rows']` may not always be in document order
46
+ getTbodyTrs() {
47
+ const {
48
+ $refs
49
+ } = this;
50
+ const tbody = $refs.tbody ? $refs.tbody.$el || $refs.tbody : null;
51
+ const trs = ($refs['item-rows'] || []).map(tr => tr.$el || tr);
52
+ return tbody && tbody.children && tbody.children.length > 0 && trs && trs.length > 0 ? from(tbody.children).filter(tr => trs.includes(tr)) : /* istanbul ignore next */[];
53
+ },
54
+ // Returns index of a particular TBODY item TR
55
+ // We set `true` on closest to include self in result
56
+ getTbodyTrIndex(el) {
57
+ /* istanbul ignore next: should not normally happen */
58
+ if (!isElement(el)) {
59
+ return -1;
60
+ }
61
+ const tr = el.tagName === 'TR' ? el : closest('tr', el, true);
62
+ return tr ? this.getTbodyTrs().indexOf(tr) : -1;
63
+ },
64
+ // Emits a row event, with the item object, row index and original event
65
+ emitTbodyRowEvent(type, event) {
66
+ if (type && event && event.target) {
67
+ const rowIndex = this.getTbodyTrIndex(event.target);
68
+ if (rowIndex > -1) {
69
+ // The array of TRs correlate to the `computedItems` array
70
+ const item = this.computedItems[rowIndex];
71
+ if (this.hasListener(type)) {
72
+ this.$emit(type, item, rowIndex, event);
73
+ }
74
+ // Call selectionHandler directly if selectable (defined in mixin-selectable.js)
75
+ if (type === EVENT_NAME_ROW_CLICKED && this.hasSelectableRowClick) {
76
+ this.selectionHandler(item, rowIndex, event);
77
+ }
78
+ }
79
+ }
80
+ },
81
+ tbodyRowEventStopped(event) {
82
+ return this.stopIfBusy && this.stopIfBusy(event);
83
+ },
84
+ // Delegated row event handlers
85
+ onTbodyRowKeydown(event) {
86
+ // Keyboard navigation and row click emulation
87
+ const {
88
+ target,
89
+ keyCode
90
+ } = event;
91
+ if (this.tbodyRowEventStopped(event) || target.tagName !== 'TR' || !isActiveElement(target) || target.tabIndex !== 0) {
92
+ // Early exit if not an item row TR
93
+ return;
94
+ }
95
+ if ([CODE_ENTER, CODE_SPACE].includes(keyCode)) {
96
+ // Emulated click for keyboard users, transfer to click handler
97
+ stopEvent(event);
98
+ this.onTBodyRowClicked(event);
99
+ } else if ([CODE_UP, CODE_DOWN, CODE_HOME, CODE_END].includes(keyCode)) {
100
+ // Keyboard navigation
101
+ const rowIndex = this.getTbodyTrIndex(target);
102
+ if (rowIndex > -1) {
103
+ stopEvent(event);
104
+ const trs = this.getTbodyTrs();
105
+ const shift = event.shiftKey;
106
+ if (keyCode === CODE_HOME || shift && keyCode === CODE_UP) {
107
+ // Focus first row
108
+ attemptFocus(trs[0]);
109
+ } else if (keyCode === CODE_END || shift && keyCode === CODE_DOWN) {
110
+ // Focus last row
111
+ attemptFocus(trs[trs.length - 1]);
112
+ } else if (keyCode === CODE_UP && rowIndex > 0) {
113
+ // Focus previous row
114
+ attemptFocus(trs[rowIndex - 1]);
115
+ } else if (keyCode === CODE_DOWN && rowIndex < trs.length - 1) {
116
+ // Focus next row
117
+ attemptFocus(trs[rowIndex + 1]);
118
+ }
119
+ }
120
+ }
121
+ },
122
+ onTBodyRowClicked(event) {
123
+ const {
124
+ $refs
125
+ } = this;
126
+ const tbody = $refs.tbody ? $refs.tbody.$el || $refs.tbody : null;
127
+ // Don't emit event when the table is busy, the user clicked
128
+ // on a non-disabled control or is selecting text
129
+ if (this.tbodyRowEventStopped(event) || filterEvent(event) || textSelectionActive(tbody || this.$el)) {
130
+ return;
131
+ }
132
+ this.emitTbodyRowEvent(EVENT_NAME_ROW_CLICKED, event);
133
+ },
134
+ onTbodyRowMiddleMouseRowClicked(event) {
135
+ if (!this.tbodyRowEventStopped(event) && event.which === 2) {
136
+ this.emitTbodyRowEvent(EVENT_NAME_ROW_MIDDLE_CLICKED, event);
137
+ }
138
+ },
139
+ onTbodyRowContextmenu(event) {
140
+ if (!this.tbodyRowEventStopped(event)) {
141
+ this.emitTbodyRowEvent(EVENT_NAME_ROW_CONTEXTMENU, event);
142
+ }
143
+ },
144
+ onTbodyRowDblClicked(event) {
145
+ if (!this.tbodyRowEventStopped(event) && !filterEvent(event)) {
146
+ this.emitTbodyRowEvent(EVENT_NAME_ROW_DBLCLICKED, event);
147
+ }
148
+ },
149
+ // Render the tbody element and children
150
+ // Note:
151
+ // Row hover handlers are handled by the tbody-row mixin
152
+ // As mouseenter/mouseleave events do not bubble
153
+ renderTbody() {
154
+ const {
155
+ computedItems: items,
156
+ renderBusy,
157
+ renderTopRow,
158
+ renderEmpty,
159
+ renderBottomRow,
160
+ hasSelectableRowClick
161
+ } = safeVueInstance(this);
162
+ const h = this.$createElement;
163
+ const hasRowClickHandler = this.hasListener(EVENT_NAME_ROW_CLICKED) || hasSelectableRowClick;
164
+
165
+ // Prepare the tbody rows
166
+ const $rows = [];
167
+
168
+ // Add the item data rows or the busy slot
169
+ const $busy = renderBusy ? renderBusy() : null;
170
+ if ($busy) {
171
+ // If table is busy and a busy slot, then return only the busy "row" indicator
172
+ $rows.push($busy);
173
+ } else {
174
+ // Table isn't busy, or we don't have a busy slot
175
+
176
+ // Create a slot cache for improved performance when looking up cell slot names
177
+ // Values will be keyed by the field's `key` and will store the slot's name
178
+ // Slots could be dynamic (i.e. `v-if`), so we must compute on each render
179
+ // Used by tbody-row mixin render helper
180
+ const cache = {};
181
+ let defaultSlotName = getCellSlotName();
182
+ defaultSlotName = this.hasNormalizedSlot(defaultSlotName) ? defaultSlotName : null;
183
+ this.computedFields.forEach(field => {
184
+ const {
185
+ key
186
+ } = field;
187
+ const slotName = getCellSlotName(key);
188
+ const lowercaseSlotName = getCellSlotName(key.toLowerCase());
189
+ cache[key] = this.hasNormalizedSlot(slotName) ? slotName : this.hasNormalizedSlot(lowercaseSlotName) ? /* istanbul ignore next */lowercaseSlotName : defaultSlotName;
190
+ });
191
+ // Created as a non-reactive property so to not trigger component updates
192
+ // Must be a fresh object each render
193
+ this.$_bodyFieldSlotNameCache = cache;
194
+
195
+ // Add static top row slot (hidden in visibly stacked mode
196
+ // as we can't control `data-label` attr)
197
+ $rows.push(renderTopRow ? renderTopRow() : h());
198
+
199
+ // Render the rows
200
+ items.forEach((item, rowIndex) => {
201
+ // Render the individual item row (rows if details slot)
202
+ $rows.push(this.renderTbodyRow(item, rowIndex));
203
+ });
204
+
205
+ // Empty items / empty filtered row slot (only shows if `items.length < 1`)
206
+ $rows.push(renderEmpty ? renderEmpty() : h());
207
+
208
+ // Static bottom row slot (hidden in visibly stacked mode
209
+ // as we can't control `data-label` attr)
210
+ $rows.push(renderBottomRow ? renderBottomRow() : h());
211
+ }
212
+
213
+ // Note: these events will only emit if a listener is registered
214
+ const handlers = {
215
+ auxclick: this.onTbodyRowMiddleMouseRowClicked,
216
+ // TODO:
217
+ // Perhaps we do want to automatically prevent the
218
+ // default context menu from showing if there is a
219
+ // `row-contextmenu` listener registered
220
+ contextmenu: this.onTbodyRowContextmenu,
221
+ // The following event(s) is not considered A11Y friendly
222
+ dblclick: this.onTbodyRowDblClicked
223
+ // Hover events (`mouseenter`/`mouseleave`) are handled by `tbody-row` mixin
224
+ };
225
+ // Add in click/keydown listeners if needed
226
+ if (hasRowClickHandler) {
227
+ handlers.click = this.onTBodyRowClicked;
228
+ handlers.keydown = this.onTbodyRowKeydown;
229
+ }
230
+
231
+ // Assemble rows into the tbody
232
+ const $tbody = h(BTbody, {
233
+ class: this.tbodyClass || null,
234
+ props: pluckProps(props$1, this.$props),
235
+ // BTbody transfers all native event listeners to the root element
236
+ // TODO: Only set the handlers if the table is not busy
237
+ on: handlers,
238
+ ref: 'tbody'
239
+ }, $rows);
240
+
241
+ // Return the assembled tbody
242
+ return $tbody;
243
+ }
244
+ }
245
+ });
246
+
247
+ export { props, tbodyMixin };
@@ -0,0 +1,69 @@
1
+ import { extend } from '../../../vue';
2
+ import { PROP_TYPE_BOOLEAN, PROP_TYPE_STRING, PROP_TYPE_ARRAY, PROP_TYPE_OBJECT } from '../../../constants/props';
3
+ import { SLOT_NAME_CUSTOM_FOOT } from '../../../constants/slots';
4
+ import { BTfoot } from '../tfoot';
5
+
6
+ // --- Props ---
7
+
8
+ const props = {
9
+ footClone: {
10
+ type: PROP_TYPE_BOOLEAN,
11
+ required: false,
12
+ default: false
13
+ },
14
+ // Any Bootstrap theme variant (or custom)
15
+ // Falls back to `headRowVariant`
16
+ footRowVariant: {
17
+ type: PROP_TYPE_STRING,
18
+ required: false,
19
+ default: undefined
20
+ },
21
+ // 'dark', 'light', or `null` (or custom)
22
+ footVariant: {
23
+ type: PROP_TYPE_STRING,
24
+ required: false,
25
+ default: undefined
26
+ },
27
+ tfootClass: {
28
+ type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
29
+ required: false,
30
+ default: undefined
31
+ },
32
+ tfootTrClass: {
33
+ type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING],
34
+ required: false,
35
+ default: undefined
36
+ }
37
+ };
38
+
39
+ // --- Mixin ---
40
+
41
+ // @vue/component
42
+ const tfootMixin = extend({
43
+ props,
44
+ methods: {
45
+ renderTFootCustom() {
46
+ const h = this.$createElement;
47
+ if (this.hasNormalizedSlot(SLOT_NAME_CUSTOM_FOOT)) {
48
+ return h(BTfoot, {
49
+ class: this.tfootClass || null,
50
+ props: {
51
+ footVariant: this.footVariant || this.headVariant || null
52
+ },
53
+ key: 'bv-tfoot-custom'
54
+ }, this.normalizeSlot(SLOT_NAME_CUSTOM_FOOT, {
55
+ items: this.computedItems.slice(),
56
+ fields: this.computedFields.slice(),
57
+ columns: this.computedFields.length
58
+ }));
59
+ }
60
+ return h();
61
+ },
62
+ renderTfoot() {
63
+ // Passing true to renderThead will make it render a tfoot
64
+ return this.footClone ? this.renderThead(true) : this.renderTFootCustom();
65
+ }
66
+ }
67
+ });
68
+
69
+ export { props, tfootMixin };