@nutui/nutui-react-taro 2.7.9 → 2.7.10

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 (104) hide show
  1. package/CHANGELOG.md +13 -4
  2. package/dist/esm/Address.js +1 -1
  3. package/dist/esm/Audio.js +1 -1
  4. package/dist/esm/AvatarCropper.js +1 -1
  5. package/dist/esm/BackTop.js +1 -1
  6. package/dist/esm/Badge.js +1 -1
  7. package/dist/esm/Calendar/style/index.js +3 -1
  8. package/dist/esm/Calendar/style/style.css +1 -1
  9. package/dist/esm/Calendar.js +1 -1
  10. package/dist/esm/CalendarCard.js +1 -1
  11. package/dist/esm/CalendarItem.js +1 -1
  12. package/dist/esm/Cascader.js +1 -1
  13. package/dist/esm/ConfigProvider.js +2 -2
  14. package/dist/esm/DatePicker.js +1 -1
  15. package/dist/esm/Dialog.js +1 -1
  16. package/dist/esm/Ellipsis.js +1 -1
  17. package/dist/esm/FixedNav.js +1 -1
  18. package/dist/esm/InfiniteLoading.js +1 -1
  19. package/dist/esm/Input.js +1 -1
  20. package/dist/esm/NoticeBar.js +1 -1
  21. package/dist/esm/NumberKeyboard.js +1 -1
  22. package/dist/esm/Pagination.js +1 -1
  23. package/dist/esm/Picker.js +1 -1
  24. package/dist/esm/Popover.js +1 -1
  25. package/dist/esm/Progress.js +1 -1
  26. package/dist/esm/PullToRefresh.js +1 -1
  27. package/dist/esm/Range.js +1 -1
  28. package/dist/esm/SearchBar.js +1 -1
  29. package/dist/esm/ShortPassword.js +1 -1
  30. package/dist/esm/Tabbar.js +1 -1
  31. package/dist/esm/TabbarItem.js +1 -1
  32. package/dist/esm/Table.js +1 -1
  33. package/dist/esm/Tabs.js +1 -1
  34. package/dist/esm/TextArea.js +1 -1
  35. package/dist/esm/TimeSelect.js +1 -1
  36. package/dist/esm/Tour.js +1 -1
  37. package/dist/esm/Uploader.js +1 -1
  38. package/dist/esm/WaterMark.js +1 -1
  39. package/dist/esm/{address.taro-Ck0ZmxRg.js → address.taro-BM2ZWeTm.js} +2 -2
  40. package/dist/esm/{audio.taro-DtIUjg89.js → audio.taro-C9DxpSXx.js} +2 -2
  41. package/dist/esm/{avatarcropper.taro-5JSFH7Q9.js → avatarcropper.taro-BsbRSHbo.js} +1 -1
  42. package/dist/esm/{backtop.taro-D3Lo3jFO.js → backtop.taro-Cj60ZYba.js} +1 -1
  43. package/dist/esm/{badge.taro-B42_7q8v.js → badge.taro-W8s89KAj.js} +1 -1
  44. package/dist/esm/calendar.taro-C-5Lmq9i.js +317 -0
  45. package/dist/esm/{calendarcard.taro-BiOnui_b.js → calendarcard.taro-Cp3yzc6h.js} +2 -2
  46. package/dist/esm/{calendaritem.taro-DveeC4_t.js → calendaritem.taro-B0QA0q4N.js} +208 -15
  47. package/dist/esm/{cascader.taro-DUJvcGw0.js → cascader.taro-Djw9IdKW.js} +2 -2
  48. package/dist/esm/{configprovider.taro-C3WyeHSO.js → configprovider.taro-DpK4IiCE.js} +4 -0
  49. package/dist/esm/date-C7eJqrqk.js +74 -0
  50. package/dist/esm/{datepicker.taro-Dwh8sKhJ.js → datepicker.taro-CPSTcVSz.js} +2 -2
  51. package/dist/esm/{dialog.taro-yjDaaRHA.js → dialog.taro-1Vukbvap.js} +1 -1
  52. package/dist/esm/{ellipsis.taro-K9VJCTL6.js → ellipsis.taro-rMWnB7Vp.js} +1 -1
  53. package/dist/esm/{fixednav.taro-BodErnYy.js → fixednav.taro-DlVXnggt.js} +1 -1
  54. package/dist/esm/{infiniteloading.taro-DzIrZvc0.js → infiniteloading.taro-6r-XMUlU.js} +1 -1
  55. package/dist/esm/{input.taro-CA9ZpM9a.js → input.taro-s1Zw62KR.js} +1 -1
  56. package/dist/esm/{noticebar.taro-B0qm66Cu.js → noticebar.taro-DjmvFSpp.js} +1 -1
  57. package/dist/esm/{numberkeyboard.taro-BvVO_MyJ.js → numberkeyboard.taro-blGUntGo.js} +1 -1
  58. package/dist/esm/nutui-react.es.js +35 -35
  59. package/dist/esm/{pagination.taro-BSwytb0-.js → pagination.taro-V57qqxwc.js} +1 -1
  60. package/dist/esm/{picker.taro-B7EE52qf.js → picker.taro-Ctc0Wt4S.js} +1 -1
  61. package/dist/esm/{popover.taro-C9qhPJCb.js → popover.taro-Da7xRN6D.js} +1 -1
  62. package/dist/esm/{progress.taro-CaIUT9Uo.js → progress.taro-cveY9Y_I.js} +1 -1
  63. package/dist/esm/{pulltorefresh.taro-DAFv7upo.js → pulltorefresh.taro-KKNiGe1Q.js} +1 -1
  64. package/dist/esm/{range.taro-Bbs4JcXp.js → range.taro-C5SuX_2b.js} +1 -1
  65. package/dist/esm/{searchbar.taro-LaO2Xr2t.js → searchbar.taro-BgwUn_Ma.js} +1 -1
  66. package/dist/esm/{shortpassword.taro-CUnXqjab.js → shortpassword.taro--atvsdZp.js} +1 -1
  67. package/dist/esm/{tabbar.taro-BiQDgZQF.js → tabbar.taro-BQpwulp5.js} +1 -1
  68. package/dist/esm/{tabbaritem.taro-BiIVucQz.js → tabbaritem.taro-BPe2bsMQ.js} +1 -1
  69. package/dist/esm/{table.taro-1nFkDxbh.js → table.taro-H3kjB4kV.js} +1 -1
  70. package/dist/esm/{tabs.taro-sp_DNWis.js → tabs.taro-Cb7JS_Gz.js} +6 -16
  71. package/dist/esm/{textarea.taro-PsaohYay.js → textarea.taro-CGMI5QNw.js} +1 -1
  72. package/dist/esm/{timeselect.taro-FIl91wiO.js → timeselect.taro-3Sc_hERv.js} +1 -1
  73. package/dist/esm/{tour.taro-BidQx8Fg.js → tour.taro-xqFUxSBB.js} +1 -1
  74. package/dist/esm/{uploader.taro-BBJsHrew.js → uploader.taro-DAWwySrs.js} +2 -2
  75. package/dist/esm/{watermark.taro-CbO7mKFD.js → watermark.taro-DuJQHymA.js} +1 -1
  76. package/dist/locales/base.d.ts +4 -0
  77. package/dist/locales/base.js +1 -1
  78. package/dist/locales/en-US.js +5 -1
  79. package/dist/locales/id-ID.js +5 -1
  80. package/dist/locales/tr-TR.js +5 -1
  81. package/dist/locales/zh-CN.js +5 -1
  82. package/dist/locales/zh-TW.js +5 -1
  83. package/dist/locales/zh-UG.js +5 -1
  84. package/dist/nutui.react.es.js +585 -131
  85. package/dist/nutui.react.umd.js +585 -131
  86. package/dist/packages/calendar/calendar.scss +24 -0
  87. package/dist/packages/calendar/calendarviewmode.scss +181 -0
  88. package/dist/style.css +1 -1
  89. package/dist/styles/variables.scss +4 -0
  90. package/dist/types/locales/base.d.ts +4 -0
  91. package/dist/types/packages/calendar/calendar.d.ts +4 -0
  92. package/dist/types/packages/calendar/calendar.taro.d.ts +4 -0
  93. package/dist/types/packages/calendar/calendarviewmodeitem.d.ts +20 -0
  94. package/dist/types/packages/calendar/calendarviewmodeitem.taro.d.ts +20 -0
  95. package/dist/types/packages/calendar/types.d.ts +27 -0
  96. package/dist/types/packages/calendar/utils.d.ts +40 -0
  97. package/dist/types/packages/calendaritem/calendaritem.d.ts +1 -0
  98. package/dist/types/packages/calendaritem/calendaritem.taro.d.ts +1 -0
  99. package/dist/types/packages/calendaritem/utils.d.ts +17 -0
  100. package/dist/types/packages/configprovider/types.d.ts +1 -1
  101. package/dist/types/utils/date.d.ts +0 -17
  102. package/package.json +1 -1
  103. package/dist/esm/calendar.taro-CUDVpJBa.js +0 -47
  104. package/dist/esm/date-BmUWlDuN.js +0 -147
