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.
Files changed (220) hide show
  1. package/README.md +186 -60
  2. package/lib/commonjs/LensTick.js +83 -0
  3. package/lib/commonjs/LensTick.js.map +1 -0
  4. package/lib/commonjs/Ruler.js +38 -0
  5. package/lib/commonjs/Ruler.js.map +1 -0
  6. package/lib/commonjs/RulerContext.js +17 -0
  7. package/lib/commonjs/RulerContext.js.map +1 -0
  8. package/lib/commonjs/RulerDatePicker.js +38 -351
  9. package/lib/commonjs/RulerDatePicker.js.map +1 -1
  10. package/lib/commonjs/RulerDateRangePicker.js +56 -0
  11. package/lib/commonjs/RulerDateRangePicker.js.map +1 -0
  12. package/lib/commonjs/RulerHeader.js +106 -0
  13. package/lib/commonjs/RulerHeader.js.map +1 -0
  14. package/lib/commonjs/RulerIndicator.js +67 -0
  15. package/lib/commonjs/RulerIndicator.js.map +1 -0
  16. package/lib/commonjs/RulerLensTicks.js +55 -0
  17. package/lib/commonjs/RulerLensTicks.js.map +1 -0
  18. package/lib/commonjs/RulerLensTrack.js +52 -0
  19. package/lib/commonjs/RulerLensTrack.js.map +1 -0
  20. package/lib/commonjs/RulerRange.js +39 -0
  21. package/lib/commonjs/RulerRange.js.map +1 -0
  22. package/lib/commonjs/RulerRangeContext.js +17 -0
  23. package/lib/commonjs/RulerRangeContext.js.map +1 -0
  24. package/lib/commonjs/RulerRangeHeader.js +154 -0
  25. package/lib/commonjs/RulerRangeHeader.js.map +1 -0
  26. package/lib/commonjs/RulerRangeHighlight.js +50 -0
  27. package/lib/commonjs/RulerRangeHighlight.js.map +1 -0
  28. package/lib/commonjs/RulerRangeIndicator.js +71 -0
  29. package/lib/commonjs/RulerRangeIndicator.js.map +1 -0
  30. package/lib/commonjs/RulerRangeRoot.js +80 -0
  31. package/lib/commonjs/RulerRangeRoot.js.map +1 -0
  32. package/lib/commonjs/RulerRangeTicks.js +57 -0
  33. package/lib/commonjs/RulerRangeTicks.js.map +1 -0
  34. package/lib/commonjs/RulerRangeTrack.js +46 -0
  35. package/lib/commonjs/RulerRangeTrack.js.map +1 -0
  36. package/lib/commonjs/RulerResetButton.js +46 -0
  37. package/lib/commonjs/RulerResetButton.js.map +1 -0
  38. package/lib/commonjs/RulerRoot.js +87 -0
  39. package/lib/commonjs/RulerRoot.js.map +1 -0
  40. package/lib/commonjs/RulerTicks.js +51 -0
  41. package/lib/commonjs/RulerTicks.js.map +1 -0
  42. package/lib/commonjs/RulerTrack.js +46 -0
  43. package/lib/commonjs/RulerTrack.js.map +1 -0
  44. package/lib/commonjs/Tick.js +41 -36
  45. package/lib/commonjs/Tick.js.map +1 -1
  46. package/lib/commonjs/defaults.js +20 -19
  47. package/lib/commonjs/defaults.js.map +1 -1
  48. package/lib/commonjs/index.js +287 -1
  49. package/lib/commonjs/index.js.map +1 -1
  50. package/lib/commonjs/presets.js +108 -0
  51. package/lib/commonjs/presets.js.map +1 -0
  52. package/lib/commonjs/tickResolver.js +101 -0
  53. package/lib/commonjs/tickResolver.js.map +1 -0
  54. package/lib/commonjs/useHaptics.js +1 -1
  55. package/lib/commonjs/useHaptics.web.js +43 -0
  56. package/lib/commonjs/useHaptics.web.js.map +1 -0
  57. package/lib/commonjs/useRulerDatePicker.js +264 -0
  58. package/lib/commonjs/useRulerDatePicker.js.map +1 -0
  59. package/lib/commonjs/useRulerDateRangePicker.js +313 -0
  60. package/lib/commonjs/useRulerDateRangePicker.js.map +1 -0
  61. package/lib/commonjs/utils.js +61 -47
  62. package/lib/commonjs/utils.js.map +1 -1
  63. package/lib/module/LensTick.js +77 -0
  64. package/lib/module/LensTick.js.map +1 -0
  65. package/lib/module/Ruler.js +35 -0
  66. package/lib/module/Ruler.js.map +1 -0
  67. package/lib/module/RulerContext.js +12 -0
  68. package/lib/module/RulerContext.js.map +1 -0
  69. package/lib/module/RulerDatePicker.js +38 -350
  70. package/lib/module/RulerDatePicker.js.map +1 -1
  71. package/lib/module/RulerDateRangePicker.js +52 -0
  72. package/lib/module/RulerDateRangePicker.js.map +1 -0
  73. package/lib/module/RulerHeader.js +101 -0
  74. package/lib/module/RulerHeader.js.map +1 -0
  75. package/lib/module/RulerIndicator.js +62 -0
  76. package/lib/module/RulerIndicator.js.map +1 -0
  77. package/lib/module/RulerLensTicks.js +50 -0
  78. package/lib/module/RulerLensTicks.js.map +1 -0
  79. package/lib/module/RulerLensTrack.js +47 -0
  80. package/lib/module/RulerLensTrack.js.map +1 -0
  81. package/lib/module/RulerRange.js +36 -0
  82. package/lib/module/RulerRange.js.map +1 -0
  83. package/lib/module/RulerRangeContext.js +12 -0
  84. package/lib/module/RulerRangeContext.js.map +1 -0
  85. package/lib/module/RulerRangeHeader.js +149 -0
  86. package/lib/module/RulerRangeHeader.js.map +1 -0
  87. package/lib/module/RulerRangeHighlight.js +45 -0
  88. package/lib/module/RulerRangeHighlight.js.map +1 -0
  89. package/lib/module/RulerRangeIndicator.js +66 -0
  90. package/lib/module/RulerRangeIndicator.js.map +1 -0
  91. package/lib/module/RulerRangeRoot.js +75 -0
  92. package/lib/module/RulerRangeRoot.js.map +1 -0
  93. package/lib/module/RulerRangeTicks.js +51 -0
  94. package/lib/module/RulerRangeTicks.js.map +1 -0
  95. package/lib/module/RulerRangeTrack.js +41 -0
  96. package/lib/module/RulerRangeTrack.js.map +1 -0
  97. package/lib/module/RulerResetButton.js +41 -0
  98. package/lib/module/RulerResetButton.js.map +1 -0
  99. package/lib/module/RulerRoot.js +82 -0
  100. package/lib/module/RulerRoot.js.map +1 -0
  101. package/lib/module/RulerTicks.js +45 -0
  102. package/lib/module/RulerTicks.js.map +1 -0
  103. package/lib/module/RulerTrack.js +41 -0
  104. package/lib/module/RulerTrack.js.map +1 -0
  105. package/lib/module/Tick.js +41 -36
  106. package/lib/module/Tick.js.map +1 -1
  107. package/lib/module/defaults.js +19 -18
  108. package/lib/module/defaults.js.map +1 -1
  109. package/lib/module/index.js +46 -1
  110. package/lib/module/index.js.map +1 -1
  111. package/lib/module/presets.js +103 -0
  112. package/lib/module/presets.js.map +1 -0
  113. package/lib/module/tickResolver.js +97 -0
  114. package/lib/module/tickResolver.js.map +1 -0
  115. package/lib/module/useHaptics.js +1 -1
  116. package/lib/module/useHaptics.js.map +1 -1
  117. package/lib/module/useHaptics.web.js +39 -0
  118. package/lib/module/useHaptics.web.js.map +1 -0
  119. package/lib/module/useRulerDatePicker.js +260 -0
  120. package/lib/module/useRulerDatePicker.js.map +1 -0
  121. package/lib/module/useRulerDateRangePicker.js +310 -0
  122. package/lib/module/useRulerDateRangePicker.js.map +1 -0
  123. package/lib/module/utils.js +59 -45
  124. package/lib/module/utils.js.map +1 -1
  125. package/lib/typescript/LensTick.d.ts +20 -0
  126. package/lib/typescript/LensTick.d.ts.map +1 -0
  127. package/lib/typescript/Ruler.d.ts +31 -0
  128. package/lib/typescript/Ruler.d.ts.map +1 -0
  129. package/lib/typescript/RulerContext.d.ts +11 -0
  130. package/lib/typescript/RulerContext.d.ts.map +1 -0
  131. package/lib/typescript/RulerDatePicker.d.ts +10 -7
  132. package/lib/typescript/RulerDatePicker.d.ts.map +1 -1
  133. package/lib/typescript/RulerDateRangePicker.d.ts +26 -0
  134. package/lib/typescript/RulerDateRangePicker.d.ts.map +1 -0
  135. package/lib/typescript/RulerHeader.d.ts +14 -0
  136. package/lib/typescript/RulerHeader.d.ts.map +1 -0
  137. package/lib/typescript/RulerIndicator.d.ts +17 -0
  138. package/lib/typescript/RulerIndicator.d.ts.map +1 -0
  139. package/lib/typescript/RulerLensTicks.d.ts +12 -0
  140. package/lib/typescript/RulerLensTicks.d.ts.map +1 -0
  141. package/lib/typescript/RulerLensTrack.d.ts +13 -0
  142. package/lib/typescript/RulerLensTrack.d.ts.map +1 -0
  143. package/lib/typescript/RulerRange.d.ts +32 -0
  144. package/lib/typescript/RulerRange.d.ts.map +1 -0
  145. package/lib/typescript/RulerRangeContext.d.ts +11 -0
  146. package/lib/typescript/RulerRangeContext.d.ts.map +1 -0
  147. package/lib/typescript/RulerRangeHeader.d.ts +12 -0
  148. package/lib/typescript/RulerRangeHeader.d.ts.map +1 -0
  149. package/lib/typescript/RulerRangeHighlight.d.ts +8 -0
  150. package/lib/typescript/RulerRangeHighlight.d.ts.map +1 -0
  151. package/lib/typescript/RulerRangeIndicator.d.ts +17 -0
  152. package/lib/typescript/RulerRangeIndicator.d.ts.map +1 -0
  153. package/lib/typescript/RulerRangeRoot.d.ts +7 -0
  154. package/lib/typescript/RulerRangeRoot.d.ts.map +1 -0
  155. package/lib/typescript/RulerRangeTicks.d.ts +14 -0
  156. package/lib/typescript/RulerRangeTicks.d.ts.map +1 -0
  157. package/lib/typescript/RulerRangeTrack.d.ts +8 -0
  158. package/lib/typescript/RulerRangeTrack.d.ts.map +1 -0
  159. package/lib/typescript/RulerResetButton.d.ts +10 -0
  160. package/lib/typescript/RulerResetButton.d.ts.map +1 -0
  161. package/lib/typescript/RulerRoot.d.ts +7 -0
  162. package/lib/typescript/RulerRoot.d.ts.map +1 -0
  163. package/lib/typescript/RulerTicks.d.ts +9 -0
  164. package/lib/typescript/RulerTicks.d.ts.map +1 -0
  165. package/lib/typescript/RulerTrack.d.ts +8 -0
  166. package/lib/typescript/RulerTrack.d.ts.map +1 -0
  167. package/lib/typescript/Tick.d.ts +3 -16
  168. package/lib/typescript/Tick.d.ts.map +1 -1
  169. package/lib/typescript/defaults.d.ts +6 -9
  170. package/lib/typescript/defaults.d.ts.map +1 -1
  171. package/lib/typescript/index.d.ts +37 -1
  172. package/lib/typescript/index.d.ts.map +1 -1
  173. package/lib/typescript/presets.d.ts +27 -0
  174. package/lib/typescript/presets.d.ts.map +1 -0
  175. package/lib/typescript/tickResolver.d.ts +10 -0
  176. package/lib/typescript/tickResolver.d.ts.map +1 -0
  177. package/lib/typescript/types.d.ts +302 -85
  178. package/lib/typescript/types.d.ts.map +1 -1
  179. package/lib/typescript/useHaptics.web.d.ts +17 -0
  180. package/lib/typescript/useHaptics.web.d.ts.map +1 -0
  181. package/lib/typescript/useRulerDatePicker.d.ts +26 -0
  182. package/lib/typescript/useRulerDatePicker.d.ts.map +1 -0
  183. package/lib/typescript/useRulerDateRangePicker.d.ts +40 -0
  184. package/lib/typescript/useRulerDateRangePicker.d.ts.map +1 -0
  185. package/lib/typescript/utils.d.ts +14 -12
  186. package/lib/typescript/utils.d.ts.map +1 -1
  187. package/package.json +25 -7
  188. package/src/LensTick.tsx +90 -0
  189. package/src/Ruler.ts +32 -0
  190. package/src/RulerContext.tsx +20 -0
  191. package/src/RulerDatePicker.tsx +41 -439
  192. package/src/RulerDateRangePicker.tsx +53 -0
  193. package/src/RulerHeader.tsx +125 -0
  194. package/src/RulerIndicator.tsx +84 -0
  195. package/src/RulerLensTicks.tsx +50 -0
  196. package/src/RulerLensTrack.tsx +45 -0
  197. package/src/RulerRange.ts +33 -0
  198. package/src/RulerRangeContext.tsx +20 -0
  199. package/src/RulerRangeHeader.tsx +180 -0
  200. package/src/RulerRangeHighlight.tsx +47 -0
  201. package/src/RulerRangeIndicator.tsx +85 -0
  202. package/src/RulerRangeRoot.tsx +87 -0
  203. package/src/RulerRangeTicks.tsx +68 -0
  204. package/src/RulerRangeTrack.tsx +39 -0
  205. package/src/RulerResetButton.tsx +59 -0
  206. package/src/RulerRoot.tsx +93 -0
  207. package/src/RulerTicks.tsx +57 -0
  208. package/src/RulerTrack.tsx +39 -0
  209. package/src/Tick.tsx +60 -49
  210. package/src/defaults.ts +21 -19
  211. package/src/index.ts +83 -1
  212. package/src/presets.ts +108 -0
  213. package/src/tickResolver.ts +123 -0
  214. package/src/types.ts +354 -102
  215. package/src/useHaptics.web.ts +55 -0
  216. package/src/useRulerDatePicker.ts +373 -0
  217. package/src/useRulerDateRangePicker.ts +468 -0
  218. package/src/utils.ts +67 -68
  219. package/lib/commonjs/package.json +0 -1
  220. package/lib/module/package.json +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DEFAULT_CALENDAR_TICKS","condition","height","width","label","format","d","toLocaleDateString","month","day","fontWeight","getDate","dayOfWeek","DEFAULT_METRIC_TICKS","interval","DEFAULT_MINIMAL_TICKS","resolveTickRules","ticks","Array","isArray"],"sourceRoot":"../../src","sources":["presets.ts"],"mappings":";;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,sBAAkC,GAAG,CAChD;EACEC,SAAS,EAAE,SAAS;EACpBC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE,GAAG;EACVC,KAAK,EAAE;IACLC,MAAM,EAAGC,CAAC,IACRA,CAAC,CAACC,kBAAkB,CAAC,OAAO,EAAE;MAAEC,KAAK,EAAE,OAAO;MAAEC,GAAG,EAAE;IAAU,CAAC,CAAC;IACnEC,UAAU,EAAE;EACd;AACF,CAAC,EACD;EACET,SAAS,EAAE,QAAQ;EACnBC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE,CAAC;EACRC,KAAK,EAAE;IACLC,MAAM,EAAGC,CAAC,IAAK,GAAGA,CAAC,CAACK,OAAO,CAAC,CAAC,EAAE;IAC/BD,UAAU,EAAE;EACd;AACF,CAAC,EACD;EACET,SAAS,EAAE;IAAEW,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;EAAE,CAAC;EAChCV,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE;AACT,CAAC,EACD;EACE;EACAF,SAAS,EAAE,OAAO;EAClBC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE;AACT,CAAC,CACF;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMU,oBAAgC,GAAG,CAC9C;EACEZ,SAAS,EAAE;IAAEa,QAAQ,EAAE;EAAG,CAAC;EAC3BZ,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE,GAAG;EACVC,KAAK,EAAE;IACLC,MAAM,EAAGC,CAAC,IAAK,GAAGA,CAAC,CAACK,OAAO,CAAC,CAAC,EAAE;IAC/BD,UAAU,EAAE;EACd;AACF,CAAC,EACD;EACET,SAAS,EAAE;IAAEa,QAAQ,EAAE;EAAE,CAAC;EAC1BZ,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE;AACT,CAAC,EACD;EACEF,SAAS,EAAE,OAAO;EAClBC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE;AACT,CAAC,CACF;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMY,qBAAiC,GAAG,CAC/C;EACEd,SAAS,EAAE,QAAQ;EACnBC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE,CAAC;EACRC,KAAK,EAAE;IACLC,MAAM,EAAGC,CAAC,IAAK,GAAGA,CAAC,CAACK,OAAO,CAAC,CAAC;EAC/B;AACF,CAAC,EACD;EACEV,SAAS,EAAE,OAAO;EAClBC,MAAM,EAAE,EAAE;EACVC,KAAK,EAAE;AACT,CAAC,CACF;;AAED;AACA;AACA;AACA,OAAO,SAASa,gBAAgBA,CAC9BC,KAAsD,EAC1C;EACZ,IAAIC,KAAK,CAACC,OAAO,CAACF,KAAK,CAAC,EAAE;IACxB,OAAOA,KAAK;EACd;EACA,IAAIA,KAAK,KAAK,QAAQ,EAAE;IACtB,OAAOJ,oBAAoB;EAC7B;EACA,IAAII,KAAK,KAAK,SAAS,EAAE;IACvB,OAAOF,qBAAqB;EAC9B;EACA,OAAOf,sBAAsB;AAC/B","ignoreList":[]}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+
