buefy 0.7.9 → 0.8.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 (347) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/dist/buefy.css +13759 -8263
  3. package/dist/buefy.js +9073 -14866
  4. package/dist/buefy.min.css +1 -5
  5. package/dist/buefy.min.js +2 -2
  6. package/dist/cjs/autocomplete.js +22 -0
  7. package/dist/cjs/button.js +106 -0
  8. package/dist/cjs/checkbox.js +135 -0
  9. package/dist/cjs/chunk-07fe6fc0.js +247 -0
  10. package/dist/cjs/chunk-0af453a7.js +105 -0
  11. package/dist/cjs/chunk-0e89e51b.js +394 -0
  12. package/dist/cjs/chunk-13e039f5.js +104 -0
  13. package/dist/cjs/chunk-143d9e6d.js +404 -0
  14. package/dist/cjs/chunk-19ebd649.js +114 -0
  15. package/dist/cjs/chunk-1b1231ce.js +94 -0
  16. package/dist/cjs/chunk-1e6abfcf.js +94 -0
  17. package/dist/cjs/chunk-28d164b1.js +172 -0
  18. package/dist/cjs/chunk-3396605d.js +394 -0
  19. package/dist/cjs/chunk-364a37a0.js +404 -0
  20. package/dist/cjs/chunk-3b066933.js +103 -0
  21. package/dist/cjs/chunk-3dffe6e7.js +54 -0
  22. package/dist/cjs/chunk-4a03b064.js +199 -0
  23. package/dist/cjs/chunk-50b06939.js +153 -0
  24. package/dist/cjs/chunk-52623128.js +105 -0
  25. package/dist/cjs/chunk-53d4f332.js +94 -0
  26. package/dist/cjs/chunk-544a95da.js +404 -0
  27. package/dist/cjs/chunk-545f01b1.js +49 -0
  28. package/dist/cjs/chunk-59b91990.js +64 -0
  29. package/dist/cjs/chunk-5b2a3329.js +394 -0
  30. package/dist/cjs/chunk-60061aa8.js +172 -0
  31. package/dist/cjs/chunk-67658e54.js +404 -0
  32. package/dist/cjs/chunk-6963026a.js +86 -0
  33. package/dist/cjs/chunk-6cece6b7.js +140 -0
  34. package/dist/cjs/chunk-6d6465c1.js +140 -0
  35. package/dist/cjs/chunk-6e9c0aca.js +94 -0
  36. package/dist/cjs/chunk-77f69fca.js +106 -0
  37. package/dist/cjs/chunk-7a25d736.js +114 -0
  38. package/dist/cjs/chunk-876befa8.js +247 -0
  39. package/dist/cjs/chunk-8985ffff.js +105 -0
  40. package/dist/cjs/chunk-8a05c8c9.js +207 -0
  41. package/dist/cjs/chunk-90407463.js +258 -0
  42. package/dist/cjs/chunk-956525c9.js +106 -0
  43. package/dist/cjs/chunk-96ce35a2.js +114 -0
  44. package/dist/cjs/chunk-9da1d120.js +86 -0
  45. package/dist/cjs/chunk-9f6a8079.js +54 -0
  46. package/dist/cjs/chunk-a60dc21d.js +281 -0
  47. package/dist/cjs/chunk-b628277d.js +199 -0
  48. package/dist/cjs/chunk-c146745e.js +153 -0
  49. package/dist/cjs/chunk-c2aec7a9.js +547 -0
  50. package/dist/cjs/chunk-c9641331.js +86 -0
  51. package/dist/cjs/chunk-d492406b.js +172 -0
  52. package/dist/cjs/chunk-e0aa62a0.js +404 -0
  53. package/dist/cjs/chunk-e45e0329.js +48 -0
  54. package/dist/cjs/chunk-e5de6583.js +207 -0
  55. package/dist/cjs/chunk-e85cceb6.js +258 -0
  56. package/dist/cjs/chunk-ed5addd6.js +547 -0
  57. package/dist/cjs/chunk-ef4753d5.js +283 -0
  58. package/dist/cjs/chunk-f0c597f9.js +199 -0
  59. package/dist/cjs/chunk-f1df1c63.js +9 -0
  60. package/dist/cjs/chunk-f1ee2f5c.js +207 -0
  61. package/dist/cjs/chunk-fbd4d545.js +247 -0
  62. package/dist/cjs/clockpicker.js +447 -0
  63. package/dist/cjs/collapse.js +102 -0
  64. package/dist/cjs/datepicker.js +1281 -0
  65. package/dist/cjs/dialog.js +237 -0
  66. package/dist/cjs/dropdown.js +19 -0
  67. package/dist/cjs/field.js +18 -0
  68. package/dist/cjs/icon.js +17 -0
  69. package/dist/cjs/index.js +164 -0
  70. package/dist/cjs/input.js +20 -0
  71. package/dist/cjs/loading.js +166 -0
  72. package/dist/cjs/menu.js +231 -0
  73. package/dist/cjs/message.js +65 -0
  74. package/dist/cjs/modal.js +48 -0
  75. package/dist/cjs/navbar.js +258 -0
  76. package/dist/cjs/notification.js +142 -0
  77. package/dist/cjs/numberinput.js +191 -0
  78. package/dist/cjs/pagination.js +19 -0
  79. package/dist/cjs/progress.js +151 -0
  80. package/dist/cjs/radio.js +224 -0
  81. package/dist/cjs/select.js +20 -0
  82. package/dist/cjs/slider.js +511 -0
  83. package/dist/cjs/snackbar.js +114 -0
  84. package/dist/cjs/steps.js +352 -0
  85. package/dist/cjs/switch.js +144 -0
  86. package/dist/cjs/table.js +877 -0
  87. package/dist/cjs/tabs.js +258 -0
  88. package/dist/cjs/tag.js +63 -0
  89. package/dist/cjs/taginput.js +297 -0
  90. package/dist/cjs/timepicker.js +75 -0
  91. package/dist/cjs/toast.js +89 -0
  92. package/dist/cjs/tooltip.js +17 -0
  93. package/dist/cjs/upload.js +210 -0
  94. package/dist/components/autocomplete/index.js +1084 -2
  95. package/dist/components/autocomplete/index.min.js +2 -0
  96. package/dist/components/button/index.js +425 -2
  97. package/dist/components/button/index.min.js +2 -0
  98. package/dist/components/checkbox/index.js +342 -2
  99. package/dist/components/checkbox/index.min.js +2 -0
  100. package/dist/components/clockpicker/index.js +2340 -2
  101. package/dist/components/clockpicker/index.min.js +2 -0
  102. package/dist/components/collapse/index.js +201 -2
  103. package/dist/components/collapse/index.min.js +2 -0
  104. package/dist/components/datepicker/index.js +2720 -2
  105. package/dist/components/datepicker/index.min.js +2 -0
  106. package/dist/components/dialog/index.js +768 -2
  107. package/dist/components/dialog/index.min.js +2 -0
  108. package/dist/components/dropdown/index.js +555 -2
  109. package/dist/components/dropdown/index.min.js +2 -0
  110. package/dist/components/field/index.js +447 -2
  111. package/dist/components/field/index.min.js +2 -0
  112. package/dist/components/icon/index.js +322 -2
  113. package/dist/components/icon/index.min.js +2 -0
  114. package/dist/components/input/index.js +675 -2
  115. package/dist/components/input/index.min.js +2 -0
  116. package/dist/components/loading/index.js +282 -2
  117. package/dist/components/loading/index.min.js +2 -0
  118. package/dist/components/menu/index.js +550 -2
  119. package/dist/components/menu/index.min.js +2 -0
  120. package/dist/components/message/index.js +482 -2
  121. package/dist/components/message/index.min.js +2 -0
  122. package/dist/components/modal/index.js +400 -2
  123. package/dist/components/modal/index.min.js +2 -0
  124. package/dist/components/navbar/index.js +371 -0
  125. package/dist/components/navbar/index.min.js +2 -0
  126. package/dist/components/notification/index.js +705 -2
  127. package/dist/components/notification/index.min.js +2 -0
  128. package/dist/components/numberinput/index.js +846 -2
  129. package/dist/components/numberinput/index.min.js +2 -0
  130. package/dist/components/pagination/index.js +577 -2
  131. package/dist/components/pagination/index.min.js +2 -0
  132. package/dist/components/progress/index.js +250 -0
  133. package/dist/components/progress/index.min.js +2 -0
  134. package/dist/components/radio/index.js +323 -2
  135. package/dist/components/radio/index.min.js +2 -0
  136. package/dist/components/select/index.js +571 -2
  137. package/dist/components/select/index.min.js +2 -0
  138. package/dist/components/slider/index.js +764 -0
  139. package/dist/components/slider/index.min.js +2 -0
  140. package/dist/components/snackbar/index.js +397 -2
  141. package/dist/components/snackbar/index.min.js +2 -0
  142. package/dist/components/steps/index.js +721 -2
  143. package/dist/components/steps/index.min.js +2 -0
  144. package/dist/components/switch/index.js +243 -2
  145. package/dist/components/switch/index.min.js +2 -0
  146. package/dist/components/table/index.js +1870 -2
  147. package/dist/components/table/index.min.js +2 -0
  148. package/dist/components/tabs/index.js +627 -2
  149. package/dist/components/tabs/index.min.js +2 -0
  150. package/dist/components/tag/index.js +262 -2
  151. package/dist/components/tag/index.min.js +2 -0
  152. package/dist/components/taginput/index.js +1459 -2
  153. package/dist/components/taginput/index.min.js +2 -0
  154. package/dist/components/timepicker/index.js +2053 -2
  155. package/dist/components/timepicker/index.min.js +2 -0
  156. package/dist/components/toast/index.js +372 -2
  157. package/dist/components/toast/index.min.js +2 -0
  158. package/dist/components/tooltip/index.js +236 -2
  159. package/dist/components/tooltip/index.min.js +2 -0
  160. package/dist/components/upload/index.js +501 -2
  161. package/dist/components/upload/index.min.js +2 -0
  162. package/dist/esm/autocomplete.js +18 -0
  163. package/dist/esm/button.js +102 -0
  164. package/dist/esm/checkbox.js +131 -0
  165. package/dist/esm/chunk-00e3e67f.js +401 -0
  166. package/dist/esm/chunk-051f8b06.js +105 -0
  167. package/dist/esm/chunk-0566c90d.js +152 -0
  168. package/dist/esm/chunk-07e19446.js +545 -0
  169. package/dist/esm/chunk-085a700d.js +7 -0
  170. package/dist/esm/chunk-0ad6938a.js +53 -0
  171. package/dist/esm/chunk-0e3f4fb5.js +52 -0
  172. package/dist/esm/chunk-10c85529.js +151 -0
  173. package/dist/esm/chunk-121b1efa.js +197 -0
  174. package/dist/esm/chunk-19dad95e.js +256 -0
  175. package/dist/esm/chunk-231b6066.js +113 -0
  176. package/dist/esm/chunk-24d1a01f.js +279 -0
  177. package/dist/esm/chunk-297bff6b.js +393 -0
  178. package/dist/esm/chunk-2b2ae5c6.js +245 -0
  179. package/dist/esm/chunk-2cb6f867.js +46 -0
  180. package/dist/esm/chunk-33717194.js +392 -0
  181. package/dist/esm/chunk-3b811b77.js +139 -0
  182. package/dist/esm/chunk-3e47308f.js +104 -0
  183. package/dist/esm/chunk-411d6eea.js +84 -0
  184. package/dist/esm/chunk-4535dec5.js +92 -0
  185. package/dist/esm/chunk-47a5f3a1.js +103 -0
  186. package/dist/esm/chunk-4a5384da.js +205 -0
  187. package/dist/esm/chunk-4b663574.js +112 -0
  188. package/dist/esm/chunk-4d393f09.js +170 -0
  189. package/dist/esm/chunk-4d695899.js +257 -0
  190. package/dist/esm/chunk-4f508891.js +171 -0
  191. package/dist/esm/chunk-531b8274.js +281 -0
  192. package/dist/esm/chunk-591ee4a2.js +151 -0
  193. package/dist/esm/chunk-5d3bf82e.js +170 -0
  194. package/dist/esm/chunk-5e0b0665.js +104 -0
  195. package/dist/esm/chunk-648b9aa4.js +45 -0
  196. package/dist/esm/chunk-666940cf.js +546 -0
  197. package/dist/esm/chunk-67c97e13.js +246 -0
  198. package/dist/esm/chunk-6844653e.js +401 -0
  199. package/dist/esm/chunk-699b7cb4.js +245 -0
  200. package/dist/esm/chunk-6f881e7d.js +51 -0
  201. package/dist/esm/chunk-7123d158.js +256 -0
  202. package/dist/esm/chunk-7cf87590.js +60 -0
  203. package/dist/esm/chunk-823177ac.js +545 -0
  204. package/dist/esm/chunk-8838757a.js +401 -0
  205. package/dist/esm/chunk-8ca878c0.js +198 -0
  206. package/dist/esm/chunk-8fc2e874.js +85 -0
  207. package/dist/esm/chunk-912ed715.js +92 -0
  208. package/dist/esm/chunk-92acc21f.js +392 -0
  209. package/dist/esm/chunk-98e86f40.js +197 -0
  210. package/dist/esm/chunk-99a1f9df.js +92 -0
  211. package/dist/esm/chunk-9a776697.js +112 -0
  212. package/dist/esm/chunk-9e3207cc.js +46 -0
  213. package/dist/esm/chunk-9ec14e09.js +112 -0
  214. package/dist/esm/chunk-a5ea70d0.js +205 -0
  215. package/dist/esm/chunk-ac3f4847.js +138 -0
  216. package/dist/esm/chunk-b5376f3e.js +92 -0
  217. package/dist/esm/chunk-b56eb2c8.js +197 -0
  218. package/dist/esm/chunk-b796d1b2.js +392 -0
  219. package/dist/esm/chunk-b822a5db.js +205 -0
  220. package/dist/esm/chunk-b9bdb0e4.js +6 -0
  221. package/dist/esm/chunk-bfe15983.js +401 -0
  222. package/dist/esm/chunk-c9039f68.js +104 -0
  223. package/dist/esm/chunk-cc718c15.js +245 -0
  224. package/dist/esm/chunk-cca88db8.js +99 -0
  225. package/dist/esm/chunk-d6200087.js +50 -0
  226. package/dist/esm/chunk-daeac852.js +138 -0
  227. package/dist/esm/chunk-db31c548.js +103 -0
  228. package/dist/esm/chunk-e5568f45.js +84 -0
  229. package/dist/esm/chunk-e5fce48f.js +59 -0
  230. package/dist/esm/chunk-e84b4047.js +170 -0
  231. package/dist/esm/chunk-e8d90b72.js +98 -0
  232. package/dist/esm/chunk-e932bb68.js +206 -0
  233. package/dist/esm/chunk-edd8ff91.js +103 -0
  234. package/dist/esm/chunk-f0465d8d.js +84 -0
  235. package/dist/esm/chunk-f743d154.js +93 -0
  236. package/dist/esm/chunk-f8036b32.js +402 -0
  237. package/dist/esm/chunk-f984748f.js +401 -0
  238. package/dist/esm/chunk-fd5b0e1e.js +99 -0
  239. package/dist/esm/clockpicker.js +443 -0
  240. package/dist/esm/collapse.js +98 -0
  241. package/dist/esm/datepicker.js +1277 -0
  242. package/dist/esm/dialog.js +231 -0
  243. package/dist/esm/dropdown.js +14 -0
  244. package/dist/esm/field.js +14 -0
  245. package/dist/esm/icon.js +13 -0
  246. package/dist/esm/index.js +154 -0
  247. package/dist/esm/input.js +16 -0
  248. package/dist/esm/loading.js +159 -0
  249. package/dist/esm/menu.js +225 -0
  250. package/dist/esm/message.js +61 -0
  251. package/dist/esm/modal.js +42 -0
  252. package/dist/esm/navbar.js +253 -0
  253. package/dist/esm/notification.js +135 -0
  254. package/dist/esm/numberinput.js +187 -0
  255. package/dist/esm/pagination.js +15 -0
  256. package/dist/esm/progress.js +147 -0
  257. package/dist/esm/radio.js +219 -0
  258. package/dist/esm/select.js +16 -0
  259. package/dist/esm/slider.js +506 -0
  260. package/dist/esm/snackbar.js +108 -0
  261. package/dist/esm/steps.js +347 -0
  262. package/dist/esm/switch.js +140 -0
  263. package/dist/esm/table.js +872 -0
  264. package/dist/esm/tabs.js +253 -0
  265. package/dist/esm/tag.js +59 -0
  266. package/dist/esm/taginput.js +293 -0
  267. package/dist/esm/timepicker.js +71 -0
  268. package/dist/esm/toast.js +83 -0
  269. package/dist/esm/tooltip.js +13 -0
  270. package/dist/esm/upload.js +206 -0
  271. package/package.json +26 -4
  272. package/src/components/checkbox/Checkbox.vue +12 -4
  273. package/src/components/checkbox/CheckboxButton.vue +10 -2
  274. package/src/components/clockpicker/Clockpicker.vue +0 -5
  275. package/src/components/datepicker/Datepicker.spec.js +60 -0
  276. package/src/components/datepicker/Datepicker.vue +46 -19
  277. package/src/components/datepicker/DatepickerTable.spec.js +107 -2
  278. package/src/components/datepicker/DatepickerTable.vue +73 -4
  279. package/src/components/datepicker/DatepickerTableRow.spec.js +127 -17
  280. package/src/components/datepicker/DatepickerTableRow.vue +103 -4
  281. package/src/components/dialog/Dialog.vue +5 -3
  282. package/src/components/dialog/index.js +2 -2
  283. package/src/components/dropdown/Dropdown.vue +1 -4
  284. package/src/components/dropdown/DropdownItem.vue +7 -3
  285. package/src/components/field/Field.spec.js +18 -0
  286. package/src/components/field/Field.vue +21 -2
  287. package/src/components/index.js +6 -0
  288. package/src/components/input/Input.vue +2 -2
  289. package/src/components/loading/index.js +1 -1
  290. package/src/components/modal/index.js +1 -1
  291. package/src/components/navbar/NavBar.spec.js +76 -0
  292. package/src/components/navbar/Navbar.vue +127 -0
  293. package/src/components/navbar/NavbarBurger.vue +25 -0
  294. package/src/components/navbar/NavbarItem.vue +21 -0
  295. package/src/components/navbar/index.js +20 -0
  296. package/src/components/notification/index.js +1 -1
  297. package/src/components/pagination/Pagination.vue +28 -6
  298. package/src/components/progress/Progress.spec.js +77 -0
  299. package/src/components/progress/Progress.vue +108 -0
  300. package/src/components/progress/__snapshots__/Progress.spec.js.snap +7 -0
  301. package/src/components/progress/index.js +17 -0
  302. package/src/components/radio/Radio.spec.js +18 -1
  303. package/src/components/radio/Radio.vue +11 -5
  304. package/src/components/radio/RadioButton.spec.js +18 -1
  305. package/src/components/radio/RadioButton.vue +20 -8
  306. package/src/components/select/Select.spec.js +22 -1
  307. package/src/components/select/Select.vue +2 -1
  308. package/src/components/select/__snapshots__/Select.spec.js.snap +7 -0
  309. package/src/components/slider/Slider.spec.js +10 -0
  310. package/src/components/slider/Slider.vue +240 -0
  311. package/src/components/slider/SliderThumb.vue +188 -0
  312. package/src/components/slider/SliderTick.vue +43 -0
  313. package/src/components/slider/index.js +20 -0
  314. package/src/components/snackbar/index.js +2 -2
  315. package/src/components/steps/StepItem.vue +2 -3
  316. package/src/components/steps/Steps.vue +7 -5
  317. package/src/components/switch/Switch.spec.js +29 -0
  318. package/src/components/switch/Switch.vue +29 -5
  319. package/src/components/switch/__snapshots__/Switch.spec.js.snap +3 -0
  320. package/src/components/table/Table.vue +30 -8
  321. package/src/components/table/TableColumn.vue +2 -2
  322. package/src/components/tag/Tag.vue +4 -1
  323. package/src/components/taginput/Taginput.spec.js +10 -0
  324. package/src/components/taginput/Taginput.vue +8 -3
  325. package/src/components/toast/index.js +2 -2
  326. package/src/components/tooltip/Tooltip.vue +5 -5
  327. package/src/components/upload/Upload.vue +15 -8
  328. package/src/index.js +11 -4
  329. package/src/scss/buefy-build.scss +3 -3
  330. package/src/scss/buefy.scss +4 -0
  331. package/src/scss/components/_datepicker.scss +40 -1
  332. package/src/scss/components/_form.scss +52 -1
  333. package/src/scss/components/_progress.scss +45 -0
  334. package/src/scss/components/_radio.scss +14 -14
  335. package/src/scss/components/_slider.scss +138 -0
  336. package/src/scss/components/_steps.scss +4 -4
  337. package/src/scss/components/_switch.scss +54 -2
  338. package/src/scss/components/_taginput.scss +3 -0
  339. package/src/scss/components/_upload.scss +1 -3
  340. package/src/utils/SlotComponent.js +9 -2
  341. package/src/utils/TimepickerMixin.js +17 -6
  342. package/src/utils/config.js +4 -1
  343. package/src/utils/helpers.spec.js +67 -0
  344. package/src/utils/plugins.js +2 -1
  345. package/types/components.d.ts +3 -3
  346. package/types/index.d.ts +24 -11
  347. package/dist/components/index.js +0 -2
