react-native-timer-picker 2.0.3 → 2.1.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.
package/README.md CHANGED
@@ -22,7 +22,7 @@ Includes iOS-style haptic and audio feedback 🍏
22
22
  - [Examples 😎](#examples-)
23
23
  - [Timer Picker Modal (Dark Mode) 🌚](#timer-picker-modal-dark-mode-)
24
24
  - [Timer Picker Modal (Light Mode) 🌞](#timer-picker-modal-light-mode-)
25
- - [Timer Picker with Customisation (Dark Mode) 🌒](#timer-picker-with-customisation-dark-mode-)
25
+ - [Timer Picker with Transparent Fade-Out (Dark Mode) 🌒](#timer-picker-with-transparent-fade-out-dark-mode-)
26
26
  - [Timer Picker with Customisation (Light Mode) 🌔](#timer-picker-with-customisation-light-mode-)
27
27
  - [Props 💅](#props-)
28
28
  - [TimerPicker ⏲️](#timerpicker-️)
@@ -60,7 +60,7 @@ Includes iOS-style haptic and audio feedback 🍏
60
60
 
61
61
  ## Peer Dependencies 👶
62
62
 
63
- This component will work in your React Native Project **_without any peer dependencies_**.
63
+ This component will work in your React Native Project **_without any peer dependencies_**. However, to enable certain additional features (e.g. fade-out, feedback) you will need to supply various libraries as props. These are detailed below.
64
64
 
65
65
  ### Linear Gradient
66
66
 
@@ -71,6 +71,15 @@ If you want the numbers to fade in/out at the top and bottom of the picker, you
71
71
 
72
72
  **To enable the linear gradient, you need to supply the component as a prop to either TimerPickerModal or TimerPicker.**
73
73
 
74
+ ### Masked View
75
+
76
+ To make the numbers fade in/out on a transparent background (e.g. if the picker is rendered on top of a gradient or image), you will need to install the [@react-native-masked-view/masked-view
77
+ ](https://www.npmjs.com/package/@react-native-masked-view/masked-view) component. This is as the standard LinearGradient implementation relies on there being a solid background colour. You then just need to set `backgroundColor: "transparent` on the `TimerPicker` styles prop.
78
+
79
+ `import MaskedView from "@react-native-masked-view/masked-view";`
80
+
81
+ **To enable the fade-out on a transparent background, you need to supply the imported `MaskedView` component AND one of the LinearGradient components as props to either TimerPickerModal or TimerPicker. (see [this example](#timer-picker-with-transparent-fade-out-dark-mode-))**
82
+
74
83
  ### Haptic Feedback
75
84
 
76
85
  Enable haptic feedback with the [expo-haptics](https://www.npmjs.com/package/expo-haptics) module:
@@ -185,7 +194,7 @@ return (
185
194
  borderColor: "#C2C2C2",
186
195
  color: "#C2C2C2"
187
196
  }}>
188
- Set Alarm 🔔
197
+ {"Set Alarm 🔔"}
189
198
  </Text>
190
199
  </View>
191
200
  </TouchableOpacity>
@@ -319,10 +328,11 @@ return (
319
328
 
320
329
  <img src="demos/example2.gif" width="250" height="550"/>
321
330
 
322
- ### Timer Picker with Customisation (Dark Mode) 🌒
331
+ ### Timer Picker with Transparent Fade-Out (Dark Mode) 🌒
323
332
 
324
333
  ```jsx
325
334
  import { TimerPicker } from "react-native-timer-picker";
335
+ import MaskedView from "@react-native-masked-view/masked-view"; // for transparent fade-out
326
336
  import { LinearGradient } from "expo-linear-gradient"; // or `import LinearGradient from "react-native-linear-gradient"`
327
337
  import { Audio } from "expo-av"; // for audio feedback (click sound as you scroll)
328
338
  import * as Haptics from "expo-haptics"; // for haptic feedback
@@ -334,7 +344,11 @@ const [alarmString, setAlarmString] = useState<
334
344
  >(null);
335
345
 
336
346
  return (
337
- <View style={{backgroundColor: "#202020", alignItems: "center", justifyContent: "center"}}>
347
+ <LinearGradient
348
+ colors={["#202020", "#220578"]}
349
+ start={{ x: 0, y: 0 }}
350
+ end={{ x: 1, y: 1 }}
351
+ style={{alignItems: "center", justifyContent: "center"}}>
338
352
  <TimerPicker
339
353
  padWithNItems={2}
340
354
  hourLabel=":"
@@ -343,9 +357,10 @@ return (
343
357
  Audio={Audio}
344
358
  LinearGradient={LinearGradient}
345
359
  Haptics={Haptics}
360
+ MaskedView={MaskedView}
346
361
  styles={{
347
362
  theme: "dark",
348
- backgroundColor: "#202020",
363
+ backgroundColor: "transparent", // transparent fade-out
349
364
  pickerItem: {
350
365
  fontSize: 34,
351
366
  },
@@ -368,7 +383,7 @@ return (
368
383
  },
369
384
  }}
370
385
  />
371
- </View>
386
+ </LinearGradient>
372
387
  )
373
388
 
374
389
  ```
@@ -464,16 +479,15 @@ return (
464
479
  | repeatMinuteNumbersNTimes | Set the number of times the list of minutes is repeated in the picker | Number | 3 | false |
465
480
  | repeatSecondNumbersNTimes | Set the number of times the list of seconds is repeated in the picker | Number | 3 | false |
466
481
  | disableInfiniteScroll | Disable the infinite scroll feature | Boolean | false | false |
467
- | LinearGradient | Linear Gradient Component | [expo-linear-gradient](https://www.npmjs.com/package/expo-linear-gradient).LinearGradient or [react-native-linear-gradient](https://www.npmjs.com/package/react-native-linear-gradient).default | - | false |
468
- | Haptics | Haptics Namespace (required for Haptic feedback) | [expo-haptics](https://www.npmjs.com/package/expo-haptics) | - | false |
469
- | Audio | Audio Class (required for audio feedback i.e. click sound) | [expo-av](https://www.npmjs.com/package/expo-av).Audio | - | false |
470
- | pickerFeedback | Generic picker feedback as alternative to the below Expo feedback support | `() => void \| Promise<void> ` | - | false |
482
+ | LinearGradient | [Linear Gradient Component (required for picker fade-out)](#linear-gradient) | [expo-linear-gradient](https://www.npmjs.com/package/expo-linear-gradient).LinearGradient or [react-native-linear-gradient](https://www.npmjs.com/package/react-native-linear-gradient).default | - | false |
483
+ | MaskedView | [Masked View Component (required for picker fade-out on transparent background)](#masked-view) | [@react-native-masked-view/masked-view](https://www.npmjs.com/package/@react-native-masked-view/masked-view).default | - | false |
484
+ | Haptics | [Haptics Namespace (required for Haptic feedback)](#haptic-feedback) | [expo-haptics](https://www.npmjs.com/package/expo-haptics) | - | false |
485
+ | Audio | [Audio Class (required for audio feedback i.e. click sound)](#audio-feedback-click-sound) | [expo-av](https://www.npmjs.com/package/expo-av).Audio | - | false |
486
+ | pickerFeedback | [Generic picker feedback as alternative to the above Expo feedback support](#generic-feedback) | `() => void \| Promise<void> ` | - | false |
471
487
  | FlatList | FlatList component used internally to implement each picker (hour, minutes and seconds). More info [below](#custom-flatlist) | [react-native](https://reactnative.dev/docs/flatlist).FlatList | `FlatList` from `react-native` | false |
472
488
  | clickSoundAsset | Custom sound asset for click sound (required for offline click sound - download default [here](https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I)) | require(.../somefolderpath) or {uri: www.someurl} | - | false |
473
489
  | pickerContainerProps | Props for the picker container | `React.ComponentProps<typeof View>` | - | false |
474
- | pickerGradientOverlayProps | Props for both gradient overlays | `Partial<LinearGradientProps>` | - | false |
475
- | topPickerGradientOverlayProps | Props for the top gradient overlay | `Partial<LinearGradientProps>` | - | false |
476
- | bottomPickerGradientOverlayProps | Props for the bottom gradient overlay | `Partial<LinearGradientProps>` | - | false |
490
+ | pickerGradientOverlayProps | Props for the gradient overlay (supply a different `locations` array to adjust its position) overlays | `Partial<LinearGradientProps>` | - | false |
477
491
  | styles | Custom styles for the timer picker | [CustomTimerPickerStyles](#custom-styles-) | - | false |
478
492
 
479
493
  #### Custom Styles 👗
@@ -505,7 +519,7 @@ Note the minor limitations to the allowed styles for `pickerContainer` and `pick
505
519
 
506
520
  When the `disableInfiniteScroll` prop is not set, the picker gives the appearance of an infinitely scrolling picker by auto-scrolling forward/back when you near the start/end of the list. When the picker auto-scrolls, a momentary flicker is visible if you are scrolling very slowly.
507
521
 
508
- To mitigate for this, you can modify the `repeatHourNumbersNTimes`, `repeatMinuteNumbersNTimes` and `repeatSecondNumbersNTimes` props. These set the number of times the list of numbers in each picker is repeated. These have a performance trade-off: higher values mean the picker has to auto-scroll less to maintain the infinite scroll, but has to render a longer list of numbers. By default, the props are set to 7, 3 and 3, respectively, which balances that trade-off effectively.
522
+ To mitigate for this, the list of numbers in each picker is repeated a given number of times based on the length of the list (8 times for the hours picker, and 3 times for the minutes and seconds picker). These have a performance trade-off: higher values mean the picker has to auto-scroll less to maintain the infinite scroll, but has to render a longer list of numbers. The number of repetitions automatically adjusts if the number of items in the picker changes (e.g. if an interval is included, or the maximum value is modified), balancing the trade-off. You can also manually adjust the number of repetitions in each picker with the `repeatHourNumbersNTimes`, `repeatMinuteNumbersNTimes` and `repeatSecondNumbersNTimes` props.
509
523
 
510
524
  Note that you can avoid the auto-scroll flickering entirely by disabling infinite scroll. You could then set the above props to high values, so that a user has to scroll far down/up the list to reach the end of the list.
511
525
 
@@ -535,7 +549,7 @@ The custom component needs to have the same interface as React Native's `<FlatLi
535
549
 
536
550
  #### Generic feedback
537
551
 
538
- To enable haptic feedback from the non-Expo module [react-native-haptic-feedback](https://github.com/mkuczera/react-native-haptic-feedback) or provide feedback in any other form you can use the generic feedback callback prop `pickerFeedback`. This function is called whenever any of the pickers tick onto a new number.
552
+ To enable haptic feedback from the non-Expo module [react-native-haptic-feedback](https://github.com/mkuczera/react-native-haptic-feedback) (or provide feedback in any other form) you can use the generic feedback callback prop `pickerFeedback`. This function is called whenever any of the pickers tick onto a new number.
539
553
 
540
554
  ```Jsx
541
555
  import { trigger } from 'react-native-haptic-feedback';
@@ -20,7 +20,6 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
20
20
  allowFontScaling = false,
21
21
  amLabel,
22
22
  Audio,
23
- bottomPickerGradientOverlayProps,
24
23
  clickSoundAsset,
25
24
  disableInfiniteScroll = false,
26
25
  FlatList = _reactNative.FlatList,
@@ -32,6 +31,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
32
31
  label,
33
32
  limit,
34
33
  LinearGradient,
34
+ MaskedView,
35
35
  maximumValue,
36
36
  onDurationChange,
37
37
  padNumbersWithZero = false,
@@ -42,8 +42,7 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
42
42
  repeatNumbersNTimes = 3,
43
43
  repeatNumbersNTimesNotExplicitlySet,
44
44
  styles,
45
- testID,
46
- topPickerGradientOverlayProps
45
+ testID
47
46
  } = props;
48
47
  const numberOfItems = (0, _react.useMemo)(() => {
49
48
  // guard against negative maximum values
@@ -326,79 +325,75 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
326
325
  },
327
326
  latestDuration: latestDuration
328
327
  }));
328
+ const renderContent = (0, _react.useMemo)(() => {
329
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(FlatList, {
330
+ key: flatListRenderKey,
331
+ ref: flatListRef,
332
+ contentContainerStyle: styles.durationScrollFlatListContentContainer,
333
+ data: numbersForFlatList,
334
+ decelerationRate: 0.88,
335
+ getItemLayout: getItemLayout,
336
+ initialScrollIndex: initialScrollIndex,
337
+ keyExtractor: (_, index) => index.toString(),
338
+ nestedScrollEnabled: true,
339
+ onMomentumScrollEnd: onMomentumScrollEnd,
340
+ onScroll: onScroll,
341
+ renderItem: renderItem,
342
+ scrollEnabled: !isDisabled,
343
+ scrollEventThrottle: 16,
344
+ showsVerticalScrollIndicator: false,
345
+ snapToAlignment: "start"
346
+ // used in place of snapToInterval due to bug on Android
347
+ ,
348
+ snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
349
+ style: styles.durationScrollFlatList,
350
+ testID: "duration-scroll-flatlist",
351
+ viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
352
+ windowSize: numberOfItemsToShow
353
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
354
+ pointerEvents: "none",
355
+ style: styles.pickerLabelContainer
356
+ }, typeof label === "string" ? /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
357
+ allowFontScaling: allowFontScaling,
358
+ style: styles.pickerLabel
359
+ }, label) : label ?? null));
360
+ }, [FlatList, allowFontScaling, flatListRenderKey, getItemLayout, initialScrollIndex, isDisabled, label, numberOfItemsToShow, numbersForFlatList, onMomentumScrollEnd, onScroll, renderItem, styles.durationScrollFlatList, styles.durationScrollFlatListContentContainer, styles.pickerItemContainer.height, styles.pickerLabel, styles.pickerLabelContainer, viewabilityConfigCallbackPairs]);
361
+ const renderLinearGradient = (0, _react.useMemo)(() => {
362
+ if (!LinearGradient) {
363
+ return null;
364
+ }
365
+ let colors;
366
+ if (MaskedView) {
367
+ // if using masked view, we only care about the opacity
368
+ colors = ["rgba(0,0,0,0)", "rgba(0,0,0,1)", "rgba(0,0,0,1)", "rgba(0,0,0,0)"];
369
+ } else {
370
+ const backgroundColor = styles.pickerContainer.backgroundColor ?? "white";
371
+ const transparentBackgroundColor = (0, _colorToRgba.colorToRgba)({
372
+ color: backgroundColor,
373
+ opacity: 0
374
+ });
375
+ colors = [backgroundColor, transparentBackgroundColor, transparentBackgroundColor, backgroundColor];
376
+ }
377
+
378
+ // calculate the gradient height to cover the top item and bottom item
379
+ const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;
380
+ return /*#__PURE__*/_react.default.createElement(LinearGradient, _extends({
381
+ colors: colors,
382
+ locations: [0, gradientHeight, 1 - gradientHeight, 1],
383
+ pointerEvents: "none",
384
+ style: styles.pickerGradientOverlay
385
+ }, pickerGradientOverlayProps));
386
+ }, [LinearGradient, MaskedView, padWithNItems, pickerGradientOverlayProps, styles.pickerContainer.backgroundColor, styles.pickerGradientOverlay]);
329
387
  return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
330
388
  pointerEvents: isDisabled ? "none" : undefined,
331
389
  style: [styles.durationScrollFlatListContainer, {
332
390
  height: styles.pickerItemContainer.height * numberOfItemsToShow
333
391
  }, isDisabled && styles.disabledPickerContainer],
334
392
  testID: testID
335
- }, /*#__PURE__*/_react.default.createElement(FlatList, {
336
- key: flatListRenderKey,
337
- ref: flatListRef,
338
- contentContainerStyle: styles.durationScrollFlatListContentContainer,
339
- data: numbersForFlatList,
340
- decelerationRate: 0.88,
341
- getItemLayout: getItemLayout,
342
- initialScrollIndex: initialScrollIndex,
343
- keyExtractor: (_, index) => index.toString(),
344
- nestedScrollEnabled: true,
345
- onMomentumScrollEnd: onMomentumScrollEnd,
346
- onScroll: onScroll,
347
- renderItem: renderItem,
348
- scrollEnabled: !isDisabled,
349
- scrollEventThrottle: 16,
350
- showsVerticalScrollIndicator: false,
351
- snapToAlignment: "start"
352
- // used in place of snapToInterval due to bug on Android
353
- ,
354
- snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
355
- style: styles.durationScrollFlatList,
356
- testID: "duration-scroll-flatlist",
357
- viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
358
- windowSize: numberOfItemsToShow
359
- }), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
360
- pointerEvents: "none",
361
- style: styles.pickerLabelContainer
362
- }, typeof label === "string" ? /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
363
- allowFontScaling: allowFontScaling,
364
- style: styles.pickerLabel
365
- }, label) : label ?? null), LinearGradient ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(LinearGradient, _extends({
366
- colors: [styles.pickerContainer.backgroundColor ?? "white", (0, _colorToRgba.colorToRgba)({
367
- color: styles.pickerContainer.backgroundColor ?? "white",
368
- opacity: 0
369
- })],
370
- end: {
371
- x: 1,
372
- y: 1
373
- },
374
- pointerEvents: "none",
375
- start: {
376
- x: 1,
377
- y: 0.3
378
- }
379
- }, pickerGradientOverlayProps, topPickerGradientOverlayProps, {
380
- style: [styles.pickerGradientOverlay, {
381
- top: 0
382
- }]
383
- })), /*#__PURE__*/_react.default.createElement(LinearGradient, _extends({
384
- colors: [(0, _colorToRgba.colorToRgba)({
385
- color: styles.pickerContainer.backgroundColor ?? "white",
386
- opacity: 0
387
- }), styles.pickerContainer.backgroundColor ?? "white"],
388
- end: {
389
- x: 1,
390
- y: 0.7
391
- },
392
- pointerEvents: "none",
393
- start: {
394
- x: 1,
395
- y: 0
396
- }
397
- }, pickerGradientOverlayProps, bottomPickerGradientOverlayProps, {
398
- style: [styles.pickerGradientOverlay, {
399
- bottom: -1
400
- }]
401
- }))) : null);
393
+ }, MaskedView ? /*#__PURE__*/_react.default.createElement(MaskedView, {
394
+ maskElement: renderLinearGradient,
395
+ style: [styles.maskedView]
396
+ }, renderContent) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, renderContent, renderLinearGradient));
402
397
  });
403
398
  var _default = exports.default = /*#__PURE__*/_react.default.memo(DurationScroll);
404
399
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getDurationAndIndexFromScrollOffset","_getInitialScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","FlatList","RNFlatList","Haptics","initialValue","interval","is12HourPicker","isDisabled","label","limit","LinearGradient","maximumValue","onDurationChange","padNumbersWithZero","padWithNItems","pickerFeedback","pickerGradientOverlayProps","pmLabel","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","styles","testID","topPickerGradientOverlayProps","numberOfItems","useMemo","Math","floor","safeRepeatNumbersNTimes","isNaN","max","round","numbersForFlatList","generate12HourNumbers","repeatNTimes","generateNumbers","initialScrollIndex","getInitialScrollIndex","value","adjustedLimited","getAdjustedLimit","numberOfItemsToShow","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","key","style","pickerItemContainer","Text","pickerItem","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newValues","getDurationAndIndexFromScrollOffset","itemHeight","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","index","scrollToIndex","animated","_flatListRef$current2","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","viewabilityConfigCallbackPairs","setViewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","flatListRenderKey","setFlatListRenderKey","initialRender","prev","getItemLayout","_","offset","useImperativeHandle","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","durationScrollFlatListContainer","disabledPickerContainer","contentContainerStyle","durationScrollFlatListContentContainer","data","decelerationRate","keyExtractor","toString","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","durationScrollFlatList","windowSize","pickerLabelContainer","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["index.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 {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n interval,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n maximumValue,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerFeedback,\n pickerGradientOverlayProps,\n pmLabel,\n repeatNumbersNTimes = 3,\n repeatNumbersNTimesNotExplicitlySet,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\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 padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n interval,\n });\n }\n\n return generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n interval,\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<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = 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 setClickSound(sound);\n }\n };\n\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n let stringItem = item;\n let intItem: number;\n let isAm: boolean | undefined;\n\n if (!is12HourPicker) {\n intItem = parseInt(item);\n } else {\n isAm = item.includes(\"AM\");\n stringItem = item.replace(/\\s[AP]M/g, \"\");\n intItem = parseInt(stringItem);\n }\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\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 (\n !aggressivelyGetLatestDuration &&\n !Haptics &&\n !Audio &&\n !pickerFeedback\n ) {\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 (Haptics || Audio || pickerFeedback) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y +\n 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 clickSound?.replayAsync();\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 clickSound,\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\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 =\n newValues.index -\n (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex =\n newValues.index +\n (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 ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (numberOfItems === 1) {\n return;\n }\n\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\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 >=\n 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 [\n viewabilityConfigCallbackPairs,\n setViewabilityConfigCallbackPairs,\n ] = useState<ViewabilityConfigCallbackPairs | undefined>(\n !disableInfiniteScroll\n ? [\n {\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n onViewableItemsChanged: onViewableItemsChanged,\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 viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]\n : undefined\n );\n }, [disableInfiniteScroll, onViewableItemsChanged]);\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n useImperativeHandle(ref, () => ({\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 latestDuration: latestDuration,\n }));\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n styles.durationScrollFlatListContainer,\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n key={flatListRenderKey}\n ref={flatListRef}\n contentContainerStyle={\n styles.durationScrollFlatListContentContainer\n }\n data={numbersForFlatList}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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={\n viewabilityConfigCallbackPairs\n }\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" style={styles.pickerLabelContainer}>\n {typeof label === \"string\" ? (\n <Text\n allowFontScaling={allowFontScaling}\n style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n {LinearGradient ? (\n <>\n <LinearGradient\n colors={[\n styles.pickerContainer.backgroundColor ??\n \"white\",\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n ]}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0.3 }}\n {...pickerGradientOverlayProps}\n {...topPickerGradientOverlayProps}\n style={[styles.pickerGradientOverlay, { top: 0 }]}\n />\n <LinearGradient\n colors={[\n colorToRgba({\n color:\n styles.pickerContainer\n .backgroundColor ?? \"white\",\n opacity: 0,\n }),\n styles.pickerContainer.backgroundColor ??\n \"white\",\n ]}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\n start={{ x: 1, y: 0 }}\n {...pickerGradientOverlayProps}\n {...bottomPickerGradientOverlayProps}\n style={[\n styles.pickerGradientOverlay,\n { bottom: -1 },\n ]}\n />\n </>\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getDurationAndIndexFromScrollOffset","_getInitialScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","clickSoundAsset","disableInfiniteScroll","FlatList","RNFlatList","Haptics","initialValue","interval","is12HourPicker","isDisabled","label","limit","LinearGradient","MaskedView","maximumValue","onDurationChange","padNumbersWithZero","padWithNItems","pickerFeedback","pickerGradientOverlayProps","pmLabel","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","styles","testID","numberOfItems","useMemo","Math","floor","safeRepeatNumbersNTimes","isNaN","max","round","numbersForFlatList","generate12HourNumbers","repeatNTimes","generateNumbers","initialScrollIndex","getInitialScrollIndex","value","adjustedLimited","getAdjustedLimit","numberOfItemsToShow","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","key","style","pickerItemContainer","Text","pickerItem","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newValues","getDurationAndIndexFromScrollOffset","itemHeight","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","index","scrollToIndex","animated","_flatListRef$current2","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","viewabilityConfigCallbackPairs","setViewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","flatListRenderKey","setFlatListRenderKey","initialRender","prev","getItemLayout","_","offset","useImperativeHandle","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","renderContent","Fragment","contentContainerStyle","durationScrollFlatListContentContainer","data","decelerationRate","keyExtractor","toString","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","durationScrollFlatList","windowSize","pickerLabelContainer","pickerLabel","renderLinearGradient","colors","backgroundColor","pickerContainer","transparentBackgroundColor","colorToRgba","color","opacity","gradientHeight","locations","pickerGradientOverlay","durationScrollFlatListContainer","disabledPickerContainer","maskElement","maskedView","_default","exports","React","memo"],"sources":["index.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 {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n clickSoundAsset,\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 pickerFeedback,\n pickerGradientOverlayProps,\n pmLabel,\n repeatNumbersNTimes = 3,\n repeatNumbersNTimesNotExplicitlySet,\n styles,\n testID,\n } = props;\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 padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n interval,\n });\n }\n\n return generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n interval,\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<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = 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 setClickSound(sound);\n }\n };\n\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n let stringItem = item;\n let intItem: number;\n let isAm: boolean | undefined;\n\n if (!is12HourPicker) {\n intItem = parseInt(item);\n } else {\n isAm = item.includes(\"AM\");\n stringItem = item.replace(/\\s[AP]M/g, \"\");\n intItem = parseInt(stringItem);\n }\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\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 (\n !aggressivelyGetLatestDuration &&\n !Haptics &&\n !Audio &&\n !pickerFeedback\n ) {\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 (Haptics || Audio || pickerFeedback) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y +\n 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 clickSound?.replayAsync();\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 clickSound,\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\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 =\n newValues.index -\n (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex =\n newValues.index +\n (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 ({ viewableItems }: { viewableItems: ViewToken[] }) => {\n if (numberOfItems === 1) {\n return;\n }\n\n if (\n viewableItems[0]?.index &&\n viewableItems[0].index < numberOfItems * 0.5\n ) {\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 >=\n 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 [\n viewabilityConfigCallbackPairs,\n setViewabilityConfigCallbackPairs,\n ] = useState<ViewabilityConfigCallbackPairs | undefined>(\n !disableInfiniteScroll\n ? [\n {\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n onViewableItemsChanged: onViewableItemsChanged,\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 viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]\n : undefined\n );\n }, [disableInfiniteScroll, onViewableItemsChanged]);\n\n const getItemLayout = useCallback(\n (_: ArrayLike<string> | null | undefined, index: number) => ({\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n useImperativeHandle(ref, () => ({\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 latestDuration: latestDuration,\n }));\n\n const renderContent = useMemo(() => {\n return (\n <>\n <FlatList\n key={flatListRenderKey}\n ref={flatListRef}\n contentContainerStyle={\n styles.durationScrollFlatListContentContainer\n }\n data={numbersForFlatList}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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={[\n ...Array(numbersForFlatList.length),\n ].map((_, i) => i * styles.pickerItemContainer.height)}\n style={styles.durationScrollFlatList}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n viewabilityConfigCallbackPairs\n }\n windowSize={numberOfItemsToShow}\n />\n <View\n pointerEvents=\"none\"\n style={styles.pickerLabelContainer}>\n {typeof label === \"string\" ? (\n <Text\n allowFontScaling={allowFontScaling}\n style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n </>\n );\n }, [\n FlatList,\n allowFontScaling,\n flatListRenderKey,\n getItemLayout,\n initialScrollIndex,\n isDisabled,\n label,\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 = [\n \"rgba(0,0,0,0)\",\n \"rgba(0,0,0,1)\",\n \"rgba(0,0,0,1)\",\n \"rgba(0,0,0,0)\",\n ];\n } else {\n const backgroundColor =\n 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 =\n 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 {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n {MaskedView ? (\n <MaskedView\n maskElement={renderLinearGradient}\n style={[styles.maskedView]}>\n {renderContent}\n </MaskedView>\n ) : (\n <>\n {renderContent}\n {renderLinearGradient}\n </>\n )}\n </View>\n );\n }\n);\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n View,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport type CustomFlatList = <ItemT = any>(\n props: React.PropsWithChildren<\n RNFlatListProps<ItemT> & React.RefAttributes<RNFlatList<ItemT>>\n >,\n ref: React.ForwardedRef<RNFlatList<ItemT>>\n) => React.ReactElement | null;\n\nexport interface DurationScrollProps {\n Audio?: any;\n FlatList?: CustomFlatList;\n Haptics?: any;\n LinearGradient?: any;\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n initialValue?: number;\n interval: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: LimitType;\n maximumValue: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerFeedback?: () => void | Promise<void>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n repeatNumbersNTimesNotExplicitlySet: boolean;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n}\n\nexport interface DurationScrollRef {\n latestDuration: MutableRefObject<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 LimitType = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAssetType =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n View,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport type CustomFlatList = <ItemT = any>(\n props: React.PropsWithChildren<\n RNFlatListProps<ItemT> & React.RefAttributes<RNFlatList<ItemT>>\n >,\n ref: React.ForwardedRef<RNFlatList<ItemT>>\n) => React.ReactElement | null;\n\nexport interface DurationScrollProps {\n Audio?: any;\n FlatList?: CustomFlatList;\n Haptics?: any;\n LinearGradient?: any;\n MaskedView?: any;\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n initialValue?: number;\n interval: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: LimitType;\n maximumValue: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerFeedback?: () => void | Promise<void>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n repeatNumbersNTimesNotExplicitlySet: boolean;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n}\n\nexport interface DurationScrollRef {\n latestDuration: MutableRefObject<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 LimitType = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAssetType =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n"],"mappings":"","ignoreList":[]}
@@ -67,9 +67,7 @@ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
67
67
  minutes: initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes,
68
68
  seconds: initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds
69
69
  }), [initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours, initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes, initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds]);
70
- const styles = (0, _react.useMemo)(() => (0, _styles.generateStyles)(customStyles, {
71
- padWithNItems: safePadWithNItems
72
- }), [safePadWithNItems, customStyles]);
70
+ const styles = (0, _react.useMemo)(() => (0, _styles.generateStyles)(customStyles), [customStyles]);
73
71
  const [selectedHours, setSelectedHours] = (0, _react.useState)(safeInitialValue.hours);
74
72
  const [selectedMinutes, setSelectedMinutes] = (0, _react.useState)(safeInitialValue.minutes);
75
73
  const [selectedSeconds, setSelectedSeconds] = (0, _react.useState)(safeInitialValue.seconds);