@kdcloudjs/kdesign 1.6.24 → 1.6.25

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 (36) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/kdesign-complete.less +11 -0
  3. package/dist/kdesign.css +10 -1
  4. package/dist/kdesign.css.map +1 -1
  5. package/dist/kdesign.js +241 -136
  6. package/dist/kdesign.js.map +1 -1
  7. package/dist/kdesign.min.css +2 -2
  8. package/dist/kdesign.min.js +7 -7
  9. package/dist/kdesign.min.js.map +1 -1
  10. package/es/date-picker/context.d.ts +5 -1
  11. package/es/date-picker/date-panel.js +37 -9
  12. package/es/date-picker/date-picker.d.ts +2 -0
  13. package/es/date-picker/date-picker.js +24 -11
  14. package/es/date-picker/panel/month/month.js +13 -4
  15. package/es/date-picker/panel/year/year.d.ts +2 -1
  16. package/es/date-picker/panel/year/year.js +23 -5
  17. package/es/date-picker/range-picker.d.ts +2 -0
  18. package/es/date-picker/range-picker.js +20 -8
  19. package/es/date-picker/style/index.css +9 -0
  20. package/es/date-picker/style/index.less +11 -0
  21. package/es/date-picker/utils/date-fns.d.ts +1 -0
  22. package/es/date-picker/utils/date-fns.js +24 -1
  23. package/lib/date-picker/context.d.ts +5 -1
  24. package/lib/date-picker/date-panel.js +37 -9
  25. package/lib/date-picker/date-picker.d.ts +2 -0
  26. package/lib/date-picker/date-picker.js +23 -10
  27. package/lib/date-picker/panel/month/month.js +12 -3
  28. package/lib/date-picker/panel/year/year.d.ts +2 -1
  29. package/lib/date-picker/panel/year/year.js +23 -4
  30. package/lib/date-picker/range-picker.d.ts +2 -0
  31. package/lib/date-picker/range-picker.js +19 -7
  32. package/lib/date-picker/style/index.css +9 -0
  33. package/lib/date-picker/style/index.less +11 -0
  34. package/lib/date-picker/utils/date-fns.d.ts +1 -0
  35. package/lib/date-picker/utils/date-fns.js +29 -1
  36. package/package.json +1 -1
@@ -1,9 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { DateType, InnerLocale, RangeValue, TimeUnit } from './interface';
3
+ import { IInnerPicker } from './date-picker';
3
4
  export declare type ContextOperationRefProps = {
4
5
  onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => boolean;
5
6
  onClose?: () => void;
6
7
  };
