@ohos-ports/flowbite-datepicker 2.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +73 -0
  3. package/.stylelintrc +12 -0
  4. package/CHANGELOG.md +72 -0
  5. package/LICENSE +21 -0
  6. package/README.md +71 -0
  7. package/demo/index.html +582 -0
  8. package/demo/live-demo.js +471 -0
  9. package/dist/DateRangePicker.cjs.js +2996 -0
  10. package/dist/DateRangePicker.esm.js +2994 -0
  11. package/dist/DateRangePicker.umd.js +3002 -0
  12. package/dist/Datepicker.cjs.js +2778 -0
  13. package/dist/Datepicker.esm.js +2776 -0
  14. package/dist/Datepicker.umd.js +2784 -0
  15. package/dist/css/datepicker-bs4.css +276 -0
  16. package/dist/css/datepicker-bs4.min.css +1 -0
  17. package/dist/css/datepicker-bs5.css +276 -0
  18. package/dist/css/datepicker-bs5.min.css +1 -0
  19. package/dist/css/datepicker-bulma.css +258 -0
  20. package/dist/css/datepicker-bulma.min.css +1 -0
  21. package/dist/css/datepicker-foundation.css +262 -0
  22. package/dist/css/datepicker-foundation.min.css +1 -0
  23. package/dist/css/datepicker.css +306 -0
  24. package/dist/css/datepicker.min.css +1403 -0
  25. package/dist/js/datepicker-full.js +2777 -0
  26. package/dist/js/datepicker-full.min.js +1 -0
  27. package/dist/js/datepicker.js +2569 -0
  28. package/dist/js/datepicker.min.js +1 -0
  29. package/dist/js/locales/ar-tn.js +15 -0
  30. package/dist/js/locales/ar.js +15 -0
  31. package/dist/js/locales/az.js +14 -0
  32. package/dist/js/locales/bg.js +14 -0
  33. package/dist/js/locales/bm.js +18 -0
  34. package/dist/js/locales/bn.js +19 -0
  35. package/dist/js/locales/br.js +18 -0
  36. package/dist/js/locales/bs.js +15 -0
  37. package/dist/js/locales/ca.js +18 -0
  38. package/dist/js/locales/cs.js +19 -0
  39. package/dist/js/locales/cy.js +14 -0
  40. package/dist/js/locales/da.js +19 -0
  41. package/dist/js/locales/de.js +18 -0
  42. package/dist/js/locales/el.js +16 -0
  43. package/dist/js/locales/en-AU.js +18 -0
  44. package/dist/js/locales/en-CA.js +18 -0
  45. package/dist/js/locales/en-GB.js +18 -0
  46. package/dist/js/locales/en-IE.js +17 -0
  47. package/dist/js/locales/en-NZ.js +17 -0
  48. package/dist/js/locales/en-ZA.js +17 -0
  49. package/dist/js/locales/eo.js +17 -0
  50. package/dist/js/locales/es.js +18 -0
  51. package/dist/js/locales/et.js +18 -0
  52. package/dist/js/locales/eu.js +18 -0
  53. package/dist/js/locales/fa.js +17 -0
  54. package/dist/js/locales/fi.js +17 -0
  55. package/dist/js/locales/fo.js +15 -0
  56. package/dist/js/locales/fr-CH.js +21 -0
  57. package/dist/js/locales/fr.js +18 -0
  58. package/dist/js/locales/gl.js +16 -0
  59. package/dist/js/locales/he.js +15 -0
  60. package/dist/js/locales/hi.js +18 -0
  61. package/dist/js/locales/hr.js +13 -0
  62. package/dist/js/locales/hu.js +18 -0
  63. package/dist/js/locales/hy.js +18 -0
  64. package/dist/js/locales/id.js +15 -0
  65. package/dist/js/locales/is.js +14 -0
  66. package/dist/js/locales/it-CH.js +20 -0
  67. package/dist/js/locales/it.js +18 -0
  68. package/dist/js/locales/ja.js +17 -0
  69. package/dist/js/locales/ka.js +17 -0
  70. package/dist/js/locales/kk.js +15 -0
  71. package/dist/js/locales/km.js +15 -0
  72. package/dist/js/locales/ko.js +18 -0
  73. package/dist/js/locales/lt.js +19 -0
  74. package/dist/js/locales/lv.js +18 -0
  75. package/dist/js/locales/me.js +17 -0
  76. package/dist/js/locales/mk.js +15 -0
  77. package/dist/js/locales/mn.js +17 -0
  78. package/dist/js/locales/mr.js +18 -0
  79. package/dist/js/locales/ms.js +15 -0
  80. package/dist/js/locales/nl-BE.js +18 -0
  81. package/dist/js/locales/nl.js +18 -0
  82. package/dist/js/locales/no.js +18 -0
  83. package/dist/js/locales/oc.js +17 -0
  84. package/dist/js/locales/pl.js +17 -0
  85. package/dist/js/locales/pt-BR.js +17 -0
  86. package/dist/js/locales/pt.js +18 -0
  87. package/dist/js/locales/ro.js +17 -0
  88. package/dist/js/locales/ru.js +18 -0
  89. package/dist/js/locales/si.js +18 -0
  90. package/dist/js/locales/sk.js +18 -0
  91. package/dist/js/locales/sl.js +15 -0
  92. package/dist/js/locales/sq.js +18 -0
  93. package/dist/js/locales/sr-latn.js +16 -0
  94. package/dist/js/locales/sr.js +16 -0
  95. package/dist/js/locales/sv.js +17 -0
  96. package/dist/js/locales/sw.js +15 -0
  97. package/dist/js/locales/ta.js +18 -0
  98. package/dist/js/locales/tg.js +19 -0
  99. package/dist/js/locales/th.js +14 -0
  100. package/dist/js/locales/tk.js +18 -0
  101. package/dist/js/locales/tr.js +17 -0
  102. package/dist/js/locales/uk.js +17 -0
  103. package/dist/js/locales/uz-cyrl.js +18 -0
  104. package/dist/js/locales/uz-latn.js +18 -0
  105. package/dist/js/locales/vi.js +16 -0
  106. package/dist/js/locales/zh-CN.js +19 -0
  107. package/dist/js/locales/zh-TW.js +18 -0
  108. package/dist/locales/index.cjs.js +1028 -0
  109. package/dist/locales/index.esm.js +1028 -0
  110. package/dist/main.cjs.js +2999 -0
  111. package/dist/main.esm.js +2994 -0
  112. package/dist/main.umd.js +3005 -0
  113. package/docs/.nojekyll +0 -0
  114. package/docs/README.md +266 -0
  115. package/docs/_sidebar.md +6 -0
  116. package/docs/api.md +284 -0
  117. package/docs/date-string+format.md +90 -0
  118. package/docs/i18n.md +99 -0
  119. package/docs/images/datepicker-inline.jpg +0 -0
  120. package/docs/images/datepicker.jpg +0 -0
  121. package/docs/images/multidate.jpg +0 -0
  122. package/docs/images/picker-structure.jpg +0 -0
  123. package/docs/images/rangepicker.jpg +0 -0
  124. package/docs/images/view-days.jpg +0 -0
  125. package/docs/images/view-decades.jpg +0 -0
  126. package/docs/images/view-months.jpg +0 -0
  127. package/docs/images/view-years.jpg +0 -0
  128. package/docs/index.html +26 -0
  129. package/docs/options.md +354 -0
  130. package/docs/overview.md +174 -0
  131. package/extras/twoDigitToFullYear/test/twoDigitToFullYear.js +58 -0
  132. package/extras/twoDigitToFullYear/twoDigitToFullYear.js +26 -0
  133. package/js/DateRangePicker.js +210 -0
  134. package/js/Datepicker.js +487 -0
  135. package/js/datepicker-full.js +5 -0
  136. package/js/events/functions.js +48 -0
  137. package/js/events/inputFieldListeners.js +206 -0
  138. package/js/events/otherListeners.js +15 -0
  139. package/js/events/pickerListeners.js +70 -0
  140. package/js/i18n/base-locales.js +13 -0
  141. package/js/i18n/locales/ar-tn.js +15 -0
  142. package/js/i18n/locales/ar.js +15 -0
  143. package/js/i18n/locales/az.js +14 -0
  144. package/js/i18n/locales/bg.js +14 -0
  145. package/js/i18n/locales/bm.js +18 -0
  146. package/js/i18n/locales/bn.js +19 -0
  147. package/js/i18n/locales/br.js +18 -0
  148. package/js/i18n/locales/bs.js +15 -0
  149. package/js/i18n/locales/ca.js +18 -0
  150. package/js/i18n/locales/cs.js +19 -0
  151. package/js/i18n/locales/cy.js +14 -0
  152. package/js/i18n/locales/da.js +19 -0
  153. package/js/i18n/locales/de.js +18 -0
  154. package/js/i18n/locales/el.js +16 -0
  155. package/js/i18n/locales/en-AU.js +18 -0
  156. package/js/i18n/locales/en-CA.js +18 -0
  157. package/js/i18n/locales/en-GB.js +18 -0
  158. package/js/i18n/locales/en-IE.js +17 -0
  159. package/js/i18n/locales/en-NZ.js +17 -0
  160. package/js/i18n/locales/en-ZA.js +17 -0
  161. package/js/i18n/locales/eo.js +17 -0
  162. package/js/i18n/locales/es.js +18 -0
  163. package/js/i18n/locales/et.js +18 -0
  164. package/js/i18n/locales/eu.js +18 -0
  165. package/js/i18n/locales/fa.js +17 -0
  166. package/js/i18n/locales/fi.js +17 -0
  167. package/js/i18n/locales/fo.js +15 -0
  168. package/js/i18n/locales/fr-CH.js +21 -0
  169. package/js/i18n/locales/fr.js +18 -0
  170. package/js/i18n/locales/gl.js +16 -0
  171. package/js/i18n/locales/he.js +15 -0
  172. package/js/i18n/locales/hi.js +18 -0
  173. package/js/i18n/locales/hr.js +13 -0
  174. package/js/i18n/locales/hu.js +18 -0
  175. package/js/i18n/locales/hy.js +18 -0
  176. package/js/i18n/locales/id.js +15 -0
  177. package/js/i18n/locales/is.js +14 -0
  178. package/js/i18n/locales/it-CH.js +20 -0
  179. package/js/i18n/locales/it.js +18 -0
  180. package/js/i18n/locales/ja.js +17 -0
  181. package/js/i18n/locales/ka.js +17 -0
  182. package/js/i18n/locales/kk.js +15 -0
  183. package/js/i18n/locales/km.js +15 -0
  184. package/js/i18n/locales/ko.js +18 -0
  185. package/js/i18n/locales/lt.js +19 -0
  186. package/js/i18n/locales/lv.js +18 -0
  187. package/js/i18n/locales/me.js +17 -0
  188. package/js/i18n/locales/mk.js +15 -0
  189. package/js/i18n/locales/mn.js +17 -0
  190. package/js/i18n/locales/mr.js +18 -0
  191. package/js/i18n/locales/ms.js +15 -0
  192. package/js/i18n/locales/nl-BE.js +18 -0
  193. package/js/i18n/locales/nl.js +18 -0
  194. package/js/i18n/locales/no.js +18 -0
  195. package/js/i18n/locales/oc.js +17 -0
  196. package/js/i18n/locales/pl.js +17 -0
  197. package/js/i18n/locales/pt-BR.js +17 -0
  198. package/js/i18n/locales/pt.js +18 -0
  199. package/js/i18n/locales/ro.js +17 -0
  200. package/js/i18n/locales/ru.js +18 -0
  201. package/js/i18n/locales/si.js +18 -0
  202. package/js/i18n/locales/sk.js +18 -0
  203. package/js/i18n/locales/sl.js +15 -0
  204. package/js/i18n/locales/sq.js +18 -0
  205. package/js/i18n/locales/sr-latn.js +16 -0
  206. package/js/i18n/locales/sr.js +16 -0
  207. package/js/i18n/locales/sv.js +17 -0
  208. package/js/i18n/locales/sw.js +15 -0
  209. package/js/i18n/locales/ta.js +18 -0
  210. package/js/i18n/locales/tg.js +19 -0
  211. package/js/i18n/locales/th.js +14 -0
  212. package/js/i18n/locales/tk.js +18 -0
  213. package/js/i18n/locales/tr.js +17 -0
  214. package/js/i18n/locales/uk.js +17 -0
  215. package/js/i18n/locales/uz-cyrl.js +18 -0
  216. package/js/i18n/locales/uz-latn.js +18 -0
  217. package/js/i18n/locales/vi.js +16 -0
  218. package/js/i18n/locales/zh-CN.js +19 -0
  219. package/js/i18n/locales/zh-TW.js +18 -0
  220. package/js/lib/date-format.js +185 -0
  221. package/js/lib/date.js +82 -0
  222. package/js/lib/dom.js +55 -0
  223. package/js/lib/event.js +68 -0
  224. package/js/lib/utils.js +61 -0
  225. package/js/main.js +4 -0
  226. package/js/options/defaultOptions.js +38 -0
  227. package/js/options/processOptions.js +263 -0
  228. package/js/picker/Picker.js +334 -0
  229. package/js/picker/templates/calendarWeeksTemplate.js +8 -0
  230. package/js/picker/templates/daysTemplate.js +8 -0
  231. package/js/picker/templates/pickerTemplate.js +23 -0
  232. package/js/picker/views/DaysView.js +250 -0
  233. package/js/picker/views/MonthsView.js +198 -0
  234. package/js/picker/views/View.js +55 -0
  235. package/js/picker/views/YearsView.js +170 -0
  236. package/package.json +81 -0
  237. package/postcss.config.js +5 -0
  238. package/rollup.config.js +75 -0
  239. package/sass/_mixins.scss +12 -0
  240. package/sass/datepicker-bs4.scss +91 -0
  241. package/sass/datepicker-bs5.scss +91 -0
  242. package/sass/datepicker-bulma.scss +69 -0
  243. package/sass/datepicker-foundation.scss +66 -0
  244. package/sass/datepicker.scss +436 -0
  245. package/sass/index-bs4.scss +5 -0
  246. package/sass/index-bs5.scss +5 -0
  247. package/sass/index-bulma.scss +6 -0
  248. package/sass/index-foundation.scss +3 -0
  249. package/scripts/build-css.js +39 -0
  250. package/scripts/build-locales.js +57 -0
  251. package/scripts/convert-bsdp-locales.js +65 -0
  252. package/scripts/minify-css.js +31 -0
  253. package/scripts/minify-js.js +17 -0
  254. package/style.css +10 -0
  255. package/tailwind.config.js +16 -0
  256. package/tailwind.css +1389 -0
  257. package/test/DateRangePicker/DateRangePicker.js +547 -0
  258. package/test/DateRangePicker/api-methods.js +415 -0
  259. package/test/DateRangePicker/date-selection.js +472 -0
  260. package/test/DateRangePicker/options.js +308 -0
  261. package/test/Datepicker/Datepicker-object.js +236 -0
  262. package/test/Datepicker/api-methods.js +328 -0
  263. package/test/_utils/date.js +102 -0
  264. package/test/_utils/dom.js +70 -0
  265. package/test/events.js +785 -0
  266. package/test/inline-mode.js +45 -0
  267. package/test/keyboard-operation/arrow-down.js +293 -0
  268. package/test/keyboard-operation/arrow-left.js +255 -0
  269. package/test/keyboard-operation/arrow-right.js +215 -0
  270. package/test/keyboard-operation/arrow-up.js +461 -0
  271. package/test/keyboard-operation/edit-mode.js +458 -0
  272. package/test/keyboard-operation/keyboard-operation.js +146 -0
  273. package/test/mouse-operation.js +580 -0
  274. package/test/options/before-show.js +635 -0
  275. package/test/options/bulma-datepicker.sublime-workspace +1280 -0
  276. package/test/options/buttons.js +383 -0
  277. package/test/options/date-restrictions.js +802 -0
  278. package/test/options/format.js +281 -0
  279. package/test/options/multidate.js +380 -0
  280. package/test/options/options.js +727 -0
  281. package/test/options/orientation.js +410 -0
  282. package/test/options/pick-levle+view.js +357 -0
  283. package/test/test.html +94 -0
  284. package/test/unit/DateRangePicker.js +192 -0
  285. package/test/unit/Datepicker.js +307 -0
  286. package/test/unit/_setup.js +28 -0
  287. package/test/unit/lib/date-format.js +310 -0
  288. package/test/unit/lib/date.js +211 -0
  289. package/test/unit/lib/dom.js +142 -0
  290. package/test/unit/lib/event.js +207 -0
  291. package/test/unit/lib/utils.js +135 -0
