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 +65 -35
- package/android/src/main/java/com/platformcomponents/PCDatePickerViewManager.kt +3 -1
- package/ios/PCDatePicker.mm +10 -1
- package/ios/PCDatePickerView.swift +81 -12
- package/lib/commonjs/DatePicker.js +3 -2
- package/lib/commonjs/DatePicker.js.map +1 -1
- package/lib/commonjs/DatePickerNativeComponent.ts +3 -0
- package/lib/module/DatePicker.js +3 -2
- package/lib/module/DatePicker.js.map +1 -1
- package/lib/module/DatePickerNativeComponent.ts +3 -0
- package/lib/typescript/commonjs/src/DatePicker.d.ts +9 -1
- package/lib/typescript/commonjs/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts +3 -0
- package/lib/typescript/commonjs/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePicker.d.ts +9 -1
- package/lib/typescript/module/src/DatePicker.d.ts.map +1 -1
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts +3 -0
- package/lib/typescript/module/src/DatePickerNativeComponent.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/DatePicker.tsx +11 -2
- package/src/DatePickerNativeComponent.ts +3 -0
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`
|
|
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
|
|
639
|
-
|
|
|
640
|
-
| `effect`
|
|
641
|
-
| `interactive`
|
|
642
|
-
| `tintColor`
|
|
643
|
-
| `colorScheme`
|
|
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
|
|
708
|
-
|
|
|
709
|
-
| Hex
|
|
710
|
-
| RGB
|
|
711
|
-
| RGBA
|
|
712
|
-
| HSL
|
|
713
|
-
| HSLA
|
|
714
|
-
| Named
|
|
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
|
}
|
package/ios/PCDatePicker.mm
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
430
|
+
// Skip "programmatic/settle" changes
|
|
377
431
|
if suppressChangeEvents { return }
|
|
378
432
|
|
|
379
433
|
let ms = picker.date.timeIntervalSince1970 * 1000.0
|
|
380
|
-
|
|
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":";;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,0BAAA,GAAAC,sBAAA,CAAAH,OAAA;AASqC,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAdrC;;
|
|
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 = {
|
package/lib/module/DatePicker.js
CHANGED
|
@@ -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":";;AAAA;AACA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAE1C,SAASC,UAAU,QAAQ,cAAc;AAEzC,OAAOC,gBAAgB,MAShB,6BAA6B;AAAC,SAAAC,GAAA,IAAAC,IAAA;
|
|
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":";;AAAA;AACA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAE1C,SAASC,UAAU,QAAQ,cAAc;AAEzC,OAAOC,gBAAgB,MAShB,6BAA6B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAuDrC;AACA;AACA,MAAMC,gBAAgB,GAAGC,MAAM,CAACC,gBAAgB;AAEhD,SAASC,kBAAkBA,CAACC,CAA0B,EAAU;EAC9D,IAAI,CAACA,CAAC,EAAE,OAAOJ,gBAAgB;EAC/B,MAAMK,EAAE,GAAGD,CAAC,CAACE,OAAO,CAAC,CAAC;EACtB,OAAOL,MAAM,CAACM,QAAQ,CAACF,EAAE,CAAC,GAAGA,EAAE,GAAGL,gBAAgB;AACpD;AAEA,SAASQ,gBAAgBA,CACvBC,YAA+D,EAC/DC,OAA4B,EACP;EACrB;EACA,IAAID,YAAY,KAAK,OAAO,EAAE,OAAOE,SAAS;EAC9C,OAAOD,OAAO,GAAG,MAAM,GAAG,QAAQ;AACpC;AAEA,OAAO,SAASE,UAAUA,CAACC,KAAsB,EAAsB;EACrE,MAAM;IACJC,KAAK;IACLC,IAAI;IACJC,OAAO;IACPC,OAAO;IACPC,MAAM;IACNC,YAAY;IACZC,IAAI;IACJX,YAAY,GAAG,OAAO;IACtBC,OAAO;IACPW,SAAS;IACTC,QAAQ;IACRC,GAAG;IACHC,OAAO;IACPC;EACF,CAAC,GAAGZ,KAAK;EAET,MAAMa,OAAO,GAAGjB,YAAY,KAAK,OAAO;EAExC,MAAMkB,aAAa,GAAGhC,WAAW,CAC9BiC,CAAwC,IAAK;IAC5CP,SAAS,GAAG,IAAIQ,IAAI,CAACD,CAAC,CAACE,WAAW,CAACC,WAAW,CAAC,EAAEH,CAAC,CAACE,WAAW,CAACE,SAAS,CAAC;EAC3E,CAAC,EACD,CAACX,SAAS,CACZ,CAAC;EAED,MAAMY,YAAY,GAAGtC,WAAW,CAAC,MAAM;IACrC2B,QAAQ,GAAG,CAAC;EACd,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEd,MAAMY,WAAkC,GAAG;IACzCpB,KAAK,EAAE,CAACqB,MAAM,CAACC,MAAM,EAAEtB,KAAK,CAAC;IAE7BM,IAAI;IACJF,MAAM;IACNC,YAAY;IAEZV,YAAY;IACZC,OAAO,EAAEF,gBAAgB,CAACC,YAAY,EAAEC,OAAO,CAAC;IAEhD2B,MAAM,EAAElC,kBAAkB,CAACY,IAAI,CAAC;IAChCuB,SAAS,EAAEnC,kBAAkB,CAACa,OAAO,CAAC;IACtCuB,SAAS,EAAEpC,kBAAkB,CAACc,OAAO,CAAC;IAEtCI,SAAS,EAAEA,SAAS,GAAGM,aAAa,GAAGhB,SAAS;IAChDW,QAAQ,EAAEI,OAAO,IAAIJ,QAAQ,GAAGW,YAAY,GAAGtB,SAAS;IAExDY,GAAG,EAAEA,GAAG,GACJ;MACEiB,cAAc,EAAEjB,GAAG,CAACiB,cAAc;MAClCC,wBAAwB,EAAElB,GAAG,CAACkB,wBAAwB;MACtDC,cAAc,EAAEnB,GAAG,CAACmB,cAAc;MAClCC,sBAAsB,EAAEpB,GAAG,CAACoB,sBAAsB;MAClDC,cAAc,EAAErB,GAAG,CAACsB,kBAAkB,KAAK,KAAK,GAAG,MAAM,GAAG;IAC9D,CAAC,GACDlC,SAAS;IAEba,OAAO,EAAEA,OAAO,GACZ;MACEsB,cAAc,EAAEtB,OAAO,CAACsB,cAAc;MACtCC,QAAQ,EAAEvB,OAAO,CAACuB,QAAQ;MAC1BC,WAAW,EAAExB,OAAO,CAACwB,WAAW;MAChCC,mBAAmB,EAAEzB,OAAO,CAACyB,mBAAmB;MAChDC,mBAAmB,EAAE1B,OAAO,CAAC0B;IAC/B,CAAC,GACDvC;EACN,CAAC;EAED,oBAAOZ,IAAA,CAACF,gBAAgB;IAAC4B,MAAM,EAAEA,MAAO;IAAA,GAAKS;EAAW,CAAG,CAAC;AAC9D;AAEA,MAAMC,MAAM,GAAGvC,UAAU,CAACuD,MAAM,CAAC;EAC/Bf,MAAM,EAAE,CAAC;AACX,CAAC,CAAC","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;
|
|
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;
|
|
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;
|
|
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;
|
|
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.
|
|
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",
|
package/src/DatePicker.tsx
CHANGED
|
@@ -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 = {
|