react-native-timer-picker 1.3.0 → 1.5.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 (57) hide show
  1. package/README.md +7 -0
  2. package/dist/commonjs/components/Modal/index.js +13 -14
  3. package/dist/commonjs/components/Modal/index.js.map +1 -1
  4. package/dist/commonjs/components/TimerPicker/DurationScroll.js +55 -32
  5. package/dist/commonjs/components/TimerPicker/DurationScroll.js.map +1 -1
  6. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js +23 -3
  7. package/dist/commonjs/components/TimerPicker/TimerPicker.styles.js.map +1 -1
  8. package/dist/commonjs/components/TimerPicker/index.js +37 -28
  9. package/dist/commonjs/components/TimerPicker/index.js.map +1 -1
  10. package/dist/commonjs/components/TimerPickerModal.styles.js.map +1 -1
  11. package/dist/commonjs/components/index.js +46 -39
  12. package/dist/commonjs/components/index.js.map +1 -1
  13. package/dist/commonjs/tests/Modal.test.js +3 -1
  14. package/dist/commonjs/tests/Modal.test.js.map +1 -1
  15. package/dist/commonjs/utils/generateNumbers.js +33 -10
  16. package/dist/commonjs/utils/generateNumbers.js.map +1 -1
  17. package/dist/commonjs/utils/padNumber.js +15 -0
  18. package/dist/commonjs/utils/padNumber.js.map +1 -0
  19. package/dist/module/components/Modal/index.js +13 -14
  20. package/dist/module/components/Modal/index.js.map +1 -1
  21. package/dist/module/components/TimerPicker/DurationScroll.js +56 -33
  22. package/dist/module/components/TimerPicker/DurationScroll.js.map +1 -1
  23. package/dist/module/components/TimerPicker/TimerPicker.styles.js +23 -3
  24. package/dist/module/components/TimerPicker/TimerPicker.styles.js.map +1 -1
  25. package/dist/module/components/TimerPicker/index.js +37 -28
  26. package/dist/module/components/TimerPicker/index.js.map +1 -1
  27. package/dist/module/components/TimerPickerModal.styles.js.map +1 -1
  28. package/dist/module/components/index.js +46 -39
  29. package/dist/module/components/index.js.map +1 -1
  30. package/dist/module/tests/Modal.test.js +3 -1
  31. package/dist/module/tests/Modal.test.js.map +1 -1
  32. package/dist/module/utils/generateNumbers.js +31 -9
  33. package/dist/module/utils/generateNumbers.js.map +1 -1
  34. package/dist/module/utils/padNumber.js +8 -0
  35. package/dist/module/utils/padNumber.js.map +1 -0
  36. package/dist/typescript/components/TimerPicker/DurationScroll.d.ts +4 -0
  37. package/dist/typescript/components/TimerPicker/TimerPicker.styles.d.ts +4 -0
  38. package/dist/typescript/components/TimerPicker/index.d.ts +4 -0
  39. package/dist/typescript/components/TimerPickerModal.styles.d.ts +283 -10
  40. package/dist/typescript/utils/generateNumbers.d.ts +7 -2
  41. package/dist/typescript/utils/padNumber.d.ts +3 -0
  42. package/package.json +2 -2
  43. package/src/components/Modal/index.tsx +2 -2
  44. package/src/components/TimerPicker/DurationScroll.tsx +63 -11
  45. package/src/components/TimerPicker/TimerPicker.styles.ts +32 -1
  46. package/src/components/TimerPicker/index.tsx +31 -9
  47. package/src/components/TimerPickerModal.styles.ts +9 -8
  48. package/src/components/index.tsx +11 -3
  49. package/src/tests/Modal.test.tsx +1 -1
  50. package/src/utils/generateNumbers.ts +40 -10
  51. package/src/utils/padNumber.ts +10 -0
  52. package/dist/commonjs/utils/padWithZero.js +0 -15
  53. package/dist/commonjs/utils/padWithZero.js.map +0 -1
  54. package/dist/module/utils/padWithZero.js +0 -8
  55. package/dist/module/utils/padWithZero.js.map +0 -1
  56. package/dist/typescript/utils/padWithZero.d.ts +0 -1
  57. package/src/utils/padWithZero.ts +0 -7
