@gitlab/ui 92.1.1 → 92.3.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 (449) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/bin/migrate_custom_utils_to_tw.bundled.mjs +11 -3
  3. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.js +29 -1
  4. package/dist/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +18 -1
  5. package/dist/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.js +4 -6
  6. package/dist/components/experimental/duo/chat/constants.js +2 -1
  7. package/dist/index.css +4 -2
  8. package/dist/index.css.map +1 -1
  9. package/dist/tailwind.css +1 -1
  10. package/dist/tailwind.css.map +1 -1
  11. package/dist/vendor/bootstrap-vue/src/components/form/index.js +0 -4
  12. package/dist/vendor/bootstrap-vue/src/components/index.js +0 -48
  13. package/dist/vendor/bootstrap-vue/src/components/layout/index.js +0 -6
  14. package/dist/vendor/bootstrap-vue/src/components/nav/index.js +0 -6
  15. package/dist/vendor/bootstrap-vue/src/components/navbar/index.js +1 -8
  16. package/dist/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +2 -6
  17. package/dist/vendor/bootstrap-vue/src/constants/classes.js +1 -2
  18. package/dist/vendor/bootstrap-vue/src/constants/components.js +1 -51
  19. package/dist/vendor/bootstrap-vue/src/constants/events.js +1 -12
  20. package/dist/vendor/bootstrap-vue/src/constants/key-codes.js +1 -5
  21. package/dist/vendor/bootstrap-vue/src/constants/props.js +1 -4
  22. package/dist/vendor/bootstrap-vue/src/constants/regex.js +1 -20
  23. package/dist/vendor/bootstrap-vue/src/constants/slots.js +1 -33
  24. package/dist/vendor/bootstrap-vue/src/directives/toggle/toggle.js +1 -1
  25. package/dist/vendor/bootstrap-vue/src/index.js +0 -74
  26. package/dist/vendor/bootstrap-vue/src/utils/array.js +1 -3
  27. package/dist/vendor/bootstrap-vue/src/utils/inspect.js +1 -3
  28. package/dist/vendor/bootstrap-vue/src/utils/math.js +1 -3
  29. package/dist/vendor/bootstrap-vue/src/utils/object.js +1 -6
  30. package/dist/vendor/bootstrap-vue/src/utils/props.js +2 -8
  31. package/dist/vendor/bootstrap-vue/src/utils/string.js +1 -10
  32. package/package.json +1 -1
  33. package/src/components/base/accordion/accordion_item.scss +3 -3
  34. package/src/components/base/alert/alert.scss +3 -3
  35. package/src/components/base/avatar_labeled/avatar_labeled.scss +2 -2
  36. package/src/components/base/avatars_inline/avatars_inline.scss +1 -1
  37. package/src/components/base/badge/badge.scss +2 -2
  38. package/src/components/base/banner/banner.scss +2 -2
  39. package/src/components/base/breadcrumb/breadcrumb.scss +3 -3
  40. package/src/components/base/broadcast_message/broadcast_message.scss +3 -3
  41. package/src/components/base/button/button.scss +26 -16
  42. package/src/components/base/card/card.scss +1 -1
  43. package/src/components/base/datepicker/datepicker.scss +10 -10
  44. package/src/components/base/drawer/drawer.scss +5 -5
  45. package/src/components/base/dropdown/dropdown.scss +28 -28
  46. package/src/components/base/dropdown/dropdown_divider.scss +3 -3
  47. package/src/components/base/dropdown/dropdown_item.scss +9 -9
  48. package/src/components/base/dropdown/dropdown_section_header.scss +2 -2
  49. package/src/components/base/dropdown/dropdown_text.scss +1 -1
  50. package/src/components/base/filtered_search/filtered_search.scss +7 -7
  51. package/src/components/base/filtered_search/filtered_search_suggestion.scss +1 -1
  52. package/src/components/base/filtered_search/filtered_search_suggestion_list.scss +3 -3
  53. package/src/components/base/filtered_search/filtered_search_term.scss +2 -2
  54. package/src/components/base/filtered_search/filtered_search_token.scss +4 -4
  55. package/src/components/base/filtered_search/filtered_search_token_segment.scss +2 -2
  56. package/src/components/base/form/form_checkbox/form_checkbox.scss +10 -10
  57. package/src/components/base/form/form_group/form_group.scss +5 -5
  58. package/src/components/base/form/form_input/form_input.scss +2 -2
  59. package/src/components/base/form/form_select/form_select.scss +2 -2
  60. package/src/components/base/keyset_pagination/keyset_pagination.scss +1 -1
  61. package/src/components/base/label/label.scss +1 -1
  62. package/src/components/base/loading_icon/loading_icon.scss +1 -1
  63. package/src/components/base/markdown/markdown.scss +33 -33
  64. package/src/components/base/modal/modal.scss +11 -11
  65. package/src/components/base/new_dropdowns/dropdown.scss +14 -14
  66. package/src/components/base/new_dropdowns/dropdown_item.scss +9 -9
  67. package/src/components/base/new_dropdowns/listbox/listbox.scss +1 -1
  68. package/src/components/base/pagination/pagination.scss +3 -3
  69. package/src/components/base/path/path.scss +5 -5
  70. package/src/components/base/popover/popover.scss +5 -5
  71. package/src/components/base/search_box_by_click/search_box_by_click.scss +2 -2
  72. package/src/components/base/search_box_by_type/search_box_by_type.scss +4 -4
  73. package/src/components/base/table/table.scss +4 -4
  74. package/src/components/base/tabs/tabs/tabs.scss +10 -10
  75. package/src/components/base/toast/toast.scss +7 -7
  76. package/src/components/base/toggle/toggle.scss +6 -6
  77. package/src/components/base/token/token.scss +5 -5
  78. package/src/components/base/tooltip/tooltip.scss +3 -3
  79. package/src/components/charts/legend/legend.scss +4 -4
  80. package/src/components/charts/series_label/series_label.scss +1 -1
  81. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.vue +62 -30
  82. package/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +29 -10
  83. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.scss +1 -1
  84. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.vue +11 -6
  85. package/src/components/experimental/duo/chat/constants.js +2 -0
  86. package/src/components/experimental/duo/chat/duo_chat.scss +4 -4
  87. package/src/components/shared_components/charts/tooltip_default_format.scss +1 -1
  88. package/src/scss/bootstrap_vue.scss +0 -18
  89. package/src/scss/typescale/_index.scss +9 -9
  90. package/src/vendor/bootstrap-vue/nuxt/index.js +0 -8
  91. package/src/vendor/bootstrap-vue/src/_utilities.scss +0 -9
  92. package/src/vendor/bootstrap-vue/src/_variables.scss +0 -52
  93. package/src/vendor/bootstrap-vue/src/components/form/index.d.ts +0 -3
  94. package/src/vendor/bootstrap-vue/src/components/form/index.js +1 -4
  95. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -12
  96. package/src/vendor/bootstrap-vue/src/components/index.d.ts +0 -24
  97. package/src/vendor/bootstrap-vue/src/components/index.js +0 -48
  98. package/src/vendor/bootstrap-vue/src/components/index.scss +0 -15
  99. package/src/vendor/bootstrap-vue/src/components/layout/index.d.ts +0 -6
  100. package/src/vendor/bootstrap-vue/src/components/layout/index.js +1 -5
  101. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -67
  102. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1
  103. package/src/vendor/bootstrap-vue/src/components/nav/index.d.ts +0 -6
  104. package/src/vendor/bootstrap-vue/src/components/nav/index.js +1 -5
  105. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -45
  106. package/src/vendor/bootstrap-vue/src/components/navbar/README.md +0 -5
  107. package/src/vendor/bootstrap-vue/src/components/navbar/index.d.ts +1 -7
  108. package/src/vendor/bootstrap-vue/src/components/navbar/index.js +2 -7
  109. package/src/vendor/bootstrap-vue/src/components/navbar/package.json +0 -75
  110. package/src/vendor/bootstrap-vue/src/components/table/README.md +1 -2
  111. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +2 -2
  112. package/src/vendor/bootstrap-vue/src/components/toast/README.md +1 -3
  113. package/src/vendor/bootstrap-vue/src/components/tooltip/helpers/bv-tooltip.js +2 -6
  114. package/src/vendor/bootstrap-vue/src/constants/classes.js +0 -1
  115. package/src/vendor/bootstrap-vue/src/constants/components.js +0 -50
  116. package/src/vendor/bootstrap-vue/src/constants/events.js +0 -11
  117. package/src/vendor/bootstrap-vue/src/constants/key-codes.js +0 -4
  118. package/src/vendor/bootstrap-vue/src/constants/props.js +0 -3
  119. package/src/vendor/bootstrap-vue/src/constants/regex.js +0 -19
  120. package/src/vendor/bootstrap-vue/src/constants/slots.js +0 -32
  121. package/src/vendor/bootstrap-vue/src/directives/toggle/README.md +5 -23
  122. package/src/vendor/bootstrap-vue/src/directives/toggle/package.json +1 -1
  123. package/src/vendor/bootstrap-vue/src/directives/toggle/toggle.js +1 -1
  124. package/src/vendor/bootstrap-vue/src/index.js +0 -122
  125. package/src/vendor/bootstrap-vue/src/index.scss +0 -3
  126. package/src/vendor/bootstrap-vue/src/utils/array.js +0 -5
  127. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +15 -15
  128. package/src/vendor/bootstrap-vue/src/utils/inspect.js +0 -4
  129. package/src/vendor/bootstrap-vue/src/utils/math.js +0 -4
  130. package/src/vendor/bootstrap-vue/src/utils/object.js +0 -5
  131. package/src/vendor/bootstrap-vue/src/utils/props.js +1 -7
  132. package/src/vendor/bootstrap-vue/src/utils/string.js +0 -9
  133. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +1 -20
  134. package/translations.js +3 -0
  135. package/dist/vendor/bootstrap-vue/src/components/alert/alert.js +0 -179
  136. package/dist/vendor/bootstrap-vue/src/components/alert/index.js +0 -11
  137. package/dist/vendor/bootstrap-vue/src/components/aspect/aspect.js +0 -67
  138. package/dist/vendor/bootstrap-vue/src/components/aspect/index.js +0 -11
  139. package/dist/vendor/bootstrap-vue/src/components/avatar/avatar-group.js +0 -67
  140. package/dist/vendor/bootstrap-vue/src/components/avatar/avatar.js +0 -266
  141. package/dist/vendor/bootstrap-vue/src/components/avatar/index.js +0 -14
  142. package/dist/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.js +0 -112
  143. package/dist/vendor/bootstrap-vue/src/components/button-toolbar/index.js +0 -12
  144. package/dist/vendor/bootstrap-vue/src/components/calendar/calendar.js +0 -1010
  145. package/dist/vendor/bootstrap-vue/src/components/calendar/index.js +0 -11
  146. package/dist/vendor/bootstrap-vue/src/components/card/card-body.js +0 -63
  147. package/dist/vendor/bootstrap-vue/src/components/card/card-footer.js +0 -48
  148. package/dist/vendor/bootstrap-vue/src/components/card/card-group.js +0 -33
  149. package/dist/vendor/bootstrap-vue/src/components/card/card-header.js +0 -48
  150. package/dist/vendor/bootstrap-vue/src/components/card/card-img-lazy.js +0 -46
  151. package/dist/vendor/bootstrap-vue/src/components/card/card-img.js +0 -58
  152. package/dist/vendor/bootstrap-vue/src/components/card/card-sub-title.js +0 -35
  153. package/dist/vendor/bootstrap-vue/src/components/card/card-text.js +0 -31
  154. package/dist/vendor/bootstrap-vue/src/components/card/card-title.js +0 -33
  155. package/dist/vendor/bootstrap-vue/src/components/card/card.js +0 -123
  156. package/dist/vendor/bootstrap-vue/src/components/card/index.js +0 -38
  157. package/dist/vendor/bootstrap-vue/src/components/embed/embed.js +0 -50
  158. package/dist/vendor/bootstrap-vue/src/components/embed/index.js +0 -11
  159. package/dist/vendor/bootstrap-vue/src/components/form/form-datalist.js +0 -52
  160. package/dist/vendor/bootstrap-vue/src/components/form-btn-label-control/bv-form-btn-label-control.js +0 -261
  161. package/dist/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.js +0 -310
  162. package/dist/vendor/bootstrap-vue/src/components/form-datepicker/index.js +0 -12
  163. package/dist/vendor/bootstrap-vue/src/components/form-file/form-file.js +0 -561
  164. package/dist/vendor/bootstrap-vue/src/components/form-file/index.js +0 -12
  165. package/dist/vendor/bootstrap-vue/src/components/form-rating/form-rating.js +0 -402
  166. package/dist/vendor/bootstrap-vue/src/components/form-rating/index.js +0 -12
  167. package/dist/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.js +0 -555
  168. package/dist/vendor/bootstrap-vue/src/components/form-spinbutton/index.js +0 -12
  169. package/dist/vendor/bootstrap-vue/src/components/form-tags/form-tag.js +0 -97
  170. package/dist/vendor/bootstrap-vue/src/components/form-tags/form-tags.js +0 -806
  171. package/dist/vendor/bootstrap-vue/src/components/form-tags/index.js +0 -16
  172. package/dist/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.js +0 -281
  173. package/dist/vendor/bootstrap-vue/src/components/form-timepicker/index.js +0 -12
  174. package/dist/vendor/bootstrap-vue/src/components/image/img-lazy.js +0 -157
  175. package/dist/vendor/bootstrap-vue/src/components/image/img.js +0 -124
  176. package/dist/vendor/bootstrap-vue/src/components/image/index.js +0 -14
  177. package/dist/vendor/bootstrap-vue/src/components/jumbotron/index.js +0 -11
  178. package/dist/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.js +0 -98
  179. package/dist/vendor/bootstrap-vue/src/components/layout/container.js +0 -41
  180. package/dist/vendor/bootstrap-vue/src/components/layout/row.js +0 -113
  181. package/dist/vendor/bootstrap-vue/src/components/list-group/index.js +0 -14
  182. package/dist/vendor/bootstrap-vue/src/components/list-group/list-group-item.js +0 -78
  183. package/dist/vendor/bootstrap-vue/src/components/list-group/list-group.js +0 -42
  184. package/dist/vendor/bootstrap-vue/src/components/media/index.js +0 -17
  185. package/dist/vendor/bootstrap-vue/src/components/media/media-aside.js +0 -41
  186. package/dist/vendor/bootstrap-vue/src/components/media/media-body.js +0 -31
  187. package/dist/vendor/bootstrap-vue/src/components/media/media.js +0 -61
  188. package/dist/vendor/bootstrap-vue/src/components/nav/nav-form.js +0 -45
  189. package/dist/vendor/bootstrap-vue/src/components/nav/nav-text.js +0 -26
  190. package/dist/vendor/bootstrap-vue/src/components/navbar/navbar-nav.js +0 -46
  191. package/dist/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.js +0 -89
  192. package/dist/vendor/bootstrap-vue/src/components/overlay/index.js +0 -11
  193. package/dist/vendor/bootstrap-vue/src/components/overlay/overlay.js +0 -163
  194. package/dist/vendor/bootstrap-vue/src/components/pagination/index.js +0 -11
  195. package/dist/vendor/bootstrap-vue/src/components/pagination/pagination.js +0 -135
  196. package/dist/vendor/bootstrap-vue/src/components/pagination-nav/index.js +0 -11
  197. package/dist/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.js +0 -299
  198. package/dist/vendor/bootstrap-vue/src/components/sidebar/index.js +0 -15
  199. package/dist/vendor/bootstrap-vue/src/components/sidebar/sidebar.js +0 -432
  200. package/dist/vendor/bootstrap-vue/src/components/skeleton/index.js +0 -23
  201. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.js +0 -47
  202. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.js +0 -60
  203. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.js +0 -64
  204. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.js +0 -46
  205. package/dist/vendor/bootstrap-vue/src/components/skeleton/skeleton.js +0 -49
  206. package/dist/vendor/bootstrap-vue/src/components/spinner/index.js +0 -11
  207. package/dist/vendor/bootstrap-vue/src/components/spinner/spinner.js +0 -55
  208. package/dist/vendor/bootstrap-vue/src/components/time/index.js +0 -11
  209. package/dist/vendor/bootstrap-vue/src/components/time/time.js +0 -600
  210. package/dist/vendor/bootstrap-vue/src/constants/date.js +0 -8
  211. package/dist/vendor/bootstrap-vue/src/mixins/card.js +0 -22
  212. package/dist/vendor/bootstrap-vue/src/mixins/pagination.js +0 -598
  213. package/dist/vendor/bootstrap-vue/src/utils/date.js +0 -135
  214. package/src/vendor/bootstrap-vue/src/_custom-controls.scss +0 -30
  215. package/src/vendor/bootstrap-vue/src/components/alert/README.md +0 -280
  216. package/src/vendor/bootstrap-vue/src/components/alert/alert.js +0 -185
  217. package/src/vendor/bootstrap-vue/src/components/alert/alert.spec.js +0 -442
  218. package/src/vendor/bootstrap-vue/src/components/alert/index.d.ts +0 -13
  219. package/src/vendor/bootstrap-vue/src/components/alert/index.js +0 -8
  220. package/src/vendor/bootstrap-vue/src/components/alert/package.json +0 -72
  221. package/src/vendor/bootstrap-vue/src/components/aspect/README.md +0 -65
  222. package/src/vendor/bootstrap-vue/src/components/aspect/aspect.js +0 -65
  223. package/src/vendor/bootstrap-vue/src/components/aspect/aspect.spec.js +0 -121
  224. package/src/vendor/bootstrap-vue/src/components/aspect/index.d.ts +0 -11
  225. package/src/vendor/bootstrap-vue/src/components/aspect/index.js +0 -8
  226. package/src/vendor/bootstrap-vue/src/components/aspect/package.json +0 -26
  227. package/src/vendor/bootstrap-vue/src/components/avatar/README.md +0 -567
  228. package/src/vendor/bootstrap-vue/src/components/avatar/_avatar.scss +0 -148
  229. package/src/vendor/bootstrap-vue/src/components/avatar/avatar-group.js +0 -75
  230. package/src/vendor/bootstrap-vue/src/components/avatar/avatar-group.spec.js +0 -74
  231. package/src/vendor/bootstrap-vue/src/components/avatar/avatar.js +0 -228
  232. package/src/vendor/bootstrap-vue/src/components/avatar/avatar.spec.js +0 -355
  233. package/src/vendor/bootstrap-vue/src/components/avatar/index.d.ts +0 -14
  234. package/src/vendor/bootstrap-vue/src/components/avatar/index.js +0 -9
  235. package/src/vendor/bootstrap-vue/src/components/avatar/index.scss +0 -1
  236. package/src/vendor/bootstrap-vue/src/components/avatar/package.json +0 -149
  237. package/src/vendor/bootstrap-vue/src/components/button-toolbar/README.md +0 -109
  238. package/src/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.js +0 -117
  239. package/src/vendor/bootstrap-vue/src/components/button-toolbar/button-toolbar.spec.js +0 -185
  240. package/src/vendor/bootstrap-vue/src/components/button-toolbar/index.d.ts +0 -11
  241. package/src/vendor/bootstrap-vue/src/components/button-toolbar/index.js +0 -11
  242. package/src/vendor/bootstrap-vue/src/components/button-toolbar/package.json +0 -32
  243. package/src/vendor/bootstrap-vue/src/components/calendar/README.md +0 -735
  244. package/src/vendor/bootstrap-vue/src/components/calendar/_calendar.scss +0 -78
  245. package/src/vendor/bootstrap-vue/src/components/calendar/calendar.js +0 -1146
  246. package/src/vendor/bootstrap-vue/src/components/calendar/calendar.spec.js +0 -466
  247. package/src/vendor/bootstrap-vue/src/components/calendar/index.d.ts +0 -28
  248. package/src/vendor/bootstrap-vue/src/components/calendar/index.js +0 -8
  249. package/src/vendor/bootstrap-vue/src/components/calendar/index.scss +0 -1
  250. package/src/vendor/bootstrap-vue/src/components/calendar/package.json +0 -317
  251. package/src/vendor/bootstrap-vue/src/components/card/README.md +0 -729
  252. package/src/vendor/bootstrap-vue/src/components/card/_card-img.scss +0 -7
  253. package/src/vendor/bootstrap-vue/src/components/card/card-body.js +0 -69
  254. package/src/vendor/bootstrap-vue/src/components/card/card-body.spec.js +0 -142
  255. package/src/vendor/bootstrap-vue/src/components/card/card-footer.js +0 -48
  256. package/src/vendor/bootstrap-vue/src/components/card/card-footer.spec.js +0 -98
  257. package/src/vendor/bootstrap-vue/src/components/card/card-group.js +0 -33
  258. package/src/vendor/bootstrap-vue/src/components/card/card-group.spec.js +0 -75
  259. package/src/vendor/bootstrap-vue/src/components/card/card-header.js +0 -48
  260. package/src/vendor/bootstrap-vue/src/components/card/card-header.spec.js +0 -98
  261. package/src/vendor/bootstrap-vue/src/components/card/card-img-lazy.js +0 -47
  262. package/src/vendor/bootstrap-vue/src/components/card/card-img-lazy.spec.js +0 -204
  263. package/src/vendor/bootstrap-vue/src/components/card/card-img.js +0 -50
  264. package/src/vendor/bootstrap-vue/src/components/card/card-img.spec.js +0 -208
  265. package/src/vendor/bootstrap-vue/src/components/card/card-sub-title.js +0 -35
  266. package/src/vendor/bootstrap-vue/src/components/card/card-sub-title.spec.js +0 -60
  267. package/src/vendor/bootstrap-vue/src/components/card/card-text.js +0 -25
  268. package/src/vendor/bootstrap-vue/src/components/card/card-text.spec.js +0 -48
  269. package/src/vendor/bootstrap-vue/src/components/card/card-title.js +0 -33
  270. package/src/vendor/bootstrap-vue/src/components/card/card-title.spec.js +0 -45
  271. package/src/vendor/bootstrap-vue/src/components/card/card.js +0 -140
  272. package/src/vendor/bootstrap-vue/src/components/card/card.spec.js +0 -296
  273. package/src/vendor/bootstrap-vue/src/components/card/index.d.ts +0 -38
  274. package/src/vendor/bootstrap-vue/src/components/card/index.js +0 -40
  275. package/src/vendor/bootstrap-vue/src/components/card/index.scss +0 -1
  276. package/src/vendor/bootstrap-vue/src/components/card/package.json +0 -262
  277. package/src/vendor/bootstrap-vue/src/components/embed/README.md +0 -63
  278. package/src/vendor/bootstrap-vue/src/components/embed/embed.js +0 -51
  279. package/src/vendor/bootstrap-vue/src/components/embed/embed.spec.js +0 -110
  280. package/src/vendor/bootstrap-vue/src/components/embed/index.d.ts +0 -11
  281. package/src/vendor/bootstrap-vue/src/components/embed/index.js +0 -8
  282. package/src/vendor/bootstrap-vue/src/components/embed/package.json +0 -29
  283. package/src/vendor/bootstrap-vue/src/components/form/form-datalist.js +0 -42
  284. package/src/vendor/bootstrap-vue/src/components/form/form-datalist.spec.js +0 -57
  285. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/_form-btn-label-control.scss +0 -125
  286. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/bv-form-btn-label-control.js +0 -278
  287. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/index.scss +0 -1
  288. package/src/vendor/bootstrap-vue/src/components/form-btn-label-control/package.json +0 -5
  289. package/src/vendor/bootstrap-vue/src/components/form-datepicker/README.md +0 -694
  290. package/src/vendor/bootstrap-vue/src/components/form-datepicker/_form-datepicker.scss +0 -1
  291. package/src/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.js +0 -342
  292. package/src/vendor/bootstrap-vue/src/components/form-datepicker/form-datepicker.spec.js +0 -562
  293. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.d.ts +0 -12
  294. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.js +0 -11
  295. package/src/vendor/bootstrap-vue/src/components/form-datepicker/index.scss +0 -1
  296. package/src/vendor/bootstrap-vue/src/components/form-datepicker/package.json +0 -420
  297. package/src/vendor/bootstrap-vue/src/components/form-file/README.md +0 -357
  298. package/src/vendor/bootstrap-vue/src/components/form-file/_form-file.scss +0 -61
  299. package/src/vendor/bootstrap-vue/src/components/form-file/form-file.js +0 -575
  300. package/src/vendor/bootstrap-vue/src/components/form-file/form-file.spec.js +0 -885
  301. package/src/vendor/bootstrap-vue/src/components/form-file/index.d.ts +0 -13
  302. package/src/vendor/bootstrap-vue/src/components/form-file/index.js +0 -11
  303. package/src/vendor/bootstrap-vue/src/components/form-file/index.scss +0 -1
  304. package/src/vendor/bootstrap-vue/src/components/form-file/package.json +0 -131
  305. package/src/vendor/bootstrap-vue/src/components/form-rating/README.md +0 -526
  306. package/src/vendor/bootstrap-vue/src/components/form-rating/_form-rating.scss +0 -57
  307. package/src/vendor/bootstrap-vue/src/components/form-rating/form-rating.js +0 -411
  308. package/src/vendor/bootstrap-vue/src/components/form-rating/form-rating.spec.js +0 -544
  309. package/src/vendor/bootstrap-vue/src/components/form-rating/index.d.ts +0 -14
  310. package/src/vendor/bootstrap-vue/src/components/form-rating/index.js +0 -8
  311. package/src/vendor/bootstrap-vue/src/components/form-rating/index.scss +0 -1
  312. package/src/vendor/bootstrap-vue/src/components/form-rating/package.json +0 -166
  313. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/README.md +0 -411
  314. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/_spinbutton.scss +0 -76
  315. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.js +0 -572
  316. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/form-spinbutton.spec.js +0 -731
  317. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.d.ts +0 -12
  318. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.js +0 -11
  319. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/index.scss +0 -1
  320. package/src/vendor/bootstrap-vue/src/components/form-spinbutton/package.json +0 -150
  321. package/src/vendor/bootstrap-vue/src/components/form-tags/README.md +0 -880
  322. package/src/vendor/bootstrap-vue/src/components/form-tags/_form-tags.scss +0 -70
  323. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tag.js +0 -94
  324. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tag.spec.js +0 -166
  325. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tags.js +0 -891
  326. package/src/vendor/bootstrap-vue/src/components/form-tags/form-tags.spec.js +0 -920
  327. package/src/vendor/bootstrap-vue/src/components/form-tags/index.d.ts +0 -16
  328. package/src/vendor/bootstrap-vue/src/components/form-tags/index.js +0 -14
  329. package/src/vendor/bootstrap-vue/src/components/form-tags/index.scss +0 -1
  330. package/src/vendor/bootstrap-vue/src/components/form-tags/package.json +0 -440
  331. package/src/vendor/bootstrap-vue/src/components/form-timepicker/README.md +0 -450
  332. package/src/vendor/bootstrap-vue/src/components/form-timepicker/_form-timepicker.scss +0 -1
  333. package/src/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.js +0 -308
  334. package/src/vendor/bootstrap-vue/src/components/form-timepicker/form-timepicker.spec.js +0 -440
  335. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.d.ts +0 -12
  336. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.js +0 -11
  337. package/src/vendor/bootstrap-vue/src/components/form-timepicker/index.scss +0 -1
  338. package/src/vendor/bootstrap-vue/src/components/form-timepicker/package.json +0 -255
  339. package/src/vendor/bootstrap-vue/src/components/image/README.md +0 -322
  340. package/src/vendor/bootstrap-vue/src/components/image/img-lazy.js +0 -161
  341. package/src/vendor/bootstrap-vue/src/components/image/img-lazy.spec.js +0 -96
  342. package/src/vendor/bootstrap-vue/src/components/image/img.js +0 -139
  343. package/src/vendor/bootstrap-vue/src/components/image/img.spec.js +0 -255
  344. package/src/vendor/bootstrap-vue/src/components/image/index.d.ts +0 -14
  345. package/src/vendor/bootstrap-vue/src/components/image/index.js +0 -12
  346. package/src/vendor/bootstrap-vue/src/components/image/package.json +0 -152
  347. package/src/vendor/bootstrap-vue/src/components/jumbotron/README.md +0 -109
  348. package/src/vendor/bootstrap-vue/src/components/jumbotron/index.d.ts +0 -11
  349. package/src/vendor/bootstrap-vue/src/components/jumbotron/index.js +0 -8
  350. package/src/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.js +0 -103
  351. package/src/vendor/bootstrap-vue/src/components/jumbotron/jumbotron.spec.js +0 -254
  352. package/src/vendor/bootstrap-vue/src/components/jumbotron/package.json +0 -66
  353. package/src/vendor/bootstrap-vue/src/components/layout/container.js +0 -40
  354. package/src/vendor/bootstrap-vue/src/components/layout/container.spec.js +0 -75
  355. package/src/vendor/bootstrap-vue/src/components/layout/row.js +0 -111
  356. package/src/vendor/bootstrap-vue/src/components/layout/row.spec.js +0 -138
  357. package/src/vendor/bootstrap-vue/src/components/list-group/README.md +0 -291
  358. package/src/vendor/bootstrap-vue/src/components/list-group/index.d.ts +0 -14
  359. package/src/vendor/bootstrap-vue/src/components/list-group/index.js +0 -12
  360. package/src/vendor/bootstrap-vue/src/components/list-group/list-group-item.js +0 -76
  361. package/src/vendor/bootstrap-vue/src/components/list-group/list-group-item.spec.js +0 -286
  362. package/src/vendor/bootstrap-vue/src/components/list-group/list-group.js +0 -42
  363. package/src/vendor/bootstrap-vue/src/components/list-group/list-group.spec.js +0 -132
  364. package/src/vendor/bootstrap-vue/src/components/list-group/package.json +0 -52
  365. package/src/vendor/bootstrap-vue/src/components/media/README.md +0 -183
  366. package/src/vendor/bootstrap-vue/src/components/media/_media.scss +0 -9
  367. package/src/vendor/bootstrap-vue/src/components/media/index.d.ts +0 -17
  368. package/src/vendor/bootstrap-vue/src/components/media/index.js +0 -14
  369. package/src/vendor/bootstrap-vue/src/components/media/index.scss +0 -1
  370. package/src/vendor/bootstrap-vue/src/components/media/media-aside.js +0 -45
  371. package/src/vendor/bootstrap-vue/src/components/media/media-aside.spec.js +0 -79
  372. package/src/vendor/bootstrap-vue/src/components/media/media-body.js +0 -25
  373. package/src/vendor/bootstrap-vue/src/components/media/media-body.spec.js +0 -47
  374. package/src/vendor/bootstrap-vue/src/components/media/media.js +0 -52
  375. package/src/vendor/bootstrap-vue/src/components/media/media.spec.js +0 -149
  376. package/src/vendor/bootstrap-vue/src/components/media/package.json +0 -65
  377. package/src/vendor/bootstrap-vue/src/components/nav/nav-form.js +0 -50
  378. package/src/vendor/bootstrap-vue/src/components/nav/nav-form.spec.js +0 -93
  379. package/src/vendor/bootstrap-vue/src/components/nav/nav-text.js +0 -18
  380. package/src/vendor/bootstrap-vue/src/components/nav/nav-text.spec.js +0 -30
  381. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-nav.js +0 -45
  382. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-nav.spec.js +0 -105
  383. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.js +0 -84
  384. package/src/vendor/bootstrap-vue/src/components/navbar/navbar-toggle.spec.js +0 -189
  385. package/src/vendor/bootstrap-vue/src/components/overlay/README.md +0 -815
  386. package/src/vendor/bootstrap-vue/src/components/overlay/index.d.ts +0 -11
  387. package/src/vendor/bootstrap-vue/src/components/overlay/index.js +0 -8
  388. package/src/vendor/bootstrap-vue/src/components/overlay/overlay.js +0 -162
  389. package/src/vendor/bootstrap-vue/src/components/overlay/overlay.spec.js +0 -257
  390. package/src/vendor/bootstrap-vue/src/components/overlay/package.json +0 -130
  391. package/src/vendor/bootstrap-vue/src/components/pagination/README.md +0 -430
  392. package/src/vendor/bootstrap-vue/src/components/pagination/_pagination.scss +0 -26
  393. package/src/vendor/bootstrap-vue/src/components/pagination/index.d.ts +0 -11
  394. package/src/vendor/bootstrap-vue/src/components/pagination/index.js +0 -8
  395. package/src/vendor/bootstrap-vue/src/components/pagination/index.scss +0 -1
  396. package/src/vendor/bootstrap-vue/src/components/pagination/package.json +0 -295
  397. package/src/vendor/bootstrap-vue/src/components/pagination/pagination.js +0 -138
  398. package/src/vendor/bootstrap-vue/src/components/pagination/pagination.spec.js +0 -1198
  399. package/src/vendor/bootstrap-vue/src/components/pagination-nav/README.md +0 -544
  400. package/src/vendor/bootstrap-vue/src/components/pagination-nav/_pagination-nav.scss +0 -2
  401. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.d.ts +0 -11
  402. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.js +0 -8
  403. package/src/vendor/bootstrap-vue/src/components/pagination-nav/index.scss +0 -1
  404. package/src/vendor/bootstrap-vue/src/components/pagination-nav/package.json +0 -315
  405. package/src/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.js +0 -281
  406. package/src/vendor/bootstrap-vue/src/components/pagination-nav/pagination-nav.spec.js +0 -671
  407. package/src/vendor/bootstrap-vue/src/components/sidebar/README.md +0 -406
  408. package/src/vendor/bootstrap-vue/src/components/sidebar/_sidebar.scss +0 -97
  409. package/src/vendor/bootstrap-vue/src/components/sidebar/index.d.ts +0 -11
  410. package/src/vendor/bootstrap-vue/src/components/sidebar/index.js +0 -10
  411. package/src/vendor/bootstrap-vue/src/components/sidebar/index.scss +0 -1
  412. package/src/vendor/bootstrap-vue/src/components/sidebar/package.json +0 -239
  413. package/src/vendor/bootstrap-vue/src/components/sidebar/sidebar.js +0 -438
  414. package/src/vendor/bootstrap-vue/src/components/sidebar/sidebar.spec.js +0 -404
  415. package/src/vendor/bootstrap-vue/src/components/skeleton/README.md +0 -275
  416. package/src/vendor/bootstrap-vue/src/components/skeleton/_skeleton.scss +0 -141
  417. package/src/vendor/bootstrap-vue/src/components/skeleton/index.d.ts +0 -23
  418. package/src/vendor/bootstrap-vue/src/components/skeleton/index.js +0 -18
  419. package/src/vendor/bootstrap-vue/src/components/skeleton/index.scss +0 -1
  420. package/src/vendor/bootstrap-vue/src/components/skeleton/package.json +0 -136
  421. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.js +0 -45
  422. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-icon.spec.js +0 -86
  423. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.js +0 -49
  424. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-img.spec.js +0 -139
  425. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.js +0 -58
  426. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-table.spec.js +0 -119
  427. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.js +0 -47
  428. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton-wrapper.spec.js +0 -48
  429. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton.js +0 -46
  430. package/src/vendor/bootstrap-vue/src/components/skeleton/skeleton.spec.js +0 -126
  431. package/src/vendor/bootstrap-vue/src/components/spinner/README.md +0 -229
  432. package/src/vendor/bootstrap-vue/src/components/spinner/index.d.ts +0 -11
  433. package/src/vendor/bootstrap-vue/src/components/spinner/index.js +0 -8
  434. package/src/vendor/bootstrap-vue/src/components/spinner/package.json +0 -38
  435. package/src/vendor/bootstrap-vue/src/components/spinner/spinner.js +0 -54
  436. package/src/vendor/bootstrap-vue/src/components/spinner/spinner.spec.js +0 -305
  437. package/src/vendor/bootstrap-vue/src/components/time/README.md +0 -431
  438. package/src/vendor/bootstrap-vue/src/components/time/_time.scss +0 -41
  439. package/src/vendor/bootstrap-vue/src/components/time/index.d.ts +0 -27
  440. package/src/vendor/bootstrap-vue/src/components/time/index.js +0 -8
  441. package/src/vendor/bootstrap-vue/src/components/time/index.scss +0 -1
  442. package/src/vendor/bootstrap-vue/src/components/time/package.json +0 -123
  443. package/src/vendor/bootstrap-vue/src/components/time/time.js +0 -601
  444. package/src/vendor/bootstrap-vue/src/components/time/time.spec.js +0 -330
  445. package/src/vendor/bootstrap-vue/src/constants/date.js +0 -7
  446. package/src/vendor/bootstrap-vue/src/mixins/card.js +0 -23
  447. package/src/vendor/bootstrap-vue/src/mixins/pagination.js +0 -670
  448. package/src/vendor/bootstrap-vue/src/utils/date.js +0 -130
  449. package/src/vendor/bootstrap-vue/src/utils/date.spec.js +0 -159