@@ -0,0 +1,317 @@
1
+ import React__default, { useState, useRef, useEffect } from "react";
2
+ import { P as Popup } from "./popup.taro-JynjcLCn.js";
3
+ import { s as splitDate, g as getPreMonths, a as getMonths, b as getPreQuarters, c as getQuarters, d as getNextQuarters, C as CalendarItem } from "./calendaritem.taro-B0QA0q4N.js";
4
+ import classNames from "classnames";
5
+ import Taro from "@tarojs/taro";
6
+ import { View, ScrollView } from "@tarojs/components";
7
+ import { C as ComponentDefaults } from "./typings-DV9RBfhj.js";
8
+ import { g as getDateString } from "./date-C7eJqrqk.js";
9
+ import { r as requestAniFrame } from "./raf-Di10dXPS.js";
10
+ import { useConfig } from "./ConfigProvider.js";
11
+ import { u as usePropsValue } from "./use-props-value-SH9krhkx.js";
12
+ import { u as useConfig$1 } from "./configprovider.taro-DpK4IiCE.js";
13
+ const YearMonthPanelHeight = 231;
14
+ const YearQuarterPanelHeight = 103;
15
+ const defaultProps$1 = Object.assign(Object.assign({}, ComponentDefaults), { type: "single", viewMode: "month", title: "", startDate: getDateString(0), endDate: getDateString(365), showToday: true, showTitle: true, scrollAnimation: true, renderDay: void 0, onItemClick: () => {
16
+ } });
17
+ const CalendarViewModeItem = React__default.forwardRef((props) => {
18
+ const { locale } = useConfig();
19
+ const { style, className, viewMode, title, value, defaultValue, startDate, endDate, showTitle, renderDay, onItemClick } = Object.assign(Object.assign({}, defaultProps$1), props);
20
+ const classPrefix = "nut-calendar-viewmode";
21
+ const [panelDate, setPanelDate] = useState({
22
+ months: [
23
+ {
24
+ year: (/* @__PURE__ */ new Date()).getFullYear(),
25
+ months: [],
26
+ cssHeight: 0,
27
+ scrollTop: 0,
28
+ currYear: false
29
+ }
30
+ ],
31
+ quarters: [
32
+ {
33
+ year: (/* @__PURE__ */ new Date()).getFullYear(),
34
+ quarters: [],
35
+ cssHeight: 0,
36
+ scrollTop: 0,
37
+ currYear: false
38
+ }
39
+ ]
40
+ });
41
+ const [scrollTop, setScrollTop] = useState(0);
42
+ const propStartDate = startDate || getDateString(0);
43
+ const propEndDate = endDate || getDateString(365);
44
+ const startDates = splitDate(propStartDate);
45
+ const endDates = splitDate(propEndDate);
46
+ const [innerValue, setInnerValue] = usePropsValue({
47
+ value,
48
+ defaultValue,
49
+ finalValue: [],
50
+ onChange: (val) => {
51
+ }
52
+ });
53
+ const monthsRef = useRef(null);
54
+ const monthsPanel = useRef(null);
55
+ const viewAreaRef = useRef(null);
56
+ const getMonthsPanel = () => {
57
+ return monthsPanel.current;
58
+ };
59
+ const getMonthsRef = () => {
60
+ return monthsRef.current;
61
+ };
62
+ const requestAniFrameFunc = (viewMode2) => {
63
+ switch (viewMode2) {
64
+ case "month":
65
+ {
66
+ const lastItem = panelDate.months[panelDate.months.length - 1];
67
+ const containerHeight = lastItem.cssHeight + lastItem.scrollTop;
68
+ const currentIndex = panelDate.months.findIndex((item) => item.currYear === true);
69
+ requestAniFrame(() => {
70
+ var _a;
71
+ if (monthsRef && monthsPanel && viewAreaRef) {
72
+ getMonthsRef().clientHeight;
73
+ getMonthsPanel().style.height = `${containerHeight}px`;
74
+ const currTop = ((_a = panelDate.months[currentIndex]) === null || _a === void 0 ? void 0 : _a.scrollTop) || 0;
75
+ getMonthsRef().scrollTop = currTop;
76
+ setScrollTop(currTop);
77
+ }
78
+ });
79
+ }
80
+ break;
81
+ case "quarter":
82
+ {
83
+ const lastItem = panelDate.quarters[panelDate.quarters.length - 1];
84
+ const containerHeight = lastItem.cssHeight + lastItem.scrollTop;
85
+ const currentIndex = panelDate.quarters.findIndex((item) => item.currYear === true);
86
+ requestAniFrame(() => {
87
+ var _a;
88
+ if (monthsRef && monthsPanel && viewAreaRef) {
89
+ getMonthsRef().clientHeight;
90
+ getMonthsPanel().style.height = `${containerHeight}px`;
91
+ const currTop = ((_a = panelDate.quarters[currentIndex]) === null || _a === void 0 ? void 0 : _a.scrollTop) || 0;
92
+ getMonthsRef().scrollTop = currTop;
93
+ setScrollTop(currTop);
94
+ }
95
+ });
96
+ }
97
+ break;
98
+ }
99
+ };
100
+ const isCurrYear = (year) => {
101
+ return innerValue.split("-")[0] === `${year}`;
102
+ };
103
+ const getMonthsData = () => {
104
+ const startYear = Number(startDates[0]);
105
+ const startMonth = Number(startDates[1]);
106
+ const endYear = Number(endDates[0]);
107
+ const endMonth = Number(endDates[1]);
108
+ const panelData = [];
109
+ const addPanelData = (year, months, scrollTop2) => {
110
+ panelData.push({
111
+ year,
112
+ months,
113
+ scrollTop: scrollTop2,
114
+ cssHeight: YearMonthPanelHeight,
115
+ currYear: isCurrYear(year)
116
+ });
117
+ };
118
+ if (startYear === endYear) {
119
+ addPanelData(startYear, [
120
+ ...getPreMonths("prev", startYear, startMonth),
121
+ ...getMonths("curr", startYear, startMonth, endMonth),
122
+ ...getMonths("next", endYear, endMonth + 1)
123
+ ], 0);
124
+ } else {
125
+ let scrollTop2 = panelData.length * YearMonthPanelHeight;
126
+ const startMonths = [
127
+ ...getPreMonths("prev", startYear, startMonth),
128
+ ...getMonths("curr", startYear, startMonth)
129
+ ];
130
+ addPanelData(startYear, startMonths, scrollTop2);
131
+ for (let i = startYear + 1; i < endYear; i++) {
132
+ scrollTop2 = panelData.length * YearMonthPanelHeight;
133
+ const midMonths = [...getMonths("curr", i, 1)];
134
+ addPanelData(i, midMonths, scrollTop2);
135
+ }
136
+ const lastMonths = [
137
+ ...getPreMonths("curr", endYear, endMonth + 1),
138
+ ...getMonths("next", endYear, endMonth + 1)
139
+ ];
140
+ scrollTop2 = panelData.length * YearMonthPanelHeight;
141
+ addPanelData(endYear, lastMonths, scrollTop2);
142
+ }
143
+ return panelData;
144
+ };
145
+ const getQuartersData = () => {
146
+ const startYear = Number(startDates[0]);
147
+ const startMonth = Number(startDates[1]);
148
+ const endYear = Number(endDates[0]);
149
+ const endMonth = Number(endDates[1]);
150
+ const panelData = [];
151
+ const addPanelData = (year, quarters, scrollTop2) => {
152
+ panelData.push({
153
+ year,
154
+ quarters,
155
+ scrollTop: scrollTop2,
156
+ cssHeight: YearQuarterPanelHeight,
157
+ currYear: isCurrYear(year)
158
+ });
159
+ };
160
+ if (startYear === endYear) {
161
+ const quarters = [
162
+ ...getPreQuarters("prev", startYear, startMonth),
163
+ ...getQuarters("curr", startYear, startMonth, endMonth),
164
+ ...getNextQuarters("next", endYear, endMonth)
165
+ ];
166
+ addPanelData(startYear, quarters, 0);
167
+ } else {
168
+ let scrollTop2 = panelData.length * YearQuarterPanelHeight;
169
+ const startQuarters = [
170
+ ...getPreQuarters("prev", startYear, startMonth),
171
+ ...getQuarters("curr", startYear, startMonth)
172
+ ];
173
+ addPanelData(startYear, startQuarters, scrollTop2);
174
+ for (let i = startYear + 1; i < endYear; i++) {
175
+ scrollTop2 = panelData.length * YearQuarterPanelHeight;
176
+ const midQuarters = [...getQuarters("curr", i, 1)];
177
+ addPanelData(i, midQuarters, scrollTop2);
178
+ }
179
+ const lastQuarters = [
180
+ ...getQuarters("curr", endYear, 1, endMonth),
181
+ ...getNextQuarters("next", endYear, endMonth)
182
+ ];
183
+ scrollTop2 = panelData.length * YearQuarterPanelHeight;
184
+ addPanelData(endYear, lastQuarters, scrollTop2);
185
+ }
186
+ return panelData;
187
+ };
188
+ const initData = () => {
189
+ const data = (
190
+ // eslint-disable-next-line no-nested-ternary
191
+ viewMode === "month" ? getMonthsData() : viewMode === "quarter" ? getQuartersData() : null
192
+ );
193
+ setPanelDate(Object.assign(Object.assign({}, panelDate), { [`${viewMode}s`]: data }));
194
+ };
195
+ useEffect(() => {
196
+ requestAniFrameFunc(viewMode);
197
+ }, [panelDate]);
198
+ useEffect(() => {
199
+ initData();
200
+ }, []);
201
+ const monthsViewScroll = (e) => {
202
+ const scrollTop2 = e.target.scrollTop;
203
+ Taro.getEnv() === "WEB" && setScrollTop(scrollTop2);
204
+ };
205
+ const handleItemClick = (viewMode2, item) => {
206
+ if (item.type !== "curr")
207
+ return;
208
+ const val = viewMode2 === "month" ? item.yearAndMonth : item.yearAndQuarter;
209
+ setInnerValue(val);
210
+ onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(val);
211
+ };
212
+ const isDisable = (item) => {
213
+ return item.type === "prev" || item.type === "next";
214
+ };
215
+ const isActive = (item) => {
216
+ const val = viewMode === "month" ? item.yearAndMonth : item.yearAndQuarter;
217
+ return val === innerValue;
218
+ };
219
+ const getClasses = (item) => {
220
+ if (isDisable(item)) {
221
+ return ["disabled"];
222
+ }
223
+ const res = [];
224
+ if (item.type === "curr") {
225
+ if (isActive(item)) {
226
+ res.push("active");
227
+ }
228
+ }
229
+ return res;
230
+ };
231
+ const classes = classNames(classPrefix, className);
232
+ const renderHeader = () => {
233
+ return showTitle && React__default.createElement(
234
+ View,
235
+ { className: classNames({
236
+ [`${classPrefix}-header`]: true
237
+ }) },
238
+ React__default.createElement(View, { className: `${classPrefix}-title` }, title)
239
+ );
240
+ };
241
+ const renderItem = (item, index) => {
242
+ const units = {
243
+ month: locale.calendaritem.month,
244
+ quarter: locale.calendaritem.quarter
245
+ };
246
+ return React__default.createElement(
247
+ "div",
248
+ { className: classNames(`${classPrefix}-item`, item.type, getClasses(item)), onClick: () => handleItemClick(viewMode, item), key: index },
249
+ React__default.createElement("div", { className: `${classPrefix}-item-${item.type}` }, renderDay ? renderDay(item) : `${item[viewMode]}${units[viewMode]}`)
250
+ );
251
+ };
252
+ const renderPanel = () => {
253
+ return React__default.createElement(React__default.Fragment, null, panelDate[`${viewMode}s`].map((item, key) => React__default.createElement(
254
+ "div",
255
+ { className: `${classPrefix}-panel`, key },
256
+ React__default.createElement("div", { className: `${classPrefix}-panel-title` }, item.year),
257
+ React__default.createElement("div", { className: `${classPrefix}-content` }, item[`${viewMode}s`].map((item2, i) => renderItem(item2, i)))
258
+ )));
259
+ };
260
+ const renderContent = () => {
261
+ return React__default.createElement(
262
+ ScrollView,
263
+ { scrollTop, scrollY: true, className: `${classPrefix}-content`, onScroll: monthsViewScroll, ref: monthsRef },
264
+ React__default.createElement(
265
+ "div",
266
+ { className: `${classPrefix}-pannel`, ref: monthsPanel },
267
+ React__default.createElement("div", { ref: viewAreaRef }, renderPanel())
268
+ )
269
+ );
270
+ };
271
+ return React__default.createElement(
272
+ "div",
273
+ { className: classes, style },
274
+ renderHeader(),
275
+ renderContent()
276
+ );
277
+ });
278
+ CalendarViewModeItem.displayName = "NutCalendarViewModeItem";
279
+ const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { type: "single", viewMode: "day", autoBackfill: false, popup: true, visible: false, title: "", value: "", defaultValue: "", startDate: getDateString(0), endDate: getDateString(365), showToday: true, startText: "", endText: "", confirmText: "", showTitle: true, showSubTitle: true, showMonthNumber: false, scrollAnimation: true, firstDayOfWeek: 0, disableDate: (date) => false, renderHeaderButtons: void 0, renderDay: void 0, renderDayTop: void 0, renderDayBottom: void 0, onClose: () => {
280
+ }, onConfirm: (param) => {
281
+ }, onDayClick: (data) => {
282
+ }, onItemClick: () => {
283
+ }, onPageChange: (param) => {
284
+ } });
285
+ const Calendar = React__default.forwardRef((props, ref) => {
286
+ const { locale } = useConfig$1();
287
+ const { style, className, children, popup, visible, type, viewMode, autoBackfill, title, value, defaultValue, startDate, endDate, showToday, startText, endText, confirmText, showTitle, showSubTitle, showMonthNumber, scrollAnimation, firstDayOfWeek, closeIcon, disableDate, renderHeaderButtons, renderBottomButton, renderDay, renderDayTop, renderDayBottom, onClose, onConfirm, onDayClick, onItemClick, onPageChange } = Object.assign(Object.assign({}, defaultProps), props);
288
+ const calendarRef = useRef(null);
289
+ const close = () => {
290
+ onClose && onClose();
291
+ };
292
+ const choose = (param) => {
293
+ close();
294
+ onConfirm && onConfirm(param);
295
+ };
296
+ const closePopup = () => {
297
+ close();
298
+ };
299
+ const scrollToDate = (date) => {
300
+ var _a;
301
+ (_a = calendarRef.current) === null || _a === void 0 ? void 0 : _a.scrollToDate(date);
302
+ };
303
+ const yearMonthChange = (param) => {
304
+ onPageChange && onPageChange(param);
305
+ };
306
+ React__default.useImperativeHandle(ref, () => ({
307
+ scrollToDate
308
+ }));
309
+ const renderItem = () => {
310
+ return React__default.createElement(React__default.Fragment, null, viewMode !== "day" ? React__default.createElement(CalendarViewModeItem, { ref: calendarRef, style, className, type, viewMode, title: title || locale.calendaritem.title, value, defaultValue, startDate, endDate, showTitle, scrollAnimation, renderDay, onItemClick }) : React__default.createElement(CalendarItem, { ref: calendarRef, style, className, children, type, autoBackfill, popup, title: title || locale.calendaritem.title, defaultValue, startDate, endDate, showToday, startText: startText || locale.calendaritem.start, endText: endText || locale.calendaritem.end, confirmText: confirmText || locale.calendaritem.confirm, showTitle, showSubTitle, showMonthNumber, scrollAnimation, firstDayOfWeek, disableDate, renderHeaderButtons, renderBottomButton, renderDay, renderDayTop, renderDayBottom, onConfirm: choose, onDayClick, onPageChange: yearMonthChange }));
311
+ };
312
+ return React__default.createElement(React__default.Fragment, null, popup && viewMode === "day" ? React__default.createElement(Popup, { className: "nut-calendar-popup", visible, position: "bottom", round: true, closeable: true, closeIcon, destroyOnClose: true, onOverlayClick: closePopup, onCloseIconClick: closePopup, style: { height: "83%" } }, renderItem()) : renderItem());
313
+ });
314
+ Calendar.displayName = "NutCalendar";
315
+ export {
316
+ Calendar as C
317
+ };
@@ -2,8 +2,8 @@ import React__default, { useState, useEffect } from "react";
2
2
  import classNames from "classnames";