3
+ import { formatDateString } from "./utils.js";
4
+
5
+ /**
6
+ * Checks whether a given TickCondition matches the provided TickContext.
7
+ */
8
+ export function matchesCondition(condition, ctx) {
9
+ if (condition === undefined || condition === 'daily') {
10
+ return true;
11
+ }
12
+ if (condition === 'weekly') {
13
+ return ctx.offset % 7 === 0;
14
+ }
15
+ if (condition === 'monthly') {
16
+ return ctx.date.getDate() === 1;
17
+ }
18
+ if (condition === 'yearly') {
19
+ return ctx.date.getDate() === 1 && ctx.date.getMonth() === 0;
20
+ }
21
+ if (typeof condition === 'object') {
22
+ if ('interval' in condition && typeof condition.interval === 'number') {
23
+ return condition.interval !== 0 && ctx.offset % condition.interval === 0;
24
+ }
25
+ if ('dayOfWeek' in condition && Array.isArray(condition.dayOfWeek)) {
26
+ return condition.dayOfWeek.includes(ctx.date.getDay());
27
+ }
28
+ }
29
+ if (typeof condition === 'function') {
30
+ return condition(ctx);
31
+ }
32
+ return false;
33
+ }
34
+
35
+ /**
36
+ * Resolves visual attributes for a tick by evaluating the rule array in order (first match wins).
37
+ */
38
+ export function resolveTick(ctx, rules, theme, defaultWidth = 3) {
39
+ // Find the first matching rule, or fall back to the last rule in the list
40
+ const matchedRule = rules.find(rule => matchesCondition(rule.condition, ctx)) ?? rules[rules.length - 1];
41
+ const height = matchedRule?.height ?? 12;
42
+ const width = matchedRule?.width ?? defaultWidth;
43
+ const color = matchedRule?.color ?? theme.defaultTickColor;
44
+
45
+ // Resolve label
46
+ let labelText;
47
+ let labelColor = theme.labelColor;
48
+ let labelFontSize = 10;
49
+ let labelFontWeight = 'normal';
50
+ if (matchedRule?.label) {
51
+ if (typeof matchedRule.label === 'object') {
52
+ labelText = matchedRule.label.format ? matchedRule.label.format(ctx.date, ctx) : String(ctx.date.getDate());
53
+ if (matchedRule.label.color) labelColor = matchedRule.label.color;
54
+ if (matchedRule.label.fontSize) labelFontSize = matchedRule.label.fontSize;
55
+ if (matchedRule.label.fontWeight) labelFontWeight = matchedRule.label.fontWeight;
56
+ } else if (matchedRule.label === true) {
57
+ labelText = String(ctx.date.getDate());
58
+ }
59
+ }
60
+
61
+ // Resolve dot indicator
62
+ let hasDot = false;
63
+ let dotSize = 6;
64
+ let dotColor = theme.accentColor;
65
+ if (matchedRule?.dot !== undefined) {
66
+ if (typeof matchedRule.dot === 'object') {
67
+ hasDot = true;
68
+ if (matchedRule.dot.size) dotSize = matchedRule.dot.size;
69
+ if (matchedRule.dot.color) dotColor = matchedRule.dot.color;
70
+ } else if (matchedRule.dot === true) {
71
+ hasDot = true;
72
+ }
73
+ } else if (ctx.isToday) {
74
+ // Default: show today dot if rule didn't explicitly disable it
75
+ hasDot = true;
76
+ }
77
+ return {
78
+ offset: ctx.offset,
79
+ date: ctx.date,
80
+ dateStr: formatDateString(ctx.date),
81
+ height,
82
+ width,
83
+ color,
84
+ labelText,
85
+ labelColor,
86
+ labelFontSize,
87
+ labelFontWeight,
88
+ hasDot,
89
+ dotSize,
90
+ dotColor,
91
+ customRender: matchedRule?.render,
92
+ isToday: ctx.isToday,
93
+ isSelected: ctx.isSelected,
94
+ isInRange: ctx.isInRange ?? false
95
+ };
96
+ }
97
+ //# sourceMappingURL=tickResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["formatDateString","matchesCondition","condition","ctx","undefined","offset","date","getDate","getMonth","interval","Array","isArray","dayOfWeek","includes","getDay","resolveTick","rules","theme","defaultWidth","matchedRule","find","rule","length","height","width","color","defaultTickColor","labelText","labelColor","labelFontSize","labelFontWeight","label","format","String","fontSize","fontWeight","hasDot","dotSize","dotColor","accentColor","dot","size","isToday","dateStr","customRender","render","isSelected","isInRange"],"sourceRoot":"../../src","sources":["tickResolver.ts"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useCallback, useRef } from 'react';
4
4
  import { Platform } from 'react-native';
