@pi-spi/app 1.5.1 → 2.0.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 (180) hide show
  1. package/README.md +64 -30
  2. package/example/App.tsx +27 -24
  3. package/lib/module/core/assets.js +0 -7
  4. package/lib/module/core/assets.js.map +1 -1
  5. package/lib/module/core/di.js +17 -8
  6. package/lib/module/core/di.js.map +1 -1
  7. package/lib/module/core/pi_spi_custom_theme.js +22 -10
  8. package/lib/module/core/pi_spi_custom_theme.js.map +1 -1
  9. package/lib/module/core/pi_spi_sdk_config.js +22 -8
  10. package/lib/module/core/pi_spi_sdk_config.js.map +1 -1
  11. package/lib/module/core/theme.js +345 -225
  12. package/lib/module/core/theme.js.map +1 -1
  13. package/lib/module/index.js +1 -1
  14. package/lib/module/index.js.map +1 -1
  15. package/lib/module/l10n/app_localizations.js.map +1 -1
  16. package/lib/module/l10n/app_localizations_en.js +26 -1
  17. package/lib/module/l10n/app_localizations_en.js.map +1 -1
  18. package/lib/module/l10n/app_localizations_fr.js +26 -1
  19. package/lib/module/l10n/app_localizations_fr.js.map +1 -1
  20. package/lib/module/l10n/app_localizations_pt.js +26 -1
  21. package/lib/module/l10n/app_localizations_pt.js.map +1 -1
  22. package/lib/module/modules/alias/presentation/pages/alias_delete_btn_widget.js +15 -19
  23. package/lib/module/modules/alias/presentation/pages/alias_delete_btn_widget.js.map +1 -1
  24. package/lib/module/modules/alias/presentation/pages/alias_page_claim.js +4 -11
  25. package/lib/module/modules/alias/presentation/pages/alias_page_claim.js.map +1 -1
  26. package/lib/module/modules/compte/presentation/pages/compte_details_widget.js +6 -7
  27. package/lib/module/modules/compte/presentation/pages/compte_details_widget.js.map +1 -1
  28. package/lib/module/modules/config/domain/models/config_keys.js +3 -1
  29. package/lib/module/modules/config/domain/models/config_keys.js.map +1 -1
  30. package/lib/module/modules/config/domain/services/config_service.js +31 -2
  31. package/lib/module/modules/config/domain/services/config_service.js.map +1 -1
  32. package/lib/module/modules/home/presentation/pages/home_tab_compte.js +0 -1
  33. package/lib/module/modules/home/presentation/pages/home_tab_compte.js.map +1 -1
  34. package/lib/module/modules/home/presentation/pages/home_tab_compte_more_menu.js +38 -37
  35. package/lib/module/modules/home/presentation/pages/home_tab_compte_more_menu.js.map +1 -1
  36. package/lib/module/modules/profile/presentation/pages/compte/profile_compte_page.js +25 -11
  37. package/lib/module/modules/profile/presentation/pages/compte/profile_compte_page.js.map +1 -1
  38. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page.js +14 -20
  39. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page.js.map +1 -1
  40. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.js +109 -103
  41. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.js.map +1 -1
  42. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.js +55 -72
  43. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.js.map +1 -1
  44. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.js +31 -45
  45. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.js.map +1 -1
  46. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.js +175 -203
  47. package/lib/module/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.js.map +1 -1
  48. package/lib/module/modules/profile/presentation/pages/profile_app_bar.js +26 -0
  49. package/lib/module/modules/profile/presentation/pages/profile_app_bar.js.map +1 -0
  50. package/lib/module/modules/profile/presentation/pages/profile_menu.js +144 -34
  51. package/lib/module/modules/profile/presentation/pages/profile_menu.js.map +1 -1
  52. package/lib/module/modules/profile/presentation/pages/profile_page.js +95 -63
  53. package/lib/module/modules/profile/presentation/pages/profile_page.js.map +1 -1
  54. package/lib/module/modules/profile/presentation/pages/profile_page_avatar.js +97 -45
  55. package/lib/module/modules/profile/presentation/pages/profile_page_avatar.js.map +1 -1
  56. package/lib/module/modules/profile/presentation/pages/profile_page_contacts.js +9 -8
  57. package/lib/module/modules/profile/presentation/pages/profile_page_contacts.js.map +1 -1
  58. package/lib/module/modules/search/presentation/pages/search_fonctionnalites.js +26 -2
  59. package/lib/module/modules/search/presentation/pages/search_fonctionnalites.js.map +1 -1
  60. package/lib/module/modules/search/presentation/pages/search_page.js +0 -1
  61. package/lib/module/modules/search/presentation/pages/search_page.js.map +1 -1
  62. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_recu.js +3 -1
  63. package/lib/module/modules/transactions/presentation/pages/transaction_details/transaction_details_page_recu.js.map +1 -1
  64. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page.js +4 -11
  65. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page.js.map +1 -1
  66. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.js +13 -10
  67. package/lib/module/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.js.map +1 -1
  68. package/lib/module/modules/transactions/presentation/pages/transaction_search/transaction_search_page_filters.js +5 -4
  69. package/lib/module/modules/transactions/presentation/pages/transaction_search/transaction_search_page_filters.js.map +1 -1
  70. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.js +2 -2
  71. package/lib/module/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.js.map +1 -1
  72. package/lib/module/pi_spi_sdk_entry.js +7 -2
  73. package/lib/module/pi_spi_sdk_entry.js.map +1 -1
  74. package/lib/module/shared/utils/color.js +15 -0
  75. package/lib/module/shared/utils/color.js.map +1 -0
  76. package/lib/module/shared/widgets/custom_progressbar.js +3 -2
  77. package/lib/module/shared/widgets/custom_progressbar.js.map +1 -1
  78. package/lib/module/shared/widgets/error_card_widget.js +70 -0
  79. package/lib/module/shared/widgets/error_card_widget.js.map +1 -0
  80. package/lib/module/shared/widgets/selection.js +136 -0
  81. package/lib/module/shared/widgets/selection.js.map +1 -0
  82. package/lib/typescript/src/core/assets.d.ts +0 -7
  83. package/lib/typescript/src/core/assets.d.ts.map +1 -1
  84. package/lib/typescript/src/core/di.d.ts.map +1 -1
  85. package/lib/typescript/src/core/pi_spi_custom_theme.d.ts +17 -8
  86. package/lib/typescript/src/core/pi_spi_custom_theme.d.ts.map +1 -1
  87. package/lib/typescript/src/core/pi_spi_sdk_config.d.ts +22 -8
  88. package/lib/typescript/src/core/pi_spi_sdk_config.d.ts.map +1 -1
  89. package/lib/typescript/src/core/theme.d.ts +123 -53
  90. package/lib/typescript/src/core/theme.d.ts.map +1 -1
  91. package/lib/typescript/src/index.d.ts +1 -1
  92. package/lib/typescript/src/index.d.ts.map +1 -1
  93. package/lib/typescript/src/l10n/app_localizations.d.ts +50 -0
  94. package/lib/typescript/src/l10n/app_localizations.d.ts.map +1 -1
  95. package/lib/typescript/src/l10n/app_localizations_en.d.ts.map +1 -1
  96. package/lib/typescript/src/l10n/app_localizations_fr.d.ts.map +1 -1
  97. package/lib/typescript/src/l10n/app_localizations_pt.d.ts.map +1 -1
  98. package/lib/typescript/src/modules/alias/presentation/pages/alias_delete_btn_widget.d.ts.map +1 -1
  99. package/lib/typescript/src/modules/alias/presentation/pages/alias_page_claim.d.ts.map +1 -1
  100. package/lib/typescript/src/modules/compte/presentation/pages/compte_details_widget.d.ts.map +1 -1
  101. package/lib/typescript/src/modules/config/domain/models/config_keys.d.ts +3 -1
  102. package/lib/typescript/src/modules/config/domain/models/config_keys.d.ts.map +1 -1
  103. package/lib/typescript/src/modules/config/domain/services/config_service.d.ts +7 -0
  104. package/lib/typescript/src/modules/config/domain/services/config_service.d.ts.map +1 -1
  105. package/lib/typescript/src/modules/home/presentation/pages/home_tab_compte_more_menu.d.ts +2 -0
  106. package/lib/typescript/src/modules/home/presentation/pages/home_tab_compte_more_menu.d.ts.map +1 -1
  107. package/lib/typescript/src/modules/profile/presentation/pages/compte/profile_compte_page.d.ts.map +1 -1
  108. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page.d.ts.map +1 -1
  109. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.d.ts.map +1 -1
  110. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.d.ts.map +1 -1
  111. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.d.ts.map +1 -1
  112. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.d.ts +1 -1
  113. package/lib/typescript/src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.d.ts.map +1 -1
  114. package/lib/typescript/src/modules/profile/presentation/pages/profile_app_bar.d.ts +5 -0
  115. package/lib/typescript/src/modules/profile/presentation/pages/profile_app_bar.d.ts.map +1 -0
  116. package/lib/typescript/src/modules/profile/presentation/pages/profile_menu.d.ts +31 -4
  117. package/lib/typescript/src/modules/profile/presentation/pages/profile_menu.d.ts.map +1 -1
  118. package/lib/typescript/src/modules/profile/presentation/pages/profile_page.d.ts +4 -1
  119. package/lib/typescript/src/modules/profile/presentation/pages/profile_page.d.ts.map +1 -1
  120. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_avatar.d.ts +1 -1
  121. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_avatar.d.ts.map +1 -1
  122. package/lib/typescript/src/modules/profile/presentation/pages/profile_page_contacts.d.ts.map +1 -1
  123. package/lib/typescript/src/modules/search/presentation/pages/search_fonctionnalites.d.ts.map +1 -1
  124. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page.d.ts.map +1 -1
  125. package/lib/typescript/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.d.ts.map +1 -1
  126. package/lib/typescript/src/shared/utils/color.d.ts +7 -0
  127. package/lib/typescript/src/shared/utils/color.d.ts.map +1 -0
  128. package/lib/typescript/src/shared/widgets/custom_progressbar.d.ts.map +1 -1
  129. package/lib/typescript/src/shared/widgets/error_card_widget.d.ts +11 -0
  130. package/lib/typescript/src/shared/widgets/error_card_widget.d.ts.map +1 -0
  131. package/lib/typescript/src/shared/widgets/selection.d.ts +21 -0
  132. package/lib/typescript/src/shared/widgets/selection.d.ts.map +1 -0
  133. package/package.json +1 -1
  134. package/src/core/assets.ts +0 -7
  135. package/src/core/di.ts +13 -8
  136. package/src/core/pi_spi_custom_theme.ts +22 -15
  137. package/src/core/pi_spi_sdk_config.ts +27 -9
  138. package/src/core/theme.ts +381 -269
  139. package/src/index.ts +1 -1
  140. package/src/l10n/app_localizations.ts +50 -0
  141. package/src/l10n/app_localizations_en.ts +25 -0
  142. package/src/l10n/app_localizations_fr.ts +25 -0
  143. package/src/l10n/app_localizations_pt.ts +25 -0
  144. package/src/modules/alias/presentation/pages/alias_delete_btn_widget.tsx +13 -12
  145. package/src/modules/alias/presentation/pages/alias_page_claim.tsx +5 -4
  146. package/src/modules/compte/presentation/pages/compte_details_widget.tsx +3 -4
  147. package/src/modules/config/domain/models/config_keys.ts +3 -1
  148. package/src/modules/config/domain/services/config_service.ts +31 -2
  149. package/src/modules/home/presentation/pages/home_tab_compte.tsx +1 -1
  150. package/src/modules/home/presentation/pages/home_tab_compte_more_menu.tsx +34 -42
  151. package/src/modules/profile/presentation/pages/compte/profile_compte_page.tsx +15 -7
  152. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page.tsx +12 -17
  153. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.tsx +89 -68
  154. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.tsx +84 -54
  155. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.tsx +28 -24
  156. package/src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.tsx +121 -131
  157. package/src/modules/profile/presentation/pages/profile_app_bar.tsx +21 -0
  158. package/src/modules/profile/presentation/pages/profile_menu.tsx +126 -33
  159. package/src/modules/profile/presentation/pages/profile_page.tsx +90 -66
  160. package/src/modules/profile/presentation/pages/profile_page_avatar.tsx +69 -28
  161. package/src/modules/profile/presentation/pages/profile_page_contacts.tsx +5 -4
  162. package/src/modules/search/presentation/pages/search_fonctionnalites.ts +40 -7
  163. package/src/modules/search/presentation/pages/search_page.tsx +1 -1
  164. package/src/modules/transactions/presentation/pages/transaction_details/transaction_details_page_recu.tsx +3 -1
  165. package/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page.tsx +2 -4
  166. package/src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.tsx +13 -6
  167. package/src/modules/transactions/presentation/pages/transaction_search/transaction_search_page_filters.tsx +4 -4
  168. package/src/modules/transactions/presentation/pages/transaction_split/transaction_split_page_repartition.tsx +2 -2
  169. package/src/pi_spi_sdk_entry.tsx +9 -2
  170. package/src/shared/utils/color.ts +14 -0
  171. package/src/shared/widgets/custom_progressbar.tsx +3 -2
  172. package/src/shared/widgets/error_card_widget.tsx +58 -0
  173. package/src/shared/widgets/selection.tsx +98 -0
  174. package/assets/images/theme_light_blue.jpeg +0 -0
  175. package/assets/images/theme_light_green.jpeg +0 -0
  176. package/assets/images/theme_light_orange.jpeg +0 -0
  177. package/assets/images/theme_light_pink.jpeg +0 -0
  178. package/assets/images/theme_light_purple.jpeg +0 -0
  179. package/assets/images/theme_light_red.jpeg +0 -0
  180. package/assets/images/theme_light_yellow.jpeg +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"profile_compte_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/compte/profile_compte_page.tsx"],"names":[],"mappings":"AAQA,0EAA0E;AAC1E,wBAAgB,iBAAiB,gCAahC"}
