buefy 1.0.0 → 1.0.2

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 (588) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +242 -0
  3. package/dist/buefy.css +15895 -0
  4. package/dist/buefy.d.ts +11706 -0
  5. package/dist/buefy.esm.js +21082 -0
  6. package/dist/buefy.esm.min.js +2 -0
  7. package/dist/buefy.js +21227 -0
  8. package/dist/buefy.min.css +1 -0
  9. package/dist/buefy.min.js +2 -0
  10. package/dist/cjs/Autocomplete-BMmOsPiK.js +864 -0
  11. package/dist/cjs/Button-Cq7yqI8p.js +118 -0
  12. package/dist/cjs/CheckRadioMixin-CDu0SN3g.js +58 -0
  13. package/dist/cjs/Checkbox-GPzAMQqM.js +85 -0
  14. package/dist/cjs/CompatFallthroughMixin-hhK0Gkhr.js +48 -0
  15. package/dist/cjs/Datepicker-B-9ReBe6.js +2120 -0
  16. package/dist/cjs/Dropdown-DtpKU9qf.js +470 -0
  17. package/dist/cjs/DropdownItem-IMOKyRGV.js +110 -0
  18. package/dist/cjs/Field-19ZCJFF8.js +405 -0
  19. package/dist/cjs/FormElementMixin-DavX4iOv.js +170 -0
  20. package/dist/cjs/Icon-lsDKE2wQ.js +184 -0
  21. package/dist/cjs/Image-CocPwU3n.js +356 -0
  22. package/dist/cjs/InjectedChildMixin-CUKn09dB.js +150 -0
  23. package/dist/cjs/Input-BcloGeZ3.js +350 -0
  24. package/dist/cjs/Loading-GqqqjipO.js +145 -0
  25. package/dist/cjs/MessageMixin-bGuuzfev.js +136 -0
  26. package/dist/cjs/Modal-CYpSQe2Q.js +315 -0
  27. package/dist/cjs/NoticeMixin--3RjH43z.js +163 -0
  28. package/dist/cjs/Pagination-D1MVdiLp.js +547 -0
  29. package/dist/cjs/Progress-DT9Qc8Id.js +177 -0
  30. package/dist/cjs/Select-DayPKwCY.js +147 -0
  31. package/dist/cjs/SlotComponent-BruGdRW3.js +41 -0
  32. package/dist/cjs/TabbedChildMixin-B3JUUwcf.js +211 -0
  33. package/dist/cjs/Tag-BprnwJJ1.js +167 -0
  34. package/dist/cjs/Timepicker-CDZ3V-2J.js +283 -0
  35. package/dist/cjs/TimepickerMixin-C9WVvcUL.js +666 -0
  36. package/dist/cjs/Tooltip-Cgighv0j.js +393 -0
  37. package/dist/cjs/_plugin-vue_export-helper-Die8u8yB.js +11 -0
  38. package/dist/cjs/autocomplete.js +23 -0
  39. package/dist/cjs/breadcrumb.js +107 -0
  40. package/dist/cjs/button.js +20 -0
  41. package/dist/cjs/carousel.js +825 -0
  42. package/dist/cjs/checkbox.js +88 -0
  43. package/dist/cjs/clockpicker.js +668 -0
  44. package/dist/cjs/collapse.js +99 -0
  45. package/dist/cjs/colorpicker.js +25 -0
  46. package/dist/cjs/config-DR826Ki2.js +103 -0
  47. package/dist/cjs/config.js +18 -0
  48. package/dist/cjs/datepicker.js +28 -0
  49. package/dist/cjs/datetimepicker.js +483 -0
  50. package/dist/cjs/dialog.js +506 -0
  51. package/dist/cjs/dropdown.js +23 -0
  52. package/dist/cjs/field.js +19 -0
  53. package/dist/cjs/helpers.js +276 -0
  54. package/dist/cjs/icon.js +19 -0
  55. package/dist/cjs/image.js +19 -0
  56. package/dist/cjs/index-DiQy3SCb.js +1942 -0
  57. package/dist/cjs/index.js +274 -0
  58. package/dist/cjs/input.js +22 -0
  59. package/dist/cjs/loading.js +87 -0
  60. package/dist/cjs/menu.js +340 -0
  61. package/dist/cjs/message.js +119 -0
  62. package/dist/cjs/modal.js +103 -0
  63. package/dist/cjs/navbar.js +572 -0
  64. package/dist/cjs/notification.js +281 -0
  65. package/dist/cjs/numberinput.js +386 -0
  66. package/dist/cjs/pagination.js +22 -0
  67. package/dist/cjs/plugins-DbyYGVpp.js +16 -0
  68. package/dist/cjs/progress.js +91 -0
  69. package/dist/cjs/radio.js +137 -0
  70. package/dist/cjs/rate.js +197 -0
  71. package/dist/cjs/select.js +22 -0
  72. package/dist/cjs/sidebar.js +309 -0
  73. package/dist/cjs/skeleton.js +78 -0
  74. package/dist/cjs/slider.js +699 -0
  75. package/dist/cjs/snackbar.js +224 -0
  76. package/dist/cjs/ssr-DVRFTu_P.js +8 -0
  77. package/dist/cjs/steps.js +347 -0
  78. package/dist/cjs/switch.js +161 -0
  79. package/dist/cjs/table.js +2391 -0
  80. package/dist/cjs/tabs.js +258 -0
  81. package/dist/cjs/tag.js +44 -0
  82. package/dist/cjs/taginput.js +425 -0
  83. package/dist/cjs/timepicker.js +29 -0
  84. package/dist/cjs/toast.js +162 -0
  85. package/dist/cjs/tooltip.js +19 -0
  86. package/dist/cjs/trapFocus-BlX6xykt.js +53 -0
  87. package/dist/cjs/upload.js +195 -0
  88. package/dist/components/autocomplete/index.js +1647 -0
  89. package/dist/components/autocomplete/index.min.js +2 -0
  90. package/dist/components/breadcrumb/index.js +173 -0
  91. package/dist/components/breadcrumb/index.min.js +2 -0
  92. package/dist/components/button/index.js +334 -0
  93. package/dist/components/button/index.min.js +2 -0
  94. package/dist/components/carousel/index.js +1534 -0
  95. package/dist/components/carousel/index.min.js +2 -0
  96. package/dist/components/checkbox/index.js +236 -0
  97. package/dist/components/checkbox/index.min.js +2 -0
  98. package/dist/components/clockpicker/index.js +2636 -0
  99. package/dist/components/clockpicker/index.min.js +2 -0
  100. package/dist/components/collapse/index.js +111 -0
  101. package/dist/components/collapse/index.min.js +2 -0
  102. package/dist/components/colorpicker/index.js +4251 -0
  103. package/dist/components/colorpicker/index.min.js +2 -0
  104. package/dist/components/datepicker/index.js +4110 -0
  105. package/dist/components/datepicker/index.min.js +2 -0
  106. package/dist/components/datetimepicker/index.js +5479 -0
  107. package/dist/components/datetimepicker/index.min.js +2 -0
  108. package/dist/components/dialog/index.js +1202 -0
  109. package/dist/components/dialog/index.min.js +2 -0
  110. package/dist/components/dropdown/index.js +680 -0
  111. package/dist/components/dropdown/index.min.js +2 -0
  112. package/dist/components/field/index.js +439 -0
  113. package/dist/components/field/index.min.js +2 -0
  114. package/dist/components/icon/index.js +212 -0
  115. package/dist/components/icon/index.min.js +2 -0
  116. package/dist/components/image/index.js +396 -0
  117. package/dist/components/image/index.min.js +2 -0
  118. package/dist/components/input/index.js +764 -0
  119. package/dist/components/input/index.min.js +2 -0
  120. package/dist/components/loading/index.js +280 -0
  121. package/dist/components/loading/index.min.js +2 -0
  122. package/dist/components/menu/index.js +586 -0
  123. package/dist/components/menu/index.min.js +2 -0
  124. package/dist/components/message/index.js +611 -0
  125. package/dist/components/message/index.min.js +2 -0
  126. package/dist/components/modal/index.js +516 -0
  127. package/dist/components/modal/index.min.js +2 -0
  128. package/dist/components/navbar/index.js +634 -0
  129. package/dist/components/navbar/index.min.js +2 -0
  130. package/dist/components/notification/index.js +976 -0
  131. package/dist/components/notification/index.min.js +2 -0
  132. package/dist/components/numberinput/index.js +1128 -0
  133. package/dist/components/numberinput/index.min.js +2 -0
  134. package/dist/components/pagination/index.js +764 -0
  135. package/dist/components/pagination/index.min.js +2 -0
  136. package/dist/components/progress/index.js +280 -0
  137. package/dist/components/progress/index.min.js +2 -0
  138. package/dist/components/radio/index.js +208 -0
  139. package/dist/components/radio/index.min.js +2 -0
  140. package/dist/components/rate/index.js +391 -0
  141. package/dist/components/rate/index.min.js +2 -0
  142. package/dist/components/select/index.js +560 -0
  143. package/dist/components/select/index.min.js +2 -0
  144. package/dist/components/sidebar/index.js +337 -0
  145. package/dist/components/sidebar/index.min.js +2 -0
  146. package/dist/components/skeleton/index.js +87 -0
  147. package/dist/components/skeleton/index.min.js +2 -0
  148. package/dist/components/slider/index.js +1171 -0
  149. package/dist/components/slider/index.min.js +2 -0
  150. package/dist/components/snackbar/index.js +439 -0
  151. package/dist/components/snackbar/index.min.js +2 -0
  152. package/dist/components/steps/index.js +925 -0
  153. package/dist/components/steps/index.min.js +2 -0
  154. package/dist/components/switch/index.js +182 -0
  155. package/dist/components/switch/index.min.js +2 -0
  156. package/dist/components/table/index.js +4208 -0
  157. package/dist/components/table/index.min.js +2 -0
  158. package/dist/components/tabs/index.js +837 -0
  159. package/dist/components/tabs/index.min.js +2 -0
  160. package/dist/components/tag/index.js +396 -0
  161. package/dist/components/tag/index.min.js +2 -0
  162. package/dist/components/taginput/index.js +2209 -0
  163. package/dist/components/taginput/index.min.js +2 -0
  164. package/dist/components/timepicker/index.js +2906 -0
  165. package/dist/components/timepicker/index.min.js +2 -0
  166. package/dist/components/toast/index.js +377 -0
  167. package/dist/components/toast/index.min.js +2 -0
  168. package/dist/components/tooltip/index.js +445 -0
  169. package/dist/components/tooltip/index.min.js +2 -0
  170. package/dist/components/upload/index.js +426 -0
  171. package/dist/components/upload/index.min.js +2 -0
  172. package/dist/esm/Autocomplete-CjbTh9D8.js +862 -0
  173. package/dist/esm/Button-DyUYShTZ.js +116 -0
  174. package/dist/esm/CheckRadioMixin-DSD_rjC8.js +56 -0
  175. package/dist/esm/Checkbox-KUMz0sfA.js +83 -0
  176. package/dist/esm/CompatFallthroughMixin-C8LPuwDr.js +46 -0
  177. package/dist/esm/Datepicker-Bl8Wfdkn.js +2118 -0
  178. package/dist/esm/Dropdown-CGTYVyoL.js +467 -0
  179. package/dist/esm/DropdownItem-Cn3nM0A3.js +108 -0
  180. package/dist/esm/Field-B7bX_uUg.js +403 -0
  181. package/dist/esm/FormElementMixin-Dd_wkBN5.js +168 -0
  182. package/dist/esm/Icon-DPyGDeRK.js +182 -0
  183. package/dist/esm/Image-DhX-4hlV.js +354 -0
  184. package/dist/esm/InjectedChildMixin-D2K-FwuO.js +145 -0
  185. package/dist/esm/Input-C4L520az.js +348 -0
  186. package/dist/esm/Loading-tuQoo6TU.js +143 -0
  187. package/dist/esm/MessageMixin-CQ7LIdvq.js +134 -0
  188. package/dist/esm/Modal-tfvyhxw_.js +313 -0
  189. package/dist/esm/NoticeMixin-ByNlva3T.js +161 -0
  190. package/dist/esm/Pagination-B-LAJQay.js +543 -0
  191. package/dist/esm/Progress-BPGTVZgr.js +174 -0
  192. package/dist/esm/Select-bl4qUzij.js +145 -0
  193. package/dist/esm/SlotComponent-BwNpVnfH.js +39 -0
  194. package/dist/esm/TabbedChildMixin-C4i6WP9j.js +208 -0
  195. package/dist/esm/Tag-jS5Bcj6N.js +165 -0
  196. package/dist/esm/Timepicker-DnkqnOBT.js +281 -0
  197. package/dist/esm/TimepickerMixin-Bikh6_Fg.js +664 -0
  198. package/dist/esm/Tooltip-CtDSXAqa.js +391 -0
  199. package/dist/esm/_plugin-vue_export-helper-OJRSZE6i.js +9 -0
  200. package/dist/esm/autocomplete.js +18 -0
  201. package/dist/esm/breadcrumb.js +101 -0
  202. package/dist/esm/button.js +15 -0
  203. package/dist/esm/carousel.js +818 -0
  204. package/dist/esm/checkbox.js +82 -0
  205. package/dist/esm/clockpicker.js +663 -0
  206. package/dist/esm/collapse.js +94 -0
  207. package/dist/esm/colorpicker.js +16 -0
  208. package/dist/esm/config-CKuo-p6e.js +100 -0
  209. package/dist/esm/config.js +14 -0
  210. package/dist/esm/datepicker.js +23 -0
  211. package/dist/esm/datetimepicker.js +478 -0
  212. package/dist/esm/dialog.js +500 -0
  213. package/dist/esm/dropdown.js +17 -0
  214. package/dist/esm/field.js +14 -0
  215. package/dist/esm/helpers.js +247 -0
  216. package/dist/esm/icon.js +14 -0
  217. package/dist/esm/image.js +14 -0
  218. package/dist/esm/index-CQegEsxK.js +1938 -0
  219. package/dist/esm/index.js +164 -0
  220. package/dist/esm/input.js +17 -0
  221. package/dist/esm/loading.js +81 -0
  222. package/dist/esm/menu.js +333 -0
  223. package/dist/esm/message.js +114 -0
  224. package/dist/esm/modal.js +97 -0
  225. package/dist/esm/navbar.js +565 -0
  226. package/dist/esm/notification.js +275 -0
  227. package/dist/esm/numberinput.js +381 -0
  228. package/dist/esm/pagination.js +16 -0
  229. package/dist/esm/plugins-B172kuKE.js +13 -0
  230. package/dist/esm/progress.js +85 -0
  231. package/dist/esm/radio.js +131 -0
  232. package/dist/esm/rate.js +192 -0
  233. package/dist/esm/select.js +17 -0
  234. package/dist/esm/sidebar.js +304 -0
  235. package/dist/esm/skeleton.js +73 -0
  236. package/dist/esm/slider.js +693 -0
  237. package/dist/esm/snackbar.js +218 -0
  238. package/dist/esm/ssr-C7yEpGLm.js +5 -0
  239. package/dist/esm/steps.js +341 -0
  240. package/dist/esm/switch.js +156 -0
  241. package/dist/esm/table.js +2385 -0
  242. package/dist/esm/tabs.js +252 -0
  243. package/dist/esm/tag.js +38 -0
  244. package/dist/esm/taginput.js +420 -0
  245. package/dist/esm/timepicker.js +24 -0
  246. package/dist/esm/toast.js +156 -0
  247. package/dist/esm/tooltip.js +14 -0
  248. package/dist/esm/trapFocus-KHP_kCNE.js +51 -0
  249. package/dist/esm/upload.js +190 -0
  250. package/dist/tsdoc-metadata.json +11 -0
  251. package/package.json +73 -6
  252. package/src/components/autocomplete/Autocomplete.spec.ts +783 -0
  253. package/src/components/autocomplete/Autocomplete.vue +966 -0
  254. package/src/components/autocomplete/__snapshots__/Autocomplete.spec.ts.snap +21 -0
  255. package/src/components/autocomplete/index.ts +16 -0
  256. package/src/components/breadcrumb/Breadcrumb.spec.ts +65 -0
  257. package/src/components/breadcrumb/Breadcrumb.vue +42 -0
  258. package/src/components/breadcrumb/BreadcrumbItem.spec.ts +74 -0
  259. package/src/components/breadcrumb/BreadcrumbItem.vue +34 -0
  260. package/src/components/breadcrumb/__snapshots__/Breadcrumb.spec.ts.snap +7 -0
  261. package/src/components/breadcrumb/__snapshots__/BreadcrumbItem.spec.ts.snap +3 -0
  262. package/src/components/breadcrumb/index.ts +19 -0
  263. package/src/components/button/Button.spec.ts +117 -0
  264. package/src/components/button/Button.vue +112 -0
  265. package/src/components/button/__snapshots__/Button.spec.ts.snap +9 -0
  266. package/src/components/button/index.ts +16 -0
  267. package/src/components/carousel/Carousel.spec.ts +304 -0
  268. package/src/components/carousel/Carousel.vue +389 -0
  269. package/src/components/carousel/CarouselItem.spec.ts +105 -0
  270. package/src/components/carousel/CarouselItem.vue +38 -0
  271. package/src/components/carousel/CarouselList.spec.ts +172 -0
  272. package/src/components/carousel/CarouselList.vue +364 -0
  273. package/src/components/carousel/__snapshots__/Carousel.spec.ts.snap +19 -0
  274. package/src/components/carousel/__snapshots__/CarouselItem.spec.ts.snap +7 -0
  275. package/src/components/carousel/__snapshots__/CarouselList.spec.ts.snap +36 -0
  276. package/src/components/carousel/index.ts +23 -0
  277. package/src/components/carousel/types.ts +17 -0
  278. package/src/components/checkbox/Checkbox.spec.ts +40 -0
  279. package/src/components/checkbox/Checkbox.vue +63 -0
  280. package/src/components/checkbox/CheckboxButton.spec.ts +46 -0
  281. package/src/components/checkbox/CheckboxButton.vue +59 -0
  282. package/src/components/checkbox/__snapshots__/Checkbox.spec.ts.snap +9 -0
  283. package/src/components/checkbox/__snapshots__/CheckboxButton.spec.ts.snap +3 -0
  284. package/src/components/checkbox/index.ts +20 -0
  285. package/src/components/clockpicker/Clockpicker.spec.ts +161 -0
  286. package/src/components/clockpicker/Clockpicker.vue +311 -0
  287. package/src/components/clockpicker/ClockpickerFace.spec.ts +99 -0
  288. package/src/components/clockpicker/ClockpickerFace.vue +272 -0
  289. package/src/components/clockpicker/__snapshots__/Clockpicker.spec.ts.snap +36 -0
  290. package/src/components/clockpicker/__snapshots__/ClockpickerFace.spec.ts.snap +9 -0
  291. package/src/components/clockpicker/index.ts +16 -0
  292. package/src/components/collapse/Collapse.spec.ts +106 -0
  293. package/src/components/collapse/Collapse.vue +98 -0
  294. package/src/components/collapse/__snapshots__/Collapse.spec.ts.snap +10 -0
  295. package/src/components/collapse/index.ts +16 -0
  296. package/src/components/colorpicker/Colorpicker.spec.ts +22 -0
  297. package/src/components/colorpicker/Colorpicker.vue +416 -0
  298. package/src/components/colorpicker/ColorpickerAlphaSlider.spec.ts +17 -0
  299. package/src/components/colorpicker/ColorpickerAlphaSlider.vue +205 -0
  300. package/src/components/colorpicker/ColorpickerHSLRepresentationSquare.spec.ts +23 -0
  301. package/src/components/colorpicker/ColorpickerHSLRepresentationSquare.vue +380 -0
  302. package/src/components/colorpicker/ColorpickerHSLRepresentationTriangle.spec.ts +23 -0
  303. package/src/components/colorpicker/ColorpickerHSLRepresentationTriangle.vue +456 -0
  304. package/src/components/colorpicker/__snapshots__/Colorpicker.spec.ts.snap +77 -0
  305. package/src/components/colorpicker/__snapshots__/ColorpickerAlphaSlider.spec.ts.snap +9 -0
  306. package/src/components/colorpicker/__snapshots__/ColorpickerHSLRepresentationSquare.spec.ts.snap +12 -0
  307. package/src/components/colorpicker/__snapshots__/ColorpickerHSLRepresentationTriangle.spec.ts.snap +36 -0
  308. package/src/components/colorpicker/index.ts +16 -0
  309. package/src/components/datepicker/Datepicker.spec.ts +482 -0
  310. package/src/components/datepicker/Datepicker.vue +908 -0
  311. package/src/components/datepicker/DatepickerMonth.spec.ts +346 -0
  312. package/src/components/datepicker/DatepickerMonth.vue +444 -0
  313. package/src/components/datepicker/DatepickerTable.spec.ts +290 -0
  314. package/src/components/datepicker/DatepickerTable.vue +398 -0
  315. package/src/components/datepicker/DatepickerTableRow.spec.ts +300 -0
  316. package/src/components/datepicker/DatepickerTableRow.vue +416 -0
  317. package/src/components/datepicker/__snapshots__/Datepicker.spec.ts.snap +54 -0
  318. package/src/components/datepicker/__snapshots__/DatepickerMonth.spec.ts.snap +33 -0
  319. package/src/components/datepicker/__snapshots__/DatepickerTable.spec.ts.snap +16 -0
  320. package/src/components/datepicker/__snapshots__/DatepickerTableRow.spec.ts.snap +23 -0
  321. package/src/components/datepicker/index.ts +17 -0
  322. package/src/components/datepicker/types.ts +41 -0
  323. package/src/components/datetimepicker/Datetimepicker.spec.ts +132 -0
  324. package/src/components/datetimepicker/Datetimepicker.vue +491 -0
  325. package/src/components/datetimepicker/index.ts +16 -0
  326. package/src/components/dialog/Dialog.spec.ts +108 -0
  327. package/src/components/dialog/Dialog.vue +300 -0
  328. package/src/components/dialog/index.ts +169 -0
  329. package/src/components/dropdown/Dropdown.spec.ts +229 -0
  330. package/src/components/dropdown/Dropdown.vue +491 -0
  331. package/src/components/dropdown/DropdownItem.spec.ts +78 -0
  332. package/src/components/dropdown/DropdownItem.vue +112 -0
  333. package/src/components/dropdown/__snapshots__/Dropdown.spec.ts.snap +15 -0
  334. package/src/components/dropdown/__snapshots__/DropdownItem.spec.ts.snap +3 -0
  335. package/src/components/dropdown/index.ts +20 -0
  336. package/src/components/field/Field.spec.ts +324 -0
  337. package/src/components/field/Field.vue +316 -0
  338. package/src/components/field/FieldBody.spec.ts +96 -0
  339. package/src/components/field/FieldBody.vue +74 -0
  340. package/src/components/field/__snapshots__/Field.spec.ts.snap +8 -0
  341. package/src/components/field/__snapshots__/FieldBody.spec.ts.snap +3 -0
  342. package/src/components/field/index.ts +16 -0
  343. package/src/components/icon/Icon.spec.ts +142 -0
  344. package/src/components/icon/Icon.vue +120 -0
  345. package/src/components/icon/__snapshots__/Icon.spec.ts.snap +3 -0
  346. package/src/components/icon/index.ts +17 -0
  347. package/src/components/image/Image.spec.ts +218 -0
  348. package/src/components/image/Image.vue +358 -0
  349. package/src/components/image/__snapshots__/Image.spec.ts.snap +37 -0
  350. package/src/components/image/index.ts +16 -0
  351. package/src/components/index.ts +179 -0
  352. package/src/components/input/Input.spec.ts +396 -0
  353. package/src/components/input/Input.vue +335 -0
  354. package/src/components/input/__snapshots__/Input.spec.ts.snap +9 -0
  355. package/src/components/input/index.ts +17 -0
  356. package/src/components/loading/Loading.spec.ts +151 -0
  357. package/src/components/loading/Loading.vue +135 -0
  358. package/src/components/loading/__snapshots__/Loading.spec.ts.snap +10 -0
  359. package/src/components/loading/index.ts +91 -0
  360. package/src/components/menu/Menu.spec.ts +21 -0
  361. package/src/components/menu/Menu.vue +31 -0
  362. package/src/components/menu/MenuItem.spec.ts +92 -0
  363. package/src/components/menu/MenuItem.vue +168 -0
  364. package/src/components/menu/MenuItemContainerMixin.ts +72 -0
  365. package/src/components/menu/MenuList.spec.ts +35 -0
  366. package/src/components/menu/MenuList.vue +47 -0
  367. package/src/components/menu/__snapshots__/Menu.spec.ts.snap +3 -0
  368. package/src/components/menu/__snapshots__/MenuItem.spec.ts.snap +9 -0
  369. package/src/components/menu/__snapshots__/MenuList.spec.ts.snap +8 -0
  370. package/src/components/menu/index.ts +25 -0
  371. package/src/components/message/Message.spec.ts +30 -0
  372. package/src/components/message/Message.vue +73 -0
  373. package/src/components/message/__snapshots__/Message.spec.ts.snap +11 -0
  374. package/src/components/message/index.ts +15 -0
  375. package/src/components/modal/Modal.spec.ts +167 -0
  376. package/src/components/modal/Modal.vue +335 -0
  377. package/src/components/modal/__snapshots__/Modal.spec.ts.snap +10 -0
  378. package/src/components/modal/index.ts +107 -0
  379. package/src/components/navbar/NavBar.spec.ts +78 -0
  380. package/src/components/navbar/NavBarBurger.spec.ts +30 -0
  381. package/src/components/navbar/NavBarItem.spec.ts +92 -0
  382. package/src/components/navbar/Navbar.vue +274 -0
  383. package/src/components/navbar/NavbarBurger.vue +29 -0
  384. package/src/components/navbar/NavbarDropdown.spec.ts +84 -0
  385. package/src/components/navbar/NavbarDropdown.vue +115 -0
  386. package/src/components/navbar/NavbarItem.vue +97 -0
  387. package/src/components/navbar/__snapshots__/NavBar.spec.ts.snap +11 -0
  388. package/src/components/navbar/__snapshots__/NavBarBurger.spec.ts.snap +3 -0
  389. package/src/components/navbar/__snapshots__/NavBarItem.spec.ts.snap +3 -0
  390. package/src/components/navbar/__snapshots__/NavbarDropdown.spec.ts.snap +7 -0
  391. package/src/components/navbar/index.ts +22 -0
  392. package/src/components/notification/Notification.spec.ts +21 -0
  393. package/src/components/notification/Notification.vue +77 -0
  394. package/src/components/notification/NotificationNotice.vue +76 -0
  395. package/src/components/notification/__snapshots__/Notification.spec.ts.snap +10 -0
  396. package/src/components/notification/index.ts +121 -0
  397. package/src/components/numberinput/Numberinput.spec.ts +445 -0
  398. package/src/components/numberinput/Numberinput.vue +372 -0
  399. package/src/components/numberinput/index.ts +16 -0
  400. package/src/components/pagination/Pagination.spec.ts +94 -0
  401. package/src/components/pagination/Pagination.vue +434 -0
  402. package/src/components/pagination/PaginationButton.spec.ts +42 -0
  403. package/src/components/pagination/PaginationButton.vue +59 -0
  404. package/src/components/pagination/__snapshots__/Pagination.spec.ts.snap +22 -0
  405. package/src/components/pagination/__snapshots__/PaginationButton.spec.ts.snap +3 -0
  406. package/src/components/pagination/index.ts +19 -0
  407. package/src/components/pagination/types.ts +11 -0
  408. package/src/components/progress/Progress.spec.ts +81 -0
  409. package/src/components/progress/Progress.vue +168 -0
  410. package/src/components/progress/ProgressBar.spec.ts +45 -0
  411. package/src/components/progress/ProgressBar.vue +74 -0
  412. package/src/components/progress/__snapshots__/Progress.spec.ts.snap +7 -0
  413. package/src/components/progress/__snapshots__/ProgressBar.spec.ts.snap +7 -0
  414. package/src/components/progress/index.ts +18 -0
  415. package/src/components/radio/Radio.spec.ts +40 -0
  416. package/src/components/radio/Radio.vue +35 -0
  417. package/src/components/radio/RadioButton.spec.ts +40 -0
  418. package/src/components/radio/RadioButton.vue +69 -0
  419. package/src/components/radio/__snapshots__/Radio.spec.ts.snap +3 -0
  420. package/src/components/radio/__snapshots__/RadioButton.spec.ts.snap +3 -0
  421. package/src/components/radio/index.ts +18 -0
  422. package/src/components/rate/Rate.spec.ts +90 -0
  423. package/src/components/rate/Rate.vue +158 -0
  424. package/src/components/rate/index.ts +15 -0
  425. package/src/components/select/Select.spec.ts +74 -0
  426. package/src/components/select/Select.vue +118 -0
  427. package/src/components/select/__snapshots__/Select.spec.ts.snap +7 -0
  428. package/src/components/select/index.ts +16 -0
  429. package/src/components/sidebar/Sidebar.spec.ts +107 -0
  430. package/src/components/sidebar/Sidebar.vue +316 -0
  431. package/src/components/sidebar/__snapshots__/Sidebar.spec.ts.snap +25 -0
  432. package/src/components/sidebar/index.ts +16 -0
  433. package/src/components/skeleton/Skeleton.spec.ts +16 -0
  434. package/src/components/skeleton/Skeleton.vue +98 -0
  435. package/src/components/skeleton/__snapshots__/Skeleton.spec.ts.snap +7 -0
  436. package/src/components/skeleton/index.ts +18 -0
  437. package/src/components/slider/Slider.spec.ts +115 -0
  438. package/src/components/slider/Slider.vue +374 -0
  439. package/src/components/slider/SliderThumb.spec.ts +176 -0
  440. package/src/components/slider/SliderThumb.vue +251 -0
  441. package/src/components/slider/SliderTick.spec.ts +33 -0
  442. package/src/components/slider/SliderTick.vue +50 -0
  443. package/src/components/slider/__snapshots__/Slider.spec.ts.snap +12 -0
  444. package/src/components/slider/__snapshots__/SliderThumb.spec.ts.snap +16 -0
  445. package/src/components/slider/__snapshots__/SliderTick.spec.ts.snap +7 -0
  446. package/src/components/slider/index.ts +19 -0
  447. package/src/components/slider/types.ts +34 -0
  448. package/src/components/snackbar/Snackbar.spec.ts +35 -0
  449. package/src/components/snackbar/Snackbar.vue +88 -0
  450. package/src/components/snackbar/__snapshots__/Snackbar.spec.ts.snap +12 -0
  451. package/src/components/snackbar/index.ts +118 -0
  452. package/src/components/steps/StepItem.spec.ts +114 -0
  453. package/src/components/steps/StepItem.vue +26 -0
  454. package/src/components/steps/Steps.spec.ts +125 -0
  455. package/src/components/steps/Steps.vue +273 -0
  456. package/src/components/steps/__snapshots__/StepItem.spec.ts.snap +7 -0
  457. package/src/components/steps/__snapshots__/Steps.spec.ts.snap +40 -0
  458. package/src/components/steps/index.ts +19 -0
  459. package/src/components/switch/Switch.spec.ts +74 -0
  460. package/src/components/switch/Switch.vue +146 -0
  461. package/src/components/switch/__snapshots__/Switch.spec.ts.snap +3 -0
  462. package/src/components/switch/index.ts +16 -0
  463. package/src/components/table/Table.spec.ts +622 -0
  464. package/src/components/table/Table.vue +1770 -0
  465. package/src/components/table/TableColumn.spec.ts +85 -0
  466. package/src/components/table/TableColumn.vue +140 -0
  467. package/src/components/table/TableMobileSort.spec.ts +47 -0
  468. package/src/components/table/TableMobileSort.vue +236 -0
  469. package/src/components/table/TablePagination.vue +86 -0
  470. package/src/components/table/__snapshots__/Table.spec.ts.snap +24 -0
  471. package/src/components/table/__snapshots__/TableMobileSort.spec.ts.snap +12 -0
  472. package/src/components/table/index.ts +32 -0
  473. package/src/components/table/mockTableColumn.ts +110 -0
  474. package/src/components/table/types.ts +110 -0
  475. package/src/components/tabs/TabItem.spec.ts +203 -0
  476. package/src/components/tabs/TabItem.vue +19 -0
  477. package/src/components/tabs/Tabs.spec.ts +122 -0
  478. package/src/components/tabs/Tabs.vue +204 -0
  479. package/src/components/tabs/__snapshots__/TabItem.spec.ts.snap +7 -0
  480. package/src/components/tabs/__snapshots__/Tabs.spec.ts.snap +33 -0
  481. package/src/components/tabs/index.ts +19 -0
  482. package/src/components/tag/Tag.spec.ts +32 -0
  483. package/src/components/tag/Tag.vue +132 -0
  484. package/src/components/tag/Taglist.spec.ts +21 -0
  485. package/src/components/tag/Taglist.vue +16 -0
  486. package/src/components/tag/__snapshots__/Tag.spec.ts.snap +6 -0
  487. package/src/components/tag/__snapshots__/Taglist.spec.ts.snap +3 -0
  488. package/src/components/tag/index.ts +19 -0
  489. package/src/components/taginput/Taginput.spec.ts +132 -0
  490. package/src/components/taginput/Taginput.vue +415 -0
  491. package/src/components/taginput/__snapshots__/Taginput.spec.ts.snap +10 -0
  492. package/src/components/taginput/index.ts +16 -0
  493. package/src/components/timepicker/Timepicker.spec.ts +108 -0
  494. package/src/components/timepicker/Timepicker.vue +183 -0
  495. package/src/components/timepicker/__snapshots__/Timepicker.spec.ts.snap +41 -0
  496. package/src/components/timepicker/index.ts +17 -0
  497. package/src/components/toast/Toast.spec.ts +74 -0
  498. package/src/components/toast/Toast.vue +46 -0
  499. package/src/components/toast/__snapshots__/Toast.spec.ts.snap +10 -0
  500. package/src/components/toast/index.ts +120 -0
  501. package/src/components/tooltip/Tooltip.spec.ts +64 -0
  502. package/src/components/tooltip/Tooltip.vue +393 -0
  503. package/src/components/tooltip/__snapshots__/Tooltip.spec.ts.snap +12 -0
  504. package/src/components/tooltip/index.ts +16 -0
  505. package/src/components/upload/Upload.spec.ts +62 -0
  506. package/src/components/upload/Upload.vue +188 -0
  507. package/src/components/upload/__snapshots__/Upload.spec.ts.snap +3 -0
  508. package/src/components/upload/index.ts +15 -0
  509. package/src/directives/clickOutside.ts +113 -0
  510. package/src/directives/trapFocus.ts +61 -0
  511. package/src/index.ts +43 -0
  512. package/src/scss/buefy-build.scss +6 -0
  513. package/src/scss/buefy.scss +39 -0
  514. package/src/scss/components/_autocomplete.scss +39 -0
  515. package/src/scss/components/_carousel.scss +204 -0
  516. package/src/scss/components/_checkbox.scss +106 -0
  517. package/src/scss/components/_clockpicker.scss +283 -0
  518. package/src/scss/components/_collapse.scss +9 -0
  519. package/src/scss/components/_colorpicker.scss +283 -0
  520. package/src/scss/components/_datepicker.scss +220 -0
  521. package/src/scss/components/_dialog.scss +54 -0
  522. package/src/scss/components/_dropdown.scss +143 -0
  523. package/src/scss/components/_form.scss +309 -0
  524. package/src/scss/components/_icon.scss +16 -0
  525. package/src/scss/components/_image.scss +20 -0
  526. package/src/scss/components/_loading.scss +45 -0
  527. package/src/scss/components/_menu.scss +11 -0
  528. package/src/scss/components/_message.scss +16 -0
  529. package/src/scss/components/_modal.scss +37 -0
  530. package/src/scss/components/_navbar.scss +22 -0
  531. package/src/scss/components/_notices.scss +144 -0
  532. package/src/scss/components/_notification.scss +8 -0
  533. package/src/scss/components/_numberinput.scss +33 -0
  534. package/src/scss/components/_pagination.scss +63 -0
  535. package/src/scss/components/_progress.scss +105 -0
  536. package/src/scss/components/_radio.scss +123 -0
  537. package/src/scss/components/_rate.scss +72 -0
  538. package/src/scss/components/_select.scss +38 -0
  539. package/src/scss/components/_sidebar.scss +107 -0
  540. package/src/scss/components/_skeleton.scss +66 -0
  541. package/src/scss/components/_slider.scss +162 -0
  542. package/src/scss/components/_steps.scss +491 -0
  543. package/src/scss/components/_switch.scss +214 -0
  544. package/src/scss/components/_table.scss +322 -0
  545. package/src/scss/components/_tabs.scss +197 -0
  546. package/src/scss/components/_tag.scss +36 -0
  547. package/src/scss/components/_taginput.scss +73 -0
  548. package/src/scss/components/_timepicker.scss +73 -0
  549. package/src/scss/components/_tooltip.scss +192 -0
  550. package/src/scss/components/_upload.scss +62 -0
  551. package/src/scss/utils/_all.scss +4 -0
  552. package/src/scss/utils/_animations.scss +183 -0
  553. package/src/scss/utils/_functions.scss +49 -0
  554. package/src/scss/utils/_helpers.scss +6 -0
  555. package/src/scss/utils/_variables-ext.scss +2 -0
  556. package/src/scss/utils/_variables.scss +16 -0
  557. package/src/utils/CheckRadioMixin.spec.ts +28 -0
  558. package/src/utils/CheckRadioMixin.ts +61 -0
  559. package/src/utils/CompatFallthroughMixin.ts +34 -0
  560. package/src/utils/ConfigComponent.ts +12 -0
  561. package/src/utils/FormElementMixin.spec.ts +41 -0
  562. package/src/utils/FormElementMixin.ts +206 -0
  563. package/src/utils/InjectedChildMixin.ts +139 -0
  564. package/src/utils/MessageMixin.spec.ts +51 -0
  565. package/src/utils/MessageMixin.ts +138 -0
  566. package/src/utils/NoticeMixin.spec.ts +55 -0
  567. package/src/utils/NoticeMixin.ts +181 -0
  568. package/src/utils/ProvideInjectTypes.ts +20 -0
  569. package/src/utils/ProviderParentMixin.ts +105 -0
  570. package/src/utils/SlotComponent.spec.ts +55 -0
  571. package/src/utils/SlotComponent.ts +38 -0
  572. package/src/utils/TabbedChildMixin.ts +96 -0
  573. package/src/utils/TabbedMixin.ts +166 -0
  574. package/src/utils/TabbedTypes.ts +33 -0
  575. package/src/utils/TimepickerMixin.spec.ts +75 -0
  576. package/src/utils/TimepickerMixin.ts +767 -0
  577. package/src/utils/color.spec.ts +55 -0
  578. package/src/utils/color.ts +507 -0
  579. package/src/utils/config.spec.ts +11 -0
  580. package/src/utils/config.ts +619 -0
  581. package/src/utils/debounce.spec.ts +52 -0
  582. package/src/utils/debounce.ts +20 -0
  583. package/src/utils/helpers.spec.ts +257 -0
  584. package/src/utils/helpers.ts +527 -0
  585. package/src/utils/icons.ts +73 -0
  586. package/src/utils/plugins.ts +20 -0
  587. package/src/utils/ssr.ts +6 -0
  588. package/src/utils/vue-augmentation.ts +35 -0
