@expo/ui 55.0.2 → 55.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/android/build.gradle +2 -2
  3. package/android/src/main/java/expo/modules/ui/AnimatedVisibilityView.kt +130 -0
  4. package/android/src/main/java/expo/modules/ui/CardView.kt +138 -34
  5. package/android/src/main/java/expo/modules/ui/CheckboxView.kt +98 -0
  6. package/android/src/main/java/expo/modules/ui/ChipView.kt +267 -142
  7. package/android/src/main/java/expo/modules/ui/DatePickerView.kt +258 -70
  8. package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +204 -57
  9. package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +44 -1
  10. package/android/src/main/java/expo/modules/ui/ProgressView.kt +189 -89
  11. package/android/src/main/java/expo/modules/ui/RadioButtonView.kt +3 -7
  12. package/android/src/main/java/expo/modules/ui/SegmentedButtonView.kt +115 -0
  13. package/android/src/main/java/expo/modules/ui/SegmentedControlView.kt +35 -0
  14. package/android/src/main/java/expo/modules/ui/SliderView.kt +70 -12
  15. package/android/src/main/java/expo/modules/ui/SwitchView.kt +53 -161
  16. package/android/src/main/java/expo/modules/ui/ToggleButtonView.kt +95 -57
  17. package/android/src/main/java/expo/modules/ui/button/Button.kt +117 -158
  18. package/android/src/main/java/expo/modules/ui/button/FloatingActionButton.kt +92 -0
  19. package/android/src/main/java/expo/modules/ui/button/IconButton.kt +73 -86
  20. package/android/src/main/java/expo/modules/ui/menu/DropdownMenu.kt +39 -0
  21. package/android/src/main/java/expo/modules/ui/menu/DropdownMenuItem.kt +70 -0
  22. package/android/src/main/java/expo/modules/ui/menu/DropdownMenuRecords.kt +18 -0
  23. package/build/jetpack-compose/AnimatedVisibility/index.d.ts +134 -0
  24. package/build/jetpack-compose/AnimatedVisibility/index.d.ts.map +1 -0
  25. package/build/jetpack-compose/AnimatedVisibility/symbols.d.ts +3 -0
  26. package/build/jetpack-compose/AnimatedVisibility/symbols.d.ts.map +1 -0
  27. package/build/jetpack-compose/Button/index.d.ts +65 -51
  28. package/build/jetpack-compose/Button/index.d.ts.map +1 -1
  29. package/build/jetpack-compose/Card/index.d.ts +72 -14
  30. package/build/jetpack-compose/Card/index.d.ts.map +1 -1
  31. package/build/jetpack-compose/Checkbox/index.d.ts +73 -0
  32. package/build/jetpack-compose/Checkbox/index.d.ts.map +1 -0
  33. package/build/jetpack-compose/Chip/index.d.ts +247 -27
  34. package/build/jetpack-compose/Chip/index.d.ts.map +1 -1
  35. package/build/jetpack-compose/DatePicker/index.d.ts +38 -3
  36. package/build/jetpack-compose/DatePicker/index.d.ts.map +1 -1
  37. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts +70 -0
  38. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map +1 -0
  39. package/build/jetpack-compose/DropdownMenu/index.d.ts +68 -0
  40. package/build/jetpack-compose/DropdownMenu/index.d.ts.map +1 -0
  41. package/build/jetpack-compose/FloatingActionButton/index.d.ts +150 -0
  42. package/build/jetpack-compose/FloatingActionButton/index.d.ts.map +1 -0
  43. package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts +2 -2
  44. package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map +1 -1
  45. package/build/jetpack-compose/IconButton/index.d.ts +45 -29
  46. package/build/jetpack-compose/IconButton/index.d.ts.map +1 -1
  47. package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts +17 -0
  48. package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts.map +1 -0
  49. package/build/jetpack-compose/Progress/index.d.ts +78 -35
  50. package/build/jetpack-compose/Progress/index.d.ts.map +1 -1
  51. package/build/jetpack-compose/RadioButton/index.d.ts +2 -2
  52. package/build/jetpack-compose/RadioButton/index.d.ts.map +1 -1
  53. package/build/jetpack-compose/SegmentedButton/index.d.ts +74 -0
  54. package/build/jetpack-compose/SegmentedButton/index.d.ts.map +1 -0
  55. package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts +17 -0
  56. package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts.map +1 -0
  57. package/build/jetpack-compose/Slider/index.d.ts +34 -10
  58. package/build/jetpack-compose/Slider/index.d.ts.map +1 -1
  59. package/build/jetpack-compose/Switch/index.d.ts +10 -50
  60. package/build/jetpack-compose/Switch/index.d.ts.map +1 -1
  61. package/build/jetpack-compose/ToggleButton/index.d.ts +60 -32
  62. package/build/jetpack-compose/ToggleButton/index.d.ts.map +1 -1
  63. package/build/jetpack-compose/index.d.ts +5 -4
  64. package/build/jetpack-compose/index.d.ts.map +1 -1
  65. package/build/jetpack-compose/modifiers/index.d.ts +18 -1
  66. package/build/jetpack-compose/modifiers/index.d.ts.map +1 -1
  67. package/build/swift-ui/ProgressView/index.d.ts +1 -5
  68. package/build/swift-ui/ProgressView/index.d.ts.map +1 -1
  69. package/build/swift-ui/Stepper/index.d.ts +3 -3
  70. package/build/swift-ui/Stepper/index.d.ts.map +1 -1
  71. package/build/swift-ui/Text/index.d.ts +33 -1
  72. package/build/swift-ui/Text/index.d.ts.map +1 -1
  73. package/build/swift-ui/modifiers/index.d.ts +22 -1
  74. package/build/swift-ui/modifiers/index.d.ts.map +1 -1
  75. package/build/swift-ui/modifiers/shapes/index.d.ts +2 -2
  76. package/build/swift-ui/types.d.ts +7 -0
  77. package/build/swift-ui/types.d.ts.map +1 -1
  78. package/expo-module.config.json +1 -1
  79. package/ios/BottomSheetView.swift +1 -6
  80. package/ios/ClosedRangeDateRecord.swift +10 -0
  81. package/ios/ColorPickerView.swift +9 -8
  82. package/ios/ConfirmationDialog/ConfirmationDialog.swift +4 -6
  83. package/ios/DatePickerView.swift +7 -5
  84. package/ios/DisclosureGroupView.swift +5 -7
  85. package/ios/ListView.swift +6 -14
  86. package/ios/Modifiers/DefaultScrollAnchorForRoleModifier.swift +32 -0
  87. package/ios/Modifiers/DefaultScrollAnchorModifier.swift +16 -0
  88. package/ios/Modifiers/ViewModifierRegistry.swift +8 -0
  89. package/ios/Picker/PickerView.swift +6 -10
  90. package/ios/Popover/PopoverView.swift +3 -5
  91. package/ios/ProgressView.swift +0 -5
  92. package/ios/SectionView.swift +3 -5
  93. package/ios/SliderView.swift +8 -6
  94. package/ios/StepperView.swift +12 -16
  95. package/ios/TextView.swift +37 -1
  96. package/ios/Toggle/ToggleView.swift +5 -7
  97. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3-sources.jar +0 -0
  98. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3-sources.jar.md5 +1 -0
  99. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3-sources.jar.sha1 +1 -0
  100. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3-sources.jar.sha256 +1 -0
  101. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3-sources.jar.sha512 +1 -0
  102. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.aar +0 -0
  103. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.aar.md5 +1 -0
  104. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.aar.sha1 +1 -0
  105. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.aar.sha256 +1 -0
  106. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.aar.sha512 +1 -0
  107. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.2/expo.modules.ui-55.0.2.module → 55.0.3/expo.modules.ui-55.0.3.module} +22 -22
  108. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.module.md5 +1 -0
  109. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.module.sha1 +1 -0
  110. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.module.sha256 +1 -0
  111. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.module.sha512 +1 -0
  112. package/local-maven-repo/expo/modules/ui/expo.modules.ui/{55.0.2/expo.modules.ui-55.0.2.pom → 55.0.3/expo.modules.ui-55.0.3.pom} +1 -1
  113. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.pom.md5 +1 -0
  114. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.pom.sha1 +1 -0
  115. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.pom.sha256 +1 -0
  116. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.3/expo.modules.ui-55.0.3.pom.sha512 +1 -0
  117. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  118. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  119. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  120. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  121. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  122. package/package.json +5 -2
  123. package/src/jetpack-compose/AnimatedVisibility/index.tsx +206 -0
  124. package/src/jetpack-compose/AnimatedVisibility/symbols.ts +8 -0
  125. package/src/jetpack-compose/Button/index.tsx +69 -92
  126. package/src/jetpack-compose/Card/index.tsx +105 -29
  127. package/src/jetpack-compose/Checkbox/index.tsx +126 -0
  128. package/src/jetpack-compose/Chip/index.tsx +391 -51
  129. package/src/jetpack-compose/DatePicker/index.tsx +112 -7
  130. package/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx +126 -0
  131. package/src/jetpack-compose/DropdownMenu/index.tsx +107 -0
  132. package/src/jetpack-compose/FloatingActionButton/index.tsx +207 -0
  133. package/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx +4 -2
  134. package/src/jetpack-compose/IconButton/index.tsx +49 -56
  135. package/src/jetpack-compose/MultiChoiceSegmentedButtonRow/index.tsx +34 -0
  136. package/src/jetpack-compose/Progress/index.tsx +120 -62
  137. package/src/jetpack-compose/RadioButton/index.tsx +8 -9
  138. package/src/jetpack-compose/SegmentedButton/index.tsx +109 -0
  139. package/src/jetpack-compose/SingleChoiceSegmentedButtonRow/index.tsx +34 -0
  140. package/src/jetpack-compose/Slider/index.tsx +76 -29
  141. package/src/jetpack-compose/Switch/index.tsx +17 -87
  142. package/src/jetpack-compose/ToggleButton/index.tsx +67 -43
  143. package/src/jetpack-compose/index.ts +5 -4
  144. package/src/jetpack-compose/modifiers/index.ts +26 -2
  145. package/src/swift-ui/ProgressView/index.tsx +1 -3
  146. package/src/swift-ui/Stepper/index.tsx +7 -7
  147. package/src/swift-ui/Text/index.tsx +66 -2
  148. package/src/swift-ui/modifiers/index.ts +40 -0
  149. package/src/swift-ui/types.ts +5 -0
  150. package/android/src/main/java/expo/modules/ui/FilterChipView.kt +0 -59
  151. package/android/src/main/java/expo/modules/ui/PickerView.kt +0 -161
  152. package/android/src/main/java/expo/modules/ui/TextButtonView.kt +0 -33
  153. package/android/src/main/java/expo/modules/ui/menu/ContextMenu.kt +0 -183
  154. package/android/src/main/java/expo/modules/ui/menu/ContextMenuRecords.kt +0 -64
  155. package/build/jetpack-compose/Button/types.d.ts +0 -5
  156. package/build/jetpack-compose/Button/types.d.ts.map +0 -1
  157. package/build/jetpack-compose/ContextMenu/Submenu.d.ts +0 -17
  158. package/build/jetpack-compose/ContextMenu/Submenu.d.ts.map +0 -1
  159. package/build/jetpack-compose/ContextMenu/index.d.ts +0 -65
  160. package/build/jetpack-compose/ContextMenu/index.d.ts.map +0 -1
  161. package/build/jetpack-compose/ContextMenu/utils.d.ts +0 -24
  162. package/build/jetpack-compose/ContextMenu/utils.d.ts.map +0 -1
  163. package/build/jetpack-compose/FilterChip/index.d.ts +0 -49
  164. package/build/jetpack-compose/FilterChip/index.d.ts.map +0 -1
  165. package/build/jetpack-compose/Picker/index.d.ts +0 -62
  166. package/build/jetpack-compose/Picker/index.d.ts.map +0 -1
  167. package/build/jetpack-compose/TextButton/index.d.ts +0 -29
  168. package/build/jetpack-compose/TextButton/index.d.ts.map +0 -1
  169. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar +0 -0
  170. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.md5 +0 -1
  171. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha1 +0 -1
  172. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha256 +0 -1
  173. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha512 +0 -1
  174. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar +0 -0
  175. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.md5 +0 -1
  176. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha1 +0 -1
  177. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha256 +0 -1
  178. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha512 +0 -1
  179. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.md5 +0 -1
  180. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha1 +0 -1
  181. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha256 +0 -1
  182. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha512 +0 -1
  183. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.md5 +0 -1
  184. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha1 +0 -1
  185. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha256 +0 -1
  186. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha512 +0 -1
  187. package/src/jetpack-compose/Button/types.ts +0 -57
  188. package/src/jetpack-compose/ContextMenu/Submenu.tsx +0 -21
  189. package/src/jetpack-compose/ContextMenu/index.tsx +0 -149
  190. package/src/jetpack-compose/ContextMenu/utils.ts +0 -144
  191. package/src/jetpack-compose/FilterChip/index.tsx +0 -89
  192. package/src/jetpack-compose/Picker/index.tsx +0 -90
  193. package/src/jetpack-compose/TextButton/index.tsx +0 -55