3
3
  import { View } from "@tarojs/components";
4
4
  import { C as ComponentDefaults } from "./typings-DV9RBfhj.js";
5
- import { m as getMonthPreDay, f as getMonthDays } from "./date-BmUWlDuN.js";
6
- import { u as useConfig } from "./configprovider.taro-C3WyeHSO.js";
5
+ import { c as getMonthPreDay, b as getMonthDays } from "./date-C7eJqrqk.js";
6
+ import { u as useConfig } from "./configprovider.taro-DpK4IiCE.js";
7
7
  import { u as usePropsValue } from "./use-props-value-SH9krhkx.js";
8
8
  const left = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNNi42MDUgOS40OWEuNzcxLjc3MSAwIDAgMSAwLS45OGwzLjYtNC4zNzJhLjc3MS43NzEgMCAwIDEgMS4xOS45ODFMOC4yIDlsMy4xOTcgMy44ODFhLjc3MS43NzEgMCAxIDEtMS4xOTEuOThsLTMuNi00LjM3eiIvPjwvc3ZnPg==";
9
9
  const right = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDE4IDE4Ij48cGF0aCBkPSJNMTEuMzk2IDkuNDlhLjc3MS43NzEgMCAwIDAgMC0uOThsLTMuNi00LjM3MmEuNzcxLjc3MSAwIDAgMC0xLjE5MS45ODFMOS44IDlsLTMuMTk2IDMuODgxYS43NzEuNzcxIDAgMCAwIDEuMTkuOThsMy42LTQuMzd6Ii8+PC9zdmc+";
