@gitlab/duo-ui 3.0.0 → 4.0.0

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 (578) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.js +3 -3
  3. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +10 -10
  4. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_category_items.js +1 -1
  5. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.js +5 -15
  6. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.js +9 -9
  7. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items_loading.js +2 -2
  8. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.js +3 -29
  9. package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +7 -8
  10. package/dist/components/chat/components/duo_chat_context/utils.js +1 -102
  11. package/dist/components/chat/components/duo_chat_conversation/duo_chat_conversation.js +5 -5
  12. package/dist/components/chat/components/duo_chat_loader/duo_chat_loader.js +4 -4
  13. package/dist/components/chat/components/duo_chat_message/duo_chat_message.js +13 -13
  14. package/dist/components/chat/components/duo_chat_message_sources/duo_chat_message_sources.js +2 -2
  15. package/dist/components/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.js +1 -1
  16. package/dist/components/chat/duo_chat.js +66 -24
  17. package/dist/components.css +1 -1
  18. package/dist/components.css.map +1 -1
  19. package/dist/tailwind.css +1 -1
  20. package/dist/tailwind.css.map +1 -1
  21. package/package.json +3 -5
  22. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.vue +3 -3
  23. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +12 -12
  24. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_category_items.vue +1 -1
  25. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue +17 -24
  26. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue +9 -9
  27. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items_loading.vue +2 -2
  28. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.vue +25 -55
  29. package/src/components/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +10 -11
  30. package/src/components/chat/components/duo_chat_context/utils.js +0 -114
  31. package/src/components/chat/components/duo_chat_conversation/duo_chat_conversation.md +1 -1
  32. package/src/components/chat/components/duo_chat_conversation/duo_chat_conversation.vue +5 -5
  33. package/src/components/chat/components/duo_chat_loader/duo_chat_loader.vue +7 -7
  34. package/src/components/chat/components/duo_chat_message/duo_chat_message.md +2 -2
  35. package/src/components/chat/components/duo_chat_message/duo_chat_message.vue +14 -14
  36. package/src/components/chat/components/duo_chat_message_sources/duo_chat_message_sources.vue +2 -2
  37. package/src/components/chat/components/duo_chat_predefined_prompts/duo_chat_predefined_prompts.vue +1 -1
  38. package/src/components/chat/duo_chat.md +4 -4
  39. package/src/components/chat/duo_chat.scss +47 -0
  40. package/src/components/chat/duo_chat.vue +263 -204
  41. package/translations.js +36 -43
  42. package/src/vendor/bootstrap/LICENSE +0 -22
  43. package/src/vendor/bootstrap/scss/_alert.scss +0 -52
  44. package/src/vendor/bootstrap/scss/_badge.scss +0 -54
  45. package/src/vendor/bootstrap/scss/_breadcrumb.scss +0 -42
  46. package/src/vendor/bootstrap/scss/_button-group.scss +0 -163
  47. package/src/vendor/bootstrap/scss/_buttons.scss +0 -142
  48. package/src/vendor/bootstrap/scss/_card.scss +0 -286
  49. package/src/vendor/bootstrap/scss/_carousel.scss +0 -200
  50. package/src/vendor/bootstrap/scss/_close.scss +0 -40
  51. package/src/vendor/bootstrap/scss/_code.scss +0 -48
  52. package/src/vendor/bootstrap/scss/_custom-forms.scss +0 -526
  53. package/src/vendor/bootstrap/scss/_dropdown.scss +0 -192
  54. package/src/vendor/bootstrap/scss/_forms.scss +0 -347
  55. package/src/vendor/bootstrap/scss/_functions.scss +0 -190
  56. package/src/vendor/bootstrap/scss/_grid.scss +0 -73
  57. package/src/vendor/bootstrap/scss/_images.scss +0 -42
  58. package/src/vendor/bootstrap/scss/_input-group.scss +0 -211
  59. package/src/vendor/bootstrap/scss/_jumbotron.scss +0 -17
  60. package/src/vendor/bootstrap/scss/_list-group.scss +0 -154
  61. package/src/vendor/bootstrap/scss/_media.scss +0 -8
  62. package/src/vendor/bootstrap/scss/_mixins.scss +0 -47
  63. package/src/vendor/bootstrap/scss/_modal.scss +0 -240
  64. package/src/vendor/bootstrap/scss/_nav.scss +0 -125
  65. package/src/vendor/bootstrap/scss/_navbar.scss +0 -332
  66. package/src/vendor/bootstrap/scss/_pagination.scss +0 -74
  67. package/src/vendor/bootstrap/scss/_popover.scss +0 -170
  68. package/src/vendor/bootstrap/scss/_print.scss +0 -132
  69. package/src/vendor/bootstrap/scss/_progress.scss +0 -47
  70. package/src/vendor/bootstrap/scss/_reboot.scss +0 -484
  71. package/src/vendor/bootstrap/scss/_root.scss +0 -19
  72. package/src/vendor/bootstrap/scss/_spinners.scss +0 -65
  73. package/src/vendor/bootstrap/scss/_tables.scss +0 -185
  74. package/src/vendor/bootstrap/scss/_toasts.scss +0 -46
  75. package/src/vendor/bootstrap/scss/_tooltip.scss +0 -115
  76. package/src/vendor/bootstrap/scss/_transitions.scss +0 -26
  77. package/src/vendor/bootstrap/scss/_type.scss +0 -125
  78. package/src/vendor/bootstrap/scss/_utilities.scss +0 -18
  79. package/src/vendor/bootstrap/scss/_variables.scss +0 -1149
  80. package/src/vendor/bootstrap/scss/bootstrap-grid.scss +0 -30
  81. package/src/vendor/bootstrap/scss/bootstrap-reboot.scss +0 -12
  82. package/src/vendor/bootstrap/scss/bootstrap.scss +0 -44
  83. package/src/vendor/bootstrap/scss/mixins/_alert.scss +0 -13
  84. package/src/vendor/bootstrap/scss/mixins/_background-variant.scss +0 -23
  85. package/src/vendor/bootstrap/scss/mixins/_badge.scss +0 -17
  86. package/src/vendor/bootstrap/scss/mixins/_border-radius.scss +0 -76
  87. package/src/vendor/bootstrap/scss/mixins/_box-shadow.scss +0 -20
  88. package/src/vendor/bootstrap/scss/mixins/_breakpoints.scss +0 -123
  89. package/src/vendor/bootstrap/scss/mixins/_buttons.scss +0 -110
  90. package/src/vendor/bootstrap/scss/mixins/_caret.scss +0 -62
  91. package/src/vendor/bootstrap/scss/mixins/_clearfix.scss +0 -7
  92. package/src/vendor/bootstrap/scss/mixins/_deprecate.scss +0 -10
  93. package/src/vendor/bootstrap/scss/mixins/_float.scss +0 -14
  94. package/src/vendor/bootstrap/scss/mixins/_forms.scss +0 -195
  95. package/src/vendor/bootstrap/scss/mixins/_gradients.scss +0 -45
  96. package/src/vendor/bootstrap/scss/mixins/_grid-framework.scss +0 -80
  97. package/src/vendor/bootstrap/scss/mixins/_grid.scss +0 -69
  98. package/src/vendor/bootstrap/scss/mixins/_hover.scss +0 -37
  99. package/src/vendor/bootstrap/scss/mixins/_image.scss +0 -36
  100. package/src/vendor/bootstrap/scss/mixins/_list-group.scss +0 -21
  101. package/src/vendor/bootstrap/scss/mixins/_lists.scss +0 -7
  102. package/src/vendor/bootstrap/scss/mixins/_nav-divider.scss +0 -11
  103. package/src/vendor/bootstrap/scss/mixins/_pagination.scss +0 -22
  104. package/src/vendor/bootstrap/scss/mixins/_reset-text.scss +0 -17
  105. package/src/vendor/bootstrap/scss/mixins/_resize.scss +0 -6
  106. package/src/vendor/bootstrap/scss/mixins/_screen-reader.scss +0 -34
  107. package/src/vendor/bootstrap/scss/mixins/_size.scss +0 -7
  108. package/src/vendor/bootstrap/scss/mixins/_table-row.scss +0 -39
  109. package/src/vendor/bootstrap/scss/mixins/_text-emphasis.scss +0 -17
  110. package/src/vendor/bootstrap/scss/mixins/_text-hide.scss +0 -11
  111. package/src/vendor/bootstrap/scss/mixins/_text-truncate.scss +0 -8
  112. package/src/vendor/bootstrap/scss/mixins/_transition.scss +0 -26
  113. package/src/vendor/bootstrap/scss/mixins/_visibility.scss +0 -8
  114. package/src/vendor/bootstrap/scss/utilities/_align.scss +0 -8
  115. package/src/vendor/bootstrap/scss/utilities/_background.scss +0 -19
  116. package/src/vendor/bootstrap/scss/utilities/_borders.scss +0 -75
  117. package/src/vendor/bootstrap/scss/utilities/_clearfix.scss +0 -3
  118. package/src/vendor/bootstrap/scss/utilities/_display.scss +0 -26
  119. package/src/vendor/bootstrap/scss/utilities/_embed.scss +0 -39
  120. package/src/vendor/bootstrap/scss/utilities/_flex.scss +0 -51
  121. package/src/vendor/bootstrap/scss/utilities/_float.scss +0 -11
  122. package/src/vendor/bootstrap/scss/utilities/_interactions.scss +0 -5
  123. package/src/vendor/bootstrap/scss/utilities/_overflow.scss +0 -5
  124. package/src/vendor/bootstrap/scss/utilities/_position.scss +0 -32
  125. package/src/vendor/bootstrap/scss/utilities/_screenreaders.scss +0 -11
  126. package/src/vendor/bootstrap/scss/utilities/_shadows.scss +0 -6
  127. package/src/vendor/bootstrap/scss/utilities/_sizing.scss +0 -20
  128. package/src/vendor/bootstrap/scss/utilities/_spacing.scss +0 -73
  129. package/src/vendor/bootstrap/scss/utilities/_stretched-link.scss +0 -19
  130. package/src/vendor/bootstrap/scss/utilities/_text.scss +0 -72
  131. package/src/vendor/bootstrap/scss/utilities/_visibility.scss +0 -13
  132. package/src/vendor/bootstrap/scss/vendor/_rfs.scss +0 -228
  133. package/src/vendor/bootstrap-vue/LICENSE +0 -21
  134. package/src/vendor/bootstrap-vue/nuxt/index.js +0 -164
  135. package/src/vendor/bootstrap-vue/nuxt/plugin.template.js +0 -29
  136. package/src/vendor/bootstrap-vue/package.json +0 -201
  137. package/src/vendor/bootstrap-vue/src/_utilities.scss +0 -13
  138. package/src/vendor/bootstrap-vue/src/_variables.scss +0 -111
  139. package/src/vendor/bootstrap-vue/src/browser.js +0 -9
  140. package/src/vendor/bootstrap-vue/src/bv-config.d.ts +0 -4
  141. package/src/vendor/bootstrap-vue/src/bv-config.js +0 -6
  142. package/src/vendor/bootstrap-vue/src/components/badge/README.md +0 -126
  143. package/src/vendor/bootstrap-vue/src/components/badge/badge.js +0 -55
  144. package/src/vendor/bootstrap-vue/src/components/badge/badge.spec.js +0 -141
  145. package/src/vendor/bootstrap-vue/src/components/badge/index.d.ts +0 -7
  146. package/src/vendor/bootstrap-vue/src/components/badge/index.js +0 -3
  147. package/src/vendor/bootstrap-vue/src/components/badge/package.json +0 -29
  148. package/src/vendor/bootstrap-vue/src/components/breadcrumb/README.md +0 -93
  149. package/src/vendor/bootstrap-vue/src/components/breadcrumb/breadcrumb-item.js +0 -27
  150. package/src/vendor/bootstrap-vue/src/components/breadcrumb/breadcrumb-item.spec.js +0 -123
  151. package/src/vendor/bootstrap-vue/src/components/breadcrumb/breadcrumb-link.js +0 -43
  152. package/src/vendor/bootstrap-vue/src/components/breadcrumb/breadcrumb-link.spec.js +0 -117
  153. package/src/vendor/bootstrap-vue/src/components/breadcrumb/breadcrumb.js +0 -52
  154. package/src/vendor/bootstrap-vue/src/components/breadcrumb/breadcrumb.spec.js +0 -183
  155. package/src/vendor/bootstrap-vue/src/components/breadcrumb/index.d.ts +0 -13
  156. package/src/vendor/bootstrap-vue/src/components/breadcrumb/index.js +0 -5
  157. package/src/vendor/bootstrap-vue/src/components/breadcrumb/package.json +0 -62
  158. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -281
  159. package/src/vendor/bootstrap-vue/src/components/button/button-close.js +0 -65
  160. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  161. package/src/vendor/bootstrap-vue/src/components/button/button.js +0 -179
  162. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -385
  163. package/src/vendor/bootstrap-vue/src/components/button/index.d.ts +0 -10
  164. package/src/vendor/bootstrap-vue/src/components/button/index.js +0 -4
  165. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  166. package/src/vendor/bootstrap-vue/src/components/button-group/README.md +0 -112
  167. package/src/vendor/bootstrap-vue/src/components/button-group/button-group.js +0 -42
  168. package/src/vendor/bootstrap-vue/src/components/button-group/button-group.spec.js +0 -98
  169. package/src/vendor/bootstrap-vue/src/components/button-group/index.d.ts +0 -7
  170. package/src/vendor/bootstrap-vue/src/components/button-group/index.js +0 -3
  171. package/src/vendor/bootstrap-vue/src/components/button-group/package.json +0 -29
  172. package/src/vendor/bootstrap-vue/src/components/collapse/README.md +0 -321
  173. package/src/vendor/bootstrap-vue/src/components/collapse/collapse.js +0 -272
  174. package/src/vendor/bootstrap-vue/src/components/collapse/collapse.spec.js +0 -558
  175. package/src/vendor/bootstrap-vue/src/components/collapse/helpers/bv-collapse.js +0 -88
  176. package/src/vendor/bootstrap-vue/src/components/collapse/index.d.ts +0 -9
  177. package/src/vendor/bootstrap-vue/src/components/collapse/index.js +0 -3
  178. package/src/vendor/bootstrap-vue/src/components/collapse/package.json +0 -111
  179. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  180. package/src/vendor/bootstrap-vue/src/components/dropdown/_dropdown-form.scss +0 -38
  181. package/src/vendor/bootstrap-vue/src/components/dropdown/_dropdown-text.scss +0 -17
  182. package/src/vendor/bootstrap-vue/src/components/dropdown/_dropdown.scss +0 -58
  183. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.js +0 -36
  184. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  185. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.js +0 -47
  186. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  187. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.js +0 -76
  188. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  189. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.js +0 -46
  190. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  191. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.js +0 -93
  192. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  193. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.js +0 -87
  194. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  195. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.js +0 -42
  196. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  197. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.js +0 -202
  198. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  199. package/src/vendor/bootstrap-vue/src/components/dropdown/index.d.ts +0 -32
  200. package/src/vendor/bootstrap-vue/src/components/dropdown/index.js +0 -19
  201. package/src/vendor/bootstrap-vue/src/components/dropdown/index.scss +0 -3
  202. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  203. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -370
  204. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.js +0 -51
  205. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  206. package/src/vendor/bootstrap-vue/src/components/form/form-text.js +0 -40
  207. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  208. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.js +0 -51
  209. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  210. package/src/vendor/bootstrap-vue/src/components/form/form.js +0 -41
  211. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  212. package/src/vendor/bootstrap-vue/src/components/form/index.d.ts +0 -16
  213. package/src/vendor/bootstrap-vue/src/components/form/index.js +0 -7
  214. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  215. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -862
  216. package/src/vendor/bootstrap-vue/src/components/form-checkbox/_form-checkbox-group.scss +0 -2
  217. package/src/vendor/bootstrap-vue/src/components/form-checkbox/_form-checkbox.scss +0 -125
  218. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.js +0 -42
  219. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -642
  220. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.js +0 -132
  221. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -1331
  222. package/src/vendor/bootstrap-vue/src/components/form-checkbox/index.d.ts +0 -10
  223. package/src/vendor/bootstrap-vue/src/components/form-checkbox/index.js +0 -4
  224. package/src/vendor/bootstrap-vue/src/components/form-checkbox/index.scss +0 -2
  225. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  226. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -337
  227. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.js +0 -403
  228. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  229. package/src/vendor/bootstrap-vue/src/components/form-group/index.d.ts +0 -7
  230. package/src/vendor/bootstrap-vue/src/components/form-group/index.js +0 -3
  231. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  232. package/src/vendor/bootstrap-vue/src/components/form-input/README.md +0 -612
  233. package/src/vendor/bootstrap-vue/src/components/form-input/_form-input.scss +0 -217
  234. package/src/vendor/bootstrap-vue/src/components/form-input/form-input.js +0 -168
  235. package/src/vendor/bootstrap-vue/src/components/form-input/form-input.spec.js +0 -986
  236. package/src/vendor/bootstrap-vue/src/components/form-input/index.d.ts +0 -9
  237. package/src/vendor/bootstrap-vue/src/components/form-input/index.js +0 -3
  238. package/src/vendor/bootstrap-vue/src/components/form-input/index.scss +0 -1
  239. package/src/vendor/bootstrap-vue/src/components/form-input/package.json +0 -135
  240. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -566
  241. package/src/vendor/bootstrap-vue/src/components/form-radio/_form-radio-group.scss +0 -3
  242. package/src/vendor/bootstrap-vue/src/components/form-radio/_form-radio.scss +0 -47
  243. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.js +0 -30
  244. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -469
  245. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.js +0 -28
  246. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -952
  247. package/src/vendor/bootstrap-vue/src/components/form-radio/index.d.ts +0 -10
  248. package/src/vendor/bootstrap-vue/src/components/form-radio/index.js +0 -4
  249. package/src/vendor/bootstrap-vue/src/components/form-radio/index.scss +0 -2
  250. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  251. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  252. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.js +0 -48
  253. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  254. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.js +0 -35
  255. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  256. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.js +0 -153
  257. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  258. package/src/vendor/bootstrap-vue/src/components/form-select/helpers/mixin-options.js +0 -56
  259. package/src/vendor/bootstrap-vue/src/components/form-select/index.d.ts +0 -13
  260. package/src/vendor/bootstrap-vue/src/components/form-select/index.js +0 -5
  261. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  262. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  263. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.js +0 -226
  264. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  265. package/src/vendor/bootstrap-vue/src/components/form-textarea/index.d.ts +0 -9
  266. package/src/vendor/bootstrap-vue/src/components/form-textarea/index.js +0 -3
  267. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  268. package/src/vendor/bootstrap-vue/src/components/index.d.ts +0 -31
  269. package/src/vendor/bootstrap-vue/src/components/index.js +0 -11
  270. package/src/vendor/bootstrap-vue/src/components/index.scss +0 -12
  271. package/src/vendor/bootstrap-vue/src/components/input-group/README.md +0 -334
  272. package/src/vendor/bootstrap-vue/src/components/input-group/_input-group.scss +0 -29
  273. package/src/vendor/bootstrap-vue/src/components/input-group/index.d.ts +0 -19
  274. package/src/vendor/bootstrap-vue/src/components/input-group/index.js +0 -7
  275. package/src/vendor/bootstrap-vue/src/components/input-group/index.scss +0 -1
  276. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-addon.js +0 -43
  277. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-append.js +0 -31
  278. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-append.spec.js +0 -84
  279. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-prepend.js +0 -31
  280. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-prepend.spec.js +0 -84
  281. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-text.js +0 -31
  282. package/src/vendor/bootstrap-vue/src/components/input-group/input-group-text.spec.js +0 -45
  283. package/src/vendor/bootstrap-vue/src/components/input-group/input-group.js +0 -73
  284. package/src/vendor/bootstrap-vue/src/components/input-group/input-group.spec.js +0 -153
  285. package/src/vendor/bootstrap-vue/src/components/input-group/package.json +0 -109
  286. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  287. package/src/vendor/bootstrap-vue/src/components/layout/col.js +0 -154
  288. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  289. package/src/vendor/bootstrap-vue/src/components/layout/form-row.js +0 -31
  290. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  291. package/src/vendor/bootstrap-vue/src/components/layout/index.d.ts +0 -10
  292. package/src/vendor/bootstrap-vue/src/components/layout/index.js +0 -4
  293. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  294. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  295. package/src/vendor/bootstrap-vue/src/components/link/index.d.ts +0 -10
  296. package/src/vendor/bootstrap-vue/src/components/link/index.js +0 -3
  297. package/src/vendor/bootstrap-vue/src/components/link/link.js +0 -212
  298. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  299. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  300. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -27
  301. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1068
  302. package/src/vendor/bootstrap-vue/src/components/modal/_modal.scss +0 -5
  303. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.js +0 -22
  304. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  305. package/src/vendor/bootstrap-vue/src/components/modal/helpers/modal-manager.js +0 -219
  306. package/src/vendor/bootstrap-vue/src/components/modal/index.d.ts +0 -82
  307. package/src/vendor/bootstrap-vue/src/components/modal/index.js +0 -3
  308. package/src/vendor/bootstrap-vue/src/components/modal/index.scss +0 -1
  309. package/src/vendor/bootstrap-vue/src/components/modal/modal.js +0 -981
  310. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  311. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -548
  312. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -480
  313. package/src/vendor/bootstrap-vue/src/components/nav/_nav-item-dropdown.scss +0 -1
  314. package/src/vendor/bootstrap-vue/src/components/nav/index.d.ts +0 -17
  315. package/src/vendor/bootstrap-vue/src/components/nav/index.js +0 -5
  316. package/src/vendor/bootstrap-vue/src/components/nav/index.scss +0 -1
  317. package/src/vendor/bootstrap-vue/src/components/nav/nav-item-dropdown.js +0 -123
  318. package/src/vendor/bootstrap-vue/src/components/nav/nav-item-dropdown.spec.js +0 -268
  319. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.js +0 -49
  320. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  321. package/src/vendor/bootstrap-vue/src/components/nav/nav.js +0 -60
  322. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -244
  323. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -190
  324. package/src/vendor/bootstrap-vue/src/components/navbar/README.md +0 -333
  325. package/src/vendor/bootstrap-vue/src/components/navbar/_navbar.scss +0 -1
  326. package/src/vendor/bootstrap-vue/src/components/navbar/index.d.ts +0 -10
  327. package/src/vendor/bootstrap-vue/src/components/navbar/index.js +0 -4
  328. package/src/vendor/bootstrap-vue/src/components/navbar/index.scss +0 -1
  329. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-brand.js +0 -42
  330. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-brand.spec.js +0 -50
  331. package/src/vendor/bootstrap-vue/src/components/navbar/navbar.js +0 -78
  332. package/src/vendor/bootstrap-vue/src/components/navbar/navbar.spec.js +0 -130
  333. package/src/vendor/bootstrap-vue/src/components/navbar/package.json +0 -54
  334. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  335. package/src/vendor/bootstrap-vue/src/components/popover/_popover.scss +0 -113
  336. package/src/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover-template.js +0 -50
  337. package/src/vendor/bootstrap-vue/src/components/popover/helpers/bv-popover.js +0 -28
  338. package/src/vendor/bootstrap-vue/src/components/popover/index.d.ts +0 -7
  339. package/src/vendor/bootstrap-vue/src/components/popover/index.js +0 -3
  340. package/src/vendor/bootstrap-vue/src/components/popover/index.scss +0 -1
  341. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  342. package/src/vendor/bootstrap-vue/src/components/popover/popover.js +0 -46
  343. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -199
  344. package/src/vendor/bootstrap-vue/src/components/progress/MODIFICATIONS.md +0 -23
  345. package/src/vendor/bootstrap-vue/src/components/progress/README.md +0 -363
  346. package/src/vendor/bootstrap-vue/src/components/progress/index.d.ts +0 -10
  347. package/src/vendor/bootstrap-vue/src/components/progress/index.js +0 -4
  348. package/src/vendor/bootstrap-vue/src/components/progress/package.json +0 -109
  349. package/src/vendor/bootstrap-vue/src/components/progress/progress-bar.js +0 -133
  350. package/src/vendor/bootstrap-vue/src/components/progress/progress-bar.spec.js +0 -270
  351. package/src/vendor/bootstrap-vue/src/components/progress/progress.js +0 -57
  352. package/src/vendor/bootstrap-vue/src/components/progress/progress.spec.js +0 -71
  353. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  354. package/src/vendor/bootstrap-vue/src/components/table/_table.scss +0 -474
  355. package/src/vendor/bootstrap-vue/src/components/table/helpers/constants.js +0 -30
  356. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.js +0 -60
  357. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  358. package/src/vendor/bootstrap-vue/src/components/table/helpers/filter-event.js +0 -38
  359. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-bottom-row.js +0 -44
  360. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-busy.js +0 -88
  361. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-caption.js +0 -49
  362. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-colgroup.js +0 -27
  363. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-empty.js +0 -105
  364. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-filtering.js +0 -271
  365. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-items.js +0 -146
  366. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-pagination.js +0 -38
  367. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-provider.js +0 -188
  368. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-selectable.js +0 -241
  369. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-sorting.js +0 -299
  370. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-stacked.js +0 -33
  371. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-table-renderer.js +0 -209
  372. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody-row.js +0 -360
  373. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tbody.js +0 -258
  374. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-tfoot.js +0 -55
  375. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-thead.js +0 -238
  376. package/src/vendor/bootstrap-vue/src/components/table/helpers/mixin-top-row.js +0 -37
  377. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.js +0 -71
  378. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  379. package/src/vendor/bootstrap-vue/src/components/table/helpers/sanitize-row.js +0 -39
  380. package/src/vendor/bootstrap-vue/src/components/table/helpers/stringify-record-values.js +0 -11
  381. package/src/vendor/bootstrap-vue/src/components/table/helpers/text-selection-active.js +0 -13
  382. package/src/vendor/bootstrap-vue/src/components/table/index.d.ts +0 -237
  383. package/src/vendor/bootstrap-vue/src/components/table/index.js +0 -23
  384. package/src/vendor/bootstrap-vue/src/components/table/index.scss +0 -1
  385. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  386. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  387. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  388. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  389. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  390. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  391. package/src/vendor/bootstrap-vue/src/components/table/table-lite.js +0 -63
  392. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  393. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  394. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  395. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  396. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  397. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  398. package/src/vendor/bootstrap-vue/src/components/table/table-simple.js +0 -50
  399. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  400. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  401. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  402. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  403. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  404. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  405. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  406. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  407. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  408. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  409. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  410. package/src/vendor/bootstrap-vue/src/components/table/table.js +0 -89
  411. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  412. package/src/vendor/bootstrap-vue/src/components/table/tbody.js +0 -103
  413. package/src/vendor/bootstrap-vue/src/components/table/td.js +0 -195
  414. package/src/vendor/bootstrap-vue/src/components/table/tfoot.js +0 -95
  415. package/src/vendor/bootstrap-vue/src/components/table/th.js +0 -25
  416. package/src/vendor/bootstrap-vue/src/components/table/thead.js +0 -98
  417. package/src/vendor/bootstrap-vue/src/components/table/tr.js +0 -122
  418. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -575
  419. package/src/vendor/bootstrap-vue/src/components/tabs/index.d.ts +0 -13
  420. package/src/vendor/bootstrap-vue/src/components/tabs/index.js +0 -4
  421. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  422. package/src/vendor/bootstrap-vue/src/components/tabs/tab.js +0 -197
  423. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  424. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.js +0 -688
  425. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -836
  426. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -656
  427. package/src/vendor/bootstrap-vue/src/components/toast/_toast.scss +0 -79
  428. package/src/vendor/bootstrap-vue/src/components/toast/_toaster-transition.scss +0 -45
  429. package/src/vendor/bootstrap-vue/src/components/toast/_toaster.scss +0 -108
  430. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.js +0 -208
  431. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -131
  432. package/src/vendor/bootstrap-vue/src/components/toast/index.d.ts +0 -70
  433. package/src/vendor/bootstrap-vue/src/components/toast/index.js +0 -12
  434. package/src/vendor/bootstrap-vue/src/components/toast/index.scss +0 -3
  435. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -188
  436. package/src/vendor/bootstrap-vue/src/components/toast/toast.js +0 -454
  437. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -346
  438. package/src/vendor/bootstrap-vue/src/components/toast/toaster.js +0 -139
  439. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  440. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  441. package/src/vendor/bootstrap-vue/src/components/tooltip/_tooltip.scss +0 -86
  442. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-popper.js +0 -248
  443. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip-template.js +0 -130
  444. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +0 -977
  445. package/src/vendor/bootstrap-vue/src/components/tooltip/index.d.ts +0 -7
  446. package/src/vendor/bootstrap-vue/src/components/tooltip/index.js +0 -3
  447. package/src/vendor/bootstrap-vue/src/components/tooltip/index.scss +0 -1
  448. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  449. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.js +0 -316
  450. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1529
  451. package/src/vendor/bootstrap-vue/src/components/transition/bv-transition.js +0 -83
  452. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  453. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  454. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.js +0 -202
  455. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  456. package/src/vendor/bootstrap-vue/src/constants/classes.js +0 -1
  457. package/src/vendor/bootstrap-vue/src/constants/components.js +0 -77
  458. package/src/vendor/bootstrap-vue/src/constants/config.js +0 -4
  459. package/src/vendor/bootstrap-vue/src/constants/env.js +0 -57
  460. package/src/vendor/bootstrap-vue/src/constants/events.js +0 -57
  461. package/src/vendor/bootstrap-vue/src/constants/key-codes.js +0 -10
  462. package/src/vendor/bootstrap-vue/src/constants/popper.js +0 -8
  463. package/src/vendor/bootstrap-vue/src/constants/props.js +0 -26
  464. package/src/vendor/bootstrap-vue/src/constants/regex.js +0 -33
  465. package/src/vendor/bootstrap-vue/src/constants/safe-types.js +0 -17
  466. package/src/vendor/bootstrap-vue/src/constants/slots.js +0 -32
  467. package/src/vendor/bootstrap-vue/src/directives/modal/index.d.ts +0 -8
  468. package/src/vendor/bootstrap-vue/src/directives/modal/index.js +0 -3
  469. package/src/vendor/bootstrap-vue/src/directives/modal/modal.js +0 -115
  470. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  471. package/src/vendor/bootstrap-vue/src/directives/toggle/README.md +0 -146
  472. package/src/vendor/bootstrap-vue/src/directives/toggle/index.d.ts +0 -7
  473. package/src/vendor/bootstrap-vue/src/directives/toggle/index.js +0 -3
  474. package/src/vendor/bootstrap-vue/src/directives/toggle/package.json +0 -26
  475. package/src/vendor/bootstrap-vue/src/directives/toggle/toggle.js +0 -274
  476. package/src/vendor/bootstrap-vue/src/directives/toggle/toggle.spec.js +0 -452
  477. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  478. package/src/vendor/bootstrap-vue/src/directives/tooltip/index.d.ts +0 -7
  479. package/src/vendor/bootstrap-vue/src/directives/tooltip/index.js +0 -3
  480. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  481. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.js +0 -270
  482. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -223
  483. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  484. package/src/vendor/bootstrap-vue/src/directives/visible/index.d.ts +0 -7
  485. package/src/vendor/bootstrap-vue/src/directives/visible/index.js +0 -3
  486. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  487. package/src/vendor/bootstrap-vue/src/directives/visible/visible.js +0 -184
  488. package/src/vendor/bootstrap-vue/src/index.d.ts +0 -61
  489. package/src/vendor/bootstrap-vue/src/index.js +0 -187
  490. package/src/vendor/bootstrap-vue/src/index.scss +0 -11
  491. package/src/vendor/bootstrap-vue/src/mixins/attrs.js +0 -19
  492. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  493. package/src/vendor/bootstrap-vue/src/mixins/click-out.js +0 -72
  494. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  495. package/src/vendor/bootstrap-vue/src/mixins/dropdown.js +0 -460
  496. package/src/vendor/bootstrap-vue/src/mixins/focus-in.js +0 -44
  497. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  498. package/src/vendor/bootstrap-vue/src/mixins/form-control.js +0 -51
  499. package/src/vendor/bootstrap-vue/src/mixins/form-custom.js +0 -24
  500. package/src/vendor/bootstrap-vue/src/mixins/form-options.js +0 -73
  501. package/src/vendor/bootstrap-vue/src/mixins/form-radio-check-group.js +0 -162
  502. package/src/vendor/bootstrap-vue/src/mixins/form-radio-check.js +0 -332
  503. package/src/vendor/bootstrap-vue/src/mixins/form-selection.js +0 -60
  504. package/src/vendor/bootstrap-vue/src/mixins/form-size.js +0 -24
  505. package/src/vendor/bootstrap-vue/src/mixins/form-state.js +0 -47
  506. package/src/vendor/bootstrap-vue/src/mixins/form-text.js +0 -250
  507. package/src/vendor/bootstrap-vue/src/mixins/form-validity.js +0 -48
  508. package/src/vendor/bootstrap-vue/src/mixins/has-listener.js +0 -26
  509. package/src/vendor/bootstrap-vue/src/mixins/id.js +0 -51
  510. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.js +0 -64
  511. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  512. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.js +0 -121
  513. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  514. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.js +0 -64
  515. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  516. package/src/vendor/bootstrap-vue/src/mixins/listeners.js +0 -24
  517. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  518. package/src/vendor/bootstrap-vue/src/mixins/model.js +0 -5
  519. package/src/vendor/bootstrap-vue/src/mixins/normalize-slot.js +0 -30
  520. package/src/vendor/bootstrap-vue/src/mixins/scoped-style.js +0 -14
  521. package/src/vendor/bootstrap-vue/src/mixins/use-parent.js +0 -12
  522. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -17
  523. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.js +0 -60
  524. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  525. package/src/vendor/bootstrap-vue/src/utils/cache.js +0 -37
  526. package/src/vendor/bootstrap-vue/src/utils/clone-deep.js +0 -15
  527. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  528. package/src/vendor/bootstrap-vue/src/utils/config-set.js +0 -80
  529. package/src/vendor/bootstrap-vue/src/utils/config.js +0 -72
  530. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  531. package/src/vendor/bootstrap-vue/src/utils/create-new-child-component.js +0 -10
  532. package/src/vendor/bootstrap-vue/src/utils/css-escape.js +0 -73
  533. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  534. package/src/vendor/bootstrap-vue/src/utils/dom.js +0 -308
  535. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  536. package/src/vendor/bootstrap-vue/src/utils/element-to-vue-instance-registry.js +0 -40
  537. package/src/vendor/bootstrap-vue/src/utils/env.js +0 -15
  538. package/src/vendor/bootstrap-vue/src/utils/events.js +0 -71
  539. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  540. package/src/vendor/bootstrap-vue/src/utils/get-event-root.js +0 -3
  541. package/src/vendor/bootstrap-vue/src/utils/get-instance-from-directive.js +0 -4
  542. package/src/vendor/bootstrap-vue/src/utils/get-scope-id.js +0 -6
  543. package/src/vendor/bootstrap-vue/src/utils/get.js +0 -64
  544. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  545. package/src/vendor/bootstrap-vue/src/utils/html.js +0 -8
  546. package/src/vendor/bootstrap-vue/src/utils/identity.js +0 -1
  547. package/src/vendor/bootstrap-vue/src/utils/inspect.js +0 -51
  548. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  549. package/src/vendor/bootstrap-vue/src/utils/locale.js +0 -34
  550. package/src/vendor/bootstrap-vue/src/utils/loose-equal.js +0 -57
  551. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  552. package/src/vendor/bootstrap-vue/src/utils/loose-index-of.js +0 -11
  553. package/src/vendor/bootstrap-vue/src/utils/math.js +0 -11
  554. package/src/vendor/bootstrap-vue/src/utils/memoize.js +0 -10
  555. package/src/vendor/bootstrap-vue/src/utils/model.js +0 -29
  556. package/src/vendor/bootstrap-vue/src/utils/noop.js +0 -1
  557. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.js +0 -44
  558. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  559. package/src/vendor/bootstrap-vue/src/utils/number.js +0 -19
  560. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  561. package/src/vendor/bootstrap-vue/src/utils/object.js +0 -61
  562. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  563. package/src/vendor/bootstrap-vue/src/utils/observe-dom.js +0 -77
  564. package/src/vendor/bootstrap-vue/src/utils/plugins.js +0 -169
  565. package/src/vendor/bootstrap-vue/src/utils/props.js +0 -92
  566. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  567. package/src/vendor/bootstrap-vue/src/utils/router.js +0 -145
  568. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  569. package/src/vendor/bootstrap-vue/src/utils/safe-vue-instance.js +0 -13
  570. package/src/vendor/bootstrap-vue/src/utils/stable-sort.js +0 -31
  571. package/src/vendor/bootstrap-vue/src/utils/string.js +0 -59
  572. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  573. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.js +0 -31
  574. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  575. package/src/vendor/bootstrap-vue/src/utils/warn.js +0 -42
  576. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
  577. package/src/vendor/bootstrap-vue/src/vue-injections.d.ts +0 -13
  578. package/src/vendor/bootstrap-vue/src/vue.js +0 -126
