@expo/ui 55.0.2 → 55.0.4
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/CHANGELOG.md +42 -0
- package/android/build.gradle +2 -2
- package/android/src/main/java/expo/modules/ui/AnimatedVisibilityView.kt +130 -0
- package/android/src/main/java/expo/modules/ui/BottomSheetView.kt +91 -13
- package/android/src/main/java/expo/modules/ui/CardView.kt +138 -34
- package/android/src/main/java/expo/modules/ui/CheckboxView.kt +98 -0
- package/android/src/main/java/expo/modules/ui/ChipView.kt +267 -142
- package/android/src/main/java/expo/modules/ui/DatePickerView.kt +258 -70
- package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +209 -61
- package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +44 -1
- package/android/src/main/java/expo/modules/ui/ProgressView.kt +189 -89
- package/android/src/main/java/expo/modules/ui/RadioButtonView.kt +3 -7
- package/android/src/main/java/expo/modules/ui/SegmentedButtonView.kt +115 -0
- package/android/src/main/java/expo/modules/ui/SegmentedControlView.kt +35 -0
- package/android/src/main/java/expo/modules/ui/SliderView.kt +70 -12
- package/android/src/main/java/expo/modules/ui/SwitchView.kt +53 -161
- package/android/src/main/java/expo/modules/ui/TextInputView.kt +39 -15
- package/android/src/main/java/expo/modules/ui/ToggleButtonView.kt +95 -57
- package/android/src/main/java/expo/modules/ui/button/Button.kt +117 -158
- package/android/src/main/java/expo/modules/ui/button/FloatingActionButton.kt +92 -0
- package/android/src/main/java/expo/modules/ui/button/IconButton.kt +73 -86
- package/android/src/main/java/expo/modules/ui/menu/DropdownMenu.kt +39 -0
- package/android/src/main/java/expo/modules/ui/menu/DropdownMenuItem.kt +70 -0
- package/android/src/main/java/expo/modules/ui/menu/DropdownMenuRecords.kt +18 -0
- package/build/datetime-picker/DateTimePicker.android.d.ts +3 -0
- package/build/datetime-picker/DateTimePicker.android.d.ts.map +1 -0
- package/build/datetime-picker/DateTimePicker.d.ts +3 -0
- package/build/datetime-picker/DateTimePicker.d.ts.map +1 -0
- package/build/datetime-picker/DateTimePicker.web.d.ts +3 -0
- package/build/datetime-picker/DateTimePicker.web.d.ts.map +1 -0
- package/build/datetime-picker/index.d.ts +5 -0
- package/build/datetime-picker/index.d.ts.map +1 -0
- package/build/datetime-picker/types.d.ts +128 -0
- package/build/datetime-picker/types.d.ts.map +1 -0
- package/build/jetpack-compose/AnimatedVisibility/index.d.ts +134 -0
- package/build/jetpack-compose/AnimatedVisibility/index.d.ts.map +1 -0
- package/build/jetpack-compose/AnimatedVisibility/symbols.d.ts +3 -0
- package/build/jetpack-compose/AnimatedVisibility/symbols.d.ts.map +1 -0
- package/build/jetpack-compose/Button/index.d.ts +65 -51
- package/build/jetpack-compose/Button/index.d.ts.map +1 -1
- package/build/jetpack-compose/Card/index.d.ts +72 -14
- package/build/jetpack-compose/Card/index.d.ts.map +1 -1
- package/build/jetpack-compose/Checkbox/index.d.ts +73 -0
- package/build/jetpack-compose/Checkbox/index.d.ts.map +1 -0
- package/build/jetpack-compose/Chip/index.d.ts +247 -27
- package/build/jetpack-compose/Chip/index.d.ts.map +1 -1
- package/build/jetpack-compose/DatePicker/index.d.ts +38 -3
- package/build/jetpack-compose/DatePicker/index.d.ts.map +1 -1
- package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts +70 -0
- package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map +1 -0
- package/build/jetpack-compose/DropdownMenu/index.d.ts +68 -0
- package/build/jetpack-compose/DropdownMenu/index.d.ts.map +1 -0
- package/build/jetpack-compose/FloatingActionButton/index.d.ts +150 -0
- package/build/jetpack-compose/FloatingActionButton/index.d.ts.map +1 -0
- package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts +2 -2
- package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map +1 -1
- package/build/jetpack-compose/IconButton/index.d.ts +45 -29
- package/build/jetpack-compose/IconButton/index.d.ts.map +1 -1
- package/build/jetpack-compose/ModalBottomSheet/index.d.ts +65 -13
- package/build/jetpack-compose/ModalBottomSheet/index.d.ts.map +1 -1
- package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts +17 -0
- package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts.map +1 -0
- package/build/jetpack-compose/Progress/index.d.ts +78 -35
- package/build/jetpack-compose/Progress/index.d.ts.map +1 -1
- package/build/jetpack-compose/RadioButton/index.d.ts +2 -2
- package/build/jetpack-compose/RadioButton/index.d.ts.map +1 -1
- package/build/jetpack-compose/SegmentedButton/index.d.ts +74 -0
- package/build/jetpack-compose/SegmentedButton/index.d.ts.map +1 -0
- package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts +17 -0
- package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts.map +1 -0
- package/build/jetpack-compose/Slider/index.d.ts +34 -10
- package/build/jetpack-compose/Slider/index.d.ts.map +1 -1
- package/build/jetpack-compose/Switch/index.d.ts +10 -50
- package/build/jetpack-compose/Switch/index.d.ts.map +1 -1
- package/build/jetpack-compose/TextInput/index.d.ts +9 -0
- package/build/jetpack-compose/TextInput/index.d.ts.map +1 -1
- package/build/jetpack-compose/ToggleButton/index.d.ts +60 -32
- package/build/jetpack-compose/ToggleButton/index.d.ts.map +1 -1
- package/build/jetpack-compose/index.d.ts +5 -4
- package/build/jetpack-compose/index.d.ts.map +1 -1
- package/build/jetpack-compose/modifiers/index.d.ts +18 -1
- package/build/jetpack-compose/modifiers/index.d.ts.map +1 -1
- package/build/swift-ui/Link/index.d.ts +36 -0
- package/build/swift-ui/Link/index.d.ts.map +1 -0
- package/build/swift-ui/ProgressView/index.d.ts +1 -5
- package/build/swift-ui/ProgressView/index.d.ts.map +1 -1
- package/build/swift-ui/Stepper/index.d.ts +3 -3
- package/build/swift-ui/Stepper/index.d.ts.map +1 -1
- package/build/swift-ui/Text/index.d.ts +33 -1
- package/build/swift-ui/Text/index.d.ts.map +1 -1
- package/build/swift-ui/index.d.ts +1 -0
- package/build/swift-ui/index.d.ts.map +1 -1
- package/build/swift-ui/modifiers/environment.d.ts +16 -1
- package/build/swift-ui/modifiers/environment.d.ts.map +1 -1
- package/build/swift-ui/modifiers/index.d.ts +24 -7
- package/build/swift-ui/modifiers/index.d.ts.map +1 -1
- package/build/swift-ui/modifiers/shapes/index.d.ts +2 -2
- package/build/swift-ui/modifiers/widgets.d.ts +14 -0
- package/build/swift-ui/modifiers/widgets.d.ts.map +1 -0
- package/build/swift-ui/types.d.ts +7 -0
- package/build/swift-ui/types.d.ts.map +1 -1
- package/expo-module.config.json +1 -1
- package/ios/BottomSheetView.swift +1 -6
- package/ios/ClosedRangeDateRecord.swift +10 -0
- package/ios/ColorPickerView.swift +9 -8
- package/ios/ConfirmationDialog/ConfirmationDialog.swift +4 -6
- package/ios/DatePickerView.swift +7 -5
- package/ios/DisclosureGroupView.swift +5 -7
- package/ios/ExpoUIModule.swift +1 -0
- package/ios/LinkView.swift +29 -0
- package/ios/ListView.swift +6 -14
- package/ios/Modifiers/DefaultScrollAnchorForRoleModifier.swift +32 -0
- package/ios/Modifiers/DefaultScrollAnchorModifier.swift +16 -0
- package/ios/Modifiers/EnvironmentModifier.swift +14 -0
- package/ios/Modifiers/ViewModifierRegistry.swift +12 -0
- package/ios/Modifiers/WidgetModifiers.swift +12 -0
- package/ios/Picker/PickerView.swift +6 -10
- package/ios/Popover/PopoverView.swift +3 -5
- package/ios/ProgressView.swift +0 -5
- package/ios/SectionView.swift +3 -5
- package/ios/SliderView.swift +8 -6
- package/ios/StepperView.swift +12 -16
- package/ios/TextView.swift +37 -1
- package/ios/Toggle/ToggleView.swift +5 -7
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.2/expo.modules.ui-55.0.2.module → 55.0.4/expo.modules.ui-55.0.4.module} +22 -22
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.2/expo.modules.ui-55.0.2.pom → 55.0.4/expo.modules.ui-55.0.4.pom} +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha512 +1 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
- package/package.json +9 -2
- package/src/datetime-picker/DateTimePicker.android.tsx +126 -0
- package/src/datetime-picker/DateTimePicker.tsx +94 -0
- package/src/datetime-picker/DateTimePicker.web.tsx +5 -0
- package/src/datetime-picker/index.tsx +11 -0
- package/src/datetime-picker/types.tsx +147 -0
- package/src/jetpack-compose/AnimatedVisibility/index.tsx +206 -0
- package/src/jetpack-compose/AnimatedVisibility/symbols.ts +8 -0
- package/src/jetpack-compose/Button/index.tsx +69 -92
- package/src/jetpack-compose/Card/index.tsx +105 -29
- package/src/jetpack-compose/Checkbox/index.tsx +126 -0
- package/src/jetpack-compose/Chip/index.tsx +391 -51
- package/src/jetpack-compose/DatePicker/index.tsx +112 -7
- package/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx +126 -0
- package/src/jetpack-compose/DropdownMenu/index.tsx +107 -0
- package/src/jetpack-compose/FloatingActionButton/index.tsx +207 -0
- package/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx +4 -2
- package/src/jetpack-compose/IconButton/index.tsx +49 -56
- package/src/jetpack-compose/ModalBottomSheet/index.tsx +85 -15
- package/src/jetpack-compose/MultiChoiceSegmentedButtonRow/index.tsx +34 -0
- package/src/jetpack-compose/Progress/index.tsx +120 -62
- package/src/jetpack-compose/RadioButton/index.tsx +8 -9
- package/src/jetpack-compose/SegmentedButton/index.tsx +109 -0
- package/src/jetpack-compose/SingleChoiceSegmentedButtonRow/index.tsx +34 -0
- package/src/jetpack-compose/Slider/index.tsx +76 -29
- package/src/jetpack-compose/Switch/index.tsx +17 -87
- package/src/jetpack-compose/TextInput/index.tsx +10 -0
- package/src/jetpack-compose/ToggleButton/index.tsx +67 -43
- package/src/jetpack-compose/index.ts +5 -4
- package/src/jetpack-compose/modifiers/index.ts +26 -2
- package/src/swift-ui/Link/index.tsx +52 -0
- package/src/swift-ui/ProgressView/index.tsx +1 -3
- package/src/swift-ui/Stepper/index.tsx +7 -7
- package/src/swift-ui/Text/index.tsx +66 -2
- package/src/swift-ui/index.tsx +1 -0
- package/src/swift-ui/modifiers/environment.ts +17 -4
- package/src/swift-ui/modifiers/index.ts +44 -10
- package/src/swift-ui/modifiers/widgets.ts +18 -0
- package/src/swift-ui/types.ts +5 -0
- package/android/src/main/java/expo/modules/ui/FilterChipView.kt +0 -59
- package/android/src/main/java/expo/modules/ui/PickerView.kt +0 -161
- package/android/src/main/java/expo/modules/ui/TextButtonView.kt +0 -33
- package/android/src/main/java/expo/modules/ui/menu/ContextMenu.kt +0 -183
- package/android/src/main/java/expo/modules/ui/menu/ContextMenuRecords.kt +0 -64
- package/build/jetpack-compose/Button/types.d.ts +0 -5
- package/build/jetpack-compose/Button/types.d.ts.map +0 -1
- package/build/jetpack-compose/ContextMenu/Submenu.d.ts +0 -17
- package/build/jetpack-compose/ContextMenu/Submenu.d.ts.map +0 -1
- package/build/jetpack-compose/ContextMenu/index.d.ts +0 -65
- package/build/jetpack-compose/ContextMenu/index.d.ts.map +0 -1
- package/build/jetpack-compose/ContextMenu/utils.d.ts +0 -24
- package/build/jetpack-compose/ContextMenu/utils.d.ts.map +0 -1
- package/build/jetpack-compose/FilterChip/index.d.ts +0 -49
- package/build/jetpack-compose/FilterChip/index.d.ts.map +0 -1
- package/build/jetpack-compose/Picker/index.d.ts +0 -62
- package/build/jetpack-compose/Picker/index.d.ts.map +0 -1
- package/build/jetpack-compose/TextButton/index.d.ts +0 -29
- package/build/jetpack-compose/TextButton/index.d.ts.map +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar +0 -0
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha256 +0 -1
- package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha512 +0 -1
- package/src/jetpack-compose/Button/types.ts +0 -57
- package/src/jetpack-compose/ContextMenu/Submenu.tsx +0 -21
- package/src/jetpack-compose/ContextMenu/index.tsx +0 -149
- package/src/jetpack-compose/ContextMenu/utils.ts +0 -144
- package/src/jetpack-compose/FilterChip/index.tsx +0 -89
- package/src/jetpack-compose/Picker/index.tsx +0 -90
- package/src/jetpack-compose/TextButton/index.tsx +0 -55
|
@@ -1842,6 +1842,14 @@ extension ViewModifierRegistry {
|
|
|
1842
1842
|
return try ScrollDisabledModifier(from: params, appContext: appContext)
|
|
1843
1843
|
}
|
|
1844
1844
|
|
|
1845
|
+
register("defaultScrollAnchor") { params, appContext, _ in
|
|
1846
|
+
return try DefaultScrollAnchorModifier(from: params, appContext: appContext)
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
register("defaultScrollAnchorForRole") { params, appContext, _ in
|
|
1850
|
+
return try DefaultScrollAnchorForRoleModifier(from: params, appContext: appContext)
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1845
1853
|
register("progressViewStyle") { params, appContext, _ in
|
|
1846
1854
|
return try ProgressViewStyleModifier(from: params, appContext: appContext)
|
|
1847
1855
|
}
|
|
@@ -1885,5 +1893,9 @@ extension ViewModifierRegistry {
|
|
|
1885
1893
|
register("contentTransition") { params, appContext, _ in
|
|
1886
1894
|
return try ContentTransitionModifier(from: params, appContext: appContext)
|
|
1887
1895
|
}
|
|
1896
|
+
|
|
1897
|
+
register("widgetURL") { params, appContext, _ in
|
|
1898
|
+
return try WidgetURLModifier(from: params, appContext: appContext)
|
|
1899
|
+
}
|
|
1888
1900
|
}
|
|
1889
1901
|
}
|
|
@@ -44,3 +44,15 @@ internal struct WidgetAccentedRenderingModeModifier: Record {
|
|
|
44
44
|
#endif
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
|
|
48
|
+
internal struct WidgetURLModifier: ViewModifier, Record {
|
|
49
|
+
@Field var url: URL?
|
|
50
|
+
|
|
51
|
+
func body(content: Content) -> some View {
|
|
52
|
+
#if !os(tvOS)
|
|
53
|
+
content.widgetURL(url)
|
|
54
|
+
#else
|
|
55
|
+
content
|
|
56
|
+
#endif
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -12,14 +12,10 @@ internal final class PickerProps: UIBaseViewProps {
|
|
|
12
12
|
|
|
13
13
|
internal struct PickerView: ExpoSwiftUI.View {
|
|
14
14
|
@State var selection: AnyHashable?
|
|
15
|
-
@State var prevSelection: AnyHashable?
|
|
16
15
|
@ObservedObject var props: PickerProps
|
|
17
|
-
|
|
16
|
+
|
|
18
17
|
init(props: PickerProps) {
|
|
19
18
|
self.props = props
|
|
20
|
-
let initialSelection = Self.getHashableFromEither(props.selection)
|
|
21
|
-
_selection = State(initialValue: initialSelection)
|
|
22
|
-
_prevSelection = State(initialValue: initialSelection)
|
|
23
19
|
}
|
|
24
20
|
|
|
25
21
|
@ViewBuilder
|
|
@@ -57,11 +53,11 @@ internal struct PickerView: ExpoSwiftUI.View {
|
|
|
57
53
|
}
|
|
58
54
|
props.onSelectionChange(payload)
|
|
59
55
|
}
|
|
60
|
-
.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
56
|
+
.onChange(of: props.selection) { newValue in
|
|
57
|
+
selection = Self.getHashableFromEither(newValue)
|
|
58
|
+
}
|
|
59
|
+
.onAppear {
|
|
60
|
+
selection = Self.getHashableFromEither(props.selection)
|
|
65
61
|
}
|
|
66
62
|
}
|
|
67
63
|
|
|
@@ -7,11 +7,6 @@ internal struct PopoverView: ExpoSwiftUI.View {
|
|
|
7
7
|
@ObservedObject var props: PopoverViewProps
|
|
8
8
|
@State private var isPresented: Bool = false
|
|
9
9
|
|
|
10
|
-
init(props: PopoverViewProps) {
|
|
11
|
-
self.props = props
|
|
12
|
-
_isPresented = State(initialValue: props.isPresented)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
10
|
var body: some View {
|
|
16
11
|
#if os(tvOS)
|
|
17
12
|
triggerContent
|
|
@@ -40,6 +35,9 @@ internal struct PopoverView: ExpoSwiftUI.View {
|
|
|
40
35
|
.onChange(of: props.isPresented) { newValue in
|
|
41
36
|
isPresented = newValue
|
|
42
37
|
}
|
|
38
|
+
.onAppear {
|
|
39
|
+
isPresented = props.isPresented
|
|
40
|
+
}
|
|
43
41
|
#endif
|
|
44
42
|
}
|
|
45
43
|
|
package/ios/ProgressView.swift
CHANGED
|
@@ -3,11 +3,6 @@
|
|
|
3
3
|
import ExpoModulesCore
|
|
4
4
|
import SwiftUI
|
|
5
5
|
|
|
6
|
-
final class ClosedRangeDate: Record {
|
|
7
|
-
@Field var lower: Date?
|
|
8
|
-
@Field var upper: Date?
|
|
9
|
-
}
|
|
10
|
-
|
|
11
6
|
public final class ProgressViewProps: UIBaseViewProps {
|
|
12
7
|
@Field var timerInterval: ClosedRangeDate?
|
|
13
8
|
@Field var countsDown: Bool?
|
package/ios/SectionView.swift
CHANGED
|
@@ -13,14 +13,12 @@ internal struct SectionView: ExpoSwiftUI.View {
|
|
|
13
13
|
@ObservedObject var props: SectionProps
|
|
14
14
|
@State private var isExpanded: Bool = true
|
|
15
15
|
|
|
16
|
-
init(props: SectionProps) {
|
|
17
|
-
self.props = props
|
|
18
|
-
_isExpanded = State(initialValue: props.isExpanded ?? true)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
16
|
var body: some View {
|
|
22
17
|
if #available(iOS 17.0, macOS 14.0, tvOS 17.0, *), let propIsExpanded = props.isExpanded {
|
|
23
18
|
collapsibleSection
|
|
19
|
+
.onAppear {
|
|
20
|
+
isExpanded = props.isExpanded ?? true
|
|
21
|
+
}
|
|
24
22
|
.onChange(of: props.isExpanded) { newValue in
|
|
25
23
|
if let newValue {
|
|
26
24
|
isExpanded = newValue
|
package/ios/SliderView.swift
CHANGED
|
@@ -7,15 +7,21 @@ struct SliderView: ExpoSwiftUI.View {
|
|
|
7
7
|
@ObservedObject var props: SliderProps
|
|
8
8
|
@State var value: Float = 0.0
|
|
9
9
|
@State var isEditing: Bool = false
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
init(props: SliderProps) {
|
|
12
12
|
self.props = props
|
|
13
|
-
_value = State(initialValue: props.value ?? 0.0)
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
var body: some View {
|
|
17
16
|
#if !os(tvOS)
|
|
18
17
|
sliderContent
|
|
18
|
+
.onAppear {
|
|
19
|
+
value = props.value ?? 0.0
|
|
20
|
+
}
|
|
21
|
+
.onChange(of: props.value) { newValue in
|
|
22
|
+
guard !isEditing else { return }
|
|
23
|
+
value = newValue ?? 0.0
|
|
24
|
+
}
|
|
19
25
|
.onChange(of: value) { newValue in
|
|
20
26
|
if props.value != newValue {
|
|
21
27
|
props.onValueChanged([
|
|
@@ -23,10 +29,6 @@ struct SliderView: ExpoSwiftUI.View {
|
|
|
23
29
|
])
|
|
24
30
|
}
|
|
25
31
|
}
|
|
26
|
-
.onReceive(props.value.publisher, perform: { newValue in
|
|
27
|
-
guard !isEditing else { return }
|
|
28
|
-
value = newValue
|
|
29
|
-
})
|
|
30
32
|
#else
|
|
31
33
|
Text("Slider is not supported on tvOS")
|
|
32
34
|
#endif
|
package/ios/StepperView.swift
CHANGED
|
@@ -5,37 +5,33 @@ import ExpoModulesCore
|
|
|
5
5
|
|
|
6
6
|
final class StepperProps: UIBaseViewProps {
|
|
7
7
|
@Field var label: String
|
|
8
|
-
@Field var
|
|
8
|
+
@Field var value: Int = 0
|
|
9
9
|
@Field var min: Int = 0
|
|
10
10
|
@Field var max: Int = 100
|
|
11
11
|
@Field var step: Int = 1
|
|
12
|
-
var
|
|
12
|
+
var onValueChange = EventDispatcher()
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
struct StepperView: ExpoSwiftUI.View {
|
|
16
16
|
@ObservedObject var props: StepperProps
|
|
17
|
-
@State var value: Int
|
|
18
|
-
|
|
17
|
+
@State var value: Int = 0
|
|
18
|
+
|
|
19
19
|
init(props: StepperProps) {
|
|
20
20
|
self.props = props
|
|
21
|
-
let initialValue = props.defaultValue ?? 0
|
|
22
|
-
let clampedValue = max(props.min, min(props.max, initialValue))
|
|
23
|
-
self._value = State(initialValue: clampedValue)
|
|
24
21
|
}
|
|
25
22
|
|
|
26
23
|
var body: some View {
|
|
27
24
|
#if !os(tvOS)
|
|
28
25
|
Stepper(props.label, value: $value, in: props.min...props.max, step: props.step)
|
|
29
|
-
.onChange(of: value, perform: { newValue in
|
|
30
|
-
props.onValueChanged(([
|
|
31
|
-
"value": Int(newValue)
|
|
32
|
-
]))
|
|
33
|
-
})
|
|
34
26
|
.onAppear {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
value = max(props.min, min(props.max, props.value))
|
|
28
|
+
}
|
|
29
|
+
.onChange(of: props.value) { newValue in
|
|
30
|
+
value = max(props.min, min(props.max, newValue))
|
|
31
|
+
}
|
|
32
|
+
.onChange(of: value) { newValue in
|
|
33
|
+
if props.value != newValue {
|
|
34
|
+
props.onValueChange(["value": Int(newValue)])
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
37
|
#else
|
package/ios/TextView.swift
CHANGED
|
@@ -3,9 +3,28 @@
|
|
|
3
3
|
import SwiftUI
|
|
4
4
|
import ExpoModulesCore
|
|
5
5
|
|
|
6
|
+
public enum TextDateStyle: String, Enumerable {
|
|
7
|
+
case timer, relative, offset, date, time
|
|
8
|
+
|
|
9
|
+
func toSwiftUI() -> SwiftUI.Text.DateStyle {
|
|
10
|
+
switch self {
|
|
11
|
+
case .timer: return .timer
|
|
12
|
+
case .relative: return .relative
|
|
13
|
+
case .offset: return .offset
|
|
14
|
+
case .date: return .date
|
|
15
|
+
case .time: return .time
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
6
20
|
public final class TextViewProps: UIBaseViewProps {
|
|
7
21
|
@Field public var text: String = ""
|
|
8
22
|
@Field public var markdownEnabled: Bool = false
|
|
23
|
+
@Field public var date: Date?
|
|
24
|
+
@Field public var dateStyle: TextDateStyle?
|
|
25
|
+
@Field public var timerInterval: ClosedRangeDate?
|
|
26
|
+
@Field public var countsDown: Bool?
|
|
27
|
+
@Field public var pauseTime: Date?
|
|
9
28
|
|
|
10
29
|
// Override default frame alignment for text views
|
|
11
30
|
override var defaultFrameAlignment: Alignment { .leading }
|
|
@@ -24,7 +43,24 @@ public struct TextView: ExpoSwiftUI.View {
|
|
|
24
43
|
}
|
|
25
44
|
|
|
26
45
|
internal func buildText(applyModifiers: Bool = true) -> Text {
|
|
27
|
-
let text
|
|
46
|
+
let text: Text
|
|
47
|
+
|
|
48
|
+
if #available(iOS 16.0, tvOS 16.0, *),
|
|
49
|
+
let timerInterval = props.timerInterval,
|
|
50
|
+
let lower = timerInterval.lower,
|
|
51
|
+
let upper = timerInterval.upper,
|
|
52
|
+
lower <= upper {
|
|
53
|
+
text = Text(
|
|
54
|
+
timerInterval: ClosedRange(uncheckedBounds: (lower: lower, upper: upper)),
|
|
55
|
+
pauseTime: props.pauseTime,
|
|
56
|
+
countsDown: props.countsDown ?? true
|
|
57
|
+
)
|
|
58
|
+
} else if let date = props.date {
|
|
59
|
+
text = Text(date, style: props.dateStyle?.toSwiftUI() ?? .date)
|
|
60
|
+
} else {
|
|
61
|
+
text = props.markdownEnabled ? Text(LocalizedStringKey(props.text)) : Text(props.text)
|
|
62
|
+
}
|
|
63
|
+
|
|
28
64
|
var result = applyModifiers
|
|
29
65
|
? text.applyTextModifiers(props.modifiers, appContext: props.appContext)
|
|
30
66
|
: text
|
|
@@ -13,10 +13,9 @@ internal final class ToggleProps: UIBaseViewProps {
|
|
|
13
13
|
internal struct ToggleView: ExpoSwiftUI.View {
|
|
14
14
|
@ObservedObject var props: ToggleProps
|
|
15
15
|
@State var checked: Bool = false
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
init(props: ToggleProps) {
|
|
18
18
|
self.props = props
|
|
19
|
-
_checked = State(initialValue: props.isOn ?? false)
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
var body: some View {
|
|
@@ -30,11 +29,10 @@ internal struct ToggleView: ExpoSwiftUI.View {
|
|
|
30
29
|
])
|
|
31
30
|
}
|
|
32
31
|
.onChange(of: props.isOn) { newValue in
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
checked = newValue
|
|
32
|
+
checked = newValue ?? false
|
|
33
|
+
}
|
|
34
|
+
.onAppear {
|
|
35
|
+
checked = props.isOn ?? false
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
38
|
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar
ADDED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
137fa3f768ea1d63be1de27d7d663a43
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d37f422ef8d7251d743ce6bbee5e16230ee6d654
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2798646e8f071faefc4a8c8678182ac8aa59fb458469aa6cc088658f4337ada2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3d3bc9ee569cd399519716c66d92850b7bdde1ec0b0c328b938044699727988e55dbafec203f8f1b4613dd361bcfec03a21c084e031d73d95c45b982bd8ccd76
|
|
Binary file
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.md5
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
10502ee86098bcfdce95a529c46261bb
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha1
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
734807c9b8517ef0239b2f71af20b03bef6fa322
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha256
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
7ebaf9bde2723bcb47dd8a3cf5ffbdcf0f81b2d00b9db2926469cb968da468bf
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha512
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5ef7ef206deaa6dfef5a2e05e537a30f0403374ac99fdaa68f1c9e93971f6b61fde7ca393032684eb926a3f9ab5f54f706eb6dd8c3908c26f4cb40408401a2f0
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"component": {
|
|
4
4
|
"group": "expo.modules.ui",
|
|
5
5
|
"module": "expo.modules.ui",
|
|
6
|
-
"version": "55.0.
|
|
6
|
+
"version": "55.0.4",
|
|
7
7
|
"attributes": {
|
|
8
8
|
"org.gradle.status": "release"
|
|
9
9
|
}
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
|
-
"name": "expo.modules.ui-55.0.
|
|
28
|
-
"url": "expo.modules.ui-55.0.
|
|
29
|
-
"size":
|
|
30
|
-
"sha512": "
|
|
31
|
-
"sha256": "
|
|
32
|
-
"sha1": "
|
|
33
|
-
"md5": "
|
|
27
|
+
"name": "expo.modules.ui-55.0.4.aar",
|
|
28
|
+
"url": "expo.modules.ui-55.0.4.aar",
|
|
29
|
+
"size": 941708,
|
|
30
|
+
"sha512": "5ef7ef206deaa6dfef5a2e05e537a30f0403374ac99fdaa68f1c9e93971f6b61fde7ca393032684eb926a3f9ab5f54f706eb6dd8c3908c26f4cb40408401a2f0",
|
|
31
|
+
"sha256": "7ebaf9bde2723bcb47dd8a3cf5ffbdcf0f81b2d00b9db2926469cb968da468bf",
|
|
32
|
+
"sha1": "734807c9b8517ef0239b2f71af20b03bef6fa322",
|
|
33
|
+
"md5": "10502ee86098bcfdce95a529c46261bb"
|
|
34
34
|
}
|
|
35
35
|
]
|
|
36
36
|
},
|
|
@@ -120,13 +120,13 @@
|
|
|
120
120
|
],
|
|
121
121
|
"files": [
|
|
122
122
|
{
|
|
123
|
-
"name": "expo.modules.ui-55.0.
|
|
124
|
-
"url": "expo.modules.ui-55.0.
|
|
125
|
-
"size":
|
|
126
|
-
"sha512": "
|
|
127
|
-
"sha256": "
|
|
128
|
-
"sha1": "
|
|
129
|
-
"md5": "
|
|
123
|
+
"name": "expo.modules.ui-55.0.4.aar",
|
|
124
|
+
"url": "expo.modules.ui-55.0.4.aar",
|
|
125
|
+
"size": 941708,
|
|
126
|
+
"sha512": "5ef7ef206deaa6dfef5a2e05e537a30f0403374ac99fdaa68f1c9e93971f6b61fde7ca393032684eb926a3f9ab5f54f706eb6dd8c3908c26f4cb40408401a2f0",
|
|
127
|
+
"sha256": "7ebaf9bde2723bcb47dd8a3cf5ffbdcf0f81b2d00b9db2926469cb968da468bf",
|
|
128
|
+
"sha1": "734807c9b8517ef0239b2f71af20b03bef6fa322",
|
|
129
|
+
"md5": "10502ee86098bcfdce95a529c46261bb"
|
|
130
130
|
}
|
|
131
131
|
]
|
|
132
132
|
},
|
|
@@ -140,13 +140,13 @@
|
|
|
140
140
|
},
|
|
141
141
|
"files": [
|
|
142
142
|
{
|
|
143
|
-
"name": "expo.modules.ui-55.0.
|
|
144
|
-
"url": "expo.modules.ui-55.0.
|
|
145
|
-
"size":
|
|
146
|
-
"sha512": "
|
|
147
|
-
"sha256": "
|
|
148
|
-
"sha1": "
|
|
149
|
-
"md5": "
|
|
143
|
+
"name": "expo.modules.ui-55.0.4-sources.jar",
|
|
144
|
+
"url": "expo.modules.ui-55.0.4-sources.jar",
|
|
145
|
+
"size": 60549,
|
|
146
|
+
"sha512": "3d3bc9ee569cd399519716c66d92850b7bdde1ec0b0c328b938044699727988e55dbafec203f8f1b4613dd361bcfec03a21c084e031d73d95c45b982bd8ccd76",
|
|
147
|
+
"sha256": "2798646e8f071faefc4a8c8678182ac8aa59fb458469aa6cc088658f4337ada2",
|
|
148
|
+
"sha1": "d37f422ef8d7251d743ce6bbee5e16230ee6d654",
|
|
149
|
+
"md5": "137fa3f768ea1d63be1de27d7d663a43"
|
|
150
150
|
}
|
|
151
151
|
]
|
|
152
152
|
}
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.md5
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8e56924bfbdfce193f64db998c3a9eed
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha1
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b832195b632ff8761b0a6c59d4a12c0bbfb38f69
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha256
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3cde2316fb065490b2bf67953e88eb1c0490df22f69928632b795e760e13a9eb
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha512
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1cd6df7a2b2207a6167ddd1f4f34c37745a18fb16c125d58848cf3146fd8a11f43ccdc15f4c1a352a0d55efb1d2df382df19b30051197081b90a52077cb4a6e9
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<modelVersion>4.0.0</modelVersion>
|
|
10
10
|
<groupId>expo.modules.ui</groupId>
|
|
11
11
|
<artifactId>expo.modules.ui</artifactId>
|
|
12
|
-
<version>55.0.
|
|
12
|
+
<version>55.0.4</version>
|
|
13
13
|
<packaging>aar</packaging>
|
|
14
14
|
<name>expo.modules.ui</name>
|
|
15
15
|
<url>https://github.com/expo/expo</url>
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.md5
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d5d19d69bd1c2c6b960efb092f40bbe1
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha1
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
31874fcef8f1e3fef61c13fe7d64a32ac62819ce
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha256
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
16bf7ce47844a5483c85b20fad391cfc6c74912b344eddb1e95f70395d9e1c68
|
package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha512
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
f415dd7401f64dcab069526d91ecb1a42d76946ccf955930887bb74c84ac0cc3a7be6c13185cd34105466d1378532f738620c23cf6caa83444088a36d98acdb9
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
<groupId>expo.modules.ui</groupId>
|
|
4
4
|
<artifactId>expo.modules.ui</artifactId>
|
|
5
5
|
<versioning>
|
|
6
|
-
<latest>55.0.
|
|
7
|
-
<release>55.0.
|
|
6
|
+
<latest>55.0.4</latest>
|
|
7
|
+
<release>55.0.4</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>55.0.
|
|
9
|
+
<version>55.0.4</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20260318235530</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
1ef303d6294658c141b148e218bfa5f2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
9f2d4595450ecfd97a61c05ecfdaef96283fcf68
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
9214fc11ed71f55ebf46e8f7af5932b8d7ae30b2913e59a2f164e6ec886aa1fe
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b99c173582718ffd673f85f8888fc07c83406aec2344101e8def140a275ea3b1e4a54d91c9b5a43a909b89ebff90ef60bd7e0ae9bec3f3666749c1cc8dd90635
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@expo/ui",
|
|
3
|
-
"version": "55.0.
|
|
3
|
+
"version": "55.0.4",
|
|
4
4
|
"description": "A collection of UI components",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"*.fx.js"
|
|
@@ -22,6 +22,10 @@
|
|
|
22
22
|
"./jetpack-compose/modifiers": {
|
|
23
23
|
"types": "./build/jetpack-compose/modifiers/index.d.ts",
|
|
24
24
|
"default": "./src/jetpack-compose/modifiers/index.ts"
|
|
25
|
+
},
|
|
26
|
+
"./datetimepicker": {
|
|
27
|
+
"types": "./build/datetime-picker/index.d.ts",
|
|
28
|
+
"default": "./src/datetime-picker/index.tsx"
|
|
25
29
|
}
|
|
26
30
|
},
|
|
27
31
|
"scripts": {
|
|
@@ -55,10 +59,13 @@
|
|
|
55
59
|
"@types/react": "~19.2.0",
|
|
56
60
|
"expo-module-scripts": "^55.0.2"
|
|
57
61
|
},
|
|
62
|
+
"jest": {
|
|
63
|
+
"preset": "expo-module-scripts"
|
|
64
|
+
},
|
|
58
65
|
"peerDependencies": {
|
|
59
66
|
"expo": "*",
|
|
60
67
|
"react": "*",
|
|
61
68
|
"react-native": "*"
|
|
62
69
|
},
|
|
63
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "31afdbe5613d666148711cb3ec58c4b617a00c14"
|
|
64
71
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { buildEvent, buildChangeEvent, type DateTimePickerProps } from './types';
|
|
2
|
+
import {
|
|
3
|
+
DateTimePicker as AndroidPicker,
|
|
4
|
+
DatePickerDialog as AndroidDatePickerDialog,
|
|
5
|
+
TimePickerDialog as AndroidTimePickerDialog,
|
|
6
|
+
type DateTimePickerProps as AndroidDateTimePickerProps,
|
|
7
|
+
} from '../jetpack-compose/DatePicker';
|
|
8
|
+
import { Host } from '../jetpack-compose/Host';
|
|
9
|
+
|
|
10
|
+
function modeToDisplayedComponents(
|
|
11
|
+
mode: DateTimePickerProps['mode']
|
|
12
|
+
): AndroidDateTimePickerProps['displayedComponents'] {
|
|
13
|
+
switch (mode) {
|
|
14
|
+
case 'time':
|
|
15
|
+
return 'hourAndMinute';
|
|
16
|
+
case 'datetime':
|
|
17
|
+
// Android has no inline datetime picker — fall back to date only.
|
|
18
|
+
return 'date';
|
|
19
|
+
case 'date':
|
|
20
|
+
default:
|
|
21
|
+
return 'date';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function displayToAndroidVariant(
|
|
26
|
+
display: DateTimePickerProps['display']
|
|
27
|
+
): AndroidDateTimePickerProps['variant'] {
|
|
28
|
+
switch (display) {
|
|
29
|
+
case 'spinner':
|
|
30
|
+
return 'input';
|
|
31
|
+
default:
|
|
32
|
+
return 'picker';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function DateTimePicker(props: DateTimePickerProps) {
|
|
37
|
+
const {
|
|
38
|
+
value,
|
|
39
|
+
onChange,
|
|
40
|
+
onValueChange,
|
|
41
|
+
onDismiss: onDismissProp,
|
|
42
|
+
mode = 'date',
|
|
43
|
+
minimumDate,
|
|
44
|
+
maximumDate,
|
|
45
|
+
display = 'default',
|
|
46
|
+
is24Hour,
|
|
47
|
+
testID,
|
|
48
|
+
style,
|
|
49
|
+
accentColor,
|
|
50
|
+
presentation = 'dialog',
|
|
51
|
+
positiveButton,
|
|
52
|
+
negativeButton,
|
|
53
|
+
} = props;
|
|
54
|
+
|
|
55
|
+
const onDismissed = () => {
|
|
56
|
+
if (onDismissProp) {
|
|
57
|
+
onDismissProp();
|
|
58
|
+
} else {
|
|
59
|
+
onChange?.(
|
|
60
|
+
{
|
|
61
|
+
type: 'dismissed',
|
|
62
|
+
nativeEvent: {
|
|
63
|
+
timestamp: value.getTime(),
|
|
64
|
+
utcOffset: -value.getTimezoneOffset(),
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
value
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const onDateSelected = (date: Date) => {
|
|
73
|
+
if (onValueChange) {
|
|
74
|
+
onValueChange(buildChangeEvent(date), date);
|
|
75
|
+
} else {
|
|
76
|
+
onChange?.(buildEvent(date), date);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const selectableDates =
|
|
81
|
+
minimumDate || maximumDate ? { start: minimumDate, end: maximumDate } : undefined;
|
|
82
|
+
|
|
83
|
+
const dialogProps = {
|
|
84
|
+
initialDate: value.toISOString(),
|
|
85
|
+
color: accentColor,
|
|
86
|
+
confirmButtonLabel: positiveButton?.label,
|
|
87
|
+
dismissButtonLabel: negativeButton?.label,
|
|
88
|
+
onDateSelected,
|
|
89
|
+
onDismissRequest: onDismissed,
|
|
90
|
+
} as const;
|
|
91
|
+
|
|
92
|
+
if (presentation === 'dialog') {
|
|
93
|
+
if (mode === 'time') {
|
|
94
|
+
return (
|
|
95
|
+
<Host style={style}>
|
|
96
|
+
<AndroidTimePickerDialog {...dialogProps} is24Hour={is24Hour} />
|
|
97
|
+
</Host>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
return (
|
|
101
|
+
<Host style={style}>
|
|
102
|
+
<AndroidDatePickerDialog
|
|
103
|
+
{...dialogProps}
|
|
104
|
+
variant={displayToAndroidVariant(display)}
|
|
105
|
+
selectableDates={selectableDates}
|
|
106
|
+
/>
|
|
107
|
+
</Host>
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<Host matchContents={{ vertical: true }} style={style}>
|
|
113
|
+
<AndroidPicker
|
|
114
|
+
initialDate={value.toISOString()}
|
|
115
|
+
displayedComponents={modeToDisplayedComponents(mode)}
|
|
116
|
+
variant={displayToAndroidVariant(display)}
|
|
117
|
+
selectableDates={selectableDates}
|
|
118
|
+
is24Hour={is24Hour}
|
|
119
|
+
color={accentColor}
|
|
120
|
+
onDateSelected={onDateSelected}
|
|
121
|
+
showVariantToggle={false}
|
|
122
|
+
{...(testID ? { testID } : undefined)}
|
|
123
|
+
/>
|
|
124
|
+
</Host>
|
|
125
|
+
);
|
|
126
|
+
}
|