react-native-timer-picker 1.8.0 → 1.8.2

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
@@ -57,7 +57,7 @@ Includes iOS-style haptic and audio feedback 🍏
57
57
 
58
58
  ## Peer Dependencies 👶
59
59
 
60
- This component will work in your React Native Project **without any peer dependencies**.
60
+ This component will work in your React Native Project **_without any peer dependencies_**.
61
61
 
62
62
  ### Linear Gradient
63
63
 
@@ -74,7 +74,7 @@ This is currently only supported on Expo with the [expo-haptics](https://www.npm
74
74
 
75
75
  `import * as Haptics from "expo-haptics";`
76
76
 
77
- **To enable the haptic feedback, you need to supply the imported `Haptics` as a prop to either TimerPickerModal or TimerPicker.**
77
+ **To enable haptic feedback, you need to supply the imported `Haptics` namespace as a prop to either TimerPickerModal or TimerPicker.**
78
78
 
79
79
  ### Audio Feedback (Click Sound)
80
80
 
@@ -82,7 +82,10 @@ This is currently only supported on Expo with the [expo-av](https://www.npmjs.co
82
82
 
83
83
  `import { Audio } from "expo-av";`
84
84
 
85
- **To enable the audio feedback, you need to supply the imported `Audio` as a prop to either TimerPickerModal or TimerPicker.**
85
+ **To enable audio feedback, you need to supply the imported `Audio` class as a prop to either TimerPickerModal or TimerPicker.**
86
+
87
+ Please note that the default click sound uses a hosted mp3 file. To make the click sound work offline, you need to supply your own
88
+ sound asset through the `clickSoundAsset` prop. You can download the default click sound [here](https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I).
86
89
 
87
90
  <br>
88
91
 
@@ -246,6 +249,7 @@ return (
246
249
  closeOnOverlayPress
247
250
  use12HourPicker
248
251
  Audio={Audio}
252
+ // supply your own custom click sound asset
249
253
  clickSoundAsset={require("./assets/custom_click.mp3")}
250
254
  LinearGradient={LinearGradient}
251
255
  Haptics={Haptics}
@@ -394,8 +398,9 @@ return (
394
398
  | pmLabel | Set the PM label if using the 12-hour picker | String | pm | false |
395
399
  | disableInfiniteScroll | Disable the infinite scroll feature | Boolean | false | false |
396
400
  | 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 |
397
- | Audio | Audio Class | [expo-av](https://www.npmjs.com/package/expo-av).Audio | - | false |
398
- | Haptics | Haptics Namespace | [expo-haptics](https://www.npmjs.com/package/expo-haptics) | - | false |
401
+ | Haptics | Haptics Namespace (required for Haptic feedback) | [expo-haptics](https://www.npmjs.com/package/expo-haptics) | - | false |
402
+ | Audio | Audio Class (required for audio feedback i.e. click sound) | [expo-av](https://www.npmjs.com/package/expo-av).Audio | - | false |
403
+ | 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 |
399
404
  | pickerContainerProps | Props for the picker container | `React.ComponentProps<typeof View>` | - | false |
400
405
  | pickerGradientOverlayProps | Props for both gradient overlays | `Partial<LinearGradientProps>` | - | false |
401
406
  | topPickerGradientOverlayProps | Props for the top gradient overlay | `Partial<LinearGradientProps>` | - | false |
@@ -72,7 +72,11 @@ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
72
72
  if (Audio) {
73
73
  const {
74
74
  sound
75
- } = await Audio.Sound.createAsync(clickSoundAsset ?? require("../../assets/select_click.mp3"), {
75
+ } = await Audio.Sound.createAsync(clickSoundAsset ?? {
76
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
77
+ // in some environments when including mp3 in library)
78
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
79
+ }, {
76
80
  shouldPlay: false
77
81
  });
78
82
  setClickSound(sound);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","generateNumbers","repeatNTimes","generate12HourNumbers","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","shouldPlay","unloadAsync","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","FlatList","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","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} from \"react\";\n\nimport { View, Text, FlatList } 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 { getScrollIndex } from \"../../utils/getScrollIndex\";\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 Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\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<FlatList | 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 require(\"../../assets/select_click.mp3\"),\n { shouldPlay: false }\n );\n setClickSound(sound);\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 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: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\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 (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (Haptics || Audio) {\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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - 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 newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\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 >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\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 const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\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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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colorToRgba","_generateNumbers","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","DurationScroll","forwardRef","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","generateNumbers","repeatNTimes","generate12HourNumbers","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","latestDuration","useRef","lastFeedbackIndex","flatListRef","clickSound","setClickSound","useState","useEffect","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","useCallback","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","FlatList","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","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} from \"react\";\n\nimport { View, Text, FlatList } 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 { getScrollIndex } from \"../../utils/getScrollIndex\";\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 Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\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<FlatList | 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 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 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: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\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 (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (Haptics || Audio) {\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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - 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 newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\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 >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\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 const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\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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"}
@@ -17,12 +17,12 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
17
17
  const {
18
18
  buttonContainerProps,
19
19
  buttonTouchableOpacityProps,
20
- cancelButtonText,
20
+ cancelButtonText = "Cancel",
21
21
  closeOnOverlayPress,
22
- confirmButtonText,
22
+ confirmButtonText = "Confirm",
23
23
  containerProps,
24
24
  contentContainerProps,
25
- hideCancelButton,
25
+ hideCancelButton = false,
26
26
  initialValue,
27
27
  modalProps,
28
28
  modalTitle,
@@ -118,16 +118,18 @@ const TimerPickerModal = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
118
118
  ref: timerPickerRef,
119
119
  initialValue: confirmedDuration
120
120
  }, otherProps, {
121
- onDurationChange: durationChangeHandler
121
+ aggressivelyGetLatestDuration: true,
122
+ onDurationChange: durationChangeHandler,
123
+ styles: customStyles
122
124
  })), /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({}, buttonContainerProps, {
123
125
  style: styles.buttonContainer
124
- }), !hideCancelButton ? /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, _extends({
126
+ }), !hideCancelButton ? /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, _extends({}, buttonTouchableOpacityProps, {
125
127
  onPress: cancelHandler
126
- }, buttonTouchableOpacityProps), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
128
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
127
129
  style: [styles.button, styles.cancelButton]
128
- }, cancelButtonText)) : null, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, _extends({
130
+ }, cancelButtonText)) : null, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, _extends({}, buttonTouchableOpacityProps, {
129
131
  onPress: confirmHandler
130
- }, buttonTouchableOpacityProps), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
132
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
131
133
  style: [styles.button, styles.confirmButton]
132
134
  }, confirmButtonText))))));
