@compsych-ui-components/react-native 7.0.5 → 7.0.9

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 (101) hide show
  1. package/package.json +3 -7
  2. package/src/components/ActionSheet/index.d.ts +10 -1
  3. package/src/components/ActionSheet/index.js +59 -28
  4. package/src/components/ActionSheet/index.js.map +1 -1
  5. package/src/components/BodyText/index.d.ts +1 -0
  6. package/src/components/BodyText/index.js.map +1 -1
  7. package/src/components/Button/index.d.ts +1 -1
  8. package/src/components/Button/index.js +57 -37
  9. package/src/components/Button/index.js.map +1 -1
  10. package/src/components/ChatBubble/index.js +16 -14
  11. package/src/components/ChatBubble/index.js.map +1 -1
  12. package/src/components/ChatInput/index.d.ts +3 -1
  13. package/src/components/ChatInput/index.js +105 -98
  14. package/src/components/ChatInput/index.js.map +1 -1
  15. package/src/components/Checkbox/index.js.map +1 -1
  16. package/src/components/DateTimePicker/index.d.ts +16 -0
  17. package/src/components/DateTimePicker/index.js +587 -0
  18. package/src/components/DateTimePicker/index.js.map +1 -0
  19. package/src/components/Input/index.js +2 -3
  20. package/src/components/Input/index.js.map +1 -1
  21. package/src/components/Pagination/index.js.map +1 -1
  22. package/src/components/RadioButton/index.js.map +1 -1
  23. package/src/components/ScreenContainer/index.d.ts +2 -0
  24. package/src/components/ScreenContainer/index.js +2 -2
  25. package/src/components/ScreenContainer/index.js.map +1 -1
  26. package/src/components/SegmentedControl/index.d.ts +3 -3
  27. package/src/components/SegmentedControl/index.js +27 -40
  28. package/src/components/SegmentedControl/index.js.map +1 -1
  29. package/src/components/SelectionCard/index.js +12 -9
  30. package/src/components/SelectionCard/index.js.map +1 -1
  31. package/src/components/ServiceCard/index.js +141 -47
  32. package/src/components/ServiceCard/index.js.map +1 -1
  33. package/src/components/StatusChip/index.d.ts +15 -0
  34. package/src/components/StatusChip/index.js +80 -0
  35. package/src/components/StatusChip/index.js.map +1 -0
  36. package/src/icons/index.d.ts +8 -21
  37. package/src/icons/index.js +12 -92
  38. package/src/icons/index.js.map +1 -1
  39. package/src/icons/types.d.ts +3 -1
  40. package/src/icons/types.js +4 -4
  41. package/src/icons/types.js.map +1 -1
  42. package/src/index.d.ts +6 -5
  43. package/src/index.js +16 -60
  44. package/src/index.js.map +1 -1
  45. package/src/components/PromotionCard/index.d.ts +0 -23
  46. package/src/components/PromotionCard/index.js +0 -514
  47. package/src/components/PromotionCard/index.js.map +0 -1
  48. package/src/icons/AtomIcon.d.ts +0 -2
  49. package/src/icons/AtomIcon.js +0 -85
  50. package/src/icons/AtomIcon.js.map +0 -1
  51. package/src/icons/BinocularsIcon.d.ts +0 -2
  52. package/src/icons/BinocularsIcon.js +0 -103
  53. package/src/icons/BinocularsIcon.js.map +0 -1
  54. package/src/icons/FileChartColumnIncreasingIcon.d.ts +0 -2
  55. package/src/icons/FileChartColumnIncreasingIcon.js +0 -97
  56. package/src/icons/FileChartColumnIncreasingIcon.js.map +0 -1
  57. package/src/icons/FlagIcon.d.ts +0 -2
  58. package/src/icons/FlagIcon.js +0 -71
  59. package/src/icons/FlagIcon.js.map +0 -1
  60. package/src/icons/GlobeIcon.d.ts +0 -2
  61. package/src/icons/GlobeIcon.js +0 -71
  62. package/src/icons/GlobeIcon.js.map +0 -1
  63. package/src/icons/GraduationCapIcon.d.ts +0 -2
  64. package/src/icons/GraduationCapIcon.js +0 -85
  65. package/src/icons/GraduationCapIcon.js.map +0 -1
  66. package/src/icons/HandHeartIcon.d.ts +0 -2
  67. package/src/icons/HandHeartIcon.js +0 -91
  68. package/src/icons/HandHeartIcon.js.map +0 -1
  69. package/src/icons/HandshakeIcon.d.ts +0 -2
  70. package/src/icons/HandshakeIcon.js +0 -97
  71. package/src/icons/HandshakeIcon.js.map +0 -1
  72. package/src/icons/HazeIcon.d.ts +0 -2
  73. package/src/icons/HazeIcon.js +0 -115
  74. package/src/icons/HazeIcon.js.map +0 -1
  75. package/src/icons/HeartHandshakeIcon.d.ts +0 -2
  76. package/src/icons/HeartHandshakeIcon.js +0 -71
  77. package/src/icons/HeartHandshakeIcon.js.map +0 -1
  78. package/src/icons/HourglassIcon.d.ts +0 -2
  79. package/src/icons/HourglassIcon.js +0 -91
  80. package/src/icons/HourglassIcon.js.map +0 -1
  81. package/src/icons/IdCardIcon.d.ts +0 -2
  82. package/src/icons/IdCardIcon.js +0 -97
  83. package/src/icons/IdCardIcon.js.map +0 -1
  84. package/src/icons/MessageCirclePlusIcon.d.ts +0 -2
  85. package/src/icons/MessageCirclePlusIcon.js +0 -85
  86. package/src/icons/MessageCirclePlusIcon.js.map +0 -1
  87. package/src/icons/MountainSnowIcon.d.ts +0 -2
  88. package/src/icons/MountainSnowIcon.js +0 -79
  89. package/src/icons/MountainSnowIcon.js.map +0 -1
  90. package/src/icons/SnowflakeIcon.d.ts +0 -2
  91. package/src/icons/SnowflakeIcon.js +0 -139
  92. package/src/icons/SnowflakeIcon.js.map +0 -1
  93. package/src/icons/StethoscopeIcon.d.ts +0 -2
  94. package/src/icons/StethoscopeIcon.js +0 -97
  95. package/src/icons/StethoscopeIcon.js.map +0 -1
  96. package/src/icons/UserRoundIcon.d.ts +0 -2
  97. package/src/icons/UserRoundIcon.js +0 -79
  98. package/src/icons/UserRoundIcon.js.map +0 -1
  99. package/src/icons/WheatIcon.d.ts +0 -2
  100. package/src/icons/WheatIcon.js +0 -115
  101. package/src/icons/WheatIcon.js.map +0 -1