@@ -0,0 +1,139 @@
1
+ import type { ComponentPublicInstance, DefineComponent, ExtractPropTypes, PropType } from 'vue'
2
+
3
+ import { hasFlag } from './helpers'
4
+ import type { ProviderParent } from './ProvideInjectTypes'
5
+
6
+ const sorted = 1
7
+ const optional = 2
8
+
9
+ export const Sorted = sorted
10
+ export const Optional = optional
11
+
12
+ export type FeatureFlags = 0 | typeof Sorted | typeof Optional
13
+
14
+ /* eslint-disable @typescript-eslint/ban-types */
15
+ // conditional props of InjectedChildMixin
16
+ export type InjectedChildMixinPropOptions<
17
+ Flags extends FeatureFlags,
18
+ IsSorted = Flags extends typeof Sorted ? true : false
19
+ > = {
20
+ value: {
21
+ type: PropType<string | null>,
22
+ default: null
23
+ }
24
+ } & (IsSorted extends true ? { order: PropType<number> } : {})
25
+
26
+ // conditional data fields of InjectedChildMixin
27
+ export type InjectedChildMixinData<
28
+ Flags extends FeatureFlags,
29
+ Parent extends ProviderParent,
30
+ IsSorted = Flags extends typeof Sorted ? true : false,
31
+ IsOptional = Flags extends typeof Optional ? true : false
32
+ > = (IsSorted extends true ? { dynamicIndex?: number } : {})
33
+ // mocks the injected `parent` with a readonly data field,
34
+ // because `DefineComponent` does not expose injected fields
35
+ // FIXME: why an empty string? → see the initial value of `parent`
36
+ & (IsOptional extends true ? { parent: Parent | '' } : { parent: Parent })
37
+
38
+ // conditional computed fields of InjectedChildMixin
39
+ export type InjectedChildMixinComputed<
40
+ Flags extends FeatureFlags,
41
+ IsSorted extends boolean = Flags extends typeof Sorted ? true : false
42
+ > = {
43
+ uniqueValue(): string | number
44
+ } & (IsSorted extends true ? { index(): number } : {})
45
+
46
+ export type InjectedChildMixin<
47
+ Flags extends FeatureFlags,
48
+ Parent extends ProviderParent
49
+ > = DefineComponent<
50
+ InjectedChildMixinPropOptions<Flags>, // PropsOrPropOptions
51
+ {}, // RawBindings
52
+ InjectedChildMixinData<Flags, Parent>,
53
+ InjectedChildMixinComputed<Flags>,
54
+ {} // M(ethods). arbitrary field is mapped to a Function if omitted.
55
+ >
56
+
57
+ type InjectedChildMixinInstance<
58
+ Flags extends FeatureFlags,
59
+ Parent extends ProviderParent
60
+ > = ComponentPublicInstance<
61
+ ExtractPropTypes<InjectedChildMixinPropOptions<Flags>>, // P(rops)
62
+ {}, // RawBindings
63
+ InjectedChildMixinData<Flags, Parent>, // D(ata)
64
+ InjectedChildMixinComputed<Flags>, // C(omputed)
65
+ {} // M(ethods). arbitrary field is mapped to a Function if omitted.
66
+ >
67
+ /* eslint-enable @typescript-eslint/ban-types */
68
+
69
+ export default <
70
+ Flags extends FeatureFlags = FeatureFlags,
71
+ Parent extends ProviderParent = ProviderParent
72
+ >(parentItemName: string, flags?: Flags): InjectedChildMixin<Flags, Parent> => {
73
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
74
+ const mixin: any = {
75
+ // FIXME: initializing `parent` with an empty string does not make
76
+ // sense at all, but some code supposes that `parent` is non-null.
77
+ // so I leave it as is for now.
78
+ inject: { parent: { from: 'b' + parentItemName, default: '' } },
79
+ props: {
80
+ // if `value` is non-null, it must be unique among all the siblings.
81
+ // see `uniqueValue`
82
+ value: {
83
+ type: String,
84
+ default: null
85
+ }
86
+ },
87
+ computed: {
88
+ // `ProviderParentMixin` uses `uniqueValue` computed value to
89
+ // identify the child in its `childItems` collection.
90
+ // so the value must be unique among all the siblings.
91
+ // falls back to the `uid` internal field to ensure uniqueness.
92
+ uniqueValue() {
93
+ return this.value != null ? this.value : this.$.uid
94
+ }
95
+ } as ThisType<InjectedChildMixinInstance<FeatureFlags, Parent>>,
96
+ created() {
97
+ if (!this.parent) {
98
+ if (flags !== undefined && !hasFlag(flags, optional)) {
99
+ throw new Error('You should wrap ' + this.$options.name + ' in a ' + parentItemName)
100
+ }
101
+ } else if (this.parent._registerItem) {
102
+ this.parent._registerItem(this)
103
+ }
104
+ },
105
+ beforeUnmount() {
106
+ if (this.parent && this.parent._unregisterItem) {
107
+ this.parent._unregisterItem(this)
108
+ }
109
+ }
110
+ }
111
+ if (flags !== undefined && hasFlag(flags, sorted)) {
112
+ // a user can explicitly specify the `order` prop to keep the order of
113
+ // children.
114
+ // I can no longer rely on automatic indexing of children, because I
115
+ // could not figure out how to calculate the index of a child in its
116
+ // parent on Vue 3.
117
+ // incomplete dynamic indexing is still available if any child is never
118
+ // unmounted; e.g., not switched with `v-if`
119
+ mixin.props = {
120
+ ...mixin.props,
121
+ order: {
122
+ type: Number,
123
+ required: false
124
+ }
125
+ }
126
+ mixin.data = () => {
127
+ return {
128
+ dynamicIndex: undefined
129
+ }
130
+ }
131
+ mixin.computed = {
132
+ ...mixin.computed,
133
+ index() {
134
+ return this.order != null ? this.order : this.dynamicIndex
135
+ }
136
+ }
137
+ }
138
+ return mixin
139
+ }
@@ -0,0 +1,51 @@
1
+ import { defineComponent } from 'vue'
2
+ import { shallowMount } from '@vue/test-utils'
3
+ import type { VueWrapper } from '@vue/test-utils'
4
+ import { beforeEach, describe, expect, it, vi } from 'vitest'
5
+ import MessageMixin from '@utils/MessageMixin'
6
+
7
+ describe('MessageMixin', () => {
8
+ HTMLElement.prototype.insertAdjacentElement = vi.fn()
9
+
10
+ const component = defineComponent({
11
+ mixins: [MessageMixin],
12
+ template: '<div class="b-component"></div>'
13
+ })
14
+ let wrapper: VueWrapper<InstanceType<typeof component>>
15
+
16
+ beforeEach(() => {
17
+ wrapper = shallowMount(component, {
18
+ attachTo: document.body
19
+ })
20
+ })
21
+
22
+ it('is active', () => {
23
+ expect(wrapper.vm.isActive).toBeTruthy()
24
+ })
25
+
26
+ it('should set isActive when active is set', async () => {
27
+ await wrapper.setProps({ modelValue: false })
28
+ expect(wrapper.vm.isActive).toBeFalsy()
29
+ })
30
+
31
+ it('should return correct icon depending on type', async () => {
32
+ const expected = {
33
+ 'is-info': 'information',
34
+ 'is-success': 'check-circle',
35
+ 'is-warning': 'alert',
36
+ 'is-danger': 'alert-circle',
37
+ other: null
38
+ }
39
+ for (const [key, value] of Object.entries(expected)) {
40
+ await wrapper.setProps({ type: key })
41
+ expect(wrapper.vm.computedIcon).toEqual(value)
42
+ }
43
+ })
44
+
45
+ it('should reset isActive and emit close event on close', async () => {
46
+ wrapper.vm.close()
47
+ await wrapper.vm.$nextTick()
48
+ expect(wrapper.vm.isActive).toBeFalsy()
49
+ expect(wrapper.emitted().close).toBeTruthy()
50
+ })
51
+ })
@@ -0,0 +1,138 @@
1
+ import { defineComponent } from 'vue'
2
+
3
+ export default defineComponent({
4
+ props: {
5
+ modelValue: {
6
+ type: Boolean,
7
+ default: true
8
+ },
9
+ title: String,
10
+ closable: {
11
+ type: Boolean,
12
+ default: true
13
+ },
14
+ message: String,
15
+ type: String,
16
+ hasIcon: Boolean,
17
+ size: String,
18
+ icon: String,
19
+ iconPack: String,
20
+ iconSize: String,
21
+ autoClose: {
22
+ type: Boolean,
23
+ default: false
24
+ },
25
+ duration: {
26
+ type: Number,
27
+ default: 2000
28
+ },
29
+ progressBar: {
30
+ type: Boolean,
31
+ default: false
32
+ }
33
+ },
34
+ emits: {
35
+ click: () => true,
36
+ close: () => true,
37
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
38
+ 'update:modelValue': (value: boolean) => true
39
+ },
40
+ data() {
41
+ return {
42
+ isActive: this.modelValue,
43
+ remainingTime: this.duration / 1000, // in seconds
44
+ newIconSize: this.iconSize || this.size || 'is-large',
45
+ timer: undefined as ReturnType<typeof setTimeout> | undefined
46
+ }
47
+ },
48
+ computed: {
49
+ /*
50
+ * Icon name (MDI) based on type.
51
+ */
52
+ computedIcon() {
53
+ if (this.icon) {
54
+ return this.icon
55
+ }
56
+ switch (this.type) {
57
+ case 'is-info':
58
+ return 'information'
59
+ case 'is-success':
60
+ return 'check-circle'
61
+ case 'is-warning':
62
+ return 'alert'
63
+ case 'is-danger':
64
+ return 'alert-circle'
65
+ default:
66
+ return null
67
+ }
68
+ }
69
+ },
70
+ watch: {
71
+ modelValue(value) {
72
+ this.isActive = value
73
+ },
74
+ isActive(value) {
75
+ if (value) {
76
+ this.setAutoClose()
77
+ this.setDurationProgress()
78
+ } else {
79
+ if (this.timer) {
80
+ clearTimeout(this.timer)
81
+ }
82
+ }
83
+ }
84
+ },
85
+ methods: {
86
+ /*
87
+ * Close the Message and emit events.
88
+ */
89
+ close() {
90
+ this.isActive = false
91
+ this.resetDurationProgress()
92
+ this.$emit('close')
93
+ this.$emit('update:modelValue', false)
94
+ },
95
+ click() {
96
+ this.$emit('click')
97
+ },
98
+ /*
99
+ * Set timer to auto close message
100
+ */
101
+ setAutoClose() {
102
+ if (this.autoClose) {
103
+ this.timer = setTimeout(() => {
104
+ if (this.isActive) {
105
+ this.close()
106
+ }
107
+ }, this.duration)
108
+ }
109
+ },
110
+ setDurationProgress() {
111
+ if (this.progressBar || this.autoClose) {
112
+ /*
113
+ * Runs every one second to set the duration passed before
114
+ * the alert will auto close to show it in the progress bar (Remaining Time)
115
+ */
116
+ this.$buefy.globalNoticeInterval = setInterval(() => {
117
+ if (this.remainingTime !== 0) {
118
+ this.remainingTime -= 1
119
+ } else {
120
+ this.resetDurationProgress()
121
+ }
122
+ }, 1000)
123
+ }
124
+ },
125
+ resetDurationProgress() {
126
+ /*
127
+ * Wait until the component get closed and then reset
128
+ **/
129
+ setTimeout(() => {
130
+ this.remainingTime = this.duration / 1000
131
+ clearInterval(this.$buefy.globalNoticeInterval)
132
+ }, 100)
133
+ }
134
+ },
135
+ mounted() {
136
+ this.setAutoClose()
137
+ }
138
+ })
@@ -0,0 +1,55 @@
1
+ import { defineComponent } from 'vue'
2
+ import { shallowMount } from '@vue/test-utils'
3
+ import type { VueWrapper } from '@vue/test-utils'
4
+ import { beforeEach, describe, expect, it, vi } from 'vitest'
5
+ import NoticeMixin from '@utils/NoticeMixin'
6
+
7
+ describe('NoticeMixin', () => {
8
+ HTMLElement.prototype.insertAdjacentElement = vi.fn()
9
+
10
+ const component = defineComponent({
11
+ mixins: [NoticeMixin],
12
+ template: '<div class="b-component"></div>'
13
+ })
14
+ let wrapper: VueWrapper<InstanceType<typeof component>>
15
+
16
+ beforeEach(() => {
17
+ wrapper = shallowMount(component, {
18
+ attachTo: document.body
19
+ })
20
+ })
21
+
22
+ it('is active', () => {
23
+ expect(wrapper.vm.isActive).toBeTruthy()
24
+ })
25
+
26
+ it('returns correct transition depending on position', async () => {
27
+ const topTransition = {
28
+ enter: 'fadeInDown',
29
+ leave: 'fadeOut'
30
+ }
31
+ const bottomTransition = {
32
+ enter: 'fadeInUp',
33
+ leave: 'fadeOut'
34
+ }
35
+ const expected = [
36
+ ['is-top', topTransition],
37
+ ['is-top-right', topTransition],
38
+ ['is-top-left', topTransition],
39
+ ['is-bottom', bottomTransition],
40
+ ['is-bottom-right', bottomTransition],
41
+ ['is-bottom-left', bottomTransition]
42
+ ] as const
43
+ for (const [key, value] of expected) {
44
+ await wrapper.setProps({ position: key })
45
+ expect(wrapper.vm.transition).toEqual(value)
46
+ }
47
+
48
+ expect(wrapper.vm.isActive).toBeTruthy()
49
+ })
50
+
51
+ it('reset isActive on close', () => {
52
+ wrapper.vm.close()
53
+ expect(wrapper.vm.isActive).toBeFalsy()
54
+ })
55
+ })
@@ -0,0 +1,181 @@
1
+ import { defineComponent } from 'vue'
2
+ import type { PropType } from 'vue'
3
+ import config, { NOTICE_POSITIONS } from './config'
4
+ import type { NoticePosition } from './config'
5
+ import { removeElement } from './helpers'
6
+
7
+ export default defineComponent({
8
+ props: {
9
+ type: {
10
+ type: String,
11
+ default: 'is-dark'
12
+ },
13
+ message: [String, Array] as PropType<string | string[]>,
14
+ duration: Number,
15
+ queue: {
16
+ type: Boolean,
17
+ default: undefined
18
+ },
19
+ indefinite: {
20
+ type: Boolean,
21
+ default: false
22
+ },
23
+ pauseOnHover: {
24
+ type: Boolean,
25
+ default: false
26
+ },
27
+ position: {
28
+ type: String as PropType<NoticePosition>,
29
+ default: 'is-top',
30
+ validator(value: unknown): value is NoticePosition {
31
+ return NOTICE_POSITIONS.indexOf(value as NoticePosition) > -1
32
+ }
33
+ },
34
+ container: String
35
+ },
36
+ emits: {
37
+ click: () => true,
38
+ close: () => true
39
+ },
40
+ data() {
41
+ return {
42
+ isActive: false,
43
+ isPaused: false,
44
+ parentTop: null as Element | null,
45
+ parentBottom: null as Element | null,
46
+ newContainer: this.container || config.defaultContainerElement,
47
+ timer: undefined as ReturnType<typeof setTimeout> | undefined,
48
+ // host container should override `newDuration`
49
+ newDuration: this.duration || 0
50
+ }
51
+ },
52
+ computed: {
53
+ correctParent() {
54
+ switch (this.position) {
55
+ case 'is-top-right':
56
+ case 'is-top':
57
+ case 'is-top-left':
58
+ return this.parentTop!
59
+
60
+ case 'is-bottom-right':
61
+ case 'is-bottom':
62
+ case 'is-bottom-left':
63
+ return this.parentBottom!
64
+ default: {
65
+ const exhaustiveCheck: never = this.position
66
+ throw new RangeError(`invalid position: ${exhaustiveCheck}`)
67
+ }
68
+ }
69
+ },
70
+ transition() {
71
+ switch (this.position) {
72
+ case 'is-top-right':
73
+ case 'is-top':
74
+ case 'is-top-left':
75
+ return {
76
+ enter: 'fadeInDown',
77
+ leave: 'fadeOut'
78
+ }
79
+ case 'is-bottom-right':
80
+ case 'is-bottom':
81
+ case 'is-bottom-left':
82
+ return {
83
+ enter: 'fadeInUp',
84
+ leave: 'fadeOut'
85
+ }
86
+ default: {
87
+ const exhaustiveCheck: never = this.position
88
+ throw new RangeError(`invalid position: ${exhaustiveCheck}`)
89
+ }
90
+ }
91
+ }
92
+ },
93
+ methods: {
94
+ pause() {
95
+ if (this.pauseOnHover && !this.indefinite) {
96
+ this.isPaused = true
97
+ clearInterval(this.$buefy.globalNoticeInterval)
98
+ }
99
+ },
100
+ removePause() {
101
+ if (this.pauseOnHover && !this.indefinite) {
102
+ this.isPaused = false
103
+ this.close()
104
+ }
105
+ },
106
+ shouldQueue() {
107
+ const queue = this.queue !== undefined
108
+ ? this.queue
109
+ : config.defaultNoticeQueue
110
+
111
+ if (!queue) return false
112
+
113
+ return (
114
+ this.parentTop!.childElementCount > 0 ||
115
+ this.parentBottom!.childElementCount > 0
116
+ )
117
+ },
118
+ click() {
119
+ this.$emit('click')
120
+ },
121
+ close() {
122
+ if (!this.isPaused) {
123
+ clearTimeout(this.timer)
124
+ this.isActive = false
125
+ this.$emit('close')
126
+
127
+ // Timeout for the animation complete before destroying
128
+ setTimeout(() => {
129
+ removeElement(this.$el)
130
+ }, 150)
131
+ }
132
+ },
133
+
134
+ timeoutCallback() {
135
+ return this.close()
136
+ },
137
+
138
+ showNotice() {
139
+ if (this.shouldQueue()) this.correctParent.innerHTML = ''
140
+ this.correctParent.insertAdjacentElement('afterbegin', this.$el)
141
+ this.isActive = true
142
+
143
+ if (!this.indefinite) {
144
+ this.timer = setTimeout(() => this.timeoutCallback(), this.newDuration)
145
+ }
146
+ },
147
+
148
+ setupContainer() {
149
+ this.parentTop = document.querySelector((this.newContainer ? this.newContainer : 'body') + '>.notices.is-top')
150
+ this.parentBottom = document.querySelector((this.newContainer ? this.newContainer : 'body') + '>.notices.is-bottom')
151
+
152
+ if (this.parentTop && this.parentBottom) return
153
+
154
+ if (!this.parentTop) {
155
+ this.parentTop = document.createElement('div')
156
+ this.parentTop.className = 'notices is-top'
157
+ }
158
+
159
+ if (!this.parentBottom) {
160
+ this.parentBottom = document.createElement('div')
161
+ this.parentBottom.className = 'notices is-bottom'
162
+ }
163
+
164
+ const container = document.querySelector(this.newContainer!) || document.body
165
+
166
+ container.appendChild(this.parentTop)
167
+ container.appendChild(this.parentBottom)
168
+
169
+ if (this.newContainer) {
170
+ this.parentTop.classList.add('has-custom-container')
171
+ this.parentBottom.classList.add('has-custom-container')
172
+ }
173
+ }
174
+ },
175
+ beforeMount() {
176
+ this.setupContainer()
177
+ },
178
+ mounted() {
179
+ this.showNotice()
180
+ }
181
+ })
@@ -0,0 +1,20 @@
1
+ // Common types between `ProviderParentMixin` and `InjectedChildMixin`.
2
+
3
+ // Interface that `InjectedChildMixin` is supposed to implement.
4
+ export interface InjectedChild {
5
+ // `ProviderParent` will use `uniqueValue` to identify the child.
6
+ uniqueValue: string | number
7
+ // `ProviderParent` will use `index` to sort the children.
8
+ index: number
9
+ // `ProviderParent` will set `dynamicIndex` to tell the child the order
10
+ // of its registration.
11
+ dynamicIndex?: number
12
+ }
13
+
14
+ // Interface that `ProviderParentMixin` is supposed to implement.
15
+ export interface ProviderParent {
16
+ // `InjectedChild` has to call `_registerItem` on mount.
17
+ _registerItem(item: InjectedChild): void
18
+ // `InjectedChild` has to call `_unregisterItem` on unmount.
19
+ _unregisterItem(item: InjectedChild): void
20
+ }
@@ -0,0 +1,105 @@
1
+ import type { DefineComponent } from 'vue'
2
+
3
+ import { hasFlag } from './helpers'
4
+ import type { InjectedChild } from './ProvideInjectTypes'
5
+
6
+ const items = 1
7
+ const sorted = 3
8
+
9
+ export const Items = items
10
+ export const Sorted = sorted
11
+
12
+ export type FeatureFlags = 0 | typeof Items | typeof Sorted
13
+
14
+ /* eslint-disable @typescript-eslint/ban-types */
15
+ // conditional data fields of ProviderParentMixin
16
+ export type ProviderParentMixinData<
17
+ Flags extends FeatureFlags,
18
+ Child extends InjectedChild,
19
+ HasItems extends boolean = Flags extends typeof Items | typeof Sorted ? true : false,
20
+ IsSorted extends boolean = Flags extends typeof Sorted ? true : false
21
+ > = (HasItems extends true ? { childItems: Child[] } : {})
22
+ & (IsSorted extends true ? { nextIndex: number } : {})
23
+
24
+ // conditional computed fields of ProviderParentMixin
25
+ export type ProviderParentMixinComputed<
26
+ Flags extends FeatureFlags,
27
+ Child extends InjectedChild,
28
+ IsSorted extends boolean = Flags extends typeof Sorted ? true : false
29
+ > = IsSorted extends true ? { sortedItems(): Child[] } : {}
30
+
31
+ // conditional methods of ProviderParentMixin
32
+ export type ProviderParentMixinMethods<
33
+ Flags extends FeatureFlags,
34
+ Child extends InjectedChild,
35
+ HasItems extends boolean = Flags extends typeof Items | typeof Sorted ? true : false
36
+ > = HasItems extends true ? {
37
+ _registerItem(item: Child): void
38
+ _unregisterItem(item: Child): void
39
+ } : {}
40
+
41
+ export type ProviderParentMixin<
42
+ Flags extends FeatureFlags,
43
+ Child extends InjectedChild
44
+ > = DefineComponent<
45
+ {}, // PropsOrPropOptions
46
+ {}, // RawBindings
47
+ ProviderParentMixinData<Flags, Child>, // D(ata)
48
+ ProviderParentMixinComputed<Flags, Child>, // C(computed)
49
+ ProviderParentMixinMethods<Flags, Child> // M(ethods)
50
+ >
51
+ /* eslint-enable @typescript-eslint/ban-types */
52
+
53
+ export default <
54
+ Flags extends FeatureFlags = FeatureFlags,
55
+ Child extends InjectedChild = InjectedChild
56
+ >(itemName: string, flags?: Flags): ProviderParentMixin<Flags, Child> => {
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ const mixin: any = {
59
+ provide() {
60
+ return {
61
+ ['b' + itemName]: this
62
+ }
63
+ }
64
+ }
65
+
66
+ if (flags !== undefined && hasFlag(flags, items)) {
67
+ mixin.data = function () {
68
+ return {
69
+ childItems: [] as Child[],
70
+ ...(hasFlag(flags, sorted) ? { nextIndex: 0 } : {})
71
+ }
72
+ }
73
+ mixin.methods = {
74
+ _registerItem(item: Child) {
75
+ if (hasFlag(flags, sorted)) {
76
+ // assigns a dynamic index.
77
+ // dynamic indices will be messed up if any child is
78
+ // unmounted.
79
+ // use the new `order` prop to maintain the ordering.
80
+ item.dynamicIndex = this.nextIndex
81
+ ++this.nextIndex
82
+ }
83
+ this.childItems.push(item)
84
+ },
85
+ _unregisterItem(item: Child) {
86
+ this.childItems = this.childItems
87
+ .filter((i: Child) => i.uniqueValue !== item.uniqueValue)
88
+ }
89
+ }
90
+
91
+ if (hasFlag(flags, sorted)) {
92
+ mixin.computed = {
93
+ /*
94
+ * When items are added/removed sort them according to their position
95
+ */
96
+ sortedItems() {
97
+ return this.childItems.slice().sort((i1: Child, i2: Child) => {
98
+ return i1.index - i2.index
99
+ })
100
+ }
101
+ }
102
+ }
103
+ }
104
+ return mixin
105
+ }