@pi-spi/app 2.0.0 → 2.2.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 (389) hide show
  1. package/lib/module/core/api.js +14 -5
  2. package/lib/module/core/api.js.map +1 -1
  3. package/lib/module/l10n/app_localizations.js.map +1 -1
  4. package/lib/module/l10n/app_localizations_en.js +40 -8
  5. package/lib/module/l10n/app_localizations_en.js.map +1 -1
  6. package/lib/module/l10n/app_localizations_fr.js +49 -14
  7. package/lib/module/l10n/app_localizations_fr.js.map +1 -1
  8. package/lib/module/l10n/app_localizations_pt.js +41 -7
  9. package/lib/module/l10n/app_localizations_pt.js.map +1 -1
  10. package/lib/module/modules/alias/domain/models/alias_revendication.js +4 -2
  11. package/lib/module/modules/alias/domain/models/alias_revendication.js.map +1 -1
  12. package/lib/module/modules/alias/infra/alias_output_local.js +11 -0
  13. package/lib/module/modules/alias/infra/alias_output_local.js.map +1 -1
  14. package/lib/module/modules/alias/infra/alias_output_repository.js +9 -8
  15. package/lib/module/modules/alias/infra/alias_output_repository.js.map +1 -1
  16. package/lib/module/modules/alias/presentation/pages/alias_delete_btn_widget.js +14 -18
  17. package/lib/module/modules/alias/presentation/pages/alias_delete_btn_widget.js.map +1 -1
  18. package/lib/module/modules/alias/presentation/pages/alias_page_claim.js +113 -60
  19. package/lib/module/modules/alias/presentation/pages/alias_page_claim.js.map +1 -1
  20. package/lib/module/modules/alias/presentation/pages/alias_page_create_mbno_form.js +151 -76
  21. package/lib/module/modules/alias/presentation/pages/alias_page_create_mbno_form.js.map +1 -1
  22. package/lib/module/modules/alias/presentation/pages/alias_page_create_mbno_timer.js +38 -24
  23. package/lib/module/modules/alias/presentation/pages/alias_page_create_mbno_timer.js.map +1 -1
  24. package/lib/module/modules/alias/presentation/pages/alias_page_create_options.js +28 -26
  25. package/lib/module/modules/alias/presentation/pages/alias_page_create_options.js.map +1 -1
  26. package/lib/module/modules/alias/presentation/pages/alias_page_otp.js +27 -110
  27. package/lib/module/modules/alias/presentation/pages/alias_page_otp.js.map +1 -1
  28. package/lib/module/modules/categorie/domain/services/categorie_service.js +2 -1
  29. package/lib/module/modules/categorie/domain/services/categorie_service.js.map +1 -1
  30. package/lib/module/modules/categorie/presentation/pages/categorie_edit_icon_btn.js +58 -72
  31. package/lib/module/modules/categorie/presentation/pages/categorie_edit_icon_btn.js.map +1 -1
  32. package/lib/module/modules/categorie/presentation/pages/categorie_form_pages.js +88 -80
  33. package/lib/module/modules/categorie/presentation/pages/categorie_form_pages.js.map +1 -1
  34. package/lib/module/modules/categorie/presentation/pages/categorie_icon.js +39 -0
  35. package/lib/module/modules/categorie/presentation/pages/categorie_icon.js.map +1 -1
  36. package/lib/module/modules/categorie/presentation/pages/categorie_liste_widget.js +55 -27
  37. package/lib/module/modules/categorie/presentation/pages/categorie_liste_widget.js.map +1 -1
  38. package/lib/module/modules/categorie/presentation/pages/categorie_select_page.js +21 -81
  39. package/lib/module/modules/categorie/presentation/pages/categorie_select_page.js.map +1 -1
  40. package/lib/module/modules/categorie/presentation/pages/categorie_select_widget.js +53 -16
  41. package/lib/module/modules/categorie/presentation/pages/categorie_select_widget.js.map +1 -1
  42. package/lib/module/modules/config/domain/models/config_keys.js +2 -0
  43. package/lib/module/modules/config/domain/models/config_keys.js.map +1 -1
  44. package/lib/module/modules/contacts/domain/contact_pi.js +3 -5
  45. package/lib/module/modules/contacts/domain/contact_pi.js.map +1 -1
  46. package/lib/module/modules/contacts/presentation/bloc/contact_bloc.js +30 -14
  47. package/lib/module/modules/contacts/presentation/bloc/contact_bloc.js.map +1 -1
  48. package/lib/module/modules/contacts/presentation/pages/contact_actions_sheet.js +106 -0
  49. package/lib/module/modules/contacts/presentation/pages/contact_actions_sheet.js.map +1 -0
  50. package/lib/module/modules/contacts/presentation/pages/contact_list_alias_widget.js +17 -7
  51. package/lib/module/modules/contacts/presentation/pages/contact_list_alias_widget.js.map +1 -1
  52. package/lib/module/modules/contacts/presentation/pages/contact_list_phone_widget.js +5 -4
  53. package/lib/module/modules/contacts/presentation/pages/contact_list_phone_widget.js.map +1 -1
  54. package/lib/module/modules/contacts/presentation/pages/contact_list_widget_item.js +76 -67
  55. package/lib/module/modules/contacts/presentation/pages/contact_list_widget_item.js.map +1 -1
  56. package/lib/module/modules/contacts/presentation/pages/contact_section.js +14 -4
  57. package/lib/module/modules/contacts/presentation/pages/contact_section.js.map +1 -1
  58. package/lib/module/modules/contacts/presentation/pages/contact_select_page.js +131 -110
  59. package/lib/module/modules/contacts/presentation/pages/contact_select_page.js.map +1 -1
  60. package/lib/module/modules/contacts/presentation/pages/create/contact_create_page.js +118 -59
  61. package/lib/module/modules/contacts/presentation/pages/create/contact_create_page.js.map +1 -1
  62. package/lib/module/modules/home/presentation/pages/home_page.js +3 -13
  63. package/lib/module/modules/home/presentation/pages/home_page.js.map +1 -1
  64. package/lib/module/modules/introduction/presentation/pages/introduction.js +17 -4
  65. package/lib/module/modules/introduction/presentation/pages/introduction.js.map +1 -1
  66. package/lib/module/modules/introduction/presentation/pages/introduction_footer.js +15 -53
  67. package/lib/module/modules/introduction/presentation/pages/introduction_footer.js.map +1 -1
  68. package/lib/module/modules/introduction/presentation/pages/introduction_page.js +22 -4
  69. package/lib/module/modules/introduction/presentation/pages/introduction_page.js.map +1 -1
  70. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.js +2 -2
  71. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.js.map +1 -1
  72. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.js +1 -1
  73. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.js.map +1 -1
  74. package/lib/module/modules/profile/presentation/pages/profile_page_avatar.js +6 -28
  75. package/lib/module/modules/profile/presentation/pages/profile_page_avatar.js.map +1 -1
  76. package/lib/module/modules/profile/presentation/pages/profile_page_contacts.js +14 -53
  77. package/lib/module/modules/profile/presentation/pages/profile_page_contacts.js.map +1 -1
  78. package/lib/module/modules/profile/presentation/pages/profile_page_contacts_actions.js +131 -161
  79. package/lib/module/modules/profile/presentation/pages/profile_page_contacts_actions.js.map +1 -1
  80. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page.js +0 -1
  81. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page.js.map +1 -1
  82. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page_share.js +26 -38
  83. package/lib/module/modules/qrcode/presentation/pages/qrcode_alias_page_share.js.map +1 -1
  84. package/lib/module/modules/search/domain/models/fonctionnalite.js +51 -0
  85. package/lib/module/modules/search/domain/models/fonctionnalite.js.map +1 -1
  86. package/lib/module/modules/search/presentation/pages/search_btn_widget.js +136 -0
  87. package/lib/module/modules/search/presentation/pages/search_btn_widget.js.map +1 -0
  88. package/lib/module/modules/search/presentation/pages/search_fonctionnalites.js +21 -1
  89. package/lib/module/modules/search/presentation/pages/search_fonctionnalites.js.map +1 -1
  90. package/lib/module/modules/search/presentation/pages/search_page.js +266 -97
  91. package/lib/module/modules/search/presentation/pages/search_page.js.map +1 -1
  92. package/lib/module/modules/subscription/presentation/pages/subscription_create/subscription_create_page.js +5 -3
  93. package/lib/module/modules/subscription/presentation/pages/subscription_create/subscription_create_page.js.map +1 -1
  94. package/lib/module/modules/subscription/presentation/pages/subscription_create/subscription_create_page_list.js +5 -6
  95. package/lib/module/modules/subscription/presentation/pages/subscription_create/subscription_create_page_list.js.map +1 -1
  96. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page.js +0 -1
  97. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page.js.map +1 -1
  98. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.js +0 -1
  99. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.js.map +1 -1
  100. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.js +38 -93
  101. package/lib/module/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.js.map +1 -1
  102. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_empty_widget.js +0 -1
  103. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_empty_widget.js.map +1 -1
  104. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_widget.js +0 -1
  105. package/lib/module/modules/subscription/presentation/pages/subscription_list/subscription_list_widget.js.map +1 -1
  106. package/lib/module/modules/subscription/presentation/pages/subscription_menu_widget.js +23 -42
  107. package/lib/module/modules/subscription/presentation/pages/subscription_menu_widget.js.map +1 -1
  108. package/lib/module/modules/transactions/domain/models/transaction_send/transaction_send_command_othr.js +1 -2
  109. package/lib/module/modules/transactions/domain/models/transaction_send/transaction_send_command_othr.js.map +1 -1
  110. package/lib/module/modules/transactions/infra/transaction_output_remote.js +2 -1
  111. package/lib/module/modules/transactions/infra/transaction_output_remote.js.map +1 -1
  112. package/lib/module/modules/transactions/presentation/bloc/transaction_send/transaction_send_bloc.js +17 -0
  113. package/lib/module/modules/transactions/presentation/bloc/transaction_send/transaction_send_bloc.js.map +1 -1
  114. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.js +0 -1
  115. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.js.map +1 -1
  116. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.js +34 -61
  117. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.js.map +1 -1
  118. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.js +49 -62
  119. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.js.map +1 -1
  120. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_ticket.js +68 -88
  121. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_ticket.js.map +1 -1
  122. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_date.js +30 -23
  123. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_date.js.map +1 -1
  124. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.js +77 -0
  125. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.js.map +1 -0
  126. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.js +49 -155
  127. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.js.map +1 -1
  128. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page.js +16 -4
  129. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page.js.map +1 -1
  130. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_alias.js +11 -9
  131. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_alias.js.map +1 -1
  132. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.js +17 -35
  133. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.js.map +1 -1
  134. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_schedule.js +8 -10
  135. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_schedule.js.map +1 -1
  136. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.js +127 -106
  137. package/lib/module/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.js.map +1 -1
  138. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.js +50 -42
  139. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.js.map +1 -1
  140. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_widget.js +0 -1
  141. package/lib/module/modules/transactions/presentation/pages/transaction_recents/transaction_recents_widget.js.map +1 -1
  142. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.js +0 -1
  143. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.js.map +1 -1
  144. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.js +37 -67
  145. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.js.map +1 -1
  146. package/lib/module/modules/transactions/presentation/pages/transaction_search/transaction_search_page.js +9 -15
  147. package/lib/module/modules/transactions/presentation/pages/transaction_search/transaction_search_page.js.map +1 -1
  148. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.js +5 -11
  149. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.js.map +1 -1
  150. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_tx.js +9 -9
  151. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_tx.js.map +1 -1
  152. package/lib/module/shared/widgets/alias_widget.js +33 -12
  153. package/lib/module/shared/widgets/alias_widget.js.map +1 -1
  154. package/lib/module/shared/widgets/auth_code_field.js +89 -0
  155. package/lib/module/shared/widgets/auth_code_field.js.map +1 -0
  156. package/lib/module/shared/widgets/calendar_date_picker.js +21 -16
  157. package/lib/module/shared/widgets/calendar_date_picker.js.map +1 -1
  158. package/lib/module/shared/widgets/confirm_action_sheet_widget.js +53 -67
  159. package/lib/module/shared/widgets/confirm_action_sheet_widget.js.map +1 -1
  160. package/lib/module/shared/widgets/emoji_select_widget.js +34 -39
  161. package/lib/module/shared/widgets/emoji_select_widget.js.map +1 -1
  162. package/lib/module/shared/widgets/frequence_input_widget.js +18 -29
  163. package/lib/module/shared/widgets/frequence_input_widget.js.map +1 -1
  164. package/lib/module/shared/widgets/frequence_select_widget.js +233 -140
  165. package/lib/module/shared/widgets/frequence_select_widget.js.map +1 -1
  166. package/lib/module/shared/widgets/image_select_widget.js +43 -107
  167. package/lib/module/shared/widgets/image_select_widget.js.map +1 -1
  168. package/lib/module/shared/widgets/input_text.js +1 -1
  169. package/lib/module/shared/widgets/input_text.js.map +1 -1
  170. package/lib/module/shared/widgets/notification_dialog.js +28 -37
  171. package/lib/module/shared/widgets/notification_dialog.js.map +1 -1
  172. package/lib/module/shared/widgets/pin_entete.js +114 -0
  173. package/lib/module/shared/widgets/pin_entete.js.map +1 -0
  174. package/lib/module/shared/widgets/select_date_widget.js +74 -59
  175. package/lib/module/shared/widgets/select_date_widget.js.map +1 -1
  176. package/lib/module/shared/widgets/selection.js +387 -6
  177. package/lib/module/shared/widgets/selection.js.map +1 -1
  178. package/lib/typescript/src/core/api.d.ts +6 -0
  179. package/lib/typescript/src/core/api.d.ts.map +1 -1
  180. package/lib/typescript/src/l10n/app_localizations.d.ts +75 -11
  181. package/lib/typescript/src/l10n/app_localizations.d.ts.map +1 -1
  182. package/lib/typescript/src/l10n/app_localizations_en.d.ts.map +1 -1
  183. package/lib/typescript/src/l10n/app_localizations_fr.d.ts.map +1 -1
  184. package/lib/typescript/src/l10n/app_localizations_pt.d.ts.map +1 -1
  185. package/lib/typescript/src/modules/alias/domain/models/alias_revendication.d.ts.map +1 -1
  186. package/lib/typescript/src/modules/alias/infra/alias_output_local.d.ts +5 -0
  187. package/lib/typescript/src/modules/alias/infra/alias_output_local.d.ts.map +1 -1
  188. package/lib/typescript/src/modules/alias/infra/alias_output_repository.d.ts.map +1 -1
  189. package/lib/typescript/src/modules/alias/presentation/pages/alias_delete_btn_widget.d.ts.map +1 -1
  190. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_claim.d.ts.map +1 -1
  191. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_create_mbno_form.d.ts.map +1 -1
  192. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_create_mbno_timer.d.ts +1 -1
  193. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_create_mbno_timer.d.ts.map +1 -1
  194. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_create_options.d.ts +4 -1
  195. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_create_options.d.ts.map +1 -1
  196. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_otp.d.ts +9 -5
  197. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_otp.d.ts.map +1 -1
  198. package/lib/typescript/src/modules/categorie/domain/services/categorie_service.d.ts.map +1 -1
  199. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_edit_icon_btn.d.ts +3 -0
  200. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_edit_icon_btn.d.ts.map +1 -1
  201. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_form_pages.d.ts.map +1 -1
  202. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_icon.d.ts +9 -0
  203. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_icon.d.ts.map +1 -1
  204. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_liste_widget.d.ts +7 -2
  205. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_liste_widget.d.ts.map +1 -1
  206. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_select_page.d.ts.map +1 -1
  207. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_select_widget.d.ts +10 -2
  208. package/lib/typescript/src/modules/categorie/presentation/pages/categorie_select_widget.d.ts.map +1 -1
  209. package/lib/typescript/src/modules/config/domain/models/config_keys.d.ts +3 -1
  210. package/lib/typescript/src/modules/config/domain/models/config_keys.d.ts.map +1 -1
  211. package/lib/typescript/src/modules/contacts/domain/contact_pi.d.ts +0 -2
  212. package/lib/typescript/src/modules/contacts/domain/contact_pi.d.ts.map +1 -1
  213. package/lib/typescript/src/modules/contacts/presentation/bloc/contact_bloc.d.ts +7 -0
  214. package/lib/typescript/src/modules/contacts/presentation/bloc/contact_bloc.d.ts.map +1 -1
  215. package/lib/typescript/src/modules/contacts/presentation/pages/contact_actions_sheet.d.ts +14 -0
  216. package/lib/typescript/src/modules/contacts/presentation/pages/contact_actions_sheet.d.ts.map +1 -0
  217. package/lib/typescript/src/modules/contacts/presentation/pages/contact_list_alias_widget.d.ts +4 -2
  218. package/lib/typescript/src/modules/contacts/presentation/pages/contact_list_alias_widget.d.ts.map +1 -1
  219. package/lib/typescript/src/modules/contacts/presentation/pages/contact_list_phone_widget.d.ts.map +1 -1
  220. package/lib/typescript/src/modules/contacts/presentation/pages/contact_list_widget_item.d.ts +6 -4
  221. package/lib/typescript/src/modules/contacts/presentation/pages/contact_list_widget_item.d.ts.map +1 -1
  222. package/lib/typescript/src/modules/contacts/presentation/pages/contact_section.d.ts +3 -1
  223. package/lib/typescript/src/modules/contacts/presentation/pages/contact_section.d.ts.map +1 -1
  224. package/lib/typescript/src/modules/contacts/presentation/pages/contact_select_page.d.ts.map +1 -1
  225. package/lib/typescript/src/modules/contacts/presentation/pages/create/contact_create_page.d.ts.map +1 -1
  226. package/lib/typescript/src/modules/home/presentation/pages/home_page.d.ts.map +1 -1
  227. package/lib/typescript/src/modules/introduction/presentation/pages/introduction.d.ts.map +1 -1
  228. package/lib/typescript/src/modules/introduction/presentation/pages/introduction_footer.d.ts +5 -1
  229. package/lib/typescript/src/modules/introduction/presentation/pages/introduction_footer.d.ts.map +1 -1
  230. package/lib/typescript/src/modules/introduction/presentation/pages/introduction_page.d.ts.map +1 -1
  231. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_avatar.d.ts.map +1 -1
  232. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_contacts.d.ts.map +1 -1
  233. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_contacts_actions.d.ts.map +1 -1
  234. package/lib/typescript/src/modules/qrcode/presentation/pages/qrcode_alias_page.d.ts.map +1 -1
  235. package/lib/typescript/src/modules/qrcode/presentation/pages/qrcode_alias_page_share.d.ts.map +1 -1
  236. package/lib/typescript/src/modules/search/domain/models/fonctionnalite.d.ts +20 -0
  237. package/lib/typescript/src/modules/search/domain/models/fonctionnalite.d.ts.map +1 -1
  238. package/lib/typescript/src/modules/search/presentation/pages/search_btn_widget.d.ts +11 -0
  239. package/lib/typescript/src/modules/search/presentation/pages/search_btn_widget.d.ts.map +1 -0
  240. package/lib/typescript/src/modules/search/presentation/pages/search_fonctionnalites.d.ts.map +1 -1
  241. package/lib/typescript/src/modules/search/presentation/pages/search_page.d.ts.map +1 -1
  242. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_create/subscription_create_page.d.ts.map +1 -1
  243. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page.d.ts.map +1 -1
  244. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.d.ts.map +1 -1
  245. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.d.ts +2 -2
  246. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.d.ts.map +1 -1
  247. package/lib/typescript/src/modules/subscription/presentation/pages/subscription_menu_widget.d.ts.map +1 -1
  248. package/lib/typescript/src/modules/transactions/domain/models/transaction_send/transaction_send_command_othr.d.ts.map +1 -1
  249. package/lib/typescript/src/modules/transactions/infra/transaction_output_remote.d.ts.map +1 -1
  250. package/lib/typescript/src/modules/transactions/presentation/bloc/transaction_send/transaction_send_bloc.d.ts.map +1 -1
  251. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.d.ts.map +1 -1
  252. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.d.ts.map +1 -1
  253. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.d.ts.map +1 -1
  254. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_date.d.ts +4 -1
  255. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_date.d.ts.map +1 -1
  256. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.d.ts +17 -0
  257. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.d.ts.map +1 -0
  258. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.d.ts +6 -2
  259. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.d.ts.map +1 -1
  260. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_alias.d.ts +4 -0
  261. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_alias.d.ts.map +1 -1
  262. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.d.ts.map +1 -1
  263. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_schedule.d.ts.map +1 -1
  264. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.d.ts.map +1 -1
  265. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.d.ts.map +1 -1
  266. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.d.ts.map +1 -1
  267. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.d.ts.map +1 -1
  268. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_search/transaction_search_page.d.ts.map +1 -1
  269. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.d.ts.map +1 -1
  270. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_split/transaction_split_page_tx.d.ts.map +1 -1
  271. package/lib/typescript/src/shared/widgets/alias_widget.d.ts +2 -2
  272. package/lib/typescript/src/shared/widgets/alias_widget.d.ts.map +1 -1
  273. package/lib/typescript/src/shared/widgets/auth_code_field.d.ts +17 -0
  274. package/lib/typescript/src/shared/widgets/auth_code_field.d.ts.map +1 -0
  275. package/lib/typescript/src/shared/widgets/calendar_date_picker.d.ts.map +1 -1
  276. package/lib/typescript/src/shared/widgets/confirm_action_sheet_widget.d.ts +16 -2
  277. package/lib/typescript/src/shared/widgets/confirm_action_sheet_widget.d.ts.map +1 -1
  278. package/lib/typescript/src/shared/widgets/emoji_select_widget.d.ts.map +1 -1
  279. package/lib/typescript/src/shared/widgets/frequence_input_widget.d.ts +6 -3
  280. package/lib/typescript/src/shared/widgets/frequence_input_widget.d.ts.map +1 -1
  281. package/lib/typescript/src/shared/widgets/frequence_select_widget.d.ts +23 -5
  282. package/lib/typescript/src/shared/widgets/frequence_select_widget.d.ts.map +1 -1
  283. package/lib/typescript/src/shared/widgets/image_select_widget.d.ts +6 -4
  284. package/lib/typescript/src/shared/widgets/image_select_widget.d.ts.map +1 -1
  285. package/lib/typescript/src/shared/widgets/input_text.d.ts +2 -0
  286. package/lib/typescript/src/shared/widgets/input_text.d.ts.map +1 -1
  287. package/lib/typescript/src/shared/widgets/notification_dialog.d.ts +5 -3
  288. package/lib/typescript/src/shared/widgets/notification_dialog.d.ts.map +1 -1
  289. package/lib/typescript/src/shared/widgets/pin_entete.d.ts +15 -0
  290. package/lib/typescript/src/shared/widgets/pin_entete.d.ts.map +1 -0
  291. package/lib/typescript/src/shared/widgets/select_date_widget.d.ts +4 -0
  292. package/lib/typescript/src/shared/widgets/select_date_widget.d.ts.map +1 -1
  293. package/lib/typescript/src/shared/widgets/selection.d.ts +74 -3
  294. package/lib/typescript/src/shared/widgets/selection.d.ts.map +1 -1
  295. package/package.json +1 -1
  296. package/src/core/api.ts +11 -2
  297. package/src/l10n/app_localizations.ts +75 -11
  298. package/src/l10n/app_localizations_en.ts +40 -8
  299. package/src/l10n/app_localizations_fr.ts +46 -14
  300. package/src/l10n/app_localizations_pt.ts +39 -7
  301. package/src/modules/alias/domain/models/alias_revendication.ts +4 -2
  302. package/src/modules/alias/infra/alias_output_local.ts +11 -0
  303. package/src/modules/alias/infra/alias_output_repository.ts +9 -8
  304. package/src/modules/alias/presentation/pages/alias_delete_btn_widget.tsx +17 -24
  305. package/src/modules/alias/presentation/pages/alias_page_claim.tsx +76 -48
  306. package/src/modules/alias/presentation/pages/alias_page_create_mbno_form.tsx +113 -65
  307. package/src/modules/alias/presentation/pages/alias_page_create_mbno_timer.tsx +34 -25
  308. package/src/modules/alias/presentation/pages/alias_page_create_options.tsx +29 -36
  309. package/src/modules/alias/presentation/pages/alias_page_otp.tsx +24 -88
  310. package/src/modules/categorie/domain/services/categorie_service.ts +2 -1
  311. package/src/modules/categorie/presentation/pages/categorie_edit_icon_btn.tsx +58 -50
  312. package/src/modules/categorie/presentation/pages/categorie_form_pages.tsx +71 -41
  313. package/src/modules/categorie/presentation/pages/categorie_icon.tsx +26 -0
  314. package/src/modules/categorie/presentation/pages/categorie_liste_widget.tsx +45 -24
  315. package/src/modules/categorie/presentation/pages/categorie_select_page.tsx +10 -46
  316. package/src/modules/categorie/presentation/pages/categorie_select_widget.tsx +54 -13
  317. package/src/modules/config/domain/models/config_keys.ts +3 -0
  318. package/src/modules/contacts/domain/contact_pi.ts +3 -6
  319. package/src/modules/contacts/presentation/bloc/contact_bloc.ts +37 -20
  320. package/src/modules/contacts/presentation/pages/contact_actions_sheet.tsx +69 -0
  321. package/src/modules/contacts/presentation/pages/contact_list_alias_widget.tsx +26 -4
  322. package/src/modules/contacts/presentation/pages/contact_list_phone_widget.tsx +3 -0
  323. package/src/modules/contacts/presentation/pages/contact_list_widget_item.tsx +54 -65
  324. package/src/modules/contacts/presentation/pages/contact_section.tsx +13 -3
  325. package/src/modules/contacts/presentation/pages/contact_select_page.tsx +106 -74
  326. package/src/modules/contacts/presentation/pages/create/contact_create_page.tsx +86 -47
  327. package/src/modules/home/presentation/pages/home_page.tsx +2 -9
  328. package/src/modules/introduction/presentation/pages/introduction.tsx +8 -0
  329. package/src/modules/introduction/presentation/pages/introduction_footer.tsx +16 -36
  330. package/src/modules/introduction/presentation/pages/introduction_page.tsx +17 -5
  331. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.tsx +2 -2
  332. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.tsx +1 -1
  333. package/src/modules/profile/presentation/pages/profile_page_avatar.tsx +6 -12
  334. package/src/modules/profile/presentation/pages/profile_page_contacts.tsx +12 -20
  335. package/src/modules/profile/presentation/pages/profile_page_contacts_actions.tsx +120 -117
  336. package/src/modules/qrcode/presentation/pages/qrcode_alias_page.tsx +0 -1
  337. package/src/modules/qrcode/presentation/pages/qrcode_alias_page_share.tsx +32 -40
  338. package/src/modules/search/domain/models/fonctionnalite.ts +56 -0
  339. package/src/modules/search/presentation/pages/search_btn_widget.tsx +91 -0
  340. package/src/modules/search/presentation/pages/search_fonctionnalites.ts +21 -1
  341. package/src/modules/search/presentation/pages/search_page.tsx +166 -57
  342. package/src/modules/subscription/presentation/pages/subscription_create/subscription_create_page.tsx +4 -2
  343. package/src/modules/subscription/presentation/pages/subscription_create/subscription_create_page_list.tsx +5 -5
  344. package/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page.tsx +0 -1
  345. package/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_actions.tsx +0 -1
  346. package/src/modules/subscription/presentation/pages/subscription_details/subscription_details_page_note_sheet.tsx +20 -59
  347. package/src/modules/subscription/presentation/pages/subscription_list/subscription_list_empty_widget.tsx +1 -1
  348. package/src/modules/subscription/presentation/pages/subscription_list/subscription_list_widget.tsx +1 -1
  349. package/src/modules/subscription/presentation/pages/subscription_menu_widget.tsx +25 -39
  350. package/src/modules/transactions/domain/models/transaction_send/transaction_send_command_othr.ts +1 -2
  351. package/src/modules/transactions/infra/transaction_output_remote.ts +6 -1
  352. package/src/modules/transactions/presentation/bloc/transaction_send/transaction_send_bloc.ts +17 -0
  353. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions.tsx +0 -1
  354. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_cancel.tsx +39 -41
  355. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_actions_return.tsx +41 -46
  356. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_ticket.tsx +46 -40
  357. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_date.tsx +26 -17
  358. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_pays.tsx +92 -0
  359. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_input_psp.tsx +48 -94
  360. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page.tsx +20 -2
  361. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_alias.tsx +6 -8
  362. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_othr.tsx +9 -22
  363. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_schedule.tsx +5 -7
  364. package/src/modules/transactions/presentation/pages/transaction_form/transaction_form_page_verification.tsx +112 -104
  365. package/src/modules/transactions/presentation/pages/transaction_recents/transaction_recents_nombre_widget.tsx +49 -42
  366. package/src/modules/transactions/presentation/pages/transaction_recents/transaction_recents_widget.tsx +1 -1
  367. package/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.tsx +0 -1
  368. package/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions_reject.tsx +47 -48
  369. package/src/modules/transactions/presentation/pages/transaction_search/transaction_search_page.tsx +6 -10
  370. package/src/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.tsx +3 -6
  371. package/src/modules/transactions/presentation/pages/transaction_split/transaction_split_page_tx.tsx +5 -5
  372. package/src/shared/widgets/alias_widget.tsx +45 -18
  373. package/src/shared/widgets/auth_code_field.tsx +89 -0
  374. package/src/shared/widgets/calendar_date_picker.tsx +12 -11
  375. package/src/shared/widgets/confirm_action_sheet_widget.tsx +49 -35
  376. package/src/shared/widgets/emoji_select_widget.tsx +31 -29
  377. package/src/shared/widgets/frequence_input_widget.tsx +18 -24
  378. package/src/shared/widgets/frequence_select_widget.tsx +237 -117
  379. package/src/shared/widgets/image_select_widget.tsx +46 -61
  380. package/src/shared/widgets/input_text.tsx +3 -0
  381. package/src/shared/widgets/notification_dialog.tsx +70 -71
  382. package/src/shared/widgets/pin_entete.tsx +74 -0
  383. package/src/shared/widgets/select_date_widget.tsx +66 -34
  384. package/src/shared/widgets/selection.tsx +304 -5
  385. package/lib/module/modules/transactions/presentation/pages/transaction_details/sheet_box.js +0 -47
  386. package/lib/module/modules/transactions/presentation/pages/transaction_details/sheet_box.js.map +0 -1
  387. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/sheet_box.d.ts +0 -10
  388. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_details/sheet_box.d.ts.map +0 -1
  389. package/src/modules/transactions/presentation/pages/transaction_details/sheet_box.tsx +0 -30