@@ -0,0 +1,802 @@
1
+ describe('options - date restrictions', function () {
2
+ const getDisabled = cells => filterCells(cells, '.disabled').map(el => [el, el.textContent]);
3
+ let input;
4
+
5
+ beforeEach(function () {
6
+ input = document.createElement('input');
7
+ testContainer.appendChild(input);
8
+ });
9
+
10
+ afterEach(function () {
11
+ testContainer.removeChild(input);
12
+ });
13
+
14
+ describe('datesDisabled', function () {
15
+ let clock;
16
+
17
+ beforeEach(function () {
18
+ clock = sinon.useFakeTimers({now: new Date(2020, 1, 14)});
19
+ });
20
+
21
+ afterEach(function () {
22
+ clock.restore();
23
+ });
24
+
25
+ it('specifies unselectable dates', function () {
26
+ const dp = new Datepicker(input, {
27
+ datesDisabled: [new Date(2020, 1, 12), '2/13/2020', new Date(2020, 1, 13), '2/20/2020'],
28
+ });
29
+ const picker = document.querySelector('.datepicker');
30
+ dp.show();
31
+
32
+ expect(picker.querySelector('.prev-btn').disabled, 'to be false');
33
+ expect(picker.querySelector('.next-btn').disabled, 'to be false');
34
+
35
+ let cells = getCells(picker);
36
+ expect(getDisabled(cells), 'to equal', [
37
+ [cells[17], '12'],
38
+ [cells[18], '13'],
39
+ [cells[25], '20'],
40
+ ]);
41
+
42
+ cells[17].click();
43
+ expect(dp.dates, 'to equal', []);
44
+ expect(input.value, 'to be', '');
45
+ expect(filterCells(cells, '.selected'), 'to equal', []);
46
+
47
+ dp.setDate(new Date(2020, 1, 12));
48
+ expect(dp.dates, 'to equal', []);
49
+ expect(input.value, 'to be', '');
50
+ expect(filterCells(cells, '.selected'), 'to equal', []);
51
+
52
+ input.value = '2/12/2020';
53
+ dp.update();
54
+ expect(dp.dates, 'to equal', []);
55
+ expect(input.value, 'to be', '2/12/2020');
56
+ expect(filterCells(cells, '.selected'), 'to equal', []);
57
+
58
+ cells[16].click();
59
+ expect(dp.dates, 'to equal', [dateValue(2020, 1, 11)]);
60
+ expect(input.value, 'to be', '02/11/2020');
61
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[16]]);
62
+
63
+ dp.enterEditMode();
64
+ input.value = '2/12/2020';
65
+ simulant.fire(input, 'keydown', {key: 'Enter'});
66
+ expect(dp.dates, 'to equal', [dateValue(2020, 1, 11)]);
67
+ expect(input.value, 'to be', '2/12/2020');
68
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[16]]);
69
+
70
+ dp.destroy();
71
+ });
72
+
73
+ it('makes the picker prevent those dates becoming view date', function () {
74
+ const dp = new Datepicker(input, {
75
+ datesDisabled: ['2/11/2020', '2/12/2020', '2/13/2020', '2/20/2020'],
76
+ });
77
+ const picker = document.querySelector('.datepicker');
78
+ const cells = getCells(picker);
79
+ dp.show();
80
+
81
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
82
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[15]]);
83
+
84
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
85
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
86
+
87
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
88
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
89
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
90
+ // on 5th
91
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
92
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
93
+
94
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
95
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
96
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
97
+ // on 27th
98
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
99
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[24]]);
100
+
101
+ // on 19th
102
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
103
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[15]]);
104
+
105
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
106
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
107
+ // on 4th
108
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
109
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
110
+
111
+ dp.destroy();
112
+ });
113
+
114
+ it('can be updated with setOptions()', function () {
115
+ const {dp, picker} = createDP(input);
116
+ dp.setOptions({datesDisabled: [new Date(2020, 1, 11), new Date(2020, 1, 26)]});
117
+ dp.show();
118
+
119
+ let cells = getCells(picker);
120
+ expect(getDisabled(cells), 'to equal', [
121
+ [cells[16], '11'],
122
+ [cells[31], '26'],
123
+ ]);
124
+
125
+ dp.setOptions({datesDisabled: []});
126
+
127
+ cells = getCells(picker);
128
+ expect(getDisabled(cells), 'to equal', []);
129
+
130
+ dp.destroy();
131
+ });
132
+ });
133
+
134
+ describe('daysOfWeekDisabled', function () {
135
+ let clock;
136
+
137
+ beforeEach(function () {
138
+ clock = sinon.useFakeTimers({now: new Date(2020, 1, 14)});
139
+ });
140
+
141
+ afterEach(function () {
142
+ clock.restore();
143
+ });
144
+
145
+ it('specifies unselectable days of week', function () {
146
+ const {dp, picker} = createDP(input, {daysOfWeekDisabled: [0, 6]});
147
+ dp.show();
148
+
149
+ expect(picker.querySelector('.prev-btn').disabled, 'to be false');
150
+ expect(picker.querySelector('.next-btn').disabled, 'to be false');
151
+
152
+ let cells = getCells(picker);
153
+ expect(getDisabled(cells), 'to equal', [
154
+ [cells[0], '26'],
155
+ [cells[6], '1'],
156
+ [cells[7], '2'],
157
+ [cells[13], '8'],
158
+ [cells[14], '9'],
159
+ [cells[20], '15'],
160
+ [cells[21], '16'],
161
+ [cells[27], '22'],
162
+ [cells[28], '23'],
163
+ [cells[34], '29'],
164
+ [cells[35], '1'],
165
+ [cells[41], '7'],
166
+ ]);
167
+
168
+ cells[14].click();
169
+ expect(dp.dates, 'to equal', []);
170
+ expect(input.value, 'to be', '');
171
+ expect(filterCells(cells, '.selected'), 'to equal', []);
172
+
173
+ dp.setDate(new Date(2020, 1, 9));
174
+ expect(dp.dates, 'to equal', []);
175
+ expect(input.value, 'to be', '');
176
+ expect(filterCells(cells, '.selected'), 'to equal', []);
177
+
178
+ input.value = '2/9/2020';
179
+ dp.update();
180
+ expect(dp.dates, 'to equal', []);
181
+ expect(input.value, 'to be', '2/9/2020');
182
+ expect(filterCells(cells, '.selected'), 'to equal', []);
183
+
184
+ cells[15].click();
185
+ expect(dp.dates, 'to equal', [dateValue(2020, 1, 10)]);
186
+ expect(input.value, 'to be', '02/10/2020');
187
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[15]]);
188
+
189
+ dp.enterEditMode();
190
+ input.value = '2/9/2020';
191
+ simulant.fire(input, 'keydown', {key: 'Enter'});
192
+ expect(dp.dates, 'to equal', [dateValue(2020, 1, 10)]);
193
+ expect(input.value, 'to be', '2/9/2020');
194
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[15]]);
195
+
196
+ dp.destroy();
197
+ });
198
+
199
+ it('makes the picker prevent those dates becoming view date', function () {
200
+ const {dp, picker} = createDP(input, {daysOfWeekDisabled: [0, 6]});
201
+ const cells = getCells(picker);
202
+ dp.show();
203
+
204
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
205
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[22]]);
206
+
207
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
208
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
209
+
210
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
211
+ // on 7th
212
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
213
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[15]]);
214
+
215
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
216
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[12]]);
217
+
218
+ dp.destroy();
219
+ });
220
+
221
+ it('can be updated with setOptions()', function () {
222
+ const {dp, picker} = createDP(input);
223
+ dp.setOptions({daysOfWeekDisabled: [4]});
224
+ dp.show();
225
+
226
+ let cells = getCells(picker);
227
+ expect(getDisabled(cells), 'to equal', [
228
+ [cells[4], '30'],
229
+ [cells[11], '6'],
230
+ [cells[18], '13'],
231
+ [cells[25], '20'],
232
+ [cells[32], '27'],
233
+ [cells[39], '5'],
234
+ ]);
235
+
236
+ dp.setOptions({daysOfWeekDisabled: []});
237
+
238
+ cells = getCells(picker);
239
+ expect(getDisabled(cells), 'to equal', []);
240
+
241
+ dp.destroy();
242
+ });
243
+ });
244
+
245
+ describe('maxDate', function () {
246
+ let clock;
247
+
248
+ beforeEach(function () {
249
+ clock = sinon.useFakeTimers({now: new Date(2020, 1, 14)});
250
+ });
251
+
252
+ afterEach(function () {
253
+ clock.restore();
254
+ });
255
+
256
+ it('specifies the maximum selectable date', function () {
257
+ const {dp, picker} = createDP(input, {maxDate: new Date(2020, 1, 25)});
258
+ const viewSwitch = getViewSwitch(picker);
259
+ dp.show();
260
+
261
+ let cells = getCells(picker);
262
+ expect(getDisabled(cells), 'to equal', [
263
+ [cells[31], '26'],
264
+ [cells[32], '27'],
265
+ [cells[33], '28'],
266
+ [cells[34], '29'],
267
+ [cells[35], '1'],
268
+ [cells[36], '2'],
269
+ [cells[37], '3'],
270
+ [cells[38], '4'],
271
+ [cells[39], '5'],
272
+ [cells[40], '6'],
273
+ [cells[41], '7'],
274
+ ]);
275
+
276
+ viewSwitch.click();
277
+ cells = getCells(picker);
278
+ expect(getDisabled(cells), 'to equal', [
279
+ [cells[2], 'Mar'],
280
+ [cells[3], 'Apr'],
281
+ [cells[4], 'May'],
282
+ [cells[5], 'Jun'],
283
+ [cells[6], 'Jul'],
284
+ [cells[7], 'Aug'],
285
+ [cells[8], 'Sep'],
286
+ [cells[9], 'Oct'],
287
+ [cells[10], 'Nov'],
288
+ [cells[11], 'Dec'],
289
+ ]);
290
+
291
+ viewSwitch.click();
292
+ cells = getCells(picker);
293
+ expect(getDisabled(cells), 'to equal', [
294
+ [cells[2], '2021'],
295
+ [cells[3], '2022'],
296
+ [cells[4], '2023'],
297
+ [cells[5], '2024'],
298
+ [cells[6], '2025'],
299
+ [cells[7], '2026'],
300
+ [cells[8], '2027'],
301
+ [cells[9], '2028'],
302
+ [cells[10], '2029'],
303
+ [cells[11], '2030'],
304
+ ]);
305
+
306
+ viewSwitch.click();
307
+ cells = getCells(picker);
308
+ expect(getDisabled(cells), 'to equal', [
309
+ [cells[4], '2030'],
310
+ [cells[5], '2040'],
311
+ [cells[6], '2050'],
312
+ [cells[7], '2060'],
313
+ [cells[8], '2070'],
314
+ [cells[9], '2080'],
315
+ [cells[10], '2090'],
316
+ [cells[11], '2100'],
317
+ ]);
318
+
319
+ dp.hide();
320
+ dp.show();
321
+ cells = getCells(picker);
322
+
323
+ cells[31].click();
324
+ expect(dp.dates, 'to equal', []);
325
+ expect(input.value, 'to be', '');
326
+ expect(filterCells(cells, '.selected'), 'to equal', []);
327
+
328
+ dp.setDate(new Date(2020, 1, 26));
329
+ expect(dp.dates, 'to equal', []);
330
+ expect(input.value, 'to be', '');
331
+ expect(filterCells(cells, '.selected'), 'to equal', []);
332
+
333
+ input.value = '2/26/2020';
334
+ dp.update();
335
+ expect(dp.dates, 'to equal', []);
336
+ expect(input.value, 'to be', '2/26/2020');
337
+ expect(filterCells(cells, '.selected'), 'to equal', []);
338
+
339
+ cells[30].click();
340
+ expect(dp.dates, 'to equal', [dateValue(2020, 1, 25)]);
341
+ expect(input.value, 'to be', '02/25/2020');
342
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[30]]);
343
+
344
+ dp.enterEditMode();
345
+ input.value = '2/26/2020';
346
+ simulant.fire(input, 'keydown', {key: 'Enter'});
347
+ expect(dp.dates, 'to equal', [dateValue(2020, 1, 25)]);
348
+ expect(input.value, 'to be', '2/26/2020');
349
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[30]]);
350
+
351
+ dp.destroy();
352
+ });
353
+
354
+ it('makes the picker disallow to navigate to after the max date', function () {
355
+ const {dp, picker} = createDP(input, {maxDate: '2/14/2020'});
356
+ const [viewSwitch, prevBtn, nextBtn] = getParts(picker, ['.view-switch', '.prev-btn', '.next-btn']);
357
+ dp.show();
358
+
359
+ expect(prevBtn.disabled, 'to be false');
360
+ expect(nextBtn.disabled, 'to be true');
361
+
362
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
363
+ let cells = getCells(picker);
364
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
365
+
366
+ simulant.fire(input, 'keydown', {key: 'ArrowRight', ctrlKey: true});
367
+ cells = getCells(picker);
368
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
369
+
370
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
371
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
372
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
373
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[13]]);
374
+
375
+ prevBtn.click();
376
+ expect(prevBtn.disabled, 'to be false');
377
+ expect(nextBtn.disabled, 'to be false');
378
+
379
+ // move to Jan 22nd
380
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
381
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
382
+ nextBtn.click();
383
+
384
+ // view date is limited to the max date
385
+ cells = getCells(picker);
386
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
387
+
388
+ // the same goes for ctrl + ArrowRight key
389
+ prevBtn.click();
390
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
391
+ simulant.fire(input, 'keydown', {key: 'ArrowRight', ctrlKey: true});
392
+ cells = getCells(picker);
393
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[19]]);
394
+
395
+ // months view
396
+ viewSwitch.click();
397
+ expect(prevBtn.disabled, 'to be false');
398
+ expect(nextBtn.disabled, 'to be true');
399
+
400
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
401
+ cells = getCells(picker);
402
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[1]]);
403
+
404
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
405
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
406
+ // on prev year's Nov
407
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
408
+ cells = getCells(picker);
409
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[10]]);
410
+
411
+ prevBtn.click();
412
+ expect(prevBtn.disabled, 'to be false');
413
+ expect(nextBtn.disabled, 'to be false');
414
+
415
+ // move to Mar
416
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
417
+ nextBtn.click();
418
+
419
+ // view date is limited to the Feb
420
+ cells = getCells(picker);
421
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[1]]);
422
+
423
+ // the same goes for ctrl + ArrowRight key
424
+ prevBtn.click();
425
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
426
+ simulant.fire(input, 'keydown', {key: 'ArrowRight', ctrlKey: true});
427
+ cells = getCells(picker);
428
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[1]]);
429
+
430
+ // years view
431
+ viewSwitch.click();
432
+ expect(prevBtn.disabled, 'to be false');
433
+ expect(nextBtn.disabled, 'to be true');
434
+
435
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
436
+ cells = getCells(picker);
437
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[1]]);
438
+
439
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
440
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
441
+ // on 2017
442
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
443
+ cells = getCells(picker);
444
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[8]]);
445
+
446
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
447
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
448
+
449
+ prevBtn.click();
450
+ expect(prevBtn.disabled, 'to be false');
451
+ expect(nextBtn.disabled, 'to be false');
452
+
453
+ // move to 2011
454
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
455
+ nextBtn.click();
456
+
457
+ // view year is limited to 2020
458
+ cells = getCells(picker);
459
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[1]]);
460
+
461
+ // the same goes for ctrl + ArrowRight key
462
+ prevBtn.click();
463
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
464
+ simulant.fire(input, 'keydown', {key: 'ArrowRight', ctrlKey: true});
465
+ cells = getCells(picker);
466
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[1]]);
467
+
468
+ // decades view
469
+ viewSwitch.click();
470
+ expect(prevBtn.disabled, 'to be false');
471
+ expect(nextBtn.disabled, 'to be true');
472
+
473
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
474
+ cells = getCells(picker);
475
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
476
+
477
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
478
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
479
+ // on 1990
480
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
481
+ cells = getCells(picker);
482
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[10]]);
483
+
484
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
485
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
486
+
487
+ prevBtn.click();
488
+ expect(prevBtn.disabled, 'to be false');
489
+ expect(nextBtn.disabled, 'to be false');
490
+
491
+ // move to 1930
492
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
493
+ nextBtn.click();
494
+
495
+ // view decade is limited to 2020
496
+ cells = getCells(picker);
497
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
498
+
499
+ // the same goes for ctrl + ArrowRight key
500
+ prevBtn.click();
501
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
502
+ simulant.fire(input, 'keydown', {key: 'ArrowRight', ctrlKey: true});
503
+ cells = getCells(picker);
504
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
505
+
506
+ dp.destroy();
507
+ });
508
+
509
+ it('can be updated with setOptions()', function () {
510
+ const {dp, picker} = createDP(input);
511
+ dp.setOptions({maxDate: new Date(2020, 1, 28)});
512
+ dp.show();
513
+
514
+ let cells = getCells(picker);
515
+ expect(getDisabled(cells), 'to equal', [
516
+ [cells[34], '29'],
517
+ [cells[35], '1'],
518
+ [cells[36], '2'],
519
+ [cells[37], '3'],
520
+ [cells[38], '4'],
521
+ [cells[39], '5'],
522
+ [cells[40], '6'],
523
+ [cells[41], '7'],
524
+ ]);
525
+
526
+ dp.setOptions({maxDate: null});
527
+
528
+ cells = getCells(picker);
529
+ expect(getDisabled(cells), 'to equal', []);
530
+
531
+ dp.destroy();
532
+ });
533
+ });
534
+
535
+ describe('minDate', function () {
536
+ let clock;
537
+
538
+ beforeEach(function () {
539
+ clock = sinon.useFakeTimers({now: new Date(2022, 6, 14)});
540
+ });
541
+
542
+ afterEach(function () {
543
+ clock.restore();
544
+ });
545
+
546
+ it('specifies the minimum selectable date', function () {
547
+ const {dp, picker} = createDP(input, {minDate: new Date(2022, 6, 4)});
548
+ const viewSwitch = getViewSwitch(picker);
549
+ dp.show();
550
+
551
+ let cells = getCells(picker);
552
+ expect(getDisabled(cells), 'to equal', [
553
+ [cells[0], '26'],
554
+ [cells[1], '27'],
555
+ [cells[2], '28'],
556
+ [cells[3], '29'],
557
+ [cells[4], '30'],
558
+ [cells[5], '1'],
559
+ [cells[6], '2'],
560
+ [cells[7], '3'],
561
+ ]);
562
+
563
+ viewSwitch.click();
564
+ cells = getCells(picker);
565
+ expect(getDisabled(cells), 'to equal', [
566
+ [cells[0], 'Jan'],
567
+ [cells[1], 'Feb'],
568
+ [cells[2], 'Mar'],
569
+ [cells[3], 'Apr'],
570
+ [cells[4], 'May'],
571
+ [cells[5], 'Jun'],
572
+ ]);
573
+
574
+ viewSwitch.click();
575
+ cells = getCells(picker);
576
+ expect(getDisabled(cells), 'to equal', [
577
+ [cells[0], '2019'],
578
+ [cells[1], '2020'],
579
+ [cells[2], '2021'],
580
+ ]);
581
+
582
+ viewSwitch.click();
583
+ cells = getCells(picker);
584
+ expect(getDisabled(cells), 'to equal', [
585
+ [cells[0], '1990'],
586
+ [cells[1], '2000'],
587
+ [cells[2], '2010'],
588
+ ]);
589
+
590
+ dp.hide();
591
+ dp.show();
592
+ cells = getCells(picker);
593
+
594
+ cells[7].click();
595
+ expect(dp.dates, 'to equal', []);
596
+ expect(input.value, 'to be', '');
597
+ expect(filterCells(cells, '.selected'), 'to equal', []);
598
+
599
+ dp.setDate(new Date(2022, 6, 3));
600
+ expect(dp.dates, 'to equal', []);
601
+ expect(input.value, 'to be', '');
602
+ expect(filterCells(cells, '.selected'), 'to equal', []);
603
+
604
+ input.value = '7/3/2022';
605
+ dp.update();
606
+ expect(dp.dates, 'to equal', []);
607
+ expect(input.value, 'to be', '7/3/2022');
608
+ expect(filterCells(cells, '.selected'), 'to equal', []);
609
+
610
+ cells[8].click();
611
+ expect(dp.dates, 'to equal', [dateValue(2022, 6, 4)]);
612
+ expect(input.value, 'to be', '07/04/2022');
613
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[8]]);
614
+
615
+ dp.enterEditMode();
616
+ input.value = '7/3/2022';
617
+ simulant.fire(input, 'keydown', {key: 'Enter'});
618
+ expect(dp.dates, 'to equal', [dateValue(2022, 6, 4)]);
619
+ expect(input.value, 'to be', '7/3/2022');
620
+ expect(filterCells(cells, '.selected'), 'to equal', [cells[8]]);
621
+
622
+ dp.destroy();
623
+ });
624
+
625
+ it('makes the picker disallow to navigate to before the min date', function () {
626
+ const {dp, picker} = createDP(input, {minDate: '7/14/2022'});
627
+ const [viewSwitch, prevBtn, nextBtn] = getParts(picker, ['.view-switch', '.prev-btn', '.next-btn']);
628
+ dp.show();
629
+
630
+ expect(prevBtn.disabled, 'to be true');
631
+ expect(nextBtn.disabled, 'to be false');
632
+
633
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
634
+ let cells = getCells(picker);
635
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[18]]);
636
+
637
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft', ctrlKey: true});
638
+ cells = getCells(picker);
639
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[18]]);
640
+
641
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
642
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
643
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
644
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[24]]);
645
+
646
+ nextBtn.click();
647
+ expect(prevBtn.disabled, 'to be false');
648
+ expect(nextBtn.disabled, 'to be false');
649
+
650
+ // move to Aug 13th
651
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
652
+ prevBtn.click();
653
+
654
+ // view date is limited to min date
655
+ cells = getCells(picker);
656
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[18]]);
657
+
658
+ // the same goes for ctrl + ArrowLeft key
659
+ prevBtn.click();
660
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
661
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft', ctrlKey: true});
662
+ cells = getCells(picker);
663
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[18]]);
664
+
665
+ // months view
666
+ viewSwitch.click();
667
+ expect(prevBtn.disabled, 'to be true');
668
+ expect(nextBtn.disabled, 'to be false');
669
+
670
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
671
+ cells = getCells(picker);
672
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[6]]);
673
+
674
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
675
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
676
+ // on Oct
677
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
678
+ cells = getCells(picker);
679
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[9]]);
680
+
681
+ nextBtn.click();
682
+ expect(prevBtn.disabled, 'to be false');
683
+ expect(nextBtn.disabled, 'to be false');
684
+
685
+ // move to Jun
686
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
687
+ prevBtn.click();
688
+
689
+ // view date is limited to Jul
690
+ cells = getCells(picker);
691
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[6]]);
692
+
693
+ // the same goes for ctrl + ArrowLeft key
694
+ prevBtn.click();
695
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
696
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft', ctrlKey: true});
697
+ cells = getCells(picker);
698
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[6]]);
699
+
700
+ // years view
701
+ viewSwitch.click();
702
+ expect(prevBtn.disabled, 'to be true');
703
+ expect(nextBtn.disabled, 'to be false');
704
+
705
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
706
+ cells = getCells(picker);
707
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
708
+
709
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
710
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
711
+ // on 2025
712
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
713
+ cells = getCells(picker);
714
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[6]]);
715
+
716
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
717
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
718
+
719
+ nextBtn.click();
720
+ expect(prevBtn.disabled, 'to be false');
721
+ expect(nextBtn.disabled, 'to be false');
722
+
723
+ // move to 2031
724
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
725
+ prevBtn.click();
726
+
727
+ // view year is limited to 2022
728
+ cells = getCells(picker);
729
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
730
+
731
+ // the same goes for ctrl + ArrowLeft key
732
+ prevBtn.click();
733
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
734
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft', ctrlKey: true});
735
+ cells = getCells(picker);
736
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
737
+
738
+ // decades view
739
+ viewSwitch.click();
740
+ expect(prevBtn.disabled, 'to be true');
741
+ expect(nextBtn.disabled, 'to be false');
742
+
743
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
744
+ cells = getCells(picker);
745
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
746
+
747
+ simulant.fire(input, 'keydown', {key: 'ArrowDown'});
748
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
749
+ // on 2050
750
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
751
+ cells = getCells(picker);
752
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[6]]);
753
+
754
+ simulant.fire(input, 'keydown', {key: 'ArrowRight'});
755
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
756
+
757
+ nextBtn.click();
758
+ expect(prevBtn.disabled, 'to be false');
759
+ expect(nextBtn.disabled, 'to be false');
760
+
761
+ // move to 2110
762
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft'});
763
+ prevBtn.click();
764
+
765
+ // view decade is limited to 2020
766
+ cells = getCells(picker);
767
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
768
+
769
+ // the same goes for ctrl + ArrowLeft key
770
+ prevBtn.click();
771
+ simulant.fire(input, 'keydown', {key: 'ArrowUp'});
772
+ simulant.fire(input, 'keydown', {key: 'ArrowLeft', ctrlKey: true});
773
+ cells = getCells(picker);
774
+ expect(filterCells(cells, '.focused'), 'to equal', [cells[3]]);
775
+
776
+ dp.destroy();
777
+ });
778
+
779
+ it('can be updated with setOptions()', function () {
780
+ const {dp, picker} = createDP(input);
781
+ dp.setOptions({minDate: new Date(2022, 6, 2)});
782
+ dp.show();
783
+
784
+ let cells = getCells(picker);
785
+ expect(getDisabled(cells), 'to equal', [
786
+ [cells[0], '26'],
787
+ [cells[1], '27'],
788
+ [cells[2], '28'],
789
+ [cells[3], '29'],
790
+ [cells[4], '30'],
791
+ [cells[5], '1'],
792
+ ]);
793
+
794
+ dp.setOptions({minDate: null});
795
+
796
+ cells = getCells(picker);
797
+ expect(getDisabled(cells), 'to equal', []);
798
+
799
+ dp.destroy();
800
+ });
801
+ });
802
+ });