react-native-platform-components 0.8.8 → 0.8.10

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
@@ -473,12 +473,13 @@ Native date & time picker using **platform system pickers**.
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
 
@@ -494,12 +495,14 @@ Native date & time picker using **platform system pickers**.
494
495
 
495
496
  `onConfirm` fires on every date/time change, but the second argument (`confirmed`) lets you distinguish between browsing and deliberate selections:
496
497
 
497
- | Platform / Mode | Every change | Deliberate selection |
498
- | -------------------- | ---------------------------------------- | ------------------------------------------------------ |
499
- | **iOS modal** | `confirmed: false` (scrolling the wheel) | `confirmed: true` (tapping the already-selected value) |
500
- | **iOS embedded** | `confirmed: true` | — |
501
- | **Android modal** | — | `confirmed: true` (pressing OK) |
502
- | **Android embedded** | `confirmed: true` | — |
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'`.
503
506
 
504
507
  A common pattern is to close the modal only on a confirmed selection:
505
508
 
@@ -19,11 +19,47 @@ enum PCConstants {
19
19
  /// Minimum row height in selection menu popover (used as baseline)
20
20
  static let popoverRowHeightMin: CGFloat = 44
21
21
 
22
- /// Dynamic row height that respects user's preferred content size
22
+ /// Horizontal inset applied to each side of a menu row's label
23
+ static let popoverRowHorizontalInset: CGFloat = 16
24
+
25
+ /// Vertical padding added to each menu row's text (top + bottom combined)
26
+ static let popoverRowVerticalPadding: CGFloat = 16
27
+
28
+ /// Estimated single-line row height that respects the user's preferred
29
+ /// content size. Used only as a table-view estimate; actual rows self-size.
23
30
  static var popoverRowHeight: CGFloat {
24
31
  let bodyFont = UIFont.preferredFont(forTextStyle: .body)
25
- // Row height = font line height + vertical padding (16pt total)
26
- return max(popoverRowHeightMin, ceil(bodyFont.lineHeight) + 16)
32
+ return max(popoverRowHeightMin, ceil(bodyFont.lineHeight) + popoverRowVerticalPadding)
33
+ }
34
+
35
+ /// Measured height of a single menu row for the given label and content
36
+ /// width, accounting for multi-line wrapping at the current Dynamic Type
37
+ /// size. Mirrors the Auto Layout sizing of `PCGlassMenuCell` so the popover
38
+ /// container can be sized to fit its content.
39
+ static func popoverRowHeight(forLabel label: String, width: CGFloat) -> CGFloat {
40
+ let bodyFont = UIFont.preferredFont(forTextStyle: .body)
41
+ let textWidth = max(1, width - popoverRowHorizontalInset * 2)
42
+ let bounding = (label as NSString).boundingRect(
43
+ with: CGSize(width: textWidth, height: .greatestFiniteMagnitude),
44
+ options: [.usesLineFragmentOrigin, .usesFontLeading],
45
+ attributes: [.font: bodyFont],
46
+ context: nil
47
+ )
48
+ return max(popoverRowHeightMin, ceil(bounding.height) + popoverRowVerticalPadding)
49
+ }
50
+
51
+ /// Adaptive popover width. Widens for accessibility content size categories
52
+ /// so long labels wrap less aggressively (mirrors system menu behavior).
53
+ /// The caller is responsible for clamping to the available screen width.
54
+ static func popoverWidth(forCategory category: UIContentSizeCategory) -> CGFloat {
55
+ guard category.isAccessibilityCategory else { return popoverWidth }
56
+ switch category {
57
+ case .accessibilityMedium: return 300
58
+ case .accessibilityLarge: return 320
59
+ case .accessibilityExtraLarge: return 340
60
+ case .accessibilityExtraExtraLarge: return 360
61
+ default: return 380 // accessibilityExtraExtraExtraLarge and beyond
62
+ }
27
63
  }
28
64
 
29
65
  /// Vertical padding in selection menu popover (top + bottom)
@@ -191,6 +191,14 @@ using namespace facebook::react;
191
191
  }
192
192
  }