@@ -1,16 +1,20 @@
1
- import { Keyboard, Pressable, StyleSheet, Text, View } from 'react-native';
1
+ import { MaterialIcons } from '@expo/vector-icons';
2
+ import { Keyboard, Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';
2
3
 
3
4
  import { useBloc } from '../../../../core/bloc_react';
4
5
  import { Di } from '../../../../core/di';
5
- import { useTheme } from '../../../../core/theme';
6
+ import { AppRouter, useAppRouter } from '../../../../core/router';
7
+ import { Themer, useTheme } from '../../../../core/theme';
6
8
  import type { AppLocalizations } from '../../../../l10n/app_localizations';
7
9
  import { useAppLocalizations } from '../../../../l10n/localizations';
8
10
  import { ElevatedButton } from '../../../../shared/material/buttons';
9
- import { DropdownButton } from '../../../../shared/material/dropdown';
11
+ import { showModalBottomSheet } from '../../../../shared/material/overlays';
10
12
  import { AliasPI } from '../../../../shared/models/alias_pi';
11
13
  import { UEMOACountry } from '../../../../shared/models/uemoa_countries';
12
14
  import { CustomTextInput } from '../../../../shared/widgets/input_text';
13
15
  import { MyPageContainer } from '../../../../shared/widgets/my_page_container';
16
+ import { SelectionLigne, SelectionSheet } from '../../../../shared/widgets/selection';
17
+ import { PinEntete } from '../../../../shared/widgets/pin_entete';
14
18
  import {
15
19
  AliasCreateCommandPhoneNumber,
16
20
  AliasCreateCommandPhoneNumberError,
@@ -21,7 +25,7 @@ import type { AliasMBNOCreationState } from '../bloc/alias_state';
21
25
 
22
26
  export function AliasPageCreateMBNOForm({ aliasState }: { aliasState: AliasMBNOCreationState }) {
23
27
  const localisation = useAppLocalizations();
24
- const theme = useTheme();
28
+ const router = useAppRouter();
25
29
  const aliasBloc = useBloc(AliasBloc);
26
30
  // Identité fournie par l'application hôte
27
31
  const user = Di.config.user;
@@ -38,67 +42,66 @@ export function AliasPageCreateMBNOForm({ aliasState }: { aliasState: AliasMBNOC
38
42
  const phoneText = aliasValue.phoneNumber?.phone != null ? AliasPI.formatPhoneNumber(aliasValue.phoneNumber.phone) : '';
39
43
  const phoneError = aliasValue.phoneNumber?.error;
40
44
 
45
+ const indicatif = aliasValue.phoneNumber?.indicatif;
46
+ const pays = UEMOACountry.liste.find((c) => c.phoneCode === indicatif);
47
+
48
+ // Envoi du code de vérification
49
+ const continuer = () => {
50
+ if (!aliasValue.isValid()) return;
51
+ Keyboard.dismiss();
52
+ aliasBloc.add(new AskPhoneNumberVerificationEvent(aliasValue));
53
+ };
54
+
55
+ // Feuille de choix de l'indicatif : drapeau, pays et indicatif
56
+ const choisirIndicatif = async () => {
57
+ Keyboard.dismiss();
58
+ const choisi = await showModalBottomSheet<UEMOACountry>(router, {
59
+ builder: () => <SelectIndicatif selected={pays} />,
60
+ });
61
+ if (choisi == null) return;
62
+ aliasValue.phoneNumber = new AliasCreateCommandPhoneNumber({
63
+ indicatif: choisi.phoneCode,
64
+ phone: aliasValue.phoneNumber?.phone,
65
+ });
66
+ aliasBloc.add(new CreateAliasMBNOValidationEvent(aliasValue));
67
+ };
68
+
41
69
  return (
42
70
  <MyPageContainer>
43
71
  <Pressable style={styles.column} onPress={Keyboard.dismiss} accessible={false}>
44
- <View>
45
- {/* Titre de la page */}
46
- <Text style={theme.textTheme.titleSmall}>{localisation.addPhoneNumberPageTitle}</Text>
47
- <View style={styles.gap8} />
48
- {/* Sous titre de la page */}
49
- <Text style={theme.textTheme.displaySmall}>{localisation.addPhoneNumberPageSubTitle}</Text>
72
+ <ScrollView contentContainerStyle={styles.contenu} keyboardShouldPersistTaps="handled">
73
+ {/* En-tête : pastille, titre et sous-titre centrés */}
74
+ <PinEntete
75
+ icone="phone-iphone"
76
+ titre={localisation.addPhoneNumberPageTitle}
77
+ sousTitre={localisation.addPhoneNumberPageSubTitle}
78
+ />
50
79
  <View style={styles.gap32} />
51
80
 
52
- {/* Select indicatif - Champ numéro de téléphone */}
53
- <View style={styles.row}>
54
- {/* - champ indicatif */}
55
- <View style={[styles.indicatif, { backgroundColor: theme.cardTheme.color }]}>
56
- <DropdownButton
57
- value={aliasValue.phoneNumber?.indicatif}
58
- items={UEMOACountry.liste.map((c) => ({ value: c.phoneCode, label: `${c.flag} ${c.phoneCode}` }))}
59
- onChanged={(value) => {
60
- aliasValue.phoneNumber = new AliasCreateCommandPhoneNumber({
61
- indicatif: value,
62
- phone: aliasValue.phoneNumber?.phone,
63
- });
64
- aliasBloc.add(new CreateAliasMBNOValidationEvent(aliasValue));
65
- }}
66
- />
67
- </View>
68
- <View style={styles.gap8w} />
69
- {/* - champ numéro de téléphone */}
70
- <View style={styles.expanded}>
71
- <CustomTextInput
72
- value={phoneText}
73
- hintText={localisation.addPhoneNumberFormHint}
74
- keyboardType="phone-pad"
75
- // Message d'erreur à afficher
76
- messageError={phoneError != null ? getPhoneNumberErrorMessage(phoneError, localisation) : null}
77
- // Quand le texte change
78
- onChange={(value) => {
79
- aliasValue.phoneNumber = new AliasCreateCommandPhoneNumber({
80
- indicatif: aliasValue.phoneNumber?.indicatif,
81
- phone: value.replace(/ /g, ''),
82
- });
83
- aliasBloc.add(new CreateAliasMBNOValidationEvent(aliasValue));
84
- }}
85
- />
86
- </View>
87
- </View>
88
- </View>
89
- {/* Bouton continuer */}
81
+ {/* Champ numéro de téléphone, avec l'indicatif au début */}
82
+ <CustomTextInput
83
+ value={phoneText}
84
+ hintText={localisation.addPhoneNumberFormHint}
85
+ keyboardType="phone-pad"
86
+ textInputAction="done"
87
+ onEditingComplete={continuer}
88
+ prefixIcon={<Indicatif pays={pays} onPress={choisirIndicatif} />}
89
+ // Message d'erreur à afficher
90
+ messageError={phoneError != null ? getPhoneNumberErrorMessage(phoneError, localisation) : null}
91
+ // Quand le texte change
92
+ onChange={(value) => {
93
+ aliasValue.phoneNumber = new AliasCreateCommandPhoneNumber({
94
+ indicatif: aliasValue.phoneNumber?.indicatif,
95
+ phone: value.replace(/ /g, ''),
96
+ });
97
+ aliasBloc.add(new CreateAliasMBNOValidationEvent(aliasValue));
98
+ }}
99
+ />
100
+ </ScrollView>
101
+ {/* Bouton continuer, fixé en bas */}
90
102
  <View style={styles.bottom}>
91
- <ElevatedButton
92
- onPress={
93
- aliasValue.isValid()
94
- ? () => {
95
- Keyboard.dismiss();
96
- aliasBloc.add(new AskPhoneNumberVerificationEvent(aliasValue));
97
- }
98
- : undefined
99
- }
100
- >
101
- {localisation.loginFormBtnConnexion}
103
+ <ElevatedButton onPress={aliasValue.isValid() ? continuer : undefined}>
104
+ {localisation.addPhoneNumberFormBtnContinuer}
102
105
  </ElevatedButton>
103
106
  </View>
104
107
  </Pressable>
@@ -106,6 +109,48 @@ export function AliasPageCreateMBNOForm({ aliasState }: { aliasState: AliasMBNOC
106
109
  );
107
110
  }
108
111
 
112
+ /** Indicatif choisi (drapeau et code) au début du champ, séparé du numéro par un trait */
113
+ function Indicatif({ pays, onPress }: { pays?: UEMOACountry; onPress: () => void }) {
114
+ const theme = useTheme();
115
+ return (
116
+ <Pressable accessibilityRole="button" onPress={onPress} style={styles.indicatif}>
117
+ <Text style={styles.drapeau}>{pays?.flag ?? ''}</Text>
118
+ <Text style={[theme.textTheme.bodyLarge, styles.code]}>{pays?.phoneCode ?? ''}</Text>
119
+ <MaterialIcons name="keyboard-arrow-down" size={22} color={theme.colorScheme.primary} />
120
+ <View style={[styles.trait, { backgroundColor: Themer.neural01Color }]} />
121
+ </Pressable>
122
+ );
123
+ }
124
+
125
+ /** Feuille de choix de l'indicatif ; renvoie le pays choisi */
126
+ function SelectIndicatif({ selected }: { selected?: UEMOACountry }) {
127
+ const localisation = useAppLocalizations();
128
+ const router = useAppRouter();
129
+ return (
130
+ <SelectionSheet
131
+ titre={localisation.addPhoneNumberIndicatifSheetTitle}
132
+ contenu={
133
+ <ScrollView contentContainerStyle={styles.liste}>
134
+ {UEMOACountry.liste.map((p) => (
135
+ <SelectionLigne
136
+ key={p.iso}
137
+ pastille={
138
+ <View style={styles.pastilleDrapeau}>
139
+ <Text style={styles.drapeauListe}>{p.flag}</Text>
140
+ </View>
141
+ }
142
+ texte={p.name}
143
+ detail={p.phoneCode}
144
+ choisie={p.phoneCode === selected?.phoneCode}
145
+ onPress={() => AppRouter.pop(router, { value: p })}
146
+ />
147
+ ))}
148
+ </ScrollView>
149
+ }
150
+ />
151
+ );
152
+ }
153
+
109
154
  function getPhoneNumberErrorMessage(
110
155
  error: AliasCreateCommandPhoneNumberError,
111
156
  traductions: AppLocalizations,
@@ -117,11 +162,14 @@ function getPhoneNumberErrorMessage(
117
162
 
118
163
  const styles = StyleSheet.create({
119
164
  column: { flex: 1, justifyContent: 'space-between' },
120
- gap8: { height: 8 },
121
- gap8w: { width: 8 },
122
165
  gap32: { height: 32 },
123
- row: { flexDirection: 'row', alignItems: 'flex-start' },
124
- indicatif: { paddingHorizontal: 10, borderRadius: 14, minHeight: 50, justifyContent: 'center' },
125
- expanded: { flex: 1 },
126
- bottom: { marginBottom: 10 },
166
+ contenu: { paddingTop: 8, paddingBottom: 16 },
167
+ indicatif: { flexDirection: 'row', alignItems: 'center', alignSelf: 'stretch', paddingRight: 8 },
168
+ drapeau: { fontSize: 20 },
169
+ code: { marginLeft: 6 },
170
+ trait: { width: 1, height: 24, marginLeft: 4 },
171
+ liste: { paddingHorizontal: 12, paddingBottom: 16 },
172
+ pastilleDrapeau: { width: 48, alignItems: 'center' },
173
+ drapeauListe: { fontSize: 26 },
174
+ bottom: { paddingTop: 8, paddingBottom: 16 },
127
175
  });
@@ -1,12 +1,12 @@
1
1
  import { MaterialIcons } from '@expo/vector-icons';
2
2
  import { useCallback, useEffect, useRef, useState } from 'react';
3
- import { StyleSheet, Text, View } from 'react-native';
3
+ import { Pressable, StyleSheet, Text } from 'react-native';
4
4
 
5
- import { useTheme } from '../../../../core/theme';
5
+ import { Themer, useTheme } from '../../../../core/theme';
6
6
  import { useAppLocalizations } from '../../../../l10n/localizations';
7
- import { TextButton } from '../../../../shared/material/buttons';
7
+ import { withAlpha } from '../../../../shared/utils/color';
8
8
 
9
- /** Compte à rebours d'une minute avant de pouvoir renvoyer le code OTP. */
9
+ /** « Renvoyer le code » en pastille : désactivé pendant une minute après chaque envoi, avec le temps restant. */
10
10
  export function AliasMBNOCountdownTimer({ onResendOtp }: { onResendOtp: () => void }) {
11
11
  const localisation = useAppLocalizations();
12
12
  const theme = useTheme();
@@ -35,36 +35,45 @@ export function AliasMBNOCountdownTimer({ onResendOtp }: { onResendOtp: () => vo
35
35
  };
36
36
  }, [startTimer]);
37
37
 
38
- const done = remaining === 0;
38
+ const attente = remaining > 0;
39
39
  // Temps restant
40
40
  const minutes = Math.floor(remaining / 60);
41
41
  const seconds = remaining % 60;
42
42
  const timing = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
43
- const color = theme.textButtonTheme.foregroundColor;
43
+ const primaire = theme.colorScheme.primary;
44
+ const couleur = attente ? Themer.neural03Color : primaire;
44
45
 
46
+ // Pastille : fond teinté quand le renvoi est possible
45
47
  return (
46
- <TextButton
47
- onPress={
48
- done
49
- ? () => {
50
- startTimer();
51
- // renvoyer code OTP
52
- onResendOtp();
53
- }
54
- : undefined
55
- }
48
+ <Pressable
49
+ accessibilityRole="button"
50
+ disabled={attente}
51
+ onPress={() => {
52
+ startTimer();
53
+ // renvoyer code OTP
54
+ onResendOtp();
55
+ }}
56
+ style={({ pressed }) => [
57
+ styles.pastille,
58
+ { backgroundColor: attente ? 'transparent' : withAlpha(primaire, pressed ? 0.16 : 0.08) },
59
+ ]}
56
60
  >
57
- <View style={styles.row}>
58
- <Text style={[theme.textButtonTheme.textStyle, done ? null : styles.disabled]}>
59
- {done ? `${localisation.aliaMBNOResendMessageBtn} ` : `${localisation.aliaMBNOResendMessage(timing)} `}
60
- </Text>
61
- {done && <MaterialIcons name="refresh" size={20} color={color} />}
62
- </View>
63
- </TextButton>
61
+ <MaterialIcons name={attente ? 'schedule' : 'refresh'} size={18} color={couleur} />
62
+ <Text style={[theme.textTheme.displayMedium, styles.texte, { color: couleur }]}>
63
+ {attente ? localisation.aliaMBNOResendMessage(timing) : localisation.aliaMBNOResendMessageBtn}
64
+ </Text>
65
+ </Pressable>
64
66
  );
65
67
  }
66
68
 
67
69
  const styles = StyleSheet.create({
68
- row: { flexDirection: 'row', alignItems: 'center' },
69
- disabled: { opacity: 0.38 },
70
+ pastille: {
71
+ flexDirection: 'row',
72
+ alignItems: 'center',
73
+ alignSelf: 'center',
74
+ paddingHorizontal: 16,
75
+ paddingVertical: 10,
76
+ borderRadius: 999,
77
+ },
78
+ texte: { marginLeft: 8, fontWeight: '600' },
70
79
  });
@@ -1,55 +1,48 @@
1
- import { ScrollView, StyleSheet, Text, View } from 'react-native';
1
+ import { ScrollView, StyleSheet, View } from 'react-native';
2
2
 
3
3
  import { Images } from '../../../../core/assets';
4
4
  import { useBloc } from '../../../../core/bloc_react';
5
- import { useTheme } from '../../../../core/theme';
6
5
  import { useAppLocalizations } from '../../../../l10n/localizations';
7
- import { MenuActionItem, MenuActionsWidget } from '../../../../shared/widgets/menu_actions_widget';
8
6
  import { MyPageContainer } from '../../../../shared/widgets/my_page_container';
7
+ import { SelectionOption } from '../../../../shared/widgets/selection';
8
+ import { PinEntete } from '../../../../shared/widgets/pin_entete';
9
9
  import { AliasBloc } from '../bloc/alias_bloc';
10
10
  import { CreateAliasMBNOEvent, CreateAliasSHIDEvent } from '../bloc/alias_event';
11
11
 
12
- /** Choix du type d'alias à créer (SHID ou numéro de téléphone) pour [compte]. */
12
+ /**
13
+ * Choix du type d'alias à créer pour [compte] : adresse de paiement (SHID)
14
+ * ou numéro de téléphone (MBNO).
15
+ */
13
16
  export function AliasPageCreateOptions({ compte }: { compte: string }) {
14
17
  const traductions = useAppLocalizations();
15
- const theme = useTheme();
16
18
  const aliasBloc = useBloc(AliasBloc);
17
19
 
18
20
  return (
19
21
  <MyPageContainer>
20
- <ScrollView>
21
- {/* Titre de la page */}
22
- <Text style={theme.textTheme.titleSmall}>{traductions.aliasCreatePageTitle}</Text>
23
- <View style={styles.gap5} />
24
- {/* Sous titre de la page */}
25
- <Text style={theme.textTheme.displaySmall}>{traductions.aliasCreatePageSubTitle}</Text>
22
+ <ScrollView contentContainerStyle={styles.contenu}>
23
+ {/* En-tête : pastille, titre et sous-titre centrés */}
24
+ <PinEntete
25
+ icone="alternate-email"
26
+ titre={traductions.aliasCreatePageTitle}
27
+ sousTitre={traductions.aliasCreatePageSubTitle}
28
+ />
26
29
  <View style={styles.gap32} />
27
30
 
28
- {/* Bouton créer alias SHID */}
29
- <MenuActionsWidget
30
- items={[
31
- new MenuActionItem(
32
- Images.aliasIconUser,
33
- traductions.aliasCreateSHIDTitle,
34
- traductions.aliasCreateSHIDSubTitle,
35
- () => aliasBloc.add(new CreateAliasSHIDEvent(compte)),
36
- { iconSize: 20 },
37
- ),
38
- ]}
31
+ {/* Adresse de paiement (SHID) */}
32
+ <SelectionOption
33
+ image={Images.aliasIconUser}
34
+ titre={traductions.aliasCreateSHIDTitle}
35
+ sousTitre={traductions.aliasCreateSHIDSubTitle}
36
+ onPress={() => aliasBloc.add(new CreateAliasSHIDEvent(compte))}
39
37
  />
40
- <View style={styles.gap20} />
38
+ <View style={styles.gap12} />
41
39
 
42
- {/* - type MBNO */}
43
- <MenuActionsWidget
44
- items={[
45
- new MenuActionItem(
46
- Images.aliasIconPhone,
47
- traductions.aliasCreateMBNOTitle,
48
- traductions.aliasCreateMBNOSubTitle,
49
- () => aliasBloc.add(new CreateAliasMBNOEvent(compte)),
50
- { iconSize: 20 },
51
- ),
52
- ]}
40
+ {/* Numéro de téléphone (MBNO) */}
41
+ <SelectionOption
42
+ image={Images.aliasIconPhone}
43
+ titre={traductions.aliasCreateMBNOTitle}
44
+ sousTitre={traductions.aliasCreateMBNOSubTitle}
45
+ onPress={() => aliasBloc.add(new CreateAliasMBNOEvent(compte))}
53
46
  />
54
47
  </ScrollView>
55
48
  </MyPageContainer>
@@ -57,7 +50,7 @@ export function AliasPageCreateOptions({ compte }: { compte: string }) {
57
50
  }
58
51
 
59
52
  const styles = StyleSheet.create({
60
- gap5: { height: 5 },
61
- gap20: { height: 20 },
53
+ contenu: { paddingTop: 8, paddingBottom: 24 },
54
+ gap12: { height: 12 },
62
55
  gap32: { height: 32 },
63
56
  });
@@ -1,12 +1,15 @@
1
- import { useRef, useState, type ReactNode } from 'react';
2
- import { Keyboard, StyleSheet, Text, TextInput, useWindowDimensions, View, type TextInputInstance } from 'react-native';
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ import { StyleSheet, View } from 'react-native';
3
+ import type { MaterialIcons } from '@expo/vector-icons';
3
4
 
4
- import { useTheme } from '../../../../core/theme';
5
+ import { AuthCodeField } from '../../../../shared/widgets/auth_code_field';
6
+ import { PinEntete, PinMessage } from '../../../../shared/widgets/pin_entete';
5
7
 
6
8
  /**
7
- * Saisie d'un code OTP en [pinLength] cases d'un chiffre : passage
8
- * automatique à la case suivante, retour à la précédente sur effacement,
9
- * collage du code entier dans la première case.
9
+ * Saisie d'un code reçu par SMS ou e-mail (alias par numéro de téléphone,
10
+ * refus d'une revendication, code PIN oublié) : en-tête centré, une case
11
+ * par chiffre avec la suggestion du code par le clavier, bandeau d'erreur
12
+ * et renvoi du code.
10
13
  */
11
14
  export function AliasPageOtp({
12
15
  pinLength,
@@ -17,6 +20,7 @@ export function AliasPageOtp({
17
20
  onOtpComplete,
18
21
  autoFocus = true,
19
22
  useInBottomSheet = false,
23
+ icone = 'sms',
20
24
  }: {
21
25
  pinLength: number;
22
26
  title: string;
@@ -26,95 +30,27 @@ export function AliasPageOtp({
26
30
  onOtpComplete: (otpCode: number[]) => void;
27
31
  autoFocus?: boolean;
28
32
  useInBottomSheet?: boolean;
33
+ /** Icône de la pastille de l'en-tête */
34
+ icone?: ComponentProps<typeof MaterialIcons>['name'];
29
35
  }) {
30
- const theme = useTheme();
31
- const { width: largeur } = useWindowDimensions();
32
- const [values, setValues] = useState<string[]>(() => Array(pinLength).fill(''));
33
- const inputs = useRef<(TextInputInstance | null)[]>([]);
34
-
35
- const isTablet = largeur >= 600;
36
- const paddingX = 20;
37
- const formWidth = largeur - (useInBottomSheet && isTablet ? 40 : 0) - paddingX * 2;
38
- const fieldWidth = formWidth / pinLength - 8;
39
-
40
- const verifyOtpCompletion = (next: string[]) => {
41
- const pin = next.filter((v) => /^\d$/.test(v)).map(Number);
42
- if (pin.length === pinLength) onOtpComplete(pin);
43
- };
44
-
45
- const handleOtpInputChange = (raw: string, index: number) => {
46
- const text = raw.replace(/\D/g, '');
47
- // Cas où l'utilisateur colle tout le code OTP dans le premier champ
48
- if (index === 0 && text.length === pinLength) {
49
- const next = text.split('');
50
- setValues(next);
51
- Keyboard.dismiss();
52
- verifyOtpCompletion(next);
53
- return;
54
- }
55
- const next = [...values];
56
- next[index] = text.slice(-1);
57
- setValues(next);
58
- if (next[index].length === 1 && index < pinLength - 1) {
59
- inputs.current[index + 1]?.focus();
60
- } else if (next[index].length === 0 && index > 0) {
61
- inputs.current[index - 1]?.focus();
62
- }
63
- verifyOtpCompletion(next);
64
- };
65
-
66
- const onKeyPress = (key: string, index: number) => {
67
- // Effacement sur une case déjà vide : retour à la case précédente
68
- if (key === 'Backspace' && values[index].length === 0 && index > 0) {
69
- const next = [...values];
70
- next[index - 1] = '';
71
- setValues(next);
72
- inputs.current[index - 1]?.focus();
73
- }
74
- };
75
-
76
- const input = theme.inputDecorationTheme;
77
36
  return (
78
37
  <View>
79
- <Text style={theme.textTheme.titleSmall}>{title}</Text>
80
- <View style={styles.gap5} />
81
- <Text style={theme.textTheme.displaySmall}>{subtitle}</Text>
82
- <View style={styles.gap32} />
83
- <View style={styles.row}>
84
- {values.map((value, index) => (
85
- <TextInput
86
- key={index}
87
- ref={(ref) => {
88
- inputs.current[index] = ref;
89
- }}
90
- value={value}
91
- keyboardType="number-pad"
92
- autoFocus={autoFocus && index === 0}
93
- maxLength={index === 0 ? pinLength : 1}
94
- onChangeText={(text) => handleOtpInputChange(text, index)}
95
- onKeyPress={({ nativeEvent }) => onKeyPress(nativeEvent.key, index)}
96
- textAlign="center"
97
- style={[
98
- theme.textTheme.headlineMedium,
99
- styles.field,
100
- { width: fieldWidth, backgroundColor: input.fillColor, borderRadius: input.borderRadius },
101
- ]}
102
- />
103
- ))}
104
- </View>
105
- <View style={styles.gap24} />
106
- {errorMessage != null && <Text style={[input.errorStyle, styles.error]}>{`⚠ ${errorMessage}`}</Text>}
38
+ {/* Dans une feuille : pastille plus petite */}
39
+ <PinEntete icone={icone} titre={title} sousTitre={subtitle} compact={useInBottomSheet} />
40
+ <View style={{ height: useInBottomSheet ? 20 : 28 }} />
41
+ <AuthCodeField
42
+ longueur={pinLength}
43
+ autoFocus={autoFocus}
44
+ erreur={errorMessage != null}
45
+ onChanged={() => undefined}
46
+ onComplete={(code) => onOtpComplete(code.split('').map(Number))}
47
+ />
48
+ <PinMessage message={errorMessage} />
107
49
  {countdownTimer != null && <View style={styles.timer}>{countdownTimer}</View>}
108
50
  </View>
109
51
  );
110
52
  }
111
53
 
112
54
  const styles = StyleSheet.create({
113
- gap5: { height: 5 },
114
- gap24: { height: 24 },
115
- gap32: { height: 32 },
116
- row: { flexDirection: 'row', justifyContent: 'space-between' },
117
- field: { height: 56, padding: 0 },
118
- error: { marginLeft: 8, marginTop: 2, marginBottom: 5 },
119
- timer: { flexDirection: 'row', justifyContent: 'flex-start' },
55
+ timer: { marginTop: 12, alignItems: 'center' },
120
56
  });
@@ -27,7 +27,8 @@ export class CategorieService implements CategorieInputPort {
27
27
  }
28
28
 
29
29
  async list(): Promise<Categorie[]> {
30
- return (await this.categorieOutputPort.list()).sort(byLabelDesc);
30
+ // Tri sur une copie : la liste reçue peut être non modifiable
31
+ return [...(await this.categorieOutputPort.list())].sort(byLabelDesc);
31
32
  }
32
33
 
33
34
  async update(categorie: Categorie): Promise<Categorie> {