8
+ export declare type ISelectType = 'key' | 'mouse' | 'submit' | 'inner';
7
9
  export interface SingleContextProps {
8
10
  prefixCls: string;
9
11
  viewDate: DateType;
@@ -21,9 +23,11 @@ export interface SingleContextProps {
21
23
  seconds?: TimeUnit[];
22
24
  disabledTimePanel?: boolean;
23
25
  setViewDate: (date: DateType, index?: 0 | 1) => void;
24
- onSelect: (date: DateType, type: 'key' | 'mouse' | 'submit') => void;
26
+ onSelect: (date: DateType, type: ISelectType) => void;
25
27
  onDateMouseEnter: (date: DateType) => void;
26
28
  onDateMouseLeave: (arg?: boolean) => void;
29
+ innerPicker: IInnerPicker;
30
+ setInnerPicker: (p: IInnerPicker) => void;
27
31
  }
28
32
  declare const Context: React.Context<SingleContextProps>;
29
33
  export default Context;
@@ -14,13 +14,15 @@ import isBoolean from 'lodash/isBoolean';
14
14
  import DateTime from './panel/date-time/date-time';
15
15
 
16
16
  function Panel(props) {
17
- // console.log('props', props)
18
17
  var context = useContext(Context);
19
18
  var prefixCls = context.prefixCls,
20
19
  viewDate = context.viewDate,
21
20
  setViewDate = context.setViewDate,
22
21
  panelPosition = context.panelPosition,
23
- locale = context.locale;
22
+ locale = context.locale,
23
+ innerPicker = context.innerPicker,
24
+ setInnerPicker = context.setInnerPicker;
25
+ var isInInnerPicker = innerPicker !== undefined;
24
26
  var _props$picker = props.picker,
25
27
  picker = _props$picker === void 0 ? 'date' : _props$picker,
26
28
  format = props.format,
@@ -54,6 +56,14 @@ function Panel(props) {
54
56
  };
55
57
 
56
58
  var renderDatePanel = function renderDatePanel() {
59
+ if (isInInnerPicker) {
60
+ if (innerPicker === 'year') {
61
+ return renderYearPanel();
62
+ } else {
63
+ return renderMonthPanel();
64
+ }
65
+ }
66
+
57
67
  if (!showTime) {
58
68
  var dateProps = {
59
69
  picker: picker,
@@ -123,12 +133,30 @@ function Panel(props) {
123
133
  };
124
134
  };
125
135
 
136
+ var onHeaderYearClick = function onHeaderYearClick() {
137
+ if (picker === 'date') {
138
+ setInnerPicker('year');
139
+ }
140
+ };
141
+
142
+ var onHeaderMonthClick = function onHeaderMonthClick() {
143
+ if (picker === 'date') {
144
+ setInnerPicker('month');
145
+ }
146
+ };
147
+
126
148
  var renderDateHeader = function renderDateHeader() {
127
149
  var year = getYear(viewDate);
128
150
  var month = getMonth(viewDate) + 1;
129
151
  var headerCls = classnames("".concat(prefixCls, "-header"), "".concat(prefixCls, "-header-date"));
130
152
  return {
131
- children: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", null, year + locale.year), /*#__PURE__*/React.createElement("span", null, month + locale.month)),
153
+ children: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("span", {
154
+ className: "".concat(prefixCls, "-header-text-inner"),
155
+ onClick: onHeaderYearClick
156
+ }, year + locale.year), /*#__PURE__*/React.createElement("span", {
157
+ className: "".concat(prefixCls, "-header-text-inner"),
158
+ onClick: onHeaderMonthClick
159
+ }, month + locale.month)),
132
160
  className: headerCls
133
161
  };
134
162
  };
@@ -136,7 +164,7 @@ function Panel(props) {
136
164
  var onSuperPrev = function onSuperPrev() {
137
165
  var date;
138
166
 
139
- if (picker === 'year') {
167
+ if (picker === 'year' || innerPicker === 'year') {
140
168
  var _props$yearItemNumber3 = props.yearItemNumber,
141
169
  yearItemNumber = _props$yearItemNumber3 === void 0 ? DEFAULT_YEAR_ITEM_NUMBER : _props$yearItemNumber3;
142
170
  date = addYears(viewDate, 0 - yearItemNumber);
@@ -150,7 +178,7 @@ function Panel(props) {
150
178
  var onSuperNext = function onSuperNext() {
151
179
  var date;
152
180
 
153
- if (picker === 'year') {
181
+ if (picker === 'year' || innerPicker === 'year') {
154
182
  var _props$yearItemNumber4 = props.yearItemNumber,
155
183
  yearItemNumber = _props$yearItemNumber4 === void 0 ? DEFAULT_YEAR_ITEM_NUMBER : _props$yearItemNumber4;
156
184
  var _viewDate = viewDate;
@@ -229,10 +257,10 @@ function Panel(props) {
229
257
  {
230
258
  headerObj = renderDateHeader();
231
259
  headerProps = {
232
- onPrev: panelPosition === 'right' ? undefined : onPrev,
233
- onNext: panelPosition === 'left' ? undefined : onNext,
234
- onSuperPrev: panelPosition === 'right' ? undefined : onSuperPrev,
235
- onSuperNext: panelPosition === 'left' ? undefined : onSuperNext
260
+ onPrev: panelPosition === 'right' || isInInnerPicker ? undefined : onPrev,
261
+ onNext: panelPosition === 'left' || isInInnerPicker ? undefined : onNext,
262
+ onSuperPrev: panelPosition === 'right' || innerPicker === 'month' ? undefined : onSuperPrev,
263
+ onSuperNext: panelPosition === 'left' || innerPicker === 'month' ? undefined : onSuperNext
236
264
  };
237
265
  panel = renderDatePanel();
238
266
  break;
@@ -5,6 +5,7 @@ import { BorderType, InputSiteType } from '../input/input';
5
5
  export interface PickerSharedProps extends React.AriaAttributes {
6
6
  dropdownClassName?: string;
7
7
  popupStyle?: React.CSSProperties;
8
+ popupRef?: React.Ref<any>;
8
9
  transitionName?: string;
9
10
  placeholder?: string;
10
11
  allowClear?: boolean;
@@ -47,5 +48,6 @@ export interface PickerTimeProps extends PickerSharedProps, Omit<OmitPanelProps<
47
48
  defaultOpenValue?: DateType;
48
49
  }
49
50
  export declare type PickerProps = PickerBaseProps | PickerDateProps | PickerTimeProps;
51
+ export declare type IInnerPicker = undefined | 'year' | 'month';
50
52
  declare const DatePicker: React.ForwardRefExoticComponent<(Partial<PickerBaseProps> & React.RefAttributes<unknown>) | (Partial<PickerDateProps> & React.RefAttributes<unknown>) | (Partial<PickerTimeProps> & React.RefAttributes<unknown>)>;
51
53
  export default DatePicker;
@@ -1,7 +1,7 @@
1
1
  import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
2
2
  import _extends from "@babel/runtime-corejs3/helpers/extends";
3
3
  import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
4
- import React, { useContext, useEffect } from 'react';
4
+ import React, { useContext, useEffect, useState } from 'react';
5
5
  import classnames from 'classnames';
6
6
  import ConfigContext from '../config-provider/ConfigContext';
7
7
  import { useMergedState, useOnClickOutside } from '../_utils/hooks';
@@ -34,6 +34,7 @@ var InternalDatePicker = function InternalDatePicker(props, ref) {
34
34
  className = datePickerProps.className,
35
35
  dropdownClassName = datePickerProps.dropdownClassName,
36
36
  popupStyle = datePickerProps.popupStyle,
37
+ popupRef = datePickerProps.popupRef,
37
38
  locale = datePickerProps.locale,
38
39
  inputReadOnly = datePickerProps.inputReadOnly,
39
40
  allowClear = datePickerProps.allowClear,
@@ -86,7 +87,7 @@ var InternalDatePicker = function InternalDatePicker(props, ref) {
86
87
 
87
88
  var panelDivRef = React.useRef(null);
88
89
  var inputDivRef = ref || /*#__PURE__*/React.createRef();
89
- var popperRef = React.useRef(null);
90
+ var popperRef = popupRef || /*#__PURE__*/React.createRef();
90
91
  var inputRef = React.useRef(null);
91
92
  var isHourStepValid = 24 % hourStep === 0;
92
93
  var isMinuteStepValid = 60 % minuteStep === 0;
@@ -98,8 +99,7 @@ var InternalDatePicker = function InternalDatePicker(props, ref) {
98
99
 
99
100
  var datePickerLang = _extends({}, globalLocale.getCompLangMsg({
100
101
  componentName: 'DatePicker'
101
- }), locale || {}); // console.log(_format)
102
- // 原始数据
102
+ }), locale || {}); // 原始数据
103
103
 
104
104
 
105
105
  var _useMergedState = useMergedState(null, {
@@ -229,6 +229,11 @@ var InternalDatePicker = function InternalDatePicker(props, ref) {
229
229
  mergedMode = _useMergedState8[0],
230
230
  setInnerMode = _useMergedState8[1];
231
231
 
232
+ var _useState = useState(undefined),
233
+ _useState2 = _slicedToArray(_useState, 2),
234
+ innerPicker = _useState2[0],
235
+ setInnerPicker = _useState2[1];
236
+
232
237
  useEffect(function () {
233
238
  setInnerMode(picker);
234
239
  }, [picker]);
@@ -280,13 +285,19 @@ var InternalDatePicker = function InternalDatePicker(props, ref) {
280
285
  };
281
286
 
282
287
  var onContextSelect = function onContextSelect(date, type) {
283
- if (type === 'submit' || type !== 'key' && !needConfirmButton) {
288
+ if (type === 'inner') {
284
289
  setViewDate(date);
285
- triggerChange(date);
286
- triggerOpen(false);
290
+ setSelectedValue(date);
291
+ setDateValue(date);
287
292
  } else {
288
- setViewDate(date);
289
- triggerChange(date);
293
+ if (type === 'submit' || type !== 'key' && !needConfirmButton) {
294
+ setViewDate(date);
295
+ triggerChange(date);
296
+ triggerOpen(false);
297
+ } else {
298
+ setViewDate(date);
299
+ triggerChange(date);
300
+ }
290
301
  }
291
302
  };
292
303
 
@@ -374,9 +385,11 @@ var InternalDatePicker = function InternalDatePicker(props, ref) {
374
385
  onSelect: onContextSelect,
375
386
  setViewDate: setViewDate,
376
387
  onDateMouseEnter: onEnter,
377
- onDateMouseLeave: onLeave
388
+ onDateMouseLeave: onLeave,
389
+ innerPicker: innerPicker,
390
+ setInnerPicker: setInnerPicker
378
391
  }
379
- }, panelNode, extraFooter || rangesNode || todayNode ? /*#__PURE__*/React.createElement("div", {
392
+ }, panelNode, (extraFooter || rangesNode || todayNode) && innerPicker === undefined ? /*#__PURE__*/React.createElement("div", {
380
393
  className: "".concat(datePickerPrefixCls, "-footer")
381
394
  }, extraFooter, rangesNode, todayNode) : null);
382
395
  }
@@ -4,7 +4,7 @@ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/insta
4
4
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
5
5
  import React, { useContext } from 'react';
6
6
  import classnames from 'classnames';
7
- import { getMonth, newDate, getYear, setMonth, isAfter, isBefore, isSameMonth, getStartOfMonth } from '../../utils/date-fns';
7
+ import { getMonth, newDate, getYear, setMonth, isAfter, isBefore, isSameMonth, getStartOfMonth, setYearOrMonthOfDate } from '../../utils/date-fns';
8
8
  import Context from '../../context';
9
9
  import useRangeCls from '../../hooks/use-range-cls';
10
10
  var monthsThreeColumns = [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]];
@@ -20,7 +20,9 @@ function Month(props) {
20
20
  rangeValue = context.rangeValue,
21
21
  panelPosition = context.panelPosition,
22
22
  hoverRangedValue = context.hoverRangedValue,
23
- locale = context.locale;
23
+ locale = context.locale,
24
+ innerPicker = context.innerPicker,
25
+ setInnerPicker = context.setInnerPicker;
24
26
  var disabledDate = props.disabledDate;
25
27
 
26
28
  var _dateValue;
@@ -89,8 +91,15 @@ function Month(props) {
89
91
  });
90
92
 
91
93
  var handleClick = function handleClick(date) {
92
- if (!(disabledDate && disabledDate(date))) {
93
- onSelect(date, 'mouse');
94
+ if (innerPicker === undefined) {
95
+ if (!(disabledDate && disabledDate(date))) {
96
+ onSelect(date, 'mouse');
97
+ }
98
+ } else {
99
+ //
100
+ var _viewDate = viewDate;
101
+ onSelect(setYearOrMonthOfDate(_viewDate, date, 'month'), 'inner');
102
+ setInnerPicker(undefined);
94
103
  }
95
104
  };
96
105
 
@@ -1,10 +1,11 @@
1
1
  /// <reference types="react" />
2
- import { DateType } from '../../interface';
2
+ import { DateType, PickerMode } from '../../interface';
3
3
  export interface YearProps {
4
4
  yearItemNumber: number;
5
5
  minDate?: DateType;
6
6
  maxDate?: DateType;
7
7
  disabledDate?: (date: DateType) => boolean;
8
+ picker?: PickerMode;
8
9
  }
9
10
  declare function Year(props: YearProps): JSX.Element;
10
11
  export default Year;
@@ -3,8 +3,9 @@ import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
3
3
  import React, { useContext } from 'react';
4
4
  import classnames from 'classnames';
5
5
  import Context from '../../context';
6
- import { getYearsPeriod, getYear, newDate, setYear, isAfter, getStartOfYear, isSameYear, isBefore } from '../../utils/date-fns';
6
+ import { getYearsPeriod, getYear, newDate, setYear, isAfter, getStartOfYear, isSameYear, isBefore, setYearOrMonthOfDate } from '../../utils/date-fns';
7
7
  import useRangeCls from '../../hooks/use-range-cls';
8
+ import { getClosingViewDate } from '../../utils';
8
9
 
9
10
  function Year(props) {
10
11
  var context = useContext(Context);
@@ -16,9 +17,13 @@ function Year(props) {
16
17
  onSelect = context.onSelect,
17
18
  rangeValue = context.rangeValue,
18
19
  panelPosition = context.panelPosition,
19
- hoverRangedValue = context.hoverRangedValue;
20
+ hoverRangedValue = context.hoverRangedValue,
21
+ innerPicker = context.innerPicker,
22
+ setInnerPicker = context.setInnerPicker;
20
23
  var yearItemNumber = props.yearItemNumber,
21
- disabledDate = props.disabledDate;
24
+ disabledDate = props.disabledDate,
25
+ _props$picker = props.picker,
26
+ picker = _props$picker === void 0 ? 'date' : _props$picker;
22
27
 
23
28
  var _dateValue;
24
29
 
@@ -86,8 +91,21 @@ function Year(props) {
86
91
  });
87
92
 
88
93
  var handleClick = function handleClick(date) {
89
- if (!(disabledDate && disabledDate(date))) {
90
- onSelect(date, 'mouse');
94
+ if (innerPicker === undefined) {
95
+ if (!(disabledDate && disabledDate(date))) {
96
+ onSelect(date, 'mouse');
97
+ }
98
+ } else {
99
+ //
100
+ var _viewDate = viewDate;
101
+
102
+ if (panelPosition) {
103
+ _viewDate = getClosingViewDate(viewDate, picker, -1);
104
+ } // date = addYears(_viewDate, 1)
105
+
106
+
107
+ onSelect(setYearOrMonthOfDate(_viewDate, date), 'inner');
108
+ setInnerPicker(undefined);
91
109
  }
92
110
  };
93
111
 
@@ -29,6 +29,8 @@ export interface RangePickerSharedProps {
29
29
  dateRender?: RangeDateRender;
30
30
  panelRender?: (originPanel: React.ReactNode) => React.ReactNode;
31
31
  getPopupContainer?: (node: HTMLElement) => HTMLElement;
32
+ popupRef?: React.Ref<any>;
33
+ popupStyle?: React.CSSProperties;
32
34
  }
33
35
  declare type OmitPickerProps<Props> = Omit<Props, 'value' | 'defaultValue' | 'defaultPickerValue' | 'placeholder' | 'disabled' | 'disabledTimePanel' | 'showToday' | 'showTime' | 'mode' | 'onChange' | 'onSelect' | 'onPanelChange' | 'pickerValue' | 'onPickerValueChange' | 'onOk' | 'dateRender'>;
34
36
  export declare type RangeShowTimeObject = Omit<SharedTimeProps, 'defaultValue'> & {
@@ -4,7 +4,7 @@ import _extends from "@babel/runtime-corejs3/helpers/extends";
4
4
  import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
5
5
  import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
6
6
  import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
7
- import React, { useContext, useEffect } from 'react';
7
+ import React, { useContext, useEffect, useState } from 'react';
8
8
  import isSameWeek from 'date-fns/isSameWeek';
9
9
  import ConfigContext from '../config-provider/ConfigContext';
10
10
  import { useMergedState, useOnClickOutside } from '../_utils/hooks';
@@ -85,6 +85,8 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
85
85
  allowEmpty = datePickerProps.allowEmpty,
86
86
  className = datePickerProps.className,
87
87
  style = datePickerProps.style,
88
+ popupStyle = datePickerProps.popupStyle,
89
+ popupRef = datePickerProps.popupRef,
88
90
  borderType = datePickerProps.borderType,
89
91
  separator = datePickerProps.separator,
90
92
  ranges = datePickerProps.ranges,
@@ -130,7 +132,7 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
130
132
  var separatorRef = React.useRef(null);
131
133
  var startInputRef = React.useRef(null);
132
134
  var endInputRef = React.useRef(null);
133
- var popperRef = React.useRef(null);
135
+ var popperRef = popupRef || /*#__PURE__*/React.createRef();
134
136
  var openRecordsRef = React.useRef({});
135
137
  var mergedDisabled = React.useMemo(function () {
136
138
  if (Array.isArray(disabled)) {
@@ -346,6 +348,11 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
346
348
  mergedModes = _useMergedState10[0],
347
349
  setInnerModes = _useMergedState10[1];
348
350
 
351
+ var _useState = useState(undefined),
352
+ _useState2 = _slicedToArray(_useState, 2),
353
+ innerPicker = _useState2[0],
354
+ setInnerPicker = _useState2[1];
355
+
349
356
  useEffect(function () {
350
357
  setInnerModes([picker, picker]);
351
358
  }, [picker]); // const triggerModesChange = (modes: [PanelMode, PanelMode], values: RangeValue) => {
@@ -474,8 +481,7 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
474
481
  var values = updateValues(selectedValue, date, mergedActivePickerIndex);
475
482
 
476
483
  if (type === 'submit' || type !== 'key' && !needConfirmButton) {
477
- // triggerChange will also update selected values
478
- triggerChange(values, mergedActivePickerIndex); // clear hover value style
484
+ triggerChange(values, mergedActivePickerIndex);
479
485
 
480
486
  if (mergedActivePickerIndex === 0) {
481
487
  onStartLeave();
@@ -581,7 +587,9 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
581
587
  onSelect: onSelect,
582
588
  setViewDate: setViewDate,
583
589
  onDateMouseEnter: onDateMouseEnter,
584
- onDateMouseLeave: onDateMouseLeave
590
+ onDateMouseLeave: onDateMouseLeave,
591
+ innerPicker: innerPicker,
592
+ setInnerPicker: setInnerPicker
585
593
  }
586
594
  }, renderPanel());
587
595
  var rightPanel = /*#__PURE__*/React.createElement(Context.Provider, {
@@ -596,7 +604,9 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
596
604
  onSelect: onSelect,
597
605
  setViewDate: setViewDate,
598
606
  onDateMouseEnter: onDateMouseEnter,
599
- onDateMouseLeave: onDateMouseLeave
607
+ onDateMouseLeave: onDateMouseLeave,
608
+ innerPicker: innerPicker,
609
+ setInnerPicker: setInnerPicker
600
610
  }
601
611
  }, renderPanel());
602
612
  panels = /*#__PURE__*/React.createElement("div", {
@@ -621,7 +631,9 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
621
631
  onSelect: onSelect,
622
632
  setViewDate: setViewDate,
623
633
  onDateMouseEnter: onDateMouseEnter,
624
- onDateMouseLeave: onDateMouseLeave
634
+ onDateMouseLeave: onDateMouseLeave,
635
+ innerPicker: innerPicker,
636
+ setInnerPicker: setInnerPicker
625
637
  }
626
638
  }, /*#__PURE__*/React.createElement(Panel, _extends({}, datePickerProps, {
627
639
  disabledDate: mergedActivePickerIndex === 0 ? disabledStartDate : disabledEndDate
@@ -763,7 +775,7 @@ var InternalRangePicker = function InternalRangePicker(props, ref) {
763
775
  trigger: 'click',
764
776
  prefixCls: "".concat(datePickerPrefixCls, "-panel"),
765
777
  arrow: false,
766
- popperStyle: style,
778
+ popperStyle: popupStyle,
767
779
  visible: mergedOpen,
768
780
  placement: 'bottomLeft',
769
781
  getPopupContainer: getPopupContainer
@@ -745,6 +745,15 @@
745
745
  -ms-flex: 1;
746
746
  flex: 1;
747
747
  }
748
+ .kd-date-picker-panel .kd-date-picker-header-text-inner {
749
+ cursor: pointer;
750
+ }
751
+ .kd-date-picker-panel .kd-date-picker-header-text-inner:hover {
752
+ color: var(--kd-c-date-picker-color-background-checked, var(--kd-g-color-theme, #5582f3));
753
+ }
754
+ .kd-date-picker-panel .kd-date-picker-header-text-inner:nth-child(2) {
755
+ margin-left: 13px;
756
+ }
748
757
  .kd-date-picker-panel .kd-date-picker-time-header,
749
758
  .kd-date-picker-panel .kd-date-picker-header {
750
759
  height: var(--kd-c-date-picker-panel-header-sizing-height, 36px);
@@ -627,6 +627,17 @@
627
627
 
628
628
  &-text {
629
629
  flex: 1;
630
+
631
+ &-inner {
632
+ cursor: pointer;
633
+
634
+ &:hover {
635
+ color: @date-color-background-checked;
636
+ }
637
+ &:nth-child(2) {
638
+ margin-left: 13px;
639
+ }
640
+ }
630
641
  }
631
642
  }
632
643
 
@@ -84,3 +84,4 @@ export declare function getYearsPeriod(date: DateType, yearItemNumber: number):
84
84
  endPeriod: number;
85
85
  };
86
86
  export declare function getLowerBoundTime(hour: number, minute: number, second: number, hourStep: number, minuteStep: number, secondStep: number): [number, number, number];
87
+ export declare const setYearOrMonthOfDate: (date1: DateType, date2: DateType, type?: string) => Date;
@@ -1,5 +1,6 @@
1
1
  import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
2
2
  import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/slice";
3
+ import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
3
4
  import isDate from 'date-fns/isDate';
4
5
  import isValidDate from 'date-fns/isValid';
5
6
  import format from 'date-fns/format';
@@ -294,4 +295,26 @@ export function getLowerBoundTime(hour, minute, second, hourStep, minuteStep, se
294
295
 
295
296
  var lowerBoundSecond = Math.floor(second / secondStep) * secondStep;
296
297
  return [lowerBoundHour, lowerBoundMinute, lowerBoundSecond];
297
- }
298
+ }
299
+ export var setYearOrMonthOfDate = function setYearOrMonthOfDate(date1, date2) {
300
+ var _context, _context2, _context3, _context4, _context5;
301
+
302
+ var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'year';
303
+ var y = new Date(date1).getFullYear();
304
+
305
+ if (type === 'year') {
306
+ y = new Date(date2).getFullYear();
307
+ }
308
+
309
+ var m = new Date(date1 || date2).getMonth() + 1;
310
+
311
+ if (type === 'month') {
312
+ m = new Date(date2).getMonth() + 1;
313
+ }
314
+
315
+ var d = new Date(date1 || date2).getDate();
316
+ var h = new Date(date1 || date2).getHours();
317
+ var mi = new Date(date1 || date2).getMinutes();
318
+ var s = new Date(date1 || date2).getSeconds();
319
+ return new Date(_concatInstanceProperty(_context = _concatInstanceProperty(_context2 = _concatInstanceProperty(_context3 = _concatInstanceProperty(_context4 = _concatInstanceProperty(_context5 = "".concat(y, "-")).call(_context5, m, "-")).call(_context4, d, " ")).call(_context3, h, ":")).call(_context2, mi, ":")).call(_context, s));
320
+ };
@@ -1,9 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { DateType, InnerLocale, RangeValue, TimeUnit } from './interface';
3
+ import { IInnerPicker } from './date-picker';
3
4
  export declare type ContextOperationRefProps = {
4
5
  onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => boolean;
5
6
  onClose?: () => void;
6
7
  };
8
+ export declare type ISelectType = 'key' | 'mouse' | 'submit' | 'inner';
7
9
  export interface SingleContextProps {
8
10
  prefixCls: string;
9
11
  viewDate: DateType;
@@ -21,9 +23,11 @@ export interface SingleContextProps {
21
23
  seconds?: TimeUnit[];
22
24
  disabledTimePanel?: boolean;
23
25
  setViewDate: (date: DateType, index?: 0 | 1) => void;
24
- onSelect: (date: DateType, type: 'key' | 'mouse' | 'submit') => void;
26
+ onSelect: (date: DateType, type: ISelectType) => void;
25
27
  onDateMouseEnter: (date: DateType) => void;
26
28
  onDateMouseLeave: (arg?: boolean) => void;
29
+ innerPicker: IInnerPicker;
30
+ setInnerPicker: (p: IInnerPicker) => void;
27
31
  }
28
32
  declare const Context: React.Context<SingleContextProps>;
29
33
  export default Context;
@@ -46,13 +46,15 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "functi
46
46
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
47
47
 
48
48
  function Panel(props) {
49
- // console.log('props', props)
50
49
  var context = (0, _react.useContext)(_context.default);
51
50
  var prefixCls = context.prefixCls,
52
51
  viewDate = context.viewDate,
53
52
  setViewDate = context.setViewDate,
54
53
  panelPosition = context.panelPosition,
55
- locale = context.locale;
54
+ locale = context.locale,
55
+ innerPicker = context.innerPicker,
56
+ setInnerPicker = context.setInnerPicker;
57
+ var isInInnerPicker = innerPicker !== undefined;
56
58
  var _props$picker = props.picker,
57
59
  picker = _props$picker === void 0 ? 'date' : _props$picker,
58
60
  format = props.format,
@@ -86,6 +88,14 @@ function Panel(props) {
86
88
  };
87
89
 
88
90
  var renderDatePanel = function renderDatePanel() {
91
+ if (isInInnerPicker) {
92
+ if (innerPicker === 'year') {
93
+ return renderYearPanel();
94
+ } else {
95
+ return renderMonthPanel();
96
+ }
97
+ }
98
+
89
99
  if (!showTime) {
90
100
  var dateProps = {
91
101
  picker: picker,
@@ -155,12 +165,30 @@ function Panel(props) {
155
165
  };
156
166
  };
157
167
 
168
+ var onHeaderYearClick = function onHeaderYearClick() {
169
+ if (picker === 'date') {
170
+ setInnerPicker('year');
171
+ }
172
+ };
173
+
174
+ var onHeaderMonthClick = function onHeaderMonthClick() {
175
+ if (picker === 'date') {
176
+ setInnerPicker('month');
177
+ }
178
+ };
179
+
158
180
  var renderDateHeader = function renderDateHeader() {
159
181
  var year = (0, _dateFns.getYear)(viewDate);
160
182
  var month = (0, _dateFns.getMonth)(viewDate) + 1;
161
183
  var headerCls = (0, _classnames.default)("".concat(prefixCls, "-header"), "".concat(prefixCls, "-header-date"));
162
184
  return {
163
- children: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", null, year + locale.year), /*#__PURE__*/_react.default.createElement("span", null, month + locale.month)),
185
+ children: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
186
+ className: "".concat(prefixCls, "-header-text-inner"),
187
+ onClick: onHeaderYearClick
188
+ }, year + locale.year), /*#__PURE__*/_react.default.createElement("span", {
189
+ className: "".concat(prefixCls, "-header-text-inner"),
190
+ onClick: onHeaderMonthClick
191
+ }, month + locale.month)),
164
192
  className: headerCls
165
193
  };
166
194
  };
@@ -168,7 +196,7 @@ function Panel(props) {
168
196
  var onSuperPrev = function onSuperPrev() {
169
197
  var date;
170
198
 
171
- if (picker === 'year') {
199
+ if (picker === 'year' || innerPicker === 'year') {
172
200
  var _props$yearItemNumber3 = props.yearItemNumber,
173
201
  yearItemNumber = _props$yearItemNumber3 === void 0 ? _dateFns.DEFAULT_YEAR_ITEM_NUMBER : _props$yearItemNumber3;
174
202
  date = (0, _dateFns.addYears)(viewDate, 0 - yearItemNumber);
@@ -182,7 +210,7 @@ function Panel(props) {
182
210
  var onSuperNext = function onSuperNext() {
183
211
  var date;
184
212
 
185
- if (picker === 'year') {
213
+ if (picker === 'year' || innerPicker === 'year') {
186
214
  var _props$yearItemNumber4 = props.yearItemNumber,
187
215
  yearItemNumber = _props$yearItemNumber4 === void 0 ? _dateFns.DEFAULT_YEAR_ITEM_NUMBER : _props$yearItemNumber4;
188
216
  var _viewDate = viewDate;
@@ -261,10 +289,10 @@ function Panel(props) {
261
289
  {
262
290
  headerObj = renderDateHeader();
263
291
  headerProps = {
264
- onPrev: panelPosition === 'right' ? undefined : onPrev,
265
- onNext: panelPosition === 'left' ? undefined : onNext,
266
- onSuperPrev: panelPosition === 'right' ? undefined : onSuperPrev,
267
- onSuperNext: panelPosition === 'left' ? undefined : onSuperNext
292
+ onPrev: panelPosition === 'right' || isInInnerPicker ? undefined : onPrev,
293
+ onNext: panelPosition === 'left' || isInInnerPicker ? undefined : onNext,
294
+ onSuperPrev: panelPosition === 'right' || innerPicker === 'month' ? undefined : onSuperPrev,
295
+ onSuperNext: panelPosition === 'left' || innerPicker === 'month' ? undefined : onSuperNext
268
296
  };
269
297
  panel = renderDatePanel();
270
298
  break;
@@ -5,6 +5,7 @@ import { BorderType, InputSiteType } from '../input/input';
5
5
  export interface PickerSharedProps extends React.AriaAttributes {
6
6
  dropdownClassName?: string;
7
7
  popupStyle?: React.CSSProperties;
8
+ popupRef?: React.Ref<any>;
8
9
  transitionName?: string;
9
10
  placeholder?: string;
10
11
  allowClear?: boolean;
@@ -47,5 +48,6 @@ export interface PickerTimeProps extends PickerSharedProps, Omit<OmitPanelProps<
47
48
  defaultOpenValue?: DateType;
48
49
  }
49
50
  export declare type PickerProps = PickerBaseProps | PickerDateProps | PickerTimeProps;
51
+ export declare type IInnerPicker = undefined | 'year' | 'month';
50
52
  declare const DatePicker: React.ForwardRefExoticComponent<(Partial<PickerBaseProps> & React.RefAttributes<unknown>) | (Partial<PickerDateProps> & React.RefAttributes<unknown>) | (Partial<PickerTimeProps> & React.RefAttributes<unknown>)>;
51
53
  export default DatePicker;