react-native-timer-picker 2.5.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 +22 -13
  2. package/package.json +143 -126
  3. package/dist/commonjs/components/DurationScroll/DurationScroll.js +0 -405
  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 -47
  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 -240
  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 -130
  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 -99
  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 -397
  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 -40
  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 -232
  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 -123
  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 -96
  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 -67
  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 -15
  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 -1578
  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 -948
  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,397 +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
- selectedValue,
41
- styles,
42
- testID
43
- } = props;
44
- const numberOfItems = useMemo(() => {
45
- // guard against negative maximum values
46
- if (maximumValue < 0) {
47
- return 1;
48
- }
49
- return Math.floor(maximumValue / interval) + 1;
50
- }, [interval, maximumValue]);
51
- const safeRepeatNumbersNTimes = useMemo(() => {
52
- // do not repeat numbers if there is only one option
53
- if (numberOfItems === 1) {
54
- return 1;
55
- }
56
- if (!disableInfiniteScroll && repeatNumbersNTimes < 2) {
57
- return 2;
58
- } else if (repeatNumbersNTimes < 1 || isNaN(repeatNumbersNTimes)) {
59
- return 1;
60
- }
61
-
62
- // if this variable is not explicitly set, we calculate a reasonable value based on
63
- // the number of items in the picker, avoiding regular jumps up/down the list
64
- // whilst avoiding rendering too many items in the picker
65
- if (repeatNumbersNTimesNotExplicitlySet) {
66
- return Math.max(Math.round(180 / numberOfItems), 1);
67
- }
68
- return Math.round(repeatNumbersNTimes);
69
- }, [disableInfiniteScroll, numberOfItems, repeatNumbersNTimes, repeatNumbersNTimesNotExplicitlySet]);
70
- const numbersForFlatList = useMemo(() => {
71
- if (is12HourPicker) {
72
- return generate12HourNumbers({
73
- padNumbersWithZero,
74
- repeatNTimes: safeRepeatNumbersNTimes,
75
- disableInfiniteScroll,
76
- padWithNItems,
77
- interval
78
- });
79
- }
80
- return generateNumbers(numberOfItems, {
81
- padNumbersWithZero,
82
- repeatNTimes: safeRepeatNumbersNTimes,
83
- disableInfiniteScroll,
84
- padWithNItems,
85
- interval
86
- });
87
- }, [disableInfiniteScroll, is12HourPicker, interval, numberOfItems, padNumbersWithZero, padWithNItems, safeRepeatNumbersNTimes]);
88
- const initialScrollIndex = useMemo(() => getInitialScrollIndex({
89
- disableInfiniteScroll,
90
- interval,
91
- numberOfItems,
92
- padWithNItems,
93
- repeatNumbersNTimes: safeRepeatNumbersNTimes,
94
- value: initialValue
95
- }), [disableInfiniteScroll, initialValue, interval, numberOfItems, padWithNItems, safeRepeatNumbersNTimes]);
96
- const adjustedLimited = useMemo(() => getAdjustedLimit(limit, numberOfItems, interval), [interval, limit, numberOfItems]);
97
- const numberOfItemsToShow = 1 + padWithNItems * 2;
98
-
99
- // keep track of the latest duration as it scrolls
100
- const latestDuration = useRef(0);
101
- // keep track of the last index scrolled past for haptic/audio feedback
102
- const lastFeedbackIndex = useRef(0);
103
- const flatListRef = useRef(null);
104
- const [clickSound, setClickSound] = useState(null);
105
- useEffect(() => {
106
- // Audio prop deprecated in v2.2.0 (use pickerFeedback instead) - will be removed in a future version
107
-
108
- // preload the sound when the component mounts
109
- let soundInstance = null;
110
- const loadSound = async () => {
111
- if (!Audio) {
112
- return;
113
- }
114
- try {
115
- const {
116
- sound: newSound
117
- } = await Audio.Sound.createAsync(clickSoundAsset ?? {
118
- // use a hosted sound as a fallback (do not use local asset due to loader issues
119
- // in some environments when including mp3 in library)
120
- uri: "https://drive.google.com/uc?export=download&id=10e1YkbNsRh-vGx1jmS1Nntz8xzkBp4_I"
121
- }, {
122
- shouldPlay: false
123
- });
124
- soundInstance = newSound;
125
- setClickSound(newSound);
126
- } catch (error) {
127
- console.warn("Failed to load click sound:", error);
128
- }
129
- };
130
- loadSound();
131
- return () => {
132
- var _soundInstance;
133
- // unload sound when component unmounts
134
- (_soundInstance = soundInstance) === null || _soundInstance === void 0 || _soundInstance.unloadAsync();
135
- };
136
- // eslint-disable-next-line react-hooks/exhaustive-deps
137
- }, [Audio]);
138
- const playClickSound = useCallback(async () => {
139
- if (!clickSound) return;
140
- try {
141
- await clickSound.replayAsync();
142
- } catch (error) {
143
- console.warn("Failed to play click sound:", error);
144
- }
145
- }, [clickSound]);
146
- const renderItem = useCallback(({
147
- item
148
- }) => /*#__PURE__*/React.createElement(PickerItem, {
149
- adjustedLimitedMax: adjustedLimited.max,
150
- adjustedLimitedMin: adjustedLimited.min,
151
- allowFontScaling: allowFontScaling,
152
- amLabel: amLabel,
153
- is12HourPicker: is12HourPicker,
154
- item: item,
155
- pmLabel: pmLabel,
156
- selectedValue: selectedValue,
157
- styles: styles
158
- }), [adjustedLimited.max, adjustedLimited.min, allowFontScaling, amLabel, is12HourPicker, pmLabel, selectedValue, styles]);
159
- const onScroll = useCallback(e => {
160
- // this function is only used when the picker is in a modal and/or has Haptic/Audio feedback
161
- // it is used to ensure that the modal gets the latest duration on clicking
162
- // the confirm button, even if the scrollview is still scrolling
163
- if (!aggressivelyGetLatestDuration && !Haptics && !Audio && !pickerFeedback) {
164
- return;
165
- }
166
- if (aggressivelyGetLatestDuration) {
167
- const newValues = getDurationAndIndexFromScrollOffset({
168
- disableInfiniteScroll,
169
- interval,
170
- itemHeight: styles.pickerItemContainer.height,
171
- numberOfItems,
172
- padWithNItems,
173
- yContentOffset: e.nativeEvent.contentOffset.y
174
- });
175
- if (newValues.duration !== latestDuration.current) {
176
- // check limits
177
- if (newValues.duration > adjustedLimited.max) {
178
- newValues.duration = adjustedLimited.max;
179
- } else if (newValues.duration < adjustedLimited.min) {
180
- newValues.duration = adjustedLimited.min;
181
- }
182
- latestDuration.current = newValues.duration;
183
- }
184
- }
185
- if (pickerFeedback || Haptics || Audio) {
186
- const feedbackIndex = Math.round((e.nativeEvent.contentOffset.y + styles.pickerItemContainer.height / 2) / styles.pickerItemContainer.height);
187
- if (feedbackIndex !== lastFeedbackIndex.current) {
188
- // this check stops the feedback firing when the component mounts
189
- if (lastFeedbackIndex.current) {
190
- // fire haptic feedback if available
191
- try {
192
- Haptics === null || Haptics === void 0 || Haptics.selectionAsync();
193
- } catch {
194
- // do nothing
195
- }
196
-
197
- // play click sound if available
198
- try {
199
- playClickSound();
200
- } catch {
201
- // do nothing
202
- }
203
-
204
- // fire custom feedback if available
205
- try {
206
- pickerFeedback === null || pickerFeedback === void 0 || pickerFeedback();
207
- } catch {
208
- // do nothing
209
- }
210
- }
211
- lastFeedbackIndex.current = feedbackIndex;
212
- }
213
- }
214
- },
215
- // eslint-disable-next-line react-hooks/exhaustive-deps
216
- [adjustedLimited.max, adjustedLimited.min, aggressivelyGetLatestDuration, playClickSound, disableInfiniteScroll, interval, numberOfItems, padWithNItems, styles.pickerItemContainer.height]);
217
- const onMomentumScrollEnd = useCallback(e => {
218
- const newValues = getDurationAndIndexFromScrollOffset({
219
- disableInfiniteScroll,
220
- interval,
221
- itemHeight: styles.pickerItemContainer.height,
222
- numberOfItems,
223
- padWithNItems,
224
- yContentOffset: e.nativeEvent.contentOffset.y
225
- });
226
-
227
- // check limits
228
- if (newValues.duration > adjustedLimited.max) {
229
- var _flatListRef$current;
230
- const targetScrollIndex = newValues.index - (newValues.duration - adjustedLimited.max);
231
- (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 || _flatListRef$current.scrollToIndex({
232
- animated: true,
233
- index:
234
- // guard against scrolling beyond end of list
235
- targetScrollIndex >= 0 ? targetScrollIndex : adjustedLimited.max - 1
236
- }); // scroll down to max
237
- newValues.duration = adjustedLimited.max;
238
- } else if (newValues.duration < adjustedLimited.min) {
239
- var _flatListRef$current2;
240
- const targetScrollIndex = newValues.index + (adjustedLimited.min - newValues.duration);
241
- (_flatListRef$current2 = flatListRef.current) === null || _flatListRef$current2 === void 0 || _flatListRef$current2.scrollToIndex({
242
- animated: true,
243
- index:
244
- // guard against scrolling beyond end of list
245
- targetScrollIndex <= numbersForFlatList.length - 1 ? targetScrollIndex : adjustedLimited.min
246
- }); // scroll up to min
247
- newValues.duration = adjustedLimited.min;
248
- }
249
- onDurationChange(newValues.duration);
250
- }, [disableInfiniteScroll, interval, styles.pickerItemContainer.height, numberOfItems, padWithNItems, adjustedLimited.max, adjustedLimited.min, onDurationChange, numbersForFlatList.length]);
251
- const onViewableItemsChanged = useCallback(({
252
- viewableItems
253
- }) => {
254
- var _viewableItems$, _viewableItems$2;
255
- if (numberOfItems === 1) {
256
- return;
257
- }
258
- if ((_viewableItems$ = viewableItems[0]) !== null && _viewableItems$ !== void 0 && _viewableItems$.index && viewableItems[0].index < numberOfItems * 0.5) {
259
- var _flatListRef$current3;
260
- (_flatListRef$current3 = flatListRef.current) === null || _flatListRef$current3 === void 0 || _flatListRef$current3.scrollToIndex({
261
- animated: false,
262
- index: viewableItems[0].index + numberOfItems
263
- });
264
- } else if ((_viewableItems$2 = viewableItems[0]) !== null && _viewableItems$2 !== void 0 && _viewableItems$2.index && viewableItems[0].index >= numberOfItems * (safeRepeatNumbersNTimes - 0.5)) {
265
- var _flatListRef$current4;
266
- (_flatListRef$current4 = flatListRef.current) === null || _flatListRef$current4 === void 0 || _flatListRef$current4.scrollToIndex({
267
- animated: false,
268
- index: viewableItems[0].index - numberOfItems
269
- });
270
- }
271
- }, [numberOfItems, safeRepeatNumbersNTimes]);
272
- const [viewabilityConfigCallbackPairs, setViewabilityConfigCallbackPairs] = useState(!disableInfiniteScroll ? [{
273
- viewabilityConfig: {
274
- viewAreaCoveragePercentThreshold: 0
275
- },
276
- onViewableItemsChanged: onViewableItemsChanged
277
- }] : undefined);
278
- const [flatListRenderKey, setFlatListRenderKey] = useState(0);
279
- const initialRender = useRef(true);
280
- useEffect(() => {
281
- // don't run on first render
282
- if (initialRender.current) {
283
- initialRender.current = false;
284
- return;
285
- }
286
-
287
- // if the onViewableItemsChanged callback changes, we need to update viewabilityConfigCallbackPairs
288
- // which requires the FlatList to be remounted, hence the increase of the FlatList key
289
- setFlatListRenderKey(prev => prev + 1);
290
- setViewabilityConfigCallbackPairs(!disableInfiniteScroll ? [{
291
- viewabilityConfig: {
292
- viewAreaCoveragePercentThreshold: 0
293
- },
294
- onViewableItemsChanged: onViewableItemsChanged
295
- }] : undefined);
296
- }, [disableInfiniteScroll, onViewableItemsChanged]);
297
- const getItemLayout = useCallback((_, index) => ({
298
- length: styles.pickerItemContainer.height,
299
- offset: styles.pickerItemContainer.height * index,
300
- index
301
- }), [styles.pickerItemContainer.height]);
302
- useImperativeHandle(ref, () => ({
303
- reset: options => {
304
- var _flatListRef$current5;
305
- (_flatListRef$current5 = flatListRef.current) === null || _flatListRef$current5 === void 0 || _flatListRef$current5.scrollToIndex({
306
- animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
307
- index: initialScrollIndex
308
- });
309
- },
310
- setValue: (value, options) => {
311
- var _flatListRef$current6;
312
- (_flatListRef$current6 = flatListRef.current) === null || _flatListRef$current6 === void 0 || _flatListRef$current6.scrollToIndex({
313
- animated: (options === null || options === void 0 ? void 0 : options.animated) ?? false,
314
- index: getInitialScrollIndex({
315
- disableInfiniteScroll,
316
- interval,
317
- numberOfItems,
318
- padWithNItems,
319
- repeatNumbersNTimes: safeRepeatNumbersNTimes,
320
- value: value
321
- })
322
- });
323
- },
324
- latestDuration: latestDuration
325
- }));
326
- const renderContent = useMemo(() => {
327
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FlatList, {
328
- key: flatListRenderKey,
329
- ref: flatListRef,
330
- contentContainerStyle: styles.durationScrollFlatListContentContainer,
331
- data: numbersForFlatList,
332
- decelerationRate: decelerationRate,
333
- getItemLayout: getItemLayout,
334
- initialScrollIndex: initialScrollIndex,
335
- keyExtractor: keyExtractor,
336
- nestedScrollEnabled: true,
337
- onMomentumScrollEnd: onMomentumScrollEnd,
338
- onScroll: onScroll,
339
- renderItem: renderItem,
340
- scrollEnabled: !isDisabled,
341
- scrollEventThrottle: 16,
342
- showsVerticalScrollIndicator: false,
343
- snapToAlignment: "start"
344
- // used in place of snapToInterval due to bug on Android
345
- ,
346
- snapToOffsets: [...Array(numbersForFlatList.length)].map((_, i) => i * styles.pickerItemContainer.height),
347
- style: styles.durationScrollFlatList,
348
- testID: "duration-scroll-flatlist",
349
- viewabilityConfigCallbackPairs: viewabilityConfigCallbackPairs,
350
- windowSize: numberOfItemsToShow
351
- }), /*#__PURE__*/React.createElement(View, {
352
- pointerEvents: "none",
353
- style: styles.pickerLabelContainer
354
- }, typeof label === "string" ? /*#__PURE__*/React.createElement(Text, {
355
- allowFontScaling: allowFontScaling,
356
- style: styles.pickerLabel
357
- }, label) : label ?? null));
358
- }, [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]);
359
- const renderLinearGradient = useMemo(() => {
360
- if (!LinearGradient) {
361
- return null;
362
- }
363
- let colors;
364
- if (MaskedView) {
365
- // if using masked view, we only care about the opacity
366
- colors = ["rgba(0,0,0,0)", "rgba(0,0,0,1)", "rgba(0,0,0,1)", "rgba(0,0,0,0)"];
367
- } else {
368
- const backgroundColor = styles.pickerContainer.backgroundColor ?? "white";
369
- const transparentBackgroundColor = colorToRgba({
370
- color: backgroundColor,
371
- opacity: 0
372
- });
373
- colors = [backgroundColor, transparentBackgroundColor, transparentBackgroundColor, backgroundColor];
374
- }
375
-
376
- // calculate the gradient height to cover the top item and bottom item
377
- const gradientHeight = padWithNItems > 0 ? 1 / (padWithNItems * 2 + 1) : 0.3;
378
- return /*#__PURE__*/React.createElement(LinearGradient, _extends({
379
- colors: colors,
380
- locations: [0, gradientHeight, 1 - gradientHeight, 1],
381
- pointerEvents: "none",
382
- style: styles.pickerGradientOverlay
383
- }, pickerGradientOverlayProps));
384
- }, [LinearGradient, MaskedView, padWithNItems, pickerGradientOverlayProps, styles.pickerContainer.backgroundColor, styles.pickerGradientOverlay]);
385
- return /*#__PURE__*/React.createElement(View, {
386
- pointerEvents: isDisabled ? "none" : undefined,
387
- style: [styles.durationScrollFlatListContainer, {
388
- height: styles.pickerItemContainer.height * numberOfItemsToShow
389
- }, isDisabled && styles.disabledPickerContainer],
390
- testID: testID
391
- }, MaskedView ? /*#__PURE__*/React.createElement(MaskedView, {
392
- maskElement: renderLinearGradient,
393
- style: [styles.maskedView]
394
- }, renderContent) : /*#__PURE__*/React.createElement(React.Fragment, null, renderContent, renderLinearGradient));
395
- });
396
- export default /*#__PURE__*/React.memo(DurationScroll);
397
- //# sourceMappingURL=DurationScroll.js.map