react-native-timer-picker 1.2.8 → 1.2.9

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 (110) hide show
  1. package/dist/commonjs/components/Modal/Modal.styles.js +32 -0
  2. package/dist/commonjs/components/Modal/Modal.styles.js.map +1 -0
  3. package/dist/commonjs/components/Modal/index.js +108 -0
  4. package/dist/commonjs/components/Modal/index.js.map +1 -0
  5. package/dist/commonjs/components/TimerPicker/DurationScroll.js +210 -0
  6. package/dist/commonjs/components/TimerPicker/DurationScroll.js.map +1 -0
  7. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js +67 -0
  8. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js.map +1 -0
  9. package/dist/commonjs/components/TimerPicker/index.js +130 -0
  10. package/dist/commonjs/components/TimerPicker/index.js.map +1 -0
  11. package/dist/commonjs/components/TimerPickerModal.styles.js +69 -0
  12. package/dist/commonjs/components/TimerPickerModal.styles.js.map +1 -0
  13. package/dist/commonjs/components/index.js +156 -0
  14. package/dist/commonjs/components/index.js.map +1 -0
  15. package/dist/commonjs/index.js +21 -0
  16. package/dist/commonjs/index.js.map +1 -0
  17. package/dist/commonjs/tests/DurationScroll.test.js +56 -0
  18. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -0
  19. package/dist/commonjs/tests/Modal.test.js +40 -0
  20. package/dist/commonjs/tests/Modal.test.js.map +1 -0
  21. package/dist/commonjs/tests/TimerPicker.test.js +37 -0
  22. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -0
  23. package/dist/commonjs/tests/TimerPickerModal.test.js +73 -0
  24. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -0
  25. package/dist/commonjs/utils/colorToRgba.js +51 -0
  26. package/dist/commonjs/utils/colorToRgba.js.map +1 -0
  27. package/dist/commonjs/utils/generateNumbers.js +32 -0
  28. package/dist/commonjs/utils/generateNumbers.js.map +1 -0
  29. package/dist/commonjs/utils/getAdjustedLimit.js +32 -0
  30. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -0
  31. package/dist/commonjs/utils/getScrollIndex.js +17 -0
  32. package/dist/commonjs/utils/getScrollIndex.js.map +1 -0
  33. package/dist/commonjs/utils/padWithZero.js +15 -0
  34. package/dist/commonjs/utils/padWithZero.js.map +1 -0
  35. package/dist/module/components/Modal/Modal.styles.js +26 -0
  36. package/dist/module/components/Modal/Modal.styles.js.map +1 -0
  37. package/dist/module/components/Modal/index.js +100 -0
  38. package/dist/module/components/Modal/index.js.map +1 -0
  39. package/dist/module/components/TimerPicker/DurationScroll.js +202 -0
  40. package/dist/module/components/TimerPicker/DurationScroll.js.map +1 -0
  41. package/dist/module/components/TimerPicker/TimerPicker.styles.js +59 -0
  42. package/dist/module/components/TimerPicker/TimerPicker.styles.js.map +1 -0
  43. package/dist/module/components/TimerPicker/index.js +121 -0
  44. package/dist/module/components/TimerPicker/index.js.map +1 -0
  45. package/dist/module/components/TimerPickerModal.styles.js +61 -0
  46. package/dist/module/components/TimerPickerModal.styles.js.map +1 -0
  47. package/dist/module/components/index.js +147 -0
  48. package/dist/module/components/index.js.map +1 -0
  49. package/dist/module/index.js +3 -0
  50. package/dist/module/index.js.map +1 -0
  51. package/dist/module/tests/DurationScroll.test.js +53 -0
  52. package/dist/module/tests/DurationScroll.test.js.map +1 -0
  53. package/dist/module/tests/Modal.test.js +37 -0
  54. package/dist/module/tests/Modal.test.js.map +1 -0
  55. package/dist/module/tests/TimerPicker.test.js +34 -0
  56. package/dist/module/tests/TimerPicker.test.js.map +1 -0
  57. package/dist/module/tests/TimerPickerModal.test.js +70 -0
  58. package/dist/module/tests/TimerPickerModal.test.js.map +1 -0
  59. package/dist/module/utils/colorToRgba.js +44 -0
  60. package/dist/module/utils/colorToRgba.js.map +1 -0
  61. package/dist/module/utils/generateNumbers.js +25 -0
  62. package/dist/module/utils/generateNumbers.js.map +1 -0
  63. package/dist/module/utils/getAdjustedLimit.js +25 -0
  64. package/dist/module/utils/getAdjustedLimit.js.map +1 -0
  65. package/dist/module/utils/getScrollIndex.js +10 -0
  66. package/dist/module/utils/getScrollIndex.js.map +1 -0
  67. package/dist/module/utils/padWithZero.js +8 -0
  68. package/dist/module/utils/padWithZero.js.map +1 -0
  69. package/dist/typescript/index.d.ts +4 -0
  70. package/dist/{utils → typescript/utils}/colorToRgba.d.ts +1 -1
  71. package/dist/{utils → typescript/utils}/getScrollIndex.d.ts +1 -1
  72. package/package.json +30 -10
  73. package/{dist/components/Modal/Modal.styles.js → src/components/Modal/Modal.styles.ts} +4 -6
  74. package/src/components/Modal/index.tsx +134 -0
  75. package/src/components/TimerPicker/DurationScroll.tsx +337 -0
  76. package/src/components/TimerPicker/TimerPicker.styles.ts +87 -0
  77. package/src/components/TimerPicker/index.tsx +216 -0
  78. package/src/components/TimerPickerModal.styles.ts +87 -0
  79. package/src/components/index.tsx +243 -0
  80. package/src/index.ts +14 -0
  81. package/src/tests/DurationScroll.test.tsx +57 -0
  82. package/src/tests/Modal.test.tsx +34 -0
  83. package/src/tests/TimerPicker.test.tsx +27 -0
  84. package/src/tests/TimerPickerModal.test.tsx +70 -0
  85. package/{dist/utils/colorToRgba.js → src/utils/colorToRgba.ts} +18 -17
  86. package/src/utils/generateNumbers.ts +34 -0
  87. package/{dist/utils/getAdjustedLimit.js → src/utils/getAdjustedLimit.ts} +14 -7
  88. package/src/utils/getScrollIndex.ts +15 -0
  89. package/src/utils/padWithZero.ts +7 -0
  90. package/dist/components/Modal/index.js +0 -109
  91. package/dist/components/TimerPicker/DurationScroll.js +0 -211
  92. package/dist/components/TimerPicker/TimerPicker.styles.js +0 -41
  93. package/dist/components/TimerPicker/index.js +0 -81
  94. package/dist/components/TimerPickerModal.styles.js +0 -37
  95. package/dist/components/index.js +0 -118
  96. package/dist/index.d.ts +0 -4
  97. package/dist/index.js +0 -10
  98. package/dist/utils/generateNumbers.js +0 -30
  99. package/dist/utils/getScrollIndex.js +0 -10
  100. package/dist/utils/padWithZero.js +0 -12
  101. /package/dist/{components → typescript/components}/Modal/Modal.styles.d.ts +0 -0
  102. /package/dist/{components → typescript/components}/Modal/index.d.ts +0 -0
  103. /package/dist/{components → typescript/components}/TimerPicker/DurationScroll.d.ts +0 -0
  104. /package/dist/{components → typescript/components}/TimerPicker/TimerPicker.styles.d.ts +0 -0
  105. /package/dist/{components → typescript/components}/TimerPicker/index.d.ts +0 -0
  106. /package/dist/{components → typescript/components}/TimerPickerModal.styles.d.ts +0 -0
  107. /package/dist/{components → typescript/components}/index.d.ts +0 -0
  108. /package/dist/{utils → typescript/utils}/generateNumbers.d.ts +0 -0
  109. /package/dist/{utils → typescript/utils}/getAdjustedLimit.d.ts +0 -0
  110. /package/dist/{utils → typescript/utils}/padWithZero.d.ts +0 -0
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.styles = void 0;
7
+ var _reactNative = require("react-native");
8
+ const styles = exports.styles = _reactNative.StyleSheet.create({
9
+ container: {
10
+ position: "absolute",
11
+ top: 0,
12
+ left: 0,
13
+ right: 0,
14
+ bottom: 0
15
+ },
16
+ backdrop: {
17
+ position: "absolute",
18
+ top: 0,
19
+ bottom: 0,
20
+ left: 0,
21
+ right: 0,
22
+ backgroundColor: "black",
23
+ opacity: 0
24
+ },
25
+ content: {
26
+ flex: 1,
27
+ justifyContent: "center",
28
+ alignItems: "center",
29
+ zIndex: 1
30
+ }
31
+ });
32
+ //# sourceMappingURL=Modal.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","styles","exports","StyleSheet","create","container","position","top","left","right","bottom","backdrop","backgroundColor","opacity","content","flex","justifyContent","alignItems","zIndex"],"sources":["Modal.styles.ts"],"sourcesContent":["import { StyleSheet } from \"react-native\";\n\nexport const styles = StyleSheet.create({\n container: {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n backdrop: {\n position: \"absolute\",\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n backgroundColor: \"black\",\n opacity: 0,\n },\n content: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n zIndex: 1,\n },\n});"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAGE,uBAAU,CAACC,MAAM,CAAC;EACpCC,SAAS,EAAE;IACPC,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE;EACZ,CAAC;EACDC,QAAQ,EAAE;IACNL,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,CAAC;IACNG,MAAM,EAAE,CAAC;IACTF,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRG,eAAe,EAAE,OAAO;IACxBC,OAAO,EAAE;EACb,CAAC;EACDC,OAAO,EAAE;IACLC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,MAAM,EAAE;EACZ;AACJ,CAAC,CAAC"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.Modal = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _Modal = require("./Modal.styles");
10
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /* eslint-disable @typescript-eslint/no-explicit-any */
13
+ const Modal = _ref => {
14
+ let {
15
+ children,
16
+ onOverlayPress,
17
+ onHide,
18
+ isVisible = false,
19
+ animationDuration = 300,
20
+ overlayOpacity = 0.4,
21
+ modalProps,
22
+ contentStyle,
23
+ overlayStyle,
24
+ testID
25
+ } = _ref;
26
+ const {
27
+ width: screenWidth,
28
+ height: screenHeight
29
+ } = (0, _reactNative.useWindowDimensions)();
30
+ const isMounted = (0, _react.useRef)(false);
31
+ const animatedOpacity = (0, _react.useRef)(new _reactNative.Animated.Value(0));
32
+ (0, _react.useEffect)(() => {
33
+ isMounted.current = true;
34
+ if (isVisible) {
35
+ show();
36
+ }
37
+ return () => {
38
+ isMounted.current = false;
39
+ };
40
+ // eslint-disable-next-line react-hooks/exhaustive-deps
41
+ }, []);
42
+ const backdropAnimatedStyle = {
43
+ opacity: animatedOpacity.current.interpolate({
44
+ inputRange: [0, 1],
45
+ outputRange: [0, overlayOpacity]
46
+ })
47
+ };
48
+ const contentAnimatedStyle = {
49
+ transform: [{
50
+ translateY: animatedOpacity.current.interpolate({
51
+ inputRange: [0, 1],
52
+ outputRange: [screenHeight, 0],
53
+ extrapolate: "clamp"
54
+ })
55
+ }]
56
+ };
57
+ const show = (0, _react.useCallback)(() => {
58
+ _reactNative.Animated.timing(animatedOpacity.current, {
59
+ easing: _reactNative.Easing.inOut(_reactNative.Easing.quad),
60
+ // Using native driver in the modal makes the content flash
61
+ useNativeDriver: true,
62
+ duration: animationDuration,
63
+ toValue: 1
64
+ }).start();
65
+ }, [animationDuration]);
66
+ const hide = (0, _react.useCallback)(() => {
67
+ _reactNative.Animated.timing(animatedOpacity.current, {
68
+ easing: _reactNative.Easing.inOut(_reactNative.Easing.quad),
69
+ // Using native driver in the modal makes the content flash
70
+ useNativeDriver: true,
71
+ duration: animationDuration,
72
+ toValue: 0
73
+ }).start(() => {
74
+ if (isMounted.current) {
75
+ onHide === null || onHide === void 0 || onHide();
76
+ }
77
+ });
78
+ }, [animationDuration, onHide]);
79
+ (0, _react.useEffect)(() => {
80
+ if (isVisible) {
81
+ show();
82
+ } else {
83
+ hide();
84
+ }
85
+ // eslint-disable-next-line react-hooks/exhaustive-deps
86
+ }, [isVisible]);
87
+ return /*#__PURE__*/_react.default.createElement(_reactNative.Modal, _extends({
88
+ transparent: true,
89
+ animationType: "fade",
90
+ visible: isVisible
91
+ }, modalProps, {
92
+ testID: testID ?? "modal"
93
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableWithoutFeedback, {
94
+ onPress: onOverlayPress,
95
+ testID: "modal-backdrop"
96
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, {
97
+ style: [_Modal.styles.backdrop, backdropAnimatedStyle, {
98
+ width: screenWidth,
99
+ height: screenHeight
100
+ }, overlayStyle]
101
+ })), /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, {
102
+ style: [_Modal.styles.content, contentAnimatedStyle, contentStyle],
103
+ pointerEvents: "box-none"
104
+ }, children));
105
+ };
106
+ exports.Modal = Modal;
107
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(Modal);
108
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_Modal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","Modal","_ref","children","onOverlayPress","onHide","isVisible","animationDuration","overlayOpacity","modalProps","contentStyle","overlayStyle","testID","width","screenWidth","height","screenHeight","useWindowDimensions","isMounted","useRef","animatedOpacity","Animated","Value","useEffect","current","show","backdropAnimatedStyle","opacity","interpolate","inputRange","outputRange","contentAnimatedStyle","transform","translateY","extrapolate","useCallback","timing","easing","Easing","inOut","quad","useNativeDriver","duration","toValue","start","hide","createElement","transparent","animationType","visible","TouchableWithoutFeedback","onPress","View","style","styles","backdrop","content","pointerEvents","exports","_default","React","memo"],"sources":["index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React, { useCallback, useEffect, useRef } from \"react\";\nimport {\n Animated,\n Easing,\n Modal as ReactNativeModal,\n TouchableWithoutFeedback,\n useWindowDimensions,\n} from \"react-native\";\n\nimport { styles } from \"./Modal.styles\";\n\ninterface ModalProps {\n children?: React.ReactElement;\n onOverlayPress?: () => void;\n onHide?: () => void;\n isVisible?: boolean;\n animationDuration?: number;\n overlayOpacity?: number;\n modalProps?: any;\n contentStyle?: any;\n overlayStyle?: any;\n testID?: string;\n}\n\nexport const Modal = ({\n children,\n onOverlayPress,\n onHide,\n isVisible = false,\n animationDuration = 300,\n overlayOpacity = 0.4,\n modalProps,\n contentStyle,\n overlayStyle,\n testID,\n}: ModalProps): React.ReactElement => {\n const { width: screenWidth, height: screenHeight } = 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 inputRange: [0, 1],\n outputRange: [screenHeight, 0],\n extrapolate: \"clamp\",\n }),\n },\n ],\n };\n\n const show = useCallback(() => {\n Animated.timing(animatedOpacity.current, {\n easing: Easing.inOut(Easing.quad),\n // Using native driver in the modal makes the content flash\n useNativeDriver: true,\n duration: animationDuration,\n toValue: 1,\n }).start();\n }, [animationDuration]);\n\n const hide = useCallback(() => {\n Animated.timing(animatedOpacity.current, {\n easing: Easing.inOut(Easing.quad),\n // Using native driver in the modal makes the content flash\n useNativeDriver: true,\n duration: animationDuration,\n toValue: 0,\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 transparent\n animationType=\"fade\"\n visible={isVisible}\n {...modalProps}\n testID={testID ?? \"modal\"}>\n <TouchableWithoutFeedback\n onPress={onOverlayPress}\n testID=\"modal-backdrop\">\n <Animated.View\n style={[\n styles.backdrop,\n backdropAnimatedStyle,\n { width: screenWidth, height: screenHeight },\n overlayStyle,\n ]}\n />\n </TouchableWithoutFeedback>\n <Animated.View\n style={[styles.content, contentAnimatedStyle, contentStyle]}\n pointerEvents=\"box-none\">\n {children}\n </Animated.View>\n </ReactNativeModal>\n );\n};\n\nexport default React.memo(Modal);\n"],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _generateNumbers = require("../../utils/generateNumbers");
10
+ var _colorToRgba = require("../../utils/colorToRgba");
11
+ var _getAdjustedLimit = require("../../utils/getAdjustedLimit");
12
+ var _getScrollIndex = require("../../utils/getScrollIndex");
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ const KEY_EXTRACTOR = (_, index) => index.toString();
18
+ const DurationScroll = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
19
+ let {
20
+ numberOfItems,
21
+ label,
22
+ initialValue = 0,
23
+ onDurationChange,
24
+ padNumbersWithZero = false,
25
+ disableInfiniteScroll = false,
26
+ limit,
27
+ padWithNItems,
28
+ pickerGradientOverlayProps,
29
+ topPickerGradientOverlayProps,
30
+ bottomPickerGradientOverlayProps,
31
+ LinearGradient,
32
+ testID,
33
+ styles
34
+ } = _ref;
35
+ const flatListRef = (0, _react.useRef)(null);
36
+ const data = (0, _generateNumbers.generateNumbers)(numberOfItems, {
37
+ padWithZero: padNumbersWithZero,
38
+ repeatNTimes: 3,
39
+ disableInfiniteScroll,
40
+ padWithNItems: padWithNItems
41
+ });
42
+ const numberOfItemsToShow = 1 + padWithNItems * 2;
43
+ const adjustedLimited = (0, _getAdjustedLimit.getAdjustedLimit)(limit, numberOfItems);
44
+ const initialScrollIndex = (0, _getScrollIndex.getScrollIndex)({
45
+ value: initialValue,
46
+ numberOfItems,
47
+ padWithNItems,
48
+ disableInfiniteScroll
49
+ });
50
+ (0, _react.useImperativeHandle)(ref, () => ({
51
+ reset: options => {
52
+ var _flatListRef$current;
53
+ (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
54
+ animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
55
+ index: initialScrollIndex
56
+ });
57
+ },
58
+ setValue: (value, options) => {
59
+ var _flatListRef$current2;
60
+ (_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
61
+ animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
62
+ index: (0, _getScrollIndex.getScrollIndex)({
63
+ value: value,
64
+ numberOfItems,
65
+ padWithNItems,
66
+ disableInfiniteScroll
67
+ })
68
+ });
69
+ }
70
+ }));
71
+ const renderItem = (0, _react.useCallback)(_ref2 => {
72
+ let {
73
+ item
74
+ } = _ref2;
75
+ const intItem = parseInt(item);
76
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
77
+ key: item,
78
+ style: styles.pickerItemContainer,
79
+ testID: "picker-item"
80
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
81
+ style: [styles.pickerItem, intItem > adjustedLimited.max || intItem < adjustedLimited.min ? styles.disabledPickerItem : {}]
82
+ }, item));
83
+ }, [adjustedLimited.max, adjustedLimited.min, styles.disabledPickerItem, styles.pickerItem, styles.pickerItemContainer]);
84
+ const onMomentumScrollEnd = (0, _react.useCallback)(e => {
85
+ const newIndex = Math.round(e.nativeEvent.contentOffset.y / styles.pickerItemContainer.height);
86
+ let newDuration = (disableInfiniteScroll ? newIndex : newIndex + padWithNItems) % (numberOfItems + 1);
87
+
88
+ // check limits
89
+ if (newDuration > adjustedLimited.max) {
90
+ var _flatListRef$current3;
91
+ const targetScrollIndex = newIndex - (newDuration - adjustedLimited.max);
92
+ (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
93
+ animated: true,
94
+ index:
95
+ // guard against scrolling beyond end of list
96
+ targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1
97
+ }); // scroll down to max
98
+ newDuration = adjustedLimited.max;
99
+ } else if (newDuration < adjustedLimited.min) {
100
+ var _flatListRef$current4;
101
+ const targetScrollIndex = newIndex + (adjustedLimited.min - newDuration);
102
+ (_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
103
+ animated: true,
104
+ index:
105
+ // guard against scrolling beyond end of list
106
+ targetScrollIndex <= data.length - 1 ? targetScrollIndex : adjustedLimited.min
107
+ }); // scroll up to min
108
+ newDuration = adjustedLimited.min;
109
+ }
110
+ onDurationChange(newDuration);
111
+ }, [adjustedLimited.max, adjustedLimited.min, data.length, disableInfiniteScroll, numberOfItems, onDurationChange, padWithNItems, styles.pickerItemContainer.height]);
112
+ const onViewableItemsChanged = (0, _react.useCallback)(_ref3 => {
113
+ var _viewableItems$, _viewableItems$2;
114
+ let {
115
+ viewableItems
116
+ } = _ref3;
117
+ if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
118
+ var _flatListRef$current5;
119
+ (_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
120
+ animated: false,
121
+ index: viewableItems[0].index + numberOfItems
122
+ });
123
+ } else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * 2.5) {
124
+ var _flatListRef$current6;
125
+ (_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
126
+ animated: false,
127
+ index: viewableItems[0].index - numberOfItems
128
+ });
129
+ }
130
+ }, [numberOfItems]);
131
+ const getItemLayout = (0, _react.useCallback)((_, index) => ({
132
+ length: styles.pickerItemContainer.height,
133
+ offset: styles.pickerItemContainer.height * index,
134
+ index
135
+ }), [styles.pickerItemContainer.height]);
136
+ const viewabilityConfigCallbackPairs = (0, _react.useRef)([{
137
+ viewabilityConfig: {
138
+ viewAreaCoveragePercentThreshold: 25
139
+ },
140
+ onViewableItemsChanged: onViewableItemsChanged
141
+ }]);
142
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
143
+ testID: testID,
144
+ style: {
145
+ height: styles.pickerItemContainer.height * numberOfItemsToShow,
146
+ overflow: "hidden"
147
+ }
148
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.FlatList, {
149
+ ref: flatListRef,
150
+ data: data,
151
+ getItemLayout: getItemLayout,
152
+ initialScrollIndex: initialScrollIndex,
153
+ windowSize: numberOfItemsToShow,
154
+ renderItem: renderItem,
155
+ keyExtractor: KEY_EXTRACTOR,
156
+ showsVerticalScrollIndicator: false,
157
+ decelerationRate: 0.9,
158
+ scrollEventThrottle: 16,
159
+ snapToAlignment: "start"
160
+ // used in place of snapToOffset due to bug on Android
161
+ ,
162
+ snapToOffsets: [...Array(data.length)].map((_, i) => i * styles.pickerItemContainer.height),
163
+ viewabilityConfigCallbackPairs: !disableInfiniteScroll ? viewabilityConfigCallbackPairs === null || viewabilityConfigCallbackPairs === void 0 ? void 0 : viewabilityConfigCallbackPairs.current : undefined,
164
+ onMomentumScrollEnd: onMomentumScrollEnd,
165
+ testID: "duration-scroll-flatlist"
166
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
167
+ style: styles.pickerLabelContainer,
168
+ pointerEvents: "none"
169
+ }, typeof label === "string" ? /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
170
+ style: styles.pickerLabel
171
+ }, label) : label ?? null), LinearGradient ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(LinearGradient, _extends({
172
+ colors: [styles.pickerContainer.backgroundColor ?? "white", (0, _colorToRgba.colorToRgba)({
173
+ color: styles.pickerContainer.backgroundColor ?? "white",
174
+ opacity: 0
175
+ })],
176
+ start: {
177
+ x: 1,
178
+ y: 0.3
179
+ },
180
+ end: {
181
+ x: 1,
182
+ y: 1
183
+ },
184
+ pointerEvents: "none"
185
+ }, pickerGradientOverlayProps, topPickerGradientOverlayProps, {
186
+ style: [styles.pickerGradientOverlay, {
187
+ top: 0
188
+ }]
189
+ })), /*#__PURE__*/_react.default.createElement(LinearGradient, _extends({
190
+ colors: [(0, _colorToRgba.colorToRgba)({
191
+ color: styles.pickerContainer.backgroundColor ?? "white",
192
+ opacity: 0
193
+ }), styles.pickerContainer.backgroundColor ?? "white"],
194
+ start: {
195
+ x: 1,
196
+ y: 0
197
+ },
198
+ end: {
199
+ x: 1,
200
+ y: 0.7
201
+ },
202
+ pointerEvents: "none"
203
+ }, pickerGradientOverlayProps, bottomPickerGradientOverlayProps, {
204
+ style: [styles.pickerGradientOverlay, {
205
+ bottom: -1
206
+ }]
207
+ }))) : null);
208
+ });
209
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(DurationScroll);
210
+ //# sourceMappingURL=DurationScroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_generateNumbers","_colorToRgba","_getAdjustedLimit","_getScrollIndex","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","_extends","assign","bind","target","arguments","length","source","key","apply","KEY_EXTRACTOR","_","index","toString","DurationScroll","forwardRef","_ref","ref","numberOfItems","label","initialValue","onDurationChange","padNumbersWithZero","disableInfiniteScroll","limit","padWithNItems","pickerGradientOverlayProps","topPickerGradientOverlayProps","bottomPickerGradientOverlayProps","LinearGradient","testID","styles","flatListRef","useRef","data","generateNumbers","padWithZero","repeatNTimes","numberOfItemsToShow","adjustedLimited","getAdjustedLimit","initialScrollIndex","getScrollIndex","value","useImperativeHandle","reset","options","_flatListRef$current","current","scrollToIndex","animated","setValue","_flatListRef$current2","renderItem","useCallback","_ref2","item","intItem","parseInt","createElement","View","style","pickerItemContainer","Text","pickerItem","max","min","disabledPickerItem","onMomentumScrollEnd","newIndex","Math","round","nativeEvent","contentOffset","y","height","newDuration","_flatListRef$current3","targetScrollIndex","_flatListRef$current4","onViewableItemsChanged","_ref3","_viewableItems$","_viewableItems$2","viewableItems","_flatListRef$current5","_flatListRef$current6","getItemLayout","offset","viewabilityConfigCallbackPairs","viewabilityConfig","viewAreaCoveragePercentThreshold","overflow","FlatList","windowSize","keyExtractor","showsVerticalScrollIndicator","decelerationRate","scrollEventThrottle","snapToAlignment","snapToOffsets","Array","map","undefined","pickerLabelContainer","pointerEvents","pickerLabel","Fragment","colors","pickerContainer","backgroundColor","colorToRgba","color","opacity","start","x","end","pickerGradientOverlay","top","bottom","_default","exports","React","memo"],"sources":["DurationScroll.tsx"],"sourcesContent":["import React, {\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\nimport {\n View,\n Text,\n FlatList,\n ViewabilityConfigCallbackPairs,\n ViewToken,\n NativeSyntheticEvent,\n NativeScrollEvent,\n} from \"react-native\";\n\nimport { generateNumbers } from \"../../utils/generateNumbers\";\nimport { colorToRgba } from \"../../utils/colorToRgba\";\nimport { generateStyles } from \"./TimerPicker.styles\";\nimport { getAdjustedLimit } from \"../../utils/getAdjustedLimit\";\nimport { getScrollIndex } from \"../../utils/getScrollIndex\";\n\nexport interface DurationScrollRef {\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 locations?: number[] | null;\n start?: LinearGradientPoint | null;\n end?: LinearGradientPoint | null;\n};\n\nexport type LimitType = {\n max?: number;\n min?: number;\n};\n\ninterface DurationScrollProps {\n numberOfItems: number;\n label?: string | React.ReactElement;\n initialValue?: number;\n onDurationChange: (duration: number) => void;\n padNumbersWithZero?: boolean;\n disableInfiniteScroll?: boolean;\n limit?: LimitType;\n padWithNItems: number;\n pickerGradientOverlayProps?: Partial<LinearGradientProps>;\n topPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n bottomPickerGradientOverlayProps?: Partial<LinearGradientProps>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n LinearGradient?: any;\n testID?: string;\n styles: ReturnType<typeof generateStyles>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst KEY_EXTRACTOR = (_: any, index: number) => index.toString();\n\nconst DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(\n (\n {\n numberOfItems,\n label,\n initialValue = 0,\n onDurationChange,\n padNumbersWithZero = false,\n disableInfiniteScroll = false,\n limit,\n padWithNItems,\n pickerGradientOverlayProps,\n topPickerGradientOverlayProps,\n bottomPickerGradientOverlayProps,\n LinearGradient,\n testID,\n styles,\n },\n ref\n ): React.ReactElement => {\n const flatListRef = useRef<FlatList | null>(null);\n\n const data = generateNumbers(numberOfItems, {\n padWithZero: padNumbersWithZero,\n repeatNTimes: 3,\n disableInfiniteScroll,\n padWithNItems: 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 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 }));\n\n const renderItem = useCallback(\n ({ item }: { item: string }) => {\n const intItem = parseInt(item);\n\n return (\n <View\n key={item}\n style={styles.pickerItemContainer}\n testID=\"picker-item\">\n <Text\n style={[\n styles.pickerItem,\n intItem > adjustedLimited.max ||\n intItem < adjustedLimited.min\n ? styles.disabledPickerItem\n : {},\n ]}>\n {item}\n </Text>\n </View>\n );\n },\n [\n adjustedLimited.max,\n adjustedLimited.min,\n styles.disabledPickerItem,\n styles.pickerItem,\n styles.pickerItemContainer,\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 testID={testID}\n style={{\n height:\n styles.pickerItemContainer.height * numberOfItemsToShow,\n overflow: \"hidden\",\n }}>\n <FlatList\n ref={flatListRef}\n data={data}\n getItemLayout={getItemLayout}\n initialScrollIndex={initialScrollIndex}\n windowSize={numberOfItemsToShow}\n renderItem={renderItem}\n keyExtractor={KEY_EXTRACTOR}\n showsVerticalScrollIndicator={false}\n decelerationRate={0.9}\n scrollEventThrottle={16}\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 viewabilityConfigCallbackPairs={\n !disableInfiniteScroll\n ? viewabilityConfigCallbackPairs?.current\n : undefined\n }\n onMomentumScrollEnd={onMomentumScrollEnd}\n testID=\"duration-scroll-flatlist\"\n />\n <View style={styles.pickerLabelContainer} pointerEvents=\"none\">\n {typeof label === \"string\" ? (\n <Text style={styles.pickerLabel}>{label}</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 start={{ x: 1, y: 0.3 }}\n end={{ x: 1, y: 1 }}\n pointerEvents=\"none\"\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 start={{ x: 1, y: 0 }}\n end={{ x: 1, y: 0.7 }}\n pointerEvents=\"none\"\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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"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateStyles = void 0;
7
+ var _reactNative = require("react-native");
8
+ /* eslint-disable @typescript-eslint/no-explicit-any */
9
+
10
+ const DARK_MODE_BACKGROUND_COLOR = "#232323";
11
+ const DARK_MODE_TEXT_COLOR = "#E9E9E9";
12
+ const LIGHT_MODE_BACKGROUND_COLOR = "#F1F1F1";
13
+ const LIGHT_MODE_TEXT_COLOR = "#1B1B1B";
14
+ const generateStyles = (customStyles, options) => {
15
+ var _customStyles$pickerI, _customStyles$pickerI2, _customStyles$pickerI3;
16
+ return _reactNative.StyleSheet.create({
17
+ pickerContainer: {
18
+ flexDirection: "row",
19
+ marginRight: "8%",
20
+ backgroundColor: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.backgroundColor) ?? ((customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_BACKGROUND_COLOR : LIGHT_MODE_BACKGROUND_COLOR),
21
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerContainer)
22
+ },
23
+ pickerLabelContainer: {
24
+ position: "absolute",
25
+ right: 4,
26
+ top: 0,
27
+ bottom: 0,
28
+ justifyContent: "center",
29
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabelContainer)
30
+ },
31
+ pickerLabel: {
32
+ fontSize: 18,
33
+ fontWeight: "bold",
34
+ marginTop: ((customStyles === null || customStyles === void 0 || (_customStyles$pickerI = customStyles.pickerItem) === null || _customStyles$pickerI === void 0 ? void 0 : _customStyles$pickerI.fontSize) ?? 25) / 6,
35
+ color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,
36
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
37
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerLabel)
38
+ },
39
+ pickerItemContainer: {
40
+ height: 50,
41
+ justifyContent: "center",
42
+ alignItems: "center",
43
+ width: ((customStyles === null || customStyles === void 0 || (_customStyles$pickerI2 = customStyles.pickerItem) === null || _customStyles$pickerI2 === void 0 ? void 0 : _customStyles$pickerI2.fontSize) ?? 25) * 3.6,
44
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerItemContainer)
45
+ },
46
+ pickerItem: {
47
+ textAlignVertical: "center",
48
+ fontSize: 25,
49
+ color: (customStyles === null || customStyles === void 0 ? void 0 : customStyles.theme) === "dark" ? DARK_MODE_TEXT_COLOR : LIGHT_MODE_TEXT_COLOR,
50
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.text),
51
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerItem)
52
+ },
53
+ disabledPickerItem: {
54
+ opacity: 0.2,
55
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.disabledPickerItem)
56
+ },
57
+ pickerGradientOverlay: {
58
+ position: "absolute",
59
+ left: 0,
60
+ right: 0,
61
+ height: options.padWithNItems === 0 ? "30%" : ((customStyles === null || customStyles === void 0 || (_customStyles$pickerI3 = customStyles.pickerItemContainer) === null || _customStyles$pickerI3 === void 0 ? void 0 : _customStyles$pickerI3.height) ?? 50) * 0.8,
62
+ ...(customStyles === null || customStyles === void 0 ? void 0 : customStyles.pickerGradientOverlay)
63
+ }
64
+ });
65
+ };
66
+ exports.generateStyles = generateStyles;
67
+ //# sourceMappingURL=TimerPicker.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","DARK_MODE_BACKGROUND_COLOR","DARK_MODE_TEXT_COLOR","LIGHT_MODE_BACKGROUND_COLOR","LIGHT_MODE_TEXT_COLOR","generateStyles","customStyles","options","_customStyles$pickerI","_customStyles$pickerI2","_customStyles$pickerI3","StyleSheet","create","pickerContainer","flexDirection","marginRight","backgroundColor","theme","pickerLabelContainer","position","right","top","bottom","justifyContent","pickerLabel","fontSize","fontWeight","marginTop","pickerItem","color","text","pickerItemContainer","height","alignItems","width","textAlignVertical","disabledPickerItem","opacity","pickerGradientOverlay","left","padWithNItems","exports"],"sources":["TimerPicker.styles.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { StyleSheet } from \"react-native\";\n\nexport interface CustomTimerPickerStyles {\n theme?: \"light\" | \"dark\";\n backgroundColor?: string;\n text?: any;\n pickerContainer?: any;\n pickerLabelContainer?: any;\n pickerLabel?: any;\n pickerItemContainer?: any;\n pickerItem?: any;\n disabledPickerItem?: any;\n pickerGradientOverlay?: any;\n}\n\nconst DARK_MODE_BACKGROUND_COLOR = \"#232323\";\nconst DARK_MODE_TEXT_COLOR = \"#E9E9E9\";\nconst LIGHT_MODE_BACKGROUND_COLOR = \"#F1F1F1\";\nconst LIGHT_MODE_TEXT_COLOR = \"#1B1B1B\";\n\nexport const generateStyles = (\n customStyles: CustomTimerPickerStyles | undefined,\n options: { padWithNItems: number }\n) =>\n StyleSheet.create({\n pickerContainer: {\n flexDirection: \"row\",\n marginRight: \"8%\",\n backgroundColor:\n customStyles?.backgroundColor ??\n (customStyles?.theme === \"dark\"\n ? DARK_MODE_BACKGROUND_COLOR\n : LIGHT_MODE_BACKGROUND_COLOR),\n ...customStyles?.pickerContainer,\n },\n pickerLabelContainer: {\n position: \"absolute\",\n right: 4,\n top: 0,\n bottom: 0,\n justifyContent: \"center\",\n ...customStyles?.pickerLabelContainer,\n },\n pickerLabel: {\n fontSize: 18,\n fontWeight: \"bold\",\n marginTop: (customStyles?.pickerItem?.fontSize ?? 25) / 6,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.pickerLabel,\n },\n pickerItemContainer: {\n height: 50,\n justifyContent: \"center\",\n alignItems: \"center\",\n width: (customStyles?.pickerItem?.fontSize ?? 25) * 3.6,\n ...customStyles?.pickerItemContainer,\n },\n pickerItem: {\n textAlignVertical: \"center\",\n fontSize: 25,\n color:\n customStyles?.theme === \"dark\"\n ? DARK_MODE_TEXT_COLOR\n : LIGHT_MODE_TEXT_COLOR,\n ...customStyles?.text,\n ...customStyles?.pickerItem,\n },\n disabledPickerItem: {\n opacity: 0.2,\n ...customStyles?.disabledPickerItem,\n },\n pickerGradientOverlay: {\n position: \"absolute\",\n left: 0,\n right: 0,\n height:\n options.padWithNItems === 0\n ? \"30%\"\n : (customStyles?.pickerItemContainer?.height ?? 50) * 0.8,\n ...customStyles?.pickerGradientOverlay,\n },\n });\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AADA;;AAgBA,MAAMC,0BAA0B,GAAG,SAAS;AAC5C,MAAMC,oBAAoB,GAAG,SAAS;AACtC,MAAMC,2BAA2B,GAAG,SAAS;AAC7C,MAAMC,qBAAqB,GAAG,SAAS;AAEhC,MAAMC,cAAc,GAAGA,CAC1BC,YAAiD,EACjDC,OAAkC;EAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;EAAA,OAElCC,uBAAU,CAACC,MAAM,CAAC;IACdC,eAAe,EAAE;MACbC,aAAa,EAAE,KAAK;MACpBC,WAAW,EAAE,IAAI;MACjBC,eAAe,EACX,CAAAV,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEU,eAAe,MAC5B,CAAAV,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEW,KAAK,MAAK,MAAM,GACzBhB,0BAA0B,GAC1BE,2BAA2B,CAAC;MACtC,IAAGG,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEO,eAAe;IACpC,CAAC;IACDK,oBAAoB,EAAE;MAClBC,QAAQ,EAAE,UAAU;MACpBC,KAAK,EAAE,CAAC;MACRC,GAAG,EAAE,CAAC;MACNC,MAAM,EAAE,CAAC;MACTC,cAAc,EAAE,QAAQ;MACxB,IAAGjB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEY,oBAAoB;IACzC,CAAC;IACDM,WAAW,EAAE;MACTC,QAAQ,EAAE,EAAE;MACZC,UAAU,EAAE,MAAM;MAClBC,SAAS,EAAE,CAAC,CAAArB,YAAY,aAAZA,YAAY,gBAAAE,qBAAA,GAAZF,YAAY,CAAEsB,UAAU,cAAApB,qBAAA,uBAAxBA,qBAAA,CAA0BiB,QAAQ,KAAI,EAAE,IAAI,CAAC;MACzDI,KAAK,EACD,CAAAvB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEW,KAAK,MAAK,MAAM,GACxBf,oBAAoB,GACpBE,qBAAqB;MAC/B,IAAGE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEwB,IAAI;MACrB,IAAGxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEkB,WAAW;IAChC,CAAC;IACDO,mBAAmB,EAAE;MACjBC,MAAM,EAAE,EAAE;MACVT,cAAc,EAAE,QAAQ;MACxBU,UAAU,EAAE,QAAQ;MACpBC,KAAK,EAAE,CAAC,CAAA5B,YAAY,aAAZA,YAAY,gBAAAG,sBAAA,GAAZH,YAAY,CAAEsB,UAAU,cAAAnB,sBAAA,uBAAxBA,sBAAA,CAA0BgB,QAAQ,KAAI,EAAE,IAAI,GAAG;MACvD,IAAGnB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEyB,mBAAmB;IACxC,CAAC;IACDH,UAAU,EAAE;MACRO,iBAAiB,EAAE,QAAQ;MAC3BV,QAAQ,EAAE,EAAE;MACZI,KAAK,EACD,CAAAvB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEW,KAAK,MAAK,MAAM,GACxBf,oBAAoB,GACpBE,qBAAqB;MAC/B,IAAGE,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEwB,IAAI;MACrB,IAAGxB,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEsB,UAAU;IAC/B,CAAC;IACDQ,kBAAkB,EAAE;MAChBC,OAAO,EAAE,GAAG;MACZ,IAAG/B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAE8B,kBAAkB;IACvC,CAAC;IACDE,qBAAqB,EAAE;MACnBnB,QAAQ,EAAE,UAAU;MACpBoB,IAAI,EAAE,CAAC;MACPnB,KAAK,EAAE,CAAC;MACRY,MAAM,EACFzB,OAAO,CAACiC,aAAa,KAAK,CAAC,GACrB,KAAK,GACL,CAAC,CAAAlC,YAAY,aAAZA,YAAY,gBAAAI,sBAAA,GAAZJ,YAAY,CAAEyB,mBAAmB,cAAArB,sBAAA,uBAAjCA,sBAAA,CAAmCsB,MAAM,KAAI,EAAE,IAAI,GAAG;MACjE,IAAG1B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEgC,qBAAqB;IAC1C;EACJ,CAAC,CAAC;AAAA;AAACG,OAAA,CAAApC,cAAA,GAAAA,cAAA"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _DurationScroll = _interopRequireDefault(require("./DurationScroll"));
10
+ var _TimerPicker = require("./TimerPicker.styles");
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
15
+ const TimerPicker = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
16
+ let {
17
+ onDurationChange,
18
+ initialHours = 0,
19
+ initialMinutes = 0,
20
+ initialSeconds = 0,
21
+ hideHours = false,
22
+ hideMinutes = false,
23
+ hideSeconds = false,
24
+ hourLimit,
25
+ minuteLimit,
26
+ secondLimit,
27
+ hourLabel = "h",
28
+ minuteLabel = "m",
29
+ secondLabel = "s",
30
+ padWithNItems = 1,
31
+ disableInfiniteScroll = false,
32
+ LinearGradient,
33
+ pickerContainerProps,
34
+ pickerGradientOverlayProps,
35
+ topPickerGradientOverlayProps,
36
+ bottomPickerGradientOverlayProps,
37
+ styles: customStyles
38
+ } = _ref;
39
+ const checkedPadWithNItems = padWithNItems >= 0 ? Math.round(padWithNItems) : 0;
40
+ const styles = (0, _react.useMemo)(() => (0, _TimerPicker.generateStyles)(customStyles, {
41
+ padWithNItems: checkedPadWithNItems
42
+ }), [checkedPadWithNItems, customStyles]);
43
+ const [selectedHours, setSelectedHours] = (0, _react.useState)(initialHours);
44
+ const [selectedMinutes, setSelectedMinutes] = (0, _react.useState)(initialMinutes);
45
+ const [selectedSeconds, setSelectedSeconds] = (0, _react.useState)(initialSeconds);
46
+ (0, _react.useEffect)(() => {
47
+ onDurationChange === null || onDurationChange === void 0 || onDurationChange({
48
+ hours: selectedHours,
49
+ minutes: selectedMinutes,
50
+ seconds: selectedSeconds
51
+ });
52
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
+ }, [selectedHours, selectedMinutes, selectedSeconds]);
54
+ const hoursDurationScrollRef = (0, _react.useRef)(null);
55
+ const minutesDurationScrollRef = (0, _react.useRef)(null);
56
+ const secondsDurationScrollRef = (0, _react.useRef)(null);
57
+ (0, _react.useImperativeHandle)(ref, () => ({
58
+ reset: options => {
59
+ var _hoursDurationScrollR, _minutesDurationScrol, _secondsDurationScrol;
60
+ setSelectedHours(initialHours);
61
+ setSelectedMinutes(initialMinutes);
62
+ setSelectedSeconds(initialSeconds);
63
+ (_hoursDurationScrollR = hoursDurationScrollRef.current) === null || _hoursDurationScrollR === void 0 || _hoursDurationScrollR.reset(options);
64
+ (_minutesDurationScrol = minutesDurationScrollRef.current) === null || _minutesDurationScrol === void 0 || _minutesDurationScrol.reset(options);
65
+ (_secondsDurationScrol = secondsDurationScrollRef.current) === null || _secondsDurationScrol === void 0 || _secondsDurationScrol.reset(options);
66
+ },
67
+ setValue: (value, options) => {
68
+ var _hoursDurationScrollR2, _minutesDurationScrol2, _secondsDurationScrol2;
69
+ setSelectedHours(value.hours);
70
+ setSelectedMinutes(value.minutes);
71
+ setSelectedSeconds(value.seconds);
72
+ (_hoursDurationScrollR2 = hoursDurationScrollRef.current) === null || _hoursDurationScrollR2 === void 0 || _hoursDurationScrollR2.setValue(value.hours, options);
73
+ (_minutesDurationScrol2 = minutesDurationScrollRef.current) === null || _minutesDurationScrol2 === void 0 || _minutesDurationScrol2.setValue(value.minutes, options);
74
+ (_secondsDurationScrol2 = secondsDurationScrollRef.current) === null || _secondsDurationScrol2 === void 0 || _secondsDurationScrol2.setValue(value.seconds, options);
75
+ }
76
+ }));
77
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, _extends({}, pickerContainerProps, {
78
+ style: styles.pickerContainer,
79
+ testID: "timer-picker"
80
+ }), !hideHours ? /*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
81
+ ref: hoursDurationScrollRef,
82
+ numberOfItems: 23,
83
+ label: hourLabel,
84
+ initialValue: initialHours,
85
+ onDurationChange: setSelectedHours,
86
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
87
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
88
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
89
+ disableInfiniteScroll: disableInfiniteScroll,
90
+ padWithNItems: checkedPadWithNItems,
91
+ limit: hourLimit,
92
+ LinearGradient: LinearGradient,
93
+ styles: styles,
94
+ testID: "duration-scroll-hour"
95
+ }) : null, !hideMinutes ? /*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
96
+ ref: minutesDurationScrollRef,
97
+ numberOfItems: 59,
98
+ label: minuteLabel,
99
+ initialValue: initialMinutes,
100
+ onDurationChange: setSelectedMinutes,
101
+ padNumbersWithZero: true,
102
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
103
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
104
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
105
+ disableInfiniteScroll: disableInfiniteScroll,
106
+ padWithNItems: checkedPadWithNItems,
107
+ limit: minuteLimit,
108
+ LinearGradient: LinearGradient,
109
+ styles: styles,
110
+ testID: "duration-scroll-minute"
111
+ }) : null, !hideSeconds ? /*#__PURE__*/_react.default.createElement(_DurationScroll.default, {
112
+ ref: secondsDurationScrollRef,
113
+ numberOfItems: 59,
114
+ label: secondLabel,
115
+ initialValue: initialSeconds,
116
+ onDurationChange: setSelectedSeconds,
117
+ padNumbersWithZero: true,
118
+ pickerGradientOverlayProps: pickerGradientOverlayProps,
119
+ topPickerGradientOverlayProps: topPickerGradientOverlayProps,
120
+ bottomPickerGradientOverlayProps: bottomPickerGradientOverlayProps,
121
+ disableInfiniteScroll: disableInfiniteScroll,
122
+ padWithNItems: checkedPadWithNItems,
123
+ limit: secondLimit,
124
+ LinearGradient: LinearGradient,
125
+ styles: styles,
126
+ testID: "duration-scroll-second"
127
+ }) : null);
128
+ });
129
+ var _default = exports.default = /*#__PURE__*/_react.default.memo(TimerPicker);
130
+ //# sourceMappingURL=index.js.map