@pagopa/io-app-design-system 1.33.0 → 1.34.0

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 (252) hide show
  1. package/lib/commonjs/components/banner/__test__/__snapshots__/banner.test.tsx.snap +2 -0
  2. package/lib/commonjs/components/buttons/ButtonLink.js +4 -1
  3. package/lib/commonjs/components/buttons/ButtonLink.js.map +1 -1
  4. package/lib/commonjs/components/buttons/ButtonOutline.js +4 -1
  5. package/lib/commonjs/components/buttons/ButtonOutline.js.map +1 -1
  6. package/lib/commonjs/components/buttons/ButtonSolid.js +6 -3
  7. package/lib/commonjs/components/buttons/ButtonSolid.js.map +1 -1
  8. package/lib/commonjs/components/buttons/IconButton.js +4 -1
  9. package/lib/commonjs/components/buttons/IconButton.js.map +1 -1
  10. package/lib/commonjs/components/buttons/IconButtonContained.js +3 -0
  11. package/lib/commonjs/components/buttons/IconButtonContained.js.map +1 -1
  12. package/lib/commonjs/components/buttons/IconButtonSolid.js +3 -0
  13. package/lib/commonjs/components/buttons/IconButtonSolid.js.map +1 -1
  14. package/lib/commonjs/components/buttons/__test__/__snapshots__/button.test.tsx.snap +2 -0
  15. package/lib/commonjs/components/icons/svg/IconCategCulture.js +1 -7
  16. package/lib/commonjs/components/icons/svg/IconCategCulture.js.map +1 -1
  17. package/lib/commonjs/components/icons/svg/IconCategFinance.js +3 -4
  18. package/lib/commonjs/components/icons/svg/IconCategFinance.js.map +1 -1
  19. package/lib/commonjs/components/icons/svg/IconCategHome.js +3 -4
  20. package/lib/commonjs/components/icons/svg/IconCategHome.js.map +1 -1
  21. package/lib/commonjs/components/icons/svg/IconCategJobOffers.js +3 -1
  22. package/lib/commonjs/components/icons/svg/IconCategJobOffers.js.map +1 -1
  23. package/lib/commonjs/components/icons/svg/IconCategLearning.js +3 -1
  24. package/lib/commonjs/components/icons/svg/IconCategLearning.js.map +1 -1
  25. package/lib/commonjs/components/icons/svg/IconCategMobility.js +3 -1
  26. package/lib/commonjs/components/icons/svg/IconCategMobility.js.map +1 -1
  27. package/lib/commonjs/components/icons/svg/IconCategSport.js +1 -1
  28. package/lib/commonjs/components/icons/svg/IconCategSport.js.map +1 -1
  29. package/lib/commonjs/components/icons/svg/IconCategTelco.js +3 -9
  30. package/lib/commonjs/components/icons/svg/IconCategTelco.js.map +1 -1
  31. package/lib/commonjs/components/icons/svg/IconCategTravel.js +1 -6
  32. package/lib/commonjs/components/icons/svg/IconCategTravel.js.map +1 -1
  33. package/lib/commonjs/components/icons/svg/IconCategWellness.js +3 -4
  34. package/lib/commonjs/components/icons/svg/IconCategWellness.js.map +1 -1
  35. package/lib/commonjs/components/icons/svg/originals/IconCategCulture.svg +1 -14
  36. package/lib/commonjs/components/icons/svg/originals/IconCategFinance.svg +1 -10
  37. package/lib/commonjs/components/icons/svg/originals/IconCategHome.svg +1 -10
  38. package/lib/commonjs/components/icons/svg/originals/IconCategJobOffers.svg +1 -6
  39. package/lib/commonjs/components/icons/svg/originals/IconCategLearning.svg +1 -6
  40. package/lib/commonjs/components/icons/svg/originals/IconCategMobility.svg +1 -6
  41. package/lib/commonjs/components/icons/svg/originals/IconCategSport.svg +1 -8
  42. package/lib/commonjs/components/icons/svg/originals/IconCategTelco.svg +1 -13
  43. package/lib/commonjs/components/icons/svg/originals/IconCategTravel.svg +1 -12
  44. package/lib/commonjs/components/icons/svg/originals/IconCategWellness.svg +1 -10
  45. package/lib/commonjs/components/index.js +42 -31
  46. package/lib/commonjs/components/index.js.map +1 -1
  47. package/lib/commonjs/components/listitems/ListItemCheckbox.js +7 -4
  48. package/lib/commonjs/components/listitems/ListItemCheckbox.js.map +1 -1
  49. package/lib/commonjs/components/listitems/ListItemNav.js +5 -0
  50. package/lib/commonjs/components/listitems/ListItemNav.js.map +1 -1
  51. package/lib/commonjs/components/listitems/ListItemRadio.js +4 -3
  52. package/lib/commonjs/components/listitems/ListItemRadio.js.map +1 -1
  53. package/lib/commonjs/components/listitems/ListItemRadioWithAmount.js +23 -9
  54. package/lib/commonjs/components/listitems/ListItemRadioWithAmount.js.map +1 -1
  55. package/lib/commonjs/components/listitems/ListItemSwitch.js +5 -1
  56. package/lib/commonjs/components/listitems/ListItemSwitch.js.map +1 -1
  57. package/lib/commonjs/components/listitems/PressableListItemsBase.js +7 -6
  58. package/lib/commonjs/components/listitems/PressableListItemsBase.js.map +1 -1
  59. package/lib/commonjs/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +8 -8
  60. package/lib/commonjs/components/modules/ModuleAttachment.js +6 -3
  61. package/lib/commonjs/components/modules/ModuleAttachment.js.map +1 -1
  62. package/lib/commonjs/components/modules/ModuleCheckout.js +3 -3
  63. package/lib/commonjs/components/modules/ModuleCheckout.js.map +1 -1
  64. package/lib/commonjs/components/modules/ModuleCredential.js.map +1 -1
  65. package/lib/commonjs/components/modules/PressableModuleBase.js +5 -3
  66. package/lib/commonjs/components/modules/PressableModuleBase.js.map +1 -1
  67. package/lib/commonjs/components/radio/RadioButtonLabel.js +10 -9
  68. package/lib/commonjs/components/radio/RadioButtonLabel.js.map +1 -1
  69. package/lib/commonjs/components/radio/RadioGroup.js +7 -2
  70. package/lib/commonjs/components/radio/RadioGroup.js.map +1 -1
  71. package/lib/commonjs/components/spacer/Spacer.js.map +1 -1
  72. package/lib/commonjs/components/stack/Stack.js +47 -0
  73. package/lib/commonjs/components/stack/Stack.js.map +1 -0
  74. package/lib/commonjs/components/stack/index.js +17 -0
  75. package/lib/commonjs/components/stack/index.js.map +1 -0
  76. package/lib/commonjs/components/tabs/TabItem.js +59 -7
  77. package/lib/commonjs/components/tabs/TabItem.js.map +1 -1
  78. package/lib/commonjs/components/tabs/TabNavigation.js +2 -7
  79. package/lib/commonjs/components/tabs/TabNavigation.js.map +1 -1
  80. package/lib/module/components/banner/__test__/__snapshots__/banner.test.tsx.snap +2 -0
  81. package/lib/module/components/buttons/ButtonLink.js +4 -1
  82. package/lib/module/components/buttons/ButtonLink.js.map +1 -1
  83. package/lib/module/components/buttons/ButtonOutline.js +4 -1
  84. package/lib/module/components/buttons/ButtonOutline.js.map +1 -1
  85. package/lib/module/components/buttons/ButtonSolid.js +6 -3
  86. package/lib/module/components/buttons/ButtonSolid.js.map +1 -1
  87. package/lib/module/components/buttons/IconButton.js +4 -1
  88. package/lib/module/components/buttons/IconButton.js.map +1 -1
  89. package/lib/module/components/buttons/IconButtonContained.js +3 -0
  90. package/lib/module/components/buttons/IconButtonContained.js.map +1 -1
  91. package/lib/module/components/buttons/IconButtonSolid.js +3 -0
  92. package/lib/module/components/buttons/IconButtonSolid.js.map +1 -1
  93. package/lib/module/components/buttons/__test__/__snapshots__/button.test.tsx.snap +2 -0
  94. package/lib/module/components/icons/svg/IconCategCulture.js +1 -7
  95. package/lib/module/components/icons/svg/IconCategCulture.js.map +1 -1
  96. package/lib/module/components/icons/svg/IconCategFinance.js +3 -4
  97. package/lib/module/components/icons/svg/IconCategFinance.js.map +1 -1
  98. package/lib/module/components/icons/svg/IconCategHome.js +3 -4
  99. package/lib/module/components/icons/svg/IconCategHome.js.map +1 -1
  100. package/lib/module/components/icons/svg/IconCategJobOffers.js +3 -1
  101. package/lib/module/components/icons/svg/IconCategJobOffers.js.map +1 -1
  102. package/lib/module/components/icons/svg/IconCategLearning.js +3 -1
  103. package/lib/module/components/icons/svg/IconCategLearning.js.map +1 -1
  104. package/lib/module/components/icons/svg/IconCategMobility.js +3 -1
  105. package/lib/module/components/icons/svg/IconCategMobility.js.map +1 -1
  106. package/lib/module/components/icons/svg/IconCategSport.js +1 -1
  107. package/lib/module/components/icons/svg/IconCategSport.js.map +1 -1
  108. package/lib/module/components/icons/svg/IconCategTelco.js +3 -9
  109. package/lib/module/components/icons/svg/IconCategTelco.js.map +1 -1
  110. package/lib/module/components/icons/svg/IconCategTravel.js +1 -6
  111. package/lib/module/components/icons/svg/IconCategTravel.js.map +1 -1
  112. package/lib/module/components/icons/svg/IconCategWellness.js +3 -4
  113. package/lib/module/components/icons/svg/IconCategWellness.js.map +1 -1
  114. package/lib/module/components/icons/svg/originals/IconCategCulture.svg +1 -14
  115. package/lib/module/components/icons/svg/originals/IconCategFinance.svg +1 -10
  116. package/lib/module/components/icons/svg/originals/IconCategHome.svg +1 -10
  117. package/lib/module/components/icons/svg/originals/IconCategJobOffers.svg +1 -6
  118. package/lib/module/components/icons/svg/originals/IconCategLearning.svg +1 -6
  119. package/lib/module/components/icons/svg/originals/IconCategMobility.svg +1 -6
  120. package/lib/module/components/icons/svg/originals/IconCategSport.svg +1 -8
  121. package/lib/module/components/icons/svg/originals/IconCategTelco.svg +1 -13
  122. package/lib/module/components/icons/svg/originals/IconCategTravel.svg +1 -12
  123. package/lib/module/components/icons/svg/originals/IconCategWellness.svg +1 -10
  124. package/lib/module/components/index.js +5 -4
  125. package/lib/module/components/index.js.map +1 -1
  126. package/lib/module/components/listitems/ListItemCheckbox.js +7 -4
  127. package/lib/module/components/listitems/ListItemCheckbox.js.map +1 -1
  128. package/lib/module/components/listitems/ListItemNav.js +5 -0
  129. package/lib/module/components/listitems/ListItemNav.js.map +1 -1
  130. package/lib/module/components/listitems/ListItemRadio.js +4 -3
  131. package/lib/module/components/listitems/ListItemRadio.js.map +1 -1
  132. package/lib/module/components/listitems/ListItemRadioWithAmount.js +23 -9
  133. package/lib/module/components/listitems/ListItemRadioWithAmount.js.map +1 -1
  134. package/lib/module/components/listitems/ListItemSwitch.js +5 -1
  135. package/lib/module/components/listitems/ListItemSwitch.js.map +1 -1
  136. package/lib/module/components/listitems/PressableListItemsBase.js +7 -6
  137. package/lib/module/components/listitems/PressableListItemsBase.js.map +1 -1
  138. package/lib/module/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +8 -8
  139. package/lib/module/components/modules/ModuleAttachment.js +6 -3
  140. package/lib/module/components/modules/ModuleAttachment.js.map +1 -1
  141. package/lib/module/components/modules/ModuleCheckout.js +3 -3
  142. package/lib/module/components/modules/ModuleCheckout.js.map +1 -1
  143. package/lib/module/components/modules/ModuleCredential.js.map +1 -1
  144. package/lib/module/components/modules/PressableModuleBase.js +5 -3
  145. package/lib/module/components/modules/PressableModuleBase.js.map +1 -1
  146. package/lib/module/components/radio/RadioButtonLabel.js +10 -9
  147. package/lib/module/components/radio/RadioButtonLabel.js.map +1 -1
  148. package/lib/module/components/radio/RadioGroup.js +7 -2
  149. package/lib/module/components/radio/RadioGroup.js.map +1 -1
  150. package/lib/module/components/spacer/Spacer.js.map +1 -1
  151. package/lib/module/components/stack/Stack.js +39 -0
  152. package/lib/module/components/stack/Stack.js.map +1 -0
  153. package/lib/module/components/stack/index.js +2 -0
  154. package/lib/module/components/stack/index.js.map +1 -0
  155. package/lib/module/components/tabs/TabItem.js +60 -7
  156. package/lib/module/components/tabs/TabItem.js.map +1 -1
  157. package/lib/module/components/tabs/TabNavigation.js +2 -7
  158. package/lib/module/components/tabs/TabNavigation.js.map +1 -1
  159. package/lib/typescript/components/buttons/ButtonLink.d.ts.map +1 -1
  160. package/lib/typescript/components/buttons/ButtonOutline.d.ts +4 -10
  161. package/lib/typescript/components/buttons/ButtonOutline.d.ts.map +1 -1
  162. package/lib/typescript/components/buttons/ButtonSolid.d.ts +4 -16
  163. package/lib/typescript/components/buttons/ButtonSolid.d.ts.map +1 -1
  164. package/lib/typescript/components/buttons/IconButton.d.ts.map +1 -1
  165. package/lib/typescript/components/buttons/IconButtonContained.d.ts +1 -1
  166. package/lib/typescript/components/buttons/IconButtonContained.d.ts.map +1 -1
  167. package/lib/typescript/components/buttons/IconButtonSolid.d.ts.map +1 -1
  168. package/lib/typescript/components/icons/svg/IconCategCulture.d.ts.map +1 -1
  169. package/lib/typescript/components/icons/svg/IconCategFinance.d.ts.map +1 -1
  170. package/lib/typescript/components/icons/svg/IconCategHome.d.ts.map +1 -1
  171. package/lib/typescript/components/icons/svg/IconCategJobOffers.d.ts.map +1 -1
  172. package/lib/typescript/components/icons/svg/IconCategLearning.d.ts.map +1 -1
  173. package/lib/typescript/components/icons/svg/IconCategMobility.d.ts.map +1 -1
  174. package/lib/typescript/components/icons/svg/IconCategTelco.d.ts +2 -2
  175. package/lib/typescript/components/icons/svg/IconCategTelco.d.ts.map +1 -1
  176. package/lib/typescript/components/icons/svg/IconCategTravel.d.ts.map +1 -1
  177. package/lib/typescript/components/icons/svg/IconCategWellness.d.ts.map +1 -1
  178. package/lib/typescript/components/index.d.ts +5 -4
  179. package/lib/typescript/components/index.d.ts.map +1 -1
  180. package/lib/typescript/components/listitems/ListItemCheckbox.d.ts +2 -2
  181. package/lib/typescript/components/listitems/ListItemCheckbox.d.ts.map +1 -1
  182. package/lib/typescript/components/listitems/ListItemNav.d.ts +4 -5
  183. package/lib/typescript/components/listitems/ListItemNav.d.ts.map +1 -1
  184. package/lib/typescript/components/listitems/ListItemRadio.d.ts +2 -2
  185. package/lib/typescript/components/listitems/ListItemRadio.d.ts.map +1 -1
  186. package/lib/typescript/components/listitems/ListItemRadioWithAmount.d.ts +4 -2
  187. package/lib/typescript/components/listitems/ListItemRadioWithAmount.d.ts.map +1 -1
  188. package/lib/typescript/components/listitems/ListItemSwitch.d.ts.map +1 -1
  189. package/lib/typescript/components/listitems/PressableListItemsBase.d.ts +3 -5
  190. package/lib/typescript/components/listitems/PressableListItemsBase.d.ts.map +1 -1
  191. package/lib/typescript/components/modules/ModuleCredential.d.ts +1 -1
  192. package/lib/typescript/components/modules/ModuleCredential.d.ts.map +1 -1
  193. package/lib/typescript/components/modules/PressableModuleBase.d.ts +4 -5
  194. package/lib/typescript/components/modules/PressableModuleBase.d.ts.map +1 -1
  195. package/lib/typescript/components/radio/RadioButtonLabel.d.ts +2 -2
  196. package/lib/typescript/components/radio/RadioButtonLabel.d.ts.map +1 -1
  197. package/lib/typescript/components/radio/RadioGroup.d.ts.map +1 -1
  198. package/lib/typescript/components/stack/Stack.d.ts +18 -0
  199. package/lib/typescript/components/stack/Stack.d.ts.map +1 -0
  200. package/lib/typescript/components/stack/index.d.ts +2 -0
  201. package/lib/typescript/components/stack/index.d.ts.map +1 -0
  202. package/lib/typescript/components/tabs/TabItem.d.ts.map +1 -1
  203. package/lib/typescript/components/tabs/TabNavigation.d.ts +1 -1
  204. package/lib/typescript/components/tabs/TabNavigation.d.ts.map +1 -1
  205. package/package.json +1 -1
  206. package/src/components/banner/__test__/__snapshots__/banner.test.tsx.snap +2 -0
  207. package/src/components/buttons/ButtonLink.tsx +2 -1
  208. package/src/components/buttons/ButtonOutline.tsx +18 -15
  209. package/src/components/buttons/ButtonSolid.tsx +33 -30
  210. package/src/components/buttons/IconButton.tsx +1 -0
  211. package/src/components/buttons/IconButtonContained.tsx +2 -1
  212. package/src/components/buttons/IconButtonSolid.tsx +1 -0
  213. package/src/components/buttons/__test__/__snapshots__/button.test.tsx.snap +2 -0
  214. package/src/components/icons/svg/IconCategCulture.tsx +1 -9
  215. package/src/components/icons/svg/IconCategFinance.tsx +3 -5
  216. package/src/components/icons/svg/IconCategHome.tsx +3 -5
  217. package/src/components/icons/svg/IconCategJobOffers.tsx +3 -1
  218. package/src/components/icons/svg/IconCategLearning.tsx +3 -1
  219. package/src/components/icons/svg/IconCategMobility.tsx +3 -1
  220. package/src/components/icons/svg/IconCategSport.tsx +1 -1
  221. package/src/components/icons/svg/IconCategTelco.tsx +3 -8
  222. package/src/components/icons/svg/IconCategTravel.tsx +1 -7
  223. package/src/components/icons/svg/IconCategWellness.tsx +3 -5
  224. package/src/components/icons/svg/originals/IconCategCulture.svg +1 -14
  225. package/src/components/icons/svg/originals/IconCategFinance.svg +1 -10
  226. package/src/components/icons/svg/originals/IconCategHome.svg +1 -10
  227. package/src/components/icons/svg/originals/IconCategJobOffers.svg +1 -6
  228. package/src/components/icons/svg/originals/IconCategLearning.svg +1 -6
  229. package/src/components/icons/svg/originals/IconCategMobility.svg +1 -6
  230. package/src/components/icons/svg/originals/IconCategSport.svg +1 -8
  231. package/src/components/icons/svg/originals/IconCategTelco.svg +1 -13
  232. package/src/components/icons/svg/originals/IconCategTravel.svg +1 -12
  233. package/src/components/icons/svg/originals/IconCategWellness.svg +1 -10
  234. package/src/components/index.tsx +5 -4
  235. package/src/components/listitems/ListItemCheckbox.tsx +12 -6
  236. package/src/components/listitems/ListItemNav.tsx +17 -11
  237. package/src/components/listitems/ListItemRadio.tsx +7 -5
  238. package/src/components/listitems/ListItemRadioWithAmount.tsx +28 -13
  239. package/src/components/listitems/ListItemSwitch.tsx +1 -0
  240. package/src/components/listitems/PressableListItemsBase.tsx +16 -8
  241. package/src/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +8 -8
  242. package/src/components/modules/ModuleAttachment.tsx +4 -3
  243. package/src/components/modules/ModuleCheckout.tsx +5 -5
  244. package/src/components/modules/ModuleCredential.tsx +1 -1
  245. package/src/components/modules/PressableModuleBase.tsx +16 -10
  246. package/src/components/radio/RadioButtonLabel.tsx +16 -11
  247. package/src/components/radio/RadioGroup.tsx +18 -8
  248. package/src/components/spacer/Spacer.tsx +1 -1
  249. package/src/components/stack/Stack.tsx +41 -0
  250. package/src/components/stack/index.tsx +1 -0
  251. package/src/components/tabs/TabItem.tsx +93 -10
  252. package/src/components/tabs/TabNavigation.tsx +2 -10
