react-native-timer-picker 2.6.0 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/commonjs/components/DurationScroll/DurationScroll.js +426 -0
  2. package/dist/commonjs/components/DurationScroll/DurationScroll.js.map +1 -0
  3. package/dist/commonjs/components/DurationScroll/index.js +27 -0
  4. package/dist/commonjs/components/DurationScroll/index.js.map +1 -0
  5. package/dist/commonjs/components/DurationScroll/types.js +6 -0
  6. package/dist/commonjs/components/DurationScroll/types.js.map +1 -0
  7. package/dist/commonjs/components/Modal/Modal.js +107 -0
  8. package/dist/commonjs/components/Modal/Modal.js.map +1 -0
  9. package/dist/commonjs/components/Modal/index.js +27 -0
  10. package/dist/commonjs/components/Modal/index.js.map +1 -0
  11. package/dist/commonjs/components/Modal/styles.js +25 -0
  12. package/dist/commonjs/components/Modal/styles.js.map +1 -0
  13. package/dist/commonjs/components/Modal/types.js +6 -0
  14. package/dist/commonjs/components/Modal/types.js.map +1 -0
  15. package/dist/commonjs/components/PickerItem/PickerItem.js +48 -0
  16. package/dist/commonjs/components/PickerItem/PickerItem.js.map +1 -0
  17. package/dist/commonjs/components/PickerItem/index.js +14 -0
  18. package/dist/commonjs/components/PickerItem/index.js.map +1 -0
  19. package/dist/commonjs/components/TimerPicker/TimerPicker.js +266 -0
  20. package/dist/commonjs/components/TimerPicker/TimerPicker.js.map +1 -0
  21. package/dist/commonjs/components/TimerPicker/index.js +39 -0
  22. package/dist/commonjs/components/TimerPicker/index.js.map +1 -0
  23. package/dist/commonjs/components/TimerPicker/styles.js +140 -0
  24. package/dist/commonjs/components/TimerPicker/styles.js.map +1 -0
  25. package/dist/commonjs/components/TimerPicker/types.js +6 -0
  26. package/dist/commonjs/components/TimerPicker/types.js.map +1 -0
  27. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js +173 -0
  28. package/dist/commonjs/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
  29. package/dist/commonjs/components/TimerPickerModal/index.js +39 -0
  30. package/dist/commonjs/components/TimerPickerModal/index.js.map +1 -0
  31. package/dist/commonjs/components/TimerPickerModal/styles.js +95 -0
  32. package/dist/commonjs/components/TimerPickerModal/styles.js.map +1 -0
  33. package/dist/commonjs/components/TimerPickerModal/types.js +6 -0
  34. package/dist/commonjs/components/TimerPickerModal/types.js.map +1 -0
  35. package/dist/commonjs/index.js +21 -0
  36. package/dist/commonjs/index.js.map +1 -0
  37. package/dist/commonjs/tests/DurationScroll.test.js +163 -0
  38. package/dist/commonjs/tests/DurationScroll.test.js.map +1 -0
  39. package/dist/commonjs/tests/Modal.test.js +99 -0
  40. package/dist/commonjs/tests/Modal.test.js.map +1 -0
  41. package/dist/commonjs/tests/TimerPicker.test.js +161 -0
  42. package/dist/commonjs/tests/TimerPicker.test.js.map +1 -0
  43. package/dist/commonjs/tests/TimerPickerModal.test.js +276 -0
  44. package/dist/commonjs/tests/TimerPickerModal.test.js.map +1 -0
  45. package/dist/commonjs/tests/colorToRgba.test.js +176 -0
  46. package/dist/commonjs/tests/colorToRgba.test.js.map +1 -0
  47. package/dist/commonjs/tests/generateNumbers.test.js +350 -0
  48. package/dist/commonjs/tests/generateNumbers.test.js.map +1 -0
  49. package/dist/commonjs/tests/getAdjustedLimit.test.js +324 -0
  50. package/dist/commonjs/tests/getAdjustedLimit.test.js.map +1 -0
  51. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js +424 -0
  52. package/dist/commonjs/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  53. package/dist/commonjs/tests/getInitialScrollIndex.test.js +396 -0
  54. package/dist/commonjs/tests/getInitialScrollIndex.test.js.map +1 -0
  55. package/dist/commonjs/tests/getSafeInitialValue.test.js +499 -0
  56. package/dist/commonjs/tests/getSafeInitialValue.test.js.map +1 -0
  57. package/dist/commonjs/tests/padNumber.test.js +301 -0
  58. package/dist/commonjs/tests/padNumber.test.js.map +1 -0
  59. package/dist/commonjs/utils/colorToRgba.js +87 -0
  60. package/dist/commonjs/utils/colorToRgba.js.map +1 -0
  61. package/dist/commonjs/utils/generateNumbers.js +124 -0
  62. package/dist/commonjs/utils/generateNumbers.js.map +1 -0
  63. package/dist/commonjs/utils/getAdjustedLimit.js +58 -0
  64. package/dist/commonjs/utils/getAdjustedLimit.js.map +1 -0
  65. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js +62 -0
  66. package/dist/commonjs/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  67. package/dist/commonjs/utils/getInitialScrollIndex.js +57 -0
  68. package/dist/commonjs/utils/getInitialScrollIndex.js.map +1 -0
  69. package/dist/commonjs/utils/getSafeInitialValue.js +41 -0
  70. package/dist/commonjs/utils/getSafeInitialValue.js.map +1 -0
  71. package/dist/commonjs/utils/padNumber.js +40 -0
  72. package/dist/commonjs/utils/padNumber.js.map +1 -0
  73. package/dist/module/components/DurationScroll/DurationScroll.js +418 -0
  74. package/dist/module/components/DurationScroll/DurationScroll.js.map +1 -0
  75. package/dist/module/components/DurationScroll/index.js +3 -0
  76. package/dist/module/components/DurationScroll/index.js.map +1 -0
  77. package/dist/module/components/DurationScroll/types.js +2 -0
  78. package/dist/module/components/DurationScroll/types.js.map +1 -0
  79. package/dist/module/components/Modal/Modal.js +99 -0
  80. package/dist/module/components/Modal/Modal.js.map +1 -0
  81. package/dist/module/components/Modal/index.js +3 -0
  82. package/dist/module/components/Modal/index.js.map +1 -0
  83. package/dist/module/components/Modal/styles.js +19 -0
  84. package/dist/module/components/Modal/styles.js.map +1 -0
  85. package/dist/module/components/Modal/types.js +2 -0
  86. package/dist/module/components/Modal/types.js.map +1 -0
  87. package/dist/module/components/PickerItem/PickerItem.js +41 -0
  88. package/dist/module/components/PickerItem/PickerItem.js.map +1 -0
  89. package/dist/module/components/PickerItem/index.js +2 -0
  90. package/dist/module/components/PickerItem/index.js.map +1 -0
  91. package/dist/module/components/TimerPicker/TimerPicker.js +258 -0
  92. package/dist/module/components/TimerPicker/TimerPicker.js.map +1 -0
  93. package/dist/module/components/TimerPicker/index.js +4 -0
  94. package/dist/module/components/TimerPicker/index.js.map +1 -0
  95. package/dist/module/components/TimerPicker/styles.js +133 -0
  96. package/dist/module/components/TimerPicker/styles.js.map +1 -0
  97. package/dist/module/components/TimerPicker/types.js +2 -0
  98. package/dist/module/components/TimerPicker/types.js.map +1 -0
  99. package/dist/module/components/TimerPickerModal/TimerPickerModal.js +165 -0
  100. package/dist/module/components/TimerPickerModal/TimerPickerModal.js.map +1 -0
  101. package/dist/module/components/TimerPickerModal/index.js +4 -0
  102. package/dist/module/components/TimerPickerModal/index.js.map +1 -0
  103. package/dist/module/components/TimerPickerModal/styles.js +88 -0
  104. package/dist/module/components/TimerPickerModal/styles.js.map +1 -0
  105. package/dist/module/components/TimerPickerModal/types.js +2 -0
  106. package/dist/module/components/TimerPickerModal/types.js.map +1 -0
  107. package/dist/module/index.js +3 -0
  108. package/dist/module/index.js.map +1 -0
  109. package/dist/module/tests/DurationScroll.test.js +160 -0
  110. package/dist/module/tests/DurationScroll.test.js.map +1 -0
  111. package/dist/module/tests/Modal.test.js +96 -0
  112. package/dist/module/tests/Modal.test.js.map +1 -0
  113. package/dist/module/tests/TimerPicker.test.js +159 -0
  114. package/dist/module/tests/TimerPicker.test.js.map +1 -0
  115. package/dist/module/tests/TimerPickerModal.test.js +273 -0
  116. package/dist/module/tests/TimerPickerModal.test.js.map +1 -0
  117. package/dist/module/tests/colorToRgba.test.js +174 -0
  118. package/dist/module/tests/colorToRgba.test.js.map +1 -0
  119. package/dist/module/tests/generateNumbers.test.js +348 -0
  120. package/dist/module/tests/generateNumbers.test.js.map +1 -0
  121. package/dist/module/tests/getAdjustedLimit.test.js +322 -0
  122. package/dist/module/tests/getAdjustedLimit.test.js.map +1 -0
  123. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js +422 -0
  124. package/dist/module/tests/getDurationAndIndexFromScrollOffset.test.js.map +1 -0
  125. package/dist/module/tests/getInitialScrollIndex.test.js +394 -0
  126. package/dist/module/tests/getInitialScrollIndex.test.js.map +1 -0
  127. package/dist/module/tests/getSafeInitialValue.test.js +496 -0
  128. package/dist/module/tests/getSafeInitialValue.test.js.map +1 -0
  129. package/dist/module/tests/padNumber.test.js +299 -0
  130. package/dist/module/tests/padNumber.test.js.map +1 -0
  131. package/dist/module/utils/colorToRgba.js +80 -0
  132. package/dist/module/utils/colorToRgba.js.map +1 -0
  133. package/dist/module/utils/generateNumbers.js +117 -0
  134. package/dist/module/utils/generateNumbers.js.map +1 -0
  135. package/dist/module/utils/getAdjustedLimit.js +51 -0
  136. package/dist/module/utils/getAdjustedLimit.js.map +1 -0
  137. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js +55 -0
  138. package/dist/module/utils/getDurationAndIndexFromScrollOffset.js.map +1 -0
  139. package/dist/module/utils/getInitialScrollIndex.js +50 -0
  140. package/dist/module/utils/getInitialScrollIndex.js.map +1 -0
  141. package/dist/module/utils/getSafeInitialValue.js +34 -0
  142. package/dist/module/utils/getSafeInitialValue.js.map +1 -0
  143. package/dist/module/utils/padNumber.js +33 -0
  144. package/dist/module/utils/padNumber.js.map +1 -0
  145. package/dist/typescript/components/DurationScroll/DurationScroll.d.ts +4 -0
  146. package/dist/typescript/components/DurationScroll/index.d.ts +2 -0
  147. package/dist/typescript/components/DurationScroll/types.d.ts +70 -0
  148. package/dist/typescript/components/Modal/Modal.d.ts +5 -0
  149. package/dist/typescript/components/Modal/index.d.ts +2 -0
  150. package/dist/typescript/components/Modal/styles.d.ts +17 -0
  151. package/dist/typescript/components/Modal/types.d.ts +16 -0
  152. package/dist/typescript/components/PickerItem/PickerItem.d.ts +19 -0
  153. package/dist/typescript/components/PickerItem/index.d.ts +1 -0
  154. package/dist/typescript/components/TimerPicker/TimerPicker.d.ts +4 -0
  155. package/dist/typescript/components/TimerPicker/index.d.ts +3 -0
  156. package/dist/typescript/components/TimerPicker/styles.d.ts +1583 -0
  157. package/dist/typescript/components/TimerPicker/types.d.ts +91 -0
  158. package/dist/typescript/components/TimerPickerModal/TimerPickerModal.d.ts +4 -0
  159. package/dist/typescript/components/TimerPickerModal/index.d.ts +3 -0
  160. package/dist/typescript/components/TimerPickerModal/styles.d.ts +952 -0
  161. package/dist/typescript/components/TimerPickerModal/types.d.ts +56 -0
  162. package/dist/typescript/index.d.ts +4 -0
  163. package/dist/typescript/tests/DurationScroll.test.d.ts +1 -0
  164. package/dist/typescript/tests/Modal.test.d.ts +1 -0
  165. package/dist/typescript/tests/TimerPicker.test.d.ts +1 -0
  166. package/dist/typescript/tests/TimerPickerModal.test.d.ts +1 -0
  167. package/dist/typescript/tests/colorToRgba.test.d.ts +1 -0
  168. package/dist/typescript/tests/generateNumbers.test.d.ts +1 -0
  169. package/dist/typescript/tests/getAdjustedLimit.test.d.ts +1 -0
  170. package/dist/typescript/tests/getDurationAndIndexFromScrollOffset.test.d.ts +1 -0
  171. package/dist/typescript/tests/getInitialScrollIndex.test.d.ts +1 -0
  172. package/dist/typescript/tests/getSafeInitialValue.test.d.ts +1 -0
  173. package/dist/typescript/tests/padNumber.test.d.ts +1 -0
  174. package/dist/typescript/utils/colorToRgba.d.ts +38 -0
  175. package/dist/typescript/utils/generateNumbers.d.ts +80 -0
  176. package/dist/typescript/utils/getAdjustedLimit.d.ts +30 -0
  177. package/dist/typescript/utils/getDurationAndIndexFromScrollOffset.d.ts +49 -0
  178. package/dist/typescript/utils/getInitialScrollIndex.d.ts +46 -0
  179. package/dist/typescript/utils/getSafeInitialValue.d.ts +38 -0
  180. package/dist/typescript/utils/padNumber.d.ts +28 -0
  181. package/package.json +3 -2
