@wangxinowo/vue-datepicker-next 1.0.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 (571) hide show
  1. package/README.md +104 -0
  2. package/dist/vue-datepicker-next.min.css +3560 -0
  3. package/dist/vue-datepicker-next.min.js +11 -0
  4. package/package.json +84 -0
  5. package/src/components/_util/BaseMixin.js +40 -0
  6. package/src/components/_util/ContainerRender.jsx +98 -0
  7. package/src/components/_util/FormDecoratorDirective.js +10 -0
  8. package/src/components/_util/KeyCode.js +521 -0
  9. package/src/components/_util/Portal.js +51 -0
  10. package/src/components/_util/PortalWrapper.js +156 -0
  11. package/src/components/_util/StateMixin.js +10 -0
  12. package/src/components/_util/__tests__/easings.test.js +13 -0
  13. package/src/components/_util/__tests__/scrollTo.test.js +56 -0
  14. package/src/components/_util/antDirective.js +13 -0
  15. package/src/components/_util/antInputDirective.js +73 -0
  16. package/src/components/_util/callMoment.js +4 -0
  17. package/src/components/_util/colors.js +17 -0
  18. package/src/components/_util/createChainedFunction.js +22 -0
  19. package/src/components/_util/css-animation/Event.js +130 -0
  20. package/src/components/_util/css-animation/index.js +184 -0
  21. package/src/components/_util/easings.js +8 -0
  22. package/src/components/_util/env.js +14 -0
  23. package/src/components/_util/getLocale.js +30 -0
  24. package/src/components/_util/getRequestAnimationFrame.js +46 -0
  25. package/src/components/_util/getScroll.js +17 -0
  26. package/src/components/_util/getScrollBarSize.js +38 -0
  27. package/src/components/_util/getTransitionProps.js +34 -0
  28. package/src/components/_util/interopDefault.js +4 -0
  29. package/src/components/_util/isCssAnimationSupported.js +24 -0
  30. package/src/components/_util/isFlexSupported.js +12 -0
  31. package/src/components/_util/isNumeric.js +4 -0
  32. package/src/components/_util/isValid.js +4 -0
  33. package/src/components/_util/moment-util.js +75 -0
  34. package/src/components/_util/openAnimation.js +67 -0
  35. package/src/components/_util/portalDirective.js +24 -0
  36. package/src/components/_util/props-util.js +335 -0
  37. package/src/components/_util/proxyComponent.jsx +58 -0
  38. package/src/components/_util/raf.js +32 -0
  39. package/src/components/_util/requestAnimationTimeout.js +23 -0
  40. package/src/components/_util/responsiveObserve.js +94 -0
  41. package/src/components/_util/scrollTo.js +37 -0
  42. package/src/components/_util/setStyle.js +25 -0
  43. package/src/components/_util/store/PropTypes.js +7 -0
  44. package/src/components/_util/store/Provider.jsx +15 -0
  45. package/src/components/_util/store/connect.jsx +106 -0
  46. package/src/components/_util/store/create.js +30 -0
  47. package/src/components/_util/store/index.js +5 -0
  48. package/src/components/_util/styleChecker.js +13 -0
  49. package/src/components/_util/switchScrollingEffect.js +20 -0
  50. package/src/components/_util/throttleByAnimationFrame.js +45 -0
  51. package/src/components/_util/transButton.jsx +81 -0
  52. package/src/components/_util/triggerEvent.js +8 -0
  53. package/src/components/_util/type.js +4 -0
  54. package/src/components/_util/vnode.js +147 -0
  55. package/src/components/_util/vue-types/index.js +263 -0
  56. package/src/components/_util/vue-types/utils.js +200 -0
  57. package/src/components/_util/warning.js +7 -0
  58. package/src/components/_util/wave.jsx +169 -0
  59. package/src/components/base/index.js +9 -0
  60. package/src/components/base/style/index.js +2 -0
  61. package/src/components/button/__tests__/__snapshots__/demo.test.js.snap +103 -0
  62. package/src/components/button/__tests__/__snapshots__/index.test.js.snap +43 -0
  63. package/src/components/button/__tests__/demo.test.js +3 -0
  64. package/src/components/button/__tests__/index.test.js +239 -0
  65. package/src/components/button/button-group.jsx +52 -0
  66. package/src/components/button/button.jsx +186 -0
  67. package/src/components/button/buttonTypes.js +13 -0
  68. package/src/components/button/index.js +14 -0
  69. package/src/components/button/style/index.js +2 -0
  70. package/src/components/button/style/index.less +224 -0
  71. package/src/components/button/style/mixin.less +357 -0
  72. package/src/components/calendar/locale/en_US.js +2 -0
  73. package/src/components/config-provider/__tests__/index.test.js +44 -0
  74. package/src/components/config-provider/configConsumerProps.jsx +9 -0
  75. package/src/components/config-provider/index.jsx +91 -0
  76. package/src/components/config-provider/renderEmpty.jsx +42 -0
  77. package/src/components/config-provider/style/index.js +1 -0
  78. package/src/components/config-provider/style/index.less +2 -0
  79. package/src/components/date-picker/InputIcon.js +20 -0
  80. package/src/components/date-picker/PresetPanel.jsx +102 -0
  81. package/src/components/date-picker/RangePicker.jsx +1010 -0
  82. package/src/components/date-picker/WeekPicker.jsx +235 -0
  83. package/src/components/date-picker/__tests__/DatePicker.test.js +189 -0
  84. package/src/components/date-picker/__tests__/MonthPicker.test.js +29 -0
  85. package/src/components/date-picker/__tests__/RangePicker.test.js +417 -0
  86. package/src/components/date-picker/__tests__/WeekPicker.test.js +24 -0
  87. package/src/components/date-picker/__tests__/__snapshots__/DatePicker.test.js.snap +3 -0
  88. package/src/components/date-picker/__tests__/__snapshots__/RangePicker.test.js.snap +695 -0
  89. package/src/components/date-picker/__tests__/__snapshots__/WeekPicker.test.js.snap +3 -0
  90. package/src/components/date-picker/__tests__/__snapshots__/demo.test.js.snap +49 -0
  91. package/src/components/date-picker/__tests__/__snapshots__/other.test.js.snap +240 -0
  92. package/src/components/date-picker/__tests__/demo.test.js +3 -0
  93. package/src/components/date-picker/__tests__/mount.test.js +11 -0
  94. package/src/components/date-picker/__tests__/other.test.js +88 -0
  95. package/src/components/date-picker/__tests__/showTime.test.js +234 -0
  96. package/src/components/date-picker/__tests__/utils.js +34 -0
  97. package/src/components/date-picker/createPicker.js +273 -0
  98. package/src/components/date-picker/generate/dayjs.js +438 -0
  99. package/src/components/date-picker/generate/index.js +125 -0
  100. package/src/components/date-picker/generate/moment.js +357 -0
  101. package/src/components/date-picker/index.js +37 -0
  102. package/src/components/date-picker/interface.js +172 -0
  103. package/src/components/date-picker/locale/ar_EG.js +23 -0
  104. package/src/components/date-picker/locale/bg_BG.js +19 -0
  105. package/src/components/date-picker/locale/ca_ES.js +19 -0
  106. package/src/components/date-picker/locale/cs_CZ.js +19 -0
  107. package/src/components/date-picker/locale/da_DK.js +19 -0
  108. package/src/components/date-picker/locale/de_DE.js +19 -0
  109. package/src/components/date-picker/locale/el_GR.js +19 -0
  110. package/src/components/date-picker/locale/en_GB.js +19 -0
  111. package/src/components/date-picker/locale/en_US.js +19 -0
  112. package/src/components/date-picker/locale/es_ES.js +19 -0
  113. package/src/components/date-picker/locale/et_EE.js +19 -0
  114. package/src/components/date-picker/locale/example.json +39 -0
  115. package/src/components/date-picker/locale/fa_IR.js +19 -0
  116. package/src/components/date-picker/locale/fi_FI.js +19 -0
  117. package/src/components/date-picker/locale/fr_BE.js +19 -0
  118. package/src/components/date-picker/locale/fr_FR.js +19 -0
  119. package/src/components/date-picker/locale/ga_IE.js +19 -0
  120. package/src/components/date-picker/locale/he_IL.js +19 -0
  121. package/src/components/date-picker/locale/hi_IN.js +19 -0
  122. package/src/components/date-picker/locale/hr_HR.js +19 -0
  123. package/src/components/date-picker/locale/hu_HU.js +19 -0
  124. package/src/components/date-picker/locale/id_ID.js +19 -0
  125. package/src/components/date-picker/locale/is_IS.js +19 -0
  126. package/src/components/date-picker/locale/it_IT.js +19 -0
  127. package/src/components/date-picker/locale/ja_JP.js +18 -0
  128. package/src/components/date-picker/locale/kn_IN.js +19 -0
  129. package/src/components/date-picker/locale/ko_KR.js +19 -0
  130. package/src/components/date-picker/locale/ku_IQ.js +18 -0
  131. package/src/components/date-picker/locale/lv_LV.js +19 -0
  132. package/src/components/date-picker/locale/mk_MK.js +19 -0
  133. package/src/components/date-picker/locale/mn_MN.js +19 -0
  134. package/src/components/date-picker/locale/ms_MY.js +19 -0
  135. package/src/components/date-picker/locale/nb_NO.js +19 -0
  136. package/src/components/date-picker/locale/nl_BE.js +19 -0
  137. package/src/components/date-picker/locale/nl_NL.js +19 -0
  138. package/src/components/date-picker/locale/pl_PL.js +19 -0
  139. package/src/components/date-picker/locale/pt_BR.js +19 -0
  140. package/src/components/date-picker/locale/pt_PT.js +46 -0
  141. package/src/components/date-picker/locale/ro_RO.js +19 -0
  142. package/src/components/date-picker/locale/ru_RU.js +22 -0
  143. package/src/components/date-picker/locale/sk_SK.js +19 -0
  144. package/src/components/date-picker/locale/sl_SI.js +43 -0
  145. package/src/components/date-picker/locale/sr_RS.js +19 -0
  146. package/src/components/date-picker/locale/sv_SE.js +18 -0
  147. package/src/components/date-picker/locale/ta_IN.js +20 -0
  148. package/src/components/date-picker/locale/th_TH.js +19 -0
  149. package/src/components/date-picker/locale/tr_TR.js +19 -0
  150. package/src/components/date-picker/locale/uk_UA.js +18 -0
  151. package/src/components/date-picker/locale/vi_VN.js +19 -0
  152. package/src/components/date-picker/locale/zh_CN.js +21 -0
  153. package/src/components/date-picker/locale/zh_TW.js +20 -0
  154. package/src/components/date-picker/statusUtils.js +53 -0
  155. package/src/components/date-picker/style/Calendar.less +402 -0
  156. package/src/components/date-picker/style/DecadePanel.less +81 -0
  157. package/src/components/date-picker/style/MonthPanel.less +86 -0
  158. package/src/components/date-picker/style/MonthPicker.less +11 -0
  159. package/src/components/date-picker/style/Picker.less +113 -0
  160. package/src/components/date-picker/style/RangePicker.less +327 -0
  161. package/src/components/date-picker/style/TimePicker.less +151 -0
  162. package/src/components/date-picker/style/WeekPicker.less +21 -0
  163. package/src/components/date-picker/style/YearPanel.less +93 -0
  164. package/src/components/date-picker/style/index.js +8 -0
  165. package/src/components/date-picker/style/index.less +20 -0
  166. package/src/components/date-picker/style/presets.less +69 -0
  167. package/src/components/date-picker/style/status.less +94 -0
  168. package/src/components/date-picker/style/transitions.less +176 -0
  169. package/src/components/date-picker/utils.js +209 -0
  170. package/src/components/date-picker/wrapPicker.js +258 -0
  171. package/src/components/empty/__tests__/__snapshots__/demo.test.js.snap +195 -0
  172. package/src/components/empty/__tests__/demo.test.js +3 -0
  173. package/src/components/empty/__tests__/index.test.js +25 -0
  174. package/src/components/empty/empty.jsx +47 -0
  175. package/src/components/empty/index.jsx +78 -0
  176. package/src/components/empty/simple.jsx +20 -0
  177. package/src/components/empty/style/index.js +2 -0
  178. package/src/components/empty/style/index.less +52 -0
  179. package/src/components/icon/IconFont.jsx +52 -0
  180. package/src/components/icon/__tests__/__snapshots__/demo.test.js.snap +671 -0
  181. package/src/components/icon/__tests__/__snapshots__/index.test.js.snap +77 -0
  182. package/src/components/icon/__tests__/demo.test.js +3 -0
  183. package/src/components/icon/__tests__/index.test.js +236 -0
  184. package/src/components/icon/index.js +185 -0
  185. package/src/components/icon/style/index.js +2 -0
  186. package/src/components/icon/style/index.less +4 -0
  187. package/src/components/icon/twoTonePrimaryColor.js +12 -0
  188. package/src/components/icon/utils.js +77 -0
  189. package/src/components/input/ClearableLabeledInput.jsx +182 -0
  190. package/src/components/input/Group.jsx +41 -0
  191. package/src/components/input/Input.jsx +240 -0
  192. package/src/components/input/Password.jsx +117 -0
  193. package/src/components/input/ResizableTextArea.jsx +158 -0
  194. package/src/components/input/Search.jsx +185 -0
  195. package/src/components/input/TextArea.jsx +131 -0
  196. package/src/components/input/__tests__/Search.test.js +134 -0
  197. package/src/components/input/__tests__/__snapshots__/Search.test.js.snap +5 -0
  198. package/src/components/input/__tests__/__snapshots__/demo.test.js.snap +86 -0
  199. package/src/components/input/__tests__/__snapshots__/index.test.js.snap +9 -0
  200. package/src/components/input/__tests__/demo.test.js +3 -0
  201. package/src/components/input/__tests__/index.test.js +124 -0
  202. package/src/components/input/calculateNodeHeight.js +151 -0
  203. package/src/components/input/index.js +27 -0
  204. package/src/components/input/inputProps.js +36 -0
  205. package/src/components/input/style/index.js +5 -0
  206. package/src/components/input/style/index.less +52 -0
  207. package/src/components/input/style/mixin.less +453 -0
  208. package/src/components/input/style/search-input.less +34 -0
  209. package/src/components/locale/ar_EG.js +43 -0
  210. package/src/components/locale/bg_BG.js +43 -0
  211. package/src/components/locale/ca_ES.js +41 -0
  212. package/src/components/locale/cs_CZ.js +41 -0
  213. package/src/components/locale/da_DK.js +43 -0
  214. package/src/components/locale/de_DE.js +43 -0
  215. package/src/components/locale/default.js +62 -0
  216. package/src/components/locale/el_GR.js +43 -0
  217. package/src/components/locale/en_GB.js +43 -0
  218. package/src/components/locale/en_US.js +3 -0
  219. package/src/components/locale/es_ES.js +59 -0
  220. package/src/components/locale/et_EE.js +43 -0
  221. package/src/components/locale/fa_IR.js +43 -0
  222. package/src/components/locale/fi_FI.js +44 -0
  223. package/src/components/locale/fr_BE.js +47 -0
  224. package/src/components/locale/fr_FR.js +47 -0
  225. package/src/components/locale/ga_IE.js +43 -0
  226. package/src/components/locale/he_IL.js +43 -0
  227. package/src/components/locale/hi_IN.js +51 -0
  228. package/src/components/locale/hr_HR.js +57 -0
  229. package/src/components/locale/hu_HU.js +44 -0
  230. package/src/components/locale/hy_AM.js +109 -0
  231. package/src/components/locale/id_ID.js +45 -0
  232. package/src/components/locale/is_IS.js +43 -0
  233. package/src/components/locale/it_IT.js +56 -0
  234. package/src/components/locale/ja_JP.js +43 -0
  235. package/src/components/locale/kn_IN.js +51 -0
  236. package/src/components/locale/ko_KR.js +43 -0
  237. package/src/components/locale/ku_IQ.js +43 -0
  238. package/src/components/locale/lv_LV.js +43 -0
  239. package/src/components/locale/mk_MK.js +58 -0
  240. package/src/components/locale/mn_MN.js +43 -0
  241. package/src/components/locale/ms_MY.js +63 -0
  242. package/src/components/locale/nb_NO.js +43 -0
  243. package/src/components/locale/ne_NP.js +44 -0
  244. package/src/components/locale/nl_BE.js +43 -0
  245. package/src/components/locale/nl_NL.js +62 -0
  246. package/src/components/locale/pl_PL.js +43 -0
  247. package/src/components/locale/pt_BR.js +49 -0
  248. package/src/components/locale/pt_PT.js +44 -0
  249. package/src/components/locale/ro_RO.js +62 -0
  250. package/src/components/locale/ru_RU.js +53 -0
  251. package/src/components/locale/sk_SK.js +62 -0
  252. package/src/components/locale/sl_SI.js +43 -0
  253. package/src/components/locale/sr_RS.js +43 -0
  254. package/src/components/locale/sv_SE.js +47 -0
  255. package/src/components/locale/ta_IN.js +63 -0
  256. package/src/components/locale/th_TH.js +62 -0
  257. package/src/components/locale/tr_TR.js +57 -0
  258. package/src/components/locale/uk_UA.js +43 -0
  259. package/src/components/locale/vi_VN.js +43 -0
  260. package/src/components/locale/zh_CN.js +62 -0
  261. package/src/components/locale/zh_TW.js +49 -0
  262. package/src/components/locale-provider/LocaleReceiver.jsx +43 -0
  263. package/src/components/locale-provider/__tests__/__snapshots__/demo.test.js.snap +434 -0
  264. package/src/components/locale-provider/__tests__/__snapshots__/index.test.js.snap +22618 -0
  265. package/src/components/locale-provider/__tests__/demo.test.js +3 -0
  266. package/src/components/locale-provider/__tests__/index.test.js +271 -0
  267. package/src/components/locale-provider/ar_EG.js +3 -0
  268. package/src/components/locale-provider/bg_BG.js +3 -0
  269. package/src/components/locale-provider/ca_ES.js +3 -0
  270. package/src/components/locale-provider/cs_CZ.js +3 -0
  271. package/src/components/locale-provider/da_DK.js +3 -0
  272. package/src/components/locale-provider/de_DE.js +3 -0
  273. package/src/components/locale-provider/default.js +3 -0
  274. package/src/components/locale-provider/el_GR.js +3 -0
  275. package/src/components/locale-provider/en_GB.js +3 -0
  276. package/src/components/locale-provider/en_US.js +3 -0
  277. package/src/components/locale-provider/es_ES.js +3 -0
  278. package/src/components/locale-provider/et_EE.js +3 -0
  279. package/src/components/locale-provider/fa_IR.js +3 -0
  280. package/src/components/locale-provider/fi_FI.js +3 -0
  281. package/src/components/locale-provider/fr_BE.js +3 -0
  282. package/src/components/locale-provider/fr_FR.js +3 -0
  283. package/src/components/locale-provider/ga_IE.js +3 -0
  284. package/src/components/locale-provider/he_IL.js +3 -0
  285. package/src/components/locale-provider/hi_IN.js +3 -0
  286. package/src/components/locale-provider/hr_HR.js +3 -0
  287. package/src/components/locale-provider/hu_HU.js +3 -0
  288. package/src/components/locale-provider/hy_AM.js +3 -0
  289. package/src/components/locale-provider/id_ID.js +3 -0
  290. package/src/components/locale-provider/index.jsx +82 -0
  291. package/src/components/locale-provider/is_IS.js +3 -0
  292. package/src/components/locale-provider/it_IT.js +3 -0
  293. package/src/components/locale-provider/ja_JP.js +3 -0
  294. package/src/components/locale-provider/kn_IN.js +3 -0
  295. package/src/components/locale-provider/ko_KR.js +3 -0
  296. package/src/components/locale-provider/ku_IQ.js +3 -0
  297. package/src/components/locale-provider/lv_LV.js +3 -0
  298. package/src/components/locale-provider/mk_MK.js +3 -0
  299. package/src/components/locale-provider/mn_MN.js +3 -0
  300. package/src/components/locale-provider/ms_MY.js +3 -0
  301. package/src/components/locale-provider/nb_NO.js +3 -0
  302. package/src/components/locale-provider/ne-NP.js +3 -0
  303. package/src/components/locale-provider/ne_NP.js +3 -0
  304. package/src/components/locale-provider/nl_BE.js +3 -0
  305. package/src/components/locale-provider/nl_NL.js +3 -0
  306. package/src/components/locale-provider/pl_PL.js +3 -0
  307. package/src/components/locale-provider/pt_BR.js +3 -0
  308. package/src/components/locale-provider/pt_PT.js +3 -0
  309. package/src/components/locale-provider/ro_RO.js +3 -0
  310. package/src/components/locale-provider/ru_RU.js +3 -0
  311. package/src/components/locale-provider/sk_SK.js +3 -0
  312. package/src/components/locale-provider/sl_SI.js +3 -0
  313. package/src/components/locale-provider/sr_RS.js +3 -0
  314. package/src/components/locale-provider/style/index.js +1 -0
  315. package/src/components/locale-provider/style/index.less +2 -0
  316. package/src/components/locale-provider/sv_SE.js +3 -0
  317. package/src/components/locale-provider/ta_IN.js +62 -0
  318. package/src/components/locale-provider/th_TH.js +3 -0
  319. package/src/components/locale-provider/tr_TR.js +3 -0
  320. package/src/components/locale-provider/uk_UA.js +3 -0
  321. package/src/components/locale-provider/vi_VN.js +3 -0
  322. package/src/components/locale-provider/zh_CN.js +3 -0
  323. package/src/components/locale-provider/zh_TW.js +3 -0
  324. package/src/components/style/color/bezierEasing.less +110 -0
  325. package/src/components/style/color/colorPalette.less +75 -0
  326. package/src/components/style/color/colors.less +149 -0
  327. package/src/components/style/color/tinyColor.less +1184 -0
  328. package/src/components/style/core/base.less +510 -0
  329. package/src/components/style/core/iconfont.less +19 -0
  330. package/src/components/style/core/index.less +4 -0
  331. package/src/components/style/core/motion/fade.less +31 -0
  332. package/src/components/style/core/motion/move.less +120 -0
  333. package/src/components/style/core/motion/other.less +45 -0
  334. package/src/components/style/core/motion/slide.less +120 -0
  335. package/src/components/style/core/motion/swing.less +34 -0
  336. package/src/components/style/core/motion/zoom.less +162 -0
  337. package/src/components/style/core/motion.less +20 -0
  338. package/src/components/style/index.js +1 -0
  339. package/src/components/style/index.less +2 -0
  340. package/src/components/style/index.tsx +1 -0
  341. package/src/components/style/mixins/clearfix.less +13 -0
  342. package/src/components/style/mixins/compatibility.less +22 -0
  343. package/src/components/style/mixins/iconfont.less +43 -0
  344. package/src/components/style/mixins/index.less +10 -0
  345. package/src/components/style/mixins/motion.less +35 -0
  346. package/src/components/style/mixins/operation-unit.less +18 -0
  347. package/src/components/style/mixins/reset.less +13 -0
  348. package/src/components/style/mixins/size.less +10 -0
  349. package/src/components/style/mixins/typography.less +49 -0
  350. package/src/components/style/themes/default.less +701 -0
  351. package/src/components/style/themes/index.less +1 -0
  352. package/src/components/style/v2-compatible-reset.js +1 -0
  353. package/src/components/style/v2-compatible-reset.less +51 -0
  354. package/src/components/style/v2-compatible-reset.tsx +1 -0
  355. package/src/components/tag/CheckableTag.jsx +43 -0
  356. package/src/components/tag/Tag.jsx +145 -0
  357. package/src/components/tag/__tests__/__snapshots__/demo.test.js.snap +92 -0
  358. package/src/components/tag/__tests__/__snapshots__/index.test.js.snap +13 -0
  359. package/src/components/tag/__tests__/demo.test.js +3 -0
  360. package/src/components/tag/__tests__/index.test.js +82 -0
  361. package/src/components/tag/index.js +14 -0
  362. package/src/components/tag/style/index.js +2 -0
  363. package/src/components/tag/style/index.less +106 -0
  364. package/src/components/time-picker/__tests__/__snapshots__/demo.test.js.snap +39 -0
  365. package/src/components/time-picker/__tests__/__snapshots__/index.test.js.snap +5 -0
  366. package/src/components/time-picker/__tests__/demo.test.js +3 -0
  367. package/src/components/time-picker/__tests__/index.test.js +55 -0
  368. package/src/components/time-picker/index.jsx +267 -0
  369. package/src/components/time-picker/locale/ar_EG.js +5 -0
  370. package/src/components/time-picker/locale/bg_BG.js +5 -0
  371. package/src/components/time-picker/locale/ca_ES.js +5 -0
  372. package/src/components/time-picker/locale/cs_CZ.js +5 -0
  373. package/src/components/time-picker/locale/da_DK.js +5 -0
  374. package/src/components/time-picker/locale/de_DE.js +5 -0
  375. package/src/components/time-picker/locale/el_GR.js +5 -0
  376. package/src/components/time-picker/locale/en_GB.js +5 -0
  377. package/src/components/time-picker/locale/en_US.js +5 -0
  378. package/src/components/time-picker/locale/es_ES.js +5 -0
  379. package/src/components/time-picker/locale/et_EE.js +5 -0
  380. package/src/components/time-picker/locale/fa_IR.js +5 -0
  381. package/src/components/time-picker/locale/fi_FI.js +5 -0
  382. package/src/components/time-picker/locale/fr_BE.js +5 -0
  383. package/src/components/time-picker/locale/fr_FR.js +5 -0
  384. package/src/components/time-picker/locale/ga_IE.js +5 -0
  385. package/src/components/time-picker/locale/he_IL.js +5 -0
  386. package/src/components/time-picker/locale/hi_IN.js +5 -0
  387. package/src/components/time-picker/locale/hr_HR.js +5 -0
  388. package/src/components/time-picker/locale/hu_HU.js +5 -0
  389. package/src/components/time-picker/locale/id_ID.js +5 -0
  390. package/src/components/time-picker/locale/is_IS.js +5 -0
  391. package/src/components/time-picker/locale/it_IT.js +5 -0
  392. package/src/components/time-picker/locale/ja_JP.js +5 -0
  393. package/src/components/time-picker/locale/kn_IN.js +5 -0
  394. package/src/components/time-picker/locale/ko_KR.js +5 -0
  395. package/src/components/time-picker/locale/ku_IQ.js +5 -0
  396. package/src/components/time-picker/locale/lv_LV.js +5 -0
  397. package/src/components/time-picker/locale/mk_MK.js +5 -0
  398. package/src/components/time-picker/locale/mn_MN.js +5 -0
  399. package/src/components/time-picker/locale/ms_MY.js +5 -0
  400. package/src/components/time-picker/locale/nb_NO.js +5 -0
  401. package/src/components/time-picker/locale/nl_BE.js +5 -0
  402. package/src/components/time-picker/locale/nl_NL.js +5 -0
  403. package/src/components/time-picker/locale/pl_PL.js +5 -0
  404. package/src/components/time-picker/locale/pt_BR.js +5 -0
  405. package/src/components/time-picker/locale/pt_PT.js +5 -0
  406. package/src/components/time-picker/locale/ro_RO.js +5 -0
  407. package/src/components/time-picker/locale/ru_RU.js +8 -0
  408. package/src/components/time-picker/locale/sk_SK.js +5 -0
  409. package/src/components/time-picker/locale/sl_SI.js +5 -0
  410. package/src/components/time-picker/locale/sr_RS.js +5 -0
  411. package/src/components/time-picker/locale/sv_SE.js +5 -0
  412. package/src/components/time-picker/locale/ta_IN.js +5 -0
  413. package/src/components/time-picker/locale/th_TH.js +5 -0
  414. package/src/components/time-picker/locale/tr_TR.js +5 -0
  415. package/src/components/time-picker/locale/uk_UA.js +5 -0
  416. package/src/components/time-picker/locale/vi_VN.js +5 -0
  417. package/src/components/time-picker/locale/zh_CN.js +5 -0
  418. package/src/components/time-picker/locale/zh_TW.js +5 -0
  419. package/src/components/time-picker/style/index.js +2 -0
  420. package/src/components/time-picker/style/index.less +246 -0
  421. package/src/components/tooltip/Tooltip.jsx +219 -0
  422. package/src/components/tooltip/__tests__/__snapshots__/demo.test.js.snap +20 -0
  423. package/src/components/tooltip/__tests__/demo.test.js +3 -0
  424. package/src/components/tooltip/__tests__/tooltip.test.js +204 -0
  425. package/src/components/tooltip/abstractTooltipProps.js +34 -0
  426. package/src/components/tooltip/index.js +10 -0
  427. package/src/components/tooltip/placements.js +96 -0
  428. package/src/components/tooltip/style/index.js +2 -0
  429. package/src/components/tooltip/style/index.less +187 -0
  430. package/src/components/vc-align/Align.jsx +149 -0
  431. package/src/components/vc-align/index.js +3 -0
  432. package/src/components/vc-align/util.js +52 -0
  433. package/src/components/vc-calendar/assets/common/Calendar.less +106 -0
  434. package/src/components/vc-calendar/assets/common/FullCalendar.less +91 -0
  435. package/src/components/vc-calendar/assets/common/Picker.less +10 -0
  436. package/src/components/vc-calendar/assets/common/RangeCalendar.less +131 -0
  437. package/src/components/vc-calendar/assets/common/index.less +16 -0
  438. package/src/components/vc-calendar/assets/index/Calendar.less +301 -0
  439. package/src/components/vc-calendar/assets/index/DecadePanel.less +122 -0
  440. package/src/components/vc-calendar/assets/index/Input.less +23 -0
  441. package/src/components/vc-calendar/assets/index/MonthPanel.less +143 -0
  442. package/src/components/vc-calendar/assets/index/Picker.less +110 -0
  443. package/src/components/vc-calendar/assets/index/Time.less +6 -0
  444. package/src/components/vc-calendar/assets/index/TimePanel.less +72 -0
  445. package/src/components/vc-calendar/assets/index/YearPanel.less +136 -0
  446. package/src/components/vc-calendar/assets/index.less +10 -0
  447. package/src/components/vc-calendar/index.js +8 -0
  448. package/src/components/vc-calendar/src/Calendar.jsx +390 -0
  449. package/src/components/vc-calendar/src/FullCalendar.jsx +166 -0
  450. package/src/components/vc-calendar/src/MonthCalendar.jsx +125 -0
  451. package/src/components/vc-calendar/src/Picker.jsx +244 -0
  452. package/src/components/vc-calendar/src/RangeCalendar.jsx +1031 -0
  453. package/src/components/vc-calendar/src/calendar/CalendarFooter.jsx +86 -0
  454. package/src/components/vc-calendar/src/calendar/CalendarHeader.jsx +264 -0
  455. package/src/components/vc-calendar/src/calendar/OkButton.jsx +18 -0
  456. package/src/components/vc-calendar/src/calendar/TimePickerButton.jsx +22 -0
  457. package/src/components/vc-calendar/src/calendar/TodayButton.jsx +33 -0
  458. package/src/components/vc-calendar/src/date/DateConstants.js +4 -0
  459. package/src/components/vc-calendar/src/date/DateInput.jsx +226 -0
  460. package/src/components/vc-calendar/src/date/DateTBody.jsx +261 -0
  461. package/src/components/vc-calendar/src/date/DateTHead.jsx +49 -0
  462. package/src/components/vc-calendar/src/date/DateTable.jsx +20 -0
  463. package/src/components/vc-calendar/src/decade/DecadePanel.jsx +131 -0
  464. package/src/components/vc-calendar/src/full-calendar/CalendarHeader.jsx +134 -0
  465. package/src/components/vc-calendar/src/index.js +3 -0
  466. package/src/components/vc-calendar/src/locale/ar_EG.js +27 -0
  467. package/src/components/vc-calendar/src/locale/bg_BG.js +27 -0
  468. package/src/components/vc-calendar/src/locale/ca_ES.js +27 -0
  469. package/src/components/vc-calendar/src/locale/cs_CZ.js +27 -0
  470. package/src/components/vc-calendar/src/locale/da_DK.js +27 -0
  471. package/src/components/vc-calendar/src/locale/de_DE.js +27 -0
  472. package/src/components/vc-calendar/src/locale/el_GR.js +27 -0
  473. package/src/components/vc-calendar/src/locale/en_GB.js +27 -0
  474. package/src/components/vc-calendar/src/locale/en_US.js +28 -0
  475. package/src/components/vc-calendar/src/locale/es_ES.js +27 -0
  476. package/src/components/vc-calendar/src/locale/et_EE.js +27 -0
  477. package/src/components/vc-calendar/src/locale/fa_IR.js +27 -0
  478. package/src/components/vc-calendar/src/locale/fi_FI.js +27 -0
  479. package/src/components/vc-calendar/src/locale/fr_BE.js +27 -0
  480. package/src/components/vc-calendar/src/locale/fr_FR.js +27 -0
  481. package/src/components/vc-calendar/src/locale/ga_IE.js +28 -0
  482. package/src/components/vc-calendar/src/locale/he_IL.js +28 -0
  483. package/src/components/vc-calendar/src/locale/hi_IN.js +28 -0
  484. package/src/components/vc-calendar/src/locale/hr_HR.js +28 -0
  485. package/src/components/vc-calendar/src/locale/hu_HU.js +27 -0
  486. package/src/components/vc-calendar/src/locale/id_ID.js +28 -0
  487. package/src/components/vc-calendar/src/locale/is_IS.js +27 -0
  488. package/src/components/vc-calendar/src/locale/it_IT.js +27 -0
  489. package/src/components/vc-calendar/src/locale/ja_JP.js +26 -0
  490. package/src/components/vc-calendar/src/locale/kn_IN.js +28 -0
  491. package/src/components/vc-calendar/src/locale/ko_KR.js +27 -0
  492. package/src/components/vc-calendar/src/locale/ku_IQ.js +27 -0
  493. package/src/components/vc-calendar/src/locale/lv_LV.js +27 -0
  494. package/src/components/vc-calendar/src/locale/mk_MK.js +27 -0
  495. package/src/components/vc-calendar/src/locale/mm_MM.js +28 -0
  496. package/src/components/vc-calendar/src/locale/mn_MN.js +28 -0
  497. package/src/components/vc-calendar/src/locale/ms_MY.js +27 -0
  498. package/src/components/vc-calendar/src/locale/nb_NO.js +27 -0
  499. package/src/components/vc-calendar/src/locale/nl_BE.js +27 -0
  500. package/src/components/vc-calendar/src/locale/nl_NL.js +27 -0
  501. package/src/components/vc-calendar/src/locale/pl_PL.js +27 -0
  502. package/src/components/vc-calendar/src/locale/pt_BR.js +27 -0
  503. package/src/components/vc-calendar/src/locale/pt_PT.js +27 -0
  504. package/src/components/vc-calendar/src/locale/ro_RO.js +28 -0
  505. package/src/components/vc-calendar/src/locale/ru_RU.js +27 -0
  506. package/src/components/vc-calendar/src/locale/sk_SK.js +28 -0
  507. package/src/components/vc-calendar/src/locale/sl_SI.js +27 -0
  508. package/src/components/vc-calendar/src/locale/sr_RS.js +27 -0
  509. package/src/components/vc-calendar/src/locale/sv_SE.js +27 -0
  510. package/src/components/vc-calendar/src/locale/ta_IN.js +28 -0
  511. package/src/components/vc-calendar/src/locale/th_TH.js +27 -0
  512. package/src/components/vc-calendar/src/locale/tr_TR.js +27 -0
  513. package/src/components/vc-calendar/src/locale/ug_CN.js +26 -0
  514. package/src/components/vc-calendar/src/locale/uk_UA.js +27 -0
  515. package/src/components/vc-calendar/src/locale/vi_VN.js +28 -0
  516. package/src/components/vc-calendar/src/locale/zh_CN.js +27 -0
  517. package/src/components/vc-calendar/src/locale/zh_TW.js +26 -0
  518. package/src/components/vc-calendar/src/mixin/CalendarMixin.js +122 -0
  519. package/src/components/vc-calendar/src/mixin/CommonMixin.js +26 -0
  520. package/src/components/vc-calendar/src/month/MonthPanel.jsx +123 -0
  521. package/src/components/vc-calendar/src/month/MonthTable.jsx +138 -0
  522. package/src/components/vc-calendar/src/picker/placements.js +35 -0
  523. package/src/components/vc-calendar/src/range-calendar/CalendarPart.jsx +171 -0
  524. package/src/components/vc-calendar/src/util/index.js +113 -0
  525. package/src/components/vc-calendar/src/util/toTime.js +15 -0
  526. package/src/components/vc-calendar/src/year/YearPanel.jsx +167 -0
  527. package/src/components/vc-pagination/locale/en_US.js +15 -0
  528. package/src/components/vc-select/DropdownMenu.jsx +216 -0
  529. package/src/components/vc-select/OptGroup.jsx +8 -0
  530. package/src/components/vc-select/Option.jsx +11 -0
  531. package/src/components/vc-select/PropTypes.js +59 -0
  532. package/src/components/vc-select/Select.jsx +1716 -0
  533. package/src/components/vc-select/SelectTrigger.jsx +259 -0
  534. package/src/components/vc-select/assets/index.less +541 -0
  535. package/src/components/vc-select/index.js +11 -0
  536. package/src/components/vc-select/util.js +223 -0
  537. package/src/components/vc-time-picker/Combobox.jsx +214 -0
  538. package/src/components/vc-time-picker/Header.jsx +187 -0
  539. package/src/components/vc-time-picker/Panel.jsx +225 -0
  540. package/src/components/vc-time-picker/Select.jsx +140 -0
  541. package/src/components/vc-time-picker/TimePicker.jsx +386 -0
  542. package/src/components/vc-time-picker/assets/index/Header.less +22 -0
  543. package/src/components/vc-time-picker/assets/index/Panel.less +29 -0
  544. package/src/components/vc-time-picker/assets/index/Picker.less +25 -0
  545. package/src/components/vc-time-picker/assets/index/Select.less +62 -0
  546. package/src/components/vc-time-picker/assets/index.less +44 -0
  547. package/src/components/vc-time-picker/index.js +2 -0
  548. package/src/components/vc-time-picker/placements.js +35 -0
  549. package/src/components/vc-tooltip/Content.jsx +23 -0
  550. package/src/components/vc-tooltip/Tooltip.jsx +106 -0
  551. package/src/components/vc-tooltip/assets/boostrap/anim.less +61 -0
  552. package/src/components/vc-tooltip/assets/bootstrap.less +171 -0
  553. package/src/components/vc-tooltip/assets/bootstrap_white.less +190 -0
  554. package/src/components/vc-tooltip/index.js +4 -0
  555. package/src/components/vc-tooltip/placements.js +83 -0
  556. package/src/components/vc-trigger/LazyRenderBox.jsx +22 -0
  557. package/src/components/vc-trigger/Popup.jsx +336 -0
  558. package/src/components/vc-trigger/PopupInner.jsx +25 -0
  559. package/src/components/vc-trigger/Trigger.jsx +663 -0
  560. package/src/components/vc-trigger/assets/index.less +72 -0
  561. package/src/components/vc-trigger/assets/mask.less +65 -0
  562. package/src/components/vc-trigger/index.js +3 -0
  563. package/src/components/vc-trigger/index.md +160 -0
  564. package/src/components/vc-trigger/t.js +665 -0
  565. package/src/components/vc-trigger/utils.js +27 -0
  566. package/src/components/vc-util/Dom/addEventListener.js +5 -0
  567. package/src/components/vc-util/Dom/class.js +28 -0
  568. package/src/components/vc-util/Dom/contains.js +11 -0
  569. package/src/components/vc-util/warning.js +38 -0
  570. package/src/index.js +44 -0
  571. package/types/index.d.ts +112 -0
