@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.
- package/package.json +3 -2
- package/src/domains/generation/application/feature-registry.ts +101 -0
- package/src/domains/generation/application/generation-strategy.factory.ts +128 -0
- package/src/domains/generation/domain/feature-config.types.ts +61 -0
- package/src/domains/generation/domain/generation.types.ts +74 -0
- package/src/domains/generation/index.ts +37 -0
- package/src/domains/generation/presentation/useAIGeneration.hook.ts +106 -0
- package/src/domains/wizard/infrastructure/strategies/wizard-strategy.factory.ts +3 -4
- package/src/index.ts +1 -25
- package/src/infrastructure/executors/executor-factory.ts +53 -0
- package/src/infrastructure/executors/image-executor.ts +133 -0
- package/src/infrastructure/executors/video-executor.ts +130 -0
- package/src/features/ai-hug/README.md +0 -438
- package/src/features/ai-hug/domain/index.ts +0 -5
- package/src/features/ai-hug/domain/types/ai-hug.types.ts +0 -25
- package/src/features/ai-hug/domain/types/index.ts +0 -7
- package/src/features/ai-hug/index.ts +0 -19
- package/src/features/ai-hug/presentation/components/AIHugFeature.tsx +0 -77
- package/src/features/ai-hug/presentation/components/index.ts +0 -2
- package/src/features/ai-hug/presentation/hooks/index.ts +0 -9
- package/src/features/ai-hug/presentation/hooks/useAIHugFeature.ts +0 -34
- package/src/features/ai-hug/presentation/index.ts +0 -6
- package/src/features/ai-kiss/README.md +0 -445
- package/src/features/ai-kiss/domain/index.ts +0 -5
- package/src/features/ai-kiss/domain/types/ai-kiss.types.ts +0 -25
- package/src/features/ai-kiss/domain/types/index.ts +0 -7
- package/src/features/ai-kiss/index.ts +0 -19
- package/src/features/ai-kiss/presentation/components/AIKissFeature.tsx +0 -77
- package/src/features/ai-kiss/presentation/components/index.ts +0 -2
- package/src/features/ai-kiss/presentation/hooks/index.ts +0 -9
- package/src/features/ai-kiss/presentation/hooks/useAIKissFeature.ts +0 -34
- package/src/features/ai-kiss/presentation/index.ts +0 -6
- package/src/features/anime-selfie/README.md +0 -396
- package/src/features/anime-selfie/domain/index.ts +0 -5
- package/src/features/anime-selfie/domain/types/anime-selfie.types.ts +0 -52
- package/src/features/anime-selfie/domain/types/index.ts +0 -8
- package/src/features/anime-selfie/index.ts +0 -20
- package/src/features/anime-selfie/presentation/components/AnimeSelfieFeature.tsx +0 -86
- package/src/features/anime-selfie/presentation/components/index.ts +0 -2
- package/src/features/anime-selfie/presentation/hooks/index.ts +0 -9
- package/src/features/anime-selfie/presentation/hooks/useAnimeSelfieFeature.ts +0 -59
- package/src/features/anime-selfie/presentation/index.ts +0 -6
- package/src/features/couple-future/README.md +0 -445
- package/src/features/couple-future/domain/types.ts +0 -63
- package/src/features/couple-future/domain/wizard-config.adapter.ts +0 -76
- package/src/features/couple-future/domain/wizard.types.ts +0 -121
- package/src/features/couple-future/index.ts +0 -83
- package/src/features/couple-future/infrastructure/coupleFeatureRegistry.ts +0 -76
- package/src/features/couple-future/infrastructure/couplePromptEnhancer.ts +0 -100
- package/src/features/couple-future/infrastructure/executor.ts +0 -188
- package/src/features/couple-future/infrastructure/generationUtils.ts +0 -228
- package/src/features/couple-future/presentation/components/ArtStyleSelector.tsx +0 -146
- package/src/features/couple-future/presentation/components/ArtistStyleSelector.tsx +0 -122
- package/src/features/couple-future/presentation/components/CoupleFutureWizard.tsx +0 -239
- package/src/features/couple-future/presentation/components/GeneratingStepContent.tsx +0 -86
- package/src/features/couple-future/presentation/components/RomanticMoodSelector.tsx +0 -147
- package/src/features/couple-future/presentation/components/WardrobeSelector.tsx +0 -141
- package/src/features/couple-future/presentation/components/index.ts +0 -12
- package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.ts +0 -166
- package/src/features/couple-future/presentation/hooks/useCoupleFutureFlow.types.ts +0 -69
- package/src/features/couple-future/presentation/hooks/useCoupleFutureHandlers.ts +0 -117
- package/src/features/couple-future/presentation/screens/CoupleFeatureScreen.tsx +0 -113
- package/src/features/face-swap/README.md +0 -431
- package/src/features/face-swap/domain/index.ts +0 -5
- package/src/features/face-swap/domain/types/face-swap.types.ts +0 -26
- package/src/features/face-swap/domain/types/index.ts +0 -7
- package/src/features/face-swap/index.ts +0 -19
- package/src/features/face-swap/presentation/components/FaceSwapFeature.tsx +0 -87
- package/src/features/face-swap/presentation/components/index.ts +0 -2
- package/src/features/face-swap/presentation/hooks/index.ts +0 -6
- package/src/features/face-swap/presentation/hooks/useFaceSwapFeature.ts +0 -35
- package/src/features/face-swap/presentation/index.ts +0 -6
- package/src/features/hd-touch-up/README.md +0 -396
- package/src/features/hd-touch-up/domain/index.ts +0 -1
- package/src/features/hd-touch-up/domain/types/hd-touch-up.types.ts +0 -62
- package/src/features/hd-touch-up/domain/types/index.ts +0 -9
- package/src/features/hd-touch-up/index.ts +0 -21
- package/src/features/hd-touch-up/presentation/components/HDTouchUpFeature.tsx +0 -86
- package/src/features/hd-touch-up/presentation/components/index.ts +0 -2
- package/src/features/hd-touch-up/presentation/hooks/index.ts +0 -1
- package/src/features/hd-touch-up/presentation/hooks/useHDTouchUpFeature.ts +0 -23
- package/src/features/hd-touch-up/presentation/index.ts +0 -2
- package/src/features/image-to-image/README.md +0 -459
- package/src/features/image-to-image/domain/index.ts +0 -1
- package/src/features/image-to-image/domain/types/base.types.ts +0 -48
- package/src/features/image-to-image/domain/types/index.ts +0 -1
- package/src/features/image-to-image/domain/types/partials/config.types.ts +0 -37
- package/src/features/image-to-image/domain/types/partials/hook.types.ts +0 -53
- package/src/features/image-to-image/domain/types/partials/metadata.types.ts +0 -32
- package/src/features/image-to-image/domain/types/partials/result.types.ts +0 -44
- package/src/features/image-to-image/domain/types/partials/state.types.ts +0 -34
- package/src/features/image-to-image/domain/types/partials/translation.types.ts +0 -57
- package/src/features/image-to-image/index.ts +0 -2
- package/src/features/image-to-image/presentation/hooks/index.ts +0 -3
- package/src/features/image-to-image/presentation/hooks/useDualImageFeature.ts +0 -204
- package/src/features/image-to-image/presentation/hooks/useImageWithPromptFeature.ts +0 -223
- package/src/features/image-to-image/presentation/hooks/useSingleImageFeature.ts +0 -166
- package/src/features/image-to-image/presentation/index.ts +0 -1
- package/src/features/image-to-video/README.md +0 -414
- package/src/features/image-to-video/domain/constants/animation.constants.ts +0 -47
- package/src/features/image-to-video/domain/constants/duration.constants.ts +0 -13
- package/src/features/image-to-video/domain/constants/form.constants.ts +0 -22
- package/src/features/image-to-video/domain/constants/index.ts +0 -23
- package/src/features/image-to-video/domain/constants/music.constants.ts +0 -53
- package/src/features/image-to-video/domain/index.ts +0 -5
- package/src/features/image-to-video/domain/types/animation.types.ts +0 -20
- package/src/features/image-to-video/domain/types/config.types.ts +0 -56
- package/src/features/image-to-video/domain/types/duration.types.ts +0 -11
- package/src/features/image-to-video/domain/types/form.types.ts +0 -35
- package/src/features/image-to-video/domain/types/image-to-video.types.ts +0 -122
- package/src/features/image-to-video/domain/types/index.ts +0 -39
- package/src/features/image-to-video/domain/types/music.types.ts +0 -21
- package/src/features/image-to-video/index.ts +0 -116
- package/src/features/image-to-video/infrastructure/index.ts +0 -1
- package/src/features/image-to-video/infrastructure/services/image-to-video-executor.ts +0 -154
- package/src/features/image-to-video/infrastructure/services/index.ts +0 -5
- package/src/features/image-to-video/presentation/components/AddMoreCard.tsx +0 -52
- package/src/features/image-to-video/presentation/components/AnimationStyleSelector.tsx +0 -135
- package/src/features/image-to-video/presentation/components/DurationSelector.tsx +0 -110
- package/src/features/image-to-video/presentation/components/EmptyGridState.tsx +0 -69
- package/src/features/image-to-video/presentation/components/GridImageItem.tsx +0 -64
- package/src/features/image-to-video/presentation/components/ImageSelectionGrid.styles.ts +0 -84
- package/src/features/image-to-video/presentation/components/ImageSelectionGrid.tsx +0 -77
- package/src/features/image-to-video/presentation/components/ImageSelectionGrid.types.ts +0 -18
- package/src/features/image-to-video/presentation/components/MusicMoodSelector.tsx +0 -181
- package/src/features/image-to-video/presentation/components/index.ts +0 -30
- package/src/features/image-to-video/presentation/hooks/index.ts +0 -27
- package/src/features/image-to-video/presentation/hooks/useFormState.ts +0 -116
- package/src/features/image-to-video/presentation/hooks/useGeneration.ts +0 -85
- package/src/features/image-to-video/presentation/hooks/useGenerationExecution.ts +0 -143
- package/src/features/image-to-video/presentation/hooks/useImageToVideoFeature.ts +0 -107
- package/src/features/image-to-video/presentation/hooks/useImageToVideoForm.ts +0 -119
- package/src/features/image-to-video/presentation/hooks/useImageToVideoValidation.ts +0 -46
- package/src/features/image-to-video/presentation/index.ts +0 -5
- package/src/features/love-message/domain/constants.ts +0 -162
- package/src/features/love-message/domain/types.ts +0 -58
- package/src/features/love-message/index.ts +0 -37
- package/src/features/love-message/infrastructure/persistence/PartnerProfileRepository.ts +0 -52
- package/src/features/love-message/infrastructure/prompts/messagePromptBuilder.ts +0 -109
- package/src/features/love-message/infrastructure/services/LoveMessageService.ts +0 -35
- package/src/features/love-message/presentation/components/CategoryGrid.tsx +0 -88
- package/src/features/love-message/presentation/components/DetailsInput.tsx +0 -74
- package/src/features/love-message/presentation/components/ExploreHeader.tsx +0 -67
- package/src/features/love-message/presentation/components/FieldInput.tsx +0 -83
- package/src/features/love-message/presentation/components/GeneratorHeader.tsx +0 -88
- package/src/features/love-message/presentation/components/LoveMessageHeroSection.tsx +0 -114
- package/src/features/love-message/presentation/components/MessageListItem.tsx +0 -77
- package/src/features/love-message/presentation/components/MessageResult.tsx +0 -105
- package/src/features/love-message/presentation/components/PartnerInput.tsx +0 -78
- package/src/features/love-message/presentation/components/ProgressDots.tsx +0 -48
- package/src/features/love-message/presentation/components/StepDetails.tsx +0 -23
- package/src/features/love-message/presentation/components/StepPartner.tsx +0 -116
- package/src/features/love-message/presentation/components/StepVibe.tsx +0 -30
- package/src/features/love-message/presentation/components/ToneSelector.tsx +0 -100
- package/src/features/love-message/presentation/components/TrendingSection.tsx +0 -130
- package/src/features/love-message/presentation/components/TypeSelector.tsx +0 -99
- package/src/features/love-message/presentation/hooks/useLoveMessageGenerator.ts +0 -114
- package/src/features/love-message/presentation/hooks/usePartnerProfile.ts +0 -43
- package/src/features/love-message/presentation/navigation/LoveMessageStack.tsx +0 -39
- package/src/features/love-message/presentation/screens/LoveMessageExploreScreen.tsx +0 -53
- package/src/features/love-message/presentation/screens/LoveMessageGeneratorScreen.tsx +0 -169
- package/src/features/love-message/presentation/screens/MessageListScreen.tsx +0 -127
- package/src/features/love-message/presentation/screens/PartnerProfileScreen.tsx +0 -119
- package/src/features/meme-generator/README.md +0 -408
- package/src/features/meme-generator/index.ts +0 -3
- package/src/features/meme-generator/infrastructure/services/MemeGenerationService.ts +0 -87
- package/src/features/meme-generator/presentation/components/MemeGeneratorFeature.tsx +0 -180
- package/src/features/meme-generator/presentation/components/index.ts +0 -2
- package/src/features/meme-generator/presentation/screens/MemeGeneratorScreen.tsx +0 -168
- package/src/features/meme-generator/presentation/screens/index.ts +0 -1
- package/src/features/partner-upload/domain/types.ts +0 -59
- package/src/features/partner-upload/index.ts +0 -30
- package/src/features/partner-upload/presentation/components/PartnerInfoInput.tsx +0 -112
- package/src/features/partner-upload/presentation/components/PhotoTips.tsx +0 -53
- package/src/features/partner-upload/presentation/components/index.ts +0 -4
- package/src/features/partner-upload/presentation/hooks/index.ts +0 -7
- package/src/features/partner-upload/presentation/hooks/usePartnerStep.ts +0 -130
- package/src/features/partner-upload/presentation/screens/PartnerStepScreen.tsx +0 -231
- package/src/features/partner-upload/presentation/screens/index.ts +0 -6
- package/src/features/photo-restoration/README.md +0 -399
- package/src/features/photo-restoration/domain/index.ts +0 -1
- package/src/features/photo-restoration/domain/types/index.ts +0 -9
- package/src/features/photo-restoration/domain/types/photo-restore.types.ts +0 -64
- package/src/features/photo-restoration/index.ts +0 -22
- package/src/features/photo-restoration/presentation/components/PhotoRestoreFeature.tsx +0 -88
- package/src/features/photo-restoration/presentation/components/PhotoRestoreResultView.tsx +0 -86
- package/src/features/photo-restoration/presentation/components/index.ts +0 -4
- package/src/features/photo-restoration/presentation/hooks/index.ts +0 -1
- package/src/features/photo-restoration/presentation/hooks/usePhotoRestoreFeature.ts +0 -23
- package/src/features/photo-restoration/presentation/index.ts +0 -2
- package/src/features/remove-background/README.md +0 -393
- package/src/features/remove-background/domain/index.ts +0 -5
- package/src/features/remove-background/domain/types/index.ts +0 -7
- package/src/features/remove-background/domain/types/remove-background.types.ts +0 -28
- package/src/features/remove-background/index.ts +0 -19
- package/src/features/remove-background/presentation/components/RemoveBackgroundFeature.tsx +0 -86
- package/src/features/remove-background/presentation/components/index.ts +0 -2
- package/src/features/remove-background/presentation/hooks/index.ts +0 -1
- package/src/features/remove-background/presentation/hooks/useRemoveBackgroundFeature.ts +0 -28
- package/src/features/remove-background/presentation/index.ts +0 -6
- package/src/features/remove-object/README.md +0 -405
- package/src/features/remove-object/domain/index.ts +0 -5
- package/src/features/remove-object/domain/types/index.ts +0 -7
- package/src/features/remove-object/domain/types/remove-object.types.ts +0 -54
- package/src/features/remove-object/index.ts +0 -23
- package/src/features/remove-object/presentation/components/RemoveObjectFeature.tsx +0 -136
- package/src/features/remove-object/presentation/components/index.ts +0 -2
- package/src/features/remove-object/presentation/hooks/index.ts +0 -9
- package/src/features/remove-object/presentation/hooks/useRemoveObjectFeature.ts +0 -221
- package/src/features/remove-object/presentation/index.ts +0 -6
- package/src/features/replace-background/README.md +0 -405
- package/src/features/replace-background/domain/types/index.ts +0 -7
- package/src/features/replace-background/domain/types/replace-background.types.ts +0 -33
- package/src/features/replace-background/index.ts +0 -23
- package/src/features/replace-background/presentation/components/ReplaceBackgroundFeature.tsx +0 -105
- package/src/features/replace-background/presentation/components/index.ts +0 -6
- package/src/features/replace-background/presentation/hooks/index.ts +0 -9
- package/src/features/replace-background/presentation/hooks/useReplaceBackgroundFeature.ts +0 -55
- package/src/features/scenarios/domain/types.ts +0 -147
- package/src/features/scenarios/index.ts +0 -64
- package/src/features/scenarios/presentation/components/InspirationChips.tsx +0 -82
- package/src/features/scenarios/presentation/components/MagicPromptHeadline.tsx +0 -79
- package/src/features/scenarios/presentation/components/ScenarioGrid.tsx +0 -224
- package/src/features/scenarios/presentation/components/ScenarioHeader.tsx +0 -55
- package/src/features/scenarios/presentation/components/StyleSelector.tsx +0 -119
- package/src/features/scenarios/presentation/components/index.ts +0 -18
- package/src/features/scenarios/presentation/containers/CategoryNavigationContainer.tsx +0 -178
- package/src/features/scenarios/presentation/screens/HierarchicalScenarioListScreen.tsx +0 -266
- package/src/features/scenarios/presentation/screens/MagicPromptScreen.tsx +0 -242
- package/src/features/scenarios/presentation/screens/MainCategoryScreen.tsx +0 -198
- package/src/features/scenarios/presentation/screens/ScenarioPreviewScreen.tsx +0 -164
- package/src/features/scenarios/presentation/screens/ScenarioSelectorScreen.tsx +0 -66
- package/src/features/scenarios/presentation/screens/SubCategoryScreen.tsx +0 -216
- package/src/features/script-generator/README.md +0 -433
- package/src/features/script-generator/domain/constants/index.ts +0 -10
- package/src/features/script-generator/domain/types/script.types.ts +0 -30
- package/src/features/script-generator/index.ts +0 -5
- package/src/features/script-generator/infrastructure/services/ScriptGenerationService.ts +0 -62
- package/src/features/script-generator/presentation/components/ScriptDisplay.tsx +0 -158
- package/src/features/script-generator/presentation/components/VideoTypeSelector.tsx +0 -102
- package/src/features/script-generator/presentation/components/index.ts +0 -2
- package/src/features/script-generator/presentation/hooks/index.ts +0 -1
- package/src/features/script-generator/presentation/hooks/useScriptGenerator.ts +0 -77
- package/src/features/shared/README.md +0 -311
- package/src/features/shared/dual-image-video/domain/types/dual-image-video.types.ts +0 -88
- package/src/features/shared/dual-image-video/domain/types/index.ts +0 -14
- package/src/features/shared/dual-image-video/index.ts +0 -17
- package/src/features/shared/dual-image-video/presentation/hooks/index.ts +0 -5
- package/src/features/shared/dual-image-video/presentation/hooks/useDualImageVideoFeature.ts +0 -185
- package/src/features/shared/index.ts +0 -6
- package/src/features/text-to-image/README.md +0 -394
- package/src/features/text-to-image/domain/constants/index.ts +0 -8
- package/src/features/text-to-image/domain/constants/options.constants.ts +0 -39
- package/src/features/text-to-image/domain/constants/styles.constants.ts +0 -34
- package/src/features/text-to-image/domain/index.ts +0 -7
- package/src/features/text-to-image/domain/types/config.types.ts +0 -75
- package/src/features/text-to-image/domain/types/form.types.ts +0 -58
- package/src/features/text-to-image/domain/types/index.ts +0 -38
- package/src/features/text-to-image/domain/types/text-to-image.types.ts +0 -58
- package/src/features/text-to-image/index.ts +0 -116
- package/src/features/text-to-image/infrastructure/index.ts +0 -1
- package/src/features/text-to-image/infrastructure/services/index.ts +0 -5
- package/src/features/text-to-image/infrastructure/services/text-to-image-executor.ts +0 -147
- package/src/features/text-to-image/presentation/components/index.ts +0 -30
- package/src/features/text-to-image/presentation/hooks/index.ts +0 -30
- package/src/features/text-to-image/presentation/hooks/useFormState.ts +0 -103
- package/src/features/text-to-image/presentation/hooks/useGeneration.ts +0 -139
- package/src/features/text-to-image/presentation/hooks/useTextToImageFeature.ts +0 -111
- package/src/features/text-to-image/presentation/hooks/useTextToImageForm.ts +0 -58
- package/src/features/text-to-image/presentation/index.ts +0 -7
- package/src/features/text-to-video/README.md +0 -412
- package/src/features/text-to-video/domain/index.ts +0 -1
- package/src/features/text-to-video/domain/types/callback.types.ts +0 -69
- package/src/features/text-to-video/domain/types/component.types.ts +0 -106
- package/src/features/text-to-video/domain/types/config.types.ts +0 -61
- package/src/features/text-to-video/domain/types/index.ts +0 -56
- package/src/features/text-to-video/domain/types/request.types.ts +0 -36
- package/src/features/text-to-video/domain/types/state.types.ts +0 -53
- package/src/features/text-to-video/index.ts +0 -68
- package/src/features/text-to-video/infrastructure/index.ts +0 -1
- package/src/features/text-to-video/infrastructure/services/index.ts +0 -5
- package/src/features/text-to-video/infrastructure/services/text-to-video-executor.ts +0 -141
- package/src/features/text-to-video/presentation/components/FrameSelector.tsx +0 -153
- package/src/features/text-to-video/presentation/components/GenerationTabs.tsx +0 -73
- package/src/features/text-to-video/presentation/components/HeroSection.tsx +0 -61
- package/src/features/text-to-video/presentation/components/HintCarousel.tsx +0 -96
- package/src/features/text-to-video/presentation/components/OptionsPanel.tsx +0 -121
- package/src/features/text-to-video/presentation/components/index.ts +0 -10
- package/src/features/text-to-video/presentation/hooks/index.ts +0 -17
- package/src/features/text-to-video/presentation/hooks/useTextToVideoFeature.ts +0 -225
- package/src/features/text-to-video/presentation/hooks/useTextToVideoForm.ts +0 -134
- package/src/features/text-to-video/presentation/index.ts +0 -7
- package/src/features/text-to-voice/README.md +0 -445
- package/src/features/text-to-voice/domain/index.ts +0 -1
- package/src/features/text-to-voice/domain/types/component.types.ts +0 -91
- package/src/features/text-to-voice/domain/types/config.types.ts +0 -34
- package/src/features/text-to-voice/domain/types/form.types.ts +0 -39
- package/src/features/text-to-voice/domain/types/generation.types.ts +0 -43
- package/src/features/text-to-voice/domain/types/index.ts +0 -38
- package/src/features/text-to-voice/index.ts +0 -53
- package/src/features/text-to-voice/infrastructure/index.ts +0 -1
- package/src/features/text-to-voice/infrastructure/services/index.ts +0 -4
- package/src/features/text-to-voice/infrastructure/services/text-to-voice-executor.ts +0 -103
- package/src/features/text-to-voice/presentation/components/TextToVoiceAudioPlayer.tsx +0 -81
- package/src/features/text-to-voice/presentation/components/index.ts +0 -7
- package/src/features/text-to-voice/presentation/hooks/index.ts +0 -6
- package/src/features/text-to-voice/presentation/hooks/useTextToVoiceForm.ts +0 -91
- package/src/features/text-to-voice/presentation/hooks/useTextToVoiceGeneration.ts +0 -116
- package/src/features/text-to-voice/presentation/index.ts +0 -2
- package/src/features/upscaling/README.md +0 -396
- package/src/features/upscaling/domain/index.ts +0 -1
- package/src/features/upscaling/domain/types/index.ts +0 -1
- package/src/features/upscaling/domain/types/upscale.types.ts +0 -23
- package/src/features/upscaling/index.ts +0 -20
- package/src/features/upscaling/presentation/components/ComparisonSlider.tsx +0 -200
- package/src/features/upscaling/presentation/components/UpscaleFeature.tsx +0 -89
- package/src/features/upscaling/presentation/components/UpscaleResultView.tsx +0 -98
- package/src/features/upscaling/presentation/components/index.ts +0 -6
- package/src/features/upscaling/presentation/hooks/index.ts +0 -1
- package/src/features/upscaling/presentation/hooks/useUpscaleFeature.ts +0 -28
- package/src/features/upscaling/presentation/index.ts +0 -2
- package/src/features/wizard/domain/types.ts +0 -154
- package/src/features/wizard/index.ts +0 -43
- package/src/features/wizard/presentation/components/AIFeatureWizard.tsx +0 -231
- package/src/features/wizard/presentation/components/AIGenerationWizard.tsx +0 -132
- package/src/features/wizard/presentation/hooks/useWizard.ts +0 -120
- package/src/features/wizard/presentation/store/useWizardStore.ts +0 -82
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
# Replace Background Feature
|
|
2
|
-
|
|
3
|
-
Replace image backgrounds with new scenes using AI.
|
|
4
|
-
|
|
5
|
-
## 📍 Import Path
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
import { useReplaceBackgroundFeature } from '@umituz/react-native-ai-generation-content';
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
**Location**: `src/features/replace-background/`
|
|
12
|
-
|
|
13
|
-
## 🎯 Feature Purpose
|
|
14
|
-
|
|
15
|
-
Remove existing backgrounds from images and replace them with custom backgrounds or built-in templates. Features automatic subject detection, natural edge blending, and optional lighting/color matching for seamless results.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 📋 Usage Strategy
|
|
20
|
-
|
|
21
|
-
### When to Use This Feature
|
|
22
|
-
|
|
23
|
-
✅ **Use Cases:**
|
|
24
|
-
- Creating professional photos with studio backgrounds
|
|
25
|
-
- Adding travel backgrounds to portraits
|
|
26
|
-
- Creating product photos with clean backgrounds
|
|
27
|
-
- Creative background replacements for social media
|
|
28
|
-
- Replacing distracting backgrounds
|
|
29
|
-
|
|
30
|
-
❌ **When NOT to Use:**
|
|
31
|
-
- Simple background removal (use Remove Background)
|
|
32
|
-
- Removing objects from images (use Remove Object)
|
|
33
|
-
- Background removal without replacement (use Remove Background)
|
|
34
|
-
|
|
35
|
-
### Implementation Strategy
|
|
36
|
-
|
|
37
|
-
1. **Select foreground image** with subject
|
|
38
|
-
2. **Select new background** (upload or template)
|
|
39
|
-
3. **Configure options** (edge smoothness, lighting, colors)
|
|
40
|
-
4. **Process replacement** with progress tracking
|
|
41
|
-
5. **Preview result** and offer regeneration
|
|
42
|
-
6. **Save or share** final image
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## ⚠️ Critical Rules (MUST FOLLOW)
|
|
47
|
-
|
|
48
|
-
### 1. Image Requirements
|
|
49
|
-
- **MUST** provide TWO images (foreground + background)
|
|
50
|
-
- **MUST** use high-quality images (min 512x512 recommended)
|
|
51
|
-
- **MUST** have clear subject in foreground
|
|
52
|
-
- **MUST NOT** exceed file size limits (10MB each)
|
|
53
|
-
- **MUST** validate both images before processing
|
|
54
|
-
|
|
55
|
-
### 2. Configuration
|
|
56
|
-
- **MUST** provide valid `userId` for tracking
|
|
57
|
-
- **MUST** specify `edgeSmoothness` (low, medium, high)
|
|
58
|
-
- **MUST** implement `onError` callback
|
|
59
|
-
- **MUST** implement `onSelectForeground` callback
|
|
60
|
-
- **MUST** implement `onSelectBackground` callback
|
|
61
|
-
|
|
62
|
-
### 3. State Management
|
|
63
|
-
- **MUST** check `isReady` before enabling replace button
|
|
64
|
-
- **MUST** verify both images are selected
|
|
65
|
-
- **MUST** display progress during replacement
|
|
66
|
-
- **MUST** display `error` state with clear messages
|
|
67
|
-
- **MUST** implement proper cleanup on unmount
|
|
68
|
-
|
|
69
|
-
### 4. Performance
|
|
70
|
-
- **MUST** implement image compression before upload
|
|
71
|
-
- **MUST** show progress indicator for processing
|
|
72
|
-
- **MUST** cache results locally
|
|
73
|
-
- **MUST** allow users to cancel processing
|
|
74
|
-
- **MUST NOT** replace multiple backgrounds simultaneously
|
|
75
|
-
|
|
76
|
-
### 5. Quality Options
|
|
77
|
-
- **MUST** provide edge smoothness control
|
|
78
|
-
- **MUST** support lighting adjustment
|
|
79
|
-
- **MUST** support color matching
|
|
80
|
-
- **MUST** offer background blur option
|
|
81
|
-
- **MUST** handle various image types
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## 🚫 Prohibitions (MUST AVOID)
|
|
86
|
-
|
|
87
|
-
### Strictly Forbidden
|
|
88
|
-
|
|
89
|
-
❌ **NEVER** do the following:
|
|
90
|
-
|
|
91
|
-
1. **No Missing Images**
|
|
92
|
-
- Always validate both foreground and background are selected
|
|
93
|
-
- Never call process() without both images
|
|
94
|
-
|
|
95
|
-
2. **No Auto-Processing**
|
|
96
|
-
- Never start replacement without user action
|
|
97
|
-
- Always require explicit "Replace" button press
|
|
98
|
-
- Show preview before processing
|
|
99
|
-
|
|
100
|
-
3. **No Hardcoded Credentials**
|
|
101
|
-
- Never store API keys in component files
|
|
102
|
-
- Use environment variables or secure storage
|
|
103
|
-
|
|
104
|
-
4. **No Unhandled Errors**
|
|
105
|
-
- Never ignore replacement failures
|
|
106
|
-
- Always explain what went wrong
|
|
107
|
-
- Provide retry or alternative options
|
|
108
|
-
|
|
109
|
-
5. **No Memory Leaks**
|
|
110
|
-
- Never store all images simultaneously in state
|
|
111
|
-
- Clean up temporary images
|
|
112
|
-
- Implement proper image disposal
|
|
113
|
-
|
|
114
|
-
6. **No Blocked UI**
|
|
115
|
-
- Never block main thread with image processing
|
|
116
|
-
- Always show progress indicator
|
|
117
|
-
- Allow cancellation
|
|
118
|
-
|
|
119
|
-
7. **No Perspective Mismatch**
|
|
120
|
-
- Never warn about perspective mismatches between images
|
|
121
|
-
- Always provide guidance on background selection
|
|
122
|
-
- Show preview before final processing
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## 🤖 AI Agent Directions
|
|
127
|
-
|
|
128
|
-
### For AI Code Generation Tools
|
|
129
|
-
|
|
130
|
-
When using this feature with AI code generation tools, follow these guidelines:
|
|
131
|
-
|
|
132
|
-
#### Prompt Template for AI Agents
|
|
133
|
-
|
|
134
|
-
```
|
|
135
|
-
You are implementing a replace background feature using @umituz/react-native-ai-generation-content.
|
|
136
|
-
|
|
137
|
-
REQUIREMENTS:
|
|
138
|
-
1. Import from: @umituz/react-native-ai-generation-content
|
|
139
|
-
2. Use the useReplaceBackgroundFeature hook
|
|
140
|
-
3. Implement dual image selection (foreground + background)
|
|
141
|
-
4. Provide background templates or custom upload
|
|
142
|
-
5. Set edge smoothness level (low, medium, high)
|
|
143
|
-
6. Configure options (adjustLighting, adjustColors, blurBackground)
|
|
144
|
-
7. Validate both images before processing
|
|
145
|
-
8. Show result preview
|
|
146
|
-
9. Handle long processing times with progress
|
|
147
|
-
10. Implement proper error handling
|
|
148
|
-
11. Implement cleanup on unmount
|
|
149
|
-
|
|
150
|
-
CRITICAL RULES:
|
|
151
|
-
- MUST validate both foreground and background images before calling process()
|
|
152
|
-
- MUST provide clear UI for foreground vs background selection
|
|
153
|
-
- MUST show result preview with quality check
|
|
154
|
-
- MUST handle edge smoothness adjustment
|
|
155
|
-
- MUST implement debouncing (300ms)
|
|
156
|
-
- MUST allow background regeneration
|
|
157
|
-
|
|
158
|
-
CONFIGURATION:
|
|
159
|
-
- Provide valid userId (string)
|
|
160
|
-
- Set edgeSmoothness: 'low' | 'medium' | 'high'
|
|
161
|
-
- Set adjustLighting: boolean (match foreground/background lighting)
|
|
162
|
-
- Set adjustColors: boolean (color-grade foreground to match background)
|
|
163
|
-
- Set blurBackground: boolean (add blur for depth effect)
|
|
164
|
-
- Implement onSelectForeground callback
|
|
165
|
-
- Implement onSelectBackground callback
|
|
166
|
-
- Implement onSaveResult callback
|
|
167
|
-
- Configure callbacks: onProcessingStart, onProcessingComplete, onError
|
|
168
|
-
|
|
169
|
-
OPTIONS:
|
|
170
|
-
- edgeSmoothness: Edge blending quality
|
|
171
|
-
- adjustLighting: Match lighting between images
|
|
172
|
-
- adjustColors: Harmonize colors
|
|
173
|
-
- blurBackground: Add depth with background blur
|
|
174
|
-
|
|
175
|
-
STRICTLY FORBIDDEN:
|
|
176
|
-
- No missing image validation (both images required)
|
|
177
|
-
- No auto-processing without user action
|
|
178
|
-
- No hardcoded API keys
|
|
179
|
-
- No unhandled errors
|
|
180
|
-
- No memory leaks
|
|
181
|
-
- No blocking UI
|
|
182
|
-
- No perspective mismatch warnings
|
|
183
|
-
|
|
184
|
-
QUALITY CHECKLIST:
|
|
185
|
-
- [ ] Foreground selection implemented
|
|
186
|
-
- [ ] Background selection/template picker added
|
|
187
|
-
- [ ] Edge smoothness selector included
|
|
188
|
-
- [ ] Lighting/color adjustment toggles
|
|
189
|
-
- [ ] Validation before process() (both images)
|
|
190
|
-
- [ ] Result preview display
|
|
191
|
-
- [ ] Progress indicator during processing
|
|
192
|
-
- [ ] Error display with retry option
|
|
193
|
-
- [ ] Download/share functionality
|
|
194
|
-
- [ ] Background template library
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
#### AI Implementation Checklist
|
|
198
|
-
|
|
199
|
-
Use this checklist when generating code:
|
|
200
|
-
|
|
201
|
-
- [ ] Feature imported from correct path
|
|
202
|
-
- [ ] Dual image selection implemented
|
|
203
|
-
- [ ] Background templates provided
|
|
204
|
-
- [ ] Edge smoothness selector added
|
|
205
|
-
- [ ] Lighting/color adjustment toggles
|
|
206
|
-
- [ ] Validation before process() (both images)
|
|
207
|
-
- [ ] Result preview display
|
|
208
|
-
- [ ] Progress indicator during processing
|
|
209
|
-
- [ ] Error display with user-friendly message
|
|
210
|
-
- [ ] Download/share buttons
|
|
211
|
-
- [ ] Cleanup on unmount
|
|
212
|
-
- [ ] Original images preserved
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## 🛠️ Configuration Strategy
|
|
217
|
-
|
|
218
|
-
### Essential Configuration
|
|
219
|
-
|
|
220
|
-
```typescript
|
|
221
|
-
// Required fields
|
|
222
|
-
{
|
|
223
|
-
userId: string
|
|
224
|
-
edgeSmoothness: 'low' | 'medium' | 'high'
|
|
225
|
-
onSelectForeground: () => Promise<string | null>
|
|
226
|
-
onSelectBackground: () => Promise<string | null>
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// Optional callbacks
|
|
230
|
-
{
|
|
231
|
-
onProcessingStart?: () => void
|
|
232
|
-
onProcessingComplete?: (result) => void
|
|
233
|
-
onError?: (error: string) => void
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
### Recommended Settings
|
|
238
|
-
|
|
239
|
-
1. **Edge Smoothness**
|
|
240
|
-
- Low: Sharp, precise edges (products, objects)
|
|
241
|
-
- Medium: Balanced edges (portraits, general use)
|
|
242
|
-
- High: Soft, blended edges (artistic effects)
|
|
243
|
-
|
|
244
|
-
2. **Quality Options**
|
|
245
|
-
- adjustLighting: Match foreground/background lighting
|
|
246
|
-
- adjustColors: Color-grade foreground to match background
|
|
247
|
-
- blurBackground: Add blur for depth effect
|
|
248
|
-
|
|
249
|
-
3. **Image Quality**
|
|
250
|
-
- Minimum: 512x512 resolution
|
|
251
|
-
- Recommended: 1024x1024 or higher
|
|
252
|
-
- Format: JPEG or PNG
|
|
253
|
-
- Max size: 10MB each
|
|
254
|
-
|
|
255
|
-
4. **Background Selection**
|
|
256
|
-
- Use backgrounds with similar perspective
|
|
257
|
-
- Match lighting direction when possible
|
|
258
|
-
- Consider color harmony
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## 📊 State Management
|
|
263
|
-
|
|
264
|
-
### Feature States
|
|
265
|
-
|
|
266
|
-
**isReady**: boolean
|
|
267
|
-
- Both images selected and validated
|
|
268
|
-
- Check before enabling replace button
|
|
269
|
-
|
|
270
|
-
**isProcessing**: boolean
|
|
271
|
-
- Background replacement in progress
|
|
272
|
-
- Show loading/progress indicator
|
|
273
|
-
- Disable replace button
|
|
274
|
-
|
|
275
|
-
**progress**: number (0-100)
|
|
276
|
-
- Replacement progress percentage
|
|
277
|
-
- Update progress bar
|
|
278
|
-
|
|
279
|
-
**error**: string | null
|
|
280
|
-
- Error message if replacement failed
|
|
281
|
-
- Display to user with clear message
|
|
282
|
-
|
|
283
|
-
**result**: {
|
|
284
|
-
imageUrl: string
|
|
285
|
-
foregroundImageUrl?: string
|
|
286
|
-
backgroundImageUrl?: string
|
|
287
|
-
edgeSmoothness?: string
|
|
288
|
-
metadata?: any
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
---
|
|
292
|
-
|
|
293
|
-
## 🎨 Best Practices
|
|
294
|
-
|
|
295
|
-
### Background Selection
|
|
296
|
-
|
|
297
|
-
1. **Perspective Matching**
|
|
298
|
-
- Good: Similar perspective and angle
|
|
299
|
-
- Bad: Conflicting perspectives
|
|
300
|
-
|
|
301
|
-
2. **Lighting Considerations**
|
|
302
|
-
- Enable adjustLighting for natural results
|
|
303
|
-
- Match lighting direction when possible
|
|
304
|
-
- Consider time of day
|
|
305
|
-
|
|
306
|
-
3. **Color Harmony**
|
|
307
|
-
- Use adjustColors for better integration
|
|
308
|
-
- Consider complementary colors
|
|
309
|
-
- Test different backgrounds
|
|
310
|
-
|
|
311
|
-
### User Experience
|
|
312
|
-
|
|
313
|
-
1. **Background Templates**
|
|
314
|
-
- Provide curated background options
|
|
315
|
-
- Categorize by use case (studio, travel, nature, etc.)
|
|
316
|
-
- Show previews before selection
|
|
317
|
-
|
|
318
|
-
2. **Preview**
|
|
319
|
-
- Show combined result before saving
|
|
320
|
-
- Allow option adjustment
|
|
321
|
-
- Compare with original
|
|
322
|
-
|
|
323
|
-
3. **Quality Settings**
|
|
324
|
-
- Explain edge smoothness options
|
|
325
|
-
- Provide presets (portrait, product, creative)
|
|
326
|
-
- Allow fine-tuning
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
|
-
## 🐛 Common Pitfalls
|
|
331
|
-
|
|
332
|
-
### Perspective Issues
|
|
333
|
-
|
|
334
|
-
❌ **Problem**: Unnatural looking result due to perspective mismatch
|
|
335
|
-
✅ **Solution**: Choose background with similar perspective
|
|
336
|
-
|
|
337
|
-
### Edge Issues
|
|
338
|
-
|
|
339
|
-
❌ **Problem**: Visible edges around subject
|
|
340
|
-
✅ **Solution**: Adjust edge smoothness, enable lighting/color adjustment
|
|
341
|
-
|
|
342
|
-
### Quality Issues
|
|
343
|
-
|
|
344
|
-
❌ **Problem**: Poor subject detection
|
|
345
|
-
✅ **Solution**: Use higher quality foreground image with clear subject
|
|
346
|
-
|
|
347
|
-
### Lighting Issues
|
|
348
|
-
|
|
349
|
-
❌ **Problem**: Lighting doesn't match between images
|
|
350
|
-
✅ **Solution**: Enable adjustLighting and adjustColors options
|
|
351
|
-
|
|
352
|
-
---
|
|
353
|
-
|
|
354
|
-
## 📦 Related Components
|
|
355
|
-
|
|
356
|
-
Use these components from the library:
|
|
357
|
-
|
|
358
|
-
- **PhotoUploadCard**: Upload image interface
|
|
359
|
-
- **DualImagePicker**: Select foreground and background
|
|
360
|
-
- **BackgroundTemplates**: Pre-made background options
|
|
361
|
-
- **EdgeSmoothnessSelector**: Choose edge quality
|
|
362
|
-
- **ResultDisplay**: Show combined result
|
|
363
|
-
- **ProgressBar**: Progress display
|
|
364
|
-
|
|
365
|
-
Located at: `src/presentation/components/`
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## 🔄 Migration Strategy
|
|
370
|
-
|
|
371
|
-
If migrating from previous implementation:
|
|
372
|
-
|
|
373
|
-
1. **Update imports** to new path
|
|
374
|
-
2. **Add dual image selection** (foreground + background)
|
|
375
|
-
3. **Implement edge smoothness control**
|
|
376
|
-
4. **Add quality options** (lighting, color, blur)
|
|
377
|
-
5. **Update state handling** for both images
|
|
378
|
-
6. **Test all edge smoothness levels**
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
## 📚 Additional Resources
|
|
383
|
-
|
|
384
|
-
- Main documentation: `/docs/`
|
|
385
|
-
- API reference: `/docs/api/`
|
|
386
|
-
- Examples: `/docs/examples/basic/replace-background/`
|
|
387
|
-
- Architecture: `/ARCHITECTURE.md`
|
|
388
|
-
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
**Last Updated**: 2025-01-08
|
|
392
|
-
**Version**: 2.0.0 (Strategy-based Documentation)
|
|
393
|
-
|
|
394
|
-
---
|
|
395
|
-
|
|
396
|
-
## 📝 Changelog
|
|
397
|
-
|
|
398
|
-
### v2.0.0 - 2025-01-08
|
|
399
|
-
- **BREAKING**: Documentation format changed to strategy-based
|
|
400
|
-
- Removed extensive code examples
|
|
401
|
-
- Added rules, prohibitions, and AI agent directions
|
|
402
|
-
- Focus on best practices and implementation guidance
|
|
403
|
-
|
|
404
|
-
### v1.0.0 - Initial Release
|
|
405
|
-
- Initial feature documentation
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Replace Background Feature Types
|
|
3
|
-
* Extends base image-to-image types with replace-background options
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type {
|
|
7
|
-
BaseImageResult,
|
|
8
|
-
BaseImageWithPromptState,
|
|
9
|
-
BaseImageTranslations,
|
|
10
|
-
SingleImageConfig,
|
|
11
|
-
} from "../../../image-to-image/domain/types";
|
|
12
|
-
|
|
13
|
-
export type ReplaceBackgroundMode =
|
|
14
|
-
| "replace"
|
|
15
|
-
| "blur"
|
|
16
|
-
| "creative-scene"
|
|
17
|
-
| "solid-color";
|
|
18
|
-
|
|
19
|
-
export type ReplaceBackgroundResult = BaseImageResult;
|
|
20
|
-
|
|
21
|
-
export interface ReplaceBackgroundFeatureState extends BaseImageWithPromptState {
|
|
22
|
-
mode: ReplaceBackgroundMode;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface ReplaceBackgroundTranslations extends BaseImageTranslations {
|
|
26
|
-
promptPlaceholder: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ReplaceBackgroundFeatureConfig
|
|
30
|
-
extends SingleImageConfig<ReplaceBackgroundResult> {
|
|
31
|
-
defaultMode?: ReplaceBackgroundMode;
|
|
32
|
-
onPromptChange?: (prompt: string) => void;
|
|
33
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Replace Background Feature
|
|
3
|
-
* AI-powered background replacement feature
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// Domain Types
|
|
7
|
-
export type {
|
|
8
|
-
ReplaceBackgroundMode,
|
|
9
|
-
ReplaceBackgroundResult,
|
|
10
|
-
ReplaceBackgroundFeatureState,
|
|
11
|
-
ReplaceBackgroundTranslations,
|
|
12
|
-
ReplaceBackgroundFeatureConfig,
|
|
13
|
-
} from "./domain/types";
|
|
14
|
-
|
|
15
|
-
// Presentation Components
|
|
16
|
-
export { ReplaceBackgroundFeature, type ReplaceBackgroundFeatureProps } from "./presentation/components";
|
|
17
|
-
|
|
18
|
-
// Presentation Hooks
|
|
19
|
-
export {
|
|
20
|
-
useReplaceBackgroundFeature,
|
|
21
|
-
type UseReplaceBackgroundFeatureProps,
|
|
22
|
-
type UseReplaceBackgroundFeatureReturn,
|
|
23
|
-
} from "./presentation/hooks";
|
package/src/features/replace-background/presentation/components/ReplaceBackgroundFeature.tsx
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import React, { useMemo } from "react";
|
|
2
|
-
import { View, Image, StyleSheet } from "react-native";
|
|
3
|
-
import { AtomicInput } from "@umituz/react-native-design-system";
|
|
4
|
-
import { PhotoUploadCard } from "../../../../presentation/components/PhotoUploadCard";
|
|
5
|
-
import { SingleImageWithPromptFeatureLayout } from "../../../../presentation/layouts";
|
|
6
|
-
import type { SingleImageWithPromptInputRenderProps, ResultRenderProps } from "../../../../presentation/layouts";
|
|
7
|
-
import { useReplaceBackgroundFeature } from "../hooks";
|
|
8
|
-
import type { ReplaceBackgroundTranslations, ReplaceBackgroundFeatureConfig } from "../../domain/types";
|
|
9
|
-
|
|
10
|
-
export interface ReplaceBackgroundFeatureProps {
|
|
11
|
-
config: ReplaceBackgroundFeatureConfig;
|
|
12
|
-
translations: ReplaceBackgroundTranslations & {
|
|
13
|
-
modalTitle?: string;
|
|
14
|
-
modalMessage?: string;
|
|
15
|
-
modalHint?: string;
|
|
16
|
-
modalBackgroundHint?: string;
|
|
17
|
-
};
|
|
18
|
-
onSelectImage: () => Promise<string | null>;
|
|
19
|
-
onSaveImage: (imageUrl: string) => Promise<void>;
|
|
20
|
-
onBeforeProcess?: () => Promise<boolean>;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export const ReplaceBackgroundFeature: React.FC<ReplaceBackgroundFeatureProps> = ({
|
|
24
|
-
config,
|
|
25
|
-
translations,
|
|
26
|
-
onSelectImage,
|
|
27
|
-
onSaveImage,
|
|
28
|
-
onBeforeProcess,
|
|
29
|
-
}) => {
|
|
30
|
-
const feature = useReplaceBackgroundFeature({
|
|
31
|
-
config,
|
|
32
|
-
onSelectImage,
|
|
33
|
-
onSaveImage,
|
|
34
|
-
onBeforeProcess,
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
const modalTranslations = useMemo(
|
|
38
|
-
() => ({
|
|
39
|
-
title: translations.modalTitle || "Processing",
|
|
40
|
-
message: translations.modalMessage || "AI is replacing the background...",
|
|
41
|
-
hint: translations.modalHint || "This may take a moment",
|
|
42
|
-
backgroundHint: translations.modalBackgroundHint || "Continue in background",
|
|
43
|
-
}),
|
|
44
|
-
[translations],
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<SingleImageWithPromptFeatureLayout
|
|
49
|
-
feature={feature}
|
|
50
|
-
translations={translations}
|
|
51
|
-
modalTranslations={modalTranslations}
|
|
52
|
-
renderInput={({ imageUri, onSelect, isDisabled, isProcessing, prompt, onPromptChange }: SingleImageWithPromptInputRenderProps) => (
|
|
53
|
-
<>
|
|
54
|
-
<PhotoUploadCard
|
|
55
|
-
imageUri={imageUri}
|
|
56
|
-
onPress={onSelect}
|
|
57
|
-
isValidating={isProcessing}
|
|
58
|
-
disabled={isDisabled}
|
|
59
|
-
translations={{
|
|
60
|
-
tapToUpload: translations.uploadTitle,
|
|
61
|
-
selectPhoto: translations.uploadSubtitle,
|
|
62
|
-
change: translations.uploadChange,
|
|
63
|
-
analyzing: translations.uploadAnalyzing,
|
|
64
|
-
}}
|
|
65
|
-
config={{
|
|
66
|
-
aspectRatio: 1,
|
|
67
|
-
borderRadius: 24,
|
|
68
|
-
showValidationStatus: false,
|
|
69
|
-
allowChange: true,
|
|
70
|
-
}}
|
|
71
|
-
/>
|
|
72
|
-
|
|
73
|
-
<View style={styles.promptContainer}>
|
|
74
|
-
<AtomicInput
|
|
75
|
-
value={prompt}
|
|
76
|
-
onChangeText={onPromptChange}
|
|
77
|
-
placeholder={translations.promptPlaceholder}
|
|
78
|
-
multiline
|
|
79
|
-
numberOfLines={3}
|
|
80
|
-
disabled={isProcessing}
|
|
81
|
-
/>
|
|
82
|
-
</View>
|
|
83
|
-
</>
|
|
84
|
-
)}
|
|
85
|
-
renderResult={({ imageUrl, imageSize }: ResultRenderProps) => (
|
|
86
|
-
<Image
|
|
87
|
-
source={{ uri: imageUrl }}
|
|
88
|
-
style={[styles.resultImage, { width: imageSize, height: imageSize }]}
|
|
89
|
-
resizeMode="contain"
|
|
90
|
-
/>
|
|
91
|
-
)}
|
|
92
|
-
/>
|
|
93
|
-
);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const styles = StyleSheet.create({
|
|
97
|
-
promptContainer: {
|
|
98
|
-
marginHorizontal: 24,
|
|
99
|
-
marginTop: 16,
|
|
100
|
-
marginBottom: 8,
|
|
101
|
-
},
|
|
102
|
-
resultImage: {
|
|
103
|
-
borderRadius: 16,
|
|
104
|
-
},
|
|
105
|
-
});
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useReplaceBackgroundFeature Hook
|
|
3
|
-
* Uses base image with prompt hook for background replacement
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { useState, useCallback } from "react";
|
|
7
|
-
import {
|
|
8
|
-
useImageWithPromptFeature,
|
|
9
|
-
type ImageWithPromptHookReturn,
|
|
10
|
-
} from "../../../image-to-image";
|
|
11
|
-
import type {
|
|
12
|
-
ReplaceBackgroundFeatureConfig,
|
|
13
|
-
ReplaceBackgroundResult,
|
|
14
|
-
ReplaceBackgroundMode,
|
|
15
|
-
} from "../../domain/types";
|
|
16
|
-
|
|
17
|
-
export interface UseReplaceBackgroundFeatureProps {
|
|
18
|
-
config: ReplaceBackgroundFeatureConfig;
|
|
19
|
-
onSelectImage: () => Promise<string | null>;
|
|
20
|
-
onSaveImage: (imageUrl: string) => Promise<void>;
|
|
21
|
-
onBeforeProcess?: () => Promise<boolean>;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface UseReplaceBackgroundFeatureReturn extends ImageWithPromptHookReturn {
|
|
25
|
-
mode: ReplaceBackgroundMode;
|
|
26
|
-
setMode: (mode: ReplaceBackgroundMode) => void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function useReplaceBackgroundFeature(
|
|
30
|
-
props: UseReplaceBackgroundFeatureProps,
|
|
31
|
-
): UseReplaceBackgroundFeatureReturn {
|
|
32
|
-
const { config, onSelectImage, onSaveImage, onBeforeProcess } = props;
|
|
33
|
-
const [mode, setMode] = useState<ReplaceBackgroundMode>(config.defaultMode || "replace");
|
|
34
|
-
|
|
35
|
-
const baseHook = useImageWithPromptFeature<ReplaceBackgroundFeatureConfig, ReplaceBackgroundResult>(
|
|
36
|
-
{ config, onSelectImage, onSaveImage, onBeforeProcess },
|
|
37
|
-
{
|
|
38
|
-
buildInput: (imageBase64, prompt) => ({
|
|
39
|
-
imageBase64,
|
|
40
|
-
prompt: prompt || undefined,
|
|
41
|
-
options: { mode },
|
|
42
|
-
}),
|
|
43
|
-
},
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
const handleSetMode = useCallback((newMode: ReplaceBackgroundMode) => {
|
|
47
|
-
setMode(newMode);
|
|
48
|
-
}, []);
|
|
49
|
-
|
|
50
|
-
return {
|
|
51
|
-
...baseHook,
|
|
52
|
-
mode,
|
|
53
|
-
setMode: handleSetMode,
|
|
54
|
-
};
|
|
55
|
-
}
|