@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.
Files changed (232) hide show
  1. package/CHANGELOG.md +42 -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/BottomSheetView.kt +91 -13
  5. package/android/src/main/java/expo/modules/ui/CardView.kt +138 -34
  6. package/android/src/main/java/expo/modules/ui/CheckboxView.kt +98 -0
  7. package/android/src/main/java/expo/modules/ui/ChipView.kt +267 -142
  8. package/android/src/main/java/expo/modules/ui/DatePickerView.kt +258 -70
  9. package/android/src/main/java/expo/modules/ui/ExpoUIModule.kt +209 -61
  10. package/android/src/main/java/expo/modules/ui/ModifierRegistry.kt +44 -1
  11. package/android/src/main/java/expo/modules/ui/ProgressView.kt +189 -89
  12. package/android/src/main/java/expo/modules/ui/RadioButtonView.kt +3 -7
  13. package/android/src/main/java/expo/modules/ui/SegmentedButtonView.kt +115 -0
  14. package/android/src/main/java/expo/modules/ui/SegmentedControlView.kt +35 -0
  15. package/android/src/main/java/expo/modules/ui/SliderView.kt +70 -12
  16. package/android/src/main/java/expo/modules/ui/SwitchView.kt +53 -161
  17. package/android/src/main/java/expo/modules/ui/TextInputView.kt +39 -15
  18. package/android/src/main/java/expo/modules/ui/ToggleButtonView.kt +95 -57
  19. package/android/src/main/java/expo/modules/ui/button/Button.kt +117 -158
  20. package/android/src/main/java/expo/modules/ui/button/FloatingActionButton.kt +92 -0
  21. package/android/src/main/java/expo/modules/ui/button/IconButton.kt +73 -86
  22. package/android/src/main/java/expo/modules/ui/menu/DropdownMenu.kt +39 -0
  23. package/android/src/main/java/expo/modules/ui/menu/DropdownMenuItem.kt +70 -0
  24. package/android/src/main/java/expo/modules/ui/menu/DropdownMenuRecords.kt +18 -0
  25. package/build/datetime-picker/DateTimePicker.android.d.ts +3 -0
  26. package/build/datetime-picker/DateTimePicker.android.d.ts.map +1 -0
  27. package/build/datetime-picker/DateTimePicker.d.ts +3 -0
  28. package/build/datetime-picker/DateTimePicker.d.ts.map +1 -0
  29. package/build/datetime-picker/DateTimePicker.web.d.ts +3 -0
  30. package/build/datetime-picker/DateTimePicker.web.d.ts.map +1 -0
  31. package/build/datetime-picker/index.d.ts +5 -0
  32. package/build/datetime-picker/index.d.ts.map +1 -0
  33. package/build/datetime-picker/types.d.ts +128 -0
  34. package/build/datetime-picker/types.d.ts.map +1 -0
  35. package/build/jetpack-compose/AnimatedVisibility/index.d.ts +134 -0
  36. package/build/jetpack-compose/AnimatedVisibility/index.d.ts.map +1 -0
  37. package/build/jetpack-compose/AnimatedVisibility/symbols.d.ts +3 -0
  38. package/build/jetpack-compose/AnimatedVisibility/symbols.d.ts.map +1 -0
  39. package/build/jetpack-compose/Button/index.d.ts +65 -51
  40. package/build/jetpack-compose/Button/index.d.ts.map +1 -1
  41. package/build/jetpack-compose/Card/index.d.ts +72 -14
  42. package/build/jetpack-compose/Card/index.d.ts.map +1 -1
  43. package/build/jetpack-compose/Checkbox/index.d.ts +73 -0
  44. package/build/jetpack-compose/Checkbox/index.d.ts.map +1 -0
  45. package/build/jetpack-compose/Chip/index.d.ts +247 -27
  46. package/build/jetpack-compose/Chip/index.d.ts.map +1 -1
  47. package/build/jetpack-compose/DatePicker/index.d.ts +38 -3
  48. package/build/jetpack-compose/DatePicker/index.d.ts.map +1 -1
  49. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts +70 -0
  50. package/build/jetpack-compose/DropdownMenu/DropdownMenuItem.d.ts.map +1 -0
  51. package/build/jetpack-compose/DropdownMenu/index.d.ts +68 -0
  52. package/build/jetpack-compose/DropdownMenu/index.d.ts.map +1 -0
  53. package/build/jetpack-compose/FloatingActionButton/index.d.ts +150 -0
  54. package/build/jetpack-compose/FloatingActionButton/index.d.ts.map +1 -0
  55. package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts +2 -2
  56. package/build/jetpack-compose/HorizontalFloatingToolbar/index.d.ts.map +1 -1
  57. package/build/jetpack-compose/IconButton/index.d.ts +45 -29
  58. package/build/jetpack-compose/IconButton/index.d.ts.map +1 -1
  59. package/build/jetpack-compose/ModalBottomSheet/index.d.ts +65 -13
  60. package/build/jetpack-compose/ModalBottomSheet/index.d.ts.map +1 -1
  61. package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts +17 -0
  62. package/build/jetpack-compose/MultiChoiceSegmentedButtonRow/index.d.ts.map +1 -0
  63. package/build/jetpack-compose/Progress/index.d.ts +78 -35
  64. package/build/jetpack-compose/Progress/index.d.ts.map +1 -1
  65. package/build/jetpack-compose/RadioButton/index.d.ts +2 -2
  66. package/build/jetpack-compose/RadioButton/index.d.ts.map +1 -1
  67. package/build/jetpack-compose/SegmentedButton/index.d.ts +74 -0
  68. package/build/jetpack-compose/SegmentedButton/index.d.ts.map +1 -0
  69. package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts +17 -0
  70. package/build/jetpack-compose/SingleChoiceSegmentedButtonRow/index.d.ts.map +1 -0
  71. package/build/jetpack-compose/Slider/index.d.ts +34 -10
  72. package/build/jetpack-compose/Slider/index.d.ts.map +1 -1
  73. package/build/jetpack-compose/Switch/index.d.ts +10 -50
  74. package/build/jetpack-compose/Switch/index.d.ts.map +1 -1
  75. package/build/jetpack-compose/TextInput/index.d.ts +9 -0
  76. package/build/jetpack-compose/TextInput/index.d.ts.map +1 -1
  77. package/build/jetpack-compose/ToggleButton/index.d.ts +60 -32
  78. package/build/jetpack-compose/ToggleButton/index.d.ts.map +1 -1
  79. package/build/jetpack-compose/index.d.ts +5 -4
  80. package/build/jetpack-compose/index.d.ts.map +1 -1
  81. package/build/jetpack-compose/modifiers/index.d.ts +18 -1
  82. package/build/jetpack-compose/modifiers/index.d.ts.map +1 -1
  83. package/build/swift-ui/Link/index.d.ts +36 -0
  84. package/build/swift-ui/Link/index.d.ts.map +1 -0
  85. package/build/swift-ui/ProgressView/index.d.ts +1 -5
  86. package/build/swift-ui/ProgressView/index.d.ts.map +1 -1
  87. package/build/swift-ui/Stepper/index.d.ts +3 -3
  88. package/build/swift-ui/Stepper/index.d.ts.map +1 -1
  89. package/build/swift-ui/Text/index.d.ts +33 -1
  90. package/build/swift-ui/Text/index.d.ts.map +1 -1
  91. package/build/swift-ui/index.d.ts +1 -0
  92. package/build/swift-ui/index.d.ts.map +1 -1
  93. package/build/swift-ui/modifiers/environment.d.ts +16 -1
  94. package/build/swift-ui/modifiers/environment.d.ts.map +1 -1
  95. package/build/swift-ui/modifiers/index.d.ts +24 -7
  96. package/build/swift-ui/modifiers/index.d.ts.map +1 -1
  97. package/build/swift-ui/modifiers/shapes/index.d.ts +2 -2
  98. package/build/swift-ui/modifiers/widgets.d.ts +14 -0
  99. package/build/swift-ui/modifiers/widgets.d.ts.map +1 -0
  100. package/build/swift-ui/types.d.ts +7 -0
  101. package/build/swift-ui/types.d.ts.map +1 -1
  102. package/expo-module.config.json +1 -1
  103. package/ios/BottomSheetView.swift +1 -6
  104. package/ios/ClosedRangeDateRecord.swift +10 -0
  105. package/ios/ColorPickerView.swift +9 -8
  106. package/ios/ConfirmationDialog/ConfirmationDialog.swift +4 -6
  107. package/ios/DatePickerView.swift +7 -5
  108. package/ios/DisclosureGroupView.swift +5 -7
  109. package/ios/ExpoUIModule.swift +1 -0
  110. package/ios/LinkView.swift +29 -0
  111. package/ios/ListView.swift +6 -14
  112. package/ios/Modifiers/DefaultScrollAnchorForRoleModifier.swift +32 -0
  113. package/ios/Modifiers/DefaultScrollAnchorModifier.swift +16 -0
  114. package/ios/Modifiers/EnvironmentModifier.swift +14 -0
  115. package/ios/Modifiers/ViewModifierRegistry.swift +12 -0
  116. package/ios/Modifiers/WidgetModifiers.swift +12 -0
  117. package/ios/Picker/PickerView.swift +6 -10
  118. package/ios/Popover/PopoverView.swift +3 -5
  119. package/ios/ProgressView.swift +0 -5
  120. package/ios/SectionView.swift +3 -5
  121. package/ios/SliderView.swift +8 -6
  122. package/ios/StepperView.swift +12 -16
  123. package/ios/TextView.swift +37 -1
  124. package/ios/Toggle/ToggleView.swift +5 -7
  125. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar +0 -0
  126. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.md5 +1 -0
  127. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha1 +1 -0
  128. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha256 +1 -0
  129. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4-sources.jar.sha512 +1 -0
  130. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar +0 -0
  131. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.md5 +1 -0
  132. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha1 +1 -0
  133. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha256 +1 -0
  134. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.aar.sha512 +1 -0
  135. 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
  136. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.md5 +1 -0
  137. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha1 +1 -0
  138. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha256 +1 -0
  139. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.module.sha512 +1 -0
  140. 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
  141. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.md5 +1 -0
  142. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha1 +1 -0
  143. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha256 +1 -0
  144. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.4/expo.modules.ui-55.0.4.pom.sha512 +1 -0
  145. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml +4 -4
  146. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.md5 +1 -1
  147. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha1 +1 -1
  148. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha256 +1 -1
  149. package/local-maven-repo/expo/modules/ui/expo.modules.ui/maven-metadata.xml.sha512 +1 -1
  150. package/package.json +9 -2
  151. package/src/datetime-picker/DateTimePicker.android.tsx +126 -0
  152. package/src/datetime-picker/DateTimePicker.tsx +94 -0
  153. package/src/datetime-picker/DateTimePicker.web.tsx +5 -0
  154. package/src/datetime-picker/index.tsx +11 -0
  155. package/src/datetime-picker/types.tsx +147 -0
  156. package/src/jetpack-compose/AnimatedVisibility/index.tsx +206 -0
  157. package/src/jetpack-compose/AnimatedVisibility/symbols.ts +8 -0
  158. package/src/jetpack-compose/Button/index.tsx +69 -92
  159. package/src/jetpack-compose/Card/index.tsx +105 -29
  160. package/src/jetpack-compose/Checkbox/index.tsx +126 -0
  161. package/src/jetpack-compose/Chip/index.tsx +391 -51
  162. package/src/jetpack-compose/DatePicker/index.tsx +112 -7
  163. package/src/jetpack-compose/DropdownMenu/DropdownMenuItem.tsx +126 -0
  164. package/src/jetpack-compose/DropdownMenu/index.tsx +107 -0
  165. package/src/jetpack-compose/FloatingActionButton/index.tsx +207 -0
  166. package/src/jetpack-compose/HorizontalFloatingToolbar/index.tsx +4 -2
  167. package/src/jetpack-compose/IconButton/index.tsx +49 -56
  168. package/src/jetpack-compose/ModalBottomSheet/index.tsx +85 -15
  169. package/src/jetpack-compose/MultiChoiceSegmentedButtonRow/index.tsx +34 -0
  170. package/src/jetpack-compose/Progress/index.tsx +120 -62
  171. package/src/jetpack-compose/RadioButton/index.tsx +8 -9
  172. package/src/jetpack-compose/SegmentedButton/index.tsx +109 -0
  173. package/src/jetpack-compose/SingleChoiceSegmentedButtonRow/index.tsx +34 -0
  174. package/src/jetpack-compose/Slider/index.tsx +76 -29
  175. package/src/jetpack-compose/Switch/index.tsx +17 -87
  176. package/src/jetpack-compose/TextInput/index.tsx +10 -0
  177. package/src/jetpack-compose/ToggleButton/index.tsx +67 -43
  178. package/src/jetpack-compose/index.ts +5 -4
  179. package/src/jetpack-compose/modifiers/index.ts +26 -2
  180. package/src/swift-ui/Link/index.tsx +52 -0
  181. package/src/swift-ui/ProgressView/index.tsx +1 -3
  182. package/src/swift-ui/Stepper/index.tsx +7 -7
  183. package/src/swift-ui/Text/index.tsx +66 -2
  184. package/src/swift-ui/index.tsx +1 -0
  185. package/src/swift-ui/modifiers/environment.ts +17 -4
  186. package/src/swift-ui/modifiers/index.ts +44 -10
  187. package/src/swift-ui/modifiers/widgets.ts +18 -0
  188. package/src/swift-ui/types.ts +5 -0
  189. package/android/src/main/java/expo/modules/ui/FilterChipView.kt +0 -59
  190. package/android/src/main/java/expo/modules/ui/PickerView.kt +0 -161
  191. package/android/src/main/java/expo/modules/ui/TextButtonView.kt +0 -33
  192. package/android/src/main/java/expo/modules/ui/menu/ContextMenu.kt +0 -183
  193. package/android/src/main/java/expo/modules/ui/menu/ContextMenuRecords.kt +0 -64
  194. package/build/jetpack-compose/Button/types.d.ts +0 -5
  195. package/build/jetpack-compose/Button/types.d.ts.map +0 -1
  196. package/build/jetpack-compose/ContextMenu/Submenu.d.ts +0 -17
  197. package/build/jetpack-compose/ContextMenu/Submenu.d.ts.map +0 -1
  198. package/build/jetpack-compose/ContextMenu/index.d.ts +0 -65
  199. package/build/jetpack-compose/ContextMenu/index.d.ts.map +0 -1
  200. package/build/jetpack-compose/ContextMenu/utils.d.ts +0 -24
  201. package/build/jetpack-compose/ContextMenu/utils.d.ts.map +0 -1
  202. package/build/jetpack-compose/FilterChip/index.d.ts +0 -49
  203. package/build/jetpack-compose/FilterChip/index.d.ts.map +0 -1
  204. package/build/jetpack-compose/Picker/index.d.ts +0 -62
  205. package/build/jetpack-compose/Picker/index.d.ts.map +0 -1
  206. package/build/jetpack-compose/TextButton/index.d.ts +0 -29
  207. package/build/jetpack-compose/TextButton/index.d.ts.map +0 -1
  208. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar +0 -0
  209. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.md5 +0 -1
  210. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha1 +0 -1
  211. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha256 +0 -1
  212. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2-sources.jar.sha512 +0 -1
  213. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar +0 -0
  214. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.md5 +0 -1
  215. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha1 +0 -1
  216. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha256 +0 -1
  217. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.aar.sha512 +0 -1
  218. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.md5 +0 -1
  219. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha1 +0 -1
  220. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha256 +0 -1
  221. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.module.sha512 +0 -1
  222. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.md5 +0 -1
  223. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha1 +0 -1
  224. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha256 +0 -1
  225. package/local-maven-repo/expo/modules/ui/expo.modules.ui/55.0.2/expo.modules.ui-55.0.2.pom.sha512 +0 -1
  226. package/src/jetpack-compose/Button/types.ts +0 -57
  227. package/src/jetpack-compose/ContextMenu/Submenu.tsx +0 -21
  228. package/src/jetpack-compose/ContextMenu/index.tsx +0 -149
  229. package/src/jetpack-compose/ContextMenu/utils.ts +0 -144
  230. package/src/jetpack-compose/FilterChip/index.tsx +0 -89
  231. package/src/jetpack-compose/Picker/index.tsx +0 -90
  232. package/src/jetpack-compose/TextButton/index.tsx +0 -55