5
- import { DEFAULTS } from './defaults';
5
+ import { DEFAULTS } from "./defaults.js";
6
6
 
7
7
  /**
8
8
  * Attempts to dynamically require expo-haptics.
@@ -1 +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":[]}
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,eAAY;;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,39 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useRef } from 'react';
4
+ import { DEFAULTS } from "./defaults.js";
5
+ /**
6
+ * Haptics hook implementation for Web environments.
7
+ * Delegates to onHapticTrigger if provided, otherwise gracefully no-ops without requiring expo-haptics.
8
+ */
9
+ export function useHaptics({
10
+ enableHaptics,
11
+ onHapticTrigger,
12
+ continuousHapticIntervalMs = DEFAULTS.continuousHapticIntervalMs
13
+ }) {
14
+ const hapticIntervalRef = useRef(null);
15
+ const fireDiscreteHaptic = useCallback(() => {
16
+ if (!enableHaptics || !onHapticTrigger) return;
17
+ onHapticTrigger('tick');
18
+ }, [enableHaptics, onHapticTrigger]);
19
+ const startContinuousHaptic = useCallback(() => {
20
+ if (!enableHaptics || !onHapticTrigger) return;
21
+ if (hapticIntervalRef.current) return;
22
+ onHapticTrigger('continuous');
23
+ hapticIntervalRef.current = setInterval(() => {
24
+ onHapticTrigger('continuous');
25
+ }, continuousHapticIntervalMs);
26
+ }, [enableHaptics, onHapticTrigger, continuousHapticIntervalMs]);
27
+ const stopContinuousHaptic = useCallback(() => {
28
+ if (hapticIntervalRef.current) {
29
+ clearInterval(hapticIntervalRef.current);
30
+ hapticIntervalRef.current = null;
31
+ }
32
+ }, []);
33
+ return {
34
+ fireDiscreteHaptic,
35
+ startContinuousHaptic,
36
+ stopContinuousHaptic
37
+ };
38
+ }
39
+ //# sourceMappingURL=useHaptics.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useRef","DEFAULTS","useHaptics","enableHaptics","onHapticTrigger","continuousHapticIntervalMs","hapticIntervalRef","fireDiscreteHaptic","startContinuousHaptic","current","setInterval","stopContinuousHaptic","clearInterval"],"sourceRoot":"../../src","sources":["useHaptics.web.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,MAAM,QAAQ,OAAO;AAC3C,SAASC,QAAQ,QAAQ,eAAY;AAcrC;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EACzBC,aAAa;EACbC,eAAe;EACfC,0BAA0B,GAAGJ,QAAQ,CAACI;AACrB,CAAC,EAAc;EAChC,MAAMC,iBAAiB,GAAGN,MAAM,CAC9B,IACF,CAAC;EAED,MAAMO,kBAAkB,GAAGR,WAAW,CAAC,MAAM;IAC3C,IAAI,CAACI,aAAa,IAAI,CAACC,eAAe,EAAE;IACxCA,eAAe,CAAC,MAAM,CAAC;EACzB,CAAC,EAAE,CAACD,aAAa,EAAEC,eAAe,CAAC,CAAC;EAEpC,MAAMI,qBAAqB,GAAGT,WAAW,CAAC,MAAM;IAC9C,IAAI,CAACI,aAAa,IAAI,CAACC,eAAe,EAAE;IACxC,IAAIE,iBAAiB,CAACG,OAAO,EAAE;IAC/BL,eAAe,CAAC,YAAY,CAAC;IAC7BE,iBAAiB,CAACG,OAAO,GAAGC,WAAW,CAAC,MAAM;MAC5CN,eAAe,CAAC,YAAY,CAAC;IAC/B,CAAC,EAAEC,0BAA0B,CAAC;EAChC,CAAC,EAAE,CAACF,aAAa,EAAEC,eAAe,EAAEC,0BAA0B,CAAC,CAAC;EAEhE,MAAMM,oBAAoB,GAAGZ,WAAW,CAAC,MAAM;IAC7C,IAAIO,iBAAiB,CAACG,OAAO,EAAE;MAC7BG,aAAa,CAACN,iBAAiB,CAACG,OAAO,CAAC;MACxCH,iBAAiB,CAACG,OAAO,GAAG,IAAI;IAClC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLF,kBAAkB;IAClBC,qBAAqB;IACrBG;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+
3
+ import { useState, useRef, useCallback, useMemo, useEffect } from 'react';
4
+ import { useWindowDimensions } from 'react-native';
5
+ import { useSharedValue, withDecay, withTiming, useAnimatedReaction, runOnJS } from 'react-native-reanimated';
6
+ import { Gesture } from 'react-native-gesture-handler';
7
+ import { DEFAULTS } from "./defaults.js";
8
+ import { resolveTickRules } from "./presets.js";
9
+ import { resolveTick } from "./tickResolver.js";
10
+ import { formatDateString, normalizeDate, dateToDayOffset, dayOffsetToDate, computeDayRange, useResolvedTheme } from "./utils.js";
11
+ import { useHaptics } from './useHaptics';
12
+ /**
13
+ * Headless Hook encapsulating gesture physics, Reanimated 3 decay/snapping,
14
+ * windowed tick resolution, and haptics for the Ruler Date Picker.
15
+ */
16
+ export function useRulerDatePicker(props = {}) {
17
+ const {
18
+ value,
19
+ defaultValue,
20
+ onChange,
21
+ minDate,
22
+ maxDate,
23
+ ticks = 'calendar',
24
+ tickSpacing = DEFAULTS.tickSpacing,
25
+ tickWidth = DEFAULTS.tickWidth,
26
+ rulerHeight = DEFAULTS.rulerHeight,
27
+ theme: propTheme,
28
+ debounceMs = DEFAULTS.debounceMs,
29
+ haptics = true,
30
+ style
31
+ } = props;
32
+ const bufferTicks = DEFAULTS.bufferTicks;
33
+ const isHapticsEnabled = typeof haptics === 'boolean' ? haptics : haptics?.enabled ?? true;
34
+ const resolvedHapticTrigger = typeof haptics === 'object' ? haptics.onTrigger : undefined;
35
+ const fastSwipeTickThreshold = (typeof haptics === 'object' ? haptics.fastSwipeTickThreshold : undefined) ?? DEFAULTS.fastSwipeTickThreshold;
36
+ const continuousHapticIntervalMs = (typeof haptics === 'object' ? haptics.continuousHapticIntervalMs : undefined) ?? DEFAULTS.continuousHapticIntervalMs;
37
+ const height = style?.height ?? DEFAULTS.height;
38
+
39
+ // ── Resolved Theme ────────────────────────────────────────────────────────
40
+ const theme = useResolvedTheme(propTheme);
41
+
42
+ // ── Resolved Rules ────────────────────────────────────────────────────────
43
+ const rules = useMemo(() => resolveTickRules(ticks), [ticks]);
44
+
45
+ // ── Haptics ───────────────────────────────────────────────────────────────
46
+ const {
47
+ fireDiscreteHaptic,
48
+ startContinuousHaptic,
49
+ stopContinuousHaptic
50
+ } = useHaptics({
51
+ enableHaptics: isHapticsEnabled,
52
+ onHapticTrigger: resolvedHapticTrigger,
53
+ continuousHapticIntervalMs
54
+ });
55
+
56
+ // ── Reference Time (Midnight Today) ───────────────────────────────────────
57
+ const todayTime = useMemo(() => {
58
+ const d = new Date();
59
+ d.setHours(0, 0, 0, 0);
60
+ return d.getTime();
61
+ }, []);
62
+
63
+ // ── Bounds ────────────────────────────────────────────────────────────────
64
+ const {
65
+ minOffset,
66
+ maxOffset
67
+ } = useMemo(() => computeDayRange(todayTime, minDate, maxDate), [todayTime, minDate, maxDate]);
68
+
69
+ // ── Initial Date Calculation ──────────────────────────────────────────────
70
+ const initialDate = useMemo(() => {
71
+ return normalizeDate(value ?? defaultValue ?? new Date());
72
+ // eslint-disable-next-line react-hooks/exhaustive-deps
73
+ }, []);
74
+ const initialOffsetDays = useMemo(() => {
75
+ return dateToDayOffset(initialDate, todayTime);
76
+ // eslint-disable-next-line react-hooks/exhaustive-deps
77
+ }, []);
78
+
79
+ // ── Animated Values ───────────────────────────────────────────────────────
80
+ const translateX = useSharedValue(-initialOffsetDays * tickSpacing);
81
+ const contextX = useSharedValue(0);
82
+ const previousIndex = useSharedValue(-initialOffsetDays);
83
+ const isFastMode = useSharedValue(false);
84
+
85
+ // ── State ─────────────────────────────────────────────────────────────────
86
+ const [selectedDate, setSelectedDate] = useState(initialDate);
87
+ const [selectedDateStr, setSelectedDateStr] = useState(formatDateString(initialDate));
88
+ const [windowCenter, setWindowCenter] = useState(-initialOffsetDays);
89
+ const debounceTimerRef = useRef(null);
90
+ const windowDimensions = useWindowDimensions();
91
+ const width = props.width ?? windowDimensions.width;
92
+ const halfVisible = Math.ceil(width / 2 / tickSpacing);
93
+ const windowSize = halfVisible + bufferTicks;
94
+
95
+ // ── Visible Ticks Resolution ──────────────────────────────────────────────
96
+ const visibleTicks = useMemo(() => {
97
+ const resolved = [];
98
+ const start = Math.max(windowCenter - windowSize, minOffset);
99
+ const end = Math.min(windowCenter + windowSize, maxOffset);
100
+ for (let i = start; i <= end; i++) {
101
+ const d = dayOffsetToDate(i, todayTime);
102
+ const isToday = i === 0;
103
+ const isSelected = formatDateString(d) === selectedDateStr;
104
+ resolved.push(resolveTick({
105
+ date: d,
106
+ offset: i,
107
+ isToday,
108
+ isSelected
109
+ }, rules, theme, tickWidth));
110
+ }
111
+ return resolved;
112
+ }, [windowCenter, windowSize, minOffset, maxOffset, todayTime, selectedDateStr, rules, theme, tickWidth]);
113
+
114
+ // ── Tick Changed Callback ─────────────────────────────────────────────────
115
+ const onTickChanged = useCallback((index, enteringFastMode) => {
116
+ if (enteringFastMode) {
117
+ startContinuousHaptic();
118
+ } else {
119
+ stopContinuousHaptic();
120
+ fireDiscreteHaptic();
121
+ }
122
+ const d = dayOffsetToDate(index, todayTime);
123
+ const dateStr = formatDateString(d);
124
+ setSelectedDate(d);
125
+ setSelectedDateStr(dateStr);
126
+ setWindowCenter(prev => {
127
+ if (Math.abs(index - prev) >= 5) {
128
+ return index;
129
+ }
130
+ return prev;
131
+ });
132
+ if (debounceTimerRef.current) {
133
+ clearTimeout(debounceTimerRef.current);
134
+ }
135
+ debounceTimerRef.current = setTimeout(() => {
136
+ onChange?.(d, dateStr);
137
+ }, debounceMs);
138
+ }, [todayTime, onChange, debounceMs, startContinuousHaptic, stopContinuousHaptic, fireDiscreteHaptic]);
139
+
140
+ // ── Animation Settled Callback ────────────────────────────────────────────
141
+ const onAnimationSettled = useCallback(index => {
142
+ stopContinuousHaptic();
143
+ fireDiscreteHaptic();
144
+ const d = dayOffsetToDate(index, todayTime);
145
+ const dateStr = formatDateString(d);
146
+ setSelectedDate(d);
147
+ setSelectedDateStr(dateStr);
148
+ setWindowCenter(index);
149
+ onChange?.(d, dateStr);
150
+ }, [todayTime, onChange, stopContinuousHaptic, fireDiscreteHaptic]);
151
+
152
+ // ── Animated Reaction ─────────────────────────────────────────────────────
153
+ useAnimatedReaction(() => Math.round(-translateX.value / tickSpacing), (index, prev) => {
154
+ if (index !== prev && index >= minOffset && index <= maxOffset) {
155
+ previousIndex.value = index;
156
+ const ticksSkipped = prev !== null ? Math.abs(index - prev) : 1;
157
+ const shouldBeFast = ticksSkipped > fastSwipeTickThreshold;
158
+ if (shouldBeFast && !isFastMode.value) {
159
+ isFastMode.value = true;
160
+ runOnJS(onTickChanged)(index, true);
161
+ } else if (!shouldBeFast && isFastMode.value) {
162
+ isFastMode.value = false;
163
+ runOnJS(onTickChanged)(index, false);
164
+ } else if (!shouldBeFast) {
165
+ runOnJS(onTickChanged)(index, false);
166
+ }
167
+ if (shouldBeFast && isFastMode.value) {
168
+ runOnJS(onTickChanged)(index, true);
169
+ }
170
+ }
171
+ }, [tickSpacing, minOffset, maxOffset, fastSwipeTickThreshold]);
172
+
173
+ // ── Pan Gesture ───────────────────────────────────────────────────────────
174
+ const panGesture = useMemo(() => {
175
+ return Gesture.Pan().onStart(() => {
176
+ contextX.value = translateX.value;
177
+ }).onUpdate(event => {
178
+ translateX.value = contextX.value + event.translationX;
179
+ }).onEnd(event => {
180
+ translateX.value = withDecay({
181
+ velocity: event.velocityX,
182
+ deceleration: 0.99
183
+ }, finished => {
184
+ if (finished) {
185
+ const maxTranslateX = -minOffset * tickSpacing;
186
+ const minTranslateX = -maxOffset * tickSpacing;
187
+ const clampedX = Math.min(Math.max(translateX.value, minTranslateX), maxTranslateX);
188
+ const snappedIndex = Math.round(clampedX / tickSpacing);
189
+ const snappedX = snappedIndex * tickSpacing;
190
+ translateX.value = withTiming(snappedX, {
191
+ duration: 150
192
+ }, done => {
193
+ if (done) {
194
+ isFastMode.value = false;
195
+ const index = Math.round(-snappedX / tickSpacing);
196
+ runOnJS(onAnimationSettled)(index);
197
+ }
198
+ });
199
+ }
200
+ });
201
+ });
202
+ }, [contextX, translateX, minOffset, maxOffset, tickSpacing, onAnimationSettled, isFastMode]);
203
+
204
+ // ── Programmatic Control ──────────────────────────────────────────────────
205
+ const scrollToDate = useCallback((targetDate, animated = true) => {
206
+ const d = normalizeDate(targetDate);
207
+ const offset = dateToDayOffset(d, todayTime);
208
+ const clampedOffset = Math.max(minOffset, Math.min(offset, maxOffset));
209
+ const targetX = -clampedOffset * tickSpacing;
210
+ stopContinuousHaptic();
211
+ if (animated) {
212
+ translateX.value = withTiming(targetX, {
213
+ duration: 250
214
+ }, done => {
215
+ if (done) {
216
+ runOnJS(onAnimationSettled)(clampedOffset);
217
+ }
218
+ });
219
+ } else {
220
+ translateX.value = targetX;
221
+ onAnimationSettled(clampedOffset);
222
+ }
223
+ }, [todayTime, minOffset, maxOffset, tickSpacing, translateX, stopContinuousHaptic, onAnimationSettled]);
224
+ const resetToToday = useCallback((animated = true) => {
225
+ scrollToDate(new Date(todayTime), animated);
226
+ }, [scrollToDate, todayTime]);
227
+
228
+ // ── Sync with external controlled value ───────────────────────────────────
229
+ const prevValuePropRef = useRef(value);
230
+ useEffect(() => {
231
+ if (value !== undefined && value !== prevValuePropRef.current) {
232
+ prevValuePropRef.current = value;
233
+ const target = normalizeDate(value);
234
+ if (formatDateString(target) !== formatDateString(selectedDate)) {
235
+ scrollToDate(target, true);
236
+ }
237
+ }
238
+ }, [value, selectedDate, scrollToDate]);
239
+ const isTodaySelected = useMemo(() => {
240
+ return selectedDateStr === formatDateString(new Date(todayTime));
241
+ }, [selectedDateStr, todayTime]);
242
+ return {
243
+ translateX,
244
+ panGesture,
245
+ selectedDate,
246
+ selectedDateStr,
247
+ isTodaySelected,
248
+ visibleTicks,
249
+ theme,
250
+ tickSpacing,
251
+ rulerHeight,
252
+ height,
253
+ width,
254
+ minOffset,
255
+ maxOffset,
256
+ scrollToDate,
257
+ resetToToday
258
+ };
259
+ }
260
+ //# sourceMappingURL=useRulerDatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useRef","useCallback","useMemo","useEffect","useWindowDimensions","useSharedValue","withDecay","withTiming","useAnimatedReaction","runOnJS","Gesture","DEFAULTS","resolveTickRules","resolveTick","formatDateString","normalizeDate","dateToDayOffset","dayOffsetToDate","computeDayRange","useResolvedTheme","useHaptics","useRulerDatePicker","props","value","defaultValue","onChange","minDate","maxDate","ticks","tickSpacing","tickWidth","rulerHeight","theme","propTheme","debounceMs","haptics","style","bufferTicks","isHapticsEnabled","enabled","resolvedHapticTrigger","onTrigger","undefined","fastSwipeTickThreshold","continuousHapticIntervalMs","height","rules","fireDiscreteHaptic","startContinuousHaptic","stopContinuousHaptic","enableHaptics","onHapticTrigger","todayTime","d","Date","setHours","getTime","minOffset","maxOffset","initialDate","initialOffsetDays","translateX","contextX","previousIndex","isFastMode","selectedDate","setSelectedDate","selectedDateStr","setSelectedDateStr","windowCenter","setWindowCenter","debounceTimerRef","windowDimensions","width","halfVisible","Math","ceil","windowSize","visibleTicks","resolved","start","max","end","min","i","isToday","isSelected","push","date","offset","onTickChanged","index","enteringFastMode","dateStr","prev","abs","current","clearTimeout","setTimeout","onAnimationSettled","round","ticksSkipped","shouldBeFast","panGesture","Pan","onStart","onUpdate","event","translationX","onEnd","velocity","velocityX","deceleration","finished","maxTranslateX","minTranslateX","clampedX","snappedIndex","snappedX","duration","done","scrollToDate","targetDate","animated","clampedOffset","targetX","resetToToday","prevValuePropRef","target","isTodaySelected"],"sourceRoot":"../../src","sources":["useRulerDatePicker.ts"],"mappings":"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","ignoreList":[]}