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

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 (333) 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 +3 -29
  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/presentation/components/index.ts +0 -3
  14. package/src/presentation/hooks/index.ts +0 -7
  15. package/src/features/ai-hug/README.md +0 -438
  16. package/src/features/ai-hug/domain/index.ts +0 -5
  17. package/src/features/ai-hug/domain/types/ai-hug.types.ts +0 -25
  18. package/src/features/ai-hug/domain/types/index.ts +0 -7
  19. package/src/features/ai-hug/index.ts +0 -19
  20. package/src/features/ai-hug/presentation/components/AIHugFeature.tsx +0 -77
  21. package/src/features/ai-hug/presentation/components/index.ts +0 -2
  22. package/src/features/ai-hug/presentation/hooks/index.ts +0 -9
  23. package/src/features/ai-hug/presentation/hooks/useAIHugFeature.ts +0 -34
  24. package/src/features/ai-hug/presentation/index.ts +0 -6
  25. package/src/features/ai-kiss/README.md +0 -445
  26. package/src/features/ai-kiss/domain/index.ts +0 -5
  27. package/src/features/ai-kiss/domain/types/ai-kiss.types.ts +0 -25
  28. package/src/features/ai-kiss/domain/types/index.ts +0 -7
  29. package/src/features/ai-kiss/index.ts +0 -19
  30. package/src/features/ai-kiss/presentation/components/AIKissFeature.tsx +0 -77
  31. package/src/features/ai-kiss/presentation/components/index.ts +0 -2
  32. package/src/features/ai-kiss/presentation/hooks/index.ts +0 -9
  33. package/src/features/ai-kiss/presentation/hooks/useAIKissFeature.ts +0 -34
  34. package/src/features/ai-kiss/presentation/index.ts +0 -6
  35. package/src/features/anime-selfie/README.md +0 -396
  36. package/src/features/anime-selfie/domain/index.ts +0 -5
  37. package/src/features/anime-selfie/domain/types/anime-selfie.types.ts +0 -52
  38. package/src/features/anime-selfie/domain/types/index.ts +0 -8
  39. package/src/features/anime-selfie/index.ts +0 -20
  40. package/src/features/anime-selfie/presentation/components/AnimeSelfieFeature.tsx +0 -86
  41. package/src/features/anime-selfie/presentation/components/index.ts +0 -2
  42. package/src/features/anime-selfie/presentation/hooks/index.ts +0 -9
  43. package/src/features/anime-selfie/presentation/hooks/useAnimeSelfieFeature.ts +0 -59
  44. package/src/features/anime-selfie/presentation/index.ts +0 -6
  45. package/src/features/couple-future/README.md +0 -445
  46. package/src/features/couple-future/domain/types.ts +0 -63
  47. package/src/features/couple-future/domain/wizard-config.adapter.ts +0 -76
  48. package/src/features/couple-future/domain/wizard.types.ts +0 -121
  49. package/src/features/couple-future/index.ts +0 -83
  50. package/src/features/couple-future/infrastructure/coupleFeatureRegistry.ts +0 -76
  51. package/src/features/couple-future/infrastructure/couplePromptEnhancer.ts +0 -100
  52. package/src/features/couple-future/infrastructure/executor.ts +0 -188
  53. package/src/features/couple-future/infrastructure/generationUtils.ts +0 -228
  54. package/src/features/couple-future/presentation/components/ArtStyleSelector.tsx +0 -146
  55. package/src/features/couple-future/presentation/components/ArtistStyleSelector.tsx +0 -122
  56. package/src/features/couple-future/presentation/components/CoupleFutureWizard.tsx +0 -239
  57. package/src/features/couple-future/presentation/components/GeneratingStepContent.tsx +0 -86
  58. package/src/features/couple-future/presentation/components/RomanticMoodSelector.tsx +0 -147
  59. package/src/features/couple-future/presentation/components/WardrobeSelector.tsx +0 -141
  60. package/src/features/couple-future/presentation/components/index.ts +0 -12
  61. package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.ts +0 -166
  62. package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.types.ts +0 -69
  63. package/src/features/couple-future/presentation/hooks/useCoupleFutureHandlers.ts +0 -117
  64. package/src/features/couple-future/presentation/screens/CoupleFeatureScreen.tsx +0 -113
  65. package/src/features/face-swap/README.md +0 -431
  66. package/src/features/face-swap/domain/index.ts +0 -5
  67. package/src/features/face-swap/domain/types/face-swap.types.ts +0 -26
  68. package/src/features/face-swap/domain/types/index.ts +0 -7
  69. package/src/features/face-swap/index.ts +0 -19
  70. package/src/features/face-swap/presentation/components/FaceSwapFeature.tsx +0 -87
  71. package/src/features/face-swap/presentation/components/index.ts +0 -2
  72. package/src/features/face-swap/presentation/hooks/index.ts +0 -6
  73. package/src/features/face-swap/presentation/hooks/useFaceSwapFeature.ts +0 -35
  74. package/src/features/face-swap/presentation/index.ts +0 -6
  75. package/src/features/hd-touch-up/README.md +0 -396
  76. package/src/features/hd-touch-up/domain/index.ts +0 -1
  77. package/src/features/hd-touch-up/domain/types/hd-touch-up.types.ts +0 -62
  78. package/src/features/hd-touch-up/domain/types/index.ts +0 -9
  79. package/src/features/hd-touch-up/index.ts +0 -21
  80. package/src/features/hd-touch-up/presentation/components/HDTouchUpFeature.tsx +0 -86
  81. package/src/features/hd-touch-up/presentation/components/index.ts +0 -2
  82. package/src/features/hd-touch-up/presentation/hooks/index.ts +0 -1
  83. package/src/features/hd-touch-up/presentation/hooks/useHDTouchUpFeature.ts +0 -23
  84. package/src/features/hd-touch-up/presentation/index.ts +0 -2
  85. package/src/features/image-to-image/README.md +0 -459
  86. package/src/features/image-to-image/domain/index.ts +0 -1
  87. package/src/features/image-to-image/domain/types/base.types.ts +0 -48
  88. package/src/features/image-to-image/domain/types/index.ts +0 -1
  89. package/src/features/image-to-image/domain/types/partials/config.types.ts +0 -37
  90. package/src/features/image-to-image/domain/types/partials/hook.types.ts +0 -53
  91. package/src/features/image-to-image/domain/types/partials/metadata.types.ts +0 -32
  92. package/src/features/image-to-image/domain/types/partials/result.types.ts +0 -44
  93. package/src/features/image-to-image/domain/types/partials/state.types.ts +0 -34
  94. package/src/features/image-to-image/domain/types/partials/translation.types.ts +0 -57
  95. package/src/features/image-to-image/index.ts +0 -2
  96. package/src/features/image-to-image/presentation/hooks/index.ts +0 -3
  97. package/src/features/image-to-image/presentation/hooks/useDualImageFeature.ts +0 -204
  98. package/src/features/image-to-image/presentation/hooks/useImageWithPromptFeature.ts +0 -223
  99. package/src/features/image-to-image/presentation/hooks/useSingleImageFeature.ts +0 -166
  100. package/src/features/image-to-image/presentation/index.ts +0 -1
  101. package/src/features/image-to-video/README.md +0 -414
  102. package/src/features/image-to-video/domain/constants/animation.constants.ts +0 -47
  103. package/src/features/image-to-video/domain/constants/duration.constants.ts +0 -13
  104. package/src/features/image-to-video/domain/constants/form.constants.ts +0 -22
  105. package/src/features/image-to-video/domain/constants/index.ts +0 -23
  106. package/src/features/image-to-video/domain/constants/music.constants.ts +0 -53
  107. package/src/features/image-to-video/domain/index.ts +0 -5
  108. package/src/features/image-to-video/domain/types/animation.types.ts +0 -20
  109. package/src/features/image-to-video/domain/types/config.types.ts +0 -56
  110. package/src/features/image-to-video/domain/types/duration.types.ts +0 -11
  111. package/src/features/image-to-video/domain/types/form.types.ts +0 -35
  112. package/src/features/image-to-video/domain/types/image-to-video.types.ts +0 -122
  113. package/src/features/image-to-video/domain/types/index.ts +0 -39
  114. package/src/features/image-to-video/domain/types/music.types.ts +0 -21
  115. package/src/features/image-to-video/index.ts +0 -116
  116. package/src/features/image-to-video/infrastructure/index.ts +0 -1
  117. package/src/features/image-to-video/infrastructure/services/image-to-video-executor.ts +0 -154
  118. package/src/features/image-to-video/infrastructure/services/index.ts +0 -5
  119. package/src/features/image-to-video/presentation/components/AddMoreCard.tsx +0 -52
  120. package/src/features/image-to-video/presentation/components/AnimationStyleSelector.tsx +0 -135
  121. package/src/features/image-to-video/presentation/components/DurationSelector.tsx +0 -110
  122. package/src/features/image-to-video/presentation/components/EmptyGridState.tsx +0 -69
  123. package/src/features/image-to-video/presentation/components/GridImageItem.tsx +0 -64
  124. package/src/features/image-to-video/presentation/components/ImageSelectionGrid.styles.ts +0 -84
  125. package/src/features/image-to-video/presentation/components/ImageSelectionGrid.tsx +0 -77
  126. package/src/features/image-to-video/presentation/components/ImageSelectionGrid.types.ts +0 -18
  127. package/src/features/image-to-video/presentation/components/MusicMoodSelector.tsx +0 -181
  128. package/src/features/image-to-video/presentation/components/index.ts +0 -30
  129. package/src/features/image-to-video/presentation/hooks/index.ts +0 -27
  130. package/src/features/image-to-video/presentation/hooks/useFormState.ts +0 -116
  131. package/src/features/image-to-video/presentation/hooks/useGeneration.ts +0 -85
  132. package/src/features/image-to-video/presentation/hooks/useGenerationExecution.ts +0 -143
  133. package/src/features/image-to-video/presentation/hooks/useImageToVideoFeature.ts +0 -107
  134. package/src/features/image-to-video/presentation/hooks/useImageToVideoForm.ts +0 -119
  135. package/src/features/image-to-video/presentation/hooks/useImageToVideoValidation.ts +0 -46
  136. package/src/features/image-to-video/presentation/index.ts +0 -5
  137. package/src/features/love-message/domain/constants.ts +0 -162
  138. package/src/features/love-message/domain/types.ts +0 -58
  139. package/src/features/love-message/index.ts +0 -37
  140. package/src/features/love-message/infrastructure/persistence/PartnerProfileRepository.ts +0 -52
  141. package/src/features/love-message/infrastructure/prompts/messagePromptBuilder.ts +0 -109
  142. package/src/features/love-message/infrastructure/services/LoveMessageService.ts +0 -35
  143. package/src/features/love-message/presentation/components/CategoryGrid.tsx +0 -88
  144. package/src/features/love-message/presentation/components/DetailsInput.tsx +0 -74
  145. package/src/features/love-message/presentation/components/ExploreHeader.tsx +0 -67
  146. package/src/features/love-message/presentation/components/FieldInput.tsx +0 -83
  147. package/src/features/love-message/presentation/components/GeneratorHeader.tsx +0 -88
  148. package/src/features/love-message/presentation/components/LoveMessageHeroSection.tsx +0 -114
  149. package/src/features/love-message/presentation/components/MessageListItem.tsx +0 -77
  150. package/src/features/love-message/presentation/components/MessageResult.tsx +0 -105
  151. package/src/features/love-message/presentation/components/PartnerInput.tsx +0 -78
  152. package/src/features/love-message/presentation/components/ProgressDots.tsx +0 -48
  153. package/src/features/love-message/presentation/components/StepDetails.tsx +0 -23
  154. package/src/features/love-message/presentation/components/StepPartner.tsx +0 -116
  155. package/src/features/love-message/presentation/components/StepVibe.tsx +0 -30
  156. package/src/features/love-message/presentation/components/ToneSelector.tsx +0 -100
  157. package/src/features/love-message/presentation/components/TrendingSection.tsx +0 -130
  158. package/src/features/love-message/presentation/components/TypeSelector.tsx +0 -99
  159. package/src/features/love-message/presentation/hooks/useLoveMessageGenerator.ts +0 -114
  160. package/src/features/love-message/presentation/hooks/usePartnerProfile.ts +0 -43
  161. package/src/features/love-message/presentation/navigation/LoveMessageStack.tsx +0 -39
  162. package/src/features/love-message/presentation/screens/LoveMessageExploreScreen.tsx +0 -53
  163. package/src/features/love-message/presentation/screens/LoveMessageGeneratorScreen.tsx +0 -169
  164. package/src/features/love-message/presentation/screens/MessageListScreen.tsx +0 -127
  165. package/src/features/love-message/presentation/screens/PartnerProfileScreen.tsx +0 -119
  166. package/src/features/meme-generator/README.md +0 -408
  167. package/src/features/meme-generator/index.ts +0 -3
  168. package/src/features/meme-generator/infrastructure/services/MemeGenerationService.ts +0 -87
  169. package/src/features/meme-generator/presentation/components/MemeGeneratorFeature.tsx +0 -180
  170. package/src/features/meme-generator/presentation/components/index.ts +0 -2
  171. package/src/features/meme-generator/presentation/screens/MemeGeneratorScreen.tsx +0 -168
  172. package/src/features/meme-generator/presentation/screens/index.ts +0 -1
  173. package/src/features/partner-upload/domain/types.ts +0 -59
  174. package/src/features/partner-upload/index.ts +0 -30
  175. package/src/features/partner-upload/presentation/components/PartnerInfoInput.tsx +0 -112
  176. package/src/features/partner-upload/presentation/components/PhotoTips.tsx +0 -53
  177. package/src/features/partner-upload/presentation/components/index.ts +0 -4
  178. package/src/features/partner-upload/presentation/hooks/index.ts +0 -7
  179. package/src/features/partner-upload/presentation/hooks/usePartnerStep.ts +0 -130
  180. package/src/features/partner-upload/presentation/screens/PartnerStepScreen.tsx +0 -231
  181. package/src/features/partner-upload/presentation/screens/index.ts +0 -6
  182. package/src/features/photo-restoration/README.md +0 -399
  183. package/src/features/photo-restoration/domain/index.ts +0 -1
  184. package/src/features/photo-restoration/domain/types/index.ts +0 -9
  185. package/src/features/photo-restoration/domain/types/photo-restore.types.ts +0 -64
  186. package/src/features/photo-restoration/index.ts +0 -22
  187. package/src/features/photo-restoration/presentation/components/PhotoRestoreFeature.tsx +0 -88
  188. package/src/features/photo-restoration/presentation/components/PhotoRestoreResultView.tsx +0 -86
  189. package/src/features/photo-restoration/presentation/components/index.ts +0 -4
  190. package/src/features/photo-restoration/presentation/hooks/index.ts +0 -1
  191. package/src/features/photo-restoration/presentation/hooks/usePhotoRestoreFeature.ts +0 -23
  192. package/src/features/photo-restoration/presentation/index.ts +0 -2
  193. package/src/features/remove-background/README.md +0 -393
  194. package/src/features/remove-background/domain/index.ts +0 -5
  195. package/src/features/remove-background/domain/types/index.ts +0 -7
  196. package/src/features/remove-background/domain/types/remove-background.types.ts +0 -28
  197. package/src/features/remove-background/index.ts +0 -19
  198. package/src/features/remove-background/presentation/components/RemoveBackgroundFeature.tsx +0 -86
  199. package/src/features/remove-background/presentation/components/index.ts +0 -2
  200. package/src/features/remove-background/presentation/hooks/index.ts +0 -1
  201. package/src/features/remove-background/presentation/hooks/useRemoveBackgroundFeature.ts +0 -28
  202. package/src/features/remove-background/presentation/index.ts +0 -6
  203. package/src/features/remove-object/README.md +0 -405
  204. package/src/features/remove-object/domain/index.ts +0 -5
  205. package/src/features/remove-object/domain/types/index.ts +0 -7
  206. package/src/features/remove-object/domain/types/remove-object.types.ts +0 -54
  207. package/src/features/remove-object/index.ts +0 -23
  208. package/src/features/remove-object/presentation/components/RemoveObjectFeature.tsx +0 -136
  209. package/src/features/remove-object/presentation/components/index.ts +0 -2
  210. package/src/features/remove-object/presentation/hooks/index.ts +0 -9
  211. package/src/features/remove-object/presentation/hooks/useRemoveObjectFeature.ts +0 -221
  212. package/src/features/remove-object/presentation/index.ts +0 -6
  213. package/src/features/replace-background/README.md +0 -405
  214. package/src/features/replace-background/domain/types/index.ts +0 -7
  215. package/src/features/replace-background/domain/types/replace-background.types.ts +0 -33
  216. package/src/features/replace-background/index.ts +0 -23
  217. package/src/features/replace-background/presentation/components/ReplaceBackgroundFeature.tsx +0 -105
  218. package/src/features/replace-background/presentation/components/index.ts +0 -6
  219. package/src/features/replace-background/presentation/hooks/index.ts +0 -9
  220. package/src/features/replace-background/presentation/hooks/useReplaceBackgroundFeature.ts +0 -55
  221. package/src/features/scenarios/domain/types.ts +0 -147
  222. package/src/features/scenarios/index.ts +0 -64
  223. package/src/features/scenarios/presentation/components/InspirationChips.tsx +0 -82
  224. package/src/features/scenarios/presentation/components/MagicPromptHeadline.tsx +0 -79
  225. package/src/features/scenarios/presentation/components/ScenarioGrid.tsx +0 -224
  226. package/src/features/scenarios/presentation/components/ScenarioHeader.tsx +0 -55
  227. package/src/features/scenarios/presentation/components/StyleSelector.tsx +0 -119
  228. package/src/features/scenarios/presentation/components/index.ts +0 -18
  229. package/src/features/scenarios/presentation/containers/CategoryNavigationContainer.tsx +0 -178
  230. package/src/features/scenarios/presentation/screens/HierarchicalScenarioListScreen.tsx +0 -266
  231. package/src/features/scenarios/presentation/screens/MagicPromptScreen.tsx +0 -242
  232. package/src/features/scenarios/presentation/screens/MainCategoryScreen.tsx +0 -198
  233. package/src/features/scenarios/presentation/screens/ScenarioPreviewScreen.tsx +0 -164
  234. package/src/features/scenarios/presentation/screens/ScenarioSelectorScreen.tsx +0 -66
  235. package/src/features/scenarios/presentation/screens/SubCategoryScreen.tsx +0 -216
  236. package/src/features/script-generator/README.md +0 -433
  237. package/src/features/script-generator/domain/constants/index.ts +0 -10
  238. package/src/features/script-generator/domain/types/script.types.ts +0 -30
  239. package/src/features/script-generator/index.ts +0 -5
  240. package/src/features/script-generator/infrastructure/services/ScriptGenerationService.ts +0 -62
  241. package/src/features/script-generator/presentation/components/ScriptDisplay.tsx +0 -158
  242. package/src/features/script-generator/presentation/components/VideoTypeSelector.tsx +0 -102
  243. package/src/features/script-generator/presentation/components/index.ts +0 -2
  244. package/src/features/script-generator/presentation/hooks/index.ts +0 -1
  245. package/src/features/script-generator/presentation/hooks/useScriptGenerator.ts +0 -77
  246. package/src/features/shared/README.md +0 -311
  247. package/src/features/shared/dual-image-video/domain/types/dual-image-video.types.ts +0 -88
  248. package/src/features/shared/dual-image-video/domain/types/index.ts +0 -14
  249. package/src/features/shared/dual-image-video/index.ts +0 -17
  250. package/src/features/shared/dual-image-video/presentation/hooks/index.ts +0 -5
  251. package/src/features/shared/dual-image-video/presentation/hooks/useDualImageVideoFeature.ts +0 -185
  252. package/src/features/shared/index.ts +0 -6
  253. package/src/features/text-to-image/README.md +0 -394
  254. package/src/features/text-to-image/domain/constants/index.ts +0 -8
  255. package/src/features/text-to-image/domain/constants/options.constants.ts +0 -39
  256. package/src/features/text-to-image/domain/constants/styles.constants.ts +0 -34
  257. package/src/features/text-to-image/domain/index.ts +0 -7
  258. package/src/features/text-to-image/domain/types/config.types.ts +0 -75
  259. package/src/features/text-to-image/domain/types/form.types.ts +0 -58
  260. package/src/features/text-to-image/domain/types/index.ts +0 -38
  261. package/src/features/text-to-image/domain/types/text-to-image.types.ts +0 -58
  262. package/src/features/text-to-image/index.ts +0 -116
  263. package/src/features/text-to-image/infrastructure/index.ts +0 -1
  264. package/src/features/text-to-image/infrastructure/services/index.ts +0 -5
  265. package/src/features/text-to-image/infrastructure/services/text-to-image-executor.ts +0 -147
  266. package/src/features/text-to-image/presentation/components/index.ts +0 -30
  267. package/src/features/text-to-image/presentation/hooks/index.ts +0 -30
  268. package/src/features/text-to-image/presentation/hooks/useFormState.ts +0 -103
  269. package/src/features/text-to-image/presentation/hooks/useGeneration.ts +0 -139
  270. package/src/features/text-to-image/presentation/hooks/useTextToImageFeature.ts +0 -111
  271. package/src/features/text-to-image/presentation/hooks/useTextToImageForm.ts +0 -58
  272. package/src/features/text-to-image/presentation/index.ts +0 -7
  273. package/src/features/text-to-video/README.md +0 -412
  274. package/src/features/text-to-video/domain/index.ts +0 -1
  275. package/src/features/text-to-video/domain/types/callback.types.ts +0 -69
  276. package/src/features/text-to-video/domain/types/component.types.ts +0 -106
  277. package/src/features/text-to-video/domain/types/config.types.ts +0 -61
  278. package/src/features/text-to-video/domain/types/index.ts +0 -56
  279. package/src/features/text-to-video/domain/types/request.types.ts +0 -36
  280. package/src/features/text-to-video/domain/types/state.types.ts +0 -53
  281. package/src/features/text-to-video/index.ts +0 -68
  282. package/src/features/text-to-video/infrastructure/index.ts +0 -1
  283. package/src/features/text-to-video/infrastructure/services/index.ts +0 -5
  284. package/src/features/text-to-video/infrastructure/services/text-to-video-executor.ts +0 -141
  285. package/src/features/text-to-video/presentation/components/FrameSelector.tsx +0 -153
  286. package/src/features/text-to-video/presentation/components/GenerationTabs.tsx +0 -73
  287. package/src/features/text-to-video/presentation/components/HeroSection.tsx +0 -61
  288. package/src/features/text-to-video/presentation/components/HintCarousel.tsx +0 -96
  289. package/src/features/text-to-video/presentation/components/OptionsPanel.tsx +0 -121
  290. package/src/features/text-to-video/presentation/components/index.ts +0 -10
  291. package/src/features/text-to-video/presentation/hooks/index.ts +0 -17
  292. package/src/features/text-to-video/presentation/hooks/useTextToVideoFeature.ts +0 -225
  293. package/src/features/text-to-video/presentation/hooks/useTextToVideoForm.ts +0 -134
  294. package/src/features/text-to-video/presentation/index.ts +0 -7
  295. package/src/features/text-to-voice/README.md +0 -445
  296. package/src/features/text-to-voice/domain/index.ts +0 -1
  297. package/src/features/text-to-voice/domain/types/component.types.ts +0 -91
  298. package/src/features/text-to-voice/domain/types/config.types.ts +0 -34
  299. package/src/features/text-to-voice/domain/types/form.types.ts +0 -39
  300. package/src/features/text-to-voice/domain/types/generation.types.ts +0 -43
  301. package/src/features/text-to-voice/domain/types/index.ts +0 -38
  302. package/src/features/text-to-voice/index.ts +0 -53
  303. package/src/features/text-to-voice/infrastructure/index.ts +0 -1
  304. package/src/features/text-to-voice/infrastructure/services/index.ts +0 -4
  305. package/src/features/text-to-voice/infrastructure/services/text-to-voice-executor.ts +0 -103
  306. package/src/features/text-to-voice/presentation/components/TextToVoiceAudioPlayer.tsx +0 -81
  307. package/src/features/text-to-voice/presentation/components/index.ts +0 -7
  308. package/src/features/text-to-voice/presentation/hooks/index.ts +0 -6
  309. package/src/features/text-to-voice/presentation/hooks/useTextToVoiceForm.ts +0 -91
  310. package/src/features/text-to-voice/presentation/hooks/useTextToVoiceGeneration.ts +0 -116
  311. package/src/features/text-to-voice/presentation/index.ts +0 -2
  312. package/src/features/upscaling/README.md +0 -396
  313. package/src/features/upscaling/domain/index.ts +0 -1
  314. package/src/features/upscaling/domain/types/index.ts +0 -1
  315. package/src/features/upscaling/domain/types/upscale.types.ts +0 -23
  316. package/src/features/upscaling/index.ts +0 -20
  317. package/src/features/upscaling/presentation/components/ComparisonSlider.tsx +0 -200
  318. package/src/features/upscaling/presentation/components/UpscaleFeature.tsx +0 -89
  319. package/src/features/upscaling/presentation/components/UpscaleResultView.tsx +0 -98
  320. package/src/features/upscaling/presentation/components/index.ts +0 -6
  321. package/src/features/upscaling/presentation/hooks/index.ts +0 -1
  322. package/src/features/upscaling/presentation/hooks/useUpscaleFeature.ts +0 -28
  323. package/src/features/upscaling/presentation/index.ts +0 -2
  324. package/src/features/wizard/domain/types.ts +0 -154
  325. package/src/features/wizard/index.ts +0 -43
  326. package/src/features/wizard/presentation/components/AIFeatureWizard.tsx +0 -231
  327. package/src/features/wizard/presentation/components/AIGenerationWizard.tsx +0 -132
  328. package/src/features/wizard/presentation/hooks/useWizard.ts +0 -120
  329. package/src/features/wizard/presentation/store/useWizardStore.ts +0 -82
  330. package/src/presentation/components/flows/AIGenerateWizardFlow.tsx +0 -231
  331. package/src/presentation/components/flows/AIGenerateWizardFlow.types.ts +0 -66
  332. package/src/presentation/components/flows/useAIGenerateWizardFlow.ts +0 -130
  333. package/src/presentation/hooks/useAIGenerateWizard.ts +0 -164
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-ai-generation-content",
3
- "version": "1.26.2",
3
+ "version": "1.26.5",
4
4
  "description": "Provider-agnostic AI generation orchestration for React Native with result preview components",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -11,7 +11,8 @@
