primevue 3.15.0 → 3.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (387) hide show
  1. package/autocomplete/AutoComplete.d.ts +182 -38
  2. package/autocomplete/AutoComplete.vue +636 -342
  3. package/autocomplete/autocomplete.cjs.js +745 -416
  4. package/autocomplete/autocomplete.cjs.min.js +1 -1
  5. package/autocomplete/autocomplete.esm.js +747 -418
  6. package/autocomplete/autocomplete.esm.min.js +1 -1
  7. package/autocomplete/autocomplete.js +745 -416
  8. package/autocomplete/autocomplete.min.js +1 -1
  9. package/button/Button.vue +4 -1
  10. package/button/button.cjs.js +5 -1
  11. package/button/button.cjs.min.js +1 -1
  12. package/button/button.esm.js +5 -1
  13. package/button/button.esm.min.js +1 -1
  14. package/button/button.js +5 -1
  15. package/button/button.min.js +1 -1
  16. package/calendar/Calendar.d.ts +51 -12
  17. package/calendar/Calendar.vue +259 -114
  18. package/calendar/calendar.cjs.js +414 -220
  19. package/calendar/calendar.cjs.min.js +1 -1
  20. package/calendar/calendar.esm.js +415 -221
  21. package/calendar/calendar.esm.min.js +1 -1
  22. package/calendar/calendar.js +414 -220
  23. package/calendar/calendar.min.js +1 -1
  24. package/carousel/Carousel.vue +25 -0
  25. package/carousel/carousel.cjs.js +25 -0
  26. package/carousel/carousel.cjs.min.js +1 -1
  27. package/carousel/carousel.esm.js +25 -0
  28. package/carousel/carousel.esm.min.js +1 -1
  29. package/carousel/carousel.js +25 -0
  30. package/carousel/carousel.min.js +1 -1
  31. package/cascadeselect/CascadeSelect.d.ts +97 -17
  32. package/cascadeselect/CascadeSelect.vue +560 -135
  33. package/cascadeselect/CascadeSelectSub.vue +48 -129
  34. package/cascadeselect/cascadeselect.cjs.js +670 -306
  35. package/cascadeselect/cascadeselect.cjs.min.js +1 -1
  36. package/cascadeselect/cascadeselect.esm.js +672 -308
  37. package/cascadeselect/cascadeselect.esm.min.js +1 -1
  38. package/cascadeselect/cascadeselect.js +670 -306
  39. package/cascadeselect/cascadeselect.min.js +1 -1
  40. package/checkbox/Checkbox.d.ts +40 -4
  41. package/checkbox/Checkbox.vue +50 -13
  42. package/checkbox/checkbox.cjs.js +64 -23
  43. package/checkbox/checkbox.cjs.min.js +1 -1
  44. package/checkbox/checkbox.esm.js +65 -24
  45. package/checkbox/checkbox.esm.min.js +1 -1
  46. package/checkbox/checkbox.js +64 -23
  47. package/checkbox/checkbox.min.js +1 -1
  48. package/chips/Chips.d.ts +36 -12
  49. package/chips/Chips.vue +116 -22
  50. package/chips/chips.cjs.js +149 -37
  51. package/chips/chips.cjs.min.js +1 -1
  52. package/chips/chips.esm.js +150 -38
  53. package/chips/chips.esm.min.js +1 -1
  54. package/chips/chips.js +150 -39
  55. package/chips/chips.min.js +1 -1
  56. package/colorpicker/ColorPicker.d.ts +3 -6
  57. package/colorpicker/ColorPicker.vue +1 -5
  58. package/colorpicker/colorpicker.cjs.js +2 -7
  59. package/colorpicker/colorpicker.cjs.min.js +1 -1
  60. package/colorpicker/colorpicker.esm.js +2 -7
  61. package/colorpicker/colorpicker.esm.min.js +1 -1
  62. package/colorpicker/colorpicker.js +2 -7
  63. package/colorpicker/colorpicker.min.js +1 -1
  64. package/column/Column.d.ts +4 -0
  65. package/column/Column.vue +4 -0
  66. package/column/column.cjs.js +4 -0
  67. package/column/column.cjs.min.js +1 -1
  68. package/column/column.esm.js +4 -0
  69. package/column/column.esm.min.js +1 -1
  70. package/column/column.js +4 -0
  71. package/column/column.min.js +1 -1
  72. package/config/PrimeVue.d.ts +42 -0
  73. package/config/config.cjs.js +35 -4
  74. package/config/config.cjs.min.js +1 -1
  75. package/config/config.esm.js +35 -4
  76. package/config/config.esm.min.js +1 -1
  77. package/config/config.js +35 -4
  78. package/config/config.min.js +1 -1
  79. package/confirmdialog/ConfirmDialog.vue +4 -1
  80. package/confirmdialog/confirmdialog.cjs.js +6 -2
  81. package/confirmdialog/confirmdialog.cjs.min.js +1 -1
  82. package/confirmdialog/confirmdialog.esm.js +6 -2
  83. package/confirmdialog/confirmdialog.esm.min.js +1 -1
  84. package/confirmdialog/confirmdialog.js +6 -2
  85. package/confirmdialog/confirmdialog.min.js +1 -1
  86. package/contextmenu/ContextMenu.d.ts +1 -1
  87. package/contextmenu/ContextMenuSub.vue +3 -3
  88. package/contextmenu/contextmenu.cjs.js +14 -8
  89. package/contextmenu/contextmenu.cjs.min.js +1 -1
  90. package/contextmenu/contextmenu.esm.js +15 -9
  91. package/contextmenu/contextmenu.esm.min.js +1 -1
  92. package/contextmenu/contextmenu.js +14 -8
  93. package/contextmenu/contextmenu.min.js +1 -1
  94. package/core/core.js +1128 -772
  95. package/core/core.min.js +12 -12
  96. package/datatable/BodyCell.vue +11 -2
  97. package/datatable/DataTable.vue +23 -2
  98. package/datatable/datatable.cjs.js +34 -4
  99. package/datatable/datatable.cjs.min.js +1 -1
  100. package/datatable/datatable.esm.js +34 -4
  101. package/datatable/datatable.esm.min.js +1 -1
  102. package/datatable/datatable.js +34 -4
  103. package/datatable/datatable.min.js +1 -1
  104. package/dialog/Dialog.d.ts +5 -1
  105. package/dropdown/Dropdown.d.ts +92 -38
  106. package/dropdown/Dropdown.vue +538 -399
  107. package/dropdown/dropdown.cjs.js +657 -486
  108. package/dropdown/dropdown.cjs.min.js +1 -1
  109. package/dropdown/dropdown.esm.js +659 -488
  110. package/dropdown/dropdown.esm.min.js +1 -1
  111. package/dropdown/dropdown.js +657 -486
  112. package/dropdown/dropdown.min.js +1 -1
  113. package/editor/Editor.d.ts +32 -0
  114. package/editor/Editor.vue +15 -1
  115. package/editor/editor.cjs.js +15 -1
  116. package/editor/editor.cjs.min.js +1 -1
  117. package/editor/editor.esm.js +15 -1
  118. package/editor/editor.esm.min.js +1 -1
  119. package/editor/editor.js +15 -1
  120. package/editor/editor.min.js +1 -1
  121. package/inputmask/InputMask.vue +9 -6
  122. package/inputmask/inputmask.cjs.js +14 -6
  123. package/inputmask/inputmask.cjs.min.js +1 -1
  124. package/inputmask/inputmask.esm.js +15 -7
  125. package/inputmask/inputmask.esm.min.js +1 -1
  126. package/inputmask/inputmask.js +14 -6
  127. package/inputmask/inputmask.min.js +1 -1
  128. package/inputnumber/InputNumber.d.ts +31 -7
  129. package/inputnumber/InputNumber.vue +53 -20
  130. package/inputnumber/inputnumber.cjs.js +75 -29
  131. package/inputnumber/inputnumber.cjs.min.js +1 -1
  132. package/inputnumber/inputnumber.esm.js +76 -30
  133. package/inputnumber/inputnumber.esm.min.js +1 -1
  134. package/inputnumber/inputnumber.js +75 -29
  135. package/inputnumber/inputnumber.min.js +1 -1
  136. package/inputswitch/InputSwitch.d.ts +24 -8
  137. package/inputswitch/InputSwitch.vue +27 -12
  138. package/inputswitch/inputswitch.cjs.js +38 -20
  139. package/inputswitch/inputswitch.cjs.min.js +1 -1
  140. package/inputswitch/inputswitch.esm.js +39 -21
  141. package/inputswitch/inputswitch.esm.min.js +1 -1
  142. package/inputswitch/inputswitch.js +38 -20
  143. package/inputswitch/inputswitch.min.js +1 -1
  144. package/inputtext/InputText.vue +1 -2
  145. package/inputtext/inputtext.cjs.js +3 -4
  146. package/inputtext/inputtext.cjs.min.js +1 -1
  147. package/inputtext/inputtext.esm.js +4 -5
  148. package/inputtext/inputtext.esm.min.js +1 -1
  149. package/inputtext/inputtext.js +3 -4
  150. package/inputtext/inputtext.min.js +1 -1
  151. package/knob/Knob.d.ts +12 -0
  152. package/knob/Knob.vue +62 -2
  153. package/knob/knob.cjs.js +73 -5
  154. package/knob/knob.cjs.min.js +1 -1
  155. package/knob/knob.esm.js +73 -5
  156. package/knob/knob.esm.min.js +1 -1
  157. package/knob/knob.js +73 -5
  158. package/knob/knob.min.js +1 -1
  159. package/listbox/Listbox.d.ts +53 -7
  160. package/listbox/Listbox.vue +500 -135
  161. package/listbox/listbox.cjs.js +597 -193
  162. package/listbox/listbox.cjs.min.js +1 -1
  163. package/listbox/listbox.esm.js +599 -195
  164. package/listbox/listbox.esm.min.js +1 -1
  165. package/listbox/listbox.js +597 -193
  166. package/listbox/listbox.min.js +1 -1
  167. package/menu/Menu.d.ts +1 -1
  168. package/menu/Menuitem.vue +2 -2
  169. package/menu/menu.cjs.js +12 -6
  170. package/menu/menu.cjs.min.js +1 -1
  171. package/menu/menu.esm.js +13 -7
  172. package/menu/menu.esm.min.js +1 -1
  173. package/menu/menu.js +12 -6
  174. package/menu/menu.min.js +1 -1
  175. package/menubar/MenubarSub.vue +3 -3
  176. package/menubar/menubar.cjs.js +14 -8
  177. package/menubar/menubar.cjs.min.js +1 -1
  178. package/menubar/menubar.esm.js +15 -9
  179. package/menubar/menubar.esm.min.js +1 -1
  180. package/menubar/menubar.js +14 -8
  181. package/menubar/menubar.min.js +1 -1
  182. package/menuitem/MenuItem.d.ts +1 -1
  183. package/multiselect/MultiSelect.d.ts +111 -51
  184. package/multiselect/MultiSelect.vue +629 -338
  185. package/multiselect/multiselect.cjs.js +748 -428
  186. package/multiselect/multiselect.cjs.min.js +1 -1
  187. package/multiselect/multiselect.esm.js +750 -430
  188. package/multiselect/multiselect.esm.min.js +1 -1
  189. package/multiselect/multiselect.js +748 -428
  190. package/multiselect/multiselect.min.js +1 -1
  191. package/overlaypanel/OverlayPanel.d.ts +1 -1
  192. package/overlaypanel/OverlayPanel.vue +14 -2
  193. package/overlaypanel/overlaypanel.cjs.js +14 -2
  194. package/overlaypanel/overlaypanel.cjs.min.js +1 -1
  195. package/overlaypanel/overlaypanel.esm.js +14 -2
  196. package/overlaypanel/overlaypanel.esm.min.js +1 -1
  197. package/overlaypanel/overlaypanel.js +14 -2
  198. package/overlaypanel/overlaypanel.min.js +1 -1
  199. package/package.json +2 -2
  200. package/paginator/Paginator.d.ts +2 -2
  201. package/password/Password.d.ts +36 -8
  202. package/password/Password.vue +50 -14
  203. package/password/password.cjs.js +69 -24
  204. package/password/password.cjs.min.js +1 -1
  205. package/password/password.esm.js +71 -26
  206. package/password/password.esm.min.js +1 -1
  207. package/password/password.js +69 -24
  208. package/password/password.min.js +1 -1
  209. package/picklist/PickList.d.ts +8 -0
  210. package/picklist/PickList.vue +10 -2
  211. package/picklist/picklist.cjs.js +68 -50
  212. package/picklist/picklist.cjs.min.js +1 -1
  213. package/picklist/picklist.esm.js +69 -51
  214. package/picklist/picklist.esm.min.js +1 -1
  215. package/picklist/picklist.js +68 -50
  216. package/picklist/picklist.min.js +1 -1
  217. package/portal/Portal.d.ts +1 -1
  218. package/radiobutton/RadioButton.d.ts +28 -4
  219. package/radiobutton/RadioButton.vue +36 -11
  220. package/radiobutton/radiobutton.cjs.js +49 -23
  221. package/radiobutton/radiobutton.cjs.min.js +1 -1
  222. package/radiobutton/radiobutton.esm.js +50 -24
  223. package/radiobutton/radiobutton.esm.min.js +1 -1
  224. package/radiobutton/radiobutton.js +49 -23
  225. package/radiobutton/radiobutton.min.js +1 -1
  226. package/rating/Rating.d.ts +4 -0
  227. package/rating/Rating.vue +61 -7
  228. package/rating/rating.cjs.js +90 -16
  229. package/rating/rating.cjs.min.js +1 -1
  230. package/rating/rating.esm.js +91 -17
  231. package/rating/rating.esm.min.js +1 -1
  232. package/rating/rating.js +90 -16
  233. package/rating/rating.min.js +1 -1
  234. package/resources/primevue.css +8 -0
  235. package/resources/primevue.min.css +1 -1
  236. package/resources/themes/arya-blue/theme.css +82 -40
  237. package/resources/themes/arya-green/theme.css +82 -40
  238. package/resources/themes/arya-orange/theme.css +82 -40
  239. package/resources/themes/arya-purple/theme.css +82 -40
  240. package/resources/themes/bootstrap4-dark-blue/theme.css +82 -40
  241. package/resources/themes/bootstrap4-dark-purple/theme.css +82 -40
  242. package/resources/themes/bootstrap4-light-blue/theme.css +82 -40
  243. package/resources/themes/bootstrap4-light-purple/theme.css +82 -40
  244. package/resources/themes/fluent-light/theme.css +82 -40
  245. package/resources/themes/lara-dark-blue/theme.css +82 -40
  246. package/resources/themes/lara-dark-indigo/theme.css +82 -40
  247. package/resources/themes/lara-dark-purple/theme.css +82 -40
  248. package/resources/themes/lara-dark-teal/theme.css +82 -40
  249. package/resources/themes/lara-light-blue/theme.css +82 -40
  250. package/resources/themes/lara-light-indigo/theme.css +82 -40
  251. package/resources/themes/lara-light-purple/theme.css +82 -40
  252. package/resources/themes/lara-light-teal/theme.css +82 -40
  253. package/resources/themes/luna-amber/theme.css +82 -40
  254. package/resources/themes/luna-blue/theme.css +82 -40
  255. package/resources/themes/luna-green/theme.css +82 -40
  256. package/resources/themes/luna-pink/theme.css +82 -40
  257. package/resources/themes/md-dark-deeppurple/theme.css +82 -40
  258. package/resources/themes/md-dark-indigo/theme.css +82 -40
  259. package/resources/themes/md-light-deeppurple/theme.css +82 -40
  260. package/resources/themes/md-light-indigo/theme.css +82 -40
  261. package/resources/themes/mdc-dark-deeppurple/theme.css +82 -40
  262. package/resources/themes/mdc-dark-indigo/theme.css +82 -40
  263. package/resources/themes/mdc-light-deeppurple/theme.css +82 -40
  264. package/resources/themes/mdc-light-indigo/theme.css +82 -40
  265. package/resources/themes/nova/theme.css +82 -40
  266. package/resources/themes/nova-accent/theme.css +82 -40
  267. package/resources/themes/nova-alt/theme.css +82 -40
  268. package/resources/themes/nova-vue/theme.css +82 -40
  269. package/resources/themes/rhea/theme.css +82 -40
  270. package/resources/themes/saga-blue/theme.css +82 -40
  271. package/resources/themes/saga-green/theme.css +82 -40
  272. package/resources/themes/saga-orange/theme.css +82 -40
  273. package/resources/themes/saga-purple/theme.css +82 -40
  274. package/resources/themes/tailwind-light/theme.css +82 -40
  275. package/resources/themes/vela-blue/theme.css +82 -40
  276. package/resources/themes/vela-green/theme.css +82 -40
  277. package/resources/themes/vela-orange/theme.css +82 -40
  278. package/resources/themes/vela-purple/theme.css +82 -40
  279. package/ripple/ripple.cjs.js +1 -0
  280. package/ripple/ripple.cjs.min.js +1 -1
  281. package/ripple/ripple.esm.js +1 -0
  282. package/ripple/ripple.esm.min.js +1 -1
  283. package/ripple/ripple.js +1 -0
  284. package/ripple/ripple.min.js +1 -1
  285. package/selectbutton/SelectButton.d.ts +6 -2
  286. package/selectbutton/SelectButton.vue +89 -12
  287. package/selectbutton/selectbutton.cjs.js +97 -22
  288. package/selectbutton/selectbutton.cjs.min.js +1 -1
  289. package/selectbutton/selectbutton.esm.js +99 -24
  290. package/selectbutton/selectbutton.esm.min.js +1 -1
  291. package/selectbutton/selectbutton.js +97 -22
  292. package/selectbutton/selectbutton.min.js +1 -1
  293. package/slider/Slider.d.ts +9 -1
  294. package/slider/Slider.vue +50 -34
  295. package/slider/slider.cjs.js +59 -38
  296. package/slider/slider.cjs.min.js +1 -1
  297. package/slider/slider.esm.js +59 -38
  298. package/slider/slider.esm.min.js +1 -1
  299. package/slider/slider.js +59 -38
  300. package/slider/slider.min.js +1 -1
  301. package/splitbutton/SplitButton.d.ts +1 -1
  302. package/splitter/Splitter.vue +30 -1
  303. package/splitter/splitter.cjs.js +30 -1
  304. package/splitter/splitter.cjs.min.js +1 -1
  305. package/splitter/splitter.esm.js +30 -1
  306. package/splitter/splitter.esm.min.js +1 -1
  307. package/splitter/splitter.js +30 -1
  308. package/splitter/splitter.min.js +1 -1
  309. package/textarea/Textarea.vue +1 -2
  310. package/textarea/textarea.cjs.js +3 -5
  311. package/textarea/textarea.cjs.min.js +1 -1
  312. package/textarea/textarea.esm.js +4 -6
  313. package/textarea/textarea.esm.min.js +1 -1
  314. package/textarea/textarea.js +3 -5
  315. package/textarea/textarea.min.js +1 -1
  316. package/tieredmenu/TieredMenu.d.ts +1 -1
  317. package/tieredmenu/TieredMenuSub.vue +3 -3
  318. package/tieredmenu/tieredmenu.cjs.js +14 -8
  319. package/tieredmenu/tieredmenu.cjs.min.js +1 -1
  320. package/tieredmenu/tieredmenu.esm.js +15 -9
  321. package/tieredmenu/tieredmenu.esm.min.js +1 -1
  322. package/tieredmenu/tieredmenu.js +14 -8
  323. package/tieredmenu/tieredmenu.min.js +1 -1
  324. package/timeline/Timeline.d.ts +10 -1
  325. package/timeline/Timeline.vue +1 -1
  326. package/timeline/timeline.cjs.js +5 -1
  327. package/timeline/timeline.cjs.min.js +1 -1
  328. package/timeline/timeline.esm.js +5 -1
  329. package/timeline/timeline.esm.min.js +1 -1
  330. package/timeline/timeline.js +5 -1
  331. package/timeline/timeline.min.js +1 -1
  332. package/togglebutton/ToggleButton.d.ts +42 -0
  333. package/togglebutton/ToggleButton.vue +44 -7
  334. package/togglebutton/togglebutton.cjs.js +59 -13
  335. package/togglebutton/togglebutton.cjs.min.js +1 -1
  336. package/togglebutton/togglebutton.esm.js +60 -14
  337. package/togglebutton/togglebutton.esm.min.js +1 -1
  338. package/togglebutton/togglebutton.js +59 -13
  339. package/togglebutton/togglebutton.min.js +1 -1
  340. package/tooltip/tooltip.cjs.js +20 -11
  341. package/tooltip/tooltip.cjs.min.js +1 -1
  342. package/tooltip/tooltip.esm.js +21 -12
  343. package/tooltip/tooltip.esm.min.js +1 -1
  344. package/tooltip/tooltip.js +20 -11
  345. package/tooltip/tooltip.min.js +1 -1
  346. package/tree/Tree.vue +5 -1
  347. package/tree/TreeNode.vue +20 -19
  348. package/tree/tree.cjs.js +47 -32
  349. package/tree/tree.cjs.min.js +1 -1
  350. package/tree/tree.esm.js +47 -32
  351. package/tree/tree.esm.min.js +1 -1
  352. package/tree/tree.js +47 -32
  353. package/tree/tree.min.js +1 -1
  354. package/treeselect/TreeSelect.d.ts +26 -10
  355. package/treeselect/TreeSelect.vue +52 -29
  356. package/treeselect/treeselect.cjs.js +74 -41
  357. package/treeselect/treeselect.cjs.min.js +1 -1
  358. package/treeselect/treeselect.esm.js +76 -43
  359. package/treeselect/treeselect.esm.min.js +1 -1
  360. package/treeselect/treeselect.js +74 -41
  361. package/treeselect/treeselect.min.js +1 -1
  362. package/tristatecheckbox/TriStateCheckbox.d.ts +20 -4
  363. package/tristatecheckbox/TriStateCheckbox.vue +52 -15
  364. package/tristatecheckbox/tristatecheckbox.cjs.js +67 -26
  365. package/tristatecheckbox/tristatecheckbox.cjs.min.js +1 -1
  366. package/tristatecheckbox/tristatecheckbox.esm.js +68 -27
  367. package/tristatecheckbox/tristatecheckbox.esm.min.js +1 -1
  368. package/tristatecheckbox/tristatecheckbox.js +67 -26
  369. package/tristatecheckbox/tristatecheckbox.min.js +1 -1
  370. package/utils/Utils.d.ts +3 -2
  371. package/utils/utils.cjs.js +239 -173
  372. package/utils/utils.cjs.min.js +1 -1
  373. package/utils/utils.esm.js +239 -173
  374. package/utils/utils.esm.min.js +1 -1
  375. package/utils/utils.js +239 -173
  376. package/utils/utils.min.js +1 -1
  377. package/vetur-attributes.json +612 -136
  378. package/vetur-tags.json +180 -59
  379. package/virtualscroller/VirtualScroller.d.ts +10 -0
  380. package/virtualscroller/VirtualScroller.vue +18 -17
  381. package/virtualscroller/virtualscroller.cjs.js +22 -20
  382. package/virtualscroller/virtualscroller.cjs.min.js +1 -1
  383. package/virtualscroller/virtualscroller.esm.js +22 -20
  384. package/virtualscroller/virtualscroller.esm.min.js +1 -1
  385. package/virtualscroller/virtualscroller.js +22 -20
  386. package/virtualscroller/virtualscroller.min.js +1 -1
  387. package/web-types.json +1745 -338
