@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,6 +1,6 @@
1
1
  import { MaterialIcons } from '@expo/vector-icons';
2
- import { useReducer, useState, type ReactNode } from 'react';
3
- import { Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
2
+ import { useReducer, type ComponentProps, type ReactNode } from 'react';
3
+ import { LayoutAnimation, Platform, Pressable, ScrollView, StyleSheet, Text, UIManager, View } from 'react-native';
4
4
 
5
5
  import { AppRouter, useAppRouter } from '../../core/router';
6
6
  import { Themer, useTheme } from '../../core/theme';
@@ -9,7 +9,16 @@ import { useAppLocalizations } from '../../l10n/localizations';
9
9
  import { ElevatedButton } from '../material/buttons';
10
10
  import { Card } from '../material/card';
11
11
  import { Frequence, type FrequenceCommand } from '../models/frequence_command';
12
+ import { withAlpha } from '../utils/color';
12
13
  import { NumberIncWidget } from './number_inc_widget';
14
+ import { SelectionLigne, SelectionOption, SelectionPastille, SelectionBoutons, SelectionSheet } from './selection';
15
+
16
+ // Animations de mise en page sur Android (déjà actives sur iOS)
17
+ if (Platform.OS === 'android' && UIManager.setLayoutAnimationEnabledExperimental) {
18
+ UIManager.setLayoutAnimationEnabledExperimental(true);
19
+ }
20
+
21
+ type IconName = ComponentProps<typeof MaterialIcons>['name'];
13
22
 
14
23
  export function frequenceText(freq: Frequence, traductions: AppLocalizations): string {
15
24
  switch (freq) {
@@ -24,8 +33,59 @@ export function frequenceText(freq: Frequence, traductions: AppLocalizations): s
24
33
  }
25
34
  }
26
35
 
27
- /** Unité de la périodicité (« jours », « semaine »...), au singulier si [periodicite] vaut 1. */
28
- export function periodiciteText(traductions: AppLocalizations, freq: Frequence, periodicite?: number | null): string {
36
+ /** Icône de la pastille d'une fréquence (`null` : une seule fois). */
37
+ export function frequenceIcone(freq: Frequence | null | undefined): IconName {
38
+ switch (freq) {
39
+ case Frequence.quotidienne:
40
+ return 'today';
41
+ case Frequence.hebdomadaire:
42
+ return 'view-week';
43
+ case Frequence.mensuelle:
44
+ return 'calendar-month';
45
+ case Frequence.annuelle:
46
+ return 'event-repeat';
47
+ default:
48
+ return 'looks-one';
49
+ }
50
+ }
51
+
52
+ /** Unité de la fréquence, pour accorder « Tous les » / « Toutes les ». */
53
+ export function periodiciteUnite(freq: Frequence): string {
54
+ switch (freq) {
55
+ case Frequence.quotidienne:
56
+ return 'jour';
57
+ case Frequence.hebdomadaire:
58
+ return 'semaine';
59
+ case Frequence.mensuelle:
60
+ return 'mois';
61
+ default:
62
+ return 'annee';
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Unité de la périodicité (« jours », « semaine »...), au singulier si
68
+ * [periodicite] vaut 1. Sans personnalisation ([enableCustom] faux) :
69
+ * « Chaque jour », « Chaque semaine »...
70
+ */
71
+ export function periodiciteText(
72
+ traductions: AppLocalizations,
73
+ freq: Frequence,
74
+ periodicite?: number | null,
75
+ enableCustom = true,
76
+ ): string {
77
+ if (!enableCustom) {
78
+ switch (freq) {
79
+ case Frequence.quotidienne:
80
+ return traductions.transactionFormScheduleFrequenceJour;
81
+ case Frequence.hebdomadaire:
82
+ return traductions.transactionFormScheduleFrequenceSemaine;
83
+ case Frequence.mensuelle:
84
+ return traductions.transactionFormScheduleFrequenceMois;
85
+ default:
86
+ return traductions.transactionFormScheduleFrequenceAnnuee;
87
+ }
88
+ }
29
89
  const one = periodicite === 1;
30
90
  switch (freq) {
31
91
  case Frequence.quotidienne:
@@ -41,9 +101,33 @@ export function periodiciteText(traductions: AppLocalizations, freq: Frequence,
41
101
  }
42
102
  }
43
103
 
104
+ /** Fréquence calculée : « Tous les 2 jours », « Chaque semaine »... */
105
+ export function frequenceResume(
106
+ traductions: AppLocalizations,
107
+ freq: Frequence,
108
+ periodicite?: number | null,
109
+ enableCustom = true,
110
+ ): string {
111
+ if (enableCustom && periodicite != null) {
112
+ return traductions.transactionFormScheduleFrequenceSelected(
113
+ String(periodicite),
114
+ periodiciteText(traductions, freq, periodicite),
115
+ periodiciteUnite(freq),
116
+ );
117
+ }
118
+ return periodiciteText(traductions, freq, periodicite, false);
119
+ }
120
+
121
+ /** Anime le prochain changement de mise en page (apparitions, disparitions). */
122
+ function animer() {
123
+ LayoutAnimation.configureNext(LayoutAnimation.create(250, 'easeInEaseOut', 'opacity'));
124
+ }
125
+
44
126
  /**
45
- * Choix de la fréquence : une seule fois, jour, semaine, mois, année, ou
46
- * « sur mesure » (tous les N jours/semaines/...).
127
+ * Feuille de choix de la fréquence : une seule fois, jour, semaine, mois,
128
+ * année, ou « sur mesure » (tous les N jours/semaines/...). Hors sur
129
+ * mesure, toucher une fréquence la choisit et ferme la feuille ; en sur
130
+ * mesure, « Valider » enregistre.
47
131
  */
48
132
  export function FrequenceSelectWidget({
49
133
  title,
@@ -52,6 +136,7 @@ export function FrequenceSelectWidget({
52
136
  onChange,
53
137
  hideOnce = false,
54
138
  hideCustom = false,
139
+ enableCustom = true,
55
140
  }: {
56
141
  title: string;
57
142
  command: FrequenceCommand;
@@ -59,19 +144,21 @@ export function FrequenceSelectWidget({
59
144
  onChange: (value: FrequenceCommand) => void;
60
145
  hideOnce?: boolean;
61
146
  hideCustom?: boolean;
147
+ /** Si on autorise la fréquence sur mesure */
148
+ enableCustom?: boolean;
62
149
  }) {
63
150
  const traductions = useAppLocalizations();
64
151
  const theme = useTheme();
65
152
  const router = useAppRouter();
66
- const { height } = useWindowDimensions();
67
153
  const [, rebuild] = useReducer((x: number) => x + 1, 0);
68
- // La périodicité à l'ouverture (affichage de « supprimer le sur-mesure »)
69
- const [initialPeriodicite] = useState(selected.periodicite);
70
154
 
71
155
  const uneSeuleFois = !hideOnce && selected.periodicite == null;
156
+ const surMesure = enableCustom && selected.periodicite != null;
157
+
72
158
  const choose = (freq: Frequence | undefined) => {
73
159
  selected.value = freq;
74
- if (selected.periodicite == null) {
160
+ // Hors sur mesure, toucher une fréquence la valide
161
+ if (!surMesure) {
75
162
  onChange(selected);
76
163
  AppRouter.pop(router);
77
164
  } else {
@@ -80,129 +167,162 @@ export function FrequenceSelectWidget({
80
167
  };
81
168
 
82
169
  return (
83
- <View style={[styles.sheet, { backgroundColor: theme.colorScheme.surface, maxHeight: height * 0.8 }]}>
84
- <ScrollView contentContainerStyle={styles.content}>
85
- {/* Titre */}
86
- <Text style={theme.textTheme.headlineMedium}>{title}</Text>
87
- <View style={styles.gap20} />
88
-
89
- {/* Supprimer le sur-mesure */}
90
- {initialPeriodicite != null && !hideCustom && (
91
- <CustomCard
92
- icon={<MaterialIcons name="close" size={18} color={Themer.systemErrorColor} />}
93
- onPress={() => {
94
- // Une seule fois
95
- selected.value = undefined;
96
- selected.periodicite = undefined;
97
- selected.done = false;
98
- onChange(selected);
99
- AppRouter.pop(router);
100
- }}
101
- />
102
- )}
103
-
104
- {/* Une fois, jour, semaine, mois, année */}
105
- <Card>
106
- <View style={styles.cardPadding}>
170
+ <SelectionSheet
171
+ titre={title}
172
+ hauteurMax={0.85}
173
+ contenu={
174
+ <>
175
+ <ScrollView bounces={false} style={styles.flexShrink} contentContainerStyle={styles.content}>
176
+ {/* Une fois, jour, semaine, mois, année */}
107
177
  {uneSeuleFois && (
108
- <Option
109
- label={traductions.transactionFormScheduleFrequenceUnefois}
110
- checked={selected.value == null}
111
- onPress={() => {
112
- selected.value = undefined;
113
- onChange(selected);
114
- AppRouter.pop(router);
115
- }}
178
+ <SelectionLigne
179
+ pastille={<SelectionPastille icone={frequenceIcone(null)} choisie={selected.value == null} />}
180
+ texte={traductions.transactionFormScheduleFrequenceUnefois}
181
+ choisie={selected.value == null}
182
+ onPress={() => choose(undefined)}
116
183
  />
117
184
  )}
118
185
  {frequences.map((freq) => (
119
- <Option key={freq} label={frequenceText(freq, traductions)} checked={freq === selected.value} onPress={() => choose(freq)} />
120
- ))}
121
- </View>
122
- </Card>
123
- <View style={styles.gap20} />
124
-
125
- {/* Sur mesure */}
126
- {selected.periodicite == null && !hideCustom && (
127
- <CustomCard
128
- icon={<MaterialIcons name="arrow-forward-ios" size={18} color={theme.colorScheme.onSurface} />}
129
- onPress={() => {
130
- // Quotidienne, tous les 2 jours au minimum
131
- selected.value = Frequence.quotidienne;
132
- selected.periodicite = 2;
133
- onChange(selected);
134
- AppRouter.pop(router);
135
- }}
136
- />
137
- )}
138
-
139
- {/* Périodicité */}
140
- {selected.periodicite != null && (
141
- <>
142
- <View style={styles.row}>
143
- <Text style={[theme.textTheme.headlineMedium, styles.flex]}>{traductions.transactionFormSchedulePeriodiciteLabel}</Text>
144
- <NumberIncWidget
145
- number={selected.periodicite}
146
- onChange={(value) => {
147
- selected.periodicite = value;
148
- rebuild();
149
- }}
186
+ <SelectionLigne
187
+ key={freq}
188
+ pastille={<SelectionPastille icone={frequenceIcone(freq)} choisie={freq === selected.value} />}
189
+ texte={frequenceText(freq, traductions)}
190
+ choisie={freq === selected.value}
191
+ onPress={() => choose(freq)}
150
192
  />
151
- </View>
193
+ ))}
194
+
195
+ {/* Option Sur mesure : bascule dans la feuille, sans la fermer */}
196
+ {selected.periodicite == null && !hideCustom && (
197
+ <View style={styles.marge12}>
198
+ <SelectionOption
199
+ icone="tune"
200
+ titre={traductions.transactionFormScheduleFrequenceSurMesure}
201
+ onPress={() => {
202
+ // Fréquence actuelle (quotidienne par défaut), tous les 2 au minimum ;
203
+ // le formulaire est prévenu à la validation
204
+ animer();
205
+ selected.value ??= Frequence.quotidienne;
206
+ selected.periodicite = 2;
207
+ selected.done = false;
208
+ rebuild();
209
+ }}
210
+ />
211
+ </View>
212
+ )}
213
+
214
+ {/* Périodicité sur mesure */}
215
+ {surMesure && (
216
+ <Card style={[styles.carte, styles.marge16]}>
217
+ <View style={styles.carteContenu}>
218
+ {/* Sur mesure et bouton pour le supprimer */}
219
+ <View style={styles.row}>
220
+ <MaterialIcons name="tune" size={18} color={theme.colorScheme.primary} />
221
+ <Text style={[theme.textTheme.displayLarge, styles.surMesure]}>
222
+ {traductions.transactionFormScheduleFrequenceSurMesure}
223
+ </Text>
224
+ {!hideCustom && (
225
+ <Pressable
226
+ hitSlop={10}
227
+ accessibilityRole="button"
228
+ onPress={() => {
229
+ // Revient aux fréquences de base, sans fermer la feuille ;
230
+ // la fréquence choisie est gardée
231
+ animer();
232
+ selected.periodicite = undefined;
233
+ selected.done = false;
234
+ onChange(selected);
235
+ rebuild();
236
+ }}
237
+ style={styles.fermer}
238
+ >
239
+ <MaterialIcons name="close" size={20} color={Themer.systemErrorColor} />
240
+ </Pressable>
241
+ )}
242
+ </View>
243
+ {/* Périodicité : boutons réduire et augmenter */}
244
+ <View style={[styles.row, styles.periodicite]}>
245
+ <Text style={[theme.textTheme.displayMedium, styles.flex, { color: Themer.neural03Color }]}>
246
+ {traductions.transactionFormSchedulePeriodiciteLabel}
247
+ </Text>
248
+ <NumberIncWidget
249
+ number={selected.periodicite!}
250
+ onChange={(value) => {
251
+ selected.periodicite = value;
252
+ rebuild();
253
+ }}
254
+ />
255
+ </View>
256
+ </View>
257
+ </Card>
258
+ )}
259
+
260
+ {/* Fréquence calculée */}
152
261
  {selected.value != null && (
153
- <Text style={[styles.right, { color: Themer.successColor }]}>
154
- {traductions.transactionFormScheduleFrequenceSelected(
155
- String(selected.periodicite),
156
- periodiciteText(traductions, selected.value, selected.periodicite),
157
- )}
158
- </Text>
262
+ <View style={styles.marge16}>
263
+ <FrequenceResume texte={frequenceResume(traductions, selected.value, selected.periodicite, enableCustom)} />
264
+ </View>
159
265
  )}
160
- <View style={styles.gap20} />
161
- <ElevatedButton
162
- onPress={() => {
163
- selected.done = true;
164
- onChange(selected);
165
- AppRouter.pop(router);
166
- }}
167
- >
168
- {traductions.popupSelectDateBtnValider}
169
- </ElevatedButton>
170
- </>
171
- )}
172
- </ScrollView>
173
- </View>
174
- );
175
- }
266
+ </ScrollView>
176
267
 
177
- /** Option « Sur mesure » */
178
- function CustomCard({ icon, onPress }: { icon: ReactNode; onPress: () => void }) {
179
- const traductions = useAppLocalizations();
180
- return (
181
- <Card>
182
- <View style={styles.cardPadding}>
183
- <Option label={traductions.transactionFormScheduleFrequenceSurMesure} trailing={icon} onPress={onPress} />
184
- </View>
185
- </Card>
268
+ {/* Bouton valider : seulement en sur mesure */}
269
+ {surMesure && (
270
+ <SelectionBoutons
271
+ boutons={[
272
+ <ElevatedButton
273
+ key="valider"
274
+ onPress={() => {
275
+ selected.done = true;
276
+ onChange(selected);
277
+ AppRouter.pop(router);
278
+ }}
279
+ >
280
+ {traductions.popupSelectDateBtnValider}
281
+ </ElevatedButton>,
282
+ ]}
283
+ />
284
+ )}
285
+ </>
286
+ }
287
+ />
186
288
  );
187
289
  }
188
290
 
189
- function Option({ label, checked, trailing, onPress }: { label: string; checked?: boolean; trailing?: ReactNode; onPress: () => void }) {
291
+ /** Fréquence calculée, mise en évidence */
292
+ function FrequenceResume({ texte }: { texte: ReactNode }) {
190
293
  const theme = useTheme();
191
294
  return (
192
- <Pressable accessibilityRole="button" onPress={onPress} style={styles.option}>
193
- <Text style={[theme.textTheme.bodyLarge, styles.flex]}>{label}</Text>
194
- {trailing ?? (checked ? <MaterialIcons name="check" size={18} color={theme.colorScheme.onSurface} /> : null)}
195
- </Pressable>
295
+ <View
296
+ style={[
297
+ styles.resume,
298
+ { backgroundColor: withAlpha(Themer.successColor, 0.08), borderColor: withAlpha(Themer.successColor, 0.25) },
299
+ ]}
300
+ >
301
+ <MaterialIcons name="event-repeat" size={20} color={Themer.successColor} />
302
+ <Text style={[theme.textTheme.displayLarge, styles.resumeTexte, { color: Themer.successColor }]}>{texte}</Text>
303
+ </View>
196
304
  );
197
305
  }
198
306
 
199
307
  const styles = StyleSheet.create({
200
- sheet: { borderRadius: 20, overflow: 'hidden' },
201
- content: { padding: 20 },
202
- cardPadding: { paddingHorizontal: 15 },
203
- option: { flexDirection: 'row', alignItems: 'center', minHeight: 48 },
204
- row: { flexDirection: 'row', alignItems: 'center' },
308
+ flexShrink: { flexShrink: 1 },
205
309
  flex: { flex: 1 },
206
- right: { textAlign: 'right' },
207
- gap20: { height: 20 },
310
+ content: { paddingHorizontal: 20, paddingTop: 4, paddingBottom: 16 },
311
+ marge12: { marginTop: 12 },
312
+ marge16: { marginTop: 16 },
313
+ carte: { margin: 0 },
314
+ carteContenu: { paddingLeft: 14, paddingRight: 6, paddingTop: 6, paddingBottom: 12 },
315
+ row: { flexDirection: 'row', alignItems: 'center' },
316
+ surMesure: { flex: 1, marginLeft: 8, fontWeight: '700' },
317
+ fermer: { padding: 8 },
318
+ periodicite: { marginTop: 4, paddingRight: 8 },
319
+ resume: {
320
+ flexDirection: 'row',
321
+ alignItems: 'center',
322
+ paddingHorizontal: 14,
323
+ paddingVertical: 12,
324
+ borderRadius: 14,
325
+ borderWidth: 1,
326
+ },
327
+ resumeTexte: { flex: 1, marginLeft: 10, fontWeight: '600' },
208
328
  });
@@ -1,33 +1,30 @@
1
- import { MaterialIcons } from '@expo/vector-icons';
2
- import { Image } from 'expo-image';
3
1
  import * as ImagePicker from 'expo-image-picker';
4
2
  import type { ReactNode } from 'react';
5
- import { Pressable, ScrollView, StyleSheet, Text, useWindowDimensions, View } from 'react-native';
6
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
3
+ import { ScrollView, StyleSheet, Text, View } from 'react-native';
7
4
 
8
- import { Images } from '../../core/assets';
9
- import { useTheme } from '../../core/theme';
5
+ import { Themer, useTheme } from '../../core/theme';
10
6
  import { useAppLocalizations } from '../../l10n/localizations';
11
- import { Card } from '../material/card';
7
+ import { SelectionOption, SelectionSheet } from './selection';
12
8
 
13
9
  /**
14
- * Feuille de choix d'une image : photo avec l'appareil photo, ou image de
15
- * la galerie. [onSelect] reçoit l'URI locale de l'image (ou `null` si
16
- * l'utilisateur annule).
10
+ * Feuille de choix d'une image : prendre une photo, la choisir dans la
11
+ * galerie, puis les [otherActions] (ex. SelectionOption « Supprimer »).
12
+ * [onSelect] reçoit l'URI locale de l'image (ou `null` si l'utilisateur
13
+ * annule).
17
14
  */
18
15
  export function ImageSelectWidget({
19
16
  title,
17
+ subtitle,
20
18
  onSelect,
21
19
  otherActions = [],
22
20
  }: {
23
21
  title?: string;
22
+ subtitle?: string;
24
23
  onSelect: (uri: string | null) => void;
25
24
  otherActions?: ReactNode[];
26
25
  }) {
27
26
  const theme = useTheme();
28
27
  const traductions = useAppLocalizations();
29
- const insets = useSafeAreaInsets();
30
- const { height } = useWindowDimensions();
31
28
 
32
29
  const pickImage = async (source: 'camera' | 'gallery') => {
33
30
  try {
@@ -46,58 +43,46 @@ export function ImageSelectWidget({
46
43
  }
47
44
  };
48
45
 
46
+ const actions: ReactNode[] = [
47
+ // Prendre une photo avec l'appareil photo
48
+ <SelectionOption
49
+ key="camera"
50
+ icone="photo-camera"
51
+ titre={traductions.imageSelectCamera}
52
+ onPress={() => void pickImage('camera')}
53
+ />,
54
+ // Sélectionner une photo depuis la galerie
55
+ <SelectionOption
56
+ key="galerie"
57
+ icone="photo-library"
58
+ titre={traductions.imageSelectGalerie}
59
+ onPress={() => void pickImage('gallery')}
60
+ />,
61
+ ...otherActions,
62
+ ];
63
+
49
64
  return (
50
- <View style={[styles.box, { backgroundColor: theme.colorScheme.surface, maxHeight: height * 0.7 }]}>
51
- <ScrollView contentContainerStyle={[styles.content, { paddingBottom: insets.bottom + 10 }]}>
52
- {/* Title */}
53
- {title != null && (
54
- <>
55
- <Text style={theme.textTheme.headlineMedium}>{title}</Text>
56
- <View style={styles.gap10} />
57
- </>
58
- )}
59
- <View style={styles.row}>
60
- {/* Prendre une photo avec la caméra */}
61
- <Pressable accessibilityRole="button" onPress={() => void pickImage('camera')} style={styles.camera}>
62
- <Image source={Images.ticketCaisse} style={StyleSheet.absoluteFill} contentFit="contain" />
63
- <MaterialIcons name="photo-camera" size={24} color="white" />
64
- </Pressable>
65
- </View>
66
- <View style={styles.gap20} />
67
- {/* Actions */}
68
- <Card>
69
- {/* Sélectionner une photo depuis la galerie */}
70
- <Pressable
71
- accessibilityRole="button"
72
- onPress={() => void pickImage('gallery')}
73
- style={({ pressed }) => [styles.tile, pressed ? { backgroundColor: theme.colorScheme.secondary } : null]}
74
- >
75
- <MaterialIcons name="image" size={24} color={theme.colorScheme.onSurface} />
76
- <Text style={[theme.textTheme.bodyLarge, styles.tileText]}>{traductions.transactionDetailsTicketSaveGallery}</Text>
77
- <MaterialIcons name="arrow-forward-ios" size={16} color={theme.colorScheme.onSurface} />
78
- </Pressable>
79
- {otherActions}
80
- </Card>
81
- </ScrollView>
82
- </View>
65
+ <SelectionSheet
66
+ titre={title}
67
+ entete={
68
+ subtitle != null ? (
69
+ <Text style={[theme.textTheme.displaySmall, { color: Themer.neural03Color }]}>{subtitle}</Text>
70
+ ) : undefined
71
+ }
72
+ contenu={
73
+ <ScrollView bounces={false} contentContainerStyle={styles.content}>
74
+ {actions.map((action, i) => (
75
+ <View key={i} style={i > 0 ? styles.suivante : null}>
76
+ {action}
77
+ </View>
78
+ ))}
79
+ </ScrollView>
80
+ }
81
+ />
83
82
  );
84
83
  }
85
84
 
86
85
  const styles = StyleSheet.create({
87
- box: { borderTopLeftRadius: 20, borderTopRightRadius: 20, overflow: 'hidden' },
88
- content: { paddingTop: 20, paddingHorizontal: 20 },
89
- row: { height: 80, flexDirection: 'row', alignItems: 'center' },
90
- camera: {
91
- width: 77,
92
- height: 80,
93
- borderRadius: 12,
94
- overflow: 'hidden',
95
- backgroundColor: 'rgba(0,0,0,0.12)',
96
- alignItems: 'center',
97
- justifyContent: 'center',
98
- },
99
- tile: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 16, minHeight: 56 },
100
- tileText: { flex: 1, marginHorizontal: 16 },
101
- gap10: { height: 10 },
102
- gap20: { height: 20 },
86
+ content: { paddingHorizontal: 20, paddingTop: 8, paddingBottom: 16 },
87
+ suivante: { marginTop: 10 },
103
88
  });
@@ -10,6 +10,8 @@ export type CustomTextInputProps = {
10
10
  preffix?: ReactNode;
11
11
  suffix?: ReactNode;
12
12
  suffixIcon?: ReactNode;
13
+ /** Toujours affiché au début du champ (ex. indicatif du pays). */
14
+ prefixIcon?: ReactNode;
13
15
  value?: string;
14
16
  defaultValue?: string;
15
17
  onChange?: (value: string) => void;
@@ -77,6 +79,7 @@ export const CustomTextInput: ForwardRefExoticComponent<CustomTextInputProps & R
77
79
  },
78
80
  ]}
79
81
  >
82
+ {props.prefixIcon}
80
83
  {props.preffix}
81
84
  <View style={styles.field}>
82
85
  {hasLabel && <FloatingLabel text={props.labelText!} floating={floating} restingTop={(HEIGHT - 2) / 2 - 12} />}