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,20 @@
1
+ import type { App } from 'vue'
2
+
3
+ import Dropdown from './Dropdown.vue'
4
+ import DropdownItem from './DropdownItem.vue'
5
+
6
+ import { registerComponent } from '../../utils/plugins'
7
+
8
+ const Plugin = {
9
+ install(Vue: App) {
10
+ registerComponent(Vue, Dropdown)
11
+ registerComponent(Vue, DropdownItem)
12
+ }
13
+ }
14
+
15
+ export default Plugin
16
+
17
+ export {
18
+ Dropdown as BDropdown,
19
+ DropdownItem as BDropdownItem
20
+ }
@@ -0,0 +1,324 @@
1
+ import { shallowMount, mount } from '@vue/test-utils'
2
+ import type { ComponentMountingOptions, VueWrapper } from '@vue/test-utils'
3
+ import { beforeEach, describe, expect, it } from 'vitest'
4
+ import BField from '@components/field/Field.vue'
5
+ import type { FieldMessageProp } from '@components/field/Field.vue'
6
+ import BFieldBody from '@components/field/FieldBody.vue'
7
+ import BInput from '@components/input/Input.vue'
8
+
9
+ type BFieldInstance = InstanceType<typeof BField>
10
+
11
+ const components = {
12
+ 'b-field': BField,
13
+ 'b-field-body': BFieldBody,
14
+ 'b-input': BInput
15
+ }
16
+
17
+ describe('BField', () => {
18
+ it('is called', () => {
19
+ const wrapper = shallowMount(BField)
20
+ expect(wrapper.vm).toBeTruthy()
21
+ expect(wrapper.vm.$options.name).toBe('BField')
22
+ })
23
+
24
+ it('render correctly', () => {
25
+ const wrapper = shallowMount(BField)
26
+ expect(wrapper.html()).toMatchSnapshot()
27
+ })
28
+
29
+ it('sets fieldLabelSize to "is-normal" when horizontal==true and input elements are inside', () => {
30
+ const wrapper = mount(BField, {
31
+ props: { horizontal: true },
32
+ slots: { default: [BInput] },
33
+ global: {
34
+ components
35
+ }
36
+ })
37
+
38
+ expect(wrapper.vm.$data).toEqual(expect.objectContaining({ fieldLabelSize: 'is-normal' }))
39
+ })
40
+
41
+ it('sets input class with type value when prop "type" is changed dynamically', async () => {
42
+ const type = 'is-danger'
43
+ const wrapper = mount(BField, {
44
+ slots: { default: [BInput] },
45
+ global: {
46
+ components
47
+ }
48
+ })
49
+ await wrapper.setProps({ type })
50
+ expect(wrapper.find('.input').classes()).toContain(type)
51
+ })
52
+
53
+ describe('class names for the root div.field', () => {
54
+ it('contains "is-expanded" when prop "expanded" is set', () => {
55
+ const wrapper = shallowMount(BField, { props: { expanded: true } })
56
+ expect(wrapper.find('.field').classes()).toContain('is-expanded')
57
+ })
58
+ })
59
+
60
+ describe('Passing a message prop', () => {
61
+ // `slot` may be a template string
62
+ const generateMountOptions = (
63
+ { message, slot }: { message: FieldMessageProp, slot?: string }
64
+ ) => {
65
+ return {
66
+ props: { message },
67
+ slots: {
68
+ default: [BInput, '<button class="button">Button</button>'],
69
+ ...(slot ? { message: slot } : {})
70
+ },
71
+ global: {
72
+ components
73
+ }
74
+ }
75
+ }
76
+
77
+ it('adds a help <p> element in the root div.field when "message" prop is passed', () => {
78
+ const message = 'Some string message'
79
+ const mountOptions = generateMountOptions({ message })
80
+ const wrapper = shallowMount(BField, mountOptions)
81
+ expect(wrapper.find('.field').find('p.help').text()).toEqual(message)
82
+ })
83
+
84
+ it('changes the <p> element content in the root div.field when "message" prop is changed dynamically', async () => {
85
+ const message = 'Some string message'
86
+ const mountOptions = generateMountOptions({ message: 'initial message' })
87
+ const wrapper = shallowMount(BField, mountOptions)
88
+ await wrapper.setProps({ message })
89
+ expect(wrapper.find('.field').find('p.help').text()).toEqual(message)
90
+ })
91
+
92
+ it('given an array of string as message, it joins the messages with line breaks', () => {
93
+ const message = [
94
+ 'Some string message 1',
95
+ 'Some string message 2',
96
+ 'Some string message 3',
97
+ 'Some string message 4',
98
+ 'Some string message 5'
99
+ ]
100
+ const mountOptions = generateMountOptions({ message })
101
+ const wrapper = shallowMount(BField, mountOptions)
102
+ expect(wrapper.find('p.help').html().split('<br>').length).toEqual(message.length)
103
+ })
104
+
105
+ it('given an object as message, it grabs the keys and joins them with line breaks', () => {
106
+ const message = {
107
+ message1: 'Some string message 1',
108
+ message2: 'Some string message 2',
109
+ message3: 'Some string message 3',
110
+ message4: 'Some string message 4',
111
+ message5: 'Some string message 5'
112
+ }
113
+ const mountOptions = generateMountOptions({ message })
114
+ const wrapper = shallowMount(BField, mountOptions)
115
+ expect(wrapper.find('p.help').html().split('<br>').length).toEqual(Object.keys(message).length)
116
+ })
117
+
118
+ it(`given an array of string with an object as one of the elements as message, it grabs the
119
+ keys of the object and joins them with the messages with line breaks`, () => {
120
+ const message = [
121
+ 'Some string message 1',
122
+ {
123
+ message2: 'Some string message 2',
124
+ message3: 'Some string message 3'
125
+ },
126
+ 'Some string message 4',
127
+ 'Some string message 5'
128
+ ]
129
+ const mountOptions = generateMountOptions({ message })
130
+ const wrapper = shallowMount(BField, mountOptions)
131
+ expect(wrapper.find('p.help').html().split('<br>').length).toEqual(5)
132
+ })
133
+
134
+ it('messages are passed down to the message slot', () => {
135
+ const message = 'Some string message'
136
+ const slot = '<template #message="{ messages }">{{ messages.join("") }}</template>'
137
+ const mountOptions = generateMountOptions({ message, slot })
138
+ const wrapper = shallowMount(BField, mountOptions)
139
+ expect(wrapper.find('p.help').text()).toEqual(message)
140
+ })
141
+ })
142
+
143
+ describe('managing groups', () => {
144
+ const mountOptions = {
145
+ props: {
146
+ grouped: true
147
+ },
148
+ slots: {
149
+ default: [BInput, '<button class="button">Button</button>']
150
+ },
151
+ global: {
152
+ components
153
+ }
154
+ }
155
+
156
+ it('groups the children together in an inner field', () => {
157
+ const wrapper = mount(BField, mountOptions)
158
+ const innerField = wrapper.find('.field-body').find('.field')
159
+ expect(innerField.classes()).toContain('is-grouped')
160
+ })
161
+
162
+ it('appends the classname with value of position when "position" prop is passed', () => {
163
+ const { props } = mountOptions
164
+ const wrapper = mount(BField, {
165
+ ...mountOptions,
166
+ props: {
167
+ ...props,
168
+ position: 'is-centered'
169
+ }
170
+ })
171
+ const innerField = wrapper.find('.field-body').find('.field')
172
+ expect(innerField.classes()).toContain('is-grouped')
173
+ expect(innerField.classes()).toContain('is-grouped-centered')
174
+ })
175
+
176
+ it('contains "is-grouped-multiline" when prop "groupMultiline" is set', () => {
177
+ const { props } = mountOptions
178
+ const wrapper = mount(BField, {
179
+ ...mountOptions,
180
+ props: {
181
+ ...props,
182
+ groupMultiline: true
183
+ }
184
+ })
185
+ const innerField = wrapper.find('.field-body').find('.field')
186
+ expect(innerField.classes()).toContain('is-grouped-multiline')
187
+ })
188
+
189
+ it('adds a label element under the root div.field when "label" prop is passed', () => {
190
+ const { props } = mountOptions
191
+ const wrapper = shallowMount(BField, {
192
+ ...mountOptions,
193
+ props: {
194
+ ...props,
195
+ label: 'Some label'
196
+ }
197
+ })
198
+ expect(wrapper.find('.field').find('label').isVisible()).toBe(true)
199
+ })
200
+
201
+ it('should reflect validation status of wrapped input unless type is specified', async () => {
202
+ const wrapper = mount(BField, mountOptions)
203
+ const input = wrapper.findComponent(BInput)
204
+
205
+ input.vm.setInvalid()
206
+ await wrapper.vm.$nextTick()
207
+ await wrapper.vm.$nextTick() // setInvalid takes effect on the first $nextTick
208
+ expect(wrapper.vm.newType).toBe('is-danger')
209
+
210
+ input.vm.setValidity(null, null)
211
+ await wrapper.vm.$nextTick()
212
+ await wrapper.vm.$nextTick() // setValidity takes effect on the first $nextTick
213
+ expect(wrapper.vm.newType).toBeFalsy()
214
+
215
+ await wrapper.setProps({ type: 'is-warning' })
216
+
217
+ input.vm.setInvalid()
218
+ await wrapper.vm.$nextTick()
219
+ await wrapper.vm.$nextTick() // setInvalid takes effect on the first $nextTick
220
+ expect(wrapper.vm.newType).toBe('is-warning')
221
+
222
+ input.vm.setValidity(null, null)
223
+ await wrapper.vm.$nextTick()
224
+ await wrapper.vm.$nextTick() // setValidity takes effect on the first $nextTick
225
+ expect(wrapper.vm.newType).toBe('is-warning')
226
+ })
227
+ })
228
+
229
+ describe('Passing true for horizontal prop', () => {
230
+ const generateMountOptions = (props?: ComponentMountingOptions<BFieldInstance>['props']) => {
231
+ return {
232
+ props: {
233
+ horizontal: true,
234
+ ...props
235
+ },
236
+ slots: {
237
+ default: BField
238
+ },
239
+ global: {
240
+ components
241
+ }
242
+ }
243
+ }
244
+
245
+ it('adds "is-horizontal" to root div.field', () => {
246
+ const mountOptions = generateMountOptions()
247
+ const wrapper = shallowMount(BField, mountOptions)
248
+ expect(wrapper.find('.field').classes()).toContain('is-horizontal')
249
+ })
250
+
251
+ it('produces a div.field-label + .field-body', () => {
252
+ const mountOptions = generateMountOptions()
253
+ const wrapper = mount(BField, mountOptions)
254
+ expect(wrapper.find('.field').find('.field-label').isVisible()).toBe(true)
255
+ expect(wrapper.find('.field').find('.field-label + .field-body').isVisible()).toBe(true)
256
+ })
257
+
258
+ it('adds a label element under .field-label when "label" prop is passed', () => {
259
+ const mountOptions = generateMountOptions({ label: 'Some label' })
260
+ const wrapper = mount(BField, mountOptions)
261
+ expect(wrapper.find('.field-label').find('label.label').isVisible()).toBe(true)
262
+ })
263
+
264
+ it('adds a help <p> element in the div.field-body when "message" prop is passed', () => {
265
+ const message = 'Some message'
266
+ const mountOptions = generateMountOptions({ message })
267
+ const wrapper = mount(BField, mountOptions)
268
+ const helpWrapper = wrapper.find('.field').find('.field-body').find('.help')
269
+ expect(helpWrapper.isVisible()).toBe(true)
270
+ expect(helpWrapper.text()).toEqual(message)
271
+ })
272
+ })
273
+
274
+ describe('with grouped and horizontal true', () => {
275
+ let wrapper: VueWrapper<BFieldInstance>
276
+
277
+ beforeEach(() => {
278
+ wrapper = mount(BField, {
279
+ props: {
280
+ grouped: true,
281
+ horizontal: true
282
+ },
283
+ slots: {
284
+ default: [BInput, BInput]
285
+ },
286
+ global: {
287
+ components
288
+ }
289
+ })
290
+ })
291
+
292
+ it('should wrap each child in a field under a field-body', () => {
293
+ const body = wrapper.findComponent(BFieldBody)
294
+ expect(body.exists()).toBe(true)
295
+ const childFields = body.findAllComponents(BField)
296
+ expect(childFields.length).toBe(2)
297
+ expect(childFields[0].findComponent(BInput).exists()).toBe(true)
298
+ expect(childFields[1].findComponent(BInput).exists()).toBe(true)
299
+ })
300
+
301
+ describe('when validation fails', () => {
302
+ let childFields: VueWrapper<BFieldInstance>[]
303
+
304
+ beforeEach(async () => {
305
+ await wrapper.setData({
306
+ newType: 'is-danger',
307
+ newMessage: 'error message'
308
+ })
309
+ const body = wrapper.findComponent(BFieldBody)
310
+ childFields = body.findAllComponents(BField)
311
+ })
312
+
313
+ it('should set message only to the first child field', () => {
314
+ expect(childFields[0].props('message')).toEqual(['error message'])
315
+ expect(childFields[1].props('message')).toBeUndefined()
316
+ })
317
+
318
+ it('should set type to all the child fields', () => {
319
+ expect(childFields[0].props('type')).toBe('is-danger')
320
+ expect(childFields[1].props('type')).toBe('is-danger')
321
+ })
322
+ })
323
+ })
324
+ })
@@ -0,0 +1,316 @@
1
+ <template>
2
+ <div class="field" :class="rootClasses">
3
+ <div
4
+ v-if="horizontal"
5
+ class="field-label"
6
+ :class="[customClass, fieldLabelSize]"
7
+ >
8
+ <label
9
+ v-if="hasLabel"
10
+ :for="labelFor"
11
+ :class="customClass"
12
+ class="label"
13
+ >
14
+ <slot v-if="$slots.label" name="label" />
15
+ <template v-else>{{ label }}</template>
16
+ </label>
17
+ </div>
18
+ <template v-else>
19
+ <label
20
+ v-if="hasLabel"
21
+ :for="labelFor"
22
+ :class="customClass"
23
+ class="label"
24
+ >
25
+ <slot v-if="$slots.label" name="label" />
26
+ <template v-else>{{ label }}</template>
27
+ </label>
28
+ </template>
29
+ <b-field-body
30
+ v-if="horizontal"
31
+ :message="newMessage ? formattedMessage : ''"
32
+ :type="newType"
33
+ >
34
+ <slot />
35
+ </b-field-body>
36
+ <div v-else-if="hasInnerField" class="field-body">
37
+ <b-field
38
+ :addons="false"
39
+ :type="type"
40
+ :class="innerFieldClasses"
41
+ >
42
+ <slot />
43
+ </b-field>
44
+ </div>
45
+ <template v-else>
46
+ <slot />
47
+ </template>
48
+ <p
49
+ v-if="hasMessage && !horizontal"
50
+ class="help"
51
+ :class="newType"
52
+ >
53
+ <slot
54
+ v-if="$slots.message"
55
+ name="message"
56
+ :messages="formattedMessage"
57
+ />
58
+ <template v-else>
59
+ <template v-for="(mess, i) in formattedMessage">
60
+ {{ mess }}
61
+ <br :key="i" v-if="(i + 1) < formattedMessage.length">
62
+ </template>
63
+ </template>
64
+ </p>
65
+ </div>
66
+ </template>
67
+
68
+ <script lang="ts">
69
+ import { defineComponent } from 'vue'
70
+ import type { PropType } from 'vue'
71
+
72
+ import config from '../../utils/config'
73
+ import { isTag } from '../../utils/helpers'
74
+ import BFieldBody from './FieldBody.vue'
75
+
76
+ /*
77
+ * Type of the `type` prop of `BField`.
78
+ *
79
+ * @public
80
+ */
81
+ export type FieldTypeProp = string | Record<string, boolean>
82
+
83
+ /*
84
+ * Type of individual message items in the `message` prop of `BField`.
85
+ *
86
+ * @public
87
+ */
88
+ export type FieldMessagePropItem = string | Record<string, string>
89
+
90
+ /*
91
+ * Type of the `message` prop of `BField`.
92
+ *
93
+ * @public
94
+ */
95
+ export type FieldMessageProp = FieldMessagePropItem | FieldMessagePropItem[]
96
+
97
+ const Field = defineComponent({
98
+ name: 'BField',
99
+ components: { BFieldBody },
100
+ provide() {
101
+ return {
102
+ BField: this
103
+ }
104
+ },
105
+ inject: {
106
+ parent: {
107
+ from: 'BField',
108
+ default: false
109
+ }
110
+ }, // Used internally only when using Field in Field
111
+ props: {
112
+ type: {
113
+ type: [String, Object] as PropType<FieldTypeProp>,
114
+ default: undefined
115
+ },
116
+ label: String,
117
+ labelFor: String,
118
+ message: {
119
+ type: [String, Array, Object] as PropType<FieldMessageProp>,
120
+ default: undefined
121
+ },
122
+ grouped: Boolean,
123
+ groupMultiline: Boolean,
124
+ position: String,
125
+ expanded: Boolean,
126
+ horizontal: Boolean,
127
+ addons: {
128
+ type: Boolean,
129
+ default: true
130
+ },
131
+ customClass: String,
132
+ labelPosition: {
133
+ type: String,
134
+ default: () => { return config.defaultFieldLabelPosition }
135
+ }
136
+ },
137
+ data() {
138
+ return {
139
+ newType: this.type as FieldTypeProp | null,
140
+ newMessage: this.message as FieldMessageProp | null,
141
+ fieldLabelSize: null as string | null,
142
+ numberInputClasses: [] as string[],
143
+ _isField: true // Used internally by Input and Select
144
+ }
145
+ },
146
+ computed: {
147
+ rootClasses() {
148
+ return [{
149
+ 'is-expanded': this.expanded,
150
+ 'is-horizontal': this.horizontal,
151
+ 'is-floating-in-label': this.hasLabel && !this.horizontal &&
152
+ this.labelPosition === 'inside',
153
+ 'is-floating-label': this.hasLabel && !this.horizontal &&
154
+ this.labelPosition === 'on-border'
155
+ },
156
+ this.numberInputClasses]
157
+ },
158
+ innerFieldClasses() {
159
+ return [
160
+ this.fieldType(),
161
+ this.newPosition,
162
+ {
163
+ 'is-grouped-multiline': this.groupMultiline
164
+ }
165
+ ]
166
+ },
167
+ hasInnerField() {
168
+ return this.grouped || this.groupMultiline || this.hasAddons()
169
+ },
170
+ /*
171
+ * Correct Bulma class for the side of the addon or group.
172
+ *
173
+ * This is not kept like the others (is-small, etc.),
174
+ * because since 'has-addons' is set automatically it
175
+ * doesn't make sense to teach users what addons are exactly.
176
+ */
177
+ newPosition() {
178
+ if (this.position === undefined) return
179
+
180
+ const position = this.position.split('-')
181
+ if (position.length < 1) return
182
+
183
+ const prefix = this.grouped
184
+ ? 'is-grouped-'
185
+ : 'has-addons-'
186
+
187
+ if (this.position) return prefix + position[1]
188
+ return undefined
189
+ },
190
+ /*
191
+ * Formatted message in case it's an array
192
+ * (each element is separated by <br> tag)
193
+ */
194
+ formattedMessage() {
195
+ const parentField = this.parent as InstanceType<typeof Field> | null
196
+ if (parentField && parentField.hasInnerField) {
197
+ return '' // Message will be displayed in parent field
198
+ }
199
+ if (typeof this.newMessage === 'string') {
200
+ return [this.newMessage]
201
+ }
202
+ const messages = []
203
+ if (Array.isArray(this.newMessage)) {
204
+ this.newMessage.forEach((message) => {
205
+ if (typeof message === 'string') {
206
+ messages.push(message)
207
+ } else {
208
+ for (const key in message) {
209
+ if (message[key]) {
210
+ messages.push(key)
211
+ }
212
+ }
213
+ }
214
+ })
215
+ } else {
216
+ for (const key in this.newMessage) {
217
+ if (this.newMessage[key]) {
218
+ messages.push(key)
219
+ }
220
+ }
221
+ }
222
+ return messages.filter((m) => !!m)
223
+ },
224
+ hasLabel() {
225
+ return this.label || this.$slots.label
226
+ },
227
+ hasMessage() {
228
+ const parentField = this.parent as InstanceType<typeof Field> | null
229
+ return ((!parentField || !parentField.hasInnerField) && this.newMessage) ||
230
+ this.$slots.message
231
+ }
232
+ },
233
+ watch: {
234
+ /*
235
+ * Set internal type when prop change.
236
+ */
237
+ type(value) {
238
+ this.newType = value
239
+ },
240
+
241
+ /*
242
+ * Set internal message when prop change.
243
+ */
244
+ message(value) {
245
+ // we deep comparison here becase an innner Field of another Field
246
+ // receives the message as a brand new array every time, so simple
247
+ // identity check won't work and will end up with infinite
248
+ // recursions
249
+ // https://github.com/buefy/buefy/issues/4018#issuecomment-1985026234
250
+ if (JSON.stringify(value) !== JSON.stringify(this.newMessage)) {
251
+ this.newMessage = value
252
+ }
253
+ },
254
+
255
+ /*
256
+ * Set parent message if we use Field in Field.
257
+ */
258
+ newMessage(value) {
259
+ const parentField = this.parent as InstanceType<typeof Field> | null
260
+ if (parentField && parentField.hasInnerField) {
261
+ if (!parentField.type) {
262
+ parentField.newType = this.newType
263
+ }
264
+ if (!parentField.message) {
265
+ parentField.newMessage = value
266
+ }
267
+ }
268
+ }
269
+ },
270
+ methods: {
271
+ /*
272
+ * Field has addons if there are more than one slot
273
+ * (element / component) in the Field.
274
+ * Or is grouped when prop is set.
275
+ * Is a method to be called when component re-render.
276
+ */
277
+ fieldType() {
278
+ if (this.grouped) return 'is-grouped'
279
+ if (this.hasAddons()) return 'has-addons'
280
+ },
281
+ hasAddons() {
282
+ let renderedNode = 0
283
+ if (this.$slots.default) {
284
+ renderedNode = this.$slots.default().reduce((i, node) => isTag(node) ? i + 1 : i, 0)
285
+ }
286
+ return (
287
+ renderedNode > 1 &&
288
+ this.addons &&
289
+ !this.horizontal
290
+ )
291
+ },
292
+ // called by a number input if it is a direct child.
293
+ wrapNumberinput({ controlsPosition, size }: { controlsPosition?: string, size?: string }) {
294
+ const classes = ['has-numberinput']
295
+ if (controlsPosition) {
296
+ classes.push(`has-numberinput-${controlsPosition}`)
297
+ }
298
+ if (size) {
299
+ classes.push(`has-numberinput-${size}`)
300
+ }
301
+ this.numberInputClasses = classes
302
+ }
303
+ },
304
+ mounted() {
305
+ if (this.horizontal) {
306
+ // Bulma docs: .is-normal for any .input or .button
307
+ const elements = this.$el.querySelectorAll('.input, .select, .button, .textarea, .b-slider')
308
+ if (elements.length > 0) {
309
+ this.fieldLabelSize = 'is-normal'
310
+ }
311
+ }
312
+ }
313
+ })
314
+
315
+ export default Field
316
+ </script>