@@ -1,24 +1,26 @@
1
1
  <template>
2
- <span ref="container" :class="containerClass" :style="style">
3
- <input :ref="inputRef" v-if="!inline" type="text" :class="['p-inputtext p-component', inputClass]" :style="inputStyle" @input="onInput" v-bind="$attrs"
4
- @focus="onFocus" @blur="onBlur" @keydown="onKeyDown" :readonly="!manualInput" inputmode="none">
5
- <CalendarButton v-if="showIcon" :icon="icon" tabindex="-1" class="p-datepicker-trigger" :disabled="$attrs.disabled" @click="onButtonClick" type="button" :aria-label="inputFieldValue"/>
2
+ <span ref="container" :id="id" :class="containerClass">
3
+ <input :ref="inputRef" v-if="!inline" type="text" role="combobox" :id="inputId" :class="['p-inputtext p-component', inputClass]" :style="inputStyle" :placeholder="placeholder"
4
+ aria-autocomplete="none" aria-haspopup="dialog" :aria-expanded="overlayVisible" :aria-controls="panelId" :aria-labelledby="ariaLabelledby" :aria-label="ariaLabel" inputmode="none"
5
+ @input="onInput" @focus="onFocus" @blur="onBlur" @keydown="onKeyDown" :readonly="!manualInput" :tabindex="0" v-bind="inputProps">
6
+ <CalendarButton v-if="showIcon" :icon="icon" class="p-datepicker-trigger" :disabled="disabled" @click="onButtonClick" type="button" :aria-label="$primevue.config.locale.chooseDate" aria-haspopup="dialog" :aria-expanded="overlayVisible" :aria-controls="panelId"/>
6
7
  <Portal :appendTo="appendTo" :disabled="inline">