193
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
+
194
202
  if (needsToUpdateMeasurements) {
195
203
  [self updateMeasurements];
196
204
  }
@@ -6,15 +6,19 @@ private let logger = Logger(subsystem: "com.platformcomponents", category: "Date
6
6
  @objcMembers
7
7
  public final class PCDatePickerView: UIControl,
8
8
  UIPopoverPresentationControllerDelegate,
9
- UIAdaptivePresentationControllerDelegate,
10
- UIGestureRecognizerDelegate
9
+ UIAdaptivePresentationControllerDelegate
11
10
  {
12
11
  // MARK: - UI
13
12
  private let picker = UIDatePicker()
14
13
  private var modalVC: UIViewController?
15
14
  private var inlineConstraints: [NSLayoutConstraint] = []
16
- private var confirmWorkItem: DispatchWorkItem?
17
- private var tapGesture: UITapGestureRecognizer?
15
+
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
+ }
18
22
 
19
23
  // Suppress "programmatic" valueChanged events (apply props / initial present settle).
20
24
  private var suppressChangeEvents = false
@@ -88,6 +92,11 @@ public final class PCDatePickerView: UIControl,
88
92
  didSet { if oldValue != roundsToMinuteIntervalMode { applyRoundsMode() } }
89
93
  }
90
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
+
91
100
  // MARK: - Init
92
101
 
93
102
  public override init(frame: CGRect) {
@@ -199,13 +208,15 @@ public final class PCDatePickerView: UIControl,
199
208
  height: max(PCConstants.minTouchTargetHeight, fitted.height))
200
209
  }
201
210
 
202
- /// 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.
203
213
  private func popoverContentSize() -> CGSize {
204
214
  picker.setNeedsLayout()
205
215
  picker.layoutIfNeeded()
206
216
 
207
217
  let fitted = picker.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize)
208
- return fitted
218
+ let extra = confirmToolbarMode == "hide" ? 0 : modalToolbarHeight
219
+ return CGSize(width: fitted.width, height: fitted.height + extra)
209
220
  }
210
221
 
211
222
  // MARK: - Presentation
@@ -286,18 +297,29 @@ public final class PCDatePickerView: UIControl,
286
297
  // Prevent "settle" events right as we present.
287
298
  suppressNextChangesBriefly()
288
299
 
289
- // Set up tap-to-confirm gesture for modal mode
290
- confirmWorkItem?.cancel()
291
- let tap = UITapGestureRecognizer(target: self, action: #selector(handlePickerTap))
292
- tap.cancelsTouchesInView = false
293
- tap.delegate = self
294
- picker.addGestureRecognizer(tap)
295
- tapGesture = tap
296
-
297
300
  let vc = UIViewController()
298
301
  picker.translatesAutoresizingMaskIntoConstraints = false
299
302
  vc.view.addSubview(picker)
300
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
+
301
323
  let useInlineFallback: Bool
302
324
  if #available(iOS 26.0, *) {
303
325
  useInlineFallback = false
@@ -310,21 +332,42 @@ public final class PCDatePickerView: UIControl,
310
332
  vc.view.backgroundColor = .systemBackground
311
333
  vc.view.isOpaque = true
312
334
 
313
- NSLayoutConstraint.activate([
335
+ var constraints: [NSLayoutConstraint] = [
314
336
  picker.topAnchor.constraint(equalTo: vc.view.topAnchor),
315
337
  picker.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor),
316
338
  picker.trailingAnchor.constraint(equalTo: vc.view.trailingAnchor),
317
- picker.bottomAnchor.constraint(equalTo: vc.view.bottomAnchor),
318
- ])
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)
319
353
  } else {
320
354
  // Liquid Glass path
321
355
  vc.view.backgroundColor = .clear
322
356
  vc.view.isOpaque = false
323
357
 
324
- NSLayoutConstraint.activate([
358
+ var constraints: [NSLayoutConstraint] = [
325
359
  picker.topAnchor.constraint(equalTo: vc.view.topAnchor),
326
360
  picker.leadingAnchor.constraint(equalTo: vc.view.leadingAnchor),
327
- ])
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)
328
371
  }
329
372
 
330
373
  let size = popoverContentSize()
