react-native-platform-components 0.8.7 → 0.8.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.
package/README.md CHANGED
@@ -174,9 +174,9 @@ export function Example() {
174
174
  visible={visible}
175
175
  presentation="modal"
176
176
  mode="date"
177
- onConfirm={(d) => {
177
+ onConfirm={(d, confirmed) => {
178
178
  setDate(d);
179
- setVisible(false);
179
+ if (confirmed) setVisible(false);
180
180
  }}
181
181
  onClosed={() => setVisible(false)}
182
182
  ios={{ preferredStyle: 'inline' }}
@@ -200,7 +200,7 @@ export function Example() {
200
200
  date={date}
201
201
  presentation="embedded"
202
202
  mode="date"
203
- onConfirm={(d) => setDate(d)}
203
+ onConfirm={(d, confirmed) => setDate(d)}
204
204
  ios={{ preferredStyle: 'inline' }}
205
205
  android={{ material: 'system' }}
206
206
  />
@@ -458,27 +458,28 @@ Native date & time picker using **platform system pickers**.
458
458
 
459
459
  ### Props
460
460
 
461
- | Prop | Type | Description |
462
- | -------------- | ------------------------------------------------------- | ------------------------------------------- |
463
- | `date` | `Date \| null` | Controlled date value |
464
- | `minDate` | `Date \| null` | Minimum selectable date |
465
- | `maxDate` | `Date \| null` | Maximum selectable date |
466
- | `locale` | `string` | Locale identifier (e.g., `'en-US'`) |
467
- | `timeZoneName` | `string` | Time zone identifier |
468
- | `mode` | `'date' \| 'time' \| 'dateAndTime' \| 'countDownTimer'` | Picker mode |
469
- | `presentation` | `'modal' \| 'embedded'` | Presentation style |
470
- | `visible` | `boolean` | Controls modal visibility (modal mode only) |
471
- | `onConfirm` | `(date: Date) => void` | Called when user confirms selection |
472
- | `onClosed` | `() => void` | Called when modal is dismissed |
461
+ | Prop | Type | Description |
462
+ | -------------- | ------------------------------------------------------- | ---------------------------------------------------------------------------------- |
463
+ | `date` | `Date \| null` | Controlled date value |
464
+ | `minDate` | `Date \| null` | Minimum selectable date |
465
+ | `maxDate` | `Date \| null` | Maximum selectable date |
466
+ | `locale` | `string` | Locale identifier (e.g., `'en-US'`) |
467
+ | `timeZoneName` | `string` | Time zone identifier |
468
+ | `mode` | `'date' \| 'time' \| 'dateAndTime' \| 'countDownTimer'` | Picker mode |
469
+ | `presentation` | `'modal' \| 'embedded'` | Presentation style |
470
+ | `visible` | `boolean` | Controls modal visibility (modal mode only) |
471
+ | `onConfirm` | `(date: Date, confirmed: boolean) => void` | Called on date change; `confirmed` is `true` for deliberate selections (see below) |
472
+ | `onClosed` | `() => void` | Called when modal is dismissed |
473
473
 
474
474
  ### iOS Props (`ios`)
475
475
 
476
- | Prop | Type | Description |
477
- | -------------------------- | -------------------------------------------------- | --------------------------------- |
478
- | `preferredStyle` | `'automatic' \| 'compact' \| 'inline' \| 'wheels'` | iOS date picker style |
479
- | `countDownDurationSeconds` | `number` | Duration for countdown timer mode |
480
- | `minuteInterval` | `number` | Minute interval (1-30) |
481
- | `roundsToMinuteInterval` | `'inherit' \| 'round' \| 'noRound'` | Rounding behavior |
476
+ | Prop | Type | Description |
477
+ | -------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------ |
478
+ | `preferredStyle` | `'automatic' \| 'compact' \| 'inline' \| 'wheels'` | iOS date picker style |
479
+ | `countDownDurationSeconds` | `number` | Duration for countdown timer mode |
480
+ | `minuteInterval` | `number` | Minute interval (1-30) |
481
+ | `roundsToMinuteInterval` | `'inherit' \| 'round' \| 'noRound'` | Rounding behavior |
482
+ | `showConfirmToolbar` | `boolean` | Modal only. Show Cancel/Done toolbar below the picker. Defaults to `true`. See below. |
482
483
 
483
484
  ### Android Props (`android`)
484
485
 
@@ -490,6 +491,35 @@ Native date & time picker using **platform system pickers**.
490
491
  | `positiveButtonTitle` | `string` | Custom confirm button text |
491
492
  | `negativeButtonTitle` | `string` | Custom cancel button text |
492
493
 
494
+ ### The `confirmed` Flag
495
+
496
+ `onConfirm` fires on every date/time change, but the second argument (`confirmed`) lets you distinguish between browsing and deliberate selections:
497
+
498
+ | Platform / Mode | Every change | Deliberate selection |
499
+ | -------------------- | ----------------------------------------- | ------------------------------------- |
500
+ | **iOS modal** | `confirmed: false` (user still adjusting) | `confirmed: true` (tapping **Done**) |
501
+ | **iOS embedded** | `confirmed: true` | — |
502
+ | **Android modal** | — | `confirmed: true` (pressing OK) |
503
+ | **Android embedded** | `confirmed: true` | — |
504
+
505
+ On iOS in modal presentation, the picker is shown in a popover with a Cancel/Done toolbar below it. Tapping **Done** emits `confirmed: true`; tapping **Cancel** or outside the popover calls `onClosed`. Set `ios.showConfirmToolbar: false` to hide the toolbar — in that mode `confirmed: true` never fires, and your app is expected to drive dismissal by flipping `visible` off (reading the current date from the stream of `confirmed: false` events). This only makes UX sense paired with `ios.preferredStyle: 'inline'`.
506
+
507
+ A common pattern is to close the modal only on a confirmed selection:
508
+
509
+ ```tsx
510
+ <DatePicker
511
+ date={date}
512
+ visible={visible}
513
+ presentation="modal"
514
+ mode="time"
515
+ onConfirm={(d, confirmed) => {
516
+ setDate(d);
517
+ if (confirmed) setVisible(false);
518
+ }}
519
+ onClosed={() => setVisible(false)}
520
+ />
521
+ ```
522
+
493
523
  ---
494
524
 
495
525
  ## ContextMenu
@@ -635,12 +665,12 @@ Native glass morphism effect using **UIGlassEffect** on iOS 26+. On Android and
635
665
 
636
666
  ### iOS Props (`ios`)
637
667
 
638
- | Prop | Type | Description |
639
- | --------------- | -------------------------------- | ---------------------------------------------------- |
640
- | `effect` | `'clear' \| 'regular' \| 'none'` | Glass effect intensity (default: `'regular'`) |
641
- | `interactive` | `boolean` | Enable touch interaction feedback (default: `false`) |
642
- | `tintColor` | `string` | Overlay tint color (hex string) |
643
- | `colorScheme` | `'light' \| 'dark' \| 'system'` | Appearance mode (default: `'system'`) |
668
+ | Prop | Type | Description |
669
+ | ------------- | -------------------------------- | ---------------------------------------------------- |
670
+ | `effect` | `'clear' \| 'regular' \| 'none'` | Glass effect intensity (default: `'regular'`) |
671
+ | `interactive` | `boolean` | Enable touch interaction feedback (default: `false`) |
672
+ | `tintColor` | `string` | Overlay tint color (hex string) |
673
+ | `colorScheme` | `'light' \| 'dark' \| 'system'` | Appearance mode (default: `'system'`) |
644
674
 
645
675
  ### Android Props (`android`)
646
676
 
@@ -704,14 +734,14 @@ This is intentional. The goal is native fidelity, not pixel-level customization.
704
734
 
705
735
  All color props in this library support the same formats as React Native's `backgroundColor`:
706
736
 
707
- | Format | Example | Description |
708
- | --- | --- | --- |
709
- | Hex | `#RGB`, `#RRGGBB`, `#RRGGBBAA` | Standard hex colors |
710
- | RGB | `rgb(255, 0, 0)` | RGB values (0-255) |
711
- | RGBA | `rgba(255, 0, 0, 0.5)` | RGB with alpha (0-1) |
712
- | HSL | `hsl(0, 100%, 50%)` | Hue (0-360), saturation, lightness |
713
- | HSLA | `hsla(0, 100%, 50%, 0.5)` | HSL with alpha (0-1) |
714
- | Named | `red`, `steelblue`, `transparent` | CSS named colors |
737
+ | Format | Example | Description |
738
+ | ------ | --------------------------------- | ---------------------------------- |
739
+ | Hex | `#RGB`, `#RRGGBB`, `#RRGGBBAA` | Standard hex colors |
740
+ | RGB | `rgb(255, 0, 0)` | RGB values (0-255) |
741
+ | RGBA | `rgba(255, 0, 0, 0.5)` | RGB with alpha (0-1) |
742
+ | HSL | `hsl(0, 100%, 50%)` | Hue (0-360), saturation, lightness |
743
+ | HSLA | `hsla(0, 100%, 50%, 0.5)` | HSL with alpha (0-1) |
744
+ | Named | `red`, `steelblue`, `transparent` | CSS named colors |
715
745
 
716
746
  **Props that accept colors:**
717
747
 
@@ -141,12 +141,14 @@ class PCDatePickerViewManager :
141
141
 
142
142
  private class ConfirmEvent(
143
143
  surfaceId: Int,
144
- private val ts: Double
144
+ private val ts: Double,
145
+ private val confirmed: Boolean = true
145
146
  ) : Event<ConfirmEvent>(surfaceId) {
146
147
  override fun getEventName(): String = "topConfirm"
147
148
  override fun dispatch(rctEventEmitter: RCTEventEmitter) {
148
149
  val payload = com.facebook.react.bridge.Arguments.createMap().apply {
149
150
  putDouble("timestampMs", ts)
151
+ putBoolean("confirmed", confirmed)
150
152
  }
151
153
  rctEventEmitter.receiveEvent(viewTag, eventName, payload)
152
154
  }
@@ -46,13 +46,14 @@ using namespace facebook::react;
46
46
 
47
47
  __weak __typeof(self) weakSelf = self;
48
48
 
49
- _datePickerView.onChangeHandler = ^(NSNumber *ms) {
49
+ _datePickerView.onChangeHandler = ^(NSNumber *ms, BOOL confirmed) {
50
50
  __typeof(self) strongSelf = weakSelf;
51
51
  if (!strongSelf)
52
52
  return;
53
53
 
54
54
  PCDatePickerEventEmitter::OnConfirm event{};
55
55
  event.timestampMs = ms.doubleValue;
56
+ event.confirmed = confirmed;
56
57
 
57
58
  strongSelf.eventEmitterTyped.onConfirm(event);
58
59
  };
@@ -190,6 +191,14 @@ using namespace facebook::react;
190
191
  }
191
192
  }
192
193
 
194
+ // Expecting: "show" | "hide"
195
+ if (oldIos.confirmToolbar != newIos.confirmToolbar) {
196
+ _datePickerView.confirmToolbarMode =
197
+ (!newIos.confirmToolbar.empty())
198
+ ? [NSString stringWithUTF8String:newIos.confirmToolbar.c_str()]
199
+ : @"show";
200
+ }
201
+
193
202
  if (needsToUpdateMeasurements) {
194
203
  [self updateMeasurements];
195
204
  }
@@ -13,18 +13,25 @@ public final class PCDatePickerView: UIControl,
13
13
  private var modalVC: UIViewController?
14
14
  private var inlineConstraints: [NSLayoutConstraint] = []
15
15
 
16
- // Suppress “programmatic” valueChanged events (apply props / initial present settle).
16
+ private var modalToolbarHeight: CGFloat {
17
+ // iOS 26 renders bar button items as oversized Liquid Glass pills;
18
+ // they overflow a standard 44pt toolbar and clip against the popover.
19
+ if #available(iOS 26.0, *) { return 60 }
20
+ return 44
21
+ }
22
+
23
+ // Suppress "programmatic" valueChanged events (apply props / initial present settle).
17
24
  private var suppressChangeEvents = false
18
25
  private func suppressNextChangesBriefly() {
19
26
  suppressChangeEvents = true
20
- // Clear on next runloop tick (usually enough to skip the “settle” event).
27
+ // Clear on next runloop tick (usually enough to skip the "settle" event).
21
28
  DispatchQueue.main.async { [weak self] in
22
29
  self?.suppressChangeEvents = false
23
30
  }
24
31
  }
25
32
 
26
33
  // MARK: - Events (wired from ObjC++)
27
- public var onChangeHandler: ((NSNumber) -> Void)?
34
+ public var onChangeHandler: ((NSNumber, Bool) -> Void)?
28
35
  public var onCancelHandler: (() -> Void)?
29
36
 
30
37
  // MARK: - Props
@@ -85,6 +92,11 @@ public final class PCDatePickerView: UIControl,
85
92
  didSet { if oldValue != roundsToMinuteIntervalMode { applyRoundsMode() } }
86
93
  }
87
94
 
95
+ /// "show" | "hide" — modal only. When "hide", the popover has no
96
+ /// Cancel/Done bar and the caller is responsible for driving dismissal
97
+ /// via the `visible` prop; valueChanged still emits confirmed=false.
98
+ public var confirmToolbarMode: String = "show"
99
+
88
100
  // MARK: - Init
89
101
 
90
102
  public override init(frame: CGRect) {
@@ -196,13 +208,15 @@ public final class PCDatePickerView: UIControl,
196
208
  height: max(PCConstants.minTouchTargetHeight, fitted.height))
197
209
  }
198
210
 
199
- /// Separate sizing for popover content.
211
+ /// Separate sizing for popover content. Accounts for the Cancel/Done
212
+ /// toolbar that sits below the picker in modal presentation.
200
213
  private func popoverContentSize() -> CGSize {
201
214
  picker.setNeedsLayout()
202
215
  picker.layoutIfNeeded()
203
216
 
204
217
  let fitted = picker.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
205
- return fitted
218
+ let extra = confirmToolbarMode == "hide" ? 0 : modalToolbarHeight
219
+ return CGSize(width: fitted.width, height: fitted.height + extra)
206
220
  }
207
221
 
208
222
  // MARK: - Presentation
@@ -287,6 +301,25 @@ public final class PCDatePickerView: UIControl,
287
301
  picker.translatesAutoresizingMaskIntoConstraints = false
288
302
  vc.view.addSubview(picker)
289
303
 
304
+ // Cancel / Done toolbar below the picker — right-justified so both
305
+ // actions sit in the trailing corner, clear of the calendar header.
306
+ // Skipped entirely when confirmToolbarMode == "hide".
307
+ let toolbar: UIToolbar? = confirmToolbarMode == "hide" ? nil : {
308
+ let t = UIToolbar()
309
+ t.translatesAutoresizingMaskIntoConstraints = false
310
+ let flex = UIBarButtonItem(
311
+ barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
312
+ let cancelItem = UIBarButtonItem(
313
+ barButtonSystemItem: .cancel,
314
+ target: self, action: #selector(handleCancelTap))
315
+ let doneItem = UIBarButtonItem(
316
+ barButtonSystemItem: .done,
317
+ target: self, action: #selector(handleDoneTap))
318
+ t.items = [flex, cancelItem, doneItem]
319
+ vc.view.addSubview(t)
320
+ return t
321
+ }()
322
+
290
323
  let useInlineFallback: Bool
291
324
  if #available(iOS 26.0, *) {
292
325
  useInlineFallback = false
@@ -299,21 +332,42 @@ public final class PCDatePickerView: UIControl,
299
332
  vc.view.backgroundColor = .systemBackground
300
333
  vc.view.isOpaque = true
301
334
 
302
- NSLayoutConstraint.activate([
335
+ var constraints: [NSLayoutConstraint] = [
303
336
  picker.topAnchor.constraint(equalTo: vc.view.topAnchor),
304
337
  picker.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor),
305
338
  picker.trailingAnchor.constraint(equalTo: vc.view.trailingAnchor),
306
- picker.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor),
307
- ])
339
+ ]
340
+ if let toolbar {
341
+ constraints += [
342
+ toolbar.topAnchor.constraint(equalTo: picker.bottomAnchor),
343
+ toolbar.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor),
344
+ toolbar.trailingAnchor.constraint(equalTo: vc.view.trailingAnchor),
345
+ toolbar.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor),
346
+ toolbar.heightAnchor.constraint(equalToConstant: modalToolbarHeight),
347
+ ]
348
+ } else {
349
+ constraints.append(
350
+ picker.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor))
351
+ }
352
+ NSLayoutConstraint.activate(constraints)
308
353
  } else {
309
354
  // Liquid Glass path
310
355
  vc.view.backgroundColor = .clear
311
356
  vc.view.isOpaque = false
312
357
 
313
- NSLayoutConstraint.activate([
358
+ var constraints: [NSLayoutConstraint] = [
314
359
  picker.topAnchor.constraint(equalTo: vc.view.topAnchor),
315
360
  picker.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor),
316
- ])
361
+ ]
362
+ if let toolbar {
363
+ constraints += [
364
+ toolbar.topAnchor.constraint(equalTo: picker.bottomAnchor),
365
+ toolbar.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor),
366
+ toolbar.trailingAnchor.constraint(equalTo: vc.view.trailingAnchor),
367
+ toolbar.heightAnchor.constraint(equalToConstant: modalToolbarHeight),
368
+ ]
369
+ }
370
+ NSLayoutConstraint.activate(constraints)
317
371
  }