@@ -12,14 +12,22 @@ import expo.modules.kotlin.viewevent.getValue
12
12
  import expo.modules.ui.button.ButtonContent
13
13
  import expo.modules.ui.button.ButtonPressedEvent
14
14
  import expo.modules.ui.button.ButtonProps
15
+ import expo.modules.ui.button.ElevatedButtonContent
16
+ import expo.modules.ui.button.FilledTonalButtonContent
17
+ import expo.modules.ui.button.OutlinedButtonContent
18
+ import expo.modules.ui.button.TextButtonContent
19
+ import expo.modules.ui.button.FloatingActionButtonContent
20
+ import expo.modules.ui.button.FloatingActionButtonProps
15
21
  import expo.modules.ui.button.IconButtonContent
16
- import expo.modules.ui.button.IconButtonProps
22
+ import expo.modules.ui.button.FilledIconButtonContent
23
+ import expo.modules.ui.button.FilledTonalIconButtonContent
24
+ import expo.modules.ui.button.OutlinedIconButtonContent
17
25
  import expo.modules.ui.icon.IconView
18
- import expo.modules.ui.menu.ContextMenuButtonPressedEvent
19
- import expo.modules.ui.menu.ContextMenuContent
20
- import expo.modules.ui.menu.ContextMenuProps
21
- import expo.modules.ui.menu.ContextMenuSwitchValueChangeEvent
22
- import expo.modules.ui.menu.ExpandedChangedEvent
26
+ import expo.modules.ui.menu.DropdownMenuContent
27
+ import expo.modules.ui.menu.DropdownMenuProps
28
+ import expo.modules.ui.menu.DropdownMenuItemContent
29
+ import expo.modules.ui.menu.DropdownMenuItemProps
30
+ import expo.modules.ui.menu.ItemPressedEvent
23
31
  import okhttp3.OkHttpClient
