@lobehub/ui 6.0.0-beta.7 → 6.0.0-beta.9
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.
- package/es/Accordion/Accordion.mjs +3 -3
- package/es/Accordion/Accordion.mjs.map +1 -1
- package/es/Accordion/atoms.mjs +2 -2
- package/es/Accordion/atoms.mjs.map +1 -1
- package/es/Accordion/style.d.mts +1 -1
- package/es/ActionIcon/ActionIcon.mjs +2 -2
- package/es/ActionIcon/ActionIcon.mjs.map +1 -1
- package/es/Alert/Alert.mjs +5 -5
- package/es/Alert/Alert.mjs.map +1 -1
- package/es/AutoComplete/AutoComplete.mjs +5 -5
- package/es/AutoComplete/AutoComplete.mjs.map +1 -1
- package/es/AutoComplete/style.mjs +2 -2
- package/es/AutoComplete/style.mjs.map +1 -1
- package/es/Avatar/Avatar.mjs +2 -2
- package/es/Avatar/Avatar.mjs.map +1 -1
- package/es/Avatar/AvatarGroup/index.mjs +2 -2
- package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
- package/es/Breadcrumb/Breadcrumb.mjs +2 -2
- package/es/Breadcrumb/Breadcrumb.mjs.map +1 -1
- package/es/Button/Button.mjs +1 -1
- package/es/Button/Button.mjs.map +1 -1
- package/es/Button/style.d.mts +8 -1
- package/es/Button/style.mjs +41 -18
- package/es/Button/style.mjs.map +1 -1
- package/es/Checkbox/Checkbox.mjs +3 -3
- package/es/Checkbox/Checkbox.mjs.map +1 -1
- package/es/CodeDiff/DiffPanel.mjs +4 -4
- package/es/CodeDiff/DiffPanel.mjs.map +1 -1
- package/es/CodeEditor/CodeEditor.mjs +4 -4
- package/es/CodeEditor/CodeEditor.mjs.map +1 -1
- package/es/ColorPicker/ColorInputs.mjs +136 -0
- package/es/ColorPicker/ColorInputs.mjs.map +1 -0
- package/es/ColorPicker/ColorPanel.mjs +145 -0
- package/es/ColorPicker/ColorPanel.mjs.map +1 -0
- package/es/ColorPicker/ColorPicker.mjs +62 -199
- package/es/ColorPicker/ColorPicker.mjs.map +1 -1
- package/es/ColorPicker/SaturationArea.mjs +2 -1
- package/es/ColorPicker/SaturationArea.mjs.map +1 -1
- package/es/ColorPicker/Swatch.mjs +24 -0
- package/es/ColorPicker/Swatch.mjs.map +1 -0
- package/es/ColorPicker/Swatches.mjs +66 -0
- package/es/ColorPicker/Swatches.mjs.map +1 -0
- package/es/ColorPicker/Trigger.mjs +112 -0
- package/es/ColorPicker/Trigger.mjs.map +1 -0
- package/es/ColorPicker/color.mjs +25 -1
- package/es/ColorPicker/color.mjs.map +1 -1
- package/es/ColorPicker/recent.mjs +25 -0
- package/es/ColorPicker/recent.mjs.map +1 -0
- package/es/ColorPicker/style.mjs +269 -70
- package/es/ColorPicker/style.mjs.map +1 -1
- package/es/ColorPicker/type.d.mts +15 -0
- package/es/ContextMenu/ContextMenuHost.mjs +2 -2
- package/es/ContextMenu/ContextMenuHost.mjs.map +1 -1
- package/es/ContextMenu/ContextMenuTrigger.mjs +2 -2
- package/es/ContextMenu/ContextMenuTrigger.mjs.map +1 -1
- package/es/ContextMenu/renderItems.mjs +3 -3
- package/es/ContextMenu/renderItems.mjs.map +1 -1
- package/es/DatePicker/DatePicker.d.mts +9 -2
- package/es/DatePicker/DatePicker.mjs +15 -85
- package/es/DatePicker/DatePicker.mjs.map +1 -1
- package/es/DatePicker/DateRangePicker.d.mts +3 -2
- package/es/DatePicker/DateRangePicker.mjs +3 -125
- package/es/DatePicker/DateRangePicker.mjs.map +1 -1
- package/es/DatePicker/DayjsDatePicker.d.mts +12 -0
- package/es/DatePicker/DayjsDatePicker.mjs +19 -0
- package/es/DatePicker/DayjsDatePicker.mjs.map +1 -0
- package/es/DatePicker/DayjsDateRangePicker.d.mts +7 -0
- package/es/DatePicker/DayjsDateRangePicker.mjs +8 -0
- package/es/DatePicker/DayjsDateRangePicker.mjs.map +1 -0
- package/es/DatePicker/PurePanel.mjs +65 -0
- package/es/DatePicker/PurePanel.mjs.map +1 -0
- package/es/DatePicker/RangePicker.mjs +121 -0
- package/es/DatePicker/RangePicker.mjs.map +1 -0
- package/es/DatePicker/SinglePicker.mjs +134 -0
- package/es/DatePicker/SinglePicker.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/Footer.mjs +57 -0
- package/es/DatePicker/core/PickerInput/Popup/Footer.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/PopupPanel.mjs +57 -0
- package/es/DatePicker/core/PickerInput/Popup/PopupPanel.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/PresetPanel.mjs +29 -0
- package/es/DatePicker/core/PickerInput/Popup/PresetPanel.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Popup/index.mjs +133 -0
- package/es/DatePicker/core/PickerInput/Popup/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/RangePicker.d.mts +51 -0
- package/es/DatePicker/core/PickerInput/RangePicker.mjs +343 -0
- package/es/DatePicker/core/PickerInput/RangePicker.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/ClearIcon.mjs +27 -0
- package/es/DatePicker/core/PickerInput/Selector/ClearIcon.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/Icon.mjs +19 -0
- package/es/DatePicker/core/PickerInput/Selector/Icon.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/Input.mjs +237 -0
- package/es/DatePicker/core/PickerInput/Selector/Input.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/MaskFormat.mjs +70 -0
- package/es/DatePicker/core/PickerInput/Selector/MaskFormat.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/RangeSelector.d.mts +8 -0
- package/es/DatePicker/core/PickerInput/Selector/RangeSelector.mjs +136 -0
- package/es/DatePicker/core/PickerInput/Selector/RangeSelector.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/HoverSelector.mjs +28 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/HoverSelector.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/MultipleDates.mjs +69 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/MultipleDates.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/index.mjs +111 -0
- package/es/DatePicker/core/PickerInput/Selector/SingleSelector/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useClearIcon.mjs +18 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useClearIcon.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useInputProps.mjs +108 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useInputProps.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useRootProps.mjs +11 -0
- package/es/DatePicker/core/PickerInput/Selector/hooks/useRootProps.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/Selector/util.mjs +20 -0
- package/es/DatePicker/core/PickerInput/Selector/util.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/SinglePicker.d.mts +55 -0
- package/es/DatePicker/core/PickerInput/SinglePicker.mjs +318 -0
- package/es/DatePicker/core/PickerInput/SinglePicker.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/context.mjs +7 -0
- package/es/DatePicker/core/PickerInput/context.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useCellRender.mjs +30 -0
- package/es/DatePicker/core/PickerInput/hooks/useCellRender.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useDelayState.mjs +37 -0
- package/es/DatePicker/core/PickerInput/hooks/useDelayState.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useDisabledBoundary.mjs +18 -0
- package/es/DatePicker/core/PickerInput/hooks/useDisabledBoundary.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldFormat.mjs +20 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldFormat.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldsInvalidate.mjs +31 -0
- package/es/DatePicker/core/PickerInput/hooks/useFieldsInvalidate.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFilledProps.mjs +98 -0
- package/es/DatePicker/core/PickerInput/hooks/useFilledProps.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusEvents.mjs +41 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusEvents.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusLock.mjs +34 -0
- package/es/DatePicker/core/PickerInput/hooks/useFocusLock.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useHoverStore.mjs +35 -0
- package/es/DatePicker/core/PickerInput/hooks/useHoverStore.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useInputReadOnly.mjs +9 -0
- package/es/DatePicker/core/PickerInput/hooks/useInputReadOnly.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useInvalidate.mjs +36 -0
- package/es/DatePicker/core/PickerInput/hooks/useInvalidate.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useLockEffect.mjs +27 -0
- package/es/DatePicker/core/PickerInput/hooks/useLockEffect.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useOpen.mjs +18 -0
- package/es/DatePicker/core/PickerInput/hooks/useOpen.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/usePickerRef.mjs +19 -0
- package/es/DatePicker/core/PickerInput/hooks/usePickerRef.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/usePresets.mjs +20 -0
- package/es/DatePicker/core/PickerInput/hooks/usePresets.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.mjs +24 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangePickerValue.mjs +107 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangePickerValue.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValue.mjs +144 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValue.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValueChange.mjs +219 -0
- package/es/DatePicker/core/PickerInput/hooks/useRangeValueChange.mjs.map +1 -0
- package/es/DatePicker/core/PickerInput/hooks/useShowNow.mjs +11 -0
- package/es/DatePicker/core/PickerInput/hooks/useShowNow.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/DatePanel/index.mjs +131 -0
- package/es/DatePicker/core/PickerPanel/DatePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/DateTimePanel/index.mjs +35 -0
- package/es/DatePicker/core/PickerPanel/DateTimePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/DecadePanel/index.mjs +84 -0
- package/es/DatePicker/core/PickerPanel/DecadePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/MonthPanel/index.mjs +73 -0
- package/es/DatePicker/core/PickerPanel/MonthPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/PanelBody.mjs +95 -0
- package/es/DatePicker/core/PickerPanel/PanelBody.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/PanelHeader.mjs +130 -0
- package/es/DatePicker/core/PickerPanel/PanelHeader.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/QuarterPanel/index.mjs +64 -0
- package/es/DatePicker/core/PickerPanel/QuarterPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/ClockDial.mjs +108 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/ClockDial.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/geometry.mjs +44 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/geometry.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/index.mjs +157 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/TimeColumn.mjs +100 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/TimeColumn.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/index.mjs +71 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useScrollTo.mjs +62 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useScrollTo.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useTimeState.mjs +200 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useTimeState.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/util.mjs +25 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/util.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/index.mjs +31 -0
- package/es/DatePicker/core/PickerPanel/TimePanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/WeekPanel/index.mjs +34 -0
- package/es/DatePicker/core/PickerPanel/WeekPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/YearPanel/index.mjs +92 -0
- package/es/DatePicker/core/PickerPanel/YearPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/context.mjs +48 -0
- package/es/DatePicker/core/PickerPanel/context.mjs.map +1 -0
- package/es/DatePicker/core/PickerPanel/index.d.mts +1 -0
- package/es/DatePicker/core/PickerPanel/index.mjs +175 -0
- package/es/DatePicker/core/PickerPanel/index.mjs.map +1 -0
- package/es/DatePicker/core/PickerPopup.mjs +118 -0
- package/es/DatePicker/core/PickerPopup.mjs.map +1 -0
- package/es/DatePicker/core/generate/dayjs.mjs +109 -0
- package/es/DatePicker/core/generate/dayjs.mjs.map +1 -0
- package/es/DatePicker/core/generate/index.d.mts +40 -0
- package/es/DatePicker/core/hooks/react.mjs +58 -0
- package/es/DatePicker/core/hooks/react.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useLocale.mjs +51 -0
- package/es/DatePicker/core/hooks/useLocale.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useSemantic.mjs +20 -0
- package/es/DatePicker/core/hooks/useSemantic.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useSyncState.mjs +25 -0
- package/es/DatePicker/core/hooks/useSyncState.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useTimeConfig.mjs +173 -0
- package/es/DatePicker/core/hooks/useTimeConfig.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useTimeInfo.mjs +110 -0
- package/es/DatePicker/core/hooks/useTimeInfo.mjs.map +1 -0
- package/es/DatePicker/core/hooks/useToggleDates.mjs +21 -0
- package/es/DatePicker/core/hooks/useToggleDates.mjs.map +1 -0
- package/es/DatePicker/core/index.d.mts +5 -0
- package/es/DatePicker/core/index.mjs +9 -0
- package/es/DatePicker/core/index.mjs.map +1 -0
- package/es/DatePicker/core/interface.d.mts +325 -0
- package/es/DatePicker/core/locale/common.mjs +11 -0
- package/es/DatePicker/core/locale/common.mjs.map +1 -0
- package/es/DatePicker/core/locale/en_US.mjs +39 -0
- package/es/DatePicker/core/locale/en_US.mjs.map +1 -0
- package/es/DatePicker/core/utils/common.mjs +73 -0
- package/es/DatePicker/core/utils/common.mjs.map +1 -0
- package/es/DatePicker/core/utils/dateUtil.mjs +106 -0
- package/es/DatePicker/core/utils/dateUtil.mjs.map +1 -0
- package/es/DatePicker/core/utils/miscUtil.mjs +46 -0
- package/es/DatePicker/core/utils/miscUtil.mjs.map +1 -0
- package/es/DatePicker/core/utils/uiUtil.mjs +9 -0
- package/es/DatePicker/core/utils/uiUtil.mjs.map +1 -0
- package/es/DatePicker/dateGenerateConfig.mjs +52 -0
- package/es/DatePicker/dateGenerateConfig.mjs.map +1 -0
- package/es/DatePicker/generateConfig.mjs +12 -0
- package/es/DatePicker/generateConfig.mjs.map +1 -0
- package/es/DatePicker/generatePicker.d.mts +12 -0
- package/es/DatePicker/generatePicker.mjs +22 -0
- package/es/DatePicker/generatePicker.mjs.map +1 -0
- package/es/DatePicker/index.d.mts +8 -3
- package/es/DatePicker/index.mjs +5 -1
- package/es/DatePicker/legacyDate.mjs +58 -0
- package/es/DatePicker/legacyDate.mjs.map +1 -0
- package/es/DatePicker/locale.d.mts +15 -0
- package/es/DatePicker/locale.mjs +143 -0
- package/es/DatePicker/locale.mjs.map +1 -0
- package/es/DatePicker/semantic.mjs +29 -0
- package/es/DatePicker/semantic.mjs.map +1 -0
- package/es/DatePicker/style.mjs +3 -155
- package/es/DatePicker/style.mjs.map +1 -1
- package/es/DatePicker/type.d.mts +294 -27
- package/es/DatePicker/usePanelKeyboard.mjs +230 -0
- package/es/DatePicker/usePanelKeyboard.mjs.map +1 -0
- package/es/DatePicker/usePickerShared.mjs +106 -0
- package/es/DatePicker/usePickerShared.mjs.map +1 -0
- package/es/DatePicker/usePresetActive.mjs +49 -0
- package/es/DatePicker/usePresetActive.mjs.map +1 -0
- package/es/DraggablePanel/atoms.mjs +5 -5
- package/es/DraggablePanel/atoms.mjs.map +1 -1
- package/es/DraggableSideNav/DraggableSideNav.mjs +3 -3
- package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
- package/es/Drawer/Drawer.mjs +2 -2
- package/es/Drawer/Drawer.mjs.map +1 -1
- package/es/Drawer/atoms.mjs +6 -6
- package/es/Drawer/atoms.mjs.map +1 -1
- package/es/DropdownMenu/atoms.mjs +22 -22
- package/es/DropdownMenu/atoms.mjs.map +1 -1
- package/es/DropdownMenu/sharedStyle.mjs +2 -2
- package/es/DropdownMenu/sharedStyle.mjs.map +1 -1
- package/es/EditorSlashMenu/atoms.mjs +12 -12
- package/es/EditorSlashMenu/atoms.mjs.map +1 -1
- package/es/EmojiPicker/EmojiPicker.mjs +7 -7
- package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
- package/es/EmojiPicker/loadEmojiData.mjs +6 -0
- package/es/EmojiPicker/loadEmojiData.mjs.map +1 -0
- package/es/FloatingPanel/FloatingPanel.mjs +2 -2
- package/es/FloatingPanel/FloatingPanel.mjs.map +1 -1
- package/es/FormKit/List.mjs +2 -2
- package/es/FormKit/List.mjs.map +1 -1
- package/es/Highlighter/FullFeatured.mjs +2 -2
- package/es/Highlighter/FullFeatured.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs +2 -2
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
- package/es/Highlighter/SyntaxHighlighter/index.mjs +4 -4
- package/es/Highlighter/SyntaxHighlighter/index.mjs.map +1 -1
- package/es/Highlighter/style.mjs +2 -2
- package/es/Highlighter/style.mjs.map +1 -1
- package/es/HtmlPreview/HtmlPreview.mjs +2 -2
- package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
- package/es/Icon/Icon.mjs +2 -2
- package/es/Icon/Icon.mjs.map +1 -1
- package/es/List/ListRow.mjs +3 -3
- package/es/List/ListRow.mjs.map +1 -1
- package/es/Markdown/Markdown.mjs +2 -2
- package/es/Markdown/Markdown.mjs.map +1 -1
- package/es/Markdown/Typography.mjs +2 -2
- package/es/Markdown/Typography.mjs.map +1 -1
- package/es/Mermaid/FullFeatured.mjs +2 -2
- package/es/Mermaid/FullFeatured.mjs.map +1 -1
- package/es/Mermaid/SyntaxMermaid/index.mjs +4 -4
- package/es/Mermaid/SyntaxMermaid/index.mjs.map +1 -1
- package/es/Modal/atoms.mjs +6 -6
- package/es/Modal/atoms.mjs.map +1 -1
- package/es/Pagination/Pagination.mjs +181 -41
- package/es/Pagination/Pagination.mjs.map +1 -1
- package/es/Pagination/helpers.mjs +3 -3
- package/es/Pagination/helpers.mjs.map +1 -1
- package/es/Pagination/index.d.mts +2 -2
- package/es/Pagination/marker.stylex.mjs +9 -0
- package/es/Pagination/marker.stylex.mjs.map +1 -0
- package/es/Pagination/style.mjs +74 -4
- package/es/Pagination/style.mjs.map +1 -1
- package/es/Pagination/type.d.mts +41 -3
- package/es/Popover/PopoverInGroup.mjs +2 -2
- package/es/Popover/PopoverInGroup.mjs.map +1 -1
- package/es/Popover/atoms.mjs +6 -6
- package/es/Popover/atoms.mjs.map +1 -1
- package/es/ProTable/ProTable.d.mts +11 -0
- package/es/ProTable/ProTable.mjs +208 -0
- package/es/ProTable/ProTable.mjs.map +1 -0
- package/es/ProTable/hooks/useColumnRequest.mjs +55 -0
- package/es/ProTable/hooks/useColumnRequest.mjs.map +1 -0
- package/es/ProTable/hooks/useColumnsState.mjs +37 -0
- package/es/ProTable/hooks/useColumnsState.mjs.map +1 -0
- package/es/ProTable/hooks/useDelayedFlag.mjs +18 -0
- package/es/ProTable/hooks/useDelayedFlag.mjs.map +1 -0
- package/es/ProTable/hooks/useDensity.mjs +15 -0
- package/es/ProTable/hooks/useDensity.mjs.map +1 -0
- package/es/ProTable/hooks/useFetchData.mjs +97 -0
- package/es/ProTable/hooks/useFetchData.mjs.map +1 -0
- package/es/ProTable/hooks/useFullscreen.mjs +22 -0
- package/es/ProTable/hooks/useFullscreen.mjs.map +1 -0
- package/es/ProTable/hooks/usePageInfo.mjs +35 -0
- package/es/ProTable/hooks/usePageInfo.mjs.map +1 -0
- package/es/ProTable/hooks/useProColumns.mjs +123 -0
- package/es/ProTable/hooks/useProColumns.mjs.map +1 -0
- package/es/ProTable/hooks/useProLoading.mjs +19 -0
- package/es/ProTable/hooks/useProLoading.mjs.map +1 -0
- package/es/ProTable/hooks/useProLocale.mjs +22 -0
- package/es/ProTable/hooks/useProLocale.mjs.map +1 -0
- package/es/ProTable/hooks/useProRequest.mjs +137 -0
- package/es/ProTable/hooks/useProRequest.mjs.map +1 -0
- package/es/ProTable/hooks/useRowCache.mjs +11 -0
- package/es/ProTable/hooks/useRowCache.mjs.map +1 -0
- package/es/ProTable/hooks/useSearchForm.mjs +141 -0
- package/es/ProTable/hooks/useSearchForm.mjs.map +1 -0
- package/es/ProTable/hooks/useTableBindings.mjs +39 -0
- package/es/ProTable/hooks/useTableBindings.mjs.map +1 -0
- package/es/ProTable/hooks/useTableSelection.mjs +14 -0
- package/es/ProTable/hooks/useTableSelection.mjs.map +1 -0
- package/es/ProTable/index.d.mts +4 -0
- package/es/ProTable/index.d.ts +1 -0
- package/es/ProTable/index.js +1 -0
- package/es/ProTable/index.mjs +3 -0
- package/es/ProTable/locale.d.mts +15 -0
- package/es/ProTable/locale.mjs +66 -0
- package/es/ProTable/locale.mjs.map +1 -0
- package/es/ProTable/parts/ColumnSetting.mjs +155 -0
- package/es/ProTable/parts/ColumnSetting.mjs.map +1 -0
- package/es/ProTable/parts/FieldControl.mjs +117 -0
- package/es/ProTable/parts/FieldControl.mjs.map +1 -0
- package/es/ProTable/parts/KeywordInput.mjs +19 -0
- package/es/ProTable/parts/KeywordInput.mjs.map +1 -0
- package/es/ProTable/parts/LightFilter.mjs +70 -0
- package/es/ProTable/parts/LightFilter.mjs.map +1 -0
- package/es/ProTable/parts/OptionPopover.mjs +17 -0
- package/es/ProTable/parts/OptionPopover.mjs.map +1 -0
- package/es/ProTable/parts/SearchForm.mjs +180 -0
- package/es/ProTable/parts/SearchForm.mjs.map +1 -0
- package/es/ProTable/parts/SearchSection.mjs +33 -0
- package/es/ProTable/parts/SearchSection.mjs.map +1 -0
- package/es/ProTable/parts/TableAlert.mjs +38 -0
- package/es/ProTable/parts/TableAlert.mjs.map +1 -0
- package/es/ProTable/parts/Toolbar.mjs +50 -0
- package/es/ProTable/parts/Toolbar.mjs.map +1 -0
- package/es/ProTable/parts/ToolbarOptions.mjs +103 -0
- package/es/ProTable/parts/ToolbarOptions.mjs.map +1 -0
- package/es/ProTable/parts/renderValue.mjs +118 -0
- package/es/ProTable/parts/renderValue.mjs.map +1 -0
- package/es/ProTable/style.mjs +278 -0
- package/es/ProTable/style.mjs.map +1 -0
- package/es/ProTable/type.d.mts +397 -0
- package/es/ProTable/utils.mjs +152 -0
- package/es/ProTable/utils.mjs.map +1 -0
- package/es/Radio/Radio.mjs +3 -3
- package/es/Radio/Radio.mjs.map +1 -1
- package/es/ScrollArea/atoms.mjs +4 -4
- package/es/ScrollArea/atoms.mjs.map +1 -1
- package/es/Segmented/Segmented.mjs +3 -3
- package/es/Segmented/Segmented.mjs.map +1 -1
- package/es/Segmented/atoms.mjs +2 -2
- package/es/Segmented/atoms.mjs.map +1 -1
- package/es/Select/Select.mjs +22 -13
- package/es/Select/Select.mjs.map +1 -1
- package/es/Select/atoms.mjs +4 -4
- package/es/Select/atoms.mjs.map +1 -1
- package/es/Select/helpers.mjs +8 -1
- package/es/Select/helpers.mjs.map +1 -1
- package/es/Select/hooks.mjs +8 -4
- package/es/Select/hooks.mjs.map +1 -1
- package/es/Select/renderOptions.mjs +2 -2
- package/es/Select/renderOptions.mjs.map +1 -1
- package/es/Select/type.d.mts +7 -0
- package/es/Switch/Switch.mjs +2 -2
- package/es/Switch/Switch.mjs.map +1 -1
- package/es/Switch/atoms.mjs +2 -2
- package/es/Switch/atoms.mjs.map +1 -1
- package/es/Table/Column.d.mts +8 -0
- package/es/Table/Column.mjs +6 -0
- package/es/Table/Column.mjs.map +1 -0
- package/es/Table/ColumnGroup.d.mts +11 -0
- package/es/Table/ColumnGroup.mjs +6 -0
- package/es/Table/ColumnGroup.mjs.map +1 -0
- package/es/Table/Table.d.mts +16 -2
- package/es/Table/Table.mjs +149 -118
- package/es/Table/Table.mjs.map +1 -1
- package/es/Table/atoms/cells.d.mts +42 -0
- package/es/Table/atoms/cells.mjs +72 -0
- package/es/Table/atoms/cells.mjs.map +1 -0
- package/es/Table/atoms/index.d.mts +3 -0
- package/es/Table/atoms/layout.d.mts +44 -0
- package/es/Table/atoms/layout.mjs +62 -0
- package/es/Table/atoms/layout.mjs.map +1 -0
- package/es/Table/constants.mjs +16 -0
- package/es/Table/constants.mjs.map +1 -0
- package/es/Table/engine/fixed.d.mts +1 -0
- package/es/Table/engine/fixed.mjs +53 -0
- package/es/Table/engine/fixed.mjs.map +1 -0
- package/es/Table/engine/types.d.mts +1 -0
- package/es/Table/engine/useTableEngine.mjs +180 -0
- package/es/Table/engine/useTableEngine.mjs.map +1 -0
- package/es/Table/index.d.mts +7 -2
- package/es/Table/index.mjs +4 -1
- package/es/Table/internal.d.mts +3 -0
- package/es/Table/pipeline/columnUtils.d.mts +5 -0
- package/es/Table/pipeline/columnUtils.mjs +58 -0
- package/es/Table/pipeline/columnUtils.mjs.map +1 -0
- package/es/Table/pipeline/convertChildrenToColumns.mjs +24 -0
- package/es/Table/pipeline/convertChildrenToColumns.mjs.map +1 -0
- package/es/Table/pipeline/normalizeColumns.mjs +140 -0
- package/es/Table/pipeline/normalizeColumns.mjs.map +1 -0
- package/es/Table/pipeline/selectionUtils.d.mts +9 -0
- package/es/Table/pipeline/selectionUtils.mjs +115 -0
- package/es/Table/pipeline/selectionUtils.mjs.map +1 -0
- package/es/Table/pipeline/useBreakpoint.mjs +36 -0
- package/es/Table/pipeline/useBreakpoint.mjs.map +1 -0
- package/es/Table/pipeline/useExpandable.mjs +45 -0
- package/es/Table/pipeline/useExpandable.mjs.map +1 -0
- package/es/Table/pipeline/useFilter.mjs +52 -0
- package/es/Table/pipeline/useFilter.mjs.map +1 -0
- package/es/Table/pipeline/useSelection.mjs +302 -0
- package/es/Table/pipeline/useSelection.mjs.map +1 -0
- package/es/Table/pipeline/useSorter.mjs +146 -0
- package/es/Table/pipeline/useSorter.mjs.map +1 -0
- package/es/Table/pipeline/useTableLocale.mjs +30 -0
- package/es/Table/pipeline/useTableLocale.mjs.map +1 -0
- package/es/Table/pipeline/useTableState.mjs +118 -0
- package/es/Table/pipeline/useTableState.mjs.map +1 -0
- package/es/Table/pipeline/useVirtualLayout.mjs +80 -0
- package/es/Table/pipeline/useVirtualLayout.mjs.map +1 -0
- package/es/Table/render/Body.mjs +150 -0
- package/es/Table/render/Body.mjs.map +1 -0
- package/es/Table/render/BodyCell.mjs +87 -0
- package/es/Table/render/BodyCell.mjs.map +1 -0
- package/es/Table/render/CellShell.mjs +84 -0
- package/es/Table/render/CellShell.mjs.map +1 -0
- package/es/Table/render/ExpandIcon.mjs +28 -0
- package/es/Table/render/ExpandIcon.mjs.map +1 -0
- package/es/Table/render/FilterDropdown.mjs +139 -0
- package/es/Table/render/FilterDropdown.mjs.map +1 -0
- package/es/Table/render/FilterPanel.mjs +152 -0
- package/es/Table/render/FilterPanel.mjs.map +1 -0
- package/es/Table/render/FixedFrost.mjs +113 -0
- package/es/Table/render/FixedFrost.mjs.map +1 -0
- package/es/Table/render/FixedHolder.mjs +51 -0
- package/es/Table/render/FixedHolder.mjs.map +1 -0
- package/es/Table/render/Header.mjs +184 -0
- package/es/Table/render/Header.mjs.map +1 -0
- package/es/Table/render/LoadingSkeleton.mjs +78 -0
- package/es/Table/render/LoadingSkeleton.mjs.map +1 -0
- package/es/Table/render/PaginationBar.mjs +71 -0
- package/es/Table/render/PaginationBar.mjs.map +1 -0
- package/es/Table/render/SelectionCells.mjs +111 -0
- package/es/Table/render/SelectionCells.mjs.map +1 -0
- package/es/Table/render/StickyScrollBar.mjs +99 -0
- package/es/Table/render/StickyScrollBar.mjs.map +1 -0
- package/es/Table/render/Summary.d.mts +16 -0
- package/es/Table/render/Summary.mjs +58 -0
- package/es/Table/render/Summary.mjs.map +1 -0
- package/es/Table/render/TableView.mjs +215 -0
- package/es/Table/render/TableView.mjs.map +1 -0
- package/es/Table/render/VirtualBody.mjs +101 -0
- package/es/Table/render/VirtualBody.mjs.map +1 -0
- package/es/Table/render/context.mjs +15 -0
- package/es/Table/render/context.mjs.map +1 -0
- package/es/Table/render/filterUtils.mjs +22 -0
- package/es/Table/render/filterUtils.mjs.map +1 -0
- package/es/Table/render/tableHelpers.mjs +27 -0
- package/es/Table/render/tableHelpers.mjs.map +1 -0
- package/es/Table/render/useColGroups.mjs +23 -0
- package/es/Table/render/useColGroups.mjs.map +1 -0
- package/es/Table/render/useScrollSync.mjs +104 -0
- package/es/Table/render/useScrollSync.mjs.map +1 -0
- package/es/Table/render/useViewContexts.mjs +134 -0
- package/es/Table/render/useViewContexts.mjs.map +1 -0
- package/es/Table/semantic.mjs +45 -0
- package/es/Table/semantic.mjs.map +1 -0
- package/es/Table/store/createTableStore.d.mts +1 -0
- package/es/Table/store/createTableStore.mjs +40 -0
- package/es/Table/store/createTableStore.mjs.map +1 -0
- package/es/Table/store/hooks.mjs +24 -0
- package/es/Table/store/hooks.mjs.map +1 -0
- package/es/Table/style.mjs +175 -90
- package/es/Table/style.mjs.map +1 -1
- package/es/Table/type.d.mts +467 -37
- package/es/Table/useTableController.mjs +293 -0
- package/es/Table/useTableController.mjs.map +1 -0
- package/es/Tabs/Tabs.mjs +2 -2
- package/es/Tabs/Tabs.mjs.map +1 -1
- package/es/Tabs/atoms.mjs +2 -2
- package/es/Tabs/atoms.mjs.map +1 -1
- package/es/Tag/Tag.mjs +2 -2
- package/es/Tag/Tag.mjs.map +1 -1
- package/es/Text/Text.mjs +2 -2
- package/es/Text/Text.mjs.map +1 -1
- package/es/Text/style.d.mts +3 -3
- package/es/Text/style.mjs +3 -3
- package/es/Text/style.mjs.map +1 -1
- package/es/ToggleGroup/ToggleGroup.mjs +3 -3
- package/es/ToggleGroup/ToggleGroup.mjs.map +1 -1
- package/es/ToggleGroup/atoms.mjs +2 -2
- package/es/ToggleGroup/atoms.mjs.map +1 -1
- package/es/Tooltip/TooltipGroup.mjs +3 -3
- package/es/Tooltip/TooltipGroup.mjs.map +1 -1
- package/es/Tooltip/TooltipStandalone.mjs +3 -3
- package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
- package/es/Tree/Tree.mjs +2 -2
- package/es/Tree/Tree.mjs.map +1 -1
- package/es/Tree/TreeNode.mjs +2 -2
- package/es/Tree/TreeNode.mjs.map +1 -1
- package/es/Video/Video.mjs +2 -2
- package/es/Video/Video.mjs.map +1 -1
- package/es/awesome/Features/FeatureItem.mjs +2 -2
- package/es/awesome/Features/FeatureItem.mjs.map +1 -1
- package/es/awesome/Hero/Hero.mjs +3 -3
- package/es/awesome/Hero/Hero.mjs.map +1 -1
- package/es/awesome/InstallBanner/InstallBanner.mjs +2 -2
- package/es/awesome/InstallBanner/InstallBanner.mjs.map +1 -1
- package/es/awesome/LandingHero/LandingHero.mjs +3 -3
- package/es/awesome/LandingHero/LandingHero.mjs.map +1 -1
- package/es/awesome/LogoMarquee/LogoMarquee.mjs +2 -2
- package/es/awesome/LogoMarquee/LogoMarquee.mjs.map +1 -1
- package/es/awesome/TypewriterEffect/TypewriterEffect.mjs +4 -4
- package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
- package/es/awesome/landingActions.mjs +2 -2
- package/es/awesome/landingActions.mjs.map +1 -1
- package/es/chat/ChatItem/ChatItem.mjs +2 -2
- package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
- package/es/chat/EditableMessage/EditableMessage.mjs +3 -3
- package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
- package/es/chat/EditableMessageList/EditableMessageList.mjs +1 -1
- package/es/chat/MessageInput/MessageInput.mjs +3 -3
- package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
- package/es/dashboard/AuthLayout/AuthLayout.mjs +8 -4
- package/es/dashboard/AuthLayout/AuthLayout.mjs.map +1 -1
- package/es/dashboard/AuthLayout/style.mjs +14 -3
- package/es/dashboard/AuthLayout/style.mjs.map +1 -1
- package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs +2 -2
- package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs.map +1 -1
- package/es/dashboard/AuthTools/AuthThemeSwitch.mjs +2 -2
- package/es/dashboard/AuthTools/AuthThemeSwitch.mjs.map +1 -1
- package/es/dashboard/ConsoleNav/ConsoleNav.mjs +3 -3
- package/es/dashboard/ConsoleNav/ConsoleNav.mjs.map +1 -1
- package/es/dashboard/ConsoleNav/style.mjs +2 -2
- package/es/dashboard/ConsoleNav/style.mjs.map +1 -1
- package/es/dashboard/ConsoleShell/style.mjs +1 -1
- package/es/dashboard/ConsoleShell/style.mjs.map +1 -1
- package/es/dashboard/FilterSidebar/FilterSidebar.mjs +1 -1
- package/es/dashboard/FilterSidebar/style.mjs +2 -2
- package/es/dashboard/FilterSidebar/style.mjs.map +1 -1
- package/es/dashboard/FilterStrip/style.mjs +1 -1
- package/es/dashboard/FilterStrip/style.mjs.map +1 -1
- package/es/dashboard/MetricStrip/MetricCell.mjs +25 -14
- package/es/dashboard/MetricStrip/MetricCell.mjs.map +1 -1
- package/es/dashboard/MetricStrip/style.mjs +14 -1
- package/es/dashboard/MetricStrip/style.mjs.map +1 -1
- package/es/dashboard/MetricStrip/type.d.mts +2 -0
- package/es/dashboard/PageSkeleton/style.mjs +2 -1
- package/es/dashboard/PageSkeleton/style.mjs.map +1 -1
- package/es/dashboard/StatCard/StatCard.d.mts +1 -1
- package/es/dashboard/StatCard/StatCard.mjs +2 -1
- package/es/dashboard/StatCard/StatCard.mjs.map +1 -1
- package/es/dashboard/StatCard/type.d.mts +2 -0
- package/es/dashboard/Surface/Surface.mjs +3 -4
- package/es/dashboard/Surface/Surface.mjs.map +1 -1
- package/es/dashboard/Surface/link.mjs +1 -1
- package/es/dashboard/Surface/link.mjs.map +1 -1
- package/es/dashboard/Surface/style.mjs +15 -14
- package/es/dashboard/Surface/style.mjs.map +1 -1
- package/es/dashboard/index.mjs +2 -2
- package/es/eslint/noBaseUiSubpath.mjs +2 -1
- package/es/eslint/noBaseUiSubpath.mjs.map +1 -1
- package/es/i18n/resources/en/colorPicker.d.mts +5 -0
- package/es/i18n/resources/en/colorPicker.mjs +5 -0
- package/es/i18n/resources/en/colorPicker.mjs.map +1 -1
- package/es/i18n/resources/en/datePicker.d.mts +54 -0
- package/es/i18n/resources/en/datePicker.mjs +55 -1
- package/es/i18n/resources/en/datePicker.mjs.map +1 -1
- package/es/i18n/resources/en/index.d.mts +4 -3
- package/es/i18n/resources/en/index.mjs +3 -1
- package/es/i18n/resources/en/index.mjs.map +1 -1
- package/es/i18n/resources/en/table.d.mts +23 -0
- package/es/i18n/resources/en/table.mjs +24 -0
- package/es/i18n/resources/en/table.mjs.map +1 -0
- package/es/i18n/resources/zhCn/colorPicker.d.mts +5 -0
- package/es/i18n/resources/zhCn/colorPicker.mjs +5 -0
- package/es/i18n/resources/zhCn/colorPicker.mjs.map +1 -1
- package/es/i18n/resources/zhCn/datePicker.d.mts +54 -0
- package/es/i18n/resources/zhCn/datePicker.mjs +55 -1
- package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -1
- package/es/i18n/resources/zhCn/index.d.mts +4 -3
- package/es/i18n/resources/zhCn/index.mjs +4 -2
- package/es/i18n/resources/zhCn/index.mjs.map +1 -1
- package/es/i18n/resources/zhCn/table.d.mts +23 -0
- package/es/i18n/resources/zhCn/table.mjs +24 -0
- package/es/i18n/resources/zhCn/table.mjs.map +1 -0
- package/es/i18n/types.d.mts +3 -2
- package/es/index.d.mts +15 -6
- package/es/index.mjs +12 -6
- package/es/internal/overflow/OverflowList.mjs +71 -0
- package/es/internal/overflow/OverflowList.mjs.map +1 -0
- package/es/mdx/Callout/index.mjs +2 -2
- package/es/mdx/Callout/index.mjs.map +1 -1
- package/es/mdx/Cards/Card.mjs +2 -2
- package/es/mdx/Cards/Card.mjs.map +1 -1
- package/es/mdx/Cards/index.mjs +2 -2
- package/es/mdx/Cards/index.mjs.map +1 -1
- package/es/mdx/Mdx/index.mjs +2 -2
- package/es/mdx/Mdx/index.mjs.map +1 -1
- package/es/mdx/Steps/index.mjs +2 -2
- package/es/mdx/Steps/index.mjs.map +1 -1
- package/es/mdx/mdxComponents/Pre.mjs +5 -5
- package/es/mdx/mdxComponents/Pre.mjs.map +1 -1
- package/es/storybook/StoryBook/style.mjs +2 -0
- package/es/storybook/StoryBook/style.mjs.map +1 -1
- package/es/style.css +2966 -957
- package/es/styles/stylex/props.mjs +2 -2
- package/es/styles/stylex/props.mjs.map +1 -1
- package/es/styles/theme/themeCss.mjs +15 -0
- package/es/styles/theme/themeCss.mjs.map +1 -1
- package/es/theme.css +8 -0
- package/package.json +6 -1
- package/es/DatePicker/CalendarPanel.mjs +0 -189
- package/es/DatePicker/CalendarPanel.mjs.map +0 -1
- package/es/DatePicker/PickerShell.mjs +0 -43
- package/es/DatePicker/PickerShell.mjs.map +0 -1
- package/es/DatePicker/calendar.d.mts +0 -4
- package/es/DatePicker/calendar.mjs +0 -46
- package/es/DatePicker/calendar.mjs.map +0 -1
- package/es/Table/FilterMenu.mjs +0 -45
- package/es/Table/FilterMenu.mjs.map +0 -1
- package/es/Table/TableBody.mjs +0 -67
- package/es/Table/TableBody.mjs.map +0 -1
- package/es/Table/TableHead.mjs +0 -58
- package/es/Table/TableHead.mjs.map +0 -1
- package/es/Table/features.mjs +0 -12
- package/es/Table/features.mjs.map +0 -1
- package/es/Table/fixedOffsets.mjs +0 -29
- package/es/Table/fixedOffsets.mjs.map +0 -1
- package/es/Table/marker.stylex.mjs +0 -9
- package/es/Table/marker.stylex.mjs.map +0 -1
- package/es/Table/toColumnDefs.mjs +0 -26
- package/es/Table/toColumnDefs.mjs.map +0 -1
- package/es/Table/useTableState.mjs +0 -99
- package/es/Table/useTableState.mjs.map +0 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { warning } from "../../utils/common.mjs";
|
|
2
|
+
import { toArray } from "../../utils/miscUtil.mjs";
|
|
3
|
+
import useLocale from "../../hooks/useLocale.mjs";
|
|
4
|
+
import { fillShowTimeConfig, getTimeProps } from "../../hooks/useTimeConfig.mjs";
|
|
5
|
+
import { fillClearIcon } from "../Selector/hooks/useClearIcon.mjs";
|
|
6
|
+
import useDisabledBoundary from "./useDisabledBoundary.mjs";
|
|
7
|
+
import { useFieldFormat } from "./useFieldFormat.mjs";
|
|
8
|
+
import useInputReadOnly from "./useInputReadOnly.mjs";
|
|
9
|
+
import useInvalidate from "./useInvalidate.mjs";
|
|
10
|
+
import * as React$1 from "react";
|
|
11
|
+
//#region src/DatePicker/core/PickerInput/hooks/useFilledProps.ts
|
|
12
|
+
function useList(value, fillMode = false) {
|
|
13
|
+
return React$1.useMemo(() => {
|
|
14
|
+
const list = value ? toArray(value) : value;
|
|
15
|
+
if (fillMode && list) list[1] = list[1] || list[0];
|
|
16
|
+
return list;
|
|
17
|
+
}, [value, fillMode]);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Align the outer props with unique typed and fill undefined props.
|
|
21
|
+
* This is shared with both RangePicker and Picker. This will do:
|
|
22
|
+
* - Convert `value` & `defaultValue` to array
|
|
23
|
+
* - handle the legacy props fill like `clearIcon` + `allowClear` = `clearIcon`
|
|
24
|
+
*/
|
|
25
|
+
function useFilledProps(props, updater) {
|
|
26
|
+
const { generateConfig, locale, picker = "date", prefixCls = "rc-picker", previewValue = "hover", styles = {}, classNames = {}, order = true, components = {}, inputRender, allowClear, clearIcon, needConfirm, multiple, format, inputReadOnly, disabledDate, minDate, maxDate, showTime, value, defaultValue, pickerValue, defaultPickerValue } = props;
|
|
27
|
+
const values = useList(value);
|
|
28
|
+
const defaultValues = useList(defaultValue);
|
|
29
|
+
const pickerValues = useList(pickerValue);
|
|
30
|
+
const defaultPickerValues = useList(defaultPickerValue);
|
|
31
|
+
/** Almost same as `picker`, but add `datetime` for `date` with `showTime` */
|
|
32
|
+
const internalPicker = picker === "date" && showTime ? "datetime" : picker;
|
|
33
|
+
/** The picker is `datetime` or `time` */
|
|
34
|
+
const multipleInteractivePicker = internalPicker === "time" || internalPicker === "datetime";
|
|
35
|
+
const complexPicker = multipleInteractivePicker || !!multiple;
|
|
36
|
+
const mergedNeedConfirm = needConfirm ?? multipleInteractivePicker;
|
|
37
|
+
const [timeProps, localeTimeProps, showTimeFormat, propFormat] = getTimeProps(props);
|
|
38
|
+
const mergedLocale = useLocale(locale, localeTimeProps);
|
|
39
|
+
const mergedShowTime = React$1.useMemo(() => fillShowTimeConfig(internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale), [
|
|
40
|
+
internalPicker,
|
|
41
|
+
showTimeFormat,
|
|
42
|
+
propFormat,
|
|
43
|
+
timeProps,
|
|
44
|
+
mergedLocale
|
|
45
|
+
]);
|
|
46
|
+
if (process.env.NODE_ENV !== "production" && picker === "time" && [
|
|
47
|
+
"disabledHours",
|
|
48
|
+
"disabledMinutes",
|
|
49
|
+
"disabledSeconds"
|
|
50
|
+
].some((key) => props[key])) warning(false, `'disabledHours', 'disabledMinutes', 'disabledSeconds' will be removed in the next major version, please use 'disabledTime' instead.`);
|
|
51
|
+
const filledProps = React$1.useMemo(() => ({
|
|
52
|
+
...props,
|
|
53
|
+
previewValue,
|
|
54
|
+
prefixCls,
|
|
55
|
+
locale: mergedLocale,
|
|
56
|
+
picker,
|
|
57
|
+
styles,
|
|
58
|
+
classNames,
|
|
59
|
+
order,
|
|
60
|
+
components: {
|
|
61
|
+
input: inputRender,
|
|
62
|
+
...components
|
|
63
|
+
},
|
|
64
|
+
clearIcon: fillClearIcon(prefixCls, allowClear, clearIcon),
|
|
65
|
+
showTime: mergedShowTime,
|
|
66
|
+
value: values,
|
|
67
|
+
defaultValue: defaultValues,
|
|
68
|
+
pickerValue: pickerValues,
|
|
69
|
+
defaultPickerValue: defaultPickerValues,
|
|
70
|
+
...updater?.()
|
|
71
|
+
}), [props]);
|
|
72
|
+
const [formatList, maskFormat] = useFieldFormat(internalPicker, mergedLocale, format);
|
|
73
|
+
const mergedInputReadOnly = useInputReadOnly(formatList, inputReadOnly, multiple);
|
|
74
|
+
const disabledBoundaryDate = useDisabledBoundary(generateConfig, locale, disabledDate, minDate, maxDate);
|
|
75
|
+
const isInvalidateDate = useInvalidate(generateConfig, picker, disabledBoundaryDate, mergedShowTime);
|
|
76
|
+
return [
|
|
77
|
+
React$1.useMemo(() => ({
|
|
78
|
+
...filledProps,
|
|
79
|
+
needConfirm: mergedNeedConfirm,
|
|
80
|
+
inputReadOnly: mergedInputReadOnly,
|
|
81
|
+
disabledDate: disabledBoundaryDate
|
|
82
|
+
}), [
|
|
83
|
+
filledProps,
|
|
84
|
+
mergedNeedConfirm,
|
|
85
|
+
mergedInputReadOnly,
|
|
86
|
+
disabledBoundaryDate
|
|
87
|
+
]),
|
|
88
|
+
internalPicker,
|
|
89
|
+
complexPicker,
|
|
90
|
+
formatList,
|
|
91
|
+
maskFormat,
|
|
92
|
+
isInvalidateDate
|
|
93
|
+
];
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
96
|
+
export { useFilledProps as default };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=useFilledProps.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFilledProps.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useFilledProps.ts"],"sourcesContent":["import * as React from 'react';\n\nimport useLocale from '../../hooks/useLocale';\nimport { fillShowTimeConfig, getTimeProps } from '../../hooks/useTimeConfig';\nimport type {\n Components,\n DisabledDate,\n FormatType,\n InternalMode,\n PickerMode,\n} from '../../interface';\nimport { warning } from '../../utils/common';\nimport { toArray } from '../../utils/miscUtil';\nimport type { RangePickerProps } from '../RangePicker';\nimport { fillClearIcon } from '../Selector/hooks/useClearIcon';\nimport useDisabledBoundary from './useDisabledBoundary';\nimport { useFieldFormat } from './useFieldFormat';\nimport useInputReadOnly from './useInputReadOnly';\nimport useInvalidate from './useInvalidate';\n\ntype UseInvalidate<DateType extends object = any> = typeof useInvalidate<DateType>;\n\ntype PickedProps<DateType extends object = any> = Pick<\n RangePickerProps<DateType>,\n | 'generateConfig'\n | 'locale'\n | 'picker'\n | 'prefixCls'\n | 'styles'\n | 'classNames'\n | 'order'\n | 'components'\n | 'inputRender'\n | 'clearIcon'\n | 'allowClear'\n | 'needConfirm'\n | 'format'\n | 'inputReadOnly'\n | 'disabledDate'\n | 'minDate'\n | 'maxDate'\n | 'defaultOpenValue'\n | 'previewValue'\n> & {\n multiple?: boolean;\n // RangePicker showTime definition is different with Picker\n showTime?: any;\n value?: any;\n defaultValue?: any;\n pickerValue?: any;\n defaultPickerValue?: any;\n};\n\ntype ExcludeBooleanType<T> = T extends boolean ? never : T;\n\ntype GetGeneric<T> = T extends PickedProps<infer U> ? U : never;\n\ntype ToArrayType<T, DateType> = T extends any[] ? T : DateType[];\n\ntype ToArrayValueType<T, DateType> = ToArrayType<NonNullable<T>, DateType>;\n\nfunction useList<T>(value: T | T[], fillMode = false) {\n const values = React.useMemo(() => {\n const list = value ? toArray(value) : (value as null | undefined);\n\n if (fillMode && list) {\n list[1] = list[1] || list[0];\n }\n\n return list;\n }, [value, fillMode]);\n return values;\n}\n\n/**\n * Align the outer props with unique typed and fill undefined props.\n * This is shared with both RangePicker and Picker. This will do:\n * - Convert `value` & `defaultValue` to array\n * - handle the legacy props fill like `clearIcon` + `allowClear` = `clearIcon`\n */\nexport default function useFilledProps<\n InProps extends PickedProps,\n DateType extends GetGeneric<InProps>,\n UpdaterProps extends object,\n>(\n props: InProps,\n updater?: () => UpdaterProps,\n): [\n filledProps: Omit<\n InProps,\n | keyof UpdaterProps\n | 'showTime'\n | 'value'\n | 'defaultValue'\n | 'pickerValue'\n | 'defaultPickerValue'\n > &\n UpdaterProps & {\n picker: PickerMode;\n prefixCls: string;\n order: boolean;\n needConfirm: boolean;\n disabledDate: DisabledDate<DateType>;\n components: Components<DateType>;\n showTime?: ExcludeBooleanType<InProps['showTime']>;\n value?: ToArrayValueType<InProps['value'], DateType>;\n defaultValue?: ToArrayValueType<InProps['value'], DateType>;\n pickerValue?: ToArrayValueType<InProps['pickerValue'], DateType>;\n defaultPickerValue?: ToArrayValueType<InProps['defaultPickerValue'], DateType>;\n },\n internalPicker: InternalMode,\n complexPicker: boolean,\n formatList: FormatType<DateType>[],\n maskFormat: string | null | undefined,\n isInvalidateDate: ReturnType<UseInvalidate<DateType>>,\n] {\n const {\n generateConfig,\n locale,\n picker = 'date',\n prefixCls = 'rc-picker',\n previewValue = 'hover',\n styles = {},\n classNames = {},\n order = true,\n components = {},\n inputRender,\n allowClear,\n clearIcon,\n needConfirm,\n multiple,\n format,\n inputReadOnly,\n disabledDate,\n minDate,\n maxDate,\n showTime,\n\n value,\n defaultValue,\n pickerValue,\n defaultPickerValue,\n } = props;\n\n const values = useList(value);\n const defaultValues = useList(defaultValue);\n const pickerValues = useList(pickerValue);\n const defaultPickerValues = useList(defaultPickerValue);\n\n // ======================== Picker ========================\n /** Almost same as `picker`, but add `datetime` for `date` with `showTime` */\n const internalPicker: InternalMode = picker === 'date' && showTime ? 'datetime' : picker;\n\n /** The picker is `datetime` or `time` */\n const multipleInteractivePicker = internalPicker === 'time' || internalPicker === 'datetime';\n const complexPicker = multipleInteractivePicker || !!multiple;\n const mergedNeedConfirm = needConfirm ?? multipleInteractivePicker;\n\n // ========================== Time ==========================\n // Auto `format` need to check `showTime.showXXX` first.\n // And then merge the `locale` into `mergedShowTime`.\n const [timeProps, localeTimeProps, showTimeFormat, propFormat] = getTimeProps(props);\n\n // ======================= Locales ========================\n const mergedLocale = useLocale(locale, localeTimeProps);\n\n const mergedShowTime = React.useMemo(\n () => fillShowTimeConfig(internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale),\n [internalPicker, showTimeFormat, propFormat, timeProps, mergedLocale],\n );\n\n // ======================= Warning ========================\n if (\n process.env.NODE_ENV !== 'production' &&\n picker === 'time' &&\n ['disabledHours', 'disabledMinutes', 'disabledSeconds'].some((key) => (props as any)[key])\n ) {\n warning(\n false,\n `'disabledHours', 'disabledMinutes', 'disabledSeconds' will be removed in the next major version, please use 'disabledTime' instead.`,\n );\n }\n\n // ======================== Props =========================\n const filledProps = React.useMemo(\n () => ({\n ...props,\n previewValue,\n prefixCls,\n locale: mergedLocale,\n picker,\n styles,\n classNames,\n order,\n components: { input: inputRender, ...components },\n clearIcon: fillClearIcon(prefixCls, allowClear, clearIcon),\n showTime: mergedShowTime,\n value: values,\n defaultValue: defaultValues,\n pickerValue: pickerValues,\n defaultPickerValue: defaultPickerValues,\n ...(updater?.() as UpdaterProps),\n }),\n [props],\n );\n\n // ======================== Format ========================\n const [formatList, maskFormat] = useFieldFormat<DateType>(internalPicker, mergedLocale, format);\n\n // ======================= ReadOnly =======================\n const mergedInputReadOnly = useInputReadOnly(formatList, inputReadOnly, multiple);\n\n // ======================= Boundary =======================\n const disabledBoundaryDate = useDisabledBoundary(\n generateConfig,\n locale,\n disabledDate,\n minDate,\n maxDate,\n );\n\n // ====================== Invalidate ======================\n const isInvalidateDate = useInvalidate(\n generateConfig,\n picker,\n disabledBoundaryDate,\n mergedShowTime,\n );\n\n // ======================== Merged ========================\n const mergedProps = React.useMemo(\n () => ({\n ...filledProps,\n needConfirm: mergedNeedConfirm,\n inputReadOnly: mergedInputReadOnly,\n disabledDate: disabledBoundaryDate,\n }),\n [filledProps, mergedNeedConfirm, mergedInputReadOnly, disabledBoundaryDate],\n );\n\n return [mergedProps, internalPicker, complexPicker, formatList, maskFormat, isInvalidateDate];\n}\n"],"mappings":";;;;;;;;;;;AA6DA,SAAS,QAAW,OAAgB,WAAW,OAAO;CAUpD,OATeA,QAAM,cAAc;EACjC,MAAM,OAAO,QAAQ,QAAQ,KAAK,IAAK;EAEvC,IAAI,YAAY,MACd,KAAK,KAAK,KAAK,MAAM,KAAK;EAG5B,OAAO;CACT,GAAG,CAAC,OAAO,QAAQ,CACP;AACd;;;;;;;AAQA,SAAwB,eAKtB,OACA,SA6BA;CACA,MAAM,EACJ,gBACA,QACA,SAAS,QACT,YAAY,aACZ,eAAe,SACf,SAAS,CAAC,GACV,aAAa,CAAC,GACd,QAAQ,MACR,aAAa,CAAC,GACd,aACA,YACA,WACA,aACA,UACA,QACA,eACA,cACA,SACA,SACA,UAEA,OACA,cACA,aACA,uBACE;CAEJ,MAAM,SAAS,QAAQ,KAAK;CAC5B,MAAM,gBAAgB,QAAQ,YAAY;CAC1C,MAAM,eAAe,QAAQ,WAAW;CACxC,MAAM,sBAAsB,QAAQ,kBAAkB;;CAItD,MAAM,iBAA+B,WAAW,UAAU,WAAW,aAAa;;CAGlF,MAAM,4BAA4B,mBAAmB,UAAU,mBAAmB;CAClF,MAAM,gBAAgB,6BAA6B,CAAC,CAAC;CACrD,MAAM,oBAAoB,eAAe;CAKzC,MAAM,CAAC,WAAW,iBAAiB,gBAAgB,cAAc,aAAa,KAAK;CAGnF,MAAM,eAAe,UAAU,QAAQ,eAAe;CAEtD,MAAM,iBAAiBA,QAAM,cACrB,mBAAmB,gBAAgB,gBAAgB,YAAY,WAAW,YAAY,GAC5F;EAAC;EAAgB;EAAgB;EAAY;EAAW;CAAY,CACtE;CAGA,IACE,QAAQ,IAAI,aAAa,gBACzB,WAAW,UACX;EAAC;EAAiB;EAAmB;CAAiB,CAAC,CAAC,MAAM,QAAS,MAAc,IAAI,GAEzF,QACE,OACA,qIACF;CAIF,MAAM,cAAcA,QAAM,eACjB;EACL,GAAG;EACH;EACA;EACA,QAAQ;EACR;EACA;EACA;EACA;EACA,YAAY;GAAE,OAAO;GAAa,GAAG;EAAW;EAChD,WAAW,cAAc,WAAW,YAAY,SAAS;EACzD,UAAU;EACV,OAAO;EACP,cAAc;EACd,aAAa;EACb,oBAAoB;EACpB,GAAI,UAAU;CAChB,IACA,CAAC,KAAK,CACR;CAGA,MAAM,CAAC,YAAY,cAAc,eAAyB,gBAAgB,cAAc,MAAM;CAG9F,MAAM,sBAAsB,iBAAiB,YAAY,eAAe,QAAQ;CAGhF,MAAM,uBAAuB,oBAC3B,gBACA,QACA,cACA,SACA,OACF;CAGA,MAAM,mBAAmB,cACvB,gBACA,QACA,sBACA,cACF;CAaA,OAAO;EAVaA,QAAM,eACjB;GACL,GAAG;GACH,aAAa;GACb,eAAe;GACf,cAAc;EAChB,IACA;GAAC;GAAa;GAAmB;GAAqB;EAAoB,CAG1D;EAAG;EAAgB;EAAe;EAAY;EAAY;CAAgB;AAC9F"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useEvent } from "../../hooks/react.mjs";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
//#region src/DatePicker/core/PickerInput/hooks/useFocusEvents.ts
|
|
4
|
+
/** Check whether the target belongs to any container. / 判断目标是否属于任意一个容器。 */
|
|
5
|
+
function isTargetInContainers(target, containers) {
|
|
6
|
+
return containers.some((container) => !!container && (container === target || container.contains(target)));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Handle field focus and blur events.
|
|
10
|
+
* 处理 field 的聚焦与失焦事件。
|
|
11
|
+
*
|
|
12
|
+
* Always forward the actual element focus events. Only the internal Picker
|
|
13
|
+
* blur is skipped when `relatedTarget` still belongs to the Picker or the
|
|
14
|
+
* focused panel control becomes disabled.
|
|
15
|
+
* 始终转发元素实际发生的焦点事件。当 `relatedTarget` 仍属于 Picker,或面板中
|
|
16
|
+
* 获得焦点的控件变为禁用时,跳过 Picker 的整体失焦逻辑。
|
|
17
|
+
*/
|
|
18
|
+
function useFocusEvents(isInternalElement, onFocus, onBlur, onConfirmedBlur) {
|
|
19
|
+
const [focusedIndex, setFocusedIndex] = React$1.useState(null);
|
|
20
|
+
const onFieldFocus = useEvent((index, _source, event) => {
|
|
21
|
+
setFocusedIndex(index);
|
|
22
|
+
onFocus?.(index, event);
|
|
23
|
+
});
|
|
24
|
+
const onFieldBlur = useEvent((index, source, event) => {
|
|
25
|
+
if (source === "panel" && event.target.hasAttribute("disabled")) event.currentTarget.focus({ preventScroll: true });
|
|
26
|
+
else if (!isInternalElement(event.relatedTarget)) {
|
|
27
|
+
setFocusedIndex(null);
|
|
28
|
+
onConfirmedBlur?.(index, event);
|
|
29
|
+
}
|
|
30
|
+
onBlur?.(index, event);
|
|
31
|
+
});
|
|
32
|
+
return [
|
|
33
|
+
focusedIndex !== null,
|
|
34
|
+
onFieldFocus,
|
|
35
|
+
onFieldBlur
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { useFocusEvents as default, isTargetInContainers };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=useFocusEvents.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusEvents.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useFocusEvents.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useEvent } from '../../hooks/react';\n\n// ============================= Types =============================\n/** Focus event source. / 焦点事件来源。 */\nexport type FocusSource = 'input' | 'panel';\n\n/** React focus event used by Picker elements. / Picker 元素使用的 React 焦点事件。 */\nexport type PickerFocusEvent = React.FocusEvent<HTMLElement>;\n\n/** Focus event handler. / 聚焦事件处理函数。 */\nexport type FieldFocusHandler = (\n index: number,\n source: FocusSource,\n event: PickerFocusEvent,\n) => void;\n\n/** Blur event handler. / 失焦事件处理函数。 */\nexport type FieldBlurHandler = (\n index: number,\n source: FocusSource,\n event: PickerFocusEvent,\n) => void;\n\n/** Check whether an element belongs to the current focus scope. / 检查元素是否属于当前焦点范围。 */\nexport type IsInternalElement = (element: EventTarget | null) => boolean;\n\n/** Notify a Picker focus or blur event. / 通知 Picker 的聚焦或失焦事件。 */\nexport type FocusEventHandler = (index: number, event: PickerFocusEvent) => void;\n\nexport type UseFocusEventsReturn = [\n focused: boolean,\n onFieldFocus: FieldFocusHandler,\n onFieldBlur: FieldBlurHandler,\n];\n\n// ============================= Utils =============================\n/** Check whether the target belongs to any container. / 判断目标是否属于任意一个容器。 */\nexport function isTargetInContainers(\n target: EventTarget | null,\n containers: readonly (Element | null | undefined)[],\n) {\n return containers.some(\n (container) => !!container && (container === target || container.contains(target as Node)),\n );\n}\n\n/**\n * Handle field focus and blur events.\n * 处理 field 的聚焦与失焦事件。\n *\n * Always forward the actual element focus events. Only the internal Picker\n * blur is skipped when `relatedTarget` still belongs to the Picker or the\n * focused panel control becomes disabled.\n * 始终转发元素实际发生的焦点事件。当 `relatedTarget` 仍属于 Picker,或面板中\n * 获得焦点的控件变为禁用时,跳过 Picker 的整体失焦逻辑。\n */\nexport default function useFocusEvents(\n isInternalElement: IsInternalElement,\n onFocus?: FocusEventHandler,\n onBlur?: FocusEventHandler,\n onConfirmedBlur?: FocusEventHandler,\n): UseFocusEventsReturn {\n // Keep the actual focused field so every field focus causes a render. This\n // gives `useFocusLock` a commit in which it can correct an invalid switch.\n // 记录实际获得焦点的 field,使每次 field focus 都会触发渲染;\n // `useFocusLock` 因此可以在 commit 后纠正不允许的切换。\n const [focusedIndex, setFocusedIndex] = React.useState<number | null>(null);\n\n const onFieldFocus = useEvent((index: number, _source: FocusSource, event: PickerFocusEvent) => {\n setFocusedIndex(index);\n onFocus?.(index, event);\n });\n\n const onFieldBlur = useEvent((index: number, source: FocusSource, event: PickerFocusEvent) => {\n const isDisabledTarget = source === 'panel' && event.target.hasAttribute('disabled');\n\n if (isDisabledTarget) {\n event.currentTarget.focus({ preventScroll: true });\n } else if (!isInternalElement(event.relatedTarget)) {\n setFocusedIndex(null);\n onConfirmedBlur?.(index, event);\n }\n\n onBlur?.(index, event);\n });\n\n return [focusedIndex !== null, onFieldFocus, onFieldBlur];\n}\n"],"mappings":";;;;AAuCA,SAAgB,qBACd,QACA,YACA;CACA,OAAO,WAAW,MACf,cAAc,CAAC,CAAC,cAAc,cAAc,UAAU,UAAU,SAAS,MAAc,EAC1F;AACF;;;;;;;;;;;AAYA,SAAwB,eACtB,mBACA,SACA,QACA,iBACsB;CAKtB,MAAM,CAAC,cAAc,mBAAmBA,QAAM,SAAwB,IAAI;CAE1E,MAAM,eAAe,UAAU,OAAe,SAAsB,UAA4B;EAC9F,gBAAgB,KAAK;EACrB,UAAU,OAAO,KAAK;CACxB,CAAC;CAED,MAAM,cAAc,UAAU,OAAe,QAAqB,UAA4B;EAG5F,IAFyB,WAAW,WAAW,MAAM,OAAO,aAAa,UAAU,GAGjF,MAAM,cAAc,MAAM,EAAE,eAAe,KAAK,CAAC;OAC5C,IAAI,CAAC,kBAAkB,MAAM,aAAa,GAAG;GAClD,gBAAgB,IAAI;GACpB,kBAAkB,OAAO,KAAK;EAChC;EAEA,SAAS,OAAO,KAAK;CACvB,CAAC;CAED,OAAO;EAAC,iBAAiB;EAAM;EAAc;CAAW;AAC1D"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useEvent, useLayoutEffect as useLayoutEffect$1 } from "../../hooks/react.mjs";
|
|
2
|
+
import { isTargetInContainers } from "./useFocusEvents.mjs";
|
|
3
|
+
import * as React$1 from "react";
|
|
4
|
+
//#region src/DatePicker/core/PickerInput/hooks/useFocusLock.ts
|
|
5
|
+
/**
|
|
6
|
+
* Keep focus on the specified input field while focus moves inside the Picker.
|
|
7
|
+
* 当焦点在 Picker 内移动时,将其锁定在指定的输入框上。
|
|
8
|
+
*/
|
|
9
|
+
function useFocusLock(index, forceFocus, selectorRef, popupRef, triggerOpen) {
|
|
10
|
+
const openPicker = useEvent(() => {
|
|
11
|
+
triggerOpen(true);
|
|
12
|
+
});
|
|
13
|
+
React$1.useEffect(() => {
|
|
14
|
+
if (index !== null && forceFocus) {
|
|
15
|
+
openPicker();
|
|
16
|
+
selectorRef.current?.focus(index);
|
|
17
|
+
}
|
|
18
|
+
}, [
|
|
19
|
+
index,
|
|
20
|
+
forceFocus,
|
|
21
|
+
openPicker
|
|
22
|
+
]);
|
|
23
|
+
useLayoutEffect$1(() => {
|
|
24
|
+
if (index === null) return;
|
|
25
|
+
const inputFields = [selectorRef.current?.startInput, selectorRef.current?.endInput];
|
|
26
|
+
const activeElement = (inputFields[index]?.getRootNode())?.activeElement ?? document.activeElement;
|
|
27
|
+
if (isTargetInContainers(activeElement, [popupRef.current])) return;
|
|
28
|
+
if (inputFields.some((field, fieldIndex) => fieldIndex !== index && isTargetInContainers(activeElement, [field]))) inputFields[index]?.focus();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { useFocusLock as default };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=useFocusLock.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusLock.mjs","names":[],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useFocusLock.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useEvent, useLayoutEffect } from '../../hooks/react';\nimport { isTargetInContainers } from './useFocusEvents';\n\ninterface FocusLockSelectorRef {\n endInput: HTMLElement;\n focus: (index?: number) => void;\n startInput: HTMLElement;\n}\n\n/**\n * Keep focus on the specified input field while focus moves inside the Picker.\n * 当焦点在 Picker 内移动时,将其锁定在指定的输入框上。\n */\nexport default function useFocusLock(\n index: number | null,\n forceFocus: boolean,\n selectorRef: React.RefObject<FocusLockSelectorRef | null>,\n popupRef: React.RefObject<HTMLElement | null>,\n triggerOpen: (open: boolean) => void,\n) {\n const openPicker = useEvent(() => {\n triggerOpen(true);\n });\n\n // Only a strong transition actively opens the Picker and moves DOM focus.\n // Weak transitions keep the expected index without stealing external focus.\n // 仅强切换会主动打开 Picker 并移动 DOM 焦点;弱切换只保留预期 index,\n // 不抢占外部元素的焦点。\n React.useEffect(() => {\n if (index !== null && forceFocus) {\n openPicker();\n selectorRef.current?.focus(index);\n }\n }, [index, forceFocus, openPicker]);\n\n // DOM focus may change while `index` stays the same, so check after every commit.\n // DOM 焦点变化时 `index` 可能保持不变,因此每次 commit 后都需要检查。\n useLayoutEffect(() => {\n if (index === null) {\n return;\n }\n\n const inputFields = [selectorRef.current?.startInput, selectorRef.current?.endInput];\n const inputRoot = inputFields[index]?.getRootNode() as Document | ShadowRoot | undefined;\n\n // `document.activeElement` stops at the shadow host. Read from the input's\n // own root first so focus locking can identify the actual field.\n // `document.activeElement` 在 Shadow DOM 中只会返回 host。优先读取 input\n // 所属 root,才能识别实际聚焦的 field。\n const activeElement = inputRoot?.activeElement ?? document.activeElement;\n\n if (isTargetInContainers(activeElement, [popupRef.current])) {\n return;\n }\n\n const focusInOtherField = inputFields.some(\n (field, fieldIndex) => fieldIndex !== index && isTargetInContainers(activeElement, [field]),\n );\n\n if (focusInOtherField) {\n inputFields[index]?.focus();\n }\n });\n}\n"],"mappings":";;;;;;;;AAeA,SAAwB,aACtB,OACA,YACA,aACA,UACA,aACA;CACA,MAAM,aAAa,eAAe;EAChC,YAAY,IAAI;CAClB,CAAC;CAMD,QAAM,gBAAgB;EACpB,IAAI,UAAU,QAAQ,YAAY;GAChC,WAAW;GACX,YAAY,SAAS,MAAM,KAAK;EAClC;CACF,GAAG;EAAC;EAAO;EAAY;CAAU,CAAC;CAIlC,wBAAsB;EACpB,IAAI,UAAU,MACZ;EAGF,MAAM,cAAc,CAAC,YAAY,SAAS,YAAY,YAAY,SAAS,QAAQ;EAOnF,MAAM,iBANY,YAAY,MAAM,EAAE,YAAY,EAAA,EAMjB,iBAAiB,SAAS;EAE3D,IAAI,qBAAqB,eAAe,CAAC,SAAS,OAAO,CAAC,GACxD;EAOF,IAJ0B,YAAY,MACnC,OAAO,eAAe,eAAe,SAAS,qBAAqB,eAAe,CAAC,KAAK,CAAC,CAGxE,GAClB,YAAY,MAAM,EAAE,MAAM;CAE9B,CAAC;AACH"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
//#region src/DatePicker/core/PickerInput/hooks/useHoverStore.ts
|
|
3
|
+
const createHoverStore = () => {
|
|
4
|
+
let snapshot = {
|
|
5
|
+
source: null,
|
|
6
|
+
value: null
|
|
7
|
+
};
|
|
8
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
9
|
+
return {
|
|
10
|
+
get: () => snapshot,
|
|
11
|
+
set: (value, source) => {
|
|
12
|
+
if (snapshot.value === value && snapshot.source === source) return;
|
|
13
|
+
snapshot = {
|
|
14
|
+
source,
|
|
15
|
+
value
|
|
16
|
+
};
|
|
17
|
+
for (const listener of listeners) listener();
|
|
18
|
+
},
|
|
19
|
+
subscribe: (listener) => {
|
|
20
|
+
listeners.add(listener);
|
|
21
|
+
return () => {
|
|
22
|
+
listeners.delete(listener);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
function useHoverStore() {
|
|
28
|
+
const [store] = React$1.useState(createHoverStore);
|
|
29
|
+
return store;
|
|
30
|
+
}
|
|
31
|
+
const useHoverSnapshot = (store) => React$1.useSyncExternalStore(store.subscribe, store.get, store.get);
|
|
32
|
+
//#endregion
|
|
33
|
+
export { useHoverStore as default, useHoverSnapshot };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=useHoverStore.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHoverStore.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useHoverStore.ts"],"sourcesContent":["import * as React from 'react';\n\nexport type HoverSource = 'cell' | 'preset';\n\nexport interface HoverSnapshot<DateType> {\n source: HoverSource | null;\n value: DateType | null;\n}\n\nexport interface HoverStore<DateType> {\n get: () => HoverSnapshot<DateType>;\n set: (value: DateType | null, source: HoverSource | null) => void;\n subscribe: (listener: () => void) => () => void;\n}\n\nconst createHoverStore = <DateType>(): HoverStore<DateType> => {\n let snapshot: HoverSnapshot<DateType> = { source: null, value: null };\n const listeners = new Set<() => void>();\n return {\n get: () => snapshot,\n set: (value, source) => {\n if (snapshot.value === value && snapshot.source === source) return;\n snapshot = { source, value };\n for (const listener of listeners) listener();\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n};\n\nexport default function useHoverStore<DateType>() {\n const [store] = React.useState(createHoverStore<DateType>);\n return store;\n}\n\nexport const useHoverSnapshot = <DateType>(store: HoverStore<DateType>) =>\n React.useSyncExternalStore(store.subscribe, store.get, store.get);\n"],"mappings":";;AAeA,MAAM,yBAAyD;CAC7D,IAAI,WAAoC;EAAE,QAAQ;EAAM,OAAO;CAAK;CACpE,MAAM,4BAAY,IAAI,IAAgB;CACtC,OAAO;EACL,WAAW;EACX,MAAM,OAAO,WAAW;GACtB,IAAI,SAAS,UAAU,SAAS,SAAS,WAAW,QAAQ;GAC5D,WAAW;IAAE;IAAQ;GAAM;GAC3B,KAAK,MAAM,YAAY,WAAW,SAAS;EAC7C;EACA,YAAY,aAAa;GACvB,UAAU,IAAI,QAAQ;GACtB,aAAa;IACX,UAAU,OAAO,QAAQ;GAC3B;EACF;CACF;AACF;AAEA,SAAwB,gBAA0B;CAChD,MAAM,CAAC,SAASA,QAAM,SAAS,gBAA0B;CACzD,OAAO;AACT;AAEA,MAAa,oBAA8B,UACzCA,QAAM,qBAAqB,MAAM,WAAW,MAAM,KAAK,MAAM,GAAG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/DatePicker/core/PickerInput/hooks/useInputReadOnly.ts
|
|
2
|
+
function useInputReadOnly(formatList, inputReadOnly, multiple) {
|
|
3
|
+
if (typeof formatList[0] === "function" || multiple) return true;
|
|
4
|
+
return inputReadOnly;
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
export { useInputReadOnly as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=useInputReadOnly.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputReadOnly.mjs","names":[],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useInputReadOnly.ts"],"sourcesContent":["import type { FormatType } from '../../interface';\n\nexport default function useInputReadOnly<DateType = any>(\n formatList: FormatType<DateType>[],\n inputReadOnly?: boolean,\n multiple?: boolean,\n) {\n if (typeof formatList[0] === 'function' || multiple) {\n return true;\n }\n\n return inputReadOnly;\n}\n"],"mappings":";AAEA,SAAwB,iBACtB,YACA,eACA,UACA;CACA,IAAI,OAAO,WAAW,OAAO,cAAc,UACzC,OAAO;CAGT,OAAO;AACT"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useEvent } from "../../hooks/react.mjs";
|
|
2
|
+
//#region src/DatePicker/core/PickerInput/hooks/useInvalidate.ts
|
|
3
|
+
/**
|
|
4
|
+
* Check if provided date is valid for the `disabledDate` & `showTime.disabledTime`.
|
|
5
|
+
*/
|
|
6
|
+
function useInvalidate(generateConfig, picker, disabledDate, showTime) {
|
|
7
|
+
return useEvent((date, info) => {
|
|
8
|
+
const outsideInfo = {
|
|
9
|
+
type: picker,
|
|
10
|
+
...info
|
|
11
|
+
};
|
|
12
|
+
delete outsideInfo.activeIndex;
|
|
13
|
+
if (!generateConfig.isValidate(date) || disabledDate && disabledDate(date, outsideInfo)) return true;
|
|
14
|
+
if ((picker === "date" || picker === "time") && showTime) {
|
|
15
|
+
const range = info && info.activeIndex === 1 ? "end" : "start";
|
|
16
|
+
const { disabledHours, disabledMinutes, disabledSeconds, disabledMilliseconds } = showTime.disabledTime?.(date, range, { from: outsideInfo.from }) || {};
|
|
17
|
+
const { disabledHours: legacyDisabledHours, disabledMinutes: legacyDisabledMinutes, disabledSeconds: legacyDisabledSeconds } = showTime;
|
|
18
|
+
const mergedDisabledHours = disabledHours || legacyDisabledHours;
|
|
19
|
+
const mergedDisabledMinutes = disabledMinutes || legacyDisabledMinutes;
|
|
20
|
+
const mergedDisabledSeconds = disabledSeconds || legacyDisabledSeconds;
|
|
21
|
+
const hour = generateConfig.getHour(date);
|
|
22
|
+
const minute = generateConfig.getMinute(date);
|
|
23
|
+
const second = generateConfig.getSecond(date);
|
|
24
|
+
const millisecond = generateConfig.getMillisecond(date);
|
|
25
|
+
if (mergedDisabledHours && mergedDisabledHours().includes(hour)) return true;
|
|
26
|
+
if (mergedDisabledMinutes && mergedDisabledMinutes(hour).includes(minute)) return true;
|
|
27
|
+
if (mergedDisabledSeconds && mergedDisabledSeconds(hour, minute).includes(second)) return true;
|
|
28
|
+
if (disabledMilliseconds && disabledMilliseconds(hour, minute, second).includes(millisecond)) return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { useInvalidate as default };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=useInvalidate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInvalidate.mjs","names":[],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useInvalidate.ts"],"sourcesContent":["import type { GenerateConfig } from '../../generate';\nimport { useEvent } from '../../hooks/react';\nimport type {\n PanelMode,\n RangeTimeProps,\n SharedPickerProps,\n SharedTimeProps,\n} from '../../interface';\n\n/**\n * Check if provided date is valid for the `disabledDate` & `showTime.disabledTime`.\n */\nexport default function useInvalidate<DateType extends object = any>(\n generateConfig: GenerateConfig<DateType>,\n picker: PanelMode,\n disabledDate?: SharedPickerProps<DateType>['disabledDate'],\n showTime?: SharedTimeProps<DateType> | RangeTimeProps<DateType> | null,\n) {\n // Check disabled date\n const isInvalidate = useEvent(\n (date: DateType, info?: { from?: DateType; activeIndex: number }) => {\n const outsideInfo = { type: picker, ...info };\n delete outsideInfo.activeIndex;\n\n if (\n // Date object is invalid\n !generateConfig.isValidate(date) ||\n // Date is disabled by `disabledDate`\n (disabledDate && disabledDate(date, outsideInfo))\n ) {\n return true;\n }\n\n if ((picker === 'date' || picker === 'time') && showTime) {\n const range = info && info.activeIndex === 1 ? 'end' : 'start';\n const { disabledHours, disabledMinutes, disabledSeconds, disabledMilliseconds } =\n showTime.disabledTime?.(date, range, { from: outsideInfo.from }) || {};\n\n const {\n disabledHours: legacyDisabledHours,\n disabledMinutes: legacyDisabledMinutes,\n disabledSeconds: legacyDisabledSeconds,\n } = showTime;\n\n const mergedDisabledHours = disabledHours || legacyDisabledHours;\n const mergedDisabledMinutes = disabledMinutes || legacyDisabledMinutes;\n const mergedDisabledSeconds = disabledSeconds || legacyDisabledSeconds;\n\n const hour = generateConfig.getHour(date);\n const minute = generateConfig.getMinute(date);\n const second = generateConfig.getSecond(date);\n const millisecond = generateConfig.getMillisecond(date);\n\n if (mergedDisabledHours && mergedDisabledHours().includes(hour)) {\n return true;\n }\n\n if (mergedDisabledMinutes && mergedDisabledMinutes(hour).includes(minute)) {\n return true;\n }\n\n if (mergedDisabledSeconds && mergedDisabledSeconds(hour, minute).includes(second)) {\n return true;\n }\n\n if (\n disabledMilliseconds &&\n disabledMilliseconds(hour, minute, second).includes(millisecond)\n ) {\n return true;\n }\n }\n return false;\n },\n );\n\n return isInvalidate;\n}\n"],"mappings":";;;;;AAYA,SAAwB,cACtB,gBACA,QACA,cACA,UACA;CA2DA,OAzDqB,UAClB,MAAgB,SAAoD;EACnE,MAAM,cAAc;GAAE,MAAM;GAAQ,GAAG;EAAK;EAC5C,OAAO,YAAY;EAEnB,IAEE,CAAC,eAAe,WAAW,IAAI,KAE9B,gBAAgB,aAAa,MAAM,WAAW,GAE/C,OAAO;EAGT,KAAK,WAAW,UAAU,WAAW,WAAW,UAAU;GACxD,MAAM,QAAQ,QAAQ,KAAK,gBAAgB,IAAI,QAAQ;GACvD,MAAM,EAAE,eAAe,iBAAiB,iBAAiB,yBACvD,SAAS,eAAe,MAAM,OAAO,EAAE,MAAM,YAAY,KAAK,CAAC,KAAK,CAAC;GAEvE,MAAM,EACJ,eAAe,qBACf,iBAAiB,uBACjB,iBAAiB,0BACf;GAEJ,MAAM,sBAAsB,iBAAiB;GAC7C,MAAM,wBAAwB,mBAAmB;GACjD,MAAM,wBAAwB,mBAAmB;GAEjD,MAAM,OAAO,eAAe,QAAQ,IAAI;GACxC,MAAM,SAAS,eAAe,UAAU,IAAI;GAC5C,MAAM,SAAS,eAAe,UAAU,IAAI;GAC5C,MAAM,cAAc,eAAe,eAAe,IAAI;GAEtD,IAAI,uBAAuB,oBAAoB,CAAC,CAAC,SAAS,IAAI,GAC5D,OAAO;GAGT,IAAI,yBAAyB,sBAAsB,IAAI,CAAC,CAAC,SAAS,MAAM,GACtE,OAAO;GAGT,IAAI,yBAAyB,sBAAsB,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,GAC9E,OAAO;GAGT,IACE,wBACA,qBAAqB,MAAM,QAAQ,MAAM,CAAC,CAAC,SAAS,WAAW,GAE/D,OAAO;EAEX;EACA,OAAO;CACT,CAGgB;AACpB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useLayoutUpdateEffect } from "../../hooks/react.mjs";
|
|
2
|
+
import { raf } from "../../utils/common.mjs";
|
|
3
|
+
import * as React$1 from "react";
|
|
4
|
+
//#region src/DatePicker/core/PickerInput/hooks/useLockEffect.ts
|
|
5
|
+
/**
|
|
6
|
+
* Trigger `callback` immediately when `condition` is `true`.
|
|
7
|
+
* But trigger `callback` in next frame when `condition` is `false`.
|
|
8
|
+
*/
|
|
9
|
+
function useLockEffect(condition, callback, delayFrames = 1) {
|
|
10
|
+
const callbackRef = React$1.useRef(callback);
|
|
11
|
+
callbackRef.current = callback;
|
|
12
|
+
useLayoutUpdateEffect(() => {
|
|
13
|
+
if (condition) callbackRef.current(condition);
|
|
14
|
+
else {
|
|
15
|
+
const id = raf(() => {
|
|
16
|
+
callbackRef.current(condition);
|
|
17
|
+
}, delayFrames);
|
|
18
|
+
return () => {
|
|
19
|
+
raf.cancel(id);
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}, [condition]);
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { useLockEffect as default };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=useLockEffect.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLockEffect.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useLockEffect.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useLayoutUpdateEffect } from '../../hooks/react';\nimport { raf } from '../../utils/common';\n\n/**\n * Trigger `callback` immediately when `condition` is `true`.\n * But trigger `callback` in next frame when `condition` is `false`.\n */\nexport default function useLockEffect(\n condition: boolean | undefined,\n callback: (next: boolean | undefined) => void,\n delayFrames = 1,\n) {\n const callbackRef = React.useRef(callback);\n callbackRef.current = callback;\n\n useLayoutUpdateEffect(() => {\n if (condition) {\n callbackRef.current(condition);\n } else {\n const id = raf(() => {\n callbackRef.current(condition);\n }, delayFrames);\n\n return () => {\n raf.cancel(id);\n };\n }\n }, [condition]);\n}\n"],"mappings":";;;;;;;;AASA,SAAwB,cACtB,WACA,UACA,cAAc,GACd;CACA,MAAM,cAAcA,QAAM,OAAO,QAAQ;CACzC,YAAY,UAAU;CAEtB,4BAA4B;EAC1B,IAAI,WACF,YAAY,QAAQ,SAAS;OACxB;GACL,MAAM,KAAK,UAAU;IACnB,YAAY,QAAQ,SAAS;GAC/B,GAAG,WAAW;GAEd,aAAa;IACX,IAAI,OAAO,EAAE;GACf;EACF;CACF,GAAG,CAAC,SAAS,CAAC;AAChB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import useDelayState from "./useDelayState.mjs";
|
|
2
|
+
//#region src/DatePicker/core/PickerInput/hooks/useOpen.ts
|
|
3
|
+
/**
|
|
4
|
+
* Control the open state.
|
|
5
|
+
* Will not close if activeElement is on the popup.
|
|
6
|
+
*/
|
|
7
|
+
function useOpen(open, defaultOpen, disabledList = [], onOpenChange) {
|
|
8
|
+
const mergedOpen = disabledList.every((disabled) => disabled) ? false : open;
|
|
9
|
+
const [rafOpen, setRafOpen] = useDelayState(mergedOpen, defaultOpen || false, onOpenChange);
|
|
10
|
+
function setOpen(next, config = {}) {
|
|
11
|
+
if (!config.inherit || rafOpen) setRafOpen(next, config.force);
|
|
12
|
+
}
|
|
13
|
+
return [rafOpen, setOpen];
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { useOpen as default };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=useOpen.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOpen.mjs","names":[],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useOpen.ts"],"sourcesContent":["import type { OpenConfig } from '../../interface';\nimport useDelayState from './useDelayState';\n\n/**\n * Control the open state.\n * Will not close if activeElement is on the popup.\n */\nexport default function useOpen(\n open?: boolean,\n defaultOpen?: boolean,\n disabledList: (boolean | undefined)[] = [],\n onOpenChange?: (open: boolean) => void,\n): [open: boolean, setOpen: (open: boolean, config?: OpenConfig) => void] {\n const mergedOpen = disabledList.every((disabled) => disabled) ? false : open;\n\n // Delay for handle the open state, in case fast shift from `open` -> `close` -> `open`\n // const [rafOpen, setRafOpen] = useLockState(open, defaultOpen || false, onOpenChange);\n const [rafOpen, setRafOpen] = useDelayState(mergedOpen, defaultOpen || false, onOpenChange);\n\n function setOpen(next: boolean, config: OpenConfig = {}) {\n if (!config.inherit || rafOpen) {\n setRafOpen(next, config.force);\n }\n }\n\n return [rafOpen, setOpen];\n}\n"],"mappings":";;;;;;AAOA,SAAwB,QACtB,MACA,aACA,eAAwC,CAAC,GACzC,cACwE;CACxE,MAAM,aAAa,aAAa,OAAO,aAAa,QAAQ,IAAI,QAAQ;CAIxE,MAAM,CAAC,SAAS,cAAc,cAAc,YAAY,eAAe,OAAO,YAAY;CAE1F,SAAS,QAAQ,MAAe,SAAqB,CAAC,GAAG;EACvD,IAAI,CAAC,OAAO,WAAW,SACrB,WAAW,MAAM,OAAO,KAAK;CAEjC;CAEA,OAAO,CAAC,SAAS,OAAO;AAC1B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React$1 from "react";
|
|
2
|
+
//#region src/DatePicker/core/PickerInput/hooks/usePickerRef.ts
|
|
3
|
+
function usePickerRef(ref) {
|
|
4
|
+
const selectorRef = React$1.useRef(null);
|
|
5
|
+
React$1.useImperativeHandle(ref, () => ({
|
|
6
|
+
nativeElement: selectorRef.current?.nativeElement,
|
|
7
|
+
focus: (options) => {
|
|
8
|
+
selectorRef.current?.focus(options);
|
|
9
|
+
},
|
|
10
|
+
blur: () => {
|
|
11
|
+
selectorRef.current?.blur();
|
|
12
|
+
}
|
|
13
|
+
}));
|
|
14
|
+
return selectorRef;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { usePickerRef as default };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=usePickerRef.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePickerRef.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/usePickerRef.ts"],"sourcesContent":["import * as React from 'react';\n\nimport type { PickerRef } from '../../interface';\n\ntype PickerRefType<OptionType> = Omit<PickerRef, 'focus'> & {\n focus: (options?: OptionType) => void;\n};\n\nexport default function usePickerRef<\n OptionType,\n SelectorRefType extends PickerRefType<OptionType> = PickerRefType<OptionType>,\n>(ref: React.Ref<PickerRefType<OptionType>>) {\n const selectorRef = React.useRef<SelectorRefType>(null);\n\n React.useImperativeHandle(ref, () => ({\n nativeElement: selectorRef.current?.nativeElement as HTMLDivElement,\n focus: (options) => {\n selectorRef.current?.focus(options);\n },\n blur: () => {\n selectorRef.current?.blur();\n },\n }));\n\n return selectorRef;\n}\n"],"mappings":";;AAQA,SAAwB,aAGtB,KAA2C;CAC3C,MAAM,cAAcA,QAAM,OAAwB,IAAI;CAEtD,QAAM,oBAAoB,YAAY;EACpC,eAAe,YAAY,SAAS;EACpC,QAAQ,YAAY;GAClB,YAAY,SAAS,MAAM,OAAO;EACpC;EACA,YAAY;GACV,YAAY,SAAS,KAAK;EAC5B;CACF,EAAE;CAEF,OAAO;AACT"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { warning } from "../../utils/common.mjs";
|
|
2
|
+
import * as React$1 from "react";
|
|
3
|
+
//#region src/DatePicker/core/PickerInput/hooks/usePresets.ts
|
|
4
|
+
function usePresets(presets, legacyRanges) {
|
|
5
|
+
return React$1.useMemo(() => {
|
|
6
|
+
if (presets) return presets;
|
|
7
|
+
if (legacyRanges) {
|
|
8
|
+
warning(false, "`ranges` is deprecated. Please use `presets` instead.");
|
|
9
|
+
return Object.entries(legacyRanges).map(([label, value]) => ({
|
|
10
|
+
label,
|
|
11
|
+
value
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
return [];
|
|
15
|
+
}, [presets, legacyRanges]);
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { usePresets as default };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=usePresets.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePresets.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/usePresets.ts"],"sourcesContent":["import * as React from 'react';\n\nimport type { ValueDate } from '../../interface';\nimport { warning } from '../../utils/common';\n\nexport default function usePresets<DateType = any>(\n presets?: ValueDate<DateType>[],\n legacyRanges?: Record<string, DateType | (() => DateType)>,\n): ValueDate<DateType>[] {\n return React.useMemo(() => {\n if (presets) {\n return presets;\n }\n\n if (legacyRanges) {\n warning(false, '`ranges` is deprecated. Please use `presets` instead.');\n\n return Object.entries(legacyRanges).map(([label, value]) => ({ label, value }));\n }\n\n return [];\n }, [presets, legacyRanges]);\n}\n"],"mappings":";;;AAKA,SAAwB,WACtB,SACA,cACuB;CACvB,OAAOA,QAAM,cAAc;EACzB,IAAI,SACF,OAAO;EAGT,IAAI,cAAc;GAChB,QAAQ,OAAO,uDAAuD;GAEtE,OAAO,OAAO,QAAQ,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY;IAAE;IAAO;GAAM,EAAE;EAChF;EAEA,OAAO,CAAC;CACV,GAAG,CAAC,SAAS,YAAY,CAAC;AAC5B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { isSame } from "../../utils/dateUtil.mjs";
|
|
2
|
+
import { getFromDate } from "../../utils/miscUtil.mjs";
|
|
3
|
+
//#region src/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.ts
|
|
4
|
+
/**
|
|
5
|
+
* RangePicker need additional logic to handle the `disabled` case. e.g.
|
|
6
|
+
* [disabled, enabled] should end date not before start date
|
|
7
|
+
*/
|
|
8
|
+
function useRangeDisabledDate(values, disabled, activeIndex, triggeredFields, generateConfig, locale, disabledDate) {
|
|
9
|
+
const rangeDisabledDate = (date, info) => {
|
|
10
|
+
const [start, end] = values;
|
|
11
|
+
const mergedInfo = {
|
|
12
|
+
...info,
|
|
13
|
+
from: getFromDate(values, triggeredFields, activeIndex)
|
|
14
|
+
};
|
|
15
|
+
if (activeIndex === 1 && disabled[0] && start && !isSame(generateConfig, locale, start, date, mergedInfo.type) && generateConfig.isAfter(start, date)) return true;
|
|
16
|
+
if (activeIndex === 0 && disabled[1] && end && !isSame(generateConfig, locale, end, date, mergedInfo.type) && generateConfig.isAfter(date, end)) return true;
|
|
17
|
+
return !!disabledDate?.(date, mergedInfo);
|
|
18
|
+
};
|
|
19
|
+
return rangeDisabledDate;
|
|
20
|
+
}
|
|
21
|
+
//#endregion
|
|
22
|
+
export { useRangeDisabledDate as default };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=useRangeDisabledDate.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRangeDisabledDate.mjs","names":[],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.ts"],"sourcesContent":["import type { GenerateConfig } from '../../generate';\nimport type { DisabledDate, Locale } from '../../interface';\nimport { isSame } from '../../utils/dateUtil';\nimport { getFromDate } from '../../utils/miscUtil';\nimport type { RangeValueType } from '../RangePicker';\n\n/**\n * RangePicker need additional logic to handle the `disabled` case. e.g.\n * [disabled, enabled] should end date not before start date\n */\nexport default function useRangeDisabledDate<DateType extends object = any>(\n values: RangeValueType<DateType>,\n disabled: [boolean, boolean],\n activeIndex: number,\n triggeredFields: number[],\n generateConfig: GenerateConfig<DateType>,\n locale: Locale,\n disabledDate?: DisabledDate<DateType>,\n) {\n const rangeDisabledDate: DisabledDate<DateType> = (date, info) => {\n const [start, end] = values;\n\n const mergedInfo = {\n ...info,\n from: getFromDate(values, triggeredFields, activeIndex),\n };\n\n // ============================ Disabled ============================\n // Should not select days before the start date\n if (\n activeIndex === 1 &&\n disabled[0] &&\n start &&\n // Same date isOK\n !isSame(generateConfig, locale, start, date, mergedInfo.type) &&\n // Before start date\n generateConfig.isAfter(start, date)\n ) {\n return true;\n }\n\n // Should not select days after the end date\n if (\n activeIndex === 0 &&\n disabled[1] &&\n end &&\n // Same date isOK\n !isSame(generateConfig, locale, end, date, mergedInfo.type) &&\n // After end date\n generateConfig.isAfter(date, end)\n ) {\n return true;\n }\n\n // ============================= Origin =============================\n return !!disabledDate?.(date, mergedInfo);\n };\n\n return rangeDisabledDate;\n}\n"],"mappings":";;;;;;;AAUA,SAAwB,qBACtB,QACA,UACA,aACA,iBACA,gBACA,QACA,cACA;CACA,MAAM,qBAA6C,MAAM,SAAS;EAChE,MAAM,CAAC,OAAO,OAAO;EAErB,MAAM,aAAa;GACjB,GAAG;GACH,MAAM,YAAY,QAAQ,iBAAiB,WAAW;EACxD;EAIA,IACE,gBAAgB,KAChB,SAAS,MACT,SAEA,CAAC,OAAO,gBAAgB,QAAQ,OAAO,MAAM,WAAW,IAAI,KAE5D,eAAe,QAAQ,OAAO,IAAI,GAElC,OAAO;EAIT,IACE,gBAAgB,KAChB,SAAS,MACT,OAEA,CAAC,OAAO,gBAAgB,QAAQ,KAAK,MAAM,WAAW,IAAI,KAE1D,eAAe,QAAQ,MAAM,GAAG,GAEhC,OAAO;EAIT,OAAO,CAAC,CAAC,eAAe,MAAM,UAAU;CAC1C;CAEA,OAAO;AACT"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { useControlledState, useLayoutEffect as useLayoutEffect$1 } from "../../hooks/react.mjs";
|
|
2
|
+
import { fillTime, isSame } from "../../utils/dateUtil.mjs";
|
|
3
|
+
import * as React$1 from "react";
|
|
4
|
+
//#region src/DatePicker/core/PickerInput/hooks/useRangePickerValue.ts
|
|
5
|
+
function offsetPanelDate(generateConfig, picker, date, offset) {
|
|
6
|
+
switch (picker) {
|
|
7
|
+
case "date":
|
|
8
|
+
case "week": return generateConfig.addMonth(date, offset);
|
|
9
|
+
case "month":
|
|
10
|
+
case "quarter": return generateConfig.addYear(date, offset);
|
|
11
|
+
case "year": return generateConfig.addYear(date, offset * 10);
|
|
12
|
+
case "decade": return generateConfig.addYear(date, offset * 100);
|
|
13
|
+
default: return date;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const EMPTY_LIST = [];
|
|
17
|
+
function useRangePickerValue(generateConfig, locale, calendarValue, modes, open, preserveOnFieldChange, activeIndex, pickerMode, multiplePanel, defaultPickerValue = EMPTY_LIST, pickerValue = EMPTY_LIST, timeDefaultValue = EMPTY_LIST, onPickerValueChange, minDate, maxDate) {
|
|
18
|
+
const isTimePicker = pickerMode === "time";
|
|
19
|
+
const mergedActiveIndex = activeIndex || 0;
|
|
20
|
+
const [startCalendarValue, endCalendarValue] = calendarValue;
|
|
21
|
+
const activeCalendarValue = mergedActiveIndex === 0 ? startCalendarValue : endCalendarValue;
|
|
22
|
+
const inactiveCalendarValue = mergedActiveIndex === 0 ? endCalendarValue : startCalendarValue;
|
|
23
|
+
const getDefaultPickerValue = (index) => {
|
|
24
|
+
let now = generateConfig.getNow();
|
|
25
|
+
if (isTimePicker) now = fillTime(generateConfig, now);
|
|
26
|
+
const calendarDate = index === 0 ? startCalendarValue : endCalendarValue;
|
|
27
|
+
return defaultPickerValue[index] || calendarDate || now;
|
|
28
|
+
};
|
|
29
|
+
const [startPickerValue, endPickerValue] = pickerValue;
|
|
30
|
+
const [mergedStartPickerValue, setStartPickerValue] = useControlledState(() => getDefaultPickerValue(0), startPickerValue);
|
|
31
|
+
const [mergedEndPickerValue, setEndPickerValue] = useControlledState(() => getDefaultPickerValue(1), endPickerValue);
|
|
32
|
+
const currentPickerValue = React$1.useMemo(() => {
|
|
33
|
+
const current = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex];
|
|
34
|
+
return isTimePicker ? current : fillTime(generateConfig, current, timeDefaultValue[mergedActiveIndex]);
|
|
35
|
+
}, [
|
|
36
|
+
isTimePicker,
|
|
37
|
+
mergedStartPickerValue,
|
|
38
|
+
mergedEndPickerValue,
|
|
39
|
+
mergedActiveIndex,
|
|
40
|
+
generateConfig,
|
|
41
|
+
timeDefaultValue
|
|
42
|
+
]);
|
|
43
|
+
const setCurrentPickerValue = (nextPickerValue, source = "panel") => {
|
|
44
|
+
const updater = [setStartPickerValue, setEndPickerValue][mergedActiveIndex];
|
|
45
|
+
updater(nextPickerValue);
|
|
46
|
+
const clone = [mergedStartPickerValue, mergedEndPickerValue];
|
|
47
|
+
clone[mergedActiveIndex] = nextPickerValue;
|
|
48
|
+
if (onPickerValueChange && (!isSame(generateConfig, locale, mergedStartPickerValue, clone[0], pickerMode) || !isSame(generateConfig, locale, mergedEndPickerValue, clone[1], pickerMode))) onPickerValueChange(clone, {
|
|
49
|
+
source,
|
|
50
|
+
range: mergedActiveIndex === 1 ? "end" : "start",
|
|
51
|
+
mode: modes
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
const isSamePanel = (date1, date2) => {
|
|
55
|
+
if (pickerMode === "year") return Math.floor(generateConfig.getYear(date1) / 10) === Math.floor(generateConfig.getYear(date2) / 10);
|
|
56
|
+
return isSame(generateConfig, locale, date1, date2, pickerMode === "month" || pickerMode === "quarter" ? "year" : "month");
|
|
57
|
+
};
|
|
58
|
+
const getEndDatePickerValue = (startDate, endDate) => {
|
|
59
|
+
if (!multiplePanel || !startDate) return endDate;
|
|
60
|
+
const nextPanelDate = offsetPanelDate(generateConfig, pickerMode, startDate, 1);
|
|
61
|
+
return isSamePanel(startDate, endDate) || isSamePanel(nextPanelDate, endDate) ? startDate : offsetPanelDate(generateConfig, pickerMode, endDate, -1);
|
|
62
|
+
};
|
|
63
|
+
const prevActiveIndexRef = React$1.useRef(null);
|
|
64
|
+
useLayoutEffect$1(() => {
|
|
65
|
+
if (open && !defaultPickerValue[mergedActiveIndex]) {
|
|
66
|
+
let nextPickerValue = isTimePicker ? null : generateConfig.getNow();
|
|
67
|
+
/**
|
|
68
|
+
* 1. If focus switches inside the open Picker, keep the current panels
|
|
69
|
+
* 2. If current field has value, sync it to the panels
|
|
70
|
+
* - Start: use the start value
|
|
71
|
+
* - End: keep start when both values fit, otherwise put end on the second panel
|
|
72
|
+
* 3. If current field has no value but another field has value, use another field value
|
|
73
|
+
* 4. Else use now (not any `calendarValue` can ref)
|
|
74
|
+
*/
|
|
75
|
+
if (preserveOnFieldChange && prevActiveIndexRef.current !== null && prevActiveIndexRef.current !== mergedActiveIndex) nextPickerValue = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex ^ 1];
|
|
76
|
+
else if (activeCalendarValue) nextPickerValue = mergedActiveIndex === 0 ? startCalendarValue : getEndDatePickerValue(startCalendarValue, endCalendarValue);
|
|
77
|
+
else if (inactiveCalendarValue) nextPickerValue = inactiveCalendarValue;
|
|
78
|
+
if (nextPickerValue) {
|
|
79
|
+
if (minDate && generateConfig.isAfter(minDate, nextPickerValue)) nextPickerValue = minDate;
|
|
80
|
+
const offsetPickerValue = multiplePanel ? offsetPanelDate(generateConfig, pickerMode, nextPickerValue, 1) : nextPickerValue;
|
|
81
|
+
if (maxDate && generateConfig.isAfter(offsetPickerValue, maxDate)) nextPickerValue = multiplePanel ? offsetPanelDate(generateConfig, pickerMode, maxDate, -1) : maxDate;
|
|
82
|
+
setCurrentPickerValue(nextPickerValue, "reset");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}, [
|
|
86
|
+
open,
|
|
87
|
+
preserveOnFieldChange,
|
|
88
|
+
mergedActiveIndex,
|
|
89
|
+
calendarValue[mergedActiveIndex]
|
|
90
|
+
]);
|
|
91
|
+
React$1.useEffect(() => {
|
|
92
|
+
if (open && preserveOnFieldChange) prevActiveIndexRef.current = mergedActiveIndex;
|
|
93
|
+
else prevActiveIndexRef.current = null;
|
|
94
|
+
}, [
|
|
95
|
+
open,
|
|
96
|
+
preserveOnFieldChange,
|
|
97
|
+
mergedActiveIndex
|
|
98
|
+
]);
|
|
99
|
+
useLayoutEffect$1(() => {
|
|
100
|
+
if (open && defaultPickerValue && defaultPickerValue[mergedActiveIndex]) setCurrentPickerValue(defaultPickerValue[mergedActiveIndex], "reset");
|
|
101
|
+
}, [open, mergedActiveIndex]);
|
|
102
|
+
return [currentPickerValue, setCurrentPickerValue];
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { useRangePickerValue as default, offsetPanelDate };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=useRangePickerValue.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRangePickerValue.mjs","names":["React"],"sources":["../../../../../src/DatePicker/core/PickerInput/hooks/useRangePickerValue.ts"],"sourcesContent":["import * as React from 'react';\n\nimport type { GenerateConfig } from '../../generate';\nimport { useControlledState, useLayoutEffect } from '../../hooks/react';\nimport type { InternalMode, Locale, NullableDateType, PanelMode } from '../../interface';\nimport { fillTime, isSame } from '../../utils/dateUtil';\nimport type { RangePickerProps } from '../RangePicker';\n\nexport function offsetPanelDate<DateType = any>(\n generateConfig: GenerateConfig<DateType>,\n picker: InternalMode,\n date: DateType,\n offset: number,\n) {\n switch (picker) {\n case 'date':\n case 'week': {\n return generateConfig.addMonth(date, offset);\n }\n\n case 'month':\n case 'quarter': {\n return generateConfig.addYear(date, offset);\n }\n\n case 'year': {\n return generateConfig.addYear(date, offset * 10);\n }\n\n case 'decade': {\n return generateConfig.addYear(date, offset * 100);\n }\n\n default: {\n return date;\n }\n }\n}\n\nconst EMPTY_LIST: unknown[] = [];\n\nexport default function useRangePickerValue<DateType extends object>(\n generateConfig: GenerateConfig<DateType>,\n locale: Locale,\n calendarValue: NullableDateType<DateType>[],\n modes: PanelMode[],\n open: boolean,\n preserveOnFieldChange: boolean,\n activeIndex: number,\n pickerMode: InternalMode,\n multiplePanel: boolean,\n defaultPickerValue: DateType[] = EMPTY_LIST as DateType[],\n pickerValue: DateType[] = EMPTY_LIST as DateType[],\n // This is legacy from origin logic.\n // We will take `showTime.defaultValue` as the part of `pickerValue`\n timeDefaultValue: DateType[] = EMPTY_LIST as DateType[],\n onPickerValueChange?: RangePickerProps<DateType>['onPickerValueChange'],\n minDate?: DateType,\n maxDate?: DateType,\n): [currentIndexPickerValue: DateType, setCurrentIndexPickerValue: (value: DateType) => void] {\n const isTimePicker = pickerMode === 'time';\n\n // ======================== Active ========================\n // `activeIndex` must be valid to avoid getting empty `pickerValue`\n const mergedActiveIndex = activeIndex || 0;\n const [startCalendarValue, endCalendarValue] = calendarValue;\n const activeCalendarValue = mergedActiveIndex === 0 ? startCalendarValue : endCalendarValue;\n const inactiveCalendarValue = mergedActiveIndex === 0 ? endCalendarValue : startCalendarValue;\n\n // ===================== Picker Value =====================\n const getDefaultPickerValue = (index: number) => {\n let now = generateConfig.getNow();\n if (isTimePicker) {\n now = fillTime(generateConfig, now);\n }\n\n const calendarDate = index === 0 ? startCalendarValue : endCalendarValue;\n return defaultPickerValue[index] || calendarDate || now;\n };\n\n // Align `pickerValue` with `showTime.defaultValue`\n const [startPickerValue, endPickerValue] = pickerValue;\n\n // PickerValue state\n const [mergedStartPickerValue, setStartPickerValue] = useControlledState(\n () => getDefaultPickerValue(0),\n startPickerValue,\n );\n\n const [mergedEndPickerValue, setEndPickerValue] = useControlledState(\n () => getDefaultPickerValue(1),\n endPickerValue,\n );\n\n // Current PickerValue\n const currentPickerValue = React.useMemo(() => {\n const current = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex];\n\n // Merge the `showTime.defaultValue` into `pickerValue`\n return isTimePicker\n ? current\n : fillTime(generateConfig, current, timeDefaultValue[mergedActiveIndex]);\n }, [\n isTimePicker,\n mergedStartPickerValue,\n mergedEndPickerValue,\n mergedActiveIndex,\n generateConfig,\n timeDefaultValue,\n ]);\n\n const setCurrentPickerValue = (\n nextPickerValue: DateType,\n source: 'reset' | 'panel' = 'panel',\n ) => {\n const updater = [setStartPickerValue, setEndPickerValue][mergedActiveIndex];\n updater(nextPickerValue);\n\n const clone: [DateType, DateType] = [mergedStartPickerValue, mergedEndPickerValue];\n clone[mergedActiveIndex] = nextPickerValue;\n\n if (\n onPickerValueChange &&\n (!isSame(generateConfig, locale, mergedStartPickerValue, clone[0], pickerMode) ||\n !isSame(generateConfig, locale, mergedEndPickerValue, clone[1], pickerMode))\n ) {\n onPickerValueChange(clone, {\n source,\n range: mergedActiveIndex === 1 ? 'end' : 'start',\n mode: modes as any,\n });\n }\n };\n\n // ======================== Effect ========================\n // Check whether two dates belong to the same panel.\n // 判断两个日期是否属于同一个面板。\n const isSamePanel = (date1: DateType, date2: DateType) => {\n if (pickerMode === 'year') {\n return (\n Math.floor(generateConfig.getYear(date1) / 10) ===\n Math.floor(generateConfig.getYear(date2) / 10)\n );\n }\n\n const panelMode: PanelMode =\n pickerMode === 'month' || pickerMode === 'quarter' ? 'year' : 'month';\n return isSame(generateConfig, locale, date1, date2, panelMode);\n };\n\n // Keep both values in the two visible panels when possible. Otherwise put\n // the end value in the second panel.\n // 尽量在双面板内同时展示两个值;无法容纳时,将 end 值放在右侧面板。\n const getEndDatePickerValue = (startDate: NullableDateType<DateType>, endDate: DateType) => {\n if (!multiplePanel || !startDate) {\n return endDate;\n }\n\n const nextPanelDate = offsetPanelDate(generateConfig, pickerMode, startDate, 1);\n const endInPanels = isSamePanel(startDate, endDate) || isSamePanel(nextPanelDate, endDate);\n\n return endInPanels ? startDate : offsetPanelDate(generateConfig, pickerMode, endDate, -1);\n };\n\n // >>> When switch field, reset the picker value as prev field picker value\n const prevActiveIndexRef = React.useRef<number>(null);\n useLayoutEffect(() => {\n if (open && !defaultPickerValue[mergedActiveIndex]) {\n let nextPickerValue: NullableDateType<DateType> = isTimePicker\n ? null\n : generateConfig.getNow();\n\n /**\n * 1. If focus switches inside the open Picker, keep the current panels\n * 2. If current field has value, sync it to the panels\n * - Start: use the start value\n * - End: keep start when both values fit, otherwise put end on the second panel\n * 3. If current field has no value but another field has value, use another field value\n * 4. Else use now (not any `calendarValue` can ref)\n */\n\n if (\n preserveOnFieldChange &&\n prevActiveIndexRef.current !== null &&\n prevActiveIndexRef.current !== mergedActiveIndex\n ) {\n // If from another field, not jump picker value\n nextPickerValue = [mergedStartPickerValue, mergedEndPickerValue][mergedActiveIndex ^ 1];\n } else if (activeCalendarValue) {\n // Current field has value\n nextPickerValue =\n mergedActiveIndex === 0\n ? startCalendarValue\n : getEndDatePickerValue(startCalendarValue, endCalendarValue!);\n } else if (inactiveCalendarValue) {\n // Current field has no value but another field has value\n nextPickerValue = inactiveCalendarValue;\n }\n\n // Only sync when has value, this will sync in the `min-max` logic\n if (nextPickerValue) {\n // nextPickerValue < minDate\n if (minDate && generateConfig.isAfter(minDate, nextPickerValue)) {\n nextPickerValue = minDate;\n }\n\n // maxDate < nextPickerValue\n const offsetPickerValue = multiplePanel\n ? offsetPanelDate(generateConfig, pickerMode, nextPickerValue, 1)\n : nextPickerValue;\n if (maxDate && generateConfig.isAfter(offsetPickerValue, maxDate)) {\n nextPickerValue = multiplePanel\n ? offsetPanelDate(generateConfig, pickerMode, maxDate, -1)\n : maxDate;\n }\n\n setCurrentPickerValue(nextPickerValue, 'reset');\n }\n }\n }, [open, preserveOnFieldChange, mergedActiveIndex, calendarValue[mergedActiveIndex]]);\n\n // >>> Track previous field only during one continuous Picker focus session\n React.useEffect(() => {\n if (open && preserveOnFieldChange) {\n prevActiveIndexRef.current = mergedActiveIndex;\n } else {\n prevActiveIndexRef.current = null;\n }\n }, [open, preserveOnFieldChange, mergedActiveIndex]);\n\n // >>> defaultPickerValue: Resync to `defaultPickerValue` for each panel focused\n useLayoutEffect(() => {\n if (open && defaultPickerValue && defaultPickerValue[mergedActiveIndex]) {\n setCurrentPickerValue(defaultPickerValue[mergedActiveIndex], 'reset');\n }\n }, [open, mergedActiveIndex]);\n\n return [currentPickerValue, setCurrentPickerValue];\n}\n"],"mappings":";;;;AAQA,SAAgB,gBACd,gBACA,QACA,MACA,QACA;CACA,QAAQ,QAAR;EACE,KAAK;EACL,KAAK,QACH,OAAO,eAAe,SAAS,MAAM,MAAM;EAG7C,KAAK;EACL,KAAK,WACH,OAAO,eAAe,QAAQ,MAAM,MAAM;EAG5C,KAAK,QACH,OAAO,eAAe,QAAQ,MAAM,SAAS,EAAE;EAGjD,KAAK,UACH,OAAO,eAAe,QAAQ,MAAM,SAAS,GAAG;EAGlD,SACE,OAAO;CAEX;AACF;AAEA,MAAM,aAAwB,CAAC;AAE/B,SAAwB,oBACtB,gBACA,QACA,eACA,OACA,MACA,uBACA,aACA,YACA,eACA,qBAAiC,YACjC,cAA0B,YAG1B,mBAA+B,YAC/B,qBACA,SACA,SAC4F;CAC5F,MAAM,eAAe,eAAe;CAIpC,MAAM,oBAAoB,eAAe;CACzC,MAAM,CAAC,oBAAoB,oBAAoB;CAC/C,MAAM,sBAAsB,sBAAsB,IAAI,qBAAqB;CAC3E,MAAM,wBAAwB,sBAAsB,IAAI,mBAAmB;CAG3E,MAAM,yBAAyB,UAAkB;EAC/C,IAAI,MAAM,eAAe,OAAO;EAChC,IAAI,cACF,MAAM,SAAS,gBAAgB,GAAG;EAGpC,MAAM,eAAe,UAAU,IAAI,qBAAqB;EACxD,OAAO,mBAAmB,UAAU,gBAAgB;CACtD;CAGA,MAAM,CAAC,kBAAkB,kBAAkB;CAG3C,MAAM,CAAC,wBAAwB,uBAAuB,yBAC9C,sBAAsB,CAAC,GAC7B,gBACF;CAEA,MAAM,CAAC,sBAAsB,qBAAqB,yBAC1C,sBAAsB,CAAC,GAC7B,cACF;CAGA,MAAM,qBAAqBA,QAAM,cAAc;EAC7C,MAAM,UAAU,CAAC,wBAAwB,oBAAoB,CAAC,CAAC;EAG/D,OAAO,eACH,UACA,SAAS,gBAAgB,SAAS,iBAAiB,kBAAkB;CAC3E,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,yBACJ,iBACA,SAA4B,YACzB;EACH,MAAM,UAAU,CAAC,qBAAqB,iBAAiB,CAAC,CAAC;EACzD,QAAQ,eAAe;EAEvB,MAAM,QAA8B,CAAC,wBAAwB,oBAAoB;EACjF,MAAM,qBAAqB;EAE3B,IACE,wBACC,CAAC,OAAO,gBAAgB,QAAQ,wBAAwB,MAAM,IAAI,UAAU,KAC3E,CAAC,OAAO,gBAAgB,QAAQ,sBAAsB,MAAM,IAAI,UAAU,IAE5E,oBAAoB,OAAO;GACzB;GACA,OAAO,sBAAsB,IAAI,QAAQ;GACzC,MAAM;EACR,CAAC;CAEL;CAKA,MAAM,eAAe,OAAiB,UAAoB;EACxD,IAAI,eAAe,QACjB,OACE,KAAK,MAAM,eAAe,QAAQ,KAAK,IAAI,EAAE,MAC7C,KAAK,MAAM,eAAe,QAAQ,KAAK,IAAI,EAAE;EAMjD,OAAO,OAAO,gBAAgB,QAAQ,OAAO,OAD3C,eAAe,WAAW,eAAe,YAAY,SAAS,OACH;CAC/D;CAKA,MAAM,yBAAyB,WAAuC,YAAsB;EAC1F,IAAI,CAAC,iBAAiB,CAAC,WACrB,OAAO;EAGT,MAAM,gBAAgB,gBAAgB,gBAAgB,YAAY,WAAW,CAAC;EAG9E,OAFoB,YAAY,WAAW,OAAO,KAAK,YAAY,eAAe,OAAO,IAEpE,YAAY,gBAAgB,gBAAgB,YAAY,SAAS,EAAE;CAC1F;CAGA,MAAM,qBAAqBA,QAAM,OAAe,IAAI;CACpD,wBAAsB;EACpB,IAAI,QAAQ,CAAC,mBAAmB,oBAAoB;GAClD,IAAI,kBAA8C,eAC9C,OACA,eAAe,OAAO;;;;;;;;;GAW1B,IACE,yBACA,mBAAmB,YAAY,QAC/B,mBAAmB,YAAY,mBAG/B,kBAAkB,CAAC,wBAAwB,oBAAoB,CAAC,CAAC,oBAAoB;QAChF,IAAI,qBAET,kBACE,sBAAsB,IAClB,qBACA,sBAAsB,oBAAoB,gBAAiB;QAC5D,IAAI,uBAET,kBAAkB;GAIpB,IAAI,iBAAiB;IAEnB,IAAI,WAAW,eAAe,QAAQ,SAAS,eAAe,GAC5D,kBAAkB;IAIpB,MAAM,oBAAoB,gBACtB,gBAAgB,gBAAgB,YAAY,iBAAiB,CAAC,IAC9D;IACJ,IAAI,WAAW,eAAe,QAAQ,mBAAmB,OAAO,GAC9D,kBAAkB,gBACd,gBAAgB,gBAAgB,YAAY,SAAS,EAAE,IACvD;IAGN,sBAAsB,iBAAiB,OAAO;GAChD;EACF;CACF,GAAG;EAAC;EAAM;EAAuB;EAAmB,cAAc;CAAkB,CAAC;CAGrF,QAAM,gBAAgB;EACpB,IAAI,QAAQ,uBACV,mBAAmB,UAAU;OAE7B,mBAAmB,UAAU;CAEjC,GAAG;EAAC;EAAM;EAAuB;CAAiB,CAAC;CAGnD,wBAAsB;EACpB,IAAI,QAAQ,sBAAsB,mBAAmB,oBACnD,sBAAsB,mBAAmB,oBAAoB,OAAO;CAExE,GAAG,CAAC,MAAM,iBAAiB,CAAC;CAE5B,OAAO,CAAC,oBAAoB,qBAAqB;AACnD"}
|