@@ -96,6 +96,14 @@ export default {
96
96
  type: [Number, String],
97
97
  default: 1
98
98
  },
99
+ rangeBefore: {
100
+ type: [Number, String],
101
+ default: 1
102
+ },
103
+ rangeAfter: {
104
+ type: [Number, String],
105
+ default: 1
106
+ },
99
107
  size: String,
100
108
  simple: Boolean,
101
109
  rounded: Boolean,
@@ -118,6 +126,14 @@ export default {
118
126
  ]
119
127
  },
120
128
 
129
+ beforeCurrent() {
130
+ return parseInt(this.rangeBefore)
131
+ },
132
+
133
+ afterCurrent() {
134
+ return parseInt(this.rangeAfter)
135
+ },
136
+
121
137
  /**
122
138
  * Total page size (count).
123
139
  */
@@ -144,28 +160,28 @@ export default {
144
160
  * Check if first page button should be visible.
145
161
  */
146
162
  hasFirst() {
147
- return this.current >= 3
163
+ return this.current >= (2 + this.beforeCurrent)
148
164
  },
149
165
 
150
166
  /**
151
167
  * Check if first ellipsis should be visible.
152
168
  */
153
169
  hasFirstEllipsis() {
154
- return this.current >= 4
170
+ return this.current >= (this.beforeCurrent + 4)
155
171
  },
156
172
 
157
173
  /**
158
174
  * Check if last page button should be visible.
159
175
  */
160
176
  hasLast() {
161
- return this.current <= this.pageCount - 2
177
+ return this.current <= this.pageCount - (1 + this.afterCurrent)
162
178
  },
163
179
 
164
180
  /**
165
181
  * Check if last ellipsis should be visible.
166
182
  */
167
183
  hasLastEllipsis() {
168
- return this.current < this.pageCount - 2 && this.current <= this.pageCount - 3
184
+ return this.current < this.pageCount - (2 + this.afterCurrent)
169
185
  },
170
186
 
171
187
  /**
@@ -182,8 +198,14 @@ export default {
182
198
  pagesInRange() {
183
199
  if (this.simple) return
184
200
 
185
- const left = Math.max(1, this.current - 1)
186
- const right = Math.min(this.current + 1, this.pageCount)
201
+ let left = Math.max(1, this.current - this.beforeCurrent)
202
+ if (left - 1 === 2) {
203
+ left-- // Do not show the ellipsis if there is only one to hide
204
+ }
205
+ let right = Math.min(this.current + this.afterCurrent, this.pageCount)
206
+ if (this.pageCount - right === 2) {
207
+ right++ // Do not show the ellipsis if there is only one to hide
208
+ }
187
209
 
188
210
  const pages = []
189
211
  for (let i = left; i <= right; i++) {
@@ -0,0 +1,77 @@
1
+ import { shallowMount } from '@vue/test-utils'
2
+ import BProgress from '@components/progress/Progress'
3
+
4
+ describe('BProgress', () => {
5
+ it('is called', () => {
6
+ const wrapper = shallowMount(BProgress)
7
+ expect(wrapper.name()).toBe('BProgress')
8
+ expect(wrapper.isVueInstance()).toBeTruthy()
9
+ })
10
+
11
+ it('render correctly', () => {
12
+ const wrapper = shallowMount(BProgress)
13
+
14
+ expect(wrapper.html()).toMatchSnapshot()
15
+ })
16
+
17
+ it('add value attribute when a value is passed', () => {
18
+ const value = 50
19
+ const wrapper = shallowMount(BProgress)
20
+ wrapper.setProps({ value })
21
+
22
+ expect(wrapper.find('.progress').attributes().value).toEqual(`${value}`)
23
+ })
24
+
25
+ describe('Passing a value prop', () => {
26
+ it('add value attribute to the <progress> element', () => {
27
+ const value = 50
28
+ const wrapper = shallowMount(BProgress, {
29
+ propsData: {value}
30
+ })
31
+ expect(wrapper.find('.progress').attributes().value).toEqual(`${value}`)
32
+ })
33
+
34
+ describe('Passing true to show-value prop', () => {
35
+ it('adds a help <p> element in the root div.progress-wrapper when "show-value" prop is true', () => {
36
+ const value = 50
37
+ const wrapper = shallowMount(BProgress, {
38
+ propsData: {
39
+ value,
40
+ showValue: true
41
+ }
42
+ })
43
+ expect(wrapper.find('.progress-wrapper').find('p.progress-value').text()).toEqual(`${value}`)
44
+ })
45
+
46
+ it('display the value as percent when passing "percent" for the format prop', () => {
47
+ const value = 50
48
+ const max = 100
49
+ const format = 'percent'
50
+ const wrapper = shallowMount(BProgress, {
51
+ propsData: {
52
+ value,
53
+ max,
54
+ format,
55
+ showValue: true
56
+ }
57
+ })
58
+
59
+ expect(wrapper.find('.progress').text()).toEqual(`${value * max / 100}%`)
60
+ })
61
+
62
+ it('display the trailing zeroes when setting the keepTrailingZeroes prop', () => {
63
+ const value = 50
64
+ const keepTrailingZeroes = true
65
+ const wrapper = shallowMount(BProgress, {
66
+ propsData: {
67
+ value,
68
+ keepTrailingZeroes,
69
+ showValue: true
70
+ }
71
+ })
72
+
73
+ expect(wrapper.find('.progress').text()).toEqual(`${value}.00`)
74
+ })
75
+ })
76
+ })
77
+ })
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <div class="progress-wrapper">
3
+ <progress
4
+ ref="progress"
5
+ class="progress"
6
+ :class="newType"
7
+ :max="max">{{ newValue }}</progress>
8
+ <p
9
+ v-if="showValue"
10
+ class="progress-value has-text-white"><slot>{{ newValue }}</slot></p>
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+
16
+ export default {
17
+ name: 'BProgress',
18
+ props: {
19
+ type: {
20
+ type: [String, Object],
21
+ default: 'is-darkgrey'
22
+ },
23
+ size: String,
24
+ value: {
25
+ type: Number,
26
+ default: undefined
27
+ },
28
+ max: {
29
+ type: Number,
30
+ default: 100
31
+ },
32
+ showValue: {
33
+ type: Boolean,
34
+ default: false
35
+ },
36
+ format: {
37
+ type: String,
38
+ default: 'raw',
39
+ validator: (value) => {
40
+ return [
41
+ 'raw',
42
+ 'percent'
43
+ ].indexOf(value) >= 0
44
+ }
45
+ },
46
+ precision: {
47
+ type: Number,
48
+ default: 2
49
+ },
50
+ keepTrailingZeroes: {
51
+ type: Boolean,
52
+ default: false
53
+ }
54
+ },
55
+ computed: {
56
+ isIndeterminate() {
57
+ return this.value === undefined || this.value === null
58
+ },
59
+ newType() {
60
+ return [
61
+ this.size,
62
+ this.type
63
+ ]
64
+ },
65
+ newValue() {
66
+ if (this.value === undefined || this.value === null || isNaN(this.value)) {
67
+ return undefined
68
+ }
69
+
70
+ if (this.format === 'percent') {
71
+ const val = this.toFixed(this.value * this.max / 100)
72
+ return `${val}%`
73
+ }
74
+ const val = this.toFixed(this.value)
75
+ return val
76
+ }
77
+ },
78
+ watch: {
79
+ value(value) {
80
+ this.setValue(value)
81
+ }
82
+ },
83
+ methods: {
84
+ /**
85
+ * When value is changed back to undefined, value of native progress get reset to 0.
86
+ * Need to add and remove the value attribute to have the indeterminate or not.
87
+ */
88
+ setValue(value) {
89
+ if (this.isIndeterminate) {
90
+ this.$refs.progress.removeAttribute('value')
91
+ } else {
92
+ this.$refs.progress.setAttribute('value', value)
93
+ }
94
+ },
95
+ // Custom function that imitate the javascript toFixed method with improved rounding
96
+ toFixed(num) {
97
+ let fixed = (+(`${Math.round(+(`${num}e${this.precision}`))}e${-this.precision}`)).toFixed(this.precision)
98
+ if (!this.keepTrailingZeroes) {
99
+ fixed = fixed.replace(/\.?0+$/, '')
100
+ }
101
+ return fixed
102
+ }
103
+ },
104
+ mounted() {
105
+ this.setValue(this.value)
106
+ }
107
+ }
108
+ </script>
@@ -0,0 +1,7 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`BProgress render correctly 1`] = `
4
+ <div class="progress-wrapper"><progress max="100" class="progress is-darkgrey"></progress>
5
+ <!---->
6
+ </div>
7
+ `;
@@ -0,0 +1,17 @@
1
+ import Progress from './Progress'
2
+
3
+ import { use, registerComponent } from '../../utils/plugins'
4
+
5
+ const Plugin = {
6
+ install(Vue) {
7
+ registerComponent(Vue, Progress)
8
+ }
9
+ }
10
+
11
+ use(Plugin)
12
+
13
+ export default Plugin
14
+
15
+ export {
16
+ Progress
17
+ }
@@ -1,10 +1,27 @@
1
1
  import { shallowMount } from '@vue/test-utils'