@@ -0,0 +1,1031 @@
1
+ import PropTypes from '../../_util/vue-types';
2
+ import BaseMixin from '../../_util/BaseMixin';
3
+ import {
4
+ getOptionProps,
5
+ hasProp,
6
+ mergeProps,
7
+ getComponentFromProp,
8
+ getListeners,
9
+ } from '../../_util/props-util';
10
+ import moment from 'moment';
11
+ import KeyCode from '../../_util/KeyCode';
12
+ import CalendarPart from './range-calendar/CalendarPart';
13
+ import TodayButton from './calendar/TodayButton';
14
+ import OkButton from './calendar/OkButton';
15
+ import TimePickerButton from './calendar/TimePickerButton';
16
+ import CommonMixin from './mixin/CommonMixin';
17
+ import enUs from './locale/en_US';
18
+ import { syncTime, getTodayTime, isAllowedDate } from './util/';
19
+ import { goTime, goStartMonth, goEndMonth, includesTime } from './util/toTime';
20
+
21
+ function noop() {}
22
+
23
+ function isEmptyArray(arr) {
24
+ return Array.isArray(arr) && (arr.length === 0 || arr.every(i => !i));
25
+ }
26
+
27
+ function isArraysEqual(a, b) {
28
+ if (a === b) return true;
29
+ if (a === null || typeof a === 'undefined' || b === null || typeof b === 'undefined') {
30
+ return false;
31
+ }
32
+ if (a.length !== b.length) return false;
33
+
34
+ for (let i = 0; i < a.length; ++i) {
35
+ if (a[i] !== b[i]) return false;
36
+ }
37
+ return true;
38
+ }
39
+
40
+ function getValueFromSelectedValue(selectedValue) {
41
+ let [start, end] = selectedValue;
42
+ if (end && (start === undefined || start === null)) {
43
+ start = end.clone().subtract(1, 'month');
44
+ }
45
+
46
+ if (start && (end === undefined || end === null)) {
47
+ end = start.clone().add(1, 'month');
48
+ }
49
+ return [start, end];
50
+ }
51
+
52
+ function normalizeAnchor(props, init) {
53
+ const selectedValue = props.selectedValue || (init && props.defaultSelectedValue);
54
+ const value = props.value || (init && props.defaultValue);
55
+ const normalizedValue = value
56
+ ? getValueFromSelectedValue(value)
57
+ : getValueFromSelectedValue(selectedValue);
58
+ return !isEmptyArray(normalizedValue)
59
+ ? normalizedValue
60
+ : init && [moment(), moment().add(1, 'months')];
61
+ }
62
+
63
+ function generateOptions(length, extraOptionGen) {
64
+ const arr = extraOptionGen ? extraOptionGen().concat() : [];
65
+ for (let value = 0; value < length; value++) {
66
+ if (arr.indexOf(value) === -1) {
67
+ arr.push(value);
68
+ }
69
+ }
70
+ return arr;
71
+ }
72
+
73
+ function onInputSelect(direction, value, cause) {
74
+ if (!value) {
75
+ return;
76
+ }
77
+ const originalValue = this.sSelectedValue;
78
+ const selectedValue = originalValue.concat();
79
+ const index = direction === 'left' ? 0 : 1;
80
+ selectedValue[index] = value;
81
+ if (selectedValue[0] && this.compare(selectedValue[0], selectedValue[1]) > 0) {
82
+ selectedValue[1 - index] = this.sShowTimePicker ? selectedValue[index] : undefined;
83
+ }
84
+ this.__emit('inputSelect', selectedValue);
85
+ this.fireSelectValueChange(selectedValue, null, cause || { source: 'dateInput' });
86
+ }
87
+
88
+ const RangeCalendar = {
89
+ props: {
90
+ locale: PropTypes.object.def(enUs),
91
+ visible: PropTypes.bool.def(true),
92
+ prefixCls: PropTypes.string.def('rc-calendar'),
93
+ dateInputPlaceholder: PropTypes.any,
94
+ separator: PropTypes.string.def('~'),
95
+ defaultValue: PropTypes.any,
96
+ value: PropTypes.any,
97
+ hoverValue: PropTypes.any,
98
+ mode: PropTypes.arrayOf(PropTypes.oneOf(['time', 'date', 'month', 'year', 'decade'])),
99
+ showDateInput: PropTypes.bool.def(true),
100
+ timePicker: PropTypes.any,
101
+ showOk: PropTypes.bool,
102
+ showToday: PropTypes.bool.def(true),
103
+ defaultSelectedValue: PropTypes.array.def([]),
104
+ selectedValue: PropTypes.array,
105
+ showClear: PropTypes.bool,
106
+ showWeekNumber: PropTypes.bool,
107
+ // locale: PropTypes.object,
108
+ // onChange: PropTypes.func,
109
+ // onSelect: PropTypes.func,
110
+ // onValueChange: PropTypes.func,
111
+ // onHoverChange: PropTypes.func,
112
+ // onPanelChange: PropTypes.func,
113
+ format: PropTypes.oneOfType([
114
+ PropTypes.string,
115
+ PropTypes.arrayOf(PropTypes.string),
116
+ PropTypes.func,
117
+ ]),
118
+ // onClear: PropTypes.func,
119
+ type: PropTypes.any.def('both'),
120
+ disabledDate: PropTypes.func,
121
+ disabledTime: PropTypes.func.def(noop),
122
+ renderFooter: PropTypes.func.def(() => null),
123
+ renderSidebar: PropTypes.func.def(() => null),
124
+ dateRender: PropTypes.func,
125
+ clearIcon: PropTypes.any,
126
+ inputReadOnly: PropTypes.bool,
127
+ },
128
+
129
+ mixins: [BaseMixin, CommonMixin],
130
+
131
+ data() {
132
+ const props = this.$props;
133
+ const selectedValue = props.selectedValue || props.defaultSelectedValue;
134
+ const value = normalizeAnchor(props, 1);
135
+ return {
136
+ sSelectedValue: selectedValue,
137
+ prevSelectedValue: selectedValue,
138
+ firstSelectedValue: null,
139
+ sHoverValue: props.hoverValue || [],
140
+ sValue: value,
141
+ sShowTimePicker: false,
142
+ sMode: props.mode || ['date', 'date'],
143
+ sPanelTriggerSource: '', // Trigger by which picker panel: 'start' & 'end'
144
+ };
145
+ },
146
+ watch: {
147
+ value() {
148
+ const newState = {};
149
+ newState.sValue = normalizeAnchor(this.$props, 0);
150
+ this.setState(newState);
151
+ },
152
+ hoverValue(val) {
153
+ if (!isArraysEqual(this.sHoverValue, val)) {
154
+ this.setState({ sHoverValue: val });
155
+ }
156
+ },
157
+ selectedValue(val) {
158
+ const newState = {};
159
+ newState.sSelectedValue = val;
160
+ newState.prevSelectedValue = val;
161
+ this.setState(newState);
162
+ },
163
+ mode(val) {
164
+ if (!isArraysEqual(this.sMode, val)) {
165
+ this.setState({ sMode: val });
166
+ }
167
+ },
168
+ },
169
+
170
+ methods: {
171
+ onDatePanelEnter() {
172
+ if (this.hasSelectedValue()) {
173
+ this.fireHoverValueChange(this.sSelectedValue.concat());
174
+ }
175
+ },
176
+
177
+ onDatePanelLeave() {
178
+ if (this.hasSelectedValue()) {
179
+ this.fireHoverValueChange([]);
180
+ }
181
+ },
182
+
183
+ onSelect(value) {
184
+ const { type, sSelectedValue, prevSelectedValue, firstSelectedValue } = this;
185
+ let nextSelectedValue;
186
+ if (type === 'both') {
187
+ if (!firstSelectedValue) {
188
+ syncTime(prevSelectedValue[0], value);
189
+ nextSelectedValue = [value];
190
+ } else if (this.compare(firstSelectedValue, value) < 0) {
191
+ syncTime(prevSelectedValue[1], value);
192
+ nextSelectedValue = [firstSelectedValue, value];
193
+ } else {
194
+ syncTime(prevSelectedValue[0], value);
195
+ syncTime(prevSelectedValue[1], firstSelectedValue);
196
+ nextSelectedValue = [value, firstSelectedValue];
197
+ }
198
+ } else if (type === 'start') {
199
+ syncTime(prevSelectedValue[0], value);
200
+ const endValue = sSelectedValue[1];
201
+ nextSelectedValue =
202
+ endValue && this.compare(endValue, value) > 0 ? [value, endValue] : [value, null];
203
+ } else {
204
+ // type === 'end'
205
+ const startValue = sSelectedValue[0];
206
+ if (startValue && this.compare(startValue, value) <= 0) {
207
+ syncTime(prevSelectedValue[1], value);
208
+ nextSelectedValue = [startValue, value];
209
+ } else {
210
+ // 先选择结束日期,正确放在第二个位置
211
+ syncTime(prevSelectedValue[1], value);
212
+ nextSelectedValue = [null, value];
213
+ }
214
+ }
215
+
216
+ this.fireSelectValueChange(nextSelectedValue);
217
+ },
218
+
219
+ onKeyDown(event) {
220
+ if (event.target.nodeName.toLowerCase() === 'input') {
221
+ return;
222
+ }
223
+
224
+ const { keyCode } = event;
225
+ const ctrlKey = event.ctrlKey || event.metaKey;
226
+
227
+ const {
228
+ sSelectedValue: selectedValue,
229
+ sHoverValue: hoverValue,
230
+ firstSelectedValue,
231
+ sValue: value, // Value is used for `CalendarPart` current page
232
+ } = this.$data;
233
+ const { disabledDate } = this.$props;
234
+
235
+ // Update last time of the picker
236
+ const updateHoverPoint = func => {
237
+ // Change hover to make focus in UI
238
+ let currentHoverTime;
239
+ let nextHoverTime;
240
+ let nextHoverValue;
241
+
242
+ if (!firstSelectedValue) {
243
+ currentHoverTime = hoverValue[0] || selectedValue[0] || value[0] || moment();
244
+ nextHoverTime = func(currentHoverTime);
245
+ nextHoverValue = [nextHoverTime];
246
+ this.fireHoverValueChange(nextHoverValue);
247
+ } else {
248
+ if (hoverValue.length === 1) {
249
+ currentHoverTime = hoverValue[0].clone();
250
+ nextHoverTime = func(currentHoverTime);
251
+ nextHoverValue = this.onDayHover(nextHoverTime);
252
+ } else {
253
+ currentHoverTime = hoverValue[0].isSame(firstSelectedValue, 'day')
254
+ ? hoverValue[1]
255
+ : hoverValue[0];
256
+ nextHoverTime = func(currentHoverTime);
257
+ nextHoverValue = this.onDayHover(nextHoverTime);
258
+ }
259
+ }
260
+
261
+ // Find origin hover time on value index
262
+ if (nextHoverValue.length >= 2) {
263
+ const miss = nextHoverValue.some(ht => !includesTime(value, ht, 'month'));
264
+ if (miss) {
265
+ const newValue = nextHoverValue.slice().sort((t1, t2) => t1.valueOf() - t2.valueOf());
266
+ if (newValue[0].isSame(newValue[1], 'month')) {
267
+ newValue[1] = newValue[0].clone().add(1, 'month');
268
+ }
269
+ this.fireValueChange(newValue);
270
+ }
271
+ } else if (nextHoverValue.length === 1) {
272
+ // If only one value, let's keep the origin panel
273
+ let oriValueIndex = value.findIndex(time => time.isSame(currentHoverTime, 'month'));
274
+ if (oriValueIndex === -1) oriValueIndex = 0;
275
+
276
+ if (value.every(time => !time.isSame(nextHoverTime, 'month'))) {
277
+ const newValue = value.slice();
278
+ newValue[oriValueIndex] = nextHoverTime.clone();
279
+ this.fireValueChange(newValue);
280
+ }
281
+ }
282
+
283
+ event.preventDefault();
284
+
285
+ return nextHoverTime;
286
+ };
287
+
288
+ switch (keyCode) {
289
+ case KeyCode.DOWN:
290
+ updateHoverPoint(time => goTime(time, 1, 'weeks'));
291
+ return;
292
+ case KeyCode.UP:
293
+ updateHoverPoint(time => goTime(time, -1, 'weeks'));
294
+ return;
295
+ case KeyCode.LEFT:
296
+ if (ctrlKey) {
297
+ updateHoverPoint(time => goTime(time, -1, 'years'));
298
+ } else {
299
+ updateHoverPoint(time => goTime(time, -1, 'days'));
300
+ }
301
+ return;
302
+ case KeyCode.RIGHT:
303
+ if (ctrlKey) {
304
+ updateHoverPoint(time => goTime(time, 1, 'years'));
305
+ } else {
306
+ updateHoverPoint(time => goTime(time, 1, 'days'));
307
+ }
308
+ return;
309
+ case KeyCode.HOME:
310
+ updateHoverPoint(time => goStartMonth(time));
311
+ return;
312
+ case KeyCode.END:
313
+ updateHoverPoint(time => goEndMonth(time));
314
+ return;
315
+ case KeyCode.PAGE_DOWN:
316
+ updateHoverPoint(time => goTime(time, 1, 'month'));
317
+ return;
318
+ case KeyCode.PAGE_UP:
319
+ updateHoverPoint(time => goTime(time, -1, 'month'));
320
+ return;
321
+ case KeyCode.ENTER: {
322
+ let lastValue;
323
+ if (hoverValue.length === 0) {
324
+ lastValue = updateHoverPoint(time => time);
325
+ } else if (hoverValue.length === 1) {
326
+ lastValue = hoverValue[0];
327
+ } else {
328
+ lastValue = hoverValue[0].isSame(firstSelectedValue, 'day')
329
+ ? hoverValue[1]
330
+ : hoverValue[0];
331
+ }
332
+ if (lastValue && (!disabledDate || !disabledDate(lastValue))) {
333
+ this.onSelect(lastValue);
334
+ }
335
+ event.preventDefault();
336
+ return;
337
+ }
338
+ default:
339
+ this.__emit('keydown', event);
340
+ }
341
+ },
342
+
343
+ onDayHover(value) {
344
+ let hoverValue = [];
345
+ const { sSelectedValue, firstSelectedValue, type } = this;
346
+ if (type === 'start' && sSelectedValue[1]) {
347
+ hoverValue =
348
+ this.compare(value, sSelectedValue[1]) < 0 ? [value, sSelectedValue[1]] : [value];
349
+ } else if (type === 'end' && sSelectedValue[0]) {
350
+ hoverValue = this.compare(value, sSelectedValue[0]) > 0 ? [sSelectedValue[0], value] : [];
351
+ } else {
352
+ if (!firstSelectedValue) {
353
+ if (this.sHoverValue.length) {
354
+ this.setState({ sHoverValue: [] });
355
+ }
356
+ return hoverValue;
357
+ }
358
+ hoverValue =
359
+ this.compare(value, firstSelectedValue) < 0
360
+ ? [value, firstSelectedValue]
361
+ : [firstSelectedValue, value];
362
+ }
363
+ this.fireHoverValueChange(hoverValue);
364
+ return hoverValue;
365
+ },
366
+
367
+ onToday() {
368
+ const startValue = getTodayTime(this.sValue[0]);
369
+ const endValue = startValue.clone().add(1, 'months');
370
+ this.setState({ sValue: [startValue, endValue] });
371
+ },
372
+
373
+ onOpenTimePicker() {
374
+ this.setState({
375
+ sShowTimePicker: true,
376
+ });
377
+ },
378
+ onCloseTimePicker() {
379
+ this.setState({
380
+ sShowTimePicker: false,
381
+ });
382
+ },
383
+
384
+ onOk() {
385
+ const { sSelectedValue } = this;
386
+ if (this.isAllowedDateAndTime(sSelectedValue)) {
387
+ this.__emit('ok', sSelectedValue);
388
+ }
389
+ },
390
+
391
+ onStartInputChange(...oargs) {
392
+ const args = ['left'].concat(oargs);
393
+ return onInputSelect.apply(this, args);
394
+ },
395
+
396
+ onEndInputChange(...oargs) {
397
+ const args = ['right'].concat(oargs);
398
+ return onInputSelect.apply(this, args);
399
+ },
400
+
401
+ onStartInputSelect(value) {
402
+ const args = ['left', value, { source: 'dateInputSelect' }];
403
+ return onInputSelect.apply(this, args);
404
+ },
405
+
406
+ onEndInputSelect(value) {
407
+ const args = ['right', value, { source: 'dateInputSelect' }];
408
+ return onInputSelect.apply(this, args);
409
+ },
410
+
411
+ onStartValueChange(leftValue) {
412
+ const value = [...this.sValue];
413
+ const { sMode: mode } = this;
414
+ value[0] = leftValue;
415
+
416
+ // 年份模式:只在十年范围变化时才联动(即用户导航时,而不是选择时)
417
+ // 使用 getStartValue() 获取面板实际显示的值,而不是 sValue
418
+ if (mode[0] === 'year' && mode[1] === 'year') {
419
+ const displayedLeftValue = this.getStartValue();
420
+ const oldLeftDecade = displayedLeftValue
421
+ ? Math.floor(displayedLeftValue.year() / 10)
422
+ : null;
423
+ const newLeftDecade = Math.floor(leftValue.year() / 10);
424
+ // 只有十年范围变化时才执行联动
425
+ if (oldLeftDecade !== newLeftDecade) {
426
+ const rightDecade = value[1] ? Math.floor(value[1].year() / 10) : newLeftDecade;
427
+ if (rightDecade <= newLeftDecade) {
428
+ value[1] = leftValue.clone().year((newLeftDecade + 1) * 10);
429
+ }
430
+ }
431
+ }
432
+
433
+ // 月份模式:只在年份变化时才联动(即用户导航时)
434
+ if (mode[0] === 'month' && mode[1] === 'month') {
435
+ const displayedLeftValue = this.getStartValue();
436
+ const oldLeftYear = displayedLeftValue ? displayedLeftValue.year() : null;
437
+ const newLeftYear = leftValue.year();
438
+ // 只有年份变化时才执行联动
439
+ if (oldLeftYear !== newLeftYear) {
440
+ const rightYear = value[1] ? value[1].year() : newLeftYear;
441
+ if (rightYear <= newLeftYear) {
442
+ value[1] = leftValue.clone().year(newLeftYear + 1);
443
+ }
444
+ }
445
+ }
446
+
447
+ return this.fireValueChange(value);
448
+ },
449
+
450
+ onEndValueChange(rightValue) {
451
+ const value = [...this.sValue];
452
+ const { sMode: mode } = this;
453
+ value[1] = rightValue;
454
+
455
+ // 年份模式:只在十年范围变化时才联动(即用户导航时,而不是选择时)
456
+ // 使用 getEndValue() 获取面板实际显示的值,而不是 sValue
457
+ if (mode[0] === 'year' && mode[1] === 'year') {
458
+ const displayedRightValue = this.getEndValue();
459
+ const oldRightDecade = displayedRightValue
460
+ ? Math.floor(displayedRightValue.year() / 10)
461
+ : null;
462
+ const newRightDecade = Math.floor(rightValue.year() / 10);
463
+ // 只有十年范围变化时才执行联动
464
+ if (oldRightDecade !== newRightDecade) {
465
+ const leftDecade = value[0] ? Math.floor(value[0].year() / 10) : newRightDecade;
466
+ if (leftDecade >= newRightDecade) {
467
+ value[0] = rightValue.clone().year((newRightDecade - 1) * 10);
468
+ }
469
+ }
470
+ }
471
+
472
+ // 月份模式:只在年份变化时才联动(即用户导航时)
473
+ if (mode[0] === 'month' && mode[1] === 'month') {
474
+ const displayedRightValue = this.getEndValue();
475
+ const oldRightYear = displayedRightValue ? displayedRightValue.year() : null;
476
+ const newRightYear = rightValue.year();
477
+ // 只有年份变化时才执行联动
478
+ if (oldRightYear !== newRightYear) {
479
+ const leftYear = value[0] ? value[0].year() : newRightYear;
480
+ if (leftYear >= newRightYear) {
481
+ value[0] = rightValue.clone().year(newRightYear - 1);
482
+ }
483
+ }
484
+ }
485
+
486
+ return this.fireValueChange(value);
487
+ },
488
+
489
+ onStartPanelChange(value, mode) {
490
+ const { sMode, sValue } = this;
491
+ const newMode = [mode, sMode[1]];
492
+ const newValue = [value || sValue[0], sValue[1]];
493
+ // 传递来源信息,让 RangePicker 知道是哪个面板触发的选择
494
+ this.__emit('panelChange', newValue, newMode, { source: 'start' });
495
+ const newState = {
496
+ sPanelTriggerSource: 'start',
497
+ };
498
+ if (!hasProp(this, 'mode')) {
499
+ newState.sMode = newMode;
500
+ }
501
+ this.setState(newState);
502
+ },
503
+
504
+ onEndPanelChange(value, mode) {
505
+ const { sMode, sValue } = this;
506
+ const newMode = [sMode[0], mode];
507
+ const newValue = [sValue[0], value || sValue[1]];
508
+ // 传递来源信息,让 RangePicker 知道是哪个面板触发的选择
509
+ this.__emit('panelChange', newValue, newMode, { source: 'end' });
510
+ const newState = {
511
+ sPanelTriggerSource: 'end',
512
+ };
513
+ if (!hasProp(this, 'mode')) {
514
+ newState.sMode = newMode;
515
+ }
516
+ this.setState(newState);
517
+ },
518
+
519
+ getStartValue() {
520
+ const {
521
+ sSelectedValue: selectedValue,
522
+ sShowTimePicker: showTimePicker,
523
+ sValue: value,
524
+ sMode: mode,
525
+ sPanelTriggerSource: panelTriggerSource,
526
+ } = this.$data;
527
+ let startValue = value[0];
528
+ // keep selectedTime when select date
529
+ if (selectedValue[0] && this.$props.timePicker) {
530
+ startValue = startValue.clone();
531
+ syncTime(selectedValue[0], startValue);
532
+ }
533
+ if (showTimePicker && selectedValue[0]) {
534
+ startValue = selectedValue[0];
535
+ }
536
+
537
+ // Adjust month if date not align
538
+ if (
539
+ panelTriggerSource === 'end' &&
540
+ mode[0] === 'date' &&
541
+ mode[1] === 'date' &&
542
+ startValue.isSame(value[1], 'month')
543
+ ) {
544
+ startValue = startValue.clone().subtract(1, 'month');
545
+ }
546
+
547
+ return startValue;
548
+ },
549
+
550
+ getEndValue() {
551
+ const {
552
+ sSelectedValue: selectedValue,
553
+ sShowTimePicker: showTimePicker,
554
+ sValue: value,
555
+ sMode: mode,
556
+ sPanelTriggerSource: panelTriggerSource,
557
+ } = this.$data;
558
+ let endValue = value[1] ? value[1].clone() : value[0].clone().add(1, 'month');
559
+ // keep selectedTime when select date
560
+ if (selectedValue[1] && this.$props.timePicker) {
561
+ syncTime(selectedValue[1], endValue);
562
+ }
563
+ if (showTimePicker) {
564
+ endValue = selectedValue[1] ? selectedValue[1] : this.getStartValue();
565
+ }
566
+
567
+ // Adjust month if date not align
568
+ if (
569
+ !showTimePicker &&
570
+ panelTriggerSource !== 'end' &&
571
+ mode[0] === 'date' &&
572
+ mode[1] === 'date' &&
573
+ endValue.isSame(value[0], 'month')
574
+ ) {
575
+ endValue = endValue.clone().add(1, 'month');
576
+ }
577
+
578
+ // 年份模式:确保左右面板显示不同的十年范围
579
+ // 左面板显示 2020-2029,右面板显示 2030-2039
580
+ if (mode[0] === 'year' && mode[1] === 'year') {
581
+ const startValue = this.getStartValue();
582
+ const startDecade = Math.floor(startValue.year() / 10);
583
+ const endDecade = Math.floor(endValue.year() / 10);
584
+ // 如果在同一十年,右面板前进一个十年
585
+ if (startDecade >= endDecade) {
586
+ endValue = endValue.clone().year((startDecade + 1) * 10);
587
+ }
588
+ }
589
+
590
+ // 月份模式:确保左右面板显示不同的年份
591
+ // 左面板显示 2024年,右面板显示 2025年
592
+ if (mode[0] === 'month' && mode[1] === 'month') {
593
+ const startValue = this.getStartValue();
594
+ const startYear = startValue.year();
595
+ const endYear = endValue.year();
596
+ // 如果在同一年,右面板前进一年
597
+ if (startYear >= endYear) {
598
+ endValue = endValue.clone().year(startYear + 1);
599
+ }
600
+ }
601
+
602
+ return endValue;
603
+ },
604
+ // get disabled hours for second picker
605
+ getEndDisableTime() {
606
+ const { sSelectedValue, sValue, disabledTime } = this;
607
+ const userSettingDisabledTime = disabledTime(sSelectedValue, 'end') || {};
608
+ const startValue = (sSelectedValue && sSelectedValue[0]) || sValue[0].clone();
609
+ // if startTime and endTime is same day..
610
+ // the second time picker will not able to pick time before first time picker
611
+ if (!sSelectedValue[1] || startValue.isSame(sSelectedValue[1], 'day')) {
612
+ const hours = startValue.hour();
613
+ const minutes = startValue.minute();
614
+ const second = startValue.second();
615
+ let { disabledHours, disabledMinutes, disabledSeconds } = userSettingDisabledTime;
616
+ const oldDisabledMinutes = disabledMinutes ? disabledMinutes() : [];
617
+ const olddisabledSeconds = disabledSeconds ? disabledSeconds() : [];
618
+ disabledHours = generateOptions(hours, disabledHours);
619
+ disabledMinutes = generateOptions(minutes, disabledMinutes);
620
+ disabledSeconds = generateOptions(second, disabledSeconds);
621
+ return {
622
+ disabledHours() {
623
+ return disabledHours;
624
+ },
625
+ disabledMinutes(hour) {
626
+ if (hour === hours) {
627
+ return disabledMinutes;
628
+ }
629
+ return oldDisabledMinutes;
630
+ },
631
+ disabledSeconds(hour, minute) {
632
+ if (hour === hours && minute === minutes) {
633
+ return disabledSeconds;
634
+ }
635
+ return olddisabledSeconds;
636
+ },
637
+ };
638
+ }
639
+ return userSettingDisabledTime;
640
+ },
641
+
642
+ isAllowedDateAndTime(selectedValue) {
643
+ return (
644
+ isAllowedDate(selectedValue[0], this.disabledDate, this.disabledStartTime) &&
645
+ isAllowedDate(selectedValue[1], this.disabledDate, this.disabledEndTime)
646
+ );
647
+ },
648
+
649
+ isMonthYearPanelShow(mode) {
650
+ return ['month', 'year', 'decade'].indexOf(mode) > -1;
651
+ },
652
+
653
+ hasSelectedValue() {
654
+ const { sSelectedValue } = this;
655
+ return !!sSelectedValue[1] && !!sSelectedValue[0];
656
+ },
657
+
658
+ compare(v1, v2) {
659
+ if (this.timePicker) {
660
+ return v1.diff(v2);
661
+ }
662
+ return v1.diff(v2, 'days');
663
+ },
664
+
665
+ fireSelectValueChange(selectedValue, direct, cause) {
666
+ const { timePicker, prevSelectedValue } = this;
667
+ if (timePicker) {
668
+ const timePickerProps = getOptionProps(timePicker);
669
+ if (timePickerProps.defaultValue) {
670
+ const timePickerDefaultValue = timePickerProps.defaultValue;
671
+ if (!prevSelectedValue[0] && selectedValue[0]) {
672
+ syncTime(timePickerDefaultValue[0], selectedValue[0]);
673
+ }
674
+ if (!prevSelectedValue[1] && selectedValue[1]) {
675
+ syncTime(timePickerDefaultValue[1], selectedValue[1]);
676
+ }
677
+ }
678
+ }
679
+ // 尚未选择过时间,直接输入的话
680
+ if (!this.sSelectedValue[0] || !this.sSelectedValue[1]) {
681
+ const startValue = selectedValue[0] || moment();
682
+ const endValue = selectedValue[1] || startValue.clone().add(1, 'months');
683
+ this.setState({
684
+ sSelectedValue: selectedValue,
685
+ sValue:
686
+ selectedValue && selectedValue.length === 2
687
+ ? getValueFromSelectedValue([startValue, endValue])
688
+ : this.sValue,
689
+ });
690
+ }
691
+
692
+ if (selectedValue[0] && !selectedValue[1]) {
693
+ this.setState({ firstSelectedValue: selectedValue[0] });
694
+ this.fireHoverValueChange(selectedValue.concat());
695
+ }
696
+ this.__emit('change', selectedValue);
697
+ if (direct || (selectedValue[0] && selectedValue[1])) {
698
+ this.setState({
699
+ prevSelectedValue: selectedValue,
700
+ firstSelectedValue: null,
701
+ });
702
+ this.fireHoverValueChange([]);
703
+ this.__emit('select', selectedValue, cause);
704
+ }
705
+ if (!hasProp(this, 'selectedValue')) {
706
+ this.setState({
707
+ sSelectedValue: selectedValue,
708
+ });
709
+ }
710
+ },
711
+
712
+ fireValueChange(value) {
713
+ if (!hasProp(this, 'value')) {
714
+ this.setState({
715
+ sValue: value,
716
+ });
717
+ }
718
+ this.__emit('valueChange', value);
719
+ },
720
+
721
+ fireHoverValueChange(hoverValue) {
722
+ if (!hasProp(this, 'hoverValue')) {
723
+ this.setState({ sHoverValue: hoverValue });
724
+ }
725
+ this.__emit('hoverChange', hoverValue);
726
+ },
727
+
728
+ clear() {
729
+ this.fireSelectValueChange([], true);
730
+ this.__emit('clear');
731
+ },
732
+
733
+ disabledStartTime(time) {
734
+ return this.disabledTime(time, 'start');
735
+ },
736
+
737
+ disabledEndTime(time) {
738
+ return this.disabledTime(time, 'end');
739
+ },
740
+
741
+ disabledStartMonth(month) {
742
+ const { sValue } = this;
743
+ return month.isAfter(sValue[1], 'month');
744
+ },
745
+
746
+ disabledEndMonth(month) {
747
+ const { sValue } = this;
748
+ return month.isBefore(sValue[0], 'month');
749
+ },
750
+
751
+ // 年份模式的禁用逻辑:基于已选择的值,而不是面板显示值
752
+ disabledStartYear(year) {
753
+ const { sSelectedValue } = this;
754
+ // 如果没有选择结束年份,不禁用任何年份
755
+ if (!sSelectedValue[1]) {
756
+ return false;
757
+ }
758
+ // 禁用大于结束年份的年份
759
+ return year.isAfter(sSelectedValue[1], 'year');
760
+ },
761
+
762
+ disabledEndYear(year) {
763
+ const { sSelectedValue } = this;
764
+ // 如果没有选择开始年份,不禁用任何年份
765
+ if (!sSelectedValue[0]) {
766
+ return false;
767
+ }
768
+ // 禁用小于开始年份的年份
769
+ return year.isBefore(sSelectedValue[0], 'year');
770
+ },
771
+
772
+ // 月份模式的禁用逻辑:基于已选择的值,而不是面板显示值
773
+ disabledStartMonthForPicker(month) {
774
+ const { sSelectedValue } = this;
775
+ // 如果没有选择结束月份,不禁用任何月份
776
+ if (!sSelectedValue[1]) {
777
+ return false;
778
+ }
779
+ // 禁用大于结束月份的月份
780
+ return month.isAfter(sSelectedValue[1], 'month');
781
+ },
782
+
783
+ disabledEndMonthForPicker(month) {
784
+ const { sSelectedValue } = this;
785
+ // 如果没有选择开始月份,不禁用任何月份
786
+ if (!sSelectedValue[0]) {
787
+ return false;
788
+ }
789
+ // 禁用小于开始月份的月份
790
+ return month.isBefore(sSelectedValue[0], 'month');
791
+ },
792
+ },
793
+
794
+ render() {
795
+ const props = getOptionProps(this);
796
+ const {
797
+ prefixCls,
798
+ dateInputPlaceholder,
799
+ timePicker,
800
+ showOk,
801
+ locale,
802
+ showClear,
803
+ showToday,
804
+ type,
805
+ separator,
806
+ } = props;
807
+ const clearIcon = getComponentFromProp(this, 'clearIcon');
808
+ const { sHoverValue, sSelectedValue, sMode: mode, sShowTimePicker, sValue } = this;
809
+ const className = {
810
+ [prefixCls]: 1,
811
+ [`${prefixCls}-hidden`]: !props.visible,
812
+ [`${prefixCls}-range`]: 1,
813
+ [`${prefixCls}-show-time-picker`]: sShowTimePicker,
814
+ [`${prefixCls}-week-number`]: props.showWeekNumber,
815
+ };
816
+ const baseProps = {
817
+ props,
818
+ on: getListeners(this),
819
+ };
820
+ const newProps = {
821
+ props: {
822
+ selectedValue: sSelectedValue,
823
+ },
824
+ on: {
825
+ select: this.onSelect,
826
+ dayHover:
827
+ (type === 'start' && sSelectedValue[1]) ||
828
+ (type === 'end' && sSelectedValue[0]) ||
829
+ !!sHoverValue.length
830
+ ? this.onDayHover
831
+ : noop,
832
+ },
833
+ };
834
+
835
+ let placeholder1;
836
+ let placeholder2;
837
+
838
+ if (dateInputPlaceholder) {
839
+ if (Array.isArray(dateInputPlaceholder)) {
840
+ [placeholder1, placeholder2] = dateInputPlaceholder;
841
+ } else {
842
+ placeholder1 = placeholder2 = dateInputPlaceholder;
843
+ }
844
+ }
845
+ const showOkButton = showOk === true || (showOk !== false && !!timePicker);
846
+ const cls = {
847
+ [`${prefixCls}-footer`]: true,
848
+ [`${prefixCls}-range-bottom`]: true,
849
+ [`${prefixCls}-footer-show-ok`]: showOkButton,
850
+ };
851
+
852
+ const startValue = this.getStartValue();
853
+ const endValue = this.getEndValue();
854
+ const todayTime = getTodayTime(startValue);
855
+ const thisMonth = todayTime.month();
856
+ const thisYear = todayTime.year();
857
+ const isTodayInView =
858
+ (startValue.year() === thisYear && startValue.month() === thisMonth) ||
859
+ (endValue.year() === thisYear && endValue.month() === thisMonth);
860
+ const nextMonthOfStart = startValue.clone().add(1, 'months');
861
+ const isClosestMonths =
862
+ nextMonthOfStart.year() === endValue.year() && nextMonthOfStart.month() === endValue.month();
863
+
864
+ // 年份模式:检查是否在相邻十年
865
+ const isClosestDecades =
866
+ mode[0] === 'year' &&
867
+ mode[1] === 'year' &&
868
+ Math.floor(startValue.year() / 10) + 1 === Math.floor(endValue.year() / 10);
869
+
870
+ // 月份模式:检查是否在相邻年份
871
+ const isClosestYears =
872
+ mode[0] === 'month' && mode[1] === 'month' && startValue.year() + 1 === endValue.year();
873
+
874
+ // 判断是否相邻(根据不同模式使用不同判断)
875
+ let isClosest;
876
+ if (mode[0] === 'year' && mode[1] === 'year') {
877
+ isClosest = isClosestDecades;
878
+ } else if (mode[0] === 'month' && mode[1] === 'month') {
879
+ isClosest = isClosestYears;
880
+ } else {
881
+ isClosest = isClosestMonths;
882
+ }
883
+
884
+ // 根据模式选择正确的禁用函数
885
+ let leftDisabledMonth;
886
+ let rightDisabledMonth;
887
+ if (mode[0] === 'year') {
888
+ leftDisabledMonth = this.disabledStartYear;
889
+ } else if (mode[0] === 'month') {
890
+ leftDisabledMonth = this.disabledStartMonthForPicker;
891
+ } else {
892
+ leftDisabledMonth = this.disabledStartMonth;
893
+ }
894
+ if (mode[1] === 'year') {
895
+ rightDisabledMonth = this.disabledEndYear;
896
+ } else if (mode[1] === 'month') {
897
+ rightDisabledMonth = this.disabledEndMonthForPicker;
898
+ } else {
899
+ rightDisabledMonth = this.disabledEndMonth;
900
+ }
901
+
902
+ const leftPartProps = mergeProps(baseProps, newProps, {
903
+ props: {
904
+ hoverValue: sHoverValue,
905
+ direction: 'left',
906
+ disabledTime: this.disabledStartTime,
907
+ disabledMonth: leftDisabledMonth,
908
+ format: this.getFormat(),
909
+ value: startValue,
910
+ mode: mode[0],
911
+ placeholder: placeholder1,
912
+ showDateInput: this.showDateInput,
913
+ timePicker,
914
+ showTimePicker: sShowTimePicker || mode[0] === 'time',
915
+ enablePrev: true,
916
+ enableNext: !isClosest || this.isMonthYearPanelShow(mode[1]),
917
+ clearIcon,
918
+ },
919
+ on: {
920
+ inputChange: this.onStartInputChange,
921
+ inputSelect: this.onStartInputSelect,
922
+ valueChange: this.onStartValueChange,
923
+ panelChange: this.onStartPanelChange,
924
+ },
925
+ });
926
+ const rightPartProps = mergeProps(baseProps, newProps, {
927
+ props: {
928
+ hoverValue: sHoverValue,
929
+ direction: 'right',
930
+ format: this.getFormat(),
931
+ timePickerDisabledTime: this.getEndDisableTime(),
932
+ placeholder: placeholder2,
933
+ value: endValue,
934
+ mode: mode[1],
935
+ showDateInput: this.showDateInput,
936
+ timePicker,
937
+ showTimePicker: sShowTimePicker || mode[1] === 'time',
938
+ disabledTime: this.disabledEndTime,
939
+ disabledMonth: rightDisabledMonth,
940
+ enablePrev: !isClosest || this.isMonthYearPanelShow(mode[0]),
941
+ enableNext: true,
942
+ clearIcon,
943
+ },
944
+ on: {
945
+ inputChange: this.onEndInputChange,
946
+ inputSelect: this.onEndInputSelect,
947
+ valueChange: this.onEndValueChange,
948
+ panelChange: this.onEndPanelChange,
949
+ },
950
+ });
951
+ let TodayButtonNode = null;
952
+ if (showToday) {
953
+ const todayButtonProps = mergeProps(baseProps, {
954
+ props: {
955
+ disabled: isTodayInView,
956
+ value: sValue[0],
957
+ text: locale.backToToday,
958
+ },
959
+ on: {
960
+ today: this.onToday,
961
+ },
962
+ });
963
+ TodayButtonNode = <TodayButton key="todayButton" {...todayButtonProps} />;
964
+ }
965
+
966
+ let TimePickerButtonNode = null;
967
+ if (props.timePicker) {
968
+ const timePickerButtonProps = mergeProps(baseProps, {
969
+ props: {
970
+ showTimePicker: sShowTimePicker || (mode[0] === 'time' && mode[1] === 'time'),
971
+ timePickerDisabled: !this.hasSelectedValue() || sHoverValue.length,
972
+ },
973
+ on: {
974
+ openTimePicker: this.onOpenTimePicker,
975
+ closeTimePicker: this.onCloseTimePicker,
976
+ },
977
+ });
978
+ TimePickerButtonNode = <TimePickerButton key="timePickerButton" {...timePickerButtonProps} />;
979
+ }
980
+
981
+ let OkButtonNode = null;
982
+ if (showOkButton) {
983
+ const okButtonProps = mergeProps(baseProps, {
984
+ props: {
985
+ okDisabled:
986
+ !this.isAllowedDateAndTime(sSelectedValue) ||
987
+ !this.hasSelectedValue() ||
988
+ sHoverValue.length,
989
+ },
990
+ on: {
991
+ ok: this.onOk,
992
+ },
993
+ });
994
+ OkButtonNode = <OkButton key="okButtonNode" {...okButtonProps} />;
995
+ }
996
+ const extraFooter = this.renderFooter(mode);
997
+ return (
998
+ <div ref="rootInstance" class={className} tabIndex="0" onKeydown={this.onKeyDown}>
999
+ {props.renderSidebar()}
1000
+ <div class={`${prefixCls}-panel`}>
1001
+ {showClear && sSelectedValue[0] && sSelectedValue[1] ? (
1002
+ <a role="button" title={locale.clear} onClick={this.clear}>
1003
+ {clearIcon || <span class={`${prefixCls}-clear-btn`} />}
1004
+ </a>
1005
+ ) : null}
1006
+ <div
1007
+ class={`${prefixCls}-date-panel`}
1008
+ onMouseleave={type !== 'both' ? this.onDatePanelLeave : noop}
1009
+ onMouseenter={type !== 'both' ? this.onDatePanelEnter : noop}
1010
+ >
1011
+ <CalendarPart {...leftPartProps} />
1012
+ <span class={`${prefixCls}-range-middle`}>{separator}</span>
1013
+ <CalendarPart {...rightPartProps} />
1014
+ </div>
1015
+ <div class={cls}>
1016
+ {showToday || props.timePicker || showOkButton || extraFooter ? (
1017
+ <div class={`${prefixCls}-footer-btn`}>
1018
+ {extraFooter}
1019
+ {TodayButtonNode}
1020
+ {TimePickerButtonNode}
1021
+ {OkButtonNode}
1022
+ </div>
1023
+ ) : null}
1024
+ </div>
1025
+ </div>
1026
+ </div>
1027
+ );
1028
+ },
1029
+ };
1030
+
1031
+ export default RangeCalendar;