24
32
 
25
33
  class ExpoUIModule : Module() {
@@ -91,19 +99,41 @@ class ExpoUIModule : Module() {
91
99
  ModalBottomSheetContent(props) { onDismissRequest(Unit) }
92
100
  }
93
101
 
94
- // Defines a single view for now – a single choice segmented control
95
- ExpoUIView("PickerView", events = {
96
- Events("onOptionSelected")
97
- }) { props: PickerProps ->
98
- val onOptionSelected by remember { EventDispatcher<PickerOptionSelectedEvent>() }
99
- PickerContent(props) { onOptionSelected(it) }
102
+ ExpoUIView("SingleChoiceSegmentedButtonRowView") { props: SingleChoiceSegmentedButtonRowProps ->
103
+ SingleChoiceSegmentedButtonRowContent(props)
104
+ }
105
+
106
+ ExpoUIView("MultiChoiceSegmentedButtonRowView") { props: MultiChoiceSegmentedButtonRowProps ->
107
+ MultiChoiceSegmentedButtonRowContent(props)
108
+ }
109
+
110
+ ExpoUIView("SegmentedButtonView", events = {
111
+ Events("onButtonPressed", "onCheckedChange")
112
+ }) { props: SegmentedButtonProps ->
113
+ val onButtonPressed by remember { EventDispatcher<Unit>() }
114
+ val onCheckedChange by remember { EventDispatcher<GenericEventPayload1<Boolean>>() }
115
+ SegmentedButtonContent(props, { onButtonPressed(Unit) }, { onCheckedChange(it) })
100
116
  }
101
117
 
102
118
  ExpoUIView("SwitchView", events = {
103
- Events("onValueChange")
119
+ Events("onCheckedChange")
104
120
  }) { props: SwitchProps ->
105
- val onValueChange by remember { EventDispatcher<ValueChangeEvent>() }
106
- SwitchContent(props) { onValueChange(it) }
121
+ val onCheckedChange by remember { EventDispatcher<CheckedChangeEvent>() }
122
+ SwitchContent(props) { value -> onCheckedChange(CheckedChangeEvent(value)) }
123
+ }
124
+
125
+ ExpoUIView("CheckboxView", events = {
126
+ Events("onCheckedChange")
127
+ }) { props: CheckboxProps ->
128
+ val onCheckedChange by remember { EventDispatcher<CheckedChangeEvent>() }
129
+ CheckboxContent(props) { value -> onCheckedChange(CheckedChangeEvent(value)) }
130
+ }
131
+
132
+ ExpoUIView("TriStateCheckboxView", events = {
133
+ Events("onNativeClick")
134
+ }) { props: TriStateCheckboxProps ->
135
+ val onNativeClick by remember { EventDispatcher<Unit>() }
136
+ TriStateCheckboxContent(props) { onNativeClick(Unit) }
107
137
  }
108
138
 
109
139
  ExpoUIView("Button", events = {
@@ -113,15 +143,64 @@ class ExpoUIModule : Module() {
113
143
  ButtonContent(props) { onButtonPressed(it) }
114
144
  }
115
145
 
146
+ ExpoUIView("FilledTonalButton", events = {
147
+ Events("onButtonPressed")
148
+ }) { props: ButtonProps ->
149
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
150
+ FilledTonalButtonContent(props) { onButtonPressed(it) }
151
+ }
152
+
153
+ ExpoUIView("OutlinedButton", events = {
154
+ Events("onButtonPressed")
155
+ }) { props: ButtonProps ->
156
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
157
+ OutlinedButtonContent(props) { onButtonPressed(it) }
158
+ }
159
+
160
+ ExpoUIView("ElevatedButton", events = {
161
+ Events("onButtonPressed")
162
+ }) { props: ButtonProps ->
163
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
164
+ ElevatedButtonContent(props) { onButtonPressed(it) }
165
+ }
166
+
167
+ ExpoUIView("TextButton", events = {
168
+ Events("onButtonPressed")
169
+ }) { props: ButtonProps ->
170
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
171
+ TextButtonContent(props) { onButtonPressed(it) }
172
+ }
173
+
116
174
  ExpoUIView("IconButton", events = {
117
175
  Events("onButtonPressed")
118
- }) { props: IconButtonProps ->
176
+ }) { props: ButtonProps ->
119
177
  val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
120
178
  IconButtonContent(props) { onButtonPressed(it) }
121
179
  }
122
180
 
181
+ ExpoUIView("FilledIconButton", events = {
182
+ Events("onButtonPressed")
183
+ }) { props: ButtonProps ->
184
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
185
+ FilledIconButtonContent(props) { onButtonPressed(it) }
186
+ }
187
+
188
+ ExpoUIView("FilledTonalIconButton", events = {
189
+ Events("onButtonPressed")
190
+ }) { props: ButtonProps ->
191
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
192
+ FilledTonalIconButtonContent(props) { onButtonPressed(it) }
193
+ }
194
+
195
+ ExpoUIView("OutlinedIconButton", events = {
196
+ Events("onButtonPressed")
197
+ }) { props: ButtonProps ->
198
+ val onButtonPressed by remember { EventDispatcher<ButtonPressedEvent>() }
199
+ OutlinedIconButtonContent(props) { onButtonPressed(it) }
200
+ }
201
+
123
202
  ExpoUIView("SliderView", events = {
124
- Events("onValueChanged")
203
+ Events("onValueChange", "onValueChangeFinished")
125
204
  }) { props: SliderProps ->
126
205
  SliderContent(props)
127
206
  }
@@ -141,26 +220,50 @@ class ExpoUIModule : Module() {
141
220
  DateTimePickerContent(props) { onDateSelected(it) }
142
221
  }
143
222
 
144
- ExpoUIView("ContextMenuView", events = {
145
- Events(
146
- "onContextMenuButtonPressed",
147
- "onContextMenuSwitchValueChanged",
148
- "onExpandedChanged"
149
- )
150
- }) { props: ContextMenuProps ->
151
- val onContextMenuButtonPressed by remember { EventDispatcher<ContextMenuButtonPressedEvent>() }
152
- val onContextMenuSwitchValueChanged by remember { EventDispatcher<ContextMenuSwitchValueChangeEvent>() }
153
- val onExpandedChanged by remember { EventDispatcher<ExpandedChangedEvent>() }
154
- ContextMenuContent(
155
- props,
156
- { onContextMenuButtonPressed(it) },
157
- { onContextMenuSwitchValueChanged(it) },
158
- { onExpandedChanged(it) }
159
- )
223
+ ExpoUIView("DatePickerDialogView", events = {
224
+ Events("onDateSelected", "onDismissRequest")
225
+ }) { props: DatePickerDialogProps ->
226
+ val onDateSelected by remember { EventDispatcher<DatePickerResult>() }
227
+ val onDismissRequest by remember { EventDispatcher<Unit>() }
228
+ ExpoDatePickerDialogContent(props, { onDateSelected(it) }, { onDismissRequest(Unit) })
160
229
  }
161
230
 
162
- ExpoUIView("ProgressView") { props: ProgressProps ->
163
- ProgressContent(props)
231
+ ExpoUIView("TimePickerDialogView", events = {
232
+ Events("onDateSelected", "onDismissRequest")
233
+ }) { props: TimePickerDialogProps ->
234
+ val onDateSelected by remember { EventDispatcher<DatePickerResult>() }
235
+ val onDismissRequest by remember { EventDispatcher<Unit>() }
236
+ ExpoTimePickerDialogContent(props, { onDateSelected(it) }, { onDismissRequest(Unit) })
237
+ }
238
+
239
+ ExpoUIView("DropdownMenuView", events = {
240
+ Events("onDismissRequest")
241
+ }) { props: DropdownMenuProps ->
242
+ val onDismissRequest by remember { EventDispatcher<Unit>() }
243
+ DropdownMenuContent(props) { onDismissRequest(Unit) }
244
+ }
245
+
246
+ ExpoUIView("DropdownMenuItemView", events = {
247
+ Events("onItemPressed")
248
+ }) { props: DropdownMenuItemProps ->
249
+ val onItemPressed by remember { EventDispatcher<ItemPressedEvent>() }
250
+ DropdownMenuItemContent(props) { onItemPressed(it) }
251
+ }
252
+
253
+ ExpoUIView("LinearProgressIndicatorView") { props: LinearProgressIndicatorProps ->
254
+ LinearProgressIndicatorContent(props)
255
+ }
256
+
257
+ ExpoUIView("CircularProgressIndicatorView") { props: CircularProgressIndicatorProps ->
258
+ CircularProgressIndicatorContent(props)
259
+ }
260
+
261
+ ExpoUIView("LinearWavyProgressIndicatorView") { props: LinearWavyProgressIndicatorProps ->
262
+ LinearWavyProgressIndicatorContent(props)
263
+ }
264
+
265
+ ExpoUIView("CircularWavyProgressIndicatorView") { props: CircularWavyProgressIndicatorProps ->
266
+ CircularWavyProgressIndicatorContent(props)
164
267
  }
165
268
 
166
269
  ExpoUIView("BoxView") { props: LayoutProps ->
@@ -227,42 +330,74 @@ class ExpoUIModule : Module() {
227
330
  )
228
331
  }
229
332
 
230
- ExpoUIView("ChipView", events = {
231
- Events(
232
- "onPress",
233
- "onDismiss"
234
- )
235
- }) { props: ChipProps ->
236
- val onPress by remember { EventDispatcher<ChipPressedEvent>() }
237
- val onDismiss by remember { EventDispatcher<ChipPressedEvent>() }
238
- ChipContent(props, { onPress(it) }, { onDismiss(it) })
333
+ ExpoUIView("AssistChipView", events = {
334
+ Events("onNativeClick")
335
+ }) { props: AssistChipProps ->
336
+ val onNativeClick by remember { EventDispatcher<ChipPressedEvent>() }
337
+ AssistChipContent(props) { onNativeClick(it) }
338
+ }
339
+
340
+ ExpoUIView("InputChipView", events = {
341
+ Events("onNativeClick")
342
+ }) { props: InputChipProps ->
343
+ val onNativeClick by remember { EventDispatcher<ChipPressedEvent>() }
344
+ InputChipContent(props) { onNativeClick(it) }
345
+ }
346
+
347
+ ExpoUIView("SuggestionChipView", events = {
348
+ Events("onNativeClick")
349
+ }) { props: SuggestionChipProps ->
350
+ val onNativeClick by remember { EventDispatcher<ChipPressedEvent>() }
351
+ SuggestionChipContent(props) { onNativeClick(it) }
239
352
  }
240
353
 
241
354
  ExpoUIView("FilterChipView", events = {
242
- Events("onPress")
355
+ Events("onNativeClick")
243
356
  }) { props: FilterChipProps ->
244
- val onPress by remember { EventDispatcher<FilterChipPressedEvent>() }
245
- FilterChipContent(props) { onPress(it) }
357
+ val onNativeClick by remember { EventDispatcher<ChipPressedEvent>() }
358
+ FilterChipContent(props) { onNativeClick(it) }
246
359
  }
247
360
 
248
- ExpoUIView("TextButtonView", events = {
249
- Events("onButtonPressed")
250
- }) { props: TextButtonProps ->
251
- val onButtonPressed by remember { EventDispatcher<expo.modules.ui.button.ButtonPressedEvent>() }
252
- TextButtonContent(props) { onButtonPressed(it) }
361
+ ExpoUIView("ToggleButton", events = {
362
+ Events("onCheckedChange")
363
+ }) { props: ToggleButtonProps ->
364
+ val onCheckedChange by remember { EventDispatcher<ToggleButtonValueChangeEvent>() }
365
+ ToggleButtonContent(props) { onCheckedChange(it) }
253
366
  }
254
367
 
255
- ExpoUIView("ToggleButtonView", events = {
368
+ ExpoUIView("IconToggleButton", events = {
256
369
  Events("onCheckedChange")
257
370
  }) { props: ToggleButtonProps ->
258
371
  val onCheckedChange by remember { EventDispatcher<ToggleButtonValueChangeEvent>() }
259
- ToggleButtonContent(props) { onCheckedChange(it) }
372
+ IconToggleButtonContent(props) { onCheckedChange(it) }
373
+ }
374
+
375
+ ExpoUIView("FilledIconToggleButton", events = {
376
+ Events("onCheckedChange")
377
+ }) { props: ToggleButtonProps ->
378
+ val onCheckedChange by remember { EventDispatcher<ToggleButtonValueChangeEvent>() }
379
+ FilledIconToggleButtonContent(props) { onCheckedChange(it) }
380
+ }
381
+
382
+ ExpoUIView("OutlinedIconToggleButton", events = {
383
+ Events("onCheckedChange")
384
+ }) { props: ToggleButtonProps ->
385
+ val onCheckedChange by remember { EventDispatcher<ToggleButtonValueChangeEvent>() }
386
+ OutlinedIconToggleButtonContent(props) { onCheckedChange(it) }
260
387
  }
261
388
 
262
389
  ExpoUIView("CardView") { props: CardProps ->
263
390
  CardContent(props)
264
391
  }
265
392
 
393
+ ExpoUIView("ElevatedCardView") { props: ElevatedCardProps ->
394
+ ElevatedCardContent(props)
395
+ }
396
+
397
+ ExpoUIView("OutlinedCardView") { props: OutlinedCardProps ->
398
+ OutlinedCardContent(props)
399
+ }
400
+
266
401
  ExpoUIView("ListItemView") { props: ListItemProps ->
267
402
  ListItemContent(props)
268
403
  }
@@ -282,11 +417,23 @@ class ExpoUIModule : Module() {
282
417
  SurfaceContent(props)
283
418
  }
284
419
 
420
+ ExpoUIView("AnimatedVisibilityView") { props: AnimatedVisibilityProps ->
421
+ AnimatedVisibilityContent(props)
422
+ }
423
+
285
424
  ExpoUIView("RadioButtonView", events = {
286
- Events("onNativeClick")
425
+ Events("onButtonPressed")
287
426
  }) { props: RadioButtonProps ->
288
- val onNativeClick by remember { EventDispatcher<Unit>() }
289
- RadioButtonContent(props) { onNativeClick(Unit) }
427
+ val onButtonPressed by remember { EventDispatcher<Unit>() }
428
+ val clickHandler = if (props.clickable) { { onButtonPressed(Unit) } } else null
429
+ RadioButtonContent(props, clickHandler)
430
+ }
431
+
432
+ ExpoUIView("FloatingActionButtonView", events = {
433
+ Events("onButtonPressed")
434
+ }) { props: FloatingActionButtonProps ->
435
+ val onButtonPressed by remember { EventDispatcher<Unit>() }
436
+ FloatingActionButtonContent(props) { onButtonPressed(Unit) }
290
437
  }
291
438
 
292
439
  //endregion Expo UI views
@@ -21,6 +21,9 @@ import androidx.compose.foundation.layout.width
21
21
  import androidx.compose.foundation.layout.wrapContentHeight
22
22
  import androidx.compose.foundation.layout.wrapContentWidth
23
23
  import androidx.compose.foundation.selection.selectable
24
+ import androidx.compose.foundation.selection.selectableGroup
25
+ import androidx.compose.foundation.selection.toggleable
26
+ import androidx.compose.ui.semantics.Role
24
27
  import androidx.compose.foundation.shape.CircleShape
25
28
  import androidx.compose.foundation.shape.CutCornerShape
26
29
  import androidx.compose.foundation.shape.RoundedCornerShape
@@ -177,13 +180,26 @@ internal data class ClipParams(
177
180
  ) : Record
178
181
 
179
182
  internal data class SelectableParams(
180
- @Field val selected: Boolean = false
183
+ @Field val selected: Boolean = false,
184
+ @Field val role: String? = null
181
185
  ) : Record
182
186
 
183
187
  internal data class ClickableParams(
184
188
  @Field val indication: Boolean = true
185
189
  ) : Record
186
190
 
191
+ internal enum class SemanticRoleType(val value: String) : Enumerable {
192
+ CHECKBOX("checkbox"),
193
+ RADIO_BUTTON("radioButton"),
194
+ SWITCH("switch"),
195
+ TAB("tab")
196
+ }
197
+
198
+ internal data class ToggleableParams(
199
+ @Field val value: Boolean = false,
200
+ @Field val role: SemanticRoleType? = null
201
+ ) : Record
202
+
187
203
  // endregion
188
204
 
189
205
  /**
@@ -508,8 +524,35 @@ object ModifierRegistry {
508
524
  val params = recordFromMap<SelectableParams>(map)
509
525
  Modifier.selectable(
510
526
  selected = params.selected,
527
+ role = when (params.role) {
528
+ "radioButton" -> androidx.compose.ui.semantics.Role.RadioButton
529
+ "checkbox" -> androidx.compose.ui.semantics.Role.Checkbox
530
+ "switch" -> androidx.compose.ui.semantics.Role.Switch
531
+ "tab" -> androidx.compose.ui.semantics.Role.Tab
532
+ else -> null
533
+ },
511
534
  onClick = { eventDispatcher("selectable", emptyMap()) }
512
535
  )
513
536
  }
537
+
538
+ register("selectableGroup") { _, _, _, _ ->
539
+ Modifier.selectableGroup()
540
+ }
541
+
542
+ register("toggleable") { map, _, _, eventDispatcher ->
543
+ val params = recordFromMap<ToggleableParams>(map)
544
+ val role = when (params.role) {
545
+ SemanticRoleType.CHECKBOX -> Role.Checkbox
546
+ SemanticRoleType.RADIO_BUTTON -> Role.RadioButton
547
+ SemanticRoleType.SWITCH -> Role.Switch
548
+ SemanticRoleType.TAB -> Role.Tab
549
+ null -> null
550
+ }
551
+ Modifier.toggleable(
552
+ value = params.value,
553
+ role = role,
554
+ onValueChange = { eventDispatcher("toggleable", emptyMap()) }
555
+ )
556
+ }
514
557
  }
515
558
  }