react-native-timer-picker 2.4.0 → 2.6.0

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 (171) hide show
  1. package/README.md +35 -25
  2. package/package.json +143 -126
  3. package/dist/commonjs/components/DurationScroll/DurationScroll.js +0 -403
  4. package/dist/commonjs/components/DurationScroll/DurationScroll.js.map +0 -1
  5. package/dist/commonjs/components/DurationScroll/index.js +0 -27
  6. package/dist/commonjs/components/DurationScroll/index.js.map +0 -1
  7. package/dist/commonjs/components/DurationScroll/types.js +0 -6
  8. package/dist/commonjs/components/DurationScroll/types.js.map +0 -1
  9. package/dist/commonjs/components/Modal/Modal.js +0 -107
  10. package/dist/commonjs/components/Modal/Modal.js.map +0 -1
  11. package/dist/commonjs/components/Modal/index.js +0 -27
  12. package/dist/commonjs/components/Modal/index.js.map +0 -1
  13. package/dist/commonjs/components/Modal/styles.js +0 -25
  14. package/dist/commonjs/components/Modal/styles.js.map +0 -1
  15. package/dist/commonjs/components/Modal/types.js +0 -6
  16. package/dist/commonjs/components/Modal/types.js.map +0 -1
  17. package/dist/commonjs/components/PickerItem/PickerItem.js +0 -45
  18. package/dist/commonjs/components/PickerItem/PickerItem.js.map +0 -1
  19. package/dist/commonjs/components/PickerItem/index.js +0 -14
  20. package/dist/commonjs/components/PickerItem/index.js.map +0 -1
  21. package/dist/commonjs/components/TimerPicker/TimerPicker.js +0 -236
  22. package/dist/commonjs/components/TimerPicker/TimerPicker.js.map +0 -1
  23. package/dist/commonjs/components/TimerPicker/index.js +0 -39
  24. package/dist/commonjs/components/TimerPicker/index.js.map +0 -1
  25. package/dist/commonjs/components/TimerPicker/styles.js +0 -121
  26. package/dist/commonjs/components/TimerPicker/styles.js.map +0 -1
  27. package/dist/commonjs/components/TimerPicker/types.js +0 -6
  28. package/dist/commonjs/components/TimerPicker/types.js.map +0 -1
  29. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js +0 -153
  30. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js.map +0 -1
  31. package/dist/commonjs/components/TimerPickerModal/index.js +0 -39
  32. package/dist/commonjs/components/TimerPickerModal/index.js.map +0 -1
  33. package/dist/commonjs/components/TimerPickerModal/styles.js +0 -89
  34. package/dist/commonjs/components/TimerPickerModal/styles.js.map +0 -1
  35. package/dist/commonjs/components/TimerPickerModal/types.js +0 -6
  36. package/dist/commonjs/components/TimerPickerModal/types.js.map +0 -1
  37. package/dist/commonjs/index.js +0 -57
  38. package/dist/commonjs/index.js.map +0 -1
  39. package/dist/commonjs/tests/DurationScroll.test.js +0 -163
  40. package/dist/commonjs/tests/DurationScroll.test.js.map +0 -1
  41. package/dist/commonjs/tests/Modal.test.js +0 -119
  42. package/dist/commonjs/tests/Modal.test.js.map +0 -1
  43. package/dist/commonjs/tests/TimerPicker.test.js +0 -169
  44. package/dist/commonjs/tests/TimerPicker.test.js.map +0 -1
  45. package/dist/commonjs/tests/TimerPickerModal.test.js +0 -276
  46. package/dist/commonjs/tests/TimerPickerModal.test.js.map +0 -1
  47. package/dist/commonjs/tests/colorToRgba.test.js +0 -176
  48. package/dist/commonjs/tests/colorToRgba.test.js.map +0 -1
  49. package/dist/commonjs/tests/generateNumbers.test.js +0 -350
  50. package/dist/commonjs/tests/generateNumbers.test.js.map +0 -1
  51. package/dist/commonjs/tests/getAdjustedLimit.test.js +0 -324
  52. package/dist/commonjs/tests/getAdjustedLimit.test.js.map +0 -1
  53. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js +0 -424
  54. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +0 -1
  55. package/dist/commonjs/tests/getInitialScrollIndex.test.js +0 -396
  56. package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +0 -1
  57. package/dist/commonjs/tests/getSafeInitialValue.test.js +0 -497
  58. package/dist/commonjs/tests/getSafeInitialValue.test.js.map +0 -1
  59. package/dist/commonjs/tests/padNumber.test.js +0 -301
  60. package/dist/commonjs/tests/padNumber.test.js.map +0 -1
  61. package/dist/commonjs/utils/colorToRgba.js +0 -87
  62. package/dist/commonjs/utils/colorToRgba.js.map +0 -1
  63. package/dist/commonjs/utils/generateNumbers.js +0 -124
  64. package/dist/commonjs/utils/generateNumbers.js.map +0 -1
  65. package/dist/commonjs/utils/getAdjustedLimit.js +0 -58
  66. package/dist/commonjs/utils/getAdjustedLimit.js.map +0 -1
  67. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +0 -62
  68. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +0 -1
  69. package/dist/commonjs/utils/getInitialScrollIndex.js +0 -57
  70. package/dist/commonjs/utils/getInitialScrollIndex.js.map +0 -1
  71. package/dist/commonjs/utils/getSafeInitialValue.js +0 -41
  72. package/dist/commonjs/utils/getSafeInitialValue.js.map +0 -1
  73. package/dist/commonjs/utils/padNumber.js +0 -40
  74. package/dist/commonjs/utils/padNumber.js.map +0 -1
  75. package/dist/module/components/DurationScroll/DurationScroll.js +0 -395
  76. package/dist/module/components/DurationScroll/DurationScroll.js.map +0 -1
  77. package/dist/module/components/DurationScroll/index.js +0 -3
  78. package/dist/module/components/DurationScroll/index.js.map +0 -1
  79. package/dist/module/components/DurationScroll/types.js +0 -2
  80. package/dist/module/components/DurationScroll/types.js.map +0 -1
  81. package/dist/module/components/Modal/Modal.js +0 -99
  82. package/dist/module/components/Modal/Modal.js.map +0 -1
  83. package/dist/module/components/Modal/index.js +0 -3
  84. package/dist/module/components/Modal/index.js.map +0 -1
  85. package/dist/module/components/Modal/styles.js +0 -19
  86. package/dist/module/components/Modal/styles.js.map +0 -1
  87. package/dist/module/components/Modal/types.js +0 -2
  88. package/dist/module/components/Modal/types.js.map +0 -1
  89. package/dist/module/components/PickerItem/PickerItem.js +0 -38
  90. package/dist/module/components/PickerItem/PickerItem.js.map +0 -1
  91. package/dist/module/components/PickerItem/index.js +0 -2
  92. package/dist/module/components/PickerItem/index.js.map +0 -1
  93. package/dist/module/components/TimerPicker/TimerPicker.js +0 -228
  94. package/dist/module/components/TimerPicker/TimerPicker.js.map +0 -1
  95. package/dist/module/components/TimerPicker/index.js +0 -4
  96. package/dist/module/components/TimerPicker/index.js.map +0 -1
  97. package/dist/module/components/TimerPicker/styles.js +0 -114
  98. package/dist/module/components/TimerPicker/styles.js.map +0 -1
  99. package/dist/module/components/TimerPicker/types.js +0 -2
  100. package/dist/module/components/TimerPicker/types.js.map +0 -1
  101. package/dist/module/components/TimerPickerModal/TimerPickerModal.js +0 -145
  102. package/dist/module/components/TimerPickerModal/TimerPickerModal.js.map +0 -1
  103. package/dist/module/components/TimerPickerModal/index.js +0 -4
  104. package/dist/module/components/TimerPickerModal/index.js.map +0 -1
  105. package/dist/module/components/TimerPickerModal/styles.js +0 -82
  106. package/dist/module/components/TimerPickerModal/styles.js.map +0 -1
  107. package/dist/module/components/TimerPickerModal/types.js +0 -2
  108. package/dist/module/components/TimerPickerModal/types.js.map +0 -1
  109. package/dist/module/index.js +0 -3
  110. package/dist/module/index.js.map +0 -1
  111. package/dist/module/tests/DurationScroll.test.js +0 -160
  112. package/dist/module/tests/DurationScroll.test.js.map +0 -1
  113. package/dist/module/tests/Modal.test.js +0 -116
  114. package/dist/module/tests/Modal.test.js.map +0 -1
  115. package/dist/module/tests/TimerPicker.test.js +0 -166
  116. package/dist/module/tests/TimerPicker.test.js.map +0 -1
  117. package/dist/module/tests/TimerPickerModal.test.js +0 -273
  118. package/dist/module/tests/TimerPickerModal.test.js.map +0 -1
  119. package/dist/module/tests/colorToRgba.test.js +0 -174
  120. package/dist/module/tests/colorToRgba.test.js.map +0 -1
  121. package/dist/module/tests/generateNumbers.test.js +0 -348
  122. package/dist/module/tests/generateNumbers.test.js.map +0 -1
  123. package/dist/module/tests/getAdjustedLimit.test.js +0 -322
  124. package/dist/module/tests/getAdjustedLimit.test.js.map +0 -1
  125. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js +0 -422
  126. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +0 -1
  127. package/dist/module/tests/getInitialScrollIndex.test.js +0 -394
  128. package/dist/module/tests/getInitialScrollIndex.test.js.map +0 -1
  129. package/dist/module/tests/getSafeInitialValue.test.js +0 -495
  130. package/dist/module/tests/getSafeInitialValue.test.js.map +0 -1
  131. package/dist/module/tests/padNumber.test.js +0 -299
  132. package/dist/module/tests/padNumber.test.js.map +0 -1
  133. package/dist/module/utils/colorToRgba.js +0 -80
  134. package/dist/module/utils/colorToRgba.js.map +0 -1
  135. package/dist/module/utils/generateNumbers.js +0 -117
  136. package/dist/module/utils/generateNumbers.js.map +0 -1
  137. package/dist/module/utils/getAdjustedLimit.js +0 -51
  138. package/dist/module/utils/getAdjustedLimit.js.map +0 -1
  139. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +0 -55
  140. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +0 -1
  141. package/dist/module/utils/getInitialScrollIndex.js +0 -50
  142. package/dist/module/utils/getInitialScrollIndex.js.map +0 -1
  143. package/dist/module/utils/getSafeInitialValue.js +0 -34
  144. package/dist/module/utils/getSafeInitialValue.js.map +0 -1
  145. package/dist/module/utils/padNumber.js +0 -33
  146. package/dist/module/utils/padNumber.js.map +0 -1
  147. package/dist/typescript/components/DurationScroll/DurationScroll.d.ts +0 -4
  148. package/dist/typescript/components/DurationScroll/index.d.ts +0 -2
  149. package/dist/typescript/components/DurationScroll/types.d.ts +0 -66
  150. package/dist/typescript/components/Modal/Modal.d.ts +0 -5
  151. package/dist/typescript/components/Modal/index.d.ts +0 -2
  152. package/dist/typescript/components/Modal/styles.d.ts +0 -17
  153. package/dist/typescript/components/Modal/types.d.ts +0 -15
  154. package/dist/typescript/components/PickerItem/PickerItem.d.ts +0 -14
  155. package/dist/typescript/components/PickerItem/index.d.ts +0 -1
  156. package/dist/typescript/components/TimerPicker/TimerPicker.d.ts +0 -4
  157. package/dist/typescript/components/TimerPicker/index.d.ts +0 -3
  158. package/dist/typescript/components/TimerPicker/styles.d.ts +0 -1451
  159. package/dist/typescript/components/TimerPicker/types.d.ts +0 -90
  160. package/dist/typescript/components/TimerPickerModal/TimerPickerModal.d.ts +0 -4
  161. package/dist/typescript/components/TimerPickerModal/index.d.ts +0 -3
  162. package/dist/typescript/components/TimerPickerModal/styles.d.ts +0 -947
  163. package/dist/typescript/components/TimerPickerModal/types.d.ts +0 -55
  164. package/dist/typescript/index.d.ts +0 -2
  165. package/dist/typescript/utils/colorToRgba.d.ts +0 -38
  166. package/dist/typescript/utils/generateNumbers.d.ts +0 -80
  167. package/dist/typescript/utils/getAdjustedLimit.d.ts +0 -30
  168. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +0 -49
  169. package/dist/typescript/utils/getInitialScrollIndex.d.ts +0 -46
  170. package/dist/typescript/utils/getSafeInitialValue.d.ts +0 -38
  171. package/dist/typescript/utils/padNumber.d.ts +0 -28