@@ -354,11 +397,6 @@ public final class PCDatePickerView: UIControl,
354
397
  guard let vc = modalVC else { return }
355
398
  logger.debug("dismissIfNeeded: dismissing modal, emitCancel=\(emitCancel)")
356
399
  modalVC = nil
357
- confirmWorkItem?.cancel()
358
- if let tap = tapGesture {
359
- picker.removeGestureRecognizer(tap)
360
- tapGesture = nil
361
- }
362
400
  vc.dismiss(animated: true) { [weak self] in
363
401
  guard let self else { return }
364
402
  if emitCancel { self.onCancelHandler?() }
@@ -376,11 +414,6 @@ public final class PCDatePickerView: UIControl,
376
414
  public func presentationControllerDidDismiss(_ presentationController: UIPresentationController)
377
415
  {
378
416
  modalVC = nil
379
- confirmWorkItem?.cancel()
380
- if let tap = tapGesture {
381
- picker.removeGestureRecognizer(tap)
382
- tapGesture = nil
383
- }
384
417
  onCancelHandler?()
385
418
  }
386
419
 
@@ -388,23 +421,9 @@ public final class PCDatePickerView: UIControl,
388
421
  _ popoverPresentationController: UIPopoverPresentationController
389
422
  ) {
390
423
  modalVC = nil
391
- confirmWorkItem?.cancel()
392
- if let tap = tapGesture {
393
- picker.removeGestureRecognizer(tap)
394
- tapGesture = nil
395
- }
396
424
  onCancelHandler?()
397
425
  }
398
426
 
399
- // MARK: - Gesture delegate
400
-
401
- public func gestureRecognizer(
402
- _ gestureRecognizer: UIGestureRecognizer,
403
- shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer
404
- ) -> Bool {
405
- return gestureRecognizer === tapGesture
406
- }
407
-
408
427
  // MARK: - Value changes
409
428
 
410
429
  @objc private func handleValueChanged() {
@@ -412,26 +431,22 @@ public final class PCDatePickerView: UIControl,
412
431
  if suppressChangeEvents { return }
413
432
 
414
433
  let ms = picker.date.timeIntervalSince1970 * 1000.0
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).
415
437
  let isModal = presentation == "modal" && modalVC != nil
416
438
  onChangeHandler?(NSNumber(value: ms), !isModal)
417
439
  }
418
440
 
