@pagopa/io-app-design-system 4.2.1 → 4.4.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 (447) hide show
  1. package/lib/commonjs/components/Advice/__test__/__snapshots__/advice.test.tsx.snap +3 -3
  2. package/lib/commonjs/components/alert/Alert.js +44 -65
  3. package/lib/commonjs/components/alert/Alert.js.map +1 -1
  4. package/lib/commonjs/components/alert/AlertEdgeToEdge.js +9 -29
  5. package/lib/commonjs/components/alert/AlertEdgeToEdge.js.map +1 -1
  6. package/lib/commonjs/components/badge/Badge.js +16 -3
  7. package/lib/commonjs/components/badge/Badge.js.map +1 -1
  8. package/lib/commonjs/components/badge/__test__/__snapshots__/badge.test.tsx.snap +9 -5
  9. package/lib/commonjs/components/banner/Banner.js +10 -34
  10. package/lib/commonjs/components/banner/Banner.js.map +1 -1
  11. package/lib/commonjs/components/banner/__test__/__snapshots__/banner.test.tsx.snap +6 -6
  12. package/lib/commonjs/components/buttons/ButtonLink.js +26 -54
  13. package/lib/commonjs/components/buttons/ButtonLink.js.map +1 -1
  14. package/lib/commonjs/components/buttons/ButtonOutline.js +27 -45
  15. package/lib/commonjs/components/buttons/ButtonOutline.js.map +1 -1
  16. package/lib/commonjs/components/buttons/ButtonSolid.js +24 -45
  17. package/lib/commonjs/components/buttons/ButtonSolid.js.map +1 -1
  18. package/lib/commonjs/components/buttons/IconButton.js +15 -32
  19. package/lib/commonjs/components/buttons/IconButton.js.map +1 -1
  20. package/lib/commonjs/components/buttons/IconButtonContained.js +19 -42
  21. package/lib/commonjs/components/buttons/IconButtonContained.js.map +1 -1
  22. package/lib/commonjs/components/buttons/IconButtonSolid.js +16 -31
  23. package/lib/commonjs/components/buttons/IconButtonSolid.js.map +1 -1
  24. package/lib/commonjs/components/buttons/__test__/__snapshots__/button.test.tsx.snap +61 -19
  25. package/lib/commonjs/components/checkbox/AnimatedCheckbox.js +23 -18
  26. package/lib/commonjs/components/checkbox/AnimatedCheckbox.js.map +1 -1
  27. package/lib/commonjs/components/checkbox/CheckboxLabel.js +13 -8
  28. package/lib/commonjs/components/checkbox/CheckboxLabel.js.map +1 -1
  29. package/lib/commonjs/components/common/AnimatedTick.js +7 -3
  30. package/lib/commonjs/components/common/AnimatedTick.js.map +1 -1
  31. package/lib/commonjs/components/common/LogoPaymentWithFallback.js +9 -3
  32. package/lib/commonjs/components/common/LogoPaymentWithFallback.js.map +1 -1
  33. package/lib/commonjs/components/featureInfo/FeatureInfo.js +9 -6
  34. package/lib/commonjs/components/featureInfo/FeatureInfo.js.map +1 -1
  35. package/lib/commonjs/components/icons/Icon.js +14 -7
  36. package/lib/commonjs/components/icons/Icon.js.map +1 -1
  37. package/lib/commonjs/components/layout/HeaderFirstLevel.js +7 -10
  38. package/lib/commonjs/components/layout/HeaderFirstLevel.js.map +1 -1
  39. package/lib/commonjs/components/layout/HeaderSecondLevel.js +8 -9
  40. package/lib/commonjs/components/layout/HeaderSecondLevel.js.map +1 -1
  41. package/lib/commonjs/components/layout/index.js +0 -11
  42. package/lib/commonjs/components/layout/index.js.map +1 -1
  43. package/lib/commonjs/components/listitems/ListItemAction.js +24 -46
  44. package/lib/commonjs/components/listitems/ListItemAction.js.map +1 -1
  45. package/lib/commonjs/components/listitems/ListItemAmount.js +13 -11
  46. package/lib/commonjs/components/listitems/ListItemAmount.js.map +1 -1
  47. package/lib/commonjs/components/listitems/ListItemCheckbox.js +25 -48
  48. package/lib/commonjs/components/listitems/ListItemCheckbox.js.map +1 -1
  49. package/lib/commonjs/components/listitems/ListItemHeader.js +11 -4
  50. package/lib/commonjs/components/listitems/ListItemHeader.js.map +1 -1
  51. package/lib/commonjs/components/listitems/ListItemInfo.js +14 -17
  52. package/lib/commonjs/components/listitems/ListItemInfo.js.map +1 -1
  53. package/lib/commonjs/components/listitems/ListItemInfoCopy.js +29 -55
  54. package/lib/commonjs/components/listitems/ListItemInfoCopy.js.map +1 -1
  55. package/lib/commonjs/components/listitems/ListItemNav.js +36 -64
  56. package/lib/commonjs/components/listitems/ListItemNav.js.map +1 -1
  57. package/lib/commonjs/components/listitems/ListItemNavAlert.js +32 -58
  58. package/lib/commonjs/components/listitems/ListItemNavAlert.js.map +1 -1
  59. package/lib/commonjs/components/listitems/ListItemRadio.js +43 -58
  60. package/lib/commonjs/components/listitems/ListItemRadio.js.map +1 -1
  61. package/lib/commonjs/components/listitems/ListItemRadioWithAmount.js +7 -2
  62. package/lib/commonjs/components/listitems/ListItemRadioWithAmount.js.map +1 -1
  63. package/lib/commonjs/components/listitems/ListItemSwitch.js +12 -14
  64. package/lib/commonjs/components/listitems/ListItemSwitch.js.map +1 -1
  65. package/lib/commonjs/components/listitems/ListItemTransaction.js +4 -2
  66. package/lib/commonjs/components/listitems/ListItemTransaction.js.map +1 -1
  67. package/lib/commonjs/components/listitems/{PressableListItemsBase.js → PressableListItemBase.js} +7 -7
  68. package/lib/commonjs/components/listitems/PressableListItemBase.js.map +1 -0
  69. package/lib/commonjs/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +442 -430
  70. package/lib/commonjs/components/listitems/__test__/listitem.test.js +3 -3
  71. package/lib/commonjs/components/listitems/__test__/listitem.test.js.map +1 -1
  72. package/lib/commonjs/components/listitems/index.js +11 -11
  73. package/lib/commonjs/components/listitems/index.js.map +1 -1
  74. package/lib/commonjs/components/modules/ModuleCredential.js +7 -2
  75. package/lib/commonjs/components/modules/ModuleCredential.js.map +1 -1
  76. package/lib/commonjs/components/modules/ModuleNavigation.js +5 -1
  77. package/lib/commonjs/components/modules/ModuleNavigation.js.map +1 -1
  78. package/lib/commonjs/components/modules/PressableModuleBase.js +17 -11
  79. package/lib/commonjs/components/modules/PressableModuleBase.js.map +1 -1
  80. package/lib/commonjs/components/modules/index.js +8 -8
  81. package/lib/commonjs/components/modules/index.js.map +1 -1
  82. package/lib/commonjs/components/numberpad/NumberButton.js +12 -28
  83. package/lib/commonjs/components/numberpad/NumberButton.js.map +1 -1
  84. package/lib/commonjs/components/numberpad/__test__/__snapshots__/NumberPad.test.tsx.snap +40 -20
  85. package/lib/commonjs/components/pictograms/Pictogram.js +17 -4
  86. package/lib/commonjs/components/pictograms/Pictogram.js.map +1 -1
  87. package/lib/commonjs/components/radio/AnimatedRadio.js +16 -15
  88. package/lib/commonjs/components/radio/AnimatedRadio.js.map +1 -1
  89. package/lib/commonjs/components/radio/RadioButtonLabel.js +9 -5
  90. package/lib/commonjs/components/radio/RadioButtonLabel.js.map +1 -1
  91. package/lib/commonjs/components/searchInput/SearchInput.js +4 -3
  92. package/lib/commonjs/components/searchInput/SearchInput.js.map +1 -1
  93. package/lib/commonjs/components/spacer/Spacer.js +13 -6
  94. package/lib/commonjs/components/spacer/Spacer.js.map +1 -1
  95. package/lib/commonjs/components/stack/Stack.js +19 -9
  96. package/lib/commonjs/components/stack/Stack.js.map +1 -1
  97. package/lib/commonjs/components/tabs/TabItem.js +15 -21
  98. package/lib/commonjs/components/tabs/TabItem.js.map +1 -1
  99. package/lib/commonjs/components/tag/Tag.js +21 -8
  100. package/lib/commonjs/components/tag/Tag.js.map +1 -1
  101. package/lib/commonjs/components/textInput/TextInput.js.map +1 -1
  102. package/lib/commonjs/components/textInput/TextInputBase.js +23 -10
  103. package/lib/commonjs/components/textInput/TextInputBase.js.map +1 -1
  104. package/lib/commonjs/components/typography/IOText.js +3 -6
  105. package/lib/commonjs/components/typography/IOText.js.map +1 -1
  106. package/lib/commonjs/components/typography/__test__/__snapshots__/ComposedBodyFromArray.test.tsx.snap +84 -84
  107. package/lib/commonjs/components/typography/__test__/__snapshots__/typography.test.tsx.snap +50 -50
  108. package/lib/commonjs/core/IOAnimations.js +6 -12
  109. package/lib/commonjs/core/IOAnimations.js.map +1 -1
  110. package/lib/commonjs/hooks/index.js +28 -0
  111. package/lib/commonjs/hooks/index.js.map +1 -0
  112. package/lib/commonjs/hooks/useListItemAnimation.js +40 -0
  113. package/lib/commonjs/hooks/useListItemAnimation.js.map +1 -0
  114. package/lib/commonjs/hooks/useScaleAnimation.js +36 -0
  115. package/lib/commonjs/hooks/useScaleAnimation.js.map +1 -0
  116. package/lib/commonjs/index.js +11 -0
  117. package/lib/commonjs/index.js.map +1 -1
  118. package/lib/commonjs/utils/accessibility.js +29 -1
  119. package/lib/commonjs/utils/accessibility.js.map +1 -1
  120. package/lib/commonjs/utils/fonts.js +3 -2
  121. package/lib/commonjs/utils/fonts.js.map +1 -1
  122. package/lib/commonjs/utils/hooks/index.js +28 -0
  123. package/lib/commonjs/utils/hooks/index.js.map +1 -0
  124. package/lib/commonjs/utils/hooks/useSpringPressProgressValue.js +5 -7
  125. package/lib/commonjs/utils/hooks/useSpringPressProgressValue.js.map +1 -1
  126. package/lib/module/components/Advice/__test__/__snapshots__/advice.test.tsx.snap +3 -3
  127. package/lib/module/components/alert/Alert.js +45 -67
  128. package/lib/module/components/alert/Alert.js.map +1 -1
  129. package/lib/module/components/alert/AlertEdgeToEdge.js +10 -31
  130. package/lib/module/components/alert/AlertEdgeToEdge.js.map +1 -1
  131. package/lib/module/components/badge/Badge.js +16 -3
  132. package/lib/module/components/badge/Badge.js.map +1 -1
  133. package/lib/module/components/badge/__test__/__snapshots__/badge.test.tsx.snap +9 -5
  134. package/lib/module/components/banner/Banner.js +10 -33
  135. package/lib/module/components/banner/Banner.js.map +1 -1
  136. package/lib/module/components/banner/__test__/__snapshots__/banner.test.tsx.snap +6 -6
  137. package/lib/module/components/buttons/ButtonLink.js +29 -57
  138. package/lib/module/components/buttons/ButtonLink.js.map +1 -1
  139. package/lib/module/components/buttons/ButtonOutline.js +30 -48
  140. package/lib/module/components/buttons/ButtonOutline.js.map +1 -1
  141. package/lib/module/components/buttons/ButtonSolid.js +27 -48
  142. package/lib/module/components/buttons/ButtonSolid.js.map +1 -1
  143. package/lib/module/components/buttons/IconButton.js +18 -35
  144. package/lib/module/components/buttons/IconButton.js.map +1 -1
  145. package/lib/module/components/buttons/IconButtonContained.js +21 -45
  146. package/lib/module/components/buttons/IconButtonContained.js.map +1 -1
  147. package/lib/module/components/buttons/IconButtonSolid.js +18 -34
  148. package/lib/module/components/buttons/IconButtonSolid.js.map +1 -1
  149. package/lib/module/components/buttons/__test__/__snapshots__/button.test.tsx.snap +61 -19
  150. package/lib/module/components/checkbox/AnimatedCheckbox.js +23 -18
  151. package/lib/module/components/checkbox/AnimatedCheckbox.js.map +1 -1
  152. package/lib/module/components/checkbox/CheckboxLabel.js +14 -9
  153. package/lib/module/components/checkbox/CheckboxLabel.js.map +1 -1
  154. package/lib/module/components/common/AnimatedTick.js +7 -3
  155. package/lib/module/components/common/AnimatedTick.js.map +1 -1
  156. package/lib/module/components/common/LogoPaymentWithFallback.js +9 -3
  157. package/lib/module/components/common/LogoPaymentWithFallback.js.map +1 -1
  158. package/lib/module/components/featureInfo/FeatureInfo.js +11 -8
  159. package/lib/module/components/featureInfo/FeatureInfo.js.map +1 -1
  160. package/lib/module/components/icons/Icon.js +15 -6
  161. package/lib/module/components/icons/Icon.js.map +1 -1
  162. package/lib/module/components/layout/HeaderFirstLevel.js +8 -11
  163. package/lib/module/components/layout/HeaderFirstLevel.js.map +1 -1
  164. package/lib/module/components/layout/HeaderSecondLevel.js +9 -10
  165. package/lib/module/components/layout/HeaderSecondLevel.js.map +1 -1
  166. package/lib/module/components/layout/index.js +0 -1
  167. package/lib/module/components/layout/index.js.map +1 -1
  168. package/lib/module/components/listitems/ListItemAction.js +25 -48
  169. package/lib/module/components/listitems/ListItemAction.js.map +1 -1
  170. package/lib/module/components/listitems/ListItemAmount.js +13 -11
  171. package/lib/module/components/listitems/ListItemAmount.js.map +1 -1
  172. package/lib/module/components/listitems/ListItemCheckbox.js +28 -51
  173. package/lib/module/components/listitems/ListItemCheckbox.js.map +1 -1
  174. package/lib/module/components/listitems/ListItemHeader.js +11 -4
  175. package/lib/module/components/listitems/ListItemHeader.js.map +1 -1
  176. package/lib/module/components/listitems/ListItemInfo.js +14 -17
  177. package/lib/module/components/listitems/ListItemInfo.js.map +1 -1
  178. package/lib/module/components/listitems/ListItemInfoCopy.js +30 -57
  179. package/lib/module/components/listitems/ListItemInfoCopy.js.map +1 -1
  180. package/lib/module/components/listitems/ListItemNav.js +38 -65
  181. package/lib/module/components/listitems/ListItemNav.js.map +1 -1
  182. package/lib/module/components/listitems/ListItemNavAlert.js +33 -58
  183. package/lib/module/components/listitems/ListItemNavAlert.js.map +1 -1
  184. package/lib/module/components/listitems/ListItemRadio.js +46 -61
  185. package/lib/module/components/listitems/ListItemRadio.js.map +1 -1
  186. package/lib/module/components/listitems/ListItemRadioWithAmount.js +7 -2
  187. package/lib/module/components/listitems/ListItemRadioWithAmount.js.map +1 -1
  188. package/lib/module/components/listitems/ListItemSwitch.js +12 -14
  189. package/lib/module/components/listitems/ListItemSwitch.js.map +1 -1
  190. package/lib/module/components/listitems/ListItemTransaction.js +3 -1
  191. package/lib/module/components/listitems/ListItemTransaction.js.map +1 -1
  192. package/lib/module/components/listitems/{PressableListItemsBase.js → PressableListItemBase.js} +7 -7
  193. package/lib/module/components/listitems/PressableListItemBase.js.map +1 -0
  194. package/lib/module/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +442 -430
  195. package/lib/module/components/listitems/__test__/listitem.test.js +1 -1
  196. package/lib/module/components/listitems/__test__/listitem.test.js.map +1 -1
  197. package/lib/module/components/listitems/index.js +1 -1
  198. package/lib/module/components/listitems/index.js.map +1 -1
  199. package/lib/module/components/modules/ModuleCredential.js +7 -2
  200. package/lib/module/components/modules/ModuleCredential.js.map +1 -1
  201. package/lib/module/components/modules/ModuleNavigation.js +5 -1
  202. package/lib/module/components/modules/ModuleNavigation.js.map +1 -1
  203. package/lib/module/components/modules/PressableModuleBase.js +17 -10
  204. package/lib/module/components/modules/PressableModuleBase.js.map +1 -1
  205. package/lib/module/components/modules/index.js +1 -1
  206. package/lib/module/components/modules/index.js.map +1 -1
  207. package/lib/module/components/numberpad/NumberButton.js +14 -30
  208. package/lib/module/components/numberpad/NumberButton.js.map +1 -1
  209. package/lib/module/components/numberpad/__test__/__snapshots__/NumberPad.test.tsx.snap +40 -20
  210. package/lib/module/components/pictograms/Pictogram.js +17 -4
  211. package/lib/module/components/pictograms/Pictogram.js.map +1 -1
  212. package/lib/module/components/radio/AnimatedRadio.js +16 -15
  213. package/lib/module/components/radio/AnimatedRadio.js.map +1 -1
  214. package/lib/module/components/radio/RadioButtonLabel.js +10 -6
  215. package/lib/module/components/radio/RadioButtonLabel.js.map +1 -1
  216. package/lib/module/components/searchInput/SearchInput.js +5 -4
  217. package/lib/module/components/searchInput/SearchInput.js.map +1 -1
  218. package/lib/module/components/spacer/Spacer.js +11 -5
  219. package/lib/module/components/spacer/Spacer.js.map +1 -1
  220. package/lib/module/components/stack/Stack.js +19 -9
  221. package/lib/module/components/stack/Stack.js.map +1 -1
  222. package/lib/module/components/tabs/TabItem.js +18 -24
  223. package/lib/module/components/tabs/TabItem.js.map +1 -1
  224. package/lib/module/components/tag/Tag.js +21 -8
  225. package/lib/module/components/tag/Tag.js.map +1 -1
  226. package/lib/module/components/textInput/TextInput.js.map +1 -1
  227. package/lib/module/components/textInput/TextInputBase.js +23 -10
  228. package/lib/module/components/textInput/TextInputBase.js.map +1 -1
  229. package/lib/module/components/typography/IOText.js +5 -8
  230. package/lib/module/components/typography/IOText.js.map +1 -1
  231. package/lib/module/components/typography/__test__/__snapshots__/ComposedBodyFromArray.test.tsx.snap +84 -84
  232. package/lib/module/components/typography/__test__/__snapshots__/typography.test.tsx.snap +50 -50
  233. package/lib/module/core/IOAnimations.js +4 -10
  234. package/lib/module/core/IOAnimations.js.map +1 -1
  235. package/lib/module/hooks/index.js +3 -0
  236. package/lib/module/hooks/index.js.map +1 -0
  237. package/lib/module/hooks/useListItemAnimation.js +33 -0
  238. package/lib/module/hooks/useListItemAnimation.js.map +1 -0
  239. package/lib/module/hooks/useScaleAnimation.js +29 -0
  240. package/lib/module/hooks/useScaleAnimation.js.map +1 -0
  241. package/lib/module/index.js +1 -0
  242. package/lib/module/index.js.map +1 -1
  243. package/lib/module/utils/accessibility.js +28 -1
  244. package/lib/module/utils/accessibility.js.map +1 -1
  245. package/lib/module/utils/fonts.js +1 -0
  246. package/lib/module/utils/fonts.js.map +1 -1
  247. package/lib/module/utils/hooks/index.js +3 -0
  248. package/lib/module/utils/hooks/index.js.map +1 -0
  249. package/lib/module/utils/hooks/useSpringPressProgressValue.js +5 -5
  250. package/lib/module/utils/hooks/useSpringPressProgressValue.js.map +1 -1
  251. package/lib/typescript/components/alert/Alert.d.ts.map +1 -1
  252. package/lib/typescript/components/alert/AlertEdgeToEdge.d.ts.map +1 -1
  253. package/lib/typescript/components/badge/Badge.d.ts +2 -1
  254. package/lib/typescript/components/badge/Badge.d.ts.map +1 -1
  255. package/lib/typescript/components/banner/Banner.d.ts.map +1 -1
  256. package/lib/typescript/components/buttons/ButtonLink.d.ts +1 -1
  257. package/lib/typescript/components/buttons/ButtonLink.d.ts.map +1 -1
  258. package/lib/typescript/components/buttons/ButtonOutline.d.ts +1 -1
  259. package/lib/typescript/components/buttons/ButtonOutline.d.ts.map +1 -1
  260. package/lib/typescript/components/buttons/ButtonSolid.d.ts +1 -1
  261. package/lib/typescript/components/buttons/ButtonSolid.d.ts.map +1 -1
  262. package/lib/typescript/components/buttons/IconButton.d.ts.map +1 -1
  263. package/lib/typescript/components/buttons/IconButtonContained.d.ts.map +1 -1
  264. package/lib/typescript/components/buttons/IconButtonSolid.d.ts.map +1 -1
  265. package/lib/typescript/components/checkbox/AnimatedCheckbox.d.ts +2 -1
  266. package/lib/typescript/components/checkbox/AnimatedCheckbox.d.ts.map +1 -1
  267. package/lib/typescript/components/checkbox/CheckboxLabel.d.ts +2 -1
  268. package/lib/typescript/components/checkbox/CheckboxLabel.d.ts.map +1 -1
  269. package/lib/typescript/components/common/AnimatedTick.d.ts +4 -3
  270. package/lib/typescript/components/common/AnimatedTick.d.ts.map +1 -1
  271. package/lib/typescript/components/common/LogoPaymentWithFallback.d.ts.map +1 -1
  272. package/lib/typescript/components/featureInfo/FeatureInfo.d.ts.map +1 -1
  273. package/lib/typescript/components/icons/Icon.d.ts +5 -3
  274. package/lib/typescript/components/icons/Icon.d.ts.map +1 -1
  275. package/lib/typescript/components/layout/HeaderFirstLevel.d.ts.map +1 -1
  276. package/lib/typescript/components/layout/HeaderSecondLevel.d.ts.map +1 -1
  277. package/lib/typescript/components/layout/index.d.ts +0 -1
  278. package/lib/typescript/components/layout/index.d.ts.map +1 -1
  279. package/lib/typescript/components/listitems/ListItemAction.d.ts.map +1 -1
  280. package/lib/typescript/components/listitems/ListItemAmount.d.ts.map +1 -1
  281. package/lib/typescript/components/listitems/ListItemCheckbox.d.ts.map +1 -1
  282. package/lib/typescript/components/listitems/ListItemHeader.d.ts.map +1 -1
  283. package/lib/typescript/components/listitems/ListItemInfo.d.ts.map +1 -1
  284. package/lib/typescript/components/listitems/ListItemInfoCopy.d.ts.map +1 -1
  285. package/lib/typescript/components/listitems/ListItemNav.d.ts.map +1 -1
  286. package/lib/typescript/components/listitems/ListItemNavAlert.d.ts.map +1 -1
  287. package/lib/typescript/components/listitems/ListItemRadio.d.ts.map +1 -1
  288. package/lib/typescript/components/listitems/ListItemRadioWithAmount.d.ts.map +1 -1
  289. package/lib/typescript/components/listitems/ListItemSwitch.d.ts +2 -2
  290. package/lib/typescript/components/listitems/ListItemSwitch.d.ts.map +1 -1
  291. package/lib/typescript/components/listitems/ListItemTransaction.d.ts +1 -1
  292. package/lib/typescript/components/listitems/ListItemTransaction.d.ts.map +1 -1
  293. package/lib/typescript/components/listitems/{PressableListItemsBase.d.ts → PressableListItemBase.d.ts} +3 -2
  294. package/lib/typescript/components/listitems/PressableListItemBase.d.ts.map +1 -0
  295. package/lib/typescript/components/listitems/index.d.ts +1 -1
  296. package/lib/typescript/components/listitems/index.d.ts.map +1 -1
  297. package/lib/typescript/components/modules/ModuleCredential.d.ts.map +1 -1
  298. package/lib/typescript/components/modules/ModuleNavigation.d.ts.map +1 -1
  299. package/lib/typescript/components/modules/PressableModuleBase.d.ts.map +1 -1
  300. package/lib/typescript/components/modules/index.d.ts +1 -1
  301. package/lib/typescript/components/modules/index.d.ts.map +1 -1
  302. package/lib/typescript/components/numberpad/NumberButton.d.ts.map +1 -1
  303. package/lib/typescript/components/pictograms/Pictogram.d.ts +5 -3
  304. package/lib/typescript/components/pictograms/Pictogram.d.ts.map +1 -1
  305. package/lib/typescript/components/pictograms/types.d.ts +1 -2
  306. package/lib/typescript/components/pictograms/types.d.ts.map +1 -1
  307. package/lib/typescript/components/radio/AnimatedRadio.d.ts +2 -1
  308. package/lib/typescript/components/radio/AnimatedRadio.d.ts.map +1 -1
  309. package/lib/typescript/components/radio/RadioButtonLabel.d.ts +2 -1
  310. package/lib/typescript/components/radio/RadioButtonLabel.d.ts.map +1 -1
  311. package/lib/typescript/components/searchInput/SearchInput.d.ts.map +1 -1
  312. package/lib/typescript/components/spacer/Spacer.d.ts +1 -0
  313. package/lib/typescript/components/spacer/Spacer.d.ts.map +1 -1
  314. package/lib/typescript/components/stack/Stack.d.ts +2 -1
  315. package/lib/typescript/components/stack/Stack.d.ts.map +1 -1
  316. package/lib/typescript/components/tabs/TabItem.d.ts.map +1 -1
  317. package/lib/typescript/components/tag/Tag.d.ts +4 -2
  318. package/lib/typescript/components/tag/Tag.d.ts.map +1 -1
  319. package/lib/typescript/components/textInput/TextInput.d.ts +2 -1
  320. package/lib/typescript/components/textInput/TextInput.d.ts.map +1 -1
  321. package/lib/typescript/components/textInput/TextInputBase.d.ts.map +1 -1
  322. package/lib/typescript/components/typography/BodyMonospace.d.ts +1 -1
  323. package/lib/typescript/components/typography/ButtonText.d.ts +1 -1
  324. package/lib/typescript/components/typography/Caption.d.ts +1 -1
  325. package/lib/typescript/components/typography/H1.d.ts +1 -1
  326. package/lib/typescript/components/typography/H2.d.ts +1 -1
  327. package/lib/typescript/components/typography/H3.d.ts +1 -1
  328. package/lib/typescript/components/typography/H4.d.ts +1 -1
  329. package/lib/typescript/components/typography/H5.d.ts +1 -1
  330. package/lib/typescript/components/typography/H6.d.ts +1 -1
  331. package/lib/typescript/components/typography/Hero.d.ts +1 -1
  332. package/lib/typescript/components/typography/IOText.d.ts.map +1 -1
  333. package/lib/typescript/components/typography/markdown/MdH1.d.ts +1 -1
  334. package/lib/typescript/components/typography/markdown/MdH2.d.ts +1 -1
  335. package/lib/typescript/components/typography/markdown/MdH3.d.ts +1 -1
  336. package/lib/typescript/core/IOAnimations.d.ts +6 -10
  337. package/lib/typescript/core/IOAnimations.d.ts.map +1 -1
  338. package/lib/typescript/core/IOStyles.d.ts +7 -7
  339. package/lib/typescript/hooks/index.d.ts +3 -0
  340. package/lib/typescript/hooks/index.d.ts.map +1 -0
  341. package/lib/typescript/hooks/useListItemAnimation.d.ts +10 -0
  342. package/lib/typescript/hooks/useListItemAnimation.d.ts.map +1 -0
  343. package/lib/typescript/hooks/useScaleAnimation.d.ts +10 -0
  344. package/lib/typescript/hooks/useScaleAnimation.d.ts.map +1 -0
  345. package/lib/typescript/index.d.ts +1 -0
  346. package/lib/typescript/index.d.ts.map +1 -1
  347. package/lib/typescript/utils/accessibility.d.ts +10 -0
  348. package/lib/typescript/utils/accessibility.d.ts.map +1 -1
  349. package/lib/typescript/utils/fonts.d.ts +2 -1
  350. package/lib/typescript/utils/fonts.d.ts.map +1 -1
  351. package/lib/typescript/utils/hooks/index.d.ts +3 -0
  352. package/lib/typescript/utils/hooks/index.d.ts.map +1 -0
  353. package/lib/typescript/utils/hooks/useSpringPressProgressValue.d.ts +7 -8
  354. package/lib/typescript/utils/hooks/useSpringPressProgressValue.d.ts.map +1 -1
  355. package/package.json +1 -1
  356. package/src/components/Advice/__test__/__snapshots__/advice.test.tsx.snap +3 -3
  357. package/src/components/alert/Alert.tsx +49 -106
  358. package/src/components/alert/AlertEdgeToEdge.tsx +6 -46
  359. package/src/components/badge/Badge.tsx +29 -4
  360. package/src/components/badge/__test__/__snapshots__/badge.test.tsx.snap +9 -5
  361. package/src/components/banner/Banner.tsx +6 -54
  362. package/src/components/banner/__test__/__snapshots__/banner.test.tsx.snap +6 -6
  363. package/src/components/buttons/ButtonLink.tsx +36 -89
  364. package/src/components/buttons/ButtonOutline.tsx +40 -75
  365. package/src/components/buttons/ButtonSolid.tsx +21 -67
  366. package/src/components/buttons/IconButton.tsx +12 -47
  367. package/src/components/buttons/IconButtonContained.tsx +21 -57
  368. package/src/components/buttons/IconButtonSolid.tsx +16 -46
  369. package/src/components/buttons/__test__/__snapshots__/button.test.tsx.snap +61 -19
  370. package/src/components/checkbox/AnimatedCheckbox.tsx +36 -18
  371. package/src/components/checkbox/CheckboxLabel.tsx +22 -10
  372. package/src/components/common/AnimatedTick.tsx +9 -3
  373. package/src/components/common/LogoPaymentWithFallback.tsx +27 -5
  374. package/src/components/featureInfo/FeatureInfo.tsx +13 -9
  375. package/src/components/icons/Icon.tsx +23 -7
  376. package/src/components/layout/HeaderFirstLevel.tsx +11 -21
  377. package/src/components/layout/HeaderSecondLevel.tsx +5 -14
  378. package/src/components/layout/index.tsx +0 -1
  379. package/src/components/listitems/ListItemAction.tsx +28 -73
  380. package/src/components/listitems/ListItemAmount.tsx +16 -11
  381. package/src/components/listitems/ListItemCheckbox.tsx +39 -83
  382. package/src/components/listitems/ListItemHeader.tsx +14 -4
  383. package/src/components/listitems/ListItemInfo.tsx +27 -20
  384. package/src/components/listitems/ListItemInfoCopy.tsx +37 -86
  385. package/src/components/listitems/ListItemNav.tsx +55 -112
  386. package/src/components/listitems/ListItemNavAlert.tsx +42 -102
  387. package/src/components/listitems/ListItemRadio.tsx +60 -107
  388. package/src/components/listitems/ListItemRadioWithAmount.tsx +9 -3
  389. package/src/components/listitems/ListItemSwitch.tsx +21 -27
  390. package/src/components/listitems/ListItemTransaction.tsx +4 -1
  391. package/src/components/listitems/{PressableListItemsBase.tsx → PressableListItemBase.tsx} +7 -6
  392. package/src/components/listitems/__test__/__snapshots__/listitem.test.tsx.snap +442 -430
  393. package/src/components/listitems/__test__/listitem.test.tsx +1 -1
  394. package/src/components/listitems/index.tsx +1 -1
  395. package/src/components/modules/ModuleCredential.tsx +5 -2
  396. package/src/components/modules/ModuleNavigation.tsx +3 -1
  397. package/src/components/modules/PressableModuleBase.tsx +15 -8
  398. package/src/components/modules/index.tsx +1 -1
  399. package/src/components/numberpad/NumberButton.tsx +12 -43
  400. package/src/components/numberpad/__test__/__snapshots__/NumberPad.test.tsx.snap +40 -20
  401. package/src/components/pictograms/Pictogram.tsx +24 -5
  402. package/src/components/pictograms/types.ts +1 -3
  403. package/src/components/radio/AnimatedRadio.tsx +31 -15
  404. package/src/components/radio/RadioButtonLabel.tsx +16 -8
  405. package/src/components/searchInput/SearchInput.tsx +10 -5
  406. package/src/components/spacer/Spacer.tsx +21 -6
  407. package/src/components/stack/Stack.tsx +25 -14
  408. package/src/components/tabs/TabItem.tsx +15 -29
  409. package/src/components/tag/Tag.tsx +26 -8
  410. package/src/components/textInput/TextInput.tsx +2 -1
  411. package/src/components/textInput/TextInputBase.tsx +44 -11
  412. package/src/components/typography/IOText.tsx +5 -6
  413. package/src/components/typography/__test__/__snapshots__/ComposedBodyFromArray.test.tsx.snap +84 -84
  414. package/src/components/typography/__test__/__snapshots__/typography.test.tsx.snap +50 -50
  415. package/src/core/IOAnimations.ts +8 -10
  416. package/src/hooks/index.tsx +2 -0
  417. package/src/hooks/useListItemAnimation.tsx +59 -0
  418. package/src/hooks/useScaleAnimation.tsx +41 -0
  419. package/src/index.tsx +1 -0
  420. package/src/utils/accessibility.ts +32 -1
  421. package/src/utils/fonts.ts +1 -0
  422. package/src/utils/hooks/index.tsx +2 -0
  423. package/src/utils/hooks/useSpringPressProgressValue.ts +14 -8
  424. package/lib/commonjs/components/layout/FooterWithButtons.js +0 -84
  425. package/lib/commonjs/components/layout/FooterWithButtons.js.map +0 -1
  426. package/lib/commonjs/components/listitems/PressableListItemsBase.js.map +0 -1
  427. package/lib/commonjs/components/listitems/hooks/useListItemSpringAnimation.js +0 -56
  428. package/lib/commonjs/components/listitems/hooks/useListItemSpringAnimation.js.map +0 -1
  429. package/lib/commonjs/components/modules/hooks/useModuleSpringAnimation.js +0 -41
  430. package/lib/commonjs/components/modules/hooks/useModuleSpringAnimation.js.map +0 -1
  431. package/lib/module/components/layout/FooterWithButtons.js +0 -75
  432. package/lib/module/components/layout/FooterWithButtons.js.map +0 -1
  433. package/lib/module/components/listitems/PressableListItemsBase.js.map +0 -1
  434. package/lib/module/components/listitems/hooks/useListItemSpringAnimation.js +0 -47
  435. package/lib/module/components/listitems/hooks/useListItemSpringAnimation.js.map +0 -1
  436. package/lib/module/components/modules/hooks/useModuleSpringAnimation.js +0 -34
  437. package/lib/module/components/modules/hooks/useModuleSpringAnimation.js.map +0 -1
  438. package/lib/typescript/components/layout/FooterWithButtons.d.ts +0 -16
  439. package/lib/typescript/components/layout/FooterWithButtons.d.ts.map +0 -1
  440. package/lib/typescript/components/listitems/PressableListItemsBase.d.ts.map +0 -1
  441. package/lib/typescript/components/listitems/hooks/useListItemSpringAnimation.d.ts +0 -13
  442. package/lib/typescript/components/listitems/hooks/useListItemSpringAnimation.d.ts.map +0 -1
  443. package/lib/typescript/components/modules/hooks/useModuleSpringAnimation.d.ts +0 -10
  444. package/lib/typescript/components/modules/hooks/useModuleSpringAnimation.d.ts.map +0 -1
  445. package/src/components/layout/FooterWithButtons.tsx +0 -90
  446. package/src/components/listitems/hooks/useListItemSpringAnimation.ts +0 -72
  447. package/src/components/modules/hooks/useModuleSpringAnimation.ts +0 -49
