@nickeylin/antd-mobile-pro 2.0.2 → 2.1.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 (55) hide show
  1. package/dist/cjs/components/checkbox/checkbox.d.ts +1 -1
  2. package/dist/cjs/components/checkbox/index.d.ts +1 -1
  3. package/dist/cjs/components/index.d.ts +1 -0
  4. package/dist/cjs/components/index.js +3 -0
  5. package/dist/cjs/components/popup-page/popup-page.d.ts +1 -0
  6. package/dist/cjs/components/popup-page/popup-page.js +30 -6
  7. package/dist/cjs/components/popup-page/style.less +4 -0
  8. package/dist/cjs/components/pro-calendar/index.d.ts +10 -0
  9. package/dist/cjs/components/pro-calendar/index.js +42 -0
  10. package/dist/cjs/components/pro-calendar/pro-calendar.d.ts +37 -0
  11. package/dist/cjs/components/pro-calendar/pro-calendar.js +173 -0
  12. package/dist/cjs/components/pro-calendar/style.less +105 -0
  13. package/dist/cjs/components/pro-calendar/utils.d.ts +32 -0
  14. package/dist/cjs/components/pro-calendar/utils.js +175 -0
  15. package/dist/cjs/components/pro-calendar-picker/index.d.ts +3 -2
  16. package/dist/cjs/components/pro-calendar-picker/index.js +3 -2
  17. package/dist/cjs/components/pro-calendar-picker/pro-calendar-picker.d.ts +13 -0
  18. package/dist/cjs/components/pro-calendar-picker/pro-calendar-picker.js +141 -0
  19. package/dist/cjs/components/pro-calendar-picker/style.less +38 -0
  20. package/dist/cjs/components/pro-form/pro-form-item-calendar-picker.d.ts +1 -1
  21. package/dist/cjs/components/pro-form/pro-form-item-calendar-picker.js +12 -6
  22. package/dist/cjs/components/styles/global.less +6 -0
  23. package/dist/cjs/components/tree-picker/index.d.ts +1 -1
  24. package/dist/cjs/components/tree-picker/tree-picker.d.ts +1 -1
  25. package/dist/cjs/locales/base.d.ts +4 -0
  26. package/dist/cjs/locales/en-US.d.ts +4 -0
  27. package/dist/es/components/checkbox/checkbox.d.ts +1 -1
  28. package/dist/es/components/checkbox/index.d.ts +1 -1
  29. package/dist/es/components/index.d.ts +1 -0
  30. package/dist/es/components/index.js +1 -0
  31. package/dist/es/components/popup-page/popup-page.d.ts +1 -0
  32. package/dist/es/components/popup-page/popup-page.js +32 -11
  33. package/dist/es/components/popup-page/style.less +4 -0
  34. package/dist/es/components/pro-calendar/index.d.ts +10 -0
  35. package/dist/es/components/pro-calendar/index.js +8 -0
  36. package/dist/es/components/pro-calendar/pro-calendar.d.ts +37 -0
  37. package/dist/es/components/pro-calendar/pro-calendar.js +138 -0
  38. package/dist/es/components/pro-calendar/style.less +105 -0
  39. package/dist/es/components/pro-calendar/utils.d.ts +32 -0
  40. package/dist/es/components/pro-calendar/utils.js +138 -0
  41. package/dist/es/components/pro-calendar-picker/index.d.ts +3 -2
  42. package/dist/es/components/pro-calendar-picker/index.js +2 -1
  43. package/dist/es/components/pro-calendar-picker/pro-calendar-picker.d.ts +13 -0
  44. package/dist/es/components/pro-calendar-picker/pro-calendar-picker.js +124 -0
  45. package/dist/es/components/pro-calendar-picker/style.less +38 -0
  46. package/dist/es/components/pro-form/pro-form-item-calendar-picker.d.ts +1 -1
  47. package/dist/es/components/pro-form/pro-form-item-calendar-picker.js +8 -8
  48. package/dist/es/components/styles/global.less +6 -0
  49. package/dist/es/components/tree-picker/index.d.ts +1 -1
  50. package/dist/es/components/tree-picker/tree-picker.d.ts +1 -1
  51. package/dist/es/locales/base.d.ts +4 -0
  52. package/dist/es/locales/en-US.d.ts +4 -0
  53. package/dist/umd/antd-mobile-pro.min.css +1 -1
  54. package/dist/umd/antd-mobile-pro.min.js +1 -1
  55. package/package.json +3 -2
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import './style.less';
3
+ import { computeDays, formatProCalendarDateValues } from './utils';
4
+ declare const ProCalendar: import("react").ForwardRefExoticComponent<import("./pro-calendar").ProCalendarProps & import("react").RefAttributes<import("antd-mobile").CalendarRef>> & {
5
+ defaultFormat: typeof formatProCalendarDateValues;
6
+ computeDays: typeof computeDays;
7
+ };
8
+ export default ProCalendar;
9
+ export type { ProCalendarProps } from './pro-calendar';
10
+ export type { PickerDate as ProCalendarDate } from './utils';
@@ -0,0 +1,8 @@
1
+ import _ProCalendar from "./pro-calendar";
2
+ import "./style.less";
3
+ import { computeDays, formatProCalendarDateValues } from "./utils";
4
+ var ProCalendar = Object.assign(_ProCalendar, {
5
+ defaultFormat: formatProCalendarDateValues,
6
+ computeDays: computeDays
7
+ });
8
+ export default ProCalendar;
@@ -0,0 +1,37 @@
1
+ /// <reference types="react" />
2
+ import { CalendarProps, CalendarRef } from 'antd-mobile';
3
+ import { PickerDate } from './utils';
4
+ interface ProCalendarPropsInner {
5
+ /**
6
+ * 是否开启半日选择
7
+ * @default false
8
+ */
9
+ enableHalfDay?: boolean;
10
+ /**
11
+ * 是否开启晚上选择
12
+ * @default false
13
+ */
14
+ enableHalfDayNight?: boolean;
15
+ }
16
+ interface ProCalendarNormalProps {
17
+ selectionMode?: undefined;
18
+ value?: undefined;
19
+ defaultValue?: undefined;
20
+ onChange?: undefined;
21
+ }
22
+ interface ProCalendarSingleProps {
23
+ selectionMode: 'single';
24
+ value?: PickerDate | null;
25
+ defaultValue?: PickerDate | null;
26
+ onChange?: (value: PickerDate | null) => void;
27
+ }
28
+ interface ProCalendarRangeProps {
29
+ selectionMode?: 'range';
30
+ value?: PickerDate[] | null;
31
+ defaultValue?: PickerDate[] | null;
32
+ onChange?: (value: PickerDate[] | null) => void;
33
+ }
34
+ export type ProCalendarProps = ProCalendarPropsInner & (ProCalendarNormalProps | ProCalendarSingleProps | ProCalendarRangeProps) & Omit<CalendarProps, 'value' | 'onChange' | 'defaultValue' | 'selectionMode'>;
35
+ export declare function convertValueToRange(value: PickerDate | PickerDate[] | null): PickerDate[] | null;
36
+ declare const ProCalendar: import("react").ForwardRefExoticComponent<ProCalendarProps & import("react").RefAttributes<CalendarRef>>;
37
+ export default ProCalendar;
@@ -0,0 +1,138 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
5
+ var _excluded = ["enableHalfDay", "enableHalfDayNight", "weekStartsOn", "value", "onChange", "defaultValue", "selectionMode", "className"];
6
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
+ import { useControllableValue } from 'ahooks';
9
+ import { Calendar, Popover } from 'antd-mobile';
10
+ import classNames from 'classnames';
11
+ import dayjs from 'dayjs';
12
+ import { pickBy } from 'lodash';
13
+ import { cloneElement, forwardRef, useCallback, useMemo } from 'react';
14
+ import { cn } from "../../utils/bem";
15
+ import { HALF_DAY_PERIOD, HALF_DAY_PERIOD_NAMES, classesForDate, mergeDates } from "./utils";
16
+
17
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
18
+ import { jsx as _jsx } from "react/jsx-runtime";
19
+ var bem = cn('calendar');
20
+ export function convertValueToRange(value) {
21
+ if (!value) return null;
22
+ if (Array.isArray(value)) {
23
+ if (value.length <= 1) return value;
24
+ return value;
25
+ }
26
+ return [value];
27
+ }
28
+ var ProCalendarRaw = function ProCalendarRaw(_ref, ref) {
29
+ var _ref$enableHalfDay = _ref.enableHalfDay,
30
+ enableHalfDay = _ref$enableHalfDay === void 0 ? false : _ref$enableHalfDay,
31
+ _ref$enableHalfDayNig = _ref.enableHalfDayNight,
32
+ enableHalfDayNight = _ref$enableHalfDayNig === void 0 ? false : _ref$enableHalfDayNig,
33
+ _ref$weekStartsOn = _ref.weekStartsOn,
34
+ weekStartsOn = _ref$weekStartsOn === void 0 ? 'Monday' : _ref$weekStartsOn,
35
+ valueProp = _ref.value,
36
+ onChangeProp = _ref.onChange,
37
+ defaultValueProp = _ref.defaultValue,
38
+ selectionMode = _ref.selectionMode,
39
+ className = _ref.className,
40
+ props = _objectWithoutProperties(_ref, _excluded);
41
+ var _useControllableValue = useControllableValue(pickBy({
42
+ value: valueProp,
43
+ defaultValue: defaultValueProp,
44
+ onChange: onChangeProp
45
+ }, function (v) {
46
+ return v !== undefined;
47
+ })),
48
+ _useControllableValue2 = _slicedToArray(_useControllableValue, 2),
49
+ value = _useControllableValue2[0],
50
+ setValue_ = _useControllableValue2[1];
51
+ var rangeValue = useMemo(function () {
52
+ var _convertValueToRange;
53
+ return (_convertValueToRange = convertValueToRange(value)) !== null && _convertValueToRange !== void 0 ? _convertValueToRange : [];
54
+ }, [value]);
55
+ var setValue = useCallback(function (v) {
56
+ if (selectionMode === 'range' && enableHalfDay) {
57
+ setValue_(function (prev) {
58
+ if (!v) return v;
59
+ if (!prev || !Array.isArray(prev) || !prev[0] || prev.length >= 2) {
60
+ return [v];
61
+ }
62
+ return mergeDates([].concat(_toConsumableArray(prev), [v]));
63
+ });
64
+ return;
65
+ }
66
+ setValue_(v);
67
+ }, [enableHalfDay, selectionMode, setValue_]);
68
+ return /*#__PURE__*/_jsx(Calendar, _objectSpread({
69
+ ref: ref,
70
+ className: classNames(bem(), className),
71
+ weekStartsOn: weekStartsOn,
72
+ selectionMode: enableHalfDay ? undefined : selectionMode,
73
+ value: value,
74
+ onChange: function onChange(v) {
75
+ if (enableHalfDay) return;
76
+ setValue(v);
77
+ },
78
+ cellRender: function cellRender(oriNode, _ref2) {
79
+ var date = _ref2.date;
80
+ var dd = dayjs(date);
81
+ var isWeekend = dd.day() === 0 || dd.day() === 6;
82
+ if (!enableHalfDay) {
83
+ var _node = /*#__PURE__*/cloneElement(oriNode, {
84
+ className: classNames(oriNode.props.className, bem('cell', {
85
+ weekend: isWeekend
86
+ }))
87
+ });
88
+ return _node;
89
+ }
90
+ var nextValue = new Date(date);
91
+ var classes = classesForDate(date, rangeValue);
92
+ var node = /*#__PURE__*/cloneElement(oriNode, {
93
+ className: classNames(oriNode.props.className, bem('cell', classes)),
94
+ onClick: function onClick() {}
95
+ });
96
+ var acts = [HALF_DAY_PERIOD.AM, HALF_DAY_PERIOD.PM];
97
+ if (enableHalfDayNight) {
98
+ acts.push(HALF_DAY_PERIOD.NIGHT);
99
+ }
100
+ acts.unshift(HALF_DAY_PERIOD.ALL);
101
+ var actions = acts.map(function (act) {
102
+ return {
103
+ key: act,
104
+ text: HALF_DAY_PERIOD_NAMES[act]
105
+ };
106
+ });
107
+ return /*#__PURE__*/_jsx(Popover.Menu, {
108
+ actions: actions,
109
+ placement: "top",
110
+ className: bem('period-menu'),
111
+ onAction: function onAction(node) {
112
+ switch (node.key) {
113
+ case HALF_DAY_PERIOD.AM:
114
+ // 上午
115
+ nextValue.period = HALF_DAY_PERIOD.AM;
116
+ break;
117
+ case HALF_DAY_PERIOD.PM:
118
+ // 下午
119
+ nextValue.period = HALF_DAY_PERIOD.PM;
120
+ break;
121
+ case HALF_DAY_PERIOD.NIGHT:
122
+ // 晚上
123
+ nextValue.period = HALF_DAY_PERIOD.NIGHT;
124
+ break;
125
+ default:
126
+ // 全天
127
+ break;
128
+ }
129
+ setValue(nextValue);
130
+ },
131
+ trigger: "click",
132
+ children: node
133
+ });
134
+ }
135
+ }, props));
136
+ };
137
+ var ProCalendar = /*#__PURE__*/forwardRef(ProCalendarRaw);
138
+ export default ProCalendar;
@@ -0,0 +1,105 @@
1
+ @import '../styles/variable.less';
2
+
3
+ @class-prefix-pro-calendar:~ '@{adm-pro-prefix}-calendar';
4
+
5
+ .@{class-prefix-pro-calendar} {
6
+ .adm-calendar-cell {
7
+ &-selected:not(&-selected-begin):not(&-selected-end) {
8
+ background-color: rgba(22, 119, 255, 0.1);
9
+ color: var(--adm-color-text);
10
+ }
11
+ }
12
+ .adm-calendar-cell.adm-calendar-cell-disabled {
13
+ color: var(--adm-color-border);
14
+ }
15
+ .adm-calendar-cell.adm-calendar-cell-today {
16
+ color: var(--adm-color-text);
17
+ border: 1px solid var(--adm-color-primary);
18
+ border-radius: 4px;
19
+ box-sizing: border-box;
20
+ }
21
+
22
+ &__cell {
23
+ position: relative;
24
+ overflow: hidden;
25
+ & > div {
26
+ position: relative;
27
+ }
28
+ // &&--weekend {
29
+ // color: var(--adm-color-weak);
30
+ // }
31
+ &&--allday,
32
+ &&--allday.adm-calendar-cell-today {
33
+ background-color: var(--adm-color-primary);
34
+ color: var(--adm-color-white);
35
+ }
36
+ &--begin {
37
+ border-top-left-radius: 4px;
38
+ border-bottom-left-radius: 4px;
39
+ }
40
+ &--end {
41
+ border-top-right-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ }
44
+ &--am::before,
45
+ &--pm::before,
46
+ &--night::before {
47
+ content: '';
48
+ position: absolute;
49
+ left: 0;
50
+ right: 0;
51
+ background-color: var(--adm-color-primary);
52
+ }
53
+
54
+ &--am {
55
+ &::before {
56
+ top: 0;
57
+ height: 50%;
58
+ // border-top-left-radius: 4px;
59
+ // border-top-right-radius: 4px;
60
+ }
61
+ }
62
+ &--pm {
63
+ &::before {
64
+ bottom: 0;
65
+ height: 50%;
66
+ // border-bottom-left-radius: 4px;
67
+ // border-bottom-right-radius: 4px;
68
+ }
69
+ }
70
+ &--night {
71
+ &::before {
72
+ bottom: 0;
73
+ height: 6px;
74
+ // border-bottom-left-radius: 4px;
75
+ // border-bottom-right-radius: 4px;
76
+ }
77
+ }
78
+ &--cover {
79
+ background-color: rgba(22, 119, 255, 0.1);
80
+ }
81
+ }
82
+
83
+ &__period-menu {
84
+ .adm-popover-menu-list {
85
+ min-width: 80px;
86
+ }
87
+ .adm-popover-menu-item {
88
+ padding: 0;
89
+ }
90
+ .adm-popover-menu-item-text {
91
+ padding: 10px 20px 10px 20px;
92
+ text-align: center;
93
+ }
94
+ }
95
+ }
96
+
97
+ html[data-prefers-color-scheme='dark'] {
98
+ .@{class-prefix-pro-calendar} {
99
+ &__period-menu {
100
+ --background: rgba(0, 0, 0, 0.75);
101
+ --adm-color-text: #ffffff;
102
+ backdrop-filter: blur(10px);
103
+ }
104
+ }
105
+ }
@@ -0,0 +1,32 @@
1
+ export declare enum HALF_DAY_PERIOD {
2
+ ALL = 0,
3
+ AM = 1,
4
+ PM = 2,
5
+ NIGHT = 3
6
+ }
7
+ export declare const HALF_DAY_PERIOD_NAMES: {
8
+ readonly 0: "全天";
9
+ readonly 1: "上午";
10
+ readonly 2: "下午";
11
+ readonly 3: "晚上";
12
+ };
13
+ export type PickerDate = Date & {
14
+ period?: HALF_DAY_PERIOD;
15
+ };
16
+ /**
17
+ * 将选择的起止日期合并为有效的日期范围
18
+ */
19
+ export declare function mergeDates(dates: PickerDate[]): PickerDate[];
20
+ export declare function classesForDate(date: Date, rangeValue: PickerDate[]): {
21
+ am: boolean;
22
+ pm: boolean;
23
+ night: boolean;
24
+ allday: boolean;
25
+ begin: boolean;
26
+ end: boolean;
27
+ cover: boolean;
28
+ weekend: boolean;
29
+ };
30
+ export declare function formatProCalendarDate(date?: PickerDate): string;
31
+ export declare function formatProCalendarDateValues(dates?: PickerDate | PickerDate[] | null): string;
32
+ export declare function computeDays(value: PickerDate | PickerDate[] | null | undefined): number;
@@ -0,0 +1,138 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
+ import dayjs from 'dayjs';
4
+ export var HALF_DAY_PERIOD = /*#__PURE__*/function (HALF_DAY_PERIOD) {
5
+ HALF_DAY_PERIOD[HALF_DAY_PERIOD["ALL"] = 0] = "ALL";
6
+ HALF_DAY_PERIOD[HALF_DAY_PERIOD["AM"] = 1] = "AM";
7
+ HALF_DAY_PERIOD[HALF_DAY_PERIOD["PM"] = 2] = "PM";
8
+ HALF_DAY_PERIOD[HALF_DAY_PERIOD["NIGHT"] = 3] = "NIGHT";
9
+ return HALF_DAY_PERIOD;
10
+ }({});
11
+ export var HALF_DAY_PERIOD_NAMES = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, HALF_DAY_PERIOD.ALL, '全天'), HALF_DAY_PERIOD.AM, '上午'), HALF_DAY_PERIOD.PM, '下午'), HALF_DAY_PERIOD.NIGHT, '晚上');
12
+ /**
13
+ * 将选择的起止日期合并为有效的日期范围
14
+ */
15
+ export function mergeDates(dates) {
16
+ var sortedDates = dates.slice().sort(function (a, b) {
17
+ return dayjs(a).diff(b, 'day');
18
+ });
19
+ var _sortedDates = _slicedToArray(sortedDates, 2),
20
+ begin = _sortedDates[0],
21
+ end = _sortedDates[1];
22
+ var beginDay = dayjs(begin);
23
+ if (beginDay.isSame(end, 'day')) {
24
+ // 起始和结束在同一天
25
+
26
+ if (!begin.period || !end.period) {
27
+ // 若其中一个为整天,合并为整天
28
+ begin.period = undefined;
29
+ return [end];
30
+ }
31
+ if (begin.period === end.period) {
32
+ // 若时段一样,只取其中一个
33
+ return [begin];
34
+ }
35
+ if ([begin.period, end.period].includes(HALF_DAY_PERIOD.AM)) {
36
+ // 若时段不一样,其中一个为上午,合并为整天(另外一个一定为下午或晚上)
37
+ begin.period = undefined;
38
+ return [begin];
39
+ }
40
+ return sortedDates;
41
+ }
42
+
43
+ // 不在同一天
44
+ if (begin.period === HALF_DAY_PERIOD.AM) {
45
+ begin.period = undefined;
46
+ }
47
+ if (end.period && end.period >= HALF_DAY_PERIOD.PM) {
48
+ end.period = undefined;
49
+ }
50
+ return [begin, end];
51
+ }
52
+ export function classesForDate(date, rangeValue) {
53
+ var dd = dayjs(date);
54
+ var _rangeValue = _slicedToArray(rangeValue, 2),
55
+ begin = _rangeValue[0],
56
+ end = _rangeValue[1];
57
+ var isAm = false;
58
+ var isPm = false;
59
+ var isNight = false;
60
+ var isAllDay = false;
61
+ var isCover = false;
62
+ var isBegin = false;
63
+ var isEnd = false;
64
+ if (begin) {
65
+ if (dd.isSame(begin, 'day')) {
66
+ isAm = begin.period === HALF_DAY_PERIOD.AM;
67
+ isPm = begin.period === HALF_DAY_PERIOD.PM;
68
+ isNight = begin.period === HALF_DAY_PERIOD.NIGHT;
69
+ isAllDay = !begin.period;
70
+ isBegin = true;
71
+ if (!end) {
72
+ isEnd = true;
73
+ } else if (!begin.period || begin.period === HALF_DAY_PERIOD.AM) {
74
+ isCover = true;
75
+ }
76
+ } else if (end && dd.isSame(end, 'day')) {
77
+ isAm = end.period === HALF_DAY_PERIOD.AM;
78
+ isPm = end.period === HALF_DAY_PERIOD.PM;
79
+ isNight = end.period === HALF_DAY_PERIOD.NIGHT;
80
+ isAllDay = !end.period;
81
+ isEnd = true;
82
+ isCover = !!end.period && end.period >= HALF_DAY_PERIOD.PM;
83
+ } else if (end) {
84
+ isCover = dd.isAfter(begin, 'day') && dd.isBefore(end, 'day');
85
+ }
86
+ }
87
+ return {
88
+ am: isAm,
89
+ pm: isPm,
90
+ night: isNight,
91
+ allday: isAllDay,
92
+ begin: isBegin,
93
+ end: isEnd,
94
+ cover: isCover,
95
+ weekend: dd.day() === 0 || dd.day() === 6
96
+ };
97
+ }
98
+ export function formatProCalendarDate(date) {
99
+ if (!date) {
100
+ return '';
101
+ }
102
+ var dateStr = dayjs(date).format('YYYY-MM-DD');
103
+ var periodStr = !date.period ? '' : HALF_DAY_PERIOD_NAMES[date.period];
104
+ return [dateStr, periodStr].filter(function (v) {
105
+ return !!v;
106
+ }).join(' ');
107
+ }
108
+ export function formatProCalendarDateValues(dates) {
109
+ if (!dates) {
110
+ return '';
111
+ }
112
+ var arr = Array.isArray(dates) ? dates : [dates];
113
+ return arr.map(formatProCalendarDate).join(' ~ ');
114
+ }
115
+ export function computeDays(value) {
116
+ if (!value) {
117
+ return 0;
118
+ }
119
+ var rangeValue = Array.isArray(value) ? value : [value];
120
+ var _rangeValue2 = _slicedToArray(rangeValue, 2),
121
+ begin = _rangeValue2[0],
122
+ end = _rangeValue2[1];
123
+ if (!end) {
124
+ if (!begin.period) return 1;
125
+ if (begin.period === HALF_DAY_PERIOD.NIGHT) return 0;
126
+ return 0.5;
127
+ }
128
+ var days = dayjs(end).diff(dayjs(begin), 'day') + 1;
129
+ if (begin.period === HALF_DAY_PERIOD.PM) {
130
+ days -= 0.5;
131
+ } else if (begin.period === HALF_DAY_PERIOD.NIGHT) {
132
+ days -= 1;
133
+ }
134
+ if (end.period === HALF_DAY_PERIOD.AM) {
135
+ days -= 0.5;
136
+ }
137
+ return days;
138
+ }
@@ -1,3 +1,4 @@
1
- import ProCalendarPicker from './picker';
1
+ import ProCalendarPicker from './pro-calendar-picker';
2
+ import './style.less';
2
3
  export default ProCalendarPicker;