419
- @objc private func handlePickerTap() {
441
+ @objc private func handleDoneTap() {
420
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
+ }
421
447
 
422
- confirmWorkItem?.cancel()
423
-
424
- let dateAtTap = picker.date
425
- let workItem = DispatchWorkItem { [weak self] in
426
- guard let self, self.modalVC != nil else { return }
427
- // If picker date is still the same, the tap was on the selected row → confirm
428
- if self.picker.date == dateAtTap {
429
- let ms = dateAtTap.timeIntervalSince1970 * 1000.0
430
- self.onChangeHandler?(NSNumber(value: ms), true)
431
- }
432
- }
433
- confirmWorkItem = workItem
434
- DispatchQueue.main.asyncAfter(deadline: .now() + 0.15, execute: workItem)
448
+ @objc private func handleCancelTap() {
449
+ dismissIfNeeded(emitCancel: true)
435
450
  }
436
451
 
437
452
  // MARK: - Apply props (avoid firing valueChanged)
@@ -277,33 +277,53 @@ public final class PCSelectionMenuView: UIControl {
277
277
  // Calculate menu position relative to source view
278
278
  let sourceFrame = self.convert(self.bounds, to: vc.view)
279
279
  let screenBounds = vc.view.bounds
280
- let popoverHeight = min(
281
- CGFloat(opts.count) * PCConstants.popoverRowHeight + PCConstants.popoverVerticalPadding,
282
- PCConstants.popoverMaxHeight
283
- )
284
280
  let spacing: CGFloat = 8
285
281
 
282
+ // Adaptive width (wider at accessibility sizes), clamped to the screen.
283
+ let category = self.traitCollection.preferredContentSizeCategory
284
+ let menuWidth = min(
285
+ PCConstants.popoverWidth(forCategory: category),
286
+ screenBounds.width - 32
287
+ )
288
+
289
+ // Measure the real (possibly multi-line) content height so the
290
+ // container fits its rows instead of clipping or leaving gaps.
291
+ let contentHeight = opts.reduce(PCConstants.popoverVerticalPadding) { partial, opt in
292
+ partial + PCConstants.popoverRowHeight(forLabel: opt.label, width: menuWidth)
293
+ }
294
+ // Allow taller menus at accessibility sizes; otherwise keep them compact.
295
+ let maxHeight = category.isAccessibilityCategory
296
+ ? max(PCConstants.popoverMaxHeight, screenBounds.height - 120)
297
+ : PCConstants.popoverMaxHeight
298
+ let popoverHeight = min(contentHeight, maxHeight)
299
+
286
300
  // Check if menu fits below the source view
287
- let rowHeight = PCConstants.popoverRowHeight
301
+ let firstRowHeight = PCConstants.popoverRowHeight(forLabel: opts[0].label, width: menuWidth)
288
302
  let wouldExtendBeyondBottom = sourceFrame.maxY + spacing + popoverHeight > screenBounds.maxY - 20
289
303
 
290
- let menuY: CGFloat
304
+ var menuY: CGFloat
291
305
  if wouldExtendBeyondBottom {
292
306
  // Position above the source view (no overlap offset)
293
307
  menuY = sourceFrame.minY - spacing - popoverHeight
294
308
  } else {
295
309
  // Position below, but shift up by one row to overlap trigger (like system menu)
296
- menuY = sourceFrame.maxY + spacing - rowHeight
310
+ menuY = sourceFrame.maxY + spacing - firstRowHeight
297
311
  }
298
312
 
313
+ // Keep the menu fully on screen vertically (tall menus at large
314
+ // Dynamic Type sizes can otherwise run off the top or bottom).
315
+ let topMargin = vc.view.safeAreaInsets.top + spacing
316
+ let bottomLimit = screenBounds.maxY - vc.view.safeAreaInsets.bottom - spacing - popoverHeight
317
+ menuY = min(max(menuY, topMargin), max(topMargin, bottomLimit))
318
+
299
319
  // Center horizontally, but keep within screen bounds
300
- var menuX = sourceFrame.midX - PCConstants.popoverWidth / 2
301
- menuX = max(16, min(menuX, screenBounds.maxX - PCConstants.popoverWidth - 16))
320
+ var menuX = sourceFrame.midX - menuWidth / 2
321
+ menuX = max(16, min(menuX, screenBounds.maxX - menuWidth - 16))
302
322
 
303
323
  let menuFrame = CGRect(
304
324
  x: menuX,
305
325
  y: menuY,
306
- width: PCConstants.popoverWidth,
326
+ width: menuWidth,
307
327
  height: popoverHeight
308
328
  )
309
329
 
@@ -365,6 +385,11 @@ public final class PCSelectionMenuView: UIControl {
365
385
  private class PCGlassMenuCell: UITableViewCell {
366
386
  static let reuseIdentifier = "PCGlassMenuCell"
367
387
 
388
+ /// Custom multi-line label. We avoid the legacy `textLabel` because it
389
+ /// defaults to a single line and does not drive self-sizing reliably, which
390
+ /// caused rows to overlap at large Dynamic Type sizes.
391
+ let menuLabel = UILabel()
392
+
368
393
  override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
369
394
  super.init(style: style, reuseIdentifier: reuseIdentifier)
370
395
  setupCell()
@@ -379,8 +404,26 @@ private class PCGlassMenuCell: UITableViewCell {
379
404
  backgroundColor = .clear
380
405
  contentView.backgroundColor = .clear
381
406
  selectionStyle = .none
382
- textLabel?.font = .preferredFont(forTextStyle: .body)
383
- textLabel?.adjustsFontForContentSizeCategory = true
407
+
408
+ menuLabel.font = .preferredFont(forTextStyle: .body)
409
+ menuLabel.adjustsFontForContentSizeCategory = true
410
+ menuLabel.numberOfLines = 0
411
+ menuLabel.translatesAutoresizingMaskIntoConstraints = false
412
+ contentView.addSubview(menuLabel)
413
+
414
+ let v = PCConstants.popoverRowVerticalPadding / 2
415
+ let h = PCConstants.popoverRowHorizontalInset
416
+ // Center the label and let it grow the row vertically. The min-height
417
+ // constraint guarantees the 44pt touch target for short labels, while
418
+ // the >= top / <= bottom pair lets tall (wrapped) labels expand the row.
419
+ NSLayoutConstraint.activate([
420
+ menuLabel.topAnchor.constraint(greaterThanOrEqualTo: contentView.topAnchor, constant: v),
421
+ menuLabel.bottomAnchor.constraint(lessThanOrEqualTo: contentView.bottomAnchor, constant: -v),
422
+ menuLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
423
+ menuLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: h),
424
+ menuLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -h),
425
+ contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: PCConstants.popoverRowHeightMin),
426
+ ])
384
427
  }
385
428
  }