318
372
 
319
373
  let size = popoverContentSize()
@@ -373,11 +427,26 @@ public final class PCDatePickerView: UIControl,
373
427
  // MARK: - Value changes
374
428
 
375
429
  @objc private func handleValueChanged() {
376
- // Skip “programmatic/settle” changes
430
+ // Skip "programmatic/settle" changes
377
431
  if suppressChangeEvents { return }
378
432
 
379
433
  let ms = picker.date.timeIntervalSince1970 * 1000.0
380
- onChangeHandler?(NSNumber(value: ms))
434
+ // In modal mode, valueChanged is "user is still adjusting" —
435
+ // confirmation only happens when the user taps Done. Embedded
436
+ // presentation always confirms (there's no Done button to gate on).
437
+ let isModal = presentation == "modal" && modalVC != nil
438
+ onChangeHandler?(NSNumber(value: ms), !isModal)
439
+ }
440
+
441
+ @objc private func handleDoneTap() {
442
+ guard presentation == "modal", modalVC != nil else { return }
443
+ let ms = picker.date.timeIntervalSince1970 * 1000.0
444
+ onChangeHandler?(NSNumber(value: ms), true)
445
+ dismissIfNeeded(emitCancel: false)
446
+ }
447
+
448
+ @objc private func handleCancelTap() {
449
+ dismissIfNeeded(emitCancel: true)
381
450
  }
