@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,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dual Image Video Feature Types
|
|
3
|
-
* Shared types for video features that take two images (ai-hug, ai-kiss, etc.)
|
|
4
|
-
* DRY: Consolidates common types from ai-hug and ai-kiss features
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import type { VideoFeatureType } from "../../../../../domain/interfaces/ai-provider.interface";
|
|
8
|
-
|
|
9
|
-
export interface DualImageVideoFeatureState {
|
|
10
|
-
sourceImageUri: string | null;
|
|
11
|
-
targetImageUri: string | null;
|
|
12
|
-
processedVideoUrl: string | null;
|
|
13
|
-
isProcessing: boolean;
|
|
14
|
-
progress: number;
|
|
15
|
-
error: string | null;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface DualImageVideoResult {
|
|
19
|
-
success: boolean;
|
|
20
|
-
videoUrl?: string;
|
|
21
|
-
error?: string;
|
|
22
|
-
requestId?: string;
|
|
23
|
-
creationId?: string;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface DualImageVideoProcessingStartData {
|
|
27
|
-
creationId: string;
|
|
28
|
-
featureType: string;
|
|
29
|
-
sourceImageUri: string;
|
|
30
|
-
targetImageUri: string;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export type DualImageVideoResultExtractor = (result: unknown) => string | undefined;
|
|
34
|
-
|
|
35
|
-
export interface DualImageVideoFeatureConfig {
|
|
36
|
-
creditCost?: number;
|
|
37
|
-
extractResult?: DualImageVideoResultExtractor;
|
|
38
|
-
prepareImage: (imageUri: string) => Promise<string>;
|
|
39
|
-
onSourceImageSelect?: (uri: string) => void;
|
|
40
|
-
onTargetImageSelect?: (uri: string) => void;
|
|
41
|
-
/** Called when processing starts - use to create Firestore doc with "processing" status */
|
|
42
|
-
onProcessingStart?: (data: DualImageVideoProcessingStartData) => void;
|
|
43
|
-
/** Called when processing completes - use to update Firestore doc with result */
|
|
44
|
-
onProcessingComplete?: (result: DualImageVideoResult) => void;
|
|
45
|
-
/** Called on error - use to update Firestore doc with "failed" status */
|
|
46
|
-
onError?: (error: string, creationId?: string) => void;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export interface DualImageVideoTranslations {
|
|
50
|
-
sourceUploadTitle: string;
|
|
51
|
-
sourceUploadSubtitle: string;
|
|
52
|
-
targetUploadTitle: string;
|
|
53
|
-
targetUploadSubtitle: string;
|
|
54
|
-
uploadChange: string;
|
|
55
|
-
uploadAnalyzing: string;
|
|
56
|
-
description: string;
|
|
57
|
-
processingText: string;
|
|
58
|
-
processButtonText: string;
|
|
59
|
-
successText: string;
|
|
60
|
-
saveButtonText: string;
|
|
61
|
-
tryAnotherText: string;
|
|
62
|
-
/** Modal title shown during processing */
|
|
63
|
-
modalTitle?: string;
|
|
64
|
-
/** Modal message shown during processing */
|
|
65
|
-
modalMessage?: string;
|
|
66
|
-
/** Modal hint/tip shown during processing */
|
|
67
|
-
modalHint?: string;
|
|
68
|
-
/** "Continue in background" text */
|
|
69
|
-
modalBackgroundHint?: string;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export interface UseDualImageVideoFeatureProps {
|
|
73
|
-
featureType: VideoFeatureType;
|
|
74
|
-
config: DualImageVideoFeatureConfig;
|
|
75
|
-
onSelectSourceImage: () => Promise<string | null>;
|
|
76
|
-
onSelectTargetImage: () => Promise<string | null>;
|
|
77
|
-
onSaveVideo: (videoUrl: string) => Promise<void>;
|
|
78
|
-
/** Called before processing starts. Return false to cancel. */
|
|
79
|
-
onBeforeProcess?: () => Promise<boolean>;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface UseDualImageVideoFeatureReturn extends DualImageVideoFeatureState {
|
|
83
|
-
selectSourceImage: () => Promise<void>;
|
|
84
|
-
selectTargetImage: () => Promise<void>;
|
|
85
|
-
process: () => Promise<void>;
|
|
86
|
-
save: () => Promise<void>;
|
|
87
|
-
reset: () => void;
|
|
88
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dual Image Video Domain Types
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export type {
|
|
6
|
-
DualImageVideoFeatureState,
|
|
7
|
-
DualImageVideoResult,
|
|
8
|
-
DualImageVideoProcessingStartData,
|
|
9
|
-
DualImageVideoResultExtractor,
|
|
10
|
-
DualImageVideoFeatureConfig,
|
|
11
|
-
DualImageVideoTranslations,
|
|
12
|
-
UseDualImageVideoFeatureProps,
|
|
13
|
-
UseDualImageVideoFeatureReturn,
|
|
14
|
-
} from "./dual-image-video.types";
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dual Image Video Feature (Shared)
|
|
3
|
-
* Base infrastructure for video features using two source images
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export type {
|
|
7
|
-
DualImageVideoFeatureState,
|
|
8
|
-
DualImageVideoResult,
|
|
9
|
-
DualImageVideoProcessingStartData,
|
|
10
|
-
DualImageVideoResultExtractor,
|
|
11
|
-
DualImageVideoFeatureConfig,
|
|
12
|
-
DualImageVideoTranslations,
|
|
13
|
-
UseDualImageVideoFeatureProps,
|
|
14
|
-
UseDualImageVideoFeatureReturn,
|
|
15
|
-
} from "./domain/types";
|
|
16
|
-
|
|
17
|
-
export { useDualImageVideoFeature } from "./presentation/hooks";
|
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useDualImageVideoFeature Hook
|
|
3
|
-
* Base hook for video features that take two images (ai-hug, ai-kiss, etc.)
|
|
4
|
-
* DRY: Consolidates common logic from useAIHugFeature and useAIKissFeature
|
|
5
|
-
* Uses centralized orchestrator for credit/error handling
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { useState, useCallback, useRef, useMemo } from "react";
|
|
9
|
-
import { executeVideoFeature } from "../../../../../infrastructure/services";
|
|
10
|
-
import { generateCreationId } from "../../../../../domains/creations/domain/utils";
|
|
11
|
-
import {
|
|
12
|
-
useGenerationOrchestrator,
|
|
13
|
-
type GenerationStrategy,
|
|
14
|
-
type AlertMessages,
|
|
15
|
-
} from "../../../../../presentation/hooks/generation";
|
|
16
|
-
import type {
|
|
17
|
-
UseDualImageVideoFeatureProps,
|
|
18
|
-
UseDualImageVideoFeatureReturn,
|
|
19
|
-
} from "../../domain/types/dual-image-video.types";
|
|
20
|
-
|
|
21
|
-
export interface DualImageVideoFeatureOptions {
|
|
22
|
-
/** Alert messages for error handling */
|
|
23
|
-
alertMessages?: AlertMessages;
|
|
24
|
-
/** User ID for credit operations */
|
|
25
|
-
userId?: string;
|
|
26
|
-
/** Callback when credits are exhausted */
|
|
27
|
-
onCreditsExhausted?: () => void;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const DEFAULT_ALERT_MESSAGES: AlertMessages = {
|
|
31
|
-
networkError: "No internet connection. Please check your network.",
|
|
32
|
-
policyViolation: "Content not allowed. Please try different images.",
|
|
33
|
-
saveFailed: "Failed to save result. Please try again.",
|
|
34
|
-
creditFailed: "Credit operation failed. Please try again.",
|
|
35
|
-
unknown: "An error occurred. Please try again.",
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
interface DualImageVideoInput {
|
|
39
|
-
sourceImageBase64: string;
|
|
40
|
-
targetImageBase64: string;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function useDualImageVideoFeature(
|
|
44
|
-
props: UseDualImageVideoFeatureProps,
|
|
45
|
-
options?: DualImageVideoFeatureOptions,
|
|
46
|
-
): UseDualImageVideoFeatureReturn {
|
|
47
|
-
const { featureType, config, onSelectSourceImage, onSelectTargetImage, onSaveVideo, onBeforeProcess } = props;
|
|
48
|
-
|
|
49
|
-
// Image selection state (separate from orchestrator state)
|
|
50
|
-
const [sourceImageUri, setSourceImageUri] = useState<string | null>(null);
|
|
51
|
-
const [targetImageUri, setTargetImageUri] = useState<string | null>(null);
|
|
52
|
-
const [imageError, setImageError] = useState<string | null>(null);
|
|
53
|
-
const currentCreationIdRef = useRef<string | null>(null);
|
|
54
|
-
|
|
55
|
-
// Create strategy for orchestrator
|
|
56
|
-
const strategy: GenerationStrategy<DualImageVideoInput, string> = useMemo(
|
|
57
|
-
() => ({
|
|
58
|
-
execute: async (input, onProgress) => {
|
|
59
|
-
const result = await executeVideoFeature(
|
|
60
|
-
featureType,
|
|
61
|
-
{ sourceImageBase64: input.sourceImageBase64, targetImageBase64: input.targetImageBase64 },
|
|
62
|
-
{ extractResult: config.extractResult, onProgress },
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
if (!result.success || !result.videoUrl) {
|
|
66
|
-
throw new Error(result.error || "Processing failed");
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Notify completion with creationId
|
|
70
|
-
const creationId = currentCreationIdRef.current;
|
|
71
|
-
if (creationId) {
|
|
72
|
-
config.onProcessingComplete?.({ success: true, videoUrl: result.videoUrl, creationId });
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return result.videoUrl;
|
|
76
|
-
},
|
|
77
|
-
getCreditCost: () => config.creditCost || 1,
|
|
78
|
-
}),
|
|
79
|
-
[featureType, config],
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
// Use orchestrator for generation
|
|
83
|
-
const orchestrator = useGenerationOrchestrator(strategy, {
|
|
84
|
-
userId: options?.userId,
|
|
85
|
-
alertMessages: options?.alertMessages || DEFAULT_ALERT_MESSAGES,
|
|
86
|
-
onCreditsExhausted: options?.onCreditsExhausted,
|
|
87
|
-
onError: (error) => {
|
|
88
|
-
config.onError?.(error.message, currentCreationIdRef.current ?? undefined);
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
const selectSourceImage = useCallback(async () => {
|
|
93
|
-
try {
|
|
94
|
-
const uri = await onSelectSourceImage();
|
|
95
|
-
if (uri) {
|
|
96
|
-
setSourceImageUri(uri);
|
|
97
|
-
setImageError(null);
|
|
98
|
-
config.onSourceImageSelect?.(uri);
|
|
99
|
-
}
|
|
100
|
-
} catch (error) {
|
|
101
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
102
|
-
setImageError(message);
|
|
103
|
-
}
|
|
104
|
-
}, [onSelectSourceImage, config]);
|
|
105
|
-
|
|
106
|
-
const selectTargetImage = useCallback(async () => {
|
|
107
|
-
try {
|
|
108
|
-
const uri = await onSelectTargetImage();
|
|
109
|
-
if (uri) {
|
|
110
|
-
setTargetImageUri(uri);
|
|
111
|
-
setImageError(null);
|
|
112
|
-
config.onTargetImageSelect?.(uri);
|
|
113
|
-
}
|
|
114
|
-
} catch (error) {
|
|
115
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
-
setImageError(message);
|
|
117
|
-
}
|
|
118
|
-
}, [onSelectTargetImage, config]);
|
|
119
|
-
|
|
120
|
-
const process = useCallback(async () => {
|
|
121
|
-
if (!sourceImageUri || !targetImageUri) return;
|
|
122
|
-
|
|
123
|
-
if (onBeforeProcess) {
|
|
124
|
-
const canProceed = await onBeforeProcess();
|
|
125
|
-
if (!canProceed) return;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Generate creationId for this processing session
|
|
129
|
-
const creationId = generateCreationId();
|
|
130
|
-
currentCreationIdRef.current = creationId;
|
|
131
|
-
|
|
132
|
-
// Notify start with creationId for Firestore creation
|
|
133
|
-
config.onProcessingStart?.({
|
|
134
|
-
creationId,
|
|
135
|
-
featureType,
|
|
136
|
-
sourceImageUri,
|
|
137
|
-
targetImageUri,
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
const [sourceImageBase64, targetImageBase64] = await Promise.all([
|
|
142
|
-
config.prepareImage(sourceImageUri),
|
|
143
|
-
config.prepareImage(targetImageUri),
|
|
144
|
-
]);
|
|
145
|
-
|
|
146
|
-
await orchestrator.generate({ sourceImageBase64, targetImageBase64 });
|
|
147
|
-
} catch {
|
|
148
|
-
// Error already handled by orchestrator
|
|
149
|
-
}
|
|
150
|
-
}, [sourceImageUri, targetImageUri, featureType, config, onBeforeProcess, orchestrator]);
|
|
151
|
-
|
|
152
|
-
const save = useCallback(async () => {
|
|
153
|
-
if (!orchestrator.result) return;
|
|
154
|
-
|
|
155
|
-
try {
|
|
156
|
-
await onSaveVideo(orchestrator.result);
|
|
157
|
-
} catch (error) {
|
|
158
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
159
|
-
setImageError(message);
|
|
160
|
-
}
|
|
161
|
-
}, [orchestrator.result, onSaveVideo]);
|
|
162
|
-
|
|
163
|
-
const reset = useCallback(() => {
|
|
164
|
-
setSourceImageUri(null);
|
|
165
|
-
setTargetImageUri(null);
|
|
166
|
-
setImageError(null);
|
|
167
|
-
currentCreationIdRef.current = null;
|
|
168
|
-
orchestrator.reset();
|
|
169
|
-
}, [orchestrator]);
|
|
170
|
-
|
|
171
|
-
// Combine states for backward compatibility
|
|
172
|
-
return {
|
|
173
|
-
sourceImageUri,
|
|
174
|
-
targetImageUri,
|
|
175
|
-
processedVideoUrl: orchestrator.result,
|
|
176
|
-
isProcessing: orchestrator.isGenerating,
|
|
177
|
-
progress: orchestrator.progress,
|
|
178
|
-
error: orchestrator.error?.message || imageError,
|
|
179
|
-
selectSourceImage,
|
|
180
|
-
selectTargetImage,
|
|
181
|
-
process,
|
|
182
|
-
save,
|
|
183
|
-
reset,
|
|
184
|
-
};
|
|
185
|
-
}
|
|
@@ -1,394 +0,0 @@
|
|
|
1
|
-
# Text to Image Feature
|
|
2
|
-
|
|
3
|
-
Generate images from text prompts using AI models.
|
|
4
|
-
|
|
5
|
-
## 📍 Import Path
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
import { useTextToImageFeature } from '@umituz/react-native-ai-generation-content';
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
**Location**: `src/features/text-to-image/`
|
|
12
|
-
|
|
13
|
-
## 🎯 Feature Purpose
|
|
14
|
-
|
|
15
|
-
Convert natural language text descriptions into AI-generated images. Supports various aspect ratios, styles, and quality settings.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 📋 Usage Strategy
|
|
20
|
-
|
|
21
|
-
### When to Use This Feature
|
|
22
|
-
|
|
23
|
-
✅ **Use Cases:**
|
|
24
|
-
- Generating original images from text descriptions
|
|
25
|
-
- Creating visual content for marketing materials
|
|
26
|
-
- Generating concept art and prototypes
|
|
27
|
-
- Creating social media visuals
|
|
28
|
-
- Product visualization from descriptions
|
|
29
|
-
- Storyboarding and creative planning
|
|
30
|
-
|
|
31
|
-
❌ **When NOT to Use:**
|
|
32
|
-
- Image manipulation of existing photos (use Image-to-Image)
|
|
33
|
-
- Photo restoration (use Photo Restoration)
|
|
34
|
-
- Style transfer on existing images (use Style Transfer)
|
|
35
|
-
- Face swapping (use Face Swap)
|
|
36
|
-
|
|
37
|
-
### Implementation Strategy
|
|
38
|
-
|
|
39
|
-
1. **Use the feature hook** at component level
|
|
40
|
-
2. **Initialize with config** before first render
|
|
41
|
-
3. **Handle all states** - loading, success, error
|
|
42
|
-
4. **Implement progress tracking** for better UX
|
|
43
|
-
5. **Store generated images** for later use
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## ⚠️ Critical Rules (MUST FOLLOW)
|
|
48
|
-
|
|
49
|
-
### 1. Prompt Engineering
|
|
50
|
-
- **MUST** use descriptive, specific prompts
|
|
51
|
-
- **MUST** include subject, action, and context
|
|
52
|
-
- **MUST** specify art style if important
|
|
53
|
-
- **MUST** use English for best results
|
|
54
|
-
- **MUST NOT** exceed character limits (check model limits)
|
|
55
|
-
|
|
56
|
-
### 2. Configuration
|
|
57
|
-
- **MUST** provide valid `userId` for tracking
|
|
58
|
-
- **MUST** implement `onError` callback
|
|
59
|
-
- **MUST** handle `isProcessing` state to prevent duplicate requests
|
|
60
|
-
- **MUST** validate prompts before generation
|
|
61
|
-
- **MUST NOT** call `generate()` when `isReady` is false
|
|
62
|
-
|
|
63
|
-
### 3. State Management
|
|
64
|
-
- **MUST** check `isReady` before enabling generate button
|
|
65
|
-
- **MUST** handle `isProcessing` state with loading indicators
|
|
66
|
-
- **MUST** display `error` state to users
|
|
67
|
-
- **MUST** handle `result.imageUrl` existence check
|
|
68
|
-
- **MUST** implement proper cleanup on unmount
|
|
69
|
-
|
|
70
|
-
### 4. Performance
|
|
71
|
-
- **MUST** implement debouncing for prompt inputs (>500ms)
|
|
72
|
-
- **MUST** limit concurrent requests (max 1 per user)
|
|
73
|
-
- **MUST** cache generated images locally
|
|
74
|
-
- **MUST** implement retry logic (max 3 attempts)
|
|
75
|
-
- **MUST NOT** generate multiple images simultaneously
|
|
76
|
-
|
|
77
|
-
### 5. Security & Privacy
|
|
78
|
-
- **MUST** validate and sanitize user prompts
|
|
79
|
-
- **MUST** implement content moderation
|
|
80
|
-
- **MUST** check for inappropriate content
|
|
81
|
-
- **MUST** store userId securely
|
|
82
|
-
- **MUST NOT** expose API keys in client code
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## 🚫 Prohibitions (MUST AVOID)
|
|
87
|
-
|
|
88
|
-
### Strictly Forbidden
|
|
89
|
-
|
|
90
|
-
❌ **NEVER** do the following:
|
|
91
|
-
|
|
92
|
-
1. **No Empty Prompts**
|
|
93
|
-
- Always validate prompt has meaningful content
|
|
94
|
-
- Minimum 10 characters recommended
|
|
95
|
-
|
|
96
|
-
2. **No Concurrent Generation**
|
|
97
|
-
- Never call `generate()` while `isProcessing === true`
|
|
98
|
-
- Always disable generate button during 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 error states
|
|
106
|
-
- Always implement error boundaries
|
|
107
|
-
|
|
108
|
-
5. **No Memory Leaks**
|
|
109
|
-
- Never forget cleanup on unmount
|
|
110
|
-
- Always cancel pending requests
|
|
111
|
-
|
|
112
|
-
6. **No Excessive Re-renders**
|
|
113
|
-
- Never pass new config objects on each render
|
|
114
|
-
- Always memoize configuration objects
|
|
115
|
-
|
|
116
|
-
7. **No Blocked Main Thread**
|
|
117
|
-
- Never perform heavy operations in render
|
|
118
|
-
- Use web workers or background tasks for processing
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## 🤖 AI Agent Directions
|
|
123
|
-
|
|
124
|
-
### For AI Code Generation Tools
|
|
125
|
-
|
|
126
|
-
When using this feature with AI code generation tools, follow these guidelines:
|
|
127
|
-
|
|
128
|
-
#### Prompt Template for AI Agents
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
You are implementing a text-to-image generation feature using @umituz/react-native-ai-generation-content.
|
|
132
|
-
|
|
133
|
-
REQUIREMENTS:
|
|
134
|
-
1. Import from: @umituz/react-native-ai-generation-content
|
|
135
|
-
2. Use the useTextToImageFeature hook
|
|
136
|
-
3. Implement all state handlers (loading, success, error)
|
|
137
|
-
4. Add debouncing for prompt input
|
|
138
|
-
5. Validate prompts before generation
|
|
139
|
-
6. Handle isReady and isProcessing states correctly
|
|
140
|
-
7. Implement proper error handling with user feedback
|
|
141
|
-
8. Add loading indicators during generation
|
|
142
|
-
9. Display results safely with null checks
|
|
143
|
-
10. Implement cleanup on unmount
|
|
144
|
-
|
|
145
|
-
CRITICAL RULES:
|
|
146
|
-
- NEVER call generate() when isProcessing is true
|
|
147
|
-
- ALWAYS validate prompt before calling generate()
|
|
148
|
-
- MUST handle error state with user-friendly message
|
|
149
|
-
- MUST disable generate button during processing
|
|
150
|
-
- MUST implement debouncing (500ms minimum)
|
|
151
|
-
|
|
152
|
-
CONFIGURATION:
|
|
153
|
-
- Provide valid userId (string)
|
|
154
|
-
- Set model (default: 'imagen-3')
|
|
155
|
-
- Configure callbacks: onProcessingStart, onProcessingComplete, onError
|
|
156
|
-
|
|
157
|
-
GENERATION OPTIONS:
|
|
158
|
-
- aspectRatio: '1:1' | '16:9' | '9:16' | '4:3' | '3:4'
|
|
159
|
-
- numberOfImages: 1-4
|
|
160
|
-
- style: 'realistic' | 'artistic' | 'anime' | '3d' | 'painting'
|
|
161
|
-
- negativePrompt: string (optional)
|
|
162
|
-
|
|
163
|
-
STRICTLY FORBIDDEN:
|
|
164
|
-
- No empty prompts
|
|
165
|
-
- No concurrent generation calls
|
|
166
|
-
- No hardcoded API keys
|
|
167
|
-
- No unhandled errors
|
|
168
|
-
- No memory leaks
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
#### AI Implementation Checklist
|
|
172
|
-
|
|
173
|
-
Use this checklist when generating code:
|
|
174
|
-
|
|
175
|
-
- [ ] Feature imported from correct path
|
|
176
|
-
- [ ] Hook initialized with proper config
|
|
177
|
-
- [ ] All state handlers implemented
|
|
178
|
-
- [ ] Debouncing added to input
|
|
179
|
-
- [ ] Validation before generate()
|
|
180
|
-
- [ ] Loading indicator during processing
|
|
181
|
-
- [ ] Error display with user-friendly message
|
|
182
|
-
- [ ] Button disabled when processing
|
|
183
|
-
- [ ] Cleanup on unmount
|
|
184
|
-
- [ ] Null checks on result
|
|
185
|
-
- [ ] Retry logic implemented
|
|
186
|
-
- [ ] Image caching configured
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## 🛠️ Configuration Strategy
|
|
191
|
-
|
|
192
|
-
### Essential Configuration
|
|
193
|
-
|
|
194
|
-
```typescript
|
|
195
|
-
// Required fields
|
|
196
|
-
{
|
|
197
|
-
userId: string // User identifier for tracking
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// Optional callbacks
|
|
201
|
-
{
|
|
202
|
-
onProcessingStart?: () => void
|
|
203
|
-
onProcessingComplete?: (result) => void
|
|
204
|
-
onError?: (error: string) => void
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Recommended Settings
|
|
209
|
-
|
|
210
|
-
1. **Model Selection**
|
|
211
|
-
- Default: `imagen-3`
|
|
212
|
-
- Fastest: `imagen-2-fast`
|
|
213
|
-
- Highest quality: `imagen-3`
|
|
214
|
-
|
|
215
|
-
2. **Generation Options**
|
|
216
|
-
- Aspect Ratio: Match your UI layout
|
|
217
|
-
- Number of Images: 1-2 for speed, 3-4 for variety
|
|
218
|
-
- Style: Choose based on use case
|
|
219
|
-
|
|
220
|
-
3. **Performance Settings**
|
|
221
|
-
- Enable image caching
|
|
222
|
-
- Set reasonable timeouts (30s default)
|
|
223
|
-
- Implement retry with backoff
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## 📊 State Management
|
|
228
|
-
|
|
229
|
-
### Feature States
|
|
230
|
-
|
|
231
|
-
**isReady**: boolean
|
|
232
|
-
- Feature initialized and ready to use
|
|
233
|
-
- Check before enabling generate button
|
|
234
|
-
|
|
235
|
-
**isProcessing**: boolean
|
|
236
|
-
- Generation in progress
|
|
237
|
-
- Show loading indicator
|
|
238
|
-
- Disable generate button
|
|
239
|
-
|
|
240
|
-
**progress**: number (0-100)
|
|
241
|
-
- Generation progress percentage
|
|
242
|
-
- Update progress bar
|
|
243
|
-
|
|
244
|
-
**error**: string | null
|
|
245
|
-
- Error message if generation failed
|
|
246
|
-
- Display to user with clear message
|
|
247
|
-
|
|
248
|
-
**result**: {
|
|
249
|
-
imageUrl: string
|
|
250
|
-
imageUrls?: string[]
|
|
251
|
-
metadata?: any
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## 🔐 Security Considerations
|
|
257
|
-
|
|
258
|
-
### Content Moderation
|
|
259
|
-
|
|
260
|
-
- **MUST** implement prompt content filtering
|
|
261
|
-
- **MUST** check for inappropriate content
|
|
262
|
-
- **MUST** block harmful or illegal prompts
|
|
263
|
-
- **MUST** log moderation actions
|
|
264
|
-
|
|
265
|
-
### API Security
|
|
266
|
-
|
|
267
|
-
- **MUST** use environment variables for API keys
|
|
268
|
-
- **MUST** implement rate limiting
|
|
269
|
-
- **MUST** validate all user inputs
|
|
270
|
-
- **MUST** use HTTPS for all API calls
|
|
271
|
-
|
|
272
|
-
### Data Privacy
|
|
273
|
-
|
|
274
|
-
- **MUST** comply with data protection regulations
|
|
275
|
-
- **MUST** obtain user consent for generation
|
|
276
|
-
- **MUST** provide privacy policy
|
|
277
|
-
- **MUST** allow data deletion requests
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## 🎨 Best Practices
|
|
282
|
-
|
|
283
|
-
### Prompt Engineering
|
|
284
|
-
|
|
285
|
-
1. **Be Specific**
|
|
286
|
-
- Good: "A majestic lion standing on a rock at sunset, detailed fur, dramatic lighting"
|
|
287
|
-
- Bad: "A lion"
|
|
288
|
-
|
|
289
|
-
2. **Include Style**
|
|
290
|
-
- Specify art style, mood, atmosphere
|
|
291
|
-
- Example: "in the style of oil painting, romantic mood"
|
|
292
|
-
|
|
293
|
-
3. **Add Technical Details**
|
|
294
|
-
- Lighting, camera angle, composition
|
|
295
|
-
- Example: "golden hour lighting, wide angle shot"
|
|
296
|
-
|
|
297
|
-
4. **Use Negative Prompts**
|
|
298
|
-
- Specify what to avoid
|
|
299
|
-
- Example: "blurry, low quality, distorted"
|
|
300
|
-
|
|
301
|
-
### Performance Optimization
|
|
302
|
-
|
|
303
|
-
1. **Debounce Input**
|
|
304
|
-
- Wait 500ms after user stops typing
|
|
305
|
-
- Prevents unnecessary validations
|
|
306
|
-
|
|
307
|
-
2. **Lazy Loading**
|
|
308
|
-
- Load images on demand
|
|
309
|
-
- Use pagination for multiple results
|
|
310
|
-
|
|
311
|
-
3. **Cache Results**
|
|
312
|
-
- Store generated images locally
|
|
313
|
-
- Implement cache invalidation strategy
|
|
314
|
-
|
|
315
|
-
4. **Progressive Enhancement**
|
|
316
|
-
- Show placeholder while loading
|
|
317
|
-
- Display low-res first, then high-res
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
|
-
## 🐛 Common Pitfalls
|
|
322
|
-
|
|
323
|
-
### Memory Issues
|
|
324
|
-
|
|
325
|
-
❌ **Problem**: Storing all generated images in state
|
|
326
|
-
✅ **Solution**: Implement pagination or virtualized lists
|
|
327
|
-
|
|
328
|
-
### Performance Issues
|
|
329
|
-
|
|
330
|
-
❌ **Problem**: Re-generating on every prompt change
|
|
331
|
-
✅ **Solution**: Require explicit user action to generate
|
|
332
|
-
|
|
333
|
-
### UX Issues
|
|
334
|
-
|
|
335
|
-
❌ **Problem**: No feedback during generation
|
|
336
|
-
✅ **Solution**: Always show progress indicator
|
|
337
|
-
|
|
338
|
-
### Error Handling
|
|
339
|
-
|
|
340
|
-
❌ **Problem**: Generic error messages
|
|
341
|
-
✅ **Solution**: Provide specific, actionable error messages
|
|
342
|
-
|
|
343
|
-
---
|
|
344
|
-
|
|
345
|
-
## 📦 Related Components
|
|
346
|
-
|
|
347
|
-
Use these components from the library:
|
|
348
|
-
|
|
349
|
-
- **GenerationProgressModal**: Progress display
|
|
350
|
-
- **StyleSelector**: Style selection UI
|
|
351
|
-
- **AspectRatioSelector**: Aspect ratio picker
|
|
352
|
-
- **ImageGallery**: Display multiple results
|
|
353
|
-
- **PromptInput**: Enhanced text input
|
|
354
|
-
|
|
355
|
-
Located at: `src/presentation/components/`
|
|
356
|
-
|
|
357
|
-
---
|
|
358
|
-
|
|
359
|
-
## 🔄 Migration Strategy
|
|
360
|
-
|
|
361
|
-
If migrating from previous implementation:
|
|
362
|
-
|
|
363
|
-
1. **Update imports** to new path
|
|
364
|
-
2. **Replace old config** with new structure
|
|
365
|
-
3. **Update state handling** to match new interface
|
|
366
|
-
4. **Test all error cases**
|
|
367
|
-
5. **Update UI components** for new state structure
|
|
368
|
-
|
|
369
|
-
---
|
|
370
|
-
|
|
371
|
-
## 📚 Additional Resources
|
|
372
|
-
|
|
373
|
-
- Main documentation: `/docs/`
|
|
374
|
-
- API reference: `/docs/api/`
|
|
375
|
-
- Examples: `/docs/examples/basic/text-to-image/`
|
|
376
|
-
- Architecture: `/ARCHITECTURE.md`
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
**Last Updated**: 2025-01-08
|
|
381
|
-
**Version**: 2.0.0 (Strategy-based Documentation)
|
|
382
|
-
|
|
383
|
-
---
|
|
384
|
-
|
|
385
|
-
## 📝 Changelog
|
|
386
|
-
|
|
387
|
-
### v2.0.0 - 2025-01-08
|
|
388
|
-
- **BREAKING**: Documentation format changed to strategy-based
|
|
389
|
-
- Removed extensive code examples
|
|
390
|
-
- Added rules, prohibitions, and AI agent directions
|
|
391
|
-
- Focus on best practices and implementation guidance
|
|
392
|
-
|
|
393
|
-
### v1.0.0 - Initial Release
|
|
394
|
-
- Initial feature documentation
|