@gitlab/ui 92.2.0 → 92.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/bin/migrate_custom_utils_to_tw.bundled.mjs +11 -3
  3. package/dist/components/experimental/duo/chat/components/duo_chat_context/constants.js +4 -4
  4. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +4 -4
  5. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.js +8 -8
  6. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.js +5 -4
  7. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.js +15 -16
  8. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +7 -7
  9. package/dist/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +63 -81
  10. package/dist/components/experimental/duo/chat/components/duo_chat_context/utils.js +1 -1
  11. package/dist/index.css +4 -2
  12. package/dist/index.css.map +1 -1
  13. package/dist/tailwind.css +1 -1
  14. package/dist/tailwind.css.map +1 -1
  15. package/dist/vendor/bootstrap-vue/src/components/form/index.js +0 -4
  16. package/dist/vendor/bootstrap-vue/src/components/index.js +0 -48
  17. package/dist/vendor/bootstrap-vue/src/components/layout/index.js +0 -6
  18. package/dist/vendor/bootstrap-vue/src/components/nav/index.js +0 -6
  19. package/dist/vendor/bootstrap-vue/src/components/navbar/index.js +1 -8
  20. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +2 -6
  21. package/dist/vendor/bootstrap-vue/src/constants/classes.js +1 -2
  22. package/dist/vendor/bootstrap-vue/src/constants/components.js +1 -51
  23. package/dist/vendor/bootstrap-vue/src/constants/events.js +1 -12
  24. package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +1 -5
  25. package/dist/vendor/bootstrap-vue/src/constants/props.js +1 -4
  26. package/dist/vendor/bootstrap-vue/src/constants/regex.js +1 -20
  27. package/dist/vendor/bootstrap-vue/src/constants/slots.js +1 -33
  28. package/dist/vendor/bootstrap-vue/src/directives/toggle/toggle.js +1 -1
  29. package/dist/vendor/bootstrap-vue/src/index.js +0 -74
  30. package/dist/vendor/bootstrap-vue/src/utils/array.js +1 -3
  31. package/dist/vendor/bootstrap-vue/src/utils/inspect.js +1 -3
  32. package/dist/vendor/bootstrap-vue/src/utils/math.js +1 -3
  33. package/dist/vendor/bootstrap-vue/src/utils/object.js +1 -6
  34. package/dist/vendor/bootstrap-vue/src/utils/props.js +2 -8
  35. package/dist/vendor/bootstrap-vue/src/utils/string.js +1 -10
  36. package/package.json +1 -1
  37. package/src/components/base/accordion/accordion_item.scss +3 -3
  38. package/src/components/base/alert/alert.scss +3 -3
  39. package/src/components/base/avatar_labeled/avatar_labeled.scss +2 -2
  40. package/src/components/base/avatars_inline/avatars_inline.scss +1 -1
  41. package/src/components/base/badge/badge.scss +2 -2
  42. package/src/components/base/banner/banner.scss +2 -2
  43. package/src/components/base/breadcrumb/breadcrumb.scss +3 -3
  44. package/src/components/base/broadcast_message/broadcast_message.scss +3 -3
  45. package/src/components/base/button/button.scss +14 -14
  46. package/src/components/base/card/card.scss +1 -1
  47. package/src/components/base/datepicker/datepicker.scss +10 -10
  48. package/src/components/base/drawer/drawer.scss +5 -5
  49. package/src/components/base/dropdown/dropdown.scss +28 -28
  50. package/src/components/base/dropdown/dropdown_divider.scss +3 -3
  51. package/src/components/base/dropdown/dropdown_item.scss +9 -9
  52. package/src/components/base/dropdown/dropdown_section_header.scss +2 -2
  53. package/src/components/base/dropdown/dropdown_text.scss +1 -1
  54. package/src/components/base/filtered_search/filtered_search.scss +7 -7
  55. package/src/components/base/filtered_search/filtered_search_suggestion.scss +1 -1
  56. package/src/components/base/filtered_search/filtered_search_suggestion_list.scss +3 -3
  57. package/src/components/base/filtered_search/filtered_search_term.scss +2 -2
  58. package/src/components/base/filtered_search/filtered_search_token.scss +4 -4
  59. package/src/components/base/filtered_search/filtered_search_token_segment.scss +2 -2
  60. package/src/components/base/form/form_checkbox/form_checkbox.scss +10 -10
  61. package/src/components/base/form/form_group/form_group.scss +5 -5
  62. package/src/components/base/form/form_input/form_input.scss +2 -2
  63. package/src/components/base/form/form_select/form_select.scss +2 -2
  64. package/src/components/base/keyset_pagination/keyset_pagination.scss +1 -1
  65. package/src/components/base/label/label.scss +1 -1
  66. package/src/components/base/loading_icon/loading_icon.scss +1 -1
  67. package/src/components/base/markdown/markdown.scss +33 -33
  68. package/src/components/base/modal/modal.scss +11 -11
  69. package/src/components/base/new_dropdowns/dropdown.scss +14 -14
  70. package/src/components/base/new_dropdowns/dropdown_item.scss +9 -9
  71. package/src/components/base/new_dropdowns/listbox/listbox.scss +1 -1
  72. package/src/components/base/pagination/pagination.scss +3 -3
  73. package/src/components/base/path/path.scss +5 -5
  74. package/src/components/base/popover/popover.scss +5 -5
  75. package/src/components/base/search_box_by_click/search_box_by_click.scss +2 -2
  76. package/src/components/base/search_box_by_type/search_box_by_type.scss +4 -4
  77. package/src/components/base/table/table.scss +4 -4
  78. package/src/components/base/tabs/tabs/tabs.scss +10 -10
  79. package/src/components/base/toast/toast.scss +7 -7
  80. package/src/components/base/toggle/toggle.scss +6 -6
  81. package/src/components/base/token/token.scss +5 -5
  82. package/src/components/base/tooltip/tooltip.scss +3 -3
  83. package/src/components/charts/legend/legend.scss +4 -4
  84. package/src/components/charts/series_label/series_label.scss +1 -1
  85. package/src/components/experimental/duo/chat/components/duo_chat_context/constants.js +3 -3
  86. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +4 -4
  87. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue +10 -10
  88. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue +6 -5
  89. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.vue +24 -24
  90. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +10 -10
  91. package/src/components/experimental/duo/chat/components/duo_chat_context/mock_context_data.js +57 -74
  92. package/src/components/experimental/duo/chat/components/duo_chat_context/utils.js +5 -3
  93. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.scss +1 -1
  94. package/src/components/experimental/duo/chat/duo_chat.scss +4 -4
  95. package/src/components/shared_components/charts/tooltip_default_format.scss +1 -1
  96. package/src/scss/bootstrap_vue.scss +0 -18
  97. package/src/scss/typescale/_index.scss +9 -9
  98. package/src/vendor/bootstrap-vue/nuxt/index.js +0 -8
  99. package/src/vendor/bootstrap-vue/src/_utilities.scss +0 -9
  100. package/src/vendor/bootstrap-vue/src/_variables.scss +0 -52
  101. package/src/vendor/bootstrap-vue/src/components/form/index.d.ts +0 -3
  102. package/src/vendor/bootstrap-vue/src/components/form/index.js +1 -4
  103. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -12
  104. package/src/vendor/bootstrap-vue/src/components/index.d.ts +0 -24
  105. package/src/vendor/bootstrap-vue/src/components/index.js +0 -48
  106. package/src/vendor/bootstrap-vue/src/components/index.scss +0 -15
  107. package/src/vendor/bootstrap-vue/src/components/layout/index.d.ts +0 -6
  108. package/src/vendor/bootstrap-vue/src/components/layout/index.js +1 -5
  109. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -67
  110. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1
  111. package/src/vendor/bootstrap-vue/src/components/nav/index.d.ts +0 -6
  112. package/src/vendor/bootstrap-vue/src/components/nav/index.js +1 -5
  113. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -45
  114. package/src/vendor/bootstrap-vue/src/components/navbar/README.md +0 -5
  115. package/src/vendor/bootstrap-vue/src/components/navbar/index.d.ts +1 -7
  116. package/src/vendor/bootstrap-vue/src/components/navbar/index.js +2 -7
  117. package/src/vendor/bootstrap-vue/src/components/navbar/package.json +0 -75
  118. package/src/vendor/bootstrap-vue/src/components/table/README.md +1 -2
  119. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +2 -2
  120. package/src/vendor/bootstrap-vue/src/components/toast/README.md +1 -3
  121. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +2 -6
  122. package/src/vendor/bootstrap-vue/src/constants/classes.js +0 -1
  123. package/src/vendor/bootstrap-vue/src/constants/components.js +0 -50
  124. package/src/vendor/bootstrap-vue/src/constants/events.js +0 -11
  125. package/src/vendor/bootstrap-vue/src/constants/key-codes.js +0 -4
  126. package/src/vendor/bootstrap-vue/src/constants/props.js +0 -3
  127. package/src/vendor/bootstrap-vue/src/constants/regex.js +0 -19
  128. package/src/vendor/bootstrap-vue/src/constants/slots.js +0 -32
  129. package/src/vendor/bootstrap-vue/src/directives/toggle/README.md +5 -23
  130. package/src/vendor/bootstrap-vue/src/directives/toggle/package.json +1 -1
  131. package/src/vendor/bootstrap-vue/src/directives/toggle/toggle.js +1 -1
  132. package/src/vendor/bootstrap-vue/src/index.js +0 -122
  133. package/src/vendor/bootstrap-vue/src/index.scss +0 -3
  134. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -5
  135. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +15 -15
  136. package/src/vendor/bootstrap-vue/src/utils/inspect.js +0 -4
  137. package/src/vendor/bootstrap-vue/src/utils/math.js +0 -4
  138. package/src/vendor/bootstrap-vue/src/utils/object.js +0 -5
  139. package/src/vendor/bootstrap-vue/src/utils/props.js +1 -7
  140. package/src/vendor/bootstrap-vue/src/utils/string.js +0 -9
  141. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +1 -20
  142. package/dist/vendor/bootstrap-vue/src/components/alert/alert.js +0 -179
  143. package/dist/vendor/bootstrap-vue/src/components/alert/index.js +0 -11
  144. package/dist/vendor/bootstrap-vue/src/components/aspect/aspect.js +0 -67
  145. package/dist/vendor/bootstrap-vue/src/components/aspect/index.js +0 -11
  146. package/dist/vendor/bootstrap-vue/src/components/avatar/avatar-group.js +0 -67
  147. package/dist/vendor/bootstrap-vue/src/components/avatar/avatar.js +0 -266
  148. package/dist/vendor/bootstrap-vue/src/components/avatar/index.js +0 -14
  149. package/dist/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.js +0 -112
  150. package/dist/vendor/bootstrap-vue/src/components/button-toolbar/index.js +0 -12
  151. package/dist/vendor/bootstrap-vue/src/components/calendar/calendar.js +0 -1010
  152. package/dist/vendor/bootstrap-vue/src/components/calendar/index.js +0 -11
  153. package/dist/vendor/bootstrap-vue/src/components/card/card-body.js +0 -63
  154. package/dist/vendor/bootstrap-vue/src/components/card/card-footer.js +0 -48
  155. package/dist/vendor/bootstrap-vue/src/components/card/card-group.js +0 -33
  156. package/dist/vendor/bootstrap-vue/src/components/card/card-header.js +0 -48
  157. package/dist/vendor/bootstrap-vue/src/components/card/card-img-lazy.js +0 -46
  158. package/dist/vendor/bootstrap-vue/src/components/card/card-img.js +0 -58
  159. package/dist/vendor/bootstrap-vue/src/components/card/card-sub-title.js +0 -35
  160. package/dist/vendor/bootstrap-vue/src/components/card/card-text.js +0 -31
  161. package/dist/vendor/bootstrap-vue/src/components/card/card-title.js +0 -33
  162. package/dist/vendor/bootstrap-vue/src/components/card/card.js +0 -123
  163. package/dist/vendor/bootstrap-vue/src/components/card/index.js +0 -38
  164. package/dist/vendor/bootstrap-vue/src/components/embed/embed.js +0 -50
  165. package/dist/vendor/bootstrap-vue/src/components/embed/index.js +0 -11
  166. package/dist/vendor/bootstrap-vue/src/components/form/form-datalist.js +0 -52
  167. package/dist/vendor/bootstrap-vue/src/components/form-btn-label-control/bv-form-btn-label-control.js +0 -261
  168. package/dist/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.js +0 -310
  169. package/dist/vendor/bootstrap-vue/src/components/form-datepicker/index.js +0 -12
  170. package/dist/vendor/bootstrap-vue/src/components/form-file/form-file.js +0 -561
  171. package/dist/vendor/bootstrap-vue/src/components/form-file/index.js +0 -12
  172. package/dist/vendor/bootstrap-vue/src/components/form-rating/form-rating.js +0 -402
  173. package/dist/vendor/bootstrap-vue/src/components/form-rating/index.js +0 -12
  174. package/dist/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.js +0 -555
  175. package/dist/vendor/bootstrap-vue/src/components/form-spinbutton/index.js +0 -12
  176. package/dist/vendor/bootstrap-vue/src/components/form-tags/form-tag.js +0 -97
  177. package/dist/vendor/bootstrap-vue/src/components/form-tags/form-tags.js +0 -806
  178. package/dist/vendor/bootstrap-vue/src/components/form-tags/index.js +0 -16
  179. package/dist/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.js +0 -281
  180. package/dist/vendor/bootstrap-vue/src/components/form-timepicker/index.js +0 -12
  181. package/dist/vendor/bootstrap-vue/src/components/image/img-lazy.js +0 -157
  182. package/dist/vendor/bootstrap-vue/src/components/image/img.js +0 -124
  183. package/dist/vendor/bootstrap-vue/src/components/image/index.js +0 -14
  184. package/dist/vendor/bootstrap-vue/src/components/jumbotron/index.js +0 -11
  185. package/dist/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.js +0 -98
  186. package/dist/vendor/bootstrap-vue/src/components/layout/container.js +0 -41
  187. package/dist/vendor/bootstrap-vue/src/components/layout/row.js +0 -113
  188. package/dist/vendor/bootstrap-vue/src/components/list-group/index.js +0 -14
  189. package/dist/vendor/bootstrap-vue/src/components/list-group/list-group-item.js +0 -78
  190. package/dist/vendor/bootstrap-vue/src/components/list-group/list-group.js +0 -42
  191. package/dist/vendor/bootstrap-vue/src/components/media/index.js +0 -17
  192. package/dist/vendor/bootstrap-vue/src/components/media/media-aside.js +0 -41
  193. package/dist/vendor/bootstrap-vue/src/components/media/media-body.js +0 -31
  194. package/dist/vendor/bootstrap-vue/src/components/media/media.js +0 -61
  195. package/dist/vendor/bootstrap-vue/src/components/nav/nav-form.js +0 -45
  196. package/dist/vendor/bootstrap-vue/src/components/nav/nav-text.js +0 -26
  197. package/dist/vendor/bootstrap-vue/src/components/navbar/navbar-nav.js +0 -46
  198. package/dist/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.js +0 -89
  199. package/dist/vendor/bootstrap-vue/src/components/overlay/index.js +0 -11
  200. package/dist/vendor/bootstrap-vue/src/components/overlay/overlay.js +0 -163
  201. package/dist/vendor/bootstrap-vue/src/components/pagination/index.js +0 -11
  202. package/dist/vendor/bootstrap-vue/src/components/pagination/pagination.js +0 -135
  203. package/dist/vendor/bootstrap-vue/src/components/pagination-nav/index.js +0 -11
  204. package/dist/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.js +0 -299
  205. package/dist/vendor/bootstrap-vue/src/components/sidebar/index.js +0 -15
  206. package/dist/vendor/bootstrap-vue/src/components/sidebar/sidebar.js +0 -432
  207. package/dist/vendor/bootstrap-vue/src/components/skeleton/index.js +0 -23
  208. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.js +0 -47
  209. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.js +0 -60
  210. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.js +0 -64
  211. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.js +0 -46
  212. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton.js +0 -49
  213. package/dist/vendor/bootstrap-vue/src/components/spinner/index.js +0 -11
  214. package/dist/vendor/bootstrap-vue/src/components/spinner/spinner.js +0 -55
  215. package/dist/vendor/bootstrap-vue/src/components/time/index.js +0 -11
  216. package/dist/vendor/bootstrap-vue/src/components/time/time.js +0 -600
  217. package/dist/vendor/bootstrap-vue/src/constants/date.js +0 -8
  218. package/dist/vendor/bootstrap-vue/src/mixins/card.js +0 -22
  219. package/dist/vendor/bootstrap-vue/src/mixins/pagination.js +0 -598
  220. package/dist/vendor/bootstrap-vue/src/utils/date.js +0 -135
  221. package/src/vendor/bootstrap-vue/src/_custom-controls.scss +0 -30
  222. package/src/vendor/bootstrap-vue/src/components/alert/README.md +0 -280
  223. package/src/vendor/bootstrap-vue/src/components/alert/alert.js +0 -185
  224. package/src/vendor/bootstrap-vue/src/components/alert/alert.spec.js +0 -442
  225. package/src/vendor/bootstrap-vue/src/components/alert/index.d.ts +0 -13
  226. package/src/vendor/bootstrap-vue/src/components/alert/index.js +0 -8
  227. package/src/vendor/bootstrap-vue/src/components/alert/package.json +0 -72
  228. package/src/vendor/bootstrap-vue/src/components/aspect/README.md +0 -65
  229. package/src/vendor/bootstrap-vue/src/components/aspect/aspect.js +0 -65
  230. package/src/vendor/bootstrap-vue/src/components/aspect/aspect.spec.js +0 -121
  231. package/src/vendor/bootstrap-vue/src/components/aspect/index.d.ts +0 -11
  232. package/src/vendor/bootstrap-vue/src/components/aspect/index.js +0 -8
  233. package/src/vendor/bootstrap-vue/src/components/aspect/package.json +0 -26
  234. package/src/vendor/bootstrap-vue/src/components/avatar/README.md +0 -567
  235. package/src/vendor/bootstrap-vue/src/components/avatar/_avatar.scss +0 -148
  236. package/src/vendor/bootstrap-vue/src/components/avatar/avatar-group.js +0 -75
  237. package/src/vendor/bootstrap-vue/src/components/avatar/avatar-group.spec.js +0 -74
  238. package/src/vendor/bootstrap-vue/src/components/avatar/avatar.js +0 -228
  239. package/src/vendor/bootstrap-vue/src/components/avatar/avatar.spec.js +0 -355
  240. package/src/vendor/bootstrap-vue/src/components/avatar/index.d.ts +0 -14
  241. package/src/vendor/bootstrap-vue/src/components/avatar/index.js +0 -9
  242. package/src/vendor/bootstrap-vue/src/components/avatar/index.scss +0 -1
  243. package/src/vendor/bootstrap-vue/src/components/avatar/package.json +0 -149
  244. package/src/vendor/bootstrap-vue/src/components/button-toolbar/README.md +0 -109
  245. package/src/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.js +0 -117
  246. package/src/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.spec.js +0 -185
  247. package/src/vendor/bootstrap-vue/src/components/button-toolbar/index.d.ts +0 -11
  248. package/src/vendor/bootstrap-vue/src/components/button-toolbar/index.js +0 -11
  249. package/src/vendor/bootstrap-vue/src/components/button-toolbar/package.json +0 -32
  250. package/src/vendor/bootstrap-vue/src/components/calendar/README.md +0 -735
  251. package/src/vendor/bootstrap-vue/src/components/calendar/_calendar.scss +0 -78
  252. package/src/vendor/bootstrap-vue/src/components/calendar/calendar.js +0 -1146
  253. package/src/vendor/bootstrap-vue/src/components/calendar/calendar.spec.js +0 -466
  254. package/src/vendor/bootstrap-vue/src/components/calendar/index.d.ts +0 -28
  255. package/src/vendor/bootstrap-vue/src/components/calendar/index.js +0 -8
  256. package/src/vendor/bootstrap-vue/src/components/calendar/index.scss +0 -1
  257. package/src/vendor/bootstrap-vue/src/components/calendar/package.json +0 -317
  258. package/src/vendor/bootstrap-vue/src/components/card/README.md +0 -729
  259. package/src/vendor/bootstrap-vue/src/components/card/_card-img.scss +0 -7
  260. package/src/vendor/bootstrap-vue/src/components/card/card-body.js +0 -69
  261. package/src/vendor/bootstrap-vue/src/components/card/card-body.spec.js +0 -142
  262. package/src/vendor/bootstrap-vue/src/components/card/card-footer.js +0 -48
  263. package/src/vendor/bootstrap-vue/src/components/card/card-footer.spec.js +0 -98
  264. package/src/vendor/bootstrap-vue/src/components/card/card-group.js +0 -33
  265. package/src/vendor/bootstrap-vue/src/components/card/card-group.spec.js +0 -75
  266. package/src/vendor/bootstrap-vue/src/components/card/card-header.js +0 -48
  267. package/src/vendor/bootstrap-vue/src/components/card/card-header.spec.js +0 -98
  268. package/src/vendor/bootstrap-vue/src/components/card/card-img-lazy.js +0 -47
  269. package/src/vendor/bootstrap-vue/src/components/card/card-img-lazy.spec.js +0 -204
  270. package/src/vendor/bootstrap-vue/src/components/card/card-img.js +0 -50
  271. package/src/vendor/bootstrap-vue/src/components/card/card-img.spec.js +0 -208
  272. package/src/vendor/bootstrap-vue/src/components/card/card-sub-title.js +0 -35
  273. package/src/vendor/bootstrap-vue/src/components/card/card-sub-title.spec.js +0 -60
  274. package/src/vendor/bootstrap-vue/src/components/card/card-text.js +0 -25
  275. package/src/vendor/bootstrap-vue/src/components/card/card-text.spec.js +0 -48
  276. package/src/vendor/bootstrap-vue/src/components/card/card-title.js +0 -33
  277. package/src/vendor/bootstrap-vue/src/components/card/card-title.spec.js +0 -45
  278. package/src/vendor/bootstrap-vue/src/components/card/card.js +0 -140
  279. package/src/vendor/bootstrap-vue/src/components/card/card.spec.js +0 -296
  280. package/src/vendor/bootstrap-vue/src/components/card/index.d.ts +0 -38
  281. package/src/vendor/bootstrap-vue/src/components/card/index.js +0 -40
  282. package/src/vendor/bootstrap-vue/src/components/card/index.scss +0 -1
  283. package/src/vendor/bootstrap-vue/src/components/card/package.json +0 -262
  284. package/src/vendor/bootstrap-vue/src/components/embed/README.md +0 -63
  285. package/src/vendor/bootstrap-vue/src/components/embed/embed.js +0 -51
  286. package/src/vendor/bootstrap-vue/src/components/embed/embed.spec.js +0 -110
  287. package/src/vendor/bootstrap-vue/src/components/embed/index.d.ts +0 -11
  288. package/src/vendor/bootstrap-vue/src/components/embed/index.js +0 -8
  289. package/src/vendor/bootstrap-vue/src/components/embed/package.json +0 -29
  290. package/src/vendor/bootstrap-vue/src/components/form/form-datalist.js +0 -42
  291. package/src/vendor/bootstrap-vue/src/components/form/form-datalist.spec.js +0 -57
  292. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/_form-btn-label-control.scss +0 -125
  293. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/bv-form-btn-label-control.js +0 -278
  294. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/index.scss +0 -1
  295. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/package.json +0 -5
  296. package/src/vendor/bootstrap-vue/src/components/form-datepicker/README.md +0 -694
  297. package/src/vendor/bootstrap-vue/src/components/form-datepicker/_form-datepicker.scss +0 -1
  298. package/src/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.js +0 -342
  299. package/src/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.spec.js +0 -562
  300. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.d.ts +0 -12
  301. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.js +0 -11
  302. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.scss +0 -1
  303. package/src/vendor/bootstrap-vue/src/components/form-datepicker/package.json +0 -420
  304. package/src/vendor/bootstrap-vue/src/components/form-file/README.md +0 -357
  305. package/src/vendor/bootstrap-vue/src/components/form-file/_form-file.scss +0 -61
  306. package/src/vendor/bootstrap-vue/src/components/form-file/form-file.js +0 -575
  307. package/src/vendor/bootstrap-vue/src/components/form-file/form-file.spec.js +0 -885
  308. package/src/vendor/bootstrap-vue/src/components/form-file/index.d.ts +0 -13
  309. package/src/vendor/bootstrap-vue/src/components/form-file/index.js +0 -11
  310. package/src/vendor/bootstrap-vue/src/components/form-file/index.scss +0 -1
  311. package/src/vendor/bootstrap-vue/src/components/form-file/package.json +0 -131
  312. package/src/vendor/bootstrap-vue/src/components/form-rating/README.md +0 -526
  313. package/src/vendor/bootstrap-vue/src/components/form-rating/_form-rating.scss +0 -57
  314. package/src/vendor/bootstrap-vue/src/components/form-rating/form-rating.js +0 -411
  315. package/src/vendor/bootstrap-vue/src/components/form-rating/form-rating.spec.js +0 -544
  316. package/src/vendor/bootstrap-vue/src/components/form-rating/index.d.ts +0 -14
  317. package/src/vendor/bootstrap-vue/src/components/form-rating/index.js +0 -8
  318. package/src/vendor/bootstrap-vue/src/components/form-rating/index.scss +0 -1
  319. package/src/vendor/bootstrap-vue/src/components/form-rating/package.json +0 -166
  320. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/README.md +0 -411
  321. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/_spinbutton.scss +0 -76
  322. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.js +0 -572
  323. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.spec.js +0 -731
  324. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.d.ts +0 -12
  325. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.js +0 -11
  326. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.scss +0 -1
  327. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/package.json +0 -150
  328. package/src/vendor/bootstrap-vue/src/components/form-tags/README.md +0 -880
  329. package/src/vendor/bootstrap-vue/src/components/form-tags/_form-tags.scss +0 -70
  330. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tag.js +0 -94
  331. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tag.spec.js +0 -166
  332. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tags.js +0 -891
  333. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tags.spec.js +0 -920
  334. package/src/vendor/bootstrap-vue/src/components/form-tags/index.d.ts +0 -16
  335. package/src/vendor/bootstrap-vue/src/components/form-tags/index.js +0 -14
  336. package/src/vendor/bootstrap-vue/src/components/form-tags/index.scss +0 -1
  337. package/src/vendor/bootstrap-vue/src/components/form-tags/package.json +0 -440
  338. package/src/vendor/bootstrap-vue/src/components/form-timepicker/README.md +0 -450
  339. package/src/vendor/bootstrap-vue/src/components/form-timepicker/_form-timepicker.scss +0 -1
  340. package/src/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.js +0 -308
  341. package/src/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.spec.js +0 -440
  342. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.d.ts +0 -12
  343. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.js +0 -11
  344. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.scss +0 -1
  345. package/src/vendor/bootstrap-vue/src/components/form-timepicker/package.json +0 -255
  346. package/src/vendor/bootstrap-vue/src/components/image/README.md +0 -322
  347. package/src/vendor/bootstrap-vue/src/components/image/img-lazy.js +0 -161
  348. package/src/vendor/bootstrap-vue/src/components/image/img-lazy.spec.js +0 -96
  349. package/src/vendor/bootstrap-vue/src/components/image/img.js +0 -139
  350. package/src/vendor/bootstrap-vue/src/components/image/img.spec.js +0 -255
  351. package/src/vendor/bootstrap-vue/src/components/image/index.d.ts +0 -14
  352. package/src/vendor/bootstrap-vue/src/components/image/index.js +0 -12
  353. package/src/vendor/bootstrap-vue/src/components/image/package.json +0 -152
  354. package/src/vendor/bootstrap-vue/src/components/jumbotron/README.md +0 -109
  355. package/src/vendor/bootstrap-vue/src/components/jumbotron/index.d.ts +0 -11
  356. package/src/vendor/bootstrap-vue/src/components/jumbotron/index.js +0 -8
  357. package/src/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.js +0 -103
  358. package/src/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.spec.js +0 -254
  359. package/src/vendor/bootstrap-vue/src/components/jumbotron/package.json +0 -66
  360. package/src/vendor/bootstrap-vue/src/components/layout/container.js +0 -40
  361. package/src/vendor/bootstrap-vue/src/components/layout/container.spec.js +0 -75
  362. package/src/vendor/bootstrap-vue/src/components/layout/row.js +0 -111
  363. package/src/vendor/bootstrap-vue/src/components/layout/row.spec.js +0 -138
  364. package/src/vendor/bootstrap-vue/src/components/list-group/README.md +0 -291
  365. package/src/vendor/bootstrap-vue/src/components/list-group/index.d.ts +0 -14
  366. package/src/vendor/bootstrap-vue/src/components/list-group/index.js +0 -12
  367. package/src/vendor/bootstrap-vue/src/components/list-group/list-group-item.js +0 -76
  368. package/src/vendor/bootstrap-vue/src/components/list-group/list-group-item.spec.js +0 -286
  369. package/src/vendor/bootstrap-vue/src/components/list-group/list-group.js +0 -42
  370. package/src/vendor/bootstrap-vue/src/components/list-group/list-group.spec.js +0 -132
  371. package/src/vendor/bootstrap-vue/src/components/list-group/package.json +0 -52
  372. package/src/vendor/bootstrap-vue/src/components/media/README.md +0 -183
  373. package/src/vendor/bootstrap-vue/src/components/media/_media.scss +0 -9
  374. package/src/vendor/bootstrap-vue/src/components/media/index.d.ts +0 -17
  375. package/src/vendor/bootstrap-vue/src/components/media/index.js +0 -14
  376. package/src/vendor/bootstrap-vue/src/components/media/index.scss +0 -1
  377. package/src/vendor/bootstrap-vue/src/components/media/media-aside.js +0 -45
  378. package/src/vendor/bootstrap-vue/src/components/media/media-aside.spec.js +0 -79
  379. package/src/vendor/bootstrap-vue/src/components/media/media-body.js +0 -25
  380. package/src/vendor/bootstrap-vue/src/components/media/media-body.spec.js +0 -47
  381. package/src/vendor/bootstrap-vue/src/components/media/media.js +0 -52
  382. package/src/vendor/bootstrap-vue/src/components/media/media.spec.js +0 -149
  383. package/src/vendor/bootstrap-vue/src/components/media/package.json +0 -65
  384. package/src/vendor/bootstrap-vue/src/components/nav/nav-form.js +0 -50
  385. package/src/vendor/bootstrap-vue/src/components/nav/nav-form.spec.js +0 -93
  386. package/src/vendor/bootstrap-vue/src/components/nav/nav-text.js +0 -18
  387. package/src/vendor/bootstrap-vue/src/components/nav/nav-text.spec.js +0 -30
  388. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-nav.js +0 -45
  389. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-nav.spec.js +0 -105
  390. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.js +0 -84
  391. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.spec.js +0 -189
  392. package/src/vendor/bootstrap-vue/src/components/overlay/README.md +0 -815
  393. package/src/vendor/bootstrap-vue/src/components/overlay/index.d.ts +0 -11
  394. package/src/vendor/bootstrap-vue/src/components/overlay/index.js +0 -8
  395. package/src/vendor/bootstrap-vue/src/components/overlay/overlay.js +0 -162
  396. package/src/vendor/bootstrap-vue/src/components/overlay/overlay.spec.js +0 -257
  397. package/src/vendor/bootstrap-vue/src/components/overlay/package.json +0 -130
  398. package/src/vendor/bootstrap-vue/src/components/pagination/README.md +0 -430
  399. package/src/vendor/bootstrap-vue/src/components/pagination/_pagination.scss +0 -26
  400. package/src/vendor/bootstrap-vue/src/components/pagination/index.d.ts +0 -11
  401. package/src/vendor/bootstrap-vue/src/components/pagination/index.js +0 -8
  402. package/src/vendor/bootstrap-vue/src/components/pagination/index.scss +0 -1
  403. package/src/vendor/bootstrap-vue/src/components/pagination/package.json +0 -295
  404. package/src/vendor/bootstrap-vue/src/components/pagination/pagination.js +0 -138
  405. package/src/vendor/bootstrap-vue/src/components/pagination/pagination.spec.js +0 -1198
  406. package/src/vendor/bootstrap-vue/src/components/pagination-nav/README.md +0 -544
  407. package/src/vendor/bootstrap-vue/src/components/pagination-nav/_pagination-nav.scss +0 -2
  408. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.d.ts +0 -11
  409. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.js +0 -8
  410. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.scss +0 -1
  411. package/src/vendor/bootstrap-vue/src/components/pagination-nav/package.json +0 -315
  412. package/src/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.js +0 -281
  413. package/src/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.spec.js +0 -671
  414. package/src/vendor/bootstrap-vue/src/components/sidebar/README.md +0 -406
  415. package/src/vendor/bootstrap-vue/src/components/sidebar/_sidebar.scss +0 -97
  416. package/src/vendor/bootstrap-vue/src/components/sidebar/index.d.ts +0 -11
  417. package/src/vendor/bootstrap-vue/src/components/sidebar/index.js +0 -10
  418. package/src/vendor/bootstrap-vue/src/components/sidebar/index.scss +0 -1
  419. package/src/vendor/bootstrap-vue/src/components/sidebar/package.json +0 -239
  420. package/src/vendor/bootstrap-vue/src/components/sidebar/sidebar.js +0 -438
  421. package/src/vendor/bootstrap-vue/src/components/sidebar/sidebar.spec.js +0 -404
  422. package/src/vendor/bootstrap-vue/src/components/skeleton/README.md +0 -275
  423. package/src/vendor/bootstrap-vue/src/components/skeleton/_skeleton.scss +0 -141
  424. package/src/vendor/bootstrap-vue/src/components/skeleton/index.d.ts +0 -23
  425. package/src/vendor/bootstrap-vue/src/components/skeleton/index.js +0 -18
  426. package/src/vendor/bootstrap-vue/src/components/skeleton/index.scss +0 -1
  427. package/src/vendor/bootstrap-vue/src/components/skeleton/package.json +0 -136
  428. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.js +0 -45
  429. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.spec.js +0 -86
  430. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.js +0 -49
  431. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.spec.js +0 -139
  432. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.js +0 -58
  433. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.spec.js +0 -119
  434. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.js +0 -47
  435. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.spec.js +0 -48
  436. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton.js +0 -46
  437. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton.spec.js +0 -126
  438. package/src/vendor/bootstrap-vue/src/components/spinner/README.md +0 -229
  439. package/src/vendor/bootstrap-vue/src/components/spinner/index.d.ts +0 -11
  440. package/src/vendor/bootstrap-vue/src/components/spinner/index.js +0 -8
  441. package/src/vendor/bootstrap-vue/src/components/spinner/package.json +0 -38
  442. package/src/vendor/bootstrap-vue/src/components/spinner/spinner.js +0 -54
  443. package/src/vendor/bootstrap-vue/src/components/spinner/spinner.spec.js +0 -305
  444. package/src/vendor/bootstrap-vue/src/components/time/README.md +0 -431
  445. package/src/vendor/bootstrap-vue/src/components/time/_time.scss +0 -41
  446. package/src/vendor/bootstrap-vue/src/components/time/index.d.ts +0 -27
  447. package/src/vendor/bootstrap-vue/src/components/time/index.js +0 -8
  448. package/src/vendor/bootstrap-vue/src/components/time/index.scss +0 -1
  449. package/src/vendor/bootstrap-vue/src/components/time/package.json +0 -123
  450. package/src/vendor/bootstrap-vue/src/components/time/time.js +0 -601
  451. package/src/vendor/bootstrap-vue/src/components/time/time.spec.js +0 -330
  452. package/src/vendor/bootstrap-vue/src/constants/date.js +0 -7
  453. package/src/vendor/bootstrap-vue/src/mixins/card.js +0 -23
  454. package/src/vendor/bootstrap-vue/src/mixins/pagination.js +0 -670
  455. package/src/vendor/bootstrap-vue/src/utils/date.js +0 -130
  456. package/src/vendor/bootstrap-vue/src/utils/date.spec.js +0 -159
