react-native-ruler-date-picker 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/lib/commonjs/RulerDatePicker.js +376 -0
  4. package/lib/commonjs/RulerDatePicker.js.map +1 -0
  5. package/lib/commonjs/Tick.js +79 -0
  6. package/lib/commonjs/Tick.js.map +1 -0
  7. package/lib/commonjs/defaults.js +48 -0
  8. package/lib/commonjs/defaults.js.map +1 -0
  9. package/lib/commonjs/index.js +13 -0
  10. package/lib/commonjs/index.js.map +1 -0
  11. package/lib/commonjs/package.json +1 -0
  12. package/lib/commonjs/types.js +6 -0
  13. package/lib/commonjs/types.js.map +1 -0
  14. package/lib/commonjs/useHaptics.js +83 -0
  15. package/lib/commonjs/useHaptics.js.map +1 -0
  16. package/lib/commonjs/utils.js +99 -0
  17. package/lib/commonjs/utils.js.map +1 -0
  18. package/lib/module/RulerDatePicker.js +371 -0
  19. package/lib/module/RulerDatePicker.js.map +1 -0
  20. package/lib/module/Tick.js +74 -0
  21. package/lib/module/Tick.js.map +1 -0
  22. package/lib/module/defaults.js +44 -0
  23. package/lib/module/defaults.js.map +1 -0
  24. package/lib/module/index.js +4 -0
  25. package/lib/module/index.js.map +1 -0
  26. package/lib/module/package.json +1 -0
  27. package/lib/module/types.js +4 -0
  28. package/lib/module/types.js.map +1 -0
  29. package/lib/module/useHaptics.js +80 -0
  30. package/lib/module/useHaptics.js.map +1 -0
  31. package/lib/module/utils.js +90 -0
  32. package/lib/module/utils.js.map +1 -0
  33. package/lib/typescript/RulerDatePicker.d.ts +21 -0
  34. package/lib/typescript/RulerDatePicker.d.ts.map +1 -0
  35. package/lib/typescript/Tick.d.ts +26 -0
  36. package/lib/typescript/Tick.d.ts.map +1 -0
  37. package/lib/typescript/defaults.d.ts +24 -0
  38. package/lib/typescript/defaults.d.ts.map +1 -0
  39. package/lib/typescript/index.d.ts +3 -0
  40. package/lib/typescript/index.d.ts.map +1 -0
  41. package/lib/typescript/types.d.ts +104 -0
  42. package/lib/typescript/types.d.ts.map +1 -0
  43. package/lib/typescript/useHaptics.d.ts +20 -0
  44. package/lib/typescript/useHaptics.d.ts.map +1 -0
  45. package/lib/typescript/utils.d.ts +31 -0
  46. package/lib/typescript/utils.d.ts.map +1 -0
  47. package/package.json +106 -0
  48. package/src/RulerDatePicker.tsx +462 -0
  49. package/src/Tick.tsx +104 -0
  50. package/src/defaults.ts +44 -0
  51. package/src/index.ts +2 -0
  52. package/src/types.ts +129 -0
  53. package/src/useHaptics.ts +107 -0
  54. package/src/utils.ts +115 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useState","useRef","useCallback","useMemo","View","Text","StyleSheet","Dimensions","TouchableOpacity","Animated","useSharedValue","useAnimatedStyle","withDecay","withTiming","useAnimatedReaction","runOnJS","Gesture","GestureDetector","DEFAULTS","MS_PER_DAY","formatDateString","dateToDayOffset","dayOffsetToDate","useResolvedColors","shouldShowLabel","computeDayRange","useHaptics","Tick","jsx","_jsx","jsxs","_jsxs","SCREEN_WIDTH","get","width","RulerDatePicker","props","selectedDate","onSelectDate","minDate","maxDate","labelInterval","highlightDays","tickSpacing","tickHeight","tickTallHeight","tickThickness","height","rulerHeight","indicatorWidth","indicatorHeight","todayDotSize","labelFontSize","bufferTicks","updateDebounceMs","enableHaptics","onHapticTrigger","fastSwipeTickThreshold","continuousHapticIntervalMs","showResetToToday","renderHeader","colors","fireDiscreteHaptic","startContinuousHaptic","stopContinuousHaptic","todayTime","d","Date","setHours","getTime","minOffset","maxOffset","initialOffsetDays","halfVisible","Math","ceil","windowSize","translateX","contextX","previousIndex","isFastMode","initialDateStr","displayDateStr","setDisplayDateStr","debounceTimerRef","windowCenter","setWindowCenter","visibleTicks","ticks","start","max","end","min","i","push","offset","isLabeled","isToday","isHighlighted","includes","getDay","dateStr","getDate","toString","onTickChanged","index","enteringFastMode","prevCenter","abs","current","clearTimeout","setTimeout","onAnimationSettled","round","value","prev","ticksSkipped","shouldBeFast","pan","Pan","onStart","onUpdate","event","translationX","onEnd","velocity","velocityX","deceleration","finished","maxTranslateX","minTranslateX","clampedX","snappedIndex","snappedX","duration","done","animatedStyle","transform","displayDate","displayFormat","toLocaleDateString","weekday","month","day","displayYear","getFullYear","currentYear","showYear","isTodaySelected","handleResetToToday","todayStr","style","styles","container","backgroundColor","children","headerContainer","dateHeader","yearText","color","labelColor","dateText","accentColor","onPress","resetBtn","resetText","gesture","rulerContainer","centerIndicator","indicatorColor","ticksWrapper","map","tick","tickColor","tickTallColor","create","justifyContent","alignItems","overflow","flexDirection","paddingHorizontal","marginBottom","fontSize","fontWeight","position","right","paddingVertical","borderRadius","zIndex","bottom","left"],"sourceRoot":"../../src","sources":["RulerDatePicker.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { View, Text, StyleSheet } from 'react-native';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /**
7
+ * Memoized single tick component.
8
+ * Renders a vertical bar with optional label and today dot indicator.
9
+ * Small and large ticks can be independently colored.
10
+ */
11
+ export const Tick = /*#__PURE__*/React.memo(function Tick({
12
+ offset,
13
+ isLabeled,
14
+ isToday,
15
+ dateStr,
16
+ tickSpacing,
17
+ tickHeight,
18
+ tickTallHeight,
19
+ tickThickness,
20
+ tickColor,
21
+ tickTallColor,
22
+ labelColor,
23
+ accentColor,
24
+ todayDotSize,
25
+ labelFontSize,
26
+ rulerHeight
27
+ }) {
28
+ const resolvedTickColor = isLabeled ? tickTallColor : tickColor;
29
+ const resolvedTickHeight = isLabeled ? tickTallHeight : tickHeight;
30
+ return /*#__PURE__*/_jsxs(View, {
31
+ style: [styles.tickContainer, {
32
+ width: tickSpacing,
33
+ height: rulerHeight,
34
+ position: 'absolute',
35
+ left: offset * tickSpacing - tickSpacing / 2
36
+ }],
37
+ children: [isLabeled && /*#__PURE__*/_jsx(Text, {
38
+ style: [styles.tickLabel, {
39
+ color: labelColor,
40
+ fontSize: labelFontSize
41
+ }],
42
+ children: dateStr
43
+ }), isToday && /*#__PURE__*/_jsx(View, {
44
+ style: [styles.todayDot, {
45
+ backgroundColor: accentColor,
46
+ width: todayDotSize,
47
+ height: todayDotSize,
48
+ borderRadius: todayDotSize / 2
49
+ }]
50
+ }), /*#__PURE__*/_jsx(View, {
51
+ style: {
52
+ backgroundColor: resolvedTickColor,
53
+ width: tickThickness,
54
+ height: resolvedTickHeight,
55
+ borderRadius: tickThickness / 2
56
+ }
57
+ })]
58
+ });
59
+ });
60
+ const styles = StyleSheet.create({
61
+ tickContainer: {
62
+ justifyContent: 'flex-end',
63
+ alignItems: 'center'
64
+ },
65
+ tickLabel: {
66
+ position: 'absolute',
67
+ top: 10
68
+ },
69
+ todayDot: {
70
+ position: 'absolute',
71
+ top: 25
72
+ }
73
+ });
74
+ //# sourceMappingURL=Tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","Text","StyleSheet","jsx","_jsx","jsxs","_jsxs","Tick","memo","offset","isLabeled","isToday","dateStr","tickSpacing","tickHeight","tickTallHeight","tickThickness","tickColor","tickTallColor","labelColor","accentColor","todayDotSize","labelFontSize","rulerHeight","resolvedTickColor","resolvedTickHeight","style","styles","tickContainer","width","height","position","left","children","tickLabel","color","fontSize","todayDot","backgroundColor","borderRadius","create","justifyContent","alignItems","top"],"sourceRoot":"../../src","sources":["Tick.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAsBtD;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,IAAI,gBAAGR,KAAK,CAACS,IAAI,CAAC,SAASD,IAAIA,CAAC;EAC3CE,MAAM;EACNC,SAAS;EACTC,OAAO;EACPC,OAAO;EACPC,WAAW;EACXC,UAAU;EACVC,cAAc;EACdC,aAAa;EACbC,SAAS;EACTC,aAAa;EACbC,UAAU;EACVC,WAAW;EACXC,YAAY;EACZC,aAAa;EACbC;AACS,CAAC,EAAE;EACZ,MAAMC,iBAAiB,GAAGd,SAAS,GAAGQ,aAAa,GAAGD,SAAS;EAC/D,MAAMQ,kBAAkB,GAAGf,SAAS,GAAGK,cAAc,GAAGD,UAAU;EAElE,oBACER,KAAA,CAACN,IAAI;IACH0B,KAAK,EAAE,CACLC,MAAM,CAACC,aAAa,EACpB;MACEC,KAAK,EAAEhB,WAAW;MAClBiB,MAAM,EAAEP,WAAW;MACnBQ,QAAQ,EAAE,UAAU;MACpBC,IAAI,EAAEvB,MAAM,GAAGI,WAAW,GAAGA,WAAW,GAAG;IAC7C,CAAC,CACD;IAAAoB,QAAA,GAEDvB,SAAS,iBACRN,IAAA,CAACH,IAAI;MAACyB,KAAK,EAAE,CAACC,MAAM,CAACO,SAAS,EAAE;QAAEC,KAAK,EAAEhB,UAAU;QAAEiB,QAAQ,EAAEd;MAAc,CAAC,CAAE;MAAAW,QAAA,EAC7ErB;IAAO,CACJ,CACP,EACAD,OAAO,iBACNP,IAAA,CAACJ,IAAI;MACH0B,KAAK,EAAE,CACLC,MAAM,CAACU,QAAQ,EACf;QACEC,eAAe,EAAElB,WAAW;QAC5BS,KAAK,EAAER,YAAY;QACnBS,MAAM,EAAET,YAAY;QACpBkB,YAAY,EAAElB,YAAY,GAAG;MAC/B,CAAC;IACD,CACH,CACF,eACDjB,IAAA,CAACJ,IAAI;MACH0B,KAAK,EAAE;QACLY,eAAe,EAAEd,iBAAiB;QAClCK,KAAK,EAAEb,aAAa;QACpBc,MAAM,EAAEL,kBAAkB;QAC1Bc,YAAY,EAAEvB,aAAa,GAAG;MAChC;IAAE,CACH,CAAC;EAAA,CACE,CAAC;AAEX,CAAC,CAAC;AAEF,MAAMW,MAAM,GAAGzB,UAAU,CAACsC,MAAM,CAAC;EAC/BZ,aAAa,EAAE;IACba,cAAc,EAAE,UAAU;IAC1BC,UAAU,EAAE;EACd,CAAC;EACDR,SAAS,EAAE;IACTH,QAAQ,EAAE,UAAU;IACpBY,GAAG,EAAE;EACP,CAAC;EACDN,QAAQ,EAAE;IACRN,QAAQ,EAAE,UAAU;IACpBY,GAAG,EAAE;EACP;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ // ── Internal constants (not user-configurable) ───────────────────────────
4
+ export const MS_PER_DAY = 86_400_000;
5
+ export const DEFAULT_DAY_RANGE = 365;
6
+
7
+ // ── User-configurable defaults ───────────────────────────────────────────
8
+ export const DEFAULTS = {
9
+ tickSpacing: 24,
10
+ tickHeight: 12,
11
+ tickTallHeight: 24,
12
+ tickThickness: 4,
13
+ height: 120,
14
+ rulerHeight: 60,
15
+ indicatorWidth: 2,
16
+ indicatorHeight: 40,
17
+ todayDotSize: 6,
18
+ labelFontSize: 10,
19
+ bufferTicks: 10,
20
+ updateDebounceMs: 100,
21
+ fastSwipeTickThreshold: 1,
22
+ continuousHapticIntervalMs: 20,
23
+ enableHaptics: true,
24
+ showResetToToday: false
25
+ };
26
+
27
+ // ── Default color palettes ───────────────────────────────────────────────
28
+ export const LIGHT_COLORS = {
29
+ tickColor: '#D1D5DB',
30
+ tickTallColor: '#9CA3AF',
31
+ labelColor: '#6B7280',
32
+ accentColor: '#3B82F6',
33
+ indicatorColor: '#3B82F6',
34
+ backgroundColor: 'transparent'
35
+ };
36
+ export const DARK_COLORS = {
37
+ tickColor: '#4B5563',
38
+ tickTallColor: '#6B7280',
39
+ labelColor: '#9CA3AF',
40
+ accentColor: '#60A5FA',
41
+ indicatorColor: '#60A5FA',
42
+ backgroundColor: 'transparent'
43
+ };
44
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MS_PER_DAY","DEFAULT_DAY_RANGE","DEFAULTS","tickSpacing","tickHeight","tickTallHeight","tickThickness","height","rulerHeight","indicatorWidth","indicatorHeight","todayDotSize","labelFontSize","bufferTicks","updateDebounceMs","fastSwipeTickThreshold","continuousHapticIntervalMs","enableHaptics","showResetToToday","LIGHT_COLORS","tickColor","tickTallColor","labelColor","accentColor","indicatorColor","backgroundColor","DARK_COLORS"],"sourceRoot":"../../src","sources":["defaults.ts"],"mappings":";;AAEA;AACA,OAAO,MAAMA,UAAU,GAAG,UAAU;AACpC,OAAO,MAAMC,iBAAiB,GAAG,GAAG;;AAEpC;AACA,OAAO,MAAMC,QAAQ,GAAG;EACtBC,WAAW,EAAE,EAAE;EACfC,UAAU,EAAE,EAAE;EACdC,cAAc,EAAE,EAAE;EAClBC,aAAa,EAAE,CAAC;EAChBC,MAAM,EAAE,GAAG;EACXC,WAAW,EAAE,EAAE;EACfC,cAAc,EAAE,CAAC;EACjBC,eAAe,EAAE,EAAE;EACnBC,YAAY,EAAE,CAAC;EACfC,aAAa,EAAE,EAAE;EACjBC,WAAW,EAAE,EAAE;EACfC,gBAAgB,EAAE,GAAG;EACrBC,sBAAsB,EAAE,CAAC;EACzBC,0BAA0B,EAAE,EAAE;EAC9BC,aAAa,EAAE,IAAI;EACnBC,gBAAgB,EAAE;AACpB,CAAU;;AAEV;AACA,OAAO,MAAMC,YAA4B,GAAG;EAC1CC,SAAS,EAAE,SAAS;EACpBC,aAAa,EAAE,SAAS;EACxBC,UAAU,EAAE,SAAS;EACrBC,WAAW,EAAE,SAAS;EACtBC,cAAc,EAAE,SAAS;EACzBC,eAAe,EAAE;AACnB,CAAC;AAED,OAAO,MAAMC,WAA2B,GAAG;EACzCN,SAAS,EAAE,SAAS;EACpBC,aAAa,EAAE,SAAS;EACxBC,UAAU,EAAE,SAAS;EACrBC,WAAW,EAAE,SAAS;EACtBC,cAAc,EAAE,SAAS;EACzBC,eAAe,EAAE;AACnB,CAAC","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export { RulerDatePicker } from './RulerDatePicker';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RulerDatePicker"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,eAAe,QAAQ,mBAAmB","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useRef } from 'react';
4
+ import { Platform } from 'react-native';
5
+ import { DEFAULTS } from './defaults';
6
+
7
+ /**
8
+ * Attempts to dynamically require expo-haptics.
9
+ * Returns null if the module is not installed, allowing graceful degradation
10
+ * in pure React Native CLI projects.
11
+ */
12
+ let ExpoHaptics = null;
13
+ try {
14
+ ExpoHaptics = require('expo-haptics');
15
+ } catch {
16
+ // expo-haptics not installed — haptics will be silently disabled
17
+ }
18
+ /**
19
+ * Haptics abstraction hook.
20
+ *
21
+ * - If `onHapticTrigger` is provided, delegates all haptic calls to it.
22
+ * - Otherwise, uses expo-haptics if available.
23
+ * - Falls back to no-op if neither is available or haptics are disabled.
24
+ */
25
+ export function useHaptics({
26
+ enableHaptics,
27
+ onHapticTrigger,
28
+ continuousHapticIntervalMs = DEFAULTS.continuousHapticIntervalMs
29
+ }) {
30
+ const hapticIntervalRef = useRef(null);
31
+
32
+ /** Fire a single discrete haptic — used in slow scroll mode */
33
+ const fireDiscreteHaptic = useCallback(() => {
34
+ if (!enableHaptics) return;
35
+ if (onHapticTrigger) {
36
+ onHapticTrigger('tick');
37
+ return;
38
+ }
39
+ if (!ExpoHaptics) return;
40
+ if (Platform.OS === 'android') {
41
+ ExpoHaptics.impactAsync(ExpoHaptics.ImpactFeedbackStyle.Light).catch(() => {});
42
+ } else {
43
+ ExpoHaptics.selectionAsync().catch(() => {});
44
+ }
45
+ }, [enableHaptics, onHapticTrigger]);
46
+
47
+ /** Start a continuous haptic buzz — used in fast scroll mode */
48
+ const startContinuousHaptic = useCallback(() => {
49
+ if (!enableHaptics) return;
50
+ if (onHapticTrigger) {
51
+ onHapticTrigger('continuous');
52
+ return;
53
+ }
54
+ if (!ExpoHaptics) return;
55
+
56
+ // Already running — don't double-start
57
+ if (hapticIntervalRef.current) return;
58
+
59
+ // Fire one immediately so the transition isn't silent
60
+ ExpoHaptics.impactAsync(ExpoHaptics.ImpactFeedbackStyle.Light).catch(() => {});
61
+ const interval = Platform.OS === 'android' ? 35 : continuousHapticIntervalMs;
62
+ hapticIntervalRef.current = setInterval(() => {
63
+ ExpoHaptics.impactAsync(ExpoHaptics.ImpactFeedbackStyle.Light).catch(() => {});
64
+ }, interval);
65
+ }, [enableHaptics, onHapticTrigger, continuousHapticIntervalMs]);
66
+
67
+ /** Stop the continuous haptic buzz */
68
+ const stopContinuousHaptic = useCallback(() => {
69
+ if (hapticIntervalRef.current) {
70
+ clearInterval(hapticIntervalRef.current);
71
+ hapticIntervalRef.current = null;
72
+ }
73
+ }, []);
74
+ return {
75
+ fireDiscreteHaptic,
76
+ startContinuousHaptic,
77
+ stopContinuousHaptic
78
+ };
79
+ }
80
+ //# sourceMappingURL=useHaptics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useRef","Platform","DEFAULTS","ExpoHaptics","require","useHaptics","enableHaptics","onHapticTrigger","continuousHapticIntervalMs","hapticIntervalRef","fireDiscreteHaptic","OS","impactAsync","ImpactFeedbackStyle","Light","catch","selectionAsync","startContinuousHaptic","current","interval","setInterval","stopContinuousHaptic","clearInterval"],"sourceRoot":"../../src","sources":["useHaptics.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAC3C,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,QAAQ,QAAQ,YAAY;;AAErC;AACA;AACA;AACA;AACA;AACA,IAAIC,WAAiD,GAAG,IAAI;AAC5D,IAAI;EACFA,WAAW,GAAGC,OAAO,CAAC,cAAc,CAAC;AACvC,CAAC,CAAC,MAAM;EACN;AAAA;AAeF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EACzBC,aAAa;EACbC,eAAe;EACfC,0BAA0B,GAAGN,QAAQ,CAACM;AACrB,CAAC,EAAc;EAChC,MAAMC,iBAAiB,GAAGT,MAAM,CAC9B,IACF,CAAC;;EAED;EACA,MAAMU,kBAAkB,GAAGX,WAAW,CAAC,MAAM;IAC3C,IAAI,CAACO,aAAa,EAAE;IAEpB,IAAIC,eAAe,EAAE;MACnBA,eAAe,CAAC,MAAM,CAAC;MACvB;IACF;IAEA,IAAI,CAACJ,WAAW,EAAE;IAElB,IAAIF,QAAQ,CAACU,EAAE,KAAK,SAAS,EAAE;MAC7BR,WAAW,CAACS,WAAW,CAACT,WAAW,CAACU,mBAAmB,CAACC,KAAK,CAAC,CAACC,KAAK,CAClE,MAAM,CAAC,CACT,CAAC;IACH,CAAC,MAAM;MACLZ,WAAW,CAACa,cAAc,CAAC,CAAC,CAACD,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C;EACF,CAAC,EAAE,CAACT,aAAa,EAAEC,eAAe,CAAC,CAAC;;EAEpC;EACA,MAAMU,qBAAqB,GAAGlB,WAAW,CAAC,MAAM;IAC9C,IAAI,CAACO,aAAa,EAAE;IAEpB,IAAIC,eAAe,EAAE;MACnBA,eAAe,CAAC,YAAY,CAAC;MAC7B;IACF;IAEA,IAAI,CAACJ,WAAW,EAAE;;IAElB;IACA,IAAIM,iBAAiB,CAACS,OAAO,EAAE;;IAE/B;IACAf,WAAW,CAACS,WAAW,CAACT,WAAW,CAACU,mBAAmB,CAACC,KAAK,CAAC,CAACC,KAAK,CAClE,MAAM,CAAC,CACT,CAAC;IAED,MAAMI,QAAQ,GACZlB,QAAQ,CAACU,EAAE,KAAK,SAAS,GAAG,EAAE,GAAGH,0BAA0B;IAE7DC,iBAAiB,CAACS,OAAO,GAAGE,WAAW,CAAC,MAAM;MAC5CjB,WAAW,CAAES,WAAW,CAACT,WAAW,CAAEU,mBAAmB,CAACC,KAAK,CAAC,CAACC,KAAK,CACpE,MAAM,CAAC,CACT,CAAC;IACH,CAAC,EAAEI,QAAQ,CAAC;EACd,CAAC,EAAE,CAACb,aAAa,EAAEC,eAAe,EAAEC,0BAA0B,CAAC,CAAC;;EAEhE;EACA,MAAMa,oBAAoB,GAAGtB,WAAW,CAAC,MAAM;IAC7C,IAAIU,iBAAiB,CAACS,OAAO,EAAE;MAC7BI,aAAa,CAACb,iBAAiB,CAACS,OAAO,CAAC;MACxCT,iBAAiB,CAACS,OAAO,GAAG,IAAI;IAClC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLR,kBAAkB;IAClBO,qBAAqB;IACrBI;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ import { useColorScheme } from 'react-native';
4
+ import { LIGHT_COLORS, DARK_COLORS, MS_PER_DAY, DEFAULT_DAY_RANGE } from './defaults';
5
+ /**
6
+ * Formats a Date object as a local YYYY-MM-DD string,
7
+ * avoiding timezone shifting bugs caused by toISOString().
8
+ */
9
+ export function formatDateString(date = new Date()) {
10
+ const year = date.getFullYear();
11
+ const month = String(date.getMonth() + 1).padStart(2, '0');
12
+ const day = String(date.getDate()).padStart(2, '0');
13
+ return `${year}-${month}-${day}`;
14
+ }
15
+
16
+ /**
17
+ * Converts a Date or YYYY-MM-DD string to a day offset relative to a reference time.
18
+ */
19
+ export function dateToDayOffset(date, referenceTime) {
20
+ const d = typeof date === 'string' ? new Date(date) : new Date(date);
21
+ d.setHours(0, 0, 0, 0);
22
+ return Math.round((d.getTime() - referenceTime) / MS_PER_DAY);
23
+ }
24
+
25
+ /**
26
+ * Converts a day offset back to a Date object.
27
+ */
28
+ export function dayOffsetToDate(offset, referenceTime) {
29
+ return new Date(referenceTime + offset * MS_PER_DAY);
30
+ }
31
+
32
+ /**
33
+ * Resolves user-provided color props against the system color scheme defaults.
34
+ * User-provided values always take precedence.
35
+ */
36
+ export function useResolvedColors(props) {
37
+ const scheme = useColorScheme();
38
+ const palette = scheme === 'dark' ? DARK_COLORS : LIGHT_COLORS;
39
+ return {
40
+ tickColor: props.tickColor ?? palette.tickColor,
41
+ tickTallColor: props.tickTallColor ?? props.tickColor ?? palette.tickTallColor,
42
+ labelColor: props.labelColor ?? palette.labelColor,
43
+ accentColor: props.accentColor ?? palette.accentColor,
44
+ indicatorColor: props.indicatorColor ?? palette.indicatorColor,
45
+ backgroundColor: props.backgroundColor ?? palette.backgroundColor
46
+ };
47
+ }
48
+
49
+ /**
50
+ * Determines whether a date should display a label based on the labelInterval setting.
51
+ */
52
+ export function shouldShowLabel(date, labelInterval, todayTime) {
53
+ if (!labelInterval || labelInterval === 'weekly') {
54
+ // Default: every 7th day relative to today (matches original Friday-style spacing)
55
+ const dayOffset = Math.round((date.getTime() - todayTime) / MS_PER_DAY);
56
+ return dayOffset % 7 === 0;
57
+ }
58
+ if (labelInterval === 'daily') {
59
+ return true;
60
+ }
61
+ if (labelInterval === 'monthly') {
62
+ return date.getDate() === 1;
63
+ }
64
+
65
+ // Custom callback
66
+ return labelInterval(date);
67
+ }
68
+
69
+ /**
70
+ * Computes the min/max day offsets from props or defaults.
71
+ */
72
+ export function computeDayRange(todayTime, minDate, maxDate) {
73
+ let minOffset = -DEFAULT_DAY_RANGE;
74
+ let maxOffset = DEFAULT_DAY_RANGE;
75
+ if (minDate) {
76
+ const d = new Date(minDate);
77
+ d.setHours(0, 0, 0, 0);
78
+ minOffset = Math.round((d.getTime() - todayTime) / MS_PER_DAY);
79
+ }
80
+ if (maxDate) {
81
+ const d = new Date(maxDate);
82
+ d.setHours(0, 0, 0, 0);
83
+ maxOffset = Math.round((d.getTime() - todayTime) / MS_PER_DAY);
84
+ }
85
+ return {
86
+ minOffset,
87
+ maxOffset
88
+ };
89
+ }
90
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useColorScheme","LIGHT_COLORS","DARK_COLORS","MS_PER_DAY","DEFAULT_DAY_RANGE","formatDateString","date","Date","year","getFullYear","month","String","getMonth","padStart","day","getDate","dateToDayOffset","referenceTime","d","setHours","Math","round","getTime","dayOffsetToDate","offset","useResolvedColors","props","scheme","palette","tickColor","tickTallColor","labelColor","accentColor","indicatorColor","backgroundColor","shouldShowLabel","labelInterval","todayTime","dayOffset","computeDayRange","minDate","maxDate","minOffset","maxOffset"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import type { RulerDatePickerProps } from './types';
3
+ /**
4
+ * A performant, customizable ruler-style date picker for React Native.
5
+ *
6
+ * Features:
7
+ * - 60 FPS scrolling via Reanimated 3 decay physics + snap alignment
8
+ * - Dual-speed haptic feedback engine (discrete ticks vs continuous buzz)
9
+ * - Windowed tick rendering for memory efficiency
10
+ * - Fully configurable dimensions, colors, and behaviors
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <RulerDatePicker
15
+ * selectedDate={new Date()}
16
+ * onSelectDate={(date, dateString) => console.log(dateString)}
17
+ * />
18
+ * ```
19
+ */
20
+ export declare function RulerDatePicker(props: RulerDatePickerProps): React.JSX.Element;
21
+ //# sourceMappingURL=RulerDatePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RulerDatePicker.d.ts","sourceRoot":"","sources":["../../src/RulerDatePicker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAkBtE,OAAO,KAAK,EAAE,oBAAoB,EAAY,MAAM,SAAS,CAAC;AAe9D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,qBAgW1D"}
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ export interface TickProps {
3
+ offset: number;
4
+ isLabeled: boolean;
5
+ isToday: boolean;
6
+ isHighlighted: boolean;
7
+ dateStr: string;
8
+ tickSpacing: number;
9
+ tickHeight: number;
10
+ tickTallHeight: number;
11
+ tickThickness: number;
12
+ tickColor: string;
13
+ tickTallColor: string;
14
+ labelColor: string;
15
+ accentColor: string;
16
+ todayDotSize: number;
17
+ labelFontSize: number;
18
+ rulerHeight: number;
19
+ }
20
+ /**
21
+ * Memoized single tick component.
22
+ * Renders a vertical bar with optional label and today dot indicator.
23
+ * Small and large ticks can be independently colored.
24
+ */
25
+ export declare const Tick: React.NamedExoticComponent<TickProps>;
26
+ //# sourceMappingURL=Tick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tick.d.ts","sourceRoot":"","sources":["../../src/Tick.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,uCA4Df,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ResolvedColors } from './types';
2
+ export declare const MS_PER_DAY = 86400000;
3
+ export declare const DEFAULT_DAY_RANGE = 365;
4
+ export declare const DEFAULTS: {
5
+ readonly tickSpacing: 24;
6
+ readonly tickHeight: 12;
7
+ readonly tickTallHeight: 24;
8
+ readonly tickThickness: 4;
9
+ readonly height: 120;
10
+ readonly rulerHeight: 60;
11
+ readonly indicatorWidth: 2;
12
+ readonly indicatorHeight: 40;
13
+ readonly todayDotSize: 6;
14
+ readonly labelFontSize: 10;
15
+ readonly bufferTicks: 10;
16
+ readonly updateDebounceMs: 100;
17
+ readonly fastSwipeTickThreshold: 1;
18
+ readonly continuousHapticIntervalMs: 20;
19
+ readonly enableHaptics: true;
20
+ readonly showResetToToday: false;
21
+ };
22
+ export declare const LIGHT_COLORS: ResolvedColors;
23
+ export declare const DARK_COLORS: ResolvedColors;
24
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,eAAO,MAAM,UAAU,WAAa,CAAC;AACrC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAGrC,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAGX,eAAO,MAAM,YAAY,EAAE,cAO1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,cAOzB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { RulerDatePicker } from './RulerDatePicker';
2
+ export type { RulerDatePickerProps } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,104 @@
1
+ import type React from 'react';
2
+ export interface RulerDatePickerProps {
3
+ /** The currently selected date. Accepts a Date object or a YYYY-MM-DD string. */
4
+ selectedDate: Date | string;
5
+ /**
6
+ * Called when the user scrolls to a new date.
7
+ * Provides both the Date object and the formatted YYYY-MM-DD string.
8
+ */
9
+ onSelectDate: (date: Date, dateString: string) => void;
10
+ /** Minimum selectable date. Defaults to 365 days before today. */
11
+ minDate?: Date;
12
+ /** Maximum selectable date. Defaults to 365 days after today. */
13
+ maxDate?: Date;
14
+ /**
15
+ * Controls which ticks show a date label.
16
+ * - `'daily'` — every tick gets a label
17
+ * - `'weekly'` (default) — every 7th day
18
+ * - `'monthly'` — 1st of each month
19
+ * - `(date: Date) => boolean` — custom callback
20
+ */
21
+ labelInterval?: 'daily' | 'weekly' | 'monthly' | ((date: Date) => boolean);
22
+ /** Days of the week to visually highlight. 0 = Sunday, 6 = Saturday. e.g. [0, 6] for weekends. */
23
+ highlightDays?: number[];
24
+ /** Gap between ticks in pixels. Default: 24 */
25
+ tickSpacing?: number;
26
+ /** Height of small (unlabeled) ticks in pixels. Default: 12 */
27
+ tickHeight?: number;
28
+ /** Height of tall (labeled) ticks in pixels. Default: 24 */
29
+ tickTallHeight?: number;
30
+ /** Width of each tick bar in pixels. Default: 4 */
31
+ tickThickness?: number;
32
+ /** Color of small (unlabeled) ticks. */
33
+ tickColor?: string;
34
+ /** Color of tall (labeled) ticks. Falls back to tickColor if not specified. */
35
+ tickTallColor?: string;
36
+ /** Color of date label text beneath labeled ticks. */
37
+ labelColor?: string;
38
+ /** Color of the today dot indicator and reset button text. */
39
+ accentColor?: string;
40
+ /** Color of the center selection indicator line. */
41
+ indicatorColor?: string;
42
+ /** Background color of the entire component. Default: transparent */
43
+ backgroundColor?: string;
44
+ /** Total component height in pixels. Default: 120 */
45
+ height?: number;
46
+ /** Height of the ruler track area in pixels. Default: 60 */
47
+ rulerHeight?: number;
48
+ /** Width of the center selection indicator bar in pixels. Default: 2 */
49
+ indicatorWidth?: number;
50
+ /** Height of the center selection indicator bar in pixels. Default: 40 */
51
+ indicatorHeight?: number;
52
+ /** Diameter of the today dot indicator in pixels. Default: 6 */
53
+ todayDotSize?: number;
54
+ /** Font size of tick date labels in pixels. Default: 10 */
55
+ labelFontSize?: number;
56
+ /** Number of off-screen ticks to render as buffer on each side. Default: 10 */
57
+ bufferTicks?: number;
58
+ /** Debounce interval in ms before calling onSelectDate. Default: 100 */
59
+ updateDebounceMs?: number;
60
+ /** Enable or disable haptic feedback. Default: true */
61
+ enableHaptics?: boolean;
62
+ /**
63
+ * Custom haptic trigger callback. When provided, overrides the default
64
+ * expo-haptics implementation. Receives the haptic mode:
65
+ * - `'tick'` — single discrete haptic (slow scrolling)
66
+ * - `'continuous'` — continuous buzz (fast scrolling)
67
+ */
68
+ onHapticTrigger?: (mode: 'tick' | 'continuous') => void;
69
+ /** Number of ticks crossed per frame to trigger fast/continuous haptic mode. Default: 1 */
70
+ fastSwipeTickThreshold?: number;
71
+ /** Interval in ms between haptic pulses in continuous mode. Default: 20 */
72
+ continuousHapticIntervalMs?: number;
73
+ /** Show a "Today" reset button when not on today's date. Default: false */
74
+ showResetToToday?: boolean;
75
+ /**
76
+ * Custom header renderer. When provided, replaces the default date header.
77
+ * Receives the selected date, whether it's today, and a function to reset to today.
78
+ */
79
+ renderHeader?: (selectedDate: Date, isToday: boolean, resetToToday: () => void) => React.ReactNode;
80
+ }
81
+ /**
82
+ * Internal type for resolved color values.
83
+ * @internal
84
+ */
85
+ export interface ResolvedColors {
86
+ tickColor: string;
87
+ tickTallColor: string;
88
+ labelColor: string;
89
+ accentColor: string;
90
+ indicatorColor: string;
91
+ backgroundColor: string;
92
+ }
93
+ /**
94
+ * Internal tick data used for rendering.
95
+ * @internal
96
+ */
97
+ export interface TickData {
98
+ offset: number;
99
+ isLabeled: boolean;
100
+ isToday: boolean;
101
+ isHighlighted: boolean;
102
+ dateStr: string;
103
+ }
104
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,oBAAoB;IAEnC,iFAAiF;IACjF,YAAY,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B;;;OAGG;IACH,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,kEAAkE;IAClE,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,iEAAiE;IACjE,OAAO,CAAC,EAAE,IAAI,CAAC;IAGf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAC3E,kGAAkG;IAClG,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAGzB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,uDAAuD;IACvD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,KAAK,IAAI,CAAC;IACxD,2FAA2F;IAC3F,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2EAA2E;IAC3E,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAGpC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B;;;OAGG;IACH,YAAY,CAAC,EAAE,CACb,YAAY,EAAE,IAAI,EAClB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,IAAI,KACrB,KAAK,CAAC,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,20 @@
1
+ interface UseHapticsOptions {
2
+ enableHaptics: boolean;
3
+ onHapticTrigger?: (mode: 'tick' | 'continuous') => void;
4
+ continuousHapticIntervalMs: number;
5
+ }
6
+ interface HapticsAPI {
7
+ fireDiscreteHaptic: () => void;
8
+ startContinuousHaptic: () => void;
9
+ stopContinuousHaptic: () => void;
10
+ }
11
+ /**
12
+ * Haptics abstraction hook.
13
+ *
14
+ * - If `onHapticTrigger` is provided, delegates all haptic calls to it.
15
+ * - Otherwise, uses expo-haptics if available.
16
+ * - Falls back to no-op if neither is available or haptics are disabled.
17
+ */
18
+ export declare function useHaptics({ enableHaptics, onHapticTrigger, continuousHapticIntervalMs, }: UseHapticsOptions): HapticsAPI;
19
+ export {};
20
+ //# sourceMappingURL=useHaptics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHaptics.d.ts","sourceRoot":"","sources":["../../src/useHaptics.ts"],"names":[],"mappings":"AAgBA,UAAU,iBAAiB;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,KAAK,IAAI,CAAC;IACxD,0BAA0B,EAAE,MAAM,CAAC;CACpC;AAED,UAAU,UAAU;IAClB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,oBAAoB,EAAE,MAAM,IAAI,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,aAAa,EACb,eAAe,EACf,0BAAgE,GACjE,EAAE,iBAAiB,GAAG,UAAU,CAmEhC"}
@@ -0,0 +1,31 @@
1
+ import type { RulerDatePickerProps, ResolvedColors } from './types';
2
+ /**
3
+ * Formats a Date object as a local YYYY-MM-DD string,
4
+ * avoiding timezone shifting bugs caused by toISOString().
5
+ */
6
+ export declare function formatDateString(date?: Date): string;
7
+ /**
8
+ * Converts a Date or YYYY-MM-DD string to a day offset relative to a reference time.
9
+ */
10
+ export declare function dateToDayOffset(date: Date | string, referenceTime: number): number;
11
+ /**
12
+ * Converts a day offset back to a Date object.
13
+ */
14
+ export declare function dayOffsetToDate(offset: number, referenceTime: number): Date;
15
+ /**
16
+ * Resolves user-provided color props against the system color scheme defaults.
17
+ * User-provided values always take precedence.
18
+ */
19
+ export declare function useResolvedColors(props: Pick<RulerDatePickerProps, 'tickColor' | 'tickTallColor' | 'labelColor' | 'accentColor' | 'indicatorColor' | 'backgroundColor'>): ResolvedColors;
20
+ /**
21
+ * Determines whether a date should display a label based on the labelInterval setting.
22
+ */
23
+ export declare function shouldShowLabel(date: Date, labelInterval: RulerDatePickerProps['labelInterval'], todayTime: number): boolean;
24
+ /**
25
+ * Computes the min/max day offsets from props or defaults.
26
+ */
27
+ export declare function computeDayRange(todayTime: number, minDate?: Date, maxDate?: Date): {
28
+ minOffset: number;
29
+ maxOffset: number;
30
+ };
31
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAKhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,GAAG,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAE3E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,CACT,oBAAoB,EAClB,WAAW,GACX,eAAe,GACf,YAAY,GACZ,aAAa,GACb,gBAAgB,GAChB,iBAAiB,CACpB,GACA,cAAc,CAYhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,oBAAoB,CAAC,eAAe,CAAC,EACpD,SAAS,EAAE,MAAM,GAChB,OAAO,CAmBT;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,IAAI,EACd,OAAO,CAAC,EAAE,IAAI,GACb;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAiB1C"}