@pagopa/io-app-design-system 1.33.0 → 1.35.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 (260) 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 +8 -5
  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/ListItemAction.js +1 -1
  48. package/lib/commonjs/components/listitems/ListItemCheckbox.js +7 -4
  49. package/lib/commonjs/components/listitems/ListItemCheckbox.js.map +1 -1
  50. package/lib/commonjs/components/listitems/ListItemNav.js +5 -0
  51. package/lib/commonjs/components/listitems/ListItemNav.js.map +1 -1
  52. package/lib/commonjs/components/listitems/ListItemRadio.js +4 -3
  53. package/lib/commonjs/components/listitems/ListItemRadio.js.map +1 -1
  54. package/lib/commonjs/components/listitems/ListItemRadioWithAmount.js +23 -9
  55. package/lib/commonjs/components/listitems/ListItemRadioWithAmount.js.map +1 -1
  56. package/lib/commonjs/components/listitems/ListItemSwitch.js +5 -1
  57. package/lib/commonjs/components/listitems/ListItemSwitch.js.map +1 -1
  58. package/lib/commonjs/components/listitems/PressableListItemsBase.js +7 -6
  59. package/lib/commonjs/components/listitems/PressableListItemsBase.js.map +1 -1
  60. package/lib/commonjs/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +12 -12
  61. package/lib/commonjs/components/modules/ModuleAttachment.js +6 -3
  62. package/lib/commonjs/components/modules/ModuleAttachment.js.map +1 -1
  63. package/lib/commonjs/components/modules/ModuleCheckout.js +37 -36
  64. package/lib/commonjs/components/modules/ModuleCheckout.js.map +1 -1
  65. package/lib/commonjs/components/modules/ModuleCredential.js.map +1 -1
  66. package/lib/commonjs/components/modules/PressableModuleBase.js +5 -3
  67. package/lib/commonjs/components/modules/PressableModuleBase.js.map +1 -1
  68. package/lib/commonjs/components/radio/RadioButtonLabel.js +10 -9
  69. package/lib/commonjs/components/radio/RadioButtonLabel.js.map +1 -1
  70. package/lib/commonjs/components/radio/RadioGroup.js +7 -2
  71. package/lib/commonjs/components/radio/RadioGroup.js.map +1 -1
  72. package/lib/commonjs/components/spacer/Spacer.js.map +1 -1
  73. package/lib/commonjs/components/stack/Stack.js +47 -0
  74. package/lib/commonjs/components/stack/Stack.js.map +1 -0
  75. package/lib/commonjs/components/stack/index.js +17 -0
  76. package/lib/commonjs/components/stack/index.js.map +1 -0
  77. package/lib/commonjs/components/tabs/TabItem.js +59 -7
  78. package/lib/commonjs/components/tabs/TabItem.js.map +1 -1
  79. package/lib/commonjs/components/tabs/TabNavigation.js +2 -7
  80. package/lib/commonjs/components/tabs/TabNavigation.js.map +1 -1
  81. package/lib/commonjs/core/IOColors.js +7 -7
  82. package/lib/module/components/banner/__test__/__snapshots__/banner.test.tsx.snap +2 -0
  83. package/lib/module/components/buttons/ButtonLink.js +4 -1
  84. package/lib/module/components/buttons/ButtonLink.js.map +1 -1
  85. package/lib/module/components/buttons/ButtonOutline.js +4 -1
  86. package/lib/module/components/buttons/ButtonOutline.js.map +1 -1
  87. package/lib/module/components/buttons/ButtonSolid.js +8 -5
  88. package/lib/module/components/buttons/ButtonSolid.js.map +1 -1
  89. package/lib/module/components/buttons/IconButton.js +4 -1
  90. package/lib/module/components/buttons/IconButton.js.map +1 -1
  91. package/lib/module/components/buttons/IconButtonContained.js +3 -0
  92. package/lib/module/components/buttons/IconButtonContained.js.map +1 -1
  93. package/lib/module/components/buttons/IconButtonSolid.js +3 -0
  94. package/lib/module/components/buttons/IconButtonSolid.js.map +1 -1
  95. package/lib/module/components/buttons/__test__/__snapshots__/button.test.tsx.snap +2 -0
  96. package/lib/module/components/icons/svg/IconCategCulture.js +1 -7
  97. package/lib/module/components/icons/svg/IconCategCulture.js.map +1 -1
  98. package/lib/module/components/icons/svg/IconCategFinance.js +3 -4
  99. package/lib/module/components/icons/svg/IconCategFinance.js.map +1 -1
  100. package/lib/module/components/icons/svg/IconCategHome.js +3 -4
  101. package/lib/module/components/icons/svg/IconCategHome.js.map +1 -1
  102. package/lib/module/components/icons/svg/IconCategJobOffers.js +3 -1
  103. package/lib/module/components/icons/svg/IconCategJobOffers.js.map +1 -1
  104. package/lib/module/components/icons/svg/IconCategLearning.js +3 -1
  105. package/lib/module/components/icons/svg/IconCategLearning.js.map +1 -1
  106. package/lib/module/components/icons/svg/IconCategMobility.js +3 -1
  107. package/lib/module/components/icons/svg/IconCategMobility.js.map +1 -1
  108. package/lib/module/components/icons/svg/IconCategSport.js +1 -1
  109. package/lib/module/components/icons/svg/IconCategSport.js.map +1 -1
  110. package/lib/module/components/icons/svg/IconCategTelco.js +3 -9
  111. package/lib/module/components/icons/svg/IconCategTelco.js.map +1 -1
  112. package/lib/module/components/icons/svg/IconCategTravel.js +1 -6
  113. package/lib/module/components/icons/svg/IconCategTravel.js.map +1 -1
  114. package/lib/module/components/icons/svg/IconCategWellness.js +3 -4
  115. package/lib/module/components/icons/svg/IconCategWellness.js.map +1 -1
  116. package/lib/module/components/icons/svg/originals/IconCategCulture.svg +1 -14
  117. package/lib/module/components/icons/svg/originals/IconCategFinance.svg +1 -10
  118. package/lib/module/components/icons/svg/originals/IconCategHome.svg +1 -10
  119. package/lib/module/components/icons/svg/originals/IconCategJobOffers.svg +1 -6
  120. package/lib/module/components/icons/svg/originals/IconCategLearning.svg +1 -6
  121. package/lib/module/components/icons/svg/originals/IconCategMobility.svg +1 -6
  122. package/lib/module/components/icons/svg/originals/IconCategSport.svg +1 -8
  123. package/lib/module/components/icons/svg/originals/IconCategTelco.svg +1 -13
  124. package/lib/module/components/icons/svg/originals/IconCategTravel.svg +1 -12
  125. package/lib/module/components/icons/svg/originals/IconCategWellness.svg +1 -10
  126. package/lib/module/components/index.js +5 -4
  127. package/lib/module/components/index.js.map +1 -1
  128. package/lib/module/components/listitems/ListItemAction.js +1 -1
  129. package/lib/module/components/listitems/ListItemCheckbox.js +7 -4
  130. package/lib/module/components/listitems/ListItemCheckbox.js.map +1 -1
  131. package/lib/module/components/listitems/ListItemNav.js +5 -0
  132. package/lib/module/components/listitems/ListItemNav.js.map +1 -1
  133. package/lib/module/components/listitems/ListItemRadio.js +4 -3
  134. package/lib/module/components/listitems/ListItemRadio.js.map +1 -1
  135. package/lib/module/components/listitems/ListItemRadioWithAmount.js +23 -9
  136. package/lib/module/components/listitems/ListItemRadioWithAmount.js.map +1 -1
  137. package/lib/module/components/listitems/ListItemSwitch.js +5 -1
  138. package/lib/module/components/listitems/ListItemSwitch.js.map +1 -1
  139. package/lib/module/components/listitems/PressableListItemsBase.js +7 -6
  140. package/lib/module/components/listitems/PressableListItemsBase.js.map +1 -1
  141. package/lib/module/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +12 -12
  142. package/lib/module/components/modules/ModuleAttachment.js +6 -3
  143. package/lib/module/components/modules/ModuleAttachment.js.map +1 -1
  144. package/lib/module/components/modules/ModuleCheckout.js +39 -40
  145. package/lib/module/components/modules/ModuleCheckout.js.map +1 -1
  146. package/lib/module/components/modules/ModuleCredential.js.map +1 -1
  147. package/lib/module/components/modules/PressableModuleBase.js +5 -3
  148. package/lib/module/components/modules/PressableModuleBase.js.map +1 -1
  149. package/lib/module/components/radio/RadioButtonLabel.js +10 -9
  150. package/lib/module/components/radio/RadioButtonLabel.js.map +1 -1
  151. package/lib/module/components/radio/RadioGroup.js +7 -2
  152. package/lib/module/components/radio/RadioGroup.js.map +1 -1
  153. package/lib/module/components/spacer/Spacer.js.map +1 -1
  154. package/lib/module/components/stack/Stack.js +39 -0
  155. package/lib/module/components/stack/Stack.js.map +1 -0
  156. package/lib/module/components/stack/index.js +2 -0
  157. package/lib/module/components/stack/index.js.map +1 -0
  158. package/lib/module/components/tabs/TabItem.js +60 -7
  159. package/lib/module/components/tabs/TabItem.js.map +1 -1
  160. package/lib/module/components/tabs/TabNavigation.js +2 -7
  161. package/lib/module/components/tabs/TabNavigation.js.map +1 -1
  162. package/lib/module/core/IOColors.js +7 -7
  163. package/lib/typescript/components/buttons/ButtonLink.d.ts.map +1 -1
  164. package/lib/typescript/components/buttons/ButtonOutline.d.ts +4 -10
  165. package/lib/typescript/components/buttons/ButtonOutline.d.ts.map +1 -1
  166. package/lib/typescript/components/buttons/ButtonSolid.d.ts +4 -16
  167. package/lib/typescript/components/buttons/ButtonSolid.d.ts.map +1 -1
  168. package/lib/typescript/components/buttons/IconButton.d.ts.map +1 -1
  169. package/lib/typescript/components/buttons/IconButtonContained.d.ts +1 -1
  170. package/lib/typescript/components/buttons/IconButtonContained.d.ts.map +1 -1
  171. package/lib/typescript/components/buttons/IconButtonSolid.d.ts.map +1 -1
  172. package/lib/typescript/components/icons/svg/IconCategCulture.d.ts.map +1 -1
  173. package/lib/typescript/components/icons/svg/IconCategFinance.d.ts.map +1 -1
  174. package/lib/typescript/components/icons/svg/IconCategHome.d.ts.map +1 -1
  175. package/lib/typescript/components/icons/svg/IconCategJobOffers.d.ts.map +1 -1
  176. package/lib/typescript/components/icons/svg/IconCategLearning.d.ts.map +1 -1
  177. package/lib/typescript/components/icons/svg/IconCategMobility.d.ts.map +1 -1
  178. package/lib/typescript/components/icons/svg/IconCategTelco.d.ts +2 -2
  179. package/lib/typescript/components/icons/svg/IconCategTelco.d.ts.map +1 -1
  180. package/lib/typescript/components/icons/svg/IconCategTravel.d.ts.map +1 -1
  181. package/lib/typescript/components/icons/svg/IconCategWellness.d.ts.map +1 -1
  182. package/lib/typescript/components/index.d.ts +5 -4
  183. package/lib/typescript/components/index.d.ts.map +1 -1
  184. package/lib/typescript/components/listitems/ListItemCheckbox.d.ts +2 -2
  185. package/lib/typescript/components/listitems/ListItemCheckbox.d.ts.map +1 -1
  186. package/lib/typescript/components/listitems/ListItemNav.d.ts +4 -5
  187. package/lib/typescript/components/listitems/ListItemNav.d.ts.map +1 -1
  188. package/lib/typescript/components/listitems/ListItemRadio.d.ts +2 -2
  189. package/lib/typescript/components/listitems/ListItemRadio.d.ts.map +1 -1
  190. package/lib/typescript/components/listitems/ListItemRadioWithAmount.d.ts +4 -2
  191. package/lib/typescript/components/listitems/ListItemRadioWithAmount.d.ts.map +1 -1
  192. package/lib/typescript/components/listitems/ListItemSwitch.d.ts.map +1 -1
  193. package/lib/typescript/components/listitems/PressableListItemsBase.d.ts +3 -5
  194. package/lib/typescript/components/listitems/PressableListItemsBase.d.ts.map +1 -1
  195. package/lib/typescript/components/modules/ModuleCheckout.d.ts +19 -11
  196. package/lib/typescript/components/modules/ModuleCheckout.d.ts.map +1 -1
  197. package/lib/typescript/components/modules/ModuleCredential.d.ts +1 -1
  198. package/lib/typescript/components/modules/ModuleCredential.d.ts.map +1 -1
  199. package/lib/typescript/components/modules/PressableModuleBase.d.ts +4 -5
  200. package/lib/typescript/components/modules/PressableModuleBase.d.ts.map +1 -1
  201. package/lib/typescript/components/radio/RadioButtonLabel.d.ts +2 -2
  202. package/lib/typescript/components/radio/RadioButtonLabel.d.ts.map +1 -1
  203. package/lib/typescript/components/radio/RadioGroup.d.ts.map +1 -1
  204. package/lib/typescript/components/stack/Stack.d.ts +18 -0
  205. package/lib/typescript/components/stack/Stack.d.ts.map +1 -0
  206. package/lib/typescript/components/stack/index.d.ts +2 -0
  207. package/lib/typescript/components/stack/index.d.ts.map +1 -0
  208. package/lib/typescript/components/tabs/TabItem.d.ts.map +1 -1
  209. package/lib/typescript/components/tabs/TabNavigation.d.ts +1 -1
  210. package/lib/typescript/components/tabs/TabNavigation.d.ts.map +1 -1
  211. package/package.json +1 -1
  212. package/src/components/banner/__test__/__snapshots__/banner.test.tsx.snap +2 -0
  213. package/src/components/buttons/ButtonLink.tsx +2 -1
  214. package/src/components/buttons/ButtonOutline.tsx +18 -15
  215. package/src/components/buttons/ButtonSolid.tsx +35 -32
  216. package/src/components/buttons/IconButton.tsx +1 -0
  217. package/src/components/buttons/IconButtonContained.tsx +2 -1
  218. package/src/components/buttons/IconButtonSolid.tsx +1 -0
  219. package/src/components/buttons/__test__/__snapshots__/button.test.tsx.snap +2 -0
  220. package/src/components/icons/svg/IconCategCulture.tsx +1 -9
  221. package/src/components/icons/svg/IconCategFinance.tsx +3 -5
  222. package/src/components/icons/svg/IconCategHome.tsx +3 -5
  223. package/src/components/icons/svg/IconCategJobOffers.tsx +3 -1
  224. package/src/components/icons/svg/IconCategLearning.tsx +3 -1
  225. package/src/components/icons/svg/IconCategMobility.tsx +3 -1
  226. package/src/components/icons/svg/IconCategSport.tsx +1 -1
  227. package/src/components/icons/svg/IconCategTelco.tsx +3 -8
  228. package/src/components/icons/svg/IconCategTravel.tsx +1 -7
  229. package/src/components/icons/svg/IconCategWellness.tsx +3 -5
  230. package/src/components/icons/svg/originals/IconCategCulture.svg +1 -14
  231. package/src/components/icons/svg/originals/IconCategFinance.svg +1 -10
  232. package/src/components/icons/svg/originals/IconCategHome.svg +1 -10
  233. package/src/components/icons/svg/originals/IconCategJobOffers.svg +1 -6
  234. package/src/components/icons/svg/originals/IconCategLearning.svg +1 -6
  235. package/src/components/icons/svg/originals/IconCategMobility.svg +1 -6
  236. package/src/components/icons/svg/originals/IconCategSport.svg +1 -8
  237. package/src/components/icons/svg/originals/IconCategTelco.svg +1 -13
  238. package/src/components/icons/svg/originals/IconCategTravel.svg +1 -12
  239. package/src/components/icons/svg/originals/IconCategWellness.svg +1 -10
  240. package/src/components/index.tsx +5 -4
  241. package/src/components/listitems/ListItemAction.tsx +1 -1
  242. package/src/components/listitems/ListItemCheckbox.tsx +12 -6
  243. package/src/components/listitems/ListItemNav.tsx +17 -11
  244. package/src/components/listitems/ListItemRadio.tsx +7 -5
  245. package/src/components/listitems/ListItemRadioWithAmount.tsx +28 -13
  246. package/src/components/listitems/ListItemSwitch.tsx +1 -0
  247. package/src/components/listitems/PressableListItemsBase.tsx +16 -8
  248. package/src/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +12 -12
  249. package/src/components/modules/ModuleAttachment.tsx +4 -3
  250. package/src/components/modules/ModuleCheckout.tsx +65 -50
  251. package/src/components/modules/ModuleCredential.tsx +1 -1
  252. package/src/components/modules/PressableModuleBase.tsx +16 -10
  253. package/src/components/radio/RadioButtonLabel.tsx +16 -11
  254. package/src/components/radio/RadioGroup.tsx +18 -8
  255. package/src/components/spacer/Spacer.tsx +1 -1
  256. package/src/components/stack/Stack.tsx +41 -0
  257. package/src/components/stack/index.tsx +1 -0
  258. package/src/components/tabs/TabItem.tsx +93 -10
  259. package/src/components/tabs/TabNavigation.tsx +2 -10
  260. package/src/core/IOColors.ts +7 -7