2
2
  import BRadio from '@components/radio/Radio'
3
3
 
4
+ let wrapper
5
+
4
6
  describe('BRadio', () => {
7
+ beforeEach(() => {
8
+ wrapper = shallowMount(BRadio)
9
+ })
10
+
5
11
  it('is called', () => {
6
- const wrapper = shallowMount(BRadio)
7
12
  expect(wrapper.name()).toBe('BRadio')
8
13
  expect(wrapper.isVueInstance()).toBeTruthy()
9
14
  })
15
+
16
+ it('has an input radio', () => {
17
+ expect(wrapper.contains('label input[type=radio]')).toBeTruthy()
18
+ })
19
+
20
+ it('emit input event with value when value change', () => {
21
+ wrapper.setProps({ value: true })
22
+ expect(wrapper.vm.computedValue).toBeTruthy()
23
+ wrapper.vm.computedValue = false
24
+ const valueEmitted = wrapper.emitted()['input'][0]
25
+ expect(valueEmitted).toContainEqual(false)
26
+ })
10
27
  })
@@ -4,12 +4,12 @@
4
4
  ref="label"
5
5
  :class="[size, { 'is-disabled': disabled }]"
6
6
  :disabled="disabled"
7
- :tabindex="disabled ? false : 0"
8
- @keydown.prevent.enter.space="$refs.label.click()">
7
+ @click="focus"
8
+ @keydown.prevent.enter="$refs.label.click()">
9
9
  <input