386
429
 
@@ -451,7 +494,10 @@ private class PCMenuViewController: UIViewController, UITableViewDelegate, UITab
451
494
  tableView.backgroundColor = .clear
452
495
  tableView.separatorStyle = .none
453
496
  tableView.isScrollEnabled = true
454
- tableView.rowHeight = PCConstants.popoverRowHeight
497
+ // Self-sizing rows so labels that wrap at large Dynamic Type sizes get
498
+ // the height they need instead of overlapping a fixed-height row.
499
+ tableView.rowHeight = UITableView.automaticDimension
500
+ tableView.estimatedRowHeight = PCConstants.popoverRowHeight
455
501
  tableView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
456
502
  let verticalPad = PCConstants.popoverVerticalPadding / 2
457
503
  tableView.contentInset = UIEdgeInsets(top: verticalPad, left: 0, bottom: verticalPad, right: 0)
@@ -479,7 +525,7 @@ private class PCMenuViewController: UIViewController, UITableViewDelegate, UITab
479
525
 
480
526
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
481
527
  let cell = tableView.dequeueReusableCell(withIdentifier: PCGlassMenuCell.reuseIdentifier, for: indexPath)
482
- cell.textLabel?.text = options[indexPath.row].label
528
+ (cell as? PCGlassMenuCell)?.menuLabel.text = options[indexPath.row].label
483
529
  return cell
484
530
  }
485
531
 
@@ -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","confirmed","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":[]}
@@ -14,12 +14,14 @@ export type DatePickerPresentation = 'modal' | 'embedded';
14
14
 
15
15
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
16
16
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
17
+ export type IOSConfirmToolbar = 'show' | 'hide';
17
18
 
18
19
  export type IOSProps = {
19
20
  preferredStyle?: string; // IOSDatePickerStyle
20
21
  countDownDurationSeconds?: CodegenTypes.Double;
21
22
  minuteInterval?: CodegenTypes.Int32;
22
23
  roundsToMinuteInterval?: string; // IOSRoundsToMinuteInterval
24
+ confirmToolbar?: string; // IOSConfirmToolbar
23
25
  };
24
26
 
