@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
@@ -4,10 +4,10 @@ import { Keyboard, StyleSheet, Text, View } from 'react-native';
4
4
  import { BlocProvider, useCreateBloc } from '../../../../../core/bloc_react';
5
5
  import { Di } from '../../../../../core/di';
6
6
  import { AppRouter, useAppRouter } from '../../../../../core/router';
7
- import { useTheme } from '../../../../../core/theme';
7
+ import { Themer, useTheme } from '../../../../../core/theme';
8
8
  import { useAppLocalizations } from '../../../../../l10n/localizations';
9
9
  import { ElevatedButton } from '../../../../../shared/material/buttons';
10
- import { AppBar, Scaffold } from '../../../../../shared/material/scaffold';
10
+ import { Scaffold } from '../../../../../shared/material/scaffold';
11
11
  import { MyPageContainer } from '../../../../../shared/widgets/my_page_container';
12
12
  import type { ContactPI } from '../../../../contacts/domain/contact_pi';
13
13
  import { TransactionSens, type Transaction } from '../../../domain/models/transaction';
@@ -16,6 +16,7 @@ import { TransactionSearchFilter } from '../../../domain/models/transaction_sear
16
16
  import { TransactionSearchBloc } from '../../bloc/transaction_search/transaction_search_bloc';
17
17
  import { TransactionSearchListEvent } from '../../bloc/transaction_search/transaction_search_event';
18
18
  import { TransactionSearchPageListe } from '../transaction_search/transaction_search_page_liste';
19
+ import { ProfileAppBar } from '../../../../profile/presentation/pages/profile_app_bar';
19
20
 
20
21
  /** Partage de dépense, étape 1 : choisir le paiement émis à partager. */
21
22
  export function TransactionSplitPageTx() {
@@ -37,13 +38,12 @@ export function TransactionSplitPageTx() {
37
38
  });
38
39
 
