UNPKG

tdesign-react

Version:
604 lines (592 loc) 22.3 kB
/** * tdesign v1.13.2 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var defineProperty = require('../_chunks/dep-cc768e34.js'); var slicedToArray = require('../_chunks/dep-e17e2d31.js'); var React = require('react'); var classNames = require('classnames'); var dayjs = require('dayjs'); var format = require('../_chunks/dep-1c372799.js'); var utils = require('../_chunks/dep-bcbc3f4e.js'); var hooks_useConfig = require('../hooks/useConfig.js'); var selectInput_index = require('../select-input/index.js'); var datePicker_panel_SinglePanel = require('./panel/SinglePanel.js'); var datePicker_hooks_useSingle = require('./hooks/useSingle.js'); var datePicker_defaultProps = require('./defaultProps.js'); var hooks_useDefaultProps = require('../hooks/useDefaultProps.js'); var hooks_useLatest = require('../hooks/useLatest.js'); var hooks_useUpdateEffect = require('../hooks/useUpdateEffect.js'); var locale_LocalReceiver = require('../locale/LocalReceiver.js'); var _baseGetTag = require('../_chunks/dep-f0379c5f.js'); var isObjectLike = require('../_chunks/dep-ddacd27a.js'); var _baseUnary = require('../_chunks/dep-47bdc05f.js'); var _overArg = require('../_chunks/dep-8a116183.js'); require('../_chunks/dep-6d4d8660.js'); require('../_chunks/dep-b7d577ac.js'); require('../_chunks/dep-ac58e1cc.js'); require('../_chunks/dep-4bc3c0ab.js'); require('../_chunks/dep-3e2d2665.js'); require('../_chunks/dep-028b759d.js'); require('../_chunks/dep-863f50e4.js'); require('../_chunks/dep-c915e145.js'); require('../_chunks/dep-780eda7b.js'); require('../_chunks/dep-f076775e.js'); require('../_chunks/dep-bed9d73e.js'); require('../_chunks/dep-05b4c661.js'); require('../_chunks/dep-e2c832a5.js'); require('../_chunks/dep-c87d9752.js'); require('../_chunks/dep-4671b9bd.js'); require('../_chunks/dep-cab13149.js'); require('../config-provider/ConfigContext.js'); require('../_chunks/dep-3a869b87.js'); require('../_chunks/dep-7da96a57.js'); require('../_chunks/dep-07b911d8.js'); require('../_chunks/dep-4b02d669.js'); require('../_chunks/dep-a30819a4.js'); require('../_chunks/dep-6a7ba247.js'); require('../_chunks/dep-bd956a2d.js'); require('../_chunks/dep-0cdb3286.js'); require('../_chunks/dep-865c186c.js'); require('../_chunks/dep-f4e58639.js'); require('../_chunks/dep-781a2854.js'); require('../_chunks/dep-1ef213f8.js'); require('../select-input/SelectInput.js'); require('../popup/index.js'); require('../popup/Popup.js'); require('react-transition-group'); require('../_util/ref.js'); require('react-is'); require('../_util/isFragment.js'); require('../_chunks/dep-3f65dfe7.js'); require('../common/Portal.js'); require('react-dom'); require('../hooks/useLayoutEffect.js'); require('../hooks/useAnimation.js'); require('../hooks/useAttach.js'); require('../hooks/useControlled.js'); require('../_util/noop.js'); require('../_chunks/dep-4be7f839.js'); require('../_chunks/dep-d42c60f4.js'); require('../_chunks/dep-62193a48.js'); require('../hooks/useMutationObserver.js'); require('../_chunks/dep-d6e82200.js'); require('../_chunks/dep-94d97586.js'); require('../_chunks/dep-b12bf98d.js'); require('../_chunks/dep-0c1ca63f.js'); require('../_chunks/dep-fd5d57c1.js'); require('../_chunks/dep-ac2874ce.js'); require('../_chunks/dep-6cfc06a0.js'); require('../_chunks/dep-5d9d080b.js'); require('../_chunks/dep-1bcdd0a4.js'); require('../hooks/usePopper.js'); require('../_chunks/dep-64a1054a.js'); require('@popperjs/core'); require('react-fast-compare'); require('../hooks/useWindowSize.js'); require('../popup/defaultProps.js'); require('../popup/hooks/useTrigger.js'); require('../_util/composeRefs.js'); require('../_util/listener.js'); require('../popup/utils/transition.js'); require('../popup/PopupPlugin.js'); require('../_chunks/dep-a93b6608.js'); require('../_util/react-render.js'); require('../common/PluginContainer.js'); require('../config-provider/ConfigProvider.js'); require('../_chunks/dep-ed886f2a.js'); require('../_chunks/dep-aeef4e56.js'); require('../select-input/useSingle.js'); require('../input/index.js'); require('../input/Input.js'); require('../_chunks/dep-810b3643.js'); require('tdesign-icons-react'); require('../_util/forwardRefWithStatics.js'); require('hoist-non-react-statics'); require('../hooks/useGlobalIcon.js'); require('../input/InputGroup.js'); require('../input/defaultProps.js'); require('../_util/parseTNode.js'); require('../input/useLengthLimit.js'); require('../_chunks/dep-b8d4cf07.js'); require('../_chunks/dep-422caf30.js'); require('../loading/index.js'); require('../loading/Loading.js'); require('../loading/gradient.js'); require('../_chunks/dep-58719304.js'); require('../hooks/useDomRefCallback.js'); require('../loading/defaultProps.js'); require('../loading/plugin.js'); require('../_chunks/dep-08fa4947.js'); require('../_chunks/dep-4ba2ac6b.js'); require('../_chunks/dep-2df3735a.js'); require('../_chunks/dep-aaaf9309.js'); require('../_chunks/dep-ef231277.js'); require('../_chunks/dep-ba1bf618.js'); require('../select-input/useMultiple.js'); require('../tag-input/index.js'); require('../tag-input/TagInput.js'); require('../hooks/useDragSorter.js'); require('../hooks/useEventCallback.js'); require('../tag-input/useTagScroll.js'); require('../tag-input/useTagList.js'); require('../tag/index.js'); require('../tag/Tag.js'); require('../_chunks/dep-7bc521fe.js'); require('../tag/defaultProps.js'); require('../tag/CheckTag.js'); require('../_chunks/dep-d33a1510.js'); require('../tag/CheckTagGroup.js'); require('../tag-input/useHover.js'); require('../tag-input/defaultProps.js'); require('../select-input/useOverlayInnerStyle.js'); require('../select-input/defaultProps.js'); require('./panel/PanelContent.js'); require('./base/Header.js'); require('../select/index.js'); require('../select/base/Select.js'); require('../_util/helper.js'); require('../_chunks/dep-a70197cb.js'); require('../_chunks/dep-c148acab.js'); require('../select/base/OptionGroup.js'); require('../select/defaultProps.js'); require('../select/base/Option.js'); require('../hooks/useRipple.js'); require('../_chunks/dep-fbc19a54.js'); require('../common/FakeArrow.js'); require('../select/base/PopupContent.js'); require('../select/hooks/usePanelVirtualScroll.js'); require('../hooks/useVirtualScroll.js'); require('../hooks/useResizeObserver.js'); require('../pagination/index.js'); require('../pagination/Pagination.js'); require('../input-number/index.js'); require('../input-number/InputNumber.js'); require('../button/index.js'); require('../button/Button.js'); require('../button/defaultProps.js'); require('../input-number/useInputNumber.js'); require('../_chunks/dep-0a15e4d8.js'); require('../_chunks/dep-f400737d.js'); require('../hooks/useCommonClassName.js'); require('../input-number/defaultProps.js'); require('../input-adornment/InputAdornment.js'); require('../pagination/hooks/useBoundaryJumper.js'); require('../pagination/hooks/usePrevNextJumper.js'); require('../pagination/hooks/usePageNumber.js'); require('../pagination/hooks/useTotal.js'); require('../pagination/validators.js'); require('../pagination/defaultProps.js'); require('../_chunks/dep-ab823a9f.js'); require('../_chunks/dep-1843e637.js'); require('../_chunks/dep-e6a14ce7.js'); require('../pagination/PaginationMini.js'); require('./base/Table.js'); require('./base/Cell.js'); require('../time-picker/index.js'); require('../time-picker/TimePicker.js'); require('../_chunks/dep-4c561432.js'); require('../time-picker/hooks/useTimePickerTextConfig.js'); require('../hooks/useDebounce.js'); require('../hooks/usePersistFn.js'); require('../hooks/usePropsRef.js'); require('../time-picker/TimeRangePicker.js'); require('../range-input/index.js'); require('../range-input/RangeInput.js'); require('../range-input/defaultProps.js'); require('../range-input/RangeInputPopup.js'); require('../time-picker/panel/TimePickerPanel.js'); require('../time-picker/defaultProps.js'); require('./panel/ExtraContent.js'); require('./base/Footer.js'); require('./hooks/useTableData.js'); require('./hooks/useDisableDate.js'); require('./utils.js'); require('../_chunks/dep-a8126ca9.js'); require('./hooks/useSingleValue.js'); require('../hooks/useIsFirstRender.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames); var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs); /** `Object#toString` result references. */ var dateTag = '[object Date]'; /** * The base implementation of `_.isDate` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a date object, else `false`. */ function baseIsDate(value) { return isObjectLike.isObjectLike(value) && _baseGetTag.baseGetTag(value) == dateTag; } /* Node.js helper references. */ var nodeIsDate = _overArg.nodeUtil && _overArg.nodeUtil.isDate; /** * Checks if `value` is classified as a `Date` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a date object, else `false`. * @example * * _.isDate(new Date); * // => true * * _.isDate('Mon April 23 2012'); * // => false */ var isDate = nodeIsDate ? _baseUnary.baseUnary(nodeIsDate) : baseIsDate; var isDate$1 = isDate; 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; } 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._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; } var DatePicker = /*#__PURE__*/React.forwardRef(function (originalProps, ref) { var _useConfig = hooks_useConfig["default"](), classPrefix = _useConfig.classPrefix; var props = hooks_useDefaultProps["default"](originalProps, datePicker_defaultProps.datePickerDefaultProps); var className = props.className, style = props.style, disabled = props.disabled, mode = props.mode, enableTimePicker = props.enableTimePicker, disableDate = props.disableDate, firstDayOfWeek = props.firstDayOfWeek, presets = props.presets, defaultTime = props.defaultTime, timePickerProps = props.timePickerProps, presetsPlacement = props.presetsPlacement, needConfirm = props.needConfirm, multiple = props.multiple, label = props.label, disableTime = props.disableTime, onClear = props.onClear, onPick = props.onPick; var _useSingle = datePicker_hooks_useSingle["default"](props), inputValue = _useSingle.inputValue, popupVisible = _useSingle.popupVisible, inputProps = _useSingle.inputProps, popupProps = _useSingle.popupProps, tagInputProps = _useSingle.tagInputProps, value = _useSingle.value, year = _useSingle.year, month = _useSingle.month, time = _useSingle.time, onChange = _useSingle.onChange, setIsHoverCell = _useSingle.setIsHoverCell, setInputValue = _useSingle.setInputValue, setPopupVisible = _useSingle.setPopupVisible, setTime = _useSingle.setTime, setYear = _useSingle.setYear, setMonth = _useSingle.setMonth, cacheValue = _useSingle.cacheValue, setCacheValue = _useSingle.setCacheValue; var _useLocaleReceiver = locale_LocalReceiver.useLocaleReceiver("datePicker"), _useLocaleReceiver2 = slicedToArray._slicedToArray(_useLocaleReceiver, 1), local = _useLocaleReceiver2[0]; var _getDefaultFormat = format.getDefaultFormat({ mode: mode, format: props.format, valueType: props.valueType, enableTimePicker: multiple ? false : enableTimePicker }), format$1 = _getDefaultFormat.format, timeFormat = _getDefaultFormat.timeFormat, valueType = _getDefaultFormat.valueType; var onTriggerNeedConfirm = hooks_useLatest["default"](function () { if (!needConfirm && enableTimePicker && !popupVisible) { var nextValue = format.formatDate(inputValue, { format: format$1 }); if (nextValue) { onChange(format.formatDate(inputValue, { format: format$1, targetFormat: valueType }), { dayjsValue: format.parseToDayjs(inputValue, format$1), trigger: "confirm" }); } else { setInputValue(format.formatDate(value, { format: format$1 })); } } }); var handlePopupInvisible = function handlePopupInvisible() { var _props$popupProps, _props$popupProps$onV; setPopupVisible(false); (_props$popupProps = props.popupProps) === null || _props$popupProps === void 0 || (_props$popupProps$onV = _props$popupProps.onVisibleChange) === null || _props$popupProps$onV === void 0 || _props$popupProps$onV.call(_props$popupProps, false, {}); }; hooks_useUpdateEffect["default"](function () { onTriggerNeedConfirm.current(); }, [popupVisible]); React.useEffect(function () { if (multiple) return; var dateValue = value && !isDate$1(value) && !["week", "quarter"].includes(props.mode) ? utils.covertToDate(value, valueType) : value; setCacheValue(format.formatDate(dateValue, { format: format$1 })); setInputValue(format.formatDate(dateValue, { format: format$1 })); if (popupVisible) { setYear(format.parseToDayjs(value, format$1).year()); setMonth(format.parseToDayjs(value, format$1).month()); setTime(format.formatTime(value, format$1, timeFormat, defaultTime)); } else { setIsHoverCell(false); } }, [popupVisible]); function onCellMouseEnter(date) { if (multiple) return; setIsHoverCell(true); setInputValue(format.formatDate(date, { format: format$1 })); } function onCellMouseLeave() { if (multiple) return; setIsHoverCell(false); setInputValue(format.formatDate(cacheValue, { format: format$1 })); } function onCellClick(date) { onPick === null || onPick === void 0 || onPick(date); setIsHoverCell(false); if (mode === "date") { setYear(date.getFullYear()); setMonth(date.getMonth()); } if (enableTimePicker) { setCacheValue(format.formatDate(date, { format: format$1 })); } else { if (multiple) { var newDate = processDate(date); onChange(newDate, { dayjsValue: format.parseToDayjs(date, format$1), trigger: "pick" }); return; } onChange(format.formatDate(date, { format: format$1, targetFormat: valueType }), { dayjsValue: format.parseToDayjs(date, format$1), trigger: "pick" }); handlePopupInvisible(); } } var onJumperClick = React__default["default"].useCallback(function (_ref) { var trigger = _ref.trigger; var monthCountMap = { date: 1, week: 1, month: 12, quarter: 12, year: 120 }; var monthCount = monthCountMap[mode] || 0; var current = new Date(year, month); var next = null; if (trigger === "prev") { next = utils.subtractMonth(current, monthCount); } else if (trigger === "current") { next = new Date(); } else if (trigger === "next") { next = utils.addMonth(current, monthCount); } var nextYear = next.getFullYear(); var nextMonth = next.getMonth(); setYear(nextYear); setMonth(nextMonth); }, [year, month, mode, setYear, setMonth]); function onTimePickerChange(val) { setTime(val); var _extractTimeObj = utils.extractTimeObj(val), hours = _extractTimeObj.hours, minutes = _extractTimeObj.minutes, seconds = _extractTimeObj.seconds, milliseconds = _extractTimeObj.milliseconds, meridiem = _extractTimeObj.meridiem; var nextHours = hours; if (/am/i.test(meridiem) && nextHours === 12) nextHours -= 12; if (/pm/i.test(meridiem) && nextHours < 12) nextHours += 12; var currentDate = !dayjs__default["default"](inputValue, format$1).isValid() ? dayjs__default["default"]() : dayjs__default["default"](inputValue, format$1); var nextDate = currentDate.hour(nextHours).minute(minutes).second(seconds).millisecond(milliseconds).toDate(); setInputValue(format.formatDate(nextDate, { format: format$1 })); setCacheValue(format.formatDate(nextDate, { format: format$1 })); onPick === null || onPick === void 0 || onPick(nextDate); } function onConfirmClick(_ref2) { var _props$onConfirm; var e = _ref2.e; var nextValue = format.formatDate(inputValue, { format: format$1 }); props === null || props === void 0 || (_props$onConfirm = props.onConfirm) === null || _props$onConfirm === void 0 || _props$onConfirm.call(props, { e: e, date: nextValue }); if (nextValue) { onChange(format.formatDate(inputValue, { format: format$1, targetFormat: valueType }), { dayjsValue: format.parseToDayjs(inputValue, format$1), trigger: "confirm" }); } else { setInputValue(format.formatDate(value, { format: format$1 })); } handlePopupInvisible(); } function onPresetClick(preset, context) { var _props$onPresetClick; var presetValue = preset; if (typeof preset === "function") { presetValue = preset(); } onChange(format.formatDate(presetValue, { format: format$1, targetFormat: valueType }), { dayjsValue: format.parseToDayjs(presetValue, format$1), trigger: "preset" }); (_props$onPresetClick = props.onPresetClick) === null || _props$onPresetClick === void 0 || _props$onPresetClick.call(props, context); handlePopupInvisible(); } var onYearChange = React.useCallback(function (year2) { setYear(year2); }, []); var onMonthChange = React.useCallback(function (month2) { setMonth(month2); }, []); function processDate(date) { var _currentDate; var isSameDate; var currentValue = value || []; if (mode !== "week") isSameDate = currentValue.some(function (val) { return utils.isSame(format.parseToDayjs(val, format$1).toDate(), date, mode, local.dayjsLocale); });else { isSameDate = currentValue.some(function (val) { return val === dayjs__default["default"](date).locale(local.dayjsLocale).format(format$1); }); } var currentDate; if (!isSameDate) { currentDate = currentValue.concat(format.formatDate(date, { format: format$1, targetFormat: valueType })); } else { currentDate = currentValue.filter(function (val) { return format.formatDate(val, { format: format$1, targetFormat: valueType }) !== format.formatDate(date, { format: format$1, targetFormat: valueType }); }); } return (_currentDate = currentDate) === null || _currentDate === void 0 ? void 0 : _currentDate.sort(function (a, b) { return dayjs__default["default"](a).valueOf() - dayjs__default["default"](b).valueOf(); }); } var onTagRemoveClick = function onTagRemoveClick(ctx) { if (["week", "quarter"].includes(props.mode)) { onChange === null || onChange === void 0 || onChange(ctx.value, { trigger: "tag-remove" }); return; } var removeDate = dayjs__default["default"](ctx.item).toDate(); var newDate = processDate(removeDate); onChange === null || onChange === void 0 || onChange(newDate, { dayjsValue: format.parseToDayjs(removeDate, format$1), trigger: "tag-remove" }); }; var onTagClearClick = function onTagClearClick(_ref3) { var e = _ref3.e; e.stopPropagation(); handlePopupInvisible(); onChange([], { dayjsValue: dayjs__default["default"](), trigger: "clear" }); onClear === null || onClear === void 0 || onClear({ e: e }); }; var panelProps = { value: cacheValue, year: year, month: month, mode: mode, format: format$1, presets: presets, time: multiple ? false : time, disableDate: disableDate, firstDayOfWeek: firstDayOfWeek, timePickerProps: timePickerProps, enableTimePicker: multiple ? false : enableTimePicker, presetsPlacement: presetsPlacement, popupVisible: popupVisible, needConfirm: needConfirm, multiple: multiple, onCellClick: onCellClick, onCellMouseEnter: onCellMouseEnter, onCellMouseLeave: onCellMouseLeave, onJumperClick: onJumperClick, onConfirmClick: onConfirmClick, onPresetClick: onPresetClick, onYearChange: onYearChange, onMonthChange: onMonthChange, onTimePickerChange: onTimePickerChange, disableTime: disableTime }; return /* @__PURE__ */React__default["default"].createElement("div", { className: classNames__default["default"]("".concat(classPrefix, "-date-picker"), className), style: style, ref: ref }, /* @__PURE__ */React__default["default"].createElement(selectInput_index.SelectInput, { disabled: disabled, value: inputValue, status: props.status, tips: props.tips, borderless: props.borderless, label: label, popupProps: popupProps, inputProps: inputProps, popupVisible: popupVisible, panel: /* @__PURE__ */React__default["default"].createElement(datePicker_panel_SinglePanel["default"], _objectSpread({}, panelProps)), multiple: multiple, tagInputProps: _objectSpread({ onRemove: onTagRemoveClick }, tagInputProps), onClear: onTagClearClick })); }); DatePicker.displayName = "DatePicker"; exports["default"] = DatePicker; //# sourceMappingURL=DatePicker.js.map