@idealyst/datepicker 1.1.3 → 1.1.5

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 (80) hide show
  1. package/package.json +6 -5
  2. package/src/DateInput.native.tsx +155 -0
  3. package/src/DateInput.tsx +2 -0
  4. package/src/DateInput.web.tsx +146 -0
  5. package/src/DatePicker.tsx +276 -0
  6. package/src/DateTimePicker.tsx +89 -0
  7. package/src/TimeInput.native.tsx +175 -0
  8. package/src/TimeInput.tsx +2 -0
  9. package/src/TimeInput.web.tsx +171 -0
  10. package/src/TimePicker.tsx +106 -0
  11. package/src/examples/DatePickerExamples.tsx +113 -149
  12. package/src/examples/index.ts +1 -1
  13. package/src/index.native.ts +15 -20
  14. package/src/index.ts +14 -19
  15. package/src/styles.ts +127 -0
  16. package/src/types.ts +56 -0
  17. package/src/DateInput/DateInput.native.tsx +0 -61
  18. package/src/DateInput/DateInput.styles.tsx +0 -26
  19. package/src/DateInput/DateInput.web.tsx +0 -61
  20. package/src/DateInput/DateInputBase.tsx +0 -228
  21. package/src/DateInput/index.native.ts +0 -2
  22. package/src/DateInput/index.ts +0 -2
  23. package/src/DateInput/types.ts +0 -60
  24. package/src/DatePicker/Calendar.native.tsx +0 -261
  25. package/src/DatePicker/Calendar.styles.tsx +0 -230
  26. package/src/DatePicker/Calendar.web.tsx +0 -159
  27. package/src/DatePicker/DatePicker.native.tsx +0 -51
  28. package/src/DatePicker/DatePicker.styles.tsx +0 -76
  29. package/src/DatePicker/DatePicker.web.tsx +0 -31
  30. package/src/DatePicker/index.native.ts +0 -3
  31. package/src/DatePicker/index.ts +0 -3
  32. package/src/DatePicker/types.ts +0 -78
  33. package/src/DateRangePicker/DateRangePicker.native.tsx +0 -39
  34. package/src/DateRangePicker/DateRangePicker.styles.tsx +0 -83
  35. package/src/DateRangePicker/DateRangePicker.web.tsx +0 -40
  36. package/src/DateRangePicker/RangeCalendar.native.tsx +0 -355
  37. package/src/DateRangePicker/RangeCalendar.styles.tsx +0 -200
  38. package/src/DateRangePicker/RangeCalendar.web.tsx +0 -384
  39. package/src/DateRangePicker/index.native.ts +0 -3
  40. package/src/DateRangePicker/index.ts +0 -3
  41. package/src/DateRangePicker/types.ts +0 -107
  42. package/src/DateTimePicker/DateTimePicker.native.tsx +0 -24
  43. package/src/DateTimePicker/DateTimePicker.styles.tsx +0 -104
  44. package/src/DateTimePicker/DateTimePicker.tsx +0 -21
  45. package/src/DateTimePicker/DateTimePickerBase.tsx +0 -185
  46. package/src/DateTimePicker/TimePicker.native.tsx +0 -17
  47. package/src/DateTimePicker/TimePicker.styles.tsx +0 -115
  48. package/src/DateTimePicker/TimePicker.tsx +0 -14
  49. package/src/DateTimePicker/TimePickerBase.tsx +0 -232
  50. package/src/DateTimePicker/index.native.ts +0 -3
  51. package/src/DateTimePicker/index.ts +0 -3
  52. package/src/DateTimePicker/primitives/ClockFace.native.tsx +0 -195
  53. package/src/DateTimePicker/primitives/ClockFace.web.tsx +0 -168
  54. package/src/DateTimePicker/primitives/TimeInput.native.tsx +0 -53
  55. package/src/DateTimePicker/primitives/TimeInput.web.tsx +0 -66
  56. package/src/DateTimePicker/primitives/index.native.ts +0 -2
  57. package/src/DateTimePicker/primitives/index.ts +0 -2
  58. package/src/DateTimePicker/primitives/index.web.ts +0 -2
  59. package/src/DateTimePicker/types.ts +0 -80
  60. package/src/DateTimePicker/utils/dimensions.native.ts +0 -9
  61. package/src/DateTimePicker/utils/dimensions.ts +0 -9
  62. package/src/DateTimePicker/utils/dimensions.web.ts +0 -33
  63. package/src/DateTimeRangePicker/DateTimeRangePicker.native.tsx +0 -24
  64. package/src/DateTimeRangePicker/DateTimeRangePicker.styles.tsx +0 -118
  65. package/src/DateTimeRangePicker/DateTimeRangePicker.web.tsx +0 -21
  66. package/src/DateTimeRangePicker/DateTimeRangePickerBase.tsx +0 -327
  67. package/src/DateTimeRangePicker/index.native.ts +0 -2
  68. package/src/DateTimeRangePicker/index.ts +0 -2
  69. package/src/DateTimeRangePicker/types.ts +0 -70
  70. package/src/primitives/CalendarGrid/CalendarGrid.styles.tsx +0 -51
  71. package/src/primitives/CalendarGrid/CalendarGrid.tsx +0 -146
  72. package/src/primitives/CalendarGrid/index.ts +0 -1
  73. package/src/primitives/CalendarHeader/CalendarHeader.styles.tsx +0 -25
  74. package/src/primitives/CalendarHeader/CalendarHeader.tsx +0 -69
  75. package/src/primitives/CalendarHeader/index.ts +0 -1
  76. package/src/primitives/CalendarOverlay/CalendarOverlay.styles.tsx +0 -86
  77. package/src/primitives/CalendarOverlay/CalendarOverlay.tsx +0 -136
  78. package/src/primitives/CalendarOverlay/index.ts +0 -1
  79. package/src/primitives/Wrapper/Wrapper.web.tsx +0 -33
  80. package/src/primitives/Wrapper/index.ts +0 -1