@@ -0,0 +1,587 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "DateTimePicker", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return DateTimePicker;
9
+ }
10
+ });
11
+ const _jsxruntime = require("react/jsx-runtime");
12
+ const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
13
+ const _reactnative = require("react-native");
14
+ const _icons = require("../../icons");
15
+ const _theme = require("../../theme");
16
+ function _getRequireWildcardCache(nodeInterop) {
17
+ if (typeof WeakMap !== "function") return null;
18
+ var cacheBabelInterop = new WeakMap();
19
+ var cacheNodeInterop = new WeakMap();
20
+ return (_getRequireWildcardCache = function(nodeInterop) {
21
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
22
+ })(nodeInterop);
23
+ }
24
+ function _interop_require_wildcard(obj, nodeInterop) {
25
+ if (!nodeInterop && obj && obj.__esModule) {
26
+ return obj;
27
+ }
28
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
29
+ return {
30
+ default: obj
31
+ };
32
+ }
33
+ var cache = _getRequireWildcardCache(nodeInterop);
34
+ if (cache && cache.has(obj)) {
35
+ return cache.get(obj);
36
+ }
37
+ var newObj = {
38
+ __proto__: null
39
+ };
40
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
41
+ for(var key in obj){
42
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
43
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
44
+ if (desc && (desc.get || desc.set)) {
45
+ Object.defineProperty(newObj, key, desc);
46
+ } else {
47
+ newObj[key] = obj[key];
48
+ }
49
+ }
50
+ }
51
+ newObj.default = obj;
52
+ if (cache) {
53
+ cache.set(obj, newObj);
54
+ }
55
+ return newObj;
56
+ }
57
+ const DAY_HEADERS = [
58
+ 'SUN',
59
+ 'MON',
60
+ 'TUE',
61
+ 'WED',
62
+ 'THU',
63
+ 'FRI',
64
+ 'SAT'
65
+ ];
66
+ function toLocalDateString(date) {
67
+ const y = date.getFullYear();
68
+ const m = String(date.getMonth() + 1).padStart(2, '0');
69
+ const d = String(date.getDate()).padStart(2, '0');
70
+ return `${y}-${m}-${d}`;
71
+ }
72
+ function addMonths(date, count) {
73
+ const result = new Date(date.getFullYear(), date.getMonth() + count, 1);
74
+ return result;
75
+ }
76
+ function DateTimePicker({ selectedDate, onSelectDate, selectedTime, onSelectTime, availableTimes, availableTimeLabel, availableDates, maxMonthsAhead = 1, languageLabel, timezoneLabel }) {
77
+ const { colorRoles: cr } = (0, _theme.useTheme)();
78
+ const LanguagesIcon = (0, _icons.resolveIcon)('Languages');
79
+ const GlobeIcon = (0, _icons.resolveIcon)('Globe');
80
+ const today = (0, _react.useMemo)(()=>{
81
+ const d = new Date();
82
+ d.setHours(0, 0, 0, 0);
83
+ return d;
84
+ }, []);
85
+ const maxDate = (0, _react.useMemo)(()=>{
86
+ const d = addMonths(today, maxMonthsAhead);
87
+ // Last day of the maxMonthsAhead month
88
+ return new Date(d.getFullYear(), d.getMonth() + 1, 0);
89
+ }, [
90
+ today,
91
+ maxMonthsAhead
92
+ ]);
93
+ const [viewYear, setViewYear] = (0, _react.useState)(today.getFullYear());
94
+ const [viewMonth, setViewMonth] = (0, _react.useState)(today.getMonth());
95
+ const canGoPrev = (0, _react.useMemo)(()=>{
96
+ return viewYear > today.getFullYear() || viewMonth > today.getMonth();
97
+ }, [
98
+ viewYear,
99
+ viewMonth,
100
+ today
101
+ ]);
102
+ const canGoNext = (0, _react.useMemo)(()=>{
103
+ const maxMonth = addMonths(today, maxMonthsAhead);
104
+ return viewYear < maxMonth.getFullYear() || viewYear === maxMonth.getFullYear() && viewMonth < maxMonth.getMonth();
105
+ }, [
106
+ viewYear,
107
+ viewMonth,
108
+ today,
109
+ maxMonthsAhead
110
+ ]);
111
+ const handlePrevMonth = (0, _react.useCallback)(()=>{
112
+ if (!canGoPrev) return;
113
+ if (viewMonth === 0) {
114
+ setViewMonth(11);
115
+ setViewYear((y)=>y - 1);
116
+ } else {
117
+ setViewMonth((m)=>m - 1);
118
+ }
119
+ }, [
120
+ canGoPrev,
121
+ viewMonth
122
+ ]);
123
+ const handleNextMonth = (0, _react.useCallback)(()=>{
124
+ if (!canGoNext) return;
125
+ if (viewMonth === 11) {
126
+ setViewMonth(0);
127
+ setViewYear((y)=>y + 1);
128
+ } else {
129
+ setViewMonth((m)=>m + 1);
130
+ }
131
+ }, [
132
+ canGoNext,
133
+ viewMonth
134
+ ]);
135
+ const monthLabel = (0, _react.useMemo)(()=>{
136
+ const d = new Date(viewYear, viewMonth, 1);
137
+ return d.toLocaleString('default', {
138
+ month: 'long',
139
+ year: 'numeric'
140
+ });
141
+ }, [
142
+ viewYear,
143
+ viewMonth
144
+ ]);
145
+ // Build calendar grid
146
+ const calendarDays = (0, _react.useMemo)(()=>{
147
+ const firstDay = new Date(viewYear, viewMonth, 1).getDay();
148
+ const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();
149
+ const cells = [];
150
+ for(let i = 0; i < firstDay; i++)cells.push(null);
151
+ for(let d = 1; d <= daysInMonth; d++)cells.push(d);
152
+ // Pad to complete last row
153
+ while(cells.length % 7 !== 0)cells.push(null);
154
+ return cells;
155
+ }, [
156
+ viewYear,
157
+ viewMonth
158
+ ]);
159
+ const availableDatesSet = (0, _react.useMemo)(()=>availableDates ? new Set(availableDates) : null, [
160
+ availableDates
161
+ ]);
162
+ const isDisabled = (0, _react.useCallback)((day)=>{
163
+ const d = new Date(viewYear, viewMonth, day);
164
+ d.setHours(0, 0, 0, 0);
165
+ if (d < today || d > maxDate) return true;
166
+ if (availableDatesSet) {
167
+ const dateStr = toLocalDateString(d);
168
+ return !availableDatesSet.has(dateStr);
169
+ }
170
+ return false;
171
+ }, [
172
+ viewYear,
173
+ viewMonth,
174
+ today,
175
+ maxDate,
176
+ availableDatesSet
177
+ ]);
178
+ const isSelected = (0, _react.useCallback)((day)=>{
179
+ const d = new Date(viewYear, viewMonth, day);
180
+ return toLocalDateString(d) === selectedDate;
181
+ }, [
182
+ viewYear,
183
+ viewMonth,
184
+ selectedDate
185
+ ]);
186
+ const handleDayPress = (0, _react.useCallback)((day)=>{
187
+ if (isDisabled(day)) return;
188
+ const d = new Date(viewYear, viewMonth, day);
189
+ onSelectDate(toLocalDateString(d));
190
+ }, [
191
+ viewYear,
192
+ viewMonth,
193
+ isDisabled,
194
+ onSelectDate
195
+ ]);
196
+ const sysPrimary = cr.accent.primary.sysPrimary;
197
+ const sysOutline = cr.outline.sysOutline;
198
+ const sysOnSurface = cr.surface.surface.sysOnSurface;
199
+ const sysOnSurfaceVariant = cr.surface.surface.sysOnSurfaceVariant;
200
+ const sysSurfaceContainerHighest = cr.surface.surfaceContainer.sysSurfaceContainerHighest;
201
+ const prevChevron = _reactnative.I18nManager.isRTL ? '>' : '<';
202
+ const nextChevron = _reactnative.I18nManager.isRTL ? '<' : '>';
203
+ const weeks = [];
204
+ for(let i = 0; i < calendarDays.length; i += 7){
205
+ weeks.push(calendarDays.slice(i, i + 7));
206
+ }
207
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
208
+ testID: "calendar-picker",
209
+ style: [
210
+ styles.card,
211
+ {
212
+ borderColor: sysOutline,
213
+ backgroundColor: '#FFFFFF'
214
+ }
215
+ ],
216
+ children: [
217
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
218
+ style: styles.calendarSection,
219
+ children: [
220
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
221
+ style: styles.monthNavRow,
222
+ children: [
223
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
224
+ testID: "calendar-prev-button",
225
+ onPress: handlePrevMonth,
226
+ style: [
227
+ styles.navButton,
228
+ !canGoPrev && styles.navButtonDisabled
229
+ ],
230
+ disabled: !canGoPrev,
231
+ accessibilityRole: "button",
232
+ accessibilityLabel: "Previous month",
233
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
234
+ style: [
235
+ styles.navChevron,
236
+ {
237
+ color: canGoPrev ? sysOnSurface : sysOnSurfaceVariant
238
+ }
239
+ ],
240
+ children: prevChevron
241
+ })
242
+ }),
243
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
244
+ testID: "calendar-month-label",
245
+ style: [
246
+ styles.monthLabel,
247
+ {
248
+ color: sysOnSurface
249
+ }
250
+ ],
251
+ children: monthLabel
252
+ }),
253
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
254
+ testID: "calendar-next-button",
255
+ onPress: handleNextMonth,
256
+ style: [
257
+ styles.navButton,
258
+ !canGoNext && styles.navButtonDisabled
259
+ ],
260
+ disabled: !canGoNext,
261
+ accessibilityRole: "button",
262
+ accessibilityLabel: "Next month",
263
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
264
+ style: [
265
+ styles.navChevron,
266
+ {
267
+ color: canGoNext ? sysOnSurface : sysOnSurfaceVariant
268
+ }
269
+ ],
270
+ children: nextChevron
271
+ })
272
+ })
273
+ ]
274
+ }),
275
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
276
+ style: styles.weekRow,
277
+ children: DAY_HEADERS.map((h)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
278
+ style: styles.dayCell,
279
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
280
+ testID: `day-header-${h}`,
281
+ style: [
282
+ styles.dayHeader,
283
+ {
284
+ color: sysOnSurfaceVariant
285
+ }
286
+ ],
287
+ children: h
288
+ })
289
+ }, h))
290
+ }),
291
+ weeks.map((week, wi)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
292
+ style: styles.weekRow,
293
+ children: week.map((day, di)=>{
294
+ if (day === null) {
295
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
296
+ style: styles.dayCell
297
+ }, `empty-${di}`);
298
+ }
299
+ const disabled = isDisabled(day);
300
+ const selected = isSelected(day);
301
+ const cellStyle = [
302
+ styles.dayCellInner,
303
+ !disabled && !selected && {
304
+ backgroundColor: sysSurfaceContainerHighest
305
+ },
306
+ selected && {
307
+ backgroundColor: '#FFFFFF',
308
+ borderColor: sysPrimary,
309
+ borderWidth: 2
310
+ },
311
+ disabled && styles.dayCellDisabled
312
+ ];
313
+ const textStyle = [
314
+ styles.dayText,
315
+ {
316
+ color: selected ? sysPrimary : sysOnSurface
317
+ }
318
+ ];
319
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
320
+ testID: `calendar-day-${day}`,
321
+ style: styles.dayCell,
322
+ onPress: ()=>handleDayPress(day),
323
+ disabled: disabled,
324
+ accessibilityRole: "button",
325
+ accessibilityLabel: `Day ${day}`,
326
+ accessibilityState: {
327
+ disabled,
328
+ selected
329
+ },
330
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
331
+ style: cellStyle,
332
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
333
+ style: textStyle,
334
+ children: day
335
+ })
336
+ })
337
+ }, day);
338
+ })
339
+ }, wi))
340
+ ]
341
+ }),
342
+ selectedDate != null && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
343
+ children: [
344
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
345
+ style: [
346
+ styles.divider,
347
+ {
348
+ backgroundColor: sysOutline
349
+ }
350
+ ]
351
+ }),
352
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
353
+ style: styles.timeSection,
354
+ children: [
355
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
356
+ testID: "available-time-label",
357
+ style: [
358
+ styles.availableTimeLabel,
359
+ {
360
+ color: sysOnSurface
361
+ }
362
+ ],
363
+ children: availableTimeLabel
364
+ }),
365
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.ScrollView, {
366
+ testID: "time-slot-list",
367
+ style: styles.timeList,
368
+ contentContainerStyle: styles.timeListContent,
369
+ showsVerticalScrollIndicator: false,
370
+ children: availableTimes.map((slot)=>{
371
+ const slotTestId = `time-slot-${slot.replace(/[: ]/g, '-')}`;
372
+ const slotSelected = slot === selectedTime;
373
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
374
+ testID: slotTestId,
375
+ onPress: ()=>onSelectTime(slot),
376
+ accessibilityRole: "button",
377
+ accessibilityState: {
378
+ selected: slotSelected
379
+ },
380
+ style: [
381
+ styles.timeSlot,
382
+ {
383
+ borderColor: slotSelected ? sysPrimary : sysOutline,
384
+ borderWidth: slotSelected ? 2 : 1.5,
385
+ backgroundColor: '#FFFFFF'
386
+ },
387
+ slotSelected && {
388
+ shadowColor: sysPrimary,
389
+ shadowOffset: {
390
+ width: 1,
391
+ height: 2
392
+ },
393
+ shadowOpacity: 1,
394
+ shadowRadius: 0,
395
+ elevation: 2
396
+ }
397
+ ],
398
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
399
+ style: [
400
+ styles.timeSlotText,
401
+ {
402
+ color: slotSelected ? sysPrimary : sysOnSurface
403
+ }
404
+ ],
405
+ children: slot
406
+ })
407
+ }, slot);
408
+ })
409
+ })
410
+ ]
411
+ })
412
+ ]
413
+ }),
414
+ (languageLabel || timezoneLabel) && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
415
+ children: [
416
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
417
+ style: [
418
+ styles.divider,
419
+ {
420
+ backgroundColor: sysOutline
421
+ }
422
+ ]
423
+ }),
424
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
425
+ style: styles.infoRow,
426
+ testID: "calendar-info-row",
427
+ children: [
428
+ languageLabel && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
429
+ style: styles.infoItem,
430
+ testID: "calendar-language-info",
431
+ children: [
432
+ LanguagesIcon && /*#__PURE__*/ (0, _jsxruntime.jsx)(LanguagesIcon, {
433
+ size: 16,
434
+ color: sysOnSurfaceVariant
435
+ }),
436
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
437
+ style: [
438
+ styles.infoText,
439
+ {
440
+ color: sysOnSurfaceVariant
441
+ }
442
+ ],
443
+ children: languageLabel
444
+ })
445
+ ]
446
+ }),
447
+ timezoneLabel && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
448
+ style: styles.infoItem,
449
+ testID: "calendar-timezone-info",
450
+ children: [
451
+ GlobeIcon && /*#__PURE__*/ (0, _jsxruntime.jsx)(GlobeIcon, {
452
+ size: 16,
453
+ color: sysOnSurfaceVariant
454
+ }),
455
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
456
+ style: [
457
+ styles.infoText,
458
+ {
459
+ color: sysOnSurfaceVariant
460
+ }
461
+ ],
462
+ children: timezoneLabel
463
+ })
464
+ ]
465
+ })
466
+ ]
467
+ })
468
+ ]
469
+ })
470
+ ]
471
+ });
472
+ }
473
+ const styles = _reactnative.StyleSheet.create({
474
+ card: {
475
+ borderRadius: 16,
476
+ borderWidth: 1,
477
+ overflow: 'hidden'
478
+ },
479
+ calendarSection: {
480
+ paddingHorizontal: 8,
481
+ paddingVertical: 16
482
+ },
483
+ monthNavRow: {
484
+ flexDirection: 'row',
485
+ alignItems: 'center',
486
+ justifyContent: 'space-between',
487
+ marginBottom: 8
488
+ },
489
+ navButton: {
490
+ padding: 8,
491
+ alignItems: 'center',
492
+ justifyContent: 'center'
493
+ },
494
+ navButtonDisabled: {
495
+ opacity: 0.3
496
+ },
497
+ navChevron: {
498
+ fontSize: 18,
499
+ fontWeight: '600'
500
+ },
501
+ monthLabel: {
502
+ fontSize: 16,
503
+ fontWeight: '600',
504
+ textAlign: 'center',
505
+ flex: 1
506
+ },
507
+ weekRow: {
508
+ flexDirection: 'row'
509
+ },
510
+ dayCell: {
511
+ flex: 1,
512
+ aspectRatio: 1,
513
+ alignItems: 'center',
514
+ justifyContent: 'center'
515
+ },
516
+ dayHeader: {
517
+ fontSize: 10,
518
+ fontWeight: '500',
519
+ textAlign: 'center'
520
+ },
521
+ dayCellInner: {
522
+ width: '80%',
523
+ aspectRatio: 1,
524
+ borderRadius: 100,
525
+ alignItems: 'center',
526
+ justifyContent: 'center',
527
+ backgroundColor: 'transparent',
528
+ borderWidth: 0,
529
+ borderColor: 'transparent'
530
+ },
531
+ dayCellDisabled: {
532
+ opacity: 0.3
533
+ },
534
+ dayText: {
535
+ fontSize: 13,
536
+ fontWeight: '500',
537
+ textAlign: 'center'
538
+ },
539
+ divider: {
540
+ height: 1,
541
+ width: '100%'
542
+ },
543
+ timeSection: {
544
+ padding: 16
545
+ },
546
+ availableTimeLabel: {
547
+ fontSize: 14,
548
+ fontWeight: '500',
549
+ textAlign: 'center',
550
+ marginBottom: 12
551
+ },
552
+ timeList: {
553
+ maxHeight: 200
554
+ },
555
+ timeListContent: {
556
+ gap: 8
557
+ },
558
+ timeSlot: {
559
+ borderRadius: 12,
560
+ paddingVertical: 12,
561
+ paddingHorizontal: 16,
562
+ alignItems: 'center',
563
+ justifyContent: 'center'
564
+ },
565
+ timeSlotText: {
566
+ fontSize: 14,
567
+ textAlign: 'center'
568
+ },
569
+ infoRow: {
570
+ flexDirection: 'row',
571
+ alignItems: 'center',
572
+ gap: 16,
573
+ paddingHorizontal: 16,
574
+ paddingVertical: 12
575
+ },
576
+ infoItem: {
577
+ flexDirection: 'row',
578
+ alignItems: 'center',
579
+ gap: 6
580
+ },
581
+ infoText: {
582
+ fontSize: 13,
583
+ fontWeight: '500'
584
+ }
585
+ });
586
+
587
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../packages/react-native/src/components/DateTimePicker/index.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\r\n\r\nimport {\r\n I18nManager,\r\n Pressable,\r\n ScrollView,\r\n StyleSheet,\r\n Text,\r\n View,\r\n} from 'react-native';\r\n\r\nimport { resolveIcon } from '../../icons';\r\nimport { useTheme } from '../../theme';\r\n\r\nexport interface DateTimePickerProps {\r\n selectedDate: string | null;\r\n onSelectDate: (date: string) => void;\r\n selectedTime: string | null;\r\n onSelectTime: (time: string) => void;\r\n availableTimes: string[];\r\n availableTimeLabel: string;\r\n availableDates?: string[];\r\n maxMonthsAhead?: number;\r\n /** Display-only label for the user's current language, e.g. \"English\". Not interactive. */\r\n languageLabel?: string;\r\n /** Display-only label for the user's current timezone, e.g. \"America/Chicago\". Not interactive. */\r\n timezoneLabel?: string;\r\n}\r\n\r\nconst DAY_HEADERS = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'];\r\n\r\nfunction toLocalDateString(date: Date): string {\r\n const y = date.getFullYear();\r\n const m = String(date.getMonth() + 1).padStart(2, '0');\r\n const d = String(date.getDate()).padStart(2, '0');\r\n return `${y}-${m}-${d}`;\r\n}\r\n\r\nfunction addMonths(date: Date, count: number): Date {\r\n const result = new Date(date.getFullYear(), date.getMonth() + count, 1);\r\n return result;\r\n}\r\n\r\nexport function DateTimePicker({\r\n selectedDate,\r\n onSelectDate,\r\n selectedTime,\r\n onSelectTime,\r\n availableTimes,\r\n availableTimeLabel,\r\n availableDates,\r\n maxMonthsAhead = 1,\r\n languageLabel,\r\n timezoneLabel,\r\n}: DateTimePickerProps) {\r\n const { colorRoles: cr } = useTheme();\r\n\r\n const LanguagesIcon = resolveIcon('Languages');\r\n const GlobeIcon = resolveIcon('Globe');\r\n\r\n const today = useMemo(() => {\r\n const d = new Date();\r\n d.setHours(0, 0, 0, 0);\r\n return d;\r\n }, []);\r\n\r\n const maxDate = useMemo(() => {\r\n const d = addMonths(today, maxMonthsAhead);\r\n // Last day of the maxMonthsAhead month\r\n return new Date(d.getFullYear(), d.getMonth() + 1, 0);\r\n }, [today, maxMonthsAhead]);\r\n\r\n const [viewYear, setViewYear] = useState(today.getFullYear());\r\n const [viewMonth, setViewMonth] = useState(today.getMonth());\r\n\r\n const canGoPrev = useMemo(() => {\r\n return viewYear > today.getFullYear() || viewMonth > today.getMonth();\r\n }, [viewYear, viewMonth, today]);\r\n\r\n const canGoNext = useMemo(() => {\r\n const maxMonth = addMonths(today, maxMonthsAhead);\r\n return (\r\n viewYear < maxMonth.getFullYear() ||\r\n (viewYear === maxMonth.getFullYear() && viewMonth < maxMonth.getMonth())\r\n );\r\n }, [viewYear, viewMonth, today, maxMonthsAhead]);\r\n\r\n const handlePrevMonth = useCallback(() => {\r\n if (!canGoPrev) return;\r\n if (viewMonth === 0) {\r\n setViewMonth(11);\r\n setViewYear((y) => y - 1);\r\n } else {\r\n setViewMonth((m) => m - 1);\r\n }\r\n }, [canGoPrev, viewMonth]);\r\n\r\n const handleNextMonth = useCallback(() => {\r\n if (!canGoNext) return;\r\n if (viewMonth === 11) {\r\n setViewMonth(0);\r\n setViewYear((y) => y + 1);\r\n } else {\r\n setViewMonth((m) => m + 1);\r\n }\r\n }, [canGoNext, viewMonth]);\r\n\r\n const monthLabel = useMemo(() => {\r\n const d = new Date(viewYear, viewMonth, 1);\r\n return d.toLocaleString('default', { month: 'long', year: 'numeric' });\r\n }, [viewYear, viewMonth]);\r\n\r\n // Build calendar grid\r\n const calendarDays = useMemo(() => {\r\n const firstDay = new Date(viewYear, viewMonth, 1).getDay();\r\n const daysInMonth = new Date(viewYear, viewMonth + 1, 0).getDate();\r\n const cells: (number | null)[] = [];\r\n for (let i = 0; i < firstDay; i++) cells.push(null);\r\n for (let d = 1; d <= daysInMonth; d++) cells.push(d);\r\n // Pad to complete last row\r\n while (cells.length % 7 !== 0) cells.push(null);\r\n return cells;\r\n }, [viewYear, viewMonth]);\r\n\r\n const availableDatesSet = useMemo(\r\n () => (availableDates ? new Set(availableDates) : null),\r\n [availableDates],\r\n );\r\n\r\n const isDisabled = useCallback(\r\n (day: number) => {\r\n const d = new Date(viewYear, viewMonth, day);\r\n d.setHours(0, 0, 0, 0);\r\n if (d < today || d > maxDate) return true;\r\n if (availableDatesSet) {\r\n const dateStr = toLocalDateString(d);\r\n return !availableDatesSet.has(dateStr);\r\n }\r\n return false;\r\n },\r\n [viewYear, viewMonth, today, maxDate, availableDatesSet],\r\n );\r\n\r\n const isSelected = useCallback(\r\n (day: number) => {\r\n const d = new Date(viewYear, viewMonth, day);\r\n return toLocalDateString(d) === selectedDate;\r\n },\r\n [viewYear, viewMonth, selectedDate],\r\n );\r\n\r\n const handleDayPress = useCallback(\r\n (day: number) => {\r\n if (isDisabled(day)) return;\r\n const d = new Date(viewYear, viewMonth, day);\r\n onSelectDate(toLocalDateString(d));\r\n },\r\n [viewYear, viewMonth, isDisabled, onSelectDate],\r\n );\r\n\r\n const sysPrimary = cr.accent.primary.sysPrimary;\r\n const sysOutline = cr.outline.sysOutline;\r\n const sysOnSurface = cr.surface.surface.sysOnSurface;\r\n const sysOnSurfaceVariant = cr.surface.surface.sysOnSurfaceVariant;\r\n const sysSurfaceContainerHighest =\r\n cr.surface.surfaceContainer.sysSurfaceContainerHighest;\r\n\r\n const prevChevron = I18nManager.isRTL ? '>' : '<';\r\n const nextChevron = I18nManager.isRTL ? '<' : '>';\r\n\r\n const weeks: (number | null)[][] = [];\r\n for (let i = 0; i < calendarDays.length; i += 7) {\r\n weeks.push(calendarDays.slice(i, i + 7));\r\n }\r\n\r\n return (\r\n <View\r\n testID=\"calendar-picker\"\r\n style={[\r\n styles.card,\r\n { borderColor: sysOutline, backgroundColor: '#FFFFFF' },\r\n ]}\r\n >\r\n {/* Calendar section */}\r\n <View style={styles.calendarSection}>\r\n {/* Month nav row */}\r\n <View style={styles.monthNavRow}>\r\n <Pressable\r\n testID=\"calendar-prev-button\"\r\n onPress={handlePrevMonth}\r\n style={[styles.navButton, !canGoPrev && styles.navButtonDisabled]}\r\n disabled={!canGoPrev}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Previous month\"\r\n >\r\n <Text\r\n style={[\r\n styles.navChevron,\r\n { color: canGoPrev ? sysOnSurface : sysOnSurfaceVariant },\r\n ]}\r\n >\r\n {prevChevron}\r\n </Text>\r\n </Pressable>\r\n\r\n <Text\r\n testID=\"calendar-month-label\"\r\n style={[styles.monthLabel, { color: sysOnSurface }]}\r\n >\r\n {monthLabel}\r\n </Text>\r\n\r\n <Pressable\r\n testID=\"calendar-next-button\"\r\n onPress={handleNextMonth}\r\n style={[styles.navButton, !canGoNext && styles.navButtonDisabled]}\r\n disabled={!canGoNext}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Next month\"\r\n >\r\n <Text\r\n style={[\r\n styles.navChevron,\r\n { color: canGoNext ? sysOnSurface : sysOnSurfaceVariant },\r\n ]}\r\n >\r\n {nextChevron}\r\n </Text>\r\n </Pressable>\r\n </View>\r\n\r\n {/* Day headers */}\r\n <View style={styles.weekRow}>\r\n {DAY_HEADERS.map((h) => (\r\n <View key={h} style={styles.dayCell}>\r\n <Text\r\n testID={`day-header-${h}`}\r\n style={[styles.dayHeader, { color: sysOnSurfaceVariant }]}\r\n >\r\n {h}\r\n </Text>\r\n </View>\r\n ))}\r\n </View>\r\n\r\n {/* Week rows */}\r\n {weeks.map((week, wi) => (\r\n <View key={wi} style={styles.weekRow}>\r\n {week.map((day, di) => {\r\n if (day === null) {\r\n return <View key={`empty-${di}`} style={styles.dayCell} />;\r\n }\r\n const disabled = isDisabled(day);\r\n const selected = isSelected(day);\r\n\r\n const cellStyle = [\r\n styles.dayCellInner,\r\n !disabled &&\r\n !selected && { backgroundColor: sysSurfaceContainerHighest },\r\n selected && {\r\n backgroundColor: '#FFFFFF',\r\n borderColor: sysPrimary,\r\n borderWidth: 2,\r\n },\r\n disabled && styles.dayCellDisabled,\r\n ];\r\n\r\n const textStyle = [\r\n styles.dayText,\r\n { color: selected ? sysPrimary : sysOnSurface },\r\n ];\r\n\r\n return (\r\n <Pressable\r\n key={day}\r\n testID={`calendar-day-${day}`}\r\n style={styles.dayCell}\r\n onPress={() => handleDayPress(day)}\r\n disabled={disabled}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={`Day ${day}`}\r\n accessibilityState={{ disabled, selected }}\r\n >\r\n <View style={cellStyle}>\r\n <Text style={textStyle}>{day}</Text>\r\n </View>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n ))}\r\n </View>\r\n\r\n {/* Divider + time section */}\r\n {selectedDate != null && (\r\n <>\r\n <View style={[styles.divider, { backgroundColor: sysOutline }]} />\r\n <View style={styles.timeSection}>\r\n <Text\r\n testID=\"available-time-label\"\r\n style={[styles.availableTimeLabel, { color: sysOnSurface }]}\r\n >\r\n {availableTimeLabel}\r\n </Text>\r\n <ScrollView\r\n testID=\"time-slot-list\"\r\n style={styles.timeList}\r\n contentContainerStyle={styles.timeListContent}\r\n showsVerticalScrollIndicator={false}\r\n >\r\n {availableTimes.map((slot) => {\r\n const slotTestId = `time-slot-${slot.replace(/[: ]/g, '-')}`;\r\n const slotSelected = slot === selectedTime;\r\n return (\r\n <Pressable\r\n key={slot}\r\n testID={slotTestId}\r\n onPress={() => onSelectTime(slot)}\r\n accessibilityRole=\"button\"\r\n accessibilityState={{ selected: slotSelected }}\r\n style={[\r\n styles.timeSlot,\r\n {\r\n borderColor: slotSelected ? sysPrimary : sysOutline,\r\n borderWidth: slotSelected ? 2 : 1.5,\r\n backgroundColor: '#FFFFFF',\r\n },\r\n slotSelected && {\r\n shadowColor: sysPrimary,\r\n shadowOffset: { width: 1, height: 2 },\r\n shadowOpacity: 1,\r\n shadowRadius: 0,\r\n elevation: 2,\r\n },\r\n ]}\r\n >\r\n <Text\r\n style={[\r\n styles.timeSlotText,\r\n { color: slotSelected ? sysPrimary : sysOnSurface },\r\n ]}\r\n >\r\n {slot}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </ScrollView>\r\n </View>\r\n </>\r\n )}\r\n\r\n {/* Language / timezone info row — display-only, not interactive */}\r\n {(languageLabel || timezoneLabel) && (\r\n <>\r\n <View style={[styles.divider, { backgroundColor: sysOutline }]} />\r\n <View style={styles.infoRow} testID=\"calendar-info-row\">\r\n {languageLabel && (\r\n <View style={styles.infoItem} testID=\"calendar-language-info\">\r\n {LanguagesIcon && (\r\n <LanguagesIcon size={16} color={sysOnSurfaceVariant} />\r\n )}\r\n <Text style={[styles.infoText, { color: sysOnSurfaceVariant }]}>\r\n {languageLabel}\r\n </Text>\r\n </View>\r\n )}\r\n {timezoneLabel && (\r\n <View style={styles.infoItem} testID=\"calendar-timezone-info\">\r\n {GlobeIcon && (\r\n <GlobeIcon size={16} color={sysOnSurfaceVariant} />\r\n )}\r\n <Text style={[styles.infoText, { color: sysOnSurfaceVariant }]}>\r\n {timezoneLabel}\r\n </Text>\r\n </View>\r\n )}\r\n </View>\r\n </>\r\n )}\r\n </View>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n card: {\r\n borderRadius: 16,\r\n borderWidth: 1,\r\n overflow: 'hidden',\r\n },\r\n calendarSection: {\r\n paddingHorizontal: 8,\r\n paddingVertical: 16,\r\n },\r\n monthNavRow: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n marginBottom: 8,\r\n },\r\n navButton: {\r\n padding: 8,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n navButtonDisabled: {\r\n opacity: 0.3,\r\n },\r\n navChevron: {\r\n fontSize: 18,\r\n fontWeight: '600',\r\n },\r\n monthLabel: {\r\n fontSize: 16,\r\n fontWeight: '600',\r\n textAlign: 'center',\r\n flex: 1,\r\n },\r\n weekRow: {\r\n flexDirection: 'row',\r\n },\r\n dayCell: {\r\n flex: 1,\r\n aspectRatio: 1,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n dayHeader: {\r\n fontSize: 10,\r\n fontWeight: '500',\r\n textAlign: 'center',\r\n },\r\n dayCellInner: {\r\n width: '80%',\r\n aspectRatio: 1,\r\n borderRadius: 100,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: 'transparent',\r\n borderWidth: 0,\r\n borderColor: 'transparent',\r\n },\r\n dayCellDisabled: {\r\n opacity: 0.3,\r\n },\r\n dayText: {\r\n fontSize: 13,\r\n fontWeight: '500',\r\n textAlign: 'center',\r\n },\r\n divider: {\r\n height: 1,\r\n width: '100%',\r\n },\r\n timeSection: {\r\n padding: 16,\r\n },\r\n availableTimeLabel: {\r\n fontSize: 14,\r\n fontWeight: '500',\r\n textAlign: 'center',\r\n marginBottom: 12,\r\n },\r\n timeList: {\r\n maxHeight: 200,\r\n },\r\n timeListContent: {\r\n gap: 8,\r\n },\r\n timeSlot: {\r\n borderRadius: 12,\r\n paddingVertical: 12,\r\n paddingHorizontal: 16,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n timeSlotText: {\r\n fontSize: 14,\r\n textAlign: 'center',\r\n },\r\n infoRow: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 16,\r\n paddingHorizontal: 16,\r\n paddingVertical: 12,\r\n },\r\n infoItem: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 6,\r\n },\r\n infoText: {\r\n fontSize: 13,\r\n fontWeight: '500',\r\n },\r\n});\r\n"],"names":["DateTimePicker","DAY_HEADERS","toLocalDateString","date","y","getFullYear","m","String","getMonth","padStart","d","getDate","addMonths","count","result","Date","selectedDate","onSelectDate","selectedTime","onSelectTime","availableTimes","availableTimeLabel","availableDates","maxMonthsAhead","languageLabel","timezoneLabel","colorRoles","cr","useTheme","LanguagesIcon","resolveIcon","GlobeIcon","today","useMemo","setHours","maxDate","viewYear","setViewYear","useState","viewMonth","setViewMonth","canGoPrev","canGoNext","maxMonth","handlePrevMonth","useCallback","handleNextMonth","monthLabel","toLocaleString","month","year","calendarDays","firstDay","getDay","daysInMonth","cells","i","push","length","availableDatesSet","Set","isDisabled","day","dateStr","has","isSelected","handleDayPress","sysPrimary","accent","primary","sysOutline","outline","sysOnSurface","surface","sysOnSurfaceVariant","sysSurfaceContainerHighest","surfaceContainer","prevChevron","I18nManager","isRTL","nextChevron","weeks","slice","View","testID","style","styles","card","borderColor","backgroundColor","calendarSection","monthNavRow","Pressable","onPress","navButton","navButtonDisabled","disabled","accessibilityRole","accessibilityLabel","Text","navChevron","color","weekRow","map","h","dayCell","dayHeader","week","wi","di","selected","cellStyle","dayCellInner","borderWidth","dayCellDisabled","textStyle","dayText","accessibilityState","divider","timeSection","ScrollView","timeList","contentContainerStyle","timeListContent","showsVerticalScrollIndicator","slot","slotTestId","replace","slotSelected","timeSlot","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","timeSlotText","infoRow","infoItem","size","infoText","StyleSheet","create","borderRadius","overflow","paddingHorizontal","paddingVertical","flexDirection","alignItems","justifyContent","marginBottom","padding","opacity","fontSize","fontWeight","textAlign","flex","aspectRatio","maxHeight","gap"],"mappings":";;;;+BA2CgBA;;;eAAAA;;;;+DA3CsC;6BAS/C;uBAEqB;uBACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBzB,MAAMC,cAAc;IAAC;IAAO;IAAO;IAAO;IAAO;IAAO;IAAO;CAAM;AAErE,SAASC,kBAAkBC,IAAU;IACnC,MAAMC,IAAID,KAAKE,WAAW;IAC1B,MAAMC,IAAIC,OAAOJ,KAAKK,QAAQ,KAAK,GAAGC,QAAQ,CAAC,GAAG;IAClD,MAAMC,IAAIH,OAAOJ,KAAKQ,OAAO,IAAIF,QAAQ,CAAC,GAAG;IAC7C,OAAO,GAAGL,EAAE,CAAC,EAAEE,EAAE,CAAC,EAAEI,GAAG;AACzB;AAEA,SAASE,UAAUT,IAAU,EAAEU,KAAa;IAC1C,MAAMC,SAAS,IAAIC,KAAKZ,KAAKE,WAAW,IAAIF,KAAKK,QAAQ,KAAKK,OAAO;IACrE,OAAOC;AACT;AAEO,SAASd,eAAe,EAC7BgB,YAAY,EACZC,YAAY,EACZC,YAAY,EACZC,YAAY,EACZC,cAAc,EACdC,kBAAkB,EAClBC,cAAc,EACdC,iBAAiB,CAAC,EAClBC,aAAa,EACbC,aAAa,EACO;IACpB,MAAM,EAAEC,YAAYC,EAAE,EAAE,GAAGC,IAAAA,eAAQ;IAEnC,MAAMC,gBAAgBC,IAAAA,kBAAW,EAAC;IAClC,MAAMC,YAAYD,IAAAA,kBAAW,EAAC;IAE9B,MAAME,QAAQC,IAAAA,cAAO,EAAC;QACpB,MAAMvB,IAAI,IAAIK;QACdL,EAAEwB,QAAQ,CAAC,GAAG,GAAG,GAAG;QACpB,OAAOxB;IACT,GAAG,EAAE;IAEL,MAAMyB,UAAUF,IAAAA,cAAO,EAAC;QACtB,MAAMvB,IAAIE,UAAUoB,OAAOT;QAC3B,uCAAuC;QACvC,OAAO,IAAIR,KAAKL,EAAEL,WAAW,IAAIK,EAAEF,QAAQ,KAAK,GAAG;IACrD,GAAG;QAACwB;QAAOT;KAAe;IAE1B,MAAM,CAACa,UAAUC,YAAY,GAAGC,IAAAA,eAAQ,EAACN,MAAM3B,WAAW;IAC1D,MAAM,CAACkC,WAAWC,aAAa,GAAGF,IAAAA,eAAQ,EAACN,MAAMxB,QAAQ;IAEzD,MAAMiC,YAAYR,IAAAA,cAAO,EAAC;QACxB,OAAOG,WAAWJ,MAAM3B,WAAW,MAAMkC,YAAYP,MAAMxB,QAAQ;IACrE,GAAG;QAAC4B;QAAUG;QAAWP;KAAM;IAE/B,MAAMU,YAAYT,IAAAA,cAAO,EAAC;QACxB,MAAMU,WAAW/B,UAAUoB,OAAOT;QAClC,OACEa,WAAWO,SAAStC,WAAW,MAC9B+B,aAAaO,SAAStC,WAAW,MAAMkC,YAAYI,SAASnC,QAAQ;IAEzE,GAAG;QAAC4B;QAAUG;QAAWP;QAAOT;KAAe;IAE/C,MAAMqB,kBAAkBC,IAAAA,kBAAW,EAAC;QAClC,IAAI,CAACJ,WAAW;QAChB,IAAIF,cAAc,GAAG;YACnBC,aAAa;YACbH,YAAY,CAACjC,IAAMA,IAAI;QACzB,OAAO;YACLoC,aAAa,CAAClC,IAAMA,IAAI;QAC1B;IACF,GAAG;QAACmC;QAAWF;KAAU;IAEzB,MAAMO,kBAAkBD,IAAAA,kBAAW,EAAC;QAClC,IAAI,CAACH,WAAW;QAChB,IAAIH,cAAc,IAAI;YACpBC,aAAa;YACbH,YAAY,CAACjC,IAAMA,IAAI;QACzB,OAAO;YACLoC,aAAa,CAAClC,IAAMA,IAAI;QAC1B;IACF,GAAG;QAACoC;QAAWH;KAAU;IAEzB,MAAMQ,aAAad,IAAAA,cAAO,EAAC;QACzB,MAAMvB,IAAI,IAAIK,KAAKqB,UAAUG,WAAW;QACxC,OAAO7B,EAAEsC,cAAc,CAAC,WAAW;YAAEC,OAAO;YAAQC,MAAM;QAAU;IACtE,GAAG;QAACd;QAAUG;KAAU;IAExB,sBAAsB;IACtB,MAAMY,eAAelB,IAAAA,cAAO,EAAC;QAC3B,MAAMmB,WAAW,IAAIrC,KAAKqB,UAAUG,WAAW,GAAGc,MAAM;QACxD,MAAMC,cAAc,IAAIvC,KAAKqB,UAAUG,YAAY,GAAG,GAAG5B,OAAO;QAChE,MAAM4C,QAA2B,EAAE;QACnC,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,UAAUI,IAAKD,MAAME,IAAI,CAAC;QAC9C,IAAK,IAAI/C,IAAI,GAAGA,KAAK4C,aAAa5C,IAAK6C,MAAME,IAAI,CAAC/C;QAClD,2BAA2B;QAC3B,MAAO6C,MAAMG,MAAM,GAAG,MAAM,EAAGH,MAAME,IAAI,CAAC;QAC1C,OAAOF;IACT,GAAG;QAACnB;QAAUG;KAAU;IAExB,MAAMoB,oBAAoB1B,IAAAA,cAAO,EAC/B,IAAOX,iBAAiB,IAAIsC,IAAItC,kBAAkB,MAClD;QAACA;KAAe;IAGlB,MAAMuC,aAAahB,IAAAA,kBAAW,EAC5B,CAACiB;QACC,MAAMpD,IAAI,IAAIK,KAAKqB,UAAUG,WAAWuB;QACxCpD,EAAEwB,QAAQ,CAAC,GAAG,GAAG,GAAG;QACpB,IAAIxB,IAAIsB,SAAStB,IAAIyB,SAAS,OAAO;QACrC,IAAIwB,mBAAmB;YACrB,MAAMI,UAAU7D,kBAAkBQ;YAClC,OAAO,CAACiD,kBAAkBK,GAAG,CAACD;QAChC;QACA,OAAO;IACT,GACA;QAAC3B;QAAUG;QAAWP;QAAOG;QAASwB;KAAkB;IAG1D,MAAMM,aAAapB,IAAAA,kBAAW,EAC5B,CAACiB;QACC,MAAMpD,IAAI,IAAIK,KAAKqB,UAAUG,WAAWuB;QACxC,OAAO5D,kBAAkBQ,OAAOM;IAClC,GACA;QAACoB;QAAUG;QAAWvB;KAAa;IAGrC,MAAMkD,iBAAiBrB,IAAAA,kBAAW,EAChC,CAACiB;QACC,IAAID,WAAWC,MAAM;QACrB,MAAMpD,IAAI,IAAIK,KAAKqB,UAAUG,WAAWuB;QACxC7C,aAAaf,kBAAkBQ;IACjC,GACA;QAAC0B;QAAUG;QAAWsB;QAAY5C;KAAa;IAGjD,MAAMkD,aAAaxC,GAAGyC,MAAM,CAACC,OAAO,CAACF,UAAU;IAC/C,MAAMG,aAAa3C,GAAG4C,OAAO,CAACD,UAAU;IACxC,MAAME,eAAe7C,GAAG8C,OAAO,CAACA,OAAO,CAACD,YAAY;IACpD,MAAME,sBAAsB/C,GAAG8C,OAAO,CAACA,OAAO,CAACC,mBAAmB;IAClE,MAAMC,6BACJhD,GAAG8C,OAAO,CAACG,gBAAgB,CAACD,0BAA0B;IAExD,MAAME,cAAcC,wBAAW,CAACC,KAAK,GAAG,MAAM;IAC9C,MAAMC,cAAcF,wBAAW,CAACC,KAAK,GAAG,MAAM;IAE9C,MAAME,QAA6B,EAAE;IACrC,IAAK,IAAIzB,IAAI,GAAGA,IAAIL,aAAaO,MAAM,EAAEF,KAAK,EAAG;QAC/CyB,MAAMxB,IAAI,CAACN,aAAa+B,KAAK,CAAC1B,GAAGA,IAAI;IACvC;IAEA,qBACE,sBAAC2B,iBAAI;QACHC,QAAO;QACPC,OAAO;YACLC,OAAOC,IAAI;YACX;gBAAEC,aAAalB;gBAAYmB,iBAAiB;YAAU;SACvD;;0BAGD,sBAACN,iBAAI;gBAACE,OAAOC,OAAOI,eAAe;;kCAEjC,sBAACP,iBAAI;wBAACE,OAAOC,OAAOK,WAAW;;0CAC7B,qBAACC,sBAAS;gCACRR,QAAO;gCACPS,SAASjD;gCACTyC,OAAO;oCAACC,OAAOQ,SAAS;oCAAE,CAACrD,aAAa6C,OAAOS,iBAAiB;iCAAC;gCACjEC,UAAU,CAACvD;gCACXwD,mBAAkB;gCAClBC,oBAAmB;0CAEnB,cAAA,qBAACC,iBAAI;oCACHd,OAAO;wCACLC,OAAOc,UAAU;wCACjB;4CAAEC,OAAO5D,YAAY+B,eAAeE;wCAAoB;qCACzD;8CAEAG;;;0CAIL,qBAACsB,iBAAI;gCACHf,QAAO;gCACPC,OAAO;oCAACC,OAAOvC,UAAU;oCAAE;wCAAEsD,OAAO7B;oCAAa;iCAAE;0CAElDzB;;0CAGH,qBAAC6C,sBAAS;gCACRR,QAAO;gCACPS,SAAS/C;gCACTuC,OAAO;oCAACC,OAAOQ,SAAS;oCAAE,CAACpD,aAAa4C,OAAOS,iBAAiB;iCAAC;gCACjEC,UAAU,CAACtD;gCACXuD,mBAAkB;gCAClBC,oBAAmB;0CAEnB,cAAA,qBAACC,iBAAI;oCACHd,OAAO;wCACLC,OAAOc,UAAU;wCACjB;4CAAEC,OAAO3D,YAAY8B,eAAeE;wCAAoB;qCACzD;8CAEAM;;;;;kCAMP,qBAACG,iBAAI;wBAACE,OAAOC,OAAOgB,OAAO;kCACxBrG,YAAYsG,GAAG,CAAC,CAACC,kBAChB,qBAACrB,iBAAI;gCAASE,OAAOC,OAAOmB,OAAO;0CACjC,cAAA,qBAACN,iBAAI;oCACHf,QAAQ,CAAC,WAAW,EAAEoB,GAAG;oCACzBnB,OAAO;wCAACC,OAAOoB,SAAS;wCAAE;4CAAEL,OAAO3B;wCAAoB;qCAAE;8CAExD8B;;+BALMA;;oBAYdvB,MAAMsB,GAAG,CAAC,CAACI,MAAMC,mBAChB,qBAACzB,iBAAI;4BAAUE,OAAOC,OAAOgB,OAAO;sCACjCK,KAAKJ,GAAG,CAAC,CAACzC,KAAK+C;gCACd,IAAI/C,QAAQ,MAAM;oCAChB,qBAAO,qBAACqB,iBAAI;wCAAqBE,OAAOC,OAAOmB,OAAO;uCAApC,CAAC,MAAM,EAAEI,IAAI;gCACjC;gCACA,MAAMb,WAAWnC,WAAWC;gCAC5B,MAAMgD,WAAW7C,WAAWH;gCAE5B,MAAMiD,YAAY;oCAChBzB,OAAO0B,YAAY;oCACnB,CAAChB,YACC,CAACc,YAAY;wCAAErB,iBAAiBd;oCAA2B;oCAC7DmC,YAAY;wCACVrB,iBAAiB;wCACjBD,aAAarB;wCACb8C,aAAa;oCACf;oCACAjB,YAAYV,OAAO4B,eAAe;iCACnC;gCAED,MAAMC,YAAY;oCAChB7B,OAAO8B,OAAO;oCACd;wCAAEf,OAAOS,WAAW3C,aAAaK;oCAAa;iCAC/C;gCAED,qBACE,qBAACoB,sBAAS;oCAERR,QAAQ,CAAC,aAAa,EAAEtB,KAAK;oCAC7BuB,OAAOC,OAAOmB,OAAO;oCACrBZ,SAAS,IAAM3B,eAAeJ;oCAC9BkC,UAAUA;oCACVC,mBAAkB;oCAClBC,oBAAoB,CAAC,IAAI,EAAEpC,KAAK;oCAChCuD,oBAAoB;wCAAErB;wCAAUc;oCAAS;8CAEzC,cAAA,qBAAC3B,iBAAI;wCAACE,OAAO0B;kDACX,cAAA,qBAACZ,iBAAI;4CAACd,OAAO8B;sDAAYrD;;;mCAVtBA;4BAcX;2BAzCS8C;;;YA+Cd5F,gBAAgB,sBACf;;kCACE,qBAACmE,iBAAI;wBAACE,OAAO;4BAACC,OAAOgC,OAAO;4BAAE;gCAAE7B,iBAAiBnB;4BAAW;yBAAE;;kCAC9D,sBAACa,iBAAI;wBAACE,OAAOC,OAAOiC,WAAW;;0CAC7B,qBAACpB,iBAAI;gCACHf,QAAO;gCACPC,OAAO;oCAACC,OAAOjE,kBAAkB;oCAAE;wCAAEgF,OAAO7B;oCAAa;iCAAE;0CAE1DnD;;0CAEH,qBAACmG,uBAAU;gCACTpC,QAAO;gCACPC,OAAOC,OAAOmC,QAAQ;gCACtBC,uBAAuBpC,OAAOqC,eAAe;gCAC7CC,8BAA8B;0CAE7BxG,eAAemF,GAAG,CAAC,CAACsB;oCACnB,MAAMC,aAAa,CAAC,UAAU,EAAED,KAAKE,OAAO,CAAC,SAAS,MAAM;oCAC5D,MAAMC,eAAeH,SAAS3G;oCAC9B,qBACE,qBAAC0E,sBAAS;wCAERR,QAAQ0C;wCACRjC,SAAS,IAAM1E,aAAa0G;wCAC5B5B,mBAAkB;wCAClBoB,oBAAoB;4CAAEP,UAAUkB;wCAAa;wCAC7C3C,OAAO;4CACLC,OAAO2C,QAAQ;4CACf;gDACEzC,aAAawC,eAAe7D,aAAaG;gDACzC2C,aAAae,eAAe,IAAI;gDAChCvC,iBAAiB;4CACnB;4CACAuC,gBAAgB;gDACdE,aAAa/D;gDACbgE,cAAc;oDAAEC,OAAO;oDAAGC,QAAQ;gDAAE;gDACpCC,eAAe;gDACfC,cAAc;gDACdC,WAAW;4CACb;yCACD;kDAED,cAAA,qBAACrC,iBAAI;4CACHd,OAAO;gDACLC,OAAOmD,YAAY;gDACnB;oDAAEpC,OAAO2B,eAAe7D,aAAaK;gDAAa;6CACnD;sDAEAqD;;uCA3BEA;gCA+BX;;;;;;YAONrG,CAAAA,iBAAiBC,aAAY,mBAC7B;;kCACE,qBAAC0D,iBAAI;wBAACE,OAAO;4BAACC,OAAOgC,OAAO;4BAAE;gCAAE7B,iBAAiBnB;4BAAW;yBAAE;;kCAC9D,sBAACa,iBAAI;wBAACE,OAAOC,OAAOoD,OAAO;wBAAEtD,QAAO;;4BACjC5D,+BACC,sBAAC2D,iBAAI;gCAACE,OAAOC,OAAOqD,QAAQ;gCAAEvD,QAAO;;oCAClCvD,+BACC,qBAACA;wCAAc+G,MAAM;wCAAIvC,OAAO3B;;kDAElC,qBAACyB,iBAAI;wCAACd,OAAO;4CAACC,OAAOuD,QAAQ;4CAAE;gDAAExC,OAAO3B;4CAAoB;yCAAE;kDAC3DlD;;;;4BAINC,+BACC,sBAAC0D,iBAAI;gCAACE,OAAOC,OAAOqD,QAAQ;gCAAEvD,QAAO;;oCAClCrD,2BACC,qBAACA;wCAAU6G,MAAM;wCAAIvC,OAAO3B;;kDAE9B,qBAACyB,iBAAI;wCAACd,OAAO;4CAACC,OAAOuD,QAAQ;4CAAE;gDAAExC,OAAO3B;4CAAoB;yCAAE;kDAC3DjD;;;;;;;;;;AASnB;AAEA,MAAM6D,SAASwD,uBAAU,CAACC,MAAM,CAAC;IAC/BxD,MAAM;QACJyD,cAAc;QACd/B,aAAa;QACbgC,UAAU;IACZ;IACAvD,iBAAiB;QACfwD,mBAAmB;QACnBC,iBAAiB;IACnB;IACAxD,aAAa;QACXyD,eAAe;QACfC,YAAY;QACZC,gBAAgB;QAChBC,cAAc;IAChB;IACAzD,WAAW;QACT0D,SAAS;QACTH,YAAY;QACZC,gBAAgB;IAClB;IACAvD,mBAAmB;QACjB0D,SAAS;IACX;IACArD,YAAY;QACVsD,UAAU;QACVC,YAAY;IACd;IACA5G,YAAY;QACV2G,UAAU;QACVC,YAAY;QACZC,WAAW;QACXC,MAAM;IACR;IACAvD,SAAS;QACP8C,eAAe;IACjB;IACA3C,SAAS;QACPoD,MAAM;QACNC,aAAa;QACbT,YAAY;QACZC,gBAAgB;IAClB;IACA5C,WAAW;QACTgD,UAAU;QACVC,YAAY;QACZC,WAAW;IACb;IACA5C,cAAc;QACZoB,OAAO;QACP0B,aAAa;QACbd,cAAc;QACdK,YAAY;QACZC,gBAAgB;QAChB7D,iBAAiB;QACjBwB,aAAa;QACbzB,aAAa;IACf;IACA0B,iBAAiB;QACfuC,SAAS;IACX;IACArC,SAAS;QACPsC,UAAU;QACVC,YAAY;QACZC,WAAW;IACb;IACAtC,SAAS;QACPe,QAAQ;QACRD,OAAO;IACT;IACAb,aAAa;QACXiC,SAAS;IACX;IACAnI,oBAAoB;QAClBqI,UAAU;QACVC,YAAY;QACZC,WAAW;QACXL,cAAc;IAChB;IACA9B,UAAU;QACRsC,WAAW;IACb;IACApC,iBAAiB;QACfqC,KAAK;IACP;IACA/B,UAAU;QACRe,cAAc;QACdG,iBAAiB;QACjBD,mBAAmB;QACnBG,YAAY;QACZC,gBAAgB;IAClB;IACAb,cAAc;QACZiB,UAAU;QACVE,WAAW;IACb;IACAlB,SAAS;QACPU,eAAe;QACfC,YAAY;QACZW,KAAK;QACLd,mBAAmB;QACnBC,iBAAiB;IACnB;IACAR,UAAU;QACRS,eAAe;QACfC,YAAY;QACZW,KAAK;IACP;IACAnB,UAAU;QACRa,UAAU;QACVC,YAAY;IACd;AACF"}
@@ -140,8 +140,7 @@ function Input({ size = 'md', label, helperText, errorText, invalid = false, lea
140
140
  alignItems: 'center',
141
141
  paddingHorizontal: s.paddingH,
142
142
  paddingVertical: s.paddingV,
143
- gap: s.gap,
144
- overflow: 'hidden'
143
+ gap: s.gap
145
144
  },
146
145
  children: [
147
146
  leadingIcon && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
@@ -173,9 +172,9 @@ function Input({ size = 'md', label, helperText, errorText, invalid = false, lea
173
172
  style: {
174
173
  flex: 1,
175
174
  fontSize: s.fontSize,
176
- lineHeight: s.lineHeight,
177
175
  color: textColor,
178
176
  includeFontPadding: false,
177
+ textAlignVertical: 'center',
179
178
  // Reset RN TextInput default padding/margin
180
179
  padding: 0,
181
180
  margin: 0