7
8
  <transition name="p-connected-overlay" @enter="onOverlayEnter($event)" @after-enter="onOverlayEnterComplete" @after-leave="onOverlayAfterLeave" @leave="onOverlayLeave">
8
- <div :ref="overlayRef" :class="panelStyleClass" v-if="inline ? true : overlayVisible" :role="inline ? null : 'dialog'" @click="onOverlayClick" @mouseup="onOverlayMouseUp">
9
+ <div :ref="overlayRef" :id="panelId" :class="panelStyleClass" :style=panelStyle v-if="inline || overlayVisible" :role="inline ? null : 'dialog'" :aria-modal="inline ? null : 'true'" :aria-label="$primevue.config.locale.chooseDate"
10
+ @click="onOverlayClick" @keydown="onOverlayKeyDown" @mouseup="onOverlayMouseUp" v-bind="panelProps">
9
11
  <template v-if="!timeOnly">
10
12
  <div class="p-datepicker-group-container">
11
13
  <div class="p-datepicker-group" v-for="(month,groupIndex) of months" :key="month.month + month.year">
12
14
  <div class="p-datepicker-header">
13
15
  <slot name="header"></slot>
14
- <button class="p-datepicker-prev p-link" v-show="groupIndex === 0" @click="onPrevButtonClick" type="button" @keydown="onContainerButtonKeydown" v-ripple :disabled="$attrs.disabled">
16
+ <button class="p-datepicker-prev p-link" v-show="showOtherMonths ? groupIndex === 0 : false" @click="onPrevButtonClick" type="button" @keydown="onContainerButtonKeydown" v-ripple :disabled="disabled" :aria-label=" currentView === 'year' ? $primevue.config.locale.prevDecade: currentView === 'month' ? $primevue.config.locale.prevYear : $primevue.config.locale.prevMonth">
15
17
  <span class="p-datepicker-prev-icon pi pi-chevron-left"></span>