@@ -16,11 +16,12 @@ type Props = {
16
16
 
17
17
  const DISABLED_OPACITY = 0.5;
18
18
 
19
- // disabled: the component is no longer touchable
20
- // onPress:
21
- type OwnProps = Props &
19
+ type RadioButtonLabelProps = Props &
22
20
  Pick<React.ComponentProps<typeof AnimatedRadio>, "disabled" | "checked"> &
23
- Pick<React.ComponentProps<typeof Pressable>, "onPress">;
21
+ Pick<
22
+ React.ComponentProps<typeof Pressable>,
23
+ "onPress" | "accessibilityLabel" | "accessibilityHint"
24
+ >;
24
25
 
25
26
  /**
26
27
  * A radio button with the automatic state management that uses a {@link AnimatedRadio}
@@ -33,8 +34,10 @@ export const RadioButtonLabel = ({
33
34
  label,
34
35
  checked,
35
36
  disabled,
36
- onValueChange
37
- }: OwnProps) => {
37
+ onValueChange,
38
+ accessibilityLabel,
39
+ accessibilityHint
40
+ }: RadioButtonLabelProps) => {
38
41
  const theme = useIOTheme();
39
42
 
40
43
  const [toggleValue, setToggleValue] = useState(checked ?? false);
@@ -49,17 +52,19 @@ export const RadioButtonLabel = ({
49
52
 
50
53
  return (
51
54
  <Pressable
52
- accessibilityRole="radio"
53
- accessibilityState={{
54
- checked: checked ?? toggleValue,
55
- disabled: !!disabled
56
- }}
57
55
  onPress={toggleRadioButton}
58
56
  style={{
59
57
  alignSelf: "flex-start",
60
58
  opacity: disabled ? DISABLED_OPACITY : 1
61
59
  }}
62
60
  disabled={disabled}
61
+ accessibilityRole="radio"
62
+ accessibilityState={{
63
+ checked: checked ?? toggleValue,
64
+ disabled: !!disabled
65
+ }}
66
+ accessibilityLabel={accessibilityLabel}
67
+ accessibilityHint={accessibilityHint}
63
68
  testID="AnimatedRadioButton"
64
69
  >
65
70
  <View
@@ -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
@@ -56,11 +56,11 @@ export const IOColors = asIOColors({
56
56
  "turquoise-150": "#AAEEEF",
57
57
  "turquoise-100": "#C2F3F4",
58
58
  "turquoise-50": "#DBF9FA",
59
- "error-850": "#761F1F",
60
- "error-600": "#D75252",
61
- "error-500": "#FE6666",
62
- "error-400": "#FE8585" /* Dark mode */,
63
- "error-100": "#FFE0E0",
59
+ "error-850": "#5D1313",
60
+ "error-600": "#D13333",
61
+ "error-500": "#FF4040",
62
+ "error-400": "#FF6666" /* Dark mode */,
63
+ "error-100": "#FFD9D9",
64
64
  "warning-850": "#614C15",
65
65
  "warning-700": "#A5822A",
66
66
  "warning-500": "#FFCB46",
@@ -319,8 +319,8 @@ export const IOThemeLight: IOTheme = {
319
319
  // Layout
320
320
  "divider-default": "grey-200",
321
321
  // Status
322
- errorIcon: "error-500",
323
- errorText: "error-850",
322
+ errorIcon: "error-600",
323
+ errorText: "error-600",
324
324
  // Pictograms
325
325
  "pictogram-hands": "blueIO-500",
326
326
  "pictogram-tint-main": "turquoise-150",