133
135
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_Modal","_interopRequireDefault","_TimerPicker","_styles","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","TimerPickerModal","forwardRef","props","ref","buttonContainerProps","buttonTouchableOpacityProps","cancelButtonText","closeOnOverlayPress","confirmButtonText","containerProps","contentContainerProps","hideCancelButton","initialValue","modalProps","modalTitle","modalTitleProps","onCancel","onConfirm","onDurationChange","setIsVisible","styles","customStyles","visible","otherProps","generateStyles","timerPickerRef","useRef","safeInitialValue","hours","minutes","seconds","selectedDuration","setSelectedDuration","useState","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","current","useEffect","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","useCallback","duration","useImperativeHandle","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","setValue","value","_timerPickerRef$curre3","createElement","isVisible","onOverlayPress","undefined","testID","View","style","container","contentContainer","Text","buttonContainer","TouchableOpacity","onPress","button","cancelButton","confirmButton","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport Modal from \"../Modal\";\nimport TimerPicker from \"../TimerPicker\";\nimport type { TimerPickerRef } from \"../TimerPicker/types\";\n\nimport { generateStyles } from \"./styles\";\nimport type { TimerPickerModalRef, TimerPickerModalProps } from \"./types\";\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (props, ref) => {\n const {\n buttonContainerProps,\n buttonTouchableOpacityProps,\n cancelButtonText,\n closeOnOverlayPress,\n confirmButtonText,\n containerProps,\n contentContainerProps,\n hideCancelButton,\n initialValue,\n modalProps,\n modalTitle,\n modalTitleProps,\n onCancel,\n onConfirm,\n onDurationChange,\n setIsVisible,\n styles: customStyles,\n visible,\n ...otherProps\n } = props;\n\n const styles = generateStyles(customStyles);\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n const safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedDuration, setSelectedDuration] =\n useState(safeInitialValue);\n const [confirmedDuration, setConfirmedDuration] =\n useState(safeInitialValue);\n\n const reset = (options?: { animated?: boolean }) => {\n setSelectedDuration(safeInitialValue);\n setConfirmedDuration(safeInitialValue);\n timerPickerRef.current?.reset(options);\n };\n\n // reset state if the initial value changes\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n safeInitialValue.hours,\n safeInitialValue.minutes,\n safeInitialValue.seconds,\n ]);\n\n const hideModalHandler = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirmHandler = () => {\n const latestDuration = timerPickerRef.current?.latestDuration;\n const newDuration = {\n hours: latestDuration?.hours?.current ?? selectedDuration.hours,\n minutes:\n latestDuration?.minutes?.current ??\n selectedDuration.minutes,\n seconds:\n latestDuration?.seconds?.current ??\n selectedDuration.seconds,\n };\n setConfirmedDuration(newDuration);\n onConfirm(newDuration);\n };\n\n const cancelHandler = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChangeHandler = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n useImperativeHandle(ref, () => ({\n reset,\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n latestDuration: {\n hours: timerPickerRef.current?.latestDuration?.hours,\n minutes: timerPickerRef.current?.latestDuration?.minutes,\n seconds: timerPickerRef.current?.latestDuration?.seconds,\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={\n closeOnOverlayPress ? hideModalHandler : undefined\n }\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n initialValue={confirmedDuration}\n {...otherProps}\n onDurationChange={durationChangeHandler}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n onPress={cancelHandler}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n onPress={confirmHandler}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_Modal","_interopRequireDefault","_TimerPicker","_styles","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","TimerPickerModal","forwardRef","props","ref","buttonContainerProps","buttonTouchableOpacityProps","cancelButtonText","closeOnOverlayPress","confirmButtonText","containerProps","contentContainerProps","hideCancelButton","initialValue","modalProps","modalTitle","modalTitleProps","onCancel","onConfirm","onDurationChange","setIsVisible","styles","customStyles","visible","otherProps","generateStyles","timerPickerRef","useRef","safeInitialValue","hours","minutes","seconds","selectedDuration","setSelectedDuration","useState","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","current","useEffect","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","useCallback","duration","useImperativeHandle","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","setValue","value","_timerPickerRef$curre3","createElement","isVisible","onOverlayPress","undefined","testID","View","style","container","contentContainer","Text","aggressivelyGetLatestDuration","buttonContainer","TouchableOpacity","onPress","button","cancelButton","confirmButton","_default","exports","React","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport Modal from \"../Modal\";\nimport TimerPicker from \"../TimerPicker\";\nimport type { TimerPickerRef } from \"../TimerPicker/types\";\n\nimport { generateStyles } from \"./styles\";\nimport type { TimerPickerModalRef, TimerPickerModalProps } from \"./types\";\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (props, ref) => {\n const {\n buttonContainerProps,\n buttonTouchableOpacityProps,\n cancelButtonText = \"Cancel\",\n closeOnOverlayPress,\n confirmButtonText = \"Confirm\",\n containerProps,\n contentContainerProps,\n hideCancelButton = false,\n initialValue,\n modalProps,\n modalTitle,\n modalTitleProps,\n onCancel,\n onConfirm,\n onDurationChange,\n setIsVisible,\n styles: customStyles,\n visible,\n ...otherProps\n } = props;\n\n const styles = generateStyles(customStyles);\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n const safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedDuration, setSelectedDuration] =\n useState(safeInitialValue);\n const [confirmedDuration, setConfirmedDuration] =\n useState(safeInitialValue);\n\n const reset = (options?: { animated?: boolean }) => {\n setSelectedDuration(safeInitialValue);\n setConfirmedDuration(safeInitialValue);\n timerPickerRef.current?.reset(options);\n };\n\n // reset state if the initial value changes\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n safeInitialValue.hours,\n safeInitialValue.minutes,\n safeInitialValue.seconds,\n ]);\n\n const hideModalHandler = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirmHandler = () => {\n const latestDuration = timerPickerRef.current?.latestDuration;\n\n const newDuration = {\n hours: latestDuration?.hours?.current ?? selectedDuration.hours,\n minutes:\n latestDuration?.minutes?.current ??\n selectedDuration.minutes,\n seconds:\n latestDuration?.seconds?.current ??\n selectedDuration.seconds,\n };\n setConfirmedDuration(newDuration);\n onConfirm(newDuration);\n };\n\n const cancelHandler = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChangeHandler = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n useImperativeHandle(ref, () => ({\n reset,\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n latestDuration: {\n hours: timerPickerRef.current?.latestDuration?.hours,\n minutes: timerPickerRef.current?.latestDuration?.minutes,\n seconds: timerPickerRef.current?.latestDuration?.seconds,\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={\n closeOnOverlayPress ? hideModalHandler : undefined\n }\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n initialValue={confirmedDuration}\n {...otherProps}\n aggressivelyGetLatestDuration\n onDurationChange={durationChangeHandler}\n styles={customStyles}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n {...buttonTouchableOpacityProps}\n onPress={cancelHandler}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n {...buttonTouchableOpacityProps}\n onPress={confirmHandler}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
@@ -17,7 +17,7 @@ const generateStyles = customStyles => _reactNative.StyleSheet.create({
17
17
  ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.container)
18
18
  },