@@ -1,17 +1,290 @@
1
+ import { Text, View } from "react-native";
1
2
  import type { CustomTimerPickerStyles } from "./TimerPicker/TimerPicker.styles";
3
+ import { ComponentProps } from "react";
2
4
  export interface CustomTimerPickerModalStyles extends CustomTimerPickerStyles {
3
- container?: any;
4
- contentContainer?: any;
5
- buttonContainer?: any;
6
- button?: any;
7
- cancelButton?: any;
8
- confirmButton?: any;
9
- modalTitle?: any;
5
+ container?: ComponentProps<typeof View>;
6
+ contentContainer?: ComponentProps<typeof View>;
7
+ buttonContainer?: ComponentProps<typeof View>;
8
+ button?: ComponentProps<typeof Text>;
9
+ cancelButton?: ComponentProps<typeof Text>;
10
+ confirmButton?: ComponentProps<typeof Text>;
11
+ modalTitle?: ComponentProps<typeof Text>;
10
12
  }
11
13
  export declare const generateStyles: (customStyles: CustomTimerPickerModalStyles | undefined) => {
12
- container: any;
13
- contentContainer: any;
14
- buttonContainer: any;
14
+ container: {
15
+ children?: import("react").ReactNode;
16
+ hitSlop?: import("react-native").Insets | undefined;
17
+ id?: string | undefined;
18
+ onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | undefined;
19
+ pointerEvents?: "box-none" | "none" | "box-only" | "auto" | undefined;
20
+ removeClippedSubviews?: boolean | undefined;
21
+ style?: import("react-native").StyleProp<import("react-native").ViewStyle>;
22
+ testID?: string | undefined;
23
+ nativeID?: string | undefined;
24
+ collapsable?: boolean | undefined;
25
+ needsOffscreenAlphaCompositing?: boolean | undefined;
26
+ renderToHardwareTextureAndroid?: boolean | undefined;
27
+ focusable?: boolean | undefined;
28
+ shouldRasterizeIOS?: boolean | undefined;
29
+ isTVSelectable?: boolean | undefined;
30
+ hasTVPreferredFocus?: boolean | undefined;
31
+ tvParallaxProperties?: import("react-native").TVParallaxProperties | undefined;
32
+ tvParallaxShiftDistanceX?: number | undefined;
33
+ tvParallaxShiftDistanceY?: number | undefined;
34
+ tvParallaxTiltAngle?: number | undefined;
35
+ tvParallaxMagnification?: number | undefined;
36
+ onStartShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
37
+ onMoveShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
38
+ onResponderEnd?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
39
+ onResponderGrant?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
40
+ onResponderReject?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
41
+ onResponderMove?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
42
+ onResponderRelease?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
43
+ onResponderStart?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
44
+ onResponderTerminationRequest?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
45
+ onResponderTerminate?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
46
+ onStartShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
47
+ onMoveShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
48
+ onTouchStart?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
49
+ onTouchMove?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
50
+ onTouchEnd?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
51
+ onTouchCancel?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
52
+ onTouchEndCapture?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
53
+ onPointerEnter?: ((event: import("react-native").PointerEvent) => void) | undefined;
54
+ onPointerEnterCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
55
+ onPointerLeave?: ((event: import("react-native").PointerEvent) => void) | undefined;
56
+ onPointerLeaveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
57
+ onPointerMove?: ((event: import("react-native").PointerEvent) => void) | undefined;
58
+ onPointerMoveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
59
+ onPointerCancel?: ((event: import("react-native").PointerEvent) => void) | undefined;
60
+ onPointerCancelCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
61
+ onPointerDown?: ((event: import("react-native").PointerEvent) => void) | undefined;
62
+ onPointerDownCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
63
+ onPointerUp?: ((event: import("react-native").PointerEvent) => void) | undefined;
64
+ onPointerUpCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
65
+ accessible?: boolean | undefined;
66
+ accessibilityActions?: readonly Readonly<{
67
+ name: string;
68
+ label?: string | undefined;
69
+ }>[] | undefined;
70
+ accessibilityLabel?: string | undefined;
71
+ 'aria-label'?: string | undefined;
72
+ accessibilityRole?: import("react-native").AccessibilityRole | undefined;
73
+ accessibilityState?: import("react-native").AccessibilityState | undefined;
74
+ 'aria-busy'?: boolean | undefined;
75
+ 'aria-checked'?: boolean | "mixed" | undefined;
76
+ 'aria-disabled'?: boolean | undefined;
77
+ 'aria-expanded'?: boolean | undefined;
78
+ 'aria-selected'?: boolean | undefined;
79
+ 'aria-labelledby'?: string | undefined;
80
+ accessibilityHint?: string | undefined;
81
+ accessibilityValue?: import("react-native").AccessibilityValue | undefined;
82
+ 'aria-valuemax'?: number | undefined;
83
+ 'aria-valuemin'?: number | undefined;
84
+ 'aria-valuenow'?: number | undefined;
85
+ 'aria-valuetext'?: string | undefined;
86
+ onAccessibilityAction?: ((event: import("react-native").AccessibilityActionEvent) => void) | undefined;
87
+ importantForAccessibility?: "auto" | "yes" | "no" | "no-hide-descendants" | undefined;
88
+ 'aria-hidden'?: boolean | undefined;
89
+ 'aria-live'?: "polite" | "assertive" | "off" | undefined;
90
+ 'aria-modal'?: boolean | undefined;
91
+ role?: import("react-native").Role | undefined;
92
+ accessibilityLiveRegion?: "none" | "polite" | "assertive" | undefined;
93
+ accessibilityLabelledBy?: string | string[] | undefined;
94
+ accessibilityElementsHidden?: boolean | undefined;
95
+ accessibilityViewIsModal?: boolean | undefined;
96
+ onAccessibilityEscape?: (() => void) | undefined;
97
+ onAccessibilityTap?: (() => void) | undefined;
98
+ onMagicTap?: (() => void) | undefined;
99
+ accessibilityIgnoresInvertColors?: boolean | undefined;
100
+ accessibilityLanguage?: string | undefined;
101
+ justifyContent: "center";
102
+ alignItems: "center";
103
+ overflow: "hidden";
104
+ };
105
+ contentContainer: {
106
+ children?: import("react").ReactNode;
107
+ hitSlop?: import("react-native").Insets | undefined;
108
+ id?: string | undefined;
109
+ onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | undefined;
110
+ pointerEvents?: "box-none" | "none" | "box-only" | "auto" | undefined;
111
+ removeClippedSubviews?: boolean | undefined;
112
+ style?: import("react-native").StyleProp<import("react-native").ViewStyle>;
113
+ testID?: string | undefined;
114
+ nativeID?: string | undefined;
115
+ collapsable?: boolean | undefined;
116
+ needsOffscreenAlphaCompositing?: boolean | undefined;
117
+ renderToHardwareTextureAndroid?: boolean | undefined;
118
+ focusable?: boolean | undefined;
119
+ shouldRasterizeIOS?: boolean | undefined;
120
+ isTVSelectable?: boolean | undefined;
121
+ hasTVPreferredFocus?: boolean | undefined;
122
+ tvParallaxProperties?: import("react-native").TVParallaxProperties | undefined;
123
+ tvParallaxShiftDistanceX?: number | undefined;
124
+ tvParallaxShiftDistanceY?: number | undefined;
125
+ tvParallaxTiltAngle?: number | undefined;
126
+ tvParallaxMagnification?: number | undefined;
127
+ onStartShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
128
+ onMoveShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
129
+ onResponderEnd?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
130
+ onResponderGrant?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
131
+ onResponderReject?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
132
+ onResponderMove?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
133
+ onResponderRelease?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
134
+ onResponderStart?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
135
+ onResponderTerminationRequest?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
136
+ onResponderTerminate?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
137
+ onStartShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
138
+ onMoveShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
139
+ onTouchStart?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
140
+ onTouchMove?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
141
+ onTouchEnd?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
142
+ onTouchCancel?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
143
+ onTouchEndCapture?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
144
+ onPointerEnter?: ((event: import("react-native").PointerEvent) => void) | undefined;
145
+ onPointerEnterCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
146
+ onPointerLeave?: ((event: import("react-native").PointerEvent) => void) | undefined;
147
+ onPointerLeaveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
148
+ onPointerMove?: ((event: import("react-native").PointerEvent) => void) | undefined;
149
+ onPointerMoveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
150
+ onPointerCancel?: ((event: import("react-native").PointerEvent) => void) | undefined;
151
+ onPointerCancelCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
152
+ onPointerDown?: ((event: import("react-native").PointerEvent) => void) | undefined;
153
+ onPointerDownCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
154
+ onPointerUp?: ((event: import("react-native").PointerEvent) => void) | undefined;
155
+ onPointerUpCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
156
+ accessible?: boolean | undefined;
157
+ accessibilityActions?: readonly Readonly<{
158
+ name: string;
159
+ label?: string | undefined;
160
+ }>[] | undefined;
161
+ accessibilityLabel?: string | undefined;
162
+ 'aria-label'?: string | undefined;
163
+ accessibilityRole?: import("react-native").AccessibilityRole | undefined;
164
+ accessibilityState?: import("react-native").AccessibilityState | undefined;
165
+ 'aria-busy'?: boolean | undefined;
166
+ 'aria-checked'?: boolean | "mixed" | undefined;
167
+ 'aria-disabled'?: boolean | undefined;
168
+ 'aria-expanded'?: boolean | undefined;
169
+ 'aria-selected'?: boolean | undefined;
170
+ 'aria-labelledby'?: string | undefined;
171
+ accessibilityHint?: string | undefined;
172
+ accessibilityValue?: import("react-native").AccessibilityValue | undefined;
173
+ 'aria-valuemax'?: number | undefined;
174
+ 'aria-valuemin'?: number | undefined;
175
+ 'aria-valuenow'?: number | undefined;
176
+ 'aria-valuetext'?: string | undefined;
177
+ onAccessibilityAction?: ((event: import("react-native").AccessibilityActionEvent) => void) | undefined;
178
+ importantForAccessibility?: "auto" | "yes" | "no" | "no-hide-descendants" | undefined;
179
+ 'aria-hidden'?: boolean | undefined;
180
+ 'aria-live'?: "polite" | "assertive" | "off" | undefined;
181
+ 'aria-modal'?: boolean | undefined;
182
+ role?: import("react-native").Role | undefined;
183
+ accessibilityLiveRegion?: "none" | "polite" | "assertive" | undefined;
184
+ accessibilityLabelledBy?: string | string[] | undefined;
185
+ accessibilityElementsHidden?: boolean | undefined;
186
+ accessibilityViewIsModal?: boolean | undefined;
187
+ onAccessibilityEscape?: (() => void) | undefined;
188
+ onAccessibilityTap?: (() => void) | undefined;
189
+ onMagicTap?: (() => void) | undefined;
190
+ accessibilityIgnoresInvertColors?: boolean | undefined;
191
+ accessibilityLanguage?: string | undefined;
192
+ backgroundColor: string;
193
+ justifyContent: "center";
194
+ alignItems: "center";
195
+ borderRadius: number;
196
+ padding: number;
197
+ };
198
+ buttonContainer: {
199
+ children?: import("react").ReactNode;
200
+ hitSlop?: import("react-native").Insets | undefined;
201
+ id?: string | undefined;
202
+ onLayout?: ((event: import("react-native").LayoutChangeEvent) => void) | undefined;
203
+ pointerEvents?: "box-none" | "none" | "box-only" | "auto" | undefined;
204
+ removeClippedSubviews?: boolean | undefined;
205
+ style?: import("react-native").StyleProp<import("react-native").ViewStyle>;
206
+ testID?: string | undefined;
207
+ nativeID?: string | undefined;
208
+ collapsable?: boolean | undefined;
209
+ needsOffscreenAlphaCompositing?: boolean | undefined;
210
+ renderToHardwareTextureAndroid?: boolean | undefined;
211
+ focusable?: boolean | undefined;
212
+ shouldRasterizeIOS?: boolean | undefined;
213
+ isTVSelectable?: boolean | undefined;
214
+ hasTVPreferredFocus?: boolean | undefined;
215
+ tvParallaxProperties?: import("react-native").TVParallaxProperties | undefined;
216
+ tvParallaxShiftDistanceX?: number | undefined;
217
+ tvParallaxShiftDistanceY?: number | undefined;
218
+ tvParallaxTiltAngle?: number | undefined;
219
+ tvParallaxMagnification?: number | undefined;
220
+ onStartShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
221
+ onMoveShouldSetResponder?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
222
+ onResponderEnd?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
223
+ onResponderGrant?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
224
+ onResponderReject?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
225
+ onResponderMove?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
226
+ onResponderRelease?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
227
+ onResponderStart?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
228
+ onResponderTerminationRequest?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
229
+ onResponderTerminate?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
230
+ onStartShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
231
+ onMoveShouldSetResponderCapture?: ((event: import("react-native").GestureResponderEvent) => boolean) | undefined;
232
+ onTouchStart?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
233
+ onTouchMove?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
234
+ onTouchEnd?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
235
+ onTouchCancel?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
236
+ onTouchEndCapture?: ((event: import("react-native").GestureResponderEvent) => void) | undefined;
237
+ onPointerEnter?: ((event: import("react-native").PointerEvent) => void) | undefined;
238
+ onPointerEnterCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
239
+ onPointerLeave?: ((event: import("react-native").PointerEvent) => void) | undefined;
240
+ onPointerLeaveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
241
+ onPointerMove?: ((event: import("react-native").PointerEvent) => void) | undefined;
242
+ onPointerMoveCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
243
+ onPointerCancel?: ((event: import("react-native").PointerEvent) => void) | undefined;
244
+ onPointerCancelCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
245
+ onPointerDown?: ((event: import("react-native").PointerEvent) => void) | undefined;
246
+ onPointerDownCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
247
+ onPointerUp?: ((event: import("react-native").PointerEvent) => void) | undefined;
248
+ onPointerUpCapture?: ((event: import("react-native").PointerEvent) => void) | undefined;
249
+ accessible?: boolean | undefined;
250
+ accessibilityActions?: readonly Readonly<{
251
+ name: string;
252
+ label?: string | undefined;
253
+ }>[] | undefined;
254
+ accessibilityLabel?: string | undefined;
255
+ 'aria-label'?: string | undefined;
256
+ accessibilityRole?: import("react-native").AccessibilityRole | undefined;
257
+ accessibilityState?: import("react-native").AccessibilityState | undefined;
258
+ 'aria-busy'?: boolean | undefined;
259
+ 'aria-checked'?: boolean | "mixed" | undefined;
260
+ 'aria-disabled'?: boolean | undefined;
261
+ 'aria-expanded'?: boolean | undefined;
262
+ 'aria-selected'?: boolean | undefined;
263
+ 'aria-labelledby'?: string | undefined;
264
+ accessibilityHint?: string | undefined;
265
+ accessibilityValue?: import("react-native").AccessibilityValue | undefined;
266
+ 'aria-valuemax'?: number | undefined;
267
+ 'aria-valuemin'?: number | undefined;
268
+ 'aria-valuenow'?: number | undefined;
269
+ 'aria-valuetext'?: string | undefined;
270
+ onAccessibilityAction?: ((event: import("react-native").AccessibilityActionEvent) => void) | undefined;
271
+ importantForAccessibility?: "auto" | "yes" | "no" | "no-hide-descendants" | undefined;
272
+ 'aria-hidden'?: boolean | undefined;
273
+ 'aria-live'?: "polite" | "assertive" | "off" | undefined;
274
+ 'aria-modal'?: boolean | undefined;
275
+ role?: import("react-native").Role | undefined;
276
+ accessibilityLiveRegion?: "none" | "polite" | "assertive" | undefined;
277
+ accessibilityLabelledBy?: string | string[] | undefined;
278
+ accessibilityElementsHidden?: boolean | undefined;
279
+ accessibilityViewIsModal?: boolean | undefined;
280
+ onAccessibilityEscape?: (() => void) | undefined;
281
+ onAccessibilityTap?: (() => void) | undefined;
282
+ onMagicTap?: (() => void) | undefined;
283
+ accessibilityIgnoresInvertColors?: boolean | undefined;
284
+ accessibilityLanguage?: string | undefined;
285
+ flexDirection: "row";
286
+ marginTop: number;
287
+ };
15
288
  button: any;
16
289
  cancelButton: any;
17
290
  confirmButton: any;
@@ -1,7 +1,12 @@
1
- import { padWithZero } from "./padWithZero";
2
1
  export declare const generateNumbers: (numberOfItems: number, options: {
3
2
  repeatNTimes?: number;
4
- padWithZero?: boolean;
3
+ padNumbersWithZero?: boolean;
4
+ disableInfiniteScroll?: boolean;
5
+ padWithNItems: number;
6
+ }) => string[];
7
+ export declare const generate12HourNumbers: (options: {
8
+ repeatNTimes?: number;
9
+ padNumbersWithZero?: boolean;
5
10
  disableInfiniteScroll?: boolean;
6
11
  padWithNItems: number;
7
12
  }) => string[];
@@ -0,0 +1,3 @@
1
+ export declare const padNumber: (value: number, options?: {
2
+ padWithZero?: boolean;
3
+ }) => string;
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "react-native-timer-picker",
3
- "description": "A simple, flexible, performant duration picker for Expo React Native apps 🔥\n\nGreat for timers, alarms and duration inputs ⏰🕰️⏳",
3
+ "description": "A simple, flexible, performant duration picker for React Native apps 🔥\n\nGreat for timers, alarms and duration inputs ⏰🕰️⏳",
4
4
  "author": {
5
5
  "name": "Tim Roberts",
6
6
  "url": "https://github.com/troberts-28"
7
7
  },
8
8
  "license": "MIT",
9
- "version": "1.3.0",
9
+ "version": "1.5.0",
10
10
  "main": "dist/commonjs/index.js",
11
11
  "types": "dist/typescript/src/index.d.ts",
12
12
  "scripts": {
@@ -33,7 +33,7 @@ export const Modal = ({
33
33
  modalProps,
34
34
  contentStyle,
35
35
  overlayStyle,
36
- testID,
36
+ testID = "modal",
37
37
  }: ModalProps): React.ReactElement => {
38
38
  const { width: screenWidth, height: screenHeight } = useWindowDimensions();
39
39
 
@@ -109,7 +109,7 @@ export const Modal = ({
109
109
  animationType="fade"
110
110
  visible={isVisible}
111
111
  {...modalProps}
112
- testID={testID ?? "modal"}>
112
+ testID={testID}>
113
113
  <TouchableWithoutFeedback
114
114
  onPress={onOverlayPress}
115
115
  testID="modal-backdrop">
@@ -15,7 +15,10 @@ import {
15
15
  NativeScrollEvent,
16
16
  } from "react-native";
17
17
 
18
- import { generateNumbers } from "../../utils/generateNumbers";
18
+ import {
19
+ generate12HourNumbers,
20
+ generateNumbers,
21
+ } from "../../utils/generateNumbers";
19
22
  import { colorToRgba } from "../../utils/colorToRgba";
20
23
  import { generateStyles } from "./TimerPicker.styles";
21
24
  import { getAdjustedLimit } from "../../utils/getAdjustedLimit";
@@ -45,6 +48,7 @@ export type LimitType = {
45
48
  };
46
49
 
47
50
  interface DurationScrollProps {
51
+ allowFontScaling?: boolean;
48
52
  numberOfItems: number;
49
53
  label?: string | React.ReactElement;
50
54
  initialValue?: number;
@@ -53,6 +57,9 @@ interface DurationScrollProps {
53
57
  disableInfiniteScroll?: boolean;
54
58
  limit?: LimitType;
55
59
  aggressivelyGetLatestDuration: boolean;
60
+ is12HourPicker?: boolean;
61
+ amLabel?: string;
62
+ pmLabel?: string;
56
63
  padWithNItems: number;
57
64
  pickerGradientOverlayProps?: Partial<LinearGradientProps>;
58
65
  topPickerGradientOverlayProps?: Partial<LinearGradientProps>;
@@ -77,6 +84,10 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
77
84
  disableInfiniteScroll = false,
78
85
  limit,
79
86
  aggressivelyGetLatestDuration,
87
+ allowFontScaling = false,
88
+ is12HourPicker,
89
+ amLabel,
90
+ pmLabel,
80
91
  padWithNItems,
81
92
  pickerGradientOverlayProps,
82
93
  topPickerGradientOverlayProps,
@@ -87,12 +98,19 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
87
98
  },
88
99
  ref
89
100
  ): React.ReactElement => {
90
- const data = generateNumbers(numberOfItems, {
91
- padWithZero: padNumbersWithZero,
92
- repeatNTimes: 3,
93
- disableInfiniteScroll,
94
- padWithNItems: padWithNItems,
95
- });
101
+ const data = !is12HourPicker
102
+ ? generateNumbers(numberOfItems, {
103
+ padNumbersWithZero,
104
+ repeatNTimes: 3,
105
+ disableInfiniteScroll,
106
+ padWithNItems,
107
+ })
108
+ : generate12HourNumbers({
109
+ padNumbersWithZero,
110
+ repeatNTimes: 3,
111
+ disableInfiniteScroll,
112
+ padWithNItems,
113
+ });
96
114
 
97
115
  const numberOfItemsToShow = 1 + padWithNItems * 2;
98
116
 
@@ -132,7 +150,17 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
132
150
 
133
151
  const renderItem = useCallback(
134
152
  ({ item }: { item: string }) => {
135
- const intItem = parseInt(item);
153
+ let stringItem = item;
154
+ let intItem: number;
155
+ let isAm: boolean | undefined;
156
+
157
+ if (!is12HourPicker) {
158
+ intItem = parseInt(item);
159
+ } else {
160
+ isAm = item.includes("AM");
161
+ stringItem = item.replace(/\s[AP]M/g, "");
162
+ intItem = parseInt(stringItem);
163
+ }
136
164
 
137
165
  return (
138
166
  <View
@@ -140,6 +168,7 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
140
168
  style={styles.pickerItemContainer}
141
169
  testID="picker-item">
142
170
  <Text
171
+ allowFontScaling={allowFontScaling}
143
172
  style={[
144
173
  styles.pickerItem,
145
174
  intItem > adjustedLimited.max ||
@@ -147,15 +176,32 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
147
176
  ? styles.disabledPickerItem
148
177
  : {},
149
178
  ]}>
150
- {item}
179
+ {stringItem}
151
180
  </Text>
181
+ {is12HourPicker ? (
182
+ <View
183
+ style={styles.pickerAmPmContainer}
184
+ pointerEvents="none">
185
+ <Text
186
+ style={[styles.pickerAmPmLabel]}
187
+ allowFontScaling={allowFontScaling}>
188
+ {isAm ? amLabel : pmLabel}
189
+ </Text>
190
+ </View>
191
+ ) : null}
152
192
  </View>
153
193
  );
154
194
  },
155
195
  [
156
196
  adjustedLimited.max,
157
197
  adjustedLimited.min,
198
+ allowFontScaling,
199
+ amLabel,
200
+ is12HourPicker,
201
+ pmLabel,
158
202
  styles.disabledPickerItem,
203
+ styles.pickerAmPmContainer,
204
+ styles.pickerAmPmLabel,
159
205
  styles.pickerItem,
160
206
  styles.pickerItemContainer,
161
207
  ]
@@ -317,12 +363,18 @@ const DurationScroll = forwardRef<DurationScrollRef, DurationScrollProps>(
317
363
  : undefined
318
364
  }
319
365
  onMomentumScrollEnd={onMomentumScrollEnd}
320
- onScroll={aggressivelyGetLatestDuration ? onScroll : undefined}
366
+ onScroll={
367
+ aggressivelyGetLatestDuration ? onScroll : undefined
368
+ }
321
369
  testID="duration-scroll-flatlist"
322
370
  />
323
371
  <View style={styles.pickerLabelContainer} pointerEvents="none">
324
372
  {typeof label === "string" ? (
325
- <Text style={styles.pickerLabel}>{label}</Text>
373
+ <Text
374
+ allowFontScaling={allowFontScaling}
375
+ style={styles.pickerLabel}>
376
+ {label}
377
+ </Text>
326
378
  ) : (
327
379
  label ?? null
328
380
  )}
@@ -8,6 +8,8 @@ export interface CustomTimerPickerStyles {
8
8
  pickerContainer?: any;
9
9
  pickerLabelContainer?: any;
10
10
  pickerLabel?: any;
11
+ pickerAmPmContainer?: any;
12
+ pickerAmPmLabel?: any;
11
13
  pickerItemContainer?: any;
12
14
  pickerItem?: any;
13
15
  disabledPickerItem?: any;
@@ -40,12 +42,19 @@ export const generateStyles = (
40
42
  top: 0,
41
43
  bottom: 0,
42
44
  justifyContent: "center",
45
+ minWidth:
46
+ (customStyles?.pickerLabel?.fontSize ??
47
+ customStyles?.text?.fontSize ??
48
+ 25) * 0.65,
43
49
  ...customStyles?.pickerLabelContainer,
44
50
  },
45
51
  pickerLabel: {
46
52
  fontSize: 18,
47
53
  fontWeight: "bold",
48
- marginTop: (customStyles?.pickerItem?.fontSize ?? 25) / 6,
54
+ marginTop:
55
+ (customStyles?.pickerItem?.fontSize ??
56
+ customStyles?.text?.fontSize ??
57
+ 25) / 6,
49
58
  color:
50
59
  customStyles?.theme === "dark"
51
60
  ? DARK_MODE_TEXT_COLOR
@@ -54,6 +63,7 @@ export const generateStyles = (
54
63
  ...customStyles?.pickerLabel,
55
64
  },
56
65
  pickerItemContainer: {
66
+ flexDirection: "row",
57
67
  height: 50,
58
68
  justifyContent: "center",
59
69
  alignItems: "center",
@@ -70,6 +80,27 @@ export const generateStyles = (
70
80
  ...customStyles?.text,
71
81
  ...customStyles?.pickerItem,
72
82
  },
83
+ pickerAmPmContainer: {
84
+ position: "absolute",
85
+ right: 0,
86
+ top: 0,
87
+ bottom: 0,
88
+ justifyContent: "center",
89
+ ...customStyles?.pickerLabelContainer,
90
+ ...customStyles?.pickerAmPmContainer,
91
+ },
92
+ pickerAmPmLabel: {
93
+ fontSize: 18,
94
+ fontWeight: "bold",
95
+ marginTop: (customStyles?.pickerItem?.fontSize ?? 25) / 6,
96
+ color:
97
+ customStyles?.theme === "dark"
98
+ ? DARK_MODE_TEXT_COLOR
99
+ : LIGHT_MODE_TEXT_COLOR,
100
+ ...customStyles?.text,
101
+ ...customStyles?.pickerLabel,
102
+ ...customStyles?.pickerAmPmLabel,
103
+ },
73
104
  disabledPickerItem: {
74
105
  opacity: 0.2,
75
106
  ...customStyles?.disabledPickerItem,