@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,18 +1,20 @@
1
1
  import { MaterialIcons } from '@expo/vector-icons';
2
2
  import { useState } from 'react';
3
- import { Keyboard, Pressable, ScrollView, StyleSheet, Text, TextInput, useWindowDimensions, View } from 'react-native';
3
+ import { Keyboard, Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';
4
4
 
5
5
  import { useBloc } from '../../../../core/bloc_react';
6
6
  import { AppRouter, useAppRouter } from '../../../../core/router';
7
7
  import { Themer, useTheme } from '../../../../core/theme';
8
8
  import { useAppLocalizations } from '../../../../l10n/localizations';
9
9
  import { ElevatedButton } from '../../../../shared/material/buttons';
10
- import { Card } from '../../../../shared/material/card';
11
- import { AppBar, Scaffold } from '../../../../shared/material/scaffold';
10
+ import { Scaffold } from '../../../../shared/material/scaffold';
12
11
  import { AliasPI } from '../../../../shared/models/alias_pi';
12
+ import { withAlpha } from '../../../../shared/utils/color';
13
13
  import { CircleAvatarWidget } from '../../../../shared/widgets/circle_avatar_widget';
14
14
  import { CustomSnackBar } from '../../../../shared/widgets/custom_snack_bar';
15
15
  import { MyPageContainer } from '../../../../shared/widgets/my_page_container';
16
+ import { SelectionBoutons } from '../../../../shared/widgets/selection';
17
+ import { ProfileAppBar } from '../../../profile/presentation/pages/profile_app_bar';
16
18
  import { ContactPI } from '../../domain/contact_pi';
17
19
  import type { PhoneContact } from '../../domain/phone_contact';
18
20
  import { ContactBloc } from '../bloc/contact_bloc';
@@ -36,7 +38,6 @@ export function ContactSelectPage({ onContinue, title, minSelected, maxSelected,
36
38
  const traductions = useAppLocalizations();
37
39
  const theme = useTheme();
38
40
  const router = useAppRouter();
39
- const window = useWindowDimensions();
40
41
  const contactBloc = useBloc(ContactBloc);
41
42
  const [selectedContacts, setSelectedContacts] = useState<ContactPI[]>([]);
42
43
  const [searchHasFocus, setSearchHasFocus] = useState(false);
@@ -96,16 +97,28 @@ export function ContactSelectPage({ onContinue, title, minSelected, maxSelected,
96
97
 
97
98
  const canContinue = selectedContacts.length >= (minSelected ?? 1);
98
99
 
100
+ const primaire = theme.colorScheme.primary;
101
+
99
102
  return (
100
- <Scaffold appBar={<AppBar onBack={() => AppRouter.pop(router)} />}>
101
- <MyPageContainer>
102
- <Text style={theme.textTheme.titleSmall}>{title ?? traductions.transactionSplitTitle}</Text>
103
- <View style={styles.gap10} />
104
- {/* Recherche */}
105
- <Card>
106
- <View style={[styles.search, { backgroundColor: theme.inputDecorationTheme.fillColor }]}>
107
- <MaterialIcons name="search" size={24} color={Themer.neural03Color} />
103
+ // Titre dans la barre, comme dans le profil
104
+ <Scaffold appBar={<ProfileAppBar titre={title ?? traductions.transactionSplitTitle} />}>
105
+ <View style={styles.flex}>
106
+ <MyPageContainer>
107
+ <View style={styles.gap8} />
108
+ {/* Recherche : contour de la couleur principale quand elle a le focus */}
109
+ <View
110
+ style={[
111
+ styles.search,
112
+ {
113
+ backgroundColor: theme.cardColor,
114
+ borderColor: searchHasFocus ? primaire : withAlpha(Themer.neural03Color, 0.2),
115
+ borderWidth: searchHasFocus ? 1.5 : 1,
116
+ },
117
+ ]}
118
+ >
119
+ <MaterialIcons name="search" size={22} color={searchHasFocus ? primaire : Themer.neural03Color} />
108
120
  <TextInput
121
+ value={searchKeyword ?? ''}
109
122
  style={[theme.textTheme.displayLarge, styles.searchInput]}
110
123
  placeholder={traductions.transactionsSendInputHint}
111
124
  placeholderTextColor={Themer.neural03Color}
@@ -116,79 +129,98 @@ export function ContactSelectPage({ onContinue, title, minSelected, maxSelected,
116
129
  setSearchKeyword(value.length > 0 ? value : null);
117
130
  }}
118
131
  />
132
+ {(searchKeyword ?? '').length > 0 && (
133
+ <Pressable
134
+ accessibilityRole="button"
135
+ hitSlop={8}
136
+ style={styles.effacer}
137
+ onPress={() => {
138
+ contactBloc.add(new ContactSearchEvent(''));
139
+ setSearchKeyword(null);
140
+ }}
141
+ >
142
+ <MaterialIcons name="close" size={18} color={Themer.neural03Color} />
143
+ </Pressable>
144
+ )}
145
+ </View>
146
+ {/* Contacts sélectionnés : rangée d'avatars sur un fond léger */}
147
+ {hasSelection && (
148
+ <ScrollView
149
+ horizontal
150
+ showsHorizontalScrollIndicator={false}
151
+ style={[styles.selected, { backgroundColor: withAlpha(primaire, 0.06) }]}
152
+ contentContainerStyle={styles.selectedList}
153
+ >
154
+ {selectedContacts.map((contact) => (
155
+ <View key={contact.alias ?? contact.name} style={styles.chip}>
156
+ <View>
157
+ <CircleAvatarWidget nom={contact.name} rounded radius={44} />
158
+ <Pressable
159
+ accessibilityRole="button"
160
+ hitSlop={8}
161
+ onPress={() => removeContact(contact.alias!)}
162
+ style={[styles.remove, { backgroundColor: theme.colorScheme.error, borderColor: theme.colorScheme.surface }]}
163
+ >
164
+ <MaterialIcons name="close" size={12} color="white" />
165
+ </Pressable>
166
+ </View>
167
+ <View style={styles.gap4} />
168
+ <Text numberOfLines={1} style={[theme.textTheme.displaySmall, styles.chipName]}>
169
+ {contact.name}
170
+ </Text>
171
+ </View>
172
+ ))}
173
+ </ScrollView>
174
+ )}
175
+ <View style={styles.gap12} />
176
+ {/* Liste des contacts */}
177
+ <View style={styles.flex}>
178
+ <ContactAliasListWidget
179
+ hideTitle
180
+ expanded
181
+ selectedContacts={selectedContacts}
182
+ onSelect={(contact, alias, isSelected) => void handleContactSelected(contact, alias, isSelected)}
183
+ searchKeyword={searchKeyword}
184
+ />
119
185
  </View>
120
- </Card>
121
- <View style={styles.gap10} />
122
- {/* Contacts sélectionnés */}
186
+ </MyPageContainer>
187
+ {/* Continuer (avec le nombre de contacts choisis), fixé en bas */}
123
188
  {hasSelection && (
124
- <>
125
- <View style={{ height: window.height * 0.12 }}>
126
- <Card style={styles.selectedCard}>
127
- <ScrollView horizontal contentContainerStyle={styles.selectedList} showsHorizontalScrollIndicator={false}>
128
- {selectedContacts.map((contact) => (
129
- <View key={contact.alias ?? contact.name} style={styles.chip}>
130
- <View>
131
- <CircleAvatarWidget nom={contact.name} rounded radius={32} />
132
- <Pressable
133
- accessibilityRole="button"
134
- hitSlop={8}
135
- onPress={() => removeContact(contact.alias!)}
136
- style={[styles.remove, { backgroundColor: theme.colorScheme.error, borderColor: theme.colorScheme.surface }]}
137
- >
138
- <MaterialIcons name="close" size={12} color="white" />
139
- </Pressable>
140
- </View>
141
- <View style={styles.gap6} />
142
- <Text numberOfLines={1} style={[theme.textTheme.bodySmall, styles.chipName]}>
143
- {contact.name}
144
- </Text>
145
- </View>
146
- ))}
147
- </ScrollView>
148
- </Card>
149
- </View>
150
- <View style={styles.gap10} />
151
- </>
152
- )}
153
- {/* Liste des contacts */}
154
- <View style={styles.flex}>
155
- <ContactAliasListWidget
156
- hideTitle
157
- expanded
158
- selectedContacts={selectedContacts}
159
- onSelect={(contact, alias, isSelected) => void handleContactSelected(contact, alias, isSelected)}
160
- searchKeyword={searchKeyword}
189
+ <SelectionBoutons
190
+ boutons={[
191
+ <ElevatedButton
192
+ key="continuer"
193
+ onPress={
194
+ canContinue
195
+ ? () => {
196
+ Keyboard.dismiss();
197
+ onContinue(selectedContacts);
198
+ }
199
+ : undefined
200
+ }
201
+ >
202
+ {traductions.contactSelectBtnContinue(String(selectedContacts.length))}
203
+ </ElevatedButton>,
204
+ ]}
161
205
  />
162
- </View>
163
- {hasSelection && (
164
- <ElevatedButton
165
- onPress={
166
- canContinue
167
- ? () => {
168
- Keyboard.dismiss();
169
- onContinue(selectedContacts);
170
- }
171
- : undefined
172
- }
173
- >
174
- {traductions.btnTextContinue}
175
- </ElevatedButton>
176
206
  )}
177
- </MyPageContainer>
207
+ </View>
178
208
  </Scaffold>
179
209
  );
180
210
  }
181
211
 
182
212
  const styles = StyleSheet.create({
183
213
  flex: { flex: 1 },
184
- gap6: { height: 6 },
185
- gap10: { height: 10 },
186
- search: { height: 36, flexDirection: 'row', alignItems: 'center', paddingHorizontal: 12 },
214
+ gap4: { height: 4 },
215
+ gap8: { height: 8 },
216
+ gap12: { height: 12 },
217
+ search: { height: 48, borderRadius: 14, flexDirection: 'row', alignItems: 'center', paddingHorizontal: 12 },
187
218
  searchInput: { flex: 1, marginLeft: 8, paddingVertical: 0 },
188
- selectedCard: { flex: 1, marginHorizontal: 8, borderRadius: 16, elevation: 1 },
189
- selectedList: { padding: 8, alignItems: 'center' },
190
- chip: { alignItems: 'center', marginRight: 12 },
191
- chipName: { width: 70, textAlign: 'center', fontWeight: '500' },
219
+ effacer: { paddingHorizontal: 4 },
220
+ selected: { flexGrow: 0, marginTop: 12, borderRadius: 16 },
221
+ selectedList: { paddingHorizontal: 12, paddingVertical: 10, alignItems: 'center' },
222
+ chip: { width: 56, alignItems: 'center', marginRight: 14 },
223
+ chipName: { width: 56, textAlign: 'center', fontWeight: '500' },
192
224
  remove: {
193
225
  position: 'absolute',
194
226
  right: -4,
@@ -1,18 +1,22 @@
1
+ import { MaterialIcons } from '@expo/vector-icons';
1
2
  import { useReducer, useState } from 'react';
2
3
  import { Keyboard, ScrollView, StyleSheet, Text, View } from 'react-native';
3
4
 
4
5
  import { useBloc, useBlocBuilder, useBlocListener, useCreateBloc } from '../../../../../core/bloc_react';
5
6
  import { AppRouter, useAppRouter } from '../../../../../core/router';
6
- import { useTheme } from '../../../../../core/theme';
7
+ import { Themer, useTheme } from '../../../../../core/theme';
7
8
  import type { AppLocalizations } from '../../../../../l10n/app_localizations';
8
9
  import { useAppLocalizations } from '../../../../../l10n/localizations';
9
10
  import { ElevatedButton } from '../../../../../shared/material/buttons';
10
- import { AppBar, Scaffold } from '../../../../../shared/material/scaffold';
11
+ import { Scaffold } from '../../../../../shared/material/scaffold';
11
12
  import { AliasPI } from '../../../../../shared/models/alias_pi';
13
+ import { withAlpha } from '../../../../../shared/utils/color';
14
+ import { CircleAvatarWidget } from '../../../../../shared/widgets/circle_avatar_widget';
12
15
  import { InputAliasWidget } from '../../../../../shared/widgets/input_alias_widget';
13
16
  import { CustomTextInput } from '../../../../../shared/widgets/input_text';
14
17
  import { CustomLoadingDialog } from '../../../../../shared/widgets/loading_page';
15
- import { MyPageContainer } from '../../../../../shared/widgets/my_page_container';
18
+ import { SelectionBoutons } from '../../../../../shared/widgets/selection';
19
+ import { ProfileAppBar } from '../../../../profile/presentation/pages/profile_app_bar';
16
20
  import { ContactPI } from '../../../domain/contact_pi';
17
21
  import { contactIdOf, type PhoneContact } from '../../../domain/phone_contact';
18
22
  import { ContactBloc } from '../../bloc/contact_bloc';
@@ -87,28 +91,54 @@ export function ContactCreatePage({ contact: phoneContact, contactAlias, mbnoFor
87
91
  !(s instanceof ContactCreateLoadingState) && contact.name.length > 0 && aliasCommand.isValid();
88
92
  const valid = isFormValid(state);
89
93
 
94
+ const nom = contact.name.trim();
95
+ const primaire = theme.colorScheme.primary;
96
+
90
97
  return (
91
- <Scaffold appBar={<AppBar onBack={() => AppRouter.pop(router)} />}>
92
- <MyPageContainer>
93
- <ScrollView style={styles.flex} keyboardShouldPersistTaps="handled">
94
- {/* Titre de la page */}
95
- <Text style={theme.textTheme.titleSmall}>{title(traductions, phoneContact, contactAlias)}</Text>
96
- <View style={styles.gap5} />
97
- {/* Sous titre de la page */}
98
- <Text style={theme.textTheme.displaySmall}>{subtitle(traductions, phoneContact, contactAlias)}</Text>
99
- <View style={styles.gap32} />
100
- {/* Champ Nom du contact */}
101
- <CustomTextInput
102
- readOnly={phoneContact != null}
103
- defaultValue={contact.name}
104
- labelText={traductions.contactCreateNameLabel}
105
- messageError={contact.name.length === 0 ? traductions.contactCreateNameErrorEmpty : ''}
106
- onChange={(value) => {
107
- contact.name = value;
108
- rebuild();
109
- }}
110
- />
111
- <View style={styles.gap16} />
98
+ // Titre dans la barre, comme dans le profil
99
+ <Scaffold appBar={<ProfileAppBar titre={title(traductions, phoneContact, contactAlias)} />}>
100
+ <View style={styles.flex}>
101
+ <ScrollView style={styles.flex} contentContainerStyle={styles.content} keyboardShouldPersistTaps="handled">
102
+ {/* Avatar (photo ou initiales du nom saisi), nom en modification, sous-titre */}
103
+ <View style={styles.entete}>
104
+ {nom.length === 0 ? (
105
+ <View style={[styles.pastille, { backgroundColor: withAlpha(primaire, 0.12) }]}>
106
+ <MaterialIcons name="person-add-alt-1" size={32} color={primaire} />
107
+ </View>
108
+ ) : (
109
+ <CircleAvatarWidget nom={nom} photo={phoneContact?.photo} rounded radius={72} />
110
+ )}
111
+ {phoneContact != null && nom.length > 0 ? (
112
+ <>
113
+ <View style={styles.gap12} />
114
+ <Text numberOfLines={2} style={[theme.textTheme.headlineSmall, styles.centre, styles.nom]}>
115
+ {nom}
116
+ </Text>
117
+ <View style={styles.gap4} />
118
+ </>
119
+ ) : (
120
+ <View style={styles.gap12} />
121
+ )}
122
+ <Text style={[theme.textTheme.displaySmall, styles.centre, { color: Themer.neural03Color }]}>
123
+ {subtitle(traductions, phoneContact, contactAlias)}
124
+ </Text>
125
+ </View>
126
+ <View style={styles.gap28} />
127
+ {/* Champ Nom du contact (création seulement ; en modification, le nom est sous l'avatar) */}
128
+ {phoneContact == null && (
129
+ <>
130
+ <CustomTextInput
131
+ defaultValue={contact.name}
132
+ labelText={traductions.contactCreateNameLabel}
133
+ messageError={contact.name.length === 0 ? traductions.contactCreateNameErrorEmpty : ''}
134
+ onChange={(value) => {
135
+ contact.name = value;
136
+ rebuild();
137
+ }}
138
+ />
139
+ <View style={styles.gap16} />
140
+ </>
141
+ )}
112
142
  {/* Champ Alias */}
113
143
  <InputAliasWidget
114
144
  command={aliasCommand}
@@ -118,26 +148,30 @@ export function ContactCreatePage({ contact: phoneContact, contactAlias, mbnoFor
118
148
  }}
119
149
  />
120
150
  </ScrollView>
121
- <View style={styles.bottom}>
122
- <ElevatedButton
123
- onPress={
124
- valid
125
- ? () => {
126
- Keyboard.dismiss();
127
- contactBloc.add(
128
- new ContactCreateSubmitEvent(contact, {
129
- contactId: phoneContact != null ? contactIdOf(phoneContact) : null,
130
- contactOldAlias: contactAlias,
131
- }),
132
- );
133
- }
134
- : undefined
135
- }
136
- >
137
- {traductions.contactBtnSave}
138
- </ElevatedButton>
139
- </View>
140
- </MyPageContainer>
151
+ {/* Enregistrer, fixé en bas */}
152
+ <SelectionBoutons
153
+ boutons={[
154
+ <ElevatedButton
155
+ key="enregistrer"
156
+ onPress={
157
+ valid
158
+ ? () => {
159
+ Keyboard.dismiss();
160
+ contactBloc.add(
161
+ new ContactCreateSubmitEvent(contact, {
162
+ contactId: phoneContact != null ? contactIdOf(phoneContact) : null,
163
+ contactOldAlias: contactAlias,
164
+ }),
165
+ );
166
+ }
167
+ : undefined
168
+ }
169
+ >
170
+ {traductions.contactBtnSave}
171
+ </ElevatedButton>,
172
+ ]}
173
+ />
174
+ </View>
141
175
  </Scaffold>
142
176
  );
143
177
  }
@@ -156,8 +190,13 @@ function subtitle(traductions: AppLocalizations, contact?: PhoneContact | null,
156
190
 
157
191
  const styles = StyleSheet.create({
158
192
  flex: { flex: 1 },
159
- gap5: { height: 5 },
193
+ content: { paddingHorizontal: 20, paddingTop: 8, paddingBottom: 16 },
194
+ entete: { alignItems: 'center' },
195
+ pastille: { width: 72, height: 72, borderRadius: 36, alignItems: 'center', justifyContent: 'center' },
196
+ centre: { textAlign: 'center' },
197
+ nom: { fontWeight: '600' },
198
+ gap4: { height: 4 },
199
+ gap12: { height: 12 },
160
200
  gap16: { height: 16 },
161
- gap32: { height: 32 },
162
- bottom: { paddingVertical: 16 },
201
+ gap28: { height: 28 },
163
202
  });
@@ -26,6 +26,7 @@ import { ContactListEvent } from '../../../contacts/presentation/bloc/contact_ev
26
26
  import { ParametreHideAmountBloc } from '../../../profile/presentation/bloc/hide_amount/hide_amount_bloc';
27
27
  import { ParametreHideAmountInitEvent } from '../../../profile/presentation/bloc/hide_amount/hide_amount_event';
28
28
  import type { Fonctionnalite } from '../../../search/domain/models/fonctionnalite';
29
+ import { SearchBtnWidget } from '../../../search/presentation/pages/search_btn_widget';
29
30
  import { fonctionnalitesRecherchables } from '../../../search/presentation/pages/search_fonctionnalites';
30
31
  import { TransactionSendBloc } from '../../../transactions/presentation/bloc/transaction_send/transaction_send_bloc';
31
32
  import { TransactionSendUpdateStateEvent } from '../../../transactions/presentation/bloc/transaction_send/transaction_send_event';
@@ -108,15 +109,7 @@ export function HomePage({ selectedTab }: { selectedTab?: number }) {
108
109
  <HomeToolbarLeading user={Di.config.user} enabled={hasAlias} />
109
110
  <View style={styles.actions}>
110
111
  {/* Recherche dans les fonctionnalités (grisé si le compte actif n'a pas d'alias) */}
111
- <Pressable
112
- accessibilityRole="button"
113
- accessibilityLabel={traductions.searchTitle}
114
- disabled={!hasAlias}
115
- onPress={() => void ouvrirRecherche()}
116
- style={[styles.action, { opacity: hasAlias ? 1 : 0.38 }]}
117
- >
118
- <MaterialIcons name="search" size={24} color={theme.appBarTheme.foregroundColor} />
119
- </Pressable>
112
+ <SearchBtnWidget onPress={hasAlias ? () => void ouvrirRecherche() : undefined} />
120
113
  {/* Notifications (grisé si le compte actif n'a pas d'alias) */}
121
114
  <NotificationBtnOpenWidget enabled={hasAlias} />
122
115
  </View>
@@ -10,6 +10,7 @@ import {
10
10
  import { SafeAreaView } from 'react-native-safe-area-context';
11
11
 
12
12
  import { Themer } from '../../../../core/theme';
13
+ import { TextButton } from '../../../../shared/material/buttons';
13
14
  import type { SupportedLocaleCode } from '../../../../l10n/app_localizations';
14
15
  import { useAppLocalizations } from '../../../../l10n/localizations';
15
16
  import { IntroductionItem } from './introduction_item';
@@ -104,10 +105,17 @@ export function IntroductionPage() {
104
105
  />
105
106
  )}
106
107
  />
108
+ {/* Passer : directement au dernier écran */}
109
+ {currentPage < nbItems - 1 && (
110
+ <TextButton style={styles.passer} textStyle={{ color: Themer.whiteColor }} onPress={() => goTo(nbItems - 1)}>
111
+ {localizations.introductionPasser}
112
+ </TextButton>
113
+ )}
107
114
  </SafeAreaView>
108
115
  );
109
116
  }
110
117
 
111
118
  const styles = StyleSheet.create({
112
119
  page: { flex: 1, backgroundColor: Themer.brownColor },
120
+ passer: { position: 'absolute', top: 40, right: 8 },
113
121
  });
@@ -1,8 +1,5 @@
1
- import { StyleSheet, Text, View } from 'react-native';
2
-
3
1
  import { useBloc } from '../../../../core/bloc_react';
4
2
  import { AppRouter, useAppRouter } from '../../../../core/router';
5
- import { Themer, useTheme } from '../../../../core/theme';
6
3
  import type { AppLocalizations } from '../../../../l10n/app_localizations';
7
4
  import { ElevatedButton } from '../../../../shared/material/buttons';
8
5
  import { ConfigBloc } from '../../../config/adapters/ui/bloc/config_bloc';
@@ -10,48 +7,31 @@ import { ConfigChangeEvent } from '../../../config/adapters/ui/bloc/config_event
10
7
  import { ConfigKey } from '../../../config/domain/models/config_keys';
11
8
  import type { IntroductionItem } from './introduction_item';
12
9
 
10
+ /**
11
+ * Pied de chaque écran de l'introduction : « Continuer », toujours visible,
12
+ * pour ne pas obliger à faire défiler toutes les vidéos.
13
+ */
13
14
  export function IntroductionFooter({
14
- item,
15
- pageSize,
16
15
  traductions,
17
16
  }: {
18
17
  item: IntroductionItem;
19
18
  pageSize: number;
20
19
  traductions: AppLocalizations;
21
20
  }) {
22
- const theme = useTheme();
23
21
  const router = useAppRouter();
24
22
  const configBloc = useBloc(ConfigBloc);
25
-
26
- if (item.position === pageSize - 1) {
27
- return (
28
- <ElevatedButton
29
- style={styles.button}
30
- onPress={() => {
31
- configBloc.add(new ConfigChangeEvent(ConfigKey.introductionPassed, '1'));
32
- // Contrairement à l'app de référence (qui enchaîne sur la
33
- // connexion/session), le SDK n'a pas de login : l'utilisateur est
34
- // déjà authentifié par l'hôte, donc on enchaîne directement sur
35
- // la demande de permission contacts.
36
- AppRouter.pushReplacement(router, AppRouter.permissions);
37
- }}
38
- >
39
- <Text style={[theme.textTheme.titleSmall, styles.center]}>{traductions.btnTextContinue}</Text>
40
- </ElevatedButton>
41
- );
42
- }
43
23
  return (
44
- <View style={styles.column}>
45
- <Text style={[theme.textTheme.bodyLarge, { color: Themer.whiteColor }]}>{traductions.introductionFooterTitle}</Text>
46
- <View style={styles.gap5} />
47
- <Text style={[theme.textTheme.bodyLarge, { color: Themer.amberColor }]}>{traductions.introductionFooterSubtitle}</Text>
48
- </View>
24
+ <ElevatedButton
25
+ onPress={() => {
26
+ configBloc.add(new ConfigChangeEvent(ConfigKey.introductionPassed, '1'));
27
+ // Contrairement à l'app de référence (qui enchaîne sur la
28
+ // connexion/session), le SDK n'a pas de login : l'utilisateur est
29
+ // déjà authentifié par l'hôte, donc on enchaîne directement sur
30
+ // la demande de permission contacts.
31
+ AppRouter.pushReplacement(router, AppRouter.permissions);
32
+ }}
33
+ >
34
+ {traductions.btnTextContinue}
35
+ </ElevatedButton>
49
36
  );
50
37
  }
51
-
52
- const styles = StyleSheet.create({
53
- button: { minHeight: 60 },
54
- center: { textAlign: 'center' },
55
- column: { alignItems: 'center', justifyContent: 'center' },
56
- gap5: { height: 5 },
57
- });
@@ -47,18 +47,30 @@ export function IntroductionPageItem({
47
47
  }
48
48
  }, [active, videoPlayer]);
49
49
 
50
+ // Appui long : la vidéo se met en pause, et reprend au relâchement
51
+ const [enPause, setEnPause] = useState(false);
52
+ const pause = () => {
53
+ setEnPause(true);
54
+ videoPlayer.pause();
55
+ };
56
+ const reprendre = () => {
57
+ if (!enPause) return;
58
+ setEnPause(false);
59
+ if (active) videoPlayer.play();
60
+ };
61
+
50
62
  return (
51
63
  <View style={{ width }}>
52
64
  {/* Zones cliquables invisibles sur les côtés, sous le contenu : les
53
65
  touches qui ne tombent pas sur le contenu (ex. bouton Continuer)
54
66
  les atteignent, et le glissement horizontal reste possible. */}
55
67
  <View style={[StyleSheet.absoluteFill, styles.row]}>
56
- {/* Zone gauche (25%) */}
57
- <Pressable style={styles.side} onPress={onPrevious} />
58
- {/* Zone centrale (50% - non cliquable) */}
59
- <View style={styles.middle} />
68
+ {/* Zone gauche (25%) ; appui long n'importe où : pause de la vidéo */}
69
+ <Pressable style={styles.side} onPress={onPrevious} onLongPress={pause} onPressOut={reprendre} />
70
+ {/* Zone centrale (50%) : seulement la pause à l'appui long */}
71
+ <Pressable style={styles.middle} onLongPress={pause} onPressOut={reprendre} />
60
72
  {/* Zone droite (25%) */}
61
- <Pressable style={styles.side} onPress={onNext} />
73
+ <Pressable style={styles.side} onPress={onNext} onLongPress={pause} onPressOut={reprendre} />
62
74
  </View>
63
75
  <View style={styles.page} pointerEvents="box-none">
64
76
  {/* barre de progression */}
@@ -82,7 +82,7 @@ export function ProfileParametrePageNotifications() {
82
82
  <ProfileMenuTile
83
83
  key="notifications"
84
84
  image={Images.iconsCloche}
85
- titre={traductions.notificationPageTitle}
85
+ titre={traductions.appSettingPageMenuNotificationSonActiveTitle}
86
86
  onPress={basculerNotifications}
87
87
  trailing={<SwitchThemed value={enabled} onChange={basculerNotifications} />}
88
88
  />,
@@ -144,7 +144,7 @@ export function ProfileParametrePageNotifications() {
144
144
  <ProfileMenuTile
145
145
  key="son"
146
146
  image={Images.iconsCloche}
147
- titre={traductions.notificationPageTitle}
147
+ titre={traductions.appSettingPageMenuNotificationSonActiveTitle}
148
148
  sousTitre={sonEnabled ? traductions.statutActive : traductions.statutDesactive}
149
149
  onPress={() => void AppRouter.push(router, AppRouter.profileParametreNotificationsSon)}
150
150
  />,
@@ -71,7 +71,7 @@ export function ProfileParametrePageNotificationsSon() {
71
71
  <ProfileMenuTile
72
72
  key="son"
73
73
  image={Images.iconsCloche}
74
- titre={traductions.notificationPageTitle}
74
+ titre={traductions.appSettingPageMenuNotificationSonActiveTitle}
75
75
  onPress={basculer}
76
76
  trailing={<SwitchThemed value={enabled} onChange={basculer} />}
77
77
  />,
@@ -15,6 +15,7 @@ import { withAlpha } from '../../../../shared/utils/color';
15
15
  import { AvatarWidget } from '../../../../shared/widgets/avatar_widget';
16
16
  import { ClipboardWidget } from '../../../../shared/widgets/clipboard_widget';
17
17
  import { ImageSelectWidget } from '../../../../shared/widgets/image_select_widget';
18
+ import { SelectionOption } from '../../../../shared/widgets/selection';
18
19
  import { AliasBloc } from '../../../alias/presentation/bloc/alias_bloc';
19
20
  import { AliasExistState } from '../../../alias/presentation/bloc/alias_state';
20
21
  import { ProfileAvatar } from '../../domain/profile_avatar';
@@ -45,21 +46,16 @@ export function ProfilePageAvatar() {
45
46
  otherActions={
46
47
  avatar != null
47
48
  ? [
48
- <Pressable
49
+ <SelectionOption
49
50
  key="delete"
50
- accessibilityRole="button"
51
- style={styles.deleteTile}
51
+ icone="delete-forever"
52
+ titre={traductions.btnTextDelete}
53
+ couleur={Themer.systemErrorColor}
52
54
  onPress={() => {
53
55
  AppRouter.pop(router);
54
56
  void ProfileAvatar.remove();
55
57
  }}
56
- >
57
- <MaterialIcons name="delete-forever" size={24} color={Themer.systemErrorColor} />
58
- <Text style={[theme.textTheme.bodyLarge, styles.deleteText, { color: Themer.systemErrorColor }]}>
59
- {traductions.btnTextDelete}
60
- </Text>
61
- <MaterialIcons name="arrow-forward-ios" size={16} color={Themer.systemErrorColor} />
62
- </Pressable>,
58
+ />,
63
59
  ]
64
60
  : []
65
61
  }
@@ -147,6 +143,4 @@ const styles = StyleSheet.create({
147
143
  maxWidth: '100%',
148
144
  },
149
145
  aliasTexte: { flexShrink: 1, marginHorizontal: 6 },
150
- deleteTile: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 16, minHeight: 56 },
151
- deleteText: { flex: 1, marginHorizontal: 16 },
152
146
  });