@umituz/react-native-ai-generation-content 1.26.2 → 1.26.4

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 (327) hide show
  1. package/package.json +3 -2
  2. package/src/domains/generation/application/feature-registry.ts +101 -0
  3. package/src/domains/generation/application/generation-strategy.factory.ts +128 -0
  4. package/src/domains/generation/domain/feature-config.types.ts +61 -0
  5. package/src/domains/generation/domain/generation.types.ts +74 -0
  6. package/src/domains/generation/index.ts +37 -0
  7. package/src/domains/generation/presentation/useAIGeneration.hook.ts +106 -0
  8. package/src/domains/wizard/infrastructure/strategies/wizard-strategy.factory.ts +3 -4
  9. package/src/index.ts +1 -25
  10. package/src/infrastructure/executors/executor-factory.ts +53 -0
  11. package/src/infrastructure/executors/image-executor.ts +133 -0
  12. package/src/infrastructure/executors/video-executor.ts +130 -0
  13. package/src/features/ai-hug/README.md +0 -438
  14. package/src/features/ai-hug/domain/index.ts +0 -5
  15. package/src/features/ai-hug/domain/types/ai-hug.types.ts +0 -25
  16. package/src/features/ai-hug/domain/types/index.ts +0 -7
  17. package/src/features/ai-hug/index.ts +0 -19
  18. package/src/features/ai-hug/presentation/components/AIHugFeature.tsx +0 -77
  19. package/src/features/ai-hug/presentation/components/index.ts +0 -2
  20. package/src/features/ai-hug/presentation/hooks/index.ts +0 -9
  21. package/src/features/ai-hug/presentation/hooks/useAIHugFeature.ts +0 -34
  22. package/src/features/ai-hug/presentation/index.ts +0 -6
  23. package/src/features/ai-kiss/README.md +0 -445
  24. package/src/features/ai-kiss/domain/index.ts +0 -5
  25. package/src/features/ai-kiss/domain/types/ai-kiss.types.ts +0 -25
  26. package/src/features/ai-kiss/domain/types/index.ts +0 -7
  27. package/src/features/ai-kiss/index.ts +0 -19
  28. package/src/features/ai-kiss/presentation/components/AIKissFeature.tsx +0 -77
  29. package/src/features/ai-kiss/presentation/components/index.ts +0 -2
  30. package/src/features/ai-kiss/presentation/hooks/index.ts +0 -9
  31. package/src/features/ai-kiss/presentation/hooks/useAIKissFeature.ts +0 -34
  32. package/src/features/ai-kiss/presentation/index.ts +0 -6
  33. package/src/features/anime-selfie/README.md +0 -396
  34. package/src/features/anime-selfie/domain/index.ts +0 -5
  35. package/src/features/anime-selfie/domain/types/anime-selfie.types.ts +0 -52
  36. package/src/features/anime-selfie/domain/types/index.ts +0 -8
  37. package/src/features/anime-selfie/index.ts +0 -20
  38. package/src/features/anime-selfie/presentation/components/AnimeSelfieFeature.tsx +0 -86
  39. package/src/features/anime-selfie/presentation/components/index.ts +0 -2
  40. package/src/features/anime-selfie/presentation/hooks/index.ts +0 -9
  41. package/src/features/anime-selfie/presentation/hooks/useAnimeSelfieFeature.ts +0 -59
  42. package/src/features/anime-selfie/presentation/index.ts +0 -6
  43. package/src/features/couple-future/README.md +0 -445
  44. package/src/features/couple-future/domain/types.ts +0 -63
  45. package/src/features/couple-future/domain/wizard-config.adapter.ts +0 -76
  46. package/src/features/couple-future/domain/wizard.types.ts +0 -121
  47. package/src/features/couple-future/index.ts +0 -83
  48. package/src/features/couple-future/infrastructure/coupleFeatureRegistry.ts +0 -76
  49. package/src/features/couple-future/infrastructure/couplePromptEnhancer.ts +0 -100
  50. package/src/features/couple-future/infrastructure/executor.ts +0 -188
  51. package/src/features/couple-future/infrastructure/generationUtils.ts +0 -228
  52. package/src/features/couple-future/presentation/components/ArtStyleSelector.tsx +0 -146
  53. package/src/features/couple-future/presentation/components/ArtistStyleSelector.tsx +0 -122
  54. package/src/features/couple-future/presentation/components/CoupleFutureWizard.tsx +0 -239
  55. package/src/features/couple-future/presentation/components/GeneratingStepContent.tsx +0 -86
  56. package/src/features/couple-future/presentation/components/RomanticMoodSelector.tsx +0 -147
  57. package/src/features/couple-future/presentation/components/WardrobeSelector.tsx +0 -141
  58. package/src/features/couple-future/presentation/components/index.ts +0 -12
  59. package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.ts +0 -166
  60. package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.types.ts +0 -69
  61. package/src/features/couple-future/presentation/hooks/useCoupleFutureHandlers.ts +0 -117
  62. package/src/features/couple-future/presentation/screens/CoupleFeatureScreen.tsx +0 -113
  63. package/src/features/face-swap/README.md +0 -431
  64. package/src/features/face-swap/domain/index.ts +0 -5
  65. package/src/features/face-swap/domain/types/face-swap.types.ts +0 -26
  66. package/src/features/face-swap/domain/types/index.ts +0 -7
  67. package/src/features/face-swap/index.ts +0 -19
  68. package/src/features/face-swap/presentation/components/FaceSwapFeature.tsx +0 -87
  69. package/src/features/face-swap/presentation/components/index.ts +0 -2
  70. package/src/features/face-swap/presentation/hooks/index.ts +0 -6
  71. package/src/features/face-swap/presentation/hooks/useFaceSwapFeature.ts +0 -35
  72. package/src/features/face-swap/presentation/index.ts +0 -6
  73. package/src/features/hd-touch-up/README.md +0 -396
  74. package/src/features/hd-touch-up/domain/index.ts +0 -1
  75. package/src/features/hd-touch-up/domain/types/hd-touch-up.types.ts +0 -62
  76. package/src/features/hd-touch-up/domain/types/index.ts +0 -9
  77. package/src/features/hd-touch-up/index.ts +0 -21
  78. package/src/features/hd-touch-up/presentation/components/HDTouchUpFeature.tsx +0 -86
  79. package/src/features/hd-touch-up/presentation/components/index.ts +0 -2
  80. package/src/features/hd-touch-up/presentation/hooks/index.ts +0 -1
  81. package/src/features/hd-touch-up/presentation/hooks/useHDTouchUpFeature.ts +0 -23
  82. package/src/features/hd-touch-up/presentation/index.ts +0 -2
  83. package/src/features/image-to-image/README.md +0 -459
  84. package/src/features/image-to-image/domain/index.ts +0 -1
  85. package/src/features/image-to-image/domain/types/base.types.ts +0 -48
  86. package/src/features/image-to-image/domain/types/index.ts +0 -1
  87. package/src/features/image-to-image/domain/types/partials/config.types.ts +0 -37
  88. package/src/features/image-to-image/domain/types/partials/hook.types.ts +0 -53
  89. package/src/features/image-to-image/domain/types/partials/metadata.types.ts +0 -32
  90. package/src/features/image-to-image/domain/types/partials/result.types.ts +0 -44
  91. package/src/features/image-to-image/domain/types/partials/state.types.ts +0 -34
  92. package/src/features/image-to-image/domain/types/partials/translation.types.ts +0 -57
  93. package/src/features/image-to-image/index.ts +0 -2
  94. package/src/features/image-to-image/presentation/hooks/index.ts +0 -3
  95. package/src/features/image-to-image/presentation/hooks/useDualImageFeature.ts +0 -204
  96. package/src/features/image-to-image/presentation/hooks/useImageWithPromptFeature.ts +0 -223
  97. package/src/features/image-to-image/presentation/hooks/useSingleImageFeature.ts +0 -166
  98. package/src/features/image-to-image/presentation/index.ts +0 -1
  99. package/src/features/image-to-video/README.md +0 -414
  100. package/src/features/image-to-video/domain/constants/animation.constants.ts +0 -47
  101. package/src/features/image-to-video/domain/constants/duration.constants.ts +0 -13
  102. package/src/features/image-to-video/domain/constants/form.constants.ts +0 -22
  103. package/src/features/image-to-video/domain/constants/index.ts +0 -23
  104. package/src/features/image-to-video/domain/constants/music.constants.ts +0 -53
  105. package/src/features/image-to-video/domain/index.ts +0 -5
  106. package/src/features/image-to-video/domain/types/animation.types.ts +0 -20
  107. package/src/features/image-to-video/domain/types/config.types.ts +0 -56
  108. package/src/features/image-to-video/domain/types/duration.types.ts +0 -11
  109. package/src/features/image-to-video/domain/types/form.types.ts +0 -35
  110. package/src/features/image-to-video/domain/types/image-to-video.types.ts +0 -122
  111. package/src/features/image-to-video/domain/types/index.ts +0 -39
  112. package/src/features/image-to-video/domain/types/music.types.ts +0 -21
  113. package/src/features/image-to-video/index.ts +0 -116
  114. package/src/features/image-to-video/infrastructure/index.ts +0 -1
  115. package/src/features/image-to-video/infrastructure/services/image-to-video-executor.ts +0 -154
  116. package/src/features/image-to-video/infrastructure/services/index.ts +0 -5
  117. package/src/features/image-to-video/presentation/components/AddMoreCard.tsx +0 -52
  118. package/src/features/image-to-video/presentation/components/AnimationStyleSelector.tsx +0 -135
  119. package/src/features/image-to-video/presentation/components/DurationSelector.tsx +0 -110
  120. package/src/features/image-to-video/presentation/components/EmptyGridState.tsx +0 -69
  121. package/src/features/image-to-video/presentation/components/GridImageItem.tsx +0 -64
  122. package/src/features/image-to-video/presentation/components/ImageSelectionGrid.styles.ts +0 -84
  123. package/src/features/image-to-video/presentation/components/ImageSelectionGrid.tsx +0 -77
  124. package/src/features/image-to-video/presentation/components/ImageSelectionGrid.types.ts +0 -18
  125. package/src/features/image-to-video/presentation/components/MusicMoodSelector.tsx +0 -181
  126. package/src/features/image-to-video/presentation/components/index.ts +0 -30
  127. package/src/features/image-to-video/presentation/hooks/index.ts +0 -27
  128. package/src/features/image-to-video/presentation/hooks/useFormState.ts +0 -116
  129. package/src/features/image-to-video/presentation/hooks/useGeneration.ts +0 -85
  130. package/src/features/image-to-video/presentation/hooks/useGenerationExecution.ts +0 -143
  131. package/src/features/image-to-video/presentation/hooks/useImageToVideoFeature.ts +0 -107
  132. package/src/features/image-to-video/presentation/hooks/useImageToVideoForm.ts +0 -119
  133. package/src/features/image-to-video/presentation/hooks/useImageToVideoValidation.ts +0 -46
  134. package/src/features/image-to-video/presentation/index.ts +0 -5
  135. package/src/features/love-message/domain/constants.ts +0 -162
  136. package/src/features/love-message/domain/types.ts +0 -58
  137. package/src/features/love-message/index.ts +0 -37
  138. package/src/features/love-message/infrastructure/persistence/PartnerProfileRepository.ts +0 -52
  139. package/src/features/love-message/infrastructure/prompts/messagePromptBuilder.ts +0 -109
  140. package/src/features/love-message/infrastructure/services/LoveMessageService.ts +0 -35
  141. package/src/features/love-message/presentation/components/CategoryGrid.tsx +0 -88
  142. package/src/features/love-message/presentation/components/DetailsInput.tsx +0 -74
  143. package/src/features/love-message/presentation/components/ExploreHeader.tsx +0 -67
  144. package/src/features/love-message/presentation/components/FieldInput.tsx +0 -83
  145. package/src/features/love-message/presentation/components/GeneratorHeader.tsx +0 -88
  146. package/src/features/love-message/presentation/components/LoveMessageHeroSection.tsx +0 -114
  147. package/src/features/love-message/presentation/components/MessageListItem.tsx +0 -77
  148. package/src/features/love-message/presentation/components/MessageResult.tsx +0 -105
  149. package/src/features/love-message/presentation/components/PartnerInput.tsx +0 -78
  150. package/src/features/love-message/presentation/components/ProgressDots.tsx +0 -48
  151. package/src/features/love-message/presentation/components/StepDetails.tsx +0 -23
  152. package/src/features/love-message/presentation/components/StepPartner.tsx +0 -116
  153. package/src/features/love-message/presentation/components/StepVibe.tsx +0 -30
  154. package/src/features/love-message/presentation/components/ToneSelector.tsx +0 -100
  155. package/src/features/love-message/presentation/components/TrendingSection.tsx +0 -130
  156. package/src/features/love-message/presentation/components/TypeSelector.tsx +0 -99
  157. package/src/features/love-message/presentation/hooks/useLoveMessageGenerator.ts +0 -114
  158. package/src/features/love-message/presentation/hooks/usePartnerProfile.ts +0 -43
  159. package/src/features/love-message/presentation/navigation/LoveMessageStack.tsx +0 -39
  160. package/src/features/love-message/presentation/screens/LoveMessageExploreScreen.tsx +0 -53
  161. package/src/features/love-message/presentation/screens/LoveMessageGeneratorScreen.tsx +0 -169
  162. package/src/features/love-message/presentation/screens/MessageListScreen.tsx +0 -127
  163. package/src/features/love-message/presentation/screens/PartnerProfileScreen.tsx +0 -119
  164. package/src/features/meme-generator/README.md +0 -408
  165. package/src/features/meme-generator/index.ts +0 -3
  166. package/src/features/meme-generator/infrastructure/services/MemeGenerationService.ts +0 -87
  167. package/src/features/meme-generator/presentation/components/MemeGeneratorFeature.tsx +0 -180
  168. package/src/features/meme-generator/presentation/components/index.ts +0 -2
  169. package/src/features/meme-generator/presentation/screens/MemeGeneratorScreen.tsx +0 -168
  170. package/src/features/meme-generator/presentation/screens/index.ts +0 -1
  171. package/src/features/partner-upload/domain/types.ts +0 -59
  172. package/src/features/partner-upload/index.ts +0 -30
  173. package/src/features/partner-upload/presentation/components/PartnerInfoInput.tsx +0 -112
  174. package/src/features/partner-upload/presentation/components/PhotoTips.tsx +0 -53
  175. package/src/features/partner-upload/presentation/components/index.ts +0 -4
  176. package/src/features/partner-upload/presentation/hooks/index.ts +0 -7
  177. package/src/features/partner-upload/presentation/hooks/usePartnerStep.ts +0 -130
  178. package/src/features/partner-upload/presentation/screens/PartnerStepScreen.tsx +0 -231
  179. package/src/features/partner-upload/presentation/screens/index.ts +0 -6
  180. package/src/features/photo-restoration/README.md +0 -399
  181. package/src/features/photo-restoration/domain/index.ts +0 -1
  182. package/src/features/photo-restoration/domain/types/index.ts +0 -9
  183. package/src/features/photo-restoration/domain/types/photo-restore.types.ts +0 -64
  184. package/src/features/photo-restoration/index.ts +0 -22
  185. package/src/features/photo-restoration/presentation/components/PhotoRestoreFeature.tsx +0 -88
  186. package/src/features/photo-restoration/presentation/components/PhotoRestoreResultView.tsx +0 -86
  187. package/src/features/photo-restoration/presentation/components/index.ts +0 -4
  188. package/src/features/photo-restoration/presentation/hooks/index.ts +0 -1
  189. package/src/features/photo-restoration/presentation/hooks/usePhotoRestoreFeature.ts +0 -23
  190. package/src/features/photo-restoration/presentation/index.ts +0 -2
  191. package/src/features/remove-background/README.md +0 -393
  192. package/src/features/remove-background/domain/index.ts +0 -5
  193. package/src/features/remove-background/domain/types/index.ts +0 -7
  194. package/src/features/remove-background/domain/types/remove-background.types.ts +0 -28
  195. package/src/features/remove-background/index.ts +0 -19
  196. package/src/features/remove-background/presentation/components/RemoveBackgroundFeature.tsx +0 -86
  197. package/src/features/remove-background/presentation/components/index.ts +0 -2
  198. package/src/features/remove-background/presentation/hooks/index.ts +0 -1
  199. package/src/features/remove-background/presentation/hooks/useRemoveBackgroundFeature.ts +0 -28
  200. package/src/features/remove-background/presentation/index.ts +0 -6
  201. package/src/features/remove-object/README.md +0 -405
  202. package/src/features/remove-object/domain/index.ts +0 -5
  203. package/src/features/remove-object/domain/types/index.ts +0 -7
  204. package/src/features/remove-object/domain/types/remove-object.types.ts +0 -54
  205. package/src/features/remove-object/index.ts +0 -23
  206. package/src/features/remove-object/presentation/components/RemoveObjectFeature.tsx +0 -136
  207. package/src/features/remove-object/presentation/components/index.ts +0 -2
  208. package/src/features/remove-object/presentation/hooks/index.ts +0 -9
  209. package/src/features/remove-object/presentation/hooks/useRemoveObjectFeature.ts +0 -221
  210. package/src/features/remove-object/presentation/index.ts +0 -6
  211. package/src/features/replace-background/README.md +0 -405
  212. package/src/features/replace-background/domain/types/index.ts +0 -7
  213. package/src/features/replace-background/domain/types/replace-background.types.ts +0 -33
  214. package/src/features/replace-background/index.ts +0 -23
  215. package/src/features/replace-background/presentation/components/ReplaceBackgroundFeature.tsx +0 -105
  216. package/src/features/replace-background/presentation/components/index.ts +0 -6
  217. package/src/features/replace-background/presentation/hooks/index.ts +0 -9
  218. package/src/features/replace-background/presentation/hooks/useReplaceBackgroundFeature.ts +0 -55
  219. package/src/features/scenarios/domain/types.ts +0 -147
  220. package/src/features/scenarios/index.ts +0 -64
  221. package/src/features/scenarios/presentation/components/InspirationChips.tsx +0 -82
  222. package/src/features/scenarios/presentation/components/MagicPromptHeadline.tsx +0 -79
  223. package/src/features/scenarios/presentation/components/ScenarioGrid.tsx +0 -224
  224. package/src/features/scenarios/presentation/components/ScenarioHeader.tsx +0 -55
  225. package/src/features/scenarios/presentation/components/StyleSelector.tsx +0 -119
  226. package/src/features/scenarios/presentation/components/index.ts +0 -18
  227. package/src/features/scenarios/presentation/containers/CategoryNavigationContainer.tsx +0 -178
  228. package/src/features/scenarios/presentation/screens/HierarchicalScenarioListScreen.tsx +0 -266
  229. package/src/features/scenarios/presentation/screens/MagicPromptScreen.tsx +0 -242
  230. package/src/features/scenarios/presentation/screens/MainCategoryScreen.tsx +0 -198
  231. package/src/features/scenarios/presentation/screens/ScenarioPreviewScreen.tsx +0 -164
  232. package/src/features/scenarios/presentation/screens/ScenarioSelectorScreen.tsx +0 -66
  233. package/src/features/scenarios/presentation/screens/SubCategoryScreen.tsx +0 -216
  234. package/src/features/script-generator/README.md +0 -433
  235. package/src/features/script-generator/domain/constants/index.ts +0 -10
  236. package/src/features/script-generator/domain/types/script.types.ts +0 -30
  237. package/src/features/script-generator/index.ts +0 -5
  238. package/src/features/script-generator/infrastructure/services/ScriptGenerationService.ts +0 -62
  239. package/src/features/script-generator/presentation/components/ScriptDisplay.tsx +0 -158
  240. package/src/features/script-generator/presentation/components/VideoTypeSelector.tsx +0 -102
  241. package/src/features/script-generator/presentation/components/index.ts +0 -2
  242. package/src/features/script-generator/presentation/hooks/index.ts +0 -1
  243. package/src/features/script-generator/presentation/hooks/useScriptGenerator.ts +0 -77
  244. package/src/features/shared/README.md +0 -311
  245. package/src/features/shared/dual-image-video/domain/types/dual-image-video.types.ts +0 -88
  246. package/src/features/shared/dual-image-video/domain/types/index.ts +0 -14
  247. package/src/features/shared/dual-image-video/index.ts +0 -17
  248. package/src/features/shared/dual-image-video/presentation/hooks/index.ts +0 -5
  249. package/src/features/shared/dual-image-video/presentation/hooks/useDualImageVideoFeature.ts +0 -185
  250. package/src/features/shared/index.ts +0 -6
  251. package/src/features/text-to-image/README.md +0 -394
  252. package/src/features/text-to-image/domain/constants/index.ts +0 -8
  253. package/src/features/text-to-image/domain/constants/options.constants.ts +0 -39
  254. package/src/features/text-to-image/domain/constants/styles.constants.ts +0 -34
  255. package/src/features/text-to-image/domain/index.ts +0 -7
  256. package/src/features/text-to-image/domain/types/config.types.ts +0 -75
  257. package/src/features/text-to-image/domain/types/form.types.ts +0 -58
  258. package/src/features/text-to-image/domain/types/index.ts +0 -38
  259. package/src/features/text-to-image/domain/types/text-to-image.types.ts +0 -58
  260. package/src/features/text-to-image/index.ts +0 -116
  261. package/src/features/text-to-image/infrastructure/index.ts +0 -1
  262. package/src/features/text-to-image/infrastructure/services/index.ts +0 -5
  263. package/src/features/text-to-image/infrastructure/services/text-to-image-executor.ts +0 -147
  264. package/src/features/text-to-image/presentation/components/index.ts +0 -30
  265. package/src/features/text-to-image/presentation/hooks/index.ts +0 -30
  266. package/src/features/text-to-image/presentation/hooks/useFormState.ts +0 -103
  267. package/src/features/text-to-image/presentation/hooks/useGeneration.ts +0 -139
  268. package/src/features/text-to-image/presentation/hooks/useTextToImageFeature.ts +0 -111
  269. package/src/features/text-to-image/presentation/hooks/useTextToImageForm.ts +0 -58
  270. package/src/features/text-to-image/presentation/index.ts +0 -7
  271. package/src/features/text-to-video/README.md +0 -412
  272. package/src/features/text-to-video/domain/index.ts +0 -1
  273. package/src/features/text-to-video/domain/types/callback.types.ts +0 -69
  274. package/src/features/text-to-video/domain/types/component.types.ts +0 -106
  275. package/src/features/text-to-video/domain/types/config.types.ts +0 -61
  276. package/src/features/text-to-video/domain/types/index.ts +0 -56
  277. package/src/features/text-to-video/domain/types/request.types.ts +0 -36
  278. package/src/features/text-to-video/domain/types/state.types.ts +0 -53
  279. package/src/features/text-to-video/index.ts +0 -68
  280. package/src/features/text-to-video/infrastructure/index.ts +0 -1
  281. package/src/features/text-to-video/infrastructure/services/index.ts +0 -5
  282. package/src/features/text-to-video/infrastructure/services/text-to-video-executor.ts +0 -141
  283. package/src/features/text-to-video/presentation/components/FrameSelector.tsx +0 -153
  284. package/src/features/text-to-video/presentation/components/GenerationTabs.tsx +0 -73
  285. package/src/features/text-to-video/presentation/components/HeroSection.tsx +0 -61
  286. package/src/features/text-to-video/presentation/components/HintCarousel.tsx +0 -96
  287. package/src/features/text-to-video/presentation/components/OptionsPanel.tsx +0 -121
  288. package/src/features/text-to-video/presentation/components/index.ts +0 -10
  289. package/src/features/text-to-video/presentation/hooks/index.ts +0 -17
  290. package/src/features/text-to-video/presentation/hooks/useTextToVideoFeature.ts +0 -225
  291. package/src/features/text-to-video/presentation/hooks/useTextToVideoForm.ts +0 -134
  292. package/src/features/text-to-video/presentation/index.ts +0 -7
  293. package/src/features/text-to-voice/README.md +0 -445
  294. package/src/features/text-to-voice/domain/index.ts +0 -1
  295. package/src/features/text-to-voice/domain/types/component.types.ts +0 -91
  296. package/src/features/text-to-voice/domain/types/config.types.ts +0 -34
  297. package/src/features/text-to-voice/domain/types/form.types.ts +0 -39
  298. package/src/features/text-to-voice/domain/types/generation.types.ts +0 -43
  299. package/src/features/text-to-voice/domain/types/index.ts +0 -38
  300. package/src/features/text-to-voice/index.ts +0 -53
  301. package/src/features/text-to-voice/infrastructure/index.ts +0 -1
  302. package/src/features/text-to-voice/infrastructure/services/index.ts +0 -4
  303. package/src/features/text-to-voice/infrastructure/services/text-to-voice-executor.ts +0 -103
  304. package/src/features/text-to-voice/presentation/components/TextToVoiceAudioPlayer.tsx +0 -81
  305. package/src/features/text-to-voice/presentation/components/index.ts +0 -7
  306. package/src/features/text-to-voice/presentation/hooks/index.ts +0 -6
  307. package/src/features/text-to-voice/presentation/hooks/useTextToVoiceForm.ts +0 -91
  308. package/src/features/text-to-voice/presentation/hooks/useTextToVoiceGeneration.ts +0 -116
  309. package/src/features/text-to-voice/presentation/index.ts +0 -2
  310. package/src/features/upscaling/README.md +0 -396
  311. package/src/features/upscaling/domain/index.ts +0 -1
  312. package/src/features/upscaling/domain/types/index.ts +0 -1
  313. package/src/features/upscaling/domain/types/upscale.types.ts +0 -23
  314. package/src/features/upscaling/index.ts +0 -20
  315. package/src/features/upscaling/presentation/components/ComparisonSlider.tsx +0 -200
  316. package/src/features/upscaling/presentation/components/UpscaleFeature.tsx +0 -89
  317. package/src/features/upscaling/presentation/components/UpscaleResultView.tsx +0 -98
  318. package/src/features/upscaling/presentation/components/index.ts +0 -6
  319. package/src/features/upscaling/presentation/hooks/index.ts +0 -1
  320. package/src/features/upscaling/presentation/hooks/useUpscaleFeature.ts +0 -28
  321. package/src/features/upscaling/presentation/index.ts +0 -2
  322. package/src/features/wizard/domain/types.ts +0 -154
  323. package/src/features/wizard/index.ts +0 -43
  324. package/src/features/wizard/presentation/components/AIFeatureWizard.tsx +0 -231
  325. package/src/features/wizard/presentation/components/AIGenerationWizard.tsx +0 -132
  326. package/src/features/wizard/presentation/hooks/useWizard.ts +0 -120
  327. package/src/features/wizard/presentation/store/useWizardStore.ts +0 -82