19
19
  contentContainer: {
20
- backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.backgroundColor) ?? (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR,
20
+ backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.backgroundColor) ?? ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR),
21
21
  justifyContent: "center",
22
22
  alignItems: "center",
23
23
  borderRadius: 20,
@@ -56,7 +56,7 @@ const generateStyles = customStyles => _reactNative.StyleSheet.create({
56
56
  },
57
57
  modalTitle: {
58
58
  fontSize: 24,
59
- fontWeight: "bold",
59
+ fontWeight: "600",
60
60
  marginBottom: 15,
61
61
  color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,
62
62
  ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","StyleSheet","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom","exports"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\nimport type { TextStyle, ViewStyle } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"../TimerPicker/styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n button?: TextStyle;\n buttonContainer?: ViewStyle;\n cancelButton?: TextStyle;\n confirmButton?: TextStyle;\n container?: ViewStyle;\n contentContainer?: ViewStyle;\n modalTitle?: TextStyle;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined\n) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ?? customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR,\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"bold\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAeA,MAAMC,0BAA0B,GAAG,SAAS;AAC5C,MAAMC,oBAAoB,GAAG,SAAS;AACtC,MAAMC,2BAA2B,GAAG,SAAS;AAC7C,MAAMC,qBAAqB,GAAG,SAAS;AAEhC,MAAMC,cAAc,GACvBC,YAAsD,IAEtDC,uBAAU,CAACC,MAAM,CAAC;EACdC,SAAS,EAAE;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,QAAQ,EAAE,QAAQ;IAClB,IAAGN,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,SAAS;EAC9B,CAAC;EACDI,gBAAgB,EAAE;IACdC,eAAe,EACX,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,eAAe,KAAI,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GACzDd,0BAA0B,GAC1BE,2BAA2B;IACrCO,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBK,YAAY,EAAE,EAAE;IAChBC,OAAO,EAAE,EAAE;IACX,IAAGX,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEO,gBAAgB;EACrC,CAAC;EACDK,eAAe,EAAE;IACbC,aAAa,EAAE,KAAK;IACpBC,SAAS,EAAE,EAAE;IACb,IAAGd,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEY,eAAe;EACpC,CAAC;EACDG,MAAM,EAAE;IACJC,gBAAgB,EAAE,EAAE;IACpBC,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,WAAW,EAAE,CAAC;IACdT,YAAY,EAAE,EAAE;IAChBU,QAAQ,EAAE,EAAE;IACZd,QAAQ,EAAE,QAAQ;IAClB,IAAGN,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEe,MAAM;EAC3B,CAAC;EACDO,YAAY,EAAE;IACVC,WAAW,EAAE,MAAM;IACnBC,KAAK,EACD,CAAAxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAGb,oBAAoB,GAAG,MAAM;IAClEY,eAAe,EACX,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAG,MAAM,GAAGgB,SAAS;IACvD,IAAGzB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEsB,YAAY;EACjC,CAAC;EACDI,aAAa,EAAE;IACXH,WAAW,EAAE,OAAO;IACpBC,KAAK,EACD,CAAAxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAGb,oBAAoB,GAAG,OAAO;IACnEY,eAAe,EACX,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAG,OAAO,GAAGgB,SAAS;IACxD,IAAGzB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE0B,aAAa;EAClC,CAAC;EACDC,UAAU,EAAE;IACRP,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE,MAAM;IAClBC,YAAY,EAAE,EAAE;IAChBL,KAAK,EACD,CAAAxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GACxBb,oBAAoB,GACpBE,qBAAqB;IAC/B,IAAGE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE2B,UAAU;EAC/B;AACJ,CAAC,CAAC;AAACG,OAAA,CAAA/B,cAAA,GAAAA,cAAA"}
