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
package/lib/commonjs/utils.js
CHANGED
|
@@ -7,10 +7,10 @@ exports.computeDayRange = computeDayRange;
|
|
|
7
7
|
exports.dateToDayOffset = dateToDayOffset;
|
|
8
8
|
exports.dayOffsetToDate = dayOffsetToDate;
|
|
9
9
|
exports.formatDateString = formatDateString;
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
10
|
+
exports.normalizeDate = normalizeDate;
|
|
11
|
+
exports.useResolvedTheme = useResolvedTheme;
|
|
12
12
|
var _reactNative = require("react-native");
|
|
13
|
-
var _defaults = require("./defaults");
|
|
13
|
+
var _defaults = require("./defaults.js");
|
|
14
14
|
/**
|
|
15
15
|
* Formats a Date object as a local YYYY-MM-DD string,
|
|
16
16
|
* avoiding timezone shifting bugs caused by toISOString().
|
|
@@ -23,56 +23,51 @@ function formatDateString(date = new Date()) {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Normalizes a Date or string to a local midnight Date object.
|
|
27
|
+
* Parses YYYY-MM-DD explicitly as local midnight to avoid UTC timezone shifts,
|
|
28
|
+
* and guards against Invalid Dates.
|
|
27
29
|
*/
|
|
28
|
-
function
|
|
29
|
-
|
|
30
|
+
function normalizeDate(input) {
|
|
31
|
+
let d;
|
|
32
|
+
if (!input) {
|
|
33
|
+
d = new Date();
|
|
34
|
+
} else if (typeof input === 'string') {
|
|
35
|
+
const parts = input.trim().split('-');
|
|
36
|
+
if (parts.length === 3) {
|
|
37
|
+
const year = parseInt(parts[0], 10);
|
|
38
|
+
const month = parseInt(parts[1], 10) - 1;
|
|
39
|
+
const day = parseInt(parts[2], 10);
|
|
40
|
+
d = new Date(year, month, day);
|
|
41
|
+
} else {
|
|
42
|
+
d = new Date(input);
|
|
43
|
+
}
|
|
44
|
+
} else {
|
|
45
|
+
d = new Date(input.getTime());
|
|
46
|
+
}
|
|
47
|
+
if (isNaN(d.getTime())) {
|
|
48
|
+
d = new Date();
|
|
49
|
+
}
|
|
30
50
|
d.setHours(0, 0, 0, 0);
|
|
31
|
-
return
|
|
51
|
+
return d;
|
|
32
52
|
}
|
|
33
53
|
|
|
34
54
|
/**
|
|
35
|
-
* Converts a day offset
|
|
36
|
-
*/
|
|
37
|
-
function dayOffsetToDate(offset, referenceTime) {
|
|
38
|
-
return new Date(referenceTime + offset * _defaults.MS_PER_DAY);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Resolves user-provided color props against the system color scheme defaults.
|
|
43
|
-
* User-provided values always take precedence.
|
|
55
|
+
* Converts a Date or YYYY-MM-DD string to a day offset relative to a reference time.
|
|
44
56
|
*/
|
|
45
|
-
function
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
return {
|
|
49
|
-
tickColor: props.tickColor ?? palette.tickColor,
|
|
50
|
-
tickTallColor: props.tickTallColor ?? props.tickColor ?? palette.tickTallColor,
|
|
51
|
-
labelColor: props.labelColor ?? palette.labelColor,
|
|
52
|
-
accentColor: props.accentColor ?? palette.accentColor,
|
|
53
|
-
indicatorColor: props.indicatorColor ?? palette.indicatorColor,
|
|
54
|
-
backgroundColor: props.backgroundColor ?? palette.backgroundColor
|
|
55
|
-
};
|
|
57
|
+
function dateToDayOffset(date, referenceTime) {
|
|
58
|
+
const d = normalizeDate(date);
|
|
59
|
+
return Math.round((d.getTime() - referenceTime) / _defaults.MS_PER_DAY);
|
|
56
60
|
}
|
|
57
61
|
|
|
58
62
|
/**
|
|
59
|
-
*
|
|
63
|
+
* Converts a day offset back to a Date object at local midnight.
|
|
64
|
+
* Uses native calendar math (setDate) to avoid Daylight Saving Time (DST) 23h/25h hour drift.
|
|
60
65
|
*/
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
if (labelInterval === 'daily') {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
if (labelInterval === 'monthly') {
|
|
71
|
-
return date.getDate() === 1;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Custom callback
|
|
75
|
-
return labelInterval(date);
|
|
66
|
+
function dayOffsetToDate(offset, referenceTime) {
|
|
67
|
+
const d = new Date(referenceTime);
|
|
68
|
+
d.setDate(d.getDate() + offset);
|
|
69
|
+
d.setHours(0, 0, 0, 0);
|
|
70
|
+
return d;
|
|
76
71
|
}
|
|
77
72
|
|
|
78
73
|
/**
|
|
@@ -82,18 +77,37 @@ function computeDayRange(todayTime, minDate, maxDate) {
|
|
|
82
77
|
let minOffset = -_defaults.DEFAULT_DAY_RANGE;
|
|
83
78
|
let maxOffset = _defaults.DEFAULT_DAY_RANGE;
|
|
84
79
|
if (minDate) {
|
|
85
|
-
const d =
|
|
86
|
-
d.setHours(0, 0, 0, 0);
|
|
80
|
+
const d = normalizeDate(minDate);
|
|
87
81
|
minOffset = Math.round((d.getTime() - todayTime) / _defaults.MS_PER_DAY);
|
|
88
82
|
}
|
|
89
83
|
if (maxDate) {
|
|
90
|
-
const d =
|
|
91
|
-
d.setHours(0, 0, 0, 0);
|
|
84
|
+
const d = normalizeDate(maxDate);
|
|
92
85
|
maxOffset = Math.round((d.getTime() - todayTime) / _defaults.MS_PER_DAY);
|
|
93
86
|
}
|
|
87
|
+
if (minOffset > maxOffset) {
|
|
88
|
+
const temp = minOffset;
|
|
89
|
+
minOffset = maxOffset;
|
|
90
|
+
maxOffset = temp;
|
|
91
|
+
}
|
|
94
92
|
return {
|
|
95
93
|
minOffset,
|
|
96
94
|
maxOffset
|
|
97
95
|
};
|
|
98
96
|
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resolves user-provided theme against the system color scheme defaults (Light/Dark).
|
|
100
|
+
*/
|
|
101
|
+
function useResolvedTheme(theme) {
|
|
102
|
+
const scheme = (0, _reactNative.useColorScheme)();
|
|
103
|
+
const palette = scheme === 'dark' ? _defaults.DARK_THEME : _defaults.LIGHT_THEME;
|
|
104
|
+
return {
|
|
105
|
+
background: theme?.background ?? palette.background,
|
|
106
|
+
indicatorColor: theme?.indicatorColor ?? palette.indicatorColor,
|
|
107
|
+
accentColor: theme?.accentColor ?? palette.accentColor,
|
|
108
|
+
labelColor: theme?.labelColor ?? palette.labelColor,
|
|
109
|
+
defaultTickColor: theme?.defaultTickColor ?? palette.defaultTickColor,
|
|
110
|
+
rangeHighlightColor: theme?.rangeHighlightColor ?? palette.rangeHighlightColor
|
|
111
|
+
};
|
|
112
|
+
}
|
|
99
113
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_defaults","formatDateString","date","Date","year","getFullYear","month","String","getMonth","padStart","day","getDate","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_defaults","formatDateString","date","Date","year","getFullYear","month","String","getMonth","padStart","day","getDate","normalizeDate","input","d","parts","trim","split","length","parseInt","getTime","isNaN","setHours","dateToDayOffset","referenceTime","Math","round","MS_PER_DAY","dayOffsetToDate","offset","setDate","computeDayRange","todayTime","minDate","maxDate","minOffset","DEFAULT_DAY_RANGE","maxOffset","temp","useResolvedTheme","theme","scheme","useColorScheme","palette","DARK_THEME","LIGHT_THEME","background","indicatorColor","accentColor","labelColor","defaultTickColor","rangeHighlightColor"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { StyleSheet } from 'react-native';
|
|
5
|
+
import Animated, { useAnimatedStyle } from 'react-native-reanimated';
|
|
6
|
+
import { useRulerContext } from "./RulerContext.js";
|
|
7
|
+
import { Tick } from "./Tick.js";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
/**
|
|
10
|
+
* Animated tick item with non-linear hyperbolic-tangent spatial distortion.
|
|
11
|
+
* Tick spacing smoothly magnifies near the center needle and asymptotically
|
|
12
|
+
* flattens out to standard spacing away from the center.
|
|
13
|
+
*/
|
|
14
|
+
export function LensTick({
|
|
15
|
+
tick,
|
|
16
|
+
tickSpacing,
|
|
17
|
+
rulerHeight,
|
|
18
|
+
translateX,
|
|
19
|
+
magnification,
|
|
20
|
+
radius,
|
|
21
|
+
scaleTicks,
|
|
22
|
+
containerWidth
|
|
23
|
+
}) {
|
|
24
|
+
const {
|
|
25
|
+
width: contextWidth
|
|
26
|
+
} = useRulerContext();
|
|
27
|
+
const width = containerWidth ?? contextWidth;
|
|
28
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
29
|
+
'worklet';
|
|
30
|
+
|
|
31
|
+
const d = tick.offset * tickSpacing + translateX.value;
|
|
32
|
+
const A = (magnification - 1) * radius;
|
|
33
|
+
const warpedX = d + A * Math.tanh(d / radius);
|
|
34
|
+
if (!scaleTicks) {
|
|
35
|
+
return {
|
|
36
|
+
transform: [{
|
|
37
|
+
translateX: warpedX
|
|
38
|
+
}]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const dist = Math.abs(d);
|
|
42
|
+
const radiusLimit = radius * 1.5;
|
|
43
|
+
const factor = dist < radiusLimit ? 1 - dist / radiusLimit : 0;
|
|
44
|
+
const scale = 1 + (magnification - 1) * 0.25 * factor;
|
|
45
|
+
return {
|
|
46
|
+
transform: [{
|
|
47
|
+
translateX: warpedX
|
|
48
|
+
}, {
|
|
49
|
+
scale: scale
|
|
50
|
+
}]
|
|
51
|
+
};
|
|
52
|
+
}, [tick.offset, tickSpacing, translateX, magnification, radius, scaleTicks]);
|
|
53
|
+
return /*#__PURE__*/_jsx(Animated.View, {
|
|
54
|
+
style: [styles.lensTickWrapper, {
|
|
55
|
+
height: rulerHeight,
|
|
56
|
+
left: width / 2
|
|
57
|
+
}, animatedStyle],
|
|
58
|
+
children: /*#__PURE__*/_jsx(Tick, {
|
|
59
|
+
tick: {
|
|
60
|
+
...tick,
|
|
61
|
+
offset: 0
|
|
62
|
+
},
|
|
63
|
+
tickSpacing: tickSpacing,
|
|
64
|
+
rulerHeight: rulerHeight
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const styles = StyleSheet.create({
|
|
69
|
+
lensTickWrapper: {
|
|
70
|
+
position: 'absolute',
|
|
71
|
+
height: '100%',
|
|
72
|
+
width: 0,
|
|
73
|
+
justifyContent: 'flex-end',
|
|
74
|
+
alignItems: 'center'
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=LensTick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","StyleSheet","Animated","useAnimatedStyle","useRulerContext","Tick","jsx","_jsx","LensTick","tick","tickSpacing","rulerHeight","translateX","magnification","radius","scaleTicks","containerWidth","width","contextWidth","animatedStyle","d","offset","value","A","warpedX","Math","tanh","transform","dist","abs","radiusLimit","factor","scale","View","style","styles","lensTickWrapper","height","left","children","create","position","justifyContent","alignItems"],"sourceRoot":"../../src","sources":["LensTick.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,IAAIC,gBAAgB,QAA0B,yBAAyB;AACtF,SAASC,eAAe,QAAQ,mBAAgB;AAChD,SAASC,IAAI,QAAQ,WAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAc9B;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAC;EACvBC,IAAI;EACJC,WAAW;EACXC,WAAW;EACXC,UAAU;EACVC,aAAa;EACbC,MAAM;EACNC,UAAU;EACVC;AACa,CAAC,EAAE;EAChB,MAAM;IAAEC,KAAK,EAAEC;EAAa,CAAC,GAAGd,eAAe,CAAC,CAAC;EACjD,MAAMa,KAAK,GAAGD,cAAc,IAAIE,YAAY;EAE5C,MAAMC,aAAa,GAAGhB,gBAAgB,CAAC,MAAM;IAC3C,SAAS;;IACT,MAAMiB,CAAC,GAAGX,IAAI,CAACY,MAAM,GAAGX,WAAW,GAAGE,UAAU,CAACU,KAAK;IACtD,MAAMC,CAAC,GAAG,CAACV,aAAa,GAAG,CAAC,IAAIC,MAAM;IACtC,MAAMU,OAAO,GAAGJ,CAAC,GAAGG,CAAC,GAAGE,IAAI,CAACC,IAAI,CAACN,CAAC,GAAGN,MAAM,CAAC;IAE7C,IAAI,CAACC,UAAU,EAAE;MACf,OAAO;QACLY,SAAS,EAAE,CAAC;UAAEf,UAAU,EAAEY;QAAQ,CAAC;MACrC,CAAC;IACH;IAEA,MAAMI,IAAI,GAAGH,IAAI,CAACI,GAAG,CAACT,CAAC,CAAC;IACxB,MAAMU,WAAW,GAAGhB,MAAM,GAAG,GAAG;IAChC,MAAMiB,MAAM,GAAGH,IAAI,GAAGE,WAAW,GAAG,CAAC,GAAGF,IAAI,GAAGE,WAAW,GAAG,CAAC;IAC9D,MAAME,KAAK,GAAG,CAAC,GAAG,CAACnB,aAAa,GAAG,CAAC,IAAI,IAAI,GAAGkB,MAAM;IAErD,OAAO;MACLJ,SAAS,EAAE,CACT;QAAEf,UAAU,EAAEY;MAAQ,CAAC,EACvB;QAAEQ,KAAK,EAAEA;MAAM,CAAC;IAEpB,CAAC;EACH,CAAC,EAAE,CAACvB,IAAI,CAACY,MAAM,EAAEX,WAAW,EAAEE,UAAU,EAAEC,aAAa,EAAEC,MAAM,EAAEC,UAAU,CAAC,CAAC;EAE7E,oBACER,IAAA,CAACL,QAAQ,CAAC+B,IAAI;IACZC,KAAK,EAAE,CACLC,MAAM,CAACC,eAAe,EACtB;MAAEC,MAAM,EAAE1B,WAAW;MAAE2B,IAAI,EAAErB,KAAK,GAAG;IAAE,CAAC,EACxCE,aAAa,CACb;IAAAoB,QAAA,eAEFhC,IAAA,CAACF,IAAI;MACHI,IAAI,EAAE;QACJ,GAAGA,IAAI;QACPY,MAAM,EAAE;MACV,CAAE;MACFX,WAAW,EAAEA,WAAY;MACzBC,WAAW,EAAEA;IAAY,CAC1B;EAAC,CACW,CAAC;AAEpB;AAEA,MAAMwB,MAAM,GAAGlC,UAAU,CAACuC,MAAM,CAAC;EAC/BJ,eAAe,EAAE;IACfK,QAAQ,EAAE,UAAU;IACpBJ,MAAM,EAAE,MAAM;IACdpB,KAAK,EAAE,CAAC;IACRyB,cAAc,EAAE,UAAU;IAC1BC,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { RulerRoot } from "./RulerRoot.js";
|
|
4
|
+
import { RulerTrack } from "./RulerTrack.js";
|
|
5
|
+
import { RulerIndicator } from "./RulerIndicator.js";
|
|
6
|
+
import { RulerTicks } from "./RulerTicks.js";
|
|
7
|
+
import { Tick } from "./Tick.js";
|
|
8
|
+
import { RulerHeader } from "./RulerHeader.js";
|
|
9
|
+
import { RulerResetButton } from "./RulerResetButton.js";
|
|
10
|
+
import { RulerLensTrack } from "./RulerLensTrack.js";
|
|
11
|
+
import { RulerLensTicks } from "./RulerLensTicks.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Compound Anatomy API for the Ruler Date Picker.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <Ruler.Root value={selectedDate} onChange={setSelectedDate}>
|
|
19
|
+
* <Ruler.Header />
|
|
20
|
+
* <Ruler.LensTrack />
|
|
21
|
+
* </Ruler.Root>
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export const Ruler = {
|
|
25
|
+
Root: RulerRoot,
|
|
26
|
+
Track: RulerTrack,
|
|
27
|
+
LensTrack: RulerLensTrack,
|
|
28
|
+
Ticks: RulerTicks,
|
|
29
|
+
LensTicks: RulerLensTicks,
|
|
30
|
+
Indicator: RulerIndicator,
|
|
31
|
+
Tick: Tick,
|
|
32
|
+
Header: RulerHeader,
|
|
33
|
+
ResetButton: RulerResetButton
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=Ruler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RulerRoot","RulerTrack","RulerIndicator","RulerTicks","Tick","RulerHeader","RulerResetButton","RulerLensTrack","RulerLensTicks","Ruler","Root","Track","LensTrack","Ticks","LensTicks","Indicator","Header","ResetButton"],"sourceRoot":"../../src","sources":["Ruler.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,gBAAa;AACvC,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,UAAU,QAAQ,iBAAc;AACzC,SAASC,IAAI,QAAQ,WAAQ;AAC7B,SAASC,WAAW,QAAQ,kBAAe;AAC3C,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,cAAc,QAAQ,qBAAkB;AACjD,SAASC,cAAc,QAAQ,qBAAkB;;AAEjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,KAAK,GAAG;EACnBC,IAAI,EAAEV,SAAS;EACfW,KAAK,EAAEV,UAAU;EACjBW,SAAS,EAAEL,cAAc;EACzBM,KAAK,EAAEV,UAAU;EACjBW,SAAS,EAAEN,cAAc;EACzBO,SAAS,EAAEb,cAAc;EACzBE,IAAI,EAAEA,IAAI;EACVY,MAAM,EAAEX,WAAW;EACnBY,WAAW,EAAEX;AACf,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext } from 'react';
|
|
4
|
+
export const RulerContext = /*#__PURE__*/createContext(null);
|
|
5
|
+
export function useRulerContext() {
|
|
6
|
+
const context = useContext(RulerContext);
|
|
7
|
+
if (!context) {
|
|
8
|
+
throw new Error('Ruler compound subcomponents must be rendered within a <Ruler.Root> provider.');
|
|
9
|
+
}
|
|
10
|
+
return context;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=RulerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","useContext","RulerContext","useRulerContext","context","Error"],"sourceRoot":"../../src","sources":["RulerContext.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAWjD,OAAO,MAAMC,YAAY,gBAAGF,aAAa,CAA2B,IAAI,CAAC;AAEzE,OAAO,SAASG,eAAeA,CAAA,EAAsB;EACnD,MAAMC,OAAO,GAAGH,UAAU,CAACC,YAAY,CAAC;EACxC,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,+EAA+E,CAAC;EAClG;EACA,OAAOD,OAAO;AAChB","ignoreList":[]}
|