@@ -1,39 +1,23 @@
1
- import React, { ComponentProps, ReactNode, useCallback } from "react";
2
- import {
3
- GestureResponderEvent,
4
- Image,
5
- Pressable,
6
- StyleSheet,
7
- View
8
- } from "react-native";
9
- import Animated, {
10
- Extrapolate,
11
- interpolate,
12
- interpolateColor,
13
- useAnimatedStyle,
14
- useDerivedValue,
15
- useSharedValue,
16
- withSpring
17
- } from "react-native-reanimated";
1
+ import React, { ComponentProps } from "react";
2
+ import { GestureResponderEvent, Image, Pressable, View } from "react-native";
3
+ import Animated from "react-native-reanimated";
18
4
  import {
19
5
  IOColors,
20
6
  IOListItemStyles,
21
7
  IOListItemVisualParams,
22
- IOScaleValues,
23
8
  IOSelectionListItemVisualParams,
24
- IOSpringValues,
25
9
  IOStyles,
26
- hexToRgba,
27
- useIOExperimentalDesign,
28
10
  useIOTheme
29
11
  } from "../../core";
12
+ import { useListItemAnimation } from "../../hooks";
13
+ import { useIOFontDynamicScale } from "../../utils/accessibility";
30
14
  import { WithTestID } from "../../utils/types";