@@ -1,77 +0,0 @@
1
- import React, { useMemo } from "react";
2
- import { View, StyleSheet } from "react-native";
3
- import { DualImagePicker } from "../../../../presentation/components/image-picker/DualImagePicker";
4
- import { DualImageVideoFeatureLayout } from "../../../../presentation/layouts";
5
- import type { DualImageInputRenderProps } from "../../../../presentation/layouts";
6
- import { useAIKissFeature } from "../hooks";
7
- import type { AIKissTranslations, AIKissFeatureConfig } from "../../domain/types";
8
-
9
- export interface AIKissFeatureProps {
10
- config: AIKissFeatureConfig;
11
- translations: AIKissTranslations & {
12
- modalTitle?: string;
13
- modalMessage?: string;
14
- modalHint?: string;
15
- modalBackgroundHint?: string;
16
- };
17
- onSelectSourceImage: () => Promise<string | null>;
18
- onSelectTargetImage: () => Promise<string | null>;
19
- onSaveVideo: (videoUrl: string) => Promise<void>;
20
- onBeforeProcess?: () => Promise<boolean>;
21
- }
22
-
23
- export const AIKissFeature: React.FC<AIKissFeatureProps> = ({
24
- config,
25
- translations,
26
- onSelectSourceImage,
27
- onSelectTargetImage,
28
- onSaveVideo,
29
- onBeforeProcess,
30
- }) => {
31
- const feature = useAIKissFeature({
32
- config,
33
- onSelectSourceImage,
34
- onSelectTargetImage,
35
- onSaveVideo,
36
- onBeforeProcess,
37
- });
38
-
39
- const modalTranslations = useMemo(
40
- () => ({
41
- title: translations.modalTitle || "Creating your video",
42
- message: translations.modalMessage || "AI is working its magic...",
43
- hint: translations.modalHint || "This may take a moment",
44
- backgroundHint: translations.modalBackgroundHint || "Continue in background",
45
- }),
46
- [translations],
47
- );
48
-
49
- return (
50
- <DualImageVideoFeatureLayout
51
- feature={feature}
52
- translations={translations}
53
- modalTranslations={modalTranslations}
54
- renderInput={({ sourceImageUri, targetImageUri, onSelectSource, onSelectTarget, isDisabled }: DualImageInputRenderProps) => (
55
- <View style={styles.pickerContainer}>
56
- <DualImagePicker
57
- sourceImageUri={sourceImageUri}
58
- targetImageUri={targetImageUri}
59
- isDisabled={isDisabled}
60
- onSelectSource={onSelectSource}
61
- onSelectTarget={onSelectTarget}
62
- sourcePlaceholder={translations.sourceUploadTitle}
63
- targetPlaceholder={translations.targetUploadTitle}
64
- layout="horizontal"
65
- />
66
- </View>
67
- )}
68
- />
69
- );
70
- };
71
-
72
- const styles = StyleSheet.create({
73
- pickerContainer: {
74
- marginHorizontal: 16,
75
- marginBottom: 16,
76
- },
77
- });
@@ -1,2 +0,0 @@
1
- export { AIKissFeature } from "./AIKissFeature";
2
- export type { AIKissFeatureProps } from "./AIKissFeature";
@@ -1,9 +0,0 @@
1
- /**
2
- * AI Kiss Presentation Hooks Index
3
- */
4
-
5
- export { useAIKissFeature } from "./useAIKissFeature";
6
- export type {
7
- UseAIKissFeatureProps,
8
- UseAIKissFeatureReturn,
9
- } from "./useAIKissFeature";
@@ -1,34 +0,0 @@
1
- /**
2
- * useAIKissFeature Hook
3
- * Thin wrapper around useDualImageVideoFeature for ai-kiss feature
4
- * DRY: Uses shared base hook for common logic
5
- */
6
-
7
- import { useDualImageVideoFeature } from "../../../shared/dual-image-video";
8
- import type {
9
- AIKissFeatureConfig,
10
- AIKissFeatureState,
11
- } from "../../domain/types";
12
-
13
- export interface UseAIKissFeatureProps {
14
- config: AIKissFeatureConfig;
15
- onSelectSourceImage: () => Promise<string | null>;
16
- onSelectTargetImage: () => Promise<string | null>;
17
- onSaveVideo: (videoUrl: string) => Promise<void>;
18
- onBeforeProcess?: () => Promise<boolean>;
19
- }
20
-
21
- export interface UseAIKissFeatureReturn extends AIKissFeatureState {
22
- selectSourceImage: () => Promise<void>;
23
- selectTargetImage: () => Promise<void>;
24
- process: () => Promise<void>;
25
- save: () => Promise<void>;
26
- reset: () => void;
27
- }
28
-
29
- export function useAIKissFeature(props: UseAIKissFeatureProps): UseAIKissFeatureReturn {
30
- return useDualImageVideoFeature({
31
- featureType: "ai-kiss",
32
- ...props,
33
- });
34
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * AI Kiss Presentation Index
3
- */
4
-
5
- export * from "./hooks";
6
- export * from "./components";
@@ -1,396 +0,0 @@
1
- # Anime Selfie Feature
2
-
3
- Convert photos to anime/manga style using AI.
4
-
5
- ## 📍 Import Path
6
-
7
- ```typescript
8
- import { useAnimeSelfieFeature } from '@umituz/react-native-ai-generation-content';
9
- ```
10
-
11
- **Location**: `src/features/anime-selfie/`
12
-
13
- ## 🎯 Feature Purpose
14
-
15
- Transform photos into anime/manga style artwork using AI. Supports various anime styles with customizable intensity levels while preserving facial features.
16
-
17
- ---
18
-
19
- ## 📋 Usage Strategy
20
-
21
- ### When to Use This Feature
22
-
23
- ✅ **Use Cases:**
24
- - Creating anime avatars
25
- - Generating manga-style portraits
26
- - Artistic photo transformations
27
- - Social media profile pictures
28
- - Fan art and creative projects
29
-
30
- ❌ **When NOT to Use:**
31
- - General artistic style transfer (use Style Transfer)
32
- - Face swapping (use Face Swap)
33
- - Image editing and filters (use image editing software)
34
- - Copyrighted character replication
35
-
36
- ### Implementation Strategy
37
-
38
- 1. **Select photo** to convert to anime
39
- 2. **Choose anime style** (shonen, shojo, chibi, etc.)
40
- 3. **Adjust intensity** level (0.0 to 1.0)
41
- 4. **Generate anime version** with progress tracking
42
- 5. **Preview and compare** with original
43
- 6. **Save or share** result
44
-
45
- ---
46
-
47
- ## ⚠️ Critical Rules (MUST FOLLOW)
48
-
49
- ### 1. Image Requirements
50
- - **MUST** provide ONE image to convert
51
- - **MUST** use clear, well-lit photos
52
- - **MUST** have visible faces (for best results)
53
- - **MUST** use reasonable resolution (min 512x512)
54
- - **MUST NOT** exceed file size limits (10MB max)
55
-
56
- ### 2. Configuration
57
- - **MUST** provide valid `userId` for tracking
58
- - **MUST** specify `style` (anime style type)
59
- - **MUST** set `intensity` level (0.0 to 1.0)
60
- - **MUST** implement `onError` callback
61
- - **MUST** implement `onSelectPhoto` callback
62
-
63
- ### 3. State Management
64
- - **MUST** check `isReady` before enabling convert button
65
- - **MUST** display progress during conversion
66
- - **MUST** handle long processing times
67
- - **MUST** display `error` state with clear messages
68
- - **MUST** implement proper cleanup on unmount
69
-
70
- ### 4. Performance
71
- - **MUST** implement image compression before upload
72
- - **MUST** show progress indicator for processing
73
- - **MUST** cache results locally
74
- - **MUST** allow users to cancel processing
75
- - **MUST NOT** convert multiple images simultaneously
76
-
77
- ### 5. Content Quality
78
- - **MUST** provide before/after comparison
79
- - **MUST** allow intensity adjustment
80
- - **MUST** handle various photo types
81
- - **MUST** preserve facial features when enabled
82
- - **MUST** offer style regeneration
83
-
84
- ---
85
-
86
- ## 🚫 Prohibitions (MUST AVOID)
87
-
88
- ### Strictly Forbidden
89
-
90
- ❌ **NEVER** do the following:
91
-
92
- 1. **No Missing Images**
93
- - Always validate image is selected
94
- - Never call process() without image
95
-
96
- 2. **No Auto-Processing**
97
- - Never start conversion without user action
98
- - Always require explicit "Convert" button press
99
- - Show preview before processing
100
-
101
- 3. **No Hardcoded Credentials**
102
- - Never store API keys in component files
103
- - Use environment variables or secure storage
104
-
105
- 4. **No Unhandled Errors**
106
- - Never ignore conversion failures
107
- - Always explain what went wrong
108
- - Provide retry or alternative options
109
-
110
- 5. **No Memory Leaks**
111
- - Never store both original and converted large images simultaneously
112
- - Clean up temporary images
113
- - Implement proper image disposal
114
-
115
- 6. **No Blocked UI**
116
- - Never block main thread with image processing
117
- - Always show progress indicator
118
- - Allow cancellation
119
-
120
- 7. **No Copyright Violations**
121
- - Never replicate copyrighted anime characters exactly
122
- - Allow style transformation only
123
- - Implement content moderation
124
-
125
- ---
126
-
127
- ## 🤖 AI Agent Directions
128
-
129
- ### For AI Code Generation Tools
130
-
131
- When using this feature with AI code generation tools, follow these guidelines:
132
-
133
- #### Prompt Template for AI Agents
134
-
135
- ```
136
- You are implementing an anime selfie feature using @umituz/react-native-ai-generation-content.
137
-
138
- REQUIREMENTS:
139
- 1. Import from: @umituz/react-native-ai-generation-content
140
- 2. Use the useAnimeSelfieFeature hook
141
- 3. Select anime style type
142
- 4. Implement image selection UI
143
- 5. Adjust intensity level (0.0 to 1.0)
144
- 6. Validate image before conversion
145
- 7. Show before/after comparison
146
- 8. Handle long processing times with progress
147
- 9. Implement proper error handling
148
- 10. Implement cleanup on unmount
149
-
150
- CRITICAL RULES:
151
- - MUST validate image before calling convert()
152
- - MUST show before/after comparison
153
- - MUST handle intensity adjustment
154
- - MUST preserve facial features when enabled
155
- - MUST implement debouncing (300ms)
156
- - MUST allow style regeneration
157
-
158
- CONFIGURATION:
159
- - Provide valid userId (string)
160
- - Set style: 'shonen' | 'shojo' | 'chibi' | 'realistic'
161
- - Set intensity: 0.0 to 1.0 (default: 0.8)
162
- - Implement onSelectPhoto callback
163
- - Implement onSaveResult callback
164
- - Configure callbacks: onProcessingStart, onProcessingComplete, onError
165
-
166
- OPTIONS:
167
- - style: Select anime style type
168
- - intensity: 0.0 (subtle) to 1.0 (full transformation)
169
- - preserveFaces: boolean (maintain facial features)
170
-
171
- STRICTLY FORBIDDEN:
172
- - No missing image validation
173
- - No auto-processing without user action
174
- - No hardcoded API keys
175
- - No unhandled errors
176
- - No memory leaks
177
- - No blocking UI
178
- - No copyright violations
179
-
180
- QUALITY CHECKLIST:
181
- - [ ] Image selection implemented
182
- - [ ] Style selector added
183
- - [ ] Intensity slider included
184
- - [ ] Before/after comparison view
185
- - [ ] Progress indicator during processing
186
- - [ ] Error display with retry option
187
- - [ ] Download/share functionality
188
- - [ ] Style regeneration option
189
- ```
190
-
191
- #### AI Implementation Checklist
192
-
193
- Use this checklist when generating code:
194
-
195
- - [ ] Feature imported from correct path
196
- - [ ] Image selection implemented
197
- - [ ] Style selector added
198
- - [ ] Intensity control implemented
199
- - [ ] Validation before convert()
200
- - [ ] Before/after comparison view
201
- - [ ] Progress indicator during processing
202
- - [ ] Error display with user-friendly message
203
- - [ ] Download/share buttons
204
- - [ ] Style regeneration option
205
- - [ ] Cleanup on unmount
206
- - [ ] Original image preserved
207
-
208
- ---
209
-
210
- ## 🛠️ Configuration Strategy
211
-
212
- ### Essential Configuration
213
-
214
- ```typescript
215
- // Required fields
216
- {
217
- userId: string
218
- style: 'shonen' | 'shojo' | 'chibi' | 'realistic'
219
- intensity: number // 0.0 to 1.0
220
- onSelectPhoto: () => Promise<string | null>
221
- }
222
-
223
- // Optional callbacks
224
- {
225
- onProcessingStart?: () => void
226
- onProcessingComplete?: (result) => void
227
- onError?: (error: string) => void
228
- }
229
- ```
230
-
231
- ### Recommended Settings
232
-
233
- 1. **Anime Styles**
234
- - Shonen: Action-oriented, bold lines
235
- - Shojo: Elegant, detailed features
236
- - Chibi: Cute, exaggerated proportions
237
- - Realistic: Anime-style but realistic proportions
238
-
239
- 2. **Intensity Levels**
240
- - 0.3-0.5: Subtle anime influence
241
- - 0.6-0.8: Balanced transformation (recommended)
242
- - 0.9-1.0: Full anime style
243
-
244
- 3. **Image Quality**
245
- - Minimum: 512x512 resolution
246
- - Recommended: 1024x1024 or higher
247
- - Format: JPEG or PNG
248
- - Max size: 10MB
249
-
250
- ---
251
-
252
- ## 📊 State Management
253
-
254
- ### Feature States
255
-
256
- **isReady**: boolean
257
- - Photo selected and validated
258
- - Check before enabling convert button
259
-
260
- **isProcessing**: boolean
261
- - Anime conversion in progress
262
- - Show loading/progress indicator
263
- - Disable convert button
264
-
265
- **progress**: number (0-100)
266
- - Conversion progress percentage
267
- - Update progress bar
268
-
269
- **error**: string | null
270
- - Error message if conversion failed
271
- - Display to user with clear message
272
-
273
- **result**: {
274
- imageUrl: string
275
- originalImageUrl?: string
276
- style?: string
277
- intensity?: number
278
- metadata?: any
279
- }
280
-
281
- ---
282
-
283
- ## 🎨 Best Practices
284
-
285
- ### Photo Selection
286
-
287
- 1. **Image Quality**
288
- - Good: Clear, well-lit photos
289
- - Bad: Blurry, dark images
290
-
291
- 2. **Subject Clarity**
292
- - Good: Clear facial features visible
293
- - Bad: Occluded or distant faces
294
-
295
- 3. **Style Matching**
296
- - Match style to photo content
297
- - Consider gender and age for style
298
-
299
- 4. **Intensity**
300
- - Start with moderate intensity (0.7-0.8)
301
- - Adjust based on results
302
-
303
- ### User Experience
304
-
305
- 1. **Before/After Comparison**
306
- - Side-by-side comparison
307
- - Slider or toggle for easy comparison
308
- - Zoom capability for detail inspection
309
-
310
- 2. **Style Preview**
311
- - Show examples of each style
312
- - Preview style before conversion
313
- - Explain style characteristics
314
-
315
- 3. **Progress Feedback**
316
- - Show estimated time remaining
317
- - Update progress regularly
318
- - Allow cancellation
319
-
320
- ---
321
-
322
- ## 🐛 Common Pitfalls
323
-
324
- ### Quality Issues
325
-
326
- ❌ **Problem**: Poor anime conversion
327
- ✅ **Solution**: Use higher quality photos, try different style or intensity
328
-
329
- ### Style Issues
330
-
331
- ❌ **Problem**: Anime style doesn't match photo
332
- ✅ **Solution**: Try different style, adjust intensity
333
-
334
- ### Performance Issues
335
-
336
- ❌ **Problem**: Slow conversion
337
- ✅ **Solution**: Compress images, show progress, allow cancellation
338
-
339
- ### Memory Issues
340
-
341
- ❌ **Problem**: App crashes with large images
342
- ✅ **Solution**: Compress images, clean up properly, optimize memory
343
-
344
- ---
345
-
346
- ## 📦 Related Components
347
-
348
- Use these components from the library:
349
-
350
- - **PhotoUploadCard**: Upload photo interface
351
- - **ResultDisplay**: Before/after comparison
352
- - **StyleSelector**: Choose anime style
353
- - **IntensitySlider**: Adjust intensity
354
- - **ProgressBar**: Progress display
355
-
356
- Located at: `src/presentation/components/`
357
-
358
- ---
359
-
360
- ## 🔄 Migration Strategy
361
-
362
- If migrating from previous implementation:
363
-
364
- 1. **Update imports** to new path
365
- 2. **Add style selector**
366
- 3. **Implement intensity control**
367
- 4. **Update state handling** for new structure
368
- 5. **Add before/after comparison**
369
- 6. **Test all anime styles**
370
-
371
- ---
372
-
373
- ## 📚 Additional Resources
374
-
375
- - Main documentation: `/docs/`
376
- - API reference: `/docs/api/`
377
- - Examples: `/docs/examples/basic/anime-selfie/`
378
- - Architecture: `/ARCHITECTURE.md`
379
-
380
- ---
381
-
382
- **Last Updated**: 2025-01-08
383
- **Version**: 2.0.0 (Strategy-based Documentation)
384
-
385
- ---
386
-
387
- ## 📝 Changelog
388
-
389
- ### v2.0.0 - 2025-01-08
390
- - **BREAKING**: Documentation format changed to strategy-based
391
- - Removed extensive code examples
392
- - Added rules, prohibitions, and AI agent directions
393
- - Focus on best practices and implementation guidance
394
-
395
- ### v1.0.0 - Initial Release
396
- - Initial feature documentation
@@ -1,5 +0,0 @@
1
- /**
2
- * Anime Selfie Domain Index
3
- */
4
-
5
- export * from "./types";
@@ -1,52 +0,0 @@
1
- /**
2
- * Anime Selfie Feature Types
3
- */
4
-
5
- export type AnimeSelfieStyle = "anime" | "manga" | "cartoon" | "disney" | "pixar";
6
-
7
- export interface AnimeSelfieResult {
8
- success: boolean;
9
- imageUrl?: string;
10
- imageBase64?: string;
11
- error?: string;
12
- requestId?: string;
13
- creationId?: string;
14
- }
15
-
16
- export interface AnimeSelfieFeatureState {
17
- imageUri: string | null;
18
- processedUrl: string | null;
19
- isProcessing: boolean;
20
- progress: number;
21
- error: string | null;
22
- }
23
-
24
- export interface AnimeSelfieTranslations {
25
- uploadTitle: string;
26
- uploadSubtitle: string;
27
- uploadChange: string;
28
- uploadAnalyzing: string;
29
- description: string;
30
- processingText: string;
31
- processButtonText: string;
32
- successText: string;
33
- saveButtonText: string;
34
- tryAnotherText: string;
35
- beforeLabel?: string;
36
- afterLabel?: string;
37
- compareHint?: string;
38
- }
39
-
40
- export type AnimeSelfieResultExtractor = (result: unknown) => string | undefined;
41
-
42
- export interface AnimeSelfieFeatureConfig {
43
- featureType: "anime-selfie";
44
- creditCost?: number;
45
- defaultStyle?: AnimeSelfieStyle;
46
- extractResult?: AnimeSelfieResultExtractor;
47
- prepareImage: (imageUri: string) => Promise<string>;
48
- onImageSelect?: (uri: string) => void;
49
- onProcessingStart?: (data: { creationId: string; imageUri: string }) => void;
50
- onProcessingComplete?: (result: AnimeSelfieResult) => void;
51
- onError?: (error: string, creationId?: string) => void;
52
- }
@@ -1,8 +0,0 @@
1
- export type {
2
- AnimeSelfieStyle,
3
- AnimeSelfieResult,
4
- AnimeSelfieFeatureState,
5
- AnimeSelfieTranslations,
6
- AnimeSelfieResultExtractor,
7
- AnimeSelfieFeatureConfig,
8
- } from "./anime-selfie.types";
@@ -1,20 +0,0 @@
1
- /**
2
- * Anime Selfie Feature
3
- * Provider-agnostic anime selfie generation feature
4
- */
5
-
6
- // Domain Types
7
- export type {
8
- AnimeSelfieStyle,
9
- AnimeSelfieResult,
10
- AnimeSelfieFeatureState,
11
- AnimeSelfieTranslations,
12
- AnimeSelfieFeatureConfig,
13
- AnimeSelfieResultExtractor,
14
- } from "./domain";
15
-
16
- // Presentation Hooks
17
- export { useAnimeSelfieFeature, type UseAnimeSelfieFeatureProps } from "./presentation";
18
-
19
- // Presentation Components
20
- export { AnimeSelfieFeature, type AnimeSelfieFeatureProps } from "./presentation";
@@ -1,86 +0,0 @@
1
- import React, { useMemo } from "react";
2
- import { Image, StyleSheet } from "react-native";
3
- import { PhotoUploadCard } from "../../../../presentation/components/PhotoUploadCard";
4
- import { SingleImageFeatureLayout } from "../../../../presentation/layouts";
5
- import type { SingleImageInputRenderProps, ResultRenderProps } from "../../../../presentation/layouts";
6
- import { useAnimeSelfieFeature } from "../hooks";
7
- import type { AnimeSelfieTranslations, AnimeSelfieFeatureConfig } from "../../domain/types";
8
-
9
- export interface AnimeSelfieFeatureProps {
10
- config: AnimeSelfieFeatureConfig;
11
- translations: AnimeSelfieTranslations & {
12
- modalTitle?: string;
13
- modalMessage?: string;
14
- modalHint?: string;
15
- modalBackgroundHint?: string;
16
- };
17
- onSelectImage: () => Promise<string | null>;
18
- onSaveImage: (imageUrl: string) => Promise<void>;
19
- onBeforeProcess?: () => Promise<boolean>;
20
- }
21
-
22
- export const AnimeSelfieFeature: React.FC<AnimeSelfieFeatureProps> = ({
23
- config,
24
- translations,
25
- onSelectImage,
26
- onSaveImage,
27
- onBeforeProcess,
28
- }) => {
29
- const feature = useAnimeSelfieFeature({
30
- config,
31
- onSelectImage,
32
- onSaveImage,
33
- onBeforeProcess,
34
- });
35
-
36
- const modalTranslations = useMemo(
37
- () => ({
38
- title: translations.modalTitle || "Processing",
39
- message: translations.modalMessage || "AI is transforming your photo...",
40
- hint: translations.modalHint || "This may take a moment",
41
- backgroundHint: translations.modalBackgroundHint || "Continue in background",
42
- }),
43
- [translations],
44
- );
45
-
46
- return (
47
- <SingleImageFeatureLayout
48
- feature={feature}
49
- translations={translations}
50
- modalTranslations={modalTranslations}
51
- renderInput={({ imageUri, onSelect, isDisabled, isProcessing }: SingleImageInputRenderProps) => (
52
- <PhotoUploadCard
53
- imageUri={imageUri}
54
- onPress={onSelect}
55
- isValidating={isProcessing}
56
- disabled={isDisabled}
57
- translations={{
58
- tapToUpload: translations.uploadTitle,
59
- selectPhoto: translations.uploadSubtitle,
60
- change: translations.uploadChange,
61
- analyzing: translations.uploadAnalyzing,
62
- }}
63
- config={{
64
- aspectRatio: 1,
65
- borderRadius: 24,
66
- showValidationStatus: false,
67
- allowChange: true,
68
- }}
69
- />
70
- )}
71
- renderResult={({ imageUrl, imageSize }: ResultRenderProps) => (
72
- <Image
73
- source={{ uri: imageUrl }}
74
- style={[styles.resultImage, { width: imageSize, height: imageSize }]}
75
- resizeMode="contain"
76
- />
77
- )}
78
- />
79
- );
80
- };
81
-
82
- const styles = StyleSheet.create({
83
- resultImage: {
84
- borderRadius: 16,
85
- },
86
- });