1
+ {"version":3,"names":["_reactNative","require","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","StyleSheet","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom","exports"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\nimport type { TextStyle, ViewStyle } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"../TimerPicker/styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n button?: TextStyle;\n buttonContainer?: ViewStyle;\n cancelButton?: TextStyle;\n confirmButton?: TextStyle;\n container?: ViewStyle;\n contentContainer?: ViewStyle;\n modalTitle?: TextStyle;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined\n) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ??\n (customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR),\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"600\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAeA,MAAMC,0BAA0B,GAAG,SAAS;AAC5C,MAAMC,oBAAoB,GAAG,SAAS;AACtC,MAAMC,2BAA2B,GAAG,SAAS;AAC7C,MAAMC,qBAAqB,GAAG,SAAS;AAEhC,MAAMC,cAAc,GACvBC,YAAsD,IAEtDC,uBAAU,CAACC,MAAM,CAAC;EACdC,SAAS,EAAE;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,QAAQ,EAAE,QAAQ;IAClB,IAAGN,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,SAAS;EAC9B,CAAC;EACDI,gBAAgB,EAAE;IACdC,eAAe,EACX,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEQ,eAAe,MAC5B,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GACzBd,0BAA0B,GAC1BE,2BAA2B,CAAC;IACtCO,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBK,YAAY,EAAE,EAAE;IAChBC,OAAO,EAAE,EAAE;IACX,IAAGX,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEO,gBAAgB;EACrC,CAAC;EACDK,eAAe,EAAE;IACbC,aAAa,EAAE,KAAK;IACpBC,SAAS,EAAE,EAAE;IACb,IAAGd,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEY,eAAe;EACpC,CAAC;EACDG,MAAM,EAAE;IACJC,gBAAgB,EAAE,EAAE;IACpBC,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,WAAW,EAAE,CAAC;IACdT,YAAY,EAAE,EAAE;IAChBU,QAAQ,EAAE,EAAE;IACZd,QAAQ,EAAE,QAAQ;IAClB,IAAGN,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEe,MAAM;EAC3B,CAAC;EACDO,YAAY,EAAE;IACVC,WAAW,EAAE,MAAM;IACnBC,KAAK,EACD,CAAAxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAGb,oBAAoB,GAAG,MAAM;IAClEY,eAAe,EACX,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAG,MAAM,GAAGgB,SAAS;IACvD,IAAGzB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEsB,YAAY;EACjC,CAAC;EACDI,aAAa,EAAE;IACXH,WAAW,EAAE,OAAO;IACpBC,KAAK,EACD,CAAAxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAGb,oBAAoB,GAAG,OAAO;IACnEY,eAAe,EACX,CAAAR,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GAAG,OAAO,GAAGgB,SAAS;IACxD,IAAGzB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE0B,aAAa;EAClC,CAAC;EACDC,UAAU,EAAE;IACRP,QAAQ,EAAE,EAAE;IACZQ,UAAU,EAAE,KAAK;IACjBC,YAAY,EAAE,EAAE;IAChBL,KAAK,EACD,CAAAxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAES,KAAK,MAAK,MAAM,GACxBb,oBAAoB,GACpBE,qBAAqB;IAC/B,IAAGE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEqB,IAAI;IACrB,IAAGrB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE2B,UAAU;EAC/B;AACJ,CAAC,CAAC;AAACG,OAAA,CAAA/B,cAAA,GAAAA,cAAA"}
@@ -64,7 +64,11 @@ const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
64
64
  if (Audio) {
65
65
  const {
66
66
  sound
67
- } = await Audio.Sound.createAsync(clickSoundAsset ?? require("../../assets/select_click.mp3"), {
67
+ } = await Audio.Sound.createAsync(clickSoundAsset ?? {
68
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
69
+ // in some environments when including mp3 in library)
70
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
71
+ }, {
68
72
  shouldPlay: false
69
73
  });
70
74
  setClickSound(sound);
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","View","Text","FlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getScrollIndex","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","repeatNTimes","numberOfItemsToShow","adjustedLimited","initialScrollIndex","value","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","loadSound","sound","Sound","createAsync","require","shouldPlay","unloadAsync","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","e","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","length","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","windowSize","pickerLabelContainer","pickerLabel","Fragment","_extends","colors","pickerContainer","backgroundColor","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList } 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 { getScrollIndex } from \"../../utils/getScrollIndex\";\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 Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\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<FlatList | 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 require(\"../../assets/select_click.mp3\"),\n { shouldPlay: false }\n );\n setClickSound(sound);\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 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: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\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 (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (Haptics || Audio) {\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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - 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 newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\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 >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\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 const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\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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"}
1
+ {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","View","Text","FlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getScrollIndex","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","styles","testID","topPickerGradientOverlayProps","data","repeatNTimes","numberOfItemsToShow","adjustedLimited","initialScrollIndex","value","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","reset","options","_flatListRef$current","current","scrollToIndex","animated","index","setValue","_flatListRef$current2","renderItem","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","e","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","length","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current5","_flatListRef$current6","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","undefined","overflow","disabledPickerContainer","decelerationRate","keyExtractor","toString","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","windowSize","pickerLabelContainer","pickerLabel","Fragment","_extends","colors","pickerContainer","backgroundColor","color","opacity","end","x","start","pickerGradientOverlay","top","bottom","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n} from \"react\";\n\nimport { View, Text, FlatList } 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 { getScrollIndex } from \"../../utils/getScrollIndex\";\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 Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const data = !is12HourPicker\n ? generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n })\n : generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems,\n });\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n const adjustedLimited = getAdjustedLimit(limit, numberOfItems);\n\n const initialScrollIndex = getScrollIndex({\n value: initialValue,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n });\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<FlatList | 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 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 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: getScrollIndex({\n value: value,\n numberOfItems,\n padWithNItems,\n disableInfiniteScroll,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\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 (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n if (newDuration !== latestDuration.current) {\n // check limits\n if (newDuration > adjustedLimited.max) {\n newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n newDuration = adjustedLimited.min;\n }\n\n latestDuration.current = newDuration;\n }\n }\n\n if (Haptics || Audio) {\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 Haptics?.selectionAsync();\n\n // play click sound if available\n clickSound?.replayAsync();\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 numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n const newIndex = Math.round(\n e.nativeEvent.contentOffset.y /\n styles.pickerItemContainer.height\n );\n let newDuration =\n (disableInfiniteScroll\n ? newIndex\n : newIndex + padWithNItems) %\n (numberOfItems + 1);\n\n // check limits\n if (newDuration > adjustedLimited.max) {\n const targetScrollIndex =\n newIndex - (newDuration - 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 newDuration = adjustedLimited.max;\n } else if (newDuration < adjustedLimited.min) {\n const targetScrollIndex =\n newIndex + (adjustedLimited.min - newDuration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= data.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newDuration = adjustedLimited.min;\n }\n\n onDurationChange(newDuration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n data.length,\n disableInfiniteScroll,\n numberOfItems,\n onDurationChange,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onViewableItemsChanged = useCallback(\n ({ viewableItems }: { viewableItems: ViewToken[] }) => {\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 >= numberOfItems * 2.5\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems]\n );\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 const viewabilityConfigCallbackPairs =\n useRef<ViewabilityConfigCallbackPairs>([\n {\n viewabilityConfig: { viewAreaCoveragePercentThreshold: 25 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\n height:\n styles.pickerItemContainer.height *\n numberOfItemsToShow,\n overflow: \"visible\",\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}>\n <FlatList\n ref={flatListRef}\n data={data}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\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 snapToOffset due to bug on Android\n snapToOffsets={[...Array(data.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\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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"}
@@ -8,12 +8,12 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((props, ref) => {
8
8
  const {
9
9
  buttonContainerProps,
10
10
  buttonTouchableOpacityProps,
11
- cancelButtonText,
11
+ cancelButtonText = "Cancel",
12
12
  closeOnOverlayPress,
13
- confirmButtonText,
13
+ confirmButtonText = "Confirm",
14
14
  containerProps,
15
15
  contentContainerProps,
16
- hideCancelButton,
16
+ hideCancelButton = false,
17
17
  initialValue,
18
18
  modalProps,
19
19
  modalTitle,
@@ -109,16 +109,18 @@ const TimerPickerModal = /*#__PURE__*/forwardRef((props, ref) => {
109
109
  ref: timerPickerRef,
110
110
  initialValue: confirmedDuration
111
111
  }, otherProps, {
112
- onDurationChange: durationChangeHandler
112
+ aggressivelyGetLatestDuration: true,
113
+ onDurationChange: durationChangeHandler,
114
+ styles: customStyles
113
115
  })), /*#__PURE__*/React.createElement(View, _extends({}, buttonContainerProps, {
114
116
  style: styles.buttonContainer
115
- }), !hideCancelButton ? /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
117
+ }), !hideCancelButton ? /*#__PURE__*/React.createElement(TouchableOpacity, _extends({}, buttonTouchableOpacityProps, {
116
118
  onPress: cancelHandler
117
- }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
119
+ }), /*#__PURE__*/React.createElement(Text, {
118
120
  style: [styles.button, styles.cancelButton]
119
- }, cancelButtonText)) : null, /*#__PURE__*/React.createElement(TouchableOpacity, _extends({
121
+ }, cancelButtonText)) : null, /*#__PURE__*/React.createElement(TouchableOpacity, _extends({}, buttonTouchableOpacityProps, {
120
122
  onPress: confirmHandler
121
- }, buttonTouchableOpacityProps), /*#__PURE__*/React.createElement(Text, {
123
+ }), /*#__PURE__*/React.createElement(Text, {
122
124
  style: [styles.button, styles.confirmButton]
123
125
  }, confirmButtonText))))));
