react-native-ruler-date-picker 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +186 -60
- package/lib/commonjs/LensTick.js +83 -0
- package/lib/commonjs/LensTick.js.map +1 -0
- package/lib/commonjs/Ruler.js +38 -0
- package/lib/commonjs/Ruler.js.map +1 -0
- package/lib/commonjs/RulerContext.js +17 -0
- package/lib/commonjs/RulerContext.js.map +1 -0
- package/lib/commonjs/RulerDatePicker.js +38 -351
- package/lib/commonjs/RulerDatePicker.js.map +1 -1
- package/lib/commonjs/RulerDateRangePicker.js +56 -0
- package/lib/commonjs/RulerDateRangePicker.js.map +1 -0
- package/lib/commonjs/RulerHeader.js +106 -0
- package/lib/commonjs/RulerHeader.js.map +1 -0
- package/lib/commonjs/RulerIndicator.js +67 -0
- package/lib/commonjs/RulerIndicator.js.map +1 -0
- package/lib/commonjs/RulerLensTicks.js +55 -0
- package/lib/commonjs/RulerLensTicks.js.map +1 -0
- package/lib/commonjs/RulerLensTrack.js +52 -0
- package/lib/commonjs/RulerLensTrack.js.map +1 -0
- package/lib/commonjs/RulerRange.js +39 -0
- package/lib/commonjs/RulerRange.js.map +1 -0
- package/lib/commonjs/RulerRangeContext.js +17 -0
- package/lib/commonjs/RulerRangeContext.js.map +1 -0
- package/lib/commonjs/RulerRangeHeader.js +154 -0
- package/lib/commonjs/RulerRangeHeader.js.map +1 -0
- package/lib/commonjs/RulerRangeHighlight.js +50 -0
- package/lib/commonjs/RulerRangeHighlight.js.map +1 -0
- package/lib/commonjs/RulerRangeIndicator.js +71 -0
- package/lib/commonjs/RulerRangeIndicator.js.map +1 -0
- package/lib/commonjs/RulerRangeRoot.js +80 -0
- package/lib/commonjs/RulerRangeRoot.js.map +1 -0
- package/lib/commonjs/RulerRangeTicks.js +57 -0
- package/lib/commonjs/RulerRangeTicks.js.map +1 -0
- package/lib/commonjs/RulerRangeTrack.js +46 -0
- package/lib/commonjs/RulerRangeTrack.js.map +1 -0
- package/lib/commonjs/RulerResetButton.js +46 -0
- package/lib/commonjs/RulerResetButton.js.map +1 -0
- package/lib/commonjs/RulerRoot.js +87 -0
- package/lib/commonjs/RulerRoot.js.map +1 -0
- package/lib/commonjs/RulerTicks.js +51 -0
- package/lib/commonjs/RulerTicks.js.map +1 -0
- package/lib/commonjs/RulerTrack.js +46 -0
- package/lib/commonjs/RulerTrack.js.map +1 -0
- package/lib/commonjs/Tick.js +41 -36
- package/lib/commonjs/Tick.js.map +1 -1
- package/lib/commonjs/defaults.js +20 -19
- package/lib/commonjs/defaults.js.map +1 -1
- package/lib/commonjs/index.js +287 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/presets.js +108 -0
- package/lib/commonjs/presets.js.map +1 -0
- package/lib/commonjs/tickResolver.js +101 -0
- package/lib/commonjs/tickResolver.js.map +1 -0
- package/lib/commonjs/useHaptics.js +1 -1
- package/lib/commonjs/useHaptics.web.js +43 -0
- package/lib/commonjs/useHaptics.web.js.map +1 -0
- package/lib/commonjs/useRulerDatePicker.js +264 -0
- package/lib/commonjs/useRulerDatePicker.js.map +1 -0
- package/lib/commonjs/useRulerDateRangePicker.js +313 -0
- package/lib/commonjs/useRulerDateRangePicker.js.map +1 -0
- package/lib/commonjs/utils.js +61 -47
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/LensTick.js +77 -0
- package/lib/module/LensTick.js.map +1 -0
- package/lib/module/Ruler.js +35 -0
- package/lib/module/Ruler.js.map +1 -0
- package/lib/module/RulerContext.js +12 -0
- package/lib/module/RulerContext.js.map +1 -0
- package/lib/module/RulerDatePicker.js +38 -350
- package/lib/module/RulerDatePicker.js.map +1 -1
- package/lib/module/RulerDateRangePicker.js +52 -0
- package/lib/module/RulerDateRangePicker.js.map +1 -0
- package/lib/module/RulerHeader.js +101 -0
- package/lib/module/RulerHeader.js.map +1 -0
- package/lib/module/RulerIndicator.js +62 -0
- package/lib/module/RulerIndicator.js.map +1 -0
- package/lib/module/RulerLensTicks.js +50 -0
- package/lib/module/RulerLensTicks.js.map +1 -0
- package/lib/module/RulerLensTrack.js +47 -0
- package/lib/module/RulerLensTrack.js.map +1 -0
- package/lib/module/RulerRange.js +36 -0
- package/lib/module/RulerRange.js.map +1 -0
- package/lib/module/RulerRangeContext.js +12 -0
- package/lib/module/RulerRangeContext.js.map +1 -0
- package/lib/module/RulerRangeHeader.js +149 -0
- package/lib/module/RulerRangeHeader.js.map +1 -0
- package/lib/module/RulerRangeHighlight.js +45 -0
- package/lib/module/RulerRangeHighlight.js.map +1 -0
- package/lib/module/RulerRangeIndicator.js +66 -0
- package/lib/module/RulerRangeIndicator.js.map +1 -0
- package/lib/module/RulerRangeRoot.js +75 -0
- package/lib/module/RulerRangeRoot.js.map +1 -0
- package/lib/module/RulerRangeTicks.js +51 -0
- package/lib/module/RulerRangeTicks.js.map +1 -0
- package/lib/module/RulerRangeTrack.js +41 -0
- package/lib/module/RulerRangeTrack.js.map +1 -0
- package/lib/module/RulerResetButton.js +41 -0
- package/lib/module/RulerResetButton.js.map +1 -0
- package/lib/module/RulerRoot.js +82 -0
- package/lib/module/RulerRoot.js.map +1 -0
- package/lib/module/RulerTicks.js +45 -0
- package/lib/module/RulerTicks.js.map +1 -0
- package/lib/module/RulerTrack.js +41 -0
- package/lib/module/RulerTrack.js.map +1 -0
- package/lib/module/Tick.js +41 -36
- package/lib/module/Tick.js.map +1 -1
- package/lib/module/defaults.js +19 -18
- package/lib/module/defaults.js.map +1 -1
- package/lib/module/index.js +46 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/presets.js +103 -0
- package/lib/module/presets.js.map +1 -0
- package/lib/module/tickResolver.js +97 -0
- package/lib/module/tickResolver.js.map +1 -0
- package/lib/module/useHaptics.js +1 -1
- package/lib/module/useHaptics.js.map +1 -1
- package/lib/module/useHaptics.web.js +39 -0
- package/lib/module/useHaptics.web.js.map +1 -0
- package/lib/module/useRulerDatePicker.js +260 -0
- package/lib/module/useRulerDatePicker.js.map +1 -0
- package/lib/module/useRulerDateRangePicker.js +310 -0
- package/lib/module/useRulerDateRangePicker.js.map +1 -0
- package/lib/module/utils.js +59 -45
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/LensTick.d.ts +20 -0
- package/lib/typescript/LensTick.d.ts.map +1 -0
- package/lib/typescript/Ruler.d.ts +31 -0
- package/lib/typescript/Ruler.d.ts.map +1 -0
- package/lib/typescript/RulerContext.d.ts +11 -0
- package/lib/typescript/RulerContext.d.ts.map +1 -0
- package/lib/typescript/RulerDatePicker.d.ts +10 -7
- package/lib/typescript/RulerDatePicker.d.ts.map +1 -1
- package/lib/typescript/RulerDateRangePicker.d.ts +26 -0
- package/lib/typescript/RulerDateRangePicker.d.ts.map +1 -0
- package/lib/typescript/RulerHeader.d.ts +14 -0
- package/lib/typescript/RulerHeader.d.ts.map +1 -0
- package/lib/typescript/RulerIndicator.d.ts +17 -0
- package/lib/typescript/RulerIndicator.d.ts.map +1 -0
- package/lib/typescript/RulerLensTicks.d.ts +12 -0
- package/lib/typescript/RulerLensTicks.d.ts.map +1 -0
- package/lib/typescript/RulerLensTrack.d.ts +13 -0
- package/lib/typescript/RulerLensTrack.d.ts.map +1 -0
- package/lib/typescript/RulerRange.d.ts +32 -0
- package/lib/typescript/RulerRange.d.ts.map +1 -0
- package/lib/typescript/RulerRangeContext.d.ts +11 -0
- package/lib/typescript/RulerRangeContext.d.ts.map +1 -0
- package/lib/typescript/RulerRangeHeader.d.ts +12 -0
- package/lib/typescript/RulerRangeHeader.d.ts.map +1 -0
- package/lib/typescript/RulerRangeHighlight.d.ts +8 -0
- package/lib/typescript/RulerRangeHighlight.d.ts.map +1 -0
- package/lib/typescript/RulerRangeIndicator.d.ts +17 -0
- package/lib/typescript/RulerRangeIndicator.d.ts.map +1 -0
- package/lib/typescript/RulerRangeRoot.d.ts +7 -0
- package/lib/typescript/RulerRangeRoot.d.ts.map +1 -0
- package/lib/typescript/RulerRangeTicks.d.ts +14 -0
- package/lib/typescript/RulerRangeTicks.d.ts.map +1 -0
- package/lib/typescript/RulerRangeTrack.d.ts +8 -0
- package/lib/typescript/RulerRangeTrack.d.ts.map +1 -0
- package/lib/typescript/RulerResetButton.d.ts +10 -0
- package/lib/typescript/RulerResetButton.d.ts.map +1 -0
- package/lib/typescript/RulerRoot.d.ts +7 -0
- package/lib/typescript/RulerRoot.d.ts.map +1 -0
- package/lib/typescript/RulerTicks.d.ts +9 -0
- package/lib/typescript/RulerTicks.d.ts.map +1 -0
- package/lib/typescript/RulerTrack.d.ts +8 -0
- package/lib/typescript/RulerTrack.d.ts.map +1 -0
- package/lib/typescript/Tick.d.ts +3 -16
- package/lib/typescript/Tick.d.ts.map +1 -1
- package/lib/typescript/defaults.d.ts +6 -9
- package/lib/typescript/defaults.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +37 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/presets.d.ts +27 -0
- package/lib/typescript/presets.d.ts.map +1 -0
- package/lib/typescript/tickResolver.d.ts +10 -0
- package/lib/typescript/tickResolver.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +302 -85
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/useHaptics.web.d.ts +17 -0
- package/lib/typescript/useHaptics.web.d.ts.map +1 -0
- package/lib/typescript/useRulerDatePicker.d.ts +26 -0
- package/lib/typescript/useRulerDatePicker.d.ts.map +1 -0
- package/lib/typescript/useRulerDateRangePicker.d.ts +40 -0
- package/lib/typescript/useRulerDateRangePicker.d.ts.map +1 -0
- package/lib/typescript/utils.d.ts +14 -12
- package/lib/typescript/utils.d.ts.map +1 -1
- package/package.json +25 -7
- package/src/LensTick.tsx +90 -0
- package/src/Ruler.ts +32 -0
- package/src/RulerContext.tsx +20 -0
- package/src/RulerDatePicker.tsx +41 -439
- package/src/RulerDateRangePicker.tsx +53 -0
- package/src/RulerHeader.tsx +125 -0
- package/src/RulerIndicator.tsx +84 -0
- package/src/RulerLensTicks.tsx +50 -0
- package/src/RulerLensTrack.tsx +45 -0
- package/src/RulerRange.ts +33 -0
- package/src/RulerRangeContext.tsx +20 -0
- package/src/RulerRangeHeader.tsx +180 -0
- package/src/RulerRangeHighlight.tsx +47 -0
- package/src/RulerRangeIndicator.tsx +85 -0
- package/src/RulerRangeRoot.tsx +87 -0
- package/src/RulerRangeTicks.tsx +68 -0
- package/src/RulerRangeTrack.tsx +39 -0
- package/src/RulerResetButton.tsx +59 -0
- package/src/RulerRoot.tsx +93 -0
- package/src/RulerTicks.tsx +57 -0
- package/src/RulerTrack.tsx +39 -0
- package/src/Tick.tsx +60 -49
- package/src/defaults.ts +21 -19
- package/src/index.ts +83 -1
- package/src/presets.ts +108 -0
- package/src/tickResolver.ts +123 -0
- package/src/types.ts +354 -102
- package/src/useHaptics.web.ts +55 -0
- package/src/useRulerDatePicker.ts +373 -0
- package/src/useRulerDateRangePicker.ts +468 -0
- package/src/utils.ts +67 -68
- package/lib/commonjs/package.json +0 -1
- package/lib/module/package.json +0 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useRulerDatePicker = useRulerDatePicker;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
11
|
+
var _defaults = require("./defaults.js");
|
|
12
|
+
var _presets = require("./presets.js");
|
|
13
|
+
var _tickResolver = require("./tickResolver.js");
|
|
14
|
+
var _utils = require("./utils.js");
|
|
15
|
+
var _useHaptics = require("./useHaptics");
|
|
16
|
+
/**
|
|
17
|
+
* Headless Hook encapsulating gesture physics, Reanimated 3 decay/snapping,
|
|
18
|
+
* windowed tick resolution, and haptics for the Ruler Date Picker.
|
|
19
|
+
*/
|
|
20
|
+
function useRulerDatePicker(props = {}) {
|
|
21
|
+
const {
|
|
22
|
+
value,
|
|
23
|
+
defaultValue,
|
|
24
|
+
onChange,
|
|
25
|
+
minDate,
|
|
26
|
+
maxDate,
|
|
27
|
+
ticks = 'calendar',
|
|
28
|
+
tickSpacing = _defaults.DEFAULTS.tickSpacing,
|
|
29
|
+
tickWidth = _defaults.DEFAULTS.tickWidth,
|
|
30
|
+
rulerHeight = _defaults.DEFAULTS.rulerHeight,
|
|
31
|
+
theme: propTheme,
|
|
32
|
+
debounceMs = _defaults.DEFAULTS.debounceMs,
|
|
33
|
+
haptics = true,
|
|
34
|
+
style
|
|
35
|
+
} = props;
|
|
36
|
+
const bufferTicks = _defaults.DEFAULTS.bufferTicks;
|
|
37
|
+
const isHapticsEnabled = typeof haptics === 'boolean' ? haptics : haptics?.enabled ?? true;
|
|
38
|
+
const resolvedHapticTrigger = typeof haptics === 'object' ? haptics.onTrigger : undefined;
|
|
39
|
+
const fastSwipeTickThreshold = (typeof haptics === 'object' ? haptics.fastSwipeTickThreshold : undefined) ?? _defaults.DEFAULTS.fastSwipeTickThreshold;
|
|
40
|
+
const continuousHapticIntervalMs = (typeof haptics === 'object' ? haptics.continuousHapticIntervalMs : undefined) ?? _defaults.DEFAULTS.continuousHapticIntervalMs;
|
|
41
|
+
const height = style?.height ?? _defaults.DEFAULTS.height;
|
|
42
|
+
|
|
43
|
+
// ── Resolved Theme ────────────────────────────────────────────────────────
|
|
44
|
+
const theme = (0, _utils.useResolvedTheme)(propTheme);
|
|
45
|
+
|
|
46
|
+
// ── Resolved Rules ────────────────────────────────────────────────────────
|
|
47
|
+
const rules = (0, _react.useMemo)(() => (0, _presets.resolveTickRules)(ticks), [ticks]);
|
|
48
|
+
|
|
49
|
+
// ── Haptics ───────────────────────────────────────────────────────────────
|
|
50
|
+
const {
|
|
51
|
+
fireDiscreteHaptic,
|
|
52
|
+
startContinuousHaptic,
|
|
53
|
+
stopContinuousHaptic
|
|
54
|
+
} = (0, _useHaptics.useHaptics)({
|
|
55
|
+
enableHaptics: isHapticsEnabled,
|
|
56
|
+
onHapticTrigger: resolvedHapticTrigger,
|
|
57
|
+
continuousHapticIntervalMs
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// ── Reference Time (Midnight Today) ───────────────────────────────────────
|
|
61
|
+
const todayTime = (0, _react.useMemo)(() => {
|
|
62
|
+
const d = new Date();
|
|
63
|
+
d.setHours(0, 0, 0, 0);
|
|
64
|
+
return d.getTime();
|
|
65
|
+
}, []);
|
|
66
|
+
|
|
67
|
+
// ── Bounds ────────────────────────────────────────────────────────────────
|
|
68
|
+
const {
|
|
69
|
+
minOffset,
|
|
70
|
+
maxOffset
|
|
71
|
+
} = (0, _react.useMemo)(() => (0, _utils.computeDayRange)(todayTime, minDate, maxDate), [todayTime, minDate, maxDate]);
|
|
72
|
+
|
|
73
|
+
// ── Initial Date Calculation ──────────────────────────────────────────────
|
|
74
|
+
const initialDate = (0, _react.useMemo)(() => {
|
|
75
|
+
return (0, _utils.normalizeDate)(value ?? defaultValue ?? new Date());
|
|
76
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
77
|
+
}, []);
|
|
78
|
+
const initialOffsetDays = (0, _react.useMemo)(() => {
|
|
79
|
+
return (0, _utils.dateToDayOffset)(initialDate, todayTime);
|
|
80
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
81
|
+
}, []);
|
|
82
|
+
|
|
83
|
+
// ── Animated Values ───────────────────────────────────────────────────────
|
|
84
|
+
const translateX = (0, _reactNativeReanimated.useSharedValue)(-initialOffsetDays * tickSpacing);
|
|
85
|
+
const contextX = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
86
|
+
const previousIndex = (0, _reactNativeReanimated.useSharedValue)(-initialOffsetDays);
|
|
87
|
+
const isFastMode = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
88
|
+
|
|
89
|
+
// ── State ─────────────────────────────────────────────────────────────────
|
|
90
|
+
const [selectedDate, setSelectedDate] = (0, _react.useState)(initialDate);
|
|
91
|
+
const [selectedDateStr, setSelectedDateStr] = (0, _react.useState)((0, _utils.formatDateString)(initialDate));
|
|
92
|
+
const [windowCenter, setWindowCenter] = (0, _react.useState)(-initialOffsetDays);
|
|
93
|
+
const debounceTimerRef = (0, _react.useRef)(null);
|
|
94
|
+
const windowDimensions = (0, _reactNative.useWindowDimensions)();
|
|
95
|
+
const width = props.width ?? windowDimensions.width;
|
|
96
|
+
const halfVisible = Math.ceil(width / 2 / tickSpacing);
|
|
97
|
+
const windowSize = halfVisible + bufferTicks;
|
|
98
|
+
|
|
99
|
+
// ── Visible Ticks Resolution ──────────────────────────────────────────────
|
|
100
|
+
const visibleTicks = (0, _react.useMemo)(() => {
|
|
101
|
+
const resolved = [];
|
|
102
|
+
const start = Math.max(windowCenter - windowSize, minOffset);
|
|
103
|
+
const end = Math.min(windowCenter + windowSize, maxOffset);
|
|
104
|
+
for (let i = start; i <= end; i++) {
|
|
105
|
+
const d = (0, _utils.dayOffsetToDate)(i, todayTime);
|
|
106
|
+
const isToday = i === 0;
|
|
107
|
+
const isSelected = (0, _utils.formatDateString)(d) === selectedDateStr;
|
|
108
|
+
resolved.push((0, _tickResolver.resolveTick)({
|
|
109
|
+
date: d,
|
|
110
|
+
offset: i,
|
|
111
|
+
isToday,
|
|
112
|
+
isSelected
|
|
113
|
+
}, rules, theme, tickWidth));
|
|
114
|
+
}
|
|
115
|
+
return resolved;
|
|
116
|
+
}, [windowCenter, windowSize, minOffset, maxOffset, todayTime, selectedDateStr, rules, theme, tickWidth]);
|
|
117
|
+
|
|
118
|
+
// ── Tick Changed Callback ─────────────────────────────────────────────────
|
|
119
|
+
const onTickChanged = (0, _react.useCallback)((index, enteringFastMode) => {
|
|
120
|
+
if (enteringFastMode) {
|
|
121
|
+
startContinuousHaptic();
|
|
122
|
+
} else {
|
|
123
|
+
stopContinuousHaptic();
|
|
124
|
+
fireDiscreteHaptic();
|
|
125
|
+
}
|
|
126
|
+
const d = (0, _utils.dayOffsetToDate)(index, todayTime);
|
|
127
|
+
const dateStr = (0, _utils.formatDateString)(d);
|
|
128
|
+
setSelectedDate(d);
|
|
129
|
+
setSelectedDateStr(dateStr);
|
|
130
|
+
setWindowCenter(prev => {
|
|
131
|
+
if (Math.abs(index - prev) >= 5) {
|
|
132
|
+
return index;
|
|
133
|
+
}
|
|
134
|
+
return prev;
|
|
135
|
+
});
|
|
136
|
+
if (debounceTimerRef.current) {
|
|
137
|
+
clearTimeout(debounceTimerRef.current);
|
|
138
|
+
}
|
|
139
|
+
debounceTimerRef.current = setTimeout(() => {
|
|
140
|
+
onChange?.(d, dateStr);
|
|
141
|
+
}, debounceMs);
|
|
142
|
+
}, [todayTime, onChange, debounceMs, startContinuousHaptic, stopContinuousHaptic, fireDiscreteHaptic]);
|
|
143
|
+
|
|
144
|
+
// ── Animation Settled Callback ────────────────────────────────────────────
|
|
145
|
+
const onAnimationSettled = (0, _react.useCallback)(index => {
|
|
146
|
+
stopContinuousHaptic();
|
|
147
|
+
fireDiscreteHaptic();
|
|
148
|
+
const d = (0, _utils.dayOffsetToDate)(index, todayTime);
|
|
149
|
+
const dateStr = (0, _utils.formatDateString)(d);
|
|
150
|
+
setSelectedDate(d);
|
|
151
|
+
setSelectedDateStr(dateStr);
|
|
152
|
+
setWindowCenter(index);
|
|
153
|
+
onChange?.(d, dateStr);
|
|
154
|
+
}, [todayTime, onChange, stopContinuousHaptic, fireDiscreteHaptic]);
|
|
155
|
+
|
|
156
|
+
// ── Animated Reaction ─────────────────────────────────────────────────────
|
|
157
|
+
(0, _reactNativeReanimated.useAnimatedReaction)(() => Math.round(-translateX.value / tickSpacing), (index, prev) => {
|
|
158
|
+
if (index !== prev && index >= minOffset && index <= maxOffset) {
|
|
159
|
+
previousIndex.value = index;
|
|
160
|
+
const ticksSkipped = prev !== null ? Math.abs(index - prev) : 1;
|
|
161
|
+
const shouldBeFast = ticksSkipped > fastSwipeTickThreshold;
|
|
162
|
+
if (shouldBeFast && !isFastMode.value) {
|
|
163
|
+
isFastMode.value = true;
|
|
164
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, true);
|
|
165
|
+
} else if (!shouldBeFast && isFastMode.value) {
|
|
166
|
+
isFastMode.value = false;
|
|
167
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, false);
|
|
168
|
+
} else if (!shouldBeFast) {
|
|
169
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, false);
|
|
170
|
+
}
|
|
171
|
+
if (shouldBeFast && isFastMode.value) {
|
|
172
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, true);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}, [tickSpacing, minOffset, maxOffset, fastSwipeTickThreshold]);
|
|
176
|
+
|
|
177
|
+
// ── Pan Gesture ───────────────────────────────────────────────────────────
|
|
178
|
+
const panGesture = (0, _react.useMemo)(() => {
|
|
179
|
+
return _reactNativeGestureHandler.Gesture.Pan().onStart(() => {
|
|
180
|
+
contextX.value = translateX.value;
|
|
181
|
+
}).onUpdate(event => {
|
|
182
|
+
translateX.value = contextX.value + event.translationX;
|
|
183
|
+
}).onEnd(event => {
|
|
184
|
+
translateX.value = (0, _reactNativeReanimated.withDecay)({
|
|
185
|
+
velocity: event.velocityX,
|
|
186
|
+
deceleration: 0.99
|
|
187
|
+
}, finished => {
|
|
188
|
+
if (finished) {
|
|
189
|
+
const maxTranslateX = -minOffset * tickSpacing;
|
|
190
|
+
const minTranslateX = -maxOffset * tickSpacing;
|
|
191
|
+
const clampedX = Math.min(Math.max(translateX.value, minTranslateX), maxTranslateX);
|
|
192
|
+
const snappedIndex = Math.round(clampedX / tickSpacing);
|
|
193
|
+
const snappedX = snappedIndex * tickSpacing;
|
|
194
|
+
translateX.value = (0, _reactNativeReanimated.withTiming)(snappedX, {
|
|
195
|
+
duration: 150
|
|
196
|
+
}, done => {
|
|
197
|
+
if (done) {
|
|
198
|
+
isFastMode.value = false;
|
|
199
|
+
const index = Math.round(-snappedX / tickSpacing);
|
|
200
|
+
(0, _reactNativeReanimated.runOnJS)(onAnimationSettled)(index);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
}, [contextX, translateX, minOffset, maxOffset, tickSpacing, onAnimationSettled, isFastMode]);
|
|
207
|
+
|
|
208
|
+
// ── Programmatic Control ──────────────────────────────────────────────────
|
|
209
|
+
const scrollToDate = (0, _react.useCallback)((targetDate, animated = true) => {
|
|
210
|
+
const d = (0, _utils.normalizeDate)(targetDate);
|
|
211
|
+
const offset = (0, _utils.dateToDayOffset)(d, todayTime);
|
|
212
|
+
const clampedOffset = Math.max(minOffset, Math.min(offset, maxOffset));
|
|
213
|
+
const targetX = -clampedOffset * tickSpacing;
|
|
214
|
+
stopContinuousHaptic();
|
|
215
|
+
if (animated) {
|
|
216
|
+
translateX.value = (0, _reactNativeReanimated.withTiming)(targetX, {
|
|
217
|
+
duration: 250
|
|
218
|
+
}, done => {
|
|
219
|
+
if (done) {
|
|
220
|
+
(0, _reactNativeReanimated.runOnJS)(onAnimationSettled)(clampedOffset);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
} else {
|
|
224
|
+
translateX.value = targetX;
|
|
225
|
+
onAnimationSettled(clampedOffset);
|
|
226
|
+
}
|
|
227
|
+
}, [todayTime, minOffset, maxOffset, tickSpacing, translateX, stopContinuousHaptic, onAnimationSettled]);
|
|
228
|
+
const resetToToday = (0, _react.useCallback)((animated = true) => {
|
|
229
|
+
scrollToDate(new Date(todayTime), animated);
|
|
230
|
+
}, [scrollToDate, todayTime]);
|
|
231
|
+
|
|
232
|
+
// ── Sync with external controlled value ───────────────────────────────────
|
|
233
|
+
const prevValuePropRef = (0, _react.useRef)(value);
|
|
234
|
+
(0, _react.useEffect)(() => {
|
|
235
|
+
if (value !== undefined && value !== prevValuePropRef.current) {
|
|
236
|
+
prevValuePropRef.current = value;
|
|
237
|
+
const target = (0, _utils.normalizeDate)(value);
|
|
238
|
+
if ((0, _utils.formatDateString)(target) !== (0, _utils.formatDateString)(selectedDate)) {
|
|
239
|
+
scrollToDate(target, true);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}, [value, selectedDate, scrollToDate]);
|
|
243
|
+
const isTodaySelected = (0, _react.useMemo)(() => {
|
|
244
|
+
return selectedDateStr === (0, _utils.formatDateString)(new Date(todayTime));
|
|
245
|
+
}, [selectedDateStr, todayTime]);
|
|
246
|
+
return {
|
|
247
|
+
translateX,
|
|
248
|
+
panGesture,
|
|
249
|
+
selectedDate,
|
|
250
|
+
selectedDateStr,
|
|
251
|
+
isTodaySelected,
|
|
252
|
+
visibleTicks,
|
|
253
|
+
theme,
|
|
254
|
+
tickSpacing,
|
|
255
|
+
rulerHeight,
|
|
256
|
+
height,
|
|
257
|
+
width,
|
|
258
|
+
minOffset,
|
|
259
|
+
maxOffset,
|
|
260
|
+
scrollToDate,
|
|
261
|
+
resetToToday
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=useRulerDatePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeReanimated","_reactNativeGestureHandler","_defaults","_presets","_tickResolver","_utils","_useHaptics","useRulerDatePicker","props","value","defaultValue","onChange","minDate","maxDate","ticks","tickSpacing","DEFAULTS","tickWidth","rulerHeight","theme","propTheme","debounceMs","haptics","style","bufferTicks","isHapticsEnabled","enabled","resolvedHapticTrigger","onTrigger","undefined","fastSwipeTickThreshold","continuousHapticIntervalMs","height","useResolvedTheme","rules","useMemo","resolveTickRules","fireDiscreteHaptic","startContinuousHaptic","stopContinuousHaptic","useHaptics","enableHaptics","onHapticTrigger","todayTime","d","Date","setHours","getTime","minOffset","maxOffset","computeDayRange","initialDate","normalizeDate","initialOffsetDays","dateToDayOffset","translateX","useSharedValue","contextX","previousIndex","isFastMode","selectedDate","setSelectedDate","useState","selectedDateStr","setSelectedDateStr","formatDateString","windowCenter","setWindowCenter","debounceTimerRef","useRef","windowDimensions","useWindowDimensions","width","halfVisible","Math","ceil","windowSize","visibleTicks","resolved","start","max","end","min","i","dayOffsetToDate","isToday","isSelected","push","resolveTick","date","offset","onTickChanged","useCallback","index","enteringFastMode","dateStr","prev","abs","current","clearTimeout","setTimeout","onAnimationSettled","useAnimatedReaction","round","ticksSkipped","shouldBeFast","runOnJS","panGesture","Gesture","Pan","onStart","onUpdate","event","translationX","onEnd","withDecay","velocity","velocityX","deceleration","finished","maxTranslateX","minTranslateX","clampedX","snappedIndex","snappedX","withTiming","duration","done","scrollToDate","targetDate","animated","clampedOffset","targetX","resetToToday","prevValuePropRef","useEffect","target","isTodaySelected"],"sourceRoot":"../../src","sources":["useRulerDatePicker.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useRulerDateRangePicker = useRulerDateRangePicker;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
11
|
+
var _defaults = require("./defaults.js");
|
|
12
|
+
var _presets = require("./presets.js");
|
|
13
|
+
var _tickResolver = require("./tickResolver.js");
|
|
14
|
+
var _utils = require("./utils.js");
|
|
15
|
+
var _useHaptics = require("./useHaptics");
|
|
16
|
+
/**
|
|
17
|
+
* Return interface for the `useRulerDateRangePicker` headless hook.
|
|
18
|
+
*
|
|
19
|
+
* @experimental
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Headless Hook for managing Date Range selection with dual pins,
|
|
24
|
+
* range highlight calculations, and Reanimated 3 physics.
|
|
25
|
+
*
|
|
26
|
+
* @experimental This hook is experimental and subject to breaking changes
|
|
27
|
+
* in future minor versions.
|
|
28
|
+
*/
|
|
29
|
+
function useRulerDateRangePicker(props = {}) {
|
|
30
|
+
const {
|
|
31
|
+
value,
|
|
32
|
+
defaultValue,
|
|
33
|
+
onChange,
|
|
34
|
+
minDate,
|
|
35
|
+
maxDate,
|
|
36
|
+
ticks = 'calendar',
|
|
37
|
+
tickSpacing = _defaults.DEFAULTS.tickSpacing,
|
|
38
|
+
tickWidth = _defaults.DEFAULTS.tickWidth,
|
|
39
|
+
rulerHeight = _defaults.DEFAULTS.rulerHeight,
|
|
40
|
+
theme: propTheme,
|
|
41
|
+
debounceMs = _defaults.DEFAULTS.debounceMs,
|
|
42
|
+
haptics = true,
|
|
43
|
+
minSpanDays = 1,
|
|
44
|
+
maxSpanDays,
|
|
45
|
+
style
|
|
46
|
+
} = props;
|
|
47
|
+
const bufferTicks = _defaults.DEFAULTS.bufferTicks;
|
|
48
|
+
const isHapticsEnabled = typeof haptics === 'boolean' ? haptics : haptics?.enabled ?? true;
|
|
49
|
+
const resolvedHapticTrigger = typeof haptics === 'object' ? haptics.onTrigger : undefined;
|
|
50
|
+
const fastSwipeTickThreshold = (typeof haptics === 'object' ? haptics.fastSwipeTickThreshold : undefined) ?? _defaults.DEFAULTS.fastSwipeTickThreshold;
|
|
51
|
+
const continuousHapticIntervalMs = (typeof haptics === 'object' ? haptics.continuousHapticIntervalMs : undefined) ?? _defaults.DEFAULTS.continuousHapticIntervalMs;
|
|
52
|
+
const height = style?.height ?? _defaults.DEFAULTS.height;
|
|
53
|
+
const theme = (0, _utils.useResolvedTheme)(propTheme);
|
|
54
|
+
const rules = (0, _react.useMemo)(() => (0, _presets.resolveTickRules)(ticks), [ticks]);
|
|
55
|
+
const {
|
|
56
|
+
fireDiscreteHaptic,
|
|
57
|
+
startContinuousHaptic,
|
|
58
|
+
stopContinuousHaptic
|
|
59
|
+
} = (0, _useHaptics.useHaptics)({
|
|
60
|
+
enableHaptics: isHapticsEnabled,
|
|
61
|
+
onHapticTrigger: resolvedHapticTrigger,
|
|
62
|
+
continuousHapticIntervalMs
|
|
63
|
+
});
|
|
64
|
+
const todayTime = (0, _react.useMemo)(() => {
|
|
65
|
+
const d = new Date();
|
|
66
|
+
d.setHours(0, 0, 0, 0);
|
|
67
|
+
return d.getTime();
|
|
68
|
+
}, []);
|
|
69
|
+
const {
|
|
70
|
+
minOffset,
|
|
71
|
+
maxOffset
|
|
72
|
+
} = (0, _react.useMemo)(() => (0, _utils.computeDayRange)(todayTime, minDate, maxDate), [todayTime, minDate, maxDate]);
|
|
73
|
+
|
|
74
|
+
// ── Initial Dates ─────────────────────────────────────────────────────────
|
|
75
|
+
const initialStartDate = (0, _react.useMemo)(() => {
|
|
76
|
+
if (value?.start) return (0, _utils.normalizeDate)(value.start);
|
|
77
|
+
if (defaultValue?.start) return (0, _utils.normalizeDate)(defaultValue.start);
|
|
78
|
+
return new Date(todayTime);
|
|
79
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
}, []);
|
|
81
|
+
const initialEndDate = (0, _react.useMemo)(() => {
|
|
82
|
+
if (value?.end) return (0, _utils.normalizeDate)(value.end);
|
|
83
|
+
if (defaultValue?.end) return (0, _utils.normalizeDate)(defaultValue.end);
|
|
84
|
+
const end = new Date(todayTime);
|
|
85
|
+
end.setDate(end.getDate() + 7);
|
|
86
|
+
return end;
|
|
87
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
88
|
+
}, []);
|
|
89
|
+
const [activeHandle, setActiveHandle] = (0, _react.useState)('start');
|
|
90
|
+
const [startDate, setStartDate] = (0, _react.useState)(initialStartDate);
|
|
91
|
+
const [endDate, setEndDate] = (0, _react.useState)(initialEndDate);
|
|
92
|
+
const startOffset = (0, _react.useMemo)(() => (0, _utils.dateToDayOffset)(startDate, todayTime), [startDate, todayTime]);
|
|
93
|
+
const endOffset = (0, _react.useMemo)(() => (0, _utils.dateToDayOffset)(endDate, todayTime), [endDate, todayTime]);
|
|
94
|
+
const activeOffset = activeHandle === 'start' ? startOffset : endOffset;
|
|
95
|
+
|
|
96
|
+
// ── Shared Values ─────────────────────────────────────────────────────────
|
|
97
|
+
const translateX = (0, _reactNativeReanimated.useSharedValue)(-activeOffset * tickSpacing);
|
|
98
|
+
const contextX = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
99
|
+
const previousIndex = (0, _reactNativeReanimated.useSharedValue)(-activeOffset);
|
|
100
|
+
const isFastMode = (0, _reactNativeReanimated.useSharedValue)(false);
|
|
101
|
+
const [windowCenter, setWindowCenter] = (0, _react.useState)(-activeOffset);
|
|
102
|
+
const debounceTimerRef = (0, _react.useRef)(null);
|
|
103
|
+
const windowDimensions = (0, _reactNative.useWindowDimensions)();
|
|
104
|
+
const width = props.width ?? windowDimensions.width;
|
|
105
|
+
const halfVisible = Math.ceil(width / 2 / tickSpacing);
|
|
106
|
+
const windowSize = halfVisible + bufferTicks;
|
|
107
|
+
|
|
108
|
+
// ── Visible Ticks Resolution ──────────────────────────────────────────────
|
|
109
|
+
const visibleTicks = (0, _react.useMemo)(() => {
|
|
110
|
+
const resolved = [];
|
|
111
|
+
const start = Math.max(windowCenter - windowSize, minOffset);
|
|
112
|
+
const end = Math.min(windowCenter + windowSize, maxOffset);
|
|
113
|
+
for (let i = start; i <= end; i++) {
|
|
114
|
+
const d = (0, _utils.dayOffsetToDate)(i, todayTime);
|
|
115
|
+
const isToday = i === 0;
|
|
116
|
+
const isSelected = i === startOffset || i === endOffset;
|
|
117
|
+
const isInRange = i >= startOffset && i <= endOffset;
|
|
118
|
+
resolved.push((0, _tickResolver.resolveTick)({
|
|
119
|
+
date: d,
|
|
120
|
+
offset: i,
|
|
121
|
+
isToday,
|
|
122
|
+
isSelected,
|
|
123
|
+
isInRange
|
|
124
|
+
}, rules, theme, tickWidth));
|
|
125
|
+
}
|
|
126
|
+
return resolved;
|
|
127
|
+
}, [windowCenter, windowSize, minOffset, maxOffset, todayTime, startOffset, endOffset, rules, theme, tickWidth]);
|
|
128
|
+
|
|
129
|
+
// ── Notify Change ─────────────────────────────────────────────────────────
|
|
130
|
+
const emitChange = (0, _react.useCallback)((newStart, newEnd) => {
|
|
131
|
+
const spanDays = Math.round((newEnd.getTime() - newStart.getTime()) / (1000 * 60 * 60 * 24));
|
|
132
|
+
const payload = {
|
|
133
|
+
start: newStart,
|
|
134
|
+
end: newEnd,
|
|
135
|
+
startDate: newStart,
|
|
136
|
+
endDate: newEnd,
|
|
137
|
+
startString: (0, _utils.formatDateString)(newStart),
|
|
138
|
+
endString: (0, _utils.formatDateString)(newEnd),
|
|
139
|
+
spanDays
|
|
140
|
+
};
|
|
141
|
+
onChange?.(payload);
|
|
142
|
+
}, [onChange]);
|
|
143
|
+
|
|
144
|
+
// ── Tick Changed Callback ─────────────────────────────────────────────────
|
|
145
|
+
const onTickChanged = (0, _react.useCallback)((index, enteringFastMode) => {
|
|
146
|
+
if (enteringFastMode) {
|
|
147
|
+
startContinuousHaptic();
|
|
148
|
+
} else {
|
|
149
|
+
stopContinuousHaptic();
|
|
150
|
+
fireDiscreteHaptic();
|
|
151
|
+
}
|
|
152
|
+
setWindowCenter(prev => {
|
|
153
|
+
if (Math.abs(index - prev) >= 5) {
|
|
154
|
+
return index;
|
|
155
|
+
}
|
|
156
|
+
return prev;
|
|
157
|
+
});
|
|
158
|
+
const targetDate = (0, _utils.dayOffsetToDate)(index, todayTime);
|
|
159
|
+
if (activeHandle === 'start') {
|
|
160
|
+
const clampedIndex = Math.min(index, endOffset - minSpanDays);
|
|
161
|
+
const validStart = (0, _utils.dayOffsetToDate)(clampedIndex, todayTime);
|
|
162
|
+
setStartDate(validStart);
|
|
163
|
+
if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
|
|
164
|
+
debounceTimerRef.current = setTimeout(() => {
|
|
165
|
+
emitChange(validStart, endDate);
|
|
166
|
+
}, debounceMs);
|
|
167
|
+
} else {
|
|
168
|
+
const clampedIndex = Math.max(index, startOffset + minSpanDays);
|
|
169
|
+
const validEnd = (0, _utils.dayOffsetToDate)(clampedIndex, todayTime);
|
|
170
|
+
setEndDate(validEnd);
|
|
171
|
+
if (debounceTimerRef.current) clearTimeout(debounceTimerRef.current);
|
|
172
|
+
debounceTimerRef.current = setTimeout(() => {
|
|
173
|
+
emitChange(startDate, validEnd);
|
|
174
|
+
}, debounceMs);
|
|
175
|
+
}
|
|
176
|
+
}, [activeHandle, endOffset, startOffset, minSpanDays, todayTime, endDate, startDate, emitChange, debounceMs, startContinuousHaptic, stopContinuousHaptic, fireDiscreteHaptic]);
|
|
177
|
+
|
|
178
|
+
// ── Animation Settled Callback ────────────────────────────────────────────
|
|
179
|
+
const onAnimationSettled = (0, _react.useCallback)(index => {
|
|
180
|
+
stopContinuousHaptic();
|
|
181
|
+
fireDiscreteHaptic();
|
|
182
|
+
setWindowCenter(index);
|
|
183
|
+
if (activeHandle === 'start') {
|
|
184
|
+
const clampedIndex = Math.min(index, endOffset - minSpanDays);
|
|
185
|
+
const validStart = (0, _utils.dayOffsetToDate)(clampedIndex, todayTime);
|
|
186
|
+
setStartDate(validStart);
|
|
187
|
+
emitChange(validStart, endDate);
|
|
188
|
+
} else {
|
|
189
|
+
const clampedIndex = Math.max(index, startOffset + minSpanDays);
|
|
190
|
+
const validEnd = (0, _utils.dayOffsetToDate)(clampedIndex, todayTime);
|
|
191
|
+
setEndDate(validEnd);
|
|
192
|
+
emitChange(startDate, validEnd);
|
|
193
|
+
}
|
|
194
|
+
}, [activeHandle, endOffset, startOffset, minSpanDays, todayTime, endDate, startDate, emitChange, stopContinuousHaptic, fireDiscreteHaptic]);
|
|
195
|
+
|
|
196
|
+
// ── Animated Reaction ─────────────────────────────────────────────────────
|
|
197
|
+
(0, _reactNativeReanimated.useAnimatedReaction)(() => Math.round(-translateX.value / tickSpacing), (index, prev) => {
|
|
198
|
+
if (index !== prev && index >= minOffset && index <= maxOffset) {
|
|
199
|
+
previousIndex.value = index;
|
|
200
|
+
const ticksSkipped = prev !== null ? Math.abs(index - prev) : 1;
|
|
201
|
+
const shouldBeFast = ticksSkipped > fastSwipeTickThreshold;
|
|
202
|
+
if (shouldBeFast && !isFastMode.value) {
|
|
203
|
+
isFastMode.value = true;
|
|
204
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, true);
|
|
205
|
+
} else if (!shouldBeFast && isFastMode.value) {
|
|
206
|
+
isFastMode.value = false;
|
|
207
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, false);
|
|
208
|
+
} else if (!shouldBeFast) {
|
|
209
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, false);
|
|
210
|
+
}
|
|
211
|
+
if (shouldBeFast && isFastMode.value) {
|
|
212
|
+
(0, _reactNativeReanimated.runOnJS)(onTickChanged)(index, true);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}, [tickSpacing, minOffset, maxOffset, fastSwipeTickThreshold]);
|
|
216
|
+
|
|
217
|
+
// ── Pan Gesture ───────────────────────────────────────────────────────────
|
|
218
|
+
const panGesture = (0, _react.useMemo)(() => {
|
|
219
|
+
return _reactNativeGestureHandler.Gesture.Pan().onStart(() => {
|
|
220
|
+
contextX.value = translateX.value;
|
|
221
|
+
}).onUpdate(event => {
|
|
222
|
+
translateX.value = contextX.value + event.translationX;
|
|
223
|
+
}).onEnd(event => {
|
|
224
|
+
translateX.value = (0, _reactNativeReanimated.withDecay)({
|
|
225
|
+
velocity: event.velocityX,
|
|
226
|
+
deceleration: 0.99
|
|
227
|
+
}, finished => {
|
|
228
|
+
if (finished) {
|
|
229
|
+
const maxTranslateX = -minOffset * tickSpacing;
|
|
230
|
+
const minTranslateX = -maxOffset * tickSpacing;
|
|
231
|
+
const clampedX = Math.min(Math.max(translateX.value, minTranslateX), maxTranslateX);
|
|
232
|
+
const snappedIndex = Math.round(clampedX / tickSpacing);
|
|
233
|
+
const snappedX = snappedIndex * tickSpacing;
|
|
234
|
+
translateX.value = (0, _reactNativeReanimated.withTiming)(snappedX, {
|
|
235
|
+
duration: 150
|
|
236
|
+
}, done => {
|
|
237
|
+
if (done) {
|
|
238
|
+
isFastMode.value = false;
|
|
239
|
+
const index = Math.round(-snappedX / tickSpacing);
|
|
240
|
+
(0, _reactNativeReanimated.runOnJS)(onAnimationSettled)(index);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
}, [contextX, translateX, minOffset, maxOffset, tickSpacing, onAnimationSettled, isFastMode]);
|
|
247
|
+
|
|
248
|
+
// ── Switch Active Handle ──────────────────────────────────────────────────
|
|
249
|
+
const scrollToHandle = (0, _react.useCallback)((handle, animated = true) => {
|
|
250
|
+
setActiveHandle(handle);
|
|
251
|
+
const targetOffset = handle === 'start' ? startOffset : endOffset;
|
|
252
|
+
const targetX = -targetOffset * tickSpacing;
|
|
253
|
+
stopContinuousHaptic();
|
|
254
|
+
if (animated) {
|
|
255
|
+
translateX.value = (0, _reactNativeReanimated.withTiming)(targetX, {
|
|
256
|
+
duration: 250
|
|
257
|
+
}, done => {
|
|
258
|
+
if (done) {
|
|
259
|
+
(0, _reactNativeReanimated.runOnJS)(setWindowCenter)(targetOffset);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
} else {
|
|
263
|
+
translateX.value = targetX;
|
|
264
|
+
setWindowCenter(targetOffset);
|
|
265
|
+
}
|
|
266
|
+
}, [startOffset, endOffset, tickSpacing, translateX, stopContinuousHaptic]);
|
|
267
|
+
const setRange = (0, _react.useCallback)((startInput, endInput) => {
|
|
268
|
+
const s = (0, _utils.normalizeDate)(startInput);
|
|
269
|
+
const e = (0, _utils.normalizeDate)(endInput);
|
|
270
|
+
setStartDate(s);
|
|
271
|
+
setEndDate(e);
|
|
272
|
+
emitChange(s, e);
|
|
273
|
+
}, [emitChange]);
|
|
274
|
+
|
|
275
|
+
// Sync external controlled range
|
|
276
|
+
const prevRangePropRef = (0, _react.useRef)(value);
|
|
277
|
+
(0, _react.useEffect)(() => {
|
|
278
|
+
if (value?.start && value?.end && (value.start !== prevRangePropRef.current?.start || value.end !== prevRangePropRef.current?.end)) {
|
|
279
|
+
prevRangePropRef.current = value;
|
|
280
|
+
const s = (0, _utils.normalizeDate)(value.start);
|
|
281
|
+
const e = (0, _utils.normalizeDate)(value.end);
|
|
282
|
+
if ((0, _utils.formatDateString)(s) !== (0, _utils.formatDateString)(startDate) || (0, _utils.formatDateString)(e) !== (0, _utils.formatDateString)(endDate)) {
|
|
283
|
+
setStartDate(s);
|
|
284
|
+
setEndDate(e);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}, [value, startDate, endDate]);
|
|
288
|
+
const spanDays = Math.max(0, endOffset - startOffset);
|
|
289
|
+
return {
|
|
290
|
+
translateX,
|
|
291
|
+
panGesture,
|
|
292
|
+
startDate,
|
|
293
|
+
endDate,
|
|
294
|
+
startDateStr: (0, _utils.formatDateString)(startDate),
|
|
295
|
+
endDateStr: (0, _utils.formatDateString)(endDate),
|
|
296
|
+
startOffset,
|
|
297
|
+
endOffset,
|
|
298
|
+
spanDays,
|
|
299
|
+
activeHandle,
|
|
300
|
+
setActiveHandle,
|
|
301
|
+
visibleTicks,
|
|
302
|
+
theme,
|
|
303
|
+
tickSpacing,
|
|
304
|
+
rulerHeight,
|
|
305
|
+
height,
|
|
306
|
+
width,
|
|
307
|
+
minOffset,
|
|
308
|
+
maxOffset,
|
|
309
|
+
scrollToHandle,
|
|
310
|
+
setRange
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=useRulerDateRangePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_reactNativeReanimated","_reactNativeGestureHandler","_defaults","_presets","_tickResolver","_utils","_useHaptics","useRulerDateRangePicker","props","value","defaultValue","onChange","minDate","maxDate","ticks","tickSpacing","DEFAULTS","tickWidth","rulerHeight","theme","propTheme","debounceMs","haptics","minSpanDays","maxSpanDays","style","bufferTicks","isHapticsEnabled","enabled","resolvedHapticTrigger","onTrigger","undefined","fastSwipeTickThreshold","continuousHapticIntervalMs","height","useResolvedTheme","rules","useMemo","resolveTickRules","fireDiscreteHaptic","startContinuousHaptic","stopContinuousHaptic","useHaptics","enableHaptics","onHapticTrigger","todayTime","d","Date","setHours","getTime","minOffset","maxOffset","computeDayRange","initialStartDate","start","normalizeDate","initialEndDate","end","setDate","getDate","activeHandle","setActiveHandle","useState","startDate","setStartDate","endDate","setEndDate","startOffset","dateToDayOffset","endOffset","activeOffset","translateX","useSharedValue","contextX","previousIndex","isFastMode","windowCenter","setWindowCenter","debounceTimerRef","useRef","windowDimensions","useWindowDimensions","width","halfVisible","Math","ceil","windowSize","visibleTicks","resolved","max","min","i","dayOffsetToDate","isToday","isSelected","isInRange","push","resolveTick","date","offset","emitChange","useCallback","newStart","newEnd","spanDays","round","payload","startString","formatDateString","endString","onTickChanged","index","enteringFastMode","prev","abs","targetDate","clampedIndex","validStart","current","clearTimeout","setTimeout","validEnd","onAnimationSettled","useAnimatedReaction","ticksSkipped","shouldBeFast","runOnJS","panGesture","Gesture","Pan","onStart","onUpdate","event","translationX","onEnd","withDecay","velocity","velocityX","deceleration","finished","maxTranslateX","minTranslateX","clampedX","snappedIndex","snappedX","withTiming","duration","done","scrollToHandle","handle","animated","targetOffset","targetX","setRange","startInput","endInput","s","e","prevRangePropRef","useEffect","startDateStr","endDateStr"],"sourceRoot":"../../src","sources":["useRulerDateRangePicker.ts"],"mappings":"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","ignoreList":[]}
|