16
18
  </button>
17
19
  <div class="p-datepicker-title">
18
- <button type="button" @click="switchToMonthView" @keydown="onContainerButtonKeydown" v-if="currentView === 'date'" class="p-datepicker-month p-link" :disabled="switchViewButtonDisabled">
20
+ <button type="button" @click="switchToMonthView" @keydown="onContainerButtonKeydown" v-if="currentView === 'date'" class="p-datepicker-month p-link" :disabled="switchViewButtonDisabled" :aria-label="$primevue.config.locale.chooseMonth">
19
21
  {{getMonthName(month.month)}}
20
22
  </button>
21
- <button type="button" @click="switchToYearView" @keydown="onContainerButtonKeydown" v-if="currentView !== 'year'" class="p-datepicker-year p-link" :disabled="switchViewButtonDisabled">
23
+ <button type="button" @click="switchToYearView" @keydown="onContainerButtonKeydown" v-if="currentView !== 'year'" class="p-datepicker-year p-link" :disabled="switchViewButtonDisabled" :aria-label="$primevue.config.locale.chooseYear">
22
24
  {{getYear(month)}}
23
25
  </button>
24
26
  <span class="p-datepicker-decade" v-if="currentView === 'year'">
@@ -27,19 +29,19 @@
27
29
  </slot>
28
30
  </span>
29
31
  </div>
30
- <button class="p-datepicker-next p-link" v-show="numberOfMonths === 1 ? true : (groupIndex === numberOfMonths - 1)"
31
- @click="onNextButtonClick" type="button" @keydown="onContainerButtonKeydown" v-ripple :disabled="$attrs.disabled">
32
+ <button class="p-datepicker-next p-link" v-show="showOtherMonths ? numberOfMonths === 1 ? true : (groupIndex === numberOfMonths - 1) : false"
33
+ @click="onNextButtonClick" type="button" @keydown="onContainerButtonKeydown" v-ripple :disabled="disabled" :aria-label=" currentView === 'year' ? $primevue.config.locale.nextDecade : currentView === 'month' ? $primevue.config.locale.nextYear : $primevue.config.locale.nextMonth">
32
34
  <span class="p-datepicker-next-icon pi pi-chevron-right"></span>
33
35
  </button>
34
36
  </div>
35
37
  <div class="p-datepicker-calendar-container" v-if="currentView ==='date'">
36
- <table class="p-datepicker-calendar">
38
+ <table class="p-datepicker-calendar" role="grid">
37
39
  <thead>
38
40
  <tr>
39
41
  <th scope="col" v-if="showWeek" class="p-datepicker-weekheader p-disabled">
40
42
  <span>{{weekHeaderLabel}}</span>
41
43
  </th>
42
- <th scope="col" v-for="weekDay of weekDays" :key="weekDay">
44
+ <th scope="col" v-for="weekDay of weekDays" :key="weekDay" :abbr="weekDay">
43
45
  <span>{{weekDay}}</span>
44
46
  </th>
45
47
  </tr>
@@ -52,11 +54,14 @@
52
54
  {{month.weekNumbers[i]}}
53
55
  </span>
54
56
  </td>
55
- <td v-for="date of week" :key="date.day + '' + date.month" :class="{'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today}">
57
+ <td v-for="date of week" :aria-label="date.day" :key="date.day + '' + date.month" :class="{'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today}">
56
58
  <span :class="{'p-highlight': isSelected(date), 'p-disabled': !date.selectable}" @click="onDateSelect($event, date)"
