@bifrostui/react 1.4.5 → 1.4.7-beta.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 (231) hide show
  1. package/dist/Calendar/Calendar.js +5 -1
  2. package/dist/Calendar/Calendar.types.d.ts +5 -0
  3. package/dist/CitySelector/CitySelectorCore.js +3 -3
  4. package/dist/Collapse/Collapse.css +0 -1
  5. package/dist/Collapse/Collapse.d.ts +1 -1
  6. package/dist/Collapse/Collapse.js +11 -8
  7. package/dist/Collapse/Collapse.miniapp.d.ts +5 -0
  8. package/dist/Collapse/Collapse.miniapp.js +177 -0
  9. package/dist/CollapsePanel/CollapsePanel.css +4 -2
  10. package/dist/DatePicker/DatePicker.d.ts +4 -0
  11. package/dist/DatePicker/DatePicker.js +335 -0
  12. package/dist/DatePicker/DatePicker.types.d.ts +43 -0
  13. package/dist/DatePicker/DatePicker.types.js +35 -0
  14. package/dist/DatePicker/index.d.ts +2 -0
  15. package/dist/DatePicker/index.js +41 -0
  16. package/dist/DesktopDatePicker/DesktopDatePicker.d.ts +5 -0
  17. package/dist/DesktopDatePicker/DesktopDatePicker.js +280 -0
  18. package/dist/DesktopDatePicker/DesktopDatePicker.types.d.ts +163 -0
  19. package/dist/DesktopDatePicker/DesktopDatePicker.types.js +15 -0
  20. package/dist/DesktopDatePicker/deskTopPickerContainer.css +100 -0
  21. package/dist/DesktopDatePicker/index.css +61 -0
  22. package/dist/DesktopDatePicker/index.d.ts +2 -0
  23. package/dist/DesktopDatePicker/index.js +41 -0
  24. package/dist/DesktopDatePicker/useGetDatePickerContent.d.ts +6 -0
  25. package/dist/DesktopDatePicker/useGetDatePickerContent.js +343 -0
  26. package/dist/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +5 -0
  27. package/dist/DesktopDateTimePicker/DesktopDateTimePicker.js +322 -0
  28. package/dist/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +163 -0
  29. package/dist/DesktopDateTimePicker/DesktopDateTimePicker.types.js +15 -0
  30. package/dist/DesktopDateTimePicker/index.css +66 -0
  31. package/dist/DesktopDateTimePicker/index.d.ts +2 -0
  32. package/dist/DesktopDateTimePicker/index.js +41 -0
  33. package/dist/DesktopPicker/DesktopPicker.d.ts +5 -0
  34. package/dist/DesktopPicker/DesktopPicker.js +238 -0
  35. package/dist/DesktopPicker/DesktopPicker.types.d.ts +57 -0
  36. package/dist/DesktopPicker/DesktopPicker.types.js +15 -0
  37. package/dist/DesktopPicker/index.css +37 -0
  38. package/dist/DesktopPicker/index.d.ts +2 -0
  39. package/dist/DesktopPicker/index.js +41 -0
  40. package/dist/DesktopPicker/utils/calcAfterMounted.d.ts +2 -0
  41. package/dist/{Tabs/utils/bound.js → DesktopPicker/utils/calcAfterMounted.js} +7 -14
  42. package/dist/DesktopPicker/utils/calcAfterMounted.miniapp.d.ts +2 -0
  43. package/dist/DesktopPicker/utils/calcAfterMounted.miniapp.js +38 -0
  44. package/dist/DesktopTimePicker/DesktopTimePicker.d.ts +5 -0
  45. package/dist/DesktopTimePicker/DesktopTimePicker.js +288 -0
  46. package/dist/DesktopTimePicker/DesktopTimePicker.types.d.ts +182 -0
  47. package/dist/DesktopTimePicker/DesktopTimePicker.types.js +15 -0
  48. package/dist/DesktopTimePicker/DesktopTimePickerList.d.ts +4 -0
  49. package/dist/DesktopTimePicker/DesktopTimePickerList.js +111 -0
  50. package/dist/DesktopTimePicker/index.css +170 -0
  51. package/dist/DesktopTimePicker/index.d.ts +2 -0
  52. package/dist/DesktopTimePicker/index.js +41 -0
  53. package/dist/DesktopTimePicker/useGetTimePickerContent.d.ts +6 -0
  54. package/dist/DesktopTimePicker/useGetTimePickerContent.js +246 -0
  55. package/dist/DesktopTimePicker/utils/scrollUtil.d.ts +2 -0
  56. package/dist/DesktopTimePicker/utils/scrollUtil.js +27 -0
  57. package/dist/DesktopTimePicker/utils/scrollUtil.miniapp.d.ts +2 -0
  58. package/dist/DesktopTimePicker/utils/scrollUtil.miniapp.js +51 -0
  59. package/dist/DesktopTimePicker/utils/utils.d.ts +28 -0
  60. package/dist/DesktopTimePicker/utils/utils.js +408 -0
  61. package/dist/Dialog/FunctionalDialog.js +1 -1
  62. package/dist/ItemSelector/ItemSelector.css +120 -0
  63. package/dist/ItemSelector/ItemSelector.d.ts +4 -0
  64. package/dist/ItemSelector/ItemSelector.js +84 -0
  65. package/dist/ItemSelector/ItemSelector.miniapp.d.ts +5 -0
  66. package/dist/ItemSelector/ItemSelector.miniapp.js +125 -0
  67. package/dist/ItemSelector/ItemSelector.types.d.ts +40 -0
  68. package/dist/ItemSelector/ItemSelector.types.js +15 -0
  69. package/dist/ItemSelector/ItemSelectorCore.d.ts +5 -0
  70. package/dist/ItemSelector/ItemSelectorCore.js +217 -0
  71. package/dist/ItemSelector/Selector/index.css +11 -0
  72. package/dist/ItemSelector/Selector/index.d.ts +9 -0
  73. package/dist/ItemSelector/Selector/index.js +48 -0
  74. package/dist/ItemSelector/index.d.ts +2 -0
  75. package/dist/ItemSelector/index.js +41 -0
  76. package/dist/ItemSelector/miniapp.css +4 -0
  77. package/dist/Modal/Modal.miniapp.d.ts +1 -1
  78. package/dist/Picker/Picker.css +5 -0
  79. package/dist/Picker/Picker.js +27 -5
  80. package/dist/Picker/Picker.types.d.ts +15 -2
  81. package/dist/Picker/PickerPanel.css +4 -0
  82. package/dist/Picker/PickerPanel.js +7 -6
  83. package/dist/Popover/Popover.js +70 -27
  84. package/dist/Portal/Portal.miniapp.js +7 -4
  85. package/dist/ScrollView/ScrollView.js +24 -11
  86. package/dist/ScrollView/ScrollView.types.d.ts +0 -1
  87. package/dist/Select/Select.css +1 -4
  88. package/dist/Select/Select.js +63 -40
  89. package/dist/Slider/Slider.js +13 -5
  90. package/dist/SwipeAction/SwipeAction.css +79 -0
  91. package/dist/SwipeAction/SwipeAction.d.ts +5 -0
  92. package/dist/SwipeAction/SwipeAction.js +349 -0
  93. package/dist/SwipeAction/SwipeAction.types.d.ts +83 -0
  94. package/dist/SwipeAction/SwipeAction.types.js +39 -0
  95. package/dist/SwipeAction/SwipeActionContext.d.ts +4 -0
  96. package/dist/SwipeAction/SwipeActionContext.js +30 -0
  97. package/dist/SwipeAction/SwipeActionItem.css +31 -0
  98. package/dist/SwipeAction/SwipeActionItem.d.ts +5 -0
  99. package/dist/SwipeAction/SwipeActionItem.js +105 -0
  100. package/dist/SwipeAction/index.d.ts +4 -0
  101. package/dist/SwipeAction/index.js +45 -0
  102. package/dist/Tabs/Tab.js +13 -4
  103. package/dist/Tabs/Tabs.js +30 -15
  104. package/dist/Tabs/utils/scroll.d.ts +2 -0
  105. package/dist/Tabs/utils/scroll.js +55 -0
  106. package/dist/Toast/FunctionalToast.js +1 -1
  107. package/dist/Toast/Toast.css +0 -1
  108. package/dist/Tooltip/Tooltip.js +70 -27
  109. package/dist/index.d.ts +7 -0
  110. package/dist/index.js +15 -1
  111. package/dist/locales/base.d.ts +11 -0
  112. package/dist/locales/en-US.js +24 -0
  113. package/dist/locales/zh-CN.js +24 -0
  114. package/dist/locales/zh-TW.js +24 -0
  115. package/es/Calendar/Calendar.js +5 -1
  116. package/es/Calendar/Calendar.types.d.ts +5 -0
  117. package/es/CitySelector/CitySelectorCore.js +3 -3
  118. package/es/Collapse/Collapse.css +0 -1
  119. package/es/Collapse/Collapse.d.ts +1 -1
  120. package/es/Collapse/Collapse.js +11 -8
  121. package/es/Collapse/Collapse.miniapp.d.ts +5 -0
  122. package/es/Collapse/Collapse.miniapp.js +157 -0
  123. package/es/CollapsePanel/CollapsePanel.css +4 -2
  124. package/es/DatePicker/DatePicker.d.ts +4 -0
  125. package/es/DatePicker/DatePicker.js +310 -0
  126. package/es/DatePicker/DatePicker.types.d.ts +43 -0
  127. package/es/DatePicker/DatePicker.types.js +1 -0
  128. package/es/DatePicker/index.d.ts +2 -0
  129. package/es/DatePicker/index.js +6 -0
  130. package/es/DesktopDatePicker/DesktopDatePicker.d.ts +5 -0
  131. package/es/DesktopDatePicker/DesktopDatePicker.js +253 -0
  132. package/es/DesktopDatePicker/DesktopDatePicker.types.d.ts +163 -0
  133. package/es/DesktopDatePicker/DesktopDatePicker.types.js +1 -0
  134. package/es/DesktopDatePicker/deskTopPickerContainer.css +100 -0
  135. package/es/DesktopDatePicker/index.css +61 -0
  136. package/es/DesktopDatePicker/index.d.ts +2 -0
  137. package/es/DesktopDatePicker/index.js +6 -0
  138. package/es/DesktopDatePicker/useGetDatePickerContent.d.ts +6 -0
  139. package/es/DesktopDatePicker/useGetDatePickerContent.js +316 -0
  140. package/es/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +5 -0
  141. package/es/DesktopDateTimePicker/DesktopDateTimePicker.js +295 -0
  142. package/es/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +163 -0
  143. package/es/DesktopDateTimePicker/DesktopDateTimePicker.types.js +1 -0
  144. package/es/DesktopDateTimePicker/index.css +66 -0
  145. package/es/DesktopDateTimePicker/index.d.ts +2 -0
  146. package/es/DesktopDateTimePicker/index.js +9 -0
  147. package/es/DesktopPicker/DesktopPicker.d.ts +5 -0
  148. package/es/DesktopPicker/DesktopPicker.js +221 -0
  149. package/es/DesktopPicker/DesktopPicker.types.d.ts +57 -0
  150. package/es/DesktopPicker/DesktopPicker.types.js +1 -0
  151. package/es/DesktopPicker/index.css +37 -0
  152. package/es/DesktopPicker/index.d.ts +2 -0
  153. package/es/DesktopPicker/index.js +6 -0
  154. package/es/DesktopPicker/utils/calcAfterMounted.d.ts +2 -0
  155. package/es/DesktopPicker/utils/calcAfterMounted.js +6 -0
  156. package/es/DesktopPicker/utils/calcAfterMounted.miniapp.d.ts +2 -0
  157. package/es/DesktopPicker/utils/calcAfterMounted.miniapp.js +9 -0
  158. package/es/DesktopTimePicker/DesktopTimePicker.d.ts +5 -0
  159. package/es/DesktopTimePicker/DesktopTimePicker.js +261 -0
  160. package/es/DesktopTimePicker/DesktopTimePicker.types.d.ts +182 -0
  161. package/es/DesktopTimePicker/DesktopTimePicker.types.js +1 -0
  162. package/es/DesktopTimePicker/DesktopTimePickerList.d.ts +4 -0
  163. package/es/DesktopTimePicker/DesktopTimePickerList.js +84 -0
  164. package/es/DesktopTimePicker/index.css +170 -0
  165. package/es/DesktopTimePicker/index.d.ts +2 -0
  166. package/es/DesktopTimePicker/index.js +6 -0
  167. package/es/DesktopTimePicker/useGetTimePickerContent.d.ts +6 -0
  168. package/es/DesktopTimePicker/useGetTimePickerContent.js +223 -0
  169. package/es/DesktopTimePicker/utils/scrollUtil.d.ts +2 -0
  170. package/es/DesktopTimePicker/utils/scrollUtil.js +8 -0
  171. package/es/DesktopTimePicker/utils/scrollUtil.miniapp.d.ts +2 -0
  172. package/es/DesktopTimePicker/utils/scrollUtil.miniapp.js +22 -0
  173. package/es/DesktopTimePicker/utils/utils.d.ts +28 -0
  174. package/es/DesktopTimePicker/utils/utils.js +365 -0
  175. package/es/Dialog/FunctionalDialog.js +2 -2
  176. package/es/ItemSelector/ItemSelector.css +120 -0
  177. package/es/ItemSelector/ItemSelector.d.ts +4 -0
  178. package/es/ItemSelector/ItemSelector.js +57 -0
  179. package/es/ItemSelector/ItemSelector.miniapp.d.ts +5 -0
  180. package/es/ItemSelector/ItemSelector.miniapp.js +98 -0
  181. package/es/ItemSelector/ItemSelector.types.d.ts +40 -0
  182. package/es/ItemSelector/ItemSelector.types.js +1 -0
  183. package/es/ItemSelector/ItemSelectorCore.d.ts +5 -0
  184. package/es/ItemSelector/ItemSelectorCore.js +190 -0
  185. package/es/ItemSelector/Selector/index.css +11 -0
  186. package/es/ItemSelector/Selector/index.d.ts +9 -0
  187. package/es/ItemSelector/Selector/index.js +19 -0
  188. package/es/ItemSelector/index.d.ts +2 -0
  189. package/es/ItemSelector/index.js +6 -0
  190. package/es/ItemSelector/miniapp.css +4 -0
  191. package/es/Picker/Picker.css +5 -0
  192. package/es/Picker/Picker.js +27 -5
  193. package/es/Picker/Picker.types.d.ts +15 -2
  194. package/es/Picker/PickerPanel.css +4 -0
  195. package/es/Picker/PickerPanel.js +7 -6
  196. package/es/Popover/Popover.js +73 -29
  197. package/es/Portal/Portal.miniapp.js +8 -5
  198. package/es/ScrollView/ScrollView.js +24 -11
  199. package/es/ScrollView/ScrollView.types.d.ts +0 -1
  200. package/es/Select/Select.css +1 -4
  201. package/es/Select/Select.js +63 -41
  202. package/es/Slider/Slider.js +16 -6
  203. package/es/SwipeAction/SwipeAction.css +79 -0
  204. package/es/SwipeAction/SwipeAction.d.ts +5 -0
  205. package/es/SwipeAction/SwipeAction.js +337 -0
  206. package/es/SwipeAction/SwipeAction.types.d.ts +83 -0
  207. package/es/SwipeAction/SwipeAction.types.js +1 -0
  208. package/es/SwipeAction/SwipeActionContext.d.ts +4 -0
  209. package/es/SwipeAction/SwipeActionContext.js +11 -0
  210. package/es/SwipeAction/SwipeActionItem.css +31 -0
  211. package/es/SwipeAction/SwipeActionItem.d.ts +5 -0
  212. package/es/SwipeAction/SwipeActionItem.js +78 -0
  213. package/es/SwipeAction/index.d.ts +4 -0
  214. package/es/SwipeAction/index.js +9 -0
  215. package/es/Tabs/Tab.js +13 -4
  216. package/es/Tabs/Tabs.js +30 -15
  217. package/es/Tabs/utils/scroll.d.ts +2 -0
  218. package/es/Tabs/utils/scroll.js +36 -0
  219. package/es/Toast/FunctionalToast.js +2 -2
  220. package/es/Toast/Toast.css +0 -1
  221. package/es/Tooltip/Tooltip.js +73 -29
  222. package/es/index.d.ts +7 -0
  223. package/es/index.js +7 -0
  224. package/es/locales/base.d.ts +11 -0
  225. package/es/locales/en-US.js +24 -0
  226. package/es/locales/zh-CN.js +24 -0
  227. package/es/locales/zh-TW.js +24 -0
  228. package/package.json +5 -5
  229. package/dist/Tabs/utils/bound.d.ts +0 -1
  230. package/es/Tabs/utils/bound.d.ts +0 -1
  231. package/es/Tabs/utils/bound.js +0 -13
