react-native-timer-picker 1.10.1 → 1.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +13 -0
  2. package/dist/commonjs/components/DurationScroll/index.js +108 -73
  3. package/dist/commonjs/components/DurationScroll/index.js.map +1 -1
  4. package/dist/commonjs/components/DurationScroll/types.js.map +1 -1
  5. package/dist/commonjs/components/TimerPicker/index.js +26 -11
  6. package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
  7. package/dist/commonjs/components/TimerPicker/types.js.map +1 -1
  8. package/dist/commonjs/utils/generateNumbers.js +3 -3
  9. package/dist/commonjs/utils/generateNumbers.js.map +1 -1
  10. package/dist/commonjs/utils/getAdjustedLimit.js +4 -3
  11. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -1
  12. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +23 -0
  13. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  14. package/dist/commonjs/utils/getInitialScrollIndex.js +18 -0
  15. package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
  16. package/dist/module/components/DurationScroll/index.js +109 -74
  17. package/dist/module/components/DurationScroll/index.js.map +1 -1
  18. package/dist/module/components/DurationScroll/types.js.map +1 -1
  19. package/dist/module/components/TimerPicker/index.js +26 -11
  20. package/dist/module/components/TimerPicker/index.js.map +1 -1
  21. package/dist/module/components/TimerPicker/types.js.map +1 -1
  22. package/dist/module/utils/generateNumbers.js +3 -3
  23. package/dist/module/utils/generateNumbers.js.map +1 -1
  24. package/dist/module/utils/getAdjustedLimit.js +4 -3
  25. package/dist/module/utils/getAdjustedLimit.js.map +1 -1
  26. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +16 -0
  27. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  28. package/dist/module/utils/getInitialScrollIndex.js +11 -0
  29. package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
  30. package/dist/typescript/components/DurationScroll/types.d.ts +1 -0
  31. package/dist/typescript/components/TimerPicker/types.d.ts +3 -0
  32. package/dist/typescript/utils/generateNumbers.d.ts +1 -1
  33. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +10 -0
  34. package/dist/typescript/utils/getInitialScrollIndex.d.ts +7 -0
  35. package/package.json +1 -1
  36. package/dist/commonjs/utils/getScrollIndex.js +0 -17
  37. package/dist/commonjs/utils/getScrollIndex.js.map +0 -1
  38. package/dist/module/utils/getScrollIndex.js +0 -10
  39. package/dist/module/utils/getScrollIndex.js.map +0 -1
  40. package/dist/typescript/utils/getScrollIndex.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","View","Text","FlatList","RNFlatList","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","nestedScrollEnabled","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 as RNFlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { 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 FlatList = RNFlatList,\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<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n setClickSound(sound);\n }\n };\n 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 nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of 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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","ignoreList":[]}
1
+ {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","useMemo","View","Text","FlatList","RNFlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getDurationAndIndexFromScrollOffset","getInitialScrollIndex","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","bottomPickerGradientOverlayProps","clickSoundAsset","disableInfiniteScroll","Haptics","initialValue","is12HourPicker","isDisabled","label","limit","LinearGradient","numberOfItems","onDurationChange","padNumbersWithZero","padWithNItems","pickerGradientOverlayProps","pmLabel","repeatNumbersNTimes","styles","testID","topPickerGradientOverlayProps","safeRepeatNumbersNTimes","Math","round","numbersForFlatList","repeatNTimes","initialScrollIndex","value","adjustedLimited","numberOfItemsToShow","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","loadSound","sound","Sound","createAsync","uri","shouldPlay","unloadAsync","renderItem","item","stringItem","intItem","isAm","parseInt","includes","replace","createElement","key","style","pickerItemContainer","pickerItem","max","min","disabledPickerItem","pointerEvents","pickerAmPmContainer","pickerAmPmLabel","onScroll","e","newValues","itemHeight","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","replayAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","index","scrollToIndex","animated","_flatListRef$current2","length","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","getItemLayout","_","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","undefined","overflow","disabledPickerContainer","data","decelerationRate","keyExtractor","toString","nestedScrollEnabled","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 useMemo,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type {\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport {\n generate12HourNumbers,\n generateNumbers,\n} from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\n\nimport type { DurationScrollProps, DurationScrollRef } from \"./types\";\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n bottomPickerGradientOverlayProps,\n clickSoundAsset,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n numberOfItems,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerGradientOverlayProps,\n pmLabel,\n repeatNumbersNTimes = 3,\n styles,\n testID,\n topPickerGradientOverlayProps,\n } = props;\n\n const safeRepeatNumbersNTimes = useMemo(() => {\n if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {\n return 2;\n } else if (repeatNumbersNTimes < 1) {\n return 1;\n }\n\n return Math.round(repeatNumbersNTimes);\n }, [disableInfiniteScroll, repeatNumbersNTimes]);\n\n const numbersForFlatList = useMemo(() => {\n if (is12HourPicker) {\n return generate12HourNumbers({\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n });\n }\n\n return generateNumbers(numberOfItems, {\n padNumbersWithZero,\n repeatNTimes: safeRepeatNumbersNTimes,\n disableInfiniteScroll,\n padWithNItems,\n });\n }, [\n disableInfiniteScroll,\n is12HourPicker,\n numberOfItems,\n padNumbersWithZero,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]);\n\n const initialScrollIndex = useMemo(\n () =>\n getInitialScrollIndex({\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: initialValue,\n }),\n [\n disableInfiniteScroll,\n initialValue,\n numberOfItems,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]\n );\n\n const adjustedLimited = useMemo(\n () => getAdjustedLimit(limit, numberOfItems),\n [limit, numberOfItems]\n );\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<\n | {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n }\n | undefined\n >();\n\n // Preload the sound when the component mounts\n useEffect(() => {\n const loadSound = async () => {\n if (Audio) {\n const { sound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n setClickSound(sound);\n }\n };\n\n loadSound();\n\n // Unload sound when component unmounts\n return () => {\n clickSound?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n let stringItem = item;\n let intItem: number;\n let isAm: boolean | undefined;\n\n if (!is12HourPicker) {\n intItem = parseInt(item);\n } else {\n isAm = item.includes(\"AM\");\n stringItem = item.replace(/\\s[AP]M/g, \"\");\n intItem = parseInt(stringItem);\n }\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {stringItem}\n </Text>\n {is12HourPicker ? (\n <View\n pointerEvents=\"none\"\n style={styles.pickerAmPmContainer}>\n <Text\n allowFontScaling={allowFontScaling}\n style={[styles.pickerAmPmLabel]}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n ) : null}\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n pmLabel,\n styles.disabledPickerItem,\n styles.pickerAmPmContainer,\n styles.pickerAmPmLabel,\n styles.pickerItem,\n styles.pickerItemContainer,\n ]\n );\n\n const onScroll = useCallback(\n (e: NativeSyntheticEvent<NativeScrollEvent>) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (!aggressivelyGetLatestDuration && !Haptics && !Audio) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n if (newValues.duration !== latestDuration.current) {\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n newValues.duration = adjustedLimited.min;\n }\n\n latestDuration.current = newValues.duration;\n }\n }\n\n if (Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y +\n styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n try {\n Haptics?.selectionAsync();\n } catch {\n // do nothing\n }\n\n // play click sound if available\n try {\n clickSound?.replayAsync();\n } catch {\n // do nothing\n }\n }\n\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 newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n const targetScrollIndex =\n newValues.index -\n (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0\n ? targetScrollIndex\n : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex =\n newValues.index +\n (adjustedLimited.min - newValues.duration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= numbersForFlatList.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newValues.duration = adjustedLimited.min;\n }\n\n onDurationChange(newValues.duration);\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n numbersForFlatList.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 >=\n numberOfItems * (safeRepeatNumbersNTimes - 0.5)\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems, safeRepeatNumbersNTimes]\n );\n\n const 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: 0 },\n onViewableItemsChanged: onViewableItemsChanged,\n },\n ]);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getInitialScrollIndex({\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: value,\n }),\n });\n },\n latestDuration: latestDuration,\n }));\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n {\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={numbersForFlatList}\n decelerationRate={0.88}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={(_, index) => index.toString()}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToOffset due to bug on Android\n snapToOffsets={[...Array(numbersForFlatList.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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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n View,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport type CustomFlatList = <ItemT = any>(\n props: React.PropsWithChildren<\n RNFlatListProps<ItemT> & React.RefAttributes<RNFlatList<ItemT>>\n >,\n ref: React.ForwardedRef<RNFlatList<ItemT>>\n) => React.ReactElement | null;\n\nexport interface DurationScrollProps {\n Audio?: any;\n FlatList?: CustomFlatList;\n Haptics?: any;\n LinearGradient?: any;\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n initialValue?: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: LimitType;\n numberOfItems: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n}\n\nexport interface DurationScrollRef {\n latestDuration: MutableRefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAssetType =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n View,\n FlatList as RNFlatList,\n FlatListProps as RNFlatListProps,\n} from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport type CustomFlatList = <ItemT = any>(\n props: React.PropsWithChildren<\n RNFlatListProps<ItemT> & React.RefAttributes<RNFlatList<ItemT>>\n >,\n ref: React.ForwardedRef<RNFlatList<ItemT>>\n) => React.ReactElement | null;\n\nexport interface DurationScrollProps {\n Audio?: any;\n FlatList?: CustomFlatList;\n Haptics?: any;\n LinearGradient?: any;\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n initialValue?: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: LimitType;\n numberOfItems: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n}\n\nexport interface DurationScrollRef {\n latestDuration: MutableRefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAssetType =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n"],"mappings":"","ignoreList":[]}
@@ -26,6 +26,9 @@ const TimerPicker = /*#__PURE__*/forwardRef((props, ref) => {
26
26
  padWithNItems = 1,
27
27
  pickerContainerProps,
28
28
  pmLabel = "pm",
29
+ repeatHourNumbersNTimes = 7,
30
+ repeatMinuteNumbersNTimes = 3,
31
+ repeatSecondNumbersNTimes = 3,
29
32
  secondLabel,
30
33
  secondLimit,
31
34
  secondsPickerIsDisabled = false,
@@ -33,15 +36,24 @@ const TimerPicker = /*#__PURE__*/forwardRef((props, ref) => {
33
36
  use12HourPicker = false,
34
37
  ...otherProps
35
38
  } = props;
36
- const checkedPadWithNItems = padWithNItems >= 0 ? Math.round(padWithNItems) : 0;
39
+ const safePadWithNItems = useMemo(() => {
40
+ if (padWithNItems < 0) {
41
+ return 0;
42
+ }
43
+ const maxPadWithNItems = hideHours ? 15 : 6;
44
+ if (padWithNItems > maxPadWithNItems) {
45
+ return maxPadWithNItems;
46
+ }
47
+ return Math.round(padWithNItems);
48
+ }, [hideHours, padWithNItems]);
37
49
  const styles = useMemo(() => generateStyles(customStyles, {
38
- padWithNItems: checkedPadWithNItems
39
- }), [checkedPadWithNItems, customStyles]);
40
- const safeInitialValue = {
50
+ padWithNItems: safePadWithNItems
51
+ }), [safePadWithNItems, customStyles]);
52
+ const safeInitialValue = useMemo(() => ({
41
53
  hours: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours) ?? 0,
42
54
  minutes: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes) ?? 0,
43
55
  seconds: (initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds) ?? 0
44
- };
56
+ }), [initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours, initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes, initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds]);
45
57
  const [selectedHours, setSelectedHours] = useState(safeInitialValue.hours);
