@gitlab/ui 92.2.0 → 92.3.1

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 (456) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/bin/migrate_custom_utils_to_tw.bundled.mjs +11 -3
  3. package/dist/components/experimental/duo/chat/components/duo_chat_context/constants.js +4 -4
  4. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +4 -4
  5. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.js +8 -8
  6. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.js +5 -4
  7. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.js +15 -16
  8. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +7 -7
  9. package/dist/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +63 -81
  10. package/dist/components/experimental/duo/chat/components/duo_chat_context/utils.js +1 -1
  11. package/dist/index.css +4 -2
  12. package/dist/index.css.map +1 -1
  13. package/dist/tailwind.css +1 -1
  14. package/dist/tailwind.css.map +1 -1
  15. package/dist/vendor/bootstrap-vue/src/components/form/index.js +0 -4
  16. package/dist/vendor/bootstrap-vue/src/components/index.js +0 -48
  17. package/dist/vendor/bootstrap-vue/src/components/layout/index.js +0 -6
  18. package/dist/vendor/bootstrap-vue/src/components/nav/index.js +0 -6
  19. package/dist/vendor/bootstrap-vue/src/components/navbar/index.js +1 -8
  20. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +2 -6
  21. package/dist/vendor/bootstrap-vue/src/constants/classes.js +1 -2
  22. package/dist/vendor/bootstrap-vue/src/constants/components.js +1 -51
  23. package/dist/vendor/bootstrap-vue/src/constants/events.js +1 -12
  24. package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +1 -5
  25. package/dist/vendor/bootstrap-vue/src/constants/props.js +1 -4
  26. package/dist/vendor/bootstrap-vue/src/constants/regex.js +1 -20
  27. package/dist/vendor/bootstrap-vue/src/constants/slots.js +1 -33
  28. package/dist/vendor/bootstrap-vue/src/directives/toggle/toggle.js +1 -1
  29. package/dist/vendor/bootstrap-vue/src/index.js +0 -74
  30. package/dist/vendor/bootstrap-vue/src/utils/array.js +1 -3
  31. package/dist/vendor/bootstrap-vue/src/utils/inspect.js +1 -3
  32. package/dist/vendor/bootstrap-vue/src/utils/math.js +1 -3
  33. package/dist/vendor/bootstrap-vue/src/utils/object.js +1 -6
  34. package/dist/vendor/bootstrap-vue/src/utils/props.js +2 -8
  35. package/dist/vendor/bootstrap-vue/src/utils/string.js +1 -10
  36. package/package.json +1 -1
  37. package/src/components/base/accordion/accordion_item.scss +3 -3
  38. package/src/components/base/alert/alert.scss +3 -3
  39. package/src/components/base/avatar_labeled/avatar_labeled.scss +2 -2
  40. package/src/components/base/avatars_inline/avatars_inline.scss +1 -1
  41. package/src/components/base/badge/badge.scss +2 -2
  42. package/src/components/base/banner/banner.scss +2 -2
  43. package/src/components/base/breadcrumb/breadcrumb.scss +3 -3
  44. package/src/components/base/broadcast_message/broadcast_message.scss +3 -3
  45. package/src/components/base/button/button.scss +14 -14
  46. package/src/components/base/card/card.scss +1 -1
  47. package/src/components/base/datepicker/datepicker.scss +10 -10
  48. package/src/components/base/drawer/drawer.scss +5 -5
  49. package/src/components/base/dropdown/dropdown.scss +28 -28
  50. package/src/components/base/dropdown/dropdown_divider.scss +3 -3
  51. package/src/components/base/dropdown/dropdown_item.scss +9 -9
  52. package/src/components/base/dropdown/dropdown_section_header.scss +2 -2
  53. package/src/components/base/dropdown/dropdown_text.scss +1 -1
  54. package/src/components/base/filtered_search/filtered_search.scss +7 -7
  55. package/src/components/base/filtered_search/filtered_search_suggestion.scss +1 -1
  56. package/src/components/base/filtered_search/filtered_search_suggestion_list.scss +3 -3
  57. package/src/components/base/filtered_search/filtered_search_term.scss +2 -2
  58. package/src/components/base/filtered_search/filtered_search_token.scss +4 -4
  59. package/src/components/base/filtered_search/filtered_search_token_segment.scss +2 -2
  60. package/src/components/base/form/form_checkbox/form_checkbox.scss +10 -10
  61. package/src/components/base/form/form_group/form_group.scss +5 -5
  62. package/src/components/base/form/form_input/form_input.scss +2 -2
  63. package/src/components/base/form/form_select/form_select.scss +2 -2
  64. package/src/components/base/keyset_pagination/keyset_pagination.scss +1 -1
  65. package/src/components/base/label/label.scss +1 -1
  66. package/src/components/base/loading_icon/loading_icon.scss +1 -1
  67. package/src/components/base/markdown/markdown.scss +33 -33
  68. package/src/components/base/modal/modal.scss +11 -11
  69. package/src/components/base/new_dropdowns/dropdown.scss +14 -14
  70. package/src/components/base/new_dropdowns/dropdown_item.scss +9 -9
  71. package/src/components/base/new_dropdowns/listbox/listbox.scss +1 -1
  72. package/src/components/base/pagination/pagination.scss +3 -3
  73. package/src/components/base/path/path.scss +5 -5
  74. package/src/components/base/popover/popover.scss +5 -5
  75. package/src/components/base/search_box_by_click/search_box_by_click.scss +2 -2
  76. package/src/components/base/search_box_by_type/search_box_by_type.scss +4 -4
  77. package/src/components/base/table/table.scss +4 -4
  78. package/src/components/base/tabs/tabs/tabs.scss +10 -10
  79. package/src/components/base/toast/toast.scss +7 -7
  80. package/src/components/base/toggle/toggle.scss +6 -6
  81. package/src/components/base/token/token.scss +5 -5
  82. package/src/components/base/tooltip/tooltip.scss +3 -3
  83. package/src/components/charts/legend/legend.scss +4 -4
  84. package/src/components/charts/series_label/series_label.scss +1 -1
  85. package/src/components/experimental/duo/chat/components/duo_chat_context/constants.js +3 -3
  86. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +4 -4
  87. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue +10 -10
  88. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue +6 -5
  89. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.vue +24 -24
  90. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +10 -10
  91. package/src/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +57 -74
  92. package/src/components/experimental/duo/chat/components/duo_chat_context/utils.js +5 -3
  93. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.scss +1 -1
  94. package/src/components/experimental/duo/chat/duo_chat.scss +4 -4
  95. package/src/components/shared_components/charts/tooltip_default_format.scss +1 -1
  96. package/src/scss/bootstrap_vue.scss +0 -18
  97. package/src/scss/typescale/_index.scss +9 -9
  98. package/src/vendor/bootstrap-vue/nuxt/index.js +0 -8
  99. package/src/vendor/bootstrap-vue/src/_utilities.scss +0 -9
  100. package/src/vendor/bootstrap-vue/src/_variables.scss +0 -52
  101. package/src/vendor/bootstrap-vue/src/components/form/index.d.ts +0 -3
  102. package/src/vendor/bootstrap-vue/src/components/form/index.js +1 -4
  103. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -12
  104. package/src/vendor/bootstrap-vue/src/components/index.d.ts +0 -24
  105. package/src/vendor/bootstrap-vue/src/components/index.js +0 -48
  106. package/src/vendor/bootstrap-vue/src/components/index.scss +0 -15
  107. package/src/vendor/bootstrap-vue/src/components/layout/index.d.ts +0 -6
  108. package/src/vendor/bootstrap-vue/src/components/layout/index.js +1 -5
  109. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -67
  110. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1
  111. package/src/vendor/bootstrap-vue/src/components/nav/index.d.ts +0 -6
  112. package/src/vendor/bootstrap-vue/src/components/nav/index.js +1 -5
  113. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -45
  114. package/src/vendor/bootstrap-vue/src/components/navbar/README.md +0 -5
  115. package/src/vendor/bootstrap-vue/src/components/navbar/index.d.ts +1 -7
  116. package/src/vendor/bootstrap-vue/src/components/navbar/index.js +2 -7
  117. package/src/vendor/bootstrap-vue/src/components/navbar/package.json +0 -75
  118. package/src/vendor/bootstrap-vue/src/components/table/README.md +1 -2
  119. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +2 -2
  120. package/src/vendor/bootstrap-vue/src/components/toast/README.md +1 -3
  121. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +2 -6
  122. package/src/vendor/bootstrap-vue/src/constants/classes.js +0 -1
  123. package/src/vendor/bootstrap-vue/src/constants/components.js +0 -50
  124. package/src/vendor/bootstrap-vue/src/constants/events.js +0 -11
  125. package/src/vendor/bootstrap-vue/src/constants/key-codes.js +0 -4
  126. package/src/vendor/bootstrap-vue/src/constants/props.js +0 -3
  127. package/src/vendor/bootstrap-vue/src/constants/regex.js +0 -19
  128. package/src/vendor/bootstrap-vue/src/constants/slots.js +0 -32
  129. package/src/vendor/bootstrap-vue/src/directives/toggle/README.md +5 -23
  130. package/src/vendor/bootstrap-vue/src/directives/toggle/package.json +1 -1
  131. package/src/vendor/bootstrap-vue/src/directives/toggle/toggle.js +1 -1
  132. package/src/vendor/bootstrap-vue/src/index.js +0 -122
  133. package/src/vendor/bootstrap-vue/src/index.scss +0 -3
  134. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -5
  135. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +15 -15
  136. package/src/vendor/bootstrap-vue/src/utils/inspect.js +0 -4
  137. package/src/vendor/bootstrap-vue/src/utils/math.js +0 -4
  138. package/src/vendor/bootstrap-vue/src/utils/object.js +0 -5
  139. package/src/vendor/bootstrap-vue/src/utils/props.js +1 -7
  140. package/src/vendor/bootstrap-vue/src/utils/string.js +0 -9
  141. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +1 -20
  142. package/dist/vendor/bootstrap-vue/src/components/alert/alert.js +0 -179
  143. package/dist/vendor/bootstrap-vue/src/components/alert/index.js +0 -11
  144. package/dist/vendor/bootstrap-vue/src/components/aspect/aspect.js +0 -67
  145. package/dist/vendor/bootstrap-vue/src/components/aspect/index.js +0 -11
  146. package/dist/vendor/bootstrap-vue/src/components/avatar/avatar-group.js +0 -67
  147. package/dist/vendor/bootstrap-vue/src/components/avatar/avatar.js +0 -266
  148. package/dist/vendor/bootstrap-vue/src/components/avatar/index.js +0 -14
  149. package/dist/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.js +0 -112
  150. package/dist/vendor/bootstrap-vue/src/components/button-toolbar/index.js +0 -12
  151. package/dist/vendor/bootstrap-vue/src/components/calendar/calendar.js +0 -1010
  152. package/dist/vendor/bootstrap-vue/src/components/calendar/index.js +0 -11
  153. package/dist/vendor/bootstrap-vue/src/components/card/card-body.js +0 -63
  154. package/dist/vendor/bootstrap-vue/src/components/card/card-footer.js +0 -48
  155. package/dist/vendor/bootstrap-vue/src/components/card/card-group.js +0 -33
  156. package/dist/vendor/bootstrap-vue/src/components/card/card-header.js +0 -48
  157. package/dist/vendor/bootstrap-vue/src/components/card/card-img-lazy.js +0 -46
  158. package/dist/vendor/bootstrap-vue/src/components/card/card-img.js +0 -58
  159. package/dist/vendor/bootstrap-vue/src/components/card/card-sub-title.js +0 -35
  160. package/dist/vendor/bootstrap-vue/src/components/card/card-text.js +0 -31
  161. package/dist/vendor/bootstrap-vue/src/components/card/card-title.js +0 -33
  162. package/dist/vendor/bootstrap-vue/src/components/card/card.js +0 -123
  163. package/dist/vendor/bootstrap-vue/src/components/card/index.js +0 -38
  164. package/dist/vendor/bootstrap-vue/src/components/embed/embed.js +0 -50
  165. package/dist/vendor/bootstrap-vue/src/components/embed/index.js +0 -11
  166. package/dist/vendor/bootstrap-vue/src/components/form/form-datalist.js +0 -52
  167. package/dist/vendor/bootstrap-vue/src/components/form-btn-label-control/bv-form-btn-label-control.js +0 -261
  168. package/dist/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.js +0 -310
  169. package/dist/vendor/bootstrap-vue/src/components/form-datepicker/index.js +0 -12
  170. package/dist/vendor/bootstrap-vue/src/components/form-file/form-file.js +0 -561
  171. package/dist/vendor/bootstrap-vue/src/components/form-file/index.js +0 -12
  172. package/dist/vendor/bootstrap-vue/src/components/form-rating/form-rating.js +0 -402
  173. package/dist/vendor/bootstrap-vue/src/components/form-rating/index.js +0 -12
  174. package/dist/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.js +0 -555
  175. package/dist/vendor/bootstrap-vue/src/components/form-spinbutton/index.js +0 -12
  176. package/dist/vendor/bootstrap-vue/src/components/form-tags/form-tag.js +0 -97
  177. package/dist/vendor/bootstrap-vue/src/components/form-tags/form-tags.js +0 -806
  178. package/dist/vendor/bootstrap-vue/src/components/form-tags/index.js +0 -16
  179. package/dist/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.js +0 -281
  180. package/dist/vendor/bootstrap-vue/src/components/form-timepicker/index.js +0 -12
  181. package/dist/vendor/bootstrap-vue/src/components/image/img-lazy.js +0 -157
  182. package/dist/vendor/bootstrap-vue/src/components/image/img.js +0 -124
  183. package/dist/vendor/bootstrap-vue/src/components/image/index.js +0 -14
  184. package/dist/vendor/bootstrap-vue/src/components/jumbotron/index.js +0 -11
  185. package/dist/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.js +0 -98
  186. package/dist/vendor/bootstrap-vue/src/components/layout/container.js +0 -41
  187. package/dist/vendor/bootstrap-vue/src/components/layout/row.js +0 -113
  188. package/dist/vendor/bootstrap-vue/src/components/list-group/index.js +0 -14
  189. package/dist/vendor/bootstrap-vue/src/components/list-group/list-group-item.js +0 -78
  190. package/dist/vendor/bootstrap-vue/src/components/list-group/list-group.js +0 -42
  191. package/dist/vendor/bootstrap-vue/src/components/media/index.js +0 -17
  192. package/dist/vendor/bootstrap-vue/src/components/media/media-aside.js +0 -41
  193. package/dist/vendor/bootstrap-vue/src/components/media/media-body.js +0 -31
  194. package/dist/vendor/bootstrap-vue/src/components/media/media.js +0 -61
  195. package/dist/vendor/bootstrap-vue/src/components/nav/nav-form.js +0 -45
  196. package/dist/vendor/bootstrap-vue/src/components/nav/nav-text.js +0 -26
  197. package/dist/vendor/bootstrap-vue/src/components/navbar/navbar-nav.js +0 -46
  198. package/dist/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.js +0 -89
  199. package/dist/vendor/bootstrap-vue/src/components/overlay/index.js +0 -11
  200. package/dist/vendor/bootstrap-vue/src/components/overlay/overlay.js +0 -163
  201. package/dist/vendor/bootstrap-vue/src/components/pagination/index.js +0 -11
  202. package/dist/vendor/bootstrap-vue/src/components/pagination/pagination.js +0 -135
  203. package/dist/vendor/bootstrap-vue/src/components/pagination-nav/index.js +0 -11
  204. package/dist/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.js +0 -299
  205. package/dist/vendor/bootstrap-vue/src/components/sidebar/index.js +0 -15
  206. package/dist/vendor/bootstrap-vue/src/components/sidebar/sidebar.js +0 -432
  207. package/dist/vendor/bootstrap-vue/src/components/skeleton/index.js +0 -23
  208. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.js +0 -47
  209. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.js +0 -60
  210. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.js +0 -64
  211. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.js +0 -46
  212. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton.js +0 -49
  213. package/dist/vendor/bootstrap-vue/src/components/spinner/index.js +0 -11
  214. package/dist/vendor/bootstrap-vue/src/components/spinner/spinner.js +0 -55
  215. package/dist/vendor/bootstrap-vue/src/components/time/index.js +0 -11
  216. package/dist/vendor/bootstrap-vue/src/components/time/time.js +0 -600
  217. package/dist/vendor/bootstrap-vue/src/constants/date.js +0 -8
  218. package/dist/vendor/bootstrap-vue/src/mixins/card.js +0 -22
  219. package/dist/vendor/bootstrap-vue/src/mixins/pagination.js +0 -598
  220. package/dist/vendor/bootstrap-vue/src/utils/date.js +0 -135
  221. package/src/vendor/bootstrap-vue/src/_custom-controls.scss +0 -30
  222. package/src/vendor/bootstrap-vue/src/components/alert/README.md +0 -280
  223. package/src/vendor/bootstrap-vue/src/components/alert/alert.js +0 -185
  224. package/src/vendor/bootstrap-vue/src/components/alert/alert.spec.js +0 -442
  225. package/src/vendor/bootstrap-vue/src/components/alert/index.d.ts +0 -13
  226. package/src/vendor/bootstrap-vue/src/components/alert/index.js +0 -8
  227. package/src/vendor/bootstrap-vue/src/components/alert/package.json +0 -72
  228. package/src/vendor/bootstrap-vue/src/components/aspect/README.md +0 -65
  229. package/src/vendor/bootstrap-vue/src/components/aspect/aspect.js +0 -65
  230. package/src/vendor/bootstrap-vue/src/components/aspect/aspect.spec.js +0 -121
  231. package/src/vendor/bootstrap-vue/src/components/aspect/index.d.ts +0 -11
  232. package/src/vendor/bootstrap-vue/src/components/aspect/index.js +0 -8
  233. package/src/vendor/bootstrap-vue/src/components/aspect/package.json +0 -26
  234. package/src/vendor/bootstrap-vue/src/components/avatar/README.md +0 -567
  235. package/src/vendor/bootstrap-vue/src/components/avatar/_avatar.scss +0 -148
  236. package/src/vendor/bootstrap-vue/src/components/avatar/avatar-group.js +0 -75
  237. package/src/vendor/bootstrap-vue/src/components/avatar/avatar-group.spec.js +0 -74
  238. package/src/vendor/bootstrap-vue/src/components/avatar/avatar.js +0 -228
  239. package/src/vendor/bootstrap-vue/src/components/avatar/avatar.spec.js +0 -355
  240. package/src/vendor/bootstrap-vue/src/components/avatar/index.d.ts +0 -14
  241. package/src/vendor/bootstrap-vue/src/components/avatar/index.js +0 -9
  242. package/src/vendor/bootstrap-vue/src/components/avatar/index.scss +0 -1
  243. package/src/vendor/bootstrap-vue/src/components/avatar/package.json +0 -149
  244. package/src/vendor/bootstrap-vue/src/components/button-toolbar/README.md +0 -109
  245. package/src/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.js +0 -117
  246. package/src/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.spec.js +0 -185
  247. package/src/vendor/bootstrap-vue/src/components/button-toolbar/index.d.ts +0 -11
  248. package/src/vendor/bootstrap-vue/src/components/button-toolbar/index.js +0 -11
  249. package/src/vendor/bootstrap-vue/src/components/button-toolbar/package.json +0 -32
  250. package/src/vendor/bootstrap-vue/src/components/calendar/README.md +0 -735
  251. package/src/vendor/bootstrap-vue/src/components/calendar/_calendar.scss +0 -78
  252. package/src/vendor/bootstrap-vue/src/components/calendar/calendar.js +0 -1146
  253. package/src/vendor/bootstrap-vue/src/components/calendar/calendar.spec.js +0 -466
  254. package/src/vendor/bootstrap-vue/src/components/calendar/index.d.ts +0 -28
  255. package/src/vendor/bootstrap-vue/src/components/calendar/index.js +0 -8
  256. package/src/vendor/bootstrap-vue/src/components/calendar/index.scss +0 -1
  257. package/src/vendor/bootstrap-vue/src/components/calendar/package.json +0 -317
  258. package/src/vendor/bootstrap-vue/src/components/card/README.md +0 -729
  259. package/src/vendor/bootstrap-vue/src/components/card/_card-img.scss +0 -7
  260. package/src/vendor/bootstrap-vue/src/components/card/card-body.js +0 -69
  261. package/src/vendor/bootstrap-vue/src/components/card/card-body.spec.js +0 -142
  262. package/src/vendor/bootstrap-vue/src/components/card/card-footer.js +0 -48
  263. package/src/vendor/bootstrap-vue/src/components/card/card-footer.spec.js +0 -98
  264. package/src/vendor/bootstrap-vue/src/components/card/card-group.js +0 -33
  265. package/src/vendor/bootstrap-vue/src/components/card/card-group.spec.js +0 -75
  266. package/src/vendor/bootstrap-vue/src/components/card/card-header.js +0 -48
  267. package/src/vendor/bootstrap-vue/src/components/card/card-header.spec.js +0 -98
  268. package/src/vendor/bootstrap-vue/src/components/card/card-img-lazy.js +0 -47
  269. package/src/vendor/bootstrap-vue/src/components/card/card-img-lazy.spec.js +0 -204
  270. package/src/vendor/bootstrap-vue/src/components/card/card-img.js +0 -50
  271. package/src/vendor/bootstrap-vue/src/components/card/card-img.spec.js +0 -208
  272. package/src/vendor/bootstrap-vue/src/components/card/card-sub-title.js +0 -35
  273. package/src/vendor/bootstrap-vue/src/components/card/card-sub-title.spec.js +0 -60
  274. package/src/vendor/bootstrap-vue/src/components/card/card-text.js +0 -25
  275. package/src/vendor/bootstrap-vue/src/components/card/card-text.spec.js +0 -48
  276. package/src/vendor/bootstrap-vue/src/components/card/card-title.js +0 -33
  277. package/src/vendor/bootstrap-vue/src/components/card/card-title.spec.js +0 -45
  278. package/src/vendor/bootstrap-vue/src/components/card/card.js +0 -140
  279. package/src/vendor/bootstrap-vue/src/components/card/card.spec.js +0 -296
  280. package/src/vendor/bootstrap-vue/src/components/card/index.d.ts +0 -38
  281. package/src/vendor/bootstrap-vue/src/components/card/index.js +0 -40
  282. package/src/vendor/bootstrap-vue/src/components/card/index.scss +0 -1
  283. package/src/vendor/bootstrap-vue/src/components/card/package.json +0 -262
  284. package/src/vendor/bootstrap-vue/src/components/embed/README.md +0 -63
  285. package/src/vendor/bootstrap-vue/src/components/embed/embed.js +0 -51
  286. package/src/vendor/bootstrap-vue/src/components/embed/embed.spec.js +0 -110
  287. package/src/vendor/bootstrap-vue/src/components/embed/index.d.ts +0 -11
  288. package/src/vendor/bootstrap-vue/src/components/embed/index.js +0 -8
  289. package/src/vendor/bootstrap-vue/src/components/embed/package.json +0 -29
  290. package/src/vendor/bootstrap-vue/src/components/form/form-datalist.js +0 -42
  291. package/src/vendor/bootstrap-vue/src/components/form/form-datalist.spec.js +0 -57
  292. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/_form-btn-label-control.scss +0 -125
  293. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/bv-form-btn-label-control.js +0 -278
  294. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/index.scss +0 -1
  295. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/package.json +0 -5
  296. package/src/vendor/bootstrap-vue/src/components/form-datepicker/README.md +0 -694
  297. package/src/vendor/bootstrap-vue/src/components/form-datepicker/_form-datepicker.scss +0 -1
  298. package/src/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.js +0 -342
  299. package/src/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.spec.js +0 -562
  300. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.d.ts +0 -12
  301. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.js +0 -11
  302. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.scss +0 -1
  303. package/src/vendor/bootstrap-vue/src/components/form-datepicker/package.json +0 -420
  304. package/src/vendor/bootstrap-vue/src/components/form-file/README.md +0 -357
  305. package/src/vendor/bootstrap-vue/src/components/form-file/_form-file.scss +0 -61
  306. package/src/vendor/bootstrap-vue/src/components/form-file/form-file.js +0 -575
  307. package/src/vendor/bootstrap-vue/src/components/form-file/form-file.spec.js +0 -885
  308. package/src/vendor/bootstrap-vue/src/components/form-file/index.d.ts +0 -13
  309. package/src/vendor/bootstrap-vue/src/components/form-file/index.js +0 -11
  310. package/src/vendor/bootstrap-vue/src/components/form-file/index.scss +0 -1
  311. package/src/vendor/bootstrap-vue/src/components/form-file/package.json +0 -131
  312. package/src/vendor/bootstrap-vue/src/components/form-rating/README.md +0 -526
  313. package/src/vendor/bootstrap-vue/src/components/form-rating/_form-rating.scss +0 -57
  314. package/src/vendor/bootstrap-vue/src/components/form-rating/form-rating.js +0 -411
  315. package/src/vendor/bootstrap-vue/src/components/form-rating/form-rating.spec.js +0 -544
  316. package/src/vendor/bootstrap-vue/src/components/form-rating/index.d.ts +0 -14
  317. package/src/vendor/bootstrap-vue/src/components/form-rating/index.js +0 -8
  318. package/src/vendor/bootstrap-vue/src/components/form-rating/index.scss +0 -1
  319. package/src/vendor/bootstrap-vue/src/components/form-rating/package.json +0 -166
  320. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/README.md +0 -411
  321. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/_spinbutton.scss +0 -76
  322. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.js +0 -572
  323. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.spec.js +0 -731
  324. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.d.ts +0 -12
  325. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.js +0 -11
  326. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.scss +0 -1
  327. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/package.json +0 -150
  328. package/src/vendor/bootstrap-vue/src/components/form-tags/README.md +0 -880
  329. package/src/vendor/bootstrap-vue/src/components/form-tags/_form-tags.scss +0 -70
  330. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tag.js +0 -94
  331. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tag.spec.js +0 -166
  332. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tags.js +0 -891
  333. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tags.spec.js +0 -920
  334. package/src/vendor/bootstrap-vue/src/components/form-tags/index.d.ts +0 -16
  335. package/src/vendor/bootstrap-vue/src/components/form-tags/index.js +0 -14
  336. package/src/vendor/bootstrap-vue/src/components/form-tags/index.scss +0 -1
  337. package/src/vendor/bootstrap-vue/src/components/form-tags/package.json +0 -440
  338. package/src/vendor/bootstrap-vue/src/components/form-timepicker/README.md +0 -450
  339. package/src/vendor/bootstrap-vue/src/components/form-timepicker/_form-timepicker.scss +0 -1
  340. package/src/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.js +0 -308
  341. package/src/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.spec.js +0 -440
  342. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.d.ts +0 -12
  343. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.js +0 -11
  344. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.scss +0 -1
  345. package/src/vendor/bootstrap-vue/src/components/form-timepicker/package.json +0 -255
  346. package/src/vendor/bootstrap-vue/src/components/image/README.md +0 -322
  347. package/src/vendor/bootstrap-vue/src/components/image/img-lazy.js +0 -161
  348. package/src/vendor/bootstrap-vue/src/components/image/img-lazy.spec.js +0 -96
  349. package/src/vendor/bootstrap-vue/src/components/image/img.js +0 -139
  350. package/src/vendor/bootstrap-vue/src/components/image/img.spec.js +0 -255
  351. package/src/vendor/bootstrap-vue/src/components/image/index.d.ts +0 -14
  352. package/src/vendor/bootstrap-vue/src/components/image/index.js +0 -12
  353. package/src/vendor/bootstrap-vue/src/components/image/package.json +0 -152
  354. package/src/vendor/bootstrap-vue/src/components/jumbotron/README.md +0 -109
  355. package/src/vendor/bootstrap-vue/src/components/jumbotron/index.d.ts +0 -11
  356. package/src/vendor/bootstrap-vue/src/components/jumbotron/index.js +0 -8
  357. package/src/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.js +0 -103
  358. package/src/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.spec.js +0 -254
  359. package/src/vendor/bootstrap-vue/src/components/jumbotron/package.json +0 -66
  360. package/src/vendor/bootstrap-vue/src/components/layout/container.js +0 -40
  361. package/src/vendor/bootstrap-vue/src/components/layout/container.spec.js +0 -75
  362. package/src/vendor/bootstrap-vue/src/components/layout/row.js +0 -111
  363. package/src/vendor/bootstrap-vue/src/components/layout/row.spec.js +0 -138
  364. package/src/vendor/bootstrap-vue/src/components/list-group/README.md +0 -291
  365. package/src/vendor/bootstrap-vue/src/components/list-group/index.d.ts +0 -14
  366. package/src/vendor/bootstrap-vue/src/components/list-group/index.js +0 -12
  367. package/src/vendor/bootstrap-vue/src/components/list-group/list-group-item.js +0 -76
  368. package/src/vendor/bootstrap-vue/src/components/list-group/list-group-item.spec.js +0 -286
  369. package/src/vendor/bootstrap-vue/src/components/list-group/list-group.js +0 -42
  370. package/src/vendor/bootstrap-vue/src/components/list-group/list-group.spec.js +0 -132
  371. package/src/vendor/bootstrap-vue/src/components/list-group/package.json +0 -52
  372. package/src/vendor/bootstrap-vue/src/components/media/README.md +0 -183
  373. package/src/vendor/bootstrap-vue/src/components/media/_media.scss +0 -9
  374. package/src/vendor/bootstrap-vue/src/components/media/index.d.ts +0 -17
  375. package/src/vendor/bootstrap-vue/src/components/media/index.js +0 -14
  376. package/src/vendor/bootstrap-vue/src/components/media/index.scss +0 -1
  377. package/src/vendor/bootstrap-vue/src/components/media/media-aside.js +0 -45
  378. package/src/vendor/bootstrap-vue/src/components/media/media-aside.spec.js +0 -79
  379. package/src/vendor/bootstrap-vue/src/components/media/media-body.js +0 -25
  380. package/src/vendor/bootstrap-vue/src/components/media/media-body.spec.js +0 -47
  381. package/src/vendor/bootstrap-vue/src/components/media/media.js +0 -52
  382. package/src/vendor/bootstrap-vue/src/components/media/media.spec.js +0 -149
  383. package/src/vendor/bootstrap-vue/src/components/media/package.json +0 -65
  384. package/src/vendor/bootstrap-vue/src/components/nav/nav-form.js +0 -50
  385. package/src/vendor/bootstrap-vue/src/components/nav/nav-form.spec.js +0 -93
  386. package/src/vendor/bootstrap-vue/src/components/nav/nav-text.js +0 -18
  387. package/src/vendor/bootstrap-vue/src/components/nav/nav-text.spec.js +0 -30
  388. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-nav.js +0 -45
  389. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-nav.spec.js +0 -105
  390. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.js +0 -84
  391. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.spec.js +0 -189
  392. package/src/vendor/bootstrap-vue/src/components/overlay/README.md +0 -815
  393. package/src/vendor/bootstrap-vue/src/components/overlay/index.d.ts +0 -11
  394. package/src/vendor/bootstrap-vue/src/components/overlay/index.js +0 -8
  395. package/src/vendor/bootstrap-vue/src/components/overlay/overlay.js +0 -162
  396. package/src/vendor/bootstrap-vue/src/components/overlay/overlay.spec.js +0 -257
  397. package/src/vendor/bootstrap-vue/src/components/overlay/package.json +0 -130
  398. package/src/vendor/bootstrap-vue/src/components/pagination/README.md +0 -430
  399. package/src/vendor/bootstrap-vue/src/components/pagination/_pagination.scss +0 -26
  400. package/src/vendor/bootstrap-vue/src/components/pagination/index.d.ts +0 -11
  401. package/src/vendor/bootstrap-vue/src/components/pagination/index.js +0 -8
  402. package/src/vendor/bootstrap-vue/src/components/pagination/index.scss +0 -1
  403. package/src/vendor/bootstrap-vue/src/components/pagination/package.json +0 -295
  404. package/src/vendor/bootstrap-vue/src/components/pagination/pagination.js +0 -138
  405. package/src/vendor/bootstrap-vue/src/components/pagination/pagination.spec.js +0 -1198
  406. package/src/vendor/bootstrap-vue/src/components/pagination-nav/README.md +0 -544
  407. package/src/vendor/bootstrap-vue/src/components/pagination-nav/_pagination-nav.scss +0 -2
  408. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.d.ts +0 -11
  409. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.js +0 -8
  410. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.scss +0 -1
  411. package/src/vendor/bootstrap-vue/src/components/pagination-nav/package.json +0 -315
  412. package/src/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.js +0 -281
  413. package/src/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.spec.js +0 -671
  414. package/src/vendor/bootstrap-vue/src/components/sidebar/README.md +0 -406
  415. package/src/vendor/bootstrap-vue/src/components/sidebar/_sidebar.scss +0 -97
  416. package/src/vendor/bootstrap-vue/src/components/sidebar/index.d.ts +0 -11
  417. package/src/vendor/bootstrap-vue/src/components/sidebar/index.js +0 -10
  418. package/src/vendor/bootstrap-vue/src/components/sidebar/index.scss +0 -1
  419. package/src/vendor/bootstrap-vue/src/components/sidebar/package.json +0 -239
  420. package/src/vendor/bootstrap-vue/src/components/sidebar/sidebar.js +0 -438
  421. package/src/vendor/bootstrap-vue/src/components/sidebar/sidebar.spec.js +0 -404
  422. package/src/vendor/bootstrap-vue/src/components/skeleton/README.md +0 -275
  423. package/src/vendor/bootstrap-vue/src/components/skeleton/_skeleton.scss +0 -141
  424. package/src/vendor/bootstrap-vue/src/components/skeleton/index.d.ts +0 -23
  425. package/src/vendor/bootstrap-vue/src/components/skeleton/index.js +0 -18
  426. package/src/vendor/bootstrap-vue/src/components/skeleton/index.scss +0 -1
  427. package/src/vendor/bootstrap-vue/src/components/skeleton/package.json +0 -136
  428. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.js +0 -45
  429. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.spec.js +0 -86
  430. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.js +0 -49
  431. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.spec.js +0 -139
  432. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.js +0 -58
  433. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.spec.js +0 -119
  434. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.js +0 -47
  435. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.spec.js +0 -48
  436. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton.js +0 -46
  437. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton.spec.js +0 -126
  438. package/src/vendor/bootstrap-vue/src/components/spinner/README.md +0 -229
  439. package/src/vendor/bootstrap-vue/src/components/spinner/index.d.ts +0 -11
  440. package/src/vendor/bootstrap-vue/src/components/spinner/index.js +0 -8
  441. package/src/vendor/bootstrap-vue/src/components/spinner/package.json +0 -38
  442. package/src/vendor/bootstrap-vue/src/components/spinner/spinner.js +0 -54
  443. package/src/vendor/bootstrap-vue/src/components/spinner/spinner.spec.js +0 -305
  444. package/src/vendor/bootstrap-vue/src/components/time/README.md +0 -431
  445. package/src/vendor/bootstrap-vue/src/components/time/_time.scss +0 -41
  446. package/src/vendor/bootstrap-vue/src/components/time/index.d.ts +0 -27
  447. package/src/vendor/bootstrap-vue/src/components/time/index.js +0 -8
  448. package/src/vendor/bootstrap-vue/src/components/time/index.scss +0 -1
  449. package/src/vendor/bootstrap-vue/src/components/time/package.json +0 -123
  450. package/src/vendor/bootstrap-vue/src/components/time/time.js +0 -601
  451. package/src/vendor/bootstrap-vue/src/components/time/time.spec.js +0 -330
  452. package/src/vendor/bootstrap-vue/src/constants/date.js +0 -7
  453. package/src/vendor/bootstrap-vue/src/mixins/card.js +0 -23
  454. package/src/vendor/bootstrap-vue/src/mixins/pagination.js +0 -670
  455. package/src/vendor/bootstrap-vue/src/utils/date.js +0 -130
  456. package/src/vendor/bootstrap-vue/src/utils/date.spec.js +0 -159
