@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,292 @@
1
+ import { extend } from '../../../vue';
2
+ import { NAME_TABLE } from '../../../constants/components';
3
+ import { EVENT_NAME_FILTERED } from '../../../constants/events';
4
+ import { PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING, PROP_TYPE_REG_EXP, PROP_TYPE_NUMBER, PROP_TYPE_FUNCTION } from '../../../constants/props';
5
+ import { RX_SPACES, RX_DIGITS } from '../../../constants/regex';
6
+ import { concat } from '../../../utils/array';
7
+ import { cloneDeep } from '../../../utils/clone-deep';
8
+ import { identity } from '../../../utils/identity';
9
+ import { isFunction, isString, isRegExp } from '../../../utils/inspect';
10
+ import { looseEqual } from '../../../utils/loose-equal';
11
+ import { toInteger } from '../../../utils/number';
12
+ import { escapeRegExp } from '../../../utils/string';
13
+ import { warn } from '../../../utils/warn';
14
+ import { stringifyRecordValues } from './stringify-record-values';
15
+
16
+ // --- Constants ---
17
+
18
+ const DEBOUNCE_DEPRECATED_MSG = 'Prop "filter-debounce" is deprecated. Use the debounce feature of "<b-form-input>" instead.';
19
+
20
+ // --- Props ---
21
+
22
+ const props = {
23
+ filter: {
24
+ type: [PROP_TYPE_ARRAY, PROP_TYPE_OBJECT, PROP_TYPE_STRING, PROP_TYPE_REG_EXP],
25
+ required: false,
26
+ default: undefined
27
+ },
28
+ filterDebounce: {
29
+ type: [PROP_TYPE_NUMBER, PROP_TYPE_STRING],
30
+ required: false,
31
+ default: 0,
32
+ validator: value => RX_DIGITS.test(String(value))
33
+ },
34
+ filterFunction: {
35
+ type: PROP_TYPE_FUNCTION,
36
+ required: false,
37
+ default: undefined
38
+ },
39
+ filterIgnoredFields: {
40
+ type: PROP_TYPE_ARRAY,
41
+ required: false,
42
+ default: () => []
43
+ },
44
+ filterIncludedFields: {
45
+ type: PROP_TYPE_ARRAY,
46
+ required: false,
47
+ default: () => []
48
+ }
49
+ };
50
+
51
+ // --- Mixin ---
52
+
53
+ // @vue/component
54
+ const filteringMixin = extend({
55
+ props,
56
+ data() {
57
+ return {
58
+ // Flag for displaying which empty slot to show and some event triggering
59
+ isFiltered: false,
60
+ // Where we store the copy of the filter criteria after debouncing
61
+ // We pre-set it with the sanitized filter value
62
+ localFilter: this.filterSanitize(this.filter)
63
+ };
64
+ },
65
+ computed: {
66
+ computedFilterIgnored() {
67
+ return concat(this.filterIgnoredFields || []).filter(identity);
68
+ },
69
+ computedFilterIncluded() {
70
+ return concat(this.filterIncludedFields || []).filter(identity);
71
+ },
72
+ computedFilterDebounce() {
73
+ const ms = toInteger(this.filterDebounce, 0);
74
+ /* istanbul ignore next */
75
+ if (ms > 0) {
76
+ warn(DEBOUNCE_DEPRECATED_MSG, NAME_TABLE);
77
+ }
78
+ return ms;
79
+ },
80
+ localFiltering() {
81
+ return this.hasProvider ? !!this.noProviderFiltering : true;
82
+ },
83
+ // For watching changes to `filteredItems` vs `localItems`
84
+ filteredCheck() {
85
+ const {
86
+ filteredItems,
87
+ localItems,
88
+ localFilter
89
+ } = this;
90
+ return {
91
+ filteredItems,
92
+ localItems,
93
+ localFilter
94
+ };
95
+ },
96
+ // Sanitized/normalize filter-function prop
97
+ localFilterFn() {
98
+ // Return `null` to signal to use internal filter function
99
+ const {
100
+ filterFunction
101
+ } = this;
102
+ // `filterFunction` is an optional Function prop with no default
103
+ return isFunction(filterFunction) ? filterFunction : null;
104
+ },
105
+ // Returns the records in `localItems` that match the filter criteria
106
+ // Returns the original `localItems` array if not sorting
107
+ filteredItems() {
108
+ // Note the criteria is debounced and sanitized
109
+ const {
110
+ localItems: items,
111
+ localFilter: criteria
112
+ } = this;
113
+
114
+ // Resolve the filtering function, when requested
115
+ // We prefer the provided filtering function and fallback to the internal one
116
+ // When no filtering criteria is specified the filtering factories will return `null`
117
+ const filterFn = this.localFiltering ? this.filterFnFactory(this.localFilterFn, criteria) || this.defaultFilterFnFactory(criteria) : null;
118
+
119
+ // We only do local filtering when requested and there are records to filter
120
+ return filterFn && items.length > 0 ? items.filter(filterFn) : items;
121
+ }
122
+ },
123
+ watch: {
124
+ // Watch for debounce being set to 0
125
+ computedFilterDebounce(newValue) {
126
+ if (!newValue && this.$_filterTimer) {
127
+ this.clearFilterTimer();
128
+ this.localFilter = this.filterSanitize(this.filter);
129
+ }
130
+ },
131
+ // Watch for changes to the filter criteria, and debounce if necessary
132
+ filter: {
133
+ // We need a deep watcher in case the user passes
134
+ // an object when using `filter-function`
135
+ deep: true,
136
+ handler(newCriteria) {
137
+ const timeout = this.computedFilterDebounce;
138
+ this.clearFilterTimer();
139
+ if (timeout && timeout > 0) {
140
+ // If we have a debounce time, delay the update of `localFilter`
141
+ this.$_filterTimer = setTimeout(() => {
142
+ this.localFilter = this.filterSanitize(newCriteria);
143
+ }, timeout);
144
+ } else {
145
+ // Otherwise, immediately update `localFilter` with `newFilter` value
146
+ this.localFilter = this.filterSanitize(newCriteria);
147
+ }
148
+ }
149
+ },
150
+ // Watch for changes to the filter criteria and filtered items vs `localItems`
151
+ // Set visual state and emit events as required
152
+ filteredCheck(_ref) {
153
+ let {
154
+ filteredItems,
155
+ localFilter
156
+ } = _ref;
157
+ // Determine if the dataset is filtered or not
158
+ let isFiltered = false;
159
+ if (!localFilter) {
160
+ // If filter criteria is falsey
161
+ isFiltered = false;
162
+ } else if (looseEqual(localFilter, []) || looseEqual(localFilter, {})) {
163
+ // If filter criteria is an empty array or object
164
+ isFiltered = false;
165
+ } else if (localFilter) {
166
+ // If filter criteria is truthy
167
+ isFiltered = true;
168
+ }
169
+ if (isFiltered) {
170
+ this.$emit(EVENT_NAME_FILTERED, filteredItems, filteredItems.length);
171
+ // Clear selection on filter change if selectable (defined in mixin-selectable.js)
172
+ if (this.hasSelectableRowClick) {
173
+ this.clearSelected();
174
+ }
175
+ }
176
+ this.isFiltered = isFiltered;
177
+ },
178
+ isFiltered(newValue, oldValue) {
179
+ if (newValue === false && oldValue === true) {
180
+ // We need to emit a filtered event if `isFiltered` transitions from `true` to
181
+ // `false` so that users can update their pagination controls
182
+ const {
183
+ localItems
184
+ } = this;
185
+ this.$emit(EVENT_NAME_FILTERED, localItems, localItems.length);
186
+ // Clear selection on filter change if selectable (defined in mixin-selectable.js)
187
+ if (this.hasSelectableRowClick) {
188
+ this.clearSelected();
189
+ }
190
+ }
191
+ }
192
+ },
193
+ created() {
194
+ // Create private non-reactive props
195
+ this.$_filterTimer = null;
196
+ // If filter is "pre-set", set the criteria
197
+ // This will trigger any watchers/dependents
198
+ // this.localFilter = this.filterSanitize(this.filter)
199
+ // Set the initial filtered state in a `$nextTick()` so that
200
+ // we trigger a filtered event if needed
201
+ this.$nextTick(() => {
202
+ this.isFiltered = Boolean(this.localFilter);
203
+ });
204
+ },
205
+ beforeDestroy() {
206
+ this.clearFilterTimer();
207
+ },
208
+ methods: {
209
+ clearFilterTimer() {
210
+ clearTimeout(this.$_filterTimer);
211
+ this.$_filterTimer = null;
212
+ },
213
+ filterSanitize(criteria) {
214
+ // Sanitizes filter criteria based on internal or external filtering
215
+ if (this.localFiltering && !this.localFilterFn && !(isString(criteria) || isRegExp(criteria))) {
216
+ // If using internal filter function, which only accepts string or RegExp,
217
+ // return '' to signify no filter
218
+ return '';
219
+ }
220
+
221
+ // Could be a string, object or array, as needed by external filter function
222
+ // We use `cloneDeep` to ensure we have a new copy of an object or array
223
+ // without Vue's reactive observers
224
+ return cloneDeep(criteria);
225
+ },
226
+ // Filter Function factories
227
+ filterFnFactory(filterFn, criteria) {
228
+ // Wrapper factory for external filter functions
229
+ // Wrap the provided filter-function and return a new function
230
+ // Returns `null` if no filter-function defined or if criteria is falsey
231
+ // Rather than directly grabbing `this.computedLocalFilterFn` or `this.filterFunction`
232
+ // we have it passed, so that the caller computed prop will be reactive to changes
233
+ // in the original filter-function (as this routine is a method)
234
+ if (!filterFn || !isFunction(filterFn) || !criteria || looseEqual(criteria, []) || looseEqual(criteria, {})) {
235
+ return null;
236
+ }
237
+
238
+ // Build the wrapped filter test function, passing the criteria to the provided function
239
+ const fn = item => {
240
+ // Generated function returns true if the criteria matches part
241
+ // of the serialized data, otherwise false
242
+ return filterFn(item, criteria);
243
+ };
244
+
245
+ // Return the wrapped function
246
+ return fn;
247
+ },
248
+ defaultFilterFnFactory(criteria) {
249
+ // Generates the default filter function, using the given filter criteria
250
+ // Returns `null` if no criteria or criteria format not supported
251
+ if (!criteria || !(isString(criteria) || isRegExp(criteria))) {
252
+ // Built in filter can only support strings or RegExp criteria (at the moment)
253
+ return null;
254
+ }
255
+
256
+ // Build the RegExp needed for filtering
257
+ let regExp = criteria;
258
+ if (isString(regExp)) {
259
+ // Escape special RegExp characters in the string and convert contiguous
260
+ // whitespace to \s+ matches
261
+ const pattern = escapeRegExp(criteria).replace(RX_SPACES, '\\s+');
262
+ // Build the RegExp (no need for global flag, as we only need
263
+ // to find the value once in the string)
264
+ regExp = new RegExp(`.*${pattern}.*`, 'i');
265
+ }
266
+
267
+ // Generate the wrapped filter test function to use
268
+ const fn = item => {
269
+ // This searches all row values (and sub property values) in the entire (excluding
270
+ // special `_` prefixed keys), because we convert the record to a space-separated
271
+ // string containing all the value properties (recursively), even ones that are
272
+ // not visible (not specified in this.fields)
273
+ // Users can ignore filtering on specific fields, or on only certain fields,
274
+ // and can optionall specify searching results of fields with formatter
275
+ //
276
+ // TODO: Enable searching on scoped slots (optional, as it will be SLOW)
277
+ //
278
+ // Generated function returns true if the criteria matches part of
279
+ // the serialized data, otherwise false
280
+ //
281
+ // We set `lastIndex = 0` on the `RegExp` in case someone specifies the `/g` global flag
282
+ regExp.lastIndex = 0;
283
+ return regExp.test(stringifyRecordValues(item, this.computedFilterIgnored, this.computedFilterIncluded, this.computedFieldsObj));
284
+ };
285
+
286
+ // Return the generated function
287
+ return fn;
288
+ }
289
+ }
290
+ });
291
+
292
+ export { filteringMixin, props };
@@ -0,0 +1,169 @@
1
+ import { extend } from '../../../vue';
2
+ import { EVENT_NAME_CONTEXT_CHANGED } from '../../../constants/events';
3
+ import { PROP_TYPE_ARRAY, PROP_TYPE_STRING } from '../../../constants/props';
4
+ import { useParentMixin } from '../../../mixins/use-parent';
5
+ import { isArray, isString, isFunction } from '../../../utils/inspect';
6
+ import { looseEqual } from '../../../utils/loose-equal';
7
+ import { mathMax } from '../../../utils/math';
8
+ import { makeModelMixin } from '../../../utils/model';
9
+ import { toInteger } from '../../../utils/number';
10
+ import { sortKeys, clone } from '../../../utils/object';
11
+ import { safeVueInstance } from '../../../utils/safe-vue-instance';
12
+ import { normalizeFields } from './normalize-fields';
13
+
14
+ // --- Constants ---
15
+
16
+ const {
17
+ mixin: modelMixin,
18
+ props: modelProps,
19
+ prop: MODEL_PROP_NAME,
20
+ event: MODEL_EVENT_NAME
21
+ } = makeModelMixin('value', {
22
+ type: PROP_TYPE_ARRAY,
23
+ defaultValue: []
24
+ });
25
+
26
+ // --- Props ---
27
+
28
+ const props = sortKeys({
29
+ ...modelProps,
30
+ fields: {
31
+ type: PROP_TYPE_ARRAY,
32
+ required: false,
33
+ default: null
34
+ },
35
+ // Provider mixin adds in `Function` type
36
+ items: {
37
+ type: PROP_TYPE_ARRAY,
38
+ required: false,
39
+ default: () => []
40
+ },
41
+ // Primary key for record
42
+ // If provided the value in each row must be unique!
43
+ primaryKey: {
44
+ type: PROP_TYPE_STRING,
45
+ required: false,
46
+ default: undefined
47
+ },
48
+ // `v-model` for retrieving the current displayed rows
49
+ [MODEL_PROP_NAME]: {
50
+ type: PROP_TYPE_ARRAY,
51
+ required: false,
52
+ default: () => []
53
+ }
54
+ });
55
+
56
+ // --- Mixin ---
57
+
58
+ // @vue/component
59
+ const itemsMixin = extend({
60
+ mixins: [modelMixin, useParentMixin],
61
+ props,
62
+ data() {
63
+ const {
64
+ items
65
+ } = this;
66
+ return {
67
+ // Our local copy of the items
68
+ // Must be an array
69
+ localItems: isArray(items) ? items.slice() : []
70
+ };
71
+ },
72
+ computed: {
73
+ computedFields() {
74
+ // We normalize fields into an array of objects
75
+ // `[ { key:..., label:..., ...}, {...}, ..., {..}]`
76
+ return normalizeFields(this.fields, this.localItems);
77
+ },
78
+ computedFieldsObj() {
79
+ // Fields as a simple lookup hash object
80
+ // Mainly for formatter lookup and use in `scopedSlots` for convenience
81
+ // If the field has a formatter, it normalizes formatter to a
82
+ // function ref or `undefined` if no formatter
83
+ const {
84
+ bvParent
85
+ } = this;
86
+ return this.computedFields.reduce((obj, f) => {
87
+ // We use object spread here so we don't mutate the original field object
88
+ obj[f.key] = clone(f);
89
+ if (f.formatter) {
90
+ // Normalize formatter to a function ref or `undefined`
91
+ let formatter = f.formatter;
92
+ if (isString(formatter) && isFunction(bvParent[formatter])) {
93
+ formatter = bvParent[formatter];
94
+ } else if (!isFunction(formatter)) {
95
+ /* istanbul ignore next */
96
+ formatter = undefined;
97
+ }
98
+ // Return formatter function or `undefined` if none
99
+ obj[f.key].formatter = formatter;
100
+ }
101
+ return obj;
102
+ }, {});
103
+ },
104
+ computedItems() {
105
+ const {
106
+ paginatedItems,
107
+ sortedItems,
108
+ filteredItems,
109
+ localItems
110
+ } = safeVueInstance(this);
111
+ // Fallback if various mixins not provided
112
+ return (paginatedItems || sortedItems || filteredItems || localItems || /* istanbul ignore next */
113
+ []).slice();
114
+ },
115
+ context() {
116
+ const {
117
+ perPage,
118
+ currentPage
119
+ } = safeVueInstance(this);
120
+ // Current state of sorting, filtering and pagination props/values
121
+ return {
122
+ filter: this.localFilter,
123
+ sortBy: this.localSortBy,
124
+ sortDesc: this.localSortDesc,
125
+ perPage: mathMax(toInteger(perPage, 0), 0),
126
+ currentPage: mathMax(toInteger(currentPage, 0), 1),
127
+ apiUrl: this.apiUrl
128
+ };
129
+ }
130
+ },
131
+ watch: {
132
+ items(newValue) {
133
+ // Set `localItems`/`filteredItems` to a copy of the provided array
134
+ this.localItems = isArray(newValue) ? newValue.slice() : [];
135
+ },
136
+ // Watch for changes on `computedItems` and update the `v-model`
137
+ computedItems(newValue, oldValue) {
138
+ if (!looseEqual(newValue, oldValue)) {
139
+ this.$emit(MODEL_EVENT_NAME, newValue);
140
+ }
141
+ },
142
+ // Watch for context changes
143
+ context(newValue, oldValue) {
144
+ // Emit context information for external paging/filtering/sorting handling
145
+ if (!looseEqual(newValue, oldValue)) {
146
+ this.$emit(EVENT_NAME_CONTEXT_CHANGED, newValue);
147
+ // Clear selection on context change if selectable (defined in mixin-selectable.js)
148
+ if (this.hasSelectableRowClick) {
149
+ this.clearSelected();
150
+ }
151
+ }
152
+ }
153
+ },
154
+ mounted() {
155
+ // Initially update the `v-model` of displayed items
156
+ this.$emit(MODEL_EVENT_NAME, this.computedItems);
157
+ },
158
+ methods: {
159
+ // Method to get the formatter method for a given field key
160
+ getFieldFormatter(key) {
161
+ const field = this.computedFieldsObj[key];
162
+ // `this.computedFieldsObj` has pre-normalized the formatter to a
163
+ // function ref if present, otherwise `undefined`
164
+ return field ? field.formatter : undefined;
165
+ }
166
+ }
167
+ });
168
+
169
+ export { MODEL_EVENT_NAME, MODEL_PROP_NAME, itemsMixin, props };
@@ -0,0 +1,51 @@
1
+ import { extend } from '../../../vue';
2
+ import { PROP_TYPE_NUMBER, PROP_TYPE_STRING } from '../../../constants/props';
3
+ import { mathMax } from '../../../utils/math';
4
+ import { toInteger } from '../../../utils/number';
5
+ import { safeVueInstance } from '../../../utils/safe-vue-instance';
6
+
7
+ // --- Props ---
8
+
9
+ const props = {
10
+ currentPage: {
11
+ type: [PROP_TYPE_NUMBER, PROP_TYPE_STRING],
12
+ required: false,
13
+ default: 1
14
+ },
15
+ perPage: {
16
+ type: [PROP_TYPE_NUMBER, PROP_TYPE_STRING],
17
+ required: false,
18
+ default: 0
19
+ }
20
+ };
21
+
22
+ // --- Mixin ---
23
+
24
+ // @vue/component
25
+ const paginationMixin = extend({
26
+ props,
27
+ computed: {
28
+ localPaging() {
29
+ return this.hasProvider ? !!this.noProviderPaging : true;
30
+ },
31
+ paginatedItems() {
32
+ const {
33
+ sortedItems,
34
+ filteredItems,
35
+ localItems
36
+ } = safeVueInstance(this);
37
+ let items = sortedItems || filteredItems || localItems || [];
38
+ const currentPage = mathMax(toInteger(this.currentPage, 1), 1);
39
+ const perPage = mathMax(toInteger(this.perPage, 0), 0);
40
+ // Apply local pagination
41
+ if (this.localPaging && perPage) {
42
+ // Grab the current page of data (which may be past filtered items limit)
43
+ items = items.slice((currentPage - 1) * perPage, currentPage * perPage);
44
+ }
45
+ // Return the items to display in the table
46
+ return items;
47
+ }
48
+ }
49
+ });
50
+
51
+ export { paginationMixin, props };