25
27
  export type AndroidProps = {
@@ -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","confirmed","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":[]}
@@ -14,12 +14,14 @@ export type DatePickerPresentation = 'modal' | 'embedded';
14
14
 
15
15
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
16
16
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
17
+ export type IOSConfirmToolbar = 'show' | 'hide';
17
18
 
18
19
  export type IOSProps = {
19
20
  preferredStyle?: string; // IOSDatePickerStyle
20
21
  countDownDurationSeconds?: CodegenTypes.Double;
21
22
  minuteInterval?: CodegenTypes.Int32;
22
23
  roundsToMinuteInterval?: string; // IOSRoundsToMinuteInterval
24
+ confirmToolbar?: string; // IOSConfirmToolbar
23
25
  };
24
26
 
25
27
  export type AndroidProps = {
@@ -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,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;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"}
@@ -8,11 +8,13 @@ export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
8
8
  export type DatePickerPresentation = 'modal' | 'embedded';
9
9
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
10
10
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
11
+ export type IOSConfirmToolbar = 'show' | 'hide';
11
12
  export type IOSProps = {
12
13
  preferredStyle?: string;
13
14
  countDownDurationSeconds?: CodegenTypes.Double;
14
15
  minuteInterval?: CodegenTypes.Int32;
15
16
  roundsToMinuteInterval?: string;
17
+ confirmToolbar?: string;
16
18
  };
17
19
  export type AndroidProps = {
18
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;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;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"}
@@ -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,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;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"}
@@ -8,11 +8,13 @@ export type DatePickerMode = 'date' | 'time' | 'dateAndTime' | 'countDownTimer';
8
8
  export type DatePickerPresentation = 'modal' | 'embedded';
9
9
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
10
10
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
11
+ export type IOSConfirmToolbar = 'show' | 'hide';
11
12
  export type IOSProps = {
12
13
  preferredStyle?: string;
13
14
  countDownDurationSeconds?: CodegenTypes.Double;
14
15
  minuteInterval?: CodegenTypes.Int32;
15
16
  roundsToMinuteInterval?: string;
17
+ confirmToolbar?: string;
16
18
  };
17
19
  export type AndroidProps = {
18
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;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;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.8",
3
+ "version": "0.8.10",
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",
@@ -110,15 +110,16 @@
110
110
  "@eslint/compat": "^2.0.1",
111
111
  "@eslint/eslintrc": "^3.3.3",
112
112
  "@eslint/js": "^9.39.2",
113
- "@expo/config-plugins": "^54.0.4",
114
- "@react-native-community/cli": "20.1.0",
115
- "@react-native/babel-preset": "0.83.1",
116
- "@react-native/eslint-config": "^0.83.1",
113
+ "@expo/config-plugins": "^56.0.8",
114
+ "@react-native-community/cli": "20.1.3",
115
+ "@react-native/babel-preset": "0.85.3",
116
+ "@react-native/eslint-config": "^0.85.3",
117
+ "@react-native/jest-preset": "0.85.3",
117
118
  "@release-it/conventional-changelog": "^10.0.4",
118
119
  "@types/jest": "^30.0.0",
119
120
  "@types/react": "^19.2.9",
120
121
  "@types/react-test-renderer": "^19.1.0",
121
- "babel-preset-expo": "^54.0.10",
122
+ "babel-preset-expo": "^56.0.14",
122
123
  "commitlint": "^20.3.1",
123
124
  "del-cli": "^7.0.0",
124
125
  "eslint": "^9.39.2",
@@ -128,7 +129,7 @@
128
129
  "lefthook": "^2.0.15",
129
130
  "prettier": "^3.8.1",
130
131
  "react": "19.2.3",
131
- "react-native": "0.83.1",
132
+ "react-native": "0.85.3",
132
133
  "react-native-builder-bob": "^0.40.17",
133
134
  "react-test-renderer": "19.2.3",
134
135
  "release-it": "^19.2.4",
@@ -218,7 +219,7 @@
218
219
  }
219
220
  },
220
221
  "jest": {
221
- "preset": "react-native",
222
+ "preset": "@react-native/jest-preset",
222
223
  "modulePathIgnorePatterns": [
223
224
  "<rootDir>/example/node_modules",
224
225
  "<rootDir>/lib/"
@@ -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?: {
@@ -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
 
@@ -14,12 +14,14 @@ export type DatePickerPresentation = 'modal' | 'embedded';
14
14
 
15
15
  export type IOSDatePickerStyle = 'automatic' | 'compact' | 'inline' | 'wheels';
16
16
  export type IOSRoundsToMinuteInterval = 'inherit' | 'round' | 'noRound';
17
+ export type IOSConfirmToolbar = 'show' | 'hide';
17
18
 
18
19
  export type IOSProps = {
19
20
  preferredStyle?: string; // IOSDatePickerStyle
20
21
  countDownDurationSeconds?: CodegenTypes.Double;
21
22
  minuteInterval?: CodegenTypes.Int32;
22
23
  roundsToMinuteInterval?: string; // IOSRoundsToMinuteInterval
24
+ confirmToolbar?: string; // IOSConfirmToolbar
23
25
  };
24
26
 
25
27
  export type AndroidProps = {