46
58
  const [selectedMinutes, setSelectedMinutes] = useState(safeInitialValue.minutes);
47
59
  const [selectedSeconds, setSelectedSeconds] = useState(safeInitialValue.seconds);
@@ -98,11 +110,12 @@ const TimerPicker = /*#__PURE__*/forwardRef((props, ref) => {
98
110
  isDisabled: hoursPickerIsDisabled,
99
111
  label: hourLabel ?? (!use12HourPicker ? "h" : undefined),
100
112
  limit: hourLimit,
101
- numberOfItems: 23,
113
+ numberOfItems: 24,
102
114
  onDurationChange: setSelectedHours,
103
115
  padNumbersWithZero: padHoursWithZero,
104
- padWithNItems: checkedPadWithNItems,
116
+ padWithNItems: safePadWithNItems,
105
117
  pmLabel: pmLabel,
118
+ repeatNumbersNTimes: repeatHourNumbersNTimes,
106
119
  styles: styles,
107
120
  testID: "duration-scroll-hour"
108
121
  }, otherProps)) : null, !hideMinutes ? /*#__PURE__*/React.createElement(DurationScroll, _extends({
@@ -114,10 +127,11 @@ const TimerPicker = /*#__PURE__*/forwardRef((props, ref) => {
114
127
  isDisabled: minutesPickerIsDisabled,
115
128
  label: minuteLabel ?? "m",
116
129
  limit: minuteLimit,
117
- numberOfItems: 59,
130
+ numberOfItems: 60,
118
131
  onDurationChange: setSelectedMinutes,
119
132
  padNumbersWithZero: padMinutesWithZero,
120
- padWithNItems: checkedPadWithNItems,
133
+ padWithNItems: safePadWithNItems,
134
+ repeatNumbersNTimes: repeatMinuteNumbersNTimes,
121
135
  styles: styles,
122
136
  testID: "duration-scroll-minute"
123
137
  }, otherProps)) : null, !hideSeconds ? /*#__PURE__*/React.createElement(DurationScroll, _extends({
@@ -129,10 +143,11 @@ const TimerPicker = /*#__PURE__*/forwardRef((props, ref) => {
129
143
  isDisabled: secondsPickerIsDisabled,
130
144
  label: secondLabel ?? "s",
131
145
  limit: secondLimit,
132
- numberOfItems: 59,
146
+ numberOfItems: 60,
133
147
  onDurationChange: setSelectedSeconds,
134
148
  padNumbersWithZero: padSecondsWithZero,
135
- padWithNItems: checkedPadWithNItems,
149
+ padWithNItems: safePadWithNItems,
150
+ repeatNumbersNTimes: repeatSecondNumbersNTimes,
136
151
  styles: styles,
137
152
  testID: "duration-scroll-second"
138
153
  }, otherProps)) : null);
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","disableInfiniteScroll","hideHours","hideMinutes","hideSeconds","hourLabel","hourLimit","hoursPickerIsDisabled","initialValue","minuteLabel","minuteLimit","minutesPickerIsDisabled","onDurationChange","padHoursWithZero","padMinutesWithZero","padSecondsWithZero","padWithNItems","pickerContainerProps","pmLabel","secondLabel","secondLimit","secondsPickerIsDisabled","styles","customStyles","use12HourPicker","otherProps","checkedPadWithNItems","Math","round","safeInitialValue","hours","minutes","seconds","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","hoursDurationScrollRef","minutesDurationScrollRef","secondsDurationScrollRef","_hoursDurationScrollR3","_minutesDurationScrol3","_secondsDurationScrol3","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","latestDuration","createElement","_extends","style","pickerContainer","testID","is12HourPicker","isDisabled","label","undefined","limit","numberOfItems","padNumbersWithZero","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { View } from \"react-native\";\n\nimport DurationScroll from \"../DurationScroll\";\nimport type { DurationScrollRef } from \"../DurationScroll/types\";\n\nimport { generateStyles } from \"./styles\";\nimport type { TimerPickerProps, TimerPickerRef } from \"./types\";\n\nconst TimerPicker = forwardRef<TimerPickerRef, TimerPickerProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration = false,\n allowFontScaling = false,\n amLabel = \"am\",\n disableInfiniteScroll = false,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourLabel,\n hourLimit,\n hoursPickerIsDisabled = false,\n initialValue,\n minuteLabel,\n minuteLimit,\n minutesPickerIsDisabled = false,\n onDurationChange,\n padHoursWithZero = false,\n padMinutesWithZero = true,\n padSecondsWithZero = true,\n padWithNItems = 1,\n pickerContainerProps,\n pmLabel = \"pm\",\n secondLabel,\n secondLimit,\n secondsPickerIsDisabled = false,\n styles: customStyles,\n use12HourPicker = false,\n ...otherProps\n } = props;\n\n const checkedPadWithNItems =\n padWithNItems >= 0 ? Math.round(padWithNItems) : 0;\n\n const styles = useMemo(\n () =>\n generateStyles(customStyles, {\n padWithNItems: checkedPadWithNItems,\n }),\n\n [checkedPadWithNItems, customStyles]\n );\n\n const safeInitialValue = {\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n };\n\n const [selectedHours, setSelectedHours] = useState(\n safeInitialValue.hours\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n safeInitialValue.minutes\n );\n const [selectedSeconds, setSelectedSeconds] = useState(\n safeInitialValue.seconds\n );\n\n useEffect(() => {\n onDurationChange?.({\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedHours, selectedMinutes, selectedSeconds]);\n\n const hoursDurationScrollRef = useRef<DurationScrollRef>(null);\n const minutesDurationScrollRef = useRef<DurationScrollRef>(null);\n const secondsDurationScrollRef = useRef<DurationScrollRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n setSelectedHours(safeInitialValue.hours);\n setSelectedMinutes(safeInitialValue.minutes);\n setSelectedSeconds(safeInitialValue.seconds);\n hoursDurationScrollRef.current?.reset(options);\n minutesDurationScrollRef.current?.reset(options);\n secondsDurationScrollRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedHours(value.hours);\n setSelectedMinutes(value.minutes);\n setSelectedSeconds(value.seconds);\n hoursDurationScrollRef.current?.setValue(value.hours, options);\n minutesDurationScrollRef.current?.setValue(\n value.minutes,\n options\n );\n secondsDurationScrollRef.current?.setValue(\n value.seconds,\n options\n );\n },\n latestDuration: {\n hours: hoursDurationScrollRef.current?.latestDuration,\n minutes: minutesDurationScrollRef.current?.latestDuration,\n seconds: secondsDurationScrollRef.current?.latestDuration,\n },\n }));\n\n return (\n <View\n {...pickerContainerProps}\n style={styles.pickerContainer}\n testID=\"timer-picker\">\n {!hideHours ? (\n <DurationScroll\n ref={hoursDurationScrollRef}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.hours}\n is12HourPicker={use12HourPicker}\n isDisabled={hoursPickerIsDisabled}\n label={\n hourLabel ?? (!use12HourPicker ? \"h\" : undefined)\n }\n limit={hourLimit}\n numberOfItems={23}\n onDurationChange={setSelectedHours}\n padNumbersWithZero={padHoursWithZero}\n padWithNItems={checkedPadWithNItems}\n pmLabel={pmLabel}\n styles={styles}\n testID=\"duration-scroll-hour\"\n {...otherProps}\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\n allowFontScaling={allowFontScaling}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.minutes}\n isDisabled={minutesPickerIsDisabled}\n label={minuteLabel ?? \"m\"}\n limit={minuteLimit}\n numberOfItems={59}\n onDurationChange={setSelectedMinutes}\n padNumbersWithZero={padMinutesWithZero}\n padWithNItems={checkedPadWithNItems}\n styles={styles}\n testID=\"duration-scroll-minute\"\n {...otherProps}\n />\n ) : null}\n {!hideSeconds ? (\n <DurationScroll\n ref={secondsDurationScrollRef}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\n allowFontScaling={allowFontScaling}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.seconds}\n isDisabled={secondsPickerIsDisabled}\n label={secondLabel ?? \"s\"}\n limit={secondLimit}\n numberOfItems={59}\n onDurationChange={setSelectedSeconds}\n padNumbersWithZero={padSecondsWithZero}\n padWithNItems={checkedPadWithNItems}\n styles={styles}\n testID=\"duration-scroll-second\"\n {...otherProps}\n />\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(TimerPicker);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useMemo","useRef","useState","View","DurationScroll","generateStyles","TimerPicker","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","disableInfiniteScroll","hideHours","hideMinutes","hideSeconds","hourLabel","hourLimit","hoursPickerIsDisabled","initialValue","minuteLabel","minuteLimit","minutesPickerIsDisabled","onDurationChange","padHoursWithZero","padMinutesWithZero","padSecondsWithZero","padWithNItems","pickerContainerProps","pmLabel","repeatHourNumbersNTimes","repeatMinuteNumbersNTimes","repeatSecondNumbersNTimes","secondLabel","secondLimit","secondsPickerIsDisabled","styles","customStyles","use12HourPicker","otherProps","safePadWithNItems","maxPadWithNItems","Math","round","safeInitialValue","hours","minutes","seconds","selectedHours","setSelectedHours","selectedMinutes","setSelectedMinutes","selectedSeconds","setSelectedSeconds","hoursDurationScrollRef","minutesDurationScrollRef","secondsDurationScrollRef","_hoursDurationScrollR3","_minutesDurationScrol3","_secondsDurationScrol3","reset","options","_hoursDurationScrollR","_minutesDurationScrol","_secondsDurationScrol","current","setValue","value","_hoursDurationScrollR2","_minutesDurationScrol2","_secondsDurationScrol2","latestDuration","createElement","_extends","style","pickerContainer","testID","is12HourPicker","isDisabled","label","undefined","limit","numberOfItems","padNumbersWithZero","repeatNumbersNTimes","memo"],"sources":["index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { View } from \"react-native\";\n\nimport DurationScroll from \"../DurationScroll\";\nimport type { DurationScrollRef } from \"../DurationScroll/types\";\n\nimport { generateStyles } from \"./styles\";\nimport type { TimerPickerProps, TimerPickerRef } from \"./types\";\n\nconst TimerPicker = forwardRef<TimerPickerRef, TimerPickerProps>(\n (props, ref) => {\n const {\n aggressivelyGetLatestDuration = false,\n allowFontScaling = false,\n amLabel = \"am\",\n disableInfiniteScroll = false,\n hideHours = false,\n hideMinutes = false,\n hideSeconds = false,\n hourLabel,\n hourLimit,\n hoursPickerIsDisabled = false,\n initialValue,\n minuteLabel,\n minuteLimit,\n minutesPickerIsDisabled = false,\n onDurationChange,\n padHoursWithZero = false,\n padMinutesWithZero = true,\n padSecondsWithZero = true,\n padWithNItems = 1,\n pickerContainerProps,\n pmLabel = \"pm\",\n repeatHourNumbersNTimes = 7,\n repeatMinuteNumbersNTimes = 3,\n repeatSecondNumbersNTimes = 3,\n secondLabel,\n secondLimit,\n secondsPickerIsDisabled = false,\n styles: customStyles,\n use12HourPicker = false,\n ...otherProps\n } = props;\n\n const safePadWithNItems = useMemo(() => {\n if (padWithNItems < 0) {\n return 0;\n }\n\n const maxPadWithNItems = hideHours ? 15 : 6;\n\n if (padWithNItems > maxPadWithNItems) {\n return maxPadWithNItems;\n }\n\n return Math.round(padWithNItems);\n }, [hideHours, padWithNItems]);\n\n const styles = useMemo(\n () =>\n generateStyles(customStyles, {\n padWithNItems: safePadWithNItems,\n }),\n\n [safePadWithNItems, customStyles]\n );\n\n const safeInitialValue = useMemo(\n () => ({\n hours: initialValue?.hours ?? 0,\n minutes: initialValue?.minutes ?? 0,\n seconds: initialValue?.seconds ?? 0,\n }),\n [initialValue?.hours, initialValue?.minutes, initialValue?.seconds]\n );\n\n const [selectedHours, setSelectedHours] = useState(\n safeInitialValue.hours\n );\n const [selectedMinutes, setSelectedMinutes] = useState(\n safeInitialValue.minutes\n );\n const [selectedSeconds, setSelectedSeconds] = useState(\n safeInitialValue.seconds\n );\n\n useEffect(() => {\n onDurationChange?.({\n hours: selectedHours,\n minutes: selectedMinutes,\n seconds: selectedSeconds,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedHours, selectedMinutes, selectedSeconds]);\n\n const hoursDurationScrollRef = useRef<DurationScrollRef>(null);\n const minutesDurationScrollRef = useRef<DurationScrollRef>(null);\n const secondsDurationScrollRef = useRef<DurationScrollRef>(null);\n\n useImperativeHandle(ref, () => ({\n reset: (options) => {\n setSelectedHours(safeInitialValue.hours);\n setSelectedMinutes(safeInitialValue.minutes);\n setSelectedSeconds(safeInitialValue.seconds);\n hoursDurationScrollRef.current?.reset(options);\n minutesDurationScrollRef.current?.reset(options);\n secondsDurationScrollRef.current?.reset(options);\n },\n setValue: (value, options) => {\n setSelectedHours(value.hours);\n setSelectedMinutes(value.minutes);\n setSelectedSeconds(value.seconds);\n hoursDurationScrollRef.current?.setValue(value.hours, options);\n minutesDurationScrollRef.current?.setValue(\n value.minutes,\n options\n );\n secondsDurationScrollRef.current?.setValue(\n value.seconds,\n options\n );\n },\n latestDuration: {\n hours: hoursDurationScrollRef.current?.latestDuration,\n minutes: minutesDurationScrollRef.current?.latestDuration,\n seconds: secondsDurationScrollRef.current?.latestDuration,\n },\n }));\n\n return (\n <View\n {...pickerContainerProps}\n style={styles.pickerContainer}\n testID=\"timer-picker\">\n {!hideHours ? (\n <DurationScroll\n ref={hoursDurationScrollRef}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.hours}\n is12HourPicker={use12HourPicker}\n isDisabled={hoursPickerIsDisabled}\n label={\n hourLabel ?? (!use12HourPicker ? \"h\" : undefined)\n }\n limit={hourLimit}\n numberOfItems={24}\n onDurationChange={setSelectedHours}\n padNumbersWithZero={padHoursWithZero}\n padWithNItems={safePadWithNItems}\n pmLabel={pmLabel}\n repeatNumbersNTimes={repeatHourNumbersNTimes}\n styles={styles}\n testID=\"duration-scroll-hour\"\n {...otherProps}\n />\n ) : null}\n {!hideMinutes ? (\n <DurationScroll\n ref={minutesDurationScrollRef}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\n allowFontScaling={allowFontScaling}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.minutes}\n isDisabled={minutesPickerIsDisabled}\n label={minuteLabel ?? \"m\"}\n limit={minuteLimit}\n numberOfItems={60}\n onDurationChange={setSelectedMinutes}\n padNumbersWithZero={padMinutesWithZero}\n padWithNItems={safePadWithNItems}\n repeatNumbersNTimes={repeatMinuteNumbersNTimes}\n styles={styles}\n testID=\"duration-scroll-minute\"\n {...otherProps}\n />\n ) : null}\n {!hideSeconds ? (\n <DurationScroll\n ref={secondsDurationScrollRef}\n aggressivelyGetLatestDuration={\n aggressivelyGetLatestDuration\n }\n allowFontScaling={allowFontScaling}\n disableInfiniteScroll={disableInfiniteScroll}\n initialValue={safeInitialValue.seconds}\n isDisabled={secondsPickerIsDisabled}\n label={secondLabel ?? \"s\"}\n limit={secondLimit}\n numberOfItems={60}\n onDurationChange={setSelectedSeconds}\n padNumbersWithZero={padSecondsWithZero}\n padWithNItems={safePadWithNItems}\n repeatNumbersNTimes={repeatSecondNumbersNTimes}\n styles={styles}\n testID=\"duration-scroll-second\"\n {...otherProps}\n />\n ) : null}\n </View>\n );\n }\n);\n\nexport default React.memo(TimerPicker);\n"],"mappings":";AAAA,OAAOA,KAAK,IACRC,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACL,OAAO;AAEd,SAASC,IAAI,QAAQ,cAAc;AAEnC,OAAOC,cAAc,MAAM,mBAAmB;AAG9C,SAASC,cAAc,QAAQ,UAAU;AAGzC,MAAMC,WAAW,gBAAGT,UAAU,CAC1B,CAACU,KAAK,EAAEC,GAAG,KAAK;EACZ,MAAM;IACFC,6BAA6B,GAAG,KAAK;IACrCC,gBAAgB,GAAG,KAAK;IACxBC,OAAO,GAAG,IAAI;IACdC,qBAAqB,GAAG,KAAK;IAC7BC,SAAS,GAAG,KAAK;IACjBC,WAAW,GAAG,KAAK;IACnBC,WAAW,GAAG,KAAK;IACnBC,SAAS;IACTC,SAAS;IACTC,qBAAqB,GAAG,KAAK;IAC7BC,YAAY;IACZC,WAAW;IACXC,WAAW;IACXC,uBAAuB,GAAG,KAAK;IAC/BC,gBAAgB;IAChBC,gBAAgB,GAAG,KAAK;IACxBC,kBAAkB,GAAG,IAAI;IACzBC,kBAAkB,GAAG,IAAI;IACzBC,aAAa,GAAG,CAAC;IACjBC,oBAAoB;IACpBC,OAAO,GAAG,IAAI;IACdC,uBAAuB,GAAG,CAAC;IAC3BC,yBAAyB,GAAG,CAAC;IAC7BC,yBAAyB,GAAG,CAAC;IAC7BC,WAAW;IACXC,WAAW;IACXC,uBAAuB,GAAG,KAAK;IAC/BC,MAAM,EAAEC,YAAY;IACpBC,eAAe,GAAG,KAAK;IACvB,GAAGC;EACP,CAAC,GAAGhC,KAAK;EAET,MAAMiC,iBAAiB,GAAGxC,OAAO,CAAC,MAAM;IACpC,IAAI2B,aAAa,GAAG,CAAC,EAAE;MACnB,OAAO,CAAC;IACZ;IAEA,MAAMc,gBAAgB,GAAG5B,SAAS,GAAG,EAAE,GAAG,CAAC;IAE3C,IAAIc,aAAa,GAAGc,gBAAgB,EAAE;MAClC,OAAOA,gBAAgB;IAC3B;IAEA,OAAOC,IAAI,CAACC,KAAK,CAAChB,aAAa,CAAC;EACpC,CAAC,EAAE,CAACd,SAAS,EAAEc,aAAa,CAAC,CAAC;EAE9B,MAAMS,MAAM,GAAGpC,OAAO,CAClB,MACIK,cAAc,CAACgC,YAAY,EAAE;IACzBV,aAAa,EAAEa;EACnB,CAAC,CAAC,EAEN,CAACA,iBAAiB,EAAEH,YAAY,CACpC,CAAC;EAED,MAAMO,gBAAgB,GAAG5C,OAAO,CAC5B,OAAO;IACH6C,KAAK,EAAE,CAAA1B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE0B,KAAK,KAAI,CAAC;IAC/BC,OAAO,EAAE,CAAA3B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE2B,OAAO,KAAI,CAAC;IACnCC,OAAO,EAAE,CAAA5B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE4B,OAAO,KAAI;EACtC,CAAC,CAAC,EACF,CAAC5B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE0B,KAAK,EAAE1B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE2B,OAAO,EAAE3B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE4B,OAAO,CACtE,CAAC;EAED,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG/C,QAAQ,CAC9C0C,gBAAgB,CAACC,KACrB,CAAC;EACD,MAAM,CAACK,eAAe,EAAEC,kBAAkB,CAAC,GAAGjD,QAAQ,CAClD0C,gBAAgB,CAACE,OACrB,CAAC;EACD,MAAM,CAACM,eAAe,EAAEC,kBAAkB,CAAC,GAAGnD,QAAQ,CAClD0C,gBAAgB,CAACG,OACrB,CAAC;EAEDjD,SAAS,CAAC,MAAM;IACZyB,gBAAgB,aAAhBA,gBAAgB,eAAhBA,gBAAgB,CAAG;MACfsB,KAAK,EAAEG,aAAa;MACpBF,OAAO,EAAEI,eAAe;MACxBH,OAAO,EAAEK;IACb,CAAC,CAAC;IACF;EACJ,CAAC,EAAE,CAACJ,aAAa,EAAEE,eAAe,EAAEE,eAAe,CAAC,CAAC;EAErD,MAAME,sBAAsB,GAAGrD,MAAM,CAAoB,IAAI,CAAC;EAC9D,MAAMsD,wBAAwB,GAAGtD,MAAM,CAAoB,IAAI,CAAC;EAChE,MAAMuD,wBAAwB,GAAGvD,MAAM,CAAoB,IAAI,CAAC;EAEhEF,mBAAmB,CAACS,GAAG,EAAE;IAAA,IAAAiD,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAAA,OAAO;MAC5BC,KAAK,EAAGC,OAAO,IAAK;QAAA,IAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;QAChBf,gBAAgB,CAACL,gBAAgB,CAACC,KAAK,CAAC;QACxCM,kBAAkB,CAACP,gBAAgB,CAACE,OAAO,CAAC;QAC5CO,kBAAkB,CAACT,gBAAgB,CAACG,OAAO,CAAC;QAC5C,CAAAe,qBAAA,GAAAR,sBAAsB,CAACW,OAAO,cAAAH,qBAAA,eAA9BA,qBAAA,CAAgCF,KAAK,CAACC,OAAO,CAAC;QAC9C,CAAAE,qBAAA,GAAAR,wBAAwB,CAACU,OAAO,cAAAF,qBAAA,eAAhCA,qBAAA,CAAkCH,KAAK,CAACC,OAAO,CAAC;QAChD,CAAAG,qBAAA,GAAAR,wBAAwB,CAACS,OAAO,cAAAD,qBAAA,eAAhCA,qBAAA,CAAkCJ,KAAK,CAACC,OAAO,CAAC;MACpD,CAAC;MACDK,QAAQ,EAAEA,CAACC,KAAK,EAAEN,OAAO,KAAK;QAAA,IAAAO,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;QAC1BrB,gBAAgB,CAACkB,KAAK,CAACtB,KAAK,CAAC;QAC7BM,kBAAkB,CAACgB,KAAK,CAACrB,OAAO,CAAC;QACjCO,kBAAkB,CAACc,KAAK,CAACpB,OAAO,CAAC;QACjC,CAAAqB,sBAAA,GAAAd,sBAAsB,CAACW,OAAO,cAAAG,sBAAA,eAA9BA,sBAAA,CAAgCF,QAAQ,CAACC,KAAK,CAACtB,KAAK,EAAEgB,OAAO,CAAC;QAC9D,CAAAQ,sBAAA,GAAAd,wBAAwB,CAACU,OAAO,cAAAI,sBAAA,eAAhCA,sBAAA,CAAkCH,QAAQ,CACtCC,KAAK,CAACrB,OAAO,EACbe,OACJ,CAAC;QACD,CAAAS,sBAAA,GAAAd,wBAAwB,CAACS,OAAO,cAAAK,sBAAA,eAAhCA,sBAAA,CAAkCJ,QAAQ,CACtCC,KAAK,CAACpB,OAAO,EACbc,OACJ,CAAC;MACL,CAAC;MACDU,cAAc,EAAE;QACZ1B,KAAK,GAAAY,sBAAA,GAAEH,sBAAsB,CAACW,OAAO,cAAAR,sBAAA,uBAA9BA,sBAAA,CAAgCc,cAAc;QACrDzB,OAAO,GAAAY,sBAAA,GAAEH,wBAAwB,CAACU,OAAO,cAAAP,sBAAA,uBAAhCA,sBAAA,CAAkCa,cAAc;QACzDxB,OAAO,GAAAY,sBAAA,GAAEH,wBAAwB,CAACS,OAAO,cAAAN,sBAAA,uBAAhCA,sBAAA,CAAkCY;MAC/C;IACJ,CAAC;EAAA,CAAC,CAAC;EAEH,oBACI3E,KAAA,CAAA4E,aAAA,CAACrE,IAAI,EAAAsE,QAAA,KACG7C,oBAAoB;IACxB8C,KAAK,EAAEtC,MAAM,CAACuC,eAAgB;IAC9BC,MAAM,EAAC;EAAc,IACpB,CAAC/D,SAAS,gBACPjB,KAAA,CAAA4E,aAAA,CAACpE,cAAc,EAAAqE,QAAA;IACXjE,GAAG,EAAE8C,sBAAuB;IAC5B7C,6BAA6B,EACzBA,6BACH;IACDC,gBAAgB,EAAEA,gBAAiB;IACnCC,OAAO,EAAEA,OAAQ;IACjBC,qBAAqB,EAAEA,qBAAsB;IAC7CO,YAAY,EAAEyB,gBAAgB,CAACC,KAAM;IACrCgC,cAAc,EAAEvC,eAAgB;IAChCwC,UAAU,EAAE5D,qBAAsB;IAClC6D,KAAK,EACD/D,SAAS,KAAK,CAACsB,eAAe,GAAG,GAAG,GAAG0C,SAAS,CACnD;IACDC,KAAK,EAAEhE,SAAU;IACjBiE,aAAa,EAAE,EAAG;IAClB3D,gBAAgB,EAAE0B,gBAAiB;IACnCkC,kBAAkB,EAAE3D,gBAAiB;IACrCG,aAAa,EAAEa,iBAAkB;IACjCX,OAAO,EAAEA,OAAQ;IACjBuD,mBAAmB,EAAEtD,uBAAwB;IAC7CM,MAAM,EAAEA,MAAO;IACfwC,MAAM,EAAC;EAAsB,GACzBrC,UAAU,CACjB,CAAC,GACF,IAAI,EACP,CAACzB,WAAW,gBACTlB,KAAA,CAAA4E,aAAA,CAACpE,cAAc,EAAAqE,QAAA;IACXjE,GAAG,EAAE+C,wBAAyB;IAC9B9C,6BAA6B,EACzBA,6BACH;IACDC,gBAAgB,EAAEA,gBAAiB;IACnCE,qBAAqB,EAAEA,qBAAsB;IAC7CO,YAAY,EAAEyB,gBAAgB,CAACE,OAAQ;IACvCgC,UAAU,EAAExD,uBAAwB;IACpCyD,KAAK,EAAE3D,WAAW,IAAI,GAAI;IAC1B6D,KAAK,EAAE5D,WAAY;IACnB6D,aAAa,EAAE,EAAG;IAClB3D,gBAAgB,EAAE4B,kBAAmB;IACrCgC,kBAAkB,EAAE1D,kBAAmB;IACvCE,aAAa,EAAEa,iBAAkB;IACjC4C,mBAAmB,EAAErD,yBAA0B;IAC/CK,MAAM,EAAEA,MAAO;IACfwC,MAAM,EAAC;EAAwB,GAC3BrC,UAAU,CACjB,CAAC,GACF,IAAI,EACP,CAACxB,WAAW,gBACTnB,KAAA,CAAA4E,aAAA,CAACpE,cAAc,EAAAqE,QAAA;IACXjE,GAAG,EAAEgD,wBAAyB;IAC9B/C,6BAA6B,EACzBA,6BACH;IACDC,gBAAgB,EAAEA,gBAAiB;IACnCE,qBAAqB,EAAEA,qBAAsB;IAC7CO,YAAY,EAAEyB,gBAAgB,CAACG,OAAQ;IACvC+B,UAAU,EAAE3C,uBAAwB;IACpC4C,KAAK,EAAE9C,WAAW,IAAI,GAAI;IAC1BgD,KAAK,EAAE/C,WAAY;IACnBgD,aAAa,EAAE,EAAG;IAClB3D,gBAAgB,EAAE8B,kBAAmB;IACrC8B,kBAAkB,EAAEzD,kBAAmB;IACvCC,aAAa,EAAEa,iBAAkB;IACjC4C,mBAAmB,EAAEpD,yBAA0B;IAC/CI,MAAM,EAAEA,MAAO;IACfwC,MAAM,EAAC;EAAwB,GAC3BrC,UAAU,CACjB,CAAC,GACF,IACF,CAAC;AAEf,CACJ,CAAC;AAED,4BAAe3C,KAAK,CAACyF,IAAI,CAAC/E,WAAW,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { MutableRefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type {\n LinearGradientProps,\n SoundAssetType,\n LimitType,\n CustomFlatList,\n} from \"../DurationScroll/types\";\n\nimport type { CustomTimerPickerStyles } from \"./styles\";\n\nexport interface TimerPickerRef {\n latestDuration: {\n hours: MutableRefObject<number> | undefined;\n minutes: MutableRefObject<number> | undefined;\n seconds: MutableRefObject<number> | undefined;\n };\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n hours: number;\n minutes: number;\n seconds: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Audio?: any;\n FlatList?: CustomFlatList;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Haptics?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n aggressivelyGetLatestDuration?: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hourLabel?: string | React.ReactElement;\n hourLimit?: LimitType;\n hoursPickerIsDisabled?: boolean;\n initialValue?: {\n hours?: number;\n minutes?: number;\n seconds?: number;\n };\n minuteLabel?: string | React.ReactElement;\n minuteLimit?: LimitType;\n minutesPickerIsDisabled?: boolean;\n onDurationChange?: (duration: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n padHoursWithZero?: boolean;\n padMinutesWithZero?: boolean;\n padSecondsWithZero?: boolean;\n padWithNItems?: number;\n pickerContainerProps?: React.ComponentProps<typeof View>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n secondLabel?: string | React.ReactElement;\n secondLimit?: LimitType;\n secondsPickerIsDisabled?: boolean;\n styles?: CustomTimerPickerStyles;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n use12HourPicker?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { MutableRefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type {\n LinearGradientProps,\n SoundAssetType,\n LimitType,\n CustomFlatList,\n} from \"../DurationScroll/types\";\n\nimport type { CustomTimerPickerStyles } from \"./styles\";\n\nexport interface TimerPickerRef {\n latestDuration: {\n hours: MutableRefObject<number> | undefined;\n minutes: MutableRefObject<number> | undefined;\n seconds: MutableRefObject<number> | undefined;\n };\n reset: (options?: { animated?: boolean }) => void;\n setValue: (\n value: {\n hours: number;\n minutes: number;\n seconds: number;\n },\n options?: { animated?: boolean }\n ) => void;\n}\n\nexport interface TimerPickerProps {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Audio?: any;\n FlatList?: CustomFlatList;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Haptics?: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n aggressivelyGetLatestDuration?: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n clickSoundAsset?: SoundAssetType;\n disableInfiniteScroll?: boolean;\n hideHours?: boolean;\n hideMinutes?: boolean;\n hideSeconds?: boolean;\n hourLabel?: string | React.ReactElement;\n hourLimit?: LimitType;\n hoursPickerIsDisabled?: boolean;\n initialValue?: {\n hours?: number;\n minutes?: number;\n seconds?: number;\n };\n minuteLabel?: string | React.ReactElement;\n minuteLimit?: LimitType;\n minutesPickerIsDisabled?: boolean;\n onDurationChange?: (duration: {\n hours: number;\n minutes: number;\n seconds: number;\n }) => void;\n padHoursWithZero?: boolean;\n padMinutesWithZero?: boolean;\n padSecondsWithZero?: boolean;\n padWithNItems?: number;\n pickerContainerProps?: React.ComponentProps<typeof View>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pmLabel?: string;\n repeatHourNumbersNTimes?: number;\n repeatMinuteNumbersNTimes?: number;\n repeatSecondNumbersNTimes?: number;\n secondLabel?: string | React.ReactElement;\n secondLimit?: LimitType;\n secondsPickerIsDisabled?: boolean;\n styles?: CustomTimerPickerStyles;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n use12HourPicker?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -4,15 +4,15 @@ export const generateNumbers = (numberOfItems, options) => {
4
4
  return [];
5
5
  }
6
6
  let numbers = [];
7
- for (let i = 0; i <= numberOfItems; i++) {
7
+ for (let i = 0; i < numberOfItems; i++) {
8
8
  numbers.push(padNumber(i, {
9
9
  padWithZero: options.padNumbersWithZero
10
10
  }));
11
11
  }
12
- if ((options.repeatNTimes ?? 1) > 1) {
12
+ if (options.repeatNTimes > 1) {
13
13
  numbers = Array(options.repeatNTimes).fill(numbers).flat();
14
14
  }
15
- if (options.disableInfiniteScroll) {
15
+ if (options.disableInfiniteScroll || options.repeatNTimes === 1) {
16
16
  numbers.push(...Array(options.padWithNItems).fill(""));
17
17
  numbers.unshift(...Array(options.padWithNItems).fill(""));
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"names":["padNumber","generateNumbers","numberOfItems","options","numbers","i","push","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","generate12HourNumbers","hour"],"sources":["generateNumbers.ts"],"sourcesContent":["import { padNumber } from \"./padNumber\";\n\nexport const generateNumbers = (\n numberOfItems: number,\n options: {\n disableInfiniteScroll?: boolean;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes?: number;\n }\n) => {\n if (numberOfItems <= 0) {\n return [];\n }\n\n let numbers: string[] = [];\n for (let i = 0; i <= numberOfItems; i++) {\n numbers.push(padNumber(i, { padWithZero: options.padNumbersWithZero }));\n }\n\n if ((options.repeatNTimes ?? 1) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n if (options.disableInfiniteScroll) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n return numbers;\n};\n\nexport const generate12HourNumbers = (options: {\n disableInfiniteScroll?: boolean;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes?: number;\n}) => {\n let numbers: string[] = [];\n\n // Generate numbers from 0 to 11 for AM\n for (let i = 0; i <= 11; i++) {\n numbers.push(\n `${padNumber(i, { padWithZero: options.padNumbersWithZero })} AM`\n );\n }\n\n // Generate numbers from 12 to 11 for PM\n for (let i = 12; i <= 23; i++) {\n const hour = i > 12 ? i - 12 : i;\n numbers.push(\n `${padNumber(hour, { padWithZero: options.padNumbersWithZero })} PM`\n );\n }\n\n if ((options.repeatNTimes ?? 1) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n\n if (options.disableInfiniteScroll) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n\n return numbers;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAa;AAEvC,OAAO,MAAMC,eAAe,GAAGA,CAC3BC,aAAqB,EACrBC,OAKC,KACA;EACD,IAAID,aAAa,IAAI,CAAC,EAAE;IACpB,OAAO,EAAE;EACb;EAEA,IAAIE,OAAiB,GAAG,EAAE;EAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIH,aAAa,EAAEG,CAAC,EAAE,EAAE;IACrCD,OAAO,CAACE,IAAI,CAACN,SAAS,CAACK,CAAC,EAAE;MAAEE,WAAW,EAAEJ,OAAO,CAACK;IAAmB,CAAC,CAAC,CAAC;EAC3E;EAEA,IAAI,CAACL,OAAO,CAACM,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;IACjCL,OAAO,GAAGM,KAAK,CAACP,OAAO,CAACM,YAAY,CAAC,CAACE,IAAI,CAACP,OAAO,CAAC,CAACQ,IAAI,CAAC,CAAC;EAC9D;EACA,IAAIT,OAAO,CAACU,qBAAqB,EAAE;IAC/BT,OAAO,CAACE,IAAI,CAAC,GAAGI,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDP,OAAO,CAACW,OAAO,CAAC,GAAGL,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EACA,OAAOP,OAAO;AAClB,CAAC;AAED,OAAO,MAAMY,qBAAqB,GAAIb,OAKrC,IAAK;EACF,IAAIC,OAAiB,GAAG,EAAE;;EAE1B;EACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAI,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC1BD,OAAO,CAACE,IAAI,CACR,GAAGN,SAAS,CAACK,CAAC,EAAE;MAAEE,WAAW,EAAEJ,OAAO,CAACK;IAAmB,CAAC,CAAC,KAChE,CAAC;EACL;;EAEA;EACA,KAAK,IAAIH,CAAC,GAAG,EAAE,EAAEA,CAAC,IAAI,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC3B,MAAMY,IAAI,GAAGZ,CAAC,GAAG,EAAE,GAAGA,CAAC,GAAG,EAAE,GAAGA,CAAC;IAChCD,OAAO,CAACE,IAAI,CACR,GAAGN,SAAS,CAACiB,IAAI,EAAE;MAAEV,WAAW,EAAEJ,OAAO,CAACK;IAAmB,CAAC,CAAC,KACnE,CAAC;EACL;EAEA,IAAI,CAACL,OAAO,CAACM,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;IACjCL,OAAO,GAAGM,KAAK,CAACP,OAAO,CAACM,YAAY,CAAC,CAACE,IAAI,CAACP,OAAO,CAAC,CAACQ,IAAI,CAAC,CAAC;EAC9D;EAEA,IAAIT,OAAO,CAACU,qBAAqB,EAAE;IAC/BT,OAAO,CAACE,IAAI,CAAC,GAAGI,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDP,OAAO,CAACW,OAAO,CAAC,GAAGL,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EAEA,OAAOP,OAAO;AAClB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["padNumber","generateNumbers","numberOfItems","options","numbers","i","push","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","generate12HourNumbers","hour"],"sources":["generateNumbers.ts"],"sourcesContent":["import { padNumber } from \"./padNumber\";\n\nexport const generateNumbers = (\n numberOfItems: number,\n options: {\n disableInfiniteScroll?: boolean;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes: number;\n }\n) => {\n if (numberOfItems <= 0) {\n return [];\n }\n\n let numbers: string[] = [];\n for (let i = 0; i < numberOfItems; i++) {\n numbers.push(padNumber(i, { padWithZero: options.padNumbersWithZero }));\n }\n\n if (options.repeatNTimes > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n if (options.disableInfiniteScroll || options.repeatNTimes === 1) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n return numbers;\n};\n\nexport const generate12HourNumbers = (options: {\n disableInfiniteScroll?: boolean;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes?: number;\n}) => {\n let numbers: string[] = [];\n\n // Generate numbers from 0 to 11 for AM\n for (let i = 0; i <= 11; i++) {\n numbers.push(\n `${padNumber(i, { padWithZero: options.padNumbersWithZero })} AM`\n );\n }\n\n // Generate numbers from 12 to 11 for PM\n for (let i = 12; i <= 23; i++) {\n const hour = i > 12 ? i - 12 : i;\n numbers.push(\n `${padNumber(hour, { padWithZero: options.padNumbersWithZero })} PM`\n );\n }\n\n if ((options.repeatNTimes ?? 1) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n\n if (options.disableInfiniteScroll) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n\n return numbers;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAa;AAEvC,OAAO,MAAMC,eAAe,GAAGA,CAC3BC,aAAqB,EACrBC,OAKC,KACA;EACD,IAAID,aAAa,IAAI,CAAC,EAAE;IACpB,OAAO,EAAE;EACb;EAEA,IAAIE,OAAiB,GAAG,EAAE;EAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,aAAa,EAAEG,CAAC,EAAE,EAAE;IACpCD,OAAO,CAACE,IAAI,CAACN,SAAS,CAACK,CAAC,EAAE;MAAEE,WAAW,EAAEJ,OAAO,CAACK;IAAmB,CAAC,CAAC,CAAC;EAC3E;EAEA,IAAIL,OAAO,CAACM,YAAY,GAAG,CAAC,EAAE;IAC1BL,OAAO,GAAGM,KAAK,CAACP,OAAO,CAACM,YAAY,CAAC,CAACE,IAAI,CAACP,OAAO,CAAC,CAACQ,IAAI,CAAC,CAAC;EAC9D;EACA,IAAIT,OAAO,CAACU,qBAAqB,IAAIV,OAAO,CAACM,YAAY,KAAK,CAAC,EAAE;IAC7DL,OAAO,CAACE,IAAI,CAAC,GAAGI,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDP,OAAO,CAACW,OAAO,CAAC,GAAGL,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EACA,OAAOP,OAAO;AAClB,CAAC;AAED,OAAO,MAAMY,qBAAqB,GAAIb,OAKrC,IAAK;EACF,IAAIC,OAAiB,GAAG,EAAE;;EAE1B;EACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAI,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC1BD,OAAO,CAACE,IAAI,CACR,GAAGN,SAAS,CAACK,CAAC,EAAE;MAAEE,WAAW,EAAEJ,OAAO,CAACK;IAAmB,CAAC,CAAC,KAChE,CAAC;EACL;;EAEA;EACA,KAAK,IAAIH,CAAC,GAAG,EAAE,EAAEA,CAAC,IAAI,EAAE,EAAEA,CAAC,EAAE,EAAE;IAC3B,MAAMY,IAAI,GAAGZ,CAAC,GAAG,EAAE,GAAGA,CAAC,GAAG,EAAE,GAAGA,CAAC;IAChCD,OAAO,CAACE,IAAI,CACR,GAAGN,SAAS,CAACiB,IAAI,EAAE;MAAEV,WAAW,EAAEJ,OAAO,CAACK;IAAmB,CAAC,CAAC,KACnE,CAAC;EACL;EAEA,IAAI,CAACL,OAAO,CAACM,YAAY,IAAI,CAAC,IAAI,CAAC,EAAE;IACjCL,OAAO,GAAGM,KAAK,CAACP,OAAO,CAACM,YAAY,CAAC,CAACE,IAAI,CAACP,OAAO,CAAC,CAACQ,IAAI,CAAC,CAAC;EAC9D;EAEA,IAAIT,OAAO,CAACU,qBAAqB,EAAE;IAC/BT,OAAO,CAACE,IAAI,CAAC,GAAGI,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;IACtDP,OAAO,CAACW,OAAO,CAAC,GAAGL,KAAK,CAACP,OAAO,CAACW,aAAa,CAAC,CAACH,IAAI,CAAC,EAAE,CAAC,CAAC;EAC7D;EAEA,OAAOP,OAAO;AAClB,CAAC","ignoreList":[]}
@@ -1,19 +1,20 @@
1
1
  export const getAdjustedLimit = (limit, numberOfItems) => {
2
+ const maxIndex = numberOfItems - 1;
2
3
  if (!limit || !limit.max && !limit.min) {
3
4
  return {
4
- max: numberOfItems,
5
+ max: maxIndex,
5
6
  min: 0
6
7
  };
7
8
  }
8
9
 
9
10
  // guard against limits that are out of bounds
10
- const adjustedMaxLimit = limit.max ? Math.min(limit.max, numberOfItems) : numberOfItems;
11
+ const adjustedMaxLimit = limit.max ? Math.min(limit.max, maxIndex) : maxIndex;
11
12
  const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;
12
13
 
13
14
  // guard against invalid limits
14
15
  if (adjustedMaxLimit < adjustedMinLimit) {
15
16
  return {
16
- max: numberOfItems,
17
+ max: maxIndex,
17
18
  min: 0
18
19
  };
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"names":["getAdjustedLimit","limit","numberOfItems","max","min","adjustedMaxLimit","Math","adjustedMinLimit"],"sources":["getAdjustedLimit.ts"],"sourcesContent":["import type { LimitType } from \"../components/DurationScroll/types\";\n\nexport const getAdjustedLimit = (\n limit: LimitType | undefined,\n numberOfItems: number\n): {\n max: number;\n min: number;\n} => {\n if (!limit || (!limit.max && !limit.min)) {\n return {\n max: numberOfItems,\n min: 0,\n };\n }\n\n // guard against limits that are out of bounds\n const adjustedMaxLimit = limit.max\n ? Math.min(limit.max, numberOfItems)\n : numberOfItems;\n const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;\n\n // guard against invalid limits\n if (adjustedMaxLimit < adjustedMinLimit) {\n return {\n max: numberOfItems,\n min: 0,\n };\n }\n\n return {\n max: adjustedMaxLimit,\n min: adjustedMinLimit,\n };\n};\n"],"mappings":"AAEA,OAAO,MAAMA,gBAAgB,GAAGA,CAC5BC,KAA4B,EAC5BC,aAAqB,KAIpB;EACD,IAAI,CAACD,KAAK,IAAK,CAACA,KAAK,CAACE,GAAG,IAAI,CAACF,KAAK,CAACG,GAAI,EAAE;IACtC,OAAO;MACHD,GAAG,EAAED,aAAa;MAClBE,GAAG,EAAE;IACT,CAAC;EACL;;EAEA;EACA,MAAMC,gBAAgB,GAAGJ,KAAK,CAACE,GAAG,GAC5BG,IAAI,CAACF,GAAG,CAACH,KAAK,CAACE,GAAG,EAAED,aAAa,CAAC,GAClCA,aAAa;EACnB,MAAMK,gBAAgB,GAAGN,KAAK,CAACG,GAAG,GAAGE,IAAI,CAACH,GAAG,CAACF,KAAK,CAACG,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;;EAE/D;EACA,IAAIC,gBAAgB,GAAGE,gBAAgB,EAAE;IACrC,OAAO;MACHJ,GAAG,EAAED,aAAa;MAClBE,GAAG,EAAE;IACT,CAAC;EACL;EAEA,OAAO;IACHD,GAAG,EAAEE,gBAAgB;IACrBD,GAAG,EAAEG;EACT,CAAC;AACL,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getAdjustedLimit","limit","numberOfItems","maxIndex","max","min","adjustedMaxLimit","Math","adjustedMinLimit"],"sources":["getAdjustedLimit.ts"],"sourcesContent":["import type { LimitType } from \"../components/DurationScroll/types\";\n\nexport const getAdjustedLimit = (\n limit: LimitType | undefined,\n numberOfItems: number\n): {\n max: number;\n min: number;\n} => {\n const maxIndex = numberOfItems - 1;\n\n if (!limit || (!limit.max && !limit.min)) {\n return {\n max: maxIndex,\n min: 0,\n };\n }\n\n // guard against limits that are out of bounds\n const adjustedMaxLimit = limit.max\n ? Math.min(limit.max, maxIndex)\n : maxIndex;\n const adjustedMinLimit = limit.min ? Math.max(limit.min, 0) : 0;\n\n // guard against invalid limits\n if (adjustedMaxLimit < adjustedMinLimit) {\n return {\n max: maxIndex,\n min: 0,\n };\n }\n\n return {\n max: adjustedMaxLimit,\n min: adjustedMinLimit,\n };\n};\n"],"mappings":"AAEA,OAAO,MAAMA,gBAAgB,GAAGA,CAC5BC,KAA4B,EAC5BC,aAAqB,KAIpB;EACD,MAAMC,QAAQ,GAAGD,aAAa,GAAG,CAAC;EAElC,IAAI,CAACD,KAAK,IAAK,CAACA,KAAK,CAACG,GAAG,IAAI,CAACH,KAAK,CAACI,GAAI,EAAE;IACtC,OAAO;MACHD,GAAG,EAAED,QAAQ;MACbE,GAAG,EAAE;IACT,CAAC;EACL;;EAEA;EACA,MAAMC,gBAAgB,GAAGL,KAAK,CAACG,GAAG,GAC5BG,IAAI,CAACF,GAAG,CAACJ,KAAK,CAACG,GAAG,EAAED,QAAQ,CAAC,GAC7BA,QAAQ;EACd,MAAMK,gBAAgB,GAAGP,KAAK,CAACI,GAAG,GAAGE,IAAI,CAACH,GAAG,CAACH,KAAK,CAACI,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;;EAE/D;EACA,IAAIC,gBAAgB,GAAGE,gBAAgB,EAAE;IACrC,OAAO;MACHJ,GAAG,EAAED,QAAQ;MACbE,GAAG,EAAE;IACT,CAAC;EACL;EAEA,OAAO;IACHD,GAAG,EAAEE,gBAAgB;IACrBD,GAAG,EAAEG;EACT,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ export const getDurationAndIndexFromScrollOffset = variables => {
2
+ const {
3
+ disableInfiniteScroll,
4
+ itemHeight,
5
+ numberOfItems,
6
+ padWithNItems,
7
+ yContentOffset
8
+ } = variables;
9
+ const index = Math.round(yContentOffset / itemHeight);
10
+ const duration = (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems;
11
+ return {
12
+ duration,
13
+ index
14
+ };
15
+ };
16
+ //# sourceMappingURL=getDurationAndIndexFromScrollOffset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getDurationAndIndexFromScrollOffset","variables","disableInfiniteScroll","itemHeight","numberOfItems","padWithNItems","yContentOffset","index","Math","round","duration"],"sources":["getDurationAndIndexFromScrollOffset.ts"],"sourcesContent":["export const getDurationAndIndexFromScrollOffset = (variables: {\n disableInfiniteScroll: boolean;\n itemHeight: number;\n numberOfItems: number;\n padWithNItems: number;\n yContentOffset: number;\n}) => {\n const {\n disableInfiniteScroll,\n itemHeight,\n numberOfItems,\n padWithNItems,\n yContentOffset,\n } = variables;\n\n const index = Math.round(yContentOffset / itemHeight);\n\n const duration =\n (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems;\n\n return {\n duration,\n index,\n };\n};\n"],"mappings":"AAAA,OAAO,MAAMA,mCAAmC,GAAIC,SAMnD,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,UAAU;IACVC,aAAa;IACbC,aAAa;IACbC;EACJ,CAAC,GAAGL,SAAS;EAEb,MAAMM,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,cAAc,GAAGH,UAAU,CAAC;EAErD,MAAMO,QAAQ,GACV,CAACR,qBAAqB,GAAGK,KAAK,GAAGA,KAAK,GAAGF,aAAa,IAAID,aAAa;EAE3E,OAAO;IACHM,QAAQ;IACRH;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ export const getInitialScrollIndex = variables => {
2
+ const {
3
+ disableInfiniteScroll,
4
+ numberOfItems,
5
+ padWithNItems,
6
+ repeatNumbersNTimes,
7
+ value
8
+ } = variables;
9
+ return Math.max(numberOfItems * Math.floor(repeatNumbersNTimes / 2) + (value + numberOfItems) % numberOfItems - (!disableInfiniteScroll ? padWithNItems : 0), 0);
10
+ };
11
+ //# sourceMappingURL=getInitialScrollIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getInitialScrollIndex","variables","disableInfiniteScroll","numberOfItems","padWithNItems","repeatNumbersNTimes","value","Math","max","floor"],"sources":["getInitialScrollIndex.ts"],"sourcesContent":["export const getInitialScrollIndex = (variables: {\n disableInfiniteScroll: boolean;\n numberOfItems: number;\n padWithNItems: number;\n repeatNumbersNTimes: number;\n value: number;\n}) => {\n const {\n disableInfiniteScroll,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes,\n value,\n } = variables;\n\n return Math.max(\n numberOfItems * Math.floor(repeatNumbersNTimes / 2) +\n ((value + numberOfItems) % numberOfItems) -\n (!disableInfiniteScroll ? padWithNItems : 0),\n 0\n );\n};\n"],"mappings":"AAAA,OAAO,MAAMA,qBAAqB,GAAIC,SAMrC,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,aAAa;IACbC,aAAa;IACbC,mBAAmB;IACnBC;EACJ,CAAC,GAAGL,SAAS;EAEb,OAAOM,IAAI,CAACC,GAAG,CACXL,aAAa,GAAGI,IAAI,CAACE,KAAK,CAACJ,mBAAmB,GAAG,CAAC,CAAC,GAC9C,CAACC,KAAK,GAAGH,aAAa,IAAIA,aAAc,IACxC,CAACD,qBAAqB,GAAGE,aAAa,GAAG,CAAC,CAAC,EAChD,CACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -24,6 +24,7 @@ export interface DurationScrollProps {
24
24
  padWithNItems: number;
25
25
  pickerGradientOverlayProps?: Partial<LinearGradientProps>;
26
26
  pmLabel?: string;
27
+ repeatNumbersNTimes?: number;
27
28
  styles: ReturnType<typeof generateStyles>;
28
29
  testID?: string;
29
30
  topPickerGradientOverlayProps?: Partial<LinearGradientProps>;
@@ -56,6 +56,9 @@ export interface TimerPickerProps {
56
56
  pickerContainerProps?: React.ComponentProps<typeof View>;
57
57
  pickerGradientOverlayProps?: Partial<LinearGradientProps>;
58
58
  pmLabel?: string;
59
+ repeatHourNumbersNTimes?: number;
60
+ repeatMinuteNumbersNTimes?: number;
61
+ repeatSecondNumbersNTimes?: number;
59
62
  secondLabel?: string | React.ReactElement;
60
63
  secondLimit?: LimitType;
61
64
  secondsPickerIsDisabled?: boolean;
@@ -2,7 +2,7 @@ export declare const generateNumbers: (numberOfItems: number, options: {
2
2
  disableInfiniteScroll?: boolean;
3
3
  padNumbersWithZero?: boolean;
4
4
  padWithNItems: number;
5
- repeatNTimes?: number;
5
+ repeatNTimes: number;
6
6
  }) => string[];
7
7
  export declare const generate12HourNumbers: (options: {
8
8
  disableInfiniteScroll?: boolean;
@@ -0,0 +1,10 @@
1
+ export declare const getDurationAndIndexFromScrollOffset: (variables: {
2
+ disableInfiniteScroll: boolean;
3
+ itemHeight: number;
4
+ numberOfItems: number;
5
+ padWithNItems: number;
6
+ yContentOffset: number;
7
+ }) => {
8
+ duration: number;
9
+ index: number;
10
+ };
@@ -0,0 +1,7 @@
1
+ export declare const getInitialScrollIndex: (variables: {
2
+ disableInfiniteScroll: boolean;
3
+ numberOfItems: number;
4
+ padWithNItems: number;
5
+ repeatNumbersNTimes: number;
6
+ value: number;
7
+ }) => number;
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.10.1",
9
+ "version": "1.10.3",
10
10
  "main": "dist/commonjs/index.js",
11
11
  "module": "dist/module/index.js",
12
12
  "types": "dist/typescript/index.d.ts",
@@ -1,17 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getScrollIndex = void 0;
7
- const getScrollIndex = variables => {
8
- const {
9
- disableInfiniteScroll,
10
- numberOfItems,
11
- padWithNItems,
12
- value
13
- } = variables;
14
- return (value + numberOfItems) % (numberOfItems * 3) + (disableInfiniteScroll ? padWithNItems : 0) - (padWithNItems - 1);
15
- };
16
- exports.getScrollIndex = getScrollIndex;
17
- //# sourceMappingURL=getScrollIndex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getScrollIndex","variables","disableInfiniteScroll","numberOfItems","padWithNItems","value","exports"],"sources":["getScrollIndex.ts"],"sourcesContent":["export const getScrollIndex = (variables: {\n disableInfiniteScroll?: boolean;\n numberOfItems: number;\n padWithNItems: number;\n value: number;\n}) => {\n const { disableInfiniteScroll, numberOfItems, padWithNItems, value } =\n variables;\n\n return (\n ((value + numberOfItems) % (numberOfItems * 3)) +\n (disableInfiniteScroll ? padWithNItems : 0) -\n (padWithNItems - 1)\n );\n};\n"],"mappings":";;;;;;AAAO,MAAMA,cAAc,GAAIC,SAK9B,IAAK;EACF,MAAM;IAAEC,qBAAqB;IAAEC,aAAa;IAAEC,aAAa;IAAEC;EAAM,CAAC,GAChEJ,SAAS;EAEb,OACK,CAACI,KAAK,GAAGF,aAAa,KAAKA,aAAa,GAAG,CAAC,CAAC,IAC7CD,qBAAqB,GAAGE,aAAa,GAAG,CAAC,CAAC,IAC1CA,aAAa,GAAG,CAAC,CAAC;AAE3B,CAAC;AAACE,OAAA,CAAAN,cAAA,GAAAA,cAAA","ignoreList":[]}
@@ -1,10 +0,0 @@
1
- export const getScrollIndex = variables => {
2
- const {
3
- disableInfiniteScroll,
4
- numberOfItems,
5
- padWithNItems,
6
- value
7
- } = variables;
8
- return (value + numberOfItems) % (numberOfItems * 3) + (disableInfiniteScroll ? padWithNItems : 0) - (padWithNItems - 1);
9
- };
10
- //# sourceMappingURL=getScrollIndex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getScrollIndex","variables","disableInfiniteScroll","numberOfItems","padWithNItems","value"],"sources":["getScrollIndex.ts"],"sourcesContent":["export const getScrollIndex = (variables: {\n disableInfiniteScroll?: boolean;\n numberOfItems: number;\n padWithNItems: number;\n value: number;\n}) => {\n const { disableInfiniteScroll, numberOfItems, padWithNItems, value } =\n variables;\n\n return (\n ((value + numberOfItems) % (numberOfItems * 3)) +\n (disableInfiniteScroll ? padWithNItems : 0) -\n (padWithNItems - 1)\n );\n};\n"],"mappings":"AAAA,OAAO,MAAMA,cAAc,GAAIC,SAK9B,IAAK;EACF,MAAM;IAAEC,qBAAqB;IAAEC,aAAa;IAAEC,aAAa;IAAEC;EAAM,CAAC,GAChEJ,SAAS;EAEb,OACK,CAACI,KAAK,GAAGF,aAAa,KAAKA,aAAa,GAAG,CAAC,CAAC,IAC7CD,qBAAqB,GAAGE,aAAa,GAAG,CAAC,CAAC,IAC1CA,aAAa,GAAG,CAAC,CAAC;AAE3B,CAAC","ignoreList":[]}
@@ -1,6 +0,0 @@
1
- export declare const getScrollIndex: (variables: {
2
- disableInfiniteScroll?: boolean;
3
- numberOfItems: number;
4
- padWithNItems: number;
5
- value: number;
6
- }) => number;