buefy 0.9.26 → 0.9.28

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 (259) hide show
  1. package/README.md +3 -1
  2. package/dist/buefy.css +15904 -0
  3. package/dist/buefy.esm.js +17883 -0
  4. package/dist/buefy.esm.min.js +2 -0
  5. package/dist/buefy.js +17967 -0
  6. package/dist/buefy.min.css +1 -0
  7. package/dist/buefy.min.js +2 -0
  8. package/dist/cjs/Autocomplete-7a39c5ce.js +673 -0
  9. package/dist/cjs/Button-01827709.js +114 -0
  10. package/dist/cjs/CheckRadioMixin-c910f2ed.js +45 -0
  11. package/dist/cjs/Checkbox-43f54cc7.js +70 -0
  12. package/dist/cjs/Datepicker-680659bc.js +1679 -0
  13. package/dist/cjs/DropdownItem-422f8c34.js +559 -0
  14. package/dist/cjs/Field-4557b10c.js +315 -0
  15. package/dist/cjs/FormElementMixin-193a88b8.js +163 -0
  16. package/dist/cjs/Icon-78961800.js +189 -0
  17. package/dist/cjs/Image-c4bcd9b3.js +299 -0
  18. package/dist/cjs/InjectedChildMixin-d6bf7f91.js +135 -0
  19. package/dist/cjs/Input-e5a72d97.js +248 -0
  20. package/dist/cjs/Loading-6f2c7075.js +150 -0
  21. package/dist/cjs/MessageMixin-8d959514.js +146 -0
  22. package/dist/cjs/Modal-4cf07210.js +278 -0
  23. package/dist/cjs/NoticeMixin-01121bd2.js +154 -0
  24. package/dist/cjs/Pagination-d6b3fb85.js +413 -0
  25. package/dist/cjs/Select-2b3879bc.js +100 -0
  26. package/dist/cjs/SlotComponent-4fb48389.js +53 -0
  27. package/dist/cjs/TabbedChildMixin-907cad32.js +222 -0
  28. package/dist/cjs/Tag-437f65fb.js +154 -0
  29. package/dist/cjs/Timepicker-498fa02b.js +67 -0
  30. package/dist/cjs/TimepickerMixin-6c1a4ab4.js +661 -0
  31. package/dist/cjs/Tooltip-c1df7ee3.js +370 -0
  32. package/dist/cjs/_rollupPluginBabelHelpers-8b2e54ad.js +365 -0
  33. package/dist/cjs/autocomplete.js +22 -0
  34. package/dist/cjs/breadcrumb.js +139 -0
  35. package/dist/cjs/button.js +20 -0
  36. package/dist/cjs/carousel.js +662 -0
  37. package/dist/cjs/checkbox.js +86 -0
  38. package/dist/cjs/clockpicker.js +461 -0
  39. package/dist/cjs/collapse.js +128 -0
  40. package/dist/cjs/colorpicker.js +23 -0
  41. package/dist/cjs/config-8cfb5a4a.js +81 -0
  42. package/dist/cjs/config.js +18 -0
  43. package/dist/cjs/datepicker.js +27 -0
  44. package/dist/cjs/datetimepicker.js +377 -0
  45. package/dist/cjs/dialog.js +308 -0
  46. package/dist/cjs/dropdown.js +23 -0
  47. package/dist/cjs/field.js +18 -0
  48. package/dist/cjs/helpers.js +375 -0
  49. package/dist/cjs/icon.js +19 -0
  50. package/dist/cjs/image.js +19 -0
  51. package/dist/cjs/index-99d1c930.js +1633 -0
  52. package/dist/cjs/index.js +216 -0
  53. package/dist/cjs/input.js +21 -0
  54. package/dist/cjs/loading.js +38 -0
  55. package/dist/cjs/menu.js +304 -0
  56. package/dist/cjs/message.js +67 -0
  57. package/dist/cjs/modal.js +59 -0
  58. package/dist/cjs/navbar.js +679 -0
  59. package/dist/cjs/notification.js +181 -0
  60. package/dist/cjs/numberinput.js +278 -0
  61. package/dist/cjs/pagination.js +22 -0
  62. package/dist/cjs/plugins-7f41b028.js +94 -0
  63. package/dist/cjs/progress.js +239 -0
  64. package/dist/cjs/radio.js +130 -0
  65. package/dist/cjs/rate.js +156 -0
  66. package/dist/cjs/select.js +21 -0
  67. package/dist/cjs/sidebar.js +303 -0
  68. package/dist/cjs/skeleton.js +111 -0
  69. package/dist/cjs/slider.js +603 -0
  70. package/dist/cjs/snackbar.js +132 -0
  71. package/dist/cjs/ssr-20dba236.js +10 -0
  72. package/dist/cjs/steps.js +278 -0
  73. package/dist/cjs/switch.js +139 -0
  74. package/dist/cjs/table.js +1695 -0
  75. package/dist/cjs/tabs.js +214 -0
  76. package/dist/cjs/tag.js +70 -0
  77. package/dist/cjs/taginput.js +331 -0
  78. package/dist/cjs/timepicker.js +28 -0
  79. package/dist/cjs/toast.js +106 -0
  80. package/dist/cjs/tooltip.js +19 -0
  81. package/dist/cjs/trapFocus-261420b0.js +49 -0
  82. package/dist/cjs/upload.js +205 -0
  83. package/dist/components/autocomplete/index.js +1620 -0
  84. package/dist/components/autocomplete/index.min.js +2 -0
  85. package/dist/components/breadcrumb/index.js +297 -0
  86. package/dist/components/breadcrumb/index.min.js +2 -0
  87. package/dist/components/button/index.js +569 -0
  88. package/dist/components/button/index.min.js +2 -0
  89. package/dist/components/carousel/index.js +1629 -0
  90. package/dist/components/carousel/index.min.js +2 -0
  91. package/dist/components/checkbox/index.js +279 -0
  92. package/dist/components/checkbox/index.min.js +2 -0
  93. package/dist/components/clockpicker/index.js +3131 -0
  94. package/dist/components/clockpicker/index.min.js +2 -0
  95. package/dist/components/collapse/index.js +217 -0
  96. package/dist/components/collapse/index.min.js +2 -0
  97. package/dist/components/colorpicker/index.js +4249 -0
  98. package/dist/components/colorpicker/index.min.js +2 -0
  99. package/dist/components/datepicker/index.js +3845 -0
  100. package/dist/components/datepicker/index.min.js +2 -0
  101. package/dist/components/datetimepicker/index.js +4902 -0
  102. package/dist/components/datetimepicker/index.min.js +2 -0
  103. package/dist/components/dialog/index.js +1168 -0
  104. package/dist/components/dialog/index.min.js +2 -0
  105. package/dist/components/dropdown/index.js +1043 -0
  106. package/dist/components/dropdown/index.min.js +2 -0
  107. package/dist/components/field/index.js +511 -0
  108. package/dist/components/field/index.min.js +2 -0
  109. package/dist/components/icon/index.js +463 -0
  110. package/dist/components/icon/index.min.js +2 -0
  111. package/dist/components/image/index.js +513 -0
  112. package/dist/components/image/index.min.js +2 -0
  113. package/dist/components/input/index.js +862 -0
  114. package/dist/components/input/index.min.js +2 -0
  115. package/dist/components/loading/index.js +366 -0
  116. package/dist/components/loading/index.min.js +2 -0
  117. package/dist/components/menu/index.js +748 -0
  118. package/dist/components/menu/index.min.js +2 -0
  119. package/dist/components/message/index.js +650 -0
  120. package/dist/components/message/index.min.js +2 -0
  121. package/dist/components/modal/index.js +624 -0
  122. package/dist/components/modal/index.min.js +2 -0
  123. package/dist/components/navbar/index.js +805 -0
  124. package/dist/components/navbar/index.min.js +2 -0
  125. package/dist/components/notification/index.js +923 -0
  126. package/dist/components/notification/index.min.js +2 -0
  127. package/dist/components/numberinput/index.js +1119 -0
  128. package/dist/components/numberinput/index.min.js +2 -0
  129. package/dist/components/pagination/index.js +868 -0
  130. package/dist/components/pagination/index.min.js +2 -0
  131. package/dist/components/progress/index.js +621 -0
  132. package/dist/components/progress/index.min.js +2 -0
  133. package/dist/components/radio/index.js +260 -0
  134. package/dist/components/radio/index.min.js +2 -0
  135. package/dist/components/rate/index.js +600 -0
  136. package/dist/components/rate/index.min.js +2 -0
  137. package/dist/components/select/index.js +715 -0
  138. package/dist/components/select/index.min.js +2 -0
  139. package/dist/components/sidebar/index.js +467 -0
  140. package/dist/components/sidebar/index.min.js +2 -0
  141. package/dist/components/skeleton/index.js +200 -0
  142. package/dist/components/skeleton/index.min.js +2 -0
  143. package/dist/components/slider/index.js +1264 -0
  144. package/dist/components/slider/index.min.js +2 -0
  145. package/dist/components/snackbar/index.js +527 -0
  146. package/dist/components/snackbar/index.min.js +2 -0
  147. package/dist/components/steps/index.js +1180 -0
  148. package/dist/components/steps/index.min.js +2 -0
  149. package/dist/components/switch/index.js +297 -0
  150. package/dist/components/switch/index.min.js +2 -0
  151. package/dist/components/table/index.js +3480 -0
  152. package/dist/components/table/index.min.js +2 -0
  153. package/dist/components/tabs/index.js +1116 -0
  154. package/dist/components/tabs/index.min.js +2 -0
  155. package/dist/components/tag/index.js +307 -0
  156. package/dist/components/tag/index.min.js +2 -0
  157. package/dist/components/taginput/index.js +2104 -0
  158. package/dist/components/taginput/index.min.js +2 -0
  159. package/dist/components/timepicker/index.js +2843 -0
  160. package/dist/components/timepicker/index.min.js +2 -0
  161. package/dist/components/toast/index.js +501 -0
  162. package/dist/components/toast/index.min.js +2 -0
  163. package/dist/components/tooltip/index.js +630 -0
  164. package/dist/components/tooltip/index.min.js +2 -0
  165. package/dist/components/upload/index.js +525 -0
  166. package/dist/components/upload/index.min.js +2 -0
  167. package/dist/esm/Autocomplete-1a6e8770.js +671 -0
  168. package/dist/esm/Button-521f6efc.js +112 -0
  169. package/dist/esm/CheckRadioMixin-e726a83c.js +43 -0
  170. package/dist/esm/Checkbox-1d02686e.js +68 -0
  171. package/dist/esm/Datepicker-0ae1e826.js +1677 -0
  172. package/dist/esm/DropdownItem-55682322.js +556 -0
  173. package/dist/esm/Field-3ceba31e.js +313 -0
  174. package/dist/esm/FormElementMixin-b223d3c7.js +161 -0
  175. package/dist/esm/Icon-60d47b31.js +187 -0
  176. package/dist/esm/Image-75808acb.js +297 -0
  177. package/dist/esm/InjectedChildMixin-b4220787.js +130 -0
  178. package/dist/esm/Input-20612b63.js +246 -0
  179. package/dist/esm/Loading-ae028ea5.js +148 -0
  180. package/dist/esm/MessageMixin-d577a9f5.js +144 -0
  181. package/dist/esm/Modal-7da7641f.js +276 -0
  182. package/dist/esm/NoticeMixin-bd6f61d9.js +152 -0
  183. package/dist/esm/Pagination-68f12c1e.js +409 -0
  184. package/dist/esm/Select-97781d4e.js +98 -0
  185. package/dist/esm/SlotComponent-8871a20f.js +51 -0
  186. package/dist/esm/TabbedChildMixin-bcb13767.js +219 -0
  187. package/dist/esm/Tag-6365aa46.js +152 -0
  188. package/dist/esm/Timepicker-38480bbc.js +65 -0
  189. package/dist/esm/TimepickerMixin-d736b0a9.js +659 -0
  190. package/dist/esm/Tooltip-d98a769c.js +368 -0
  191. package/dist/esm/_rollupPluginBabelHelpers-df313029.js +350 -0
  192. package/dist/esm/autocomplete.js +18 -0
  193. package/dist/esm/breadcrumb.js +133 -0
  194. package/dist/esm/button.js +16 -0
  195. package/dist/esm/carousel.js +655 -0
  196. package/dist/esm/checkbox.js +81 -0
  197. package/dist/esm/clockpicker.js +456 -0
  198. package/dist/esm/collapse.js +123 -0
  199. package/dist/esm/colorpicker.js +14 -0
  200. package/dist/esm/config-e7d4b9c2.js +78 -0
  201. package/dist/esm/config.js +14 -0
  202. package/dist/esm/datepicker.js +23 -0
  203. package/dist/esm/datetimepicker.js +372 -0
  204. package/dist/esm/dialog.js +302 -0
  205. package/dist/esm/dropdown.js +18 -0
  206. package/dist/esm/field.js +14 -0
  207. package/dist/esm/helpers.js +348 -0
  208. package/dist/esm/icon.js +15 -0
  209. package/dist/esm/image.js +15 -0
  210. package/dist/esm/index-903f63ea.js +1629 -0
  211. package/dist/esm/index.js +182 -0
  212. package/dist/esm/input.js +17 -0
  213. package/dist/esm/loading.js +33 -0
  214. package/dist/esm/menu.js +297 -0
  215. package/dist/esm/message.js +62 -0
  216. package/dist/esm/modal.js +54 -0
  217. package/dist/esm/navbar.js +672 -0
  218. package/dist/esm/notification.js +175 -0
  219. package/dist/esm/numberinput.js +273 -0
  220. package/dist/esm/pagination.js +17 -0
  221. package/dist/esm/plugins-218aea86.js +89 -0
  222. package/dist/esm/progress.js +233 -0
  223. package/dist/esm/radio.js +124 -0
  224. package/dist/esm/rate.js +151 -0
  225. package/dist/esm/select.js +17 -0
  226. package/dist/esm/sidebar.js +298 -0
  227. package/dist/esm/skeleton.js +106 -0
  228. package/dist/esm/slider.js +597 -0
  229. package/dist/esm/snackbar.js +126 -0
  230. package/dist/esm/ssr-b847d137.js +7 -0
  231. package/dist/esm/steps.js +272 -0
  232. package/dist/esm/switch.js +134 -0
  233. package/dist/esm/table.js +1689 -0
  234. package/dist/esm/tabs.js +208 -0
  235. package/dist/esm/tag.js +65 -0
  236. package/dist/esm/taginput.js +326 -0
  237. package/dist/esm/timepicker.js +24 -0
  238. package/dist/esm/toast.js +100 -0
  239. package/dist/esm/tooltip.js +15 -0
  240. package/dist/esm/trapFocus-f0736873.js +47 -0
  241. package/dist/esm/upload.js +200 -0
  242. package/dist/vetur/attributes.json +3238 -0
  243. package/dist/vetur/tags.json +1183 -0
  244. package/package.json +3 -3
  245. package/src/components/autocomplete/Autocomplete.spec.js +16 -0
  246. package/src/components/autocomplete/Autocomplete.vue +9 -3
  247. package/src/components/colorpicker/ColorpickerHSLRepresentationSquare.vue +2 -0
  248. package/src/components/colorpicker/ColorpickerHSLRepresentationTriangle.vue +2 -0
  249. package/src/components/dropdown/Dropdown.vue +51 -3
  250. package/src/components/numberinput/Numberinput.vue +4 -0
  251. package/src/components/sidebar/Sidebar.vue +1 -0
  252. package/src/components/slider/Slider.vue +7 -2
  253. package/src/components/slider/SliderThumb.vue +8 -0
  254. package/src/components/table/Table.vue +4 -1
  255. package/src/components/table/TableColumn.spec.js +51 -0
  256. package/src/components/table/TableColumn.vue +8 -1
  257. package/src/components/taginput/Taginput.vue +7 -2
  258. package/src/components/tooltip/Tooltip.vue +10 -3
  259. package/src/scss/components/_dropdown.scss +4 -2