31
15
  import { Avatar } from "../avatar";
32
16
  import { Badge } from "../badge";
33
17
  import { IOIcons, Icon } from "../icons";
34
18
  import { LoadingSpinner } from "../loadingSpinner";
35
19
  import { HSpacer, VSpacer } from "../spacer";
36
- import { Caption, H6, BodySmall } from "../typography";
20
+ import { BodySmall, Caption, H6 } from "../typography";
37
21
 
38
22
  type ListItemTopElementProps =
39
23
  | {
@@ -91,13 +75,6 @@ export type ListItemNavGraphicProps =
91
75
 
92
76
  export type ListItemNav = ListItemNavPartialProps & ListItemNavGraphicProps;
93
77
 
94
- const styles = StyleSheet.create({
95
- paymentLogoSize: {
96
- width: IOSelectionListItemVisualParams.iconSize,
97
- height: IOSelectionListItemVisualParams.iconSize
98
- }
99
- });
100
-
101
78
  export const ListItemNav = ({
102
79
  value,
103
80
  description,
@@ -114,15 +91,12 @@ export const ListItemNav = ({
114
91
  loading,
115
92
  numberOfLines
116
93
  }: ListItemNav) => {
117
- const isPressed = useSharedValue(0);
118
- const { isExperimental } = useIOExperimentalDesign();
94
+ const { onPressIn, onPressOut, scaleAnimatedStyle, backgroundAnimatedStyle } =
95
+ useListItemAnimation();
119
96
  const theme = useIOTheme();
120
97
 
121
- const withMargin = (GraphicalAsset: ReactNode) => (
122
- <View style={{ marginRight: IOListItemVisualParams.iconMargin }}>
123
- {GraphicalAsset}
124
- </View>
125
- );
98
+ const { dynamicFontScale, spacingScaleMultiplier, hugeFontEnabled } =
99
+ useIOFontDynamicScale();
126
100
 
127
101
  const listItemNavContent = (
128
102
  <>
@@ -139,7 +113,12 @@ export const ListItemNav = ({
139
113
  {topElement.dateValue && (
140
114
  <>
141
115
  <View style={{ alignSelf: "flex-start", flexDirection: "row" }}>
142
- <Icon name="calendar" size={16} color="grey-300" />
116
+ <Icon
117
+ allowFontScaling
118
+ name="calendar"
119
+ size={16}
120
+ color="grey-300"
121
+ />
143
122
  <HSpacer size={4} />
144
123
  <Caption color={theme["textBody-tertiary"]}>
145
124
  {topElement.dateValue}
@@ -172,56 +151,7 @@ export const ListItemNav = ({
172
151
  </>
173
152
  );
174
153
 
175
- const mapBackgroundStates: Record<string, string> = {
176
- default: hexToRgba(IOColors[theme["listItem-pressed"]], 0),
177
- pressed: IOColors[theme["listItem-pressed"]]
178
- };
179
-
180
- const navIconColor = isExperimental
181
- ? theme["interactiveElem-default"]
182
- : "blue";
183
-
184
- // Scaling transformation applied when the button is pressed
185
- const animationScaleValue = IOScaleValues?.basicButton?.pressedState;
186
-
187
- const progressPressed = useDerivedValue(() =>
188
- withSpring(isPressed.value, IOSpringValues.button)
189
- );
190
-
191
- // Interpolate animation values from `isPressed` values
192
- const animatedScaleStyle = useAnimatedStyle(() => {
193
- const scale = interpolate(
194
- progressPressed.value,
195
- [0, 1],
196
- [1, animationScaleValue],
197
- Extrapolate.CLAMP
198
- );
199
-
200
- return {
201
- transform: [{ scale }]
202
- };
203
- });
204
-
205
- const animatedBackgroundStyle = useAnimatedStyle(() => {
206
- const backgroundColor = interpolateColor(
207
- progressPressed.value,
208
- [0, 1],
209
- [mapBackgroundStates.default, mapBackgroundStates.pressed]
210
- );
211
-
212
- return {
213
- backgroundColor
214
- };
215
- });
216
-
217
- const handlePressIn = useCallback(() => {
218
- // eslint-disable-next-line functional/immutable-data
219
- isPressed.value = 1;
220
- }, [isPressed]);
221
- const handlePressOut = useCallback(() => {
222
- // eslint-disable-next-line functional/immutable-data
223
- isPressed.value = 0;
224
- }, [isPressed]);
154
+ const interactiveColor = theme["interactiveElem-default"];
225
155
 
226
156
  const handleOnPress = (event: GestureResponderEvent) => {
227
157
  if (!loading) {
@@ -229,13 +159,12 @@ export const ListItemNav = ({
229
159
  }
230
160
  };
231
161
 
232
- const primaryColor: IOColors = isExperimental ? "blueIO-500" : "blue";
233
-
234
162
  return (
235
163
  <Pressable
236
164
  onPress={handleOnPress}
237
- onPressIn={handlePressIn}
238
- onPressOut={handlePressOut}
165
+ onPressIn={onPressIn}
166
+ onPressOut={onPressOut}
167
+ onTouchEnd={onPressOut}
239
168
  accessible={true}
240
169
  accessibilityState={{ busy: loading }}
241
170
  accessibilityLabel={accessibilityLabel}
@@ -244,40 +173,54 @@ export const ListItemNav = ({
244
173
  testID={testID}
245
174
  >
246
175
  <Animated.View
247
- style={[IOListItemStyles.listItem, animatedBackgroundStyle]}
176
+ style={[IOListItemStyles.listItem, backgroundAnimatedStyle]}
248
177
  >
249
178
  <Animated.View
250
- style={[IOListItemStyles.listItemInner, animatedScaleStyle]}
179
+ style={[
180
+ IOListItemStyles.listItemInner,
181
+ {
182
+ columnGap:
183
+ IOListItemVisualParams.iconMargin *
184
+ dynamicFontScale *
185
+ spacingScaleMultiplier
186
+ },
187
+ scaleAnimatedStyle
188
+ ]}
251
189
  >
252
190
  {/* Possibile graphical assets
253
191
  - Icon
254
192
  - Image URL (for payment logos)
255
193
  - Avatar
256
194
  */}
257
- {icon &&
258
- withMargin(
259
- <Icon
260
- name={icon}
261
- color={iconColor}
262
- size={IOListItemVisualParams.iconSize}
263
- />
264
- )}
265
- {paymentLogoUri &&
266
- withMargin(
267
- <Image
268
- accessibilityIgnoresInvertColors
269
- source={{ uri: paymentLogoUri }}
270
- style={styles.paymentLogoSize}
271
- />
272
- )}
273
- {avatar && withMargin(<Avatar size="small" {...avatar} />)}
195
+ {icon && !hugeFontEnabled && (
196
+ <Icon
197
+ allowFontScaling
198
+ name={icon}
199
+ color={iconColor}
200
+ size={IOListItemVisualParams.iconSize}
201
+ />
202
+ )}
203
+ {paymentLogoUri && (
204
+ <Image
205
+ accessibilityIgnoresInvertColors
206
+ source={{ uri: paymentLogoUri }}
207
+ style={{
208
+ width:
209
+ IOSelectionListItemVisualParams.iconSize * dynamicFontScale,
210
+ height:
211
+ IOSelectionListItemVisualParams.iconSize * dynamicFontScale
212
+ }}
213
+ />
214
+ )}
215
+ {avatar && <Avatar size="small" {...avatar} />}
274
216
 
275
217
  <View style={IOStyles.flex}>{listItemNavContent}</View>
276
- {loading && <LoadingSpinner color={primaryColor} />}
218
+ {loading && <LoadingSpinner color={interactiveColor} />}
277
219
  {!loading && !hideChevron && (
278
220
  <Icon
221
+ allowFontScaling
279
222
  name="chevronRightListItem"
280
- color={navIconColor}
223
+ color={interactiveColor}
281
224
  size={IOListItemVisualParams.chevronSize}
282
225
  />
283
226
  )}
@@ -1,28 +1,18 @@
1
- import React, { ComponentProps, useCallback, useMemo } from "react";
1
+ import React, { ComponentProps } from "react";
2
2
  import { GestureResponderEvent, Pressable, View } from "react-native";
3
- import Animated, {
4
- Extrapolate,
5
- interpolate,
6
- interpolateColor,
7
- useAnimatedStyle,
8
- useDerivedValue,
9
- useSharedValue,
10
- withSpring
11
- } from "react-native-reanimated";
3
+ import Animated from "react-native-reanimated";
12
4
  import {
13
- IOColors,
14
5
  IOListItemStyles,
15
6
  IOListItemVisualParams,
16
- IOScaleValues,
17
- IOSpringValues,
18
7
  IOStyles,
19
- hexToRgba,
20
8
  useIOExperimentalDesign,
21
9
  useIOTheme
22
10
  } from "../../core";
11
+ import { useListItemAnimation } from "../../hooks";
12
+ import { useIOFontDynamicScale } from "../../utils/accessibility";
23
13
  import { WithTestID } from "../../utils/types";
24
14
  import { Icon } from "../icons";
25
- import { H6, BodySmall } from "../typography";
15
+ import { BodySmall, H6 } from "../typography";
26
16
 
27
17
  export type ListItemNavAlert = WithTestID<{
28
18
  value: string | React.ReactNode;
@@ -44,31 +34,19 @@ export const ListItemNavAlert = ({
44
34
  accessibilityHint,
45
35
  testID
46
36
  }: ListItemNavAlert) => {
47
- const isPressed: Animated.SharedValue<number> = useSharedValue(0);
37
+ const theme = useIOTheme();
38
+ const { onPressIn, onPressOut, scaleAnimatedStyle, backgroundAnimatedStyle } =
39
+ useListItemAnimation();
40
+ const { dynamicFontScale, spacingScaleMultiplier } = useIOFontDynamicScale();
48
41
  const { isExperimental } = useIOExperimentalDesign();
49
42
 
50
- const componentValueToAccessibility = useMemo(
51
- () => (typeof value === "string" ? value : ""),
52
- [value]
53
- );
43
+ const componentValueToAccessibility = typeof value === "string" ? value : "";
44
+ const componentDescriptionToAccessibility =
45
+ typeof description === "string" ? description : "";
54
46
 
55
- const componentDescriptionToAccessibility = useMemo(
56
- () => (typeof description === "string" ? description : ""),
57
- [description]
58
- );
59
-
60
- const listItemAccessibilityLabel = useMemo(
61
- () =>
62
- accessibilityLabel
63
- ? accessibilityLabel
64
- : `${componentValueToAccessibility}; ${componentDescriptionToAccessibility}`,
65
- [
66
- componentDescriptionToAccessibility,
67
- componentValueToAccessibility,
68
- accessibilityLabel
69
- ]
70
- );
71
- const theme = useIOTheme();
47
+ const listItemAccessibilityLabel =
48
+ accessibilityLabel ??
49
+ `${componentValueToAccessibility}; ${componentDescriptionToAccessibility}`;
72
50
 
73
51
  // TODO: Remove this when legacy look is deprecated https://pagopa.atlassian.net/browse/IOPLT-153
74
52
  const listItemNavAlertContent = (
@@ -95,58 +73,12 @@ export const ListItemNavAlert = ({
95
73
 
96
74
  const iconColor = isExperimental ? theme["interactiveElem-default"] : "blue";
97
75
 
98
- const mapBackgroundStates: Record<string, string> = {
99
- default: hexToRgba(IOColors[theme["listItem-pressed"]], 0),
100
- pressed: IOColors[theme["listItem-pressed"]]
101
- };
102
-
103
- // Scaling transformation applied when the button is pressed
104
- const animationScaleValue = IOScaleValues?.basicButton?.pressedState;
105
-
106
- const progressPressed = useDerivedValue(() =>
107
- withSpring(isPressed.value, IOSpringValues.button)
108
- );
109
-
110
- // Interpolate animation values from `isPressed` values
111
- const animatedScaleStyle = useAnimatedStyle(() => {
112
- const scale = interpolate(
113
- progressPressed.value,
114
- [0, 1],
115
- [1, animationScaleValue],
116
- Extrapolate.CLAMP
117
- );
118
-
119
- return {
120
- transform: [{ scale }]
121
- };
122
- });
123
-
124
- const animatedBackgroundStyle = useAnimatedStyle(() => {
125
- const backgroundColor = interpolateColor(
126
- progressPressed.value,
127
- [0, 1],
128
- [mapBackgroundStates.default, mapBackgroundStates.pressed]
129
- );
130
-
131
- return {
132
- backgroundColor
133
- };
134
- });
135
-
136
- const handlePressIn = useCallback(() => {
137
- // eslint-disable-next-line functional/immutable-data
138
- isPressed.value = 1;
139
- }, [isPressed]);
140
- const handlePressOut = useCallback(() => {
141
- // eslint-disable-next-line functional/immutable-data
142
- isPressed.value = 0;
143
- }, [isPressed]);
144
-
145
76
  return (
146
77
  <Pressable
147
78
  onPress={onPress}
148
- onPressIn={handlePressIn}
149
- onPressOut={handlePressOut}
79
+ onPressIn={onPressIn}
80
+ onPressOut={onPressOut}
81
+ onTouchEnd={onPressOut}
150
82
  accessible={true}
151
83
  accessibilityLabel={listItemAccessibilityLabel}
152
84
  accessibilityHint={accessibilityHint}
@@ -154,30 +86,38 @@ export const ListItemNavAlert = ({
154
86
  testID={testID}
155
87
  >
156
88
  <Animated.View
157
- style={[IOListItemStyles.listItem, animatedBackgroundStyle]}
89
+ style={[IOListItemStyles.listItem, backgroundAnimatedStyle]}
158
90
  importantForAccessibility="no-hide-descendants"
159
91
  accessibilityElementsHidden
160
92
  >
161
93
  <Animated.View
162
- style={[IOListItemStyles.listItemInner, animatedScaleStyle]}
94
+ style={[
95
+ IOListItemStyles.listItemInner,
96
+ {
97
+ columnGap:
98
+ IOListItemVisualParams.iconMargin *
99
+ dynamicFontScale *
100
+ spacingScaleMultiplier
101
+ },
102
+ scaleAnimatedStyle
103
+ ]}
163
104
  >
164
105
  {!withoutIcon && (
165
- <View style={{ marginRight: IOListItemVisualParams.iconMargin }}>
166
- <Icon
167
- name="errorFilled"
168
- color={theme.errorIcon}
169
- size={IOListItemVisualParams.iconSize}
170
- />
171
- </View>
172
- )}
173
- <View style={IOStyles.flex}>{listItemNavAlertContent}</View>
174
- <View style={{ marginLeft: IOListItemVisualParams.iconMargin }}>
175
106
  <Icon
176
- name="chevronRightListItem"
177
- color={iconColor}
178
- size={IOListItemVisualParams.chevronSize}
107
+ allowFontScaling
108
+ name="errorFilled"
109
+ color={theme.errorIcon}
110
+ size={IOListItemVisualParams.iconSize}
179
111
  />
180
- </View>
112
+ )}
113
+ <View style={IOStyles.flex}>{listItemNavAlertContent}</View>
114
+
115
+ <Icon
116
+ allowFontScaling
117
+ name="chevronRightListItem"
118
+ color={iconColor}
119
+ size={IOListItemVisualParams.chevronSize}
120
+ />
181
121
  </Animated.View>
182
122
  </Animated.View>
183
123
  </Pressable>
@@ -1,33 +1,25 @@
1
1
  import * as React from "react";
2
- import { useCallback, useState } from "react";
2
+ import { useState } from "react";
3
3
  import { Image, Pressable, StyleSheet, View } from "react-native";
4
4
  import ReactNativeHapticFeedback from "react-native-haptic-feedback";
5
- import Animated, {
6
- Extrapolate,
7
- interpolate,
8
- interpolateColor,
9
- useAnimatedStyle,
10
- useDerivedValue,
11
- useSharedValue,
12
- withSpring
13
- } from "react-native-reanimated";
5
+ import Animated from "react-native-reanimated";
14
6
  import Placeholder from "rn-placeholder";
15
7
  import {
16
- IOColors,
17
- IOScaleValues,
18
8
  IOSelectionListItemStyles,
19
9
  IOSelectionListItemVisualParams,
20
- IOSpringValues,
10
+ IOSelectionTickVisualParams,
21
11
  IOStyles,
22
- hexToRgba,
23
12
  useIOTheme
24
13
  } from "../../core";
14
+ import { useListItemAnimation } from "../../hooks";
15
+ import { useIOFontDynamicScale } from "../../utils/accessibility";
25
16
  import { WithTestID } from "../../utils/types";
26
17
  import { IOIcons, Icon } from "../icons";
27
18
  import { IOLogoPaymentType, LogoPayment } from "../logos";
28
19
  import { AnimatedRadio } from "../radio/AnimatedRadio";
29
20
  import { HSpacer, VSpacer } from "../spacer";
30
- import { H6, BodySmall } from "../typography";
21
+ import { VStack } from "../stack";
22
+ import { BodySmall, H6 } from "../typography";
31
23
 
32
24
  type ListItemRadioGraphicProps =
33
25
  | { icon?: never; paymentLogo: IOLogoPaymentType; uri?: never }
@@ -91,58 +83,12 @@ export const ListItemRadio = ({
91
83
  testID
92
84
  }: ListItemRadioProps) => {
93
85
  const [toggleValue, setToggleValue] = useState(selected ?? false);
94
- // Animations
95
- const isPressed: Animated.SharedValue<number> = useSharedValue(0);
96
- // Scaling transformation applied when the button is pressed
97
- const animationScaleValue = IOScaleValues?.basicButton?.pressedState;
98
-
99
- const progressPressed = useDerivedValue(() =>
100
- withSpring(isPressed.value, IOSpringValues.button)
101
- );
102
-
103
- // Theme
86
+ const { dynamicFontScale, spacingScaleMultiplier, hugeFontEnabled } =
87
+ useIOFontDynamicScale();
88
+ const { onPressIn, onPressOut, scaleAnimatedStyle, backgroundAnimatedStyle } =
89
+ useListItemAnimation();
104
90
  const theme = useIOTheme();
105
91
 
106
- const mapBackgroundStates: Record<string, string> = {
107
- default: hexToRgba(IOColors[theme["listItem-pressed"]], 0),
108
- pressed: IOColors[theme["listItem-pressed"]]
109
- };
110
-
111
- // Interpolate animation values from `isPressed` values
112
- const animatedScaleStyle = useAnimatedStyle(() => {
113
- const scale = interpolate(
114
- progressPressed.value,
115
- [0, 1],
116
- [1, animationScaleValue],
117
- Extrapolate.CLAMP
118
- );
119
-
120
- return {
121
- transform: [{ scale }]
122
- };
123
- });
124
-
125
- const handlePressIn = useCallback(() => {
126
- // eslint-disable-next-line functional/immutable-data
127
- isPressed.value = 1;
128
- }, [isPressed]);
129
- const handlePressOut = useCallback(() => {
130
- // eslint-disable-next-line functional/immutable-data
131
- isPressed.value = 0;
132
- }, [isPressed]);
133
-
134
- const animatedBackgroundStyle = useAnimatedStyle(() => {
135
- const backgroundColor = interpolateColor(
136
- progressPressed.value,
137
- [0, 1],
138
- [mapBackgroundStates.default, mapBackgroundStates.pressed]
139
- );
140
-
141
- return {
142
- backgroundColor
143
- };
144
- });
145
-
146
92
  const toggleRadioItem = () => {
147
93
  ReactNativeHapticFeedback.trigger("impactLight");
148
94
  setToggleValue(!toggleValue);
@@ -154,14 +100,11 @@ export const ListItemRadio = ({
154
100
  const disabledStyle = { opacity: disabled ? DISABLED_OPACITY : 1 };
155
101
 
156
102
  const SkeletonDescriptionLines = () => (
157
- <>
158
- <VSpacer size={8} />
103
+ <VStack space={8}>
159
104
  <Placeholder.Box animate="fade" radius={8} width={"100%"} height={8} />
160
- <VSpacer size={8} />
161
105
  <Placeholder.Box animate="fade" radius={8} width={"100%"} height={8} />
162
- <VSpacer size={8} />
163
106
  <Placeholder.Box animate="fade" radius={8} width={"100%"} height={8} />
164
- </>
107
+ </VStack>
165
108
  );
166
109
 
167
110
  const SkeletonIcon = () => (
@@ -180,7 +123,7 @@ export const ListItemRadio = ({
180
123
  );
181
124
 
182
125
  const SkeletonComponent = () => (
183
- <View style={IOSelectionListItemStyles.listItem}>
126
+ <View style={[IOSelectionListItemStyles.listItem, { rowGap: 8 }]}>
184
127
  <View style={IOSelectionListItemStyles.listItemInner}>
185
128
  <View
186
129
  style={[
@@ -200,7 +143,10 @@ export const ListItemRadio = ({
200
143
  </View>
201
144
  <HSpacer size={8} />
202
145
  <View pointerEvents="none" style={disabledStyle}>
203
- <AnimatedRadio checked={toggleValue} />
146
+ <AnimatedRadio
147
+ size={IOSelectionTickVisualParams.size * dynamicFontScale}
148
+ checked={toggleValue}
149
+ />
204
150
  </View>
205
151
  </View>
206
152
  </View>
@@ -220,55 +166,59 @@ export const ListItemRadio = ({
220
166
  accessibilityLabel={accessibilityLabel}
221
167
  accessibilityHint={accessibilityHint}
222
168
  onPress={toggleRadioItem}
223
- onPressIn={handlePressIn}
224
- onPressOut={handlePressOut}
225
- onTouchEnd={handlePressOut}
169
+ onPressIn={onPressIn}
170
+ onPressOut={onPressOut}
171
+ onTouchEnd={onPressOut}
226
172
  testID={testID}
227
173
  disabled={disabled}
228
174
  >
229
175
  <Animated.View
230
176
  style={[
231
177
  IOSelectionListItemStyles.listItem,
232
- animatedBackgroundStyle,
178
+ backgroundAnimatedStyle,
233
179
  disabledStyle
234
180
  ]}
235
181
  // This is required to avoid opacity
236
182
  // inheritance on Android
237
183
  needsOffscreenAlphaCompositing={true}
238
184
  >
239
- <Animated.View style={animatedScaleStyle}>
185
+ <Animated.View style={scaleAnimatedStyle}>
240
186
  <View style={IOSelectionListItemStyles.listItemInner}>
241
- <View style={[IOStyles.row, { flexShrink: 1 }]}>
242
- {startImage && (
243
- <View
244
- style={{
245
- marginRight: IOSelectionListItemVisualParams.iconMargin
246
- }}
247
- >
248
- {/* icon or paymentLogo props are mutually exclusive */}
249
- {startImage.icon && (
250
- <Icon
251
- name={startImage.icon}
252
- color="grey-300"
253
- size={IOSelectionListItemVisualParams.iconSize}
254
- />
255
- )}
256
- {startImage.uri && (
257
- <Image
258
- accessibilityIgnoresInvertColors
259
- source={startImage}
260
- style={styles.imageSize}
261
- />
262
- )}
263
- {startImage.paymentLogo && (
264
- <LogoPayment
265
- name={startImage.paymentLogo}
266
- size={IOSelectionListItemVisualParams.iconSize}
267
- />
268
- )}
187
+ <View
188
+ style={{
189
+ flexDirection: "row",
190
+ flexShrink: 1,
191
+ columnGap:
192
+ IOSelectionListItemVisualParams.iconMargin *
193
+ dynamicFontScale *
194
+ spacingScaleMultiplier
195
+ }}
196
+ >
197
+ {startImage?.icon && !hugeFontEnabled && (
198
+ <Icon
199
+ allowFontScaling
200
+ name={startImage.icon}
201
+ color="grey-300"
202
+ size={IOSelectionListItemVisualParams.iconSize}
203
+ />
204
+ )}
205
+ {startImage?.uri && (
206
+ <View style={{ alignSelf: "center" }}>
207
+ <Image
208
+ accessibilityIgnoresInvertColors
209
+ source={startImage}
210
+ style={styles.imageSize}
211
+ />
212
+ </View>
213
+ )}
214
+ {startImage?.paymentLogo && (
215
+ <View style={{ alignSelf: "center" }}>
216
+ <LogoPayment
217
+ name={startImage.paymentLogo}
218
+ size={IOSelectionListItemVisualParams.iconSize}
219
+ />
269
220
  </View>
270
221
  )}
271
-
272
222
  <H6 color={theme["textBody-default"]} style={{ flexShrink: 1 }}>
273
223
  {value}
274
224
  </H6>
@@ -279,7 +229,10 @@ export const ListItemRadio = ({
279
229
  accessibilityElementsHidden
280
230
  importantForAccessibility="no-hide-descendants"
281
231
  >
282
- <AnimatedRadio checked={selected ?? toggleValue} />
232
+ <AnimatedRadio
233
+ size={IOSelectionTickVisualParams.size * dynamicFontScale}
234
+ checked={selected ?? toggleValue}
235
+ />
283
236
  </View>
284
237
  </View>
285
238
  {description && (