10
10
  v-model="computedValue"
11
- tabindex="-1"
12
11
  type="radio"
12
+ ref="input"
13
13
  @click.stop
14
14
  :disabled="disabled"
15
15
  :required="required"
@@ -24,8 +24,8 @@
24
24
  export default {
25
25
  name: 'BRadio',
26
26
  props: {
27
- value: [String, Number, Boolean, Function, Object, Array, Symbol],
28
- nativeValue: [String, Number, Boolean, Function, Object, Array, Symbol],
27
+ value: [String, Number, Boolean, Function, Object, Array],
28
+ nativeValue: [String, Number, Boolean, Function, Object, Array],
29
29
  type: String,
30
30
  disabled: Boolean,
31
31
  required: Boolean,
@@ -55,6 +55,12 @@ export default {
55
55
  value(value) {
56
56
  this.newValue = value
57
57
  }
58
+ },
59
+ methods: {
60
+ focus() {
61
+ // MacOS FireFox and Safari do not focus when clicked
62
+ this.$refs.input.focus()
63
+ }
58
64
  }
59
65
  }
60
66
  </script>
@@ -1,10 +1,27 @@
1
1
  import { shallowMount } from '@vue/test-utils'
2
2
  import BRadioButton from '@components/radio/RadioButton'
3
3
 
4
+ let wrapper
5
+
4
6
  describe('BRadioButton', () => {
7
+ beforeEach(() => {
8
+ wrapper = shallowMount(BRadioButton)
9
+ })
10
+
5
11
  it('is called', () => {
6
- const wrapper = shallowMount(BRadioButton)
7
12
  expect(wrapper.name()).toBe('BRadioButton')
8
13
  expect(wrapper.isVueInstance()).toBeTruthy()
9
14
  })
15
+
16
+ it('has an input radio', () => {
17
+ expect(wrapper.contains('label input[type=radio]')).toBeTruthy()
18
+ })
19
+
20
+ it('emit input event with value when value change', () => {
21
+ wrapper.setProps({ value: true })
22
+ expect(wrapper.vm.computedValue).toBeTruthy()
23
+ wrapper.vm.computedValue = false
24
+ const valueEmitted = wrapper.emitted()['input'][0]
25
+ expect(valueEmitted).toContainEqual(false)
26
+ })
10
27
  })
@@ -3,20 +3,25 @@
3
3
  <label
4
4
  class="b-radio radio button"
5
5
  ref="label"
6
- :class="[newValue === nativeValue ? type : null, size]"
6
+ :class="[newValue === nativeValue ? type : null, size, {
7
+ 'is-disabled': disabled,
8
+ 'is-focused': isFocused
9
+ }]"
7
10
  :disabled="disabled"