124
126
  });
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","Modal","TimerPicker","generateStyles","TimerPickerModal","props","ref","buttonContainerProps","buttonTouchableOpacityProps","cancelButtonText","closeOnOverlayPress","confirmButtonText","containerProps","contentContainerProps","hideCancelButton","initialValue","modalProps","modalTitle","modalTitleProps","onCancel","onConfirm","onDurationChange","setIsVisible","styles","customStyles","visible","otherProps","timerPickerRef","safeInitialValue","hours","minutes","seconds","selectedDuration","setSelectedDuration","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","current","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","duration","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","setValue","value","_timerPickerRef$curre3","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","buttonContainer","onPress","button","cancelButton","confirmButton","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport Modal from \"../Modal\";\nimport TimerPicker from \"../TimerPicker\";\nimport type { TimerPickerRef } from \"../TimerPicker/types\";\n\nimport { generateStyles } from \"./styles\";\nimport type { TimerPickerModalRef, TimerPickerModalProps } from \"./types\";\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (props, ref) => {\n const {\n buttonContainerProps,\n buttonTouchableOpacityProps,\n cancelButtonText,\n closeOnOverlayPress,\n confirmButtonText,\n containerProps,\n contentContainerProps,\n hideCancelButton,\n initialValue,\n modalProps,\n modalTitle,\n modalTitleProps,\n onCancel,\n onConfirm,\n onDurationChange,\n setIsVisible,\n styles: customStyles,\n visible,\n ...otherProps\n } = props;\n\n const styles = generateStyles(customStyles);\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n const safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedDuration, setSelectedDuration] =\n useState(safeInitialValue);\n const [confirmedDuration, setConfirmedDuration] =\n useState(safeInitialValue);\n\n const reset = (options?: { animated?: boolean }) => {\n setSelectedDuration(safeInitialValue);\n setConfirmedDuration(safeInitialValue);\n timerPickerRef.current?.reset(options);\n };\n\n // reset state if the initial value changes\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n safeInitialValue.hours,\n safeInitialValue.minutes,\n safeInitialValue.seconds,\n ]);\n\n const hideModalHandler = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirmHandler = () => {\n const latestDuration = timerPickerRef.current?.latestDuration;\n const newDuration = {\n hours: latestDuration?.hours?.current ?? selectedDuration.hours,\n minutes:\n latestDuration?.minutes?.current ??\n selectedDuration.minutes,\n seconds:\n latestDuration?.seconds?.current ??\n selectedDuration.seconds,\n };\n setConfirmedDuration(newDuration);\n onConfirm(newDuration);\n };\n\n const cancelHandler = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChangeHandler = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n useImperativeHandle(ref, () => ({\n reset,\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n latestDuration: {\n hours: timerPickerRef.current?.latestDuration?.hours,\n minutes: timerPickerRef.current?.latestDuration?.minutes,\n seconds: timerPickerRef.current?.latestDuration?.seconds,\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={\n closeOnOverlayPress ? hideModalHandler : undefined\n }\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n initialValue={confirmedDuration}\n {...otherProps}\n onDurationChange={durationChangeHandler}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n onPress={cancelHandler}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n onPress={confirmHandler}\n {...buttonTouchableOpacityProps}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","View","Text","TouchableOpacity","Modal","TimerPicker","generateStyles","TimerPickerModal","props","ref","buttonContainerProps","buttonTouchableOpacityProps","cancelButtonText","closeOnOverlayPress","confirmButtonText","containerProps","contentContainerProps","hideCancelButton","initialValue","modalProps","modalTitle","modalTitleProps","onCancel","onConfirm","onDurationChange","setIsVisible","styles","customStyles","visible","otherProps","timerPickerRef","safeInitialValue","hours","minutes","seconds","selectedDuration","setSelectedDuration","confirmedDuration","setConfirmedDuration","reset","options","_timerPickerRef$curre","current","hideModalHandler","confirmHandler","_timerPickerRef$curre2","_latestDuration$hours","_latestDuration$minut","_latestDuration$secon","latestDuration","newDuration","cancelHandler","durationChangeHandler","duration","_timerPickerRef$curre4","_timerPickerRef$curre5","_timerPickerRef$curre6","setValue","value","_timerPickerRef$curre3","createElement","_extends","isVisible","onOverlayPress","undefined","testID","style","container","contentContainer","aggressivelyGetLatestDuration","buttonContainer","onPress","button","cancelButton","confirmButton","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\n\nimport { View, Text, TouchableOpacity } from \"react-native\";\n\nimport Modal from \"../Modal\";\nimport TimerPicker from \"../TimerPicker\";\nimport type { TimerPickerRef } from \"../TimerPicker/types\";\n\nimport { generateStyles } from \"./styles\";\nimport type { TimerPickerModalRef, TimerPickerModalProps } from \"./types\";\n\nconst TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(\n (props, ref) => {\n const {\n buttonContainerProps,\n buttonTouchableOpacityProps,\n cancelButtonText = \"Cancel\",\n closeOnOverlayPress,\n confirmButtonText = \"Confirm\",\n containerProps,\n contentContainerProps,\n hideCancelButton = false,\n initialValue,\n modalProps,\n modalTitle,\n modalTitleProps,\n onCancel,\n onConfirm,\n onDurationChange,\n setIsVisible,\n styles: customStyles,\n visible,\n ...otherProps\n } = props;\n\n const styles = generateStyles(customStyles);\n\n const timerPickerRef = useRef<TimerPickerRef>(null);\n\n const safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedDuration, setSelectedDuration] =\n useState(safeInitialValue);\n const [confirmedDuration, setConfirmedDuration] =\n useState(safeInitialValue);\n\n const reset = (options?: { animated?: boolean }) => {\n setSelectedDuration(safeInitialValue);\n setConfirmedDuration(safeInitialValue);\n timerPickerRef.current?.reset(options);\n };\n\n // reset state if the initial value changes\n useEffect(() => {\n reset();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n safeInitialValue.hours,\n safeInitialValue.minutes,\n safeInitialValue.seconds,\n ]);\n\n const hideModalHandler = () => {\n setSelectedDuration({\n hours: confirmedDuration.hours,\n minutes: confirmedDuration.minutes,\n seconds: confirmedDuration.seconds,\n });\n setIsVisible(false);\n };\n\n const confirmHandler = () => {\n const latestDuration = timerPickerRef.current?.latestDuration;\n\n const newDuration = {\n hours: latestDuration?.hours?.current ?? selectedDuration.hours,\n minutes:\n latestDuration?.minutes?.current ??\n selectedDuration.minutes,\n seconds:\n latestDuration?.seconds?.current ??\n selectedDuration.seconds,\n };\n setConfirmedDuration(newDuration);\n onConfirm(newDuration);\n };\n\n const cancelHandler = () => {\n setIsVisible(false);\n setSelectedDuration(confirmedDuration);\n onCancel?.();\n };\n\n // wrapped in useCallback to avoid unnecessary re-renders of TimerPicker\n const durationChangeHandler = useCallback(\n (duration: { hours: number; minutes: number; seconds: number }) => {\n setSelectedDuration(duration);\n onDurationChange?.(duration);\n },\n [onDurationChange]\n );\n\n useImperativeHandle(ref, () => ({\n reset,\n setValue: (value, options) => {\n setSelectedDuration(value);\n setConfirmedDuration(value);\n timerPickerRef.current?.setValue(value, options);\n },\n latestDuration: {\n hours: timerPickerRef.current?.latestDuration?.hours,\n minutes: timerPickerRef.current?.latestDuration?.minutes,\n seconds: timerPickerRef.current?.latestDuration?.seconds,\n },\n }));\n\n return (\n <Modal\n isVisible={visible}\n onOverlayPress={\n closeOnOverlayPress ? hideModalHandler : undefined\n }\n {...modalProps}\n testID=\"timer-picker-modal\">\n <View {...containerProps} style={styles.container}>\n <View\n {...contentContainerProps}\n style={styles.contentContainer}>\n {modalTitle ? (\n <Text\n {...modalTitleProps}\n style={styles.modalTitle}>\n {modalTitle}\n </Text>\n ) : null}\n <TimerPicker\n ref={timerPickerRef}\n initialValue={confirmedDuration}\n {...otherProps}\n aggressivelyGetLatestDuration\n onDurationChange={durationChangeHandler}\n styles={customStyles}\n />\n <View\n {...buttonContainerProps}\n style={styles.buttonContainer}>\n {!hideCancelButton ? (\n <TouchableOpacity\n {...buttonTouchableOpacityProps}\n onPress={cancelHandler}>\n <Text\n style={[\n styles.button,\n styles.cancelButton,\n ]}>\n {cancelButtonText}\n </Text>\n </TouchableOpacity>\n ) : null}\n <TouchableOpacity\n {...buttonTouchableOpacityProps}\n onPress={confirmHandler}>\n <Text\n style={[\n styles.button,\n styles.confirmButton,\n ]}>\n {confirmButtonText}\n </Text>\n </TouchableOpacity>\n </View>\n </View>\n </View>\n </Modal>\n );\n }\n);\n\nexport default React.memo(TimerPickerModal);\n"],"mappings":"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"}
@@ -11,7 +11,7 @@ export const generateStyles = customStyles => StyleSheet.create({
11
11
  ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.container)
12
12
  },