@@ -1,1529 +0,0 @@
1
- import { createWrapper, mount } from '@vue/test-utils'
2
- import { waitNT, waitRAF } from '../../../tests/utils'
3
- import { BTooltip } from './tooltip'
4
-
5
- const MODAL_CLOSE_EVENT = 'bv::modal::hidden'
6
-
7
- // Our test application
8
- const App = {
9
- props: [
10
- 'target',
11
- 'triggers',
12
- 'show',
13
- 'noninteractive',
14
- 'disabled',
15
- 'noFade',
16
- 'title',
17
- 'titleAttr',
18
- 'btnDisabled',
19
- 'variant',
20
- 'customClass',
21
- 'delay',
22
- 'isModal'
23
- ],
24
- render(h) {
25
- const tipProps = {
26
- target: this.target || 'foo',
27
- triggers: this.triggers,
28
- show: this.show,
29
- noninteractive: this.noninteractive || false,
30
- disabled: this.disabled,
31
- noFade: this.noFade || false,
32
- title: this.title || null,
33
- variant: this.variant,
34
- customClass: this.customClass,
35
- delay: this.delay
36
- }
37
- const wrapperData = {
38
- attrs: { id: 'wrapper' },
39
- // Class to simulate being in a modal
40
- class: { 'modal-content': !!this.isModal }
41
- }
42
- return h('article', wrapperData, [
43
- h(
44
- 'button',
45
- {
46
- attrs: {
47
- id: 'foo',
48
- type: 'button',
49
- disabled: this.btnDisabled || null,
50
- title: this.titleAttr || null
51
- },
52
- ref: 'target'
53
- },
54
- 'text'
55
- ),
56
- typeof this.$slots.default === `undefined` || !this.$slots.default
57
- ? h(BTooltip, { props: tipProps })
58
- : h(BTooltip, { props: tipProps }, this.$slots.default)
59
- ])
60
- }
61
- }
62
-
63
- // Note: `wrapper.destroy()` MUST be called at the end of each test in order for
64
- // the next test to function properly!
65
- describe('b-tooltip', () => {
66
- const originalCreateRange = document.createRange
67
- const origGetBCR = Element.prototype.getBoundingClientRect
68
-
69
- beforeEach(() => {
70
- // https://github.com/FezVrasta/popper.js/issues/478#issuecomment-407422016
71
- // Hack to make Popper not bork out during tests
72
- // Note popper still does not do any positioning calculation in JSDOM though
73
- // So we cannot test actual positioning, just detect when it is open
74
- document.createRange = () => ({
75
- setStart: () => {},
76
- setEnd: () => {},
77
- commonAncestorContainer: {
78
- nodeName: 'BODY',
79
- ownerDocument: document
80
- }
81
- })
82
- // Mock `getBoundingClientRect()` so that the `isVisible(el)` test returns `true`
83
- // Needed for visibility checks of trigger element, etc
84
- Element.prototype.getBoundingClientRect = jest.fn(() => ({
85
- width: 24,
86
- height: 24,
87
- top: 0,
88
- left: 0,
89
- bottom: 0,
90
- right: 0
91
- }))
92
- })
93
-
94
- afterEach(() => {
95
- // Reset overrides
96
- document.createRange = originalCreateRange
97
- Element.prototype.getBoundingClientRect = origGetBCR
98
- return waitRAF()
99
- })
100
-
101
- it('has expected default structure', async () => {
102
- const wrapper = mount(App, {
103
- attachTo: document.body,
104
- propsData: {
105
- triggers: 'click'
106
- },
107
- slots: {
108
- default: 'title'
109
- }
110
- })
111
-
112
- expect(wrapper.vm).toBeDefined()
113
- await waitNT(wrapper.vm)
114
-
115
- expect(wrapper.element.tagName).toBe('ARTICLE')
116
- expect(wrapper.attributes('id')).toBeDefined()
117
- expect(wrapper.attributes('id')).toEqual('wrapper')
118
- expect(wrapper.classes()).not.toContain('modal-content')
119
-
120
- // The trigger button
121
- const $button = wrapper.find('button')
122
- expect($button.exists()).toBe(true)
123
- expect($button.attributes('id')).toBeDefined()
124
- expect($button.attributes('id')).toEqual('foo')
125
- expect($button.attributes('title')).toBeUndefined()
126
- expect($button.attributes('data-original-title')).toBeUndefined()
127
- expect($button.attributes('aria-describedby')).toBeUndefined()
128
-
129
- // <b-tooltip> wrapper
130
- const $tipHolder = wrapper.findComponent(BTooltip)
131
- expect($tipHolder.exists()).toBe(true)
132
- expect($tipHolder.element.nodeType).toEqual(Node.COMMENT_NODE)
133
-
134
- wrapper.destroy()
135
- })
136
-
137
- it('initially open has expected structure', async () => {
138
- jest.useFakeTimers()
139
- const wrapper = mount(App, {
140
- attachTo: document.body,
141
- propsData: {
142
- triggers: 'click',
143
- show: true
144
- },
145
- slots: {
146
- default: 'title'
147
- }
148
- })
149
-
150
- expect(wrapper.vm).toBeDefined()
151
- await waitNT(wrapper.vm)
152
- await waitRAF()
153
- await waitNT(wrapper.vm)
154
- await waitRAF()
155
- jest.runOnlyPendingTimers()
156
-
157
- expect(wrapper.element.tagName).toBe('ARTICLE')
158
- expect(wrapper.attributes('id')).toBeDefined()
159
- expect(wrapper.attributes('id')).toEqual('wrapper')
160
-
161
- // The trigger button
162
- const $button = wrapper.find('button')
163
- expect($button.exists()).toBe(true)
164
- expect($button.attributes('id')).toBeDefined()
165
- expect($button.attributes('id')).toEqual('foo')
166
- expect($button.attributes('title')).toBeUndefined()
167
- expect($button.attributes('data-original-title')).toBeUndefined()
168
- expect($button.attributes('aria-describedby')).toBeDefined()
169
- // ID of the tooltip that will be in the body
170
- const adb = $button.attributes('aria-describedby')
171
-
172
- // <b-tooltip> wrapper
173
- const $tipHolder = wrapper.findComponent(BTooltip)
174
- expect($tipHolder.exists()).toBe(true)
175
- expect($tipHolder.element.nodeType).toEqual(Node.COMMENT_NODE)
176
-
177
- // Find the tooltip element in the document
178
- const tip = document.getElementById(adb)
179
- expect(tip).not.toBe(null)
180
- expect(tip).toBeInstanceOf(HTMLElement)
181
- expect(tip.tagName).toEqual('DIV')
182
- expect(tip.classList.contains('tooltip')).toBe(true)
183
- expect(tip.classList.contains('b-tooltip')).toBe(true)
184
- expect(tip.classList.contains('interactive')).toBe(false)
185
-
186
- // Hide the tooltip
187
- await wrapper.setProps({ show: false })
188
- await waitRAF()
189
- await waitRAF()
190
- jest.runOnlyPendingTimers()
191
- await waitNT(wrapper.vm)
192
- await waitRAF()
193
-
194
- expect($button.attributes('aria-describedby')).toBeUndefined()
195
-
196
- // Tooltip element should not be in the document
197
- expect(document.body.contains(tip)).toBe(false)
198
- expect(document.querySelector(adb)).toBe(null)
199
-
200
- // Show the tooltip
201
- await wrapper.setProps({ show: true })
202
- await waitRAF()
203
- await waitRAF()
204
- jest.runOnlyPendingTimers()
205
- await waitNT(wrapper.vm)
206
- await waitRAF()
207
-
208
- expect($button.attributes('aria-describedby')).toBeDefined()
209
-
210
- // Note tip always has the same ID
211
- const tip2 = document.getElementById(adb)
212
- expect(tip2).not.toBe(null)
213
- expect(tip2).toBeInstanceOf(HTMLElement)
214
- expect(tip2.tagName).toEqual('DIV')
215
- expect(tip2.classList.contains('tooltip')).toBe(true)
216
- expect(tip2.classList.contains('b-tooltip')).toBe(true)
217
-
218
- wrapper.destroy()
219
- })
220
-
221
- it('title prop is reactive', async () => {
222
- jest.useFakeTimers()
223
- const wrapper = mount(App, {
224
- attachTo: document.body,
225
- propsData: {
226
- triggers: 'click',
227
- show: true,
228
- title: 'hello'
229
- }
230
- })
231
-
232
- expect(wrapper.vm).toBeDefined()
233
- await waitNT(wrapper.vm)
234
- await waitRAF()
235
- await waitNT(wrapper.vm)
236
- await waitRAF()
237
- await waitNT(wrapper.vm)
238
- await waitRAF()
239
- jest.runOnlyPendingTimers()
240
- await waitNT(wrapper.vm)
241
- await waitRAF()
242
-
243
- expect(wrapper.element.tagName).toBe('ARTICLE')
244
- expect(wrapper.attributes('id')).toBeDefined()
245
- expect(wrapper.attributes('id')).toEqual('wrapper')
246
-
247
- // The trigger button
248
- const $button = wrapper.find('button')
249
- expect($button.exists()).toBe(true)
250
- expect($button.attributes('id')).toBeDefined()
251
- expect($button.attributes('id')).toEqual('foo')
252
- expect($button.attributes('title')).toBeUndefined()
253
- expect($button.attributes('data-original-title')).toBeUndefined()
254
- expect($button.attributes('aria-describedby')).toBeDefined()
255
- // ID of the tooltip that will be in the body
256
- const adb = $button.attributes('aria-describedby')
257
-
258
- // <b-tooltip> wrapper
259
- const $tipHolder = wrapper.findComponent(BTooltip)
260
- expect($tipHolder.exists()).toBe(true)
261
- expect($tipHolder.element.nodeType).toEqual(Node.COMMENT_NODE)
262
-
263
- // Find the tooltip element in the document
264
- const tip = document.getElementById(adb)
265
- expect(tip).not.toBe(null)
266
- expect(tip).toBeInstanceOf(HTMLElement)
267
- const $tip = createWrapper(tip)
268
- expect($tip.element.tagName).toBe('DIV')
269
- expect($tip.classes()).toContain('tooltip')
270
- expect($tip.classes()).toContain('b-tooltip')
271
- // Should contain our title prop value
272
- expect($tip.text()).toContain('hello')
273
-
274
- // Change the title prop
275
- await wrapper.setProps({ title: 'world' })
276
- await waitRAF()
277
- await waitRAF()
278
-
279
- // Tooltip element should still be in the document
280
- expect(document.body.contains(tip)).toBe(true)
281
- expect($tip.classes()).toContain('tooltip')
282
- expect($tip.classes()).toContain('b-tooltip')
283
- // Should contain the new updated content
284
- expect($tip.text()).toContain('world')
285
-
286
- wrapper.destroy()
287
- })
288
-
289
- it('providing the trigger element by function works', async () => {
290
- jest.useFakeTimers()
291
- const wrapper = mount(App, {
292
- attachTo: document.body,
293
- propsData: {
294
- target: () => wrapper.vm.$refs.target,
295
- triggers: 'click',
296
- show: false
297
- },
298
- slots: {
299
- default: 'title'
300
- }
301
- })
302
-
303
- expect(wrapper.vm).toBeDefined()
304
- await waitNT(wrapper.vm)
305
- await waitRAF()
306
- await waitNT(wrapper.vm)
307
- await waitRAF()
308
- jest.runOnlyPendingTimers()
309
-
310
- expect(wrapper.element.tagName).toBe('ARTICLE')
311
- expect(wrapper.attributes('id')).toBeDefined()
312
- expect(wrapper.attributes('id')).toEqual('wrapper')
313
-
314
- // The trigger button
315
- const $button = wrapper.find('button')
316
- expect($button.exists()).toBe(true)
317
- expect($button.attributes('id')).toBeDefined()
318
- expect($button.attributes('id')).toEqual('foo')
319
- expect($button.attributes('aria-describedby')).toBeUndefined()
320
-
321
- // <b-tooltip> wrapper
322
- const $tipHolder = wrapper.findComponent(BTooltip)
323
- expect($tipHolder.exists()).toBe(true)
324
-
325
- // Activate tooltip by trigger
326
- await $button.trigger('click')
327
- await waitRAF()
328
- await waitRAF()
329
- jest.runOnlyPendingTimers()
330
- await waitNT(wrapper.vm)
331
- await waitRAF()
332
-
333
- expect($button.attributes('id')).toBeDefined()
334
- expect($button.attributes('id')).toEqual('foo')
335
- expect($button.attributes('aria-describedby')).toBeDefined()
336
- // ID of the tooltip that will be in the body
337
- const adb = $button.attributes('aria-describedby')
338
-
339
- // Find the tooltip element in the document
340
- const tip = document.getElementById(adb)
341
- expect(tip).not.toBe(null)
342
- expect(tip).toBeInstanceOf(HTMLElement)
343
- expect(tip.tagName).toEqual('DIV')
344
- expect(tip.classList.contains('tooltip')).toBe(true)
345
- expect(tip.classList.contains('b-tooltip')).toBe(true)
346
-
347
- wrapper.destroy()
348
- })
349
-
350
- it('activating trigger element (click) opens tooltip', async () => {
351
- jest.useFakeTimers()
352
- const wrapper = mount(App, {
353
- attachTo: document.body,
354
- propsData: {
355
- triggers: 'click',
356
- show: false
357
- },
358
- slots: {
359
- default: 'title'
360
- }
361
- })
362
-
363
- expect(wrapper.vm).toBeDefined()
364
- await waitNT(wrapper.vm)
365
- await waitRAF()
366
- await waitNT(wrapper.vm)
367
- await waitRAF()
368
- jest.runOnlyPendingTimers()
369
-
370
- expect(wrapper.element.tagName).toBe('ARTICLE')
371
- expect(wrapper.attributes('id')).toBeDefined()
372
- expect(wrapper.attributes('id')).toEqual('wrapper')
373
-
374
- // The trigger button
375
- const $button = wrapper.find('button')
376
- expect($button.exists()).toBe(true)
377
- expect($button.attributes('id')).toBeDefined()
378
- expect($button.attributes('id')).toEqual('foo')
379
- expect($button.attributes('aria-describedby')).toBeUndefined()
380
-
381
- // <b-tooltip> wrapper
382
- const $tipHolder = wrapper.findComponent(BTooltip)
383
- expect($tipHolder.exists()).toBe(true)
384
-
385
- // Activate tooltip by trigger
386
- await $button.trigger('click')
387
- await waitRAF()
388
- await waitRAF()
389
- jest.runOnlyPendingTimers()
390
- await waitNT(wrapper.vm)
391
- await waitRAF()
392
-
393
- expect($button.attributes('id')).toBeDefined()
394
- expect($button.attributes('id')).toEqual('foo')
395
- expect($button.attributes('aria-describedby')).toBeDefined()
396
- // ID of the tooltip that will be in the body
397
- const adb = $button.attributes('aria-describedby')
398
-
399
- // Find the tooltip element in the document
400
- const tip = document.getElementById(adb)
401
- expect(tip).not.toBe(null)
402
- expect(tip).toBeInstanceOf(HTMLElement)
403
- expect(tip.tagName).toEqual('DIV')
404
- expect(tip.classList.contains('tooltip')).toBe(true)
405
- expect(tip.classList.contains('b-tooltip')).toBe(true)
406
-
407
- wrapper.destroy()
408
- })
409
-
410
- it('activating trigger element (focus) opens tooltip', async () => {
411
- jest.useFakeTimers()
412
- const wrapper = mount(App, {
413
- attachTo: document.body,
414
- propsData: {
415
- triggers: 'focus',
416
- show: false,
417
- delay: 0
418
- },
419
- slots: {
420
- default: 'title'
421
- }
422
- })
423
-
424
- expect(wrapper.vm).toBeDefined()
425
- await waitNT(wrapper.vm)
426
- await waitRAF()
427
- await waitNT(wrapper.vm)
428
- await waitRAF()
429
- await waitNT(wrapper.vm)
430
- await waitRAF()
431
- jest.runOnlyPendingTimers()
432
- await waitNT(wrapper.vm)
433
- await waitRAF()
434
-
435
- expect(wrapper.element.tagName).toBe('ARTICLE')
436
- expect(wrapper.attributes('id')).toBeDefined()
437
- expect(wrapper.attributes('id')).toEqual('wrapper')
438
-
439
- // The trigger button
440
- const $button = wrapper.find('button')
441
- expect($button.exists()).toBe(true)
442
- expect($button.attributes('id')).toBeDefined()
443
- expect($button.attributes('id')).toEqual('foo')
444
- expect($button.attributes('aria-describedby')).toBeUndefined()
445
-
446
- // <b-tooltip> wrapper
447
- const $tipHolder = wrapper.findComponent(BTooltip)
448
- expect($tipHolder.exists()).toBe(true)
449
-
450
- // Activate tooltip by trigger
451
- await $button.trigger('focusin')
452
- await waitRAF()
453
- await waitRAF()
454
- jest.runOnlyPendingTimers()
455
- await waitNT(wrapper.vm)
456
- await waitRAF()
457
-
458
- expect($button.attributes('id')).toBeDefined()
459
- expect($button.attributes('id')).toEqual('foo')
460
- expect($button.attributes('aria-describedby')).toBeDefined()
461
- // ID of the tooltip that will be in the body
462
- const adb = $button.attributes('aria-describedby')
463
-
464
- // Find the tooltip element in the document
465
- const tip = document.getElementById(adb)
466
- expect(tip).not.toBe(null)
467
- expect(tip).toBeInstanceOf(HTMLElement)
468
- expect(tip.tagName).toEqual('DIV')
469
- expect(tip.classList.contains('tooltip')).toBe(true)
470
- expect(tip.classList.contains('b-tooltip')).toBe(true)
471
-
472
- // Deactivate tooltip by trigger
473
- await $button.trigger('focusout', { relatedTarget: document.body })
474
- await waitRAF()
475
- await waitRAF()
476
- jest.runOnlyPendingTimers()
477
- await waitNT(wrapper.vm)
478
- await waitRAF()
479
-
480
- // Tooltip element should not be in the document
481
- expect($button.attributes('aria-describedby')).toBeUndefined()
482
- expect(document.body.contains(tip)).toBe(false)
483
- expect(document.getElementById(adb)).toBe(null)
484
-
485
- wrapper.destroy()
486
- })
487
-
488
- it('activating trigger element (hover) opens tooltip', async () => {
489
- jest.useFakeTimers()
490
- const wrapper = mount(App, {
491
- attachTo: document.body,
492
- propsData: {
493
- triggers: 'hover',
494
- show: false,
495
- // Add no fade for coverage
496
- noFade: true
497
- },
498
- slots: {
499
- default: 'title'
500
- }
501
- })
502
-
503
- expect(wrapper.vm).toBeDefined()
504
- await waitNT(wrapper.vm)
505
- await waitRAF()
506
- await waitNT(wrapper.vm)
507
- await waitRAF()
508
- jest.runOnlyPendingTimers()
509
- await waitNT(wrapper.vm)
510
- await waitRAF()
511
-
512
- expect(wrapper.element.tagName).toBe('ARTICLE')
513
- expect(wrapper.attributes('id')).toBeDefined()
514
- expect(wrapper.attributes('id')).toEqual('wrapper')
515
-
516
- // The trigger button
517
- const $button = wrapper.find('button')
518
- expect($button.exists()).toBe(true)
519
- expect($button.attributes('id')).toBeDefined()
520
- expect($button.attributes('id')).toEqual('foo')
521
- expect($button.attributes('aria-describedby')).toBeUndefined()
522
-
523
- // <b-tooltip> wrapper
524
- const $tipHolder = wrapper.findComponent(BTooltip)
525
- expect($tipHolder.exists()).toBe(true)
526
-
527
- // Activate tooltip by trigger
528
- await $button.trigger('mouseenter')
529
- await waitRAF()
530
- await waitRAF()
531
- jest.runOnlyPendingTimers()
532
- await waitNT(wrapper.vm)
533
- await waitRAF()
534
-
535
- expect($button.attributes('id')).toBeDefined()
536
- expect($button.attributes('id')).toEqual('foo')
537
- expect($button.attributes('aria-describedby')).toBeDefined()
538
- // ID of the tooltip that will be in the body
539
- const adb = $button.attributes('aria-describedby')
540
-
541
- // Find the tooltip element in the document
542
- const tip = document.getElementById(adb)
543
- expect(tip).not.toBe(null)
544
- expect(tip).toBeInstanceOf(HTMLElement)
545
- expect(tip.tagName).toEqual('DIV')
546
- expect(tip.classList.contains('tooltip')).toBe(true)
547
- expect(tip.classList.contains('b-tooltip')).toBe(true)
548
-
549
- // Deactivate tooltip by trigger
550
- await $button.trigger('mouseleave', { relatedTarget: document.body })
551
- await waitRAF()
552
- await waitRAF()
553
- jest.runOnlyPendingTimers()
554
- await waitNT(wrapper.vm)
555
- await waitRAF()
556
- await waitNT(wrapper.vm)
557
- await waitRAF()
558
-
559
- // Tooltip element should not be in the document
560
- expect($button.attributes('aria-describedby')).toBeUndefined()
561
- expect(document.body.contains(tip)).toBe(false)
562
- expect(document.getElementById(adb)).toBe(null)
563
-
564
- wrapper.destroy()
565
- })
566
-
567
- it('disabled tooltip does not open on trigger', async () => {
568
- jest.useFakeTimers()
569
- const wrapper = mount(App, {
570
- attachTo: document.body,
571
- propsData: {
572
- triggers: 'click',
573
- show: false,
574
- disabled: true
575
- },
576
- slots: {
577
- default: 'title'
578
- }
579
- })
580
-
581
- expect(wrapper.vm).toBeDefined()
582
- await waitNT(wrapper.vm)
583
- await waitRAF()
584
- await waitNT(wrapper.vm)
585
- await waitRAF()
586
- jest.runOnlyPendingTimers()
587
- await waitNT(wrapper.vm)
588
- await waitRAF()
589
-
590
- expect(wrapper.element.tagName).toBe('ARTICLE')
591
- expect(wrapper.attributes('id')).toBeDefined()
592
- expect(wrapper.attributes('id')).toEqual('wrapper')
593
-
594
- // The trigger button
595
- const $button = wrapper.find('button')
596
- expect($button.exists()).toBe(true)
597
- expect($button.attributes('id')).toBeDefined()
598
- expect($button.attributes('id')).toEqual('foo')
599
- expect($button.attributes('aria-describedby')).toBeUndefined()
600
-
601
- // b-tooltip wrapper
602
- const $tipHolder = wrapper.findComponent(BTooltip)
603
- expect($tipHolder.exists()).toBe(true)
604
-
605
- // Try to activate tooltip by trigger
606
- await $button.trigger('click')
607
- await waitRAF()
608
- await waitRAF()
609
- jest.runOnlyPendingTimers()
610
- await waitNT(wrapper.vm)
611
- await waitRAF()
612
-
613
- // Tooltip should not have opened
614
- expect($button.attributes('aria-describedby')).toBeUndefined()
615
-
616
- // Now enable the tooltip
617
- await wrapper.setProps({ disabled: false })
618
- await waitRAF()
619
- await waitRAF()
620
- jest.runOnlyPendingTimers()
621
- await waitNT(wrapper.vm)
622
- await waitRAF()
623
-
624
- // Try to activate tooltip by trigger
625
- await $button.trigger('click')
626
- await waitRAF()
627
- await waitRAF()
628
- jest.runOnlyPendingTimers()
629
- await waitNT(wrapper.vm)
630
- await waitRAF()
631
- await waitNT(wrapper.vm)
632
- await waitRAF()
633
-
634
- expect($button.attributes('aria-describedby')).toBeDefined()
635
- const adb = $button.attributes('aria-describedby')
636
-
637
- // Find the tooltip element in the document
638
- const tip = document.getElementById(adb)
639
- expect(tip).not.toBe(null)
640
- expect(tip).toBeInstanceOf(HTMLElement)
641
- expect(tip.tagName).toEqual('DIV')
642
- expect(tip.classList.contains('tooltip')).toBe(true)
643
-
644
- // Now disable the tooltip
645
- await wrapper.setProps({ disabled: true })
646
- await waitRAF()
647
- await waitRAF()
648
- jest.runOnlyPendingTimers()
649
- await waitNT(wrapper.vm)
650
- await waitRAF()
651
- await waitNT(wrapper.vm)
652
- await waitRAF()
653
-
654
- // Try to close tooltip by trigger
655
- await $button.trigger('click')
656
- await waitRAF()
657
- await waitRAF()
658
- jest.runOnlyPendingTimers()
659
- await waitNT(wrapper.vm)
660
- await waitRAF()
661
- await waitNT(wrapper.vm)
662
- await waitRAF()
663
-
664
- // expect($button.attributes('aria-describedby')).toBeUndefined()
665
-
666
- wrapper.destroy()
667
- })
668
-
669
- it('closes/opens on instance events', async () => {
670
- jest.useFakeTimers()
671
- const wrapper = mount(App, {
672
- attachTo: document.body,
673
- propsData: {
674
- triggers: 'click',
675
- show: true,
676
- disabled: false,
677
- titleAttr: 'ignored'
678
- },
679
- slots: {
680
- default: 'title'
681
- }
682
- })
683
-
684
- expect(wrapper.vm).toBeDefined()
685
- await waitNT(wrapper.vm)
686
- await waitRAF()
687
- await waitNT(wrapper.vm)
688
- await waitRAF()
689
- jest.runOnlyPendingTimers()
690
- await waitNT(wrapper.vm)
691
- await waitRAF()
692
-
693
- expect(wrapper.element.tagName).toBe('ARTICLE')
694
- expect(wrapper.attributes('id')).toBeDefined()
695
- expect(wrapper.attributes('id')).toEqual('wrapper')
696
-
697
- // The trigger button
698
- const $button = wrapper.find('button')
699
- expect($button.exists()).toBe(true)
700
- const adb = $button.attributes('aria-describedby')
701
-
702
- // <b-tooltip> wrapper
703
- const $tipHolder = wrapper.findComponent(BTooltip)
704
- expect($tipHolder.exists()).toBe(true)
705
-
706
- // Find the tooltip element in the document
707
- const tip = document.getElementById(adb)
708
- expect(tip).not.toBe(null)
709
- expect(tip).toBeInstanceOf(HTMLElement)
710
- expect(tip.tagName).toEqual('DIV')
711
- expect(tip.classList.contains('tooltip')).toBe(true)
712
- expect(tip.classList.contains('b-tooltip')).toBe(true)
713
-
714
- // Hide the tooltip by emitting event on instance
715
- const bTooltip = wrapper.findComponent(BTooltip)
716
- expect(bTooltip.exists()).toBe(true)
717
- bTooltip.vm.$emit('close')
718
- await waitNT(wrapper.vm)
719
- await waitRAF()
720
- await waitNT(wrapper.vm)
721
- await waitRAF()
722
- jest.runOnlyPendingTimers()
723
- await waitNT(wrapper.vm)
724
- await waitRAF()
725
-
726
- expect($button.attributes('aria-describedby')).toBeUndefined()
727
-
728
- // Tooltip element should not be in the document
729
- expect(document.body.contains(tip)).toBe(false)
730
- expect(document.getElementById(adb)).toBe(null)
731
-
732
- // Show the tooltip by emitting event on instance
733
- bTooltip.vm.$emit('open')
734
-
735
- await waitNT(wrapper.vm)
736
- await waitRAF()
737
- await waitNT(wrapper.vm)
738
- await waitRAF()
739
- jest.runOnlyPendingTimers()
740
- await waitNT(wrapper.vm)
741
- await waitRAF()
742
-
743
- // Tooltip element should be in the document
744
- expect($button.attributes('aria-describedby')).toBeDefined()
745
- expect(document.getElementById(adb)).not.toBe(null)
746
-
747
- wrapper.destroy()
748
- })
749
-
750
- it('closes on $root close specific ID event', async () => {
751
- jest.useFakeTimers()
752
- const wrapper = mount(App, {
753
- attachTo: document.body,
754
- propsData: {
755
- triggers: 'click',
756
- show: true,
757
- disabled: false,
758
- titleAttr: 'ignored'
759
- },
760
- slots: {
761
- default: 'title'
762
- }
763
- })
764
-
765
- expect(wrapper.vm).toBeDefined()
766
- await waitNT(wrapper.vm)
767
- await waitRAF()
768
- await waitNT(wrapper.vm)
769
- await waitRAF()
770
- jest.runOnlyPendingTimers()
771
- await waitNT(wrapper.vm)
772
- await waitRAF()
773
-
774
- expect(wrapper.element.tagName).toBe('ARTICLE')
775
- expect(wrapper.attributes('id')).toBeDefined()
776
- expect(wrapper.attributes('id')).toEqual('wrapper')
777
-
778
- // The trigger button
779
- const $button = wrapper.find('button')
780
- expect($button.exists()).toBe(true)
781
- expect($button.attributes('id')).toBeDefined()
782
- expect($button.attributes('id')).toEqual('foo')
783
- expect($button.attributes('title')).toBeDefined()
784
- expect($button.attributes('title')).toEqual('')
785
- expect($button.attributes('data-original-title')).toBeDefined()
786
- expect($button.attributes('data-original-title')).toEqual('ignored')
787
- expect($button.attributes('aria-describedby')).toBeDefined()
788
- // ID of the tooltip that will be in the body
789
- const adb = $button.attributes('aria-describedby')
790
-
791
- // <b-tooltip> wrapper
792
- const $tipHolder = wrapper.findComponent(BTooltip)
793
- expect($tipHolder.exists()).toBe(true)
794
-
795
- // Find the tooltip element in the document
796
- const tip = document.getElementById(adb)
797
- expect(tip).not.toBe(null)
798
- expect(tip).toBeInstanceOf(HTMLElement)
799
- expect(tip.tagName).toEqual('DIV')
800
- expect(tip.classList.contains('tooltip')).toBe(true)
801
- expect(tip.classList.contains('b-tooltip')).toBe(true)
802
-
803
- // Hide the tooltip by emitting root event with correct ID (forceHide)
804
- wrapper.vm.$root.$emit('bv::hide::tooltip', 'foo')
805
- await waitNT(wrapper.vm)
806
- await waitRAF()
807
- await waitNT(wrapper.vm)
808
- await waitRAF()
809
- jest.runOnlyPendingTimers()
810
- await waitNT(wrapper.vm)
811
- await waitRAF()
812
-
813
- expect($button.attributes('aria-describedby')).toBeUndefined()
814
-
815
- // Tooltip element should not be in the document
816
- expect(document.body.contains(tip)).toBe(false)
817
- expect(document.getElementById(adb)).toBe(null)
818
-
819
- wrapper.destroy()
820
- })
821
-
822
- it('does not close on $root close specific other ID event', async () => {
823
- jest.useFakeTimers()
824
- const wrapper = mount(App, {
825
- attachTo: document.body,
826
- propsData: {
827
- triggers: 'click',
828
- show: true,
829
- disabled: false,
830
- titleAttr: 'ignored'
831
- },
832
- slots: {
833
- default: 'title'
834
- }
835
- })
836
-
837
- expect(wrapper.vm).toBeDefined()
838
- await waitNT(wrapper.vm)
839
- await waitRAF()
840
- await waitNT(wrapper.vm)
841
- await waitRAF()
842
- jest.runOnlyPendingTimers()
843
- await waitNT(wrapper.vm)
844
- await waitRAF()
845
-
846
- expect(wrapper.element.tagName).toBe('ARTICLE')
847
- expect(wrapper.attributes('id')).toBeDefined()
848
- expect(wrapper.attributes('id')).toEqual('wrapper')
849
-
850
- // The trigger button
851
- const $button = wrapper.find('button')
852
- expect($button.exists()).toBe(true)
853
- expect($button.attributes('id')).toBeDefined()
854
- expect($button.attributes('id')).toEqual('foo')
855
- expect($button.attributes('title')).toBeDefined()
856
- expect($button.attributes('title')).toEqual('')
857
- expect($button.attributes('data-original-title')).toBeDefined()
858
- expect($button.attributes('data-original-title')).toEqual('ignored')
859
- expect($button.attributes('aria-describedby')).toBeDefined()
860
- // ID of the tooltip that will be in the body
861
- const adb = $button.attributes('aria-describedby')
862
-
863
- // b-tooltip wrapper
864
- const $tipHolder = wrapper.findComponent(BTooltip)
865
- expect($tipHolder.exists()).toBe(true)
866
-
867
- // Find the tooltip element in the document
868
- const tip = document.getElementById(adb)
869
- expect(tip).not.toBe(null)
870
- expect(tip).toBeInstanceOf(HTMLElement)
871
- expect(tip.tagName).toEqual('DIV')
872
- expect(tip.classList.contains('tooltip')).toBe(true)
873
-
874
- // Tooltip should ignore when ID is not its own
875
- wrapper.vm.$root.$emit('bv::hide::tooltip', 'wrong-id')
876
- await waitNT(wrapper.vm)
877
- await waitRAF()
878
- await waitNT(wrapper.vm)
879
- await waitRAF()
880
- jest.runOnlyPendingTimers()
881
- await waitNT(wrapper.vm)
882
- await waitRAF()
883
-
884
- expect($button.attributes('aria-describedby')).toBeDefined()
885
-
886
- // Tooltip element should still be in the document
887
- expect(document.body.contains(tip)).toBe(true)
888
- expect(document.getElementById(adb)).not.toBe(null)
889
-
890
- wrapper.destroy()
891
- })
892
-
893
- it('closes on $root close all event', async () => {
894
- jest.useFakeTimers()
895
- const wrapper = mount(App, {
896
- attachTo: document.body,
897
- propsData: {
898
- triggers: 'click',
899
- show: true,
900
- disabled: false,
901
- titleAttr: 'ignored'
902
- },
903
- slots: {
904
- default: 'title'
905
- }
906
- })
907
-
908
- expect(wrapper.vm).toBeDefined()
909
- await waitNT(wrapper.vm)
910
- await waitRAF()
911
- await waitNT(wrapper.vm)
912
- await waitRAF()
913
- jest.runOnlyPendingTimers()
914
- await waitNT(wrapper.vm)
915
- await waitRAF()
916
-
917
- expect(wrapper.element.tagName).toBe('ARTICLE')
918
- expect(wrapper.attributes('id')).toBeDefined()
919
- expect(wrapper.attributes('id')).toEqual('wrapper')
920
-
921
- // The trigger button
922
- const $button = wrapper.find('button')
923
- expect($button.exists()).toBe(true)
924
- expect($button.attributes('id')).toBeDefined()
925
- expect($button.attributes('id')).toEqual('foo')
926
- expect($button.attributes('title')).toBeDefined()
927
- expect($button.attributes('title')).toEqual('')
928
- expect($button.attributes('data-original-title')).toBeDefined()
929
- expect($button.attributes('data-original-title')).toEqual('ignored')
930
- expect($button.attributes('aria-describedby')).toBeDefined()
931
-
932
- // ID of the tooltip that will be in the body
933
- const adb = $button.attributes('aria-describedby')
934
-
935
- // <b-tooltip> wrapper
936
- const $tipHolder = wrapper.findComponent(BTooltip)
937
- expect($tipHolder.exists()).toBe(true)
938
-
939
- // Find the tooltip element in the document
940
- const tip = document.getElementById(adb)
941
- expect(tip).not.toBe(null)
942
- expect(tip).toBeInstanceOf(HTMLElement)
943
- expect(tip.tagName).toEqual('DIV')
944
- expect(tip.classList.contains('tooltip')).toBe(true)
945
- expect(tip.classList.contains('b-tooltip')).toBe(true)
946
-
947
- // Hide the tooltip by emitting root event with no ID (forceHide)
948
- wrapper.vm.$root.$emit('bv::hide::tooltip')
949
- await waitNT(wrapper.vm)
950
- await waitRAF()
951
- await waitNT(wrapper.vm)
952
- await waitRAF()
953
- jest.runOnlyPendingTimers()
954
- await waitNT(wrapper.vm)
955
- await waitRAF()
956
-
957
- expect($button.attributes('aria-describedby')).toBeUndefined()
958
-
959
- // Tooltip element should not be in the document
960
- expect(document.body.contains(tip)).toBe(false)
961
- expect(document.getElementById(adb)).toBe(null)
962
-
963
- wrapper.destroy()
964
- })
965
-
966
- it('does not close on $root modal hidden event by default', async () => {
967
- jest.useFakeTimers()
968
- const wrapper = mount(App, {
969
- attachTo: document.body,
970
- propsData: {
971
- triggers: 'click',
972
- show: true,
973
- disabled: false,
974
- titleAttr: 'ignored'
975
- },
976
- slots: {
977
- default: 'title'
978
- }
979
- })
980
-
981
- expect(wrapper.vm).toBeDefined()
982
- await waitNT(wrapper.vm)
983
- await waitRAF()
984
- await waitNT(wrapper.vm)
985
- await waitRAF()
986
- jest.runOnlyPendingTimers()
987
- await waitNT(wrapper.vm)
988
- await waitRAF()
989
-
990
- expect(wrapper.element.tagName).toBe('ARTICLE')
991
- expect(wrapper.attributes('id')).toBeDefined()
992
- expect(wrapper.attributes('id')).toEqual('wrapper')
993
- expect(wrapper.classes()).not.toContain('modal-content')
994
-
995
- // The trigger button
996
- const $button = wrapper.find('button')
997
- expect($button.exists()).toBe(true)
998
- expect($button.attributes('id')).toBeDefined()
999
- expect($button.attributes('id')).toEqual('foo')
1000
- expect($button.attributes('title')).toBeDefined()
1001
- expect($button.attributes('title')).toEqual('')
1002
- expect($button.attributes('data-original-title')).toBeDefined()
1003
- expect($button.attributes('data-original-title')).toEqual('ignored')
1004
- expect($button.attributes('aria-describedby')).toBeDefined()
1005
- // ID of the tooltip that will be in the body
1006
- const adb = $button.attributes('aria-describedby')
1007
-
1008
- // b-tooltip wrapper
1009
- const $tipHolder = wrapper.findComponent(BTooltip)
1010
- expect($tipHolder.exists()).toBe(true)
1011
-
1012
- // Find the tooltip element in the document
1013
- const tip = document.getElementById(adb)
1014
- expect(tip).not.toBe(null)
1015
- expect(tip).toBeInstanceOf(HTMLElement)
1016
- expect(tip.tagName).toEqual('DIV')
1017
- expect(tip.classList.contains('tooltip')).toBe(true)
1018
-
1019
- // Tooltip should ignore when ID is not its own
1020
- wrapper.vm.$root.$emit(MODAL_CLOSE_EVENT, 'some-modal')
1021
- await waitNT(wrapper.vm)
1022
- await waitRAF()
1023
- await waitNT(wrapper.vm)
1024
- await waitRAF()
1025
- jest.runOnlyPendingTimers()
1026
- await waitNT(wrapper.vm)
1027
- await waitRAF()
1028
-
1029
- expect($button.attributes('aria-describedby')).toBeDefined()
1030
-
1031
- // Tooltip element should still be in the document
1032
- expect(document.body.contains(tip)).toBe(true)
1033
- expect(document.getElementById(adb)).not.toBe(null)
1034
-
1035
- wrapper.destroy()
1036
- })
1037
-
1038
- it('closes on $root modal hidden event when inside a modal', async () => {
1039
- jest.useFakeTimers()
1040
- const wrapper = mount(App, {
1041
- attachTo: document.body,
1042
- propsData: {
1043
- triggers: 'click',
1044
- show: true,
1045
- disabled: false,
1046
- titleAttr: 'ignored',
1047
- isModal: true
1048
- },
1049
- slots: {
1050
- default: 'title'
1051
- }
1052
- })
1053
-
1054
- expect(wrapper.vm).toBeDefined()
1055
- await waitNT(wrapper.vm)
1056
- await waitRAF()
1057
- await waitNT(wrapper.vm)
1058
- await waitRAF()
1059
- jest.runOnlyPendingTimers()
1060
- await waitNT(wrapper.vm)
1061
- await waitRAF()
1062
-
1063
- expect(wrapper.element.tagName).toBe('ARTICLE')
1064
- expect(wrapper.attributes('id')).toBeDefined()
1065
- expect(wrapper.attributes('id')).toEqual('wrapper')
1066
- expect(wrapper.classes()).toContain('modal-content')
1067
-
1068
- // The trigger button
1069
- const $button = wrapper.find('button')
1070
- expect($button.exists()).toBe(true)
1071
- expect($button.attributes('id')).toBeDefined()
1072
- expect($button.attributes('id')).toEqual('foo')
1073
- expect($button.attributes('title')).toBeDefined()
1074
- expect($button.attributes('title')).toEqual('')
1075
- expect($button.attributes('data-original-title')).toBeDefined()
1076
- expect($button.attributes('data-original-title')).toEqual('ignored')
1077
- expect($button.attributes('aria-describedby')).toBeDefined()
1078
- // ID of the tooltip that will be in the body
1079
- const adb = $button.attributes('aria-describedby')
1080
-
1081
- // b-tooltip wrapper
1082
- const $tipHolder = wrapper.findComponent(BTooltip)
1083
- expect($tipHolder.exists()).toBe(true)
1084
-
1085
- // Find the tooltip element in the document
1086
- const tip = document.getElementById(adb)
1087
- expect(tip).not.toBe(null)
1088
- expect(tip).toBeInstanceOf(HTMLElement)
1089
- expect(tip.tagName).toEqual('DIV')
1090
- expect(tip.classList.contains('tooltip')).toBe(true)
1091
-
1092
- // Tooltip should ignore when ID is not its own
1093
- wrapper.vm.$root.$emit(MODAL_CLOSE_EVENT, 'some-modal')
1094
- await waitNT(wrapper.vm)
1095
- await waitRAF()
1096
- await waitNT(wrapper.vm)
1097
- await waitRAF()
1098
- jest.runOnlyPendingTimers()
1099
- await waitNT(wrapper.vm)
1100
- await waitRAF()
1101
-
1102
- // Tooltip element should not be in the document
1103
- expect(document.body.contains(tip)).toBe(false)
1104
- expect(document.getElementById(adb)).toBe(null)
1105
-
1106
- wrapper.destroy()
1107
- })
1108
-
1109
- it('closes when trigger element is no longer visible', async () => {
1110
- jest.useFakeTimers()
1111
- // Prevent warns from appearing in the test logs
1112
- jest.spyOn(console, 'warn').mockImplementation(() => {})
1113
-
1114
- const wrapper = mount(App, {
1115
- attachTo: document.body,
1116
- propsData: {
1117
- triggers: 'click',
1118
- show: true,
1119
- disabled: false
1120
- },
1121
- slots: {
1122
- default: 'title'
1123
- }
1124
- })
1125
-
1126
- expect(wrapper.vm).toBeDefined()
1127
- await waitNT(wrapper.vm)
1128
- await waitRAF()
1129
- await waitNT(wrapper.vm)
1130
- await waitRAF()
1131
- jest.runOnlyPendingTimers()
1132
- await waitNT(wrapper.vm)
1133
- await waitRAF()
1134
- await waitNT(wrapper.vm)
1135
- await waitRAF()
1136
-
1137
- expect(wrapper.element.tagName).toBe('ARTICLE')
1138
- expect(wrapper.attributes('id')).toBeDefined()
1139
- expect(wrapper.attributes('id')).toEqual('wrapper')
1140
-
1141
- // The trigger button
1142
- const $button = wrapper.find('button')
1143
- expect($button.exists()).toBe(true)
1144
- expect($button.attributes('id')).toBeDefined()
1145
- expect($button.attributes('id')).toEqual('foo')
1146
- expect($button.attributes('aria-describedby')).toBeDefined()
1147
-
1148
- // ID of the tooltip that will be in the body
1149
- const adb = $button.attributes('aria-describedby')
1150
-
1151
- // b-tooltip wrapper
1152
- const $tipHolder = wrapper.findComponent(BTooltip)
1153
- expect($tipHolder.exists()).toBe(true)
1154
-
1155
- // Find the tooltip element in the document
1156
- const tip = document.getElementById(adb)
1157
- expect(tip).not.toBe(null)
1158
- expect(tip).toBeInstanceOf(HTMLElement)
1159
- expect(tip.tagName).toEqual('DIV')
1160
- expect(tip.classList.contains('tooltip')).toBe(true)
1161
-
1162
- // Hide the tooltip by removing the trigger button from DOM
1163
- $button.element.parentNode.removeChild($button.element)
1164
- await waitNT(wrapper.vm)
1165
- await waitRAF()
1166
- await waitNT(wrapper.vm)
1167
- await waitRAF()
1168
- jest.runOnlyPendingTimers()
1169
- await waitNT(wrapper.vm)
1170
- await waitRAF()
1171
- // The visibility check runs on an interval of 100ms
1172
- jest.runOnlyPendingTimers()
1173
- await waitNT(wrapper.vm)
1174
- await waitRAF()
1175
- jest.runOnlyPendingTimers()
1176
- await waitNT(wrapper.vm)
1177
- await waitRAF()
1178
- jest.runOnlyPendingTimers()
1179
- await waitNT(wrapper.vm)
1180
- await waitRAF()
1181
- await waitNT(wrapper.vm)
1182
- await waitRAF()
1183
-
1184
- // Tooltip element should not be in the document
1185
- expect(document.body.contains(tip)).toBe(false)
1186
- expect(document.getElementById('adb')).toBe(null)
1187
-
1188
- // Try and show element via root event (using ID of trigger button)
1189
- // Note that this generates a console warning
1190
- wrapper.vm.$root.$emit('bv::show::tooltip', 'foo')
1191
- await waitNT(wrapper.vm)
1192
- await waitRAF()
1193
- await waitNT(wrapper.vm)
1194
- await waitRAF()
1195
- jest.runOnlyPendingTimers()
1196
- await waitNT(wrapper.vm)
1197
- await waitRAF()
1198
- jest.runOnlyPendingTimers()
1199
- await waitNT(wrapper.vm)
1200
- await waitRAF()
1201
-
1202
- // Tooltip element should not be in the document
1203
- expect(document.getElementById(adb)).toBe(null)
1204
-
1205
- // Try and show element via root event (using show all)
1206
- wrapper.vm.$root.$emit('bv::show::tooltip')
1207
- await waitNT(wrapper.vm)
1208
- await waitRAF()
1209
- await waitNT(wrapper.vm)
1210
- await waitRAF()
1211
- jest.runOnlyPendingTimers()
1212
- await waitNT(wrapper.vm)
1213
- await waitRAF()
1214
- jest.runOnlyPendingTimers()
1215
- await waitNT(wrapper.vm)
1216
- await waitRAF()
1217
-
1218
- // Tooltip element should not be in the document
1219
- expect(document.getElementById(adb)).toBe(null)
1220
-
1221
- wrapper.destroy()
1222
- })
1223
-
1224
- it('closes when title is set to empty', async () => {
1225
- jest.useFakeTimers()
1226
- const wrapper = mount(App, {
1227
- attachTo: document.body,
1228
- propsData: {
1229
- show: true,
1230
- title: 'hello'
1231
- }
1232
- })
1233
-
1234
- expect(wrapper.vm).toBeDefined()
1235
- await waitNT(wrapper.vm)
1236
- await waitRAF()
1237
- await waitNT(wrapper.vm)
1238
- await waitRAF()
1239
- await waitNT(wrapper.vm)
1240
- await waitRAF()
1241
- jest.runOnlyPendingTimers()
1242
- await waitNT(wrapper.vm)
1243
- await waitRAF()
1244
-
1245
- expect(wrapper.element.tagName).toBe('ARTICLE')
1246
- expect(wrapper.attributes('id')).toBeDefined()
1247
- expect(wrapper.attributes('id')).toEqual('wrapper')
1248
-
1249
- // The trigger button
1250
- const $button = wrapper.find('button')
1251
- expect($button.exists()).toBe(true)
1252
- expect($button.attributes('id')).toBeDefined()
1253
- expect($button.attributes('id')).toEqual('foo')
1254
- expect($button.attributes('title')).toBeUndefined()
1255
- expect($button.attributes('data-original-title')).toBeUndefined()
1256
- expect($button.attributes('aria-describedby')).toBeDefined()
1257
- // ID of the tooltip that will be in the body
1258
- const adb = $button.attributes('aria-describedby')
1259
-
1260
- // <b-tooltip> wrapper
1261
- const $tipHolder = wrapper.findComponent(BTooltip)
1262
- expect($tipHolder.exists()).toBe(true)
1263
- expect($tipHolder.element.nodeType).toEqual(Node.COMMENT_NODE)
1264
-
1265
- // Find the tooltip element in the document
1266
- const tip = document.getElementById(adb)
1267
- expect(tip).not.toBe(null)
1268
- expect(tip).toBeInstanceOf(HTMLElement)
1269
- const $tip = createWrapper(tip)
1270
- expect($tip.element.tagName).toBe('DIV')
1271
- expect($tip.classes()).toContain('tooltip')
1272
- expect($tip.classes()).toContain('b-tooltip')
1273
- // Should contain our title prop value
1274
- expect($tip.text()).toContain('hello')
1275
-
1276
- // Change the title prop
1277
- await wrapper.setProps({ title: '' })
1278
- await waitRAF()
1279
- await waitRAF()
1280
-
1281
- // Tooltip element should not be in the document
1282
- expect(document.body.contains(tip)).toBe(false)
1283
- expect(document.getElementById('adb')).toBe(null)
1284
-
1285
- wrapper.destroy()
1286
- })
1287
-
1288
- it('applies noninteractive class based on noninteractive prop', async () => {
1289
- jest.useFakeTimers()
1290
- const wrapper = mount(App, {
1291
- attachTo: document.body,
1292
- propsData: {
1293
- show: true
1294
- },
1295
- slots: {
1296
- default: 'title'
1297
- }
1298
- })
1299
-
1300
- expect(wrapper.vm).toBeDefined()
1301
- await waitNT(wrapper.vm)
1302
- await waitRAF()
1303
- await waitNT(wrapper.vm)
1304
- await waitRAF()
1305
- jest.runOnlyPendingTimers()
1306
- await waitNT(wrapper.vm)
1307
- await waitRAF()
1308
-
1309
- expect(wrapper.element.tagName).toBe('ARTICLE')
1310
- expect(wrapper.attributes('id')).toBeDefined()
1311
- expect(wrapper.attributes('id')).toEqual('wrapper')
1312
-
1313
- // The trigger button
1314
- const $button = wrapper.find('button')
1315
- expect($button.exists()).toBe(true)
1316
-
1317
- // ID of the tooltip that will be in the body
1318
- const adb = $button.attributes('aria-describedby')
1319
- expect(adb).toBeDefined()
1320
- expect(adb).not.toBe('')
1321
- expect(adb).not.toBe(null)
1322
-
1323
- // Find the tooltip element in the document
1324
- const tip = document.getElementById(adb)
1325
- expect(tip).not.toBe(null)
1326
- expect(tip).toBeInstanceOf(HTMLElement)
1327
- expect(tip.tagName).toEqual('DIV')
1328
- expect(tip.classList.contains('tooltip')).toBe(true)
1329
- expect(tip.classList.contains('b-tooltip')).toBe(true)
1330
- expect(tip.classList.contains('noninteractive')).toBe(false)
1331
-
1332
- // Enable 'noninteractive'. Should be reactive
1333
- await wrapper.setProps({ noninteractive: true })
1334
- await waitRAF()
1335
- expect(tip.classList.contains('tooltip')).toBe(true)
1336
- expect(tip.classList.contains('b-tooltip')).toBe(true)
1337
- expect(tip.classList.contains('noninteractive')).toBe(true)
1338
-
1339
- wrapper.destroy()
1340
- })
1341
-
1342
- it('applies variant class', async () => {
1343
- jest.useFakeTimers()
1344
- const wrapper = mount(App, {
1345
- attachTo: document.body,
1346
- propsData: {
1347
- show: true,
1348
- variant: 'danger'
1349
- },
1350
- slots: {
1351
- default: 'title'
1352
- }
1353
- })
1354
-
1355
- expect(wrapper.vm).toBeDefined()
1356
- await waitNT(wrapper.vm)
1357
- await waitRAF()
1358
- await waitNT(wrapper.vm)
1359
- await waitRAF()
1360
- jest.runOnlyPendingTimers()
1361
- await waitNT(wrapper.vm)
1362
- await waitRAF()
1363
-
1364
- expect(wrapper.element.tagName).toBe('ARTICLE')
1365
- expect(wrapper.attributes('id')).toBeDefined()
1366
- expect(wrapper.attributes('id')).toEqual('wrapper')
1367
-
1368
- // The trigger button
1369
- const $button = wrapper.find('button')
1370
- expect($button.exists()).toBe(true)
1371
-
1372
- // ID of the tooltip that will be in the body
1373
- const adb = $button.attributes('aria-describedby')
1374
- expect(adb).not.toBe(null)
1375
-
1376
- // Find the tooltip element in the document
1377
- const tip = document.getElementById(adb)
1378
- expect(tip).not.toBe(null)
1379
- expect(tip).toBeInstanceOf(HTMLElement)
1380
- expect(tip.tagName).toEqual('DIV')
1381
- expect(tip.classList.contains('tooltip')).toBe(true)
1382
- expect(tip.classList.contains('b-tooltip-danger')).toBe(true)
1383
-
1384
- // Change variant type. Should be reactive
1385
- await wrapper.setProps({ variant: 'success' })
1386
- await waitRAF()
1387
- expect(tip.classList.contains('tooltip')).toBe(true)
1388
- expect(tip.classList.contains('b-tooltip-success')).toBe(true)
1389
- expect(tip.classList.contains('b-tooltip-danger')).toBe(false)
1390
-
1391
- wrapper.destroy()
1392
- })
1393
-
1394
- it('applies custom class', async () => {
1395
- jest.useFakeTimers()
1396
- const wrapper = mount(App, {
1397
- attachTo: document.body,
1398
- propsData: {
1399
- show: true,
1400
- customClass: 'foobar-class'
1401
- },
1402
- slots: {
1403
- default: 'title'
1404
- }
1405
- })
1406
-
1407
- expect(wrapper.vm).toBeDefined()
1408
- await waitNT(wrapper.vm)
1409
- await waitRAF()
1410
- await waitNT(wrapper.vm)
1411
- await waitRAF()
1412
- jest.runOnlyPendingTimers()
1413
- await waitNT(wrapper.vm)
1414
- await waitRAF()
1415
-
1416
- expect(wrapper.element.tagName).toBe('ARTICLE')
1417
- expect(wrapper.attributes('id')).toBeDefined()
1418
- expect(wrapper.attributes('id')).toEqual('wrapper')
1419
-
1420
- // The trigger button
1421
- const $button = wrapper.find('button')
1422
- expect($button.exists()).toBe(true)
1423
-
1424
- // ID of the tooltip that will be in the body
1425
- const adb = $button.attributes('aria-describedby')
1426
- expect(adb).toBeDefined()
1427
- expect(adb).not.toBe('')
1428
- expect(adb).not.toBe(null)
1429
-
1430
- // Find the tooltip element in the document
1431
- const tip = document.getElementById(adb)
1432
- expect(tip).not.toBe(null)
1433
- expect(tip).toBeInstanceOf(HTMLElement)
1434
- expect(tip.tagName).toEqual('DIV')
1435
- expect(tip.classList.contains('tooltip')).toBe(true)
1436
- expect(tip.classList.contains('b-tooltip')).toBe(true)
1437
- expect(tip.classList.contains('foobar-class')).toBe(true)
1438
-
1439
- // Change custom class. Should be reactive
1440
- await wrapper.setProps({ customClass: 'barbaz-class' })
1441
- await waitRAF()
1442
- expect(tip.classList.contains('tooltip')).toBe(true)
1443
- expect(tip.classList.contains('barbaz-class')).toBe(true)
1444
- expect(tip.classList.contains('foobar-class')).toBe(false)
1445
-
1446
- wrapper.destroy()
1447
- })
1448
-
1449
- it('saves title in data attribute on open and adds to back on hide', async () => {
1450
- jest.useFakeTimers()
1451
- const wrapper = mount(App, {
1452
- attachTo: document.body,
1453
- propsData: {
1454
- triggers: 'click',
1455
- show: false,
1456
- titleAttr: 'bar'
1457
- },
1458
- slots: {
1459
- default: 'title'
1460
- }
1461
- })
1462
-
1463
- expect(wrapper.vm).toBeDefined()
1464
- await waitNT(wrapper.vm)
1465
- await waitRAF()
1466
- await waitNT(wrapper.vm)
1467
- await waitRAF()
1468
- jest.runOnlyPendingTimers()
1469
-
1470
- expect(wrapper.element.tagName).toBe('ARTICLE')
1471
- expect(wrapper.attributes('id')).toBeDefined()
1472
- expect(wrapper.attributes('id')).toEqual('wrapper')
1473
-
1474
- // The trigger button
1475
- const $button = wrapper.find('button')
1476
- expect($button.exists()).toBe(true)
1477
- expect($button.attributes('id')).toBeDefined()
1478
- expect($button.attributes('id')).toEqual('foo')
1479
- expect($button.attributes('title')).toBeDefined()
1480
- expect($button.attributes('title')).toEqual('bar')
1481
- expect($button.attributes('data-original-title')).toBeUndefined()
1482
- expect($button.attributes('aria-describedby')).toBeUndefined()
1483
-
1484
- // Show tooltip
1485
- await wrapper.setProps({ show: true })
1486
-
1487
- expect($button.attributes('title')).toBeDefined()
1488
- expect($button.attributes('title')).toEqual('')
1489
- expect($button.attributes('data-original-title')).toBeDefined()
1490
- expect($button.attributes('data-original-title')).toEqual('bar')
1491
- expect($button.attributes('aria-describedby')).toBeDefined()
1492
- // ID of the tooltip that will be in the body
1493
- const adb = $button.attributes('aria-describedby')
1494
-
1495
- // <b-tooltip> wrapper
1496
- const $tipHolder = wrapper.findComponent(BTooltip)
1497
- expect($tipHolder.exists()).toBe(true)
1498
- expect($tipHolder.element.nodeType).toEqual(Node.COMMENT_NODE)
1499
-
1500
- // Find the tooltip element in the document
1501
- const tip = document.getElementById(adb)
1502
- expect(tip).not.toBe(null)
1503
- expect(tip).toBeInstanceOf(HTMLElement)
1504
- expect(tip.tagName).toEqual('DIV')
1505
- expect(tip.classList.contains('tooltip')).toBe(true)
1506
- expect(tip.classList.contains('b-tooltip')).toBe(true)
1507
- expect(tip.classList.contains('interactive')).toBe(false)
1508
- expect(tip.textContent).toEqual('title')
1509
-
1510
- // Hide the tooltip
1511
- await wrapper.setProps({ show: false })
1512
- await waitRAF()
1513
- await waitRAF()
1514
- jest.runOnlyPendingTimers()
1515
- await waitNT(wrapper.vm)
1516
- await waitRAF()
1517
-
1518
- expect($button.attributes('title')).toBeDefined()
1519
- expect($button.attributes('title')).toEqual('bar')
1520
- expect($button.attributes('data-original-title')).toBeUndefined()
1521
- expect($button.attributes('aria-describedby')).toBeUndefined()
1522
-
1523
- // Tooltip element should not be in the document
1524
- expect(document.body.contains(tip)).toBe(false)
1525
- expect(document.querySelector(adb)).toBe(null)
1526
-
1527
- wrapper.destroy()
1528
- })
1529
- })