11
11
  "./creations": "./src/domains/creations/index.ts",
12
12
  "./face-detection": "./src/domains/face-detection/index.ts",
13
13
  "./feature-background": "./src/domains/feature-background/index.ts",
14
- "./wizard": "./src/domains/wizard/index.ts"
14
+ "./wizard": "./src/domains/wizard/index.ts",
15
+ "./generation": "./src/domains/generation/index.ts"
15
16
  },
16
17
  "files": [
17
18
  "src"
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Feature Registry
3
+ * Centralized registry for all AI generation features
4
+ * Apps register features they need during initialization
5
+ */
6
+
7
+ import type {
8
+ FeatureConfig,
9
+ FeatureRegistration,
10
+ } from "../domain/feature-config.types";
11
+
12
+ declare const __DEV__: boolean;
13
+
14
+ class FeatureRegistryImpl implements FeatureRegistration {
15
+ private features = new Map<string, FeatureConfig>();
16
+
17
+ register(featureId: string, config: FeatureConfig): void {
18
+ if (this.features.has(featureId)) {
19
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
20
+ console.warn(
21
+ `[FeatureRegistry] Feature '${featureId}' already registered. Overwriting.`,
22
+ );
23
+ }
24
+ }
25
+
26
+ this.features.set(featureId, config);
27
+
28
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
29
+ console.log("[FeatureRegistry] Feature registered", {
30
+ featureId,
31
+ type: config.type,
32
+ model: config.model,
33
+ creditCost: config.creditCost,
34
+ inputType: config.inputType,
35
+ outputType: config.outputType,
36
+ });
37
+ }
38
+ }
39
+
40
+ get(featureId: string): FeatureConfig {
41
+ const config = this.features.get(featureId);
42
+
43
+ if (!config) {
44
+ const availableFeatures = Array.from(this.features.keys()).join(", ");
45
+
46
+ throw new Error(
47
+ `Feature not found: ${featureId}.\n\n` +
48
+ `Available features: ${availableFeatures || "none"}.\n` +
49
+ `Please register '${featureId}' using featureRegistry.register() in your app initialization.`,
50
+ );
51
+ }
52
+
53
+ return config;
54
+ }
55
+
56
+ getAll(): FeatureConfig[] {
57
+ return Array.from(this.features.values());
58
+ }
59
+
60
+ has(featureId: string): boolean {
61
+ return this.features.has(featureId);
62
+ }
63
+
64
+ unregister(featureId: string): void {
65
+ const existed = this.features.delete(featureId);
66
+
67
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
68
+ if (existed) {
69
+ console.log("[FeatureRegistry] Feature unregistered", { featureId });
70
+ } else {
71
+ console.warn(
72
+ `[FeatureRegistry] Cannot unregister '${featureId}': not found`,
73
+ );
74
+ }
75
+ }
76
+ }
77
+
78
+ clear(): void {
79
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
80
+ console.log("[FeatureRegistry] Clearing all features");
81
+ }
82
+ this.features.clear();
83
+ }
84
+
85
+ logRegisteredFeatures(): void {
86
+ const features = this.getAll();
87
+
88
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
89
+ console.log("[FeatureRegistry] Registered features:", {
90
+ count: features.length,
91
+ features: features.map((f) => ({
92
+ id: f.id,
93
+ type: f.type,
94
+ outputType: f.outputType,
95
+ })),
96
+ });
97
+ }
98
+ }
99
+ }
100
+
101
+ export const featureRegistry = new FeatureRegistryImpl();
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Generation Strategy Factory
3
+ * Creates generation strategies from feature configs
4
+ */
5
+
6
+ import type { GenerationStrategy } from "../../../presentation/hooks/generation/orchestrator";
7
+ import type { FeatureConfig } from "../domain/feature-config.types";
8
+ import type {
9
+ ImageGenerationInput,
10
+ VideoGenerationInput,
11
+ ImageGenerationOutput,
12
+ VideoGenerationOutput,
13
+ } from "../domain/generation.types";
14
+ import { ExecutorFactory } from "../../../infrastructure/executors/executor-factory";
15
+ import { featureRegistry } from "./feature-registry";
16
+
17
+ declare const __DEV__: boolean;
18
+
19
+ interface CreationRepository {
20
+ create(userId: string, creation: unknown): Promise<void>;
21
+ }
22
+
23
+ interface StrategyFactoryOptions {
24
+ featureId: string;
25
+ userId?: string;
26
+ repository?: CreationRepository;
27
+ }
28
+
29
+ export function createGenerationStrategy(
30
+ options: StrategyFactoryOptions,
31
+ ): GenerationStrategy<unknown, unknown> {
32
+ const { featureId, userId, repository } = options;
33
+
34
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
35
+ console.log("[StrategyFactory] Creating strategy", {
36
+ featureId,
37
+ hasUserId: !!userId,
38
+ hasRepository: !!repository,
39
+ });
40
+ }
41
+
42
+ const featureConfig = featureRegistry.get(featureId);
43
+ const executor = ExecutorFactory.create(featureConfig.type);
44
+
45
+ return {
46
+ execute: async (input: unknown, onProgress?: (progress: number) => void) => {
47
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
48
+ console.log("[StrategyFactory] Executing generation", {
49
+ featureId,
50
+ type: featureConfig.type,
51
+ model: featureConfig.model,
52
+ });
53
+ }
54
+
55
+ const result = await executor.generate(featureConfig.model, input, {
56
+ onProgress,
57
+ });
58
+
59
+ if (!result.success || !result.data) {
60
+ throw new Error(result.error || "Generation failed");
61
+ }
62
+
63
+ return result.data;
64
+ },
65
+
66
+ getCreditCost: () => {
67
+ return featureConfig.creditCost;
68
+ },
69
+
70
+ save: async (result: unknown, uid: string) => {
71
+ if (!repository) {
72
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
73
+ console.log("[StrategyFactory] No repository provided, skipping save");
74
+ }
75
+ return;
76
+ }
77
+
78
+ const creation = buildCreation(featureConfig, result);
79
+
80
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
81
+ console.log("[StrategyFactory] Saving creation", {
82
+ featureId,
83
+ creationId: creation.id,
84
+ outputType: featureConfig.outputType,
85
+ });
86
+ }
87
+
88
+ await repository.create(uid, creation);
89
+
90
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
91
+ console.log("[StrategyFactory] Creation saved successfully");
92
+ }
93
+ },
94
+ };
95
+ }
96
+
97
+ function buildCreation(featureConfig: FeatureConfig, result: unknown) {
98
+ const creationId = `${featureConfig.id}_${Date.now()}`;
99
+
100
+ let mainUri = "";
101
+ let output: Record<string, unknown> = {};
102
+
103
+ if (featureConfig.outputType === "image") {
104
+ const imageResult = result as ImageGenerationOutput;
105
+ mainUri = imageResult.imageUrl || "";
106
+ output = { imageUrl: imageResult.imageUrl };
107
+ } else if (featureConfig.outputType === "video") {
108
+ const videoResult = result as VideoGenerationOutput;
109
+ mainUri = videoResult.videoUrl || "";
110
+ output = { videoUrl: videoResult.videoUrl };
111
+ }
112
+
113
+ return {
114
+ id: creationId,
115
+ uri: mainUri,
116
+ type: featureConfig.id,
117
+ createdAt: new Date(),
118
+ isShared: false,
119
+ isFavorite: false,
120
+ metadata: {
121
+ featureId: featureConfig.id,
122
+ generationType: featureConfig.type,
123
+ outputType: featureConfig.outputType,
124
+ ...featureConfig.metadata,
125
+ },
126
+ output,
127
+ };
128
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Feature Configuration Types
3
+ * Defines how apps configure AI features
4
+ */
5
+
6
+ // ============================================================================
7
+ // Feature Type Enums
8
+ // ============================================================================
9
+
10
+ export type GenerationType = "image" | "video" | "meme";
11
+
12
+ export type InputType =
13
+ | "single-photo"
14
+ | "two-photos"
15
+ | "text"
16
+ | "photo-text"
17
+ | "photo-photo-text";
18
+
19
+ export type OutputType = "image" | "video";
20
+
21
+ // ============================================================================
22
+ // Feature Configuration
23
+ // ============================================================================
24
+
25
+ export interface FeatureConfig {
26
+ /** Unique feature identifier (e.g., 'couple-future', 'ai-hug') */
27
+ readonly id: string;
28
+
29
+ /** Generation type (determines which executor to use) */
30
+ readonly type: GenerationType;
31
+
32
+ /** Model ID (from app's GENERATION_MODELS config) */
33
+ readonly model: string;
34
+
35
+ /** Credit cost for this feature */
36
+ readonly creditCost: number;
37
+
38
+ /** Input type (determines wizard steps) */
39
+ readonly inputType: InputType;
40
+
41
+ /** Output type (determines result preview) */
42
+ readonly outputType: OutputType;
43
+
44
+ /** Optional: Custom prompt template */
45
+ readonly promptTemplate?: string;
46
+
47
+ /** Optional: Feature-specific metadata */
48
+ readonly metadata?: Record<string, unknown>;
49
+ }
50
+
51
+ // ============================================================================
52
+ // Feature Registration
53
+ // ============================================================================
54
+
55
+ export interface FeatureRegistration {
56
+ register(featureId: string, config: FeatureConfig): void;
57
+ get(featureId: string): FeatureConfig;
58
+ getAll(): FeatureConfig[];
59
+ has(featureId: string): boolean;
60
+ unregister(featureId: string): void;
61
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Generation Domain Types
3
+ * Generic types for all AI generation features
4
+ */
5
+
6
+ // ============================================================================
7
+ // Generation Options
8
+ // ============================================================================
9
+
10
+ export interface GenerationOptions {
11
+ timeoutMs?: number;
12
+ onProgress?: (progress: number) => void;
13
+ }
14
+
15
+ // ============================================================================
16
+ // Generation Result
17
+ // ============================================================================
18
+
19
+ export interface GenerationResult<T> {
20
+ success: boolean;
21
+ data?: T;
22
+ error?: string;
23
+ }
24
+
25
+ // ============================================================================
26
+ // Input Types (by generation type)
27
+ // ============================================================================
28
+
29
+ export interface ImageGenerationInput {
30
+ imageUrls?: string[];
31
+ prompt: string;
32
+ aspectRatio?: string;
33
+ outputFormat?: "jpeg" | "png" | "webp";
34
+ }
35
+
36
+ export interface VideoGenerationInput {
37
+ sourceImageBase64: string;
38
+ targetImageBase64?: string;
39
+ prompt?: string;
40
+ }
41
+
42
+ export interface MemeGenerationInput {
43
+ text: string;
44
+ template?: string;
45
+ }
46
+
47
+ // ============================================================================
48
+ // Output Types (by generation type)
49
+ // ============================================================================
50
+
51
+ export interface ImageGenerationOutput {
52
+ imageUrl: string;
53
+ }
54
+
55
+ export interface VideoGenerationOutput {
56
+ videoUrl: string;
57
+ }
58
+
59
+ export interface MemeGenerationOutput {
60
+ imageUrl: string;
61
+ caption?: string;
62
+ }
63
+
64
+ // ============================================================================
65
+ // Generic Executor Interface
66
+ // ============================================================================
67
+
68
+ export interface GenerationExecutor<TInput, TOutput> {
69
+ generate(
70
+ model: string,
71
+ input: TInput,
72
+ options?: GenerationOptions,
73
+ ): Promise<GenerationResult<TOutput>>;
74
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Generation Domain
3
+ * Generic, feature-agnostic AI generation system
4
+ */
5
+
6
+ // Presentation Layer
7
+ export {
8
+ useAIGeneration,
9
+ type UseAIGenerationProps,
10
+ type UseAIGenerationReturn,
11
+ type AlertMessages,
12
+ } from "./presentation/useAIGeneration.hook";
13
+
14
+ // Application Layer
15
+ export { featureRegistry } from "./application/feature-registry";
16
+ export { createGenerationStrategy } from "./application/generation-strategy.factory";
17
+
18
+ // Domain Layer
19
+ export type {
20
+ FeatureConfig,
21
+ FeatureRegistration,
22
+ GenerationType,
23
+ InputType,
24
+ OutputType,
25
+ } from "./domain/feature-config.types";
26
+
27
+ export type {
28
+ GenerationExecutor,
29
+ GenerationOptions,
30
+ GenerationResult,
31
+ ImageGenerationInput,
32
+ ImageGenerationOutput,
33
+ VideoGenerationInput,
34
+ VideoGenerationOutput,
35
+ MemeGenerationInput,
36
+ MemeGenerationOutput,
37
+ } from "./domain/generation.types";
@@ -0,0 +1,106 @@
1
+ /**
2
+ * useAIGeneration Hook
3
+ * Universal hook for ALL AI generation features
4
+ * Replaces all feature-specific hooks (useCoupleFutureFlow, useAIHugFeature, etc.)
5
+ */
6
+
7
+ import { useGenerationOrchestrator } from "../../../presentation/hooks/generation/orchestrator";
8
+ import { createGenerationStrategy } from "../application/generation-strategy.factory";
9
+
10
+ declare const __DEV__: boolean;
11
+
12
+ // ============================================================================
13
+ // Types
14
+ // ============================================================================
15
+
16
+ export interface AlertMessages {
17
+ networkError: string;
18
+ policyViolation: string;
19
+ saveFailed: string;
20
+ creditFailed: string;
21
+ unknown: string;
22
+ }
23
+
24
+ export interface UseAIGenerationProps {
25
+ /** Feature ID from feature registry */
26
+ featureId: string;
27
+
28
+ /** User ID for saving creations */
29
+ userId?: string;
30
+
31
+ /** Alert messages for errors */
32
+ alertMessages?: AlertMessages;
33
+
34
+ /** Called when generation succeeds */
35
+ onSuccess?: (result: unknown) => void;
36
+
37
+ /** Called when generation fails */
38
+ onError?: (error: string) => void;
39
+
40
+ /** Called when credits are exhausted */
41
+ onCreditsExhausted?: () => void;
42
+
43
+ /** Optional: Custom repository for saving */
44
+ repository?: {
45
+ create(userId: string, creation: unknown): Promise<void>;
46
+ };
47
+ }
48
+
49
+ export interface UseAIGenerationReturn {
50
+ /** Trigger generation */
51
+ generate: (input: unknown) => Promise<void>;
52
+
53
+ /** Whether generation is in progress */
54
+ isGenerating: boolean;
55
+
56
+ /** Current progress (0-100) */
57
+ progress: number;
58
+ }
59
+
60
+ // ============================================================================
61
+ // Hook
62
+ // ============================================================================
63
+
64
+ export function useAIGeneration(
65
+ props: UseAIGenerationProps,
66
+ ): UseAIGenerationReturn {
67
+ const {
68
+ featureId,
69
+ userId,
70
+ alertMessages,
71
+ onSuccess,
72
+ onError,
73
+ onCreditsExhausted,
74
+ repository,
75
+ } = props;
76
+
77
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
78
+ console.log("[useAIGeneration] Initializing", {
79
+ featureId,
80
+ hasUserId: !!userId,
81
+ hasRepository: !!repository,
82
+ });
83
+ }
84
+
85
+ // Create generic strategy
86
+ const strategy = createGenerationStrategy({
87
+ featureId,
88
+ userId,
89
+ repository,
90
+ });
91
+
92
+ // Use orchestrator for lifecycle management
93
+ const orchestrator = useGenerationOrchestrator(strategy, {
94
+ userId,
95
+ alertMessages,
96
+ onSuccess,
97
+ onError,
98
+ onCreditsExhausted,
99
+ });
100
+
101
+ return {
102
+ generate: orchestrator.generate,
103
+ isGenerating: orchestrator.isGenerating,
104
+ progress: orchestrator.progress,
105
+ };
106
+ }
@@ -366,10 +366,9 @@ export const createWizardStrategy = (
366
366
  scenarioId: scenario.id,
367
367
  scenarioTitle: scenario.title || scenario.id,
368
368
  },
369
- output: {
370
- imageUrl,
371
- videoUrl,
372
- },
369
+ output: outputType === "image"
370
+ ? { imageUrl }
371
+ : { videoUrl },
373
372
  };
374
373
 
375
374
  if (typeof __DEV__ !== "undefined" && __DEV__) {
package/src/index.ts CHANGED
@@ -74,7 +74,6 @@ export {
74
74
  useAIGenerateState, AIGenerateStep,
75
75
  useGenerationOrchestrator, useImageGeneration, useVideoGeneration, useAIFeatureGeneration,
76
76
  createGenerationError, getAlertMessage, parseError,
77
- useAIGenerateWizard, createWizardTranslations,
78
77
  } from "./presentation/hooks";
79
78
 
80
79
  export type {
@@ -87,7 +86,6 @@ export type {
87
86
  SingleImageInput, DualImageInput, ImageGenerationInput, ImageGenerationConfig,
88
87
  DualImageVideoInput, VideoGenerationConfig,
89
88
  UploadedImage,
90
- AIGenerateWizardConfig, AIGenerateWizardTranslations, UseAIGenerateWizardReturn,
91
89
  } from "./presentation/hooks";
92
90
 
93
91
  export {
@@ -98,7 +96,7 @@ export {
98
96
  GenerateButton, ResultDisplay, AIGenerationResult, ErrorDisplay, FeatureHeader,
99
97
  AIGenScreenHeader, CreditBadge, PhotoUploadCard, SettingsSheet, StyleSelector,
100
98
  AspectRatioSelector, DurationSelector, GridSelector, StylePresetsGrid, AIGenerationForm,
101
- AIGenerationConfig, AIGenerateWizardFlow,
99
+ AIGenerationConfig,
102
100
  createAspectRatioOptions, createDurationOptions, createStyleOptions, createStyleOptionsFromConfig,
103
101
  ASPECT_RATIO_IDS, COMMON_DURATIONS,
104
102
  } from "./presentation/components";
@@ -129,7 +127,7 @@ export type {
129
127
  AspectRatioSelectorProps, DurationSelectorProps, GridSelectorProps, GridSelectorOption,
130
128
  StyleOption, AspectRatioOption, DurationValue, AspectRatioTranslations, DurationOption,
131
129
  StyleTranslations, AIGenerationFormProps, AIGenerationFormTranslations,
132
- AIGenerationConfigProps, AIGenerateWizardFlowProps,
130
+ AIGenerationConfigProps,
133
131
  } from "./presentation/components";
134
132
 
135
133
  export { DEFAULT_SINGLE_PHOTO_FLOW, DEFAULT_DUAL_PHOTO_FLOW } from "./presentation/types/flow-config.types";
@@ -143,28 +141,6 @@ export * from "./domains/content-moderation";
143
141
  export * from "./domains/creations";
144
142
  export * from "./domains/face-detection";
145
143
  export * from "./domains/scenarios";
146
- export * from "./features/image-to-image";
147
- export * from "./features/replace-background";
148
- export * from "./features/upscaling";
149
- export * from "./features/script-generator";
150
- export * from "./features/photo-restoration";
151
- export type { DualImageVideoProcessingStartData, DualImageVideoResult, DualImageVideoFeatureConfig } from "./features/shared/dual-image-video";
152
- export * from "./features/ai-hug";
153
- export * from "./features/ai-kiss";
154
- export * from "./features/face-swap";
155
- export * from "./features/anime-selfie";
156
- export * from "./features/remove-background";
157
- export * from "./features/remove-object";
158
- export * from "./features/text-to-video";
159
- export * from "./features/text-to-image";
160
- export * from "./features/image-to-video";
161
- export * from "./features/text-to-voice";
162
- export * from "./features/hd-touch-up";
163
- export * from "./features/meme-generator";
164
- export * from "./features/couple-future";
165
- export * from "./features/love-message";
166
- export * from "./features/partner-upload";
167
- export * from "./features/scenarios";
168
144
  export * from "./infrastructure/orchestration";
169
145
 
170
146
  // Generation Config Provider (App Configuration)
@@ -206,8 +182,6 @@ export type {
206
182
  PromptTranslationKeys,
207
183
  } from "./presentation/screens/ai-feature";
208
184
 
209
- // AIGenerationWizard - Generic wizard for all AI generation flows
210
- export * from "./features/wizard";
211
185
 
212
186
  // Flow System - Dynamic multi-step flow management
213
187
  export { createFlowStore, useFlow, resetFlowStore } from "./infrastructure/flow";
@@ -229,5 +203,5 @@ export type {
229
203
  FlowGenerationStatus,
230
204
  } from "./domain/entities/flow-config.types";
231
205
 
232
- // Wizard Domain - Generic, configuration-driven wizard system for ALL features
233
206
  export * from "./domains/wizard";
207
+ export * from "./domains/generation";
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Executor Factory
3
+ * Creates appropriate executor based on generation type
4
+ */
5
+
6
+ import type { GenerationExecutor } from "../../domains/generation/domain/generation.types";
7
+ import { ImageExecutor } from "./image-executor";
8
+ import { VideoExecutor } from "./video-executor";
9
+
10
+ declare const __DEV__: boolean;
11
+
12
+ type GenerationType = "image" | "video" | "meme";
13
+
14
+ export class ExecutorFactory {
15
+ private static executors = new Map<
16
+ GenerationType,
17
+ GenerationExecutor<unknown, unknown>
18
+ >();
19
+
20
+ static create(type: GenerationType): GenerationExecutor<unknown, unknown> {
21
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
22
+ console.log("[ExecutorFactory] Creating executor", { type });
23
+ }
24
+
25
+ if (!this.executors.has(type)) {
26
+ switch (type) {
27
+ case "image":
28
+ this.executors.set(type, new ImageExecutor());
29
+ break;
30
+ case "video":
31
+ this.executors.set(type, new VideoExecutor());
32
+ break;
33
+ case "meme":
34
+ throw new Error("Meme executor not yet implemented");
35
+ default:
36
+ throw new Error(`Unknown executor type: ${type}`);
37
+ }
38
+
39
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
40
+ console.log("[ExecutorFactory] Executor created and cached", { type });
41
+ }
42
+ }
43
+
44
+ return this.executors.get(type)!;
45
+ }
46
+
47
+ static clear(): void {
48
+ if (typeof __DEV__ !== "undefined" && __DEV__) {
49
+ console.log("[ExecutorFactory] Clearing executor cache");
50
+ }
51
+ this.executors.clear();
52
+ }
53
+ }