react-native-timer-picker 2.6.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/commonjs/components/DurationScroll/DurationScroll.js +426 -0
  2. package/dist/commonjs/components/DurationScroll/DurationScroll.js.map +1 -0
  3. package/dist/commonjs/components/DurationScroll/index.js +27 -0
  4. package/dist/commonjs/components/DurationScroll/index.js.map +1 -0
  5. package/dist/commonjs/components/DurationScroll/types.js +6 -0
  6. package/dist/commonjs/components/DurationScroll/types.js.map +1 -0
  7. package/dist/commonjs/components/Modal/Modal.js +107 -0
  8. package/dist/commonjs/components/Modal/Modal.js.map +1 -0
  9. package/dist/commonjs/components/Modal/index.js +27 -0
  10. package/dist/commonjs/components/Modal/index.js.map +1 -0
  11. package/dist/commonjs/components/Modal/styles.js +25 -0
  12. package/dist/commonjs/components/Modal/styles.js.map +1 -0
  13. package/dist/commonjs/components/Modal/types.js +6 -0
  14. package/dist/commonjs/components/Modal/types.js.map +1 -0
  15. package/dist/commonjs/components/PickerItem/PickerItem.js +48 -0
  16. package/dist/commonjs/components/PickerItem/PickerItem.js.map +1 -0
  17. package/dist/commonjs/components/PickerItem/index.js +14 -0
  18. package/dist/commonjs/components/PickerItem/index.js.map +1 -0
  19. package/dist/commonjs/components/TimerPicker/TimerPicker.js +266 -0
  20. package/dist/commonjs/components/TimerPicker/TimerPicker.js.map +1 -0
  21. package/dist/commonjs/components/TimerPicker/index.js +39 -0
  22. package/dist/commonjs/components/TimerPicker/index.js.map +1 -0
  23. package/dist/commonjs/components/TimerPicker/styles.js +140 -0
  24. package/dist/commonjs/components/TimerPicker/styles.js.map +1 -0
  25. package/dist/commonjs/components/TimerPicker/types.js +6 -0
  26. package/dist/commonjs/components/TimerPicker/types.js.map +1 -0
  27. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js +173 -0
  28. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
  29. package/dist/commonjs/components/TimerPickerModal/index.js +39 -0
  30. package/dist/commonjs/components/TimerPickerModal/index.js.map +1 -0
  31. package/dist/commonjs/components/TimerPickerModal/styles.js +95 -0
  32. package/dist/commonjs/components/TimerPickerModal/styles.js.map +1 -0
  33. package/dist/commonjs/components/TimerPickerModal/types.js +6 -0
  34. package/dist/commonjs/components/TimerPickerModal/types.js.map +1 -0
  35. package/dist/commonjs/index.js +21 -0
  36. package/dist/commonjs/index.js.map +1 -0
  37. package/dist/commonjs/tests/DurationScroll.test.js +163 -0
  38. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -0
  39. package/dist/commonjs/tests/Modal.test.js +99 -0
  40. package/dist/commonjs/tests/Modal.test.js.map +1 -0
  41. package/dist/commonjs/tests/TimerPicker.test.js +161 -0
  42. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -0
  43. package/dist/commonjs/tests/TimerPickerModal.test.js +276 -0
  44. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -0
  45. package/dist/commonjs/tests/colorToRgba.test.js +176 -0
  46. package/dist/commonjs/tests/colorToRgba.test.js.map +1 -0
  47. package/dist/commonjs/tests/generateNumbers.test.js +350 -0
  48. package/dist/commonjs/tests/generateNumbers.test.js.map +1 -0
  49. package/dist/commonjs/tests/getAdjustedLimit.test.js +324 -0
  50. package/dist/commonjs/tests/getAdjustedLimit.test.js.map +1 -0
  51. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js +424 -0
  52. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  53. package/dist/commonjs/tests/getInitialScrollIndex.test.js +396 -0
  54. package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +1 -0
  55. package/dist/commonjs/tests/getSafeInitialValue.test.js +499 -0
  56. package/dist/commonjs/tests/getSafeInitialValue.test.js.map +1 -0
  57. package/dist/commonjs/tests/padNumber.test.js +301 -0
  58. package/dist/commonjs/tests/padNumber.test.js.map +1 -0
  59. package/dist/commonjs/utils/colorToRgba.js +87 -0
  60. package/dist/commonjs/utils/colorToRgba.js.map +1 -0
  61. package/dist/commonjs/utils/generateNumbers.js +124 -0
  62. package/dist/commonjs/utils/generateNumbers.js.map +1 -0
  63. package/dist/commonjs/utils/getAdjustedLimit.js +58 -0
  64. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -0
  65. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +62 -0
  66. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  67. package/dist/commonjs/utils/getInitialScrollIndex.js +57 -0
  68. package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
  69. package/dist/commonjs/utils/getSafeInitialValue.js +41 -0
  70. package/dist/commonjs/utils/getSafeInitialValue.js.map +1 -0
  71. package/dist/commonjs/utils/padNumber.js +40 -0
  72. package/dist/commonjs/utils/padNumber.js.map +1 -0
  73. package/dist/module/components/DurationScroll/DurationScroll.js +418 -0
  74. package/dist/module/components/DurationScroll/DurationScroll.js.map +1 -0
  75. package/dist/module/components/DurationScroll/index.js +3 -0
  76. package/dist/module/components/DurationScroll/index.js.map +1 -0
  77. package/dist/module/components/DurationScroll/types.js +2 -0
  78. package/dist/module/components/DurationScroll/types.js.map +1 -0
  79. package/dist/module/components/Modal/Modal.js +99 -0
  80. package/dist/module/components/Modal/Modal.js.map +1 -0
  81. package/dist/module/components/Modal/index.js +3 -0
  82. package/dist/module/components/Modal/index.js.map +1 -0
  83. package/dist/module/components/Modal/styles.js +19 -0
  84. package/dist/module/components/Modal/styles.js.map +1 -0
  85. package/dist/module/components/Modal/types.js +2 -0
  86. package/dist/module/components/Modal/types.js.map +1 -0
  87. package/dist/module/components/PickerItem/PickerItem.js +41 -0
  88. package/dist/module/components/PickerItem/PickerItem.js.map +1 -0
  89. package/dist/module/components/PickerItem/index.js +2 -0
  90. package/dist/module/components/PickerItem/index.js.map +1 -0
  91. package/dist/module/components/TimerPicker/TimerPicker.js +258 -0
  92. package/dist/module/components/TimerPicker/TimerPicker.js.map +1 -0
  93. package/dist/module/components/TimerPicker/index.js +4 -0
  94. package/dist/module/components/TimerPicker/index.js.map +1 -0
  95. package/dist/module/components/TimerPicker/styles.js +133 -0
  96. package/dist/module/components/TimerPicker/styles.js.map +1 -0
  97. package/dist/module/components/TimerPicker/types.js +2 -0
  98. package/dist/module/components/TimerPicker/types.js.map +1 -0
  99. package/dist/module/components/TimerPickerModal/TimerPickerModal.js +165 -0
  100. package/dist/module/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
  101. package/dist/module/components/TimerPickerModal/index.js +4 -0
  102. package/dist/module/components/TimerPickerModal/index.js.map +1 -0
  103. package/dist/module/components/TimerPickerModal/styles.js +88 -0
  104. package/dist/module/components/TimerPickerModal/styles.js.map +1 -0
  105. package/dist/module/components/TimerPickerModal/types.js +2 -0
  106. package/dist/module/components/TimerPickerModal/types.js.map +1 -0
  107. package/dist/module/index.js +3 -0
  108. package/dist/module/index.js.map +1 -0
  109. package/dist/module/tests/DurationScroll.test.js +160 -0
  110. package/dist/module/tests/DurationScroll.test.js.map +1 -0
  111. package/dist/module/tests/Modal.test.js +96 -0
  112. package/dist/module/tests/Modal.test.js.map +1 -0
  113. package/dist/module/tests/TimerPicker.test.js +159 -0
  114. package/dist/module/tests/TimerPicker.test.js.map +1 -0
  115. package/dist/module/tests/TimerPickerModal.test.js +273 -0
  116. package/dist/module/tests/TimerPickerModal.test.js.map +1 -0
  117. package/dist/module/tests/colorToRgba.test.js +174 -0
  118. package/dist/module/tests/colorToRgba.test.js.map +1 -0
  119. package/dist/module/tests/generateNumbers.test.js +348 -0
  120. package/dist/module/tests/generateNumbers.test.js.map +1 -0
  121. package/dist/module/tests/getAdjustedLimit.test.js +322 -0
  122. package/dist/module/tests/getAdjustedLimit.test.js.map +1 -0
  123. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js +422 -0
  124. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  125. package/dist/module/tests/getInitialScrollIndex.test.js +394 -0
  126. package/dist/module/tests/getInitialScrollIndex.test.js.map +1 -0
  127. package/dist/module/tests/getSafeInitialValue.test.js +496 -0
  128. package/dist/module/tests/getSafeInitialValue.test.js.map +1 -0
  129. package/dist/module/tests/padNumber.test.js +299 -0
  130. package/dist/module/tests/padNumber.test.js.map +1 -0
  131. package/dist/module/utils/colorToRgba.js +80 -0
  132. package/dist/module/utils/colorToRgba.js.map +1 -0
  133. package/dist/module/utils/generateNumbers.js +117 -0
  134. package/dist/module/utils/generateNumbers.js.map +1 -0
  135. package/dist/module/utils/getAdjustedLimit.js +51 -0
  136. package/dist/module/utils/getAdjustedLimit.js.map +1 -0
  137. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +55 -0
  138. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  139. package/dist/module/utils/getInitialScrollIndex.js +50 -0
  140. package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
  141. package/dist/module/utils/getSafeInitialValue.js +34 -0
  142. package/dist/module/utils/getSafeInitialValue.js.map +1 -0
  143. package/dist/module/utils/padNumber.js +33 -0
  144. package/dist/module/utils/padNumber.js.map +1 -0
  145. package/dist/typescript/components/DurationScroll/DurationScroll.d.ts +4 -0
  146. package/dist/typescript/components/DurationScroll/index.d.ts +2 -0
  147. package/dist/typescript/components/DurationScroll/types.d.ts +70 -0
  148. package/dist/typescript/components/Modal/Modal.d.ts +5 -0
  149. package/dist/typescript/components/Modal/index.d.ts +2 -0
  150. package/dist/typescript/components/Modal/styles.d.ts +17 -0
  151. package/dist/typescript/components/Modal/types.d.ts +16 -0
  152. package/dist/typescript/components/PickerItem/PickerItem.d.ts +19 -0
  153. package/dist/typescript/components/PickerItem/index.d.ts +1 -0
  154. package/dist/typescript/components/TimerPicker/TimerPicker.d.ts +4 -0
  155. package/dist/typescript/components/TimerPicker/index.d.ts +3 -0
  156. package/dist/typescript/components/TimerPicker/styles.d.ts +1583 -0
  157. package/dist/typescript/components/TimerPicker/types.d.ts +91 -0
  158. package/dist/typescript/components/TimerPickerModal/TimerPickerModal.d.ts +4 -0
  159. package/dist/typescript/components/TimerPickerModal/index.d.ts +3 -0
  160. package/dist/typescript/components/TimerPickerModal/styles.d.ts +952 -0
  161. package/dist/typescript/components/TimerPickerModal/types.d.ts +56 -0
  162. package/dist/typescript/index.d.ts +4 -0
  163. package/dist/typescript/tests/DurationScroll.test.d.ts +1 -0
  164. package/dist/typescript/tests/Modal.test.d.ts +1 -0
  165. package/dist/typescript/tests/TimerPicker.test.d.ts +1 -0
  166. package/dist/typescript/tests/TimerPickerModal.test.d.ts +1 -0
  167. package/dist/typescript/tests/colorToRgba.test.d.ts +1 -0
  168. package/dist/typescript/tests/generateNumbers.test.d.ts +1 -0
  169. package/dist/typescript/tests/getAdjustedLimit.test.d.ts +1 -0
  170. package/dist/typescript/tests/getDurationAndIndexFromScrollOffset.test.d.ts +1 -0
  171. package/dist/typescript/tests/getInitialScrollIndex.test.d.ts +1 -0
  172. package/dist/typescript/tests/getSafeInitialValue.test.d.ts +1 -0
  173. package/dist/typescript/tests/padNumber.test.d.ts +1 -0
  174. package/dist/typescript/utils/colorToRgba.d.ts +38 -0
  175. package/dist/typescript/utils/generateNumbers.d.ts +80 -0
  176. package/dist/typescript/utils/getAdjustedLimit.d.ts +30 -0
  177. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +49 -0
  178. package/dist/typescript/utils/getInitialScrollIndex.d.ts +46 -0
  179. package/dist/typescript/utils/getSafeInitialValue.d.ts +38 -0
  180. package/dist/typescript/utils/padNumber.d.ts +28 -0
  181. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useRef","useCallback","forwardRef","useImperativeHandle","useState","useEffect","useMemo","View","Text","FlatList","RNFlatList","colorToRgba","generate12HourNumbers","generateNumbers","getAdjustedLimit","getDurationAndIndexFromScrollOffset","getInitialScrollIndex","PickerItem","keyExtractor","item","index","toString","DurationScroll","props","ref","aggressivelyGetLatestDuration","allowFontScaling","amLabel","Audio","clickSoundAsset","decelerationRate","disableInfiniteScroll","Haptics","initialValue","interval","is12HourPicker","isDisabled","label","limit","LinearGradient","MaskedView","maximumValue","onDurationChange","padNumbersWithZero","padWithNItems","pickerColumnWidth","pickerFeedback","pickerGradientOverlayProps","pickerLabelGap","pmLabel","repeatNumbersNTimes","repeatNumbersNTimesNotExplicitlySet","selectedValue","styles","testID","labelPositionStyle","pickerLabelContainer","left","undefined","gap","fontSize","pickerItem","maxDigitCount","Math","max","String","length","halfNumberWidth","marginLeft","numberOfItems","floor","safeRepeatNumbersNTimes","isNaN","round","numbersForFlatList","repeatNTimes","initialScrollIndex","value","adjustedLimited","numberOfItemsToShow","latestDuration","lastFeedbackIndex","flatListRef","clickSound","setClickSound","soundInstance","loadSound","sound","newSound","Sound","createAsync","uri","shouldPlay","error","console","warn","_soundInstance","unloadAsync","playClickSound","replayAsync","renderItem","createElement","adjustedLimitedMax","adjustedLimitedMin","min","pickerAmPmPositionStyle","onScroll","e","newValues","itemHeight","pickerItemContainer","height","yContentOffset","nativeEvent","contentOffset","y","duration","current","feedbackIndex","selectionAsync","onMomentumScrollEnd","_flatListRef$current","targetScrollIndex","scrollToIndex","animated","_flatListRef$current2","onViewableItemsChanged","viewableItems","_viewableItems$","_viewableItems$2","_flatListRef$current3","_flatListRef$current4","viewabilityConfigCallbackPairs","setViewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","flatListRenderKey","setFlatListRenderKey","initialRender","prev","getItemLayout","_","offset","reset","options","_flatListRef$current5","setValue","_flatListRef$current6","renderContent","Fragment","key","contentContainerStyle","durationScrollFlatListContentContainer","data","nestedScrollEnabled","scrollEnabled","scrollEventThrottle","showsVerticalScrollIndicator","snapToAlignment","snapToOffsets","Array","map","i","style","durationScrollFlatList","windowSize","pointerEvents","pickerLabel","renderLinearGradient","colors","backgroundColor","pickerContainer","transparentBackgroundColor","color","opacity","gradientHeight","_extends","locations","pickerGradientOverlay","durationScrollFlatListContainer","flex","width","disabledPickerContainer","maskElement","maskedView","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useState,\n useEffect,\n useMemo,\n} from \"react\";\n\nimport { View, Text, FlatList as RNFlatList } from \"react-native\";\nimport type { ViewabilityConfigCallbackPairs, FlatListProps } from \"react-native\";\n\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport { generate12HourNumbers, generateNumbers } from \"../../utils/generateNumbers\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getDurationAndIndexFromScrollOffset } from \"../../utils/getDurationAndIndexFromScrollOffset\";\nimport { getInitialScrollIndex } from \"../../utils/getInitialScrollIndex\";\nimport PickerItem from \"../PickerItem\";\nimport type { DurationScrollProps, DurationScrollRef, ExpoAvAudioInstance } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst keyExtractor = (item: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>((props, ref) => {\n const {\n aggressivelyGetLatestDuration,\n allowFontScaling = false,\n amLabel,\n Audio,\n clickSoundAsset,\n decelerationRate = 0.88,\n disableInfiniteScroll = false,\n FlatList = RNFlatList,\n Haptics,\n initialValue = 0,\n interval,\n is12HourPicker,\n isDisabled,\n label,\n limit,\n LinearGradient,\n MaskedView,\n maximumValue,\n onDurationChange,\n padNumbersWithZero = false,\n padWithNItems,\n pickerColumnWidth,\n pickerFeedback,\n pickerGradientOverlayProps,\n pickerLabelGap,\n pmLabel,\n repeatNumbersNTimes = 3,\n repeatNumbersNTimesNotExplicitlySet,\n selectedValue,\n styles,\n testID,\n } = props;\n\n const labelPositionStyle = useMemo(() => {\n // When the style already has an explicit `left` (from legacy percentage system or\n // user override), don't apply pixel-based positioning.\n if (styles.pickerLabelContainer.left != null) {\n return undefined;\n }\n\n const gap = pickerLabelGap ?? 6;\n const fontSize = styles.pickerItem.fontSize ?? 25;\n const maxDigitCount = Math.max(2, String(maximumValue).length);\n const halfNumberWidth = (maxDigitCount * fontSize * 0.55) / 2;\n\n return {\n left: \"50%\" as const,\n marginLeft: halfNumberWidth + gap,\n };\n }, [maximumValue, pickerLabelGap, styles.pickerItem.fontSize, styles.pickerLabelContainer.left]);\n\n const numberOfItems = useMemo(() => {\n // guard against negative maximum values\n if (maximumValue < 0) {\n return 1;\n }\n\n return Math.floor(maximumValue / interval) + 1;\n }, [interval, maximumValue]);\n\n const safeRepeatNumbersNTimes = useMemo(() => {\n // do not repeat numbers if there is only one option\n if (numberOfItems === 1) {\n return 1;\n }\n\n if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {\n return 2;\n } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {\n return 1;\n }\n\n // if this variable is not explicitly set, we calculate a reasonable value based on\n // the number of items in the picker, avoiding regular jumps up/down the list\n // whilst avoiding rendering too many items in the picker\n if (repeatNumbersNTimesNotExplicitlySet) {\n return Math.max(Math.round(180 / numberOfItems), 1);\n }\n\n return Math.round(repeatNumbersNTimes);\n }, [\n disableInfiniteScroll,\n numberOfItems,\n repeatNumbersNTimes,\n repeatNumbersNTimesNotExplicitlySet,\n ]);\n\n const numbersForFlatList = useMemo(() => {\n if (is12HourPicker) {\n return generate12HourNumbers({\n disableInfiniteScroll,\n interval,\n padNumbersWithZero,\n padWithNItems,\n repeatNTimes: safeRepeatNumbersNTimes,\n });\n }\n\n return generateNumbers(numberOfItems, {\n disableInfiniteScroll,\n interval,\n padNumbersWithZero,\n padWithNItems,\n repeatNTimes: safeRepeatNumbersNTimes,\n });\n }, [\n disableInfiniteScroll,\n is12HourPicker,\n interval,\n numberOfItems,\n padNumbersWithZero,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]);\n\n const initialScrollIndex = useMemo(\n () =>\n getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: initialValue,\n }),\n [\n disableInfiniteScroll,\n initialValue,\n interval,\n numberOfItems,\n padWithNItems,\n safeRepeatNumbersNTimes,\n ]\n );\n\n const adjustedLimited = useMemo(\n () => getAdjustedLimit(limit, numberOfItems, interval),\n [interval, limit, numberOfItems]\n );\n\n const numberOfItemsToShow = 1 + padWithNItems * 2;\n\n // keep track of the latest duration as it scrolls\n const latestDuration = useRef(0);\n // keep track of the last index scrolled past for haptic/audio feedback\n const lastFeedbackIndex = useRef(0);\n\n const flatListRef = useRef<RNFlatList | null>(null);\n\n const [clickSound, setClickSound] = useState<ExpoAvAudioInstance | null>(null);\n\n useEffect(() => {\n // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version\n\n // preload the sound when the component mounts\n let soundInstance: ExpoAvAudioInstance | null = null;\n\n const loadSound = async () => {\n if (!Audio) {\n return;\n }\n\n try {\n const { sound: newSound } = await Audio.Sound.createAsync(\n clickSoundAsset ?? {\n // use a hosted sound as a fallback (do not use local asset due to loader issues\n // in some environments when including mp3 in library)\n uri: \"https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I\",\n },\n { shouldPlay: false }\n );\n soundInstance = newSound;\n setClickSound(newSound);\n } catch (error) {\n console.warn(\"Failed to load click sound:\", error);\n }\n };\n\n loadSound();\n\n return () => {\n // unload sound when component unmounts\n soundInstance?.unloadAsync();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [Audio]);\n\n const playClickSound = useCallback(async () => {\n if (!clickSound) return;\n\n try {\n await clickSound.replayAsync();\n } catch (error) {\n console.warn(\"Failed to play click sound:\", error);\n }\n }, [clickSound]);\n\n const renderItem = useCallback<NonNullable<FlatListProps<string>[\"renderItem\"]>>(\n ({ item }) => (\n <PickerItem\n adjustedLimitedMax={adjustedLimited.max}\n adjustedLimitedMin={adjustedLimited.min}\n allowFontScaling={allowFontScaling}\n amLabel={amLabel}\n is12HourPicker={is12HourPicker}\n item={item}\n pickerAmPmPositionStyle={labelPositionStyle}\n pmLabel={pmLabel}\n selectedValue={selectedValue}\n styles={styles}\n />\n ),\n [\n adjustedLimited.max,\n adjustedLimited.min,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n labelPositionStyle,\n pmLabel,\n selectedValue,\n styles,\n ]\n );\n\n const onScroll = useCallback<NonNullable<FlatListProps<string>[\"onScroll\"]>>(\n (e) => {\n // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback\n // it is used to ensure that the modal gets the latest duration on clicking\n // the confirm button, even if the scrollview is still scrolling\n if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {\n return;\n }\n\n if (aggressivelyGetLatestDuration) {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n if (newValues.duration !== latestDuration.current) {\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n newValues.duration = adjustedLimited.min;\n }\n\n latestDuration.current = newValues.duration;\n }\n }\n\n if (pickerFeedback || Haptics || Audio) {\n const feedbackIndex = Math.round(\n (e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) /\n styles.pickerItemContainer.height\n );\n\n if (feedbackIndex !== lastFeedbackIndex.current) {\n // this check stops the feedback firing when the component mounts\n if (lastFeedbackIndex.current) {\n // fire haptic feedback if available\n try {\n Haptics?.selectionAsync();\n } catch {\n // do nothing\n }\n\n // play click sound if available\n try {\n playClickSound();\n } catch {\n // do nothing\n }\n\n // fire custom feedback if available\n try {\n pickerFeedback?.();\n } catch {\n // do nothing\n }\n }\n\n lastFeedbackIndex.current = feedbackIndex;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n adjustedLimited.max,\n adjustedLimited.min,\n aggressivelyGetLatestDuration,\n playClickSound,\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n styles.pickerItemContainer.height,\n ]\n );\n\n const onMomentumScrollEnd = useCallback<\n NonNullable<FlatListProps<string>[\"onMomentumScrollEnd\"]>\n >(\n (e) => {\n const newValues = getDurationAndIndexFromScrollOffset({\n disableInfiniteScroll,\n interval,\n itemHeight: styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n yContentOffset: e.nativeEvent.contentOffset.y,\n });\n\n // check limits\n if (newValues.duration > adjustedLimited.max) {\n const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1,\n }); // scroll down to max\n newValues.duration = adjustedLimited.max;\n } else if (newValues.duration < adjustedLimited.min) {\n const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);\n flatListRef.current?.scrollToIndex({\n animated: true,\n index:\n // guard against scrolling beyond end of list\n targetScrollIndex <= numbersForFlatList.length - 1\n ? targetScrollIndex\n : adjustedLimited.min,\n }); // scroll up to min\n newValues.duration = adjustedLimited.min;\n }\n\n onDurationChange(newValues.duration);\n },\n [\n disableInfiniteScroll,\n interval,\n styles.pickerItemContainer.height,\n numberOfItems,\n padWithNItems,\n adjustedLimited.max,\n adjustedLimited.min,\n onDurationChange,\n numbersForFlatList.length,\n ]\n );\n\n const onViewableItemsChanged = useCallback<\n NonNullable<FlatListProps<string>[\"onViewableItemsChanged\"]>\n >(\n ({ viewableItems }) => {\n if (numberOfItems === 1) {\n return;\n }\n\n if (viewableItems[0]?.index && viewableItems[0].index < numberOfItems * 0.5) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index + numberOfItems,\n });\n } else if (\n viewableItems[0]?.index &&\n viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)\n ) {\n flatListRef.current?.scrollToIndex({\n animated: false,\n index: viewableItems[0].index - numberOfItems,\n });\n }\n },\n [numberOfItems, safeRepeatNumbersNTimes]\n );\n\n const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState<\n ViewabilityConfigCallbackPairs | undefined\n >(\n !disableInfiniteScroll\n ? [\n {\n onViewableItemsChanged: onViewableItemsChanged,\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n },\n ]\n : undefined\n );\n\n const [flatListRenderKey, setFlatListRenderKey] = useState(0);\n\n const initialRender = useRef(true);\n\n useEffect(() => {\n // don't run on first render\n if (initialRender.current) {\n initialRender.current = false;\n return;\n }\n\n // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs\n // which requires the FlatList to be remounted, hence the increase of the FlatList key\n setFlatListRenderKey((prev) => prev + 1);\n setViewabilityConfigCallbackPairs(\n !disableInfiniteScroll\n ? [\n {\n onViewableItemsChanged: onViewableItemsChanged,\n viewabilityConfig: {\n viewAreaCoveragePercentThreshold: 0,\n },\n },\n ]\n : undefined\n );\n }, [disableInfiniteScroll, onViewableItemsChanged]);\n\n const getItemLayout = useCallback<NonNullable<FlatListProps<string>[\"getItemLayout\"]>>(\n (_, index) => ({\n index,\n length: styles.pickerItemContainer.height,\n offset: styles.pickerItemContainer.height * index,\n }),\n [styles.pickerItemContainer.height]\n );\n\n useImperativeHandle(ref, () => ({\n latestDuration: latestDuration,\n reset: (options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: initialScrollIndex,\n });\n },\n setValue: (value, options) => {\n flatListRef.current?.scrollToIndex({\n animated: options?.animated ?? false,\n index: getInitialScrollIndex({\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes: safeRepeatNumbersNTimes,\n value: value,\n }),\n });\n },\n }));\n\n const renderContent = useMemo(() => {\n return (\n <>\n <FlatList\n key={flatListRenderKey}\n ref={flatListRef}\n contentContainerStyle={styles.durationScrollFlatListContentContainer}\n data={numbersForFlatList}\n decelerationRate={decelerationRate}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n keyExtractor={keyExtractor}\n nestedScrollEnabled\n onMomentumScrollEnd={onMomentumScrollEnd}\n onScroll={onScroll}\n renderItem={renderItem}\n scrollEnabled={!isDisabled}\n scrollEventThrottle={16}\n showsVerticalScrollIndicator={false}\n snapToAlignment=\"start\"\n // used in place of snapToInterval due to bug on Android\n snapToOffsets={[...Array(numbersForFlatList.length)].map(\n (_, i) => i * styles.pickerItemContainer.height\n )}\n style={styles.durationScrollFlatList}\n testID=\"duration-scroll-flatlist\"\n viewabilityConfigCallbackPairs={viewabilityConfigCallbackPairs}\n windowSize={numberOfItemsToShow}\n />\n <View pointerEvents=\"none\" style={[styles.pickerLabelContainer, labelPositionStyle]}>\n {typeof label === \"string\" ? (\n <Text allowFontScaling={allowFontScaling} style={styles.pickerLabel}>\n {label}\n </Text>\n ) : (\n label ?? null\n )}\n </View>\n </>\n );\n }, [\n FlatList,\n allowFontScaling,\n decelerationRate,\n flatListRenderKey,\n getItemLayout,\n initialScrollIndex,\n isDisabled,\n label,\n labelPositionStyle,\n numberOfItemsToShow,\n numbersForFlatList,\n onMomentumScrollEnd,\n onScroll,\n renderItem,\n styles.durationScrollFlatList,\n styles.durationScrollFlatListContentContainer,\n styles.pickerItemContainer.height,\n styles.pickerLabel,\n styles.pickerLabelContainer,\n viewabilityConfigCallbackPairs,\n ]);\n\n const renderLinearGradient = useMemo(() => {\n if (!LinearGradient) {\n return null;\n }\n\n let colors: string[];\n\n if (MaskedView) {\n // if using masked view, we only care about the opacity\n colors = [\"rgba(0,0,0,0)\", \"rgba(0,0,0,1)\", \"rgba(0,0,0,1)\", \"rgba(0,0,0,0)\"];\n } else {\n const backgroundColor = styles.pickerContainer.backgroundColor ?? \"white\";\n const transparentBackgroundColor = colorToRgba({\n color: backgroundColor,\n opacity: 0,\n });\n colors = [\n backgroundColor,\n transparentBackgroundColor,\n transparentBackgroundColor,\n backgroundColor,\n ];\n }\n\n // calculate the gradient height to cover the top item and bottom item\n const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;\n\n return (\n <LinearGradient\n colors={colors}\n locations={[0, gradientHeight, 1 - gradientHeight, 1]}\n pointerEvents=\"none\"\n style={styles.pickerGradientOverlay}\n {...pickerGradientOverlayProps}\n />\n );\n }, [\n LinearGradient,\n MaskedView,\n padWithNItems,\n pickerGradientOverlayProps,\n styles.pickerContainer.backgroundColor,\n styles.pickerGradientOverlay,\n ]);\n\n return (\n <View\n pointerEvents={isDisabled ? \"none\" : undefined}\n style={[\n styles.durationScrollFlatListContainer,\n pickerColumnWidth != null && { flex: 0, width: pickerColumnWidth },\n {\n height: styles.pickerItemContainer.height * numberOfItemsToShow,\n },\n isDisabled && styles.disabledPickerContainer,\n ]}\n testID={testID}\n >\n {MaskedView ? (\n <MaskedView maskElement={renderLinearGradient} style={[styles.maskedView]}>\n {renderContent}\n </MaskedView>\n ) : (\n <>\n {renderContent}\n {renderLinearGradient}\n </>\n )}\n </View>\n );\n});\n\nexport default React.memo(DurationScroll);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export { default } from "./DurationScroll";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default"],"sources":["index.ts"],"sourcesContent":["export { default } from \"./DurationScroll\";\n\nexport * from \"./types\";\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,kBAAkB;AAE1C,cAAc,SAAS","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type React from \"react\";\nimport { type RefObject } from \"react\";\n\nimport type { View } from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\nexport interface DurationScrollProps {\n aggressivelyGetLatestDuration: boolean;\n allowFontScaling?: boolean;\n amLabel?: string;\n Audio?: any;\n clickSoundAsset?: SoundAsset;\n decelerationRate?: number | \"normal\" | \"fast\";\n disableInfiniteScroll?: boolean;\n FlatList?: any;\n Haptics?: any;\n initialValue?: number;\n interval: number;\n is12HourPicker?: boolean;\n isDisabled?: boolean;\n label?: string | React.ReactElement;\n limit?: Limit;\n LinearGradient?: any;\n MaskedView?: any;\n maximumValue: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n pickerColumnWidth?: number;\n pickerFeedback?: () => void | Promise<void>;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n pickerLabelGap?: number;\n pmLabel?: string;\n repeatNumbersNTimes?: number;\n repeatNumbersNTimesNotExplicitlySet: boolean;\n selectedValue?: number;\n styles: ReturnType<typeof generateStyles>;\n testID?: string;\n}\n\nexport interface DurationScrollRef {\n latestDuration: RefObject<number>;\n reset: (options?: { animated?: boolean }) => void;\n setValue: (value: number, options?: { animated?: boolean }) => void;\n}\n\ntype LinearGradientPoint = {\n x: number;\n y: number;\n};\n\nexport type LinearGradientProps = React.ComponentProps<typeof View> & {\n colors: string[];\n end?: LinearGradientPoint | null;\n locations?: number[] | null;\n start?: LinearGradientPoint | null;\n};\n\nexport type Limit = {\n max?: number;\n min?: number;\n};\n\nexport type SoundAsset =\n | number\n | {\n headers?: Record<string, string>;\n overrideFileExtensionAndroid?: string;\n uri: string;\n };\n\nexport type ExpoAvAudioInstance = {\n replayAsync: () => Promise<void>;\n unloadAsync: () => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ import React, { useCallback, useEffect, useRef } from "react";
3
+ import { Animated, Easing, Modal as ReactNativeModal, TouchableWithoutFeedback, useWindowDimensions } from "react-native";
4
+ import { styles } from "./styles";
5
+ export const Modal = props => {
6
+ const {
7
+ animationDuration = 300,
8
+ children,
9
+ contentStyle,
10
+ isVisible = false,
11
+ modalProps,
12
+ onHide,
13
+ onOverlayPress,
14
+ overlayOpacity = 0.4,
15
+ overlayStyle,
16
+ testID = "modal"
17
+ } = props;
18
+ const {
19
+ height: screenHeight,
20
+ width: screenWidth
21
+ } = useWindowDimensions();
22
+ const isMounted = useRef(false);
23
+ const animatedOpacity = useRef(new Animated.Value(0));
24
+ useEffect(() => {
25
+ isMounted.current = true;
26
+ if (isVisible) {
27
+ show();
28
+ }
29
+ return () => {
30
+ isMounted.current = false;
31
+ };
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ }, []);
34
+ const backdropAnimatedStyle = {
35
+ opacity: animatedOpacity.current.interpolate({
36
+ inputRange: [0, 1],
37
+ outputRange: [0, overlayOpacity]
38
+ })
39
+ };
40
+ const contentAnimatedStyle = {
41
+ transform: [{
42
+ translateY: animatedOpacity.current.interpolate({
43
+ extrapolate: "clamp",
44
+ inputRange: [0, 1],
45
+ outputRange: [screenHeight, 0]
46
+ })
47
+ }]
48
+ };
49
+ const show = useCallback(() => {
50
+ Animated.timing(animatedOpacity.current, {
51
+ duration: animationDuration,
52
+ easing: Easing.inOut(Easing.quad),
53
+ toValue: 1,
54
+ // Using native driver in the modal makes the content flash
55
+ useNativeDriver: true
56
+ }).start();
57
+ }, [animationDuration]);
58
+ const hide = useCallback(() => {
59
+ Animated.timing(animatedOpacity.current, {
60
+ duration: animationDuration,
61
+ easing: Easing.inOut(Easing.quad),
62
+ toValue: 0,
63
+ // Using native driver in the modal makes the content flash
64
+ useNativeDriver: true
65
+ }).start(() => {
66
+ if (isMounted.current) {
67
+ onHide === null || onHide === void 0 || onHide();
68
+ }
69
+ });
70
+ }, [animationDuration, onHide]);
71
+ useEffect(() => {
72
+ if (isVisible) {
73
+ show();
74
+ } else {
75
+ hide();
76
+ }
77
+ // eslint-disable-next-line react-hooks/exhaustive-deps
78
+ }, [isVisible]);
79
+ return /*#__PURE__*/React.createElement(ReactNativeModal, _extends({
80
+ animationType: "fade",
81
+ transparent: true,
82
+ visible: isVisible
83
+ }, modalProps, {
84
+ testID: testID
85
+ }), /*#__PURE__*/React.createElement(TouchableWithoutFeedback, {
86
+ onPress: onOverlayPress,
87
+ testID: "modal-backdrop"
88
+ }, /*#__PURE__*/React.createElement(Animated.View, {
89
+ style: [styles.backdrop, backdropAnimatedStyle, {
90
+ height: screenHeight,
91
+ width: screenWidth
92
+ }, overlayStyle]
93
+ })), /*#__PURE__*/React.createElement(Animated.View, {
94
+ pointerEvents: "box-none",
95
+ style: [styles.content, contentAnimatedStyle, contentStyle]
96
+ }, children));
97
+ };
98
+ export default /*#__PURE__*/React.memo(Modal);
99
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","Animated","Easing","Modal","ReactNativeModal","TouchableWithoutFeedback","useWindowDimensions","styles","props","animationDuration","children","contentStyle","isVisible","modalProps","onHide","onOverlayPress","overlayOpacity","overlayStyle","testID","height","screenHeight","width","screenWidth","isMounted","animatedOpacity","Value","current","show","backdropAnimatedStyle","opacity","interpolate","inputRange","outputRange","contentAnimatedStyle","transform","translateY","extrapolate","timing","duration","easing","inOut","quad","toValue","useNativeDriver","start","hide","createElement","_extends","animationType","transparent","visible","onPress","View","style","backdrop","pointerEvents","content","memo"],"sources":["Modal.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\n\nimport {\n Animated,\n Easing,\n Modal as ReactNativeModal,\n TouchableWithoutFeedback,\n useWindowDimensions,\n} from \"react-native\";\n\nimport { styles } from \"./styles\";\nimport type { ModalProps } from \"./types\";\n\nexport const Modal = (props: ModalProps) => {\n const {\n animationDuration = 300,\n children,\n contentStyle,\n isVisible = false,\n modalProps,\n onHide,\n onOverlayPress,\n overlayOpacity = 0.4,\n overlayStyle,\n testID = \"modal\",\n } = props;\n\n const { height: screenHeight, width: screenWidth } = useWindowDimensions();\n\n const isMounted = useRef(false);\n const animatedOpacity = useRef(new Animated.Value(0));\n\n useEffect(() => {\n isMounted.current = true;\n if (isVisible) {\n show();\n }\n\n return () => {\n isMounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const backdropAnimatedStyle = {\n opacity: animatedOpacity.current.interpolate({\n inputRange: [0, 1],\n outputRange: [0, overlayOpacity],\n }),\n };\n const contentAnimatedStyle = {\n transform: [\n {\n translateY: animatedOpacity.current.interpolate({\n extrapolate: \"clamp\",\n inputRange: [0, 1],\n outputRange: [screenHeight, 0],\n }),\n },\n ],\n };\n\n const show = useCallback(() => {\n Animated.timing(animatedOpacity.current, {\n duration: animationDuration,\n easing: Easing.inOut(Easing.quad),\n toValue: 1,\n // Using native driver in the modal makes the content flash\n useNativeDriver: true,\n }).start();\n }, [animationDuration]);\n\n const hide = useCallback(() => {\n Animated.timing(animatedOpacity.current, {\n duration: animationDuration,\n easing: Easing.inOut(Easing.quad),\n toValue: 0,\n // Using native driver in the modal makes the content flash\n useNativeDriver: true,\n }).start(() => {\n if (isMounted.current) {\n onHide?.();\n }\n });\n }, [animationDuration, onHide]);\n\n useEffect(() => {\n if (isVisible) {\n show();\n } else {\n hide();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isVisible]);\n\n return (\n <ReactNativeModal\n animationType=\"fade\"\n transparent\n visible={isVisible}\n {...modalProps}\n testID={testID}\n >\n <TouchableWithoutFeedback onPress={onOverlayPress} testID=\"modal-backdrop\">\n <Animated.View\n style={[\n styles.backdrop,\n backdropAnimatedStyle,\n { height: screenHeight, width: screenWidth },\n overlayStyle,\n ]}\n />\n </TouchableWithoutFeedback>\n <Animated.View\n pointerEvents=\"box-none\"\n style={[styles.content, contentAnimatedStyle, contentStyle]}\n >\n {children}\n </Animated.View>\n </ReactNativeModal>\n );\n};\n\nexport default React.memo(Modal);\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export { default } from "./Modal";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default"],"sources":["index.ts"],"sourcesContent":["export { default } from \"./Modal\";\n\nexport * from \"./types\";\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,SAAS;AAEjC,cAAc,SAAS","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import { StyleSheet } from "react-native";
2
+ export const styles = StyleSheet.create({
3
+ backdrop: {
4
+ backgroundColor: "black",
5
+ bottom: 0,
6
+ left: 0,
7
+ opacity: 0,
8
+ position: "absolute",
9
+ right: 0,
10
+ top: 0
11
+ },
12
+ content: {
13
+ alignItems: "center",
14
+ flex: 1,
15
+ justifyContent: "center",
16
+ zIndex: 1
17
+ }
18
+ });
19
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","styles","create","backdrop","backgroundColor","bottom","left","opacity","position","right","top","content","alignItems","flex","justifyContent","zIndex"],"sources":["styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n backdrop: {\n backgroundColor: \"black\",\n bottom: 0,\n left: 0,\n opacity: 0,\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n content: {\n alignItems: \"center\",\n flex: 1,\n justifyContent: \"center\",\n zIndex: 1,\n },\n});\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,OAAO,MAAMC,MAAM,GAAGD,UAAU,CAACE,MAAM,CAAC;EACtCC,QAAQ,EAAE;IACRC,eAAe,EAAE,OAAO;IACxBC,MAAM,EAAE,CAAC;IACTC,IAAI,EAAE,CAAC;IACPC,OAAO,EAAE,CAAC;IACVC,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE,CAAC;IACRC,GAAG,EAAE;EACP,CAAC;EACDC,OAAO,EAAE;IACPC,UAAU,EAAE,QAAQ;IACpBC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from \"react\";\nimport { type ComponentProps } from \"react\";\n\nimport type { ViewStyle } from \"react-native\";\nimport type { Modal as ReactNativeModal } from \"react-native\";\n\nexport interface ModalProps {\n animationDuration?: number;\n children?: React.ReactElement;\n contentStyle?: ViewStyle;\n isVisible?: boolean;\n modalProps?: ComponentProps<typeof ReactNativeModal>;\n onHide?: () => void;\n onOverlayPress?: () => void;\n overlayOpacity?: number;\n overlayStyle?: ViewStyle;\n testID?: string;\n}\n"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,41 @@
1
+ import React from "react";
2
+ import { View, Text } from "react-native";
3
+ const PickerItem = /*#__PURE__*/React.memo(({
4
+ adjustedLimitedMax,
5
+ adjustedLimitedMin,
6
+ allowFontScaling,
7
+ amLabel,
8
+ is12HourPicker,
9
+ item,
10
+ pickerAmPmPositionStyle,
11
+ pmLabel,
12
+ selectedValue,
13
+ styles
14
+ }) => {
15
+ let stringItem = item;
16
+ let intItem;
17
+ let isAm;
18
+ if (!is12HourPicker) {
19
+ intItem = parseInt(item);
20
+ } else {
21
+ isAm = item.includes("AM");
22
+ stringItem = item.replace(/\s[AP]M/g, "");
23
+ intItem = parseInt(stringItem);
24
+ }
25
+ const isSelected = intItem === selectedValue;
26
+ return /*#__PURE__*/React.createElement(View, {
27
+ key: item,
28
+ style: styles.pickerItemContainer,
29
+ testID: "picker-item"
30
+ }, /*#__PURE__*/React.createElement(Text, {
31
+ allowFontScaling: allowFontScaling,
32
+ style: [styles.pickerItem, isSelected && styles.selectedPickerItem, intItem > adjustedLimitedMax || intItem < adjustedLimitedMin ? styles.disabledPickerItem : {}]
33
+ }, stringItem), is12HourPicker && /*#__PURE__*/React.createElement(View, {
34
+ style: [styles.pickerAmPmContainer, pickerAmPmPositionStyle]
35
+ }, /*#__PURE__*/React.createElement(Text, {
36
+ allowFontScaling: allowFontScaling,
37
+ style: styles.pickerAmPmLabel
38
+ }, isAm ? amLabel : pmLabel)));
39
+ });
40
+ export default PickerItem;
41
+ //# sourceMappingURL=PickerItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","View","Text","PickerItem","memo","adjustedLimitedMax","adjustedLimitedMin","allowFontScaling","amLabel","is12HourPicker","item","pickerAmPmPositionStyle","pmLabel","selectedValue","styles","stringItem","intItem","isAm","parseInt","includes","replace","isSelected","createElement","key","style","pickerItemContainer","testID","pickerItem","selectedPickerItem","disabledPickerItem","pickerAmPmContainer","pickerAmPmLabel"],"sources":["PickerItem.tsx"],"sourcesContent":["import React from \"react\";\n\nimport { View, Text } from \"react-native\";\n\nimport type { generateStyles } from \"../TimerPicker/styles\";\n\ninterface PickerItemProps {\n adjustedLimitedMax: number;\n adjustedLimitedMin: number;\n allowFontScaling: boolean;\n amLabel?: string;\n is12HourPicker?: boolean;\n item: string;\n pickerAmPmPositionStyle?: { left: \"50%\"; marginLeft: number };\n pmLabel?: string;\n selectedValue?: number;\n styles: ReturnType<typeof generateStyles>;\n}\n\nconst PickerItem = React.memo<PickerItemProps>(\n ({\n adjustedLimitedMax,\n adjustedLimitedMin,\n allowFontScaling,\n amLabel,\n is12HourPicker,\n item,\n pickerAmPmPositionStyle,\n pmLabel,\n selectedValue,\n styles,\n }) => {\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 const isSelected = intItem === selectedValue;\n\n return (\n <View key={item} style={styles.pickerItemContainer} testID=\"picker-item\">\n <Text\n allowFontScaling={allowFontScaling}\n style={[\n styles.pickerItem,\n isSelected && styles.selectedPickerItem,\n intItem > adjustedLimitedMax || intItem < adjustedLimitedMin\n ? styles.disabledPickerItem\n : {},\n ]}\n >\n {stringItem}\n </Text>\n {is12HourPicker && (\n <View style={[styles.pickerAmPmContainer, pickerAmPmPositionStyle]}>\n <Text allowFontScaling={allowFontScaling} style={styles.pickerAmPmLabel}>\n {isAm ? amLabel : pmLabel}\n </Text>\n </View>\n )}\n </View>\n );\n }\n);\n\nexport default PickerItem;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAiBzC,MAAMC,UAAU,gBAAGH,KAAK,CAACI,IAAI,CAC3B,CAAC;EACCC,kBAAkB;EAClBC,kBAAkB;EAClBC,gBAAgB;EAChBC,OAAO;EACPC,cAAc;EACdC,IAAI;EACJC,uBAAuB;EACvBC,OAAO;EACPC,aAAa;EACbC;AACF,CAAC,KAAK;EACJ,IAAIC,UAAU,GAAGL,IAAI;EACrB,IAAIM,OAAe;EACnB,IAAIC,IAAyB;EAE7B,IAAI,CAACR,cAAc,EAAE;IACnBO,OAAO,GAAGE,QAAQ,CAACR,IAAI,CAAC;EAC1B,CAAC,MAAM;IACLO,IAAI,GAAGP,IAAI,CAACS,QAAQ,CAAC,IAAI,CAAC;IAC1BJ,UAAU,GAAGL,IAAI,CAACU,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IACzCJ,OAAO,GAAGE,QAAQ,CAACH,UAAU,CAAC;EAChC;EAEA,MAAMM,UAAU,GAAGL,OAAO,KAAKH,aAAa;EAE5C,oBACEb,KAAA,CAAAsB,aAAA,CAACrB,IAAI;IAACsB,GAAG,EAAEb,IAAK;IAACc,KAAK,EAAEV,MAAM,CAACW,mBAAoB;IAACC,MAAM,EAAC;EAAa,gBACtE1B,KAAA,CAAAsB,aAAA,CAACpB,IAAI;IACHK,gBAAgB,EAAEA,gBAAiB;IACnCiB,KAAK,EAAE,CACLV,MAAM,CAACa,UAAU,EACjBN,UAAU,IAAIP,MAAM,CAACc,kBAAkB,EACvCZ,OAAO,GAAGX,kBAAkB,IAAIW,OAAO,GAAGV,kBAAkB,GACxDQ,MAAM,CAACe,kBAAkB,GACzB,CAAC,CAAC;EACN,GAEDd,UACG,CAAC,EACNN,cAAc,iBACbT,KAAA,CAAAsB,aAAA,CAACrB,IAAI;IAACuB,KAAK,EAAE,CAACV,MAAM,CAACgB,mBAAmB,EAAEnB,uBAAuB;EAAE,gBACjEX,KAAA,CAAAsB,aAAA,CAACpB,IAAI;IAACK,gBAAgB,EAAEA,gBAAiB;IAACiB,KAAK,EAAEV,MAAM,CAACiB;EAAgB,GACrEd,IAAI,GAAGT,OAAO,GAAGI,OACd,CACF,CAEJ,CAAC;AAEX,CACF,CAAC;AAED,eAAeT,UAAU","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { default } from "./PickerItem";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["default"],"sources":["index.ts"],"sourcesContent":["export { default } from \"./PickerItem\";\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,cAAc","ignoreList":[]}
@@ -0,0 +1,258 @@
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
2
+ import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
3
+ import { View } from "react-native";
4
+ import { getSafeInitialValue } from "../../utils/getSafeInitialValue";
5
+ import DurationScroll from "../DurationScroll";
6
+ import { generateStyles } from "./styles";
7
+ const resolvePerColumn = (value, column) => {
8
+ if (value == null) {
9
+ return undefined;
10
+ }
11
+ if (typeof value === "number") {
12
+ return value;
13
+ }
14
+ return value[column];
15
+ };
16
+ const TimerPicker = /*#__PURE__*/forwardRef((props, ref) => {
17
+ const {
18
+ aggressivelyGetLatestDuration = false,
19
+ allowFontScaling = false,
20
+ amLabel = "am",
21
+ dayInterval = 1,
22
+ dayLabel,
23
+ dayLimit,
24
+ daysPickerIsDisabled = false,
25
+ decelerationRate = 0.88,
26
+ disableInfiniteScroll = false,
27
+ hideDays = true,
28
+ hideHours = false,
29
+ hideMinutes = false,
30
+ hideSeconds = false,
31
+ hourInterval = 1,
32
+ hourLabel,
33
+ hourLimit,
34
+ hoursPickerIsDisabled = false,
35
+ initialValue,
36
+ maximumDays = 30,
37
+ maximumHours = 23,
38
+ maximumMinutes = 59,
39
+ maximumSeconds = 59,
40
+ minuteInterval = 1,
41
+ minuteLabel,
42
+ minuteLimit,
43
+ minutesPickerIsDisabled = false,
44
+ onDurationChange,
45
+ padDaysWithZero = false,
46
+ padHoursWithZero = false,
47
+ padMinutesWithZero = true,
48
+ padSecondsWithZero = true,
49
+ padWithNItems = 1,
50
+ pickerContainerProps,
51
+ pmLabel = "pm",
52
+ repeatDayNumbersNTimes = 3,
53
+ repeatHourNumbersNTimes = 8,
54
+ repeatMinuteNumbersNTimes = 3,
55
+ repeatSecondNumbersNTimes = 3,
56
+ secondInterval = 1,
57
+ secondLabel,
58
+ secondLimit,
59
+ secondsPickerIsDisabled = false,
60
+ styles: customStyles,
61
+ use12HourPicker = false,
62
+ ...otherProps
63
+ } = props;
64
+ useEffect(() => {
65
+ if (otherProps.Audio) {
66
+ console.warn('The "Audio" prop is deprecated and will be removed in a future version. Please use the "pickerFeedback" prop instead.');
67
+ }
68
+ if (otherProps.Haptics) {
69
+ console.warn('The "Haptics" prop is deprecated and will be removed in a future version. Please use the "pickerFeedback" prop instead.');
70
+ }
71
+ if (otherProps.clickSoundAsset) {
72
+ console.warn('The "clickSoundAsset" prop is deprecated and will be removed in a future version. Please use the "pickerFeedback" prop instead.');
73
+ }
74
+ if ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.labelOffsetPercentage) != null) {
75
+ if ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelGap) != null) {
76
+ console.warn("labelOffsetPercentage is ignored when pickerLabelGap is set. Please remove labelOffsetPercentage.");
77
+ } else {
78
+ console.warn('The "labelOffsetPercentage" style prop is deprecated and will be removed in a future version. Please use the "pickerLabelGap" style prop instead.');
79
+ }
80
+ }
81
+ }, [otherProps.Audio, otherProps.Haptics, otherProps.clickSoundAsset, customStyles === null || customStyles === void 0 ? void 0 : customStyles.labelOffsetPercentage, customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelGap]);
82
+ const safePadWithNItems = useMemo(() => {
83
+ if (padWithNItems < 0 || isNaN(padWithNItems)) {
84
+ return 0;
85
+ }
86
+ const maxPadWithNItems = hideHours ? 15 : 6;
87
+ if (padWithNItems > maxPadWithNItems) {
88
+ return maxPadWithNItems;
89
+ }
90
+ return Math.round(padWithNItems);
91
+ }, [hideHours, padWithNItems]);
92
+ const safeInitialValue = useMemo(() => getSafeInitialValue({
93
+ days: initialValue === null || initialValue === void 0 ? void 0 : initialValue.days,
94
+ hours: initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours,
95
+ minutes: initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes,
96
+ seconds: initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds
97
+ }), [initialValue === null || initialValue === void 0 ? void 0 : initialValue.days, 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]);
98
+ const pickerLabelGap = customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelGap;
99
+ const pickerColumnWidth = customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerColumnWidth;
100
+ const styles = useMemo(() => generateStyles(customStyles), [customStyles]);
101
+ const [selectedDays, setSelectedDays] = useState(safeInitialValue.days);
102
+ const [selectedHours, setSelectedHours] = useState(safeInitialValue.hours);
103
+ const [selectedMinutes, setSelectedMinutes] = useState(safeInitialValue.minutes);
104
+ const [selectedSeconds, setSelectedSeconds] = useState(safeInitialValue.seconds);
105
+ useEffect(() => {
106
+ onDurationChange === null || onDurationChange === void 0 || onDurationChange({
107
+ days: selectedDays,
108
+ hours: selectedHours,
109
+ minutes: selectedMinutes,
110
+ seconds: selectedSeconds
111
+ });
112
+ // eslint-disable-next-line react-hooks/exhaustive-deps
113
+ }, [selectedDays, selectedHours, selectedMinutes, selectedSeconds]);
114
+ const daysDurationScrollRef = useRef(null);
115
+ const hoursDurationScrollRef = useRef(null);
116
+ const minutesDurationScrollRef = useRef(null);
117
+ const secondsDurationScrollRef = useRef(null);
118
+ useImperativeHandle(ref, () => {
119
+ var _daysDurationScrollRe, _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
120
+ return {
121
+ latestDuration: {
122
+ days: (_daysDurationScrollRe = daysDurationScrollRef.current) === null || _daysDurationScrollRe === void 0 ? void 0 : _daysDurationScrollRe.latestDuration,
123
+ hours: (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 ? void 0 : _hoursDurationScrollR.latestDuration,
124
+ minutes: (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 ? void 0 : _minutesDurationScrol.latestDuration,
125
+ seconds: (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 ? void 0 : _secondsDurationScrol.latestDuration
126
+ },
127
+ reset: options => {
128
+ var _daysDurationScrollRe2, _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
129
+ setSelectedDays(safeInitialValue.days);
130
+ setSelectedHours(safeInitialValue.hours);
131
+ setSelectedMinutes(safeInitialValue.minutes);
132
+ setSelectedSeconds(safeInitialValue.seconds);
133
+ (_daysDurationScrollRe2 = daysDurationScrollRef.current) === null || _daysDurationScrollRe2 === void 0 || _daysDurationScrollRe2.reset(options);
134
+ (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.reset(options);
135
+ (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.reset(options);
136
+ (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.reset(options);
137
+ },
138
+ setValue: (value, options) => {
139
+ if (value.days !== undefined) {
140
+ var _daysDurationScrollRe3;
141
+ setSelectedDays(value.days);
142
+ (_daysDurationScrollRe3 = daysDurationScrollRef.current) === null || _daysDurationScrollRe3 === void 0 || _daysDurationScrollRe3.setValue(value.days, options);
143
+ }
144
+ if (value.hours !== undefined) {
145
+ var _hoursDurationScrollR3;
146
+ setSelectedHours(value.hours);
147
+ (_hoursDurationScrollR3 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR3 === void 0 || _hoursDurationScrollR3.setValue(value.hours, options);
148
+ }
149
+ if (value.minutes !== undefined) {
150
+ var _minutesDurationScrol3;
151
+ setSelectedMinutes(value.minutes);
152
+ (_minutesDurationScrol3 = minutesDurationScrollRef.current) === null || _minutesDurationScrol3 === void 0 || _minutesDurationScrol3.setValue(value.minutes, options);
153
+ }
154
+ if (value.seconds !== undefined) {
155
+ var _secondsDurationScrol3;
156
+ setSelectedSeconds(value.seconds);
157
+ (_secondsDurationScrol3 = secondsDurationScrollRef.current) === null || _secondsDurationScrol3 === void 0 || _secondsDurationScrol3.setValue(value.seconds, options);
158
+ }
159
+ }
160
+ };
161
+ });
162
+ return /*#__PURE__*/React.createElement(View, _extends({}, pickerContainerProps, {
163
+ style: styles.pickerContainer,
164
+ testID: "timer-picker"
165
+ }), !hideDays ? /*#__PURE__*/React.createElement(DurationScroll, _extends({
166
+ ref: daysDurationScrollRef,
167
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
168
+ allowFontScaling: allowFontScaling,
169
+ disableInfiniteScroll: disableInfiniteScroll,
170
+ initialValue: safeInitialValue.days,
171
+ interval: dayInterval,
172
+ isDisabled: daysPickerIsDisabled,
173
+ label: dayLabel ?? "d",
174
+ limit: dayLimit,
175
+ maximumValue: maximumDays,
176
+ onDurationChange: setSelectedDays,
177
+ padNumbersWithZero: padDaysWithZero,
178
+ padWithNItems: safePadWithNItems,
179
+ pickerColumnWidth: resolvePerColumn(pickerColumnWidth, "days"),
180
+ pickerLabelGap: resolvePerColumn(pickerLabelGap, "days"),
181
+ repeatNumbersNTimes: repeatDayNumbersNTimes,
182
+ repeatNumbersNTimesNotExplicitlySet: (props === null || props === void 0 ? void 0 : props.repeatDayNumbersNTimes) === undefined,
183
+ selectedValue: selectedDays,
184
+ styles: styles,
185
+ testID: "duration-scroll-day"
186
+ }, otherProps)) : null, !hideHours ? /*#__PURE__*/React.createElement(DurationScroll, _extends({
187
+ ref: hoursDurationScrollRef,
188
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
189
+ allowFontScaling: allowFontScaling,
190
+ amLabel: amLabel,
191
+ decelerationRate: decelerationRate,
192
+ disableInfiniteScroll: disableInfiniteScroll,
193
+ initialValue: safeInitialValue.hours,
194
+ interval: hourInterval,
195
+ is12HourPicker: use12HourPicker,
196
+ isDisabled: hoursPickerIsDisabled,
197
+ label: hourLabel ?? (!use12HourPicker ? "h" : undefined),
198
+ limit: hourLimit,
199
+ maximumValue: maximumHours,
200
+ onDurationChange: setSelectedHours,
201
+ padNumbersWithZero: padHoursWithZero,
202
+ padWithNItems: safePadWithNItems,
203
+ pickerColumnWidth: resolvePerColumn(pickerColumnWidth, "hours"),
204
+ pickerLabelGap: resolvePerColumn(pickerLabelGap, "hours"),
205
+ pmLabel: pmLabel,
206
+ repeatNumbersNTimes: repeatHourNumbersNTimes,
207
+ repeatNumbersNTimesNotExplicitlySet: (props === null || props === void 0 ? void 0 : props.repeatHourNumbersNTimes) === undefined,
208
+ selectedValue: selectedHours,
209
+ styles: styles,
210
+ testID: "duration-scroll-hour"
211
+ }, otherProps)) : null, !hideMinutes ? /*#__PURE__*/React.createElement(DurationScroll, _extends({
212
+ ref: minutesDurationScrollRef,
213
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
214
+ allowFontScaling: allowFontScaling,
215
+ decelerationRate: decelerationRate,
216
+ disableInfiniteScroll: disableInfiniteScroll,
217
+ initialValue: safeInitialValue.minutes,
218
+ interval: minuteInterval,
219
+ isDisabled: minutesPickerIsDisabled,
220
+ label: minuteLabel ?? "m",
221
+ limit: minuteLimit,
222
+ maximumValue: maximumMinutes,
223
+ onDurationChange: setSelectedMinutes,
224
+ padNumbersWithZero: padMinutesWithZero,
225
+ padWithNItems: safePadWithNItems,
226
+ pickerColumnWidth: resolvePerColumn(pickerColumnWidth, "minutes"),
227
+ pickerLabelGap: resolvePerColumn(pickerLabelGap, "minutes"),
228
+ repeatNumbersNTimes: repeatMinuteNumbersNTimes,
229
+ repeatNumbersNTimesNotExplicitlySet: (props === null || props === void 0 ? void 0 : props.repeatMinuteNumbersNTimes) === undefined,
230
+ selectedValue: selectedMinutes,
231
+ styles: styles,
232
+ testID: "duration-scroll-minute"
233
+ }, otherProps)) : null, !hideSeconds ? /*#__PURE__*/React.createElement(DurationScroll, _extends({
234
+ ref: secondsDurationScrollRef,
235
+ aggressivelyGetLatestDuration: aggressivelyGetLatestDuration,
236
+ allowFontScaling: allowFontScaling,
237
+ decelerationRate: decelerationRate,
238
+ disableInfiniteScroll: disableInfiniteScroll,
239
+ initialValue: safeInitialValue.seconds,
240
+ interval: secondInterval,
241
+ isDisabled: secondsPickerIsDisabled,
242
+ label: secondLabel ?? "s",
243
+ limit: secondLimit,
244
+ maximumValue: maximumSeconds,
245
+ onDurationChange: setSelectedSeconds,
246
+ padNumbersWithZero: padSecondsWithZero,
247
+ padWithNItems: safePadWithNItems,
248
+ pickerColumnWidth: resolvePerColumn(pickerColumnWidth, "seconds"),
249
+ pickerLabelGap: resolvePerColumn(pickerLabelGap, "seconds"),
250
+ repeatNumbersNTimes: repeatSecondNumbersNTimes,
251
+ repeatNumbersNTimesNotExplicitlySet: (props === null || props === void 0 ? void 0 : props.repeatSecondNumbersNTimes) === undefined,
252
+ selectedValue: selectedSeconds,
253
+ styles: styles,
254
+ testID: "duration-scroll-second"
255
+ }, otherProps)) : null);
256
+ });
257
+ export default /*#__PURE__*/React.memo(TimerPicker);
258
+ //# sourceMappingURL=TimerPicker.js.map