@@ -73,14 +73,24 @@ const RadioListItemWithAmount = <T,>(
73
73
  <>
74
74
  {props.items.map((item, index) => (
75
75
  <React.Fragment key={`radio_item_${item.id}`}>
76
- <ListItemRadioWithAmount
77
- label={item.label}
78
- formattedAmountString={item.formattedAmountString}
79
- suggestReason={item.isSuggested ? item.suggestReason : ""}
80
- isSuggested={item.isSuggested}
81
- onValueChange={() => props.onPress(item.id)}
82
- selected={props.selectedItem === item.id}
83
- />
76
+ {item.isSuggested ? (
77
+ <ListItemRadioWithAmount
78
+ label={item.label}
79
+ formattedAmountString={item.formattedAmountString}
80
+ suggestReason={item.suggestReason}
81
+ isSuggested={item.isSuggested}
82
+ onValueChange={() => props.onPress(item.id)}
83
+ selected={props.selectedItem === item.id}
84
+ />
85
+ ) : (
86
+ <ListItemRadioWithAmount
87
+ label={item.label}
88
+ formattedAmountString={item.formattedAmountString}
89
+ onValueChange={() => props.onPress(item.id)}
90
+ selected={props.selectedItem === item.id}
91
+ />
92
+ )}
93
+
84
94
  {index < props.items.length - 1 && <Divider />}
85
95
  </React.Fragment>
86
96
  ))}
@@ -13,7 +13,7 @@ type SpacerProps = {
13
13
  size?: IOSpacer;
14
14
  };
15
15
 
16
- const DEFAULT_SIZE = 16;
16
+ const DEFAULT_SIZE: IOSpacer = 16;
17
17
 
18
18
  /* Debug Mode */
19
19
  const debugMode = false;
@@ -0,0 +1,41 @@
1
+ import React, { ReactNode } from "react";
2
+ import { View } from "react-native";
3
+ import { IOSpacer } from "../../core";
4
+
5
+ type Stack = {
6
+ space?: IOSpacer;
7
+ children: ReactNode;
8
+ };
9
+
10
+ /**
11
+ Horizontal Stack component
12
+ @param {IOSpacer} space
13
+ */
14
+ export const HStack = ({ space, children }: Stack) => (
15
+ <View
16
+ style={{
17
+ display: "flex",
18
+ flexDirection: "row",
19
+ columnGap: space
20
+ }}
21
+ >
22
+ {children}
23
+ </View>
24
+ );
25
+
26
+ /**
27
+ Vertical Stack component
28
+ @param {IOSpacer} space
29
+ */
30
+
31
+ export const VStack = ({ space, children }: Stack) => (
32
+ <View
33
+ style={{
34
+ display: "flex",
35
+ flexDirection: "column",
36
+ rowGap: space
37
+ }}
38
+ >
39
+ {children}
40
+ </View>
41
+ );
@@ -0,0 +1 @@
1
+ export * from "./Stack";
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { useMemo } from "react";
2
2
  import { GestureResponderEvent, Pressable, StyleSheet } from "react-native";
3
3
  import Animated, {
4
4
  Extrapolate,
@@ -9,7 +9,13 @@ import Animated, {
9
9
  useSharedValue,
10
10
  withSpring
11
11
  } from "react-native-reanimated";
12
- import { IOColors, IOScaleValues, IOSpringValues, hexToRgba } from "../../core";
12
+ import {
13
+ IOColors,
14
+ IOScaleValues,
15
+ IOSpringValues,
16
+ hexToRgba,
17
+ useIOExperimentalDesign
18
+ } from "../../core";
13
19
  import { useSpringPressProgressValue } from "../../utils/hooks/useSpringPressProgressValue";
14
20
  import { WithTestID } from "../../utils/types";
15
21
  import { IOIcons, Icon } from "../icons";
@@ -35,6 +41,11 @@ export type TabItem = WithTestID<{
35
41
  }>;
36
42
 
37
43
  type ColorStates = {
44
+ border: {
45
+ default: string;
46
+ selected: string;
47
+ disabled: string;
48
+ };
38
49
  background: {
39
50
  default: string;
40
51
  selected: string;
@@ -49,18 +60,68 @@ type ColorStates = {
49
60
 
50
61
  const mapColorStates: Record<NonNullable<TabItem["color"]>, ColorStates> = {
51
62
  light: {
63
+ border: {
64
+ default: IOColors["grey-300"],
65
+ selected: IOColors["blueIO-500"],
66
+ disabled: IOColors["grey-300"]
67
+ },
52
68
  background: {
53
- default: "#ffffff00",
54
- selected: IOColors["grey-50"],
55
- pressed: IOColors["grey-50"]
69
+ default: IOColors.white,
70
+ selected: IOColors["blueIO-50"],
71
+ pressed: IOColors.white
56
72
  },
57
73
  foreground: {
58
74
  default: "black",
75
+ selected: "blueIO-500",
76
+ disabled: "grey-700"
77
+ }
78
+ },
79
+ dark: {
80
+ border: {
81
+ default: hexToRgba(IOColors.white, 0),
82
+ selected: IOColors.white,
83
+ disabled: hexToRgba(IOColors.white, 0.5)
84
+ },
85
+ background: {
86
+ default: hexToRgba(IOColors.white, 0),
87
+ selected: IOColors.white,
88
+ pressed: IOColors.white
89
+ },
90
+ foreground: {
91
+ default: "white",
59
92
  selected: "black",
93
+ disabled: "white"
94
+ }
95
+ }
96
+ };
97
+
98
+ const mapLegacyColorStates: Record<
99
+ NonNullable<TabItem["color"]>,
100
+ ColorStates
101
+ > = {
102
+ light: {
103
+ border: {
104
+ default: IOColors["grey-300"],
105
+ selected: IOColors.blue,
106
+ disabled: hexToRgba(IOColors.white)
107
+ },
108
+ background: {
109
+ default: IOColors.white,
110
+ selected: hexToRgba(IOColors.blue, 0.1),
111
+ pressed: IOColors.white
112
+ },
113
+ foreground: {
114
+ default: "black",
115
+ selected: "blue",
60
116
  disabled: "grey-700"
61
117
  }
62
118
  },
63
119
  dark: {
120
+ border: {
121
+ default: hexToRgba(IOColors.white, 0),
122
+ selected: IOColors.white,
123
+ disabled: hexToRgba(IOColors.white, 0.5)
124
+ },
64
125
  background: {
65
126
  default: "#ffffff00",
66
127
  selected: IOColors.white,
@@ -93,12 +154,26 @@ const TabItem = ({
93
154
  onPressOut
94
155
  } = useSpringPressProgressValue(IOSpringValues.selection);
95
156
 
96
- const colors = mapColorStates[color];
157
+ const { isExperimental } = useIOExperimentalDesign();
158
+ const colors = useMemo(
159
+ () =>
160
+ isExperimental ? mapColorStates[color] : mapLegacyColorStates[color],
161
+ [isExperimental, color]
162
+ );
163
+
164
+ const foregroundColor = useMemo(
165
+ () =>
166
+ colors.foreground[
167
+ selected ? "selected" : disabled ? "disabled" : "default"
168
+ ],
169
+ [colors.foreground, selected, disabled]
170
+ );
97
171
 
98
- const foregroundColor =
99
- colors.foreground[
100
- selected ? "selected" : disabled ? "disabled" : "default"
101
- ];
172
+ const borderColor = useMemo(
173
+ () =>
174
+ colors.border[selected ? "selected" : disabled ? "disabled" : "default"],
175
+ [colors.border, selected, disabled]
176
+ );
102
177
 
103
178
  const opaquePressedBackgroundColor = hexToRgba(
104
179
  colors.background.pressed,
@@ -130,6 +205,12 @@ const TabItem = ({
130
205
  [opaquePressedBackgroundColor, colors.background.selected]
131
206
  );
132
207
 
208
+ const selectedBorderColor = interpolateColor(
209
+ progressSelected.value,
210
+ [0, 1],
211
+ [colors.border.default, colors.border.selected]
212
+ );
213
+
133
214
  // Scale down button slightly when pressed
134
215
  const scale = interpolate(
135
216
  progressPressed.value,
@@ -142,6 +223,7 @@ const TabItem = ({
142
223
  backgroundColor: selected
143
224
  ? selectedBackgroundColor
144
225
  : pressedBackgroundColor,
226
+ borderColor: selected ? selectedBorderColor : borderColor,
145
227
  transform: [{ scale }]
146
228
  };
147
229
  }, [progressPressed, progressSelected, selected]);
@@ -186,6 +268,7 @@ const styles = StyleSheet.create({
186
268
  alignItems: "center",
187
269
  paddingHorizontal: 16,
188
270
  paddingVertical: 8,
271
+ borderWidth: 1,
189
272
  borderRadius: 64,
190
273
  borderCurve: "continuous",
191
274
  justifyContent: "center",
@@ -34,20 +34,12 @@ const itemsJustify: Record<TabAlignment, FlexStyle["justifyContent"]> = {
34
34
 
35
35
  const TabNavigation = ({
36
36
  color = "light",
37
- selectedIndex: forceSelectedIndex,
37
+ selectedIndex,
38
38
  tabAlignment = "center",
39
39
  onItemPress,
40
40
  children
41
41
  }: TabNavigation) => {
42
42
  const [itemMinWidth, setItemMinWidth] = React.useState<number>(0);
43
- const [selectedIndex, setSelectedIndex] = React.useState(
44
- forceSelectedIndex ?? 0
45
- );
46
-
47
- const handleItemPress = (index: number) => {
48
- setSelectedIndex(forceSelectedIndex ?? index);
49
- onItemPress?.(index);
50
- };
51
43
 
52
44
  const handleItemOnLayout = (event: LayoutChangeEvent) => {
53
45
  const { width } = event.nativeEvent.layout;
@@ -73,7 +65,7 @@ const TabNavigation = ({
73
65
  {React.cloneElement<TabItem>(child, {
74
66
  onPress: event => {
75
67
  child.props.onPress?.(event);
76
- handleItemPress(index);
68
+ onItemPress?.(index);
77
69
  },
78
70
  selected: selectedIndex === index,
79
71
  color