@@ -1,62 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getDurationAndIndexFromScrollOffset = void 0;
7
- /**
8
- * Calculates the duration value and index from a scroll offset in a number picker.
9
- * Handles both infinite and non-infinite scroll modes, taking into account padding and item height.
10
- *
11
- * @param {Object} variables - Configuration object for scroll offset calculation
12
- * @param {boolean} variables.disableInfiniteScroll - Whether infinite scroll is disabled
13
- * @param {number} variables.interval - The interval between consecutive numbers
14
- * @param {number} variables.itemHeight - Height of each item in the picker
15
- * @param {number} variables.numberOfItems - Total number of items in the picker
16
- * @param {number} variables.padWithNItems - Number of empty items to pad with
17
- * @param {number} variables.yContentOffset - The vertical scroll offset
18
- *
19
- * @returns {{ duration: number; index: number }} Object containing the calculated duration and index
20
- *
21
- * @example
22
- * // With infinite scroll enabled
23
- * getDurationAndIndexFromScrollOffset({
24
- * disableInfiniteScroll: false,
25
- * interval: 1,
26
- * itemHeight: 50,
27
- * numberOfItems: 24,
28
- * padWithNItems: 2,
29
- * yContentOffset: 100
30
- * })
31
- * // Returns: { duration: 2, index: 2 }
32
- *
33
- * @example
34
- * // With infinite scroll disabled
35
- * getDurationAndIndexFromScrollOffset({
36
- * disableInfiniteScroll: true,
37
- * interval: 1,
38
- * itemHeight: 50,
39
- * numberOfItems: 24,
40
- * padWithNItems: 2,
41
- * yContentOffset: 100
42
- * })
43
- * // Returns: { duration: 2, index: 2 }
44
- */
45
- const getDurationAndIndexFromScrollOffset = variables => {
46
- const {
47
- disableInfiniteScroll,
48
- interval,
49
- itemHeight,
50
- numberOfItems,
51
- padWithNItems,
52
- yContentOffset
53
- } = variables;
54
- const index = Math.round(yContentOffset / itemHeight);
55
- const duration = (disableInfiniteScroll ? index : index + padWithNItems) % numberOfItems * interval;
56
- return {
57
- duration,
58
- index
59
- };
60
- };
61
- exports.getDurationAndIndexFromScrollOffset = getDurationAndIndexFromScrollOffset;
62
- //# sourceMappingURL=getDurationAndIndexFromScrollOffset.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getDurationAndIndexFromScrollOffset","variables","disableInfiniteScroll","interval","itemHeight","numberOfItems","padWithNItems","yContentOffset","index","Math","round","duration","exports"],"sources":["getDurationAndIndexFromScrollOffset.ts"],"sourcesContent":["/**\n * Calculates the duration value and index from a scroll offset in a number picker.\n * Handles both infinite and non-infinite scroll modes, taking into account padding and item height.\n *\n * @param {Object} variables - Configuration object for scroll offset calculation\n * @param {boolean} variables.disableInfiniteScroll - Whether infinite scroll is disabled\n * @param {number} variables.interval - The interval between consecutive numbers\n * @param {number} variables.itemHeight - Height of each item in the picker\n * @param {number} variables.numberOfItems - Total number of items in the picker\n * @param {number} variables.padWithNItems - Number of empty items to pad with\n * @param {number} variables.yContentOffset - The vertical scroll offset\n *\n * @returns {{ duration: number; index: number }} Object containing the calculated duration and index\n *\n * @example\n * // With infinite scroll enabled\n * getDurationAndIndexFromScrollOffset({\n * disableInfiniteScroll: false,\n * interval: 1,\n * itemHeight: 50,\n * numberOfItems: 24,\n * padWithNItems: 2,\n * yContentOffset: 100\n * })\n * // Returns: { duration: 2, index: 2 }\n *\n * @example\n * // With infinite scroll disabled\n * getDurationAndIndexFromScrollOffset({\n * disableInfiniteScroll: true,\n * interval: 1,\n * itemHeight: 50,\n * numberOfItems: 24,\n * padWithNItems: 2,\n * yContentOffset: 100\n * })\n * // Returns: { duration: 2, index: 2 }\n */\nexport const getDurationAndIndexFromScrollOffset = (variables: {\n disableInfiniteScroll: boolean;\n interval: number;\n itemHeight: number;\n numberOfItems: number;\n padWithNItems: number;\n yContentOffset: number;\n}) => {\n const {\n disableInfiniteScroll,\n interval,\n itemHeight,\n numberOfItems,\n padWithNItems,\n yContentOffset,\n } = variables;\n\n const index = Math.round(yContentOffset / itemHeight);\n\n const duration =\n ((disableInfiniteScroll ? index : index + padWithNItems) %\n numberOfItems) *\n interval;\n\n return {\n duration,\n index,\n };\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,mCAAmC,GAAIC,SAOnD,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,QAAQ;IACRC,UAAU;IACVC,aAAa;IACbC,aAAa;IACbC;EACJ,CAAC,GAAGN,SAAS;EAEb,MAAMO,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,cAAc,GAAGH,UAAU,CAAC;EAErD,MAAMO,QAAQ,GACT,CAACT,qBAAqB,GAAGM,KAAK,GAAGA,KAAK,GAAGF,aAAa,IACnDD,aAAa,GACjBF,QAAQ;EAEZ,OAAO;IACHQ,QAAQ;IACRH;EACJ,CAAC;AACL,CAAC;AAACI,OAAA,CAAAZ,mCAAA,GAAAA,mCAAA","ignoreList":[]}
@@ -1,57 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getInitialScrollIndex = void 0;
7
- /**
8
- * Calculates the initial scroll index for a number picker based on the desired value and configuration.
9
- * Handles both infinite and non-infinite scroll modes, taking into account padding and repetition.
10
- *
11
- * @param {Object} variables - Configuration object for scroll index calculation
12
- * @param {boolean} variables.disableInfiniteScroll - Whether infinite scroll is disabled
13
- * @param {number} variables.interval - The interval between consecutive numbers
14
- * @param {number} variables.numberOfItems - Total number of items in the picker
15
- * @param {number} variables.padWithNItems - Number of empty items to pad with
16
- * @param {number} variables.repeatNumbersNTimes - How many times to repeat the number sequence
17
- * @param {number} variables.value - The desired initial value
18
- *
19
- * @returns {number} The calculated initial scroll index
20
- *
21
- * @example
22
- * // With infinite scroll enabled
23
- * getInitialScrollIndex({
24
- * disableInfiniteScroll: false,
25
- * interval: 1,
26
- * numberOfItems: 24,
27
- * padWithNItems: 2,
28
- * repeatNumbersNTimes: 3,
29
- * value: 12
30
- * })
31
- * // Returns: 38
32
- *
33
- * @example
34
- * // With infinite scroll disabled
35
- * getInitialScrollIndex({
36
- * disableInfiniteScroll: true,
37
- * interval: 1,
38
- * numberOfItems: 24,
39
- * padWithNItems: 2,
40
- * repeatNumbersNTimes: 1,
41
- * value: 12
42
- * })
43
- * // Returns: 12
44
- */
45
- const getInitialScrollIndex = variables => {
46
- const {
47
- disableInfiniteScroll,
48
- interval,
49
- numberOfItems,
50
- padWithNItems,
51
- repeatNumbersNTimes,
52
- value
53
- } = variables;
54
- return Math.max(numberOfItems * Math.floor(repeatNumbersNTimes / 2) + (value / interval + numberOfItems) % numberOfItems - (!disableInfiniteScroll ? padWithNItems : 0), 0);
55
- };
56
- exports.getInitialScrollIndex = getInitialScrollIndex;
57
- //# sourceMappingURL=getInitialScrollIndex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getInitialScrollIndex","variables","disableInfiniteScroll","interval","numberOfItems","padWithNItems","repeatNumbersNTimes","value","Math","max","floor","exports"],"sources":["getInitialScrollIndex.ts"],"sourcesContent":["/**\n * Calculates the initial scroll index for a number picker based on the desired value and configuration.\n * Handles both infinite and non-infinite scroll modes, taking into account padding and repetition.\n * \n * @param {Object} variables - Configuration object for scroll index calculation\n * @param {boolean} variables.disableInfiniteScroll - Whether infinite scroll is disabled\n * @param {number} variables.interval - The interval between consecutive numbers\n * @param {number} variables.numberOfItems - Total number of items in the picker\n * @param {number} variables.padWithNItems - Number of empty items to pad with\n * @param {number} variables.repeatNumbersNTimes - How many times to repeat the number sequence\n * @param {number} variables.value - The desired initial value\n * \n * @returns {number} The calculated initial scroll index\n * \n * @example\n * // With infinite scroll enabled\n * getInitialScrollIndex({\n * disableInfiniteScroll: false,\n * interval: 1,\n * numberOfItems: 24,\n * padWithNItems: 2,\n * repeatNumbersNTimes: 3,\n * value: 12\n * })\n * // Returns: 38\n * \n * @example\n * // With infinite scroll disabled\n * getInitialScrollIndex({\n * disableInfiniteScroll: true,\n * interval: 1,\n * numberOfItems: 24,\n * padWithNItems: 2,\n * repeatNumbersNTimes: 1,\n * value: 12\n * })\n * // Returns: 12\n */\nexport const getInitialScrollIndex = (variables: {\n disableInfiniteScroll: boolean;\n interval: number;\n numberOfItems: number;\n padWithNItems: number;\n repeatNumbersNTimes: number;\n value: number;\n}) => {\n const {\n disableInfiniteScroll,\n interval,\n numberOfItems,\n padWithNItems,\n repeatNumbersNTimes,\n value,\n } = variables;\n\n return Math.max(\n numberOfItems * Math.floor(repeatNumbersNTimes / 2) +\n ((value / interval + numberOfItems) % numberOfItems) -\n (!disableInfiniteScroll ? padWithNItems : 0),\n 0\n );\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,qBAAqB,GAAIC,SAOrC,IAAK;EACF,MAAM;IACFC,qBAAqB;IACrBC,QAAQ;IACRC,aAAa;IACbC,aAAa;IACbC,mBAAmB;IACnBC;EACJ,CAAC,GAAGN,SAAS;EAEb,OAAOO,IAAI,CAACC,GAAG,CACXL,aAAa,GAAGI,IAAI,CAACE,KAAK,CAACJ,mBAAmB,GAAG,CAAC,CAAC,GAC9C,CAACC,KAAK,GAAGJ,QAAQ,GAAGC,aAAa,IAAIA,aAAc,IACnD,CAACF,qBAAqB,GAAGG,aAAa,GAAG,CAAC,CAAC,EAChD,CACJ,CAAC;AACL,CAAC;AAACM,OAAA,CAAAX,qBAAA,GAAAA,qBAAA","ignoreList":[]}
@@ -1,41 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getSafeInitialValue = void 0;
7
- /**
8
- * Safely extracts and validates initial duration values, ensuring all values are valid numbers.
9
- * Returns a duration object with safe default values (0) for any invalid or missing inputs.
10
- *
11
- * @param {Object} [initialValue] - Optional initial duration values
12
- * @param {number} [initialValue.days] - Initial days value
13
- * @param {number} [initialValue.hours] - Initial hours value
14
- * @param {number} [initialValue.minutes] - Initial minutes value
15
- * @param {number} [initialValue.seconds] - Initial seconds value
16
- *
17
- * @returns {{ days: number; hours: number; minutes: number; seconds: number }} An object containing safe duration values
18
- *
19
- * @example
20
- * // With valid values
21
- * getSafeInitialValue({ days: 1, hours: 2, minutes: 30, seconds: 45 })
22
- * // Returns: { days: 1, hours: 2, minutes: 30, seconds: 45 }
23
- *
24
- * @example
25
- * // With invalid values
26
- * getSafeInitialValue({ days: NaN, hours: 'invalid', minutes: undefined })
27
- * // Returns: { days: 0, hours: 0, minutes: 0, seconds: 0 }
28
- *
29
- * @example
30
- * // With undefined input
31
- * getSafeInitialValue(undefined)
32
- * // Returns: { days: 0, hours: 0, minutes: 0, seconds: 0 }
33
- */
34
- const getSafeInitialValue = initialValue => ({
35
- days: typeof (initialValue === null || initialValue === void 0 ? void 0 : initialValue.days) === "number" && !isNaN(initialValue === null || initialValue === void 0 ? void 0 : initialValue.days) ? initialValue.days : 0,
36
- hours: typeof (initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours) === "number" && !isNaN(initialValue === null || initialValue === void 0 ? void 0 : initialValue.hours) ? initialValue.hours : 0,
37
- minutes: typeof (initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes) === "number" && !isNaN(initialValue === null || initialValue === void 0 ? void 0 : initialValue.minutes) ? initialValue.minutes : 0,
38
- seconds: typeof (initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds) === "number" && !isNaN(initialValue === null || initialValue === void 0 ? void 0 : initialValue.seconds) ? initialValue.seconds : 0
39
- });
40
- exports.getSafeInitialValue = getSafeInitialValue;
41
- //# sourceMappingURL=getSafeInitialValue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getSafeInitialValue","initialValue","days","isNaN","hours","minutes","seconds","exports"],"sources":["getSafeInitialValue.ts"],"sourcesContent":["/**\n * Safely extracts and validates initial duration values, ensuring all values are valid numbers.\n * Returns a duration object with safe default values (0) for any invalid or missing inputs.\n * \n * @param {Object} [initialValue] - Optional initial duration values\n * @param {number} [initialValue.days] - Initial days value\n * @param {number} [initialValue.hours] - Initial hours value\n * @param {number} [initialValue.minutes] - Initial minutes value\n * @param {number} [initialValue.seconds] - Initial seconds value\n * \n * @returns {{ days: number; hours: number; minutes: number; seconds: number }} An object containing safe duration values\n * \n * @example\n * // With valid values\n * getSafeInitialValue({ days: 1, hours: 2, minutes: 30, seconds: 45 })\n * // Returns: { days: 1, hours: 2, minutes: 30, seconds: 45 }\n * \n * @example\n * // With invalid values\n * getSafeInitialValue({ days: NaN, hours: 'invalid', minutes: undefined })\n * // Returns: { days: 0, hours: 0, minutes: 0, seconds: 0 }\n * \n * @example\n * // With undefined input\n * getSafeInitialValue(undefined)\n * // Returns: { days: 0, hours: 0, minutes: 0, seconds: 0 }\n */\nexport const getSafeInitialValue = (\n initialValue:\n | {\n days?: number;\n hours?: number;\n minutes?: number;\n seconds?: number;\n }\n | undefined\n) => ({\n days:\n typeof initialValue?.days === \"number\" && !isNaN(initialValue?.days)\n ? initialValue.days\n : 0,\n hours:\n typeof initialValue?.hours === \"number\" && !isNaN(initialValue?.hours)\n ? initialValue.hours\n : 0,\n minutes:\n typeof initialValue?.minutes === \"number\" &&\n !isNaN(initialValue?.minutes)\n ? initialValue.minutes\n : 0,\n seconds:\n typeof initialValue?.seconds === \"number\" &&\n !isNaN(initialValue?.seconds)\n ? initialValue.seconds\n : 0,\n});\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,mBAAmB,GAC5BC,YAOe,KACb;EACFC,IAAI,EACA,QAAOD,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEC,IAAI,MAAK,QAAQ,IAAI,CAACC,KAAK,CAACF,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEC,IAAI,CAAC,GAC9DD,YAAY,CAACC,IAAI,GACjB,CAAC;EACXE,KAAK,EACD,QAAOH,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,KAAK,MAAK,QAAQ,IAAI,CAACD,KAAK,CAACF,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,KAAK,CAAC,GAChEH,YAAY,CAACG,KAAK,GAClB,CAAC;EACXC,OAAO,EACH,QAAOJ,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEI,OAAO,MAAK,QAAQ,IACzC,CAACF,KAAK,CAACF,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEI,OAAO,CAAC,GACvBJ,YAAY,CAACI,OAAO,GACpB,CAAC;EACXC,OAAO,EACH,QAAOL,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEK,OAAO,MAAK,QAAQ,IACzC,CAACH,KAAK,CAACF,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEK,OAAO,CAAC,GACvBL,YAAY,CAACK,OAAO,GACpB;AACd,CAAC,CAAC;AAACC,OAAA,CAAAP,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -1,40 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.padNumber = void 0;
7
- /**
8
- * Formats a number by optionally padding it with a leading zero or space.
9
- * Numbers less than 10 are padded based on the options provided.
10
- *
11
- * @param {number} value - The number to format
12
- * @param {Object} [options] - Optional formatting options
13
- * @param {boolean} [options.padWithZero] - Whether to pad with zero (true) or space (false)
14
- *
15
- * @returns {string} The formatted number string
16
- *
17
- * @example
18
- * // Pad with zero
19
- * padNumber(5, { padWithZero: true })
20
- * // Returns: '05'
21
- *
22
- * @example
23
- * // Pad with figure space (same width as zero)
24
- * padNumber(5, { padWithZero: false })
25
- * // Returns: ' 5'
26
- *
27
- * @example
28
- * // No padding needed
29
- * padNumber(15)
30
- * // Returns: '15'
31
- */
32
- const padNumber = (value, options) => {
33
- if (value < 10) {
34
- return (options !== null && options !== void 0 && options.padWithZero ? "0" : "\u2007") + value;
35
- } else {
36
- return String(value);
37
- }
38
- };
39
- exports.padNumber = padNumber;
40
- //# sourceMappingURL=padNumber.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["padNumber","value","options","padWithZero","String","exports"],"sources":["padNumber.ts"],"sourcesContent":["/**\n * Formats a number by optionally padding it with a leading zero or space.\n * Numbers less than 10 are padded based on the options provided.\n *\n * @param {number} value - The number to format\n * @param {Object} [options] - Optional formatting options\n * @param {boolean} [options.padWithZero] - Whether to pad with zero (true) or space (false)\n *\n * @returns {string} The formatted number string\n *\n * @example\n * // Pad with zero\n * padNumber(5, { padWithZero: true })\n * // Returns: '05'\n *\n * @example\n * // Pad with figure space (same width as zero)\n * padNumber(5, { padWithZero: false })\n * // Returns: ' 5'\n *\n * @example\n * // No padding needed\n * padNumber(15)\n * // Returns: '15'\n */\nexport const padNumber = (\n value: number,\n options?: { padWithZero?: boolean }\n): string => {\n if (value < 10) {\n return (options?.padWithZero ? \"0\" : \"\\u2007\") + value;\n } else {\n return String(value);\n }\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,SAAS,GAAGA,CACrBC,KAAa,EACbC,OAAmC,KAC1B;EACT,IAAID,KAAK,GAAG,EAAE,EAAE;IACZ,OAAO,CAACC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEC,WAAW,GAAG,GAAG,GAAG,QAAQ,IAAIF,KAAK;EAC1D,CAAC,MAAM;IACH,OAAOG,MAAM,CAACH,KAAK,CAAC;EACxB;AACJ,CAAC;AAACI,OAAA,CAAAL,SAAA,GAAAA,SAAA","ignoreList":[]}
@@ -1,395 +0,0 @@
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, { useRef, useCallback, forwardRef, useImperativeHandle, useState, useEffect, useMemo } from "react";
3
- import { View, Text, FlatList as RNFlatList } from "react-native";
4
- import { colorToRgba } from "../../utils/colorToRgba";
5
- import { generate12HourNumbers, generateNumbers } from "../../utils/generateNumbers";
6
- import { getAdjustedLimit } from "../../utils/getAdjustedLimit";
7
- import { getDurationAndIndexFromScrollOffset } from "../../utils/getDurationAndIndexFromScrollOffset";
8
- import { getInitialScrollIndex } from "../../utils/getInitialScrollIndex";
9
- import PickerItem from "../PickerItem";
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- const keyExtractor = (item, index) => index.toString();
12
- const DurationScroll = /*#__PURE__*/forwardRef((props, ref) => {
13
- const {
14
- aggressivelyGetLatestDuration,
15
- allowFontScaling = false,
16
- amLabel,
17
- Audio,
18
- clickSoundAsset,
19
- decelerationRate = 0.88,
20
- disableInfiniteScroll = false,
21
- FlatList = RNFlatList,
22
- Haptics,
23
- initialValue = 0,
24
- interval,
25
- is12HourPicker,
26
- isDisabled,
27
- label,
28
- limit,
29
- LinearGradient,
30
- MaskedView,
31
- maximumValue,
32
- onDurationChange,
33
- padNumbersWithZero = false,
34
- padWithNItems,
35
- pickerFeedback,
36
- pickerGradientOverlayProps,
37
- pmLabel,
38
- repeatNumbersNTimes = 3,
39
- repeatNumbersNTimesNotExplicitlySet,
40
- styles,
41
- testID
42
- } = props;
43
- const numberOfItems = useMemo(() => {
44
- // guard against negative maximum values
45
- if (maximumValue < 0) {
46
- return 1;
47
- }
48
- return Math.floor(maximumValue / interval) + 1;
49
- }, [interval, maximumValue]);
50
- const safeRepeatNumbersNTimes = useMemo(() => {
51
- // do not repeat numbers if there is only one option
52
- if (numberOfItems === 1) {
53
- return 1;
54
- }
55
- if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {
56
- return 2;
57
- } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {
58
- return 1;
59
- }
60
-
61
- // if this variable is not explicitly set, we calculate a reasonable value based on
62
- // the number of items in the picker, avoiding regular jumps up/down the list
63
- // whilst avoiding rendering too many items in the picker
64
- if (repeatNumbersNTimesNotExplicitlySet) {
65
- return Math.max(Math.round(180 / numberOfItems), 1);
66
- }
67
- return Math.round(repeatNumbersNTimes);
68
- }, [disableInfiniteScroll, numberOfItems, repeatNumbersNTimes, repeatNumbersNTimesNotExplicitlySet]);
69
- const numbersForFlatList = useMemo(() => {
70
- if (is12HourPicker) {
71
- return generate12HourNumbers({
72
- padNumbersWithZero,
73
- repeatNTimes: safeRepeatNumbersNTimes,
74
- disableInfiniteScroll,
75
- padWithNItems,
76
- interval
77
- });
78
- }
79
- return generateNumbers(numberOfItems, {
80
- padNumbersWithZero,
81
- repeatNTimes: safeRepeatNumbersNTimes,
82
- disableInfiniteScroll,
83
- padWithNItems,
84
- interval
85
- });
86
- }, [disableInfiniteScroll, is12HourPicker, interval, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
87
- const initialScrollIndex = useMemo(() => getInitialScrollIndex({
88
- disableInfiniteScroll,
89
- interval,
90
- numberOfItems,
91
- padWithNItems,
92
- repeatNumbersNTimes: safeRepeatNumbersNTimes,
93
- value: initialValue
94
- }), [disableInfiniteScroll, initialValue, interval, numberOfItems, padWithNItems, safeRepeatNumbersNTimes]);
95
- const adjustedLimited = useMemo(() => getAdjustedLimit(limit, numberOfItems, interval), [interval, limit, numberOfItems]);
96
- const numberOfItemsToShow = 1 + padWithNItems * 2;
97
-
98
- // keep track of the latest duration as it scrolls
99
- const latestDuration = useRef(0);
100
- // keep track of the last index scrolled past for haptic/audio feedback
101
- const lastFeedbackIndex = useRef(0);
102
- const flatListRef = useRef(null);
103
- const [clickSound, setClickSound] = useState(null);
104
- useEffect(() => {
105
- // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version
106
-
107
- // preload the sound when the component mounts
108
- let soundInstance = null;
109
- const loadSound = async () => {
110
- if (!Audio) {
111
- return;
112
- }
113
- try {
114
- const {
115
- sound: newSound
116
- } = await Audio.Sound.createAsync(clickSoundAsset ?? {
117
- // use a hosted sound as a fallback (do not use local asset due to loader issues
118
- // in some environments when including mp3 in library)
119
- uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
120
- }, {
121
- shouldPlay: false
122
- });
123
- soundInstance = newSound;
124
- setClickSound(newSound);
125
- } catch (error) {
126
- console.warn("Failed to load click sound:", error);
127
- }
128
- };
129
- loadSound();
130
- return () => {
131
- var _soundInstance;
132
- // unload sound when component unmounts
133
- (_soundInstance = soundInstance) === null || _soundInstance === void 0 || _soundInstance.unloadAsync();
134
- };
135
- // eslint-disable-next-line react-hooks/exhaustive-deps
136
- }, [Audio]);
137
- const playClickSound = useCallback(async () => {
138
- if (!clickSound) return;
139
- try {
140
- await clickSound.replayAsync();
141
- } catch (error) {
142
- console.warn("Failed to play click sound:", error);
143
- }
144
- }, [clickSound]);
145
- const renderItem = useCallback(({
146
- item
147
- }) => /*#__PURE__*/React.createElement(PickerItem, {
148
- adjustedLimitedMax: adjustedLimited.max,
149
- adjustedLimitedMin: adjustedLimited.min,
150
- allowFontScaling: allowFontScaling,
151
- amLabel: amLabel,
152
- is12HourPicker: is12HourPicker,
153
- item: item,
154
- pmLabel: pmLabel,
155
- styles: styles
156
- }), [adjustedLimited.max, adjustedLimited.min, allowFontScaling, amLabel, is12HourPicker, pmLabel, styles]);
157
- const onScroll = useCallback(e => {
158
- // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback
159
- // it is used to ensure that the modal gets the latest duration on clicking
160
- // the confirm button, even if the scrollview is still scrolling
161
- if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {
162
- return;
163
- }
164
- if (aggressivelyGetLatestDuration) {
165
- const newValues = getDurationAndIndexFromScrollOffset({
166
- disableInfiniteScroll,
167
- interval,
168
- itemHeight: styles.pickerItemContainer.height,
169
- numberOfItems,
170
- padWithNItems,
171
- yContentOffset: e.nativeEvent.contentOffset.y
172
- });
173
- if (newValues.duration !== latestDuration.current) {
174
- // check limits
175
- if (newValues.duration > adjustedLimited.max) {
176
- newValues.duration = adjustedLimited.max;
177
- } else if (newValues.duration < adjustedLimited.min) {
178
- newValues.duration = adjustedLimited.min;
179
- }
180
- latestDuration.current = newValues.duration;
181
- }
182
- }
183
- if (pickerFeedback || Haptics || Audio) {
184
- const feedbackIndex = Math.round((e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) / styles.pickerItemContainer.height);
185
- if (feedbackIndex !== lastFeedbackIndex.current) {
186
- // this check stops the feedback firing when the component mounts
187
- if (lastFeedbackIndex.current) {
188
- // fire haptic feedback if available
189
- try {
190
- Haptics === null || Haptics === void 0 || Haptics.selectionAsync();
191
- } catch {
192
- // do nothing
193
- }
194
-
195
- // play click sound if available
196
- try {
197
- playClickSound();
198
- } catch {
199
- // do nothing
200
- }
201
-
202
- // fire custom feedback if available
203
- try {
204
- pickerFeedback === null || pickerFeedback === void 0 || pickerFeedback();
205
- } catch {
206
- // do nothing
207
- }
208
- }
209
- lastFeedbackIndex.current = feedbackIndex;
210
- }
211
- }
212
- },
213
- // eslint-disable-next-line react-hooks/exhaustive-deps
214
- [adjustedLimited.max, adjustedLimited.min, aggressivelyGetLatestDuration, playClickSound, disableInfiniteScroll, interval, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
215
- const onMomentumScrollEnd = useCallback(e => {
216
- const newValues = getDurationAndIndexFromScrollOffset({
217
- disableInfiniteScroll,
218
- interval,
219
- itemHeight: styles.pickerItemContainer.height,
220
- numberOfItems,
221
- padWithNItems,
222
- yContentOffset: e.nativeEvent.contentOffset.y
223
- });
224
-
225
- // check limits
226
- if (newValues.duration > adjustedLimited.max) {
227
- var _flatListRef$current;
228
- const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);
229
- (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
230
- animated: true,
231
- index:
232
- // guard against scrolling beyond end of list
233
- targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1
234
- }); // scroll down to max
235
- newValues.duration = adjustedLimited.max;
236
- } else if (newValues.duration < adjustedLimited.min) {
237
- var _flatListRef$current2;
238
- const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);
239
- (_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
240
- animated: true,
241
- index:
242
- // guard against scrolling beyond end of list
243
- targetScrollIndex <= numbersForFlatList.length - 1 ? targetScrollIndex : adjustedLimited.min
244
- }); // scroll up to min
245
- newValues.duration = adjustedLimited.min;
246
- }
247
- onDurationChange(newValues.duration);
248
- }, [disableInfiniteScroll, interval, styles.pickerItemContainer.height, numberOfItems, padWithNItems, adjustedLimited.max, adjustedLimited.min, onDurationChange, numbersForFlatList.length]);
249
- const onViewableItemsChanged = useCallback(({
250
- viewableItems
251
- }) => {
252
- var _viewableItems$, _viewableItems$2;
253
- if (numberOfItems === 1) {
254
- return;
255
- }
256
- if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
257
- var _flatListRef$current3;
258
- (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
259
- animated: false,
260
- index: viewableItems[0].index + numberOfItems
261
- });
262
- } else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)) {
263
- var _flatListRef$current4;
264
- (_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
265
- animated: false,
266
- index: viewableItems[0].index - numberOfItems
267
- });
268
- }
269
- }, [numberOfItems, safeRepeatNumbersNTimes]);
270
- const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState(!disableInfiniteScroll ? [{
271
- viewabilityConfig: {
272
- viewAreaCoveragePercentThreshold: 0
273
- },
274
- onViewableItemsChanged: onViewableItemsChanged
275
- }] : undefined);
276
- const [flatListRenderKey, setFlatListRenderKey] = useState(0);
277
- const initialRender = useRef(true);
278
- useEffect(() => {
279
- // don't run on first render
280
- if (initialRender.current) {
281
- initialRender.current = false;
282
- return;
283
- }
284
-
285
- // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs
286
- // which requires the FlatList to be remounted, hence the increase of the FlatList key
287
- setFlatListRenderKey(prev => prev + 1);
288
- setViewabilityConfigCallbackPairs(!disableInfiniteScroll ? [{
289
- viewabilityConfig: {
290
- viewAreaCoveragePercentThreshold: 0
291
- },
292
- onViewableItemsChanged: onViewableItemsChanged
293
- }] : undefined);
294
- }, [disableInfiniteScroll, onViewableItemsChanged]);
295
- const getItemLayout = useCallback((_, index) => ({
296
- length: styles.pickerItemContainer.height,
297
- offset: styles.pickerItemContainer.height * index,
298
- index
299
- }), [styles.pickerItemContainer.height]);
300
- useImperativeHandle(ref, () => ({
301
- reset: options => {
302
- var _flatListRef$current5;
303
- (_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
304
- animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
305
- index: initialScrollIndex
306
- });
307
- },
308
- setValue: (value, options) => {
309
- var _flatListRef$current6;
310
- (_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
311
- animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
312
- index: getInitialScrollIndex({
313
- disableInfiniteScroll,
314
- interval,
315
- numberOfItems,
316
- padWithNItems,
317
- repeatNumbersNTimes: safeRepeatNumbersNTimes,
318
- value: value
319
- })
320
- });
321
- },
322
- latestDuration: latestDuration
323
- }));
324
- const renderContent = useMemo(() => {
325
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FlatList, {
326
- key: flatListRenderKey,
327
- ref: flatListRef,
328
- contentContainerStyle: styles.durationScrollFlatListContentContainer,
329
- data: numbersForFlatList,
330
- decelerationRate: decelerationRate,
331
- getItemLayout: getItemLayout,
332
- initialScrollIndex: initialScrollIndex,
333
- keyExtractor: keyExtractor,
334
- nestedScrollEnabled: true,
335
- onMomentumScrollEnd: onMomentumScrollEnd,
336
- onScroll: onScroll,
337
- renderItem: renderItem,
338
- scrollEnabled: !isDisabled,
339
- scrollEventThrottle: 16,
340
- showsVerticalScrollIndicator: false,
341
- snapToAlignment: "start"
342
- // used in place of snapToInterval due to bug on Android
343
- ,
344
- snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
345
- style: styles.durationScrollFlatList,
346
- testID: "duration-scroll-flatlist",
347
- viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
348
- windowSize: numberOfItemsToShow
349
- }), /*#__PURE__*/React.createElement(View, {
350
- pointerEvents: "none",
351
- style: styles.pickerLabelContainer
352
- }, typeof label === "string" ? /*#__PURE__*/React.createElement(Text, {
353
- allowFontScaling: allowFontScaling,
354
- style: styles.pickerLabel
355
- }, label) : label ?? null));
356
- }, [FlatList, allowFontScaling, decelerationRate, flatListRenderKey, getItemLayout, initialScrollIndex, isDisabled, label, numberOfItemsToShow, numbersForFlatList, onMomentumScrollEnd, onScroll, renderItem, styles.durationScrollFlatList, styles.durationScrollFlatListContentContainer, styles.pickerItemContainer.height, styles.pickerLabel, styles.pickerLabelContainer, viewabilityConfigCallbackPairs]);
357
- const renderLinearGradient = useMemo(() => {
358
- if (!LinearGradient) {
359
- return null;
360
- }
361
- let colors;
362
- if (MaskedView) {
363
- // if using masked view, we only care about the opacity
364
- colors = ["rgba(0,0,0,0)", "rgba(0,0,0,1)", "rgba(0,0,0,1)", "rgba(0,0,0,0)"];
365
- } else {
366
- const backgroundColor = styles.pickerContainer.backgroundColor ?? "white";
367
- const transparentBackgroundColor = colorToRgba({
368
- color: backgroundColor,
369
- opacity: 0
370
- });
371
- colors = [backgroundColor, transparentBackgroundColor, transparentBackgroundColor, backgroundColor];
372
- }
373
-
374
- // calculate the gradient height to cover the top item and bottom item
375
- const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;
376
- return /*#__PURE__*/React.createElement(LinearGradient, _extends({
377
- colors: colors,
378
- locations: [0, gradientHeight, 1 - gradientHeight, 1],
379
- pointerEvents: "none",
380
- style: styles.pickerGradientOverlay
381
- }, pickerGradientOverlayProps));
382
- }, [LinearGradient, MaskedView, padWithNItems, pickerGradientOverlayProps, styles.pickerContainer.backgroundColor, styles.pickerGradientOverlay]);
383
- return /*#__PURE__*/React.createElement(View, {
384
- pointerEvents: isDisabled ? "none" : undefined,
385
- style: [styles.durationScrollFlatListContainer, {
386
- height: styles.pickerItemContainer.height * numberOfItemsToShow
387
- }, isDisabled && styles.disabledPickerContainer],
388
- testID: testID
389
- }, MaskedView ? /*#__PURE__*/React.createElement(MaskedView, {
390
- maskElement: renderLinearGradient,
391
- style: [styles.maskedView]
392
- }, renderContent) : /*#__PURE__*/React.createElement(React.Fragment, null, renderContent, renderLinearGradient));
393
- });
394
- export default /*#__PURE__*/React.memo(DurationScroll);
395
- //# sourceMappingURL=DurationScroll.js.map