13
13
  contentContainer: {
14
- backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.backgroundColor) ?? (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR,
14
+ backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.backgroundColor) ?? ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR),
15
15
  justifyContent: "center",
16
16
  alignItems: "center",
17
17
  borderRadius: 20,
@@ -50,7 +50,7 @@ export const generateStyles = customStyles => StyleSheet.create({
50
50
  },
51
51
  modalTitle: {
52
52
  fontSize: 24,
53
- fontWeight: "bold",
53
+ fontWeight: "600",
54
54
  marginBottom: 15,
55
55
  color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,
56
56
  ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\nimport type { TextStyle, ViewStyle } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"../TimerPicker/styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n button?: TextStyle;\n buttonContainer?: ViewStyle;\n cancelButton?: TextStyle;\n confirmButton?: TextStyle;\n container?: ViewStyle;\n contentContainer?: ViewStyle;\n modalTitle?: TextStyle;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined\n) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ?? customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR,\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"bold\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":"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"}
1
+ {"version":3,"names":["StyleSheet","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","create","container","justifyContent","alignItems","overflow","contentContainer","backgroundColor","theme","borderRadius","padding","buttonContainer","flexDirection","marginTop","button","marginHorizontal","paddingVertical","paddingHorizontal","borderWidth","fontSize","text","cancelButton","borderColor","color","undefined","confirmButton","modalTitle","fontWeight","marginBottom"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\nimport type { TextStyle, ViewStyle } from \"react-native\";\n\nimport type { CustomTimerPickerStyles } from \"../TimerPicker/styles\";\n\nexport interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {\n button?: TextStyle;\n buttonContainer?: ViewStyle;\n cancelButton?: TextStyle;\n confirmButton?: TextStyle;\n container?: ViewStyle;\n contentContainer?: ViewStyle;\n modalTitle?: TextStyle;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerModalStyles | undefined\n) =>\n StyleSheet.create({\n container: {\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n ...customStyles?.container,\n },\n contentContainer: {\n backgroundColor:\n customStyles?.backgroundColor ??\n (customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR),\n justifyContent: \"center\",\n alignItems: \"center\",\n borderRadius: 20,\n padding: 20,\n ...customStyles?.contentContainer,\n },\n buttonContainer: {\n flexDirection: \"row\",\n marginTop: 25,\n ...customStyles?.buttonContainer,\n },\n button: {\n marginHorizontal: 12,\n paddingVertical: 10,\n paddingHorizontal: 20,\n borderWidth: 1,\n borderRadius: 10,\n fontSize: 16,\n overflow: \"hidden\",\n ...customStyles?.text,\n ...customStyles?.button,\n },\n cancelButton: {\n borderColor: \"gray\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"gray\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"gray\" : undefined,\n ...customStyles?.text,\n ...customStyles?.cancelButton,\n },\n confirmButton: {\n borderColor: \"green\",\n color:\n customStyles?.theme === \"dark\" ? DARK_MODE_TEXT_COLOR : \"green\",\n backgroundColor:\n customStyles?.theme === \"dark\" ? \"green\" : undefined,\n ...customStyles?.text,\n ...customStyles?.confirmButton,\n },\n modalTitle: {\n fontSize: 24,\n fontWeight: \"600\",\n marginBottom: 15,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.modalTitle,\n },\n });\n"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/troberts-28"
7
7
  },
8
8
  "license": "MIT",
9
- "version": "1.8.0",
9
+ "version": "1.8.2",
10
10
  "main": "dist/commonjs/index.js",
11
11
  "types": "dist/typescript/src/index.d.ts",
12
12
  "scripts": {
@@ -98,8 +98,11 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
98
98
  const loadSound = async () => {
99
99
  if (Audio) {
100
100
  const { sound } = await Audio.Sound.createAsync(
101
- clickSoundAsset ??
102
- require("../../assets/select_click.mp3"),
101
+ clickSoundAsset ?? {
102
+ // use a hosted sound as a fallback (do not use local asset due to loader issues
103
+ // in some environments when including mp3 in library)
104
+ uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I",
105
+ },
103
106
  { shouldPlay: false }
104
107
  );
105
108
  setClickSound(sound);
@@ -21,12 +21,12 @@ const TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(
21
21
  const {
22
22
  buttonContainerProps,
23
23
  buttonTouchableOpacityProps,
24
- cancelButtonText,
24
+ cancelButtonText = "Cancel",
25
25
  closeOnOverlayPress,
26
- confirmButtonText,
26
+ confirmButtonText = "Confirm",
27
27
  containerProps,
28
28
  contentContainerProps,
29
- hideCancelButton,
29
+ hideCancelButton = false,
30
30
  initialValue,
31
31
  modalProps,
32
32
  modalTitle,
@@ -82,6 +82,7 @@ const TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(
82
82
 
83
83
  const confirmHandler = () => {
84
84
  const latestDuration = timerPickerRef.current?.latestDuration;
85
+
85
86
  const newDuration = {
86
87
  hours: latestDuration?.hours?.current ?? selectedDuration.hours,
87
88
  minutes:
@@ -147,15 +148,17 @@ const TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(
147
148
  ref={timerPickerRef}
148
149
  initialValue={confirmedDuration}
149
150
  {...otherProps}
151
+ aggressivelyGetLatestDuration
150
152
  onDurationChange={durationChangeHandler}
153
+ styles={customStyles}
151
154
  />
152
155
  <View
153
156
  {...buttonContainerProps}
154
157
  style={styles.buttonContainer}>
155
158
  {!hideCancelButton ? (
156
159
  <TouchableOpacity
157
- onPress={cancelHandler}
158
- {...buttonTouchableOpacityProps}>
160
+ {...buttonTouchableOpacityProps}
161
+ onPress={cancelHandler}>
159
162
  <Text
160
163
  style={[
161
164
  styles.button,
@@ -166,8 +169,8 @@ const TimerPickerModal = forwardRef<TimerPickerModalRef, TimerPickerModalProps>(
166
169
  </TouchableOpacity>
167
170
  ) : null}
168
171
  <TouchableOpacity
169
- onPress={confirmHandler}
170
- {...buttonTouchableOpacityProps}>
172
+ {...buttonTouchableOpacityProps}
173
+ onPress={confirmHandler}>
171
174
  <Text
172
175
  style={[
173
176
  styles.button,
@@ -30,9 +30,10 @@ export const generateStyles = (
30
30
  },
31
31
  contentContainer: {
32
32
  backgroundColor:
33
- customStyles?.backgroundColor ?? customStyles?.theme === "dark"
33
+ customStyles?.backgroundColor ??
34
+ (customStyles?.theme === "dark"
34
35
  ? DARK_MODE_BACKGROUND_COLOR
35
- : LIGHT_MODE_BACKGROUND_COLOR,
36
+ : LIGHT_MODE_BACKGROUND_COLOR),
36
37
  justifyContent: "center",
37
38
  alignItems: "center",
38
39
  borderRadius: 20,
@@ -75,7 +76,7 @@ export const generateStyles = (
75
76
  },
76
77
  modalTitle: {
77
78
  fontSize: 24,
78
- fontWeight: "bold",
79
+ fontWeight: "600",
79
80
  marginBottom: 15,
80
81
  color:
81
82
  customStyles?.theme === "dark"
Binary file
Binary file