@@ -1,1198 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { waitNT } from '../../../tests/utils'
3
- import { isVisible, getBCR, contains } from '../../utils/dom'
4
- import { BPagination } from './pagination'
5
-
6
- const wrapperArrayToArray = wrapperArray => {
7
- const array = []
8
- for (let i = 0; i < wrapperArray.length; i++) {
9
- array.push(wrapperArray.at(i))
10
- }
11
- return array
12
- }
13
-
14
- describe('pagination', () => {
15
- it('renders with correct basic structure for root element', async () => {
16
- const wrapper = mount(BPagination, {
17
- propsData: {
18
- totalRows: 1,
19
- perPage: 1
20
- }
21
- })
22
- expect(wrapper.element.tagName).toBe('UL')
23
- // Classes
24
- expect(wrapper.classes()).toContain('pagination')
25
- expect(wrapper.classes()).toContain('b-pagination')
26
- expect(wrapper.classes()).not.toContain('pagination-sm')
27
- expect(wrapper.classes()).not.toContain('pagination-lg')
28
- expect(wrapper.classes()).not.toContain('justify-content-center')
29
- expect(wrapper.classes()).not.toContain('justify-content-end')
30
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
31
- // Attributes
32
- expect(wrapper.attributes('role')).toBe('menubar')
33
- expect(wrapper.attributes('aria-disabled')).toBe('false')
34
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
35
-
36
- wrapper.destroy()
37
- })
38
-
39
- it('renders with correct basic inner structure', async () => {
40
- const wrapper = mount(BPagination, {
41
- propsData: {
42
- totalRows: 1,
43
- perPage: 1,
44
- value: 1
45
- }
46
- })
47
- expect(wrapper.element.tagName).toBe('UL')
48
- const lis = wrapper.findAll('li')
49
- expect(lis).toBeDefined()
50
- expect(lis.length).toBe(5)
51
-
52
- lis.wrappers.forEach((li, index) => {
53
- expect(li.classes()).toContain('page-item')
54
- const pageLink = li.find('.page-link')
55
- expect(pageLink).toBeDefined()
56
- if (index === 2) {
57
- expect(li.classes()).toContain('active')
58
- expect(li.classes()).not.toContain('disabled')
59
- expect(pageLink.element.tagName).toBe('BUTTON')
60
- } else {
61
- expect(li.classes()).not.toContain('active')
62
- expect(li.classes()).toContain('disabled')
63
- expect(pageLink.element.tagName).toBe('SPAN')
64
- }
65
- })
66
-
67
- const first = lis.at(0)
68
- const prev = lis.at(1)
69
- const page = lis.at(2)
70
- const next = lis.at(3)
71
- const last = lis.at(4)
72
-
73
- // Button content
74
- expect(first.find('.page-link').text()).toEqual('«')
75
- expect(prev.find('.page-link').text()).toEqual('‹')
76
- expect(page.find('.page-link').text()).toEqual('1')
77
- expect(next.find('.page-link').text()).toEqual('›')
78
- expect(last.find('.page-link').text()).toEqual('»')
79
-
80
- // Page button attrs
81
- expect(page.find('.page-link').attributes('type')).toEqual('button')
82
- expect(page.find('.page-link').attributes('role')).toEqual('menuitemradio')
83
- expect(page.find('.page-link').attributes('aria-checked')).toEqual('true')
84
- expect(page.find('.page-link').attributes('aria-posinset')).toEqual('1')
85
- expect(page.find('.page-link').attributes('aria-setsize')).toEqual('1')
86
- expect(page.find('.page-link').attributes('tabindex')).toEqual('0')
87
- expect(page.find('.page-link').attributes('aria-label')).toEqual('Go to page 1')
88
-
89
- wrapper.destroy()
90
- })
91
-
92
- it('renders scopedSlot page', async () => {
93
- const scopes = []
94
- const wrapper = mount(BPagination, {
95
- propsData: {
96
- totalRows: 3,
97
- perPage: 1,
98
- limit: 10,
99
- value: 1
100
- },
101
- scopedSlots: {
102
- page: scope => {
103
- const pageNum = scope.page
104
- scopes[pageNum - 1] = scope
105
- return `Page ${scope.page}`
106
- }
107
- }
108
- })
109
-
110
- expect(wrapper).toBeDefined()
111
- await waitNT(wrapper.vm)
112
- expect(scopes.length).toBe(3)
113
- expect(scopes[0]).toEqual({
114
- page: 1,
115
- content: '1',
116
- active: true,
117
- index: 0,
118
- disabled: false
119
- })
120
- expect(scopes[1]).toEqual({
121
- page: 2,
122
- content: '2',
123
- active: false,
124
- index: 1,
125
- disabled: false
126
- })
127
- expect(scopes[2]).toEqual({
128
- page: 3,
129
- content: '3',
130
- active: false,
131
- index: 2,
132
- disabled: false
133
- })
134
-
135
- const $links = wrapper.findAll('button.page-link')
136
- expect($links.length).toBe(5)
137
- expect($links.at(0).text()).toBe('Page 1')
138
- expect($links.at(1).text()).toBe('Page 2')
139
- expect($links.at(2).text()).toBe('Page 3')
140
-
141
- wrapper.destroy()
142
- })
143
-
144
- it('renders correct number of elements when total-rows changes', async () => {
145
- const wrapper = mount(BPagination, {
146
- propsData: {
147
- size: 'sm',
148
- totalRows: 1,
149
- perPage: 1,
150
- limit: 10
151
- }
152
- })
153
- expect(wrapper.element.tagName).toBe('UL')
154
- expect(wrapper.findAll('li').length).toBe(5)
155
-
156
- await wrapper.setProps({
157
- totalRows: 4
158
- })
159
- await waitNT(wrapper.vm)
160
-
161
- expect(wrapper.element.tagName).toBe('UL')
162
- expect(wrapper.findAll('li').length).toBe(8)
163
-
164
- await wrapper.setProps({
165
- perPage: 2
166
- })
167
- await waitNT(wrapper.vm)
168
-
169
- expect(wrapper.element.tagName).toBe('UL')
170
- expect(wrapper.findAll('li').length).toBe(6)
171
-
172
- wrapper.destroy()
173
- })
174
-
175
- it('has class "b-pagination-pills" when prop pills is set', async () => {
176
- const wrapper = mount(BPagination, {
177
- propsData: {
178
- pills: true,
179
- totalRows: 1,
180
- perPage: 1
181
- }
182
- })
183
- expect(wrapper.element.tagName).toBe('UL')
184
- // Classes
185
- expect(wrapper.classes()).toContain('pagination')
186
- expect(wrapper.classes()).toContain('b-pagination')
187
- expect(wrapper.classes()).toContain('b-pagination-pills')
188
- expect(wrapper.classes()).not.toContain('pagination-lg')
189
- expect(wrapper.classes()).not.toContain('justify-content-center')
190
- expect(wrapper.classes()).not.toContain('justify-content-end')
191
- // Attributes
192
- expect(wrapper.attributes('role')).toBe('menubar')
193
- expect(wrapper.attributes('aria-disabled')).toBe('false')
194
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
195
-
196
- wrapper.destroy()
197
- })
198
-
199
- it('has class "pagination-sm" when prop size="sm"', async () => {
200
- const wrapper = mount(BPagination, {
201
- propsData: {
202
- size: 'sm',
203
- totalRows: 1,
204
- perPage: 1
205
- }
206
- })
207
- expect(wrapper.element.tagName).toBe('UL')
208
- // Classes
209
- expect(wrapper.classes()).toContain('pagination')
210
- expect(wrapper.classes()).toContain('b-pagination')
211
- expect(wrapper.classes()).toContain('pagination-sm')
212
- expect(wrapper.classes()).not.toContain('pagination-lg')
213
- expect(wrapper.classes()).not.toContain('justify-content-center')
214
- expect(wrapper.classes()).not.toContain('justify-content-end')
215
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
216
- // Attributes
217
- expect(wrapper.attributes('role')).toBe('menubar')
218
- expect(wrapper.attributes('aria-disabled')).toBe('false')
219
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
220
-
221
- wrapper.destroy()
222
- })
223
-
224
- it('has class "pagination-lg" when prop size="lg"', async () => {
225
- const wrapper = mount(BPagination, {
226
- propsData: {
227
- size: 'lg',
228
- totalRows: 1,
229
- perPage: 1
230
- }
231
- })
232
- expect(wrapper.element.tagName).toBe('UL')
233
- // Classes
234
- expect(wrapper.classes()).toContain('pagination')
235
- expect(wrapper.classes()).toContain('b-pagination')
236
- expect(wrapper.classes()).not.toContain('pagination-sm')
237
- expect(wrapper.classes()).toContain('pagination-lg')
238
- expect(wrapper.classes()).not.toContain('justify-content-center')
239
- expect(wrapper.classes()).not.toContain('justify-content-end')
240
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
241
- // Attributes
242
- expect(wrapper.attributes('role')).toBe('menubar')
243
- expect(wrapper.attributes('aria-disabled')).toBe('false')
244
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
245
-
246
- wrapper.destroy()
247
- })
248
-
249
- it('has class "pagination-foo" when prop size="foo"', async () => {
250
- const wrapper = mount(BPagination, {
251
- propsData: {
252
- size: 'foo',
253
- totalRows: 1,
254
- perPage: 1
255
- }
256
- })
257
- expect(wrapper.element.tagName).toBe('UL')
258
- // Classes
259
- expect(wrapper.classes()).toContain('pagination-foo')
260
- expect(wrapper.classes()).toContain('pagination')
261
- expect(wrapper.classes()).toContain('b-pagination')
262
- expect(wrapper.classes()).not.toContain('pagination-sm')
263
- expect(wrapper.classes()).not.toContain('pagination-lg')
264
- expect(wrapper.classes()).not.toContain('justify-content-center')
265
- expect(wrapper.classes()).not.toContain('justify-content-end')
266
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
267
- // Attributes
268
- expect(wrapper.attributes('role')).toBe('menubar')
269
- expect(wrapper.attributes('aria-disabled')).toBe('false')
270
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
271
-
272
- wrapper.destroy()
273
- })
274
-
275
- it('has class "justify-content-center" when prop align="center"', async () => {
276
- const wrapper = mount(BPagination, {
277
- propsData: {
278
- align: 'center',
279
- totalRows: 1,
280
- perPage: 1
281
- }
282
- })
283
- expect(wrapper.element.tagName).toBe('UL')
284
- // Classes
285
- expect(wrapper.classes()).toContain('pagination')
286
- expect(wrapper.classes()).toContain('b-pagination')
287
- expect(wrapper.classes()).not.toContain('pagination-sm')
288
- expect(wrapper.classes()).not.toContain('pagination-lg')
289
- expect(wrapper.classes()).toContain('justify-content-center')
290
- expect(wrapper.classes()).not.toContain('justify-content-end')
291
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
292
- // Attributes
293
- expect(wrapper.attributes('role')).toBe('menubar')
294
- expect(wrapper.attributes('aria-disabled')).toBe('false')
295
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
296
-
297
- wrapper.destroy()
298
- })
299
-
300
- it('has class "justify-content-end" when prop align="right"', async () => {
301
- const wrapper = mount(BPagination, {
302
- propsData: {
303
- align: 'right',
304
- totalRows: 1,
305
- perPage: 1
306
- }
307
- })
308
- expect(wrapper.element.tagName).toBe('UL')
309
- // Classes
310
- expect(wrapper.classes()).toContain('pagination')
311
- expect(wrapper.classes()).toContain('b-pagination')
312
- expect(wrapper.classes()).not.toContain('pagination-sm')
313
- expect(wrapper.classes()).not.toContain('pagination-lg')
314
- expect(wrapper.classes()).not.toContain('justify-content-center')
315
- expect(wrapper.classes()).toContain('justify-content-end')
316
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
317
- // Attributes
318
- expect(wrapper.attributes('role')).toBe('menubar')
319
- expect(wrapper.attributes('aria-disabled')).toBe('false')
320
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
321
-
322
- wrapper.destroy()
323
- })
324
-
325
- it('has class "justify-content-end" when prop align="end"', async () => {
326
- const wrapper = mount(BPagination, {
327
- propsData: {
328
- align: 'end',
329
- totalRows: 1,
330
- perPage: 1
331
- }
332
- })
333
- expect(wrapper.element.tagName).toBe('UL')
334
- // Classes
335
- expect(wrapper.classes()).toContain('pagination')
336
- expect(wrapper.classes()).toContain('b-pagination')
337
- expect(wrapper.classes()).not.toContain('pagination-sm')
338
- expect(wrapper.classes()).not.toContain('pagination-lg')
339
- expect(wrapper.classes()).not.toContain('justify-content-center')
340
- expect(wrapper.classes()).toContain('justify-content-end')
341
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
342
- // Attributes
343
- expect(wrapper.attributes('role')).toBe('menubar')
344
- expect(wrapper.attributes('aria-disabled')).toBe('false')
345
- expect(wrapper.attributes('aria-label')).toBe('Pagination')
346
-
347
- wrapper.destroy()
348
- })
349
-
350
- it('has class "text-center" and "flex-fill" when prop align="fill"', async () => {
351
- const wrapper = mount(BPagination, {
352
- propsData: {
353
- align: 'fill',
354
- totalRows: 5,
355
- perPage: 1,
356
- limit: 4,
357
- value: 3
358
- }
359
- })
360
- expect(wrapper.element.tagName).toBe('UL')
361
-
362
- // Classes
363
- expect(wrapper.classes()).toContain('text-center')
364
- expect(wrapper.classes()).toContain('pagination')
365
- expect(wrapper.classes()).toContain('b-pagination')
366
- expect(wrapper.classes()).not.toContain('pagination-sm')
367
- expect(wrapper.classes()).not.toContain('pagination-lg')
368
- expect(wrapper.classes()).not.toContain('justify-content-center')
369
- expect(wrapper.classes()).not.toContain('justify-content-end')
370
- expect(wrapper.classes()).not.toContain('b-pagination-pills')
371
-
372
- expect(wrapper.findAll('li.flex-fill').length).toBe(8)
373
-
374
- wrapper.destroy()
375
- })
376
-
377
- it('has correct number of links when `hide-ellipsis` is enabled', async () => {
378
- const wrapper = mount(BPagination, {
379
- propsData: {
380
- hideEllipsis: true,
381
- totalRows: 100,
382
- perPage: 10,
383
- value: 1
384
- }
385
- })
386
- expect(wrapper.element.tagName).toBe('UL')
387
- expect(wrapper.findAll('li').length).toBe(9)
388
-
389
- await wrapper.setProps({ value: 5 })
390
- await waitNT(wrapper.vm)
391
- expect(wrapper.findAll('li').length).toBe(9)
392
-
393
- wrapper.destroy()
394
- })
395
-
396
- it('has attribute aria-controls on page links when prop aria-controls is set', async () => {
397
- const wrapper = mount(BPagination, {
398
- propsData: {
399
- hideGotoEndButtons: true,
400
- hideEllipsis: true,
401
- totalRows: 3,
402
- perPage: 1,
403
- value: 1,
404
- ariaControls: 'foo'
405
- }
406
- })
407
- expect(wrapper.element.tagName).toBe('UL')
408
- expect(wrapper.findAll('li').length).toBe(5)
409
- expect(wrapper.findAll('button.page-link').length).toBe(4)
410
- expect(
411
- wrapper
412
- .findAll('button.page-link')
413
- .wrappers.every(w => w.element.matches('[aria-controls="foo"]'))
414
- ).toBe(true)
415
-
416
- await wrapper.setProps({
417
- ariaControls: null
418
- })
419
- await waitNT(wrapper.vm)
420
- expect(wrapper.findAll('li').length).toBe(5)
421
- expect(wrapper.findAll('button.page-link').length).toBe(4)
422
- expect(
423
- wrapper.findAll('button.page-link').wrappers.every(w => w.find('[aria-controls]').exists())
424
- ).toBe(false)
425
-
426
- wrapper.destroy()
427
- })
428
-
429
- it('has attribute aria-label on page links', async () => {
430
- const wrapper = mount(BPagination, {
431
- propsData: {
432
- hideGotoEndButtons: true,
433
- hideEllipsis: true,
434
- totalRows: 3,
435
- perPage: 1,
436
- value: 1
437
- }
438
- })
439
- expect(wrapper.element.tagName).toBe('UL')
440
- expect(wrapper.findAll('li').length).toBe(5)
441
- expect(wrapper.findAll('button').length).toBe(4)
442
- expect(
443
- wrapper
444
- .findAll('button')
445
- .at(0)
446
- .attributes('aria-label')
447
- ).toBe('Go to page 1')
448
- expect(
449
- wrapper
450
- .findAll('button')
451
- .at(1)
452
- .attributes('aria-label')
453
- ).toBe('Go to page 2')
454
- expect(
455
- wrapper
456
- .findAll('button')
457
- .at(2)
458
- .attributes('aria-label')
459
- ).toBe('Go to page 3')
460
- expect(
461
- wrapper
462
- .findAll('button')
463
- .at(3)
464
- .attributes('aria-label')
465
- ).toBe('Go to next page')
466
-
467
- wrapper.destroy()
468
- })
469
-
470
- it('has all links disabled when prop disabled set', async () => {
471
- const wrapper = mount(BPagination, {
472
- propsData: {
473
- totalRows: 3,
474
- perPage: 1,
475
- value: 1,
476
- disabled: true
477
- }
478
- })
479
- expect(wrapper.element.tagName).toBe('UL')
480
- expect(wrapper.findAll('li').length).toBe(7)
481
- expect(wrapper.findAll('.page-item').length).toBe(7)
482
- expect(
483
- wrapper.findAll('.page-item').wrappers.every(w => w.element.matches('li.page-item.disabled'))
484
- ).toBe(true)
485
- expect(
486
- wrapper.findAll('.page-link').wrappers.every(w => w.element.matches('span.page-link'))
487
- ).toBe(true)
488
- expect(
489
- wrapper
490
- .findAll('.page-link')
491
- .at(2)
492
- .attributes('aria-disabled')
493
- ).toBe('true')
494
- expect(
495
- wrapper
496
- .findAll('.page-link')
497
- .at(3)
498
- .attributes('aria-disabled')
499
- ).toBe('true')
500
- expect(
501
- wrapper
502
- .findAll('.page-link')
503
- .at(4)
504
- .attributes('aria-disabled')
505
- ).toBe('true')
506
-
507
- wrapper.destroy()
508
- })
509
-
510
- it('renders classes bv-d-xs-down-none when more than 3 pages', async () => {
511
- const wrapper = mount(BPagination, {
512
- propsData: {
513
- totalRows: 70,
514
- perPage: 10,
515
- limit: 7,
516
- value: 1
517
- }
518
- })
519
- expect(wrapper.element.tagName).toBe('UL')
520
- const lis = wrapper.findAll('li')
521
- expect(lis).toBeDefined()
522
- // Including bookend buttons
523
- expect(lis.length).toBe(11)
524
-
525
- // Should have the last 4 page buttons with the
526
- // display classes when currentPage = 0
527
- expect(wrapper.vm.computedCurrentPage).toBe(1)
528
- // Grab the page buttons (includes bookends)
529
- wrapper.findAll('li').wrappers.forEach((li, index) => {
530
- expect(li.classes()).toContain('page-item')
531
- if (index === 0) {
532
- // First button
533
- expect(li.classes()).toContain('disabled')
534
- } else if (index === 1) {
535
- // Prev button
536
- expect(li.classes()).toContain('disabled')
537
- } else if (index === 9) {
538
- // Next button
539
- expect(li.classes()).not.toContain('disabled')
540
- } else if (index === 10) {
541
- // Last button
542
- expect(li.classes()).not.toContain('disabled')
543
- } else {
544
- // Page number buttons
545
- if (index === 2) {
546
- expect(li.classes()).toContain('active')
547
- } else {
548
- expect(li.classes()).not.toContain('active')
549
- }
550
- if (index < 5) {
551
- expect(li.classes()).not.toContain('bv-d-xs-down-none')
552
- } else if (index > 4) {
553
- expect(li.classes()).toContain('bv-d-xs-down-none')
554
- }
555
- }
556
- })
557
-
558
- // Should have the first and last 2 pages buttons with the
559
- // display classes when currentPage = 4
560
- await wrapper.setProps({
561
- value: '4'
562
- })
563
- await waitNT(wrapper.vm)
564
- expect(wrapper.vm.computedCurrentPage).toBe(4)
565
- // Grab the page buttons (including bookends)
566
- wrapper.findAll('li').wrappers.forEach((li, index) => {
567
- expect(li.classes()).toContain('page-item')
568
- if (index === 0) {
569
- // First button
570
- expect(li.classes()).not.toContain('disabled')
571
- } else if (index === 1) {
572
- // Prev button
573
- expect(li.classes()).not.toContain('disabled')
574
- } else if (index === 9) {
575
- // Next button
576
- expect(li.classes()).not.toContain('disabled')
577
- } else if (index === 10) {
578
- // Last button
579
- expect(li.classes()).not.toContain('disabled')
580
- } else {
581
- // Page number buttons
582
- if (index === 5) {
583
- expect(li.classes()).toContain('active')
584
- } else {
585
- expect(li.classes()).not.toContain('active')
586
- }
587
- if (index > 3 && index < 7) {
588
- expect(li.classes()).not.toContain('bv-d-xs-down-none')
589
- } else if (index < 4 || index > 6) {
590
- expect(li.classes()).toContain('bv-d-xs-down-none')
591
- }
592
- }
593
- })
594
-
595
- // Should have the first 4 pages buttons with the
596
- // display classes when currentPage = 4
597
- await wrapper.setProps({
598
- value: '7'
599
- })
600
- await waitNT(wrapper.vm)
601
- expect(wrapper.vm.computedCurrentPage).toBe(7)
602
- // Grab the page buttons (including bookends)
603
- wrapper.findAll('li').wrappers.forEach((li, index) => {
604
- expect(li.classes()).toContain('page-item')
605
- // Page number buttons
606
- if (index >= 2 && index <= 5) {
607
- // Pages 1 to 4
608
- expect(li.classes()).toContain('bv-d-xs-down-none')
609
- } else if (index >= 6 && index <= 8) {
610
- // Pages 5 to 7
611
- expect(li.classes()).not.toContain('bv-d-xs-down-none')
612
- }
613
- })
614
-
615
- wrapper.destroy()
616
- })
617
-
618
- it('places ellipsis in correct places', async () => {
619
- const wrapper = mount(BPagination, {
620
- propsData: {
621
- totalRows: 70,
622
- perPage: 10,
623
- limit: 5,
624
- value: 1
625
- }
626
- })
627
- expect(wrapper.element.tagName).toBe('UL')
628
-
629
- // Should have ellipsis in place of last button
630
- // When currentPage = 0
631
- expect(wrapper.vm.computedCurrentPage).toBe(1)
632
- // Grab the page buttons
633
- let lis = wrapper.findAll('li')
634
- expect(lis.length).toBe(9)
635
- expect(lis.at(2).attributes('role')).not.toBe('separator')
636
- expect(lis.at(6).attributes('role')).toBe('separator')
637
-
638
- // Should have both ellipsis showing when currentPage = 4
639
- await wrapper.setProps({
640
- value: '4'
641
- })
642
- await waitNT(wrapper.vm)
643
- expect(wrapper.vm.computedCurrentPage).toBe(4)
644
- lis = wrapper.findAll('li')
645
- expect(lis.length).toBe(9)
646
- expect(lis.at(2).attributes('role')).toBe('separator')
647
- expect(lis.at(6).attributes('role')).toBe('separator')
648
-
649
- // Should have first ellipsis showing when currentPage = 5
650
- await wrapper.setProps({
651
- value: 5
652
- })
653
- await waitNT(wrapper.vm)
654
- expect(wrapper.vm.computedCurrentPage).toBe(5)
655
- lis = wrapper.findAll('li')
656
- expect(lis.length).toBe(9)
657
- expect(lis.at(2).attributes('role')).toBe('separator')
658
- expect(lis.at(6).attributes('role')).not.toBe('separator')
659
-
660
- wrapper.destroy()
661
- })
662
-
663
- it('clicking buttons updates the v-model', async () => {
664
- const App = {
665
- methods: {
666
- onPageClick(bvEvent, page) {
667
- // Prevent 3rd page from being selected
668
- if (page === 3) {
669
- bvEvent.preventDefault()
670
- }
671
- }
672
- },
673
- render(h) {
674
- return h(BPagination, {
675
- props: {
676
- totalRows: 5,
677
- perPage: 1,
678
- value: 1
679
- },
680
- on: { 'page-click': this.onPageClick }
681
- })
682
- }
683
- }
684
-
685
- const wrapper = mount(App)
686
- expect(wrapper).toBeDefined()
687
-
688
- const pagination = wrapper.findComponent(BPagination)
689
- expect(pagination).toBeDefined()
690
- expect(pagination.element.tagName).toBe('UL')
691
-
692
- // Grab the page buttons
693
- const lis = pagination.findAll('li')
694
- expect(lis.length).toBe(9)
695
-
696
- expect(pagination.vm.computedCurrentPage).toBe(1)
697
- expect(pagination.emitted('input')).not.toBeDefined()
698
- expect(pagination.emitted('change')).not.toBeDefined()
699
- expect(pagination.emitted('page-click')).not.toBeDefined()
700
-
701
- // Click on current (1st) page button (does nothing)
702
- await lis
703
- .at(2)
704
- .find('button')
705
- .trigger('click')
706
- expect(pagination.vm.computedCurrentPage).toBe(1)
707
- expect(pagination.emitted('input')).not.toBeDefined()
708
- expect(pagination.emitted('change')).not.toBeDefined()
709
- expect(pagination.emitted('page-click')).not.toBeDefined()
710
-
711
- // Click on 2nd button
712
- await lis
713
- .at(3)
714
- .find('button')
715
- .trigger('click')
716
- expect(pagination.vm.computedCurrentPage).toBe(2)
717
- expect(pagination.emitted('input')).toBeDefined()
718
- expect(pagination.emitted('change')).toBeDefined()
719
- expect(pagination.emitted('page-click')).toBeDefined()
720
- expect(pagination.emitted('input')[0][0]).toBe(2)
721
- expect(pagination.emitted('change')[0][0]).toBe(2)
722
- expect(pagination.emitted('page-click').length).toBe(1)
723
-
724
- // Click goto last button
725
- await lis
726
- .at(8)
727
- .find('button')
728
- .trigger('keydown.space') // Generates a click event
729
- expect(pagination.vm.computedCurrentPage).toBe(5)
730
- expect(pagination.emitted('input')[1][0]).toBe(5)
731
- expect(pagination.emitted('change')[1][0]).toBe(5)
732
- expect(pagination.emitted('page-click').length).toBe(2)
733
-
734
- // Click prev button
735
- await lis
736
- .at(1)
737
- .find('button')
738
- .trigger('click')
739
- expect(pagination.vm.computedCurrentPage).toBe(4)
740
- expect(pagination.emitted('input')[2][0]).toBe(4)
741
- expect(pagination.emitted('change')[2][0]).toBe(4)
742
- expect(pagination.emitted('page-click').length).toBe(3)
743
-
744
- // Click on 3rd button (prevented)
745
- await lis
746
- .at(4)
747
- .find('button')
748
- .trigger('click')
749
- expect(pagination.vm.computedCurrentPage).toBe(4)
750
- expect(pagination.emitted('input').length).toBe(3)
751
- expect(pagination.emitted('change').length).toBe(3)
752
- expect(pagination.emitted('page-click').length).toBe(4)
753
-
754
- wrapper.destroy()
755
- })
756
-
757
- it('changing the limit changes the number of buttons shown', async () => {
758
- const wrapper = mount(BPagination, {
759
- propsData: {
760
- totalRows: 9,
761
- perPage: 1,
762
- value: 5,
763
- limit: 10
764
- }
765
- })
766
- expect(wrapper.element.tagName).toBe('UL')
767
-
768
- // Should be 13 <li> total
769
- expect(wrapper.findAll('li').length).toBe(13)
770
-
771
- await wrapper.setProps({
772
- limit: 4
773
- })
774
- await waitNT(wrapper.vm)
775
-
776
- // Should be 8 <li> total
777
- expect(wrapper.findAll('li').length).toBe(8)
778
-
779
- wrapper.destroy()
780
- })
781
-
782
- it('changing the number of pages to less than current page number resets to page 1', async () => {
783
- // https://github.com/bootstrap-vue/bootstrap-vue/issues/3716
784
- const wrapper = mount(BPagination, {
785
- propsData: {
786
- totalRows: 10,
787
- perPage: 1,
788
- value: 10, // Set to last page
789
- limit: 20
790
- }
791
- })
792
- expect(wrapper.vm).toBeDefined()
793
-
794
- expect(wrapper.vm.currentPage).toBe(10)
795
- expect(wrapper.emitted('input')).not.toBeDefined()
796
-
797
- // Change total rows to larger value. Should not change page number
798
- await wrapper.setProps({
799
- totalRows: 20
800
- })
801
- await waitNT(wrapper.vm)
802
- expect(wrapper.vm.currentPage).toBe(10)
803
- expect(wrapper.emitted('input')).not.toBeDefined()
804
-
805
- // Change to page 20
806
- await wrapper.setProps({
807
- value: 20
808
- })
809
- await waitNT(wrapper.vm)
810
- expect(wrapper.vm.currentPage).toBe(20)
811
- expect(wrapper.emitted('input')).toBeDefined()
812
- expect(wrapper.emitted('input').length).toBe(1)
813
- expect(wrapper.emitted('input')[0][0]).toBe(20)
814
-
815
- // Decrease number of pages should reset to page 1
816
- await wrapper.setProps({
817
- totalRows: 10
818
- })
819
- await waitNT(wrapper.vm)
820
- expect(wrapper.vm.currentPage).toBe(1)
821
- expect(wrapper.emitted('input').length).toBe(2)
822
- expect(wrapper.emitted('input')[1][0]).toBe(1)
823
-
824
- // Change to page 3
825
- await wrapper.setProps({
826
- value: 3
827
- })
828
- await waitNT(wrapper.vm)
829
- expect(wrapper.vm.currentPage).toBe(3)
830
- expect(wrapper.emitted('input').length).toBe(3)
831
- expect(wrapper.emitted('input')[2][0]).toBe(3)
832
-
833
- // Decrease number of pages to 5 should not reset to page 1
834
- await wrapper.setProps({
835
- totalRows: 5
836
- })
837
- await waitNT(wrapper.vm)
838
- expect(wrapper.vm.currentPage).toBe(3)
839
- expect(wrapper.emitted('input').length).toBe(3)
840
-
841
- wrapper.destroy()
842
- })
843
-
844
- it('changing per-page resets to page 1', async () => {
845
- // https://github.com/bootstrap-vue/bootstrap-vue/issues/2987
846
- const wrapper = mount(BPagination, {
847
- propsData: {
848
- totalRows: 10,
849
- perPage: 1,
850
- value: 4,
851
- limit: 20
852
- }
853
- })
854
- expect(wrapper.vm).toBeDefined()
855
-
856
- expect(wrapper.vm.currentPage).toBe(4)
857
- expect(wrapper.emitted('input')).not.toBeDefined()
858
-
859
- // Change perPage
860
- await wrapper.setProps({
861
- perPage: 2
862
- })
863
- await waitNT(wrapper.vm)
864
- expect(wrapper.vm.currentPage).toBe(1)
865
- expect(wrapper.emitted('input')).toBeDefined()
866
- expect(wrapper.emitted('input').length).toBe(1)
867
- expect(wrapper.emitted('input')[0][0]).toBe(1)
868
-
869
- // Change page to 3
870
- await wrapper.setProps({
871
- value: 3
872
- })
873
- await waitNT(wrapper.vm)
874
- expect(wrapper.vm.currentPage).toBe(3)
875
- expect(wrapper.emitted('input').length).toBe(2)
876
- expect(wrapper.emitted('input')[1][0]).toBe(3)
877
-
878
- // Change perPage. Should reset to page 1, even though
879
- // current page is within range of numberOfPages
880
- await wrapper.setProps({
881
- perPage: 1
882
- })
883
- await waitNT(wrapper.vm)
884
- expect(wrapper.vm.currentPage).toBe(1)
885
- expect(wrapper.emitted('input').length).toBe(3)
886
- expect(wrapper.emitted('input')[2][0]).toBe(1)
887
-
888
- wrapper.destroy()
889
- })
890
-
891
- it('fist-number and last-number props work', async () => {
892
- const selector = '.page-item .page-link'
893
- let items = []
894
-
895
- const wrapper = mount(BPagination, {
896
- propsData: {
897
- value: 1,
898
- totalRows: 10,
899
- perPage: 1,
900
- limit: 5,
901
- firstNumber: true,
902
- lastNumber: true
903
- }
904
- })
905
-
906
- expect(wrapper.vm).toBeDefined()
907
- await waitNT(wrapper.vm)
908
- expect(wrapper.findAll(selector).length).toBe(9)
909
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
910
- expect(items).toEqual(['‹', '1', '2', '3', '4', '5', '…', '10', '›'])
911
-
912
- await wrapper.setProps({
913
- value: 2
914
- })
915
- await waitNT(wrapper.vm)
916
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
917
- expect(items).toEqual(['‹', '1', '2', '3', '4', '5', '…', '10', '›'])
918
-
919
- await wrapper.setProps({
920
- value: 3
921
- })
922
- await waitNT(wrapper.vm)
923
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
924
- expect(items).toEqual(['‹', '1', '2', '3', '4', '5', '…', '10', '›'])
925
-
926
- await wrapper.setProps({
927
- value: 4
928
- })
929
- await waitNT(wrapper.vm)
930
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
931
- expect(items).toEqual(['‹', '1', '2', '3', '4', '5', '…', '10', '›'])
932
-
933
- await wrapper.setProps({
934
- value: 5
935
- })
936
- await waitNT(wrapper.vm)
937
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
938
- expect(items).toEqual(['‹', '1', '…', '4', '5', '6', '…', '10', '›'])
939
-
940
- await wrapper.setProps({
941
- value: 6
942
- })
943
- await waitNT(wrapper.vm)
944
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
945
- expect(items).toEqual(['‹', '1', '…', '5', '6', '7', '…', '10', '›'])
946
-
947
- await wrapper.setProps({
948
- value: 7
949
- })
950
- await waitNT(wrapper.vm)
951
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
952
- expect(items).toEqual(['‹', '1', '…', '6', '7', '8', '9', '10', '›'])
953
-
954
- await wrapper.setProps({
955
- value: 8
956
- })
957
- await waitNT(wrapper.vm)
958
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
959
- expect(items).toEqual(['‹', '1', '…', '6', '7', '8', '9', '10', '›'])
960
-
961
- await wrapper.setProps({
962
- value: 9
963
- })
964
- await waitNT(wrapper.vm)
965
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
966
- expect(items).toEqual(['‹', '1', '…', '6', '7', '8', '9', '10', '›'])
967
-
968
- await wrapper.setProps({
969
- value: 10
970
- })
971
- await waitNT(wrapper.vm)
972
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
973
- expect(items).toEqual(['‹', '1', '…', '6', '7', '8', '9', '10', '›'])
974
-
975
- wrapper.destroy()
976
- })
977
-
978
- it('fist-number and last-number props work with limit <=3', async () => {
979
- const selector = '.page-item .page-link'
980
- let items = []
981
-
982
- const wrapper = mount(BPagination, {
983
- propsData: {
984
- value: 1,
985
- totalRows: 10,
986
- perPage: 1,
987
- limit: 3,
988
- firstNumber: true,
989
- lastNumber: true
990
- }
991
- })
992
-
993
- expect(wrapper.vm).toBeDefined()
994
- await waitNT(wrapper.vm)
995
- expect(wrapper.findAll(selector).length).toBe(7)
996
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
997
- expect(items).toEqual(['‹', '1', '2', '3', '4', '10', '›'])
998
-
999
- await wrapper.setProps({
1000
- value: 2
1001
- })
1002
- await waitNT(wrapper.vm)
1003
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1004
- expect(items).toEqual(['‹', '1', '2', '3', '4', '10', '›'])
1005
-
1006
- await wrapper.setProps({
1007
- value: 3
1008
- })
1009
- await waitNT(wrapper.vm)
1010
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1011
- expect(items).toEqual(['‹', '1', '2', '3', '4', '10', '›'])
1012
-
1013
- await wrapper.setProps({
1014
- value: 4
1015
- })
1016
- await waitNT(wrapper.vm)
1017
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1018
- expect(items).toEqual(['‹', '1', '3', '4', '5', '10', '›'])
1019
-
1020
- await wrapper.setProps({
1021
- value: 5
1022
- })
1023
- await waitNT(wrapper.vm)
1024
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1025
- expect(items).toEqual(['‹', '1', '4', '5', '6', '10', '›'])
1026
-
1027
- await wrapper.setProps({
1028
- value: 6
1029
- })
1030
- await waitNT(wrapper.vm)
1031
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1032
- expect(items).toEqual(['‹', '1', '5', '6', '7', '10', '›'])
1033
-
1034
- await wrapper.setProps({
1035
- value: 7
1036
- })
1037
- await waitNT(wrapper.vm)
1038
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1039
- expect(items).toEqual(['‹', '1', '6', '7', '8', '10', '›'])
1040
-
1041
- await wrapper.setProps({
1042
- value: 8
1043
- })
1044
- await waitNT(wrapper.vm)
1045
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1046
- expect(items).toEqual(['‹', '1', '7', '8', '9', '10', '›'])
1047
-
1048
- await wrapper.setProps({
1049
- value: 9
1050
- })
1051
- await waitNT(wrapper.vm)
1052
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1053
- expect(items).toEqual(['‹', '1', '7', '8', '9', '10', '›'])
1054
-
1055
- await wrapper.setProps({
1056
- value: 10
1057
- })
1058
- await waitNT(wrapper.vm)
1059
- items = wrapperArrayToArray(wrapper.findAll(selector)).map(w => w.text())
1060
- expect(items).toEqual(['‹', '1', '7', '8', '9', '10', '›'])
1061
-
1062
- wrapper.destroy()
1063
- })
1064
-
1065
- // These tests are wrapped in a new describe to limit the scope of the getBCR Mock
1066
- describe('pagination keyboard navigation', () => {
1067
- const origGetBCR = Element.prototype.getBoundingClientRect
1068
-
1069
- beforeEach(() => {
1070
- // Mock `getBoundingClientRect()` so that the `isVisible(el)` test returns `true`
1071
- // In our test below, all pagination buttons would normally be visible
1072
- Element.prototype.getBoundingClientRect = jest.fn(() => ({
1073
- width: 24,
1074
- height: 24,
1075
- top: 0,
1076
- left: 0,
1077
- bottom: 0,
1078
- right: 0
1079
- }))
1080
- })
1081
- afterEach(() => {
1082
- // Restore prototype
1083
- Element.prototype.getBoundingClientRect = origGetBCR
1084
- })
1085
-
1086
- it('keyboard navigation works', async () => {
1087
- const wrapper = mount(BPagination, {
1088
- propsData: {
1089
- totalRows: 3,
1090
- perPage: 1,
1091
- value: 2,
1092
- limit: 3
1093
- },
1094
- attachTo: document.body
1095
- })
1096
- await waitNT(wrapper.vm)
1097
- expect(wrapper.element.tagName).toBe('UL')
1098
- await waitNT(wrapper.vm)
1099
- // Grab the button links (2 bookends + 3 pages + 2 bookends)
1100
- const links = wrapper.findAll('button.page-link')
1101
- expect(links.length).toBe(7)
1102
-
1103
- // Sanity check for getBCR override
1104
- expect(wrapper.element.getBoundingClientRect().width).toBe(24)
1105
- expect(getBCR(links.at(3).element).width).toBe(24)
1106
- expect(contains(document.body, links.at(3).element)).toBe(true)
1107
- expect(isVisible(links.at(3).element)).toBe(true)
1108
-
1109
- // Focus the active button
1110
- links.at(3).element.focus()
1111
- await waitNT(wrapper.vm)
1112
- expect(document.activeElement).toEqual(links.at(3).element)
1113
-
1114
- // LEFT
1115
- await wrapper.trigger('keydown.left')
1116
- expect(document.activeElement).toEqual(links.at(2).element)
1117
-
1118
- // RIGHT
1119
- await links.at(2).trigger('keydown.right')
1120
- expect(document.activeElement).toEqual(links.at(3).element)
1121
-
1122
- // UP (same as LEFT)
1123
- await wrapper.trigger('keydown.up')
1124
- expect(document.activeElement).toEqual(links.at(2).element)
1125
-
1126
- // DOWN (same as RIGHT)
1127
- await links.at(2).trigger('keydown.down')
1128
- expect(document.activeElement).toEqual(links.at(3).element)
1129
-
1130
- // SHIFT-RIGHT
1131
- await links.at(2).trigger('keydown.right', { shiftKey: true })
1132
- expect(document.activeElement).toEqual(links.at(6).element)
1133
-
1134
- // SHIFT-LEFT
1135
- await links.at(6).trigger('keydown.left', { shiftKey: true })
1136
- expect(document.activeElement).toEqual(links.at(0).element)
1137
-
1138
- wrapper.destroy()
1139
- })
1140
-
1141
- it('internal method focusCurrent() works', async () => {
1142
- const wrapper = mount(BPagination, {
1143
- propsData: {
1144
- totalRows: 3,
1145
- perPage: 1,
1146
- value: 2,
1147
- limit: 3
1148
- },
1149
- attachTo: document.body
1150
- })
1151
- await waitNT(wrapper.vm)
1152
- expect(wrapper.element.tagName).toBe('UL')
1153
- // Grab the button links (2 bookends + 3 pages + 2 bookends)
1154
- const links = wrapper.findAll('button.page-link')
1155
- expect(links.length).toBe(7)
1156
-
1157
- // Focus the last button
1158
- links.at(6).element.focus()
1159
- await waitNT(wrapper.vm)
1160
- expect(document.activeElement).toEqual(links.at(6).element)
1161
-
1162
- wrapper.vm.focusCurrent()
1163
- await waitNT(wrapper.vm)
1164
- expect(document.activeElement).toEqual(links.at(3).element)
1165
-
1166
- wrapper.destroy()
1167
- })
1168
-
1169
- it('Current page button is focused when button display changes', async () => {
1170
- const wrapper = mount(BPagination, {
1171
- propsData: {
1172
- totalRows: 10,
1173
- perPage: 1,
1174
- value: 1,
1175
- limit: 5
1176
- },
1177
- attachTo: document.body
1178
- })
1179
- let links
1180
-
1181
- await waitNT(wrapper.vm)
1182
- expect(wrapper.element.tagName).toBe('UL')
1183
- // Grab the button links (2 disabled bookends + 4 pages + (-ellipsis) + 2 bookends)
1184
- links = wrapper.findAll('button.page-link')
1185
- expect(links.length).toBe(6)
1186
-
1187
- // Click on the 4th button (page 4, index 3)
1188
- links.at(3).element.click()
1189
- await waitNT(wrapper.vm)
1190
- // Links re-rendered with first bookends enabled and an ellipsis
1191
- links = wrapper.findAll('button.page-link')
1192
- // The 4th link should be page 4, and retain focus
1193
- expect(document.activeElement).toEqual(links.at(3).element)
1194
-
1195
- wrapper.destroy()
1196
- })
1197
- })
1198
- })