@@ -0,0 +1,310 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ import React, { forwardRef, useEffect, useState } from "react";
33
+ import clsx from "clsx";
34
+ import { useValue } from "@bifrostui/utils";
35
+ import {
36
+ DatePickerType
37
+ } from "./DatePicker.types";
38
+ import Picker from "../Picker";
39
+ import { useLocaleText } from "../locales";
40
+ const MIN_DATE = new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1);
41
+ const MAX_DATE = new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 11, 31);
42
+ const DEFAULT_PICKER = [
43
+ DatePickerType.YEAR,
44
+ DatePickerType.MONTH,
45
+ DatePickerType.DAY
46
+ ];
47
+ function isValidDate(value) {
48
+ return value instanceof Date && !Number.isNaN(value.getTime());
49
+ }
50
+ const padZero = (num, targetLength = 2) => {
51
+ let str = `${num}`;
52
+ while (str.length < targetLength) {
53
+ str = `0${str}`;
54
+ }
55
+ return str;
56
+ };
57
+ const getMaxDay = (year, monthIndex) => {
58
+ return new Date(year, monthIndex + 1, 0).getDate();
59
+ };
60
+ const getDateTypeValue = (date, type) => {
61
+ switch (type) {
62
+ case DatePickerType.YEAR:
63
+ return date.getFullYear();
64
+ case DatePickerType.MONTH:
65
+ return date.getMonth() + 1;
66
+ case DatePickerType.DAY:
67
+ return date.getDate();
68
+ case DatePickerType.HOUR:
69
+ return date.getHours();
70
+ case DatePickerType.MINUTE:
71
+ return date.getMinutes();
72
+ case DatePickerType.SECOND:
73
+ return date.getSeconds();
74
+ default:
75
+ throw new Error(`\u9519\u8BEF\u7684picker\u7C7B\u578B\uFF1A${type}`);
76
+ }
77
+ };
78
+ const DatePicker = forwardRef((props, ref) => {
79
+ const _a = props, {
80
+ className,
81
+ value: propValue,
82
+ defaultValue,
83
+ views = DEFAULT_PICKER,
84
+ minDate: propMinDate = MIN_DATE,
85
+ maxDate: propMaxDate = MAX_DATE,
86
+ showUnit = false,
87
+ formatter,
88
+ filter,
89
+ disableDateTimeView,
90
+ dateTimeStep,
91
+ onConfirm,
92
+ onClose,
93
+ onChange
94
+ } = _a, others = __objRest(_a, [
95
+ "className",
96
+ "value",
97
+ "defaultValue",
98
+ "views",
99
+ "minDate",
100
+ "maxDate",
101
+ "showUnit",
102
+ "formatter",
103
+ "filter",
104
+ "disableDateTimeView",
105
+ "dateTimeStep",
106
+ "onConfirm",
107
+ "onClose",
108
+ "onChange"
109
+ ]);
110
+ const [options, setOptions] = useState([]);
111
+ const [pickerValue, setPickerValue] = useState([]);
112
+ const datePickerText = useLocaleText("datePicker");
113
+ const formatDate = (date) => {
114
+ let formattedDate = date;
115
+ if (!formattedDate || !isValidDate(date) || formattedDate.getTime() < propMinDate.getTime()) {
116
+ formattedDate = propMinDate;
117
+ }
118
+ if (formattedDate.getTime() > propMaxDate.getTime()) {
119
+ formattedDate = propMaxDate;
120
+ }
121
+ return formattedDate;
122
+ };
123
+ const [currentDate, triggerChange] = useValue({
124
+ value: propValue && formatDate(propValue),
125
+ defaultValue: formatDate(defaultValue)
126
+ });
127
+ const handleConfirm = (e) => {
128
+ onConfirm == null ? void 0 : onConfirm(e, { value: currentDate });
129
+ };
130
+ const handleClose = (e) => {
131
+ onClose == null ? void 0 : onClose(e, { value: currentDate });
132
+ };
133
+ const handleChange = (e, { value, columnIndex }) => {
134
+ if (value[columnIndex] === null)
135
+ return;
136
+ const current = new Date(currentDate);
137
+ switch (views[columnIndex]) {
138
+ case DatePickerType.YEAR:
139
+ current.setFullYear(value[columnIndex]);
140
+ break;
141
+ case DatePickerType.MONTH: {
142
+ const selectedMaxDay = getMaxDay(
143
+ current.getFullYear(),
144
+ Number(value[columnIndex]) - 1
145
+ );
146
+ if (current.getDate() > selectedMaxDay) {
147
+ current.setDate(selectedMaxDay);
148
+ }
149
+ current.setMonth(value[columnIndex] - 1);
150
+ break;
151
+ }
152
+ case DatePickerType.DAY:
153
+ current.setDate(value[columnIndex]);
154
+ break;
155
+ case DatePickerType.HOUR:
156
+ current.setHours(value[columnIndex]);
157
+ break;
158
+ case DatePickerType.MINUTE:
159
+ current.setMinutes(value[columnIndex]);
160
+ break;
161
+ case DatePickerType.SECOND:
162
+ current.setSeconds(value[columnIndex]);
163
+ break;
164
+ default:
165
+ throw new Error(`\u9519\u8BEF\u7684picker\u7C7B\u578B\uFF1A${views[columnIndex]}`);
166
+ }
167
+ triggerChange(e, formatDate(current));
168
+ onChange == null ? void 0 : onChange(e, { type: views[columnIndex], value: current });
169
+ };
170
+ const formatOption = (type, value) => {
171
+ let label = padZero(value);
172
+ if (formatter) {
173
+ return formatter(type, {
174
+ value,
175
+ label
176
+ });
177
+ }
178
+ if (showUnit) {
179
+ label += datePickerText[type];
180
+ }
181
+ return { value, label };
182
+ };
183
+ const generateOptions = (min, max, type, columnIndex) => {
184
+ const step = (dateTimeStep == null ? void 0 : dateTimeStep[type]) || 1;
185
+ let valueIndex = 0;
186
+ const optionsArray = Array.from(
187
+ { length: (max - min + 1) / step || 1 },
188
+ (_, index) => {
189
+ const value = index * step + min;
190
+ if (value <= getDateTypeValue(currentDate, type)) {
191
+ valueIndex = index;
192
+ }
193
+ return formatOption(type, value);
194
+ }
195
+ );
196
+ pickerValue[columnIndex] = optionsArray[valueIndex].value;
197
+ setPickerValue([...pickerValue]);
198
+ if ((disableDateTimeView == null ? void 0 : disableDateTimeView[type]) && typeof disableDateTimeView[type] === "function") {
199
+ const disabledOptionsValue = disableDateTimeView[type](
200
+ optionsArray.map((i) => i.value)
201
+ );
202
+ return optionsArray.map((option) => {
203
+ if (disabledOptionsValue.includes(option.value)) {
204
+ return __spreadProps(__spreadValues({}, option), {
205
+ disabled: true
206
+ });
207
+ }
208
+ return option;
209
+ });
210
+ }
211
+ if (filter) {
212
+ return filter(type, optionsArray);
213
+ }
214
+ return optionsArray;
215
+ };
216
+ const getBoundary = (type, value) => {
217
+ const boundary = type === "min" ? propMinDate : propMaxDate;
218
+ const year = boundary.getFullYear();
219
+ let month = 1;
220
+ let date = 1;
221
+ let hour = 0;
222
+ let minute = 0;
223
+ let seconds = 0;
224
+ if (type === "max") {
225
+ month = 12;
226
+ date = getMaxDay(value.getFullYear(), value.getMonth());
227
+ hour = 23;
228
+ minute = 59;
229
+ seconds = 59;
230
+ }
231
+ if (value.getFullYear() === year) {
232
+ month = boundary.getMonth() + 1;
233
+ if (value.getMonth() + 1 === month) {
234
+ date = boundary.getDate();
235
+ if (value.getDate() === date) {
236
+ hour = boundary.getHours();
237
+ if (value.getHours() === hour) {
238
+ minute = boundary.getMinutes();
239
+ if (value.getMinutes() === minute) {
240
+ seconds = boundary.getSeconds();
241
+ }
242
+ }
243
+ }
244
+ }
245
+ }
246
+ return {
247
+ [`${type}Year`]: year,
248
+ [`${type}Month`]: month,
249
+ [`${type}Date`]: date,
250
+ [`${type}Hour`]: hour,
251
+ [`${type}Minute`]: minute,
252
+ [`${type}Seconds`]: seconds
253
+ };
254
+ };
255
+ const generateRanges = () => {
256
+ const ranges = [];
257
+ const { minYear, minMonth, minDate, minHour, minMinute, minSeconds } = getBoundary("min", currentDate);
258
+ const { maxYear, maxMonth, maxDate, maxHour, maxMinute, maxSeconds } = getBoundary("max", currentDate);
259
+ for (let i = 0; i < views.length; i += 1) {
260
+ const type = views[i];
261
+ switch (type) {
262
+ case DatePickerType.YEAR:
263
+ ranges.push([minYear, maxYear]);
264
+ break;
265
+ case DatePickerType.MONTH:
266
+ ranges.push([minMonth, maxMonth]);
267
+ break;
268
+ case DatePickerType.DAY:
269
+ ranges.push([minDate, maxDate]);
270
+ break;
271
+ case DatePickerType.HOUR:
272
+ ranges.push([minHour, maxHour]);
273
+ break;
274
+ case DatePickerType.MINUTE:
275
+ ranges.push([minMinute, maxMinute]);
276
+ break;
277
+ case DatePickerType.SECOND:
278
+ ranges.push([minSeconds, maxSeconds]);
279
+ break;
280
+ default:
281
+ throw new Error(`\u9519\u8BEF\u7684picker\u7C7B\u578B\uFF1A${type}`);
282
+ }
283
+ }
284
+ return ranges;
285
+ };
286
+ const generateRangeOptions = () => generateRanges().map(
287
+ (range, index) => generateOptions(range[0], range[1], views[index], index)
288
+ );
289
+ useEffect(() => {
290
+ setOptions(generateRangeOptions());
291
+ }, [currentDate, views, propMinDate, propMaxDate]);
292
+ return /* @__PURE__ */ React.createElement(
293
+ Picker,
294
+ __spreadProps(__spreadValues({}, others), {
295
+ "data-selected": currentDate ? currentDate.getTime() : "",
296
+ className: clsx("bui-date-picker", className),
297
+ ref,
298
+ options,
299
+ value: pickerValue,
300
+ onConfirm: handleConfirm,
301
+ onClose: handleClose,
302
+ onOptionChange: handleChange
303
+ })
304
+ );
305
+ });
306
+ DatePicker.displayName = "BuiDatePicker";
307
+ var DatePicker_default = DatePicker;
308
+ export {
309
+ DatePicker_default as default
310
+ };
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { OverrideProps } from '@bifrostui/types';
3
+ import { PickerProps, IPickerOptionItem } from '../Picker';
4
+ export declare enum DatePickerType {
5
+ YEAR = "year",
6
+ MONTH = "month",
7
+ DAY = "day",
8
+ HOUR = "hour",
9
+ MINUTE = "minute",
10
+ SECOND = "second"
11
+ }
12
+ export type DatePickerOption = IPickerOptionItem & {
13
+ value: number;
14
+ };
15
+ export type DatePickerProps<D extends React.ElementType = 'div', P = Omit<PickerProps, 'value' | 'defaultValue' | 'onChange' | 'onConfirm' | 'onClose'>> = OverrideProps<{
16
+ props: P & {
17
+ defaultValue?: Date;
18
+ value?: Date;
19
+ views?: DatePickerType[];
20
+ minDate?: Date;
21
+ maxDate?: Date;
22
+ showUnit?: boolean;
23
+ disableDateTimeView?: Partial<{
24
+ [key in DatePickerType]: (options: number[]) => number[];
25
+ }>;
26
+ dateTimeStep?: Partial<{
27
+ [key in DatePickerType]: number;
28
+ }>;
29
+ formatter?: (type: DatePickerType, option: DatePickerOption) => DatePickerOption;
30
+ filter?: (type: DatePickerType, options: DatePickerOption[]) => DatePickerOption[];
31
+ onConfirm?: (e: React.SyntheticEvent, { value }: {
32
+ value: Date;
33
+ }) => void;
34
+ onClose?: (e: React.SyntheticEvent, { value }: {
35
+ value: Date;
36
+ }) => void;
37
+ onChange?: (e: React.SyntheticEvent, { value }: {
38
+ type: DatePickerType;
39
+ value: Date;
40
+ }) => void;
41
+ };
42
+ defaultComponent: D;
43
+ }, D>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { default, default as DatePicker } from './DatePicker';
2
+ export * from './DatePicker.types';
@@ -0,0 +1,6 @@
1
+ import { default as default2, default as default3 } from "./DatePicker";
2
+ export * from "./DatePicker.types";
3
+ export {
4
+ default3 as DatePicker,
5
+ default2 as default
6
+ };
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { DesktopDatePickerProps } from './DesktopDatePicker.types';
3
+ import './index.less';
4
+ declare const DesktopDatePicker: React.ForwardRefExoticComponent<Omit<DesktopDatePickerProps<"div", {}>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ export default DesktopDatePicker;
@@ -0,0 +1,253 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __objRest = (source, exclude) => {
21
+ var target = {};
22
+ for (var prop in source)
23
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
24
+ target[prop] = source[prop];
25
+ if (source != null && __getOwnPropSymbols)
26
+ for (var prop of __getOwnPropSymbols(source)) {
27
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
28
+ target[prop] = source[prop];
29
+ }
30
+ return target;
31
+ };
32
+ import { DateOutlinedIcon } from "@bifrostui/icons";
33
+ import dayjs from "dayjs";
34
+ import clsx from "clsx";
35
+ import React, { useMemo, useState, useEffect } from "react";
36
+ import { useValue } from "@bifrostui/utils";
37
+ import DesktopPicker from "../DesktopPicker";
38
+ import useGetDatePickerContent from "./useGetDatePickerContent";
39
+ import "./index.css";
40
+ const prefixCls = "bui-d-date-picker";
41
+ const DesktopDatePicker = /* @__PURE__ */ React.forwardRef((props, ref) => {
42
+ const _a = props, {
43
+ className,
44
+ inputRef,
45
+ inputProps,
46
+ value,
47
+ defaultValue,
48
+ disabled = false,
49
+ disableOpenPicker = false,
50
+ placeholder,
51
+ format = "YYYY/MM/DD",
52
+ open,
53
+ disabledDate,
54
+ picker = "day",
55
+ minDate = dayjs(dayjs().format("YYYYMMDD")).subtract(10, "year").toDate(),
56
+ maxDate = dayjs(dayjs().format("YYYYMMDD")).add(10, "year").toDate(),
57
+ icon,
58
+ headerBarLeftIcon,
59
+ headerBarRightIcon,
60
+ closeOnSelect = true,
61
+ onChange,
62
+ onClose,
63
+ onOpen,
64
+ monthRender,
65
+ yearRender,
66
+ onMonthChange,
67
+ onYearChange,
68
+ DesktopPickerProps,
69
+ CalendarProps
70
+ } = _a, others = __objRest(_a, [
71
+ "className",
72
+ "inputRef",
73
+ "inputProps",
74
+ "value",
75
+ "defaultValue",
76
+ "disabled",
77
+ "disableOpenPicker",
78
+ "placeholder",
79
+ "format",
80
+ "open",
81
+ "disabledDate",
82
+ "picker",
83
+ "minDate",
84
+ "maxDate",
85
+ "icon",
86
+ "headerBarLeftIcon",
87
+ "headerBarRightIcon",
88
+ "closeOnSelect",
89
+ "onChange",
90
+ "onClose",
91
+ "onOpen",
92
+ "monthRender",
93
+ "yearRender",
94
+ "onMonthChange",
95
+ "onYearChange",
96
+ "DesktopPickerProps",
97
+ "CalendarProps"
98
+ ]);
99
+ const [isOpen, setIsOpen] = useState(false);
100
+ const [selectType, setSelectType] = useState(
101
+ picker
102
+ );
103
+ const [inputStr, setInputStr] = useState("");
104
+ const [useUserStr, setUseUserStr] = useState(false);
105
+ const [calendarValue, triggerChange] = useValue({
106
+ value,
107
+ defaultValue,
108
+ onChange
109
+ });
110
+ const handleDatePickerIconClick = (e) => {
111
+ if (disabled || disableOpenPicker || open !== void 0)
112
+ return;
113
+ setIsOpen(!isOpen);
114
+ };
115
+ const handleDatePickerInputClick = (e) => {
116
+ e.stopPropagation();
117
+ if (inputProps == null ? void 0 : inputProps.readOnly) {
118
+ if (disabled || disableOpenPicker || open !== void 0)
119
+ return;
120
+ setIsOpen(!isOpen);
121
+ return;
122
+ }
123
+ setIsOpen(false);
124
+ };
125
+ const { desktopDatePicker } = useGetDatePickerContent({
126
+ format,
127
+ minDate,
128
+ maxDate,
129
+ setIsOpen,
130
+ triggerChange,
131
+ disabledDate,
132
+ calendarValue,
133
+ setSelectType,
134
+ picker,
135
+ selectType,
136
+ headerBarLeftIcon,
137
+ headerBarRightIcon,
138
+ CalendarProps,
139
+ onClose,
140
+ monthRender,
141
+ yearRender,
142
+ onMonthChange,
143
+ onYearChange,
144
+ closeOnSelect
145
+ });
146
+ const onInputChange = (e) => {
147
+ e.stopPropagation();
148
+ const newValue = e.target.value;
149
+ if (newValue.length === 0) {
150
+ setInputStr("");
151
+ setUseUserStr(true);
152
+ triggerChange(e, null);
153
+ return;
154
+ }
155
+ if (dayjs(newValue, format, true).isValid()) {
156
+ setInputStr("");
157
+ setUseUserStr(false);
158
+ if (disabledDate == null ? void 0 : disabledDate(dayjs(newValue).toDate())) {
159
+ return;
160
+ }
161
+ if (dayjs(newValue).isAfter(maxDate)) {
162
+ triggerChange(e, maxDate);
163
+ return;
164
+ }
165
+ if (dayjs(newValue).isBefore(minDate)) {
166
+ triggerChange(e, minDate);
167
+ return;
168
+ }
169
+ triggerChange(e, dayjs(e.target.value).toDate());
170
+ } else {
171
+ setUseUserStr(true);
172
+ setInputStr(e.target.value);
173
+ }
174
+ };
175
+ const onMount = () => {
176
+ onOpen == null ? void 0 : onOpen();
177
+ };
178
+ const unMounted = () => {
179
+ onClose == null ? void 0 : onClose();
180
+ setSelectType(picker);
181
+ };
182
+ const showPlaceholder = useMemo(() => {
183
+ if (placeholder) {
184
+ return placeholder;
185
+ }
186
+ return format;
187
+ }, [placeholder, format]);
188
+ const renderValue = useMemo(() => {
189
+ if (useUserStr) {
190
+ return inputStr;
191
+ }
192
+ if (calendarValue) {
193
+ return dayjs(calendarValue).format(format);
194
+ }
195
+ return "";
196
+ }, [calendarValue, inputStr, useUserStr, format]);
197
+ useEffect(() => {
198
+ setUseUserStr(false);
199
+ }, [calendarValue]);
200
+ return /* @__PURE__ */ React.createElement(
201
+ "div",
202
+ __spreadProps(__spreadValues({}, others), {
203
+ className: clsx(prefixCls, className, {
204
+ [`${prefixCls}-disabled`]: disabled,
205
+ [`${prefixCls}-active`]: isOpen
206
+ }),
207
+ ref
208
+ }),
209
+ /* @__PURE__ */ React.createElement(
210
+ DesktopPicker,
211
+ __spreadValues({
212
+ open: open != null ? open : isOpen,
213
+ miniBackdropInvisible: open !== void 0,
214
+ onClose: (e, data) => {
215
+ setIsOpen(data == null ? void 0 : data.value);
216
+ },
217
+ onMount,
218
+ onUnmounted: unMounted,
219
+ content: desktopDatePicker()
220
+ }, DesktopPickerProps),
221
+ /* @__PURE__ */ React.createElement("div", { className: `${prefixCls}-container` }, /* @__PURE__ */ React.createElement(
222
+ "input",
223
+ __spreadProps(__spreadValues({}, inputProps), {
224
+ "aria-invalid": true,
225
+ autoComplete: "off",
226
+ placeholder: showPlaceholder,
227
+ type: "text",
228
+ inputMode: "text",
229
+ ref: inputRef,
230
+ className: clsx(`${prefixCls}-input`, {
231
+ [inputProps == null ? void 0 : inputProps.className]: inputProps == null ? void 0 : inputProps.className
232
+ }),
233
+ onBlur: () => setUseUserStr(false),
234
+ onClick: handleDatePickerInputClick,
235
+ onChange: onInputChange,
236
+ value: renderValue
237
+ })
238
+ ), /* @__PURE__ */ React.createElement(
239
+ "div",
240
+ {
241
+ onClick: handleDatePickerIconClick,
242
+ className: `${prefixCls}-icon`
243
+ },
244
+ icon || /* @__PURE__ */ React.createElement(DateOutlinedIcon, { htmlColor: "var(--bui-color-neutral-3)" })
245
+ ))
246
+ )
247
+ );
248
+ });
249
+ DesktopDatePicker.displayName = "BUIDatePicker";
250
+ var DesktopDatePicker_default = DesktopDatePicker;
251
+ export {
252
+ DesktopDatePicker_default as default
253
+ };