57
- draggable="false" @keydown="onDateCellKeydown($event,date,groupIndex)" v-ripple>
59
+ draggable="false" @keydown="onDateCellKeydown($event,date,groupIndex)" v-ripple :aria-selected="isSelected(date)">
58
60
  <slot name="date" :date="date">{{date.day}}</slot>
59
61
  </span>
62
+ <div v-if="isSelected(date)" class="p-hidden-accessible" aria-live="polite">
63
+ {{date.day}}
64
+ </div>
60
65
  </td>
61
66
  </tr>
62
67
  </tbody>
@@ -68,23 +73,29 @@
68
73
  <span v-for="(m,i) of monthPickerValues" :key="m" @click="onMonthSelect($event, i)" @keydown="onMonthCellKeydown($event,i)"
69
74
  class="p-monthpicker-month" :class="{'p-highlight': isMonthSelected(i)}" v-ripple>
70
75
  {{m}}
76
+ <div v-if="isMonthSelected(i)" class="p-hidden-accessible" aria-live="polite">
77
+ {{m}}
78
+ </div>
71
79
  </span>
72
80
  </div>
73
81
  <div class="p-yearpicker" v-if="currentView === 'year'">
74
82
  <span v-for="y of yearPickerValues" :key="y" @click="onYearSelect($event, y)" @keydown="onYearCellKeydown($event,y)"
75
83
  class="p-yearpicker-year" :class="{'p-highlight': isYearSelected(y)}" v-ripple>
76
84
  {{y}}
85
+ <div v-if="isYearSelected(y)" class="p-hidden-accessible" aria-live="polite">
86
+ {{y}}
87
+ </div>
77
88
  </span>
78
89
  </div>
79
90
  </template>
80
91
  <div class="p-timepicker" v-if="(showTime||timeOnly) && currentView === 'date'">
81
92
  <div class="p-hour-picker">
82
- <button class="p-link" @mousedown="onTimePickerElementMouseDown($event, 0, 1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple
93
+ <button class="p-link" :aria-label="$primevue.config.locale.nextHour" @mousedown="onTimePickerElementMouseDown($event, 0, 1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple
83
94
  @mouseleave="onTimePickerElementMouseLeave()" @keydown.enter="onTimePickerElementMouseDown($event, 0, 1)" @keydown.space="onTimePickerElementMouseDown($event, 0, 1)" @keyup.enter="onTimePickerElementMouseUp($event)" @keyup.space="onTimePickerElementMouseUp($event)" type="button">
84
95
  <span class="pi pi-chevron-up"></span>
85
96
  </button>
86
97
  <span>{{formattedCurrentHour}}</span>
87
- <button class="p-link" @mousedown="onTimePickerElementMouseDown($event, 0, -1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple
98
+ <button class="p-link" :aria-label="$primevue.config.locale.prevHour" @mousedown="onTimePickerElementMouseDown($event, 0, -1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple
88
99
  @mouseleave="onTimePickerElementMouseLeave()" @keydown.enter="onTimePickerElementMouseDown($event, 0, -1)" @keydown.space="onTimePickerElementMouseDown($event, 0, -1)" @keyup.enter="onTimePickerElementMouseUp($event)" @keyup.space="onTimePickerElementMouseUp($event)" type="button">
89
100
  <span class="pi pi-chevron-down"></span>
90
101
  </button>
@@ -93,12 +104,12 @@
93
104
  <span>{{timeSeparator}}</span>
94
105
  </div>
95
106
  <div class="p-minute-picker">
96
- <button class="p-link" @mousedown="onTimePickerElementMouseDown($event, 1, 1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="$attrs.disabled"
107
+ <button class="p-link" :aria-label="$primevue.config.locale.nextMinute" @mousedown="onTimePickerElementMouseDown($event, 1, 1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="disabled"
97
108
  @mouseleave="onTimePickerElementMouseLeave()" @keydown.enter="onTimePickerElementMouseDown($event, 1, 1)" @keydown.space="onTimePickerElementMouseDown($event, 1, 1)" @keyup.enter="onTimePickerElementMouseUp($event)" @keyup.space="onTimePickerElementMouseUp($event)" type="button">
98
109
  <span class="pi pi-chevron-up"></span>
99
110
  </button>
100
111
  <span>{{formattedCurrentMinute}}</span>
101
- <button class="p-link" @mousedown="onTimePickerElementMouseDown($event, 1, -1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="$attrs.disabled"
112
+ <button class="p-link" :aria-label="$primevue.config.locale.prevMinute" @mousedown="onTimePickerElementMouseDown($event, 1, -1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="disabled"
102
113
  @mouseleave="onTimePickerElementMouseLeave()" @keydown.enter="onTimePickerElementMouseDown($event, 1, -1)" @keydown.space="onTimePickerElementMouseDown($event, 1, -1)" @keyup.enter="onTimePickerElementMouseUp($event)" @keyup.space="onTimePickerElementMouseUp($event)" type="button">
103
114
  <span class="pi pi-chevron-down"></span>
104
115
  </button>
@@ -107,12 +118,12 @@
107
118
  <span>{{timeSeparator}}</span>
108
119
  </div>
109
120
  <div class="p-second-picker" v-if="showSeconds">
110
- <button class="p-link" @mousedown="onTimePickerElementMouseDown($event, 2, 1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="$attrs.disabled"
121
+ <button class="p-link" :aria-label="$primevue.config.locale.nextSecond" @mousedown="onTimePickerElementMouseDown($event, 2, 1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="disabled"
111
122
  @mouseleave="onTimePickerElementMouseLeave()" @keydown.enter="onTimePickerElementMouseDown($event, 2, 1)" @keydown.space="onTimePickerElementMouseDown($event, 2, 1)" @keyup.enter="onTimePickerElementMouseUp($event)" @keyup.space="onTimePickerElementMouseUp($event)" type="button">
112
123
  <span class="pi pi-chevron-up"></span>
113
124
  </button>
114
125
  <span>{{formattedCurrentSecond}}</span>
115
- <button class="p-link" @mousedown="onTimePickerElementMouseDown($event, 2, -1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="$attrs.disabled"
126
+ <button class="p-link" :aria-label="$primevue.config.locale.prevSecond" @mousedown="onTimePickerElementMouseDown($event, 2, -1)" @mouseup="onTimePickerElementMouseUp($event)" @keydown="onContainerButtonKeydown" v-ripple :disabled="disabled"
116
127
  @mouseleave="onTimePickerElementMouseLeave()" @keydown.enter="onTimePickerElementMouseDown($event, 2, -1)" @keydown.space="onTimePickerElementMouseDown($event, 2, -1)" @keyup.enter="onTimePickerElementMouseUp($event)" @keyup.space="onTimePickerElementMouseUp($event)" type="button">
117
128
  <span class="pi pi-chevron-down"></span>
118
129
  </button>
@@ -121,11 +132,11 @@
121
132
  <span>{{timeSeparator}}</span>
122
133
  </div>
123
134
  <div class="p-ampm-picker" v-if="hourFormat=='12'">
124
- <button class="p-link" @click="toggleAMPM($event)" type="button" v-ripple :disabled="$attrs.disabled">
135
+ <button class="p-link" :aria-label="$primevue.config.locale.am" @click="toggleAMPM($event)" type="button" v-ripple :disabled="disabled">
125
136
  <span class="pi pi-chevron-up"></span>
126
137
  </button>
127
138
  <span>{{pm ? 'PM' : 'AM'}}</span>
128
- <button class="p-link" @click="toggleAMPM($event)" type="button" v-ripple :disabled="$attrs.disabled">
139
+ <button class="p-link" :aria-label="$primevue.config.locale.pm" @click="toggleAMPM($event)" type="button" v-ripple :disabled="disabled">
129
140
  <span class="pi pi-chevron-down"></span>
130
141
  </button>
131
142
  </div>