39
40
  return (
40
- <Scaffold appBar={<AppBar onBack={() => AppRouter.pop(router)} />}>
41
+ <Scaffold appBar={<ProfileAppBar titre={traductions.transactionSplitSelectTxPageTitle} />}>
41
42
  <BlocProvider blocs={[searchBloc]}>
42
43
  <MyPageContainer>
43
44
  <View style={styles.flex}>
44
- <Text style={theme.textTheme.titleSmall}>{traductions.transactionSplitSelectTxPageTitle}</Text>
45
45
  <View style={styles.gap8} />
46
- <Text style={theme.textTheme.displaySmall}>{traductions.transactionSplitSelectTxPageSubtitle}</Text>
46
+ <Text style={[theme.textTheme.displaySmall, { color: Themer.neural03Color }]}>{traductions.transactionSplitSelectTxPageSubtitle}</Text>
47
47
  <View style={styles.gap20} />
48
48
  {/* Liste des transactions */}
49
49
  <TransactionSearchPageListe
@@ -13,8 +13,8 @@ import { ClipboardWidget } from './clipboard_widget';
13
13
 
14
14
  /**
15
15
  * Pour afficher l'alias dans l'app : formaté, avec un bouton pour le
16
- * copier. Si l'alias n'est pas encore dans les contacts du téléphone, un
17
- * appui long propose de l'y enregistrer.
16
+ * copier. Si l'alias n'est pas encore dans les contacts du téléphone, une
17
+ * icône visible (et l'appui long) propose de l'y enregistrer.
18
18
  */
19
19
  export function AliasWidget({
20
20
  alias,
@@ -33,25 +33,54 @@ export function AliasWidget({
33
33
  const contactBloc = useBloc(ContactBloc);
34
34
  useBlocBuilder(contactBloc);
35
35
 
36
+ const inconnu = !contactBloc.isContactExist(alias);
37
+ const enregistrer = () =>
38
+ void AppRouter.push(router, AppRouter.profileContacts, {
39
+ params: new ContactPI({ name: name ?? '', alias }),
40
+ });
41
+
36
42
  const style = [theme.textTheme.bodyLarge, { color: Themer.neural03Color, textAlign }];
37
43
  const text = (
38
- <Text numberOfLines={1} style={[style, canCopy ? styles.flex : null]}>
44
+ <Text numberOfLines={1} style={[style, canCopy || inconnu ? styles.flex : null]}>
39
45
  {AliasPI.formatPhoneNumber(alias)}
40
46
  </Text>
41
47
  );
42
- const content = canCopy ? (
43
- <View style={styles.row}>
44
- {text}
45
- <Pressable accessibilityRole="button" hitSlop={8} onPress={() => void ClipboardWidget.setData(alias)}>
46
- <MaterialIcons name="content-copy" size={16} color={theme.colorScheme.onSurface} />
47
- </Pressable>
48
- </View>
49
- ) : (
50
- text
51
- );
48
+ const content =
49
+ canCopy || inconnu ? (
50
+ <View style={styles.row}>
51
+ {text}
52
+ {/* Enregistrer dans les contacts (alias inconnu) */}
53
+ {inconnu && (
54
+ <Pressable
55
+ accessibilityRole="button"
56
+ accessibilityLabel={traductions.contactAliasSaveText}
57
+ hitSlop={8}
58
+ onPress={enregistrer}
59
+ style={styles.icone}
60
+ >
61
+ <MaterialIcons name="person-add-alt-1" size={20} color={theme.colorScheme.primary} />
62
+ </Pressable>
63
+ )}
64
+ {/* Copier l'alias */}
65
+ {canCopy && (
66
+ <Pressable
67
+ accessibilityRole="button"
68
+ accessibilityLabel={traductions.aliasWidgetCopyTooltip}
69
+ hitSlop={8}
70
+ onPress={() => void ClipboardWidget.setData(alias)}
71
+ style={styles.icone}
72
+ >
73
+ <MaterialIcons name="content-copy" size={16} color={theme.colorScheme.onSurface} />
74
+ </Pressable>
75
+ )}
76
+ </View>
77
+ ) : (
78
+ text
79
+ );
52
80
 
53
- if (contactBloc.isContactExist(alias)) return content;
81
+ if (!inconnu) return content;
54
82
 
83
+ // Appui long : raccourci vers l'enregistrement, en plus de l'icône visible
55
84
  const showLightMenu = (event: GestureResponderEvent) => {
56
85
  void showPopupMenu(router, {
57
86
  x: event.nativeEvent.pageX,
@@ -61,10 +90,7 @@ export function AliasWidget({
61
90
  icon: 'person-add',
62
91
  iconSize: 16,
63
92
  label: traductions.contactAliasSaveText,
64
- onTap: () =>
65
- void AppRouter.push(router, AppRouter.profileContacts, {
66
- params: new ContactPI({ name: name ?? '', alias }),
67
- }),
93
+ onTap: enregistrer,
68
94
  },
69
95
  ],
70
96
  });
@@ -76,4 +102,5 @@ export function AliasWidget({
76
102
  const styles = StyleSheet.create({
77
103
  flex: { flex: 1 },
78
104
  row: { flexDirection: 'row', alignItems: 'center' },
105
+ icone: { paddingHorizontal: 6, paddingVertical: 4 },
79
106
  });
@@ -0,0 +1,89 @@
1
+ import { useRef, useState } from 'react';
2
+ import { Pressable, StyleSheet, Text, TextInput, View, type TextInputInstance } from 'react-native';
3
+
4
+ import { useTheme } from '../../core/theme';
5
+
6
+ /**
7
+ * Champ du code de vérification reçu par SMS ou e-mail : une case par
8
+ * chiffre, au-dessus d'un vrai champ (invisible) qui reçoit la saisie, le
9
+ * collage et la suggestion automatique du code par le clavier (code à
10
+ * usage unique).
11
+ */
12
+ export function AuthCodeField({
13
+ onChanged,
14
+ longueur = 6,
15
+ erreur = false,
16
+ onComplete,
17
+ autoFocus = false,
18
+ }: {
19
+ onChanged: (code: string) => void;
20
+ /** Nombre de chiffres du code */
21
+ longueur?: number;
22
+ erreur?: boolean;
23
+ /** Appelé quand tous les chiffres sont saisis */
24
+ onComplete?: (code: string) => void;
25
+ /** Ouvre le clavier dès l'affichage */
26
+ autoFocus?: boolean;
27
+ }) {
28
+ const theme = useTheme();
29
+ const champ = useRef<TextInputInstance | null>(null);
30
+ const [code, setCode] = useState('');
31
+ const [focus, setFocus] = useState(autoFocus);
32
+ const primaire = theme.colorScheme.primary;
33
+ // Case en cours de saisie
34
+ const courante = Math.min(code.length, longueur - 1);
35
+
36
+ return (
37
+ <Pressable onPress={() => champ.current?.focus()} accessibilityRole="none">
38
+ {/* Vrai champ, invisible : saisie, collage, code suggéré */}
39
+ <TextInput
40
+ ref={champ}
41
+ value={code}
42
+ autoFocus={autoFocus}
43
+ keyboardType="number-pad"
44
+ textContentType="oneTimeCode"
45
+ autoComplete="sms-otp"
46
+ maxLength={longueur}
47
+ caretHidden
48
+ onFocus={() => setFocus(true)}
49
+ onBlur={() => setFocus(false)}
50
+ onChangeText={(texte) => {
51
+ const valeur = texte.replace(/\D/g, '').slice(0, longueur);
52
+ setCode(valeur);
53
+ onChanged(valeur);
54
+ if (valeur.length === longueur) onComplete?.(valeur);
55
+ }}
56
+ style={styles.cache}
57
+ />
58
+ {/* Cases, une par chiffre */}
59
+ <View style={styles.cases} pointerEvents="none">
60
+ {Array.from({ length: longueur }, (_, i) => (
61
+ <View
62
+ key={i}
63
+ style={[
64
+ styles.case,
65
+ i > 0 ? styles.ecart : null,
66
+ {
67
+ backgroundColor: theme.inputDecorationTheme.fillColor,
68
+ borderColor: erreur
69
+ ? theme.colorScheme.error
70
+ : focus && i === courante
71
+ ? primaire
72
+ : 'transparent',
73
+ },
74
+ ]}
75
+ >
76
+ <Text style={theme.textTheme.headlineMedium}>{i < code.length ? code[i] : ''}</Text>
77
+ </View>
78
+ ))}
79
+ </View>
80
+ </Pressable>
81
+ );
82
+ }
83
+
84
+ const styles = StyleSheet.create({
85
+ cache: { position: 'absolute', opacity: 0, width: 1, height: 1 },
86
+ cases: { flexDirection: 'row' },
87
+ case: { flex: 1, height: 56, borderRadius: 14, borderWidth: 1.5, alignItems: 'center', justifyContent: 'center' },
88
+ ecart: { marginLeft: 8 },
89
+ });
@@ -64,7 +64,8 @@ export function CalendarDatePicker({
64
64
  onValueChanged([start, day]);
65
65
  };
66
66
 
67
- const dayStyle = { ...theme.textTheme.titleSmall, fontSize: 17 };
67
+ const primaire = theme.colorScheme.primary;
68
+ const dayStyle = { ...theme.textTheme.titleSmall, fontSize: 16 };
68
69
 
69
70
  return (
70
71
  <View style={styles.container}>
@@ -72,17 +73,17 @@ export function CalendarDatePicker({
72
73
  <View style={styles.header}>
73
74
  <Text style={[theme.textTheme.bodyMedium, styles.month]}>{new DateFormat('MMMM yyyy', locale).format(month)}</Text>
74
75
  <Pressable hitSlop={10} onPress={() => setMonth(new Date(month.getFullYear(), month.getMonth() - 1, 1))}>
75
- <MaterialIcons name="arrow-back-ios" size={20} color={theme.primaryColor} />
76
+ <MaterialIcons name="chevron-left" size={26} color={primaire} />
76
77
  </Pressable>
77
78
  <View style={styles.gap24} />
78
79
  <Pressable hitSlop={10} onPress={() => setMonth(new Date(month.getFullYear(), month.getMonth() + 1, 1))}>
79
- <MaterialIcons name="arrow-forward-ios" size={20} color={theme.primaryColor} />
80
+ <MaterialIcons name="chevron-right" size={26} color={primaire} />
80
81
  </Pressable>
81
82
  </View>
82
83
  {/* Jours de la semaine */}
83
84
  <View style={styles.row}>
84
85
  {weekdays.map((d, i) => (
85
- <Text key={i} style={[theme.textTheme.bodyMedium, styles.weekday]}>
86
+ <Text key={i} style={[theme.textTheme.displaySmall, styles.weekday, { color: Themer.neural03Color }]}>
86
87
  {d}
87
88
  </Text>
88
89
  ))}
@@ -97,14 +98,14 @@ export function CalendarDatePicker({
97
98
  const inRange = start != null && end != null && day > startOfDay(start) && day < startOfDay(end);
98
99
  return (
99
100
  <Pressable key={i} disabled={disabled} onPress={() => onDayPress(day)} style={styles.cell}>
100
- {inRange && <View style={[styles.range, { backgroundColor: theme.primaryColor, opacity: 0.2 }]} />}
101
- <View style={[styles.day, selected ? { backgroundColor: theme.primaryColor } : null]}>
101
+ {inRange && <View style={[styles.range, { backgroundColor: primaire, opacity: 0.12 }]} />}
102
+ <View style={[styles.day, selected ? { backgroundColor: primaire } : null]}>
102
103
  <Text
103
104
  style={[
104
105
  dayStyle,
105
- disabled ? { ...theme.textTheme.bodyLarge, fontSize: 17, color: Themer.gray } : null,
106
- !selected && !disabled && sameDay(day, today) ? { color: theme.primaryColor } : null,
107
- selected ? { color: Themer.whiteColor } : null,
106
+ disabled ? { ...theme.textTheme.bodyLarge, fontSize: 16, color: Themer.gray } : null,
107
+ !selected && !disabled && sameDay(day, today) ? { color: primaire, fontWeight: '700' } : null,
108
+ selected ? { color: theme.colorScheme.onPrimary, fontWeight: '700' } : null,
108
109
  ]}
109
110
  >
110
111
  {day.getDate()}
@@ -122,11 +123,11 @@ export function CalendarDatePicker({
122
123
  const styles = StyleSheet.create({
123
124
  container: { paddingHorizontal: 16 },
124
125
  header: { flexDirection: 'row', alignItems: 'center', paddingVertical: 12, paddingHorizontal: 4 },
125
- month: { flex: 1, fontWeight: '600', textTransform: 'capitalize' },
126
+ month: { flex: 1, fontWeight: '700', textTransform: 'capitalize' },
126
127
  gap24: { width: 24 },
127
128
  row: { flexDirection: 'row' },
128
129
  weekday: { flex: 1, textAlign: 'center', fontWeight: '600', paddingVertical: 8 },
129
130
  cell: { flex: 1, height: 44, alignItems: 'center', justifyContent: 'center' },
130
131
  range: { ...StyleSheet.absoluteFill, marginVertical: 4 },
131
- day: { width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center' },
132
+ day: { width: 40, height: 40, borderRadius: 12, alignItems: 'center', justifyContent: 'center' },
132
133
  });
@@ -1,12 +1,16 @@
1
- import { ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
2
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
1
+ import { ScrollView, StyleSheet, Text, View } from 'react-native';
3
2
 
4
- import { AppRouter, useAppRouter } from '../../core/router';
3
+ import { AppRouter, useAppRouter, type SdkRouter } from '../../core/router';
5
4
  import { useTheme } from '../../core/theme';
6
5
  import { useAppLocalizations } from '../../l10n/localizations';
7
6
  import { ElevatedButton, FilledTonalButton } from '../material/buttons';
7
+ import { showModalBottomSheet } from '../material/overlays';
8
+ import { SelectionBoutons, SelectionSheet } from './selection';
8
9
 
9
- /** Feuille de confirmation : titre, texte, et boutons Annuler / Confirmer (retournent `false` / `true`). */
10
+ /**
11
+ * Feuille de confirmation : [title] et [subtitle] centrés, puis Annuler et
12
+ * Confirmer fixés en bas (retournent `false` / `true` par défaut).
13
+ */
10
14
  export function ConfirmActionSheetWidget({
11
15
  title,
12
16
  subtitle,
@@ -14,8 +18,11 @@ export function ConfirmActionSheetWidget({
14
18
  confirmAction,
15
19
  cancelTitle,
16
20
  cancelAction,
21
+ emoji,
17
22
  }: {
18
23
  title: string;
24
+ /** Emoji affiché en grand sous le titre (ex. 😢 pour la déconnexion) */
25
+ emoji?: string;
19
26
  subtitle: string;
20
27
  confirmTitle?: string;
21
28
  confirmAction?: () => void;
@@ -25,44 +32,51 @@ export function ConfirmActionSheetWidget({
25
32
  const traductions = useAppLocalizations();
26
33
  const theme = useTheme();
27
34
  const router = useAppRouter();
28
- const insets = useSafeAreaInsets();
29
- const { height } = useWindowDimensions();
30
35
 
31
36
  return (
32
- <View style={styles.padding}>
33
- <View style={[styles.box, { backgroundColor: theme.colorScheme.surface, maxHeight: height * 0.7 - 40, marginBottom: insets.bottom }]}>
34
- <ScrollView bounces={false}>
35
- <Text style={[theme.textTheme.titleSmall, styles.center]}>{title}</Text>
36
- <View style={styles.gap20} />
37
- <Text style={[theme.textTheme.displayMedium, styles.center]}>{subtitle}</Text>
38
- <View style={styles.gap30} />
39
- <View style={styles.buttons}>
40
- <View style={styles.flex}>
41
- <FilledTonalButton style={styles.button} onPress={cancelAction ?? (() => AppRouter.pop(router, { value: false }))}>
37
+ <SelectionSheet
38
+ contenu={
39
+ <>
40
+ <ScrollView bounces={false} style={styles.defile} contentContainerStyle={styles.content}>
41
+ {/* Titre */}
42
+ <Text style={[theme.textTheme.titleSmall, styles.center]}>{title}</Text>
43
+ {/* Emoji */}
44
+ {emoji != null && <Text style={[styles.center, styles.emoji]}>{emoji}</Text>}
45
+ <View style={styles.gap12} />
46
+ {/* Sous-titre */}
47
+ <Text style={[theme.textTheme.displayMedium, styles.center]}>{subtitle}</Text>
48
+ </ScrollView>
49
+ <SelectionBoutons
50
+ boutons={[
51
+ <FilledTonalButton key="non" onPress={cancelAction ?? (() => AppRouter.pop(router, { value: false }))}>
42
52
  {cancelTitle ?? traductions.btnTextCancel}
43
- </FilledTonalButton>
44
- </View>
45
- <View style={styles.gap16} />
46
- <View style={styles.flex}>
47
- <ElevatedButton style={styles.button} onPress={confirmAction ?? (() => AppRouter.pop(router, { value: true }))}>
53
+ </FilledTonalButton>,
54
+ <ElevatedButton key="oui" onPress={confirmAction ?? (() => AppRouter.pop(router, { value: true }))}>
48
55
  {confirmTitle ?? traductions.btnTextAccept}
49
- </ElevatedButton>
50
- </View>
51
- </View>
52
- </ScrollView>
53
- </View>
54
- </View>
56
+ </ElevatedButton>,
57
+ ]}
58
+ />
59
+ </>
60
+ }
61
+ />
55
62
  );
56
63
  }
57
64
 
58
65
  const styles = StyleSheet.create({
59
- padding: { padding: 20 },
60
- box: { borderRadius: 20, overflow: 'hidden' },
66
+ defile: { flexShrink: 1 },
67
+ content: { paddingHorizontal: 24, paddingTop: 4, paddingBottom: 20 },
61
68
  center: { textAlign: 'center' },
62
- flex: { flex: 1 },
63
- buttons: { flexDirection: 'row', height: 56 },
64
- button: { height: 56 },
65
- gap16: { width: 16 },
66
- gap20: { height: 20 },
67
- gap30: { height: 30 },
69
+ gap12: { height: 12 },
70
+ emoji: { fontSize: 48, marginTop: 12 },
68
71
  });
72
+
73
+ /** Ouvre la feuille de confirmation ; `true` si l'utilisateur confirme. */
74
+ export async function showConfirmActionSheet(
75
+ router: SdkRouter,
76
+ props: { title: string; subtitle: string; confirmTitle?: string; cancelTitle?: string; emoji?: string },
77
+ ): Promise<boolean> {
78
+ const confirme = await showModalBottomSheet<boolean>(router, {
79
+ builder: () => <ConfirmActionSheetWidget {...props} />,
80
+ });
81
+ return confirme === true;
82
+ }
@@ -1,10 +1,12 @@
1
+ import { MaterialIcons } from '@expo/vector-icons';
1
2
  import { useEffect, useState } from 'react';
2
- import { Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
3
+ import { Pressable, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
3
4
  import { EmojiKeyboard, en, fr, pt } from 'rn-emoji-keyboard';
4
5
 
5
6
  import { Themer, useTheme } from '../../core/theme';
6
7
  import { useAppLocalizations } from '../../l10n/localizations';
7
8
  import { argbToCss } from '../../modules/categorie/domain/models/categorie_icons';
9
+ import { withAlpha } from '../utils/color';
8
10
 
9
11
  const colors = [0xffedb37e, 0xffc08507, 0xff007aff, 0xfff9ebc2, 0xff8b887e, 0xffffd573, 0xfffa5a25, 0xff46a93d, 0xffa1a5ac, 0xff43474e];
10
12
  const imageRegex = /\.(jpeg|jpg|png|gif)$/i;
@@ -26,8 +28,8 @@ export function EmojiSelectWidget({
26
28
  const locale = useAppLocalizations().localeName;
27
29
  const { height } = useWindowDimensions();
28
30
  const [selectedColor, setSelectedColor] = useState(color ?? 0xfff9ebc2);
29
- // Comme en Dart : l'emoji par défaut remplace aussi une icône non-image
30
- const [selectedEmoji, setSelectedEmoji] = useState(icon == null || !imageRegex.test(icon) ? '🤩' : icon);
31
+ // Pas d'icône, ou une image (pas un emoji) : emoji par défaut
32
+ const [selectedEmoji, setSelectedEmoji] = useState(icon == null || imageRegex.test(icon) ? '🤩' : icon);
31
33
 
32
34
  useEffect(() => {
33
35
  onChanged({ icon: selectedEmoji, color: selectedColor });
@@ -40,18 +42,30 @@ export function EmojiSelectWidget({
40
42
  <View style={[styles.preview, { backgroundColor: argbToCss(selectedColor) }]}>
41
43
  <Text style={styles.previewText}>{selectedEmoji}</Text>
42
44
  </View>
43
- {/* Couleur de fond */}
44
- <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.colors}>
45
- {colors.map((c) =>
46
- c === selectedColor ? (
47
- <View key={c} style={[styles.selectedColor, { borderColor: theme.colorScheme.primary }]}>
48
- <View style={[styles.dot, { backgroundColor: argbToCss(c) }]} />
49
- </View>
50
- ) : (
51
- <Pressable key={c} onPress={() => setSelectedColor(c)} style={[styles.dot, styles.dotSpacing, { backgroundColor: argbToCss(c) }]} />
52
- ),
53
- )}
54
- </ScrollView>
45
+ {/* Couleur de fond : pastilles, la choisie cochée */}
46
+ <View style={styles.colors}>
47
+ {colors.map((c) => {
48
+ const choisie = c === selectedColor;
49
+ return (
50
+ <Pressable
51
+ key={c}
52
+ accessibilityRole="radio"
53
+ accessibilityState={{ selected: choisie }}
54
+ onPress={() => setSelectedColor(c)}
55
+ style={[
56
+ styles.dot,
57
+ {
58
+ backgroundColor: argbToCss(c),
59
+ borderColor: choisie ? theme.colorScheme.primary : withAlpha(Themer.neural03Color, 0.2),
60
+ borderWidth: choisie ? 3 : 1,
61
+ },
62
+ ]}
63
+ >
64
+ {choisie && <MaterialIcons name="check" size={18} color={Themer.whiteColor} />}
65
+ </Pressable>
66
+ );
67
+ })}
68
+ </View>
55
69
  {/* Clavier d'emoji */}
56
70
  <View style={{ height: height * 0.4, alignSelf: 'stretch' }}>
57
71
  <EmojiKeyboard
@@ -85,18 +99,6 @@ const styles = StyleSheet.create({
85
99
  marginVertical: 8,
86
100
  },
87
101
  previewText: { fontSize: 48 },
88
- colors: { alignItems: 'center', height: 72, paddingHorizontal: 4 },
89
- dot: { width: 24, height: 24, borderRadius: 12 },
90
- dotSpacing: { marginRight: 12 },
91
- selectedColor: {
92
- width: 32,
93
- height: 32,
94
- borderRadius: 16,
95
- borderWidth: 3,
96
- padding: 1,
97
- marginRight: 12,
98
- backgroundColor: Themer.whiteColor,
99
- alignItems: 'center',
100
- justifyContent: 'center',
101
- },
102
+ colors: { flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'center', gap: 10, paddingVertical: 12 },
103
+ dot: { width: 34, height: 34, borderRadius: 17, alignItems: 'center', justifyContent: 'center' },
102
104
  });
@@ -1,41 +1,39 @@
1
- import { MaterialIcons } from '@expo/vector-icons';
2
1
  import { useEffect } from 'react';
3
- import { Pressable, View } from 'react-native';
4
2
 
5
3
  import { useAppRouter } from '../../core/router';
6
- import { useTheme } from '../../core/theme';
7
4
  import { useAppLocalizations } from '../../l10n/localizations';
8
5
  import { showModalBottomSheet } from '../material/overlays';
9
6
  import { Frequence, type FrequenceCommand } from '../models/frequence_command';
10
- import { FrequenceSelectWidget, frequenceText, periodiciteText } from './frequence_select_widget';
11
- import { CustomTextInput } from './input_text';
7
+ import { FrequenceSelectWidget, frequenceIcone, frequenceResume, frequenceText } from './frequence_select_widget';
8
+ import { SelectionPastille, SelectionChamp } from './selection';
12
9
 
13
10
  const FREQUENCES = [Frequence.quotidienne, Frequence.hebdomadaire, Frequence.mensuelle, Frequence.annuelle];
14
11
 
15
- /** Champ fréquence d'une programmation ; ouvre le choix de la fréquence. */
12
+ /** Champ fréquence d'une programmation : carte qui ouvre le choix de la fréquence. */
16
13
  export function FrequenceInputWidget({
17
14
  command,
18
15
  onChange,
19
16
  readOnly = false,
20
17
  hideOnce = false,
21
18
  hideCustom = false,
19
+ enableCustom = true,
20
+ frequences = FREQUENCES,
22
21
  }: {
23
22
  command: FrequenceCommand;
24
23
  onChange: (value: FrequenceCommand) => void;
25
24
  readOnly?: boolean;
26
25
  hideOnce?: boolean;
27
26
  hideCustom?: boolean;
27
+ /** Si on autorise la fréquence sur mesure */
28
+ enableCustom?: boolean;
29
+ frequences?: Frequence[];
28
30
  }) {
29
31
  const traductions = useAppLocalizations();
30
- const theme = useTheme();
31
32
  const router = useAppRouter();
32
33
 
33
34
  let text: string;
34
35
  if (command.value != null && command.periodicite != null) {
35
- text = traductions.transactionFormScheduleFrequenceSelected(
36
- String(command.periodicite),
37
- periodiciteText(traductions, command.value),
38
- );
36
+ text = frequenceResume(traductions, command.value, command.periodicite, enableCustom);
39
37
  } else if (command.value != null) {
40
38
  text = frequenceText(command.value, traductions);
41
39
  } else {
@@ -45,36 +43,32 @@ export function FrequenceInputWidget({
45
43
 
46
44
  const select = () =>
47
45
  void showModalBottomSheet(router, {
48
- themed: true,
49
46
  builder: () => (
50
47
  <FrequenceSelectWidget
51
48
  title={traductions.transactionFormScheduleFrequenceLabel}
52
49
  command={command}
53
- frequences={FREQUENCES}
50
+ frequences={frequences}
54
51
  onChange={onChange}
55
52
  hideOnce={hideOnce}
56
53
  hideCustom={hideCustom}
54
+ enableCustom={enableCustom}
57
55
  />
58
56
  ),
59
57
  });
60
58
 
61
59
  // Sur-mesure choisi mais pas encore validé : rouvrir le choix de la périodicité
62
- const pendingCustom = command.periodicite != null && !command.done;
60
+ const pendingCustom = enableCustom && command.periodicite != null && !command.done;
63
61
  useEffect(() => {
64
62
  if (pendingCustom) select();
65
63
  // eslint-disable-next-line react-hooks/exhaustive-deps
66
64
  }, [pendingCustom, command.periodicite]);
67
65
 
68
66
  return (
69
- <Pressable disabled={readOnly} onPress={select}>
70
- <View pointerEvents="none">
71
- <CustomTextInput
72
- labelText={traductions.transactionFormScheduleFrequenceLabel}
73
- value={text}
74
- readOnly
75
- suffixIcon={!readOnly ? <MaterialIcons name="keyboard-arrow-down" size={24} color={theme.colorScheme.onSurface} /> : null}
76
- />
77
- </View>
78
- </Pressable>
67
+ <SelectionChamp
68
+ libelle={traductions.transactionFormScheduleFrequenceLabel}
69
+ valeur={text}
70
+ pastille={<SelectionPastille icone={frequenceIcone(command.value)} />}
71
+ onPress={!readOnly ? select : undefined}
72
+ />
79
73
  );
80
74
  }