1
+ {"version":3,"file":"profile_compte_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/compte/profile_compte_page.tsx"],"names":[],"mappings":"AAUA,0EAA0E;AAC1E,wBAAgB,iBAAiB,gCAiBhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile_parametre_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page.tsx"],"names":[],"mappings":"AAoEA,8DAA8D;AAC9D,wBAAgB,oBAAoB,gCA8BnC"}
1
+ {"version":3,"file":"profile_parametre_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page.tsx"],"names":[],"mappings":"AAkEA,8DAA8D;AAC9D,wBAAgB,oBAAoB,gCA4BnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile_parametre_page_notifications.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.tsx"],"names":[],"mappings":"AA2BA,gHAAgH;AAChH,wBAAgB,iCAAiC,gCAqHhD"}
1
+ {"version":3,"file":"profile_parametre_page_notifications.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications.tsx"],"names":[],"mappings":"AA2BA,gHAAgH;AAChH,wBAAgB,iCAAiC,gCAwIhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile_parametre_page_notifications_son.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.tsx"],"names":[],"mappings":"AAoBA;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,gCAiEnD"}
1
+ {"version":3,"file":"profile_parametre_page_notifications_son.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_notifications_son.tsx"],"names":[],"mappings":"AAqBA;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,gCAkFnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile_parametre_page_qrcode.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.tsx"],"names":[],"mappings":"AAaA,qFAAqF;AACrF,wBAAgB,0BAA0B,gCA8BzC"}
1
+ {"version":3,"file":"profile_parametre_page_qrcode.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_qrcode.tsx"],"names":[],"mappings":"AAcA,qFAAqF;AACrF,wBAAgB,0BAA0B,gCAoCzC"}
@@ -1,3 +1,3 @@
1
- /** Choix du thème de l'application (route `profileParametreTheme`). */
1
+ /** Choix du thème (système, clair, sombre) et de la couleur d'accentuation (route `profileParametreTheme`). */
2
2
  export declare function ProfileParametrePageTheme(): import("react").JSX.Element;