3
- export type { ProCalendarPickerActions, ProCalendarPickerProps, } from './picker';
4
+ export type { ProCalendarPickerActions, ProCalendarPickerProps, } from './pro-calendar-picker';
@@ -1,2 +1,3 @@
1
- import ProCalendarPicker from "./picker";
1
+ import ProCalendarPicker from "./pro-calendar-picker";
2
+ import "./style.less";
2
3
  export default ProCalendarPicker;
@@ -0,0 +1,13 @@
1
+ import { CalendarRef } from 'antd-mobile';
2
+ import { PickerActions } from 'antd-mobile/es/components/picker';
3
+ import { ReactNode } from 'react';
4
+ import { ProCalendarDate, ProCalendarProps } from '../pro-calendar';
5
+ export interface ProCalendarPickerActions extends Partial<CalendarRef>, PickerActions {
6
+ }
7
+ export type ProCalendarPickerValue = ProCalendarDate | ProCalendarDate[] | null | undefined;
8
+ export type ProCalendarPickerProps = ProCalendarProps & {
9
+ allowClear?: boolean;
10
+ children?: (value: ProCalendarPickerValue, action: ProCalendarPickerActions) => ReactNode;
11
+ };
12
+ declare const ProCalendarPicker: import("react").ForwardRefExoticComponent<ProCalendarPickerProps & import("react").RefAttributes<ProCalendarPickerActions>>;
13
+ export default ProCalendarPicker;
@@ -0,0 +1,124 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
+ var _excluded = ["children", "allowClear", "selectionMode", "value", "onChange"];
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
+ import { useControllableValue } from 'ahooks';
8
+ import { Button, Popup, SafeArea } from 'antd-mobile';
9
+ import { CloseOutline } from 'antd-mobile-icons';
10
+ import { pickBy } from 'lodash';
11
+ import { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
12
+ import { cn } from "../../utils/bem";
13
+ import ProCalendar from "../pro-calendar";
14
+ import { jsx as _jsx } from "react/jsx-runtime";
15
+ import { jsxs as _jsxs } from "react/jsx-runtime";
16
+ import { Fragment as _Fragment } from "react/jsx-runtime";
17
+ var bem = cn('calendar-picker');
18
+ var ProCalendarPickerRaw = function ProCalendarPickerRaw(_ref, ref) {
19
+ var children = _ref.children,
20
+ _ref$allowClear = _ref.allowClear,
21
+ allowClear = _ref$allowClear === void 0 ? false : _ref$allowClear,
22
+ _ref$selectionMode = _ref.selectionMode,
23
+ selectionMode = _ref$selectionMode === void 0 ? 'single' : _ref$selectionMode,
24
+ valueProp = _ref.value,
25
+ onChange = _ref.onChange,
26
+ props = _objectWithoutProperties(_ref, _excluded);
27
+ var _useControllableValue = useControllableValue(pickBy({
28
+ value: valueProp,
29
+ onChange: onChange
30
+ })),
31
+ _useControllableValue2 = _slicedToArray(_useControllableValue, 2),
32
+ value = _useControllableValue2[0],
33
+ setValue = _useControllableValue2[1];
34
+ var _useState = useState(false),
35
+ _useState2 = _slicedToArray(_useState, 2),
36
+ visible = _useState2[0],
37
+ setVisible = _useState2[1];
38
+ var _useState3 = useState(valueProp),
39
+ _useState4 = _slicedToArray(_useState3, 2),
40
+ tempValue = _useState4[0],
41
+ setTempValue = _useState4[1];
42
+ useEffect(function () {
43
+ if (visible) setTempValue(value !== null && value !== void 0 ? value : null);
44
+ }, [value, visible]);
45
+ var calendarRef = useRef(null);
46
+ var action = useMemo(function () {
47
+ return _objectSpread(_objectSpread({}, calendarRef.current), {}, {
48
+ open: function open() {
49
+ setVisible(true);
50
+ },
51
+ close: function close() {
52
+ setVisible(false);
53
+ },
54
+ toggle: function toggle() {
55
+ setVisible(function (v) {
56
+ return !v;
57
+ });
58
+ }
59
+ });
60
+ }, []);
61
+ useImperativeHandle(ref, function () {
62
+ return action;
63
+ });
64
+ return /*#__PURE__*/_jsxs(_Fragment, {
65
+ children: [children === null || children === void 0 ? void 0 : children(value, action), /*#__PURE__*/_jsxs(Popup, {
66
+ visible: visible,
67
+ onClose: function onClose() {
68
+ return setVisible(false);
69
+ },
70
+ className: bem('popup'),
71
+ destroyOnClose: true,
72
+ children: [/*#__PURE__*/_jsxs("div", {
73
+ className: bem('popup-head'),
74
+ children: [allowClear && /*#__PURE__*/_jsx(Button, {
75
+ color: "default",
76
+ fill: "none",
77
+ size: "small",
78
+ className: bem('popup-head__clear'),
79
+ onClick: function onClick() {
80
+ setValue(undefined);
81
+ setVisible(false);
82
+ },
83
+ children: "\u6E05\u9664"
84
+ }), /*#__PURE__*/_jsx("div", {
85
+ className: bem('popup-head__title'),
86
+ children: "\u65E5\u671F\u9009\u62E9"
87
+ }), /*#__PURE__*/_jsx(Button, {
88
+ color: "default",
89
+ fill: "none",
90
+ size: "small",
91
+ className: bem('popup-head__close'),
92
+ onClick: function onClick() {
93
+ setVisible(false);
94
+ },
95
+ children: /*#__PURE__*/_jsx(CloseOutline, {})
96
+ })]
97
+ }), /*#__PURE__*/_jsx(ProCalendar, _objectSpread(_objectSpread({
98
+ selectionMode: selectionMode,
99
+ value: tempValue !== null && tempValue !== void 0 ? tempValue : null,
100
+ onChange: function onChange(v) {
101
+ setTempValue(v);
102
+ }
103
+ }, props), {}, {
104
+ ref: calendarRef
105
+ })), /*#__PURE__*/_jsxs("div", {
106
+ className: bem('popup-footer'),
107
+ children: [/*#__PURE__*/_jsx(Button, {
108
+ block: true,
109
+ color: "primary",
110
+ onClick: function onClick() {
111
+ console.log('setValue', tempValue);
112
+ setValue(tempValue);
113
+ setVisible(false);
114
+ },
115
+ children: "\u786E\u5B9A"
116
+ }), /*#__PURE__*/_jsx(SafeArea, {
117
+ position: "bottom"
118
+ })]
119
+ })]
120
+ })]
121
+ });
122
+ };
123
+ var ProCalendarPicker = /*#__PURE__*/forwardRef(ProCalendarPickerRaw);
124
+ export default ProCalendarPicker;
@@ -0,0 +1,38 @@
1
+ @import '../styles/variable.less';
2
+
3
+ @class-prefix-pro-calendar-picker:~ '@{adm-pro-prefix}-calendar-picker';
4
+ .@{class-prefix-pro-calendar-picker} {
5
+ &__popup-head {
6
+ font-size: var(--adm-font-size-9);
7
+ color: var(--adm-color-text);
8
+ position: relative;
9
+ border-bottom: 1px solid var(--adm-color-border);
10
+ margin-bottom: 10px;
11
+ & &__clear {
12
+ position: absolute;
13
+ left: 6px;
14
+ top: 0;
15
+ bottom: 0;
16
+ margin: auto;
17
+ padding: 6px 12px;
18
+ height: 30px;
19
+ }
20
+ &__title {
21
+ text-align: center;
22
+ line-height: 45px;
23
+ }
24
+ & &__close {
25
+ position: absolute;
26
+ right: 6px;
27
+ top: 0;
28
+ bottom: 0;
29
+ margin: auto;
30
+ padding: 6px 12px;
31
+ height: 30px;
32
+ }
33
+ }
34
+ &__popup-footer {
35
+ padding: var(--adm-padding-m) var(--adm-padding-l);
36
+ border-top: 1px solid var(--adm-color-border);
37
+ }
38
+ }
@@ -1,6 +1,6 @@
1
1
  import { FC } from 'react';
2
2
  import { ProCalendarPickerProps } from '../pro-calendar-picker';
3
3
  import { ProFormItemFieldProps } from './pro-form-item';
4
- export type ProFormCalendarPickerProps = ProFormItemFieldProps<ProCalendarPickerProps> & Pick<ProCalendarPickerProps, 'mode' | 'min' | 'max' | 'format'>;
4
+ export type ProFormCalendarPickerProps = ProFormItemFieldProps<ProCalendarPickerProps> & Pick<ProCalendarPickerProps, 'selectionMode' | 'min' | 'max' | 'enableHalfDay'>;
5
5
  declare const ProFormCalendarPicker: FC<ProFormCalendarPickerProps>;
6
6
  export default ProFormCalendarPicker;