@pi-spi/app 1.6.0 → 2.1.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 (233) hide show
  1. package/README.md +64 -30
  2. package/example/App.tsx +27 -24
  3. package/lib/module/core/api.js +14 -5
  4. package/lib/module/core/api.js.map +1 -1
  5. package/lib/module/core/assets.js +0 -7
  6. package/lib/module/core/assets.js.map +1 -1
  7. package/lib/module/core/di.js +17 -8
  8. package/lib/module/core/di.js.map +1 -1
  9. package/lib/module/core/pi_spi_custom_theme.js +22 -10
  10. package/lib/module/core/pi_spi_custom_theme.js.map +1 -1
  11. package/lib/module/core/pi_spi_sdk_config.js +22 -8
  12. package/lib/module/core/pi_spi_sdk_config.js.map +1 -1
  13. package/lib/module/core/theme.js +345 -225
  14. package/lib/module/core/theme.js.map +1 -1
  15. package/lib/module/index.js +1 -1
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/l10n/app_localizations.js.map +1 -1
  18. package/lib/module/l10n/app_localizations_en.js +22 -0
  19. package/lib/module/l10n/app_localizations_en.js.map +1 -1
  20. package/lib/module/l10n/app_localizations_fr.js +22 -0
  21. package/lib/module/l10n/app_localizations_fr.js.map +1 -1
  22. package/lib/module/l10n/app_localizations_pt.js +22 -0
  23. package/lib/module/l10n/app_localizations_pt.js.map +1 -1
  24. package/lib/module/modules/categorie/presentation/pages/categorie_edit_icon_btn.js +25 -35
  25. package/lib/module/modules/categorie/presentation/pages/categorie_edit_icon_btn.js.map +1 -1
  26. package/lib/module/modules/config/domain/models/config_keys.js +3 -1
  27. package/lib/module/modules/config/domain/models/config_keys.js.map +1 -1
  28. package/lib/module/modules/config/domain/services/config_service.js +31 -2
  29. package/lib/module/modules/config/domain/services/config_service.js.map +1 -1
  30. package/lib/module/modules/home/presentation/pages/home_tab_compte.js +0 -1
  31. package/lib/module/modules/home/presentation/pages/home_tab_compte.js.map +1 -1
  32. package/lib/module/modules/home/presentation/pages/home_tab_compte_more_menu.js +38 -37
  33. package/lib/module/modules/home/presentation/pages/home_tab_compte_more_menu.js.map +1 -1
  34. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page.js +2 -2
  35. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page.js.map +1 -1
  36. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.js +2 -2
  37. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.js.map +1 -1
  38. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.js +135 -199
  39. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.js.map +1 -1
  40. package/lib/module/modules/profile/presentation/pages/profile_menu.js +4 -3
  41. package/lib/module/modules/profile/presentation/pages/profile_menu.js.map +1 -1
  42. package/lib/module/modules/profile/presentation/pages/profile_page_avatar.js +6 -28
  43. package/lib/module/modules/profile/presentation/pages/profile_page_avatar.js.map +1 -1
  44. package/lib/module/modules/profile/presentation/pages/profile_page_contacts.js +0 -1
  45. package/lib/module/modules/profile/presentation/pages/profile_page_contacts.js.map +1 -1
  46. package/lib/module/modules/profile/presentation/pages/profile_page_contacts_actions.js +122 -162
  47. package/lib/module/modules/profile/presentation/pages/profile_page_contacts_actions.js.map +1 -1
  48. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page.js +0 -1
  49. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page.js.map +1 -1
  50. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page_share.js +26 -38
  51. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page_share.js.map +1 -1
  52. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page.js +0 -1
  53. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page.js.map +1 -1
  54. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.js +0 -1
  55. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.js.map +1 -1
  56. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.js +38 -93
  57. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.js.map +1 -1
  58. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_empty_widget.js +0 -1
  59. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_empty_widget.js.map +1 -1
  60. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_widget.js +0 -1
  61. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_widget.js.map +1 -1
  62. package/lib/module/modules/subscription/presentation/pages/subscription_menu_widget.js +23 -42
  63. package/lib/module/modules/subscription/presentation/pages/subscription_menu_widget.js.map +1 -1
  64. package/lib/module/modules/transactions/infra/transaction_output_remote.js +2 -1
  65. package/lib/module/modules/transactions/infra/transaction_output_remote.js.map +1 -1
  66. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.js +0 -1
  67. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.js.map +1 -1
  68. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.js +34 -61
  69. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.js.map +1 -1
  70. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.js +49 -62
  71. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.js.map +1 -1
  72. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_recu.js +3 -1
  73. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_recu.js.map +1 -1
  74. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_ticket.js +68 -88
  75. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_ticket.js.map +1 -1
  76. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.js +77 -0
  77. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.js.map +1 -0
  78. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.js +49 -155
  79. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.js.map +1 -1
  80. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.js +8 -28
  81. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.js.map +1 -1
  82. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.js +0 -1
  83. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.js.map +1 -1
  84. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.js +50 -42
  85. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.js.map +1 -1
  86. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_widget.js +0 -1
  87. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_widget.js.map +1 -1
  88. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.js +0 -1
  89. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.js.map +1 -1
  90. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.js +37 -67
  91. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.js.map +1 -1
  92. package/lib/module/modules/transactions/presentation/pages/transaction_search/transaction_search_page_filters.js +5 -4
  93. package/lib/module/modules/transactions/presentation/pages/transaction_search/transaction_search_page_filters.js.map +1 -1
  94. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.js +2 -2
  95. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.js.map +1 -1
  96. package/lib/module/pi_spi_sdk_entry.js +7 -2
  97. package/lib/module/pi_spi_sdk_entry.js.map +1 -1
  98. package/lib/module/shared/widgets/confirm_action_sheet_widget.js +34 -67
  99. package/lib/module/shared/widgets/confirm_action_sheet_widget.js.map +1 -1
  100. package/lib/module/shared/widgets/custom_progressbar.js +3 -2
  101. package/lib/module/shared/widgets/custom_progressbar.js.map +1 -1
  102. package/lib/module/shared/widgets/image_select_widget.js +43 -107
  103. package/lib/module/shared/widgets/image_select_widget.js.map +1 -1
  104. package/lib/module/shared/widgets/notification_dialog.js +25 -35
  105. package/lib/module/shared/widgets/notification_dialog.js.map +1 -1
  106. package/lib/module/shared/widgets/selection.js +382 -6
  107. package/lib/module/shared/widgets/selection.js.map +1 -1
  108. package/lib/typescript/src/core/api.d.ts +6 -0
  109. package/lib/typescript/src/core/api.d.ts.map +1 -1
  110. package/lib/typescript/src/core/assets.d.ts +0 -7
  111. package/lib/typescript/src/core/assets.d.ts.map +1 -1
  112. package/lib/typescript/src/core/di.d.ts.map +1 -1
  113. package/lib/typescript/src/core/pi_spi_custom_theme.d.ts +17 -8
  114. package/lib/typescript/src/core/pi_spi_custom_theme.d.ts.map +1 -1
  115. package/lib/typescript/src/core/pi_spi_sdk_config.d.ts +22 -8
  116. package/lib/typescript/src/core/pi_spi_sdk_config.d.ts.map +1 -1
  117. package/lib/typescript/src/core/theme.d.ts +123 -53
  118. package/lib/typescript/src/core/theme.d.ts.map +1 -1
  119. package/lib/typescript/src/index.d.ts +1 -1
  120. package/lib/typescript/src/index.d.ts.map +1 -1
  121. package/lib/typescript/src/l10n/app_localizations.d.ts +44 -0
  122. package/lib/typescript/src/l10n/app_localizations.d.ts.map +1 -1
  123. package/lib/typescript/src/l10n/app_localizations_en.d.ts.map +1 -1
  124. package/lib/typescript/src/l10n/app_localizations_fr.d.ts.map +1 -1
  125. package/lib/typescript/src/l10n/app_localizations_pt.d.ts.map +1 -1
  126. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_edit_icon_btn.d.ts.map +1 -1
  127. package/lib/typescript/src/modules/config/domain/models/config_keys.d.ts +3 -1
  128. package/lib/typescript/src/modules/config/domain/models/config_keys.d.ts.map +1 -1
  129. package/lib/typescript/src/modules/config/domain/services/config_service.d.ts +7 -0
  130. package/lib/typescript/src/modules/config/domain/services/config_service.d.ts.map +1 -1
  131. package/lib/typescript/src/modules/home/presentation/pages/home_tab_compte_more_menu.d.ts +2 -0
  132. package/lib/typescript/src/modules/home/presentation/pages/home_tab_compte_more_menu.d.ts.map +1 -1
  133. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page.d.ts.map +1 -1
  134. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.d.ts +1 -1
  135. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.d.ts.map +1 -1
  136. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_avatar.d.ts.map +1 -1
  137. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_contacts.d.ts.map +1 -1
  138. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_contacts_actions.d.ts.map +1 -1
  139. package/lib/typescript/src/modules/qrcode/presentation/pages/qrcode_alias_page.d.ts.map +1 -1
  140. package/lib/typescript/src/modules/qrcode/presentation/pages/qrcode_alias_page_share.d.ts.map +1 -1
  141. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page.d.ts.map +1 -1
  142. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.d.ts.map +1 -1
  143. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.d.ts +2 -2
  144. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.d.ts.map +1 -1
  145. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_menu_widget.d.ts.map +1 -1
  146. package/lib/typescript/src/modules/transactions/infra/transaction_output_remote.d.ts.map +1 -1
  147. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.d.ts.map +1 -1
  148. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.d.ts.map +1 -1
  149. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.d.ts.map +1 -1
  150. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.d.ts +17 -0
  151. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.d.ts.map +1 -0
  152. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.d.ts +6 -2
  153. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.d.ts.map +1 -1
  154. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.d.ts.map +1 -1
  155. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.d.ts.map +1 -1
  156. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.d.ts.map +1 -1
  157. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.d.ts.map +1 -1
  158. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.d.ts.map +1 -1
  159. package/lib/typescript/src/shared/widgets/confirm_action_sheet_widget.d.ts +4 -1
  160. package/lib/typescript/src/shared/widgets/confirm_action_sheet_widget.d.ts.map +1 -1
  161. package/lib/typescript/src/shared/widgets/custom_progressbar.d.ts.map +1 -1
  162. package/lib/typescript/src/shared/widgets/image_select_widget.d.ts +6 -4
  163. package/lib/typescript/src/shared/widgets/image_select_widget.d.ts.map +1 -1
  164. package/lib/typescript/src/shared/widgets/notification_dialog.d.ts +2 -2
  165. package/lib/typescript/src/shared/widgets/notification_dialog.d.ts.map +1 -1
  166. package/lib/typescript/src/shared/widgets/selection.d.ts +69 -2
  167. package/lib/typescript/src/shared/widgets/selection.d.ts.map +1 -1
  168. package/package.json +1 -1
  169. package/src/core/api.ts +11 -2
  170. package/src/core/assets.ts +0 -7
  171. package/src/core/di.ts +13 -8
  172. package/src/core/pi_spi_custom_theme.ts +22 -15
  173. package/src/core/pi_spi_sdk_config.ts +27 -9
  174. package/src/core/theme.ts +381 -269
  175. package/src/index.ts +1 -1
  176. package/src/l10n/app_localizations.ts +44 -0
  177. package/src/l10n/app_localizations_en.ts +22 -0
  178. package/src/l10n/app_localizations_fr.ts +22 -0
  179. package/src/l10n/app_localizations_pt.ts +22 -0
  180. package/src/modules/categorie/presentation/pages/categorie_edit_icon_btn.tsx +25 -27
  181. package/src/modules/config/domain/models/config_keys.ts +3 -1
  182. package/src/modules/config/domain/services/config_service.ts +31 -2
  183. package/src/modules/home/presentation/pages/home_tab_compte.tsx +1 -1
  184. package/src/modules/home/presentation/pages/home_tab_compte_more_menu.tsx +34 -42
  185. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page.tsx +2 -5
  186. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.tsx +2 -2
  187. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.tsx +105 -148
  188. package/src/modules/profile/presentation/pages/profile_menu.tsx +2 -2
  189. package/src/modules/profile/presentation/pages/profile_page_avatar.tsx +6 -12
  190. package/src/modules/profile/presentation/pages/profile_page_contacts.tsx +0 -1
  191. package/src/modules/profile/presentation/pages/profile_page_contacts_actions.tsx +111 -117
  192. package/src/modules/qrcode/presentation/pages/qrcode_alias_page.tsx +0 -1
  193. package/src/modules/qrcode/presentation/pages/qrcode_alias_page_share.tsx +32 -40
  194. package/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page.tsx +0 -1
  195. package/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.tsx +0 -1
  196. package/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.tsx +20 -59
  197. package/src/modules/subscription/presentation/pages/subscription_list/subscription_list_empty_widget.tsx +1 -1
  198. package/src/modules/subscription/presentation/pages/subscription_list/subscription_list_widget.tsx +1 -1
  199. package/src/modules/subscription/presentation/pages/subscription_menu_widget.tsx +25 -39
  200. package/src/modules/transactions/infra/transaction_output_remote.ts +6 -1
  201. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.tsx +0 -1
  202. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.tsx +39 -41
  203. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.tsx +41 -46
  204. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_recu.tsx +3 -1
  205. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_ticket.tsx +46 -40
  206. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.tsx +92 -0
  207. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.tsx +48 -94
  208. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.tsx +4 -17
  209. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.tsx +0 -1
  210. package/src/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.tsx +49 -42
  211. package/src/modules/transactions/presentation/pages/transaction_recents/transaction_recents_widget.tsx +1 -1
  212. package/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.tsx +0 -1
  213. package/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.tsx +47 -48
  214. package/src/modules/transactions/presentation/pages/transaction_search/transaction_search_page_filters.tsx +4 -4
  215. package/src/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.tsx +2 -2
  216. package/src/pi_spi_sdk_entry.tsx +9 -2
  217. package/src/shared/widgets/confirm_action_sheet_widget.tsx +30 -34
  218. package/src/shared/widgets/custom_progressbar.tsx +3 -2
  219. package/src/shared/widgets/image_select_widget.tsx +46 -61
  220. package/src/shared/widgets/notification_dialog.tsx +66 -70
  221. package/src/shared/widgets/selection.tsx +293 -5
  222. package/assets/images/theme_light_blue.jpeg +0 -0
  223. package/assets/images/theme_light_green.jpeg +0 -0
  224. package/assets/images/theme_light_orange.jpeg +0 -0
  225. package/assets/images/theme_light_pink.jpeg +0 -0
  226. package/assets/images/theme_light_purple.jpeg +0 -0
  227. package/assets/images/theme_light_red.jpeg +0 -0
  228. package/assets/images/theme_light_yellow.jpeg +0 -0
  229. package/lib/module/modules/transactions/presentation/pages/transaction_details/sheet_box.js +0 -47
  230. package/lib/module/modules/transactions/presentation/pages/transaction_details/sheet_box.js.map +0 -1
  231. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/sheet_box.d.ts +0 -10
  232. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/sheet_box.d.ts.map +0 -1
  233. package/src/modules/transactions/presentation/pages/transaction_details/sheet_box.tsx +0 -30