8
- :tabindex="disabled ? false : 0"
9
- @keydown.prevent.enter.space="$refs.label.click()">
11
+ @click="focus"
12
+ @keydown.prevent.enter="$refs.label.click()">
10
13
  <slot/>
11
14
  <input
12
15
  v-model="computedValue"
13
- tabindex="-1"
14
16
  type="radio"
17
+ ref="input"
15
18
  @click.stop
16
19
  :disabled="disabled"
17
20
  :required="required"
18
21
  :name="name"
19
- :value="nativeValue">
22
+ :value="nativeValue"
23
+ @focus="isFocused = true"
24
+ @blur="isFocused = false">
20
25
  </label>
21
26
  </div>
22
27
  </template>
@@ -25,8 +30,8 @@
25
30
  export default {
26
31
  name: 'BRadioButton',
27
32
  props: {
28
- value: [String, Number, Boolean, Function, Object, Array, Symbol],
29
- nativeValue: [String, Number, Boolean, Function, Object, Array, Symbol],
33
+ value: [String, Number, Boolean, Function, Object, Array],
34
+ nativeValue: [String, Number, Boolean, Function, Object, Array],
30
35
  type: {
31
36
  type: String,
32
37
  default: 'is-primary'
@@ -38,7 +43,8 @@ export default {
38
43
  },
39
44
  data() {
40
45
  return {
41
- newValue: this.value
46
+ newValue: this.value,
47
+ isFocused: false
42
48
  }
43
49
  },
44
50
  computed: {
@@ -59,6 +65,12 @@ export default {
59
65
  value(value) {
60
66
  this.newValue = value
61
67
  }
68
+ },
69
+ methods: {
70
+ focus() {
71
+ // MacOS FireFox and Safari do not focus when clicked
72
+ this.$refs.input.focus()
73
+ }
62
74
  }
63
75
  }
64
76
  </script>
@@ -1,10 +1,31 @@
1
1
  import { shallowMount } from '@vue/test-utils'
2
2
  import BSelect from '@components/select/Select'
3
3
 
4
+ let wrapper
5
+
4
6
  describe('BSelect', () => {
7
+ beforeEach(() => {
8
+ wrapper = shallowMount(BSelect)
9
+ })
10
+
5
11
  it('is called', () => {
6
- const wrapper = shallowMount(BSelect)
7
12
  expect(wrapper.name()).toBe('BSelect')
8
13
  expect(wrapper.isVueInstance()).toBeTruthy()
9
14
  })
15
+
16
+ it('render correctly', () => {
17
+ expect(wrapper.html()).toMatchSnapshot()
18
+ })
19
+
20
+ it('has a select element', () => {
21
+ expect(wrapper.contains('select')).toBeTruthy()
22
+ })
23
+
24
+ it('emit input event with value when value change', () => {
25
+ wrapper.setProps({ value: true })
26
+ expect(wrapper.vm.computedValue).toBeTruthy()
27
+ wrapper.vm.computedValue = false
28
+ const valueEmitted = wrapper.emitted()['input'][0]
29
+ expect(valueEmitted).toContainEqual(false)
30
+ })
10
31
  })
@@ -22,6 +22,7 @@
22
22
  {{ placeholder }}
23
23
  </option>
24
24
  </template>
25
+
25
26
  <slot/>
26
27
 
27
28
  </select>
@@ -49,7 +50,7 @@ export default {
49
50
  inheritAttrs: false,
50
51
  props: {
51
52
  value: {
52
- type: [String, Number, Boolean, Object, Array, Symbol, Function],
53
+ type: [String, Number, Boolean, Object, Array, Function],
53
54
  default: null
54
55
  },
55
56
  placeholder: String,
@@ -0,0 +1,7 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`BSelect render correctly 1`] = `
4
+ <div class="control"><span class="select is-empty"><select><!----> </select></span>
5
+ <!---->
6
+ </div>
7
+ `;
@@ -0,0 +1,10 @@
1
+ import { mount } from '@vue/test-utils'
2
+ import BSlider from '@components/slider/Slider'
3
+
4
+ describe('BSlider', () => {
5
+ it('is called', () => {
6
+ const wrapper = mount(BSlider)
7
+ expect(wrapper.name()).toBe('BSlider')
8
+ expect(wrapper.isVueInstance()).toBeTruthy()
9
+ })
10
+ })