@@ -1,185 +0,0 @@
1
- import React, { useState, useEffect, useCallback } from 'react';
2
- import { View, Button } from '@idealyst/components';
3
- import { DateTimePickerProps } from './types';
4
- import { dateTimePickerStyles } from './DateTimePicker.styles';
5
- import { getDimensions, addEventListener } from './utils/dimensions';
6
-
7
- interface DateTimePickerBaseProps extends DateTimePickerProps {
8
- renderCalendar: (props: {
9
- value: Date | undefined;
10
- onChange: (date: Date) => void;
11
- minDate?: Date;
12
- maxDate?: Date;
13
- disabled: boolean;
14
- }) => React.ReactNode;
15
- renderTimePicker: (props: {
16
- value: Date;
17
- onChange: (date: Date) => void;
18
- disabled: boolean;
19
- mode: '12h' | '24h';
20
- step: number;
21
- }) => React.ReactNode;
22
- }
23
-
24
- type ViewMode = 'responsive' | 'date' | 'time';
25
-
26
- export const DateTimePickerBase: React.FC<DateTimePickerBaseProps> = ({
27
- value,
28
- onChange,
29
- minDate,
30
- maxDate,
31
- disabled = false,
32
- timeMode = '12h',
33
- timeStep = 1,
34
- style,
35
- testID,
36
- renderCalendar,
37
- renderTimePicker,
38
- }) => {
39
- const [screenData, setScreenData] = useState(() => getDimensions());
40
- const [viewMode, setViewMode] = useState<ViewMode>('responsive');
41
-
42
- // Listen for screen dimension changes
43
- useEffect(() => {
44
- const subscription = addEventListener(({ window }) => {
45
- setScreenData(window);
46
- });
47
- return () => subscription?.remove();
48
- }, []);
49
-
50
- // Determine if we should use side-by-side layout
51
- const shouldUseSideBySide = screenData.width >= 600; // Tablet width threshold
52
- const canFitSideBySide = screenData.width >= 480; // Minimum for side-by-side
53
-
54
- // Auto-adjust view mode based on screen size
55
- useEffect(() => {
56
- if (shouldUseSideBySide) {
57
- setViewMode('responsive');
58
- } else if (viewMode === 'responsive' && !canFitSideBySide) {
59
- setViewMode('date');
60
- }
61
- }, [shouldUseSideBySide, canFitSideBySide, viewMode]);
62
-
63
- const handleDateChange = useCallback((newDate: Date) => {
64
- if (value) {
65
- // Preserve the time from current value
66
- const updatedDate = new Date(newDate);
67
- updatedDate.setHours(value.getHours(), value.getMinutes(), value.getSeconds());
68
- onChange(updatedDate);
69
- } else {
70
- onChange(newDate);
71
- }
72
-
73
- // Auto-advance to time selection on small screens after date selection
74
- if (!canFitSideBySide && viewMode === 'date') {
75
- setViewMode('time');
76
- }
77
- }, [value, onChange, canFitSideBySide, viewMode]);
78
-
79
- const handleTimeChange = useCallback((newTime: Date) => {
80
- if (value) {
81
- // Update time while preserving the date
82
- const updatedDate = new Date(value);
83
- updatedDate.setHours(newTime.getHours(), newTime.getMinutes(), newTime.getSeconds());
84
- onChange(updatedDate);
85
- } else {
86
- // If no date is selected, use today's date with the new time
87
- const today = new Date();
88
- today.setHours(newTime.getHours(), newTime.getMinutes(), newTime.getSeconds());
89
- onChange(today);
90
- }
91
- }, [value, onChange]);
92
-
93
- // Side-by-side layout for larger screens
94
- if (viewMode === 'responsive' && shouldUseSideBySide) {
95
- return (
96
- <View style={[dateTimePickerStyles.container, style]} testID={testID} data-testid={testID}>
97
- {/* Side by side layout */}
98
- <View style={dateTimePickerStyles.sideBySideLayout}>
99
- {renderCalendar({
100
- value,
101
- onChange: handleDateChange,
102
- minDate,
103
- maxDate,
104
- disabled,
105
- })}
106
-
107
- {renderTimePicker({
108
- value: value || new Date(),
109
- onChange: handleTimeChange,
110
- disabled,
111
- mode: timeMode,
112
- step: timeStep,
113
- })}
114
- </View>
115
- </View>
116
- );
117
- }
118
-
119
- // Step-by-step layout for smaller screens
120
- const isDateStep = viewMode === 'date';
121
- const isTimeStep = viewMode === 'time';
122
-
123
- return (
124
- <View style={[dateTimePickerStyles.container, style]} testID={testID} data-testid={testID}>
125
- {/* Step Navigation */}
126
- <View style={dateTimePickerStyles.stepNavigation}>
127
- <Button
128
- variant={isDateStep ? 'primary' : 'outlined'}
129
- size="sm"
130
- onPress={() => setViewMode('date')}
131
- disabled={disabled}
132
- style={dateTimePickerStyles.stepButton}
133
- >
134
- 1. Date
135
- </Button>
136
- <Button
137
- variant={isTimeStep ? 'primary' : 'outlined'}
138
- size="sm"
139
- onPress={() => setViewMode('time')}
140
- disabled={disabled || !value}
141
- style={dateTimePickerStyles.stepButton}
142
- >
143
- 2. Time
144
- </Button>
145
- </View>
146
-
147
- {/* Step Content */}
148
- {isDateStep && (
149
- <View>
150
- {renderCalendar({
151
- value,
152
- onChange: handleDateChange,
153
- minDate,
154
- maxDate,
155
- disabled,
156
- })}
157
- </View>
158
- )}
159
-
160
- {isTimeStep && (
161
- <View>
162
- {renderTimePicker({
163
- value: value || new Date(),
164
- onChange: handleTimeChange,
165
- disabled,
166
- mode: timeMode,
167
- step: timeStep,
168
- })}
169
-
170
- {/* Back to Date button */}
171
- <View style={dateTimePickerStyles.backButtonContainer}>
172
- <Button
173
- variant="text"
174
- size="sm"
175
- onPress={() => setViewMode('date')}
176
- disabled={disabled}
177
- >
178
- ← Back to Date
179
- </Button>
180
- </View>
181
- </View>
182
- )}
183
- </View>
184
- );
185
- };
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import { TimePickerProps } from './types';
3
- import { TimePickerBase } from './TimePickerBase';
4
- import { ClockFace, TimeInput } from './primitives';
5
- import { timePickerStyles } from './TimePicker.styles';
6
-
7
- export const TimePicker: React.FC<TimePickerProps> = (props) => {
8
- timePickerStyles.useVariants({});
9
-
10
- return (
11
- <TimePickerBase
12
- {...props}
13
- renderClock={(clockProps) => <ClockFace {...clockProps} />}
14
- renderTimeInput={(inputProps) => <TimeInput {...inputProps} />}
15
- />
16
- );
17
- };
@@ -1,115 +0,0 @@
1
- import { StyleSheet } from 'react-native-unistyles';
2
-
3
- export const timePickerStyles = StyleSheet.create((theme) => ({
4
- container: {
5
- flexDirection: 'column',
6
- alignItems: 'center',
7
- gap: 4,
8
- width: 170,
9
- },
10
- clockContainer: {
11
- alignItems: 'center',
12
- justifyContent: 'center',
13
- marginBottom: 4,
14
-
15
- _web: {
16
- display: 'flex',
17
- alignItems: 'center',
18
- justifyContent: 'center',
19
- }
20
- },
21
- clockSvg: {
22
- _web: {
23
- cursor: 'pointer',
24
- }
25
- },
26
- timeInputRow: {
27
- flexDirection: 'row',
28
- alignItems: 'center',
29
- gap: 8,
30
-
31
- _web: {
32
- display: 'flex',
33
- alignItems: 'center',
34
- }
35
- },
36
- timeInput: {
37
- width: 44,
38
- height: 40,
39
- textAlign: 'center',
40
- fontSize: 16,
41
- fontWeight: '600',
42
- color: theme.colors?.text?.primary || '#111827',
43
- borderWidth: 0,
44
- borderBottomWidth: 0,
45
- borderRadius: 0,
46
- backgroundColor: 'transparent',
47
- paddingHorizontal: 0,
48
- paddingVertical: 0,
49
-
50
- _web: {
51
- border: 'none',
52
- borderBottom: 'none',
53
- outline: 'none',
54
- cursor: 'pointer',
55
- }
56
- },
57
- activeInput: {
58
- color: theme.colors?.accent?.primary || '#3b82f6',
59
- borderBottomWidth: 2,
60
- borderBottomColor: theme.colors?.accent?.primary || '#3b82f6',
61
- borderRadius: 0,
62
- },
63
- timeSeparator: {
64
- fontSize: 16,
65
- fontWeight: '300',
66
- color: theme.colors?.text?.secondary || '#6b7280',
67
- },
68
- ampmButton: {
69
- paddingHorizontal: 8,
70
- paddingVertical: 4,
71
- borderRadius: 4,
72
- minWidth: 36,
73
- fontSize: 12,
74
- fontWeight: '600',
75
- },
76
- tabBar: {
77
- flexDirection: 'row',
78
- gap: 4,
79
- marginBottom: 4,
80
- padding: 2,
81
- backgroundColor: theme.colors?.surface?.secondary || '#f3f4f6',
82
- borderRadius: 6,
83
-
84
- _web: {
85
- display: 'flex',
86
- }
87
- },
88
- tabButton: {
89
- flex: 1,
90
- paddingHorizontal: 12,
91
- paddingVertical: 6,
92
- fontSize: 13,
93
- fontWeight: '500',
94
- borderRadius: 4,
95
- borderWidth: 0,
96
-
97
- _web: {
98
- border: 'none',
99
- cursor: 'pointer',
100
- transition: 'all 0.2s',
101
- }
102
- },
103
- activeTab: {
104
- backgroundColor: theme.colors?.surface?.primary || '#ffffff',
105
- color: theme.colors?.accent?.primary || '#3b82f6',
106
-
107
- _web: {
108
- boxShadow: '0 1px 2px rgba(0, 0, 0, 0.1)',
109
- }
110
- },
111
- inactiveTab: {
112
- backgroundColor: 'transparent',
113
- color: theme.colors?.text?.secondary || '#6b7280',
114
- },
115
- }));
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import { TimePickerProps } from './types';
3
- import { TimePickerBase } from './TimePickerBase';
4
- import { ClockFace, TimeInput } from './primitives';
5
-
6
- export const TimePicker: React.FC<TimePickerProps> = (props) => {
7
- return (
8
- <TimePickerBase
9
- {...props}
10
- renderClock={(clockProps) => <ClockFace {...clockProps} />}
11
- renderTimeInput={(inputProps) => <TimeInput {...inputProps} />}
12
- />
13
- );
14
- };
@@ -1,232 +0,0 @@
1
- import React, { useState, useEffect, useRef, useCallback } from 'react';
2
- import { View, Text, Button } from '@idealyst/components';
3
- import { TimePickerProps } from './types';
4
- import { timePickerStyles } from './TimePicker.styles';
5
-
6
- interface TimePickerBaseProps extends TimePickerProps {
7
- renderClock: (props: {
8
- activeSelection: 'hour' | 'minute';
9
- hours: number;
10
- minutes: number;
11
- displayHours: number;
12
- mode: '12h' | '24h';
13
- disabled: boolean;
14
- onHourClick: (hour: number) => void;
15
- onMinuteClick: (minute: number) => void;
16
- }) => React.ReactNode;
17
- renderTimeInput: (props: {
18
- type: 'hour' | 'minute';
19
- value: string;
20
- onChangeText: (value: string) => void;
21
- onFocus: () => void;
22
- onBlur: () => void;
23
- isActive: boolean;
24
- disabled: boolean;
25
- inputRef: React.RefObject<any>;
26
- }) => React.ReactNode;
27
- }
28
-
29
- export const TimePickerBase: React.FC<TimePickerBaseProps> = ({
30
- value = new Date(),
31
- onChange,
32
- disabled = false,
33
- mode = '12h',
34
- step = 1,
35
- style,
36
- testID,
37
- renderClock,
38
- renderTimeInput,
39
- }) => {
40
- const [activeSelection, setActiveSelection] = useState<'hour' | 'minute'>('hour');
41
- const [hourInputValue, setHourInputValue] = useState(String(value.getHours() > 12 && mode === '12h' ? value.getHours() - 12 : value.getHours()));
42
- const [minuteInputValue, setMinuteInputValue] = useState(String(value.getMinutes()).padStart(2, '0'));
43
- const [hourInputFocused, setHourInputFocused] = useState(false);
44
- const [minuteInputFocused, setMinuteInputFocused] = useState(false);
45
- const hourInputRef = useRef<any>(null);
46
- const minuteInputRef = useRef<any>(null);
47
-
48
- const hours = value.getHours();
49
- const minutes = value.getMinutes();
50
-
51
- const displayHours = mode === '12h' ? (hours === 0 ? 12 : hours > 12 ? hours - 12 : hours) : hours;
52
- const ampm = mode === '12h' ? (hours >= 12 ? 'PM' : 'AM') : null;
53
-
54
- // Sync input values when time changes from external sources (like clock clicks)
55
- // Only update if the input is not currently focused
56
- useEffect(() => {
57
- if (!hourInputFocused) {
58
- setHourInputValue(String(displayHours));
59
- }
60
- if (!minuteInputFocused) {
61
- setMinuteInputValue(String(minutes).padStart(2, '0'));
62
- }
63
- }, [displayHours, minutes, hourInputFocused, minuteInputFocused]);
64
-
65
- const updateTime = useCallback((newHours: number, newMinutes: number) => {
66
- const newDate = new Date(value);
67
- newDate.setHours(newHours, newMinutes, 0);
68
- onChange(newDate);
69
- }, [value, onChange]);
70
-
71
- const handleHourClick = useCallback((hour: number) => {
72
- // Dismiss keyboard when interacting with clock
73
- hourInputRef.current?.blur?.();
74
- minuteInputRef.current?.blur?.();
75
-
76
- let hour24 = hour;
77
- if (mode === '12h') {
78
- const isPM = hours >= 12;
79
- if (hour === 12) hour24 = isPM ? 12 : 0;
80
- else hour24 = isPM ? hour + 12 : hour;
81
- }
82
- updateTime(hour24, minutes);
83
- setActiveSelection('minute');
84
- }, [mode, hours, minutes, updateTime]);
85
-
86
- const handleMinuteClick = useCallback((minute: number) => {
87
- // Dismiss keyboard when interacting with clock
88
- hourInputRef.current?.blur?.();
89
- minuteInputRef.current?.blur?.();
90
-
91
- updateTime(hours, minute);
92
- }, [hours, updateTime]);
93
-
94
- const toggleAmPm = useCallback(() => {
95
- if (mode === '12h') {
96
- const newHours = hours >= 12 ? hours - 12 : hours + 12;
97
- updateTime(newHours, minutes);
98
- }
99
- }, [mode, hours, minutes, updateTime]);
100
-
101
- const handleHourInputChange = useCallback((inputValue: string) => {
102
- setHourInputValue(inputValue);
103
-
104
- // Smart focus switching: if user types 2 or higher, focus on minutes
105
- if (mode === '12h' && parseInt(inputValue) >= 2 && inputValue.length >= 1) {
106
- minuteInputRef.current?.focus?.();
107
- setActiveSelection('minute');
108
- } else if (mode === '24h' && parseInt(inputValue) >= 3 && inputValue.length >= 1) {
109
- minuteInputRef.current?.focus?.();
110
- setActiveSelection('minute');
111
- }
112
-
113
- // Try to update time if value is valid
114
- const hour = parseInt(inputValue);
115
- if (!isNaN(hour) && hour >= 0) {
116
- let hour24 = hour;
117
- if (mode === '12h' && hour <= 12) {
118
- const isPM = hours >= 12;
119
- if (hour === 12) hour24 = isPM ? 12 : 0;
120
- else hour24 = isPM ? hour + 12 : hour;
121
- }
122
- if (hour24 <= 23) {
123
- updateTime(hour24, minutes);
124
- }
125
- }
126
- }, [mode, hours, minutes, updateTime]);
127
-
128
- const handleHourInputFocus = useCallback(() => {
129
- setHourInputFocused(true);
130
- setActiveSelection('hour');
131
- }, []);
132
-
133
- const handleHourInputBlur = useCallback(() => {
134
- setHourInputFocused(false);
135
- // Handle 0 -> 12 conversion for 12h mode
136
- const hour = parseInt(hourInputValue);
137
- if (!isNaN(hour)) {
138
- let hour24 = hour;
139
- if (mode === '12h') {
140
- const isPM = hours >= 12;
141
- if (hour === 0) hour24 = isPM ? 12 : 0;
142
- else if (hour <= 12) hour24 = isPM ? (hour === 12 ? 12 : hour + 12) : (hour === 12 ? 0 : hour);
143
- }
144
- if (hour24 <= 23) {
145
- updateTime(hour24, minutes);
146
- }
147
- }
148
- setHourInputValue(String(displayHours));
149
- }, [hourInputValue, mode, hours, minutes, displayHours, updateTime]);
150
-
151
- const handleMinuteInputChange = useCallback((inputValue: string) => {
152
- setMinuteInputValue(inputValue);
153
-
154
- // Try to update time if value is valid
155
- const minute = parseInt(inputValue);
156
- if (!isNaN(minute) && minute >= 0 && minute <= 59) {
157
- updateTime(hours, minute);
158
- }
159
-
160
- // Auto-focus hour input if user deletes and field becomes empty
161
- if (inputValue === '') {
162
- hourInputRef.current?.focus?.();
163
- setActiveSelection('hour');
164
- }
165
- }, [hours, updateTime]);
166
-
167
- const handleMinuteInputFocus = useCallback(() => {
168
- setMinuteInputFocused(true);
169
- setActiveSelection('minute');
170
- }, []);
171
-
172
- const handleMinuteInputBlur = useCallback(() => {
173
- setMinuteInputFocused(false);
174
- setMinuteInputValue(String(minutes).padStart(2, '0'));
175
- }, [minutes]);
176
-
177
- return (
178
- <View style={[timePickerStyles.container, style]} testID={testID} data-testid={testID}>
179
- {/* Clock face */}
180
- {renderClock({
181
- activeSelection,
182
- hours,
183
- minutes,
184
- displayHours,
185
- mode,
186
- disabled,
187
- onHourClick: handleHourClick,
188
- onMinuteClick: handleMinuteClick,
189
- })}
190
-
191
- {/* Digital time display */}
192
- <View style={timePickerStyles.timeInputRow}>
193
- {renderTimeInput({
194
- type: 'hour',
195
- value: hourInputValue,
196
- onChangeText: handleHourInputChange,
197
- onFocus: handleHourInputFocus,
198
- onBlur: handleHourInputBlur,
199
- isActive: activeSelection === 'hour',
200
- disabled,
201
- inputRef: hourInputRef,
202
- })}
203
-
204
- <Text style={timePickerStyles.timeSeparator}>:</Text>
205
-
206
- {renderTimeInput({
207
- type: 'minute',
208
- value: minuteInputValue,
209
- onChangeText: handleMinuteInputChange,
210
- onFocus: handleMinuteInputFocus,
211
- onBlur: handleMinuteInputBlur,
212
- isActive: activeSelection === 'minute',
213
- disabled,
214
- inputRef: minuteInputRef,
215
- })}
216
-
217
-
218
- {mode === '12h' && ampm && (
219
- <Button
220
- variant="outlined"
221
- size="sm"
222
- onPress={toggleAmPm}
223
- disabled={disabled}
224
- style={timePickerStyles.ampmButton}
225
- >
226
- {ampm}
227
- </Button>
228
- )}
229
- </View>
230
- </View>
231
- );
232
- };
@@ -1,3 +0,0 @@
1
- export { default as DateTimePicker } from './DateTimePicker.native';
2
- export { TimePicker } from './TimePicker.native';
3
- export * from './types';
@@ -1,3 +0,0 @@
1
- export { default as DateTimePicker } from './DateTimePicker';
2
- export { TimePicker } from './TimePicker';
3
- export * from './types';