@@ -150,7 +161,6 @@ import Portal from 'primevue/portal';
150
161
 
151
162
  export default {
152
163
  name: 'Calendar',
153
- inheritAttrs: false,
154
164
  emits: ['show', 'hide', 'input', 'month-change', 'year-change', 'date-select', 'update:modelValue', 'today-click', 'clear-click', 'focus', 'blur', 'keydown'],
155
165
  props: {
156
166
  modelValue: null,
@@ -207,10 +217,6 @@ export default {
207
217
  type: String,
208
218
  default: null
209
219
  },
210
- panelClass: {
211
- type: String,
212
- default: null
213
- },
214
220
  minDate: {
215
221
  type: Date,
216
222
  value: null
@@ -283,6 +289,10 @@ export default {
283
289
  type: Boolean,
284
290
  default: false
285
291
  },
292
+ hideOnRangeSelection: {
293
+ type: Boolean,
294
+ default: false
295
+ },
286
296
  timeSeparator: {
287
297
  type: String,
288
298
  default: ':'
@@ -299,10 +309,34 @@ export default {
299
309
  type: String,
300
310
  default: 'body'
301
311
  },
312
+ disabled: {
313
+ type: Boolean,
314
+ default: false
315
+ },
316
+ readonly: {
317
+ type: Boolean,
318
+ default: false
319
+ },
320
+ placeholder: {
321
+ type: String,
322
+ default: null
323
+ },
324
+ id: null,
325
+ inputId: null,
302
326
  inputClass: null,
303
327
  inputStyle: null,
304
- class: null,
305
- style: null
328
+ inputProps: null,
329
+ panelClass: null,
330
+ panelStyle: null,
331
+ panelProps: null,
332
+ 'aria-labelledby': {
333
+ type: String,
334
+ default: null
335
+ },
336
+ 'aria-label': {
337
+ type: String,
338
+ default: null
339
+ }
306
340
  },
307
341
  navigationState: null,
308
342
  timePickerChange: false,
@@ -325,7 +359,7 @@ export default {
325
359
  if (this.inline) {
326
360
  this.overlay && this.overlay.setAttribute(this.attributeSelector, '');
327
361
 
328
- if (!this.$attrs.disabled) {
362
+ if (!this.disabled) {
329
363
  this.preventFocus = true;
330
364
  this.initFocusableCell();
331
365
 
@@ -656,15 +690,20 @@ export default {
656
690
  this.decrementDecade();
657
691
  }
658
692
  else {
659
- if (this.currentMonth === 0) {
660
- this.currentMonth = 11;
693
+ if (event.shiftKey) {
661
694
  this.decrementYear();
662
695
  }
663
696
  else {
664
- this.currentMonth--;
665
- }
697
+ if (this.currentMonth === 0) {
698
+ this.currentMonth = 11;
699
+ this.decrementYear();
700
+ }
701
+ else {
702
+ this.currentMonth--;
703
+ }
666
704
 
667
- this.$emit('month-change', {month: this.currentMonth, year: this.currentYear});
705
+ this.$emit('month-change', {month: this.currentMonth + 1, year: this.currentYear});
706
+ }
668
707
  }
669
708
  },
670
709
  navForward(event) {
@@ -681,15 +720,20 @@ export default {
681
720
  this.incrementDecade();
682
721
  }
683
722
  else {
684
- if (this.currentMonth === 11) {
685
- this.currentMonth = 0;
723
+ if (event.shiftKey) {
686
724
  this.incrementYear();
687
725
  }
688
726
  else {
689
- this.currentMonth++;
690
- }
727
+ if (this.currentMonth === 11) {
728
+ this.currentMonth = 0;
729
+ this.incrementYear();
730
+ }
731
+ else {
732
+ this.currentMonth++;
733
+ }
691
734
 
692
- this.$emit('month-change', {month: this.currentMonth , year: this.currentYear});
735
+ this.$emit('month-change', {month: this.currentMonth + 1, year: this.currentYear});
736
+ }
693
737
  }
694
738
  },
695
739
  decrementYear() {
@@ -715,7 +759,7 @@ export default {
715
759
  event.preventDefault();
716
760
  },
717
761
  isEnabled() {
718
- return !this.$attrs.disabled && !this.$attrs.readonly;
762
+ return !this.disabled && !this.readonly;
719
763
  },
720
764
  updateCurrentTimeMeta(date) {
721
765
  let currentHour = date.getHours();
@@ -849,7 +893,7 @@ export default {
849
893
  this.$emit('year-change', {month: this.currentMonth + 1, year: this.currentYear});
850
894
  },
851
895
  onDateSelect(event, dateMeta) {
852
- if (this.$attrs.disabled || !dateMeta.selectable) {
896
+ if (this.disabled || !dateMeta.selectable) {
853
897
  return;
854
898
  }
855
899
 
@@ -878,6 +922,7 @@ export default {
878
922
 
879
923
  if (this.isSingleSelection() && (!this.showTime || this.hideOnDateTimeSelect)) {
880
924
  setTimeout(() => {
925
+ this.input.focus();
881
926
  this.overlayVisible = false;
882
927
  }, 150);
883
928
  }
@@ -939,6 +984,12 @@ export default {
939
984
  if (modelVal !== null) {
940
985
  this.updateModel(modelVal);
941
986
  }
987
+
988
+ if (this.isRangeSelection() && this.hideOnRangeSelection && modelVal[1] !== null) {
989
+ setTimeout(() => {
990
+ this.overlayVisible = false;
991
+ }, 150);
992
+ }
942
993
  this.$emit('date-select', date);
943
994
  },
944
995
  updateModel(value) {
@@ -1726,9 +1777,8 @@ export default {
1726
1777
  const cellContent = event.currentTarget;
1727
1778
  const cell = cellContent.parentElement;
1728
1779
 
1729
- switch (event.which) {
1730
- //down arrow
1731
- case 40: {
1780
+ switch (event.code) {
1781
+ case 'ArrowDown': {
1732
1782
  cellContent.tabIndex = '-1';
1733
1783
  let cellIndex = DomHandler.index(cell);
1734
1784
  let nextRow = cell.parentElement.nextElementSibling;
@@ -1751,8 +1801,7 @@ export default {
1751
1801
  break;
1752
1802
  }
1753
1803
 
1754
- //up arrow
1755
- case 38: {
1804
+ case 'ArrowUp': {
1756
1805
  cellContent.tabIndex = '-1';
1757
1806
  let cellIndex = DomHandler.index(cell);
1758
1807
  let prevRow = cell.parentElement.previousElementSibling;
@@ -1775,14 +1824,13 @@ export default {
1775
1824
  break;
1776
1825
  }
1777
1826
 
1778
- //left arrow
1779
- case 37: {
1827
+ case 'ArrowLeft': {
1780
1828
  cellContent.tabIndex = '-1';
1781
1829
  let prevCell = cell.previousElementSibling;
1782
1830
  if (prevCell) {
1783
1831
  let focusCell = prevCell.children[0];
1784
1832
  if (DomHandler.hasClass(focusCell, 'p-disabled')) {
1785
- this.navigateToMonth(true, groupIndex);
1833
+ this.navigateToMonth(event, true, groupIndex);
1786
1834
  }
1787
1835
  else {
1788
1836
  focusCell.tabIndex = '0';
@@ -1790,20 +1838,19 @@ export default {
1790
1838
  }
1791
1839
  }
1792
1840
  else {
1793
- this.navigateToMonth(true, groupIndex);
1841
+ this.navigateToMonth(event, true, groupIndex);
1794
1842
  }
1795
1843
  event.preventDefault();
1796
1844
  break;
1797
1845
  }
1798
1846
 
1799
- //right arrow
1800
- case 39: {
1847
+ case 'ArrowRight': {
1801
1848
  cellContent.tabIndex = '-1';
1802
1849
  let nextCell = cell.nextElementSibling;
1803
1850
  if (nextCell) {
1804
1851
  let focusCell = nextCell.children[0];
1805
1852
  if (DomHandler.hasClass(focusCell, 'p-disabled')) {
1806
- this.navigateToMonth(false, groupIndex);
1853
+ this.navigateToMonth(event, false, groupIndex);
1807
1854
  }
1808
1855
  else {
1809
1856
  focusCell.tabIndex = '0';
@@ -1811,42 +1858,94 @@ export default {
1811
1858
  }
1812
1859
  }
1813
1860
  else {
1814
- this.navigateToMonth(false, groupIndex);
1861
+ this.navigateToMonth(event, false, groupIndex);
1815
1862
  }
1816
1863
  event.preventDefault();
1817
1864
  break;
1818
1865
  }
1819
1866
 
1820
- //enter
1821
- //space
1822
- case 13:
1823
- case 32: {
1867
+ case 'Enter':
1868
+ case 'Space': {
1824
1869
  this.onDateSelect(event, date);
1825
1870
  event.preventDefault();
1826
1871
  break;
1827
1872
  }
1828
1873
 
1829
- //escape
1830
- case 27: {
1874
+ case 'Escape': {
1831
1875
  this.overlayVisible = false;
1832
1876
  event.preventDefault();
1833
1877
  break;
1834
1878
  }
1835
1879
 
1836
- //tab
1837
- case 9: {
1880
+ case 'Tab': {
1838
1881
  if (!this.inline) {
1839
1882
  this.trapFocus(event);
1840
1883
  }
1841
1884
  break;
1842
1885
  }
1843
1886
 
1887
+ case 'Home': {
1888
+ cellContent.tabIndex = '-1';
1889
+ let currentRow = cell.parentElement;
1890
+ let focusCell = currentRow.children[0].children[0];
1891
+ if (DomHandler.hasClass(focusCell, 'p-disabled')) {
1892
+ this.navigateToMonth(event, true, groupIndex);
1893
+ }
1894
+ else {
1895
+ focusCell.tabIndex = '0';
1896
+ focusCell.focus();
1897
+ }
1898
+
1899
+ event.preventDefault();
1900
+ break;
1901
+ }
1902
+
1903
+ case 'End': {
1904
+ cellContent.tabIndex = '-1';
1905
+ let currentRow = cell.parentElement;
1906
+ let focusCell = currentRow.children[currentRow.children.length -1].children[0];
1907
+ if (DomHandler.hasClass(focusCell, 'p-disabled')) {
1908
+ this.navigateToMonth(event, false, groupIndex);
1909
+ }
1910
+ else {
1911
+ focusCell.tabIndex = '0';
1912
+ focusCell.focus();
1913
+ }
1914
+
1915
+ event.preventDefault();
1916
+ break;
1917
+ }
1918
+
1919
+ case 'PageUp': {
1920
+ cellContent.tabIndex = '-1';
1921
+ if (event.shiftKey) {
1922
+ this.navigationState = {backward: true};
1923
+ this.navBackward(event);
1924
+ }
1925
+ else this.navigateToMonth(event, true, groupIndex);
1926
+
1927
+ event.preventDefault();
1928
+ break;
1929
+ }
1930
+
1931
+ case 'PageDown': {
1932
+ cellContent.tabIndex = '-1';
1933
+ if (event.shiftKey) {
1934
+ this.navigationState = {backward: false};
1935
+ this.navForward(event);
1936
+ }
1937
+ else this.navigateToMonth(event, false, groupIndex);
1938
+
1939
+ event.preventDefault();
1940
+ break;
1941
+ }
1942
+
1844
1943
  default:
1845
1944
  //no op
1846
1945
  break;
1847
1946
  }
1848
1947
  },
1849
- navigateToMonth(prev, groupIndex) {
1948
+ navigateToMonth(event, prev, groupIndex) {
1850
1949
  if (prev) {
1851
1950
  if (this.numberOfMonths === 1 || (groupIndex === 0)) {
1852
1951
  this.navigationState = {backward: true};
@@ -1876,14 +1975,13 @@ export default {
1876
1975
  onMonthCellKeydown(event, index) {
1877
1976
  const cell = event.currentTarget;
1878
1977
 
1879
- switch (event.which) {
1880
- //arrows
1881
- case 38:
1882
- case 40: {
1978
+ switch (event.code) {
1979
+ case 'ArrowUp':
1980
+ case 'ArrowDown': {
1883
1981
  cell.tabIndex = '-1';
1884
1982
  var cells = cell.parentElement.children;
1885
1983
  var cellIndex = DomHandler.index(cell);
1886
- let nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex -3];
1984
+ let nextCell = cells[event.code === 'ArrowDown' ? cellIndex + 3 : cellIndex -3];
1887
1985
  if (nextCell) {
1888
1986
  nextCell.tabIndex = '0';
1889
1987
  nextCell.focus();
@@ -1892,8 +1990,7 @@ export default {
1892
1990
  break;
1893
1991
  }
1894
1992
 
1895
- //left arrow
1896
- case 37: {
1993
+ case 'ArrowLeft': {
1897
1994
  cell.tabIndex = '-1';
1898
1995
  let prevCell = cell.previousElementSibling;
1899
1996
  if (prevCell) {
@@ -1908,8 +2005,7 @@ export default {
1908
2005
  break;
1909
2006
  }
1910
2007
 
1911
- //right arrow
1912
- case 39: {
2008
+ case 'ArrowRight': {
1913
2009
  cell.tabIndex = '-1';
1914
2010
  let nextCell = cell.nextElementSibling;
1915
2011
  if (nextCell) {
@@ -1924,24 +2020,36 @@ export default {
1924
2020
  break;
1925
2021
  }
1926
2022
 
1927
- //enter
1928
- //space
1929
- case 13:
1930
- case 32: {
2023
+ case 'PageUp': {
2024
+ if (event.shiftKey) return;
2025
+ this.navigationState = {backward: true};
2026
+ this.navBackward(event);
2027
+
2028
+ break;
2029
+ }
2030
+
2031
+ case 'PageDown': {
2032
+ if (event.shiftKey) return;
2033
+ this.navigationState = {backward: false};
2034
+ this.navForward(event);
2035
+
2036
+ break;
2037
+ }
2038
+
2039
+ case 'Enter':
2040
+ case 'Space': {
1931
2041
  this.onMonthSelect(event, index);
1932
2042
  event.preventDefault();
1933
2043
  break;
1934
2044
  }
1935
2045
 
1936
- //escape
1937
- case 27: {
2046
+ case 'Escape': {
1938
2047
  this.overlayVisible = false;
1939
2048
  event.preventDefault();
1940
2049
  break;
1941
2050
  }
1942
2051
 
1943
- //tab
1944
- case 9: {
2052
+ case 'Tab': {
1945
2053
  this.trapFocus(event);
1946
2054
  break;
1947
2055
  }
@@ -1954,14 +2062,13 @@ export default {
1954
2062
  onYearCellKeydown(event, index) {
1955
2063
  const cell = event.currentTarget;
1956
2064
 
1957
- switch (event.which) {
1958
- //arrows
1959
- case 38:
1960
- case 40: {
2065
+ switch (event.code) {
2066
+ case 'ArrowUp':
2067
+ case 'ArrowDown': {
1961
2068
  cell.tabIndex = '-1';
1962
2069
  var cells = cell.parentElement.children;
1963
2070
  var cellIndex = DomHandler.index(cell);
1964
- let nextCell = cells[event.which === 40 ? cellIndex + 2 : cellIndex - 2];
2071
+ let nextCell = cells[event.code === 'ArrowDown' ? cellIndex + 2 : cellIndex - 2];
1965
2072
  if (nextCell) {
1966
2073
  nextCell.tabIndex = '0';
1967
2074
  nextCell.focus();
@@ -1970,8 +2077,7 @@ export default {
1970
2077
  break;
1971
2078
  }
1972
2079
 
1973
- //left arrow
1974
- case 37: {
2080
+ case 'ArrowLeft': {
1975
2081
  cell.tabIndex = '-1';
1976
2082
  let prevCell = cell.previousElementSibling;
1977
2083
  if (prevCell) {
@@ -1986,8 +2092,7 @@ export default {
1986
2092
  break;
1987
2093
  }
1988
2094
 
1989
- //right arrow
1990
- case 39: {
2095
+ case 'ArrowRight': {
1991
2096
  cell.tabIndex = '-1';
1992
2097
  let nextCell = cell.nextElementSibling;
1993
2098
  if (nextCell) {
@@ -2002,24 +2107,36 @@ export default {
2002
2107
  break;
2003
2108
  }
2004
2109
 
2005
- //enter
2006
- //space
2007
- case 13:
2008
- case 32: {
2110
+ case 'PageUp': {
2111
+ if (event.shiftKey) return;
2112
+ this.navigationState = {backward: true};
2113
+ this.navBackward(event);
2114
+
2115
+ break;
2116
+ }
2117
+
2118
+ case 'PageDown': {
2119
+ if (event.shiftKey) return;
2120
+ this.navigationState = {backward: false};
2121
+ this.navForward(event);
2122
+
2123
+ break;
2124
+ }
2125
+
2126
+ case 'Enter':
2127
+ case 'Space': {
2009
2128
  this.onYearSelect(event, index);
2010
2129
  event.preventDefault();
2011
2130
  break;
2012
2131
  }
2013
2132
 
2014
- //escape
2015
- case 27: {
2133
+ case 'Escape': {
2016
2134
  this.overlayVisible = false;
2017
2135
  event.preventDefault();
2018
2136
  break;
2019
2137
  }
2020
2138
 
2021
- //tab
2022
- case 9: {
2139
+ case 'Tab': {
2023
2140
  this.trapFocus(event);
2024
2141
  break;
2025
2142
  }
@@ -2131,13 +2248,26 @@ export default {
2131
2248
  let focusedIndex = focusableElements.indexOf(document.activeElement);
2132
2249
 
2133
2250
  if (event.shiftKey) {
2134
- if (focusedIndex == -1 || focusedIndex === 0)
2251
+ if (focusedIndex === -1 || focusedIndex === 0)
2135
2252
  focusableElements[focusableElements.length - 1].focus();
2136
2253
  else
2137
2254
  focusableElements[focusedIndex - 1].focus();
2138
2255
  }
2139
2256
  else {
2140
- if (focusedIndex == -1 || focusedIndex === (focusableElements.length - 1))
2257
+ if (focusedIndex === -1) {
2258
+ if (this.timeOnly) {
2259
+ focusableElements[0].focus();
2260
+ }
2261
+ else {
2262
+ let spanIndex = null;
2263
+ for (let i = 0; i < focusableElements.length; i++){
2264
+ if (focusableElements[i].tagName === 'SPAN')
2265
+ spanIndex = i;
2266
+ }
2267
+ focusableElements[spanIndex].focus();
2268
+ }
2269
+ }
2270
+ else if (focusedIndex === (focusableElements.length - 1))
2141
2271
  focusableElements[0].focus();
2142
2272
  else
2143
2273
  focusableElements[focusedIndex + 1].focus();
@@ -2146,14 +2276,12 @@ export default {
2146
2276
  }
2147
2277
  },
2148
2278
  onContainerButtonKeydown(event) {
2149
- switch (event.which) {
2150
- //tab
2151
- case 9:
2279
+ switch (event.code) {
2280
+ case 'Tab':
2152
2281
  this.trapFocus(event);
2153
2282
  break;
2154
2283
 
2155
- //escape
2156
- case 27:
2284
+ case 'Escape':
2157
2285
  this.overlayVisible = false;
2158
2286
  event.preventDefault();
2159
2287
  break;
@@ -2190,22 +2318,25 @@ export default {
2190
2318
  this.$emit('focus', event);
2191
2319
  },
2192
2320
  onBlur(event) {
2193
- this.$emit('blur', {originalEvent: event, value: this.input.value});
2321
+ this.$emit('blur', {originalEvent: event, value: event.target.value});
2194
2322
 
2195
2323
  this.focused = false;
2196
- this.input.value = this.formatValue(this.modelValue);
2324
+ event.target.value = this.formatValue(this.modelValue);
2197
2325
  },
2198
2326
  onKeyDown(event) {
2199
- if (event.keyCode === 40 && this.overlay) {
2327
+ if (event.code === 'ArrowDown' && this.overlay) {
2200
2328
  this.trapFocus(event);
2201
2329
  }
2202
- else if (event.keyCode === 27) {
2330
+ else if (event.code === 'ArrowDown' && !this.overlay) {
2331
+ this.overlayVisible = true;
2332
+ }
2333
+ else if (event.code === 'Escape') {
2203
2334
  if (this.overlayVisible) {
2204
2335
  this.overlayVisible = false;
2205
2336
  event.preventDefault();
2206
2337
  }
2207
2338
  }
2208
- else if (event.keyCode === 9) {
2339
+ else if (event.code === 'Tab') {
2209
2340
  if (this.overlay) {
2210
2341
  DomHandler.getFocusableElements(this.overlay).forEach(el => el.tabIndex = '-1');
2211
2342
  }
@@ -2235,6 +2366,17 @@ export default {
2235
2366
  });
2236
2367
  }
2237
2368
  },
2369
+ onOverlayKeyDown(event) {
2370
+ switch (event.code) {
2371
+ case 'Escape':
2372
+ this.input.focus();
2373
+ this.overlayVisible = false;
2374
+ break;
2375
+
2376
+ default:
2377
+ break;
2378
+ }
2379
+ },
2238
2380
  onOverlayMouseUp(event) {
2239
2381
  this.onOverlayClick(event);
2240
2382
  },
@@ -2320,11 +2462,11 @@ export default {
2320
2462
  },
2321
2463
  containerClass() {
2322
2464
  return [
2323
- 'p-calendar p-component p-inputwrapper', this.class,
2465
+ 'p-calendar p-component p-inputwrapper',
2324
2466
  {
2325
2467
  'p-calendar-w-btn': this.showIcon,
2326
2468
  'p-calendar-timeonly': this.timeOnly,
2327
- 'p-calendar-disabled': this.$attrs.disabled,
2469
+ 'p-calendar-disabled': this.disabled,
2328
2470
  'p-inputwrapper-filled': this.modelValue,
2329
2471
  'p-inputwrapper-focus': this.focused
2330
2472
  }
@@ -2333,7 +2475,7 @@ export default {
2333
2475
  panelStyleClass() {
2334
2476
  return ['p-datepicker p-component', this.panelClass, {
2335
2477
  'p-datepicker-inline': this.inline,
2336
- 'p-disabled': this.$attrs.disabled,
2478
+ 'p-disabled': this.disabled,
2337
2479
  'p-datepicker-timeonly': this.timeOnly,
2338
2480
  'p-datepicker-multiple-month': this.numberOfMonths > 1,
2339
2481
  'p-datepicker-monthpicker': (this.currentView === 'month'),
@@ -2499,7 +2641,10 @@ export default {
2499
2641
  return UniqueComponentId();
2500
2642
  },
2501
2643
  switchViewButtonDisabled() {
2502
- return this.numberOfMonths > 1 || this.$attrs.disabled;
2644
+ return this.numberOfMonths > 1 || this.disabled;
2645
+ },
2646
+ panelId() {
2647
+ return UniqueComponentId() + '_panel';
2503
2648
  }
2504
2649
  },
2505
2650
  components: {