@dreamstack-us/kaal 0.0.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/lib/module/components/CalendarGrid/CalendarGrid.js +112 -0
  2. package/lib/module/components/CalendarGrid/CalendarGrid.js.map +1 -0
  3. package/lib/module/components/CalendarGrid/CalendarGrid.styles.js +46 -0
  4. package/lib/module/components/CalendarGrid/CalendarGrid.styles.js.map +1 -0
  5. package/lib/module/components/CalendarGrid/DayCell.js +96 -0
  6. package/lib/module/components/CalendarGrid/DayCell.js.map +1 -0
  7. package/lib/module/components/CalendarGrid/index.js +4 -0
  8. package/lib/module/components/CalendarGrid/index.js.map +1 -0
  9. package/lib/module/components/DatePicker/DatePicker.android.js +66 -0
  10. package/lib/module/components/DatePicker/DatePicker.android.js.map +1 -0
  11. package/lib/module/components/DatePicker/DatePicker.ios.js +74 -0
  12. package/lib/module/components/DatePicker/DatePicker.ios.js.map +1 -0
  13. package/lib/module/components/DatePicker/DatePicker.js +9 -0
  14. package/lib/module/components/DatePicker/DatePicker.js.map +1 -0
  15. package/lib/module/components/DatePicker/DatePicker.styles.js +35 -0
  16. package/lib/module/components/DatePicker/DatePicker.styles.js.map +1 -0
  17. package/lib/module/components/DatePicker/DatePicker.web.js +32 -0
  18. package/lib/module/components/DatePicker/DatePicker.web.js.map +1 -0
  19. package/lib/module/components/DatePicker/index.js +4 -0
  20. package/lib/module/components/DatePicker/index.js.map +1 -0
  21. package/lib/module/components/TimePicker/ClockFace.js +194 -0
  22. package/lib/module/components/TimePicker/ClockFace.js.map +1 -0
  23. package/lib/module/components/TimePicker/MaterialTimePicker.js +122 -0
  24. package/lib/module/components/TimePicker/MaterialTimePicker.js.map +1 -0
  25. package/lib/module/components/TimePicker/TimePicker.android.js +77 -0
  26. package/lib/module/components/TimePicker/TimePicker.android.js.map +1 -0
  27. package/lib/module/components/TimePicker/TimePicker.ios.js +83 -0
  28. package/lib/module/components/TimePicker/TimePicker.ios.js.map +1 -0
  29. package/lib/module/components/TimePicker/TimePicker.js +34 -0
  30. package/lib/module/components/TimePicker/TimePicker.js.map +1 -0
  31. package/lib/module/components/TimePicker/TimePicker.styles.js +180 -0
  32. package/lib/module/components/TimePicker/TimePicker.styles.js.map +1 -0
  33. package/lib/module/components/TimePicker/TimePicker.web.js +37 -0
  34. package/lib/module/components/TimePicker/TimePicker.web.js.map +1 -0
  35. package/lib/module/components/TimePicker/TimeWheelPicker.js +178 -0
  36. package/lib/module/components/TimePicker/TimeWheelPicker.js.map +1 -0
  37. package/lib/module/components/TimePicker/index.js +7 -0
  38. package/lib/module/components/TimePicker/index.js.map +1 -0
  39. package/lib/module/components/WheelPicker/WheelPicker.js +5 -0
  40. package/lib/module/components/WheelPicker/WheelPicker.js.map +1 -0
  41. package/lib/module/components/WheelPicker/WheelPicker.styles.js +41 -0
  42. package/lib/module/components/WheelPicker/WheelPicker.styles.js.map +1 -0
  43. package/lib/module/components/WheelPicker/WheelPicker.web.js +190 -0
  44. package/lib/module/components/WheelPicker/WheelPicker.web.js.map +1 -0
  45. package/lib/module/components/WheelPicker/index.js +4 -0
  46. package/lib/module/components/WheelPicker/index.js.map +1 -0
  47. package/lib/module/components/index.js +7 -0
  48. package/lib/module/components/index.js.map +1 -0
  49. package/lib/module/hooks/index.js +6 -0
  50. package/lib/module/hooks/index.js.map +1 -0
  51. package/lib/module/hooks/useCalendar.js +44 -0
  52. package/lib/module/hooks/useCalendar.js.map +1 -0
  53. package/lib/module/hooks/useDatePicker.js +30 -0
  54. package/lib/module/hooks/useDatePicker.js.map +1 -0
  55. package/lib/module/hooks/useTimePicker.js +125 -0
  56. package/lib/module/hooks/useTimePicker.js.map +1 -0
  57. package/lib/module/index.js +22 -0
  58. package/lib/module/index.js.map +1 -0
  59. package/lib/module/types/datepicker.js +2 -0
  60. package/lib/module/types/datepicker.js.map +1 -0
  61. package/lib/module/types/index.js +5 -0
  62. package/lib/module/types/index.js.map +1 -0
  63. package/lib/module/types/timepicker.js +2 -0
  64. package/lib/module/types/timepicker.js.map +1 -0
  65. package/lib/module/unistyles.js +9 -0
  66. package/lib/module/unistyles.js.map +1 -0
  67. package/lib/module/utils/date.js +205 -0
  68. package/lib/module/utils/date.js.map +1 -0
  69. package/lib/module/utils/index.js +5 -0
  70. package/lib/module/utils/index.js.map +1 -0
  71. package/lib/module/utils/validation.js +61 -0
  72. package/lib/module/utils/validation.js.map +1 -0
  73. package/lib/typescript/components/CalendarGrid/CalendarGrid.d.ts +12 -0
  74. package/lib/typescript/components/CalendarGrid/CalendarGrid.d.ts.map +1 -0
  75. package/lib/typescript/components/CalendarGrid/CalendarGrid.styles.d.ts +45 -0
  76. package/lib/typescript/components/CalendarGrid/CalendarGrid.styles.d.ts.map +1 -0
  77. package/lib/typescript/components/CalendarGrid/DayCell.d.ts +12 -0
  78. package/lib/typescript/components/CalendarGrid/DayCell.d.ts.map +1 -0
  79. package/lib/typescript/components/CalendarGrid/index.d.ts +2 -0
  80. package/lib/typescript/components/CalendarGrid/index.d.ts.map +1 -0
  81. package/lib/typescript/components/DatePicker/DatePicker.android.d.ts +4 -0
  82. package/lib/typescript/components/DatePicker/DatePicker.android.d.ts.map +1 -0
  83. package/lib/typescript/components/DatePicker/DatePicker.d.ts +15 -0
  84. package/lib/typescript/components/DatePicker/DatePicker.d.ts.map +1 -0
  85. package/lib/typescript/components/DatePicker/DatePicker.ios.d.ts +4 -0
  86. package/lib/typescript/components/DatePicker/DatePicker.ios.d.ts.map +1 -0
  87. package/lib/typescript/components/DatePicker/DatePicker.styles.d.ts +29 -0
  88. package/lib/typescript/components/DatePicker/DatePicker.styles.d.ts.map +1 -0
  89. package/lib/typescript/components/DatePicker/DatePicker.web.d.ts +4 -0
  90. package/lib/typescript/components/DatePicker/DatePicker.web.d.ts.map +1 -0
  91. package/lib/typescript/components/DatePicker/index.d.ts +3 -0
  92. package/lib/typescript/components/DatePicker/index.d.ts.map +1 -0
  93. package/lib/typescript/components/TimePicker/ClockFace.d.ts +12 -0
  94. package/lib/typescript/components/TimePicker/ClockFace.d.ts.map +1 -0
  95. package/lib/typescript/components/TimePicker/MaterialTimePicker.d.ts +12 -0
  96. package/lib/typescript/components/TimePicker/MaterialTimePicker.d.ts.map +1 -0
  97. package/lib/typescript/components/TimePicker/TimePicker.android.d.ts +4 -0
  98. package/lib/typescript/components/TimePicker/TimePicker.android.d.ts.map +1 -0
  99. package/lib/typescript/components/TimePicker/TimePicker.d.ts +29 -0
  100. package/lib/typescript/components/TimePicker/TimePicker.d.ts.map +1 -0
  101. package/lib/typescript/components/TimePicker/TimePicker.ios.d.ts +4 -0
  102. package/lib/typescript/components/TimePicker/TimePicker.ios.d.ts.map +1 -0
  103. package/lib/typescript/components/TimePicker/TimePicker.styles.d.ts +168 -0
  104. package/lib/typescript/components/TimePicker/TimePicker.styles.d.ts.map +1 -0
  105. package/lib/typescript/components/TimePicker/TimePicker.web.d.ts +10 -0
  106. package/lib/typescript/components/TimePicker/TimePicker.web.d.ts.map +1 -0
  107. package/lib/typescript/components/TimePicker/TimeWheelPicker.d.ts +11 -0
  108. package/lib/typescript/components/TimePicker/TimeWheelPicker.d.ts.map +1 -0
  109. package/lib/typescript/components/TimePicker/index.d.ts +6 -0
  110. package/lib/typescript/components/TimePicker/index.d.ts.map +1 -0
  111. package/lib/typescript/components/WheelPicker/WheelPicker.d.ts +2 -0
  112. package/lib/typescript/components/WheelPicker/WheelPicker.d.ts.map +1 -0
  113. package/lib/typescript/components/WheelPicker/WheelPicker.styles.d.ts +40 -0
  114. package/lib/typescript/components/WheelPicker/WheelPicker.styles.d.ts.map +1 -0
  115. package/lib/typescript/components/WheelPicker/WheelPicker.web.d.ts +10 -0
  116. package/lib/typescript/components/WheelPicker/WheelPicker.web.d.ts.map +1 -0
  117. package/lib/typescript/components/WheelPicker/index.d.ts +2 -0
  118. package/lib/typescript/components/WheelPicker/index.d.ts.map +1 -0
  119. package/lib/typescript/components/index.d.ts +5 -0
  120. package/lib/typescript/components/index.d.ts.map +1 -0
  121. package/lib/typescript/hooks/index.d.ts +4 -0
  122. package/lib/typescript/hooks/index.d.ts.map +1 -0
  123. package/lib/typescript/hooks/useCalendar.d.ts +10 -0
  124. package/lib/typescript/hooks/useCalendar.d.ts.map +1 -0
  125. package/lib/typescript/hooks/useDatePicker.d.ts +15 -0
  126. package/lib/typescript/hooks/useDatePicker.d.ts.map +1 -0
  127. package/lib/typescript/hooks/useTimePicker.d.ts +52 -0
  128. package/lib/typescript/hooks/useTimePicker.d.ts.map +1 -0
  129. package/lib/typescript/index.d.ts +12 -0
  130. package/lib/typescript/index.d.ts.map +1 -0
  131. package/lib/typescript/types/datepicker.d.ts +15 -0
  132. package/lib/typescript/types/datepicker.d.ts.map +1 -0
  133. package/lib/typescript/types/index.d.ts +3 -0
  134. package/lib/typescript/types/index.d.ts.map +1 -0
  135. package/lib/typescript/types/timepicker.d.ts +54 -0
  136. package/lib/typescript/types/timepicker.d.ts.map +1 -0
  137. package/lib/typescript/unistyles.d.ts +3 -0
  138. package/lib/typescript/unistyles.d.ts.map +1 -0
  139. package/lib/typescript/utils/date.d.ts +94 -0
  140. package/lib/typescript/utils/date.d.ts.map +1 -0
  141. package/lib/typescript/utils/index.d.ts +3 -0
  142. package/lib/typescript/utils/index.d.ts.map +1 -0
  143. package/lib/typescript/utils/validation.d.ts +40 -0
  144. package/lib/typescript/utils/validation.d.ts.map +1 -0
  145. package/package.json +101 -0
  146. package/src/components/CalendarGrid/CalendarGrid.styles.ts +44 -0
  147. package/src/components/CalendarGrid/CalendarGrid.tsx +151 -0
  148. package/src/components/CalendarGrid/DayCell.tsx +108 -0
  149. package/src/components/CalendarGrid/index.ts +1 -0
  150. package/src/components/DatePicker/DatePicker.android.tsx +69 -0
  151. package/src/components/DatePicker/DatePicker.ios.tsx +78 -0
  152. package/src/components/DatePicker/DatePicker.styles.ts +35 -0
  153. package/src/components/DatePicker/DatePicker.tsx +21 -0
  154. package/src/components/DatePicker/DatePicker.web.tsx +36 -0
  155. package/src/components/DatePicker/index.ts +2 -0
  156. package/src/components/TimePicker/ClockFace.tsx +233 -0
  157. package/src/components/TimePicker/MaterialTimePicker.tsx +169 -0
  158. package/src/components/TimePicker/TimePicker.android.tsx +80 -0
  159. package/src/components/TimePicker/TimePicker.ios.tsx +88 -0
  160. package/src/components/TimePicker/TimePicker.styles.ts +209 -0
  161. package/src/components/TimePicker/TimePicker.tsx +35 -0
  162. package/src/components/TimePicker/TimePicker.web.tsx +35 -0
  163. package/src/components/TimePicker/TimeWheelPicker.tsx +211 -0
  164. package/src/components/TimePicker/index.ts +5 -0
  165. package/src/components/WheelPicker/WheelPicker.styles.ts +39 -0
  166. package/src/components/WheelPicker/WheelPicker.tsx +2 -0
  167. package/src/components/WheelPicker/WheelPicker.web.tsx +237 -0
  168. package/src/components/WheelPicker/index.ts +1 -0
  169. package/src/components/index.ts +11 -0
  170. package/src/hooks/index.ts +9 -0
  171. package/src/hooks/useCalendar.ts +59 -0
  172. package/src/hooks/useDatePicker.ts +40 -0
  173. package/src/hooks/useTimePicker.ts +152 -0
  174. package/src/index.ts +77 -0
  175. package/src/types/datepicker.ts +17 -0
  176. package/src/types/index.ts +2 -0
  177. package/src/types/timepicker.ts +59 -0
  178. package/src/unistyles.ts +6 -0
  179. package/src/utils/date.ts +217 -0
  180. package/src/utils/index.ts +2 -0
  181. package/src/utils/validation.ts +76 -0
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback, useMemo } from 'react';
4
+ import { View } from 'react-native';
5
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
6
+ import { runOnJS } from 'react-native-reanimated';
7
+ import Svg, { Circle, G, Line, Text as SvgText } from 'react-native-svg';
8
+ import { to12Hour, to24Hour } from "../../hooks/useTimePicker.js";
9
+ import { styles } from "./TimePicker.styles.js";
10
+
11
+ // Clock dimensions
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ const CLOCK_SIZE = 256;
14
+ const CLOCK_CENTER = CLOCK_SIZE / 2;
15
+ const OUTER_RADIUS = 96;
16
+ const SELECTION_DOT_RADIUS = 20;
17
+ const CENTER_DOT_RADIUS = 4;
18
+
19
+ // Hour positions (12 at top, clockwise)
20
+ const HOURS_12 = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
21
+ const MINUTE_LABELS = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];
22
+
23
+ /**
24
+ * Converts clock position (0-11 for hours, 0-59 for minutes) to angle in degrees
25
+ * 12 o'clock is at -90 degrees (top)
26
+ */
27
+ const positionToAngle = (position, isMinutes = false) => {
28
+ if (isMinutes) {
29
+ return position * 6 - 90; // 360/60 = 6 degrees per minute
30
+ }
31
+ return position * 30 - 90; // 360/12 = 30 degrees per position
32
+ };
33
+
34
+ /**
35
+ * Gets x,y coordinates on circle from angle and radius
36
+ */
37
+ const getPointOnCircle = (angleDegrees, radius) => {
38
+ const rad = angleDegrees * Math.PI / 180;
39
+ return {
40
+ x: CLOCK_CENTER + radius * Math.cos(rad),
41
+ y: CLOCK_CENTER + radius * Math.sin(rad)
42
+ };
43
+ };
44
+ export const ClockFace = /*#__PURE__*/memo(({
45
+ value,
46
+ onChange,
47
+ mode,
48
+ onModeChange,
49
+ is24Hour = false
50
+ }) => {
51
+ const {
52
+ hour: hour12,
53
+ period
54
+ } = to12Hour(value.hours);
55
+
56
+ // Calculate hand end position based on current value
57
+ const handAngle = useMemo(() => {
58
+ if (mode === 'hours') {
59
+ const hourIndex = HOURS_12.indexOf(hour12);
60
+ return positionToAngle(hourIndex >= 0 ? hourIndex : 0);
61
+ }
62
+ return positionToAngle(value.minutes, true);
63
+ }, [mode, hour12, value.minutes]);
64
+ const handEndPos = getPointOnCircle(handAngle, OUTER_RADIUS);
65
+ const handleInteraction = useCallback((x, y) => {
66
+ // Convert touch coordinates to angle
67
+ const dx = x - CLOCK_CENTER;
68
+ const dy = y - CLOCK_CENTER;
69
+ const angle = Math.atan2(dy, dx) * (180 / Math.PI);
70
+
71
+ // Normalize angle to 0-360, with 0 at top (12 o'clock)
72
+ const normalized = ((angle + 90) % 360 + 360) % 360;
73
+ if (mode === 'hours') {
74
+ // Round to nearest hour position
75
+ const position = Math.round(normalized / 30) % 12;
76
+ const hour = HOURS_12[position];
77
+ if (hour !== undefined) {
78
+ const newHours = to24Hour(hour, period);
79
+ onChange({
80
+ hours: newHours,
81
+ minutes: value.minutes
82
+ });
83
+ }
84
+ } else {
85
+ // Round to nearest minute
86
+ const minutes = Math.round(normalized / 6) % 60;
87
+ onChange({
88
+ hours: value.hours,
89
+ minutes
90
+ });
91
+ }
92
+ }, [mode, period, value, onChange]);
93
+ const handleInteractionEnd = useCallback(() => {
94
+ // Switch to minutes mode after selecting hours
95
+ if (mode === 'hours' && onModeChange) {
96
+ // Small delay for visual feedback
97
+ setTimeout(() => onModeChange('minutes'), 200);
98
+ }
99
+ }, [mode, onModeChange]);
100
+ const panGesture = useMemo(() => Gesture.Pan().onStart(e => {
101
+ 'worklet';
102
+
103
+ runOnJS(handleInteraction)(e.x, e.y);
104
+ }).onUpdate(e => {
105
+ 'worklet';
106
+
107
+ runOnJS(handleInteraction)(e.x, e.y);
108
+ }).onEnd(() => {
109
+ 'worklet';
110
+
111
+ runOnJS(handleInteractionEnd)();
112
+ }), [handleInteraction, handleInteractionEnd]);
113
+ const tapGesture = useMemo(() => Gesture.Tap().onEnd(e => {
114
+ 'worklet';
115
+
116
+ runOnJS(handleInteraction)(e.x, e.y);
117
+ runOnJS(handleInteractionEnd)();
118
+ }), [handleInteraction, handleInteractionEnd]);
119
+ const combinedGesture = Gesture.Race(panGesture, tapGesture);
120
+
121
+ // Render clock numbers
122
+ const numbers = useMemo(() => {
123
+ if (mode === 'hours') {
124
+ return HOURS_12.map((hour, index) => {
125
+ const angle = positionToAngle(index);
126
+ const pos = getPointOnCircle(angle, OUTER_RADIUS);
127
+ const isSelected = hour12 === hour;
128
+ return /*#__PURE__*/_jsx(SvgText, {
129
+ x: pos.x,
130
+ y: pos.y,
131
+ textAnchor: "middle",
132
+ alignmentBaseline: "central",
133
+ fontSize: 14,
134
+ fontWeight: isSelected ? '500' : '400',
135
+ fill: isSelected ? '#FFFFFF' : '#E6E1E5',
136
+ children: hour
137
+ }, hour);
138
+ });
139
+ }
140
+ return MINUTE_LABELS.map((minute, index) => {
141
+ const angle = positionToAngle(index);
142
+ const pos = getPointOnCircle(angle, OUTER_RADIUS);
143
+ const isSelected = value.minutes === minute;
144
+ return /*#__PURE__*/_jsx(SvgText, {
145
+ x: pos.x,
146
+ y: pos.y,
147
+ textAnchor: "middle",
148
+ alignmentBaseline: "central",
149
+ fontSize: 14,
150
+ fontWeight: isSelected ? '500' : '400',
151
+ fill: isSelected ? '#FFFFFF' : '#E6E1E5',
152
+ children: minute.toString().padStart(2, '0')
153
+ }, minute);
154
+ });
155
+ }, [mode, hour12, value.minutes]);
156
+ return /*#__PURE__*/_jsx(View, {
157
+ style: styles.clockContainer,
158
+ children: /*#__PURE__*/_jsx(GestureDetector, {
159
+ gesture: combinedGesture,
160
+ children: /*#__PURE__*/_jsxs(Svg, {
161
+ width: CLOCK_SIZE,
162
+ height: CLOCK_SIZE,
163
+ viewBox: `0 0 ${CLOCK_SIZE} ${CLOCK_SIZE}`,
164
+ children: [/*#__PURE__*/_jsx(Circle, {
165
+ cx: CLOCK_CENTER,
166
+ cy: CLOCK_CENTER,
167
+ r: CLOCK_SIZE / 2 - 4,
168
+ fill: "#3F384C"
169
+ }), /*#__PURE__*/_jsx(Circle, {
170
+ cx: handEndPos.x,
171
+ cy: handEndPos.y,
172
+ r: SELECTION_DOT_RADIUS,
173
+ fill: "#4DA6FF"
174
+ }), /*#__PURE__*/_jsx(Line, {
175
+ x1: CLOCK_CENTER,
176
+ y1: CLOCK_CENTER,
177
+ x2: handEndPos.x,
178
+ y2: handEndPos.y,
179
+ stroke: "#4DA6FF",
180
+ strokeWidth: 2
181
+ }), /*#__PURE__*/_jsx(Circle, {
182
+ cx: CLOCK_CENTER,
183
+ cy: CLOCK_CENTER,
184
+ r: CENTER_DOT_RADIUS,
185
+ fill: "#4DA6FF"
186
+ }), /*#__PURE__*/_jsx(G, {
187
+ children: numbers
188
+ })]
189
+ })
190
+ })
191
+ });
192
+ });
193
+ ClockFace.displayName = 'ClockFace';
194
+ //# sourceMappingURL=ClockFace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","useMemo","View","Gesture","GestureDetector","runOnJS","Svg","Circle","G","Line","Text","SvgText","to12Hour","to24Hour","styles","jsx","_jsx","jsxs","_jsxs","CLOCK_SIZE","CLOCK_CENTER","OUTER_RADIUS","SELECTION_DOT_RADIUS","CENTER_DOT_RADIUS","HOURS_12","MINUTE_LABELS","positionToAngle","position","isMinutes","getPointOnCircle","angleDegrees","radius","rad","Math","PI","x","cos","y","sin","ClockFace","value","onChange","mode","onModeChange","is24Hour","hour","hour12","period","hours","handAngle","hourIndex","indexOf","minutes","handEndPos","handleInteraction","dx","dy","angle","atan2","normalized","round","undefined","newHours","handleInteractionEnd","setTimeout","panGesture","Pan","onStart","e","onUpdate","onEnd","tapGesture","Tap","combinedGesture","Race","numbers","map","index","pos","isSelected","textAnchor","alignmentBaseline","fontSize","fontWeight","fill","children","minute","toString","padStart","style","clockContainer","gesture","width","height","viewBox","cx","cy","r","x1","y1","x2","y2","stroke","strokeWidth","displayName"],"sourceRoot":"../../../../src","sources":["components/TimePicker/ClockFace.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback, useState } from 'react';
4
+ import { Pressable, Text, View } from 'react-native';
5
+ import { to12Hour, to24Hour } from "../../hooks/useTimePicker.js";
6
+ import { ClockFace } from "./ClockFace.js";
7
+ import { styles } from "./TimePicker.styles.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ export const MaterialTimePicker = /*#__PURE__*/memo(({
10
+ value,
11
+ onChange,
12
+ is24Hour = false,
13
+ onCancel,
14
+ onConfirm
15
+ }) => {
16
+ const [mode, setMode] = useState('hours');
17
+ const {
18
+ hour: hour12,
19
+ period
20
+ } = to12Hour(value.hours);
21
+ const handleHourPress = useCallback(() => {
22
+ setMode('hours');
23
+ }, []);
24
+ const handleMinutePress = useCallback(() => {
25
+ setMode('minutes');
26
+ }, []);
27
+ const handlePeriodChange = useCallback(newPeriod => {
28
+ const newHours = to24Hour(hour12, newPeriod);
29
+ onChange({
30
+ hours: newHours,
31
+ minutes: value.minutes
32
+ });
33
+ }, [hour12, value.minutes, onChange]);
34
+ const handleModeChange = useCallback(newMode => {
35
+ setMode(newMode);
36
+ }, []);
37
+
38
+ // Format display values
39
+ const displayHour = is24Hour ? value.hours.toString().padStart(2, '0') : hour12.toString().padStart(2, '0');
40
+ const displayMinute = value.minutes.toString().padStart(2, '0');
41
+ return /*#__PURE__*/_jsxs(View, {
42
+ style: styles.materialContainer,
43
+ children: [/*#__PURE__*/_jsx(Text, {
44
+ style: styles.materialHeader,
45
+ children: "Select time"
46
+ }), /*#__PURE__*/_jsxs(View, {
47
+ style: styles.timeInputContainer,
48
+ children: [/*#__PURE__*/_jsxs(View, {
49
+ style: styles.timeFieldsContainer,
50
+ children: [/*#__PURE__*/_jsx(Pressable, {
51
+ onPress: handleHourPress,
52
+ style: [styles.timeField, mode === 'hours' && styles.timeFieldActive],
53
+ children: /*#__PURE__*/_jsx(Text, {
54
+ style: [styles.timeFieldText, mode === 'hours' && styles.timeFieldTextActive],
55
+ children: displayHour
56
+ })
57
+ }), /*#__PURE__*/_jsx(Text, {
58
+ style: styles.timeSeparator,
59
+ children: ":"
60
+ }), /*#__PURE__*/_jsx(Pressable, {
61
+ onPress: handleMinutePress,
62
+ style: [styles.timeField, mode === 'minutes' && styles.timeFieldActive],
63
+ children: /*#__PURE__*/_jsx(Text, {
64
+ style: [styles.timeFieldText, mode === 'minutes' && styles.timeFieldTextActive],
65
+ children: displayMinute
66
+ })
67
+ })]
68
+ }), !is24Hour && /*#__PURE__*/_jsxs(View, {
69
+ style: styles.periodToggleContainer,
70
+ children: [/*#__PURE__*/_jsx(Pressable, {
71
+ onPress: () => handlePeriodChange('AM'),
72
+ style: [styles.periodButton, styles.periodButtonTop, period === 'AM' && styles.periodButtonActive],
73
+ children: /*#__PURE__*/_jsx(Text, {
74
+ style: [styles.periodButtonText, period === 'AM' && styles.periodButtonTextActive],
75
+ children: "AM"
76
+ })
77
+ }), /*#__PURE__*/_jsx(Pressable, {
78
+ onPress: () => handlePeriodChange('PM'),
79
+ style: [styles.periodButton, period === 'PM' && styles.periodButtonActive],
80
+ children: /*#__PURE__*/_jsx(Text, {
81
+ style: [styles.periodButtonText, period === 'PM' && styles.periodButtonTextActive],
82
+ children: "PM"
83
+ })
84
+ })]
85
+ })]
86
+ }), /*#__PURE__*/_jsx(ClockFace, {
87
+ value: value,
88
+ onChange: onChange,
89
+ mode: mode,
90
+ onModeChange: handleModeChange,
91
+ is24Hour: is24Hour
92
+ }), /*#__PURE__*/_jsxs(View, {
93
+ style: styles.actionsContainer,
94
+ children: [/*#__PURE__*/_jsx(Pressable, {
95
+ style: styles.keyboardButton,
96
+ children: /*#__PURE__*/_jsx(Text, {
97
+ style: styles.keyboardButtonText,
98
+ children: "\u2328\uFE0F"
99
+ })
100
+ }), /*#__PURE__*/_jsxs(View, {
101
+ style: styles.actionButtonsContainer,
102
+ children: [onCancel && /*#__PURE__*/_jsx(Pressable, {
103
+ style: styles.actionButton,
104
+ onPress: onCancel,
105
+ children: /*#__PURE__*/_jsx(Text, {
106
+ style: styles.actionButtonText,
107
+ children: "Cancel"
108
+ })
109
+ }), onConfirm && /*#__PURE__*/_jsx(Pressable, {
110
+ style: styles.actionButton,
111
+ onPress: onConfirm,
112
+ children: /*#__PURE__*/_jsx(Text, {
113
+ style: styles.actionButtonText,
114
+ children: "OK"
115
+ })
116
+ })]
117
+ })]
118
+ })]
119
+ });
120
+ });
121
+ MaterialTimePicker.displayName = 'MaterialTimePicker';
122
+ //# sourceMappingURL=MaterialTimePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","useState","Pressable","Text","View","to12Hour","to24Hour","ClockFace","styles","jsx","_jsx","jsxs","_jsxs","MaterialTimePicker","value","onChange","is24Hour","onCancel","onConfirm","mode","setMode","hour","hour12","period","hours","handleHourPress","handleMinutePress","handlePeriodChange","newPeriod","newHours","minutes","handleModeChange","newMode","displayHour","toString","padStart","displayMinute","style","materialContainer","children","materialHeader","timeInputContainer","timeFieldsContainer","onPress","timeField","timeFieldActive","timeFieldText","timeFieldTextActive","timeSeparator","periodToggleContainer","periodButton","periodButtonTop","periodButtonActive","periodButtonText","periodButtonTextActive","onModeChange","actionsContainer","keyboardButton","keyboardButtonText","actionButtonsContainer","actionButton","actionButtonText","displayName"],"sourceRoot":"../../../../src","sources":["components/TimePicker/MaterialTimePicker.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ import React, { Suspense, useCallback } from 'react';
4
+ import { ActivityIndicator, View } from 'react-native';
5
+ import { MaterialTimePicker } from "./MaterialTimePicker.js";
6
+ import { styles } from "./TimePicker.styles.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ // @ts-expect-error - React.lazy fallback returns null when @expo/ui unavailable
9
+ const ExpoTimePicker = /*#__PURE__*/React.lazy(async () => {
10
+ try {
11
+ // @ts-expect-error - @expo/ui types not available
12
+ const {
13
+ DateTimePicker
14
+ } = await import('@expo/ui/jetpack-compose');
15
+ return {
16
+ default: ({
17
+ value,
18
+ onChange,
19
+ is24Hour
20
+ }) => {
21
+ // Create a Date object for the picker
22
+ const date = new Date();
23
+ date.setHours(value.hours, value.minutes, 0, 0);
24
+ const handleChange = newDate => {
25
+ onChange({
26
+ hours: newDate.getHours(),
27
+ minutes: newDate.getMinutes()
28
+ });
29
+ };
30
+ return /*#__PURE__*/_jsx(DateTimePicker, {
31
+ onDateSelected: handleChange,
32
+ displayedComponents: "hourAndMinute",
33
+ initialDate: date.toISOString(),
34
+ variant: "picker"
35
+ });
36
+ }
37
+ };
38
+ } catch {
39
+ // Fallback when @expo/ui is not available
40
+ return {
41
+ default: _props => null
42
+ };
43
+ }
44
+ });
45
+ export const TimePicker = ({
46
+ value,
47
+ onChange,
48
+ theme = 'native',
49
+ is24Hour = false
50
+ }) => {
51
+ const handleTimeChange = useCallback(time => {
52
+ onChange(time);
53
+ }, [onChange]);
54
+
55
+ // Use native Android picker for 'native' theme
56
+ if (theme === 'native') {
57
+ return /*#__PURE__*/_jsx(View, {
58
+ style: styles.container,
59
+ children: /*#__PURE__*/_jsx(Suspense, {
60
+ fallback: /*#__PURE__*/_jsx(ActivityIndicator, {}),
61
+ children: /*#__PURE__*/_jsx(ExpoTimePicker, {
62
+ value: value,
63
+ onChange: handleTimeChange,
64
+ is24Hour: is24Hour
65
+ })
66
+ })
67
+ });
68
+ }
69
+
70
+ // Use Material-style picker for 'android' or 'ios' themes
71
+ return /*#__PURE__*/_jsx(MaterialTimePicker, {
72
+ value: value,
73
+ onChange: onChange,
74
+ is24Hour: is24Hour
75
+ });
76
+ };
77
+ //# sourceMappingURL=TimePicker.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Suspense","useCallback","ActivityIndicator","View","MaterialTimePicker","styles","jsx","_jsx","ExpoTimePicker","lazy","DateTimePicker","default","value","onChange","is24Hour","date","Date","setHours","hours","minutes","handleChange","newDate","getHours","getMinutes","onDateSelected","displayedComponents","initialDate","toISOString","variant","_props","TimePicker","theme","handleTimeChange","time","style","container","children","fallback"],"sourceRoot":"../../../../src","sources":["components/TimePicker/TimePicker.android.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,WAAW,QAAQ,OAAO;AACpD,SAASC,iBAAiB,EAAEC,IAAI,QAAQ,cAAc;AAEtD,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,MAAM,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQ7C;AACA,MAAMC,cAAc,gBAAGT,KAAK,CAACU,IAAI,CAAC,YAAY;EAC5C,IAAI;IACF;IACA,MAAM;MAAEC;IAAe,CAAC,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC;IAEnE,OAAO;MACLC,OAAO,EAAEA,CAAC;QAAEC,KAAK;QAAEC,QAAQ;QAAEC;MAA8B,CAAC,KAAK;QAC/D;QACA,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAAC;QACvBD,IAAI,CAACE,QAAQ,CAACL,KAAK,CAACM,KAAK,EAAEN,KAAK,CAACO,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAMC,YAAY,GAAIC,OAAa,IAAK;UACtCR,QAAQ,CAAC;YACPK,KAAK,EAAEG,OAAO,CAACC,QAAQ,CAAC,CAAC;YACzBH,OAAO,EAAEE,OAAO,CAACE,UAAU,CAAC;UAC9B,CAAC,CAAC;QACJ,CAAC;QAED,oBACEhB,IAAA,CAACG,cAAc;UACbc,cAAc,EAAEJ,YAAa;UAC7BK,mBAAmB,EAAC,eAAe;UACnCC,WAAW,EAAEX,IAAI,CAACY,WAAW,CAAC,CAAE;UAChCC,OAAO,EAAC;QAAQ,CACjB,CAAC;MAEN;IACF,CAAC;EACH,CAAC,CAAC,MAAM;IACN;IACA,OAAO;MAAEjB,OAAO,EAAGkB,MAA2B,IAAK;IAAK,CAAC;EAC3D;AACF,CAAC,CAAC;AAEF,OAAO,MAAMC,UAAqC,GAAGA,CAAC;EACpDlB,KAAK;EACLC,QAAQ;EACRkB,KAAK,GAAG,QAAQ;EAChBjB,QAAQ,GAAG;AACb,CAAC,KAAK;EACJ,MAAMkB,gBAAgB,GAAG/B,WAAW,CACjCgC,IAAe,IAAK;IACnBpB,QAAQ,CAACoB,IAAI,CAAC;EAChB,CAAC,EACD,CAACpB,QAAQ,CACX,CAAC;;EAED;EACA,IAAIkB,KAAK,KAAK,QAAQ,EAAE;IACtB,oBACExB,IAAA,CAACJ,IAAI;MAAC+B,KAAK,EAAE7B,MAAM,CAAC8B,SAAU;MAAAC,QAAA,eAC5B7B,IAAA,CAACP,QAAQ;QAACqC,QAAQ,eAAE9B,IAAA,CAACL,iBAAiB,IAAE,CAAE;QAAAkC,QAAA,eACxC7B,IAAA,CAACC,cAAc;UACbI,KAAK,EAAEA,KAAM;UACbC,QAAQ,EAAEmB,gBAAiB;UAC3BlB,QAAQ,EAAEA;QAAS,CACpB;MAAC,CACM;IAAC,CACP,CAAC;EAEX;;EAEA;EACA,oBACEP,IAAA,CAACH,kBAAkB;IAACQ,KAAK,EAAEA,KAAM;IAACC,QAAQ,EAAEA,QAAS;IAACC,QAAQ,EAAEA;EAAS,CAAE,CAAC;AAEhF,CAAC","ignoreList":[]}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ import React, { Suspense, useCallback } from 'react';
4
+ import { ActivityIndicator, View } from 'react-native';
5
+ import { styles } from "./TimePicker.styles.js";
6
+ import { TimeWheelPicker } from "./TimeWheelPicker.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ // @ts-expect-error - React.lazy fallback returns null when @expo/ui unavailable
9
+ const ExpoTimePicker = /*#__PURE__*/React.lazy(async () => {
10
+ try {
11
+ // @ts-expect-error - @expo/ui types not available
12
+ const {
13
+ DateTimePicker,
14
+ Host
15
+ } = await import('@expo/ui/swift-ui');
16
+ return {
17
+ default: ({
18
+ value,
19
+ onChange,
20
+ is24Hour
21
+ }) => {
22
+ // Create a Date object for the picker
23
+ const date = new Date();
24
+ date.setHours(value.hours, value.minutes, 0, 0);
25
+ const handleChange = newDate => {
26
+ onChange({
27
+ hours: newDate.getHours(),
28
+ minutes: newDate.getMinutes()
29
+ });
30
+ };
31
+ return /*#__PURE__*/_jsx(Host, {
32
+ matchContents: true,
33
+ children: /*#__PURE__*/_jsx(DateTimePicker, {
34
+ onDateSelected: handleChange,
35
+ displayedComponents: "hourAndMinute",
36
+ initialDate: date.toISOString(),
37
+ variant: "wheel"
38
+ })
39
+ });
40
+ }
41
+ };
42
+ } catch {
43
+ // Fallback when @expo/ui is not available
44
+ return {
45
+ default: _props => null
46
+ };
47
+ }
48
+ });
49
+ export const TimePicker = ({
50
+ value,
51
+ onChange,
52
+ theme = 'native',
53
+ is24Hour = false,
54
+ minuteInterval = 1
55
+ }) => {
56
+ const handleTimeChange = useCallback(time => {
57
+ onChange(time);
58
+ }, [onChange]);
59
+
60
+ // Use native iOS picker for 'native' or 'ios' theme
61
+ if (theme === 'native' || theme === 'ios') {
62
+ return /*#__PURE__*/_jsx(View, {
63
+ style: styles.container,
64
+ children: /*#__PURE__*/_jsx(Suspense, {
65
+ fallback: /*#__PURE__*/_jsx(ActivityIndicator, {}),
66
+ children: /*#__PURE__*/_jsx(ExpoTimePicker, {
67
+ value: value,
68
+ onChange: handleTimeChange,
69
+ is24Hour: is24Hour
70
+ })
71
+ })
72
+ });
73
+ }
74
+
75
+ // Fallback to wheel picker for other themes
76
+ return /*#__PURE__*/_jsx(TimeWheelPicker, {
77
+ value: value,
78
+ onChange: onChange,
79
+ is24Hour: is24Hour,
80
+ minuteInterval: minuteInterval
81
+ });
82
+ };
83
+ //# sourceMappingURL=TimePicker.ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Suspense","useCallback","ActivityIndicator","View","styles","TimeWheelPicker","jsx","_jsx","ExpoTimePicker","lazy","DateTimePicker","Host","default","value","onChange","is24Hour","date","Date","setHours","hours","minutes","handleChange","newDate","getHours","getMinutes","matchContents","children","onDateSelected","displayedComponents","initialDate","toISOString","variant","_props","TimePicker","theme","minuteInterval","handleTimeChange","time","style","container","fallback"],"sourceRoot":"../../../../src","sources":["components/TimePicker/TimePicker.ios.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,WAAW,QAAQ,OAAO;AACpD,SAASC,iBAAiB,EAAEC,IAAI,QAAQ,cAAc;AAEtD,SAASC,MAAM,QAAQ,wBAAqB;AAC5C,SAASC,eAAe,QAAQ,sBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpD;AACA,MAAMC,cAAc,gBAAGT,KAAK,CAACU,IAAI,CAAC,YAAY;EAC5C,IAAI;IACF;IACA,MAAM;MAAEC,cAAc;MAAEC;IAAK,CAAC,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC;IAElE,OAAO;MACLC,OAAO,EAAEA,CAAC;QAAEC,KAAK;QAAEC,QAAQ;QAAEC;MAA8B,CAAC,KAAK;QAC/D;QACA,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAAC,CAAC;QACvBD,IAAI,CAACE,QAAQ,CAACL,KAAK,CAACM,KAAK,EAAEN,KAAK,CAACO,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAE/C,MAAMC,YAAY,GAAIC,OAAa,IAAK;UACtCR,QAAQ,CAAC;YACPK,KAAK,EAAEG,OAAO,CAACC,QAAQ,CAAC,CAAC;YACzBH,OAAO,EAAEE,OAAO,CAACE,UAAU,CAAC;UAC9B,CAAC,CAAC;QACJ,CAAC;QAED,oBACEjB,IAAA,CAACI,IAAI;UAACc,aAAa;UAAAC,QAAA,eACjBnB,IAAA,CAACG,cAAc;YACbiB,cAAc,EAAEN,YAAa;YAC7BO,mBAAmB,EAAC,eAAe;YACnCC,WAAW,EAAEb,IAAI,CAACc,WAAW,CAAC,CAAE;YAChCC,OAAO,EAAC;UAAO,CAChB;QAAC,CACE,CAAC;MAEX;IACF,CAAC;EACH,CAAC,CAAC,MAAM;IACN;IACA,OAAO;MAAEnB,OAAO,EAAGoB,MAA2B,IAAK;IAAK,CAAC;EAC3D;AACF,CAAC,CAAC;AAEF,OAAO,MAAMC,UAAqC,GAAGA,CAAC;EACpDpB,KAAK;EACLC,QAAQ;EACRoB,KAAK,GAAG,QAAQ;EAChBnB,QAAQ,GAAG,KAAK;EAChBoB,cAAc,GAAG;AACnB,CAAC,KAAK;EACJ,MAAMC,gBAAgB,GAAGnC,WAAW,CACjCoC,IAAe,IAAK;IACnBvB,QAAQ,CAACuB,IAAI,CAAC;EAChB,CAAC,EACD,CAACvB,QAAQ,CACX,CAAC;;EAED;EACA,IAAIoB,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,KAAK,EAAE;IACzC,oBACE3B,IAAA,CAACJ,IAAI;MAACmC,KAAK,EAAElC,MAAM,CAACmC,SAAU;MAAAb,QAAA,eAC5BnB,IAAA,CAACP,QAAQ;QAACwC,QAAQ,eAAEjC,IAAA,CAACL,iBAAiB,IAAE,CAAE;QAAAwB,QAAA,eACxCnB,IAAA,CAACC,cAAc;UACbK,KAAK,EAAEA,KAAM;UACbC,QAAQ,EAAEsB,gBAAiB;UAC3BrB,QAAQ,EAAEA;QAAS,CACpB;MAAC,CACM;IAAC,CACP,CAAC;EAEX;;EAEA;EACA,oBACER,IAAA,CAACF,eAAe;IACdQ,KAAK,EAAEA,KAAM;IACbC,QAAQ,EAAEA,QAAS;IACnBC,QAAQ,EAAEA,QAAS;IACnBoB,cAAc,EAAEA;EAAe,CAChC,CAAC;AAEN,CAAC","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ // Re-export types for convenience
4
+
5
+ /**
6
+ * TimePicker Component
7
+ *
8
+ * A cross-platform time picker with support for iOS wheel style and Material clock face.
9
+ *
10
+ * Platform-specific implementations are handled by Metro's file resolution:
11
+ * - iOS: Uses @expo/ui DateTimePicker in time mode, falls back to TimeWheelPicker
12
+ * - Android: Uses @expo/ui DateTimePicker or MaterialTimePicker with ClockFace
13
+ * - Web: TimeWheelPicker for iOS theme, MaterialTimePicker for Android theme
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * import { TimePicker } from '@dreamstack-us/kaal';
18
+ *
19
+ * const [time, setTime] = useState({ hours: 9, minutes: 30 });
20
+ *
21
+ * <TimePicker
22
+ * value={time}
23
+ * onChange={setTime}
24
+ * theme="ios"
25
+ * is24Hour={false}
26
+ * />
27
+ * ```
28
+ */
29
+ export const TimePicker = _props => {
30
+ // This file serves as type definition and fallback
31
+ // Metro resolves platform-specific files (.ios.tsx, .android.tsx, .web.tsx)
32
+ return null;
33
+ };
34
+ //# sourceMappingURL=TimePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TimePicker","_props"],"sourceRoot":"../../../../src","sources":["components/TimePicker/TimePicker.tsx"],"mappings":";;AAGA;;AAGA;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,UAAqC,GAAIC,MAAM,IAAK;EAC/D;EACA;EACA,OAAO,IAAI;AACb,CAAC","ignoreList":[]}