3
3
  //# sourceMappingURL=profile_parametre_page_theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile_parametre_page_theme.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.tsx"],"names":[],"mappings":"AAgDA,uEAAuE;AACvE,wBAAgB,yBAAyB,gCA6CxC"}
1
+ {"version":3,"file":"profile_parametre_page_theme.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/profile/presentation/pages/parametre/profile_parametre_page_theme.tsx"],"names":[],"mappings":"AAmCA,+GAA+G;AAC/G,wBAAgB,yBAAyB,gCAsHxC"}
@@ -0,0 +1,5 @@
1
+ /** Barre des écrans du profil : bouton retour et [titre] de la page. */
2
+ export declare function ProfileAppBar({ titre }: {
3
+ titre: string;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=profile_app_bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile_app_bar.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_app_bar.tsx"],"names":[],"mappings":"AAMA,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,+BAazD"}
@@ -1,4 +1,5 @@
1
- import type { ReactNode } from 'react';
1
+ import { MaterialIcons } from '@expo/vector-icons';
2
+ import { type ComponentProps, type ReactElement, type ReactNode } from 'react';
2
3
  /** Une entrée du menu du profil : une route, une action, ou une feuille à ouvrir. */
3
4
  export declare class ProfileItem {
4
5
  readonly icon: number;
@@ -15,8 +16,34 @@ export declare class ProfileItem {
15
16
  sheet?: () => ReactNode;
16
17
  });
17
18
  }
18
- /** Menu du profil : une carte avec une ligne (icône, titre, sous-titre) par entrée. */
19
- export declare function ProfilePageMenu({ items }: {
20
- items: ProfileItem[];
19
+ /**
20
+ * Groupe d'entrées du profil dans une carte : [titre] de section facultatif
21
+ * au-dessus, puis une ligne par élément, séparées par un trait. Les [items]
22
+ * sont des `ProfileItem` ou des composants déjà construits (ex. bouton de
23
+ * modification du code PIN, qui utilise `ProfileMenuTile`).
24
+ */
25
+ export declare function ProfilePageMenu({ items, titre }: {
26
+ items: (ProfileItem | ReactElement)[];
27
+ titre?: string;
28
+ }): import("react").JSX.Element;
29
+ /**
30
+ * Ligne d'un menu du profil : pastille avec l'icône, [titre], [sousTitre]
31
+ * facultatif et, à droite, [trailing] (ex. Switch) ou une flèche.
32
+ * [couleur] remplace la couleur principale (ex. rouge pour une action
33
+ * destructive).
34
+ */
35
+ export declare function ProfileMenuTile({ image, icone, titre, sousTitre, onPress, trailing, couleur, disabled, }: {
36
+ image?: number;
37
+ icone?: ComponentProps<typeof MaterialIcons>['name'];
38
+ titre: string;
39
+ sousTitre?: string;
40
+ onPress?: () => void;
41
+ trailing?: ReactNode;
42
+ couleur?: string;
43
+ disabled?: boolean;
44
+ }): import("react").JSX.Element;
45
+ /** Titre d'une section du profil, en petites capitales. */
46
+ export declare function ProfileSectionTitre({ titre }: {
47
+ titre: string;
21
48
  }): import("react").JSX.Element;
22
49
  //# sourceMappingURL=profile_menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile_menu.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,qFAAqF;AACrF,qBAAa,WAAW;IAOpB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;IAR7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,SAAS,CAAC;gBAGtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAC3C,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,SAAS,CAAA;KAAO;CAOnH;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,+BAkClE"}
1
+ {"version":3,"file":"profile_menu.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_menu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAA4B,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AASzG,qFAAqF;AACrF,qBAAa,WAAW;IAOpB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;IAR7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,SAAS,CAAC;gBAGtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAC3C,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,SAAS,CAAA;KAAO;CAOnH;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,+BA8C1G;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,SAAS,EACT,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,+BAiCA;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,+BAK/D"}
@@ -1,3 +1,6 @@
1
- /** Profil du client (route `profile`). */
1
+ /**
2
+ * Profil du client (route `profile`) : en-tête de l'utilisateur, menus
3
+ * « Mon compte » et « Assistance », puis liens légaux et version de l'app.
4
+ */
2
5
  export declare function ProfilePage(): import("react").JSX.Element;
3
6
  //# sourceMappingURL=profile_page.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile_page.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_page.tsx"],"names":[],"mappings":"AAkDA,0CAA0C;AAC1C,wBAAgB,WAAW,gCAwD1B"}
1
+ {"version":3,"file":"profile_page.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_page.tsx"],"names":[],"mappings":"AAqDA;;;GAGG;AACH,wBAAgB,WAAW,gCAyE1B"}
@@ -1,3 +1,3 @@
1
- /** En-tête du profil : nom, alias, et photo (modifiable). */
1
+ /** En-tête du profil : photo (modifiable), nom et alias. */
2
2
  export declare function ProfilePageAvatar(): import("react").JSX.Element;
3
3
  //# sourceMappingURL=profile_page_avatar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile_page_avatar.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_page_avatar.tsx"],"names":[],"mappings":"AAoBA,6DAA6D;AAC7D,wBAAgB,iBAAiB,gCAmEhC"}
1
+ {"version":3,"file":"profile_page_avatar.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_page_avatar.tsx"],"names":[],"mappings":"AAuBA,4DAA4D;AAC5D,wBAAgB,iBAAiB,gCA0FhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"profile_page_contacts.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_page_contacts.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAqC,CAAC;AAOrE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,+BAuElF"}
1
+ {"version":3,"file":"profile_page_contacts.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/profile/presentation/pages/profile_page_contacts.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAqC,CAAC;AAQrE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,+BAsElF"}
@@ -1 +1 @@
1
- {"version":3,"file":"search_fonctionnalites.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/search/presentation/pages/search_fonctionnalites.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,4BAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAoC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAoC,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,gBAAgB,EAC7B,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC3D,cAAc,EAAE,CA6GlB"}
1
+ {"version":3,"file":"search_fonctionnalites.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/search/presentation/pages/search_fonctionnalites.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,4BAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAoC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAoC,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,gBAAgB,EAC7B,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC3D,cAAc,EAAE,CA4IlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"transaction_rtp_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAE,gBAAgB,IAAI,kBAAkB,EAAE,MAAM,6DAA0D,CAAC;AAkBlH,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,EACjC,EAAE,EACF,IAAI,EACJ,WAAW,EACX,eAAe,GAChB,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,+BA6NA"}
1
+ {"version":3,"file":"transaction_rtp_page.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,gBAAgB,IAAI,kBAAkB,EAAE,MAAM,6DAA0D,CAAC;AAkBlH,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,EACjC,EAAE,EACF,IAAI,EACJ,WAAW,EACX,eAAe,GAChB,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,+BA2NA"}
@@ -1 +1 @@
1
- {"version":3,"file":"transaction_rtp_page_actions.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wDAAqD,CAAC;AACxF,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,uCAAoC,CAAC;AAGzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAiD,CAAC;AAe1F;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,EAAE,EACF,GAAG,EACH,KAAK,EACL,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,EAAE,EAAE,WAAW,CAAC;IAChB,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB,+BA+EA"}
1
+ {"version":3,"file":"transaction_rtp_page_actions.d.ts","sourceRoot":"","sources":["../../../../../../../../src/modules/transactions/presentation/pages/transaction_rtp/transaction_rtp_page_actions.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wDAAqD,CAAC;AACxF,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,uCAAoC,CAAC;AAGzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oDAAiD,CAAC;AAe1F;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,EAAE,EACF,GAAG,EACH,KAAK,EACL,IAAI,EACJ,WAAW,GACZ,EAAE;IACD,EAAE,EAAE,WAAW,CAAC;IAChB,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB,+BAoFA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Équivalent de `Color.withValues(alpha:)` : la couleur [color] avec
3
+ * l'opacité [alpha] (0 à 1). Accepte `#RGB`, `#RRGGBB` et `#RRGGBBAA` ;
4
+ * toute autre forme est rendue telle quelle.
5
+ */
6
+ export declare function withAlpha(color: string, alpha: number): string;
7
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../../../src/shared/utils/color.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9D"}
@@ -1 +1 @@
1
- {"version":3,"file":"custom_progressbar.d.ts","sourceRoot":"","sources":["../../../../../src/shared/widgets/custom_progressbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,aAAa,EACb,aAAa,EACb,eAAe,EACf,IAAS,EACT,WAAiB,EACjB,QAAQ,GACT,EAAE;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BA0BA"}
1
+ {"version":3,"file":"custom_progressbar.d.ts","sourceRoot":"","sources":["../../../../../src/shared/widgets/custom_progressbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,aAAa,EACb,aAAa,EACb,eAAe,EACf,IAAS,EACT,WAAiB,EACjB,QAAQ,GACT,EAAE;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BA2BA"}
@@ -0,0 +1,11 @@
1
+ import { MaterialIcons } from '@expo/vector-icons';
2
+ import type { ComponentProps } from 'react';
3
+ /**
4
+ * Carte d'avertissement : fond teinté, bordure et icône dans la couleur
5
+ * d'erreur du thème, suivies du `message`.
6
+ */
7
+ export declare function ErrorCardWidget({ message, icon, }: {
8
+ message: string;
9
+ icon?: ComponentProps<typeof MaterialIcons>['name'];
10
+ }): import("react").JSX.Element;
11
+ //# sourceMappingURL=error_card_widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error_card_widget.d.ts","sourceRoot":"","sources":["../../../../../src/shared/widgets/error_card_widget.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAY5C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,IAAsB,GACvB,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;CACrD,+BAqBA"}
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Feuille de sélection : poignée, [titre], [entete] facultatif, puis le
4
+ * [contenu] (qui défile s'il est trop long : utiliser un ScrollView).
5
+ * À ouvrir avec showModalBottomSheet.
6
+ */
7
+ export declare function SelectionSheet({ titre, titreSize, entete, contenu, }: {
8
+ titre?: string;
9
+ titreSize?: number;
10
+ entete?: ReactNode;
11
+ contenu: ReactNode;
12
+ }): import("react").JSX.Element;
13
+ /** Ligne d'une feuille de sélection : [pastille], [texte], [detail] facultatif et coche si elle est [choisie]. */
14
+ export declare function SbSelectionLigne({ pastille, texte, detail, choisie, onPress, }: {
15
+ pastille: ReactNode;
16
+ texte: string;
17
+ detail?: string;
18
+ choisie: boolean;
19
+ onPress: () => void;
20
+ }): import("react").JSX.Element;
21
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../../../src/shared/widgets/selection.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;CACpB,+BAqBA;AAED,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,GACR,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BA2BA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-spi/app",
3
- "version": "1.5.1",
3
+ "version": "2.0.0",
4
4
  "description": "SDK React Native permettant d'intégrer PI-SPI (transactions, demande d'annulation, retour de fond, demande de paiement, QR Code, gestion des alias, gestion des abonnements, notifications, profil, compte) dans une application mobile existante.",
5
5
  "homepage": "https://github.com/pisfn-sandbox/mobile-app-react-native-sdk.git",
6
6
  "repository": {
@@ -194,13 +194,6 @@ export class Images {
194
194
 
195
195
  static readonly imageThemeSystem: number = require('../../assets/images/theme_system.png');
196
196
  static readonly imageThemeLight: number = require('../../assets/images/theme_light.jpeg');
197
- static readonly imageThemeLightBlue: number = require('../../assets/images/theme_light_blue.jpeg');
198
- static readonly imageThemeLightGreen: number = require('../../assets/images/theme_light_green.jpeg');
199
- static readonly imageThemeLightYellow: number = require('../../assets/images/theme_light_yellow.jpeg');
200
- static readonly imageThemeLightRed: number = require('../../assets/images/theme_light_red.jpeg');
201
- static readonly imageThemeLightOrange: number = require('../../assets/images/theme_light_orange.jpeg');
202
- static readonly imageThemeLightPurple: number = require('../../assets/images/theme_light_purple.jpeg');
203
- static readonly imageThemeLightPink: number = require('../../assets/images/theme_light_pink.jpeg');
204
197
  static readonly imageThemeDark: number = require('../../assets/images/theme_dark.jpeg');
205
198
 
206
199
  static readonly imageHomeThemeDefault: number = require('../../assets/images/home_default.jpeg');
package/src/core/di.ts CHANGED
@@ -139,14 +139,19 @@ export class Di {
139
139
  * aucune n'existe encore) est conservée telle quelle.
140
140
  */
141
141
  private static async applyDefaultTheme(config: PiSpiSdkConfig): Promise<void> {
142
- // Un thème personnalisé (PiSpiAppConfig.customTheme) prime sur
143
- // defaultTheme : il est construit ici et persisté sous son code.
144
- const customTheme = config.appConfig.customTheme;
145
- Themer.customTheme = customTheme?.build() ?? null;
146
- if (customTheme != null) {
147
- await Di.sharedPreferences.setString(ConfigKey.preferedTheme, Themer.customThemeCode);
148
- } else if (config.appConfig.defaultTheme != null) {
149
- await Di.sharedPreferences.setString(ConfigKey.preferedTheme, config.appConfig.defaultTheme);
142
+ // La couleur d'un thème personnalisé (PiSpiAppConfig.customTheme)
143
+ // prime sur defaultAccent : elle est préparée ici et persistée sous
144
+ // son code.
145
+ const { customTheme, defaultTheme, defaultAccent } = config.appConfig;
146
+ Themer.customAccent = customTheme?.teintes() ?? null;
147
+ Themer.customThemeData = customTheme?.themeDataFourni ?? null;
148
+ Themer.resetCustomThemes();
149
+ if (defaultTheme != null) {
150
+ await Di.sharedPreferences.setString(ConfigKey.preferedTheme, defaultTheme);
151
+ }
152
+ const accent = customTheme != null ? Themer.customAccentCode : defaultAccent;
153
+ if (accent != null) {
154
+ await Di.sharedPreferences.setString(ConfigKey.preferedAccent, accent);
150
155
  }
151
156
  }
152
157
 
@@ -1,4 +1,4 @@
1
- import { Themer, lerpColor, type ThemeData } from './theme';
1
+ import { Themer, type AccentTeintes, type ThemeData } from './theme';
2
2
 
3
3
  /**
4
4
  * Thème personnalisé de l'application hôte, quand aucun des thèmes du SDK
@@ -6,18 +6,20 @@ import { Themer, lerpColor, type ThemeData } from './theme';
6
6
  *
7
7
  * Deux façons de le définir :
8
8
  *
9
- * - **Par ses couleurs** (cas courant) : le SDK construit un thème complet
10
- * sur le même modèle que ses thèmes clairs colorés (rouge, violet,
11
- * rose...). Seule `primary` est obligatoire ; les autres couleurs en sont
12
- * dérivées si elles ne sont pas fournies.
9
+ * - **Par ses couleurs** (cas courant) : la couleur devient la couleur
10
+ * d'accentuation « Thème de l'application » du SDK, en clair comme en
11
+ * sombre (une teinte plus lumineuse est dérivée pour le sombre). Seule
12
+ * `primary` est obligatoire ; les autres couleurs en sont dérivées si
13
+ * elles ne sont pas fournies.
13
14
  *
14
15
  * ```ts
15
16
  * new PiSpiCustomTheme({ primary: '#00695C', secondary: '#B2DFDB' })
16
17
  * ```
17
18
  *
18
19
  * - **Par un `ThemeData` complet** (avancé), avec
19
- * `PiSpiCustomTheme.themeData`. Partez de préférence du thème construit
20
- * par le SDK, pour conserver tous les réglages dont ses écrans ont
20
+ * `PiSpiCustomTheme.themeData`. Il remplace alors les thèmes clair et
21
+ * sombre du SDK. Partez de préférence du thème construit par le SDK,
22
+ * pour conserver tous les réglages dont ses écrans ont
21
23
  * besoin (cartes, champs, boutons, textes) :
22
24
  *
23
25
  * ```ts
@@ -52,15 +54,20 @@ export class PiSpiCustomTheme {
52
54
  return custom;
53
55
  }
54
56
 
55
- /** Le `ThemeData` appliqué aux écrans du SDK. */
57
+ /** Thème complet fourni par l'hôte, `undefined` s'il est défini par ses couleurs. */
58
+ get themeDataFourni(): ThemeData | undefined {
59
+ return this.themeDataValue;
60
+ }
61
+
62
+ /** Teintes claire et sombre de la couleur, `null` pour un thème complet. */
63
+ teintes(): { clair: AccentTeintes; sombre: AccentTeintes } | null {
64
+ if (this.themeDataValue != null) return null;
65
+ return Themer.teintesDepuis(this.primary!, this.secondary, this.tertiary, this.pressed);
66
+ }
67
+
68
+ /** Le `ThemeData` clair appliqué aux écrans du SDK. */
56
69
  build(): ThemeData {
57
70
  if (this.themeDataValue != null) return this.themeDataValue;
58
- const main = this.primary!;
59
- return Themer.colored(
60
- main,
61
- this.secondary ?? lerpColor(main, '#FFFFFF', 0.75),
62
- this.tertiary ?? lerpColor(main, '#FFFFFF', 0.4),
63
- this.pressed ?? lerpColor(main, '#000000', 0.2),
64
- );
71
+ return Themer.depuisTeintes(this.teintes()!.clair);
65
72
  }
66
73
  }
@@ -1,6 +1,6 @@
1
1
  import { supportedLocales, type SupportedLocaleCode } from '../l10n/app_localizations';
2
2
  import type { PiSpiCustomTheme } from './pi_spi_custom_theme';
3
- import { Themes } from './theme';
3
+ import { Accents, Themes } from './theme';
4
4
 
5
5
  /**
6
6
  * Équivalent des `assert` Dart : vérifié uniquement en développement
@@ -226,18 +226,31 @@ export class PiSpiAppConfig {
226
226
  * SDK lors d'une session précédente (voir {@link canChangeTheme}). Si
227
227
  * absent, la préférence locale actuelle est conservée telle quelle (ou
228
228
  * le défaut du SDK, `Themes.light`, si aucune n'existe encore).
229
+ * Valeurs : `Themes.system`, `Themes.light` ou `Themes.dark` ; la couleur
230
+ * se choisit avec {@link defaultAccent}.
229
231
  */
230
232
  readonly defaultTheme?: Themes;
231
233
 
234
+ /**
235
+ * Couleur d'accentuation avec laquelle le SDK s'ouvre (boutons, liens,
236
+ * pastilles), en clair comme en sombre. Optionnelle : si fournie, elle
237
+ * est appliquée et **persistée** à chaque ouverture du SDK, comme
238
+ * {@link defaultTheme}. Si absente, la préférence locale est conservée
239
+ * (ou la couleur PI-SPI, `Accents.pispi`, si aucune n'existe encore).
240
+ * Ignorée si {@link customTheme} est fourni.
241
+ */
242
+ readonly defaultAccent?: Accents;
243
+
232
244
  /**
233
245
  * Thème personnalisé de l'application hôte, quand aucun des thèmes du
234
246
  * SDK (`Themes`) ne convient : défini par ses couleurs ou par un
235
247
  * `ThemeData` complet (voir {@link PiSpiCustomTheme}). Optionnel : si
236
- * fourni, il est appliqué et **persisté** à chaque ouverture du SDK, et
237
- * il prime sur {@link defaultTheme}. L'entrée « Thème » des paramètres
238
- * est alors masquée, sauf si {@link canChangeTheme} vaut `true` : le
239
- * client peut alors choisir entre « Thème de l'application » (ce thème)
240
- * et les thèmes du SDK.
248
+ * fourni, sa couleur est appliquée et **persistée** à chaque ouverture
249
+ * du SDK, en clair comme en sombre, et elle prime sur
250
+ * {@link defaultAccent}. L'entrée « Thème » des paramètres est alors
251
+ * masquée, sauf si {@link canChangeTheme} vaut `true` : le client peut
252
+ * alors choisir entre la couleur « Thème de l'application » et celles du
253
+ * SDK.
241
254
  */
242
255
  readonly customTheme?: PiSpiCustomTheme;
243
256
 
@@ -248,8 +261,9 @@ export class PiSpiAppConfig {
248
261
  * la préférence déjà persistée, voir sa documentation) pour toute la
249
262
  * session — comme pour {@link defaultLocale}.
250
263
  *
251
- * Non fourni, sa valeur par défaut dépend de {@link defaultTheme} et de
252
- * {@link customTheme} : `false` si l'hôte a fourni l'un des deux (il impose alors ce
264
+ * Non fourni, sa valeur par défaut dépend de {@link defaultTheme},
265
+ * {@link defaultAccent} et {@link customTheme} : `false` si l'hôte a
266
+ * fourni l'un d'eux (il impose alors ce
253
267
  * thème, cohérent avec le comportement de `defaultLocale`), `true` sinon
254
268
  * (l'hôte n'a exprimé aucun avis sur le thème, donc autant laisser le
255
269
  * client choisir). Passez explicitement `true`/`false` pour imposer un
@@ -268,6 +282,7 @@ export class PiSpiAppConfig {
268
282
  appstoreLink?: string;
269
283
  defaultLocale?: SupportedLocaleCode;
270
284
  defaultTheme?: Themes;
285
+ defaultAccent?: Accents;
271
286
  customTheme?: PiSpiCustomTheme;
272
287
  canChangeTheme?: boolean;
273
288
  }) {
@@ -281,8 +296,11 @@ export class PiSpiAppConfig {
281
296
  this.appstoreLink = params.appstoreLink ?? '';
282
297
  this.defaultLocale = params.defaultLocale ?? 'fr';
283
298
  this.defaultTheme = params.defaultTheme;
299
+ this.defaultAccent = params.defaultAccent;
284
300
  this.customTheme = params.customTheme;
285
- this.canChangeTheme = params.canChangeTheme ?? (params.defaultTheme === undefined && params.customTheme === undefined);
301
+ this.canChangeTheme =
302
+ params.canChangeTheme ??
303
+ (params.defaultTheme === undefined && params.defaultAccent === undefined && params.customTheme === undefined);
286
304
 
287
305
  devAssert(
288
306
  (PiSpiAppConfig.supportedLocaleCodes as readonly string[]).includes(this.defaultLocale),