@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
@@ -1,12 +1,9 @@
1
1
  package expo.modules.ui
2
2
 
3
3
  import android.graphics.Color
4
- import androidx.compose.material3.Checkbox
5
- import androidx.compose.material3.CheckboxDefaults
6
4
  import androidx.compose.material3.Switch
7
5
  import androidx.compose.material3.SwitchDefaults
8
6
  import androidx.compose.runtime.Composable
9
- import androidx.compose.ui.Modifier
10
7
  import expo.modules.kotlin.records.Field
11
8
  import expo.modules.kotlin.records.Record
12
9
  import expo.modules.kotlin.views.ComposableScope
@@ -14,195 +11,90 @@ import expo.modules.kotlin.views.ComposeProps
14
11
  import expo.modules.kotlin.views.FunctionalComposableScope
15
12
  import java.io.Serializable
16
13
 
17
- open class ValueChangeEvent(
14
+ open class CheckedChangeEvent(
18
15
  @Field open val value: Boolean = false
19
16
  ) : Record, Serializable
20
17
 
21
- class SwitchColors : Record {
22
- @Field
23
- val checkedThumbColor: Color? = null
24
-
25
- @Field
26
- val checkedTrackColor: Color? = null
27
-
28
- @Field
29
- val checkedBorderColor: Color? = null
30
-
31
- @Field
32
- val checkedIconColor: Color? = null
33
-
34
- @Field
35
- val uncheckedThumbColor: Color? = null
36
-
37
- @Field
38
- val uncheckedTrackColor: Color? = null
39
-
40
- @Field
41
- val uncheckedBorderColor: Color? = null
42
-
43
- @Field
44
- val uncheckedIconColor: Color? = null
45
-
46
- @Field
47
- val disabledCheckedThumbColor: Color? = null
48
-
49
- @Field
50
- val disabledCheckedTrackColor: Color? = null
51
-
52
- @Field
53
- val disabledCheckedBorderColor: Color? = null
54
-
55
- @Field
56
- val disabledCheckedIconColor: Color? = null
57
-
58
- @Field
59
- val disabledUncheckedThumbColor: Color? = null
60
-
61
- @Field
62
- val disabledUncheckedTrackColor: Color? = null
63
-
64
- @Field
65
- val disabledUncheckedBorderColor: Color? = null
66
-
67
- @Field
68
- val disabledUncheckedIconColor: Color? = null
69
-
70
- @Field
71
- val checkedColor: Color? = null
72
-
73
- @Field
74
- val disabledCheckedColor: Color? = null
75
-
76
- @Field
77
- val uncheckedColor: Color? = null
78
-
79
- @Field
80
- val disabledUncheckedColor: Color? = null
81
-
82
- @Field
83
- val checkmarkColor: Color? = null
84
-
85
- @Field
86
- val disabledIndeterminateColor: Color? = null
87
- }
18
+ data class SwitchColors(
19
+ @Field val checkedThumbColor: Color? = null,
20
+ @Field val checkedTrackColor: Color? = null,
21
+ @Field val checkedBorderColor: Color? = null,
22
+ @Field val checkedIconColor: Color? = null,
23
+ @Field val uncheckedThumbColor: Color? = null,
24
+ @Field val uncheckedTrackColor: Color? = null,
25
+ @Field val uncheckedBorderColor: Color? = null,
26
+ @Field val uncheckedIconColor: Color? = null,
27
+ @Field val disabledCheckedThumbColor: Color? = null,
28
+ @Field val disabledCheckedTrackColor: Color? = null,
29
+ @Field val disabledCheckedBorderColor: Color? = null,
30
+ @Field val disabledCheckedIconColor: Color? = null,
31
+ @Field val disabledUncheckedThumbColor: Color? = null,
32
+ @Field val disabledUncheckedTrackColor: Color? = null,
33
+ @Field val disabledUncheckedBorderColor: Color? = null,
34
+ @Field val disabledUncheckedIconColor: Color? = null
35
+ ) : Record
88
36
 
89
37
  data class SwitchProps(
90
38
  val value: Boolean = false,
91
39
  val enabled: Boolean = true,
92
- val variant: String = "switch",
93
- val elementColors: SwitchColors = SwitchColors(),
40
+ val colors: SwitchColors = SwitchColors(),
94
41
  val modifiers: ModifierList = emptyList()
95
42
  ) : ComposeProps
96
43
 
97
44
  @Composable
98
- fun SwitchComposable(
99
- checked: Boolean,
100
- onCheckedChange: ((Boolean) -> Unit)?,
101
- colors: SwitchColors,
102
- modifier: Modifier = Modifier,
103
- enabled: Boolean = true,
104
- thumbContent: (@Composable () -> Unit)? = null
45
+ fun FunctionalComposableScope.SwitchContent(
46
+ props: SwitchProps,
47
+ onCheckedChange: (Boolean) -> Unit
105
48
  ) {
49
+ val thumbContentSlotView = findChildSlotView(view, "thumbContent")
50
+
106
51
  Switch(
107
- checked = checked,
52
+ checked = props.value,
108
53
  onCheckedChange = onCheckedChange,
109
- modifier = modifier,
110
- enabled = enabled,
111
- thumbContent = thumbContent,
54
+ modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
55
+ enabled = props.enabled,
56
+ thumbContent = thumbContentSlotView?.let {
57
+ {
58
+ with(ComposableScope()) {
59
+ with(it) {
60
+ Content()
61
+ }
62
+ }
63
+ }
64
+ },
112
65
  colors = SwitchDefaults.colors(
113
- // For some reason the default way of passing colors using `compose` results in a transparent view
114
- checkedThumbColor = colors.checkedThumbColor.composeOrNull
66
+ checkedThumbColor = props.colors.checkedThumbColor.composeOrNull
115
67
  ?: SwitchDefaults.colors().checkedThumbColor,
116
- checkedTrackColor = colors.checkedTrackColor.composeOrNull
68
+ checkedTrackColor = props.colors.checkedTrackColor.composeOrNull
117
69
  ?: SwitchDefaults.colors().checkedTrackColor,
118
- checkedBorderColor = colors.checkedBorderColor.composeOrNull
70
+ checkedBorderColor = props.colors.checkedBorderColor.composeOrNull
119
71
  ?: SwitchDefaults.colors().checkedBorderColor,
120
- checkedIconColor = colors.checkedIconColor.composeOrNull
72
+ checkedIconColor = props.colors.checkedIconColor.composeOrNull
121
73
  ?: SwitchDefaults.colors().checkedIconColor,
122
- uncheckedThumbColor = colors.uncheckedThumbColor.composeOrNull
74
+ uncheckedThumbColor = props.colors.uncheckedThumbColor.composeOrNull
123
75
  ?: SwitchDefaults.colors().uncheckedThumbColor,
124
- uncheckedTrackColor = colors.uncheckedTrackColor.composeOrNull
76
+ uncheckedTrackColor = props.colors.uncheckedTrackColor.composeOrNull
125
77
  ?: SwitchDefaults.colors().uncheckedTrackColor,
126
- uncheckedBorderColor = colors.uncheckedBorderColor.composeOrNull
78
+ uncheckedBorderColor = props.colors.uncheckedBorderColor.composeOrNull
127
79
  ?: SwitchDefaults.colors().uncheckedBorderColor,
128
- uncheckedIconColor = colors.uncheckedIconColor.composeOrNull
80
+ uncheckedIconColor = props.colors.uncheckedIconColor.composeOrNull
129
81
  ?: SwitchDefaults.colors().uncheckedIconColor,
130
- disabledCheckedBorderColor = colors.disabledCheckedBorderColor.composeOrNull
82
+ disabledCheckedBorderColor = props.colors.disabledCheckedBorderColor.composeOrNull
131
83
  ?: SwitchDefaults.colors().disabledCheckedBorderColor,
132
- disabledCheckedThumbColor = colors.disabledCheckedThumbColor.composeOrNull
84
+ disabledCheckedThumbColor = props.colors.disabledCheckedThumbColor.composeOrNull
133
85
  ?: SwitchDefaults.colors().disabledCheckedThumbColor,
134
- disabledCheckedTrackColor = colors.disabledCheckedTrackColor.composeOrNull
86
+ disabledCheckedTrackColor = props.colors.disabledCheckedTrackColor.composeOrNull
135
87
  ?: SwitchDefaults.colors().disabledCheckedTrackColor,
136
- disabledCheckedIconColor = colors.disabledCheckedIconColor.composeOrNull
88
+ disabledCheckedIconColor = props.colors.disabledCheckedIconColor.composeOrNull
137
89
  ?: SwitchDefaults.colors().disabledCheckedIconColor,
138
- disabledUncheckedBorderColor = colors.disabledUncheckedBorderColor.composeOrNull
90
+ disabledUncheckedBorderColor = props.colors.disabledUncheckedBorderColor.composeOrNull
139
91
  ?: SwitchDefaults.colors().disabledUncheckedBorderColor,
140
- disabledUncheckedThumbColor = colors.disabledUncheckedThumbColor.composeOrNull
92
+ disabledUncheckedThumbColor = props.colors.disabledUncheckedThumbColor.composeOrNull
141
93
  ?: SwitchDefaults.colors().disabledUncheckedThumbColor,
142
- disabledUncheckedTrackColor = colors.disabledUncheckedTrackColor.composeOrNull
94
+ disabledUncheckedTrackColor = props.colors.disabledUncheckedTrackColor.composeOrNull
143
95
  ?: SwitchDefaults.colors().disabledUncheckedTrackColor,
144
- disabledUncheckedIconColor = colors.disabledUncheckedIconColor.composeOrNull
96
+ disabledUncheckedIconColor = props.colors.disabledUncheckedIconColor.composeOrNull
145
97
  ?: SwitchDefaults.colors().disabledUncheckedIconColor
146
98
  )
147
99
  )
148
100
  }
149
-
150
- @Composable
151
- fun CheckboxComposable(checked: Boolean, onCheckedChange: ((Boolean) -> Unit)?, colors: SwitchColors, modifier: Modifier, enabled: Boolean = true) {
152
- Checkbox(
153
- checked = checked,
154
- onCheckedChange = onCheckedChange,
155
- modifier = modifier,
156
- enabled = enabled,
157
- colors = CheckboxDefaults.colors(
158
- checkedColor = colors.checkedColor.compose,
159
- disabledCheckedColor = colors.disabledCheckedColor.compose,
160
- uncheckedColor = colors.uncheckedColor.compose,
161
- disabledUncheckedColor = colors.disabledUncheckedColor.compose,
162
- checkmarkColor = colors.checkmarkColor.compose,
163
- disabledIndeterminateColor = colors.disabledIndeterminateColor.compose
164
- )
165
- )
166
- }
167
-
168
- @Composable
169
- fun ThemedHybridSwitch(
170
- variant: String,
171
- checked: Boolean,
172
- onCheckedChange: ((Boolean) -> Unit)?,
173
- colors: SwitchColors,
174
- modifier: Modifier = Modifier,
175
- enabled: Boolean = true,
176
- thumbContent: (@Composable () -> Unit)? = null
177
- ) {
178
- when (variant) {
179
- "switch" -> SwitchComposable(checked, onCheckedChange, colors, modifier, enabled, thumbContent)
180
- else -> CheckboxComposable(checked, onCheckedChange, colors, modifier, enabled)
181
- }
182
- }
183
-
184
- @Composable
185
- fun FunctionalComposableScope.SwitchContent(
186
- props: SwitchProps,
187
- onValueChange: (ValueChangeEvent) -> Unit
188
- ) {
189
- val thumbContentSlotView = findChildSlotView(view, "thumbContent")
190
-
191
- ThemedHybridSwitch(
192
- props.variant,
193
- props.value,
194
- { newChecked -> onValueChange(ValueChangeEvent(newChecked)) },
195
- props.elementColors,
196
- ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher),
197
- props.enabled,
198
- thumbContent = thumbContentSlotView?.let {
199
- {
200
- with(ComposableScope()) {
201
- with(it) {
202
- Content()
203
- }
204
- }
205
- }
206
- }
207
- )
208
- }
@@ -3,26 +3,33 @@
3
3
  package expo.modules.ui
4
4
 
5
5
  import android.graphics.Color
6
- import androidx.compose.foundation.layout.RowScope
7
6
  import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
8
7
  import androidx.compose.material3.FilledIconToggleButton
8
+ import androidx.compose.material3.IconButtonDefaults
9
9
  import androidx.compose.material3.IconToggleButton
10
10
  import androidx.compose.material3.OutlinedIconToggleButton
11
- import androidx.compose.material3.Text
12
11
  import androidx.compose.material3.ToggleButton
13
12
  import androidx.compose.material3.ToggleButtonDefaults
14
13
  import androidx.compose.runtime.Composable
15
14
  import expo.modules.kotlin.records.Field
16
15
  import expo.modules.kotlin.records.Record
16
+ import expo.modules.kotlin.views.ComposableScope
17
17
  import expo.modules.kotlin.views.ComposeProps
18
18
  import expo.modules.kotlin.views.FunctionalComposableScope
19
19
 
20
+ data class ToggleButtonColors(
21
+ @Field val containerColor: Color? = null,
22
+ @Field val contentColor: Color? = null,
23
+ @Field val checkedContainerColor: Color? = null,
24
+ @Field val checkedContentColor: Color? = null,
25
+ @Field val disabledContainerColor: Color? = null,
26
+ @Field val disabledContentColor: Color? = null
27
+ ) : Record
28
+
20
29
  data class ToggleButtonProps(
21
30
  val checked: Boolean = false,
22
- val text: String? = null,
23
- val variant: String = "default",
24
- val color: Color? = null,
25
- val disabled: Boolean = false,
31
+ val enabled: Boolean = true,
32
+ val colors: ToggleButtonColors = ToggleButtonColors(),
26
33
  val modifiers: ModifierList = emptyList()
27
34
  ) : ComposeProps
28
35
 
@@ -36,61 +43,92 @@ fun FunctionalComposableScope.ToggleButtonContent(
36
43
  onCheckedChange: (ToggleButtonValueChangeEvent) -> Unit
37
44
  ) {
38
45
  val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
46
+ ToggleButton(
47
+ checked = props.checked,
48
+ onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
49
+ enabled = props.enabled,
50
+ modifier = modifier,
51
+ colors = ToggleButtonDefaults.toggleButtonColors(
52
+ checkedContainerColor = props.colors.checkedContainerColor.compose,
53
+ checkedContentColor = props.colors.checkedContentColor.compose,
54
+ containerColor = props.colors.containerColor.compose,
55
+ contentColor = props.colors.contentColor.compose,
56
+ disabledContainerColor = props.colors.disabledContainerColor.compose,
57
+ disabledContentColor = props.colors.disabledContentColor.compose
58
+ )
59
+ ) {
60
+ Children(ComposableScope(rowScope = this))
61
+ }
62
+ }
39
63
 
40
- val scope = this
41
-
42
- val content: @Composable () -> Unit = {
43
- when {
44
- props.text != null -> Text(text = props.text)
45
- else -> scope.Children(composableScope)
46
- }
64
+ @Composable
65
+ fun FunctionalComposableScope.IconToggleButtonContent(
66
+ props: ToggleButtonProps,
67
+ onCheckedChange: (ToggleButtonValueChangeEvent) -> Unit
68
+ ) {
69
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
70
+ IconToggleButton(
71
+ checked = props.checked,
72
+ onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
73
+ enabled = props.enabled,
74
+ modifier = modifier,
75
+ colors = IconButtonDefaults.iconToggleButtonColors(
76
+ containerColor = props.colors.containerColor.compose,
77
+ contentColor = props.colors.contentColor.compose,
78
+ checkedContainerColor = props.colors.checkedContainerColor.compose,
79
+ checkedContentColor = props.colors.checkedContentColor.compose,
80
+ disabledContainerColor = props.colors.disabledContainerColor.compose,
81
+ disabledContentColor = props.colors.disabledContentColor.compose
82
+ )
83
+ ) {
84
+ Children(ComposableScope())
47
85
  }
86
+ }
48
87
 
49
- // RowScope content for ToggleButton
50
- val rowContent: @Composable RowScope.() -> Unit = {
51
- when {
52
- props.text != null -> Text(text = props.text)
53
- else -> scope.Children(composableScope)
54
- }
88
+ @Composable
89
+ fun FunctionalComposableScope.FilledIconToggleButtonContent(
90
+ props: ToggleButtonProps,
91
+ onCheckedChange: (ToggleButtonValueChangeEvent) -> Unit
92
+ ) {
93
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
94
+ FilledIconToggleButton(
95
+ checked = props.checked,
96
+ onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
97
+ enabled = props.enabled,
98
+ modifier = modifier,
99
+ colors = IconButtonDefaults.filledIconToggleButtonColors(
100
+ containerColor = props.colors.containerColor.compose,
101
+ contentColor = props.colors.contentColor.compose,
102
+ checkedContainerColor = props.colors.checkedContainerColor.compose,
103
+ checkedContentColor = props.colors.checkedContentColor.compose,
104
+ disabledContainerColor = props.colors.disabledContainerColor.compose,
105
+ disabledContentColor = props.colors.disabledContentColor.compose
106
+ )
107
+ ) {
108
+ Children(ComposableScope())
55
109
  }
110
+ }
56
111
 
57
- when (props.variant) {
58
- "icon" -> {
59
- IconToggleButton(
60
- checked = props.checked,
61
- onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
62
- enabled = !props.disabled,
63
- modifier = modifier,
64
- content = content
65
- )
66
- }
67
- "filledIcon" -> {
68
- FilledIconToggleButton(
69
- checked = props.checked,
70
- onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
71
- enabled = !props.disabled,
72
- modifier = modifier,
73
- content = content
74
- )
75
- }
76
- "outlinedIcon" -> {
77
- OutlinedIconToggleButton(
78
- checked = props.checked,
79
- onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
80
- enabled = !props.disabled,
81
- modifier = modifier,
82
- content = content
83
- )
84
- }
85
- else -> {
86
- ToggleButton(
87
- checked = props.checked,
88
- onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
89
- enabled = !props.disabled,
90
- modifier = modifier,
91
- colors = ToggleButtonDefaults.toggleButtonColors(),
92
- content = rowContent
93
- )
94
- }
112
+ @Composable
113
+ fun FunctionalComposableScope.OutlinedIconToggleButtonContent(
114
+ props: ToggleButtonProps,
115
+ onCheckedChange: (ToggleButtonValueChangeEvent) -> Unit
116
+ ) {
117
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
118
+ OutlinedIconToggleButton(
119
+ checked = props.checked,
120
+ onCheckedChange = { onCheckedChange(ToggleButtonValueChangeEvent(it)) },
121
+ enabled = props.enabled,
122
+ modifier = modifier,
123
+ colors = IconButtonDefaults.outlinedIconToggleButtonColors(
124
+ containerColor = props.colors.containerColor.compose,
125
+ contentColor = props.colors.contentColor.compose,
126
+ checkedContainerColor = props.colors.checkedContainerColor.compose,
127
+ checkedContentColor = props.colors.checkedContentColor.compose,
128
+ disabledContainerColor = props.colors.disabledContainerColor.compose,
129
+ disabledContentColor = props.colors.disabledContentColor.compose
130
+ )
131
+ ) {
132
+ Children(ComposableScope())
95
133
  }
96
134
  }