@@ -1,920 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { waitNT, waitRAF } from '../../../tests/utils'
3
- import { BFormTags } from './form-tags'
4
-
5
- describe('form-tags', () => {
6
- it('has expected default structure', async () => {
7
- const wrapper = mount(BFormTags)
8
-
9
- expect(wrapper.element.tagName).toBe('DIV')
10
- expect(wrapper.classes()).toContain('b-form-tags')
11
- expect(wrapper.classes()).toContain('form-control')
12
- expect(wrapper.attributes('role')).toBe('group')
13
- expect(wrapper.attributes('tabindex')).toBe('-1')
14
-
15
- wrapper.destroy()
16
- })
17
-
18
- it('has tags when value is set', async () => {
19
- const wrapper = mount(BFormTags, {
20
- propsData: {
21
- value: ['apple', 'orange']
22
- }
23
- })
24
-
25
- expect(wrapper.element.tagName).toBe('DIV')
26
-
27
- const $tags = wrapper.findAll('.b-form-tag')
28
- expect($tags.length).toBe(2)
29
-
30
- const $tag0 = $tags.at(0)
31
- expect($tag0.attributes('title')).toEqual('apple')
32
- expect($tag0.classes()).toContain('badge')
33
- expect($tag0.classes()).toContain('badge-secondary')
34
- expect($tag0.text()).toContain('apple')
35
- expect($tag0.find('button.close').exists()).toBe(true)
36
-
37
- const $tag1 = $tags.at(1)
38
- expect($tag1.attributes('title')).toEqual('orange')
39
- expect($tag1.classes()).toContain('badge')
40
- expect($tag1.classes()).toContain('badge-secondary')
41
- expect($tag1.text()).toContain('orange')
42
- expect($tag1.find('button.close').exists()).toBe(true)
43
-
44
- wrapper.destroy()
45
- })
46
-
47
- it('responds to changes in value prop', async () => {
48
- const wrapper = mount(BFormTags, {
49
- propsData: {
50
- value: ['apple', 'orange']
51
- }
52
- })
53
-
54
- expect(wrapper.element.tagName).toBe('DIV')
55
-
56
- await wrapper.setProps({ value: ['pear'] })
57
- expect(wrapper.vm.tags).toEqual(['pear'])
58
-
59
- wrapper.destroy()
60
- })
61
-
62
- it('default slot has expected scope', async () => {
63
- let scope
64
- const wrapper = mount(BFormTags, {
65
- propsData: {
66
- value: ['apple', 'orange']
67
- },
68
- scopedSlots: {
69
- default(props) {
70
- scope = props
71
- }
72
- }
73
- })
74
-
75
- await waitNT(wrapper.vm)
76
- await waitRAF()
77
-
78
- expect(wrapper.element.tagName).toBe('DIV')
79
-
80
- expect(scope).toBeDefined()
81
- expect(typeof scope).toBe('object')
82
- expect(Array.isArray(scope.tags)).toBe(true)
83
- expect(scope.tags).toEqual(['apple', 'orange'])
84
- expect(typeof scope.addTag).toBe('function')
85
- expect(typeof scope.removeTag).toBe('function')
86
- expect(typeof scope.disabled).toBe('boolean')
87
- expect(scope.state).toEqual(null)
88
- expect(typeof scope.tagRemoveLabel).toBe('string')
89
- expect(scope.tagRemoveLabel).toBe('Remove tag')
90
- expect(typeof scope.placeholder).toBe('string')
91
- expect(scope.placeholder).toBe('Add tag...')
92
- expect(typeof scope.tagVariant).toBe('string')
93
- expect(scope.tagVariant).toBe('secondary')
94
- expect(scope.inputAttrs).toEqual(wrapper.vm.computedInputAttrs)
95
- expect(scope.inputHandlers).toEqual(wrapper.vm.computedInputHandlers)
96
-
97
- wrapper.destroy()
98
- })
99
-
100
- it('has hidden inputs when name is set', async () => {
101
- const wrapper = mount(BFormTags, {
102
- propsData: {
103
- value: [],
104
- name: 'foo',
105
- required: true
106
- }
107
- })
108
-
109
- expect(wrapper.element.tagName).toBe('DIV')
110
-
111
- let $hidden = wrapper.find('input.sr-only')
112
- expect($hidden.attributes('value')).toEqual('')
113
- expect($hidden.attributes('name')).toEqual('foo')
114
- expect($hidden.attributes('required')).toBeDefined()
115
-
116
- await wrapper.setProps({ value: ['apple', 'orange'] })
117
- $hidden = wrapper.findAll('input[type=hidden]')
118
- expect($hidden.length).toBe(2)
119
- expect($hidden.at(0).attributes('value')).toEqual('apple')
120
- expect($hidden.at(0).attributes('name')).toEqual('foo')
121
- expect($hidden.at(1).attributes('value')).toEqual('orange')
122
- expect($hidden.at(1).attributes('name')).toEqual('foo')
123
-
124
- wrapper.destroy()
125
- })
126
-
127
- it('adds new tags from user input', async () => {
128
- const wrapper = mount(BFormTags, {
129
- propsData: {
130
- value: ['apple', 'orange']
131
- }
132
- })
133
-
134
- expect(wrapper.element.tagName).toBe('DIV')
135
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
136
- expect(wrapper.vm.newTag).toEqual('')
137
-
138
- const $input = wrapper.find('input')
139
- expect($input.exists()).toBe(true)
140
- expect($input.element.value).toBe('')
141
- expect($input.element.type).toBe('text')
142
-
143
- $input.element.value = 'pear'
144
- await $input.trigger('input')
145
- expect(wrapper.vm.newTag).toEqual('pear')
146
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
147
- await $input.trigger('change')
148
- expect(wrapper.vm.newTag).toEqual('pear')
149
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
150
- await wrapper.setProps({ addOnChange: true })
151
- await $input.trigger('change')
152
- expect(wrapper.vm.newTag).toEqual('')
153
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
154
- await wrapper.setProps({ addOnChange: false })
155
-
156
- $input.element.value = 'peach'
157
- await $input.trigger('input')
158
- expect(wrapper.vm.newTag).toEqual('peach')
159
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
160
- await $input.trigger('keydown.enter')
161
- expect(wrapper.vm.newTag).toEqual('')
162
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear', 'peach'])
163
-
164
- wrapper.destroy()
165
- })
166
-
167
- it('applies "input-id" to the input', async () => {
168
- const wrapper = mount(BFormTags, {
169
- propsData: {
170
- inputId: '1-tag-input',
171
- value: ['apple', 'orange']
172
- }
173
- })
174
-
175
- expect(wrapper.element.tagName).toBe('DIV')
176
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
177
- expect(wrapper.vm.newTag).toEqual('')
178
-
179
- const $input = wrapper.find('input')
180
- expect($input.exists()).toBe(true)
181
- expect($input.element.value).toBe('')
182
- expect($input.element.type).toBe('text')
183
- expect($input.element.id).toEqual('1-tag-input')
184
-
185
- $input.element.value = 'pear'
186
- await $input.trigger('input')
187
- expect(wrapper.vm.newTag).toEqual('pear')
188
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
189
- await $input.trigger('change')
190
- expect(wrapper.vm.newTag).toEqual('pear')
191
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
192
- await wrapper.setProps({ addOnChange: true })
193
- await $input.trigger('change')
194
- expect(wrapper.vm.newTag).toEqual('')
195
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
196
- await wrapper.setProps({ addOnChange: false })
197
-
198
- wrapper.destroy()
199
- })
200
-
201
- it('has tags without remove button when `no-tag-remove` prop set', async () => {
202
- const wrapper = mount(BFormTags, {
203
- propsData: {
204
- noTagRemove: true,
205
- value: ['apple', 'orange']
206
- }
207
- })
208
-
209
- expect(wrapper.element.tagName).toBe('DIV')
210
-
211
- const $tags = wrapper.findAll('.b-form-tag')
212
- expect($tags.length).toBe(2)
213
-
214
- const $tag0 = $tags.at(0)
215
- expect($tag0.find('button').exists()).toBe(false)
216
-
217
- const $tag1 = $tags.at(1)
218
- expect($tag1.find('button').exists()).toBe(false)
219
-
220
- wrapper.destroy()
221
- })
222
-
223
- it('removes tags when user clicks remove on tag', async () => {
224
- const wrapper = mount(BFormTags, {
225
- propsData: {
226
- value: ['apple', 'orange', 'pear', 'peach']
227
- }
228
- })
229
-
230
- expect(wrapper.element.tagName).toBe('DIV')
231
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear', 'peach'])
232
- expect(wrapper.vm.newTag).toEqual('')
233
-
234
- let $tags = wrapper.findAll('.badge')
235
- expect($tags.length).toBe(4)
236
- expect($tags.at(1).attributes('title')).toEqual('orange')
237
-
238
- const $btn = $tags.at(1).find('button')
239
- expect($btn.exists()).toBe(true)
240
-
241
- await $btn.trigger('click')
242
- expect(wrapper.vm.tags).toEqual(['apple', 'pear', 'peach'])
243
-
244
- $tags = wrapper.findAll('.badge')
245
- expect($tags.length).toBe(3)
246
- expect($tags.at(1).attributes('title')).toEqual('pear')
247
-
248
- wrapper.destroy()
249
- })
250
-
251
- it('adds new tags via separator', async () => {
252
- const wrapper = mount(BFormTags, {
253
- propsData: {
254
- separator: ' ,;',
255
- value: ['apple', 'orange']
256
- }
257
- })
258
-
259
- expect(wrapper.element.tagName).toBe('DIV')
260
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
261
- expect(wrapper.vm.newTag).toEqual('')
262
-
263
- const $input = wrapper.find('input')
264
- expect($input.exists()).toBe(true)
265
- expect($input.element.value).toBe('')
266
-
267
- $input.element.value = 'pear'
268
- await $input.trigger('input')
269
- expect(wrapper.vm.newTag).toEqual('pear')
270
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
271
- $input.element.value = 'pear '
272
- await $input.trigger('input')
273
- expect(wrapper.vm.newTag).toEqual('')
274
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
275
-
276
- $input.element.value = 'peach; foo,bar apple pie'
277
- await $input.trigger('input')
278
- expect(wrapper.vm.newTag).toEqual('peach; foo,bar apple pie')
279
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
280
-
281
- $input.element.value = 'peach; foo,bar apple pie '
282
- await $input.trigger('input')
283
- expect(wrapper.vm.newTag).toEqual('apple ')
284
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear', 'peach', 'foo', 'bar', 'pie'])
285
-
286
- wrapper.destroy()
287
- })
288
-
289
- it('tag validation works', async () => {
290
- const wrapper = mount(BFormTags, {
291
- propsData: {
292
- separator: ' ',
293
- tagValidator: tag => tag.length < 5,
294
- value: ['one', 'two']
295
- }
296
- })
297
-
298
- expect(wrapper.element.tagName).toBe('DIV')
299
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
300
- expect(wrapper.vm.newTag).toEqual('')
301
-
302
- const $input = wrapper.find('input')
303
- expect($input.exists()).toBe(true)
304
- expect($input.element.value).toBe('')
305
-
306
- $input.element.value = 'tag'
307
- await $input.trigger('input')
308
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
309
- expect(wrapper.vm.newTag).toEqual('tag')
310
-
311
- $input.element.value = 'tag '
312
- await $input.trigger('input')
313
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
314
- expect(wrapper.vm.newTag).toEqual('')
315
-
316
- $input.element.value = 'three four one four '
317
- await $input.trigger('input')
318
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag', 'four'])
319
- // No tags(s) were accepted so the input is left as is
320
- expect(wrapper.vm.newTag).toEqual('three four one four ')
321
-
322
- $input.element.value = ' three '
323
- await $input.trigger('input')
324
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag', 'four'])
325
- // No tags(s) were accepted so the input is left as is
326
- expect(wrapper.vm.newTag).toEqual(' three ')
327
-
328
- $input.element.value = ' three seven '
329
- await $input.trigger('input')
330
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag', 'four'])
331
- // No tags(s) were accepted so the input is left as is
332
- expect(wrapper.vm.newTag).toEqual(' three seven ')
333
-
334
- $input.element.value = ' three cat seven '
335
- await $input.trigger('input')
336
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag', 'four', 'cat'])
337
- // No tags(s) were accepted so the input is left as is
338
- expect(wrapper.vm.newTag).toEqual('three seven ')
339
-
340
- $input.element.value = ' '
341
- await $input.trigger('input')
342
- expect(wrapper.vm.newTag).toEqual(' ')
343
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag', 'four', 'cat'])
344
-
345
- wrapper.destroy()
346
- })
347
-
348
- it('tag validation on input event works', async () => {
349
- const wrapper = mount(BFormTags, {
350
- propsData: {
351
- separator: ' ',
352
- tagValidator: tag => tag.length < 5,
353
- validateOnInput: true,
354
- value: ['one', 'two']
355
- }
356
- })
357
-
358
- expect(wrapper.element.tagName).toBe('DIV')
359
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
360
- expect(wrapper.vm.newTag).toEqual('')
361
- expect(wrapper.vm.duplicateTags).toEqual([])
362
- expect(wrapper.vm.invalidTags).toEqual([])
363
- expect(wrapper.emitted('tag-state')).toBeUndefined()
364
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
365
- expect(wrapper.find('.form-text').exists()).toBe(false)
366
-
367
- const $input = wrapper.find('input')
368
- expect($input.exists()).toBe(true)
369
- expect($input.element.value).toBe('')
370
-
371
- $input.element.value = 'tag'
372
- await $input.trigger('input')
373
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
374
- expect(wrapper.vm.newTag).toEqual('tag')
375
- expect(wrapper.vm.duplicateTags).toEqual([])
376
- expect(wrapper.vm.invalidTags).toEqual([])
377
- expect(wrapper.emitted('tag-state')).toBeDefined()
378
- expect(wrapper.emitted('tag-state').length).toBe(1)
379
- // Valid tags
380
- expect(wrapper.emitted('tag-state')[0][0]).toEqual(['tag'])
381
- // Invalid tags
382
- expect(wrapper.emitted('tag-state')[0][1]).toEqual([])
383
- // Duplicate tags
384
- expect(wrapper.emitted('tag-state')[0][2]).toEqual([])
385
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
386
- expect(wrapper.find('.form-text').exists()).toBe(false)
387
-
388
- $input.element.value = 'tag '
389
- await $input.trigger('input')
390
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
391
- expect(wrapper.vm.newTag).toEqual('')
392
- expect(wrapper.vm.duplicateTags).toEqual([])
393
- expect(wrapper.vm.invalidTags).toEqual([])
394
- expect(wrapper.emitted('tag-state')).toBeDefined()
395
- // No changes to tagsState data, so no emit
396
- expect(wrapper.emitted('tag-state').length).toBe(1)
397
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
398
- expect(wrapper.find('.form-text').exists()).toBe(false)
399
-
400
- // Emulate a user typing the word `three` (but not finished)
401
- $input.element.value = 'thr'
402
- await $input.trigger('input')
403
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
404
- // Invalid tags are left in the input
405
- expect(wrapper.vm.newTag).toEqual('thr')
406
- expect(wrapper.vm.duplicateTags).toEqual([])
407
- expect(wrapper.vm.invalidTags).toEqual([])
408
- expect(wrapper.emitted('tag-state').length).toBe(2)
409
- // Valid tags
410
- expect(wrapper.emitted('tag-state')[1][0]).toEqual(['thr'])
411
- // Invalid tags
412
- expect(wrapper.emitted('tag-state')[1][1]).toEqual([])
413
- // Duplicate tags
414
- expect(wrapper.emitted('tag-state')[1][2]).toEqual([])
415
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
416
- expect(wrapper.find('.form-text').exists()).toBe(false)
417
- // Add next character
418
- $input.element.value = 'thre'
419
- await $input.trigger('input')
420
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
421
- // Invalid tags are left in the input
422
- expect(wrapper.vm.newTag).toEqual('thre')
423
- expect(wrapper.vm.duplicateTags).toEqual([])
424
- expect(wrapper.vm.invalidTags).toEqual([])
425
- expect(wrapper.emitted('tag-state').length).toBe(3)
426
- // Valid tags
427
- expect(wrapper.emitted('tag-state')[2][0]).toEqual(['thre'])
428
- // Invalid tags
429
- expect(wrapper.emitted('tag-state')[2][1]).toEqual([])
430
- // Duplicate tags
431
- expect(wrapper.emitted('tag-state')[2][2]).toEqual([])
432
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
433
- expect(wrapper.find('.form-text').exists()).toBe(false)
434
- // Add next character
435
- $input.element.value = 'three'
436
- await $input.trigger('input')
437
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
438
- // No tags(s) were accepted so the input is left as is
439
- expect(wrapper.vm.newTag).toEqual('three')
440
- expect(wrapper.vm.duplicateTags).toEqual([])
441
- expect(wrapper.vm.invalidTags).toEqual(['three'])
442
- expect(wrapper.emitted('tag-state').length).toBe(4)
443
- // Valid tags
444
- expect(wrapper.emitted('tag-state')[3][0]).toEqual([])
445
- // Invalid tags
446
- expect(wrapper.emitted('tag-state')[3][1]).toEqual(['three'])
447
- // Duplicate tags
448
- expect(wrapper.emitted('tag-state')[3][2]).toEqual([])
449
- expect(wrapper.find('.invalid-feedback').exists()).toBe(true)
450
- expect(wrapper.find('.invalid-feedback').attributes('aria-live')).toEqual('assertive')
451
- expect(wrapper.find('.invalid-feedback').attributes('aria-atomic')).toEqual('true')
452
- expect(wrapper.find('.form-text').exists()).toBe(false)
453
- // Add next character
454
- $input.element.value = 'three '
455
- await $input.trigger('input')
456
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
457
- // No tags(s) were accepted so the input is left as is
458
- expect(wrapper.vm.newTag).toEqual('three ')
459
- expect(wrapper.vm.duplicateTags).toEqual([])
460
- expect(wrapper.vm.invalidTags).toEqual(['three'])
461
- // State hasn't changed, so event not emitted
462
- expect(wrapper.emitted('tag-state').length).toBe(4)
463
-
464
- $input.element.value = 'two'
465
- await $input.trigger('input')
466
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
467
- // No tags(s) were accepted so the input is left as is
468
- expect(wrapper.vm.newTag).toEqual('two')
469
- expect(wrapper.vm.duplicateTags).toEqual(['two'])
470
- expect(wrapper.vm.invalidTags).toEqual([])
471
- expect(wrapper.emitted('tag-state').length).toBe(5)
472
- // Valid tags
473
- expect(wrapper.emitted('tag-state')[4][0]).toEqual([])
474
- // Invalid tags
475
- expect(wrapper.emitted('tag-state')[4][1]).toEqual([])
476
- // Duplicate tags
477
- expect(wrapper.emitted('tag-state')[4][2]).toEqual(['two'])
478
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
479
- expect(wrapper.find('.form-text').exists()).toBe(true)
480
-
481
- $input.element.value = ' three two '
482
- await $input.trigger('input')
483
- await wrapper.setProps({ feedbackAriaLive: 'polite' })
484
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
485
- // No tags(s) were accepted so the input is left as is
486
- expect(wrapper.vm.newTag).toEqual(' three two ')
487
- expect(wrapper.emitted('tag-state').length).toBe(6)
488
- // Tags added
489
- expect(wrapper.emitted('tag-state')[5][0]).toEqual([])
490
- // Invalid tag
491
- expect(wrapper.emitted('tag-state')[5][1]).toEqual(['three'])
492
- // Duplicate tags
493
- expect(wrapper.emitted('tag-state')[5][2]).toEqual(['two'])
494
- expect(wrapper.find('.invalid-feedback').exists()).toBe(true)
495
- expect(wrapper.find('.invalid-feedback').attributes('aria-live')).toEqual('polite')
496
- expect(wrapper.find('.invalid-feedback').attributes('aria-atomic')).toEqual('true')
497
- expect(wrapper.find('.form-text').exists()).toBe(true)
498
- await $input.trigger('input')
499
- await wrapper.setProps({ feedbackAriaLive: null })
500
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
501
- // No tags(s) were accepted so the input is left as is
502
- expect(wrapper.vm.newTag).toEqual(' three two ')
503
- expect(wrapper.emitted('tag-state').length).toBe(6)
504
- expect(wrapper.find('.invalid-feedback').exists()).toBe(true)
505
- expect(wrapper.find('.invalid-feedback').attributes('aria-live')).toBeUndefined()
506
- expect(wrapper.find('.invalid-feedback').attributes('aria-atomic')).toBeUndefined()
507
- expect(wrapper.find('.form-text').exists()).toBe(true)
508
-
509
- $input.element.value = ' '
510
- await $input.trigger('input')
511
- expect(wrapper.vm.newTag).toEqual(' ')
512
- expect(wrapper.vm.tags).toEqual(['one', 'two', 'tag'])
513
- expect(wrapper.emitted('tag-state').length).toBe(7)
514
- expect(wrapper.vm.duplicateTags).toEqual([])
515
- expect(wrapper.vm.invalidTags).toEqual([])
516
- // Tags added
517
- expect(wrapper.emitted('tag-state')[6][0]).toEqual([])
518
- // Invalid tag
519
- expect(wrapper.emitted('tag-state')[6][1]).toEqual([])
520
- // Duplicate tags
521
- expect(wrapper.emitted('tag-state')[6][2]).toEqual([])
522
- expect(wrapper.find('.invalid-feedback').exists()).toBe(false)
523
- expect(wrapper.find('.form-text').exists()).toBe(false)
524
-
525
- wrapper.destroy()
526
- })
527
-
528
- it('adds new tags when add button clicked', async () => {
529
- const wrapper = mount(BFormTags, {
530
- propsData: {
531
- value: ['apple', 'orange']
532
- }
533
- })
534
-
535
- expect(wrapper.element.tagName).toBe('DIV')
536
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
537
- expect(wrapper.vm.newTag).toEqual('')
538
-
539
- const $input = wrapper.find('input')
540
- expect($input.exists()).toBe(true)
541
- expect($input.element.value).toBe('')
542
-
543
- const $button = wrapper.find('button.b-form-tags-button')
544
- expect($button.exists()).toBe(true)
545
- expect($button.classes()).toContain('invisible')
546
-
547
- $input.element.value = 'pear'
548
- await $input.trigger('input')
549
- expect(wrapper.vm.newTag).toEqual('pear')
550
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
551
- expect($button.classes()).not.toContain('invisible')
552
-
553
- await $button.trigger('click')
554
- expect($button.classes()).toContain('invisible')
555
- expect(wrapper.vm.newTag).toEqual('')
556
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
557
-
558
- wrapper.destroy()
559
- })
560
-
561
- it('reset() method works', async () => {
562
- const wrapper = mount(BFormTags, {
563
- propsData: {
564
- value: ['one', 'two'],
565
- addOnChange: true,
566
- tagValidator: tag => tag.length < 4
567
- }
568
- })
569
-
570
- expect(wrapper.element.tagName).toBe('DIV')
571
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
572
- expect(wrapper.vm.newTag).toEqual('')
573
-
574
- const $input = wrapper.find('input')
575
- expect($input.exists()).toBe(true)
576
- expect($input.element.value).toBe('')
577
- expect($input.element.type).toBe('text')
578
-
579
- $input.element.value = 'three'
580
- await $input.trigger('input')
581
- await $input.trigger('change')
582
- expect(wrapper.vm.newTag).toEqual('three')
583
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
584
- expect(wrapper.vm.tagsState.invalid).toContain('three')
585
-
586
- const $tags = wrapper.findAll('.badge')
587
- expect($tags.length).toBe(2)
588
- await $tags
589
- .at(1)
590
- .find('button')
591
- .trigger('click')
592
- expect(wrapper.vm.tags).toEqual(['one'])
593
- expect(wrapper.vm.removedTags).toContain('two')
594
-
595
- wrapper.vm.reset()
596
- await waitNT(wrapper.vm)
597
-
598
- expect(wrapper.vm.newTag).toEqual('')
599
- expect(wrapper.vm.tags).toEqual([])
600
- expect(wrapper.vm.removedTags).toEqual([])
601
- expect(wrapper.vm.tagsState.invalid).toEqual([])
602
-
603
- wrapper.destroy()
604
- })
605
-
606
- it('native reset event works', async () => {
607
- const wrapper = mount(BFormTags, {
608
- propsData: {
609
- value: ['one', 'two'],
610
- addOnChange: true,
611
- tagValidator: tag => tag.length < 4
612
- }
613
- })
614
-
615
- expect(wrapper.element.tagName).toBe('DIV')
616
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
617
- expect(wrapper.vm.newTag).toEqual('')
618
-
619
- const $input = wrapper.find('input')
620
- expect($input.exists()).toBe(true)
621
- expect($input.element.value).toBe('')
622
- expect($input.element.type).toBe('text')
623
-
624
- $input.element.value = 'three'
625
- await $input.trigger('input')
626
- await $input.trigger('change')
627
- expect(wrapper.vm.newTag).toEqual('three')
628
- expect(wrapper.vm.tags).toEqual(['one', 'two'])
629
- expect(wrapper.vm.tagsState.invalid).toContain('three')
630
-
631
- const $tags = wrapper.findAll('.badge')
632
- expect($tags.length).toBe(2)
633
- await $tags
634
- .at(1)
635
- .find('button')
636
- .trigger('click')
637
- expect(wrapper.vm.tags).toEqual(['one'])
638
- expect(wrapper.vm.removedTags).toContain('two')
639
-
640
- await $input.trigger('reset')
641
- await waitNT(wrapper.vm)
642
-
643
- expect(wrapper.vm.newTag).toEqual('')
644
- expect(wrapper.vm.tags).toEqual([])
645
- expect(wrapper.vm.removedTags).toEqual([])
646
- expect(wrapper.vm.tagsState.invalid).toEqual([])
647
-
648
- wrapper.destroy()
649
- })
650
-
651
- it('form native reset event triggers reset', async () => {
652
- const App = {
653
- render(h) {
654
- return h('form', [
655
- h(BFormTags, {
656
- props: {
657
- value: ['one', 'two'],
658
- addOnChange: true,
659
- tagValidator: tag => tag.length < 4
660
- }
661
- })
662
- ])
663
- }
664
- }
665
- const wrapper = mount(App, {
666
- attachTo: document.body
667
- })
668
-
669
- expect(wrapper.element.tagName).toBe('FORM')
670
-
671
- const formTags = wrapper.findComponent(BFormTags)
672
- expect(formTags.exists()).toBe(true)
673
- expect(formTags.element.tagName).toBe('DIV')
674
- expect(formTags.vm.tags).toEqual(['one', 'two'])
675
- expect(formTags.vm.newTag).toEqual('')
676
-
677
- const $input = formTags.find('input')
678
- expect($input.exists()).toBe(true)
679
- expect($input.element.value).toBe('')
680
- expect($input.element.type).toBe('text')
681
-
682
- $input.element.value = 'three'
683
- await $input.trigger('input')
684
- await $input.trigger('change')
685
- expect(formTags.vm.newTag).toEqual('three')
686
- expect(formTags.vm.tags).toEqual(['one', 'two'])
687
- expect(formTags.vm.tagsState.invalid).toContain('three')
688
-
689
- const $tags = formTags.findAll('.badge')
690
- expect($tags.length).toBe(2)
691
- await $tags
692
- .at(1)
693
- .find('button')
694
- .trigger('click')
695
- expect(formTags.vm.tags).toEqual(['one'])
696
- expect(formTags.vm.removedTags).toContain('two')
697
-
698
- // Trigger form's native reset event
699
- wrapper.find('form').trigger('reset')
700
- await waitNT(formTags.vm)
701
-
702
- expect(formTags.vm.newTag).toEqual('')
703
- expect(formTags.vm.tags).toEqual([])
704
- expect(formTags.vm.removedTags).toEqual([])
705
- expect(formTags.vm.tagsState.invalid).toEqual([])
706
-
707
- wrapper.destroy()
708
- })
709
-
710
- it('focuses input when wrapper div clicked', async () => {
711
- const wrapper = mount(BFormTags, {
712
- attachTo: document.body,
713
- propsData: {
714
- value: ['apple', 'orange']
715
- }
716
- })
717
-
718
- await waitNT(wrapper.vm)
719
- await waitRAF()
720
-
721
- expect(wrapper.element.tagName).toBe('DIV')
722
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
723
- expect(wrapper.vm.newTag).toEqual('')
724
- expect(wrapper.classes()).not.toContain('focus')
725
-
726
- const $input = wrapper.find('input')
727
- expect($input.exists()).toBe(true)
728
- expect($input.element.value).toBe('')
729
- expect(document.activeElement).not.toBe($input.element)
730
-
731
- await wrapper.trigger('click')
732
- expect(document.activeElement).toBe($input.element)
733
- await $input.trigger('focusin')
734
- expect(wrapper.classes()).toContain('focus')
735
-
736
- $input.element.blur()
737
- await waitNT(wrapper.vm)
738
- await waitRAF()
739
- expect(document.activeElement).not.toBe($input.element)
740
- await $input.trigger('focusout')
741
- expect(wrapper.classes()).not.toContain('focus')
742
-
743
- wrapper.vm.focus()
744
- await waitNT(wrapper.vm)
745
- await waitRAF()
746
- expect(document.activeElement).toBe($input.element)
747
- await $input.trigger('focusin')
748
- expect(wrapper.classes()).toContain('focus')
749
-
750
- wrapper.vm.blur()
751
- await waitNT(wrapper.vm)
752
- await waitRAF()
753
- expect(document.activeElement).not.toBe($input.element)
754
- await $input.trigger('focusout')
755
- expect(wrapper.classes()).not.toContain('focus')
756
-
757
- wrapper.destroy()
758
- })
759
-
760
- it('autofocus works', async () => {
761
- const wrapper = mount(BFormTags, {
762
- attachTo: document.body,
763
- propsData: {
764
- autofocus: true,
765
- value: ['apple', 'orange']
766
- }
767
- })
768
-
769
- await waitNT(wrapper.vm)
770
- await waitRAF()
771
-
772
- expect(wrapper.element.tagName).toBe('DIV')
773
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
774
- expect(wrapper.vm.newTag).toEqual('')
775
- expect(wrapper.classes()).toContain('focus')
776
-
777
- const $input = wrapper.find('input')
778
- expect($input.exists()).toBe(true)
779
- expect($input.element.value).toBe('')
780
- expect(document.activeElement).toBe($input.element)
781
-
782
- wrapper.vm.blur()
783
- await waitNT(wrapper.vm)
784
- await waitRAF()
785
- expect(wrapper.classes()).not.toContain('focus')
786
- expect(document.activeElement).not.toBe($input.element)
787
-
788
- wrapper.destroy()
789
- })
790
-
791
- it('`limit` prop works', async () => {
792
- const wrapper = mount(BFormTags, {
793
- propsData: {
794
- value: ['apple', 'orange'],
795
- limit: 3
796
- }
797
- })
798
-
799
- expect(wrapper.element.tagName).toBe('DIV')
800
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
801
- expect(wrapper.vm.newTag).toEqual('')
802
-
803
- const $input = wrapper.find('input')
804
- expect($input.exists()).toBe(true)
805
- expect($input.element.value).toBe('')
806
-
807
- const $button = wrapper.find('button.b-form-tags-button')
808
- expect($button.exists()).toBe(true)
809
- expect($button.classes()).toContain('invisible')
810
-
811
- expect(wrapper.find('small.form-text').exists()).toBe(false)
812
-
813
- // Add new tag
814
- $input.element.value = 'pear'
815
- await $input.trigger('input')
816
- expect(wrapper.vm.newTag).toEqual('pear')
817
- expect(wrapper.vm.tags).toEqual(['apple', 'orange'])
818
- expect($button.classes()).not.toContain('invisible')
819
-
820
- await $button.trigger('click')
821
- expect($button.classes()).toContain('invisible')
822
- expect(wrapper.vm.newTag).toEqual('')
823
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
824
-
825
- const $feedback = wrapper.find('small.form-text')
826
- expect($feedback.exists()).toBe(true)
827
- expect($feedback.text()).toContain('Tag limit reached')
828
-
829
- // Attempt to add new tag
830
- $input.element.value = 'lemon'
831
- await $input.trigger('input')
832
- expect(wrapper.vm.newTag).toEqual('lemon')
833
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
834
- expect($button.classes()).not.toContain('invisible')
835
-
836
- await $button.trigger('click')
837
- expect($button.classes()).not.toContain('invisible')
838
- expect(wrapper.vm.newTag).toEqual('lemon')
839
- expect(wrapper.vm.tags).toEqual(['apple', 'orange', 'pear'])
840
- expect($feedback.exists()).toBe(true)
841
- expect($feedback.text()).toContain('Tag limit reached')
842
-
843
- wrapper.destroy()
844
- })
845
-
846
- it('emits focus and blur events when wrapper gains/loses focus', async () => {
847
- const onFocus = jest.fn()
848
- const onBlur = jest.fn()
849
- const wrapper = mount(BFormTags, {
850
- attachTo: document.body,
851
- propsData: {
852
- value: ['apple', 'orange']
853
- },
854
- listeners: {
855
- focus: onFocus,
856
- blur: onBlur
857
- }
858
- })
859
-
860
- expect(onFocus).not.toHaveBeenCalled()
861
- expect(onBlur).not.toHaveBeenCalled()
862
-
863
- const $input = wrapper.find('input')
864
- expect(typeof wrapper.vm.$listeners.focus).toBe('function')
865
-
866
- $input.trigger('focus')
867
- $input.trigger('focusin')
868
-
869
- await waitNT(wrapper.vm)
870
- await waitRAF()
871
-
872
- expect(onFocus).toHaveBeenCalled()
873
- expect(onBlur).not.toHaveBeenCalled()
874
-
875
- $input.trigger('blur')
876
- $input.trigger('focusout')
877
- await waitNT(wrapper.vm)
878
- await waitRAF()
879
-
880
- expect(onBlur).toHaveBeenCalled()
881
-
882
- wrapper.destroy()
883
- })
884
-
885
- it('emits focusin and focusout when internal focus changes', async () => {
886
- const onFocusIn = jest.fn()
887
- const onFocusOut = jest.fn()
888
- const wrapper = mount(BFormTags, {
889
- propsData: {
890
- value: ['apple', 'orange']
891
- },
892
- listeners: {
893
- focusin: onFocusIn,
894
- focusout: onFocusOut
895
- }
896
- })
897
-
898
- expect(onFocusIn).not.toHaveBeenCalled()
899
- expect(onFocusOut).not.toHaveBeenCalled()
900
-
901
- const $input = wrapper.find('input')
902
- const $tag = wrapper.find('.b-form-tag')
903
-
904
- $input.trigger('focusin')
905
-
906
- await waitNT(wrapper.vm)
907
- await waitRAF()
908
-
909
- expect(onFocusIn).toHaveBeenCalledTimes(1)
910
- expect(onFocusOut).not.toHaveBeenCalled()
911
-
912
- $tag.trigger('focusin')
913
- $input.trigger('focusout')
914
- await waitNT(wrapper.vm)
915
- await waitRAF()
916
-
917
- expect(onFocusIn).toHaveBeenCalledTimes(2)
918
- expect(onFocusOut).toHaveBeenCalledTimes(1)
919
- })
920
- })