@@ -1,575 +0,0 @@
1
- import { extend } from '../../vue'
2
- import { NAME_FORM_FILE } from '../../constants/components'
3
- import { HAS_PROMISE_SUPPORT } from '../../constants/env'
4
- import { EVENT_NAME_CHANGE, EVENT_OPTIONS_PASSIVE } from '../../constants/events'
5
- import {
6
- PROP_TYPE_ARRAY,
7
- PROP_TYPE_BOOLEAN,
8
- PROP_TYPE_FUNCTION,
9
- PROP_TYPE_STRING
10
- } from '../../constants/props'
11
- import {
12
- SLOT_NAME_DROP_PLACEHOLDER,
13
- SLOT_NAME_FILE_NAME,
14
- SLOT_NAME_PLACEHOLDER
15
- } from '../../constants/slots'
16
- import { RX_EXTENSION, RX_STAR } from '../../constants/regex'
17
- import { File } from '../../constants/safe-types'
18
- import { from as arrayFrom, flatten, flattenDeep } from '../../utils/array'
19
- import { cloneDeep } from '../../utils/clone-deep'
20
- import { closest } from '../../utils/dom'
21
- import { eventOn, eventOff, stopEvent } from '../../utils/events'
22
- import { identity } from '../../utils/identity'
23
- import { isArray, isFile, isFunction, isNull, isUndefinedOrNull } from '../../utils/inspect'
24
- import { looseEqual } from '../../utils/loose-equal'
25
- import { makeModelMixin } from '../../utils/model'
26
- import { sortKeys } from '../../utils/object'
27
- import { hasPropFunction, makeProp, makePropsConfigurable } from '../../utils/props'
28
- import { escapeRegExp } from '../../utils/string'
29
- import { warn } from '../../utils/warn'
30
- import { attrsMixin } from '../../mixins/attrs'
31
- import { formControlMixin, props as formControlProps } from '../../mixins/form-control'
32
- import { formCustomMixin, props as formCustomProps } from '../../mixins/form-custom'
33
- import { formStateMixin, props as formStateProps } from '../../mixins/form-state'
34
- import { idMixin, props as idProps } from '../../mixins/id'
35
- import { normalizeSlotMixin } from '../../mixins/normalize-slot'
36
- import { props as formSizeProps } from '../../mixins/form-size'
37
-
38
- // --- Constants ---
39
-
40
- const {
41
- mixin: modelMixin,
42
- props: modelProps,
43
- prop: MODEL_PROP_NAME,
44
- event: MODEL_EVENT_NAME
45
- } = makeModelMixin('value', {
46
- type: [PROP_TYPE_ARRAY, File],
47
- defaultValue: null,
48
- validator: value => {
49
- /* istanbul ignore next */
50
- if (value === '') {
51
- warn(VALUE_EMPTY_DEPRECATED_MSG, NAME_FORM_FILE)
52
- return true
53
- }
54
- return isUndefinedOrNull(value) || isValidValue(value)
55
- }
56
- })
57
-
58
- const VALUE_EMPTY_DEPRECATED_MSG =
59
- 'Setting "value"/"v-model" to an empty string for reset is deprecated. Set to "null" instead.'
60
-
61
- // --- Helper methods ---
62
-
63
- const isValidValue = value => isFile(value) || (isArray(value) && value.every(v => isValidValue(v)))
64
-
65
- // Helper method to "safely" get the entry from a data-transfer item
66
- /* istanbul ignore next: not supported in JSDOM */
67
- const getDataTransferItemEntry = item =>
68
- isFunction(item.getAsEntry)
69
- ? item.getAsEntry()
70
- : isFunction(item.webkitGetAsEntry)
71
- ? item.webkitGetAsEntry()
72
- : null
73
-
74
- // Drop handler function to get all files
75
- /* istanbul ignore next: not supported in JSDOM */
76
- const getAllFileEntries = (dataTransferItemList, traverseDirectories = true) =>
77
- Promise.all(
78
- arrayFrom(dataTransferItemList)
79
- .filter(item => item.kind === 'file')
80
- .map(item => {
81
- const entry = getDataTransferItemEntry(item)
82
- if (entry) {
83
- if (entry.isDirectory && traverseDirectories) {
84
- return getAllFileEntriesInDirectory(entry.createReader(), `${entry.name}/`)
85
- } else if (entry.isFile) {
86
- return new Promise(resolve => {
87
- entry.file(file => {
88
- file.$path = ''
89
- resolve(file)
90
- })
91
- })
92
- }
93
- }
94
- return null
95
- })
96
- .filter(identity)
97
- )
98
-
99
- // Get all the file entries (recursive) in a directory
100
- /* istanbul ignore next: not supported in JSDOM */
101
- const getAllFileEntriesInDirectory = (directoryReader, path = '') =>
102
- new Promise(resolve => {
103
- const entryPromises = []
104
- const readDirectoryEntries = () => {
105
- directoryReader.readEntries(entries => {
106
- if (entries.length === 0) {
107
- resolve(Promise.all(entryPromises).then(entries => flatten(entries)))
108
- } else {
109
- entryPromises.push(
110
- Promise.all(
111
- entries
112
- .map(entry => {
113
- if (entry) {
114
- if (entry.isDirectory) {
115
- return getAllFileEntriesInDirectory(
116
- entry.createReader(),
117
- `${path}${entry.name}/`
118
- )
119
- } else if (entry.isFile) {
120
- return new Promise(resolve => {
121
- entry.file(file => {
122
- file.$path = `${path}${file.name}`
123
- resolve(file)
124
- })
125
- })
126
- }
127
- }
128
- return null
129
- })
130
- .filter(identity)
131
- )
132
- )
133
-
134
- readDirectoryEntries()
135
- }
136
- })
137
- }
138
-
139
- readDirectoryEntries()
140
- })
141
-
142
- // --- Props ---
143
-
144
- const props = makePropsConfigurable(
145
- sortKeys({
146
- ...idProps,
147
- ...modelProps,
148
- ...formControlProps,
149
- ...formCustomProps,
150
- ...formStateProps,
151
- ...formSizeProps,
152
- accept: makeProp(PROP_TYPE_STRING, ''),
153
- browseText: makeProp(PROP_TYPE_STRING, 'Browse'),
154
- // Instruct input to capture from camera
155
- capture: makeProp(PROP_TYPE_BOOLEAN, false),
156
- directory: makeProp(PROP_TYPE_BOOLEAN, false),
157
- dropPlaceholder: makeProp(PROP_TYPE_STRING, 'Drop files here'),
158
- fileNameFormatter: makeProp(PROP_TYPE_FUNCTION),
159
- multiple: makeProp(PROP_TYPE_BOOLEAN, false),
160
- noDrop: makeProp(PROP_TYPE_BOOLEAN, false),
161
- noDropPlaceholder: makeProp(PROP_TYPE_STRING, 'Not allowed'),
162
- // TODO:
163
- // Should we deprecate this and only support flat file structures?
164
- // Nested file structures are only supported when files are dropped
165
- // A Chromium "bug" prevents `webkitEntries` from being populated
166
- // on the file input's `change` event and is marked as "WontFix"
167
- // Mozilla implemented the behavior the same way as Chromium
168
- // See: https://bugs.chromium.org/p/chromium/issues/detail?id=138987
169
- // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1326031
170
- noTraverse: makeProp(PROP_TYPE_BOOLEAN, false),
171
- placeholder: makeProp(PROP_TYPE_STRING, 'No file chosen')
172
- }),
173
- NAME_FORM_FILE
174
- )
175
-
176
- // --- Main component ---
177
-
178
- // @vue/component
179
- export const BFormFile = /*#__PURE__*/ extend({
180
- name: NAME_FORM_FILE,
181
- mixins: [
182
- attrsMixin,
183
- idMixin,
184
- modelMixin,
185
- normalizeSlotMixin,
186
- formControlMixin,
187
- formStateMixin,
188
- formCustomMixin,
189
- normalizeSlotMixin
190
- ],
191
- inheritAttrs: false,
192
- props,
193
- data() {
194
- return {
195
- files: [],
196
- dragging: false,
197
- // IE 11 doesn't respect setting `event.dataTransfer.dropEffect`,
198
- // so we handle it ourselves as well
199
- // https://stackoverflow.com/a/46915971/2744776
200
- dropAllowed: !this.noDrop,
201
- hasFocus: false
202
- }
203
- },
204
- computed: {
205
- // Convert `accept` to an array of `[{ RegExpr, isMime }, ...]`
206
- computedAccept() {
207
- let { accept } = this
208
- accept = (accept || '')
209
- .trim()
210
- .split(/[,\s]+/)
211
- .filter(identity)
212
-
213
- // Allow any file type/extension
214
- if (accept.length === 0) {
215
- return null
216
- }
217
-
218
- return accept.map(extOrType => {
219
- let prop = 'name'
220
- let startMatch = '^'
221
- let endMatch = '$'
222
- if (RX_EXTENSION.test(extOrType)) {
223
- // File extension /\.ext$/
224
- startMatch = ''
225
- } else {
226
- // MIME type /^mime\/.+$/ or /^mime\/type$/
227
- prop = 'type'
228
- if (RX_STAR.test(extOrType)) {
229
- endMatch = '.+$'
230
- // Remove trailing `*`
231
- extOrType = extOrType.slice(0, -1)
232
- }
233
- }
234
- // Escape all RegExp special chars
235
- extOrType = escapeRegExp(extOrType)
236
- const rx = new RegExp(`${startMatch}${extOrType}${endMatch}`)
237
- return { rx, prop }
238
- })
239
- },
240
- computedCapture() {
241
- const { capture } = this
242
- return capture === true || capture === '' ? true : capture || null
243
- },
244
- computedAttrs() {
245
- const { name, disabled, required, form, computedCapture, accept, multiple, directory } = this
246
- return {
247
- ...this.bvAttrs,
248
- type: 'file',
249
- id: this.safeId(),
250
- name,
251
- disabled,
252
- required,
253
- form: form || null,
254
- capture: computedCapture,
255
- accept: accept || null,
256
- multiple,
257
- directory,
258
- webkitdirectory: directory,
259
- 'aria-required': required ? 'true' : null
260
- }
261
- },
262
- computedFileNameFormatter() {
263
- const { fileNameFormatter } = this
264
- return hasPropFunction(fileNameFormatter) ? fileNameFormatter : this.defaultFileNameFormatter
265
- },
266
- clonedFiles() {
267
- return cloneDeep(this.files)
268
- },
269
- flattenedFiles() {
270
- return flattenDeep(this.files)
271
- },
272
- fileNames() {
273
- return this.flattenedFiles.map(file => file.name)
274
- },
275
- labelContent() {
276
- // Draging active
277
- /* istanbul ignore next: used by drag/drop which can't be tested easily */
278
- if (this.dragging && !this.noDrop) {
279
- return (
280
- // TODO: Add additional scope with file count, and other not-allowed reasons
281
- this.normalizeSlot(SLOT_NAME_DROP_PLACEHOLDER, { allowed: this.dropAllowed }) ||
282
- (this.dropAllowed
283
- ? this.dropPlaceholder
284
- : this.$createElement('span', { staticClass: 'text-danger' }, this.noDropPlaceholder))
285
- )
286
- }
287
-
288
- // No file chosen
289
- if (this.files.length === 0) {
290
- return this.normalizeSlot(SLOT_NAME_PLACEHOLDER) || this.placeholder
291
- }
292
-
293
- const { flattenedFiles, clonedFiles, fileNames, computedFileNameFormatter } = this
294
-
295
- // There is a slot for formatting the files/names
296
- if (this.hasNormalizedSlot(SLOT_NAME_FILE_NAME)) {
297
- return this.normalizeSlot(SLOT_NAME_FILE_NAME, {
298
- files: flattenedFiles,
299
- filesTraversed: clonedFiles,
300
- names: fileNames
301
- })
302
- }
303
-
304
- return computedFileNameFormatter(flattenedFiles, clonedFiles, fileNames)
305
- }
306
- },
307
- watch: {
308
- [MODEL_PROP_NAME](newValue) {
309
- if (!newValue || (isArray(newValue) && newValue.length === 0)) {
310
- this.reset()
311
- }
312
- },
313
- files(newValue, oldValue) {
314
- if (!looseEqual(newValue, oldValue)) {
315
- const { multiple, noTraverse } = this
316
- const files = !multiple || noTraverse ? flattenDeep(newValue) : newValue
317
- this.$emit(MODEL_EVENT_NAME, multiple ? files : files[0] || null)
318
- }
319
- }
320
- },
321
- created() {
322
- // Create private non-reactive props
323
- this.$_form = null
324
- },
325
- mounted() {
326
- // Listen for form reset events, to reset the file input
327
- const $form = closest('form', this.$el)
328
- if ($form) {
329
- eventOn($form, 'reset', this.reset, EVENT_OPTIONS_PASSIVE)
330
- this.$_form = $form
331
- }
332
- },
333
- beforeDestroy() {
334
- const $form = this.$_form
335
- if ($form) {
336
- eventOff($form, 'reset', this.reset, EVENT_OPTIONS_PASSIVE)
337
- }
338
- },
339
- methods: {
340
- isFileValid(file) {
341
- if (!file) {
342
- return false
343
- }
344
- const accept = this.computedAccept
345
- return accept ? accept.some(a => a.rx.test(file[a.prop])) : true
346
- },
347
- isFilesArrayValid(files) {
348
- return isArray(files) ? files.every(file => this.isFileValid(file)) : this.isFileValid(files)
349
- },
350
- defaultFileNameFormatter(flattenedFiles, clonedFiles, fileNames) {
351
- return fileNames.join(', ')
352
- },
353
- setFiles(files) {
354
- // Reset the dragging flags
355
- this.dropAllowed = !this.noDrop
356
- this.dragging = false
357
- // Set the selected files
358
- this.files = this.multiple
359
- ? this.directory
360
- ? files
361
- : flattenDeep(files)
362
- : flattenDeep(files).slice(0, 1)
363
- },
364
- /* istanbul ignore next: used by Drag/Drop */
365
- setInputFiles(files) {
366
- // Try an set the file input files array so that `required`
367
- // constraint works for dropped files (will fail in IE11 though)
368
- // To be used only when dropping files
369
- try {
370
- // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655
371
- const dataTransfer = new ClipboardEvent('').clipboardData || new DataTransfer()
372
- // Add flattened files to temp `dataTransfer` object to get a true `FileList` array
373
- flattenDeep(cloneDeep(files)).forEach(file => {
374
- // Make sure to remove the custom `$path` attribute
375
- delete file.$path
376
- dataTransfer.items.add(file)
377
- })
378
- this.$refs.input.files = dataTransfer.files
379
- } catch {}
380
- },
381
- reset() {
382
- // IE 11 doesn't support setting `$input.value` to `''` or `null`
383
- // So we use this little extra hack to reset the value, just in case
384
- // This also appears to work on modern browsers as well
385
- // Wrapped in try in case IE 11 or mobile Safari crap out
386
- try {
387
- const $input = this.$refs.input
388
- $input.value = ''
389
- $input.type = ''
390
- $input.type = 'file'
391
- } catch {}
392
- this.files = []
393
- },
394
- handleFiles(files, isDrop = false) {
395
- if (isDrop) {
396
- // When dropped, make sure to filter files with the internal `accept` logic
397
- const filteredFiles = files.filter(this.isFilesArrayValid)
398
- // Only update files when we have any after filtering
399
- if (filteredFiles.length > 0) {
400
- this.setFiles(filteredFiles)
401
- // Try an set the file input's files array so that `required`
402
- // constraint works for dropped files (will fail in IE 11 though)
403
- this.setInputFiles(filteredFiles)
404
- }
405
- } else {
406
- // We always update the files from the `change` event
407
- this.setFiles(files)
408
- }
409
- },
410
- focusHandler(event) {
411
- // Bootstrap v4 doesn't have focus styling for custom file input
412
- // Firefox has a `[type=file]:focus ~ sibling` selector issue,
413
- // so we add a `focus` class to get around these bugs
414
- if (this.plain || event.type === 'focusout') {
415
- this.hasFocus = false
416
- } else {
417
- // Add focus styling for custom file input
418
- this.hasFocus = true
419
- }
420
- },
421
- onChange(event) {
422
- const { type, target, dataTransfer = {} } = event
423
- const isDrop = type === 'drop'
424
-
425
- // Always emit original event
426
- this.$emit(EVENT_NAME_CHANGE, event)
427
-
428
- const items = arrayFrom(dataTransfer.items || [])
429
- if (HAS_PROMISE_SUPPORT && items.length > 0 && !isNull(getDataTransferItemEntry(items[0]))) {
430
- // Drop handling for modern browsers
431
- // Supports nested directory structures in `directory` mode
432
- /* istanbul ignore next: not supported in JSDOM */
433
- getAllFileEntries(items, this.directory).then(files => this.handleFiles(files, isDrop))
434
- } else {
435
- // Standard file input handling (native file input change event),
436
- // or fallback drop mode (IE 11 / Opera) which don't support `directory` mode
437
- const files = arrayFrom(target.files || dataTransfer.files || []).map(file => {
438
- // Add custom `$path` property to each file (to be consistent with drop mode)
439
- file.$path = file.webkitRelativePath || ''
440
- return file
441
- })
442
- this.handleFiles(files, isDrop)
443
- }
444
- },
445
- onDragenter(event) {
446
- stopEvent(event)
447
- this.dragging = true
448
- const { dataTransfer = {} } = event
449
- // Early exit when the input or dropping is disabled
450
- if (this.noDrop || this.disabled || !this.dropAllowed) {
451
- // Show deny feedback
452
- /* istanbul ignore next: not supported in JSDOM */
453
- dataTransfer.dropEffect = 'none'
454
- this.dropAllowed = false
455
- return
456
- }
457
- /* istanbul ignore next: not supported in JSDOM */
458
- dataTransfer.dropEffect = 'copy'
459
- },
460
- // Note this event fires repeatedly while the mouse is over the dropzone at
461
- // intervals in the milliseconds, so avoid doing much processing in here
462
- onDragover(event) {
463
- stopEvent(event)
464
- this.dragging = true
465
- const { dataTransfer = {} } = event
466
- // Early exit when the input or dropping is disabled
467
- if (this.noDrop || this.disabled || !this.dropAllowed) {
468
- // Show deny feedback
469
- /* istanbul ignore next: not supported in JSDOM */
470
- dataTransfer.dropEffect = 'none'
471
- this.dropAllowed = false
472
- return
473
- }
474
- /* istanbul ignore next: not supported in JSDOM */
475
- dataTransfer.dropEffect = 'copy'
476
- },
477
- onDragleave(event) {
478
- stopEvent(event)
479
- this.$nextTick(() => {
480
- this.dragging = false
481
- // Reset `dropAllowed` to default
482
- this.dropAllowed = !this.noDrop
483
- })
484
- },
485
- // Triggered by a file drop onto drop target
486
- onDrop(event) {
487
- stopEvent(event)
488
- this.dragging = false
489
- // Early exit when the input or dropping is disabled
490
- if (this.noDrop || this.disabled || !this.dropAllowed) {
491
- this.$nextTick(() => {
492
- // Reset `dropAllowed` to default
493
- this.dropAllowed = !this.noDrop
494
- })
495
- return
496
- }
497
- this.onChange(event)
498
- }
499
- },
500
- render(h) {
501
- const { custom, plain, size, dragging, stateClass, bvAttrs } = this
502
-
503
- // Form Input
504
- const $input = h('input', {
505
- class: [
506
- {
507
- 'form-control-file': plain,
508
- 'custom-file-input': custom,
509
- focus: custom && this.hasFocus
510
- },
511
- stateClass
512
- ],
513
- // With IE 11, the input gets in the "way" of the drop events,
514
- // so we move it out of the way by putting it behind the label
515
- // Bootstrap v4 has it in front
516
- style: custom ? { zIndex: -5 } : {},
517
- attrs: this.computedAttrs,
518
- on: {
519
- change: this.onChange,
520
- focusin: this.focusHandler,
521
- focusout: this.focusHandler,
522
- reset: this.reset
523
- },
524
- ref: 'input'
525
- })
526
-
527
- if (plain) {
528
- return $input
529
- }
530
-
531
- // Overlay label
532
- const $label = h(
533
- 'label',
534
- {
535
- staticClass: 'custom-file-label',
536
- class: { dragging },
537
- attrs: {
538
- for: this.safeId(),
539
- // This goes away in Bootstrap v5
540
- 'data-browse': this.browseText || null
541
- }
542
- },
543
- [
544
- h(
545
- 'span',
546
- {
547
- staticClass: 'd-block form-file-text',
548
- // `pointer-events: none` is used to make sure
549
- // the drag events fire only on the label
550
- style: { pointerEvents: 'none' }
551
- },
552
- [this.labelContent]
553
- )
554
- ]
555
- )
556
-
557
- // Return rendered custom file input
558
- return h(
559
- 'div',
560
- {
561
- staticClass: 'custom-file b-form-file',
562
- class: [{ [`b-custom-control-${size}`]: size }, stateClass, bvAttrs.class],
563
- style: bvAttrs.style,
564
- attrs: { id: this.safeId('_BV_file_outer_') },
565
- on: {
566
- dragenter: this.onDragenter,
567
- dragover: this.onDragover,
568
- dragleave: this.onDragleave,
569
- drop: this.onDrop
570
- }
571
- },
572
- [$input, $label]
573
- )
574
- }
575
- })