@@ -1,184 +1,309 @@
1
1
  package expo.modules.ui
2
2
 
3
- import androidx.compose.foundation.layout.Box
4
- import androidx.compose.foundation.layout.padding
5
- import androidx.compose.foundation.layout.size
6
- import androidx.compose.foundation.layout.wrapContentSize
3
+ import android.graphics.Color
4
+ import androidx.compose.foundation.BorderStroke
7
5
  import androidx.compose.material3.AssistChip
8
6
  import androidx.compose.material3.AssistChipDefaults
9
7
  import androidx.compose.material3.ExperimentalMaterial3Api
10
8
  import androidx.compose.material3.FilterChip
11
9
  import androidx.compose.material3.FilterChipDefaults
12
- import androidx.compose.material3.Icon
13
10
  import androidx.compose.material3.InputChip
14
- import androidx.compose.material3.MaterialTheme
11
+ import androidx.compose.material3.InputChipDefaults
15
12
  import androidx.compose.material3.SuggestionChip
16
- import androidx.compose.material3.Text
13
+ import androidx.compose.material3.SuggestionChipDefaults
17
14
  import androidx.compose.runtime.Composable
18
- import androidx.compose.ui.Alignment
19
- import androidx.compose.ui.Modifier
20
- import androidx.compose.ui.graphics.Color
21
- import androidx.compose.ui.text.style.TextAlign
15
+ import androidx.compose.ui.graphics.Color as ComposeColor
22
16
  import androidx.compose.ui.unit.dp
