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