382
451
 
383
452
  // MARK: - Apply props (avoid firing valueChanged)
@@ -44,7 +44,7 @@ function DatePicker(props) {
44
44
  } = props;
45
45
  const isModal = presentation === 'modal';
46
46
  const handleConfirm = (0, _react.useCallback)(e => {
47
- onConfirm?.(new Date(e.nativeEvent.timestampMs));
47
+ onConfirm?.(new Date(e.nativeEvent.timestampMs), e.nativeEvent.confirmed);
48
48
  }, [onConfirm]);
49
49
  const handleClosed = (0, _react.useCallback)(() => {
50
50
  onClosed?.();
@@ -65,7 +65,8 @@ function DatePicker(props) {
65
65
  preferredStyle: ios.preferredStyle,
66
66
  countDownDurationSeconds: ios.countDownDurationSeconds,
67
67
  minuteInterval: ios.minuteInterval,
68
- roundsToMinuteInterval: ios.roundsToMinuteInterval
68
+ roundsToMinuteInterval: ios.roundsToMinuteInterval,
69
+ confirmToolbar: ios.showConfirmToolbar === false ? 'hide' : 'show'
69
70
  } : undefined,
70
71
  android: android ? {
71
72
  firstDayOfWeek: android.firstDayOfWeek,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_DatePickerNativeComponent","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NO_DATE_SENTINEL","Number","MIN_SAFE_INTEGER","dateToMsOrSentinel","d","ms","getTime","isFinite","normalizeVisible","presentation","visible","undefined","DatePicker","props","style","date","minDate","maxDate","locale","timeZoneName","mode","onConfirm","onClosed","ios","android","testID","isModal","handleConfirm","useCallback","Date","nativeEvent","timestampMs","handleClosed","nativeProps","styles","picker","dateMs","minDateMs","maxDateMs","preferredStyle","countDownDurationSeconds","minuteInterval","roundsToMinuteInterval","firstDayOfWeek","material","dialogTitle","positiveButtonTitle","negativeButtonTitle","jsx","StyleSheet","create"],"sourceRoot":"../../src","sources":["DatePicker.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_DatePickerNativeComponent","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NO_DATE_SENTINEL","Number","MIN_SAFE_INTEGER","dateToMsOrSentinel","d","ms","getTime","isFinite","normalizeVisible","presentation","visible","undefined","DatePicker","props","style","date","minDate","maxDate","locale","timeZoneName","mode","onConfirm","onClosed","ios","android","testID","isModal","handleConfirm","useCallback","Date","nativeEvent","timestampMs","confirmed","handleClosed","nativeProps","styles","picker","dateMs","minDateMs","maxDateMs","preferredStyle","countDownDurationSeconds","minuteInterval","roundsToMinuteInterval","confirmToolbar","showConfirmToolbar","firstDayOfWeek","material","dialogTitle","positiveButtonTitle","negativeButtonTitle","jsx","StyleSheet","create"],"sourceRoot":"../../src","sources":["DatePicker.tsx"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ export type TimestampMs = CodegenTypes.Double;
6
6
 
7
7
  export type DateChangeEvent = {
8
8
  timestampMs: CodegenTypes.Double;
9
+ confirmed: boolean;
9
10
  };
10
11
 
11
12
  export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
@@ -13,12 +14,14 @@ export type DatePickerPresentation = 'modal' | 'embedded';
13
14
 
14
15
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
15
16
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
17
+ export type IOSConfirmToolbar = 'show' | 'hide';
16
18
 
17
19
  export type IOSProps = {
18
20
  preferredStyle?: string; // IOSDatePickerStyle
19
21
  countDownDurationSeconds?: CodegenTypes.Double;
20
22
  minuteInterval?: CodegenTypes.Int32;
21
23
  roundsToMinuteInterval?: string; // IOSRoundsToMinuteInterval
24
+ confirmToolbar?: string; // IOSConfirmToolbar
22
25
  };
23
26
 
24
27
  export type AndroidProps = {
@@ -37,7 +37,7 @@ export function DatePicker(props) {
37
37
  } = props;
38
38
  const isModal = presentation === 'modal';
39
39
  const handleConfirm = useCallback(e => {
40
- onConfirm?.(new Date(e.nativeEvent.timestampMs));
40
+ onConfirm?.(new Date(e.nativeEvent.timestampMs), e.nativeEvent.confirmed);
41
41
  }, [onConfirm]);
42
42
  const handleClosed = useCallback(() => {
43
43
  onClosed?.();
@@ -58,7 +58,8 @@ export function DatePicker(props) {
58
58
  preferredStyle: ios.preferredStyle,
59
59
  countDownDurationSeconds: ios.countDownDurationSeconds,
60
60
  minuteInterval: ios.minuteInterval,
61
- roundsToMinuteInterval: ios.roundsToMinuteInterval
61
+ roundsToMinuteInterval: ios.roundsToMinuteInterval,
62
+ confirmToolbar: ios.showConfirmToolbar === false ? 'hide' : 'show'
62
63
  } : undefined,
63
64
  android: android ? {
64
65
  firstDayOfWeek: android.firstDayOfWeek,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","StyleSheet","NativeDatePicker","jsx","_jsx","NO_DATE_SENTINEL","Number","MIN_SAFE_INTEGER","dateToMsOrSentinel","d","ms","getTime","isFinite","normalizeVisible","presentation","visible","undefined","DatePicker","props","style","date","minDate","maxDate","locale","timeZoneName","mode","onConfirm","onClosed","ios","android","testID","isModal","handleConfirm","e","Date","nativeEvent","timestampMs","handleClosed","nativeProps","styles","picker","dateMs","minDateMs","maxDateMs","preferredStyle","countDownDurationSeconds","minuteInterval","roundsToMinuteInterval","firstDayOfWeek","material","dialogTitle","positiveButtonTitle","negativeButtonTitle","create"],"sourceRoot":"../../src","sources":["DatePicker.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","StyleSheet","NativeDatePicker","jsx","_jsx","NO_DATE_SENTINEL","Number","MIN_SAFE_INTEGER","dateToMsOrSentinel","d","ms","getTime","isFinite","normalizeVisible","presentation","visible","undefined","DatePicker","props","style","date","minDate","maxDate","locale","timeZoneName","mode","onConfirm","onClosed","ios","android","testID","isModal","handleConfirm","e","Date","nativeEvent","timestampMs","confirmed","handleClosed","nativeProps","styles","picker","dateMs","minDateMs","maxDateMs","preferredStyle","countDownDurationSeconds","minuteInterval","roundsToMinuteInterval","confirmToolbar","showConfirmToolbar","firstDayOfWeek","material","dialogTitle","positiveButtonTitle","negativeButtonTitle","create"],"sourceRoot":"../../src","sources":["DatePicker.tsx"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@ export type TimestampMs = CodegenTypes.Double;
6
6
 
7
7
  export type DateChangeEvent = {
8
8
  timestampMs: CodegenTypes.Double;
9
+ confirmed: boolean;
9
10
  };
10
11
 
11
12
  export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
@@ -13,12 +14,14 @@ export type DatePickerPresentation = 'modal' | 'embedded';
13
14
 
14
15
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
15
16
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
17
+ export type IOSConfirmToolbar = 'show' | 'hide';
16
18
 
17
19
  export type IOSProps = {
18
20
  preferredStyle?: string; // IOSDatePickerStyle
19
21
  countDownDurationSeconds?: CodegenTypes.Double;
20
22
  minuteInterval?: CodegenTypes.Int32;
21
23
  roundsToMinuteInterval?: string; // IOSRoundsToMinuteInterval
24
+ confirmToolbar?: string; // IOSConfirmToolbar
22
25
  };
23
26
 
24
27
  export type AndroidProps = {
@@ -18,7 +18,7 @@ export type DatePickerProps = {
18
18
  * Wrapper ergonomics: boolean.
19
19
  */
20
20
  visible?: boolean;
21
- onConfirm?: (dateTime: Date) => void;
21
+ onConfirm?: (dateTime: Date, confirmed: boolean) => void;
22
22
  onClosed?: () => void;
23
23
  /** Test identifier */
24
24
  testID?: string;
@@ -27,6 +27,14 @@ export type DatePickerProps = {
27
27
  countDownDurationSeconds?: NativeIOSProps['countDownDurationSeconds'];
28
28
  minuteInterval?: NativeIOSProps['minuteInterval'];
29
29
  roundsToMinuteInterval?: IOSRoundsToMinuteInterval;
30
+ /**
31
+ * Modal only. Show a Cancel/Done toolbar below the picker. Defaults to
32
+ * true. When false, `onConfirm` never fires with `confirmed: true` —
33
+ * the caller is expected to drive dismissal themselves by flipping
34
+ * `visible` off (and can read the current date from the stream of
35
+ * `confirmed: false` events).
36
+ */
37
+ showConfirmToolbar?: boolean;
30
38
  };
31
39
  android?: {
32
40
  firstDayOfWeek?: NativeAndroidProps['firstDayOfWeek'];
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/DatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAwB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAyB,EAGvB,KAAK,QAAQ,IAAI,cAAc,EAC/B,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,eAAe,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7B,2DAA2D;IAC3D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,kBAAkB,CAAC;QACpC,wBAAwB,CAAC,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACtE,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAClD,sBAAsB,CAAC,EAAE,yBAAyB,CAAC;KACpD,CAAC;IAEF,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAChD,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAChE,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;KACjE,CAAC;CACH,CAAC;AAqBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAqErE"}
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/DatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAwB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAyB,EAGvB,KAAK,QAAQ,IAAI,cAAc,EAC/B,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,eAAe,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7B,2DAA2D;IAC3D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,kBAAkB,CAAC;QACpC,wBAAwB,CAAC,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACtE,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAClD,sBAAsB,CAAC,EAAE,yBAAyB,CAAC;QACnD;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;IAEF,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAChD,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAChE,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;KACjE,CAAC;CACH,CAAC;AAqBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAsErE"}
@@ -2,16 +2,19 @@ import type { CodegenTypes, ViewProps } from 'react-native';
2
2
  export type TimestampMs = CodegenTypes.Double;
3
3
  export type DateChangeEvent = {
4
4
  timestampMs: CodegenTypes.Double;
5
+ confirmed: boolean;
5
6
  };
6
7
  export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
7
8
  export type DatePickerPresentation = 'modal' | 'embedded';
8
9
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
9
10
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
11
+ export type IOSConfirmToolbar = 'show' | 'hide';
10
12
  export type IOSProps = {
11
13
  preferredStyle?: string;
12
14
  countDownDurationSeconds?: CodegenTypes.Double;
13
15
  minuteInterval?: CodegenTypes.Int32;
14
16
  roundsToMinuteInterval?: string;
17
+ confirmToolbar?: string;
15
18
  };
16
19
  export type AndroidProps = {
17
20
  firstDayOfWeek?: CodegenTypes.Int32;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/DatePickerNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/E,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,QAAQ,GAAG;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;IAC/C,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACrE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAErE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,SAAS,EAAE,WAAW;IACzD,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,SAAS,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5D;;AAED,wBAAmE"}
1
+ {"version":3,"file":"DatePickerNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/DatePickerNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/E,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;IAC/C,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACrE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAErE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,SAAS,EAAE,WAAW;IACzD,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,SAAS,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5D;;AAED,wBAAmE"}
@@ -18,7 +18,7 @@ export type DatePickerProps = {
18
18
  * Wrapper ergonomics: boolean.
19
19
  */
20
20
  visible?: boolean;
21
- onConfirm?: (dateTime: Date) => void;
21
+ onConfirm?: (dateTime: Date, confirmed: boolean) => void;
22
22
  onClosed?: () => void;
23
23
  /** Test identifier */
24
24
  testID?: string;
@@ -27,6 +27,14 @@ export type DatePickerProps = {
27
27
  countDownDurationSeconds?: NativeIOSProps['countDownDurationSeconds'];
28
28
  minuteInterval?: NativeIOSProps['minuteInterval'];
29
29
  roundsToMinuteInterval?: IOSRoundsToMinuteInterval;
30
+ /**
31
+ * Modal only. Show a Cancel/Done toolbar below the picker. Defaults to
32
+ * true. When false, `onConfirm` never fires with `confirmed: true` —
33
+ * the caller is expected to drive dismissal themselves by flipping
34
+ * `visible` off (and can read the current date from the stream of
35
+ * `confirmed: false` events).
36
+ */
37
+ showConfirmToolbar?: boolean;
30
38
  };
31
39
  android?: {
32
40
  firstDayOfWeek?: NativeAndroidProps['firstDayOfWeek'];
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/DatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAwB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAyB,EAGvB,KAAK,QAAQ,IAAI,cAAc,EAC/B,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,eAAe,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7B,2DAA2D;IAC3D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,kBAAkB,CAAC;QACpC,wBAAwB,CAAC,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACtE,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAClD,sBAAsB,CAAC,EAAE,yBAAyB,CAAC;KACpD,CAAC;IAEF,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAChD,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAChE,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;KACjE,CAAC;CACH,CAAC;AAqBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAqErE"}
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/DatePicker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAwB,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG/E,OAAyB,EAGvB,KAAK,QAAQ,IAAI,cAAc,EAC/B,KAAK,YAAY,IAAI,kBAAkB,EACvC,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,mBAAmB,EAAW,MAAM,eAAe,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAE7B,2DAA2D;IAC3D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAElB,mDAAmD;IACnD,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAEtC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,kBAAkB,CAAC;QACpC,wBAAwB,CAAC,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;QACtE,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAClD,sBAAsB,CAAC,EAAE,yBAAyB,CAAC;QACnD;;;;;;WAMG;QACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;IAEF,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACtD,QAAQ,CAAC,EAAE,mBAAmB,CAAC;QAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAChD,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;QAChE,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;KACjE,CAAC;CACH,CAAC;AAqBF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAsErE"}
@@ -2,16 +2,19 @@ import type { CodegenTypes, ViewProps } from 'react-native';
2
2
  export type TimestampMs = CodegenTypes.Double;
3
3
  export type DateChangeEvent = {
4
4
  timestampMs: CodegenTypes.Double;
5
+ confirmed: boolean;
5
6
  };
6
7
  export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
7
8
  export type DatePickerPresentation = 'modal' | 'embedded';
8
9
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
9
10
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
11
+ export type IOSConfirmToolbar = 'show' | 'hide';
10
12
  export type IOSProps = {
11
13
  preferredStyle?: string;
12
14
  countDownDurationSeconds?: CodegenTypes.Double;
13
15
  minuteInterval?: CodegenTypes.Int32;
14
16
  roundsToMinuteInterval?: string;
17
+ confirmToolbar?: string;
15
18
  };
16
19
  export type AndroidProps = {
17
20
  firstDayOfWeek?: CodegenTypes.Int32;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/DatePickerNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/E,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,QAAQ,GAAG;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;IAC/C,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACrE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAErE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,SAAS,EAAE,WAAW;IACzD,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,SAAS,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5D;;AAED,wBAAmE"}
1
+ {"version":3,"file":"DatePickerNativeComponent.d.ts","sourceRoot":"","sources":["../../../../src/DatePickerNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG5D,MAAM,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/E,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC;IAC/C,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,cAAc,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACpC,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAEtC;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAClE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACrE,SAAS,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAErE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,WAAY,SAAQ,SAAS,EAAE,WAAW;IACzD,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,SAAS,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;CAC5D;;AAED,wBAAmE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-platform-components",
3
- "version": "0.8.7",
3
+ "version": "0.8.9",
4
4
  "description": "Native UI components for React Native: DatePicker, ContextMenu, SelectionMenu, SegmentedControl, LiquidGlass.",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",
@@ -37,7 +37,7 @@ export type DatePickerProps = {
37
37
  */
38
38
  visible?: boolean;
39
39
 
40
- onConfirm?: (dateTime: Date) => void;
40
+ onConfirm?: (dateTime: Date, confirmed: boolean) => void;
41
41
  onClosed?: () => void;
42
42
 
43
43
  /** Test identifier */
@@ -48,6 +48,14 @@ export type DatePickerProps = {
48
48
  countDownDurationSeconds?: NativeIOSProps['countDownDurationSeconds'];
49
49
  minuteInterval?: NativeIOSProps['minuteInterval'];
50
50
  roundsToMinuteInterval?: IOSRoundsToMinuteInterval;
51
+ /**
52
+ * Modal only. Show a Cancel/Done toolbar below the picker. Defaults to
53
+ * true. When false, `onConfirm` never fires with `confirmed: true` —
54
+ * the caller is expected to drive dismissal themselves by flipping
55
+ * `visible` off (and can read the current date from the stream of
56
+ * `confirmed: false` events).
57
+ */
58
+ showConfirmToolbar?: boolean;
51
59
  };
52
60
 
53
61
  android?: {
@@ -100,7 +108,7 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
100
108
 
101
109
  const handleConfirm = useCallback(
102
110
  (e: NativeSyntheticEvent<DateChangeEvent>) => {
103
- onConfirm?.(new Date(e.nativeEvent.timestampMs));
111
+ onConfirm?.(new Date(e.nativeEvent.timestampMs), e.nativeEvent.confirmed);
104
112
  },
105
113
  [onConfirm]
106
114
  );
@@ -132,6 +140,7 @@ export function DatePicker(props: DatePickerProps): React.ReactElement {
132
140
  countDownDurationSeconds: ios.countDownDurationSeconds,
133
141
  minuteInterval: ios.minuteInterval,
134
142
  roundsToMinuteInterval: ios.roundsToMinuteInterval,
143
+ confirmToolbar: ios.showConfirmToolbar === false ? 'hide' : 'show',
135
144
  }
136
145
  : undefined,
137
146
 
@@ -6,6 +6,7 @@ export type TimestampMs = CodegenTypes.Double;
6
6
 
7
7
  export type DateChangeEvent = {
8
8
  timestampMs: CodegenTypes.Double;
9
+ confirmed: boolean;
9
10
  };
10
11
 
11
12
  export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
@@ -13,12 +14,14 @@ export type DatePickerPresentation = 'modal' | 'embedded';
13
14
 
14
15
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
15
16
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
17
+ export type IOSConfirmToolbar = 'show' | 'hide';
16
18
 
17
19
  export type IOSProps = {
18
20
  preferredStyle?: string; // IOSDatePickerStyle
19
21
  countDownDurationSeconds?: CodegenTypes.Double;
20
22
  minuteInterval?: CodegenTypes.Int32;
21
23
  roundsToMinuteInterval?: string; // IOSRoundsToMinuteInterval
24
+ confirmToolbar?: string; // IOSConfirmToolbar
22
25
  };
23
26
 
24
27
  export type AndroidProps = {