17
+ import expo.modules.kotlin.records.Field
23
18
  import expo.modules.kotlin.records.Record
19
+ import expo.modules.kotlin.views.ComposableScope
24
20
  import expo.modules.kotlin.views.ComposeProps
25
21
  import expo.modules.kotlin.views.FunctionalComposableScope
26
22
  import java.io.Serializable
27
23
 
28
24
  open class ChipPressedEvent : Record, Serializable
29
25
 
30
- data class ChipProps(
31
- val variant: String = "assist",
32
- val label: String = "",
33
- val leadingIcon: String? = null,
34
- val trailingIcon: String? = null,
35
- val iconSize: Int = 18,
36
- val textStyle: String = "labelSmall",
26
+ class AssistChipColors : Record {
27
+ @Field val containerColor: Color? = null
28
+ @Field val labelColor: Color? = null
29
+ @Field val leadingIconContentColor: Color? = null
30
+ @Field val trailingIconContentColor: Color? = null
31
+ }
32
+
33
+ class FilterChipColors : Record {
34
+ @Field val containerColor: Color? = null
35
+ @Field val labelColor: Color? = null
36
+ @Field val iconColor: Color? = null
37
+ @Field val selectedContainerColor: Color? = null
38
+ @Field val selectedLabelColor: Color? = null
39
+ @Field val selectedLeadingIconColor: Color? = null
40
+ @Field val selectedTrailingIconColor: Color? = null
41
+ }
42
+
43
+ class InputChipColors : Record {
44
+ @Field val containerColor: Color? = null
45
+ @Field val labelColor: Color? = null
46
+ @Field val leadingIconColor: Color? = null
47
+ @Field val trailingIconColor: Color? = null
48
+ @Field val selectedContainerColor: Color? = null
49
+ @Field val selectedLabelColor: Color? = null
50
+ @Field val selectedLeadingIconColor: Color? = null
51
+ @Field val selectedTrailingIconColor: Color? = null
52
+ }
53
+
54
+ class SuggestionChipColors : Record {
55
+ @Field val containerColor: Color? = null
56
+ @Field val labelColor: Color? = null
57
+ @Field val iconContentColor: Color? = null
58
+ }
59
+
60
+ class ChipBorder : Record {
61
+ @Field val width: Float = 1f
62
+ @Field val color: Color? = null
63
+ }
64
+
65
+ private fun FunctionalComposableScope.slotContent(slotName: String): (@Composable () -> Unit)? {
66
+ return findChildSlotView(view, slotName)?.let { slotView ->
67
+ {
68
+ with(ComposableScope()) {
69
+ with(slotView) {
70
+ Content()
71
+ }
72
+ }
73
+ }
74
+ }
75
+ }
76
+
77
+ // region AssistChip
78
+
79
+ data class AssistChipProps(
37
80
  val enabled: Boolean = true,
38
- val selected: Boolean = false,
81
+ val colors: AssistChipColors = AssistChipColors(),
82
+ val elevation: Float? = null,
83
+ val border: ChipBorder? = null,
39
84
  val modifiers: ModifierList = emptyList()
40
85
  ) : ComposeProps
41
86
 
42
- @OptIn(ExperimentalMaterial3Api::class)
43
87
  @Composable
44
- fun FunctionalComposableScope.ChipContent(
45
- props: ChipProps,
46
- onPress: (ChipPressedEvent) -> Unit,
47
- onDismiss: (ChipPressedEvent) -> Unit
88
+ fun FunctionalComposableScope.AssistChipContent(
89
+ props: AssistChipProps,
90
+ onPress: (ChipPressedEvent) -> Unit
48
91
  ) {
49
- val chipModifier = Modifier
50
- .padding(4.dp)
51
- .wrapContentSize(Alignment.Center)
52
-
53
- @Composable
54
- fun AssistChipComposable() {
55
- AssistChip(
56
- onClick = { onPress(ChipPressedEvent()) },
57
- label = { ChipText(label = props.label, textStyle = props.textStyle) },
58
- leadingIcon = {
59
- props.leadingIcon?.let {
60
- ChipIcon(iconName = it, iconSize = props.iconSize)
61
- }
62
- },
63
- trailingIcon = {
64
- props.trailingIcon?.let {
65
- ChipIcon(iconName = it, iconSize = props.iconSize)
66
- }
67
- },
68
- enabled = props.enabled,
69
- colors = AssistChipDefaults.assistChipColors(),
70
- border = AssistChipDefaults.assistChipBorder(enabled = props.enabled),
71
- modifier = chipModifier
72
- )
73
- }
92
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
74
93
 
75
- @Composable
76
- fun FilterChipComposable() {
77
- FilterChip(
78
- onClick = { onPress(ChipPressedEvent()) },
79
- label = { ChipText(label = props.label, textStyle = props.textStyle) },
80
- selected = props.selected,
81
- leadingIcon = if (props.selected) {
82
- {
83
- ChipIcon(iconName = "filled.Done", iconSize = props.iconSize)
84
- }
85
- } else {
86
- null
87
- },
88
- trailingIcon = {
89
- props.trailingIcon?.let {
90
- ChipIcon(iconName = it, iconSize = props.iconSize)
91
- }
92
- },
93
- enabled = props.enabled,
94
- colors = FilterChipDefaults.filterChipColors(),
95
- border = FilterChipDefaults.filterChipBorder(enabled = props.enabled, selected = props.selected),
96
- modifier = chipModifier
97
- )
94
+ val colors = AssistChipDefaults.assistChipColors(
95
+ containerColor = props.colors.containerColor.composeOrNull ?: ComposeColor.Unspecified,
96
+ labelColor = props.colors.labelColor.composeOrNull ?: ComposeColor.Unspecified,
97
+ leadingIconContentColor = props.colors.leadingIconContentColor.composeOrNull ?: ComposeColor.Unspecified,
98
+ trailingIconContentColor = props.colors.trailingIconContentColor.composeOrNull ?: ComposeColor.Unspecified
99
+ )
100
+
101
+ val elevation = if (props.elevation != null) {
102
+ AssistChipDefaults.assistChipElevation(elevation = props.elevation.dp)
103
+ } else {
104
+ AssistChipDefaults.assistChipElevation()
98
105
  }
99
106
 
100
- @Composable
101
- fun InputChipComposable() {
102
- if (!props.enabled) return
103
- InputChip(
104
- onClick = { onDismiss(ChipPressedEvent()) },
105
- label = { ChipText(label = props.label, textStyle = props.textStyle) },
106
- enabled = props.enabled,
107
- selected = props.selected,
108
- avatar = {
109
- props.leadingIcon?.let {
110
- ChipIcon(iconName = it, iconSize = props.iconSize)
111
- }
112
- },
113
- trailingIcon = {
114
- ChipIcon(
115
- iconName = props.trailingIcon ?: "filled.Close",
116
- iconSize = props.iconSize
117
- )
118
- },
119
- modifier = chipModifier
120
- )
107
+ val border = if (props.border != null) {
108
+ val borderColor = props.border.color.composeOrNull
109
+ if (borderColor != null) {
110
+ BorderStroke(props.border.width.dp, borderColor)
111
+ } else {
112
+ AssistChipDefaults.assistChipBorder(enabled = props.enabled, borderWidth = props.border.width.dp)
113
+ }
114
+ } else {
115
+ AssistChipDefaults.assistChipBorder(enabled = props.enabled)
121
116
  }
122
117
 
123
- @Composable
124
- fun SuggestionChipComposable() {
125
- SuggestionChip(
126
- onClick = { onPress(ChipPressedEvent()) },
127
- label = { ChipText(label = props.label, textStyle = props.textStyle) },
128
- icon = {
129
- props.leadingIcon?.let {
130
- ChipIcon(iconName = it, iconSize = props.iconSize)
131
- }
132
- },
133
- modifier = chipModifier
134
- )
118
+ AssistChip(
119
+ onClick = { onPress(ChipPressedEvent()) },
120
+ label = slotContent("label") ?: {},
121
+ leadingIcon = slotContent("leadingIcon"),
122
+ trailingIcon = slotContent("trailingIcon"),
123
+ enabled = props.enabled,
124
+ colors = colors,
125
+ elevation = elevation,
126
+ border = border,
127
+ modifier = modifier
128
+ )
129
+ }
130
+
131
+ // endregion
132
+
133
+ // region FilterChip
134
+
135
+ data class FilterChipProps(
136
+ val selected: Boolean = false,
137
+ val enabled: Boolean = true,
138
+ val colors: FilterChipColors = FilterChipColors(),
139
+ val elevation: Float? = null,
140
+ val border: ChipBorder? = null,
141
+ val modifiers: ModifierList = emptyList()
142
+ ) : ComposeProps
143
+
144
+ @Composable
145
+ fun FunctionalComposableScope.FilterChipContent(
146
+ props: FilterChipProps,
147
+ onPress: (ChipPressedEvent) -> Unit
148
+ ) {
149
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
150
+
151
+ val colors = FilterChipDefaults.filterChipColors(
152
+ containerColor = props.colors.containerColor.composeOrNull ?: ComposeColor.Unspecified,
153
+ labelColor = props.colors.labelColor.composeOrNull ?: ComposeColor.Unspecified,
154
+ iconColor = props.colors.iconColor.composeOrNull ?: ComposeColor.Unspecified,
155
+ selectedContainerColor = props.colors.selectedContainerColor.composeOrNull ?: ComposeColor.Unspecified,
156
+ selectedLabelColor = props.colors.selectedLabelColor.composeOrNull ?: ComposeColor.Unspecified,
157
+ selectedLeadingIconColor = props.colors.selectedLeadingIconColor.composeOrNull ?: ComposeColor.Unspecified,
158
+ selectedTrailingIconColor = props.colors.selectedTrailingIconColor.composeOrNull ?: ComposeColor.Unspecified
159
+ )
160
+
161
+ val elevation = if (props.elevation != null) {
162
+ FilterChipDefaults.filterChipElevation(elevation = props.elevation.dp)
163
+ } else {
164
+ FilterChipDefaults.filterChipElevation()
135
165
  }
136
166
 
137
- when (props.variant.lowercase()) {
138
- "assist" -> AssistChipComposable()
139
- "filter" -> FilterChipComposable()
140
- "input" -> InputChipComposable()
141
- "suggestion" -> SuggestionChipComposable()
142
- else -> AssistChipComposable()
167
+ val border = if (props.border != null) {
168
+ val borderColor = props.border.color.composeOrNull
169
+ if (borderColor != null) {
170
+ BorderStroke(props.border.width.dp, borderColor)
171
+ } else {
172
+ FilterChipDefaults.filterChipBorder(enabled = props.enabled, selected = props.selected, borderWidth = props.border.width.dp)
173
+ }
174
+ } else {
175
+ FilterChipDefaults.filterChipBorder(enabled = props.enabled, selected = props.selected)
143
176
  }
177
+
178
+ FilterChip(
179
+ selected = props.selected,
180
+ onClick = { onPress(ChipPressedEvent()) },
181
+ label = slotContent("label") ?: {},
182
+ leadingIcon = slotContent("leadingIcon"),
183
+ trailingIcon = slotContent("trailingIcon"),
184
+ enabled = props.enabled,
185
+ colors = colors,
186
+ elevation = elevation,
187
+ border = border,
188
+ modifier = modifier
189
+ )
144
190
  }
145
191
 
192
+ // endregion
193
+
194
+ // region InputChip
195
+
196
+ data class InputChipProps(
197
+ val enabled: Boolean = true,
198
+ val selected: Boolean = false,
199
+ val colors: InputChipColors = InputChipColors(),
200
+ val elevation: Float? = null,
201
+ val border: ChipBorder? = null,
202
+ val modifiers: ModifierList = emptyList()
203
+ ) : ComposeProps
204
+
205
+ @OptIn(ExperimentalMaterial3Api::class)
146
206
  @Composable
147
- private fun ChipText(label: String, textStyle: String = "labelSmall") {
148
- Box(
149
- contentAlignment = Alignment.Center
150
- ) {
151
- Text(
152
- text = label,
153
- style = when (textStyle) {
154
- "labelSmall" -> MaterialTheme.typography.labelSmall
155
- "labelMedium" -> MaterialTheme.typography.labelMedium
156
- "labelLarge" -> MaterialTheme.typography.labelLarge
157
- "bodySmall" -> MaterialTheme.typography.bodySmall
158
- "bodyMedium" -> MaterialTheme.typography.bodyMedium
159
- "bodyLarge" -> MaterialTheme.typography.bodyLarge
160
- else -> MaterialTheme.typography.labelSmall
161
- },
162
- textAlign = TextAlign.Center
163
- )
207
+ fun FunctionalComposableScope.InputChipContent(
208
+ props: InputChipProps,
209
+ onPress: (ChipPressedEvent) -> Unit
210
+ ) {
211
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
212
+
213
+ val colors = InputChipDefaults.inputChipColors(
214
+ containerColor = props.colors.containerColor.composeOrNull ?: ComposeColor.Unspecified,
215
+ labelColor = props.colors.labelColor.composeOrNull ?: ComposeColor.Unspecified,
216
+ leadingIconColor = props.colors.leadingIconColor.composeOrNull ?: ComposeColor.Unspecified,
217
+ trailingIconColor = props.colors.trailingIconColor.composeOrNull ?: ComposeColor.Unspecified,
218
+ selectedContainerColor = props.colors.selectedContainerColor.composeOrNull ?: ComposeColor.Unspecified,
219
+ selectedLabelColor = props.colors.selectedLabelColor.composeOrNull ?: ComposeColor.Unspecified,
220
+ selectedLeadingIconColor = props.colors.selectedLeadingIconColor.composeOrNull ?: ComposeColor.Unspecified,
221
+ selectedTrailingIconColor = props.colors.selectedTrailingIconColor.composeOrNull ?: ComposeColor.Unspecified
222
+ )
223
+
224
+ val elevation = if (props.elevation != null) {
225
+ InputChipDefaults.inputChipElevation(elevation = props.elevation.dp)
226
+ } else {
227
+ InputChipDefaults.inputChipElevation()
228
+ }
229
+
230
+ val border = if (props.border != null) {
231
+ val borderColor = props.border.color.composeOrNull
232
+ if (borderColor != null) {
233
+ BorderStroke(props.border.width.dp, borderColor)
234
+ } else {
235
+ InputChipDefaults.inputChipBorder(enabled = props.enabled, selected = props.selected, borderWidth = props.border.width.dp)
236
+ }
237
+ } else {
238
+ InputChipDefaults.inputChipBorder(enabled = props.enabled, selected = props.selected)
164
239
  }
240
+
241
+ InputChip(
242
+ onClick = { onPress(ChipPressedEvent()) },
243
+ label = slotContent("label") ?: {},
244
+ enabled = props.enabled,
245
+ selected = props.selected,
246
+ avatar = slotContent("avatar"),
247
+ trailingIcon = slotContent("trailingIcon"),
248
+ colors = colors,
249
+ elevation = elevation,
250
+ border = border,
251
+ modifier = modifier
252
+ )
165
253
  }
166
254
 
255
+ // endregion
256
+
257
+ // region SuggestionChip
258
+
259
+ data class SuggestionChipProps(
260
+ val enabled: Boolean = true,
261
+ val colors: SuggestionChipColors = SuggestionChipColors(),
262
+ val elevation: Float? = null,
263
+ val border: ChipBorder? = null,
264
+ val modifiers: ModifierList = emptyList()
265
+ ) : ComposeProps
266
+
167
267
  @Composable
168
- private fun ChipIcon(
169
- iconName: String,
170
- iconSize: Int = 18,
171
- tint: Color = MaterialTheme.colorScheme.primary,
172
- modifier: Modifier = Modifier
268
+ fun FunctionalComposableScope.SuggestionChipContent(
269
+ props: SuggestionChipProps,
270
+ onPress: (ChipPressedEvent) -> Unit
173
271
  ) {
174
- getImageVector(iconName)?.let { imageVector ->
175
- Icon(
176
- imageVector = imageVector,
177
- contentDescription = iconName,
178
- tint = tint,
179
- modifier = modifier
180
- .size(iconSize.dp)
181
- .padding(end = 4.dp)
182
- )
272
+ val modifier = ModifierRegistry.applyModifiers(props.modifiers, appContext, composableScope, globalEventDispatcher)
273
+
274
+ val colors = SuggestionChipDefaults.suggestionChipColors(
275
+ containerColor = props.colors.containerColor.composeOrNull ?: ComposeColor.Unspecified,
276
+ labelColor = props.colors.labelColor.composeOrNull ?: ComposeColor.Unspecified,
277
+ iconContentColor = props.colors.iconContentColor.composeOrNull ?: ComposeColor.Unspecified
278
+ )
279
+
280
+ val elevation = if (props.elevation != null) {
281
+ SuggestionChipDefaults.suggestionChipElevation(elevation = props.elevation.dp)
282
+ } else {
283
+ SuggestionChipDefaults.suggestionChipElevation()
183
284
  }
285
+
286
+ val border = if (props.border != null) {
287
+ val borderColor = props.border.color.composeOrNull
288
+ if (borderColor != null) {
289
+ BorderStroke(props.border.width.dp, borderColor)
290
+ } else {
291
+ SuggestionChipDefaults.suggestionChipBorder(enabled = props.enabled, borderWidth = props.border.width.dp)
292
+ }
293
+ } else {
294
+ SuggestionChipDefaults.suggestionChipBorder(enabled = props.enabled)
295
+ }
296
+
297
+ SuggestionChip(
298
+ onClick = { onPress(ChipPressedEvent()) },
299
+ label = slotContent("label") ?: {},
300
+ icon = slotContent("icon"),
301
+ enabled = props.enabled,
302
+ colors = colors,
303
+ elevation = elevation,
304
+ border = border,
305
+ modifier = modifier
306
+ )
184
307
  }
308
+
309
+ // endregion