@@ -0,0 +1,299 @@
1
+ import { padNumber } from "../utils/padNumber";
2
+ describe("padNumber", () => {
3
+ describe("padding with zero", () => {
4
+ it("pads single digit with zero", () => {
5
+ expect(padNumber(0, {
6
+ padWithZero: true
7
+ })).toBe("00");
8
+ expect(padNumber(1, {
9
+ padWithZero: true
10
+ })).toBe("01");
11
+ expect(padNumber(5, {
12
+ padWithZero: true
13
+ })).toBe("05");
14
+ expect(padNumber(9, {
15
+ padWithZero: true
16
+ })).toBe("09");
17
+ });
18
+ it("does not pad double digits", () => {
19
+ expect(padNumber(10, {
20
+ padWithZero: true
21
+ })).toBe("10");
22
+ expect(padNumber(15, {
23
+ padWithZero: true
24
+ })).toBe("15");
25
+ expect(padNumber(99, {
26
+ padWithZero: true
27
+ })).toBe("99");
28
+ });
29
+ it("does not pad triple digits", () => {
30
+ expect(padNumber(100, {
31
+ padWithZero: true
32
+ })).toBe("100");
33
+ expect(padNumber(255, {
34
+ padWithZero: true
35
+ })).toBe("255");
36
+ expect(padNumber(999, {
37
+ padWithZero: true
38
+ })).toBe("999");
39
+ });
40
+ it("handles very large numbers", () => {
41
+ expect(padNumber(1000, {
42
+ padWithZero: true
43
+ })).toBe("1000");
44
+ expect(padNumber(99999, {
45
+ padWithZero: true
46
+ })).toBe("99999");
47
+ });
48
+ });
49
+ describe("padding with space", () => {
50
+ it("pads single digit with space", () => {
51
+ expect(padNumber(0, {
52
+ padWithZero: false
53
+ })).toBe("\u20070");
54
+ expect(padNumber(1, {
55
+ padWithZero: false
56
+ })).toBe("\u20071");
57
+ expect(padNumber(5, {
58
+ padWithZero: false
59
+ })).toBe("\u20075");
60
+ expect(padNumber(9, {
61
+ padWithZero: false
62
+ })).toBe("\u20079");
63
+ });
64
+ it("does not pad double digits", () => {
65
+ expect(padNumber(10, {
66
+ padWithZero: false
67
+ })).toBe("10");
68
+ expect(padNumber(15, {
69
+ padWithZero: false
70
+ })).toBe("15");
71
+ expect(padNumber(99, {
72
+ padWithZero: false
73
+ })).toBe("99");
74
+ });
75
+ it("does not pad triple digits", () => {
76
+ expect(padNumber(100, {
77
+ padWithZero: false
78
+ })).toBe("100");
79
+ expect(padNumber(255, {
80
+ padWithZero: false
81
+ })).toBe("255");
82
+ expect(padNumber(999, {
83
+ padWithZero: false
84
+ })).toBe("999");
85
+ });
86
+ it("handles very large numbers", () => {
87
+ expect(padNumber(1000, {
88
+ padWithZero: false
89
+ })).toBe("1000");
90
+ expect(padNumber(99999, {
91
+ padWithZero: false
92
+ })).toBe("99999");
93
+ });
94
+ });
95
+ describe("no options provided", () => {
96
+ it("defaults to space padding for single digits", () => {
97
+ expect(padNumber(0)).toBe("\u20070");
98
+ expect(padNumber(1)).toBe("\u20071");
99
+ expect(padNumber(5)).toBe("\u20075");
100
+ expect(padNumber(9)).toBe("\u20079");
101
+ });
102
+ it("does not pad double digits", () => {
103
+ expect(padNumber(10)).toBe("10");
104
+ expect(padNumber(15)).toBe("15");
105
+ expect(padNumber(99)).toBe("99");
106
+ });
107
+ it("does not pad triple digits", () => {
108
+ expect(padNumber(100)).toBe("100");
109
+ expect(padNumber(255)).toBe("255");
110
+ expect(padNumber(999)).toBe("999");
111
+ });
112
+ });
113
+ describe("undefined padWithZero option", () => {
114
+ it("defaults to space padding", () => {
115
+ expect(padNumber(0, {})).toBe("\u20070");
116
+ expect(padNumber(5, {})).toBe("\u20075");
117
+ expect(padNumber(9, {})).toBe("\u20079");
118
+ });
119
+ it("does not pad double digits", () => {
120
+ expect(padNumber(10, {})).toBe("10");
121
+ expect(padNumber(50, {})).toBe("50");
122
+ });
123
+ });
124
+ describe("edge cases at boundary", () => {
125
+ it("handles value exactly 9 (last single digit)", () => {
126
+ expect(padNumber(9, {
127
+ padWithZero: true
128
+ })).toBe("09");
129
+ expect(padNumber(9, {
130
+ padWithZero: false
131
+ })).toBe("\u20079");
132
+ expect(padNumber(9)).toBe("\u20079");
133
+ });
134
+ it("handles value exactly 10 (first double digit)", () => {
135
+ expect(padNumber(10, {
136
+ padWithZero: true
137
+ })).toBe("10");
138
+ expect(padNumber(10, {
139
+ padWithZero: false
140
+ })).toBe("10");
141
+ expect(padNumber(10)).toBe("10");
142
+ });
143
+ it("handles value exactly 0", () => {
144
+ expect(padNumber(0, {
145
+ padWithZero: true
146
+ })).toBe("00");
147
+ expect(padNumber(0, {
148
+ padWithZero: false
149
+ })).toBe("\u20070");
150
+ expect(padNumber(0)).toBe("\u20070");
151
+ });
152
+ });
153
+ describe("real-world scenarios", () => {
154
+ it("formats hours for 12-hour display", () => {
155
+ expect(padNumber(1, {
156
+ padWithZero: true
157
+ })).toBe("01");
158
+ expect(padNumber(12, {
159
+ padWithZero: true
160
+ })).toBe("12");
161
+ });
162
+ it("formats hours for 24-hour display", () => {
163
+ expect(padNumber(0, {
164
+ padWithZero: true
165
+ })).toBe("00");
166
+ expect(padNumber(9, {
167
+ padWithZero: true
168
+ })).toBe("09");
169
+ expect(padNumber(23, {
170
+ padWithZero: true
171
+ })).toBe("23");
172
+ });
173
+ it("formats minutes", () => {
174
+ expect(padNumber(0, {
175
+ padWithZero: true
176
+ })).toBe("00");
177
+ expect(padNumber(5, {
178
+ padWithZero: true
179
+ })).toBe("05");
180
+ expect(padNumber(30, {
181
+ padWithZero: true
182
+ })).toBe("30");
183
+ expect(padNumber(59, {
184
+ padWithZero: true
185
+ })).toBe("59");
186
+ });
187
+ it("formats seconds", () => {
188
+ expect(padNumber(0, {
189
+ padWithZero: true
190
+ })).toBe("00");
191
+ expect(padNumber(9, {
192
+ padWithZero: true
193
+ })).toBe("09");
194
+ expect(padNumber(45, {
195
+ padWithZero: true
196
+ })).toBe("45");
197
+ expect(padNumber(59, {
198
+ padWithZero: true
199
+ })).toBe("59");
200
+ });
201
+ it("formats days without padding preference", () => {
202
+ expect(padNumber(1, {
203
+ padWithZero: false
204
+ })).toBe("\u20071");
205
+ expect(padNumber(7, {
206
+ padWithZero: false
207
+ })).toBe("\u20077");
208
+ expect(padNumber(30, {
209
+ padWithZero: false
210
+ })).toBe("30");
211
+ expect(padNumber(365, {
212
+ padWithZero: false
213
+ })).toBe("365");
214
+ });
215
+ });
216
+ describe("all single digits", () => {
217
+ it("correctly pads all single digits 0-9 with zero", () => {
218
+ for (let i = 0; i < 10; i++) {
219
+ const result = padNumber(i, {
220
+ padWithZero: true
221
+ });
222
+ expect(result).toBe(`0${i}`);
223
+ expect(result).toHaveLength(2);
224
+ }
225
+ });
226
+ it("correctly pads all single digits 0-9 with space", () => {
227
+ for (let i = 0; i < 10; i++) {
228
+ const result = padNumber(i, {
229
+ padWithZero: false
230
+ });
231
+ expect(result).toBe(`\u2007${i}`);
232
+ expect(result).toHaveLength(2);
233
+ }
234
+ });
235
+ });
236
+ describe("return type", () => {
237
+ it("always returns a string", () => {
238
+ expect(typeof padNumber(0, {
239
+ padWithZero: true
240
+ })).toBe("string");
241
+ expect(typeof padNumber(5, {
242
+ padWithZero: true
243
+ })).toBe("string");
244
+ expect(typeof padNumber(10, {
245
+ padWithZero: true
246
+ })).toBe("string");
247
+ expect(typeof padNumber(100, {
248
+ padWithZero: true
249
+ })).toBe("string");
250
+ });
251
+ });
252
+ describe("string length", () => {
253
+ it("returns 2-character string for single digits", () => {
254
+ expect(padNumber(0, {
255
+ padWithZero: true
256
+ })).toHaveLength(2);
257
+ expect(padNumber(5, {
258
+ padWithZero: true
259
+ })).toHaveLength(2);
260
+ expect(padNumber(9, {
261
+ padWithZero: true
262
+ })).toHaveLength(2);
263
+ });
264
+ it("returns 2-character string for single digits with space", () => {
265
+ expect(padNumber(0, {
266
+ padWithZero: false
267
+ })).toHaveLength(2);
268
+ expect(padNumber(5, {
269
+ padWithZero: false
270
+ })).toHaveLength(2);
271
+ expect(padNumber(9, {
272
+ padWithZero: false
273
+ })).toHaveLength(2);
274
+ });
275
+ it("returns correct length for double digits", () => {
276
+ expect(padNumber(10, {
277
+ padWithZero: true
278
+ })).toHaveLength(2);
279
+ expect(padNumber(50, {
280
+ padWithZero: true
281
+ })).toHaveLength(2);
282
+ expect(padNumber(99, {
283
+ padWithZero: true
284
+ })).toHaveLength(2);
285
+ });
286
+ it("returns correct length for triple digits", () => {
287
+ expect(padNumber(100, {
288
+ padWithZero: true
289
+ })).toHaveLength(3);
290
+ expect(padNumber(500, {
291
+ padWithZero: true
292
+ })).toHaveLength(3);
293
+ expect(padNumber(999, {
294
+ padWithZero: true
295
+ })).toHaveLength(3);
296
+ });
297
+ });
298
+ });
299
+ //# sourceMappingURL=padNumber.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["padNumber","describe","it","expect","padWithZero","toBe","i","result","toHaveLength"],"sources":["padNumber.test.ts"],"sourcesContent":["import { padNumber } from \"../utils/padNumber\";\n\ndescribe(\"padNumber\", () => {\n describe(\"padding with zero\", () => {\n it(\"pads single digit with zero\", () => {\n expect(padNumber(0, { padWithZero: true })).toBe(\"00\");\n expect(padNumber(1, { padWithZero: true })).toBe(\"01\");\n expect(padNumber(5, { padWithZero: true })).toBe(\"05\");\n expect(padNumber(9, { padWithZero: true })).toBe(\"09\");\n });\n\n it(\"does not pad double digits\", () => {\n expect(padNumber(10, { padWithZero: true })).toBe(\"10\");\n expect(padNumber(15, { padWithZero: true })).toBe(\"15\");\n expect(padNumber(99, { padWithZero: true })).toBe(\"99\");\n });\n\n it(\"does not pad triple digits\", () => {\n expect(padNumber(100, { padWithZero: true })).toBe(\"100\");\n expect(padNumber(255, { padWithZero: true })).toBe(\"255\");\n expect(padNumber(999, { padWithZero: true })).toBe(\"999\");\n });\n\n it(\"handles very large numbers\", () => {\n expect(padNumber(1000, { padWithZero: true })).toBe(\"1000\");\n expect(padNumber(99999, { padWithZero: true })).toBe(\"99999\");\n });\n });\n\n describe(\"padding with space\", () => {\n it(\"pads single digit with space\", () => {\n expect(padNumber(0, { padWithZero: false })).toBe(\"\\u20070\");\n expect(padNumber(1, { padWithZero: false })).toBe(\"\\u20071\");\n expect(padNumber(5, { padWithZero: false })).toBe(\"\\u20075\");\n expect(padNumber(9, { padWithZero: false })).toBe(\"\\u20079\");\n });\n\n it(\"does not pad double digits\", () => {\n expect(padNumber(10, { padWithZero: false })).toBe(\"10\");\n expect(padNumber(15, { padWithZero: false })).toBe(\"15\");\n expect(padNumber(99, { padWithZero: false })).toBe(\"99\");\n });\n\n it(\"does not pad triple digits\", () => {\n expect(padNumber(100, { padWithZero: false })).toBe(\"100\");\n expect(padNumber(255, { padWithZero: false })).toBe(\"255\");\n expect(padNumber(999, { padWithZero: false })).toBe(\"999\");\n });\n\n it(\"handles very large numbers\", () => {\n expect(padNumber(1000, { padWithZero: false })).toBe(\"1000\");\n expect(padNumber(99999, { padWithZero: false })).toBe(\"99999\");\n });\n });\n\n describe(\"no options provided\", () => {\n it(\"defaults to space padding for single digits\", () => {\n expect(padNumber(0)).toBe(\"\\u20070\");\n expect(padNumber(1)).toBe(\"\\u20071\");\n expect(padNumber(5)).toBe(\"\\u20075\");\n expect(padNumber(9)).toBe(\"\\u20079\");\n });\n\n it(\"does not pad double digits\", () => {\n expect(padNumber(10)).toBe(\"10\");\n expect(padNumber(15)).toBe(\"15\");\n expect(padNumber(99)).toBe(\"99\");\n });\n\n it(\"does not pad triple digits\", () => {\n expect(padNumber(100)).toBe(\"100\");\n expect(padNumber(255)).toBe(\"255\");\n expect(padNumber(999)).toBe(\"999\");\n });\n });\n\n describe(\"undefined padWithZero option\", () => {\n it(\"defaults to space padding\", () => {\n expect(padNumber(0, {})).toBe(\"\\u20070\");\n expect(padNumber(5, {})).toBe(\"\\u20075\");\n expect(padNumber(9, {})).toBe(\"\\u20079\");\n });\n\n it(\"does not pad double digits\", () => {\n expect(padNumber(10, {})).toBe(\"10\");\n expect(padNumber(50, {})).toBe(\"50\");\n });\n });\n\n describe(\"edge cases at boundary\", () => {\n it(\"handles value exactly 9 (last single digit)\", () => {\n expect(padNumber(9, { padWithZero: true })).toBe(\"09\");\n expect(padNumber(9, { padWithZero: false })).toBe(\"\\u20079\");\n expect(padNumber(9)).toBe(\"\\u20079\");\n });\n\n it(\"handles value exactly 10 (first double digit)\", () => {\n expect(padNumber(10, { padWithZero: true })).toBe(\"10\");\n expect(padNumber(10, { padWithZero: false })).toBe(\"10\");\n expect(padNumber(10)).toBe(\"10\");\n });\n\n it(\"handles value exactly 0\", () => {\n expect(padNumber(0, { padWithZero: true })).toBe(\"00\");\n expect(padNumber(0, { padWithZero: false })).toBe(\"\\u20070\");\n expect(padNumber(0)).toBe(\"\\u20070\");\n });\n });\n\n describe(\"real-world scenarios\", () => {\n it(\"formats hours for 12-hour display\", () => {\n expect(padNumber(1, { padWithZero: true })).toBe(\"01\");\n expect(padNumber(12, { padWithZero: true })).toBe(\"12\");\n });\n\n it(\"formats hours for 24-hour display\", () => {\n expect(padNumber(0, { padWithZero: true })).toBe(\"00\");\n expect(padNumber(9, { padWithZero: true })).toBe(\"09\");\n expect(padNumber(23, { padWithZero: true })).toBe(\"23\");\n });\n\n it(\"formats minutes\", () => {\n expect(padNumber(0, { padWithZero: true })).toBe(\"00\");\n expect(padNumber(5, { padWithZero: true })).toBe(\"05\");\n expect(padNumber(30, { padWithZero: true })).toBe(\"30\");\n expect(padNumber(59, { padWithZero: true })).toBe(\"59\");\n });\n\n it(\"formats seconds\", () => {\n expect(padNumber(0, { padWithZero: true })).toBe(\"00\");\n expect(padNumber(9, { padWithZero: true })).toBe(\"09\");\n expect(padNumber(45, { padWithZero: true })).toBe(\"45\");\n expect(padNumber(59, { padWithZero: true })).toBe(\"59\");\n });\n\n it(\"formats days without padding preference\", () => {\n expect(padNumber(1, { padWithZero: false })).toBe(\"\\u20071\");\n expect(padNumber(7, { padWithZero: false })).toBe(\"\\u20077\");\n expect(padNumber(30, { padWithZero: false })).toBe(\"30\");\n expect(padNumber(365, { padWithZero: false })).toBe(\"365\");\n });\n });\n\n describe(\"all single digits\", () => {\n it(\"correctly pads all single digits 0-9 with zero\", () => {\n for (let i = 0; i < 10; i++) {\n const result = padNumber(i, { padWithZero: true });\n expect(result).toBe(`0${i}`);\n expect(result).toHaveLength(2);\n }\n });\n\n it(\"correctly pads all single digits 0-9 with space\", () => {\n for (let i = 0; i < 10; i++) {\n const result = padNumber(i, { padWithZero: false });\n expect(result).toBe(`\\u2007${i}`);\n expect(result).toHaveLength(2);\n }\n });\n });\n\n describe(\"return type\", () => {\n it(\"always returns a string\", () => {\n expect(typeof padNumber(0, { padWithZero: true })).toBe(\"string\");\n expect(typeof padNumber(5, { padWithZero: true })).toBe(\"string\");\n expect(typeof padNumber(10, { padWithZero: true })).toBe(\"string\");\n expect(typeof padNumber(100, { padWithZero: true })).toBe(\"string\");\n });\n });\n\n describe(\"string length\", () => {\n it(\"returns 2-character string for single digits\", () => {\n expect(padNumber(0, { padWithZero: true })).toHaveLength(2);\n expect(padNumber(5, { padWithZero: true })).toHaveLength(2);\n expect(padNumber(9, { padWithZero: true })).toHaveLength(2);\n });\n\n it(\"returns 2-character string for single digits with space\", () => {\n expect(padNumber(0, { padWithZero: false })).toHaveLength(2);\n expect(padNumber(5, { padWithZero: false })).toHaveLength(2);\n expect(padNumber(9, { padWithZero: false })).toHaveLength(2);\n });\n\n it(\"returns correct length for double digits\", () => {\n expect(padNumber(10, { padWithZero: true })).toHaveLength(2);\n expect(padNumber(50, { padWithZero: true })).toHaveLength(2);\n expect(padNumber(99, { padWithZero: true })).toHaveLength(2);\n });\n\n it(\"returns correct length for triple digits\", () => {\n expect(padNumber(100, { padWithZero: true })).toHaveLength(3);\n expect(padNumber(500, { padWithZero: true })).toHaveLength(3);\n expect(padNumber(999, { padWithZero: true })).toHaveLength(3);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Converts various color formats to RGBA string representation.
3
+ * This function is specifically required for expo-linear-gradient on iOS to handle transparent colors correctly.
4
+ * It supports named colors, RGB, and hex color formats.
5
+ *
6
+ * @param {Object} variables - The input variables object
7
+ * @param {string} variables.color - The color to convert. Can be:
8
+ * - Named color (e.g., 'transparent', 'black', 'white', 'blue', 'green', 'gray', 'red')
9
+ * - RGB format (e.g., 'rgb(255, 0, 0)')
10
+ * - Hex format (e.g., '#FF0000' or '#F00')
11
+ * @param {number} [variables.opacity=1] - The opacity value between 0 and 1
12
+ *
13
+ * @returns {string} The color in RGBA format (e.g., 'rgba(255, 0, 0, 0.5)')
14
+ *
15
+ * @example
16
+ * // Using named color
17
+ * colorToRgba({ color: 'transparent' })
18
+ * // Returns: 'rgba(0, 0, 0, 0)'
19
+ *
20
+ * @example
21
+ * // Using RGB with custom opacity
22
+ * colorToRgba({ color: 'rgb(255, 0, 0)', opacity: 0.5 })
23
+ * // Returns: 'rgba(255, 0, 0, 0.5)'
24
+ *
25
+ * @example
26
+ * // Using hex color
27
+ * colorToRgba({ color: '#FF0000' })
28
+ * // Returns: 'rgba(255, 0, 0, 1)'
29
+ *
30
+ * @example
31
+ * // Using short hex color
32
+ * colorToRgba({ color: '#F00' })
33
+ * // Returns: 'rgba(255, 0, 0, 1)'
34
+ */
35
+ export const colorToRgba = variables => {
36
+ const {
37
+ color,
38
+ opacity = 1
39
+ } = variables;
40
+
41
+ // Handle named colors
42
+ const namedColors = {
43
+ black: "rgba(0, 0, 0, 1)",
44
+ blue: "rgba(0, 0, 255, 1)",
45
+ gray: "rgba(128, 128, 128, 1)",
46
+ green: "rgba(0, 128, 0, 1)",
47
+ red: "rgba(255, 0, 0, 1)",
48
+ transparent: "rgba(0, 0, 0, 0)",
49
+ white: "rgba(255, 255, 255, 1)"
50
+ };
51
+ if (color in namedColors) {
52
+ return namedColors[color];
53
+ }
54
+
55
+ // Handle RGB format
56
+ if (color.startsWith("rgb(")) {
57
+ const rgbValues = color.replace("rgb(", "").replace(")", "").split(",").map(value => parseInt(value.trim(), 10));
58
+ const [r, g, b] = rgbValues;
59
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
60
+ }
61
+
62
+ // Handle hex format
63
+ if (color.startsWith("#")) {
64
+ let hexColor = color.slice(1);
65
+ if (hexColor.length === 3) {
66
+ hexColor = hexColor.split("").map(value => value + value).join("");
67
+ }
68
+ const r = parseInt(hexColor.slice(0, 2), 16);
69
+ const g = parseInt(hexColor.slice(2, 4), 16);
70
+ const b = parseInt(hexColor.slice(4, 6), 16);
71
+
72
+ // Validate that all color components are valid numbers
73
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
74
+ return color; // Return original if malformed
75
+ }
76
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
77
+ }
78
+ return color; // Return unchanged if unable to parse
79
+ };
80
+ //# sourceMappingURL=colorToRgba.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["colorToRgba","variables","color","opacity","namedColors","black","blue","gray","green","red","transparent","white","startsWith","rgbValues","replace","split","map","value","parseInt","trim","r","g","b","hexColor","slice","length","join","isNaN"],"sources":["colorToRgba.ts"],"sourcesContent":["/**\n * Converts various color formats to RGBA string representation.\n * This function is specifically required for expo-linear-gradient on iOS to handle transparent colors correctly.\n * It supports named colors, RGB, and hex color formats.\n *\n * @param {Object} variables - The input variables object\n * @param {string} variables.color - The color to convert. Can be:\n * - Named color (e.g., 'transparent', 'black', 'white', 'blue', 'green', 'gray', 'red')\n * - RGB format (e.g., 'rgb(255, 0, 0)')\n * - Hex format (e.g., '#FF0000' or '#F00')\n * @param {number} [variables.opacity=1] - The opacity value between 0 and 1\n *\n * @returns {string} The color in RGBA format (e.g., 'rgba(255, 0, 0, 0.5)')\n *\n * @example\n * // Using named color\n * colorToRgba({ color: 'transparent' })\n * // Returns: 'rgba(0, 0, 0, 0)'\n *\n * @example\n * // Using RGB with custom opacity\n * colorToRgba({ color: 'rgb(255, 0, 0)', opacity: 0.5 })\n * // Returns: 'rgba(255, 0, 0, 0.5)'\n *\n * @example\n * // Using hex color\n * colorToRgba({ color: '#FF0000' })\n * // Returns: 'rgba(255, 0, 0, 1)'\n *\n * @example\n * // Using short hex color\n * colorToRgba({ color: '#F00' })\n * // Returns: 'rgba(255, 0, 0, 1)'\n */\nexport const colorToRgba = (variables: { color: string; opacity?: number }): string => {\n const { color, opacity = 1 } = variables;\n\n // Handle named colors\n const namedColors: { [key: string]: string } = {\n black: \"rgba(0, 0, 0, 1)\",\n blue: \"rgba(0, 0, 255, 1)\",\n gray: \"rgba(128, 128, 128, 1)\",\n green: \"rgba(0, 128, 0, 1)\",\n red: \"rgba(255, 0, 0, 1)\",\n transparent: \"rgba(0, 0, 0, 0)\",\n white: \"rgba(255, 255, 255, 1)\",\n };\n\n if (color in namedColors) {\n return namedColors[color];\n }\n\n // Handle RGB format\n if (color.startsWith(\"rgb(\")) {\n const rgbValues = color\n .replace(\"rgb(\", \"\")\n .replace(\")\", \"\")\n .split(\",\")\n .map((value) => parseInt(value.trim(), 10));\n const [r, g, b] = rgbValues;\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n\n // Handle hex format\n if (color.startsWith(\"#\")) {\n let hexColor = color.slice(1);\n if (hexColor.length === 3) {\n hexColor = hexColor\n .split(\"\")\n .map((value) => value + value)\n .join(\"\");\n }\n const r = parseInt(hexColor.slice(0, 2), 16);\n const g = parseInt(hexColor.slice(2, 4), 16);\n const b = parseInt(hexColor.slice(4, 6), 16);\n\n // Validate that all color components are valid numbers\n if (isNaN(r) || isNaN(g) || isNaN(b)) {\n return color; // Return original if malformed\n }\n\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n\n return color; // Return unchanged if unable to parse\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,OAAO,MAAMA,WAAW,GAAIC,SAA8C,IAAa;EACrF,MAAM;IAAEC,KAAK;IAAEC,OAAO,GAAG;EAAE,CAAC,GAAGF,SAAS;;EAExC;EACA,MAAMG,WAAsC,GAAG;IAC7CC,KAAK,EAAE,kBAAkB;IACzBC,IAAI,EAAE,oBAAoB;IAC1BC,IAAI,EAAE,wBAAwB;IAC9BC,KAAK,EAAE,oBAAoB;IAC3BC,GAAG,EAAE,oBAAoB;IACzBC,WAAW,EAAE,kBAAkB;IAC/BC,KAAK,EAAE;EACT,CAAC;EAED,IAAIT,KAAK,IAAIE,WAAW,EAAE;IACxB,OAAOA,WAAW,CAACF,KAAK,CAAC;EAC3B;;EAEA;EACA,IAAIA,KAAK,CAACU,UAAU,CAAC,MAAM,CAAC,EAAE;IAC5B,MAAMC,SAAS,GAAGX,KAAK,CACpBY,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CACnBA,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAChBC,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAEC,KAAK,IAAKC,QAAQ,CAACD,KAAK,CAACE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,CAACC,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,GAAGT,SAAS;IAC3B,OAAO,QAAQO,CAAC,KAAKC,CAAC,KAAKC,CAAC,KAAKnB,OAAO,GAAG;EAC7C;;EAEA;EACA,IAAID,KAAK,CAACU,UAAU,CAAC,GAAG,CAAC,EAAE;IACzB,IAAIW,QAAQ,GAAGrB,KAAK,CAACsB,KAAK,CAAC,CAAC,CAAC;IAC7B,IAAID,QAAQ,CAACE,MAAM,KAAK,CAAC,EAAE;MACzBF,QAAQ,GAAGA,QAAQ,CAChBR,KAAK,CAAC,EAAE,CAAC,CACTC,GAAG,CAAEC,KAAK,IAAKA,KAAK,GAAGA,KAAK,CAAC,CAC7BS,IAAI,CAAC,EAAE,CAAC;IACb;IACA,MAAMN,CAAC,GAAGF,QAAQ,CAACK,QAAQ,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5C,MAAMH,CAAC,GAAGH,QAAQ,CAACK,QAAQ,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5C,MAAMF,CAAC,GAAGJ,QAAQ,CAACK,QAAQ,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;;IAE5C;IACA,IAAIG,KAAK,CAACP,CAAC,CAAC,IAAIO,KAAK,CAACN,CAAC,CAAC,IAAIM,KAAK,CAACL,CAAC,CAAC,EAAE;MACpC,OAAOpB,KAAK,CAAC,CAAC;IAChB;IAEA,OAAO,QAAQkB,CAAC,KAAKC,CAAC,KAAKC,CAAC,KAAKnB,OAAO,GAAG;EAC7C;EAEA,OAAOD,KAAK,CAAC,CAAC;AAChB,CAAC","ignoreList":[]}
@@ -0,0 +1,117 @@
1
+ import { padNumber } from "./padNumber";
2
+
3
+ /**
4
+ * Generates an array of formatted numbers for a number picker, with support for infinite scroll,
5
+ * padding, and number repetition.
6
+ *
7
+ * @param {number} numberOfItems - Total number of items to generate
8
+ * @param {Object} options - Configuration options for number generation
9
+ * @param {boolean} [options.disableInfiniteScroll] - Whether to disable infinite scroll
10
+ * @param {number} options.interval - The interval between consecutive numbers
11
+ * @param {boolean} [options.padNumbersWithZero] - Whether to pad single-digit numbers with leading zeros
12
+ * @param {number} options.padWithNItems - Number of empty items to pad with
13
+ * @param {number} options.repeatNTimes - How many times to repeat the number sequence
14
+ *
15
+ * @returns {string[]} Array of formatted number strings
16
+ *
17
+ * @example
18
+ * // Generate numbers 0-9 with padding
19
+ * generateNumbers(10, {
20
+ * interval: 1,
21
+ * padWithNItems: 2,
22
+ * repeatNTimes: 1,
23
+ * padNumbersWithZero: true
24
+ * })
25
+ * // Returns: ['', '', '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '', '']
26
+ *
27
+ * @example
28
+ * // Generate even numbers with infinite scroll
29
+ * generateNumbers(5, {
30
+ * interval: 2,
31
+ * padWithNItems: 2,
32
+ * repeatNTimes: 3,
33
+ * disableInfiniteScroll: false
34
+ * })
35
+ * // Returns: ['0', '2', '4', '6', '8', '0', '2', '4', '6', '8', '0', '2', '4', '6', '8']
36
+ */
37
+ export const generateNumbers = (numberOfItems, options) => {
38
+ if (numberOfItems <= 0) {
39
+ return [];
40
+ }
41
+ let numbers = [];
42
+ for (let i = 0; i < numberOfItems; i++) {
43
+ const value = i * options.interval;
44
+ numbers.push(padNumber(value, {
45
+ padWithZero: options.padNumbersWithZero
46
+ }));
47
+ }
48
+ if (options.repeatNTimes > 1) {
49
+ numbers = Array(options.repeatNTimes).fill(numbers).flat();
50
+ }
51
+ if (options.disableInfiniteScroll || options.repeatNTimes === 1) {
52
+ numbers.push(...Array(options.padWithNItems).fill(""));
53
+ numbers.unshift(...Array(options.padWithNItems).fill(""));
54
+ }
55
+ return numbers;
56
+ };
57
+
58
+ /**
59
+ * Generates an array of formatted 12-hour time strings (AM/PM) for a time picker.
60
+ * Supports infinite scroll, padding, and number repetition.
61
+ *
62
+ * @param {Object} options - Configuration options for time generation
63
+ * @param {boolean} [options.disableInfiniteScroll] - Whether to disable infinite scroll
64
+ * @param {number} options.interval - The interval between hours (must be a divisor of 12)
65
+ * @param {boolean} [options.padNumbersWithZero] - Whether to pad single-digit hours with leading zeros
66
+ * @param {number} options.padWithNItems - Number of empty items to pad with
67
+ * @param {number} [options.repeatNTimes] - How many times to repeat the time sequence (defaults to 1)
68
+ *
69
+ * @returns {string[]} Array of formatted 12-hour time strings
70
+ *
71
+ * @example
72
+ * // Generate hours with 1-hour interval
73
+ * generate12HourNumbers({
74
+ * interval: 1,
75
+ * padWithNItems: 2,
76
+ * padNumbersWithZero: true
77
+ * })
78
+ * // Returns: ['', '', '12 AM', '01 AM', '02 AM', ..., '11 PM', '', '']
79
+ *
80
+ * @example
81
+ * // Generate hours with 2-hour interval and infinite scroll
82
+ * generate12HourNumbers({
83
+ * interval: 2,
84
+ * padWithNItems: 2,
85
+ * repeatNTimes: 2,
86
+ * disableInfiniteScroll: false
87
+ * })
88
+ * // Returns: ['12 AM', '2 AM', '4 AM', ..., '10 PM', '12 AM', '2 AM', ...]
89
+ */
90
+ export const generate12HourNumbers = options => {
91
+ let numbers = [];
92
+
93
+ // Generate numbers from 12 AM to 11 AM
94
+ for (let i = 0; i < 12; i += options.interval) {
95
+ const hour = i === 0 ? 12 : i;
96
+ numbers.push(`${padNumber(hour, {
97
+ padWithZero: options.padNumbersWithZero
98
+ })} AM`);
99
+ }
100
+
101
+ // Generate numbers from 12 PM to 11 PM
102
+ for (let i = 12; i < 24; i += options.interval) {
103
+ const hour = i > 12 ? i - 12 : i;
104
+ numbers.push(`${padNumber(hour, {
105
+ padWithZero: options.padNumbersWithZero
106
+ })} PM`);
107
+ }
108
+ if ((options.repeatNTimes ?? 1) > 1) {
109
+ numbers = Array(options.repeatNTimes).fill(numbers).flat();
110
+ }
111
+ if (options.disableInfiniteScroll) {
112
+ numbers.push(...Array(options.padWithNItems).fill(""));
113
+ numbers.unshift(...Array(options.padWithNItems).fill(""));
114
+ }
115
+ return numbers;
116
+ };
117
+ //# sourceMappingURL=generateNumbers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["padNumber","generateNumbers","numberOfItems","options","numbers","i","value","interval","push","padWithZero","padNumbersWithZero","repeatNTimes","Array","fill","flat","disableInfiniteScroll","padWithNItems","unshift","generate12HourNumbers","hour"],"sources":["generateNumbers.ts"],"sourcesContent":["import { padNumber } from \"./padNumber\";\n\n/**\n * Generates an array of formatted numbers for a number picker, with support for infinite scroll,\n * padding, and number repetition.\n *\n * @param {number} numberOfItems - Total number of items to generate\n * @param {Object} options - Configuration options for number generation\n * @param {boolean} [options.disableInfiniteScroll] - Whether to disable infinite scroll\n * @param {number} options.interval - The interval between consecutive numbers\n * @param {boolean} [options.padNumbersWithZero] - Whether to pad single-digit numbers with leading zeros\n * @param {number} options.padWithNItems - Number of empty items to pad with\n * @param {number} options.repeatNTimes - How many times to repeat the number sequence\n *\n * @returns {string[]} Array of formatted number strings\n *\n * @example\n * // Generate numbers 0-9 with padding\n * generateNumbers(10, {\n * interval: 1,\n * padWithNItems: 2,\n * repeatNTimes: 1,\n * padNumbersWithZero: true\n * })\n * // Returns: ['', '', '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '', '']\n *\n * @example\n * // Generate even numbers with infinite scroll\n * generateNumbers(5, {\n * interval: 2,\n * padWithNItems: 2,\n * repeatNTimes: 3,\n * disableInfiniteScroll: false\n * })\n * // Returns: ['0', '2', '4', '6', '8', '0', '2', '4', '6', '8', '0', '2', '4', '6', '8']\n */\nexport const generateNumbers = (\n numberOfItems: number,\n options: {\n disableInfiniteScroll?: boolean;\n interval: number;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes: number;\n }\n) => {\n if (numberOfItems <= 0) {\n return [];\n }\n\n let numbers: string[] = [];\n for (let i = 0; i < numberOfItems; i++) {\n const value = i * options.interval;\n numbers.push(padNumber(value, { padWithZero: options.padNumbersWithZero }));\n }\n\n if (options.repeatNTimes > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n if (options.disableInfiniteScroll || options.repeatNTimes === 1) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n return numbers;\n};\n\n/**\n * Generates an array of formatted 12-hour time strings (AM/PM) for a time picker.\n * Supports infinite scroll, padding, and number repetition.\n *\n * @param {Object} options - Configuration options for time generation\n * @param {boolean} [options.disableInfiniteScroll] - Whether to disable infinite scroll\n * @param {number} options.interval - The interval between hours (must be a divisor of 12)\n * @param {boolean} [options.padNumbersWithZero] - Whether to pad single-digit hours with leading zeros\n * @param {number} options.padWithNItems - Number of empty items to pad with\n * @param {number} [options.repeatNTimes] - How many times to repeat the time sequence (defaults to 1)\n *\n * @returns {string[]} Array of formatted 12-hour time strings\n *\n * @example\n * // Generate hours with 1-hour interval\n * generate12HourNumbers({\n * interval: 1,\n * padWithNItems: 2,\n * padNumbersWithZero: true\n * })\n * // Returns: ['', '', '12 AM', '01 AM', '02 AM', ..., '11 PM', '', '']\n *\n * @example\n * // Generate hours with 2-hour interval and infinite scroll\n * generate12HourNumbers({\n * interval: 2,\n * padWithNItems: 2,\n * repeatNTimes: 2,\n * disableInfiniteScroll: false\n * })\n * // Returns: ['12 AM', '2 AM', '4 AM', ..., '10 PM', '12 AM', '2 AM', ...]\n */\nexport const generate12HourNumbers = (options: {\n disableInfiniteScroll?: boolean;\n interval: number;\n padNumbersWithZero?: boolean;\n padWithNItems: number;\n repeatNTimes?: number;\n}) => {\n let numbers: string[] = [];\n\n // Generate numbers from 12 AM to 11 AM\n for (let i = 0; i < 12; i += options.interval) {\n const hour = i === 0 ? 12 : i;\n numbers.push(`${padNumber(hour, { padWithZero: options.padNumbersWithZero })} AM`);\n }\n\n // Generate numbers from 12 PM to 11 PM\n for (let i = 12; i < 24; i += options.interval) {\n const hour = i > 12 ? i - 12 : i;\n numbers.push(`${padNumber(hour, { padWithZero: options.padNumbersWithZero })} PM`);\n }\n\n if ((options.repeatNTimes ?? 1) > 1) {\n numbers = Array(options.repeatNTimes).fill(numbers).flat();\n }\n\n if (options.disableInfiniteScroll) {\n numbers.push(...Array(options.padWithNItems).fill(\"\"));\n numbers.unshift(...Array(options.padWithNItems).fill(\"\"));\n }\n\n return numbers;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Adjusts and validates the min/max limits for a scrollable number picker.
3
+ * Ensures limits are within valid bounds and handles edge cases.
4
+ *
5
+ * @param {Limit | undefined} limit - The input limit object containing optional min and max values
6
+ * @param {number} numberOfItems - Total number of items in the picker
7
+ * @param {number} interval - The interval between consecutive numbers
8
+ *
9
+ * @returns {{ max: number; min: number }} An object containing the adjusted min and max limits
10
+ *
11
+ * @example
12
+ * // With valid limits
13
+ * getAdjustedLimit({ min: 5, max: 15 }, 20, 1)
14
+ * // Returns: { max: 15, min: 5 }
15
+ *
16
+ * @example
17
+ * // With out-of-bounds limits
18
+ * getAdjustedLimit({ min: -5, max: 25 }, 20, 1)
19
+ * // Returns: { max: 19, min: 0 }
20
+ *
21
+ * @example
22
+ * // With invalid limits (max < min)
23
+ * getAdjustedLimit({ min: 15, max: 5 }, 20, 1)
24
+ * // Returns: { max: 19, min: 0 }
25
+ */
26
+ export const getAdjustedLimit = (limit, numberOfItems, interval) => {
27
+ const maxValue = (numberOfItems - 1) * interval;
28
+ if (!limit || limit.max === undefined && limit.min === undefined) {
29
+ return {
30
+ max: maxValue,
31
+ min: 0
32
+ };
33
+ }
34
+
35
+ // guard against limits that are out of bounds
36
+ const adjustedMaxLimit = limit.max !== undefined ? Math.min(limit.max, maxValue) : maxValue;
37
+ const adjustedMinLimit = limit.min !== undefined ? Math.max(limit.min, 0) : 0;
38
+
39
+ // guard against invalid limits
40
+ if (adjustedMaxLimit < adjustedMinLimit) {
41
+ return {
42
+ max: maxValue,
43
+ min: 0
44
+ };
45
+ }
46
+ return {
47
+ max: adjustedMaxLimit,
48
+ min: adjustedMinLimit
49
+ };
50
+ };
51
+ //# sourceMappingURL=getAdjustedLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getAdjustedLimit","limit","numberOfItems","interval","maxValue","max","undefined","min","adjustedMaxLimit","Math","adjustedMinLimit"],"sources":["getAdjustedLimit.ts"],"sourcesContent":["import type { Limit } from \"../components/DurationScroll/types\";\n\n/**\n * Adjusts and validates the min/max limits for a scrollable number picker.\n * Ensures limits are within valid bounds and handles edge cases.\n *\n * @param {Limit | undefined} limit - The input limit object containing optional min and max values\n * @param {number} numberOfItems - Total number of items in the picker\n * @param {number} interval - The interval between consecutive numbers\n *\n * @returns {{ max: number; min: number }} An object containing the adjusted min and max limits\n *\n * @example\n * // With valid limits\n * getAdjustedLimit({ min: 5, max: 15 }, 20, 1)\n * // Returns: { max: 15, min: 5 }\n *\n * @example\n * // With out-of-bounds limits\n * getAdjustedLimit({ min: -5, max: 25 }, 20, 1)\n * // Returns: { max: 19, min: 0 }\n *\n * @example\n * // With invalid limits (max < min)\n * getAdjustedLimit({ min: 15, max: 5 }, 20, 1)\n * // Returns: { max: 19, min: 0 }\n */\nexport const getAdjustedLimit = (\n limit: Limit | undefined,\n numberOfItems: number,\n interval: number\n): {\n max: number;\n min: number;\n} => {\n const maxValue = (numberOfItems - 1) * interval;\n\n if (!limit || (limit.max === undefined && limit.min === undefined)) {\n return {\n max: maxValue,\n min: 0,\n };\n }\n\n // guard against limits that are out of bounds\n const adjustedMaxLimit = limit.max !== undefined ? Math.min(limit.max, maxValue) : maxValue;\n const adjustedMinLimit = limit.min !== undefined ? Math.max(limit.min, 0) : 0;\n\n // guard against invalid limits\n if (adjustedMaxLimit < adjustedMinLimit) {\n return {\n max: maxValue,\n min: 0,\n };\n }\n\n return {\n max: adjustedMaxLimit,\n min: adjustedMinLimit,\n };\n};\n"],"mappings":"AAEA;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,OAAO,MAAMA,gBAAgB,GAAGA,CAC9BC,KAAwB,EACxBC,aAAqB,EACrBC,QAAgB,KAIb;EACH,MAAMC,QAAQ,GAAG,CAACF,aAAa,GAAG,CAAC,IAAIC,QAAQ;EAE/C,IAAI,CAACF,KAAK,IAAKA,KAAK,CAACI,GAAG,KAAKC,SAAS,IAAIL,KAAK,CAACM,GAAG,KAAKD,SAAU,EAAE;IAClE,OAAO;MACLD,GAAG,EAAED,QAAQ;MACbG,GAAG,EAAE;IACP,CAAC;EACH;;EAEA;EACA,MAAMC,gBAAgB,GAAGP,KAAK,CAACI,GAAG,KAAKC,SAAS,GAAGG,IAAI,CAACF,GAAG,CAACN,KAAK,CAACI,GAAG,EAAED,QAAQ,CAAC,GAAGA,QAAQ;EAC3F,MAAMM,gBAAgB,GAAGT,KAAK,CAACM,GAAG,KAAKD,SAAS,GAAGG,IAAI,CAACJ,GAAG,CAACJ,KAAK,CAACM,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;;EAE7E;EACA,IAAIC,gBAAgB,GAAGE,gBAAgB,EAAE;IACvC,OAAO;MACLL,GAAG,EAAED,QAAQ;MACbG,GAAG,EAAE;IACP,CAAC;EACH;EAEA,OAAO;IACLF,GAAG,EAAEG,gBAAgB;IACrBD,GAAG,EAAEG;EACP,CAAC;AACH,CAAC","ignoreList":[]}