@@ -0,0 +1,1677 @@
1
+ import { _ as _defineProperty, e as _toConsumableArray } from './_rollupPluginBabelHelpers-df313029.js';
2
+ import { F as FormElementMixin } from './FormElementMixin-b223d3c7.js';
3
+ import { isDefined, getMonthNames, getWeekdayNames, isMobile, matchWithGroups } from './helpers.js';
4
+ import { c as config } from './config-e7d4b9c2.js';
5
+ import { D as DropdownItem, a as Dropdown } from './DropdownItem-55682322.js';
6
+ import { I as Input } from './Input-20612b63.js';
7
+ import { F as Field } from './Field-3ceba31e.js';
8
+ import { S as Select } from './Select-97781d4e.js';
9
+ import { I as Icon } from './Icon-60d47b31.js';
10
+ import { n as normalizeComponent } from './plugins-218aea86.js';
11
+
12
+ //
13
+ //
14
+ //
15
+ //
16
+ //
17
+ //
18
+ //
19
+ //
20
+ //
21
+ //
22
+ //
23
+ //
24
+ //
25
+ //
26
+ //
27
+ //
28
+ //
29
+ //
30
+ //
31
+ //
32
+ //
33
+ //
34
+ //
35
+ //
36
+ //
37
+ //
38
+ //
39
+ //
40
+ //
41
+ //
42
+ //
43
+ //
44
+ //
45
+ //
46
+ //
47
+ //
48
+ //
49
+ //
50
+ //
51
+ //
52
+ //
53
+ //
54
+ //
55
+ //
56
+ //
57
+ //
58
+ //
59
+ //
60
+ //
61
+ //
62
+
63
+ var script$3 = {
64
+ name: 'BDatepickerTableRow',
65
+ inject: {
66
+ $datepicker: {
67
+ name: '$datepicker',
68
+ default: false
69
+ }
70
+ },
71
+ props: {
72
+ selectedDate: {
73
+ type: [Date, Array]
74
+ },
75
+ hoveredDateRange: Array,
76
+ day: {
77
+ type: Number
78
+ },
79
+ week: {
80
+ type: Array,
81
+ required: true
82
+ },
83
+ month: {
84
+ type: Number,
85
+ required: true
86
+ },
87
+ minDate: Date,
88
+ maxDate: Date,
89
+ disabled: Boolean,
90
+ unselectableDates: [Array, Function],
91
+ unselectableDaysOfWeek: Array,
92
+ selectableDates: [Array, Function],
93
+ events: Array,
94
+ indicators: String,
95
+ dateCreator: Function,
96
+ nearbyMonthDays: Boolean,
97
+ nearbySelectableMonthDays: Boolean,
98
+ showWeekNumber: Boolean,
99
+ weekNumberClickable: Boolean,
100
+ range: Boolean,
101
+ multiple: Boolean,
102
+ rulesForFirstWeek: Number,
103
+ firstDayOfWeek: Number
104
+ },
105
+ watch: {
106
+ day: function day(_day) {
107
+ var _this = this;
108
+ var refName = "day-".concat(this.month, "-").concat(_day);
109
+ this.$nextTick(function () {
110
+ if (_this.$refs[refName] && _this.$refs[refName].length > 0) {
111
+ if (_this.$refs[refName][0]) {
112
+ _this.$refs[refName][0].focus();
113
+ }
114
+ }
115
+ }); // $nextTick needed when month is changed
116
+ }
117
+ },
118
+ methods: {
119
+ firstWeekOffset: function firstWeekOffset(year, dow, doy) {
120
+ // first-week day -- which january is always in the first week (4 for iso, 1 for other)
121
+ var fwd = 7 + dow - doy;
122
+ // first-week day local weekday -- which local weekday is fwd
123
+ var firstJanuary = new Date(year, 0, fwd);
124
+ var fwdlw = (7 + firstJanuary.getDay() - dow) % 7;
125
+ return -fwdlw + fwd - 1;
126
+ },
127
+ daysInYear: function daysInYear(year) {
128
+ return this.isLeapYear(year) ? 366 : 365;
129
+ },
130
+ isLeapYear: function isLeapYear(year) {
131
+ return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
132
+ },
133
+ getSetDayOfYear: function getSetDayOfYear(input) {
134
+ return Math.round((input - new Date(input.getFullYear(), 0, 1)) / 864e5) + 1;
135
+ },
136
+ weeksInYear: function weeksInYear(year, dow, doy) {
137
+ var weekOffset = this.firstWeekOffset(year, dow, doy);
138
+ var weekOffsetNext = this.firstWeekOffset(year + 1, dow, doy);
139
+ return (this.daysInYear(year) - weekOffset + weekOffsetNext) / 7;
140
+ },
141
+ getWeekNumber: function getWeekNumber(mom) {
142
+ var dow = this.firstDayOfWeek; // first day of week
143
+ // Rules for the first week : 1 for the 1st January, 4 for the 4th January
144
+ var doy = this.rulesForFirstWeek;
145
+ var weekOffset = this.firstWeekOffset(mom.getFullYear(), dow, doy);
146
+ var week = Math.floor((this.getSetDayOfYear(mom) - weekOffset - 1) / 7) + 1;
147
+ var resWeek;
148
+ var resYear;
149
+ if (week < 1) {
150
+ resYear = mom.getFullYear() - 1;
151
+ resWeek = week + this.weeksInYear(resYear, dow, doy);
152
+ } else if (week > this.weeksInYear(mom.getFullYear(), dow, doy)) {
153
+ resWeek = week - this.weeksInYear(mom.getFullYear(), dow, doy);
154
+ resYear = mom.getFullYear() + 1;
155
+ } else {
156
+ resYear = mom.getFullYear();
157
+ resWeek = week;
158
+ }
159
+ return {
160
+ week: resWeek,
161
+ year: resYear
162
+ };
163
+ },
164
+ clickWeekNumber: function clickWeekNumber(weekData) {
165
+ if (this.weekNumberClickable) {
166
+ this.$datepicker.$emit('week-number-click', weekData.week, weekData.year);
167
+ }
168
+ },
169
+ /*
170
+ * Check that selected day is within earliest/latest params and
171
+ * is within this month
172
+ */
173
+ selectableDate: function selectableDate(day) {
174
+ var validity = [];
175
+ if (this.minDate) {
176
+ validity.push(day >= this.minDate);
177
+ }
178
+ if (this.maxDate) {
179
+ validity.push(day <= this.maxDate);
180
+ }
181
+ if (this.nearbyMonthDays && !this.nearbySelectableMonthDays) {
182
+ validity.push(day.getMonth() === this.month);
183
+ }
184
+ if (this.selectableDates) {
185
+ if (typeof this.selectableDates === 'function') {
186
+ if (this.selectableDates(day)) {
187
+ return true;
188
+ } else {
189
+ validity.push(false);
190
+ }
191
+ } else {
192
+ for (var i = 0; i < this.selectableDates.length; i++) {
193
+ var enabledDate = this.selectableDates[i];
194
+ if (day.getDate() === enabledDate.getDate() && day.getFullYear() === enabledDate.getFullYear() && day.getMonth() === enabledDate.getMonth()) {
195
+ return true;
196
+ } else {
197
+ validity.push(false);
198
+ }
199
+ }
200
+ }
201
+ }
202
+ if (this.unselectableDates) {
203
+ if (typeof this.unselectableDates === 'function') {
204
+ validity.push(!this.unselectableDates(day));
205
+ } else {
206
+ for (var _i = 0; _i < this.unselectableDates.length; _i++) {
207
+ var disabledDate = this.unselectableDates[_i];
208
+ validity.push(day.getDate() !== disabledDate.getDate() || day.getFullYear() !== disabledDate.getFullYear() || day.getMonth() !== disabledDate.getMonth());
209
+ }
210
+ }
211
+ }
212
+ if (this.unselectableDaysOfWeek) {
213
+ for (var _i2 = 0; _i2 < this.unselectableDaysOfWeek.length; _i2++) {
214
+ var dayOfWeek = this.unselectableDaysOfWeek[_i2];
215
+ validity.push(day.getDay() !== dayOfWeek);
216
+ }
217
+ }
218
+ return validity.indexOf(false) < 0;
219
+ },
220
+ /*
221
+ * Emit select event with chosen date as payload
222
+ */
223
+ emitChosenDate: function emitChosenDate(day) {
224
+ if (this.disabled) return;
225
+ if (this.selectableDate(day)) {
226
+ this.$emit('select', day);
227
+ }
228
+ },
229
+ eventsDateMatch: function eventsDateMatch(day) {
230
+ if (!this.events || !this.events.length) return false;
231
+ var dayEvents = [];
232
+ for (var i = 0; i < this.events.length; i++) {
233
+ if (this.events[i].date.getDay() === day.getDay()) {
234
+ dayEvents.push(this.events[i]);
235
+ }
236
+ }
237
+ if (!dayEvents.length) {
238
+ return false;
239
+ }
240
+ return dayEvents;
241
+ },
242
+ /*
243
+ * Build classObject for cell using validations
244
+ */
245
+ classObject: function classObject(day) {
246
+ function dateMatch(dateOne, dateTwo, multiple) {
247
+ // if either date is null or undefined, return false
248
+ // if using multiple flag, return false
249
+ if (!dateOne || !dateTwo || multiple) {
250
+ return false;
251
+ }
252
+ if (Array.isArray(dateTwo)) {
253
+ return dateTwo.some(function (date) {
254
+ return dateOne.getDate() === date.getDate() && dateOne.getFullYear() === date.getFullYear() && dateOne.getMonth() === date.getMonth();
255
+ });
256
+ }
257
+ return dateOne.getDate() === dateTwo.getDate() && dateOne.getFullYear() === dateTwo.getFullYear() && dateOne.getMonth() === dateTwo.getMonth();
258
+ }
259
+ function dateWithin(dateOne, dates, multiple) {
260
+ if (!Array.isArray(dates) || multiple) {
261
+ return false;
262
+ }
263
+ return dateOne > dates[0] && dateOne < dates[1];
264
+ }
265
+ return _defineProperty({
266
+ 'is-selected': dateMatch(day, this.selectedDate) || dateWithin(day, this.selectedDate, this.multiple),
267
+ 'is-first-selected': dateMatch(day, Array.isArray(this.selectedDate) && this.selectedDate[0], this.multiple),
268
+ 'is-within-selected': dateWithin(day, this.selectedDate, this.multiple),
269
+ 'is-last-selected': dateMatch(day, Array.isArray(this.selectedDate) && this.selectedDate[1], this.multiple),
270
+ 'is-within-hovered-range': this.hoveredDateRange && this.hoveredDateRange.length === 2 && (dateMatch(day, this.hoveredDateRange) || dateWithin(day, this.hoveredDateRange)),
271
+ 'is-first-hovered': dateMatch(day, Array.isArray(this.hoveredDateRange) && this.hoveredDateRange[0]),
272
+ 'is-within-hovered': dateWithin(day, this.hoveredDateRange),
273
+ 'is-last-hovered': dateMatch(day, Array.isArray(this.hoveredDateRange) && this.hoveredDateRange[1]),
274
+ 'is-today': dateMatch(day, this.dateCreator()),
275
+ 'is-selectable': this.selectableDate(day) && !this.disabled,
276
+ 'is-unselectable': !this.selectableDate(day) || this.disabled,
277
+ 'is-invisible': !this.nearbyMonthDays && day.getMonth() !== this.month,
278
+ 'is-nearby': this.nearbySelectableMonthDays && day.getMonth() !== this.month,
279
+ 'has-event': this.eventsDateMatch(day)
280
+ }, this.indicators, this.eventsDateMatch(day));
281
+ },
282
+ setRangeHoverEndDate: function setRangeHoverEndDate(day) {
283
+ if (this.range) {
284
+ this.$emit('rangeHoverEndDate', day);
285
+ }
286
+ },
287
+ manageKeydown: function manageKeydown(event, weekDay) {
288
+ // https://developer.mozilla.org/fr/docs/Web/API/KeyboardEvent/key/Key_Values#Navigation_keys
289
+ var key = event.key;
290
+ var preventDefault = true;
291
+ switch (key) {
292
+ case 'Tab':
293
+ {
294
+ preventDefault = false;
295
+ break;
296
+ }
297
+ case ' ':
298
+ case 'Space':
299
+ case 'Spacebar':
300
+ case 'Enter':
301
+ {
302
+ this.emitChosenDate(weekDay);
303
+ break;
304
+ }
305
+ case 'ArrowLeft':
306
+ case 'Left':
307
+ {
308
+ this.changeFocus(weekDay, -1);
309
+ break;
310
+ }
311
+ case 'ArrowRight':
312
+ case 'Right':
313
+ {
314
+ this.changeFocus(weekDay, 1);
315
+ break;
316
+ }
317
+ case 'ArrowUp':
318
+ case 'Up':
319
+ {
320
+ this.changeFocus(weekDay, -7);
321
+ break;
322
+ }
323
+ case 'ArrowDown':
324
+ case 'Down':
325
+ {
326
+ this.changeFocus(weekDay, 7);
327
+ break;
328
+ }
329
+ }
330
+ if (preventDefault) {
331
+ event.preventDefault();
332
+ }
333
+ },
334
+ changeFocus: function changeFocus(day, inc) {
335
+ var nextDay = new Date(day.getTime());
336
+ nextDay.setDate(day.getDate() + inc);
337
+ while ((!this.minDate || nextDay > this.minDate) && (!this.maxDate || nextDay < this.maxDate) && !this.selectableDate(nextDay)) {
338
+ nextDay.setDate(nextDay.getDate() + Math.sign(inc));
339
+ }
340
+ this.setRangeHoverEndDate(nextDay);
341
+ this.$emit('change-focus', nextDay);
342
+ }
343
+ }
344
+ };
345
+
346
+ /* script */
347
+ const __vue_script__$3 = script$3;
348
+
349
+ /* template */
350
+ var __vue_render__$3 = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"datepicker-row"},[(_vm.showWeekNumber)?_c('a',{staticClass:"datepicker-cell is-week-number",class:{'is-clickable': _vm.weekNumberClickable },on:{"click":function($event){$event.preventDefault();_vm.clickWeekNumber(_vm.getWeekNumber(_vm.week[6]));}}},[_c('span',[_vm._v(_vm._s(_vm.getWeekNumber(_vm.week[6]).week))])]):_vm._e(),_vm._l((_vm.week),function(weekDay,index){return [(_vm.selectableDate(weekDay) && !_vm.disabled)?_c('a',{key:index,ref:("day-" + (weekDay.getMonth()) + "-" + (weekDay.getDate())),refInFor:true,staticClass:"datepicker-cell",class:_vm.classObject(weekDay),attrs:{"role":"button","href":"#","disabled":_vm.disabled,"tabindex":_vm.day === weekDay.getDate() && _vm.month === weekDay.getMonth() ? null : -1},on:{"click":function($event){$event.preventDefault();return _vm.emitChosenDate(weekDay)},"mouseenter":function($event){return _vm.setRangeHoverEndDate(weekDay)},"keydown":function($event){return _vm.manageKeydown($event, weekDay)}}},[_c('span',[_vm._v(_vm._s(weekDay.getDate()))]),(_vm.eventsDateMatch(weekDay))?_c('div',{staticClass:"events"},_vm._l((_vm.eventsDateMatch(weekDay)),function(event,index){return _c('div',{key:index,staticClass:"event",class:event.type})}),0):_vm._e()]):_c('div',{key:index,staticClass:"datepicker-cell",class:_vm.classObject(weekDay)},[_c('span',[_vm._v(_vm._s(weekDay.getDate()))]),(_vm.eventsDateMatch(weekDay))?_c('div',{staticClass:"events"},_vm._l((_vm.eventsDateMatch(weekDay)),function(event,index){return _c('div',{key:index,staticClass:"event",class:event.type})}),0):_vm._e()])]})],2)};
351
+ var __vue_staticRenderFns__$3 = [];
352
+
353
+ /* style */
354
+ const __vue_inject_styles__$3 = undefined;
355
+ /* scoped */
356
+ const __vue_scope_id__$3 = undefined;
357
+ /* module identifier */
358
+ const __vue_module_identifier__$3 = undefined;
359
+ /* functional template */
360
+ const __vue_is_functional_template__$3 = false;
361
+ /* style inject */
362
+
363
+ /* style inject SSR */
364
+
365
+ /* style inject shadow dom */
366
+
367
+
368
+
369
+ const __vue_component__$3 = /*#__PURE__*/normalizeComponent(
370
+ { render: __vue_render__$3, staticRenderFns: __vue_staticRenderFns__$3 },
371
+ __vue_inject_styles__$3,
372
+ __vue_script__$3,
373
+ __vue_scope_id__$3,
374
+ __vue_is_functional_template__$3,
375
+ __vue_module_identifier__$3,
376
+ false,
377
+ undefined,
378
+ undefined,
379
+ undefined
380
+ );
381
+
382
+ var DatepickerTableRow = __vue_component__$3;
383
+
384
+ var script$2 = {
385
+ name: 'BDatepickerTable',
386
+ components: _defineProperty({}, DatepickerTableRow.name, DatepickerTableRow),
387
+ props: {
388
+ value: {
389
+ type: [Date, Array]
390
+ },
391
+ dayNames: Array,
392
+ monthNames: Array,
393
+ firstDayOfWeek: Number,
394
+ events: Array,
395
+ indicators: String,
396
+ minDate: Date,
397
+ maxDate: Date,
398
+ focused: Object,
399
+ disabled: Boolean,
400
+ dateCreator: Function,
401
+ unselectableDates: [Array, Function],
402
+ unselectableDaysOfWeek: Array,
403
+ selectableDates: [Array, Function],
404
+ nearbyMonthDays: Boolean,
405
+ nearbySelectableMonthDays: Boolean,
406
+ showWeekNumber: Boolean,
407
+ weekNumberClickable: Boolean,
408
+ rulesForFirstWeek: Number,
409
+ range: Boolean,
410
+ multiple: Boolean
411
+ },
412
+ data: function data() {
413
+ return {
414
+ selectedBeginDate: undefined,
415
+ selectedEndDate: undefined,
416
+ hoveredEndDate: undefined
417
+ };
418
+ },
419
+ computed: {
420
+ multipleSelectedDates: {
421
+ get: function get() {
422
+ return this.multiple && this.value ? this.value : [];
423
+ },
424
+ set: function set(value) {
425
+ this.$emit('input', value);
426
+ }
427
+ },
428
+ visibleDayNames: function visibleDayNames() {
429
+ var visibleDayNames = [];
430
+ var index = this.firstDayOfWeek;
431
+ while (visibleDayNames.length < this.dayNames.length) {
432
+ var currentDayName = this.dayNames[index % this.dayNames.length];
433
+ visibleDayNames.push(currentDayName);
434
+ index++;
435
+ }
436
+ if (this.showWeekNumber) visibleDayNames.unshift('');
437
+ return visibleDayNames;
438
+ },
439
+ hasEvents: function hasEvents() {
440
+ return this.events && this.events.length;
441
+ },
442
+ /*
443
+ * Return array of all events in the specified month
444
+ */
445
+ eventsInThisMonth: function eventsInThisMonth() {
446
+ if (!this.events) return [];
447
+ var monthEvents = [];
448
+ for (var i = 0; i < this.events.length; i++) {
449
+ var event = this.events[i];
450
+ if (!event.hasOwnProperty('date')) {
451
+ event = {
452
+ date: event
453
+ };
454
+ }
455
+ if (!event.hasOwnProperty('type')) {
456
+ event.type = 'is-primary';
457
+ }
458
+ if (event.date.getMonth() === this.focused.month && event.date.getFullYear() === this.focused.year) {
459
+ monthEvents.push(event);
460
+ }
461
+ }
462
+ return monthEvents;
463
+ },
464
+ /*
465
+ * Return array of all weeks in the specified month
466
+ */
467
+ weeksInThisMonth: function weeksInThisMonth() {
468
+ this.validateFocusedDay();
469
+ var month = this.focused.month;
470
+ var year = this.focused.year;
471
+ var weeksInThisMonth = [];
472
+ var startingDay = 1;
473
+ while (weeksInThisMonth.length < 6) {
474
+ var newWeek = this.weekBuilder(startingDay, month, year);
475
+ weeksInThisMonth.push(newWeek);
476
+ startingDay += 7;
477
+ }
478
+ return weeksInThisMonth;
479
+ },
480
+ hoveredDateRange: function hoveredDateRange() {
481
+ if (!this.range) {
482
+ return [];
483
+ }
484
+ if (!isNaN(this.selectedEndDate)) {
485
+ return [];
486
+ }
487
+ if (this.hoveredEndDate < this.selectedBeginDate) {
488
+ return [this.hoveredEndDate, this.selectedBeginDate].filter(isDefined);
489
+ }
490
+ return [this.selectedBeginDate, this.hoveredEndDate].filter(isDefined);
491
+ }
492
+ },
493
+ methods: {
494
+ /*
495
+ * Emit input event with selected date as payload for v-model in parent
496
+ */
497
+ updateSelectedDate: function updateSelectedDate(date) {
498
+ if (!this.range && !this.multiple) {
499
+ this.$emit('input', date);
500
+ } else if (this.range) {
501
+ this.handleSelectRangeDate(date);
502
+ } else if (this.multiple) {
503
+ this.handleSelectMultipleDates(date);
504
+ }
505
+ },
506
+ /*
507
+ * If both begin and end dates are set, reset the end date and set the begin date.
508
+ * If only begin date is selected, emit an array of the begin date and the new date.
509
+ * If not set, only set the begin date.
510
+ */
511
+ handleSelectRangeDate: function handleSelectRangeDate(date) {
512
+ if (this.selectedBeginDate && this.selectedEndDate) {
513
+ this.selectedBeginDate = date;
514
+ this.selectedEndDate = undefined;
515
+ this.$emit('range-start', date);
516
+ } else if (this.selectedBeginDate && !this.selectedEndDate) {
517
+ if (this.selectedBeginDate > date) {
518
+ this.selectedEndDate = this.selectedBeginDate;
519
+ this.selectedBeginDate = date;
520
+ } else {
521
+ this.selectedEndDate = date;
522
+ }
523
+ this.$emit('range-end', date);
524
+ this.$emit('input', [this.selectedBeginDate, this.selectedEndDate]);
525
+ } else {
526
+ this.selectedBeginDate = date;
527
+ this.$emit('range-start', date);
528
+ }
529
+ },
530
+ /*
531
+ * If selected date already exists list of selected dates, remove it from the list
532
+ * Otherwise, add date to list of selected dates
533
+ */
534
+ handleSelectMultipleDates: function handleSelectMultipleDates(date) {
535
+ var multipleSelect = this.multipleSelectedDates.filter(function (selectedDate) {
536
+ return selectedDate.getDate() === date.getDate() && selectedDate.getFullYear() === date.getFullYear() && selectedDate.getMonth() === date.getMonth();
537
+ });
538
+ if (multipleSelect.length) {
539
+ this.multipleSelectedDates = this.multipleSelectedDates.filter(function (selectedDate) {
540
+ return selectedDate.getDate() !== date.getDate() || selectedDate.getFullYear() !== date.getFullYear() || selectedDate.getMonth() !== date.getMonth();
541
+ });
542
+ } else {
543
+ this.multipleSelectedDates = [].concat(_toConsumableArray(this.multipleSelectedDates), [date]);
544
+ }
545
+ },
546
+ /*
547
+ * Return array of all days in the week that the startingDate is within
548
+ */
549
+ weekBuilder: function weekBuilder(startingDate, month, year) {
550
+ var thisMonth = new Date(year, month);
551
+ var thisWeek = [];
552
+ var dayOfWeek = new Date(year, month, startingDate).getDay();
553
+ var end = dayOfWeek >= this.firstDayOfWeek ? dayOfWeek - this.firstDayOfWeek : 7 - this.firstDayOfWeek + dayOfWeek;
554
+ var daysAgo = 1;
555
+ for (var i = 0; i < end; i++) {
556
+ thisWeek.unshift(new Date(thisMonth.getFullYear(), thisMonth.getMonth(), startingDate - daysAgo));
557
+ daysAgo++;
558
+ }
559
+ thisWeek.push(new Date(year, month, startingDate));
560
+ var daysForward = 1;
561
+ while (thisWeek.length < 7) {
562
+ thisWeek.push(new Date(year, month, startingDate + daysForward));
563
+ daysForward++;
564
+ }
565
+ return thisWeek;
566
+ },
567
+ validateFocusedDay: function validateFocusedDay() {
568
+ var focusedDate = new Date(this.focused.year, this.focused.month, this.focused.day);
569
+ if (this.selectableDate(focusedDate)) return;
570
+ var day = 0;
571
+ // Number of days in the current month
572
+ var monthDays = new Date(this.focused.year, this.focused.month + 1, 0).getDate();
573
+ var firstFocusable = null;
574
+ while (!firstFocusable && ++day < monthDays) {
575
+ var date = new Date(this.focused.year, this.focused.month, day);
576
+ if (this.selectableDate(date)) {
577
+ firstFocusable = focusedDate;
578
+ var focused = {
579
+ day: date.getDate(),
580
+ month: date.getMonth(),
581
+ year: date.getFullYear()
582
+ };
583
+ this.$emit('update:focused', focused);
584
+ }
585
+ }
586
+ },
587
+ /*
588
+ * Check that selected day is within earliest/latest params and
589
+ * is within this month
590
+ */
591
+ selectableDate: function selectableDate(day) {
592
+ var validity = [];
593
+ if (this.minDate) {
594
+ validity.push(day >= this.minDate);
595
+ }
596
+ if (this.maxDate) {
597
+ validity.push(day <= this.maxDate);
598
+ }
599
+ if (this.nearbyMonthDays && !this.nearbySelectableMonthDays) {
600
+ validity.push(day.getMonth() === this.focused.month);
601
+ }
602
+ if (this.selectableDates) {
603
+ if (typeof this.selectableDates === 'function') {
604
+ if (this.selectableDates(day)) {
605
+ return true;
606
+ } else {
607
+ validity.push(false);
608
+ }
609
+ } else {
610
+ for (var i = 0; i < this.selectableDates.length; i++) {
611
+ var enabledDate = this.selectableDates[i];
612
+ if (day.getDate() === enabledDate.getDate() && day.getFullYear() === enabledDate.getFullYear() && day.getMonth() === enabledDate.getMonth()) {
613
+ return true;
614
+ } else {
615
+ validity.push(false);
616
+ }
617
+ }
618
+ }
619
+ }
620
+ if (this.unselectableDates) {
621
+ if (typeof this.unselectableDates === 'function') {
622
+ validity.push(!this.unselectableDates(day));
623
+ } else {
624
+ for (var _i = 0; _i < this.unselectableDates.length; _i++) {
625
+ var disabledDate = this.unselectableDates[_i];
626
+ validity.push(day.getDate() !== disabledDate.getDate() || day.getFullYear() !== disabledDate.getFullYear() || day.getMonth() !== disabledDate.getMonth());
627
+ }
628
+ }
629
+ }
630
+ if (this.unselectableDaysOfWeek) {
631
+ for (var _i2 = 0; _i2 < this.unselectableDaysOfWeek.length; _i2++) {
632
+ var dayOfWeek = this.unselectableDaysOfWeek[_i2];
633
+ validity.push(day.getDay() !== dayOfWeek);
634
+ }
635
+ }
636
+ return validity.indexOf(false) < 0;
637
+ },
638
+ eventsInThisWeek: function eventsInThisWeek(week) {
639
+ return this.eventsInThisMonth.filter(function (event) {
640
+ var stripped = new Date(Date.parse(event.date));
641
+ stripped.setHours(0, 0, 0, 0);
642
+ var timed = stripped.getTime();
643
+ return week.some(function (weekDate) {
644
+ return weekDate.getTime() === timed;
645
+ });
646
+ });
647
+ },
648
+ setRangeHoverEndDate: function setRangeHoverEndDate(day) {
649
+ this.hoveredEndDate = day;
650
+ },
651
+ changeFocus: function changeFocus(day) {
652
+ var focused = {
653
+ day: day.getDate(),
654
+ month: day.getMonth(),
655
+ year: day.getFullYear()
656
+ };
657
+ this.$emit('update:focused', focused);
658
+ }
659
+ }
660
+ };
661
+
662
+ /* script */
663
+ const __vue_script__$2 = script$2;
664
+
665
+ /* template */
666
+ var __vue_render__$2 = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:"datepicker-table"},[_c('header',{staticClass:"datepicker-header"},_vm._l((_vm.visibleDayNames),function(day,index){return _c('div',{key:index,staticClass:"datepicker-cell"},[_c('span',[_vm._v(_vm._s(day))])])}),0),_c('div',{staticClass:"datepicker-body",class:{'has-events':_vm.hasEvents}},_vm._l((_vm.weeksInThisMonth),function(week,index){return _c('b-datepicker-table-row',{key:index,attrs:{"selected-date":_vm.value,"day":_vm.focused.day,"week":week,"month":_vm.focused.month,"min-date":_vm.minDate,"max-date":_vm.maxDate,"disabled":_vm.disabled,"unselectable-dates":_vm.unselectableDates,"unselectable-days-of-week":_vm.unselectableDaysOfWeek,"selectable-dates":_vm.selectableDates,"events":_vm.eventsInThisWeek(week),"indicators":_vm.indicators,"date-creator":_vm.dateCreator,"nearby-month-days":_vm.nearbyMonthDays,"nearby-selectable-month-days":_vm.nearbySelectableMonthDays,"show-week-number":_vm.showWeekNumber,"week-number-clickable":_vm.weekNumberClickable,"first-day-of-week":_vm.firstDayOfWeek,"rules-for-first-week":_vm.rulesForFirstWeek,"range":_vm.range,"hovered-date-range":_vm.hoveredDateRange,"multiple":_vm.multiple},on:{"select":_vm.updateSelectedDate,"rangeHoverEndDate":_vm.setRangeHoverEndDate,"change-focus":_vm.changeFocus}})}),1)])};
667
+ var __vue_staticRenderFns__$2 = [];
668
+
669
+ /* style */
670
+ const __vue_inject_styles__$2 = undefined;
671
+ /* scoped */
672
+ const __vue_scope_id__$2 = undefined;
673
+ /* module identifier */
674
+ const __vue_module_identifier__$2 = undefined;
675
+ /* functional template */
676
+ const __vue_is_functional_template__$2 = false;
677
+ /* style inject */
678
+
679
+ /* style inject SSR */
680
+
681
+ /* style inject shadow dom */
682
+
683
+
684
+
685
+ const __vue_component__$2 = /*#__PURE__*/normalizeComponent(
686
+ { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 },
687
+ __vue_inject_styles__$2,
688
+ __vue_script__$2,
689
+ __vue_scope_id__$2,
690
+ __vue_is_functional_template__$2,
691
+ __vue_module_identifier__$2,
692
+ false,
693
+ undefined,
694
+ undefined,
695
+ undefined
696
+ );
697
+
698
+ var DatepickerTable = __vue_component__$2;
699
+
700
+ //
701
+ var script$1 = {
702
+ name: 'BDatepickerMonth',
703
+ props: {
704
+ value: {
705
+ type: [Date, Array]
706
+ },
707
+ monthNames: Array,
708
+ events: Array,
709
+ indicators: String,
710
+ minDate: Date,
711
+ maxDate: Date,
712
+ focused: Object,
713
+ disabled: Boolean,
714
+ dateCreator: Function,
715
+ unselectableDates: [Array, Function],
716
+ unselectableDaysOfWeek: Array,
717
+ selectableDates: [Array, Function],
718
+ range: Boolean,
719
+ multiple: Boolean
720
+ },
721
+ data: function data() {
722
+ return {
723
+ selectedBeginDate: undefined,
724
+ selectedEndDate: undefined,
725
+ hoveredEndDate: undefined,
726
+ multipleSelectedDates: this.multiple && this.value ? this.value : []
727
+ };
728
+ },
729
+ computed: {
730
+ hasEvents: function hasEvents() {
731
+ return this.events && this.events.length;
732
+ },
733
+ /*
734
+ * Return array of all events in the specified month
735
+ */
736
+ eventsInThisYear: function eventsInThisYear() {
737
+ if (!this.events) return [];
738
+ var yearEvents = [];
739
+ for (var i = 0; i < this.events.length; i++) {
740
+ var event = this.events[i];
741
+ if (!event.hasOwnProperty('date')) {
742
+ event = {
743
+ date: event
744
+ };
745
+ }
746
+ if (!event.hasOwnProperty('type')) {
747
+ event.type = 'is-primary';
748
+ }
749
+ if (event.date.getFullYear() === this.focused.year) {
750
+ yearEvents.push(event);
751
+ }
752
+ }
753
+ return yearEvents;
754
+ },
755
+ monthDates: function monthDates() {
756
+ var year = this.focused.year;
757
+ var months = [];
758
+ for (var i = 0; i < 12; i++) {
759
+ var d = new Date(year, i, 1);
760
+ d.setHours(0, 0, 0, 0);
761
+ months.push(d);
762
+ }
763
+ return months;
764
+ },
765
+ focusedMonth: function focusedMonth() {
766
+ return this.focused.month;
767
+ },
768
+ hoveredDateRange: function hoveredDateRange() {
769
+ if (!this.range) {
770
+ return [];
771
+ }
772
+ if (!isNaN(this.selectedEndDate)) {
773
+ return [];
774
+ }
775
+ if (this.hoveredEndDate < this.selectedBeginDate) {
776
+ return [this.hoveredEndDate, this.selectedBeginDate].filter(isDefined);
777
+ }
778
+ return [this.selectedBeginDate, this.hoveredEndDate].filter(isDefined);
779
+ }
780
+ },
781
+ watch: {
782
+ focusedMonth: function focusedMonth(month) {
783
+ var _this = this;
784
+ var refName = "month-".concat(month);
785
+ if (this.$refs[refName] && this.$refs[refName].length > 0) {
786
+ this.$nextTick(function () {
787
+ if (_this.$refs[refName][0]) {
788
+ _this.$refs[refName][0].focus();
789
+ }
790
+ }); // $nextTick needed when year is changed
791
+ }
792
+ }
793
+ },
794
+ methods: {
795
+ selectMultipleDates: function selectMultipleDates(date) {
796
+ var multipleSelect = this.multipleSelectedDates.filter(function (selectedDate) {
797
+ return selectedDate.getDate() === date.getDate() && selectedDate.getFullYear() === date.getFullYear() && selectedDate.getMonth() === date.getMonth();
798
+ });
799
+ if (multipleSelect.length) {
800
+ this.multipleSelectedDates = this.multipleSelectedDates.filter(function (selectedDate) {
801
+ return selectedDate.getDate() !== date.getDate() || selectedDate.getFullYear() !== date.getFullYear() || selectedDate.getMonth() !== date.getMonth();
802
+ });
803
+ } else {
804
+ this.multipleSelectedDates.push(date);
805
+ }
806
+ this.$emit('input', this.multipleSelectedDates);
807
+ },
808
+ selectableDate: function selectableDate(day) {
809
+ var validity = [];
810
+ if (this.minDate) {
811
+ validity.push(day >= this.minDate);
812
+ }
813
+ if (this.maxDate) {
814
+ validity.push(day <= this.maxDate);
815
+ }
816
+ validity.push(day.getFullYear() === this.focused.year);
817
+ if (this.selectableDates) {
818
+ if (typeof this.selectableDates === 'function') {
819
+ if (this.selectableDates(day)) {
820
+ return true;
821
+ } else {
822
+ validity.push(false);
823
+ }
824
+ } else {
825
+ for (var i = 0; i < this.selectableDates.length; i++) {
826
+ var enabledDate = this.selectableDates[i];
827
+ if (day.getFullYear() === enabledDate.getFullYear() && day.getMonth() === enabledDate.getMonth()) {
828
+ return true;
829
+ } else {
830
+ validity.push(false);
831
+ }
832
+ }
833
+ }
834
+ }
835
+ if (this.unselectableDates) {
836
+ if (typeof this.unselectableDates === 'function') {
837
+ validity.push(!this.unselectableDates(day));
838
+ } else {
839
+ for (var _i = 0; _i < this.unselectableDates.length; _i++) {
840
+ var disabledDate = this.unselectableDates[_i];
841
+ validity.push(day.getFullYear() !== disabledDate.getFullYear() || day.getMonth() !== disabledDate.getMonth());
842
+ }
843
+ }
844
+ }
845
+ if (this.unselectableDaysOfWeek) {
846
+ for (var _i2 = 0; _i2 < this.unselectableDaysOfWeek.length; _i2++) {
847
+ var dayOfWeek = this.unselectableDaysOfWeek[_i2];
848
+ validity.push(day.getDay() !== dayOfWeek);
849
+ }
850
+ }
851
+ return validity.indexOf(false) < 0;
852
+ },
853
+ eventsDateMatch: function eventsDateMatch(day) {
854
+ if (!this.eventsInThisYear.length) return false;
855
+ var monthEvents = [];
856
+ for (var i = 0; i < this.eventsInThisYear.length; i++) {
857
+ if (this.eventsInThisYear[i].date.getMonth() === day.getMonth()) {
858
+ monthEvents.push(this.events[i]);
859
+ }
860
+ }
861
+ if (!monthEvents.length) {
862
+ return false;
863
+ }
864
+ return monthEvents;
865
+ },
866
+ /*
867
+ * Build classObject for cell using validations
868
+ */
869
+ classObject: function classObject(day) {
870
+ function dateMatch(dateOne, dateTwo, multiple) {
871
+ // if either date is null or undefined, return false
872
+ if (!dateOne || !dateTwo || multiple) {
873
+ return false;
874
+ }
875
+ if (Array.isArray(dateTwo)) {
876
+ return dateTwo.some(function (date) {
877
+ return dateOne.getFullYear() === date.getFullYear() && dateOne.getMonth() === date.getMonth();
878
+ });
879
+ }
880
+ return dateOne.getFullYear() === dateTwo.getFullYear() && dateOne.getMonth() === dateTwo.getMonth();
881
+ }
882
+ function dateWithin(dateOne, dates, multiple) {
883
+ if (!Array.isArray(dates) || multiple) {
884
+ return false;
885
+ }
886
+ return dateOne > dates[0] && dateOne < dates[1];
887
+ }
888
+ function dateMultipleSelected(dateOne, dates, multiple) {
889
+ if (!Array.isArray(dates) || !multiple) {
890
+ return false;
891
+ }
892
+ return dates.some(function (date) {
893
+ return dateOne.getDate() === date.getDate() && dateOne.getFullYear() === date.getFullYear() && dateOne.getMonth() === date.getMonth();
894
+ });
895
+ }
896
+ return {
897
+ 'is-selected': dateMatch(day, this.value, this.multiple) || dateWithin(day, this.value, this.multiple) || dateMultipleSelected(day, this.multipleSelectedDates, this.multiple),
898
+ 'is-first-selected': dateMatch(day, Array.isArray(this.value) && this.value[0], this.multiple),
899
+ 'is-within-selected': dateWithin(day, this.value, this.multiple),
900
+ 'is-last-selected': dateMatch(day, Array.isArray(this.value) && this.value[1], this.multiple),
901
+ 'is-within-hovered-range': this.hoveredDateRange && this.hoveredDateRange.length === 2 && (dateMatch(day, this.hoveredDateRange) || dateWithin(day, this.hoveredDateRange)),
902
+ 'is-first-hovered': dateMatch(day, Array.isArray(this.hoveredDateRange) && this.hoveredDateRange[0]),
903
+ 'is-within-hovered': dateWithin(day, this.hoveredDateRange),
904
+ 'is-last-hovered': dateMatch(day, Array.isArray(this.hoveredDateRange) && this.hoveredDateRange[1]),
905
+ 'is-today': dateMatch(day, this.dateCreator()),
906
+ 'is-selectable': this.selectableDate(day) && !this.disabled,
907
+ 'is-unselectable': !this.selectableDate(day) || this.disabled
908
+ };
909
+ },
910
+ manageKeydown: function manageKeydown(_ref, date) {
911
+ var key = _ref.key;
912
+ // https://developer.mozilla.org/fr/docs/Web/API/KeyboardEvent/key/Key_Values#Navigation_keys
913
+ switch (key) {
914
+ case ' ':
915
+ case 'Space':
916
+ case 'Spacebar':
917
+ case 'Enter':
918
+ {
919
+ this.updateSelectedDate(date);
920
+ break;
921
+ }
922
+ case 'ArrowLeft':
923
+ case 'Left':
924
+ {
925
+ this.changeFocus(date, -1);
926
+ break;
927
+ }
928
+ case 'ArrowRight':
929
+ case 'Right':
930
+ {
931
+ this.changeFocus(date, 1);
932
+ break;
933
+ }
934
+ case 'ArrowUp':
935
+ case 'Up':
936
+ {
937
+ this.changeFocus(date, -3);
938
+ break;
939
+ }
940
+ case 'ArrowDown':
941
+ case 'Down':
942
+ {
943
+ this.changeFocus(date, 3);
944
+ break;
945
+ }
946
+ }
947
+ },
948
+ /*
949
+ * Emit input event with selected date as payload for v-model in parent
950
+ */
951
+ updateSelectedDate: function updateSelectedDate(date) {
952
+ if (!this.range && !this.multiple) {
953
+ this.emitChosenDate(date);
954
+ } else if (this.range) {
955
+ this.handleSelectRangeDate(date);
956
+ } else if (this.multiple) {
957
+ this.selectMultipleDates(date);
958
+ }
959
+ },
960
+ /*
961
+ * Emit select event with chosen date as payload
962
+ */
963
+ emitChosenDate: function emitChosenDate(day) {
964
+ if (this.disabled) return;
965
+ if (!this.multiple) {
966
+ if (this.selectableDate(day)) {
967
+ this.$emit('input', day);
968
+ }
969
+ } else {
970
+ this.selectMultipleDates(day);
971
+ }
972
+ },
973
+ /*
974
+ * If both begin and end dates are set, reset the end date and set the begin date.
975
+ * If only begin date is selected, emit an array of the begin date and the new date.
976
+ * If not set, only set the begin date.
977
+ */
978
+ handleSelectRangeDate: function handleSelectRangeDate(date) {
979
+ if (this.disabled) return;
980
+ if (this.selectedBeginDate && this.selectedEndDate) {
981
+ this.selectedBeginDate = date;
982
+ this.selectedEndDate = undefined;
983
+ this.$emit('range-start', date);
984
+ } else if (this.selectedBeginDate && !this.selectedEndDate) {
985
+ if (this.selectedBeginDate > date) {
986
+ this.selectedEndDate = this.selectedBeginDate;
987
+ this.selectedBeginDate = date;
988
+ } else {
989
+ this.selectedEndDate = date;
990
+ }
991
+ this.$emit('range-end', date);
992
+ this.$emit('input', [this.selectedBeginDate, this.selectedEndDate]);
993
+ } else {
994
+ this.selectedBeginDate = date;
995
+ this.$emit('range-start', date);
996
+ }
997
+ },
998
+ setRangeHoverEndDate: function setRangeHoverEndDate(day) {
999
+ if (this.range) {
1000
+ this.hoveredEndDate = day;
1001
+ }
1002
+ },
1003
+ changeFocus: function changeFocus(month, inc) {
1004
+ var nextMonth = month;
1005
+ nextMonth.setMonth(month.getMonth() + inc);
1006
+ this.$emit('change-focus', nextMonth);
1007
+ }
1008
+ }
1009
+ };
1010
+
1011
+ /* script */
1012
+ const __vue_script__$1 = script$1;
1013
+
1014
+ /* template */
1015
+ var __vue_render__$1 = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:"datepicker-table"},[_c('div',{staticClass:"datepicker-body",class:{'has-events':_vm.hasEvents}},[_c('div',{staticClass:"datepicker-months"},[_vm._l((_vm.monthDates),function(date,index){return [(_vm.selectableDate(date) && !_vm.disabled)?_c('a',{key:index,ref:("month-" + (date.getMonth())),refInFor:true,staticClass:"datepicker-cell",class:[
1016
+ _vm.classObject(date),
1017
+ {'has-event': _vm.eventsDateMatch(date)},
1018
+ _vm.indicators
1019
+ ],attrs:{"role":"button","href":"#","disabled":_vm.disabled,"tabindex":_vm.focused.month === date.getMonth() ? null : -1},on:{"click":function($event){$event.preventDefault();return _vm.updateSelectedDate(date)},"mouseenter":function($event){return _vm.setRangeHoverEndDate(date)},"keydown":function($event){$event.preventDefault();return _vm.manageKeydown($event, date)}}},[_vm._v(" "+_vm._s(_vm.monthNames[date.getMonth()])+" "),(_vm.eventsDateMatch(date))?_c('div',{staticClass:"events"},_vm._l((_vm.eventsDateMatch(date)),function(event,index){return _c('div',{key:index,staticClass:"event",class:event.type})}),0):_vm._e()]):_c('div',{key:index,staticClass:"datepicker-cell",class:_vm.classObject(date)},[_vm._v(" "+_vm._s(_vm.monthNames[date.getMonth()])+" ")])]})],2)])])};
1020
+ var __vue_staticRenderFns__$1 = [];
1021
+
1022
+ /* style */
1023
+ const __vue_inject_styles__$1 = undefined;
1024
+ /* scoped */
1025
+ const __vue_scope_id__$1 = undefined;
1026
+ /* module identifier */
1027
+ const __vue_module_identifier__$1 = undefined;
1028
+ /* functional template */
1029
+ const __vue_is_functional_template__$1 = false;
1030
+ /* style inject */
1031
+
1032
+ /* style inject SSR */
1033
+
1034
+ /* style inject shadow dom */
1035
+
1036
+
1037
+
1038
+ const __vue_component__$1 = /*#__PURE__*/normalizeComponent(
1039
+ { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 },
1040
+ __vue_inject_styles__$1,
1041
+ __vue_script__$1,
1042
+ __vue_scope_id__$1,
1043
+ __vue_is_functional_template__$1,
1044
+ __vue_module_identifier__$1,
1045
+ false,
1046
+ undefined,
1047
+ undefined,
1048
+ undefined
1049
+ );
1050
+
1051
+ var DatepickerMonth = __vue_component__$1;
1052
+
1053
+ var defaultDateFormatter = function defaultDateFormatter(date, vm) {
1054
+ var targetDates = Array.isArray(date) ? date : [date];
1055
+ var dates = targetDates.map(function (date) {
1056
+ var d = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 12);
1057
+ return !vm.isTypeMonth ? vm.dtf.format(d) : vm.dtfMonth.format(d);
1058
+ });
1059
+ return !vm.multiple ? dates.join(' - ') : dates.join(', ');
1060
+ };
1061
+ var defaultDateParser = function defaultDateParser(date, vm) {
1062
+ if (vm.dtf.formatToParts && typeof vm.dtf.formatToParts === 'function') {
1063
+ var formatRegex = (vm.isTypeMonth ? vm.dtfMonth : vm.dtf).formatToParts(new Date(2000, 11, 25)).map(function (part) {
1064
+ if (part.type === 'literal') {
1065
+ return part.value;
1066
+ }
1067
+ return "((?!=<".concat(part.type, ">)\\d+)");
1068
+ }).join('');
1069
+ var dateGroups = matchWithGroups(formatRegex, date);
1070
+
1071
+ // We do a simple validation for the group.
1072
+ // If it is not valid, it will fallback to Date.parse below
1073
+ if (dateGroups.year && dateGroups.year.length === 4 && dateGroups.month && dateGroups.month <= 12) {
1074
+ if (vm.isTypeMonth) return new Date(dateGroups.year, dateGroups.month - 1);else if (dateGroups.day && dateGroups.day <= 31) {
1075
+ return new Date(dateGroups.year, dateGroups.month - 1, dateGroups.day, 12);
1076
+ }
1077
+ }
1078
+ }
1079
+ // Fallback if formatToParts is not supported or if we were not able to parse a valid date
1080
+ if (!vm.isTypeMonth) return new Date(Date.parse(date));
1081
+ if (date) {
1082
+ var s = date.split('/');
1083
+ var year = s[0].length === 4 ? s[0] : s[1];
1084
+ var month = s[0].length === 2 ? s[0] : s[1];
1085
+ if (year && month) {
1086
+ return new Date(parseInt(year, 10), parseInt(month - 1, 10), 1, 0, 0, 0, 0);
1087
+ }
1088
+ }
1089
+ return null;
1090
+ };
1091
+ var script = {
1092
+ name: 'BDatepicker',
1093
+ components: _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, DatepickerTable.name, DatepickerTable), DatepickerMonth.name, DatepickerMonth), Input.name, Input), Field.name, Field), Select.name, Select), Icon.name, Icon), Dropdown.name, Dropdown), DropdownItem.name, DropdownItem),
1094
+ mixins: [FormElementMixin],
1095
+ inheritAttrs: false,
1096
+ provide: function provide() {
1097
+ return {
1098
+ $datepicker: this
1099
+ };
1100
+ },
1101
+ props: {
1102
+ value: {
1103
+ type: [Date, Array]
1104
+ },
1105
+ dayNames: {
1106
+ type: Array,
1107
+ default: function _default() {
1108
+ if (!Array.isArray(config.defaultDayNames)) {
1109
+ return undefined;
1110
+ }
1111
+ return config.defaultDayNames;
1112
+ }
1113
+ },
1114
+ monthNames: {
1115
+ type: Array,
1116
+ default: function _default() {
1117
+ if (!Array.isArray(config.defaultMonthNames)) {
1118
+ return undefined;
1119
+ }
1120
+ return config.defaultMonthNames;
1121
+ }
1122
+ },
1123
+ firstDayOfWeek: {
1124
+ type: Number,
1125
+ default: function _default() {
1126
+ if (typeof config.defaultFirstDayOfWeek === 'number') {
1127
+ return config.defaultFirstDayOfWeek;
1128
+ } else {
1129
+ return 0;
1130
+ }
1131
+ }
1132
+ },
1133
+ inline: Boolean,
1134
+ minDate: Date,
1135
+ maxDate: Date,
1136
+ focusedDate: Date,
1137
+ placeholder: String,
1138
+ editable: Boolean,
1139
+ disabled: Boolean,
1140
+ horizontalTimePicker: Boolean,
1141
+ unselectableDates: [Array, Function],
1142
+ unselectableDaysOfWeek: {
1143
+ type: Array,
1144
+ default: function _default() {
1145
+ return config.defaultUnselectableDaysOfWeek;
1146
+ }
1147
+ },
1148
+ selectableDates: [Array, Function],
1149
+ dateFormatter: {
1150
+ type: Function,
1151
+ default: function _default(date, vm) {
1152
+ if (typeof config.defaultDateFormatter === 'function') {
1153
+ return config.defaultDateFormatter(date);
1154
+ } else {
1155
+ return defaultDateFormatter(date, vm);
1156
+ }
1157
+ }
1158
+ },
1159
+ dateParser: {
1160
+ type: Function,
1161
+ default: function _default(date, vm) {
1162
+ if (typeof config.defaultDateParser === 'function') {
1163
+ return config.defaultDateParser(date);
1164
+ } else {
1165
+ return defaultDateParser(date, vm);
1166
+ }
1167
+ }
1168
+ },
1169
+ dateCreator: {
1170
+ type: Function,
1171
+ default: function _default() {
1172
+ if (typeof config.defaultDateCreator === 'function') {
1173
+ return config.defaultDateCreator();
1174
+ } else {
1175
+ return new Date();
1176
+ }
1177
+ }
1178
+ },
1179
+ mobileNative: {
1180
+ type: Boolean,
1181
+ default: function _default() {
1182
+ return config.defaultDatepickerMobileNative;
1183
+ }
1184
+ },
1185
+ position: String,
1186
+ iconRight: String,
1187
+ iconRightClickable: Boolean,
1188
+ events: Array,
1189
+ indicators: {
1190
+ type: String,
1191
+ default: 'dots'
1192
+ },
1193
+ openOnFocus: Boolean,
1194
+ iconPrev: {
1195
+ type: String,
1196
+ default: function _default() {
1197
+ return config.defaultIconPrev;
1198
+ }
1199
+ },
1200
+ iconNext: {
1201
+ type: String,
1202
+ default: function _default() {
1203
+ return config.defaultIconNext;
1204
+ }
1205
+ },
1206
+ yearsRange: {
1207
+ type: Array,
1208
+ default: function _default() {
1209
+ return config.defaultDatepickerYearsRange;
1210
+ }
1211
+ },
1212
+ type: {
1213
+ type: String,
1214
+ validator: function validator(value) {
1215
+ return ['month'].indexOf(value) >= 0;
1216
+ }
1217
+ },
1218
+ nearbyMonthDays: {
1219
+ type: Boolean,
1220
+ default: function _default() {
1221
+ return config.defaultDatepickerNearbyMonthDays;
1222
+ }
1223
+ },
1224
+ nearbySelectableMonthDays: {
1225
+ type: Boolean,
1226
+ default: function _default() {
1227
+ return config.defaultDatepickerNearbySelectableMonthDays;
1228
+ }
1229
+ },
1230
+ showWeekNumber: {
1231
+ type: Boolean,
1232
+ default: function _default() {
1233
+ return config.defaultDatepickerShowWeekNumber;
1234
+ }
1235
+ },
1236
+ weekNumberClickable: {
1237
+ type: Boolean,
1238
+ default: function _default() {
1239
+ return config.defaultDatepickerWeekNumberClickable;
1240
+ }
1241
+ },
1242
+ rulesForFirstWeek: {
1243
+ type: Number,
1244
+ default: function _default() {
1245
+ return 4;
1246
+ }
1247
+ },
1248
+ range: {
1249
+ type: Boolean,
1250
+ default: false
1251
+ },
1252
+ closeOnClick: {
1253
+ type: Boolean,
1254
+ default: true
1255
+ },
1256
+ multiple: {
1257
+ type: Boolean,
1258
+ default: false
1259
+ },
1260
+ mobileModal: {
1261
+ type: Boolean,
1262
+ default: function _default() {
1263
+ return config.defaultDatepickerMobileModal;
1264
+ }
1265
+ },
1266
+ focusable: {
1267
+ type: Boolean,
1268
+ default: true
1269
+ },
1270
+ trapFocus: {
1271
+ type: Boolean,
1272
+ default: function _default() {
1273
+ return config.defaultTrapFocus;
1274
+ }
1275
+ },
1276
+ appendToBody: Boolean,
1277
+ ariaNextLabel: String,
1278
+ ariaPreviousLabel: String
1279
+ },
1280
+ data: function data() {
1281
+ var focusedDate = (Array.isArray(this.value) ? this.value[0] : this.value) || this.focusedDate || this.dateCreator();
1282
+ if (!this.value && this.maxDate && this.maxDate.getFullYear() < focusedDate.getFullYear()) {
1283
+ focusedDate.setFullYear(this.maxDate.getFullYear());
1284
+ }
1285
+ return {
1286
+ dateSelected: this.value,
1287
+ focusedDateData: {
1288
+ day: focusedDate.getDate(),
1289
+ month: focusedDate.getMonth(),
1290
+ year: focusedDate.getFullYear()
1291
+ },
1292
+ _elementRef: 'input',
1293
+ _isDatepicker: true
1294
+ };
1295
+ },
1296
+ computed: {
1297
+ computedValue: {
1298
+ get: function get() {
1299
+ return this.dateSelected;
1300
+ },
1301
+ set: function set(value) {
1302
+ var _this = this;
1303
+ this.updateInternalState(value);
1304
+ if (!this.multiple) this.togglePicker(false);
1305
+ this.$emit('input', value);
1306
+ if (this.useHtml5Validation) {
1307
+ this.$nextTick(function () {
1308
+ _this.checkHtml5Validity();
1309
+ });
1310
+ }
1311
+ }
1312
+ },
1313
+ formattedValue: function formattedValue() {
1314
+ return this.formatValue(this.computedValue);
1315
+ },
1316
+ localeOptions: function localeOptions() {
1317
+ return new Intl.DateTimeFormat(this.locale, {
1318
+ year: 'numeric',
1319
+ month: 'numeric'
1320
+ }).resolvedOptions();
1321
+ },
1322
+ dtf: function dtf() {
1323
+ return new Intl.DateTimeFormat(this.locale);
1324
+ },
1325
+ dtfMonth: function dtfMonth() {
1326
+ return new Intl.DateTimeFormat(this.locale, {
1327
+ year: this.localeOptions.year || 'numeric',
1328
+ month: this.localeOptions.month || '2-digit'
1329
+ });
1330
+ },
1331
+ newMonthNames: function newMonthNames() {
1332
+ if (Array.isArray(this.monthNames)) {
1333
+ return this.monthNames;
1334
+ }
1335
+ return getMonthNames(this.locale);
1336
+ },
1337
+ newDayNames: function newDayNames() {
1338
+ if (Array.isArray(this.dayNames)) {
1339
+ return this.dayNames;
1340
+ }
1341
+ return getWeekdayNames(this.locale);
1342
+ },
1343
+ listOfMonths: function listOfMonths() {
1344
+ var minMonth = 0;
1345
+ var maxMonth = 12;
1346
+ if (this.minDate && this.focusedDateData.year === this.minDate.getFullYear()) {
1347
+ minMonth = this.minDate.getMonth();
1348
+ }
1349
+ if (this.maxDate && this.focusedDateData.year === this.maxDate.getFullYear()) {
1350
+ maxMonth = this.maxDate.getMonth();
1351
+ }
1352
+ return this.newMonthNames.map(function (name, index) {
1353
+ return {
1354
+ name: name,
1355
+ index: index,
1356
+ disabled: index < minMonth || index > maxMonth
1357
+ };
1358
+ });
1359
+ },
1360
+ /*
1361
+ * Returns an array of years for the year dropdown. If earliest/latest
1362
+ * dates are set by props, range of years will fall within those dates.
1363
+ */
1364
+ listOfYears: function listOfYears() {
1365
+ var latestYear = this.focusedDateData.year + this.yearsRange[1];
1366
+ if (this.maxDate && this.maxDate.getFullYear() < latestYear) {
1367
+ latestYear = Math.max(this.maxDate.getFullYear(), this.focusedDateData.year);
1368
+ }
1369
+ var earliestYear = this.focusedDateData.year + this.yearsRange[0];
1370
+ if (this.minDate && this.minDate.getFullYear() > earliestYear) {
1371
+ earliestYear = Math.min(this.minDate.getFullYear(), this.focusedDateData.year);
1372
+ }
1373
+ var arrayOfYears = [];
1374
+ for (var i = earliestYear; i <= latestYear; i++) {
1375
+ arrayOfYears.push(i);
1376
+ }
1377
+ return arrayOfYears.reverse();
1378
+ },
1379
+ showPrev: function showPrev() {
1380
+ if (!this.minDate) return false;
1381
+ if (this.isTypeMonth) {
1382
+ return this.focusedDateData.year <= this.minDate.getFullYear();
1383
+ }
1384
+ var dateToCheck = new Date(this.focusedDateData.year, this.focusedDateData.month);
1385
+ var date = new Date(this.minDate.getFullYear(), this.minDate.getMonth());
1386
+ return dateToCheck <= date;
1387
+ },
1388
+ showNext: function showNext() {
1389
+ if (!this.maxDate) return false;
1390
+ if (this.isTypeMonth) {
1391
+ return this.focusedDateData.year >= this.maxDate.getFullYear();
1392
+ }
1393
+ var dateToCheck = new Date(this.focusedDateData.year, this.focusedDateData.month);
1394
+ var date = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth());
1395
+ return dateToCheck >= date;
1396
+ },
1397
+ isMobile: function isMobile$1() {
1398
+ return this.mobileNative && isMobile.any();
1399
+ },
1400
+ isTypeMonth: function isTypeMonth() {
1401
+ return this.type === 'month';
1402
+ },
1403
+ ariaRole: function ariaRole() {
1404
+ if (!this.inline) {
1405
+ return 'dialog';
1406
+ }
1407
+ }
1408
+ },
1409
+ watch: {
1410
+ /**
1411
+ * When v-model is changed:
1412
+ * 1. Update internal value.
1413
+ * 2. If it's invalid, validate again.
1414
+ */
1415
+ value: function value(_value) {
1416
+ this.updateInternalState(_value);
1417
+ if (!this.multiple) this.togglePicker(false);
1418
+ },
1419
+ focusedDate: function focusedDate(value) {
1420
+ if (value) {
1421
+ this.focusedDateData = {
1422
+ day: value.getDate(),
1423
+ month: value.getMonth(),
1424
+ year: value.getFullYear()
1425
+ };
1426
+ }
1427
+ },
1428
+ /*
1429
+ * Emit input event on month and/or year change
1430
+ */
1431
+ 'focusedDateData.month': function focusedDateDataMonth(value) {
1432
+ this.$emit('change-month', value);
1433
+ },
1434
+ 'focusedDateData.year': function focusedDateDataYear(value) {
1435
+ this.$emit('change-year', value);
1436
+ }
1437
+ },
1438
+ methods: {
1439
+ /*
1440
+ * Parse string into date
1441
+ */
1442
+ onChange: function onChange(value) {
1443
+ var date = this.dateParser(value, this);
1444
+ if (date && (!isNaN(date) || Array.isArray(date) && date.length === 2 && !isNaN(date[0]) && !isNaN(date[1]))) {
1445
+ this.computedValue = date;
1446
+ } else {
1447
+ // Force refresh input value when not valid date
1448
+ this.computedValue = null;
1449
+ if (this.$refs.input) {
1450
+ this.$refs.input.newValue = this.computedValue;
1451
+ }
1452
+ }
1453
+ },
1454
+ /*
1455
+ * Format date into string
1456
+ */
1457
+ formatValue: function formatValue(value) {
1458
+ if (Array.isArray(value)) {
1459
+ var isArrayWithValidDates = Array.isArray(value) && value.every(function (v) {
1460
+ return !isNaN(v);
1461
+ });
1462
+ return isArrayWithValidDates ? this.dateFormatter(_toConsumableArray(value), this) : null;
1463
+ }
1464
+ return value && !isNaN(value) ? this.dateFormatter(value, this) : null;
1465
+ },
1466
+ /*
1467
+ * Either decrement month by 1 if not January or decrement year by 1
1468
+ * and set month to 11 (December) or decrement year when 'month'
1469
+ */
1470
+ prev: function prev() {
1471
+ if (this.disabled) return;
1472
+ if (this.isTypeMonth) {
1473
+ this.focusedDateData.year -= 1;
1474
+ } else {
1475
+ if (this.focusedDateData.month > 0) {
1476
+ this.focusedDateData.month -= 1;
1477
+ } else {
1478
+ this.focusedDateData.month = 11;
1479
+ this.focusedDateData.year -= 1;
1480
+ }
1481
+ }
1482
+ },
1483
+ /*
1484
+ * Either increment month by 1 if not December or increment year by 1
1485
+ * and set month to 0 (January) or increment year when 'month'
1486
+ */
1487
+ next: function next() {
1488
+ if (this.disabled) return;
1489
+ if (this.isTypeMonth) {
1490
+ this.focusedDateData.year += 1;
1491
+ } else {
1492
+ if (this.focusedDateData.month < 11) {
1493
+ this.focusedDateData.month += 1;
1494
+ } else {
1495
+ this.focusedDateData.month = 0;
1496
+ this.focusedDateData.year += 1;
1497
+ }
1498
+ }
1499
+ },
1500
+ formatNative: function formatNative(value) {
1501
+ return this.isTypeMonth ? this.formatYYYYMM(value) : this.formatYYYYMMDD(value);
1502
+ },
1503
+ /*
1504
+ * Format date into string 'YYYY-MM-DD'
1505
+ */
1506
+ formatYYYYMMDD: function formatYYYYMMDD(value) {
1507
+ var date = new Date(value);
1508
+ if (value && !isNaN(date)) {
1509
+ var year = date.getFullYear();
1510
+ var month = date.getMonth() + 1;
1511
+ var day = date.getDate();
1512
+ return year + '-' + ((month < 10 ? '0' : '') + month) + '-' + ((day < 10 ? '0' : '') + day);
1513
+ }
1514
+ return '';
1515
+ },
1516
+ /*
1517
+ * Format date into string 'YYYY-MM'
1518
+ */
1519
+ formatYYYYMM: function formatYYYYMM(value) {
1520
+ var date = new Date(value);
1521
+ if (value && !isNaN(date)) {
1522
+ var year = date.getFullYear();
1523
+ var month = date.getMonth() + 1;
1524
+ return year + '-' + ((month < 10 ? '0' : '') + month);
1525
+ }
1526
+ return '';
1527
+ },
1528
+ /*
1529
+ * Parse date from string
1530
+ */
1531
+ onChangeNativePicker: function onChangeNativePicker(event) {
1532
+ var date = event.target.value;
1533
+ var s = date ? date.split('-') : [];
1534
+ if (s.length === 3) {
1535
+ var year = parseInt(s[0], 10);
1536
+ var month = parseInt(s[1]) - 1;
1537
+ var day = parseInt(s[2]);
1538
+ this.computedValue = new Date(year, month, day);
1539
+ } else {
1540
+ this.computedValue = null;
1541
+ }
1542
+ },
1543
+ updateInternalState: function updateInternalState(value) {
1544
+ if (this.dateSelected === value) return;
1545
+ var isArray = Array.isArray(value);
1546
+ var currentDate = isArray ? !value.length ? this.dateCreator() : value[value.length - 1] : !value ? this.dateCreator() : value;
1547
+ if (!isArray || isArray && this.dateSelected && value.length > this.dateSelected.length) {
1548
+ this.focusedDateData = {
1549
+ day: currentDate.getDate(),
1550
+ month: currentDate.getMonth(),
1551
+ year: currentDate.getFullYear()
1552
+ };
1553
+ }
1554
+ this.dateSelected = value;
1555
+ },
1556
+ /*
1557
+ * Toggle datepicker
1558
+ */
1559
+ togglePicker: function togglePicker(active) {
1560
+ if (this.$refs.dropdown) {
1561
+ var isActive = typeof active === 'boolean' ? active : !this.$refs.dropdown.isActive;
1562
+ if (isActive) {
1563
+ this.$refs.dropdown.isActive = isActive;
1564
+ } else if (this.closeOnClick) {
1565
+ this.$refs.dropdown.isActive = isActive;
1566
+ }
1567
+ }
1568
+ },
1569
+ /*
1570
+ * Call default onFocus method and show datepicker
1571
+ */
1572
+ handleOnFocus: function handleOnFocus(event) {
1573
+ this.onFocus(event);
1574
+ if (this.openOnFocus) {
1575
+ this.togglePicker(true);
1576
+ }
1577
+ },
1578
+ /*
1579
+ * Toggle dropdown
1580
+ */
1581
+ toggle: function toggle() {
1582
+ if (this.mobileNative && this.isMobile) {
1583
+ var input = this.$refs.input.$refs.input;
1584
+ input.focus();
1585
+ input.click();
1586
+ return;
1587
+ }
1588
+ this.$refs.dropdown.toggle();
1589
+ },
1590
+ /*
1591
+ * Avoid dropdown toggle when is already visible
1592
+ */
1593
+ onInputClick: function onInputClick(event) {
1594
+ if (this.$refs.dropdown.isActive) {
1595
+ event.stopPropagation();
1596
+ }
1597
+ },
1598
+ /**
1599
+ * Keypress event that is bound to the document.
1600
+ */
1601
+ keyPress: function keyPress(_ref) {
1602
+ var key = _ref.key;
1603
+ if (this.$refs.dropdown && this.$refs.dropdown.isActive && (key === 'Escape' || key === 'Esc')) {
1604
+ this.togglePicker(false);
1605
+ }
1606
+ },
1607
+ /**
1608
+ * Emit 'blur' event on dropdown is not active (closed)
1609
+ */
1610
+ onActiveChange: function onActiveChange(value) {
1611
+ if (!value) {
1612
+ this.onBlur();
1613
+ }
1614
+ /*
1615
+ * Emit 'active-change' when on dropdown active state change
1616
+ */
1617
+ this.$emit('active-change', value);
1618
+ },
1619
+ changeFocus: function changeFocus(day) {
1620
+ this.focusedDateData = {
1621
+ day: day.getDate(),
1622
+ month: day.getMonth(),
1623
+ year: day.getFullYear()
1624
+ };
1625
+ }
1626
+ },
1627
+ created: function created() {
1628
+ if (typeof window !== 'undefined') {
1629
+ document.addEventListener('keyup', this.keyPress);
1630
+ }
1631
+ },
1632
+ beforeDestroy: function beforeDestroy() {
1633
+ if (typeof window !== 'undefined') {
1634
+ document.removeEventListener('keyup', this.keyPress);
1635
+ }
1636
+ }
1637
+ };
1638
+
1639
+ /* script */
1640
+ const __vue_script__ = script;
1641
+
1642
+ /* template */
1643
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"datepicker control",class:[_vm.size, {'is-expanded': _vm.expanded}]},[(!_vm.isMobile || _vm.inline)?_c('b-dropdown',{ref:"dropdown",attrs:{"position":_vm.position,"disabled":_vm.disabled,"inline":_vm.inline,"mobile-modal":_vm.mobileModal,"trap-focus":_vm.trapFocus,"aria-role":_vm.ariaRole,"append-to-body":_vm.appendToBody,"append-to-body-copy-parent":"","trigger-tabindex":-1},on:{"active-change":_vm.onActiveChange},scopedSlots:_vm._u([(!_vm.inline)?{key:"trigger",fn:function(props){return [_vm._t("trigger",[_c('b-input',_vm._b({ref:"input",attrs:{"autocomplete":"off","value":_vm.formattedValue,"placeholder":_vm.placeholder,"size":_vm.size,"icon":_vm.icon,"icon-right":_vm.iconRight,"icon-right-clickable":_vm.iconRightClickable,"icon-pack":_vm.iconPack,"rounded":_vm.rounded,"loading":_vm.loading,"disabled":_vm.disabled,"readonly":!_vm.editable,"use-html5-validation":false},on:{"icon-right-click":function($event){return _vm.$emit('icon-right-click', $event)},"focus":_vm.handleOnFocus},nativeOn:{"click":function($event){return _vm.onInputClick($event)},"keyup":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }return _vm.togglePicker(true)},"change":function($event){return _vm.onChange($event.target.value)}}},'b-input',_vm.$attrs,false))],null,props)]}}:null],null,true)},[_c('b-dropdown-item',{class:{'dropdown-horizontal-timepicker': _vm.horizontalTimePicker},attrs:{"disabled":_vm.disabled,"focusable":_vm.focusable,"custom":""}},[_c('div',[_c('header',{staticClass:"datepicker-header"},[(_vm.$slots.header !== undefined && _vm.$slots.header.length)?[_vm._t("header")]:_c('div',{staticClass:"pagination field is-centered",class:_vm.size},[_c('a',{directives:[{name:"show",rawName:"v-show",value:(!_vm.showPrev && !_vm.disabled),expression:"!showPrev && !disabled"}],staticClass:"pagination-previous",attrs:{"role":"button","href":"#","disabled":_vm.disabled,"aria-label":_vm.ariaPreviousLabel},on:{"click":function($event){$event.preventDefault();return _vm.prev($event)},"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }$event.preventDefault();return _vm.prev($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"space",32,$event.key,[" ","Spacebar"])){ return null; }$event.preventDefault();return _vm.prev($event)}]}},[_c('b-icon',{attrs:{"icon":_vm.iconPrev,"pack":_vm.iconPack,"both":"","type":"is-primary is-clickable"}})],1),_c('a',{directives:[{name:"show",rawName:"v-show",value:(!_vm.showNext && !_vm.disabled),expression:"!showNext && !disabled"}],staticClass:"pagination-next",attrs:{"role":"button","href":"#","disabled":_vm.disabled,"aria-label":_vm.ariaNextLabel},on:{"click":function($event){$event.preventDefault();return _vm.next($event)},"keydown":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }$event.preventDefault();return _vm.next($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"space",32,$event.key,[" ","Spacebar"])){ return null; }$event.preventDefault();return _vm.next($event)}]}},[_c('b-icon',{attrs:{"icon":_vm.iconNext,"pack":_vm.iconPack,"both":"","type":"is-primary is-clickable"}})],1),_c('div',{staticClass:"pagination-list"},[_c('b-field',[(!_vm.isTypeMonth)?_c('b-select',{attrs:{"disabled":_vm.disabled,"size":_vm.size},model:{value:(_vm.focusedDateData.month),callback:function ($$v) {_vm.$set(_vm.focusedDateData, "month", $$v);},expression:"focusedDateData.month"}},_vm._l((_vm.listOfMonths),function(month){return _c('option',{key:month.name,attrs:{"disabled":month.disabled},domProps:{"value":month.index}},[_vm._v(" "+_vm._s(month.name)+" ")])}),0):_vm._e(),_c('b-select',{attrs:{"disabled":_vm.disabled,"size":_vm.size},model:{value:(_vm.focusedDateData.year),callback:function ($$v) {_vm.$set(_vm.focusedDateData, "year", $$v);},expression:"focusedDateData.year"}},_vm._l((_vm.listOfYears),function(year){return _c('option',{key:year,domProps:{"value":year}},[_vm._v(" "+_vm._s(year)+" ")])}),0)],1)],1)])],2),(!_vm.isTypeMonth)?_c('div',{staticClass:"datepicker-content",class:{'content-horizontal-timepicker': _vm.horizontalTimePicker}},[_c('b-datepicker-table',{attrs:{"day-names":_vm.newDayNames,"month-names":_vm.newMonthNames,"first-day-of-week":_vm.firstDayOfWeek,"rules-for-first-week":_vm.rulesForFirstWeek,"min-date":_vm.minDate,"max-date":_vm.maxDate,"focused":_vm.focusedDateData,"disabled":_vm.disabled,"unselectable-dates":_vm.unselectableDates,"unselectable-days-of-week":_vm.unselectableDaysOfWeek,"selectable-dates":_vm.selectableDates,"events":_vm.events,"indicators":_vm.indicators,"date-creator":_vm.dateCreator,"type-month":_vm.isTypeMonth,"nearby-month-days":_vm.nearbyMonthDays,"nearby-selectable-month-days":_vm.nearbySelectableMonthDays,"show-week-number":_vm.showWeekNumber,"week-number-clickable":_vm.weekNumberClickable,"range":_vm.range,"multiple":_vm.multiple},on:{"range-start":function (date) { return _vm.$emit('range-start', date); },"range-end":function (date) { return _vm.$emit('range-end', date); },"close":function($event){return _vm.togglePicker(false)},"update:focused":function($event){_vm.focusedDateData = $event;}},model:{value:(_vm.computedValue),callback:function ($$v) {_vm.computedValue=$$v;},expression:"computedValue"}})],1):_c('div',[_c('b-datepicker-month',{attrs:{"month-names":_vm.newMonthNames,"min-date":_vm.minDate,"max-date":_vm.maxDate,"focused":_vm.focusedDateData,"disabled":_vm.disabled,"unselectable-dates":_vm.unselectableDates,"unselectable-days-of-week":_vm.unselectableDaysOfWeek,"selectable-dates":_vm.selectableDates,"events":_vm.events,"indicators":_vm.indicators,"date-creator":_vm.dateCreator,"range":_vm.range,"multiple":_vm.multiple},on:{"range-start":function (date) { return _vm.$emit('range-start', date); },"range-end":function (date) { return _vm.$emit('range-end', date); },"close":function($event){return _vm.togglePicker(false)},"change-focus":_vm.changeFocus,"update:focused":function($event){_vm.focusedDateData = $event;}},model:{value:(_vm.computedValue),callback:function ($$v) {_vm.computedValue=$$v;},expression:"computedValue"}})],1)]),(_vm.$slots.default !== undefined && _vm.$slots.default.length)?_c('footer',{staticClass:"datepicker-footer",class:{'footer-horizontal-timepicker': _vm.horizontalTimePicker}},[_vm._t("default")],2):_vm._e()])],1):_c('b-input',_vm._b({ref:"input",attrs:{"type":!_vm.isTypeMonth ? 'date' : 'month',"autocomplete":"off","value":_vm.formatNative(_vm.computedValue),"placeholder":_vm.placeholder,"size":_vm.size,"icon":_vm.icon,"icon-pack":_vm.iconPack,"rounded":_vm.rounded,"loading":_vm.loading,"max":_vm.formatNative(_vm.maxDate),"min":_vm.formatNative(_vm.minDate),"disabled":_vm.disabled,"readonly":false,"use-html5-validation":false},on:{"focus":_vm.onFocus,"blur":_vm.onBlur},nativeOn:{"change":function($event){return _vm.onChangeNativePicker($event)}}},'b-input',_vm.$attrs,false))],1)};
1644
+ var __vue_staticRenderFns__ = [];
1645
+
1646
+ /* style */
1647
+ const __vue_inject_styles__ = undefined;
1648
+ /* scoped */
1649
+ const __vue_scope_id__ = undefined;
1650
+ /* module identifier */
1651
+ const __vue_module_identifier__ = undefined;
1652
+ /* functional template */
1653
+ const __vue_is_functional_template__ = false;
1654
+ /* style inject */
1655
+
1656
+ /* style inject SSR */
1657
+
1658
+ /* style inject shadow dom */
1659
+
1660
+
1661
+
1662
+ const __vue_component__ = /*#__PURE__*/normalizeComponent(
1663
+ { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
1664
+ __vue_inject_styles__,
1665
+ __vue_script__,
1666
+ __vue_scope_id__,
1667
+ __vue_is_functional_template__,
1668
+ __vue_module_identifier__,
1669
+ false,
1670
+ undefined,
1671
+ undefined,
1672
+ undefined
1673
+ );
1674
+
1675
+ var Datepicker = __vue_component__;
1676
+
1677
+ export { Datepicker as D };