package/src/index.ts CHANGED
@@ -22,7 +22,7 @@ export {
22
22
  type PiSpiLogLevel,
23
23
  } from './core/pi_spi_sdk_config';
24
24
  export { PiSpiCustomTheme } from './core/pi_spi_custom_theme';
25
- export { Themes, type ThemeData } from './core/theme';
25
+ export { Accents, Themes, type ThemeData } from './core/theme';
26
26
  export {
27
27
  type AppLocalizations,
28
28
  type SupportedLocaleCode,
@@ -39,6 +39,10 @@ export interface AppLocalizations {
39
39
  readonly errorDialogOk: string;
40
40
  /** Unavailable */
41
41
  readonly indisponible: string;
42
+ /** Take a photo */
43
+ readonly imageSelectCamera: string;
44
+ /** Choose from gallery */
45
+ readonly imageSelectGalerie: string;
42
46
  /** It seems that you haven’t granted PI-SPI permission to access your location! */
43
47
  readonly locationErrorMessage: string;
44
48
  /** It seems that you haven't granted PI-SPI permission to send you notifications! */
@@ -603,6 +607,14 @@ export interface AppLocalizations {
603
607
  readonly transactionFormOthrPaysLabel: string;
604
608
  /** Financial institution */
605
609
  readonly transactionFormOthrNomLabel: string;
610
+ /** Search for a country */
611
+ readonly transactionFormOthrPaysRecherche: string;
612
+ /** No country found */
613
+ readonly transactionFormOthrPaysAucun: string;
614
+ /** Search for an institution */
615
+ readonly transactionFormOthrPspRecherche: string;
616
+ /** No institution found */
617
+ readonly transactionFormOthrPspAucune: string;
606
618
  /** Continue */
607
619
  readonly transactionFormContinueBtn: string;
608
620
  /** Save and make transfer */
@@ -871,6 +883,8 @@ export interface AppLocalizations {
871
883
  readonly transactionDetailsTicketCaisse: string;
872
884
  /** You can share the receipt */
873
885
  readonly transactionDetailsTicketCaisseSubtitle: string;
886
+ /** Share */
887
+ readonly transactionDetailsTicketPartager: string;
874
888
  /** Account */
875
889
  readonly transactionDetailsCompte: string;
876
890
  /** Institution */
@@ -915,6 +929,8 @@ export interface AppLocalizations {
915
929
  readonly transactionDetailsCancelRejectMessage: string;
916
930
  /** Send receipt */
917
931
  readonly transactionDetailsRecuTitle: string;
932
+ /** Issued on: */
933
+ readonly transactionDetailsRecuPdfEditeLe: string;
918
934
  /** You can download or share the PDF file */
919
935
  readonly transactionDetailsRecuSubTitle: string;
920
936
  /** Identifier */
@@ -1049,6 +1065,8 @@ export interface AppLocalizations {
1049
1065
  readonly qrcodePagePartageAliasTitle: string;
1050
1066
  /** Alias sharing */
1051
1067
  readonly qrcodePagePartageAliasSubTitle: string;
1068
+ /** Add my number */
1069
+ readonly qrcodePagePartageContactAjouterHint: string;
1052
1070
  /** Your contact */
1053
1071
  readonly qrcodePagePartageContactTitle: string;
1054
1072
  /** Share your alias contact */
@@ -1215,6 +1233,32 @@ export interface AppLocalizations {
1215
1233
  readonly appSettingPageMenuThemeDefault: string;
1216
1234
  /** Apparence */
1217
1235
  readonly appSettingPageMenuThemePageTitle: string;
1236
+ /** Theme */
1237
+ readonly appSettingPageThemeSection: string;
1238
+ /** Accent colour */
1239
+ readonly appSettingPageAccentSection: string;
1240
+ /** Default */
1241
+ readonly appSettingPageAccentDefaut: string;
1242
+ /** Green */
1243
+ readonly appSettingPageAccentVert: string;
1244
+ /** Blue */
1245
+ readonly appSettingPageAccentBleu: string;
1246
+ /** Red */
1247
+ readonly appSettingPageAccentRouge: string;
1248
+ /** Orange */
1249
+ readonly appSettingPageAccentOrange: string;
1250
+ /** Purple */
1251
+ readonly appSettingPageAccentViolet: string;
1252
+ /** Pink */
1253
+ readonly appSettingPageAccentRose: string;
1254
+ /** Turquoise */
1255
+ readonly appSettingPageAccentTurquoise: string;
1256
+ /** Terracotta */
1257
+ readonly appSettingPageAccentTerracotta: string;
1258
+ /** Burgundy */
1259
+ readonly appSettingPageAccentBordeaux: string;
1260
+ /** Slate */
1261
+ readonly appSettingPageAccentArdoise: string;
1218
1262
  /** My QR code by default */
1219
1263
  readonly appSettingPageMenuQrCodeTitle: string;
1220
1264
  /** Enable to display your QR Code by default */
@@ -19,6 +19,8 @@ export const AppLocalizationsEn: AppLocalizations = {
19
19
  reessayer: `Retry`,
20
20
  errorDialogOk: `Ok`,
21
21
  indisponible: `Unavailable`,
22
+ imageSelectCamera: `Take a photo`,
23
+ imageSelectGalerie: `Choose from gallery`,
22
24
  locationErrorMessage: `It seems that you haven’t granted PI-SPI permission to access your location!`,
23
25
  notificationErrorMessage: `It seems that you haven't granted PI-SPI permission to send you notifications!`,
24
26
  contactErrorMessage: `It looks like you haven't granted PI-SPI permission to access your contacts!`,
@@ -302,6 +304,10 @@ Check your Wi-Fi or mobile data, then tap Retry.`,
302
304
  transactionFormOthrMax: `The account number must not exceed 34 characters`,
303
305
  transactionFormOthrPaysLabel: `Country`,
304
306
  transactionFormOthrNomLabel: `Financial institution`,
307
+ transactionFormOthrPaysRecherche: `Search for a country`,
308
+ transactionFormOthrPaysAucun: `No country found`,
309
+ transactionFormOthrPspRecherche: `Search for an institution`,
310
+ transactionFormOthrPspAucune: `No institution found`,
305
311
  transactionFormContinueBtn: `Continue`,
306
312
  transactionFormSaveContactBtn: `Save and make transfer`,
307
313
  transactionFormVerificationTitle: `Confirmation`,
@@ -441,6 +447,7 @@ If this request comes from someone you trust, simply add their alias to your con
441
447
  transactionDetailsRecuPaiementPDFSousTitre: `You can download or share the PDF file`,
442
448
  transactionDetailsTicketCaisse: `Transaction Statement`,
443
449
  transactionDetailsTicketCaisseSubtitle: `You can share the receipt`,
450
+ transactionDetailsTicketPartager: `Share`,
444
451
  transactionDetailsCompte: `Account`,
445
452
  transactionDetailsInstitution: `Institution`,
446
453
  transactionDetailsRejet: `Reason for rejection`,
@@ -464,6 +471,7 @@ If this request comes from someone you trust, simply add their alias to your con
464
471
  transactionDetailsCancelReasonLabel: `Reason`,
465
472
  transactionDetailsCancelRejectMessage: `The cancellation request has been successfully rejected`,
466
473
  transactionDetailsRecuTitle: `Send receipt`,
474
+ transactionDetailsRecuPdfEditeLe: `Issued on:`,
467
475
  transactionDetailsRecuSubTitle: `You can download or share the PDF file`,
468
476
  transactionDetailsRecuInfoIdentifiant: `Identifier`,
469
477
  transactionDetailsRecuInfoReference: `Reference`,
@@ -535,6 +543,7 @@ Please try again later.`,
535
543
  qrcodePagePartageQrCodeSubTitle: `Share as picture`,
536
544
  qrcodePagePartageAliasTitle: `Share the alias`,
537
545
  qrcodePagePartageAliasSubTitle: `Alias sharing`,
546
+ qrcodePagePartageContactAjouterHint: `Add my number`,
538
547
  qrcodePagePartageContactTitle: `Your contact`,
539
548
  qrcodePagePartageContactSubTitle: `Share your alias contact`,
540
549
  qrcodePagePartageAliasMessage: (name: string) => `PI Alias of ${name}`,
@@ -619,6 +628,19 @@ Scanning will be automatic`,
619
628
  appSettingPageMenuThemeCustom: `App theme`,
620
629
  appSettingPageMenuThemeDefault: `System`,
621
630
  appSettingPageMenuThemePageTitle: `Apparence`,
631
+ appSettingPageThemeSection: `Theme`,
632
+ appSettingPageAccentSection: `Accent colour`,
633
+ appSettingPageAccentDefaut: `Default`,
634
+ appSettingPageAccentVert: `Green`,
635
+ appSettingPageAccentBleu: `Blue`,
636
+ appSettingPageAccentRouge: `Red`,
637
+ appSettingPageAccentOrange: `Orange`,
638
+ appSettingPageAccentViolet: `Purple`,
639
+ appSettingPageAccentRose: `Pink`,
640
+ appSettingPageAccentTurquoise: `Turquoise`,
641
+ appSettingPageAccentTerracotta: `Terracotta`,
642
+ appSettingPageAccentBordeaux: `Burgundy`,
643
+ appSettingPageAccentArdoise: `Slate`,
622
644
  appSettingPageMenuQrCodeTitle: `My QR code by default`,
623
645
  appSettingPageMenuQrCodeSelectTitle: `Enable to display your QR Code by default`,
624
646
  appSettingPageMenuQrCodeDeselectTitle: `Disable to display the camera by default`,
@@ -19,6 +19,8 @@ export const AppLocalizationsFr: AppLocalizations = {
19
19
  reessayer: `Réessayez`,
20
20
  errorDialogOk: `Compris`,
21
21
  indisponible: `Indisponible`,
22
+ imageSelectCamera: `Prendre une photo`,
23
+ imageSelectGalerie: `Choisir dans la galerie`,
22
24
  locationErrorMessage: `Il semble que vous n’ayez pas accordé à PI-SPI l’autorisation d’accéder à votre localisation!`,
23
25
  notificationErrorMessage: `Il semble que vous n’ayez pas accordé à PI-SPI l’autorisation de vous envoyer des notifications!`,
24
26
  contactErrorMessage: `Il semble que vous n’ayez pas accordé à PI-SPI l’autorisation d’accéder à vos contacts!`,
@@ -302,6 +304,10 @@ Vérifiez votre Wi-Fi ou vos données mobiles puis appuyez sur Réessayer.`,
302
304
  transactionFormOthrMax: `Le numéro de compte ne doit pas excéder 34 caractères`,
303
305
  transactionFormOthrPaysLabel: `Pays`,
304
306
  transactionFormOthrNomLabel: `Institution financière`,
307
+ transactionFormOthrPaysRecherche: `Rechercher un pays`,
308
+ transactionFormOthrPaysAucun: `Aucun pays trouvé`,
309
+ transactionFormOthrPspRecherche: `Rechercher une institution`,
310
+ transactionFormOthrPspAucune: `Aucune institution trouvée`,
305
311
  transactionFormContinueBtn: `Continuer`,
306
312
  transactionFormSaveContactBtn: `Enregistrer et faire un transfert`,
307
313
  transactionFormVerificationTitle: `Confirmation`,
@@ -441,6 +447,7 @@ Si cette demande provient d'une personne de confiance, il vous suffit d'ajouter
441
447
  transactionDetailsRecuPaiementPDFSousTitre: `Vous pouvez partager ou télécharger le PDF`,
442
448
  transactionDetailsTicketCaisse: `Reçu réglé`,
443
449
  transactionDetailsTicketCaisseSubtitle: `Vous pouvez partager le ticket de caisse`,
450
+ transactionDetailsTicketPartager: `Partager`,
444
451
  transactionDetailsCompte: `Compte`,
445
452
  transactionDetailsInstitution: `Institution`,
446
453
  transactionDetailsRejet: `Raison du rejet`,
@@ -464,6 +471,7 @@ Si cette demande provient d'une personne de confiance, il vous suffit d'ajouter
464
471
  transactionDetailsCancelReasonLabel: `Raison`,
465
472
  transactionDetailsCancelRejectMessage: `La demande d’annulation est rejetée avec succès`,
466
473
  transactionDetailsRecuTitle: `Reçu de l'envoi`,
474
+ transactionDetailsRecuPdfEditeLe: `Edité le :`,
467
475
  transactionDetailsRecuSubTitle: `Vous pouvez partager ou télécharger le PDF`,
468
476
  transactionDetailsRecuInfoIdentifiant: `Identifiant`,
469
477
  transactionDetailsRecuInfoReference: `Référence`,
@@ -534,6 +542,7 @@ Merci de votre compréhension.`,
534
542
  qrcodePagePartageQrCodeSubTitle: `Partage de l’image`,
535
543
  qrcodePagePartageAliasTitle: `Votre alias`,
536
544
  qrcodePagePartageAliasSubTitle: `Partage de l’alias`,
545
+ qrcodePagePartageContactAjouterHint: `Ajouter mon numéro`,
537
546
  qrcodePagePartageContactTitle: `Votre contact`,
538
547
  qrcodePagePartageContactSubTitle: `Partager le contact de votre alias`,
539
548
  qrcodePagePartageAliasMessage: (name: string) => `Alias PI de ${name}`,
@@ -618,6 +627,19 @@ Le scan se fait automatiquement`,
618
627
  appSettingPageMenuThemeCustom: `Thème de l'application`,
619
628
  appSettingPageMenuThemeDefault: `Système`,
620
629
  appSettingPageMenuThemePageTitle: `Apparence`,
630
+ appSettingPageThemeSection: `Thème`,
631
+ appSettingPageAccentSection: `Couleur d'accentuation`,
632
+ appSettingPageAccentDefaut: `Défaut`,
633
+ appSettingPageAccentVert: `Vert`,
634
+ appSettingPageAccentBleu: `Bleu`,
635
+ appSettingPageAccentRouge: `Rouge`,
636
+ appSettingPageAccentOrange: `Orange`,
637
+ appSettingPageAccentViolet: `Violet`,
638
+ appSettingPageAccentRose: `Rose`,
639
+ appSettingPageAccentTurquoise: `Turquoise`,
640
+ appSettingPageAccentTerracotta: `Terracotta`,
641
+ appSettingPageAccentBordeaux: `Bordeaux`,
642
+ appSettingPageAccentArdoise: `Ardoise`,
621
643
  appSettingPageMenuQrCodeTitle: `Mon QR code par défaut`,
622
644
  appSettingPageMenuQrCodeSelectTitle: `Activer pour afficher votre QR Code par défaut`,
623
645
  appSettingPageMenuQrCodeDeselectTitle: `Désactiver pour afficher la caméra par défaut`,
@@ -19,6 +19,8 @@ export const AppLocalizationsPt: AppLocalizations = {
19
19
  reessayer: `Tente novamente`,
20
20
  errorDialogOk: `Entendi`,
21
21
  indisponible: `Indisponível`,
22
+ imageSelectCamera: `Tirar uma foto`,
23
+ imageSelectGalerie: `Escolher da galeria`,
22
24
  locationErrorMessage: `Parece que você não concedeu permissão para que o PI-SPI acesse a sua localização!`,
23
25
  notificationErrorMessage: `Parece que você não concedeu permissão ao PI-SPI para lhe enviar notificações!`,
24
26
  contactErrorMessage: `Parece que você não concedeu ao PI-SPI permissão para aceder aos seus contatos!`,
@@ -302,6 +304,10 @@ Verifique o Wi-Fi ou os dados móveis e toque em Tentar novamente.`,
302
304
  transactionFormOthrMax: `O número de conta não deve exceder 34 caracteres`,
303
305
  transactionFormOthrPaysLabel: `País`,
304
306
  transactionFormOthrNomLabel: `Instituição financeira`,
307
+ transactionFormOthrPaysRecherche: `Pesquisar um país`,
308
+ transactionFormOthrPaysAucun: `Nenhum país encontrado`,
309
+ transactionFormOthrPspRecherche: `Pesquisar uma instituição`,
310
+ transactionFormOthrPspAucune: `Nenhuma instituição encontrada`,
305
311
  transactionFormContinueBtn: `Continuar`,
306
312
  transactionFormSaveContactBtn: `Salvar e fazer um transferência`,
307
313
  transactionFormVerificationTitle: `Confirmação`,
@@ -441,6 +447,7 @@ Se este pedido for de uma pessoa de confiança, basta adicionar o alias aos seus
441
447
  transactionDetailsRecuPaiementPDFSousTitre: `Você pode compartilhar ou baixar o PDF`,
442
448
  transactionDetailsTicketCaisse: `Recebido pago`,
443
449
  transactionDetailsTicketCaisseSubtitle: `Você pode compartilhar o recibo`,
450
+ transactionDetailsTicketPartager: `Partilhar`,
444
451
  transactionDetailsCompte: `Conta`,
445
452
  transactionDetailsInstitution: `Instituição`,
446
453
  transactionDetailsRejet: `Motivo da rejeição`,
@@ -464,6 +471,7 @@ Se este pedido for de uma pessoa de confiança, basta adicionar o alias aos seus
464
471
  transactionDetailsCancelReasonLabel: `Razão`,
465
472
  transactionDetailsCancelRejectMessage: `A demanda de cancelamento foi rejeitada com sucesso`,
466
473
  transactionDetailsRecuTitle: `Recebido de envio`,
474
+ transactionDetailsRecuPdfEditeLe: `Emitido em:`,
467
475
  transactionDetailsRecuSubTitle: `Você pode compartilhar ou baixar o PDF`,
468
476
  transactionDetailsRecuInfoIdentifiant: `Identificador`,
469
477
  transactionDetailsRecuInfoReference: `Referência`,
@@ -535,6 +543,7 @@ Por favor, tente novamente mais tarde`,
535
543
  qrcodePagePartageQrCodeSubTitle: `Compartilhar a imagem`,
536
544
  qrcodePagePartageAliasTitle: `Seu alias`,
537
545
  qrcodePagePartageAliasSubTitle: `Compartilhamento de alias`,
546
+ qrcodePagePartageContactAjouterHint: `Adicionar o meu número`,
538
547
  qrcodePagePartageContactTitle: `Seu contato`,
539
548
  qrcodePagePartageContactSubTitle: `Compartilhar o contato do seu alias`,
540
549
  qrcodePagePartageAliasMessage: (name: string) => `Alias PI de ${name}`,
@@ -619,6 +628,19 @@ O scan é feito automaticamente`,
619
628
  appSettingPageMenuThemeCustom: `Tema da aplicação`,
620
629
  appSettingPageMenuThemeDefault: `Sistema`,
621
630
  appSettingPageMenuThemePageTitle: `Aparência`,
631
+ appSettingPageThemeSection: `Tema`,
632
+ appSettingPageAccentSection: `Cor de destaque`,
633
+ appSettingPageAccentDefaut: `Padrão`,
634
+ appSettingPageAccentVert: `Verde`,
635
+ appSettingPageAccentBleu: `Azul`,
636
+ appSettingPageAccentRouge: `Vermelho`,
637
+ appSettingPageAccentOrange: `Laranja`,
638
+ appSettingPageAccentViolet: `Roxo`,
639
+ appSettingPageAccentRose: `Rosa`,
640
+ appSettingPageAccentTurquoise: `Turquesa`,
641
+ appSettingPageAccentTerracotta: `Terracota`,
642
+ appSettingPageAccentBordeaux: `Bordô`,
643
+ appSettingPageAccentArdoise: `Ardósia`,
622
644
  appSettingPageMenuQrCodeTitle: `Meu QR Code por defeito`,
623
645
  appSettingPageMenuQrCodeSelectTitle: `Ativar para exibir o meu QR Code por defeito`,
624
646
  appSettingPageMenuQrCodeDeselectTitle: `Desativar para exibir a câmera por defeito`,
@@ -1,6 +1,6 @@
1
1
  import { Image } from 'expo-image';
2
2
  import { useRef } from 'react';
3
- import { Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
3
+ import { Pressable, ScrollView, StyleSheet, useWindowDimensions, View } from 'react-native';
4
4
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
5
5
 
6
6
  import { Images } from '../../../../core/assets';
@@ -9,10 +9,9 @@ import { AppRouter, useAppRouter } from '../../../../core/router';
9
9
  import { useTheme } from '../../../../core/theme';
10
10
  import { useAppLocalizations } from '../../../../l10n/localizations';
11
11
  import { ElevatedButton } from '../../../../shared/material/buttons';
12
- import { Card } from '../../../../shared/material/card';
13
12
  import { showModalBottomSheet } from '../../../../shared/material/overlays';
14
13
  import { EmojiSelectWidget } from '../../../../shared/widgets/emoji_select_widget';
15
- import { MenuActionItem, MenuActionsWidget } from '../../../../shared/widgets/menu_actions_widget';
14
+ import { SbSelectionOption, SelectionSheet } from '../../../../shared/widgets/selection';
16
15
  import { CategorieIconType } from '../../domain/models/categorie';
17
16
  import { CategorieBloc } from '../bloc/categorie_bloc';
18
17
  import { CategorieAddValidationEvent, CategorieEditValidationEvent } from '../bloc/categorie_event';
@@ -25,7 +24,7 @@ export function CategorieEditIconBtn() {
25
24
  return (
26
25
  <Pressable
27
26
  accessibilityRole="button"
28
- onPress={() => void showModalBottomSheet(router, { themed: true, builder: () => <CategorieEditIconOptions /> })}
27
+ onPress={() => void showModalBottomSheet(router, { builder: () => <CategorieEditIconOptions /> })}
29
28
  style={[styles.fab, { backgroundColor: theme.colorScheme.surface }]}
30
29
  >
31
30
  <Image source={Images.categorieImageSelect} style={styles.fabIcon} />
@@ -33,13 +32,10 @@ export function CategorieEditIconBtn() {
33
32
  );
34
33
  }
35
34
 
36
- /** Feuille des options d'icône : emoji (ou galerie, non disponible, comme en Flutter) */
35
+ /** Feuille des options d'icône : emoji (ou galerie, non disponible, comme en Flutter). */
37
36
  function CategorieEditIconOptions() {
38
37
  const traductions = useAppLocalizations();
39
- const theme = useTheme();
40
38
  const router = useAppRouter();
41
- const insets = useSafeAreaInsets();
42
- const { height } = useWindowDimensions();
43
39
  const categorieBloc = useBloc(CategorieBloc);
44
40
 
45
41
  const selectEmoji = async () => {
@@ -63,25 +59,26 @@ function CategorieEditIconOptions() {
63
59
  };
64
60
 
65
61
  return (
66
- <View style={[styles.sheet, { maxHeight: height * 0.5, backgroundColor: theme.colorScheme.surface, paddingBottom: insets.bottom }]}>
67
- <ScrollView contentContainerStyle={styles.sheetContent}>
68
- <Text style={[theme.textTheme.headlineMedium, styles.title]}>{traductions.categorieFormIconSheetTitle}</Text>
69
- <Card>
70
- <MenuActionsWidget
71
- items={[
72
- // Emoji
73
- new MenuActionItem(Images.categorieIconEmoji, traductions.categorieFormIconSheetEmojiTitle, null, () => void selectEmoji(), {
74
- iconSize: 20,
75
- }),
76
- // Choisir dans la galerie (sans action, comme dans le SDK Flutter)
77
- new MenuActionItem(Images.categorieImageSelect, traductions.categorieFormIconSheetGalleryTitle, null, () => undefined, {
78
- iconSize: 20,
79
- }),
80
- ]}
62
+ <SelectionSheet
63
+ titre={traductions.categorieFormIconSheetTitle}
64
+ contenu={
65
+ <ScrollView bounces={false} contentContainerStyle={styles.optionsContent}>
66
+ {/* Emoji */}
67
+ <SbSelectionOption
68
+ image={Images.categorieIconEmoji}
69
+ titre={traductions.categorieFormIconSheetEmojiTitle}
70
+ onPress={() => void selectEmoji()}
81
71
  />
82
- </Card>
83
- </ScrollView>
84
- </View>
72
+ <View style={styles.gap10} />
73
+ {/* Choisir dans la galerie (sans action, comme dans le SDK Flutter) */}
74
+ <SbSelectionOption
75
+ image={Images.categorieImageSelect}
76
+ titre={traductions.categorieFormIconSheetGalleryTitle}
77
+ onPress={() => undefined}
78
+ />
79
+ </ScrollView>
80
+ }
81
+ />
85
82
  );
86
83
  }
87
84
 
@@ -115,6 +112,7 @@ const styles = StyleSheet.create({
115
112
  fabIcon: { width: 24, height: 24 },
116
113
  sheet: { borderRadius: 20, overflow: 'hidden' },
117
114
  sheetContent: { padding: 20 },
118
- title: { marginBottom: 20 },
115
+ optionsContent: { paddingHorizontal: 20, paddingTop: 8, paddingBottom: 16 },
116
+ gap10: { height: 10 },
119
117
  saveBtn: { paddingVertical: 20, paddingHorizontal: 4 },
120
118
  });
@@ -6,8 +6,10 @@ export enum ConfigKey {
6
6
  /** l'utilisateur a passé l'introduction */
7
7
  introductionPassed = 'INTRODUCTION_PASSED',
8
8
 
9
- /** theme de l'utilisateur */
9
+ /** theme de l'utilisateur : système, clair ou sombre */
10
10
  preferedTheme = 'PREFERED_THEME',
11
+ /** Couleur d'accentuation (PI-SPI par défaut) */
12
+ preferedAccent = 'PREFERED_ACCENT',
11
13
 
12
14
  /** Permission notification */
13
15
  permissionNotification = 'PERMISSION_NOTIFICATION',
@@ -1,6 +1,6 @@
1
1
  import type { ConfigInputPort } from '../../ports/input/config_input_port';
2
2
  import type { ConfigOutputPort } from '../../ports/output/config_output_port';
3
- import { configKeyValues } from '../models/config_keys';
3
+ import { ConfigKey, configKeyValues } from '../models/config_keys';
4
4
  import type { ConfigParams } from '../models/config_params';
5
5
 
6
6
  /** Service contenant la logique de gestion des configurations */
@@ -11,9 +11,38 @@ export class ConfigService implements ConfigInputPort {
11
11
  */
12
12
  constructor(readonly configOutputPort: ConfigOutputPort) {}
13
13
 
14
+ /**
15
+ * Anciens thèmes de couleur, remplacés par le thème clair et une couleur
16
+ * d'accentuation (le jaune, trop proche de l'ambre, devient PI-SPI)
17
+ */
18
+ static readonly anciensThemes: Readonly<Record<string, string>> = {
19
+ yellowTheme: 'pispi',
20
+ greenTheme: 'vert',
21
+ blueTheme: 'bleu',
22
+ redTheme: 'rouge',
23
+ orangeTheme: 'orange',
24
+ purpleTheme: 'violet',
25
+ pinkTheme: 'rose',
26
+ // Thème personnalisé de l'hôte : sa couleur devient l'accent
27
+ customTheme: 'application',
28
+ };
29
+
14
30
  recuperer(): ConfigParams {
15
31
  // Récuperer toute la config et Appeler le systeme de stockage
16
- return this.configOutputPort.recuperer([...configKeyValues]);
32
+ const config = this.configOutputPort.recuperer([...configKeyValues]);
33
+ this.migrerTheme(config);
34
+ return config;
35
+ }
36
+
37
+ /** Convertit une seule fois un ancien thème de couleur en thème clair et couleur d'accentuation, et l'enregistre */
38
+ private migrerTheme(config: ConfigParams): void {
39
+ const ancien = config.params[ConfigKey.preferedTheme];
40
+ const accent = ancien != null ? ConfigService.anciensThemes[ancien] : undefined;
41
+ if (accent == null) return;
42
+ config.params[ConfigKey.preferedTheme] = 'lightTheme';
43
+ config.params[ConfigKey.preferedAccent] = accent;
44
+ void this.configOutputPort.modifier(ConfigKey.preferedTheme, 'lightTheme');
45
+ void this.configOutputPort.modifier(ConfigKey.preferedAccent, accent);
17
46
  }
18
47
 
19
48
  async modifier(key: string, value: string): Promise<void> {
@@ -75,7 +75,7 @@ export function HomeTabCompte() {
75
75
  <CtaWidget
76
76
  icon={(color) => <MaterialIcons name="more-horiz" size={30} color={color} />}
77
77
  label={traductions.homeActionMore}
78
- action={hasAlias ? () => void showModalBottomSheet(router, { themed: true, builder: () => <HomeTabCompteMoreMenu /> }) : null}
78
+ action={hasAlias ? () => void showModalBottomSheet(router, { builder: () => <HomeTabCompteMoreMenu /> }) : null}
79
79
  />
80
80
  </View>
81
81
  <View style={styles.gap14} />
@@ -1,71 +1,63 @@
1
- import { ScrollView, StyleSheet, useWindowDimensions, View } from 'react-native';
2
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
1
+ import { StyleSheet, View } from 'react-native';
3
2
 
4
3
  import { Images } from '../../../../core/assets';
5
4
  import { AppRouter, useAppRouter } from '../../../../core/router';
6
- import { useTheme } from '../../../../core/theme';
7
5
  import { useAppLocalizations } from '../../../../l10n/localizations';
8
- import { Card } from '../../../../shared/material/card';
9
- import { MenuActionItem, MenuActionsWidget } from '../../../../shared/widgets/menu_actions_widget';
6
+ import { SelectionSheet } from '../../../../shared/widgets/selection';
7
+ import { ProfileMenuTile, ProfilePageMenu } from '../../../profile/presentation/pages/profile_menu';
10
8
 
11
9
  /**
12
10
  * Menu « Plus » de l'accueil. Le participant peut personnaliser ce menu
13
11
  * pour y ajouter des fonctionnalités propres à son système.
12
+ * Même feuille que celles du profil : à ouvrir avec showModalBottomSheet
13
+ * sans `themed`, la feuille dessine elle-même son fond.
14
14
  */
15
15
  export function HomeTabCompteMoreMenu() {
16
16
  const traductions = useAppLocalizations();
17
- const theme = useTheme();
18
17
  const router = useAppRouter();
19
- const { height } = useWindowDimensions();
20
- const insets = useSafeAreaInsets();
21
18
  // Fermer le menu avant d'ouvrir la page : sinon il reste affiché par-dessus
22
19
  const open = (location: string) => {
23
20
  AppRouter.pop(router);
24
21
  void AppRouter.push(router, location);
25
22
  };
26
23
  return (
27
- <View
28
- style={[
29
- styles.box,
30
- { maxHeight: height * 0.7, backgroundColor: theme.colorScheme.surface, paddingBottom: 20 + insets.bottom },
31
- ]}
32
- >
33
- <Card>
34
- <ScrollView>
35
- <MenuActionsWidget
24
+ <SelectionSheet
25
+ contenu={
26
+ <View style={styles.contenu}>
27
+ <ProfilePageMenu
36
28
  items={[
37
29
  // Programmer un paiement
38
- new MenuActionItem(
39
- Images.homeFooterTransfer,
40
- traductions.homeActionMoreSheetProgrammerTitle,
41
- traductions.homeActionMoreSheetProgrammerSubTitle,
42
- () => open(AppRouter.subscriptionSchedule),
43
- { iconSize: 20 },
44
- ),
30
+ <ProfileMenuTile
31
+ key="programmer"
32
+ image={Images.homeFooterTransfer}
33
+ titre={traductions.homeActionMoreSheetProgrammerTitle}
34
+ sousTitre={traductions.homeActionMoreSheetProgrammerSubTitle}
35
+ onPress={() => open(AppRouter.subscriptionSchedule)}
36
+ />,
45
37
  // Trouver un abonnement
46
- new MenuActionItem(
47
- Images.homeMoreFindSubscription,
48
- traductions.homeActionMoreSheetAbonnementTitle,
49
- traductions.homeActionMoreSheetAbonnementSubTitle,
50
- () => open(AppRouter.subscriptionSubscribe),
51
- { iconSize: 20 },
52
- ),
38
+ <ProfileMenuTile
39
+ key="abonnement"
40
+ image={Images.homeMoreFindSubscription}
41
+ titre={traductions.homeActionMoreSheetAbonnementTitle}
42
+ sousTitre={traductions.homeActionMoreSheetAbonnementSubTitle}
43
+ onPress={() => open(AppRouter.subscriptionSubscribe)}
44
+ />,
53
45
  // Partager dépenses
54
- new MenuActionItem(
55
- Images.homeMoreSplitPayments,
56
- traductions.homeActionMoreSheetPartagerTitle,
57
- traductions.homeActionMoreSheetPartagerSubTitle,
58
- () => open(AppRouter.transactionSplitPaymentTx),
59
- { iconSize: 20 },
60
- ),
46
+ <ProfileMenuTile
47
+ key="partager"
48
+ image={Images.homeMoreSplitPayments}
49
+ titre={traductions.homeActionMoreSheetPartagerTitle}
50
+ sousTitre={traductions.homeActionMoreSheetPartagerSubTitle}
51
+ onPress={() => open(AppRouter.transactionSplitPaymentTx)}
52
+ />,
61
53
  ]}
62
54
  />
63
- </ScrollView>
64
- </Card>
65
- </View>
55
+ </View>
56
+ }
57
+ />
66
58
  );
67
59
  }
68
60
 
69
61
  const styles = StyleSheet.create({
70
- box: { borderRadius: 20, paddingTop: 20, paddingHorizontal: 20 },
62
+ contenu: { paddingHorizontal: 16, paddingTop: 8, paddingBottom: 20 },
71
63
  });
@@ -46,10 +46,7 @@ function menuItems(traductions: AppLocalizations, configParams: ConfigParams): P
46
46
  if (Di.config.appConfig.canChangeTheme) {
47
47
  items.push(
48
48
  new ProfileItem(Images.iconsTheme, traductions.appSettingPageMenuThemeTitle, AppRouter.profileParametreTheme, {
49
- subtitle:
50
- params[ConfigKey.preferedTheme] === Themer.customThemeCode
51
- ? traductions.appSettingPageMenuThemeCustom
52
- : Themes.label(theme, traductions),
49
+ subtitle: `${Themes.label(theme, traductions)} · ${Themer.accentLabel(traductions, params[ConfigKey.preferedAccent])}`,
53
50
  }),
54
51
  );
55
52
  }
@@ -76,7 +73,7 @@ export function ProfileParametrePage() {
76
73
  (_p, current) =>
77
74
  current instanceof ConfigLoadedState &&
78
75
  current.updatedKey != null &&
79
- [ConfigKey.showQRcode, ConfigKey.preferedTheme, ConfigKey.notificationStatus, ConfigKey.notificationAlertSound].includes(
76
+ [ConfigKey.showQRcode, ConfigKey.preferedTheme, ConfigKey.preferedAccent, ConfigKey.notificationStatus, ConfigKey.notificationAlertSound].includes(
80
77
  current.updatedKey,
81
78
  ),
82
79
  );
@@ -4,7 +4,7 @@ import { Images } from '../../../../../core/assets';
4
4
  import { useBloc, useBlocBuilder } from '../../../../../core/bloc_react';
5
5
  import { Themer, useTheme } from '../../../../../core/theme';
6
6
  import { useAppLocalizations } from '../../../../../l10n/localizations';
7
- import { SbSelectionSheet } from '../../../../../shared/widgets/selection';
7
+ import { SelectionSheet } from '../../../../../shared/widgets/selection';
8
8
  import { ConfigBloc } from '../../../../config/adapters/ui/bloc/config_bloc';
9
9
  import { ConfigChangeEvent } from '../../../../config/adapters/ui/bloc/config_event';
10
10
  import { ConfigLoadedState } from '../../../../config/adapters/ui/bloc/config_state';
@@ -25,7 +25,7 @@ export function ProfileParametrePageQRcode() {
25
25
  const basculer = () => configBloc.add(new ConfigChangeEvent(ConfigKey.showQRcode, showQRcode ? '0' : '1'));
26
26
 
27
27
  return (
28
- <SbSelectionSheet
28
+ <SelectionSheet
29
29
  titre={traductions.appSettingPageMenuQrCodeTitle}
30
30
  entete={
31
31
  <Text style={[theme.textTheme.displaySmall, { color: Themer.neural03Color }]}>