@@ -3,10 +3,109 @@ import classNames from "classnames";
3
3
  import { ScrollView } from "@tarojs/components";
4
4
  import Taro, { nextTick } from "@tarojs/taro";
5
5
  import { C as ComponentDefaults } from "./typings-DV9RBfhj.js";
6
- import { i as isEqual, d as date2Str, a as getNumTwoBit, g as getDateString, c as compareDate, b as getPreMonthDates, e as getDaysStatus, f as getMonthDays, h as getCurrMonthData, j as getWeekDate, k as getWhatDay, l as formatResultDate } from "./date-BmUWlDuN.js";
6
+ import { a as getNumTwoBit, b as getMonthDays, c as getMonthPreDay, d as date2Str, e as getWhatDay, i as isEqual, g as getDateString, f as compareDate } from "./date-C7eJqrqk.js";
7
7
  import { r as requestAniFrame } from "./raf-Di10dXPS.js";
8
- import { u as useConfig } from "./configprovider.taro-C3WyeHSO.js";
8
+ import { u as useConfig } from "./configprovider.taro-DpK4IiCE.js";
9
9
  import { u as usePropsValue } from "./use-props-value-SH9krhkx.js";
10
+ const getCurrMonthData = (type, year, month) => {
11
+ {
12
+ month === 12 && (year += 1);
13
+ month = month === 12 ? 1 : ++month;
14
+ }
15
+ return [year, getNumTwoBit(month), getMonthDays(String(year), String(month))];
16
+ };
17
+ const getDaysStatus = (type, year, month) => {
18
+ let days = getMonthDays(`${year}`, `${month}`);
19
+ return Array.from(Array(days), (v, k) => {
20
+ return {
21
+ day: k + 1,
22
+ type,
23
+ year,
24
+ month
25
+ };
26
+ });
27
+ };
28
+ const getPreMonthDates = (type, year, month, firstDayOfWeek) => {
29
+ let preMonth = +month - 1;
30
+ let preYear = year;
31
+ if (preMonth <= 0) {
32
+ preMonth = 12;
33
+ preYear += 1;
34
+ }
35
+ let days = getMonthPreDay(+year, +month);
36
+ days -= firstDayOfWeek;
37
+ if (days >= 7) {
38
+ days -= 7;
39
+ }
40
+ const preDates = getMonthDays(`${preYear}`, `${preMonth}`);
41
+ const months = Array.from(Array(preDates), (v, k) => {
42
+ return {
43
+ day: k + 1,
44
+ type,
45
+ preYear,
46
+ preMonth
47
+ };
48
+ });
49
+ return months.slice(preDates - days);
50
+ };
51
+ const getWeekDate = (year, month, date, firstDayOfWeek = 0) => {
52
+ const dateNow = new Date(Number(year), parseInt(month) - 1, Number(date));
53
+ const nowTime = dateNow.getTime();
54
+ let day = dateNow.getDay();
55
+ if (firstDayOfWeek === 0) {
56
+ const oneDayTime2 = 24 * 60 * 60 * 1e3;
57
+ const SundayTime2 = nowTime - day * oneDayTime2;
58
+ const SaturdayTime = nowTime + (6 - day) * oneDayTime2;
59
+ const sunday2 = date2Str(new Date(SundayTime2));
60
+ const saturday = date2Str(new Date(SaturdayTime));
61
+ return [sunday2, saturday];
62
+ }
63
+ day = day === 0 ? 7 : day;
64
+ const oneDayTime = 24 * 60 * 60 * 1e3;
65
+ const MondayTime = nowTime - (day - 1) * oneDayTime;
66
+ const SundayTime = nowTime + (7 - day) * oneDayTime;
67
+ const monday = date2Str(new Date(MondayTime));
68
+ const sunday = date2Str(new Date(SundayTime));
69
+ return [monday, sunday];
70
+ };
71
+ const formatResultDate = (date) => {
72
+ const [year, month, day] = [...date.split("-")];
73
+ const formatterDay = getNumTwoBit(Number(day));
74
+ const formatterDate = `${year}-${month}-${day}`;
75
+ const dayOfWeek = getWhatDay(Number(year), Number(month), Number(day));
76
+ return [year, month, formatterDay, formatterDate, dayOfWeek];
77
+ };
78
+ const getWeekOfYearByYMD = (year, month, date, firstDayOfWeek = 0) => {
79
+ const MILLISECONDS_PER_DAY = 864e5;
80
+ const dateNow = new Date(year, month - 1, date);
81
+ const dateFirst = new Date(year, 0, 1);
82
+ const dayOfYear = Math.round((dateNow.valueOf() - dateFirst.valueOf()) / MILLISECONDS_PER_DAY);
83
+ const DAYS_OF_FIRST_WEEK = 3;
84
+ let dayOfWeek = dateNow.getDay();
85
+ let remainder = 6 - dayOfWeek - DAYS_OF_FIRST_WEEK;
86
+ if (firstDayOfWeek !== 0) {
87
+ dayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
88
+ remainder = 7 - dayOfWeek - DAYS_OF_FIRST_WEEK;
89
+ }
90
+ let weekNo = Math.ceil((dayOfYear + remainder + 1) / 7);
91
+ if (weekNo === 0) {
92
+ weekNo = getWeekOfYearByYMD(year - 1, 12, 31, firstDayOfWeek);
93
+ } else if (weekNo === 53) {
94
+ const remainder2 = 7 - dayOfWeek - DAYS_OF_FIRST_WEEK;
95
+ weekNo = remainder2 > 0 ? 1 : weekNo;
96
+ }
97
+ return weekNo;
98
+ };
99
+ const getWeekNosOfYear = (year, month, firstDayOfWeek) => {
100
+ const startWeekNo = getWeekOfYearByYMD(year, month, 1, firstDayOfWeek);
101
+ const endWeekNo = getWeekOfYearByYMD(year, month, getMonthDays(`${year}`, `${month}`), firstDayOfWeek);
102
+ return Array.from({
103
+ length: (endWeekNo === 1 ? 53 : endWeekNo) - (startWeekNo === 53 || startWeekNo === 52 ? 0 : startWeekNo) + 1
104
+ }, (_, i) => {
105
+ const lastIndex = (endWeekNo === 1 ? 53 : endWeekNo) - startWeekNo;
106
+ return `${endWeekNo === 1 && i === lastIndex ? 1 : ((startWeekNo === 53 || startWeekNo === 52) && i !== 0 ? 0 : startWeekNo) + i}`;
107
+ });
108
+ };
10
109
  const splitDate = (date) => {
11
110
  const split = date.indexOf("-") !== -1 ? "-" : "/";
12
111
  return date.split(split);
@@ -35,14 +134,96 @@ const isEnd = (day, days) => {
35
134
  const isStartAndEnd = (days) => {
36
135
  return days.length >= 2 && isEqual(days[0], days[1]);
37
136
  };
38
- const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { type: "single", autoBackfill: false, popup: true, title: "", startDate: getDateString(0), endDate: getDateString(365), showToday: true, startText: "", endText: "", confirmText: "", showTitle: true, showSubTitle: true, scrollAnimation: true, firstDayOfWeek: 0, disableDate: (date) => false, renderHeaderButtons: void 0, renderDay: void 0, renderDayTop: void 0, renderDayBottom: void 0, onConfirm: (data) => {
137
+ const getPreMonths = (type, year, month) => {
138
+ const preMonth = +month - 1;
139
+ const months = Array.from(Array(preMonth), (v, k) => {
140
+ return {
141
+ year,
142
+ month: k + 1,
143
+ yearAndMonth: formatMonth(year, k + 1),
144
+ type
145
+ };
146
+ });
147
+ return months;
148
+ };
149
+ const getMonths = (type, year, month, endMonth = 12) => {
150
+ const nextMonth = endMonth - month + 1;
151
+ const months = Array.from(Array(nextMonth), (v, k) => {
152
+ return {
153
+ year,
154
+ month: k + month,
155
+ yearAndMonth: formatMonth(year, k + month),
156
+ type
157
+ };
158
+ });
159
+ return months;
160
+ };
161
+ const formatMonth = (year, month) => {
162
+ return `${year}-${String(month).padStart(2, "0")}`;
163
+ };
164
+ const formatQuarter = (year, quarter) => {
165
+ return `${year}-Q${quarter}`;
166
+ };
167
+ const getQuarter = (month) => {
168
+ if (month < 1 || month > 12) {
169
+ throw new Error("月份必须在 1 到 12 之间");
170
+ }
171
+ const quarter = Math.floor((month - 1) / 3) + 1;
172
+ return quarter;
173
+ };
174
+ const getQuarters = (type, year, month, endMonth = 12) => {
175
+ const quarters = [];
176
+ const startIndex = month;
177
+ const endIndex = endMonth;
178
+ for (let index = startIndex; index <= endIndex; index += 3) {
179
+ const quarter = getQuarter(index);
180
+ quarters.push({
181
+ year,
182
+ quarter,
183
+ yearAndQuarter: formatQuarter(year, quarter),
184
+ type
185
+ });
186
+ }
187
+ return quarters;
188
+ };
189
+ const getPreQuarters = (type, year, month) => {
190
+ const quarters = [];
191
+ const startIndex = 1;
192
+ const endIndex = month - 3;
193
+ for (let index = startIndex; index <= endIndex; index += 3) {
194
+ const quarter = getQuarter(index);
195
+ quarters.push({
196
+ year,
197
+ quarter,
198
+ yearAndQuarter: formatQuarter(year, quarter),
199
+ type
200
+ });
201
+ }
202
+ return quarters;
203
+ };
204
+ const getNextQuarters = (type, year, month, endMonth = 12) => {
205
+ const quarters = [];
206
+ const startIndex = month + 3;
207
+ const endIndex = endMonth;
208
+ for (let index = startIndex; index <= endIndex; index += 3) {
209
+ const quarter = getQuarter(index);
210
+ quarters.push({
211
+ year,
212
+ quarter,
213
+ yearAndQuarter: formatQuarter(year, quarter),
214
+ type
215
+ });
216
+ }
217
+ return quarters;
218
+ };
219
+ const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { type: "single", autoBackfill: false, popup: true, title: "", startDate: getDateString(0), endDate: getDateString(365), showToday: true, startText: "", endText: "", confirmText: "", showTitle: true, showSubTitle: true, showMonthNumber: false, scrollAnimation: true, firstDayOfWeek: 0, disableDate: (date) => false, renderHeaderButtons: void 0, renderDay: void 0, renderDayTop: void 0, renderDayBottom: void 0, onConfirm: (data) => {
39
220
  }, onUpdate: () => {
40
221
  }, onDayClick: (data) => {
41
222
  }, onPageChange: (data) => {
42
223
  } });
43
224
  const CalendarItem = React__default.forwardRef((props, ref) => {
44
225
  const { locale } = useConfig();
45
- const { style, className, children, popup, type, autoBackfill, title, value, defaultValue, startDate, endDate, showToday, startText, endText, confirmText, showTitle, showSubTitle, scrollAnimation, firstDayOfWeek, disableDate, renderHeaderButtons, renderDay, renderDayTop, renderDayBottom, renderBottomButton, onConfirm, onUpdate, onDayClick, onPageChange } = Object.assign(Object.assign({}, defaultProps), props);
226
+ const { style, className, children, popup, type, autoBackfill, title, value, defaultValue, startDate, endDate, showToday, startText, endText, confirmText, showTitle, showSubTitle, showMonthNumber, scrollAnimation, firstDayOfWeek, disableDate, renderHeaderButtons, renderBottomButton, renderDay, renderDayTop, renderDayBottom, onConfirm, onUpdate, onDayClick, onPageChange } = Object.assign(Object.assign({}, defaultProps), props);
46
227
  const classPrefix = "nut-calendar";
47
228
  const dayPrefix = "nut-calendar-day";
48
229
  const weekdays = locale.calendaritem.weekdays;
@@ -69,7 +250,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
69
250
  if (defaultValue || Array.isArray(defaultValue) && defaultValue.length > 0) {
70
251
  return type !== "single" ? [...defaultValue] : defaultValue;
71
252
  }
72
- return void 0;
253
+ return type === "single" ? "" : [];
73
254
  };
74
255
  const [currentDate, setCurrentDate] = usePropsValue({
75
256
  value,
@@ -104,6 +285,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
104
285
  const monthInfo = {
105
286
  curData: date,
106
287
  title: monthTitle(y, m),
288
+ weekNo: getWeekNosOfYear(y, m, firstDayOfWeek),
107
289
  monthData: days,
108
290
  cssHeight,
109
291
  scrollTop: scrollTop2
@@ -120,7 +302,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
120
302
  if (currentMonthsData.title === yearMonthTitle)
121
303
  return;
122
304
  const [year, month] = currentMonthsData.curData;
123
- onPageChange && onPageChange([year, month, `${year}-${month}`]);
305
+ onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange([year, month, `${year}-${month}`]);
124
306
  setYearMonthTitle(currentMonthsData.title);
125
307
  };
126
308
  const setDefaultRange = (monthNum, current) => {
@@ -316,7 +498,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
316
498
  initData();
317
499
  };
318
500
  useEffect(() => {
319
- setCurrentDate(resetDefaultValue() || []);
501
+ setCurrentDate(resetDefaultValue());
320
502
  }, [defaultValue]);
321
503
  useEffect(() => {
322
504
  popup && resetRender();
@@ -489,7 +671,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
489
671
  }
490
672
  }
491
673
  if (!isFirst) {
492
- onDayClick && onDayClick(state.currDateArray);
674
+ onDayClick === null || onDayClick === void 0 ? void 0 : onDayClick(state.currDateArray);
493
675
  if (autoBackfill || !popup) {
494
676
  confirm();
495
677
  }
@@ -499,9 +681,9 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
499
681
  const confirm = () => {
500
682
  if (type === "range" && state.currDateArray.length === 2 || type !== "range") {
501
683
  const chooseData = state.currDateArray.slice(0);
502
- onConfirm && onConfirm(chooseData);
684
+ onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(chooseData);
503
685
  if (popup) {
504
- onUpdate && onUpdate();
686
+ onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate();
505
687
  }
506
688
  }
507
689
  };
@@ -526,7 +708,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
526
708
  showTitle && React__default.createElement("div", { className: `${classPrefix}-title` }, title || locale.calendaritem.title),
527
709
  renderHeaderButtons && React__default.createElement("div", { className: `${classPrefix}-header-buttons` }, renderHeaderButtons()),
528
710
  showSubTitle && React__default.createElement("div", { className: `${classPrefix}-sub-title` }, yearMonthTitle),
529
- React__default.createElement("div", { className: `${classPrefix}-weeks`, ref: weeksPanel }, weeks.map((item) => React__default.createElement("div", { className: `${classPrefix}-week-item`, key: item }, item)))
711
+ React__default.createElement("div", { className: `${classPrefix}-weeks ${showMonthNumber ? `${classPrefix}-weeks-shrink` : ""}`, ref: weeksPanel }, weeks.map((item) => React__default.createElement("div", { className: `${classPrefix}-week-item`, key: item }, item)))
530
712
  );
531
713
  };
532
714
  const renderItem = (month, day, index) => {
@@ -539,7 +721,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
539
721
  React__default.createElement("div", { className: `${classPrefix}-day-day` }, renderDay ? renderDay(day) : day.day),
540
722
  !startTip && renderDayTop && React__default.createElement("div", { className: `${classPrefix}-day-info-top` }, renderDayTop(day)),
541
723
  noStartNorEnd && renderDayBottom && React__default.createElement("div", { className: `${classPrefix}-day-info-bottom` }, renderDayBottom(day)),
542
- noStartNorEnd && isCurrDay(month, day.day) && !renderDayBottom && showToday && React__default.createElement("div", { className: `${classPrefix}-day-info-curr` }, locale.calendaritem.today),
724
+ noStartNorEnd && !renderDayBottom && showToday && isCurrDay(month, day.day) && React__default.createElement("div", { className: `${classPrefix}-day-info-curr` }, locale.calendaritem.today),
543
725
  startTip && React__default.createElement("div", { className: classNames("nut-calendar-day-info", {
544
726
  "nut-calendar-day-info-top": isStartAndEnd(currentDate)
545
727
  }) }, startText || locale.calendaritem.start),
@@ -551,7 +733,12 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
551
733
  "div",
552
734
  { className: `${classPrefix}-month`, key },
553
735
  React__default.createElement("div", { className: `${classPrefix}-month-title` }, month.title),
554
- React__default.createElement("div", { className: `${classPrefix}-days` }, month.monthData.map((day, i) => renderItem(month, day, i)))
736
+ React__default.createElement(
737
+ "div",
738
+ { className: `${showMonthNumber ? "shrink" : ""}` },
739
+ showMonthNumber && React__default.createElement("div", { className: `${classPrefix}-weeknumber` }, month.weekNo.map((item, index) => React__default.createElement("div", { className: `${classPrefix}-weeknumber-index`, key: index }, item))),
740
+ React__default.createElement("div", { className: `${classPrefix}-days` }, month.monthData.map((day, i) => renderItem(month, day, i)))
741
+ )
555
742
  );
556
743
  };
557
744
  const renderContent = () => {
@@ -561,7 +748,7 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
561
748
  React__default.createElement(
562
749
  "div",
563
750
  { className: `${classPrefix}-pannel`, ref: monthsPanel },
564
- React__default.createElement("div", { className: "viewArea", ref: viewAreaRef, style: { transform: `translateY(${translateY}px)` } }, monthsData.slice(monthDefaultRange[0], monthDefaultRange[1]).map((month, key) => {
751
+ React__default.createElement("div", { ref: viewAreaRef, style: { transform: `translateY(${translateY}px)` } }, monthsData.slice(monthDefaultRange[0], monthDefaultRange[1]).map((month, key) => {
565
752
  return renderPanel(month, key);
566
753
  }))
567
754
  )
@@ -585,5 +772,11 @@ const CalendarItem = React__default.forwardRef((props, ref) => {
585
772
  });
586
773
  CalendarItem.displayName = "NutCalendarItem";
587
774
  export {
588
- CalendarItem as C
775
+ CalendarItem as C,
776
+ getMonths as a,
777
+ getPreQuarters as b,
778
+ getQuarters as c,
779
+ getNextQuarters as d,
780
+ getPreMonths as g,
781
+ splitDate as s
589
782
  };
@@ -4,10 +4,10 @@ import classNames from "classnames";
4
4
  import { Loading, Checklist } from "@nutui/icons-react-taro";
5
5
  import { ScrollView } from "@tarojs/components";
6
6
  import { P as Popup } from "./popup.taro-JynjcLCn.js";
7
- import { T as Tabs } from "./tabs.taro-sp_DNWis.js";
7
+ import { T as Tabs } from "./tabs.taro-Cb7JS_Gz.js";
8
8
  import { C as ComponentDefaults } from "./typings-DV9RBfhj.js";
9
9
  import { u as usePropsValue } from "./use-props-value-SH9krhkx.js";
10
- import { u as useConfig } from "./configprovider.taro-C3WyeHSO.js";
10
+ import { u as useConfig } from "./configprovider.taro-DpK4IiCE.js";
11
11
  const formatTree = (tree, parent, config) => tree.map((node) => {
12
12
  const { value: valueKey = "value", text: textKey = "text", children: childrenKey = "children" } = config;
13
13
  const _a = node, _b = valueKey, value = _a[_b], _c = textKey, text = _a[_c], _d = childrenKey, children = _a[_d], others = __rest(_a, [typeof _b === "symbol" ? _b : _b + "", typeof _c === "symbol" ? _c : _c + "", typeof _d === "symbol" ? _d : _d + ""]);
@@ -48,6 +48,10 @@ const zhCN = {
48
48
  start: "开始",
49
49
  confirm: "确认",
50
50
  title: "日历选择",
51
+ week: "周",
52
+ month: "月",
53
+ year: "年",
54
+ quarter: "季度",
51
55
  monthTitle: (year, month) => `${year}年${Number(month) < 10 ? `0${Number(month)}` : month}月`,
52
56
  today: "今天",
53
57
  loadPreviousMonth: "加载上一个月",