react-native-timer-picker 2.6.0 → 2.6.1

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 (181) hide show
  1. package/dist/commonjs/components/DurationScroll/DurationScroll.js +426 -0
  2. package/dist/commonjs/components/DurationScroll/DurationScroll.js.map +1 -0
  3. package/dist/commonjs/components/DurationScroll/index.js +27 -0
  4. package/dist/commonjs/components/DurationScroll/index.js.map +1 -0
  5. package/dist/commonjs/components/DurationScroll/types.js +6 -0
  6. package/dist/commonjs/components/DurationScroll/types.js.map +1 -0
  7. package/dist/commonjs/components/Modal/Modal.js +107 -0
  8. package/dist/commonjs/components/Modal/Modal.js.map +1 -0
  9. package/dist/commonjs/components/Modal/index.js +27 -0
  10. package/dist/commonjs/components/Modal/index.js.map +1 -0
  11. package/dist/commonjs/components/Modal/styles.js +25 -0
  12. package/dist/commonjs/components/Modal/styles.js.map +1 -0
  13. package/dist/commonjs/components/Modal/types.js +6 -0
  14. package/dist/commonjs/components/Modal/types.js.map +1 -0
  15. package/dist/commonjs/components/PickerItem/PickerItem.js +48 -0
  16. package/dist/commonjs/components/PickerItem/PickerItem.js.map +1 -0
  17. package/dist/commonjs/components/PickerItem/index.js +14 -0
  18. package/dist/commonjs/components/PickerItem/index.js.map +1 -0
  19. package/dist/commonjs/components/TimerPicker/TimerPicker.js +266 -0
  20. package/dist/commonjs/components/TimerPicker/TimerPicker.js.map +1 -0
  21. package/dist/commonjs/components/TimerPicker/index.js +39 -0
  22. package/dist/commonjs/components/TimerPicker/index.js.map +1 -0
  23. package/dist/commonjs/components/TimerPicker/styles.js +140 -0
  24. package/dist/commonjs/components/TimerPicker/styles.js.map +1 -0
  25. package/dist/commonjs/components/TimerPicker/types.js +6 -0
  26. package/dist/commonjs/components/TimerPicker/types.js.map +1 -0
  27. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js +173 -0
  28. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
  29. package/dist/commonjs/components/TimerPickerModal/index.js +39 -0
  30. package/dist/commonjs/components/TimerPickerModal/index.js.map +1 -0
  31. package/dist/commonjs/components/TimerPickerModal/styles.js +95 -0
  32. package/dist/commonjs/components/TimerPickerModal/styles.js.map +1 -0
  33. package/dist/commonjs/components/TimerPickerModal/types.js +6 -0
  34. package/dist/commonjs/components/TimerPickerModal/types.js.map +1 -0
  35. package/dist/commonjs/index.js +21 -0
  36. package/dist/commonjs/index.js.map +1 -0
  37. package/dist/commonjs/tests/DurationScroll.test.js +163 -0
  38. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -0
  39. package/dist/commonjs/tests/Modal.test.js +99 -0
  40. package/dist/commonjs/tests/Modal.test.js.map +1 -0
  41. package/dist/commonjs/tests/TimerPicker.test.js +161 -0
  42. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -0
  43. package/dist/commonjs/tests/TimerPickerModal.test.js +276 -0
  44. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -0
  45. package/dist/commonjs/tests/colorToRgba.test.js +176 -0
  46. package/dist/commonjs/tests/colorToRgba.test.js.map +1 -0
  47. package/dist/commonjs/tests/generateNumbers.test.js +350 -0
  48. package/dist/commonjs/tests/generateNumbers.test.js.map +1 -0
  49. package/dist/commonjs/tests/getAdjustedLimit.test.js +324 -0
  50. package/dist/commonjs/tests/getAdjustedLimit.test.js.map +1 -0
  51. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js +424 -0
  52. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  53. package/dist/commonjs/tests/getInitialScrollIndex.test.js +396 -0
  54. package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +1 -0
  55. package/dist/commonjs/tests/getSafeInitialValue.test.js +499 -0
  56. package/dist/commonjs/tests/getSafeInitialValue.test.js.map +1 -0
  57. package/dist/commonjs/tests/padNumber.test.js +301 -0
  58. package/dist/commonjs/tests/padNumber.test.js.map +1 -0
  59. package/dist/commonjs/utils/colorToRgba.js +87 -0
  60. package/dist/commonjs/utils/colorToRgba.js.map +1 -0
  61. package/dist/commonjs/utils/generateNumbers.js +124 -0
  62. package/dist/commonjs/utils/generateNumbers.js.map +1 -0
  63. package/dist/commonjs/utils/getAdjustedLimit.js +58 -0
  64. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -0
  65. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +62 -0
  66. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  67. package/dist/commonjs/utils/getInitialScrollIndex.js +57 -0
  68. package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
  69. package/dist/commonjs/utils/getSafeInitialValue.js +41 -0
  70. package/dist/commonjs/utils/getSafeInitialValue.js.map +1 -0
  71. package/dist/commonjs/utils/padNumber.js +40 -0
  72. package/dist/commonjs/utils/padNumber.js.map +1 -0
  73. package/dist/module/components/DurationScroll/DurationScroll.js +418 -0
  74. package/dist/module/components/DurationScroll/DurationScroll.js.map +1 -0
  75. package/dist/module/components/DurationScroll/index.js +3 -0
  76. package/dist/module/components/DurationScroll/index.js.map +1 -0
  77. package/dist/module/components/DurationScroll/types.js +2 -0
  78. package/dist/module/components/DurationScroll/types.js.map +1 -0
  79. package/dist/module/components/Modal/Modal.js +99 -0
  80. package/dist/module/components/Modal/Modal.js.map +1 -0
  81. package/dist/module/components/Modal/index.js +3 -0
  82. package/dist/module/components/Modal/index.js.map +1 -0
  83. package/dist/module/components/Modal/styles.js +19 -0
  84. package/dist/module/components/Modal/styles.js.map +1 -0
  85. package/dist/module/components/Modal/types.js +2 -0
  86. package/dist/module/components/Modal/types.js.map +1 -0
  87. package/dist/module/components/PickerItem/PickerItem.js +41 -0
  88. package/dist/module/components/PickerItem/PickerItem.js.map +1 -0
  89. package/dist/module/components/PickerItem/index.js +2 -0
  90. package/dist/module/components/PickerItem/index.js.map +1 -0
  91. package/dist/module/components/TimerPicker/TimerPicker.js +258 -0
  92. package/dist/module/components/TimerPicker/TimerPicker.js.map +1 -0
  93. package/dist/module/components/TimerPicker/index.js +4 -0
  94. package/dist/module/components/TimerPicker/index.js.map +1 -0
  95. package/dist/module/components/TimerPicker/styles.js +133 -0
  96. package/dist/module/components/TimerPicker/styles.js.map +1 -0
  97. package/dist/module/components/TimerPicker/types.js +2 -0
  98. package/dist/module/components/TimerPicker/types.js.map +1 -0
  99. package/dist/module/components/TimerPickerModal/TimerPickerModal.js +165 -0
  100. package/dist/module/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
  101. package/dist/module/components/TimerPickerModal/index.js +4 -0
  102. package/dist/module/components/TimerPickerModal/index.js.map +1 -0
  103. package/dist/module/components/TimerPickerModal/styles.js +88 -0
  104. package/dist/module/components/TimerPickerModal/styles.js.map +1 -0
  105. package/dist/module/components/TimerPickerModal/types.js +2 -0
  106. package/dist/module/components/TimerPickerModal/types.js.map +1 -0
  107. package/dist/module/index.js +3 -0
  108. package/dist/module/index.js.map +1 -0
  109. package/dist/module/tests/DurationScroll.test.js +160 -0
  110. package/dist/module/tests/DurationScroll.test.js.map +1 -0
  111. package/dist/module/tests/Modal.test.js +96 -0
  112. package/dist/module/tests/Modal.test.js.map +1 -0
  113. package/dist/module/tests/TimerPicker.test.js +159 -0
  114. package/dist/module/tests/TimerPicker.test.js.map +1 -0
  115. package/dist/module/tests/TimerPickerModal.test.js +273 -0
  116. package/dist/module/tests/TimerPickerModal.test.js.map +1 -0
  117. package/dist/module/tests/colorToRgba.test.js +174 -0
  118. package/dist/module/tests/colorToRgba.test.js.map +1 -0
  119. package/dist/module/tests/generateNumbers.test.js +348 -0
  120. package/dist/module/tests/generateNumbers.test.js.map +1 -0
  121. package/dist/module/tests/getAdjustedLimit.test.js +322 -0
  122. package/dist/module/tests/getAdjustedLimit.test.js.map +1 -0
  123. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js +422 -0
  124. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  125. package/dist/module/tests/getInitialScrollIndex.test.js +394 -0
  126. package/dist/module/tests/getInitialScrollIndex.test.js.map +1 -0
  127. package/dist/module/tests/getSafeInitialValue.test.js +496 -0
  128. package/dist/module/tests/getSafeInitialValue.test.js.map +1 -0
  129. package/dist/module/tests/padNumber.test.js +299 -0
  130. package/dist/module/tests/padNumber.test.js.map +1 -0
  131. package/dist/module/utils/colorToRgba.js +80 -0
  132. package/dist/module/utils/colorToRgba.js.map +1 -0
  133. package/dist/module/utils/generateNumbers.js +117 -0
  134. package/dist/module/utils/generateNumbers.js.map +1 -0
  135. package/dist/module/utils/getAdjustedLimit.js +51 -0
  136. package/dist/module/utils/getAdjustedLimit.js.map +1 -0
  137. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +55 -0
  138. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  139. package/dist/module/utils/getInitialScrollIndex.js +50 -0
  140. package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
  141. package/dist/module/utils/getSafeInitialValue.js +34 -0
  142. package/dist/module/utils/getSafeInitialValue.js.map +1 -0
  143. package/dist/module/utils/padNumber.js +33 -0
  144. package/dist/module/utils/padNumber.js.map +1 -0
  145. package/dist/typescript/components/DurationScroll/DurationScroll.d.ts +4 -0
  146. package/dist/typescript/components/DurationScroll/index.d.ts +2 -0
  147. package/dist/typescript/components/DurationScroll/types.d.ts +70 -0
  148. package/dist/typescript/components/Modal/Modal.d.ts +5 -0
  149. package/dist/typescript/components/Modal/index.d.ts +2 -0
  150. package/dist/typescript/components/Modal/styles.d.ts +17 -0
  151. package/dist/typescript/components/Modal/types.d.ts +16 -0
  152. package/dist/typescript/components/PickerItem/PickerItem.d.ts +19 -0
  153. package/dist/typescript/components/PickerItem/index.d.ts +1 -0
  154. package/dist/typescript/components/TimerPicker/TimerPicker.d.ts +4 -0
  155. package/dist/typescript/components/TimerPicker/index.d.ts +3 -0
  156. package/dist/typescript/components/TimerPicker/styles.d.ts +1583 -0
  157. package/dist/typescript/components/TimerPicker/types.d.ts +91 -0
  158. package/dist/typescript/components/TimerPickerModal/TimerPickerModal.d.ts +4 -0
  159. package/dist/typescript/components/TimerPickerModal/index.d.ts +3 -0
  160. package/dist/typescript/components/TimerPickerModal/styles.d.ts +952 -0
  161. package/dist/typescript/components/TimerPickerModal/types.d.ts +56 -0
  162. package/dist/typescript/index.d.ts +4 -0
  163. package/dist/typescript/tests/DurationScroll.test.d.ts +1 -0
  164. package/dist/typescript/tests/Modal.test.d.ts +1 -0
  165. package/dist/typescript/tests/TimerPicker.test.d.ts +1 -0
  166. package/dist/typescript/tests/TimerPickerModal.test.d.ts +1 -0
  167. package/dist/typescript/tests/colorToRgba.test.d.ts +1 -0
  168. package/dist/typescript/tests/generateNumbers.test.d.ts +1 -0
  169. package/dist/typescript/tests/getAdjustedLimit.test.d.ts +1 -0
  170. package/dist/typescript/tests/getDurationAndIndexFromScrollOffset.test.d.ts +1 -0
  171. package/dist/typescript/tests/getInitialScrollIndex.test.d.ts +1 -0
  172. package/dist/typescript/tests/getSafeInitialValue.test.d.ts +1 -0
  173. package/dist/typescript/tests/padNumber.test.d.ts +1 -0
  174. package/dist/typescript/utils/colorToRgba.d.ts +38 -0
  175. package/dist/typescript/utils/generateNumbers.d.ts +80 -0
  176. package/dist/typescript/utils/getAdjustedLimit.d.ts +30 -0
  177. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +49 -0
  178. package/dist/typescript/utils/getInitialScrollIndex.d.ts +46 -0
  179. package/dist/typescript/utils/getSafeInitialValue.d.ts +38 -0
  180. package/dist/typescript/utils/padNumber.d.ts +28 -0
  181. package/package.json +3 -2
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _colorToRgba = require("../../utils/colorToRgba");
10
+ var _generateNumbers = require("../../utils/generateNumbers");
11
+ var _getAdjustedLimit = require("../../utils/getAdjustedLimit");
12
+ var _getDurationAndIndexFromScrollOffset = require("../../utils/getDurationAndIndexFromScrollOffset");
13
+ var _getInitialScrollIndex = require("../../utils/getInitialScrollIndex");
14
+ var _PickerItem = _interopRequireDefault(require("../PickerItem"));
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
17
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ const keyExtractor = (item, index) => index.toString();
20
+ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
21
+ const {
22
+ aggressivelyGetLatestDuration,
23
+ allowFontScaling = false,
24
+ amLabel,
25
+ Audio,
26
+ clickSoundAsset,
27
+ decelerationRate = 0.88,
28
+ disableInfiniteScroll = false,
29
+ FlatList = _reactNative.FlatList,
30
+ Haptics,
31
+ initialValue = 0,
32
+ interval,
33
+ is12HourPicker,
34
+ isDisabled,
35
+ label,
36
+ limit,
37
+ LinearGradient,
38
+ MaskedView,
39
+ maximumValue,
40
+ onDurationChange,
41
+ padNumbersWithZero = false,
42
+ padWithNItems,
43
+ pickerColumnWidth,
44
+ pickerFeedback,
45
+ pickerGradientOverlayProps,
46
+ pickerLabelGap,
47
+ pmLabel,
48
+ repeatNumbersNTimes = 3,
49
+ repeatNumbersNTimesNotExplicitlySet,
50
+ selectedValue,
51
+ styles,
52
+ testID
53
+ } = props;
54
+ const labelPositionStyle = (0, _react.useMemo)(() => {
55
+ // When the style already has an explicit `left` (from legacy percentage system or
56
+ // user override), don't apply pixel-based positioning.
57
+ if (styles.pickerLabelContainer.left != null) {
58
+ return undefined;
59
+ }
60
+ const gap = pickerLabelGap ?? 6;
61
+ const fontSize = styles.pickerItem.fontSize ?? 25;
62
+ const maxDigitCount = Math.max(2, String(maximumValue).length);
63
+ const halfNumberWidth = maxDigitCount * fontSize * 0.55 / 2;
64
+ return {
65
+ left: "50%",
66
+ marginLeft: halfNumberWidth + gap
67
+ };
68
+ }, [maximumValue, pickerLabelGap, styles.pickerItem.fontSize, styles.pickerLabelContainer.left]);
69
+ const numberOfItems = (0, _react.useMemo)(() => {
70
+ // guard against negative maximum values
71
+ if (maximumValue < 0) {
72
+ return 1;
73
+ }
74
+ return Math.floor(maximumValue / interval) + 1;
75
+ }, [interval, maximumValue]);
76
+ const safeRepeatNumbersNTimes = (0, _react.useMemo)(() => {
77
+ // do not repeat numbers if there is only one option
78
+ if (numberOfItems === 1) {
79
+ return 1;
80
+ }
81
+ if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {
82
+ return 2;
83
+ } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {
84
+ return 1;
85
+ }
86
+
87
+ // if this variable is not explicitly set, we calculate a reasonable value based on
88
+ // the number of items in the picker, avoiding regular jumps up/down the list
89
+ // whilst avoiding rendering too many items in the picker
90
+ if (repeatNumbersNTimesNotExplicitlySet) {
91
+ return Math.max(Math.round(180 / numberOfItems), 1);
92
+ }
93
+ return Math.round(repeatNumbersNTimes);
94
+ }, [disableInfiniteScroll, numberOfItems, repeatNumbersNTimes, repeatNumbersNTimesNotExplicitlySet]);
95
+ const numbersForFlatList = (0, _react.useMemo)(() => {
96
+ if (is12HourPicker) {
97
+ return (0, _generateNumbers.generate12HourNumbers)({
98
+ disableInfiniteScroll,
99
+ interval,
100
+ padNumbersWithZero,
101
+ padWithNItems,
102
+ repeatNTimes: safeRepeatNumbersNTimes
103
+ });
104
+ }
105
+ return (0, _generateNumbers.generateNumbers)(numberOfItems, {
106
+ disableInfiniteScroll,
107
+ interval,
108
+ padNumbersWithZero,
109
+ padWithNItems,
110
+ repeatNTimes: safeRepeatNumbersNTimes
111
+ });
112
+ }, [disableInfiniteScroll, is12HourPicker, interval, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
113
+ const initialScrollIndex = (0, _react.useMemo)(() => (0, _getInitialScrollIndex.getInitialScrollIndex)({
114
+ disableInfiniteScroll,
115
+ interval,
116
+ numberOfItems,
117
+ padWithNItems,
118
+ repeatNumbersNTimes: safeRepeatNumbersNTimes,
119
+ value: initialValue
120
+ }), [disableInfiniteScroll, initialValue, interval, numberOfItems, padWithNItems, safeRepeatNumbersNTimes]);
121
+ const adjustedLimited = (0, _react.useMemo)(() => (0, _getAdjustedLimit.getAdjustedLimit)(limit, numberOfItems, interval), [interval, limit, numberOfItems]);
122
+ const numberOfItemsToShow = 1 + padWithNItems * 2;
123
+
124
+ // keep track of the latest duration as it scrolls
125
+ const latestDuration = (0, _react.useRef)(0);
126
+ // keep track of the last index scrolled past for haptic/audio feedback
127
+ const lastFeedbackIndex = (0, _react.useRef)(0);
128
+ const flatListRef = (0, _react.useRef)(null);
129
+ const [clickSound, setClickSound] = (0, _react.useState)(null);
130
+ (0, _react.useEffect)(() => {
131
+ // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version
132
+
133
+ // preload the sound when the component mounts
134
+ let soundInstance = null;
135
+ const loadSound = async () => {
136
+ if (!Audio) {
137
+ return;
138
+ }
139
+ try {
140
+ const {
141
+ sound: newSound
142
+ } = await Audio.Sound.createAsync(clickSoundAsset ?? {
143
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
144
+ // in some environments when including mp3 in library)
145
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
146
+ }, {
147
+ shouldPlay: false
148
+ });
149
+ soundInstance = newSound;
150
+ setClickSound(newSound);
151
+ } catch (error) {
152
+ console.warn("Failed to load click sound:", error);
153
+ }
154
+ };
155
+ loadSound();
156
+ return () => {
157
+ var _soundInstance;
158
+ // unload sound when component unmounts
159
+ (_soundInstance = soundInstance) === null || _soundInstance === void 0 || _soundInstance.unloadAsync();
160
+ };
161
+ // eslint-disable-next-line react-hooks/exhaustive-deps
162
+ }, [Audio]);
163
+ const playClickSound = (0, _react.useCallback)(async () => {
164
+ if (!clickSound) return;
165
+ try {
166
+ await clickSound.replayAsync();
167
+ } catch (error) {
168
+ console.warn("Failed to play click sound:", error);
169
+ }
170
+ }, [clickSound]);
171
+ const renderItem = (0, _react.useCallback)(({
172
+ item
173
+ }) => /*#__PURE__*/_react.default.createElement(_PickerItem.default, {
174
+ adjustedLimitedMax: adjustedLimited.max,
175
+ adjustedLimitedMin: adjustedLimited.min,
176
+ allowFontScaling: allowFontScaling,
177
+ amLabel: amLabel,
178
+ is12HourPicker: is12HourPicker,
179
+ item: item,
180
+ pickerAmPmPositionStyle: labelPositionStyle,
181
+ pmLabel: pmLabel,
182
+ selectedValue: selectedValue,
183
+ styles: styles
184
+ }), [adjustedLimited.max, adjustedLimited.min, allowFontScaling, amLabel, is12HourPicker, labelPositionStyle, pmLabel, selectedValue, styles]);
185
+ const onScroll = (0, _react.useCallback)(e => {
186
+ // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback
187
+ // it is used to ensure that the modal gets the latest duration on clicking
188
+ // the confirm button, even if the scrollview is still scrolling
189
+ if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {
190
+ return;
191
+ }
192
+ if (aggressivelyGetLatestDuration) {
193
+ const newValues = (0, _getDurationAndIndexFromScrollOffset.getDurationAndIndexFromScrollOffset)({
194
+ disableInfiniteScroll,
195
+ interval,
196
+ itemHeight: styles.pickerItemContainer.height,
197
+ numberOfItems,
198
+ padWithNItems,
199
+ yContentOffset: e.nativeEvent.contentOffset.y
200
+ });
201
+ if (newValues.duration !== latestDuration.current) {
202
+ // check limits
203
+ if (newValues.duration > adjustedLimited.max) {
204
+ newValues.duration = adjustedLimited.max;
205
+ } else if (newValues.duration < adjustedLimited.min) {
206
+ newValues.duration = adjustedLimited.min;
207
+ }
208
+ latestDuration.current = newValues.duration;
209
+ }
210
+ }
211
+ if (pickerFeedback || Haptics || Audio) {
212
+ const feedbackIndex = Math.round((e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) / styles.pickerItemContainer.height);
213
+ if (feedbackIndex !== lastFeedbackIndex.current) {
214
+ // this check stops the feedback firing when the component mounts
215
+ if (lastFeedbackIndex.current) {
216
+ // fire haptic feedback if available
217
+ try {
218
+ Haptics === null || Haptics === void 0 || Haptics.selectionAsync();
219
+ } catch {
220
+ // do nothing
221
+ }
222
+
223
+ // play click sound if available
224
+ try {
225
+ playClickSound();
226
+ } catch {
227
+ // do nothing
228
+ }
229
+
230
+ // fire custom feedback if available
231
+ try {
232
+ pickerFeedback === null || pickerFeedback === void 0 || pickerFeedback();
233
+ } catch {
234
+ // do nothing
235
+ }
236
+ }
237
+ lastFeedbackIndex.current = feedbackIndex;
238
+ }
239
+ }
240
+ },
241
+ // eslint-disable-next-line react-hooks/exhaustive-deps
242
+ [adjustedLimited.max, adjustedLimited.min, aggressivelyGetLatestDuration, playClickSound, disableInfiniteScroll, interval, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
243
+ const onMomentumScrollEnd = (0, _react.useCallback)(e => {
244
+ const newValues = (0, _getDurationAndIndexFromScrollOffset.getDurationAndIndexFromScrollOffset)({
245
+ disableInfiniteScroll,
246
+ interval,
247
+ itemHeight: styles.pickerItemContainer.height,
248
+ numberOfItems,
249
+ padWithNItems,
250
+ yContentOffset: e.nativeEvent.contentOffset.y
251
+ });
252
+
253
+ // check limits
254
+ if (newValues.duration > adjustedLimited.max) {
255
+ var _flatListRef$current;
256
+ const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);
257
+ (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
258
+ animated: true,
259
+ index:
260
+ // guard against scrolling beyond end of list
261
+ targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1
262
+ }); // scroll down to max
263
+ newValues.duration = adjustedLimited.max;
264
+ } else if (newValues.duration < adjustedLimited.min) {
265
+ var _flatListRef$current2;
266
+ const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);
267
+ (_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
268
+ animated: true,
269
+ index:
270
+ // guard against scrolling beyond end of list
271
+ targetScrollIndex <= numbersForFlatList.length - 1 ? targetScrollIndex : adjustedLimited.min
272
+ }); // scroll up to min
273
+ newValues.duration = adjustedLimited.min;
274
+ }
275
+ onDurationChange(newValues.duration);
276
+ }, [disableInfiniteScroll, interval, styles.pickerItemContainer.height, numberOfItems, padWithNItems, adjustedLimited.max, adjustedLimited.min, onDurationChange, numbersForFlatList.length]);
277
+ const onViewableItemsChanged = (0, _react.useCallback)(({
278
+ viewableItems
279
+ }) => {
280
+ var _viewableItems$, _viewableItems$2;
281
+ if (numberOfItems === 1) {
282
+ return;
283
+ }
284
+ if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
285
+ var _flatListRef$current3;
286
+ (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
287
+ animated: false,
288
+ index: viewableItems[0].index + numberOfItems
289
+ });
290
+ } else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)) {
291
+ var _flatListRef$current4;
292
+ (_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
293
+ animated: false,
294
+ index: viewableItems[0].index - numberOfItems
295
+ });
296
+ }
297
+ }, [numberOfItems, safeRepeatNumbersNTimes]);
298
+ const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = (0, _react.useState)(!disableInfiniteScroll ? [{
299
+ onViewableItemsChanged: onViewableItemsChanged,
300
+ viewabilityConfig: {
301
+ viewAreaCoveragePercentThreshold: 0
302
+ }
303
+ }] : undefined);
304
+ const [flatListRenderKey, setFlatListRenderKey] = (0, _react.useState)(0);
305
+ const initialRender = (0, _react.useRef)(true);
306
+ (0, _react.useEffect)(() => {
307
+ // don't run on first render
308
+ if (initialRender.current) {
309
+ initialRender.current = false;
310
+ return;
311
+ }
312
+
313
+ // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs
314
+ // which requires the FlatList to be remounted, hence the increase of the FlatList key
315
+ setFlatListRenderKey(prev => prev + 1);
316
+ setViewabilityConfigCallbackPairs(!disableInfiniteScroll ? [{
317
+ onViewableItemsChanged: onViewableItemsChanged,
318
+ viewabilityConfig: {
319
+ viewAreaCoveragePercentThreshold: 0
320
+ }
321
+ }] : undefined);
322
+ }, [disableInfiniteScroll, onViewableItemsChanged]);
323
+ const getItemLayout = (0, _react.useCallback)((_, index) => ({
324
+ index,
325
+ length: styles.pickerItemContainer.height,
326
+ offset: styles.pickerItemContainer.height * index
327
+ }), [styles.pickerItemContainer.height]);
328
+ (0, _react.useImperativeHandle)(ref, () => ({
329
+ latestDuration: latestDuration,
330
+ reset: options => {
331
+ var _flatListRef$current5;
332
+ (_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
333
+ animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
334
+ index: initialScrollIndex
335
+ });
336
+ },
337
+ setValue: (value, options) => {
338
+ var _flatListRef$current6;
339
+ (_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
340
+ animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
341
+ index: (0, _getInitialScrollIndex.getInitialScrollIndex)({
342
+ disableInfiniteScroll,
343
+ interval,
344
+ numberOfItems,
345
+ padWithNItems,
346
+ repeatNumbersNTimes: safeRepeatNumbersNTimes,
347
+ value: value
348
+ })
349
+ });
350
+ }
351
+ }));
352
+ const renderContent = (0, _react.useMemo)(() => {
353
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(FlatList, {
354
+ key: flatListRenderKey,
355
+ ref: flatListRef,
356
+ contentContainerStyle: styles.durationScrollFlatListContentContainer,
357
+ data: numbersForFlatList,
358
+ decelerationRate: decelerationRate,
359
+ getItemLayout: getItemLayout,
360
+ initialScrollIndex: initialScrollIndex,
361
+ keyExtractor: keyExtractor,
362
+ nestedScrollEnabled: true,
363
+ onMomentumScrollEnd: onMomentumScrollEnd,
364
+ onScroll: onScroll,
365
+ renderItem: renderItem,
366
+ scrollEnabled: !isDisabled,
367
+ scrollEventThrottle: 16,
368
+ showsVerticalScrollIndicator: false,
369
+ snapToAlignment: "start"
370
+ // used in place of snapToInterval due to bug on Android
371
+ ,
372
+ snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
373
+ style: styles.durationScrollFlatList,
374
+ testID: "duration-scroll-flatlist",
375
+ viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
376
+ windowSize: numberOfItemsToShow
377
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
378
+ pointerEvents: "none",
379
+ style: [styles.pickerLabelContainer, labelPositionStyle]
380
+ }, typeof label === "string" ? /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
381
+ allowFontScaling: allowFontScaling,
382
+ style: styles.pickerLabel
383
+ }, label) : label ?? null));
384
+ }, [FlatList, allowFontScaling, decelerationRate, flatListRenderKey, getItemLayout, initialScrollIndex, isDisabled, label, labelPositionStyle, numberOfItemsToShow, numbersForFlatList, onMomentumScrollEnd, onScroll, renderItem, styles.durationScrollFlatList, styles.durationScrollFlatListContentContainer, styles.pickerItemContainer.height, styles.pickerLabel, styles.pickerLabelContainer, viewabilityConfigCallbackPairs]);
385
+ const renderLinearGradient = (0, _react.useMemo)(() => {
386
+ if (!LinearGradient) {
387
+ return null;
388
+ }
389
+ let colors;
390
+ if (MaskedView) {
391
+ // if using masked view, we only care about the opacity
392
+ colors = ["rgba(0,0,0,0)", "rgba(0,0,0,1)", "rgba(0,0,0,1)", "rgba(0,0,0,0)"];
393
+ } else {
394
+ const backgroundColor = styles.pickerContainer.backgroundColor ?? "white";
395
+ const transparentBackgroundColor = (0, _colorToRgba.colorToRgba)({
396
+ color: backgroundColor,
397
+ opacity: 0
398
+ });
399
+ colors = [backgroundColor, transparentBackgroundColor, transparentBackgroundColor, backgroundColor];
400
+ }
401
+
402
+ // calculate the gradient height to cover the top item and bottom item
403
+ const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;
404
+ return /*#__PURE__*/_react.default.createElement(LinearGradient, _extends({
405
+ colors: colors,
406
+ locations: [0, gradientHeight, 1 - gradientHeight, 1],
407
+ pointerEvents: "none",
408
+ style: styles.pickerGradientOverlay
409
+ }, pickerGradientOverlayProps));
410
+ }, [LinearGradient, MaskedView, padWithNItems, pickerGradientOverlayProps, styles.pickerContainer.backgroundColor, styles.pickerGradientOverlay]);
411
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
412
+ pointerEvents: isDisabled ? "none" : undefined,
413
+ style: [styles.durationScrollFlatListContainer, pickerColumnWidth != null && {
414
+ flex: 0,
415
+ width: pickerColumnWidth
416
+ }, {
417
+ height: styles.pickerItemContainer.height * numberOfItemsToShow
418
+ }, isDisabled && styles.disabledPickerContainer],
419
+ testID: testID
420
+ }, MaskedView ? /*#__PURE__*/_react.default.createElement(MaskedView, {
421
+ maskElement: renderLinearGradient,
422
+ style: [styles.maskedView]
423
+ }, renderContent) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, renderContent, renderLinearGradient));
424
+ });
425
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(DurationScroll);
426
+ //# sourceMappingURL=DurationScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getDurationAndIndexFromScrollOffset","_getInitialScrollIndex","_PickerItem","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","keyExtractor","item","index","toString","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","clickSoundAsset","decelerationRate","disableInfiniteScroll","FlatList","RNFlatList","Haptics","initialValue","interval","is12HourPicker","isDisabled","label","limit","LinearGradient","MaskedView","maximumValue","onDurationChange","padNumbersWithZero","padWithNItems","pickerColumnWidth","pickerFeedback","pickerGradientOverlayProps","pickerLabelGap","pmLabel","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","selectedValue","styles","testID","labelPositionStyle","useMemo","pickerLabelContainer","left","undefined","gap","fontSize","pickerItem","maxDigitCount","Math","max","String","halfNumberWidth","marginLeft","numberOfItems","floor","safeRepeatNumbersNTimes","isNaN","round","numbersForFlatList","generate12HourNumbers","repeatNTimes","generateNumbers","initialScrollIndex","getInitialScrollIndex","value","adjustedLimited","getAdjustedLimit","numberOfItemsToShow","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","soundInstance","loadSound","sound","newSound","Sound","createAsync","uri","shouldPlay","error","console","warn","_soundInstance","unloadAsync","playClickSound","useCallback","replayAsync","renderItem","createElement","adjustedLimitedMax","adjustedLimitedMin","min","pickerAmPmPositionStyle","onScroll","newValues","getDurationAndIndexFromScrollOffset","itemHeight","pickerItemContainer","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","scrollToIndex","animated","_flatListRef$current2","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","viewabilityConfigCallbackPairs","setViewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","flatListRenderKey","setFlatListRenderKey","initialRender","prev","getItemLayout","_","offset","useImperativeHandle","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","renderContent","Fragment","key","contentContainerStyle","durationScrollFlatListContentContainer","data","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","style","durationScrollFlatList","windowSize","View","pointerEvents","Text","pickerLabel","renderLinearGradient","colors","backgroundColor","pickerContainer","transparentBackgroundColor","colorToRgba","color","opacity","gradientHeight","locations","pickerGradientOverlay","durationScrollFlatListContainer","flex","width","disabledPickerContainer","maskElement","maskedView","_default","exports","React","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useMemo,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type { ViewabilityConfigCallbackPairs, FlatListProps } from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport { generate12HourNumbers, generateNumbers } from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\nimport PickerItem from \"../PickerItem\";\nimport type { DurationScrollProps, DurationScrollRef, ExpoAvAudioInstance } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst keyExtractor = (item: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>((props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n clickSoundAsset,\n decelerationRate = 0.88,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n interval,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n MaskedView,\n maximumValue,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerColumnWidth,\n pickerFeedback,\n pickerGradientOverlayProps,\n pickerLabelGap,\n pmLabel,\n repeatNumbersNTimes = 3,\n repeatNumbersNTimesNotExplicitlySet,\n selectedValue,\n styles,\n testID,\n } = props;\n\n const labelPositionStyle = useMemo(() => {\n // When the style already has an explicit `left` (from legacy percentage system or\n // user override), don't apply pixel-based positioning.\n if (styles.pickerLabelContainer.left != null) {\n return undefined;\n }\n\n const gap = pickerLabelGap ?? 6;\n const fontSize = styles.pickerItem.fontSize ?? 25;\n const maxDigitCount = Math.max(2, String(maximumValue).length);\n const halfNumberWidth = (maxDigitCount * fontSize * 0.55) / 2;\n\n return {\n left: \"50%\" as const,\n marginLeft: halfNumberWidth + gap,\n };\n }, [maximumValue, pickerLabelGap, styles.pickerItem.fontSize, styles.pickerLabelContainer.left]);\n\n const numberOfItems = useMemo(() => {\n // guard against negative maximum values\n if (maximumValue < 0) {\n return 1;\n }\n\n return Math.floor(maximumValue / interval) + 1;\n }, [interval, maximumValue]);\n\n const safeRepeatNumbersNTimes = useMemo(() => {\n // do not repeat numbers if there is only one option\n if (numberOfItems === 1) {\n return 1;\n }\n\n if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {\n return 2;\n } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {\n return 1;\n }\n\n // if this variable is not explicitly set, we calculate a reasonable value based on\n // the number of items in the picker, avoiding regular jumps up/down the list\n // whilst avoiding rendering too many items in the picker\n if (repeatNumbersNTimesNotExplicitlySet) {\n return Math.max(Math.round(180 / numberOfItems), 1);\n }\n\n return Math.round(repeatNumbersNTimes);\n }, [\n disableInfiniteScroll,\n numberOfItems,\n repeatNumbersNTimes,\n repeatNumbersNTimesNotExplicitlySet,\n ]);\n\n const numbersForFlatList = useMemo(() => {\n if (is12HourPicker) {\n return generate12HourNumbers({\n disableInfiniteScroll,\n interval,\n padNumbersWithZero,\n padWithNItems,\n repeatNTimes: safeRepeatNumbersNTimes,\n });\n }\n\n return generateNumbers(numberOfItems, {\n disableInfiniteScroll,\n interval,\n padNumbersWithZero,\n padWithNItems,\n repeatNTimes: safeRepeatNumbersNTimes,\n });\n }, [\n disableInfiniteScroll,\n is12HourPicker,\n interval,\n numberOfItems,\n padNumbersWithZero,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]);\n\n const initialScrollIndex = useMemo(\n () =>\n getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: initialValue,\n }),\n [\n disableInfiniteScroll,\n initialValue,\n interval,\n numberOfItems,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]\n );\n\n const adjustedLimited = useMemo(\n () => getAdjustedLimit(limit, numberOfItems, interval),\n [interval, limit, numberOfItems]\n );\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<ExpoAvAudioInstance | null>(null);\n\n useEffect(() => {\n // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version\n\n // preload the sound when the component mounts\n let soundInstance: ExpoAvAudioInstance | null = null;\n\n const loadSound = async () => {\n if (!Audio) {\n return;\n }\n\n try {\n const { sound: newSound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n soundInstance = newSound;\n setClickSound(newSound);\n } catch (error) {\n console.warn(\"Failed to load click sound:\", error);\n }\n };\n\n loadSound();\n\n return () => {\n // unload sound when component unmounts\n soundInstance?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const playClickSound = useCallback(async () => {\n if (!clickSound) return;\n\n try {\n await clickSound.replayAsync();\n } catch (error) {\n console.warn(\"Failed to play click sound:\", error);\n }\n }, [clickSound]);\n\n const renderItem = useCallback<NonNullable<FlatListProps<string>[\"renderItem\"]>>(\n ({ item }) => (\n <PickerItem\n adjustedLimitedMax={adjustedLimited.max}\n adjustedLimitedMin={adjustedLimited.min}\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n is12HourPicker={is12HourPicker}\n item={item}\n pickerAmPmPositionStyle={labelPositionStyle}\n pmLabel={pmLabel}\n selectedValue={selectedValue}\n styles={styles}\n />\n ),\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n labelPositionStyle,\n pmLabel,\n selectedValue,\n styles,\n ]\n );\n\n const onScroll = useCallback<NonNullable<FlatListProps<string>[\"onScroll\"]>>(\n (e) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n if (newValues.duration !== latestDuration.current) {\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n newValues.duration = adjustedLimited.min;\n }\n\n latestDuration.current = newValues.duration;\n }\n }\n\n if (pickerFeedback || Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n try {\n Haptics?.selectionAsync();\n } catch {\n // do nothing\n }\n\n // play click sound if available\n try {\n playClickSound();\n } catch {\n // do nothing\n }\n\n // fire custom feedback if available\n try {\n pickerFeedback?.();\n } catch {\n // do nothing\n }\n }\n\n lastFeedbackIndex.current = feedbackIndex;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n adjustedLimited.max,\n adjustedLimited.min,\n aggressivelyGetLatestDuration,\n playClickSound,\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback<\n NonNullable<FlatListProps<string>[\"onMomentumScrollEnd\"]>\n >(\n (e) => {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= numbersForFlatList.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newValues.duration = adjustedLimited.min;\n }\n\n onDurationChange(newValues.duration);\n },\n [\n disableInfiniteScroll,\n interval,\n styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n adjustedLimited.max,\n adjustedLimited.min,\n onDurationChange,\n numbersForFlatList.length,\n ]\n );\n\n const onViewableItemsChanged = useCallback<\n NonNullable<FlatListProps<string>[\"onViewableItemsChanged\"]>\n >(\n ({ viewableItems }) => {\n if (numberOfItems === 1) {\n return;\n }\n\n if (viewableItems[0]?.index && viewableItems[0].index < numberOfItems * 0.5) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems, safeRepeatNumbersNTimes]\n );\n\n const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState<\n ViewabilityConfigCallbackPairs | undefined\n >(\n !disableInfiniteScroll\n ? [\n {\n onViewableItemsChanged: onViewableItemsChanged,\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n },\n ]\n : undefined\n );\n\n const [flatListRenderKey, setFlatListRenderKey] = useState(0);\n\n const initialRender = useRef(true);\n\n useEffect(() => {\n // don't run on first render\n if (initialRender.current) {\n initialRender.current = false;\n return;\n }\n\n // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs\n // which requires the FlatList to be remounted, hence the increase of the FlatList key\n setFlatListRenderKey((prev) => prev + 1);\n setViewabilityConfigCallbackPairs(\n !disableInfiniteScroll\n ? [\n {\n onViewableItemsChanged: onViewableItemsChanged,\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n },\n ]\n : undefined\n );\n }, [disableInfiniteScroll, onViewableItemsChanged]);\n\n const getItemLayout = useCallback<NonNullable<FlatListProps<string>[\"getItemLayout\"]>>(\n (_, index) => ({\n index,\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n useImperativeHandle(ref, () => ({\n latestDuration: latestDuration,\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: value,\n }),\n });\n },\n }));\n\n const renderContent = useMemo(() => {\n return (\n <>\n <FlatList\n key={flatListRenderKey}\n ref={flatListRef}\n contentContainerStyle={styles.durationScrollFlatListContentContainer}\n data={numbersForFlatList}\n decelerationRate={decelerationRate}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={keyExtractor}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToInterval due to bug on Android\n snapToOffsets={[...Array(numbersForFlatList.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n style={styles.durationScrollFlatList}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={viewabilityConfigCallbackPairs}\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" style={[styles.pickerLabelContainer, labelPositionStyle]}>\n {typeof label === \"string\" ? (\n <Text allowFontScaling={allowFontScaling} style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n </>\n );\n }, [\n FlatList,\n allowFontScaling,\n decelerationRate,\n flatListRenderKey,\n getItemLayout,\n initialScrollIndex,\n isDisabled,\n label,\n labelPositionStyle,\n numberOfItemsToShow,\n numbersForFlatList,\n onMomentumScrollEnd,\n onScroll,\n renderItem,\n styles.durationScrollFlatList,\n styles.durationScrollFlatListContentContainer,\n styles.pickerItemContainer.height,\n styles.pickerLabel,\n styles.pickerLabelContainer,\n viewabilityConfigCallbackPairs,\n ]);\n\n const renderLinearGradient = useMemo(() => {\n if (!LinearGradient) {\n return null;\n }\n\n let colors: string[];\n\n if (MaskedView) {\n // if using masked view, we only care about the opacity\n colors = [\"rgba(0,0,0,0)\", \"rgba(0,0,0,1)\", \"rgba(0,0,0,1)\", \"rgba(0,0,0,0)\"];\n } else {\n const backgroundColor = styles.pickerContainer.backgroundColor ?? \"white\";\n const transparentBackgroundColor = colorToRgba({\n color: backgroundColor,\n opacity: 0,\n });\n colors = [\n backgroundColor,\n transparentBackgroundColor,\n transparentBackgroundColor,\n backgroundColor,\n ];\n }\n\n // calculate the gradient height to cover the top item and bottom item\n const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;\n\n return (\n <LinearGradient\n colors={colors}\n locations={[0, gradientHeight, 1 - gradientHeight, 1]}\n pointerEvents=\"none\"\n style={styles.pickerGradientOverlay}\n {...pickerGradientOverlayProps}\n />\n );\n }, [\n LinearGradient,\n MaskedView,\n padWithNItems,\n pickerGradientOverlayProps,\n styles.pickerContainer.backgroundColor,\n styles.pickerGradientOverlay,\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n styles.durationScrollFlatListContainer,\n pickerColumnWidth != null && { flex: 0, width: pickerColumnWidth },\n {\n height: styles.pickerItemContainer.height * numberOfItemsToShow,\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}\n >\n {MaskedView ? (\n <MaskedView maskElement={renderLinearGradient} style={[styles.maskedView]}>\n {renderContent}\n </MaskedView>\n ) : (\n <>\n {renderContent}\n {renderLinearGradient}\n </>\n )}\n </View>\n );\n});\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {};
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _DurationScroll.default;
11
+ }
12
+ });
13
+ var _DurationScroll = _interopRequireDefault(require("./DurationScroll"));
14
+ var _types = require("./types");
15
+ Object.keys(_types).forEach(function (key) {
16
+ if (key === "default" || key === "__esModule") return;
17
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
18
+ if (key in exports && exports[key] === _types[key]) return;
19
+ Object.defineProperty(exports, key, {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _types[key];
23
+ }
24
+ });
25
+ });
26
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_DurationScroll","_interopRequireDefault","require","_types","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","e","__esModule","default"],"sources":["index.ts"],"sourcesContent":["export { default } from \"./DurationScroll\";\n\nexport * from \"./types\";\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAAwB,SAAAN,uBAAAe,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\nimport { type RefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport interface DurationScrollProps {\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n Audio?: any;\n clickSoundAsset?: SoundAsset;\n decelerationRate?: number | \"normal\" | \"fast\";\n disableInfiniteScroll?: boolean;\n FlatList?: any;\n Haptics?: any;\n initialValue?: number;\n interval: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: Limit;\n LinearGradient?: any;\n MaskedView?: any;\n maximumValue: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerColumnWidth?: number;\n pickerFeedback?: () => void | Promise<void>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pickerLabelGap?: number;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n repeatNumbersNTimesNotExplicitlySet: boolean;\n selectedValue?: number;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n}\n\nexport interface DurationScrollRef {\n latestDuration: RefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type Limit = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAsset =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n\nexport type ExpoAvAudioInstance = {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}