@umituz/react-native-ai-generation-content 1.37.38 → 1.40.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/package.json +1 -1
  2. package/src/domains/access-control/hooks/useAIFeatureGate.ts +113 -0
  3. package/src/domains/access-control/index.ts +12 -0
  4. package/src/domains/access-control/types/access-control.types.ts +71 -0
  5. package/src/domains/scenarios/index.ts +0 -3
  6. package/src/index.ts +1 -0
  7. package/src/domains/scenarios/infrastructure/ScenariosData.ts +0 -26
  8. package/src/domains/scenarios/infrastructure/data/action-stealth-scenarios.ts +0 -68
  9. package/src/domains/scenarios/infrastructure/data/adventure-scenarios.ts +0 -68
  10. package/src/domains/scenarios/infrastructure/data/affection-scenarios.ts +0 -100
  11. package/src/domains/scenarios/infrastructure/data/animals-scenarios.ts +0 -26
  12. package/src/domains/scenarios/infrastructure/data/arabian-nights-scenarios.ts +0 -52
  13. package/src/domains/scenarios/infrastructure/data/art-studio-scenarios.ts +0 -69
  14. package/src/domains/scenarios/infrastructure/data/artistic-scenarios.ts +0 -94
  15. package/src/domains/scenarios/infrastructure/data/bucket-list-scenarios.ts +0 -67
  16. package/src/domains/scenarios/infrastructure/data/career-scenarios.ts +0 -62
  17. package/src/domains/scenarios/infrastructure/data/casino-scenarios.ts +0 -53
  18. package/src/domains/scenarios/infrastructure/data/celebration-scenarios.ts +0 -84
  19. package/src/domains/scenarios/infrastructure/data/cinematic-scenarios.ts +0 -59
  20. package/src/domains/scenarios/infrastructure/data/connection-scenarios.ts +0 -117
  21. package/src/domains/scenarios/infrastructure/data/cozy-plush-scenarios.ts +0 -52
  22. package/src/domains/scenarios/infrastructure/data/creative-scenarios.ts +0 -26
  23. package/src/domains/scenarios/infrastructure/data/culinary-scenarios.ts +0 -26
  24. package/src/domains/scenarios/infrastructure/data/cultural-scenarios.ts +0 -84
  25. package/src/domains/scenarios/infrastructure/data/daily-essence-scenarios.ts +0 -116
  26. package/src/domains/scenarios/infrastructure/data/dark-academia-scenarios.ts +0 -53
  27. package/src/domains/scenarios/infrastructure/data/ecology-scenarios.ts +0 -67
  28. package/src/domains/scenarios/infrastructure/data/education-scenarios.ts +0 -26
  29. package/src/domains/scenarios/infrastructure/data/elemental-scenarios.ts +0 -53
  30. package/src/domains/scenarios/infrastructure/data/elite-scenarios.ts +0 -68
  31. package/src/domains/scenarios/infrastructure/data/extreme-scenarios.ts +0 -26
  32. package/src/domains/scenarios/infrastructure/data/family-scenarios.ts +0 -76
  33. package/src/domains/scenarios/infrastructure/data/fantasy-scenarios.ts +0 -99
  34. package/src/domains/scenarios/infrastructure/data/fashion-scenarios.ts +0 -74
  35. package/src/domains/scenarios/infrastructure/data/festival-scenarios.ts +0 -60
  36. package/src/domains/scenarios/infrastructure/data/folklore-scenarios.ts +0 -85
  37. package/src/domains/scenarios/infrastructure/data/future-tech-scenarios.ts +0 -68
  38. package/src/domains/scenarios/infrastructure/data/gaming-scenarios.ts +0 -26
  39. package/src/domains/scenarios/infrastructure/data/gothic-scenarios.ts +0 -68
  40. package/src/domains/scenarios/infrastructure/data/historical-scenarios.ts +0 -74
  41. package/src/domains/scenarios/infrastructure/data/hobbies-scenarios.ts +0 -76
  42. package/src/domains/scenarios/infrastructure/data/home-life-scenarios.ts +0 -100
  43. package/src/domains/scenarios/infrastructure/data/iconic-moments-scenarios.ts +0 -131
  44. package/src/domains/scenarios/infrastructure/data/intimate-scenarios.ts +0 -138
  45. package/src/domains/scenarios/infrastructure/data/lifestyle-scenarios.ts +0 -162
  46. package/src/domains/scenarios/infrastructure/data/luxury-scenarios.ts +0 -26
  47. package/src/domains/scenarios/infrastructure/data/magical-realism-scenarios.ts +0 -53
  48. package/src/domains/scenarios/infrastructure/data/movie-legends/action-fantasy.ts +0 -58
  49. package/src/domains/scenarios/infrastructure/data/movie-legends/index.ts +0 -16
  50. package/src/domains/scenarios/infrastructure/data/movie-legends/musical-dance.ts +0 -58
  51. package/src/domains/scenarios/infrastructure/data/movie-legends/period-drama.ts +0 -58
  52. package/src/domains/scenarios/infrastructure/data/movie-legends/romantic.ts +0 -90
  53. package/src/domains/scenarios/infrastructure/data/music-scenarios.ts +0 -84
  54. package/src/domains/scenarios/infrastructure/data/mystical-scenarios.ts +0 -69
  55. package/src/domains/scenarios/infrastructure/data/mythology-scenarios.ts +0 -68
  56. package/src/domains/scenarios/infrastructure/data/nostalgia-scenarios.ts +0 -66
  57. package/src/domains/scenarios/infrastructure/data/performance-scenarios.ts +0 -26
  58. package/src/domains/scenarios/infrastructure/data/pirate-era-scenarios.ts +0 -53
  59. package/src/domains/scenarios/infrastructure/data/post-apocalyptic-scenarios.ts +0 -53
  60. package/src/domains/scenarios/infrastructure/data/prehistoric-world-scenarios.ts +0 -53
  61. package/src/domains/scenarios/infrastructure/data/retro-arcade-scenarios.ts +0 -52
  62. package/src/domains/scenarios/infrastructure/data/romantic-kisses-scenarios.ts +0 -117
  63. package/src/domains/scenarios/infrastructure/data/samurai-scenarios.ts +0 -52
  64. package/src/domains/scenarios/infrastructure/data/scenario-groups/activities.ts +0 -52
  65. package/src/domains/scenarios/infrastructure/data/scenario-groups/adventure-fantasy.ts +0 -46
  66. package/src/domains/scenarios/infrastructure/data/scenario-groups/arts-entertainment.ts +0 -34
  67. package/src/domains/scenarios/infrastructure/data/scenario-groups/index.ts +0 -10
  68. package/src/domains/scenarios/infrastructure/data/scenario-groups/lifestyle.ts +0 -42
  69. package/src/domains/scenarios/infrastructure/data/scenario-groups/relationships.ts +0 -30
  70. package/src/domains/scenarios/infrastructure/data/sci-fi-scenarios.ts +0 -74
  71. package/src/domains/scenarios/infrastructure/data/seasonal-scenarios.ts +0 -26
  72. package/src/domains/scenarios/infrastructure/data/social-media-scenarios.ts +0 -85
  73. package/src/domains/scenarios/infrastructure/data/solo/action.ts +0 -75
  74. package/src/domains/scenarios/infrastructure/data/solo/adventure.ts +0 -76
  75. package/src/domains/scenarios/infrastructure/data/solo/artistic.ts +0 -75
  76. package/src/domains/scenarios/infrastructure/data/solo/cinematic.ts +0 -75
  77. package/src/domains/scenarios/infrastructure/data/solo/fantasy.ts +0 -76
  78. package/src/domains/scenarios/infrastructure/data/solo/index.ts +0 -32
  79. package/src/domains/scenarios/infrastructure/data/solo/mythology.ts +0 -76
  80. package/src/domains/scenarios/infrastructure/data/solo/sports.ts +0 -75
  81. package/src/domains/scenarios/infrastructure/data/speed-demons-scenarios.ts +0 -52
  82. package/src/domains/scenarios/infrastructure/data/sports-scenarios.ts +0 -26
  83. package/src/domains/scenarios/infrastructure/data/steampunk-scenarios.ts +0 -69
  84. package/src/domains/scenarios/infrastructure/data/stolen-moments-scenarios.ts +0 -85
  85. package/src/domains/scenarios/infrastructure/data/sultry-scenarios.ts +0 -99
  86. package/src/domains/scenarios/infrastructure/data/superhero-scenarios.ts +0 -68
  87. package/src/domains/scenarios/infrastructure/data/surreal-dreams-scenarios.ts +0 -53
  88. package/src/domains/scenarios/infrastructure/data/time-based-scenarios.ts +0 -42
  89. package/src/domains/scenarios/infrastructure/data/travel-scenarios.ts +0 -148
  90. package/src/domains/scenarios/infrastructure/data/underwater-scenarios.ts +0 -51
  91. package/src/domains/scenarios/infrastructure/data/urban-nights-scenarios.ts +0 -68
  92. package/src/domains/scenarios/infrastructure/data/villainous-scenarios.ts +0 -68
  93. package/src/domains/scenarios/infrastructure/data/vintage-circus-scenarios.ts +0 -52
  94. package/src/domains/scenarios/infrastructure/data/vintage-summer-scenarios.ts +0 -69
  95. package/src/domains/scenarios/infrastructure/data/wedding/celebrations.ts +0 -74
  96. package/src/domains/scenarios/infrastructure/data/wedding/ceremonies.ts +0 -74
  97. package/src/domains/scenarios/infrastructure/data/wedding/index.ts +0 -14
  98. package/src/domains/scenarios/infrastructure/data/wedding/preparation.ts +0 -106
  99. package/src/domains/scenarios/infrastructure/data/wellness-scenarios.ts +0 -67
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-ai-generation-content",
3
- "version": "1.37.38",
3
+ "version": "1.40.3",
4
4
  "description": "Provider-agnostic AI generation orchestration for React Native with result preview components",
5
5
  "main": "src/index.ts",
6
6
  "types": "src/index.ts",
@@ -0,0 +1,113 @@
1
+ /**
2
+ * useAIFeatureGate Hook
3
+ * Centralized access control for AI features
4
+ *
5
+ * Single hook that handles:
6
+ * 1. Authentication check
7
+ * 2. Premium subscription check
8
+ * 3. Credit balance check
9
+ * 4. Paywall display
10
+ *
11
+ * Usage:
12
+ * ```typescript
13
+ * const { requireFeature } = useAIFeatureGate({ creditCost: 1 });
14
+ *
15
+ * <AtomicButton onPress={() => requireFeature(handleGenerate)}>
16
+ * Generate
17
+ * </AtomicButton>
18
+ * ```
19
+ */
20
+
21
+ import { useCallback, useMemo } from "react";
22
+ import { useAuth, useAuthModalStore } from "@umituz/react-native-auth";
23
+ import {
24
+ usePremium,
25
+ useCredits,
26
+ usePaywallVisibility,
27
+ useFeatureGate,
28
+ } from "@umituz/react-native-subscription";
29
+ import type {
30
+ AIFeatureGateOptions,
31
+ AIFeatureGateReturn,
32
+ } from "../types/access-control.types";
33
+
34
+ /**
35
+ * Hook for AI feature access control with 3-tier gating:
36
+ * Auth → Premium/Credits → Paywall → Execute
37
+ *
38
+ * @param options - Configuration for feature gate
39
+ * @returns Access control interface with requireFeature function
40
+ */
41
+ export function useAIFeatureGate(
42
+ options: AIFeatureGateOptions,
43
+ ): AIFeatureGateReturn {
44
+ const { creditCost, featureName, onSuccess, onError } = options;
45
+
46
+ // Auth state
47
+ const { isAuthenticated: rawIsAuthenticated, isAnonymous } = useAuth();
48
+ const { showAuthModal } = useAuthModalStore();
49
+
50
+ // Subscription state
51
+ const { isPremium } = usePremium();
52
+ const { credits, isLoading: isCreditsLoading } = useCredits();
53
+ const { openPaywall } = usePaywallVisibility();
54
+
55
+ // Derived states
56
+ const isCreditsLoaded = !isCreditsLoading;
57
+ const isAuthenticated = rawIsAuthenticated && !isAnonymous;
58
+ const creditBalance = credits?.credits ?? 0;
59
+ const hasCredits = creditBalance >= creditCost;
60
+
61
+ // Configure feature gate from subscription package
62
+ const { requireFeature: requireFeatureFromPackage } = useFeatureGate({
63
+ isAuthenticated,
64
+ onShowAuthModal: (cb) => showAuthModal(cb),
65
+ hasSubscription: isPremium,
66
+ creditBalance,
67
+ requiredCredits: creditCost,
68
+ onShowPaywall: () => openPaywall(),
69
+ isCreditsLoaded,
70
+ });
71
+
72
+ // Can access if: authenticated AND (premium OR has credits)
73
+ const canAccess = useMemo(() => {
74
+ if (!isAuthenticated) return false;
75
+ if (isPremium) return true;
76
+ return hasCredits;
77
+ }, [isAuthenticated, isPremium, hasCredits]);
78
+
79
+ // Wrapped requireFeature with error handling
80
+ const requireFeature = useCallback(
81
+ async (action: () => void | Promise<void>): Promise<void> => {
82
+ try {
83
+ requireFeatureFromPackage(async () => {
84
+ try {
85
+ await action();
86
+ onSuccess?.();
87
+ } catch (error) {
88
+ const errorObj =
89
+ error instanceof Error ? error : new Error(String(error));
90
+ onError?.(errorObj);
91
+ throw error;
92
+ }
93
+ });
94
+ } catch (error) {
95
+ const errorObj =
96
+ error instanceof Error ? error : new Error(String(error));
97
+ onError?.(errorObj);
98
+ throw error;
99
+ }
100
+ },
101
+ [requireFeatureFromPackage, onSuccess, onError],
102
+ );
103
+
104
+ return {
105
+ requireFeature,
106
+ canAccess,
107
+ isCheckingAccess: isCreditsLoading,
108
+ hasCredits,
109
+ isAuthenticated,
110
+ isPremium,
111
+ creditBalance,
112
+ };
113
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Access Control Domain
3
+ * Centralized AI feature access control
4
+ */
5
+
6
+ export { useAIFeatureGate } from "./hooks/useAIFeatureGate";
7
+
8
+ export type {
9
+ AIFeatureGateOptions,
10
+ AIFeatureGateReturn,
11
+ AIFeatureGateHook,
12
+ } from "./types/access-control.types";
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Access Control Types
3
+ * Type definitions for AI feature access control
4
+ */
5
+
6
+ export interface AIFeatureGateOptions {
7
+ /**
8
+ * Number of credits required for this feature
9
+ */
10
+ creditCost: number;
11
+
12
+ /**
13
+ * Optional feature name for analytics tracking
14
+ */
15
+ featureName?: string;
16
+
17
+ /**
18
+ * Callback fired when feature is successfully accessed and executed
19
+ */
20
+ onSuccess?: () => void;
21
+
22
+ /**
23
+ * Callback fired when feature access fails or execution errors
24
+ */
25
+ onError?: (error: Error) => void;
26
+ }
27
+
28
+ export interface AIFeatureGateReturn {
29
+ /**
30
+ * Function to execute protected feature
31
+ * Handles all access control checks (auth, premium, credits, paywall)
32
+ */
33
+ requireFeature: (action: () => void | Promise<void>) => Promise<void>;
34
+
35
+ /**
36
+ * Whether user can access this feature (all checks passed)
37
+ */
38
+ canAccess: boolean;
39
+
40
+ /**
41
+ * Whether access checks are currently loading
42
+ */
43
+ isCheckingAccess: boolean;
44
+
45
+ /**
46
+ * Whether user has sufficient credits
47
+ */
48
+ hasCredits: boolean;
49
+
50
+ /**
51
+ * Whether user is authenticated (not anonymous)
52
+ */
53
+ isAuthenticated: boolean;
54
+
55
+ /**
56
+ * Whether user has premium subscription
57
+ */
58
+ isPremium: boolean;
59
+
60
+ /**
61
+ * Current credit balance
62
+ */
63
+ creditBalance: number;
64
+ }
65
+
66
+ /**
67
+ * Hook type definition for useAIFeatureGate
68
+ */
69
+ export type AIFeatureGateHook = (
70
+ options: AIFeatureGateOptions,
71
+ ) => AIFeatureGateReturn;
@@ -8,9 +8,6 @@ export type { ScenarioOutputType, ScenarioInputType, GeneratingMessages } from "
8
8
  export { ScenarioCategory, ScenarioId } from "./domain/Scenario";
9
9
  export type { Scenario } from "./domain/Scenario";
10
10
 
11
- // Scenario Data
12
- export { SCENARIOS } from "./infrastructure/ScenariosData";
13
-
14
11
  // Category Groups - Pre-defined category groups for filtering
15
12
  export {
16
13
  TRUE_SOLO_CATEGORIES,
package/src/index.ts CHANGED
@@ -135,6 +135,7 @@ export * from "./domains/content-moderation";
135
135
  export * from "./domains/creations";
136
136
  export * from "./domains/face-detection";
137
137
  export * from "./domains/scenarios";
138
+ export * from "./domains/access-control";
138
139
  export * from "./infrastructure/orchestration";
139
140
 
140
141
  export {
@@ -1,26 +0,0 @@
1
- /**
2
- * Scenario Data Registry
3
- * Central registry for all scenarios
4
- * Generic for all AI generation apps (image/video)
5
- */
6
-
7
- import { Scenario } from "../domain/Scenario";
8
- import {
9
- RELATIONSHIP_SCENARIOS,
10
- ARTS_ENTERTAINMENT_SCENARIOS,
11
- ADVENTURE_FANTASY_SCENARIOS,
12
- CUSTOM_FANTASY_SCENARIO,
13
- LIFESTYLE_GROUP_SCENARIOS,
14
- ACTIVITIES_SCENARIOS,
15
- } from "./data/scenario-groups";
16
- import { SOLO_SCENARIOS } from "./data/solo";
17
-
18
- export const SCENARIOS: Scenario[] = [
19
- CUSTOM_FANTASY_SCENARIO,
20
- ...RELATIONSHIP_SCENARIOS,
21
- ...ARTS_ENTERTAINMENT_SCENARIOS,
22
- ...ADVENTURE_FANTASY_SCENARIOS,
23
- ...LIFESTYLE_GROUP_SCENARIOS,
24
- ...ACTIVITIES_SCENARIOS,
25
- ...SOLO_SCENARIOS,
26
- ];
@@ -1,68 +0,0 @@
1
- import { Scenario, ScenarioId } from "../../domain/Scenario";
2
- import { createPhotorealisticPrompt, createStoryTemplate } from "../utils/scenario-utils";
3
-
4
- export const ACTION_STEALTH_SCENARIOS: Omit<Scenario, 'outputType' | 'category'>[] = [
5
- {
6
- id: ScenarioId.ELITE_HEIST,
7
- title: "Elite Heist Team",
8
- description: "The ultimate score",
9
- icon: "💎",
10
- imageUrl: "https://images.unsplash.com/photo-1541560052-77ec1bbc09f7?w=800",
11
- aiPrompt: createPhotorealisticPrompt(
12
- "a couple as professional heist operatives, both facing camera with confident knowing smirks, man in matte black tactical vest with carbon fiber gear and wireless earpiece, woman in sleek black catsuit with utility belt and night vision goggles pushed up, holding silver briefcase and lockpick tools, green laser security grid and massive steel vault door with digital keypad in background",
13
- "dramatic blue-green accent lighting with sharp shadows from security beams"
14
- ),
15
- storyTemplate: createStoryTemplate(
16
- "pull off the greatest heist in history",
17
- "They share a bond of trust that no vault can contain. The ultimate partners in crime and in life.",
18
- ),
19
- },
20
- {
21
- id: ScenarioId.TOP_GUN,
22
- title: "Sky Aces",
23
- description: "Need for speed",
24
- icon: "✈️",
25
- imageUrl:
26
- "https://images.unsplash.com/photo-1516450360452-9312f5e86fc7?w=800",
27
- aiPrompt: createPhotorealisticPrompt(
28
- "a couple as elite fighter pilots, both facing camera with heroic confident smiles, man in olive green flight suit with squadron patches and American flag on shoulder holding white helmet with gold visor, woman in matching flight suit with aviator sunglasses pushed up on head, standing on aircraft carrier deck with F-18 Super Hornet jet and ocean horizon in background",
29
- "golden sunrise light with warm orange and pink sky tones"
30
- ),
31
- storyTemplate: createStoryTemplate(
32
- "rule the boundless skies",
33
- "Flying at Mach speeds, they find that the only thing faster than their jets is the way they fell for each other.",
34
- ),
35
- },
36
- {
37
- id: ScenarioId.SURVIVALISTS,
38
- title: "Last Survivors",
39
- description: "Stronger together",
40
- icon: "⛺",
41
- imageUrl:
42
- "https://v3b.fal.media/files/b/0a8a3e0e/s6SBpgKeHS3AL0ykrc4ac.jpg",
43
- aiPrompt: createPhotorealisticPrompt(
44
- "a couple as post-apocalyptic survivors, both facing camera with resilient determined expressions, man in worn brown leather jacket with makeshift armor patches and crossbow on back, woman in weathered olive cargo pants and dusty denim jacket with machete at hip, abandoned overgrown city street with vines covering rusted cars and crumbling buildings in background",
45
- "overcast diffused daylight with muted desaturated tones and atmospheric haze"
46
- ),
47
- storyTemplate: createStoryTemplate(
48
- "rebuild a world from the ruins",
49
- "When everything else fell apart, they were the only pieces that still fit perfectly together.",
50
- ),
51
- },
52
- {
53
- id: ScenarioId.SECRET_AGENTS_DUO,
54
- title: "Double Agents",
55
- description: "License to love",
56
- icon: "🔫",
57
- imageUrl:
58
- "https://images.unsplash.com/photo-1540324155974-7523202daa3f?w=800",
59
- aiPrompt: createPhotorealisticPrompt(
60
- "a couple as sophisticated secret agents, both facing camera with alluring mysterious expressions, man in perfectly tailored black wool tuxedo with silk lapels and subtle earpiece, woman in elegant floor-length black sequined evening gown with thigh-high slit and diamond bracelet, holding martini glasses, luxurious Monte Carlo casino with crystal chandeliers and velvet roulette tables in background",
61
- "warm golden ambient lighting with dramatic shadows and bokeh from chandelier lights"
62
- ),
63
- storyTemplate: createStoryTemplate(
64
- "save the world in style",
65
- "In a world of secrets and deception, their love is the only mission that truly matters.",
66
- ),
67
- },
68
- ];
@@ -1,68 +0,0 @@
1
- import { Scenario, ScenarioId } from "../../domain/Scenario";
2
- import { createPhotorealisticPrompt, createStoryTemplate } from "../utils/scenario-utils";
3
-
4
- export const ADVENTURE_SCENARIOS: Omit<Scenario, 'outputType' | 'category'>[] = [
5
- {
6
- id: ScenarioId.TREASURE_HUNTERS,
7
- title: "Treasure Hunters",
8
- description: "Search for the legendary",
9
- icon: "🏺",
10
- imageUrl: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800",
11
- aiPrompt: createPhotorealisticPrompt(
12
- "a couple as treasure hunters in ancient Egyptian tomb, both facing camera with excited adventurous grins, man in khaki safari shirt with leather belt and worn explorer hat holding weathered parchment map, woman in tan cargo vest with compass around neck holding bright LED flashlight, dusty hieroglyphic-covered walls and golden sarcophagus with turquoise inlays in background",
13
- "warm amber torchlight mixed with cool flashlight beam creating dramatic shadows on ancient stone walls"
14
- ),
15
- storyTemplate: createStoryTemplate(
16
- "discover secrets hidden for millennia",
17
- "They spent years hunting for lost gold, only to find that the real treasure was the adventurer standing right beside them.",
18
- ),
19
- },
20
- {
21
- id: ScenarioId.JUNGLE_EXPLORATION,
22
- title: "Jungle Discovery",
23
- description: "Into the green wild",
24
- icon: "🌿",
25
- imageUrl:
26
- "https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=800",
27
- aiPrompt: createPhotorealisticPrompt(
28
- "a couple exploring dense rainforest jungle, both facing camera with determined adventurous smiles, man in olive green moisture-wicking shirt with machete and canvas backpack, woman in khaki hiking pants and breathable tank top with binoculars, cutting through thick emerald vines with ancient moss-covered Mayan temple ruins visible through parting foliage in background",
29
- "dappled golden sunlight filtering through dense jungle canopy creating god rays through morning mist"
30
- ),
31
- storyTemplate: createStoryTemplate(
32
- "navigate the wild heart of the world",
33
- "No path is too difficult, no mountain too high, as long as they're cutting through the brush hand in hand.",
34
- ),
35
- },
36
- {
37
- id: ScenarioId.ARCTIC_EXPEDITION,
38
- title: "Arctic Expedition",
39
- description: "Crossing the frozen void",
40
- icon: "❄️",
41
- imageUrl:
42
- "https://images.unsplash.com/photo-1502082553048-f009c37129b9?w=800",
43
- aiPrompt: createPhotorealisticPrompt(
44
- "a couple on Arctic expedition, both facing camera with confident joyful smiles, man in bright orange insulated expedition parka with fur-lined hood and snow goggles on forehead, woman in red down jacket with thermal gloves holding trekking poles, standing on vast white ice shelf with bright blue glacial ice formations and vibrant green aurora borealis dancing across dark polar sky in background",
45
- "crisp high-contrast lighting with cool blue tones from ice reflections and green aurora glow"
46
- ),
47
- storyTemplate: createStoryTemplate(
48
- "conquer the coldest reaches of the earth",
49
- "In a world of ice and snow, their love provides all the warmth they'll ever need. Pioneers of the great white void.",
50
- ),
51
- },
52
- {
53
- id: ScenarioId.SEA_MONSTERS,
54
- title: "Monster Hunters",
55
- description: "Defenders of the deep",
56
- icon: "🐉",
57
- imageUrl:
58
- "https://images.unsplash.com/photo-1544551763-46a013bb70d5?w=800",
59
- aiPrompt: createPhotorealisticPrompt(
60
- "a couple as legendary sea monster hunters on wooden sailing ship deck during fierce storm, man gripping iron harpoon with rope coiled at feet wearing weathered brown leather coat, woman facing camera with fierce determined smile looking through antique brass telescope wearing navy blue captain coat with gold buttons, massive dark tentacled shape visible beneath churning gray-green waves with lightning illuminating stormy clouds in background",
61
- "dramatic storm lighting with flashes of lightning and blue-gray atmospheric tones"
62
- ),
63
- storyTemplate: createStoryTemplate(
64
- "face the legends and myths of the deep",
65
- "The sea may be vast and full of monsters, but they've never been ones to stay in safe waters. Together, they are legends of the high seas.",
66
- ),
67
- },
68
- ];
@@ -1,100 +0,0 @@
1
- import { Scenario, ScenarioId } from "../../domain/Scenario";
2
- import { createPhotorealisticPrompt, createStoryTemplate } from "../utils/scenario-utils";
3
-
4
- export const AFFECTION_SCENARIOS: Omit<Scenario, 'outputType' | 'category'>[] = [
5
- {
6
- id: ScenarioId.BACK_HUG_SURPRISE,
7
- title: "Back-Hug Surprise",
8
- description: "Unexpected warmth",
9
- icon: "🤗",
10
- imageUrl:
11
- "https://images.unsplash.com/photo-1518199266791-5375a83190b7?w=800",
12
- aiPrompt: createPhotorealisticPrompt(
13
- "a loving couple in a bright modern Scandinavian living room, man surprising woman with a warm embrace from behind with his arms wrapped around her waist, both facing camera with genuine joyful smiles, woman in casual cream sweater, man in gray henley, minimalist furniture and large windows with sheer curtains",
14
- "soft natural morning light streaming through windows, bright airy atmosphere, warm domestic feeling"
15
- ),
16
- storyTemplate: createStoryTemplate(
17
- "feel the warmth of an unexpected embrace",
18
- "Sometimes the best words are spoken through a silent hug from behind. A moment where the world disappears, leaving only the beat of two hearts in sync.",
19
- ),
20
- },
21
- {
22
- id: ScenarioId.REUNION_EMBRACE,
23
- title: "The Big Reunion",
24
- description: "Never letting go",
25
- icon: "🤝",
26
- imageUrl:
27
- "https://images.unsplash.com/photo-1511285560929-80b456fea0bc?w=800",
28
- aiPrompt: createPhotorealisticPrompt(
29
- "an emotional couple reuniting in a busy modern airport terminal, dropped luggage bags beside them, man lifting woman slightly off the ground in tight embrace, both with teary joyful expressions looking at each other, other travelers blurred in background, departure boards and large windows visible",
30
- "bright airport lighting with natural daylight from windows, emotional cinematic atmosphere"
31
- ),
32
- storyTemplate: createStoryTemplate(
33
- "reunite after a long time apart",
34
- "The distance was long, but it only made this moment of reunion sweeter. In this hug, every mile they spent apart is finally forgotten.",
35
- ),
36
- },
37
- {
38
- id: ScenarioId.COZY_BLANKET_HUG,
39
- title: "Blanket Sanctuary",
40
- description: "Warmth on a cold night",
41
- icon: "🛋️",
42
- imageUrl:
43
- "https://images.unsplash.com/photo-1517677208171-0bc6725a3e60?w=800",
44
- aiPrompt: createPhotorealisticPrompt(
45
- "a cozy couple wrapped together in a large chunky knit wool blanket in cream color, sitting on a wooden cabin porch at night, hugging closely with only their happy faces visible peeking out, both facing camera with warm content smiles, string of warm fairy lights wrapped around porch railing, starry night sky visible",
46
- "soft warm fairy light glow, cool night air contrast with cozy warmth, intimate winter atmosphere"
47
- ),
48
- storyTemplate: createStoryTemplate(
49
- "share a cozy sanctuary under the stars",
50
- "Winter air may be cold, but inside their shared blanket, it's the warmest place on earth. A fortress of comfort built for two.",
51
- ),
52
- },
53
- {
54
- id: ScenarioId.BEAR_HUG_LIFT,
55
- title: "The Bear Hug",
56
- description: "Lifting your spirits",
57
- icon: "🐻",
58
- imageUrl:
59
- "https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=800",
60
- aiPrompt: createPhotorealisticPrompt(
61
- "a joyful man giving woman a big bear hug and lifting her high in the air, woman's legs wrapped around his waist, both laughing with pure joy and facing camera with genuine wide smiles, sunny green meadow with wildflowers, blue sky with fluffy white clouds, casual summer clothing",
62
- "bright natural sunlight, cheerful outdoor atmosphere, energetic and vibrant mood"
63
- ),
64
- storyTemplate: createStoryTemplate(
65
- "get swept off your feet by love",
66
- "There's no better feeling than being lifted up by the person who knows you best. A hug that feels like victory, laughter, and home all at once.",
67
- ),
68
- },
69
- {
70
- id: ScenarioId.RAINY_STREET_EMBRACE,
71
- title: "Rainy Street Hug",
72
- description: "Love in the downpour",
73
- icon: "☔",
74
- imageUrl:
75
- "https://images.unsplash.com/photo-1515694346937-94d85e41e6f0?w=800",
76
- aiPrompt: createPhotorealisticPrompt(
77
- "a romantic couple standing in a heavy rainstorm on a city street at night, man in dark coat wrapping it protectively around woman while embracing her closely, both facing camera with serene loving smiles, rain visibly falling, colorful neon shop signs reflecting in wet pavement puddles, rain droplets caught in light",
78
- "dramatic cinematic night lighting, neon reflections in rain puddles, moody protective romantic atmosphere"
79
- ),
80
- storyTemplate: createStoryTemplate(
81
- "find shelter in each other's arms",
82
- "When the rain falls, they don't look for a roof. They look for each other. A protective embrace that says 'I've got you, always'.",
83
- ),
84
- },
85
- {
86
- id: ScenarioId.KITCHEN_WARMTH_HUG,
87
- title: "Kitchen Warmth",
88
- description: "Morning affection",
89
- icon: "🍳",
90
- imageUrl: "https://images.unsplash.com/photo-1556910103-1c02745aae4d?w=800",
91
- aiPrompt: createPhotorealisticPrompt(
92
- "a loving couple in a sun-filled modern kitchen with white cabinets and marble countertops, man hugging woman from the side while she holds a coffee mug, both leaning heads together and facing camera with peaceful morning smiles, wearing soft cotton loungewear in neutral tones, fresh fruit and plants visible on counter",
93
- "warm golden morning sunlight streaming through kitchen window, bright domestic atmosphere, cozy morning ambiance"
94
- ),
95
- storyTemplate: createStoryTemplate(
96
- "start the day with a simple gesture of love",
97
- "Before the coffee is ready, before the day begins, there's always time for a hug. The best fuel for any day is the warmth they share.",
98
- ),
99
- },
100
- ];
@@ -1,26 +0,0 @@
1
- /**
2
- * Animals & Pets Scenarios
3
- * Animal and pet-related scenarios
4
- */
5
-
6
- import { Scenario, ScenarioId } from "../../domain/Scenario";
7
- import { createPhotorealisticPrompt, createStoryTemplate } from "../utils/scenario-utils";
8
-
9
- export const ANIMALS_SCENARIOS: Omit<Scenario, 'outputType' | 'category'>[] = [
10
- {
11
- id: ScenarioId.HORSE_RIDING,
12
- title: "Horseback Adventure",
13
- description: "Equestrian romance",
14
- icon: "🐴",
15
- imageUrl:
16
- "https://images.unsplash.com/photo-1553284965-83fd3e82fa5a?w=800&auto=format&fit=crop&q=60",
17
- aiPrompt: createPhotorealisticPrompt(
18
- "a couple horseback riding together through open countryside, both facing camera with adventurous genuine smiles, man in fitted navy equestrian jacket with white polo shirt and brown leather riding boots on chestnut Arabian horse, woman in cream jodhpurs and burgundy velvet blazer with black helmet on white Andalusian horse, rolling green hills with snow-capped mountains and wildflower meadow in background",
19
- "warm golden hour sunlight with soft lens flare and gentle backlight through horse manes"
20
- ),
21
- storyTemplate: createStoryTemplate(
22
- "ride into the horizon",
23
- "Side by side on horseback, they gallop toward their dreams, wild and free as the wind.",
24
- ),
25
- },
26
- ];
@@ -1,52 +0,0 @@
1
- import { Scenario, ScenarioId } from "../../domain/Scenario";
2
- import { createPhotorealisticPrompt, createStoryTemplate } from "../utils/scenario-utils";
3
-
4
- export const ARABIAN_NIGHTS_SCENARIOS: Omit<Scenario, 'outputType' | 'category'>[] = [
5
- {
6
- id: ScenarioId.FLYING_CARPET_RIDE,
7
- title: "Flying Carpet Ride",
8
- description: "A whole new world",
9
- icon: "🧞",
10
- imageUrl: "https://images.unsplash.com/photo-1482575832494-771f74bf6857?w=800",
11
- aiPrompt: createPhotorealisticPrompt(
12
- "a couple sitting together on ornate Persian flying carpet with intricate ruby red and gold thread embroidery, soaring high above ancient Arabian city with white marble domes and golden minarets, massive luminous full moon in starry night sky, man in royal blue silk tunic with gold embroidered vest and turban with emerald brooch, woman in flowing magenta silk dress with delicate gold jewelry and henna patterns on hands, magical golden stardust particles swirling around carpet",
13
- "ethereal moonlight with soft blue tones and warm golden accent lights from city below"
14
- ),
15
- storyTemplate: createStoryTemplate(
16
- "soar through the starlit sky on a journey of pure magic",
17
- "The world is small and the sky is endless. From their vantage point on the carpet, every wish they've ever made is finally coming true.",
18
- ),
19
- },
20
- {
21
- id: ScenarioId.PALACE_OASIS_RELAX,
22
- title: "Palace Oasis",
23
- description: "Luxury in the desert",
24
- icon: "🕌",
25
- imageUrl:
26
- "https://images.unsplash.com/photo-1540959733332-eab4deabeeaf?w=800",
27
- aiPrompt: createPhotorealisticPrompt(
28
- "a couple in luxurious palace courtyard oasis, both facing camera with blissful serene smiles, reclining on plush silk cushions in deep purple and gold under grand carved marble archway, man in cream linen robe with gold trim feeding woman dates from silver platter, woman in sheer turquoise silk kaftan with gold coin belt and pearl earrings, turquoise mosaic-tiled pool with rose petals and palm trees in background",
29
- "warm amber evening light filtering through carved lattice screens creating intricate shadow patterns"
30
- ),
31
- storyTemplate: createStoryTemplate(
32
- "escape the heat of the desert in your own private palace sanctuary",
33
- "Beyond the walls, the sand is shifting, but here, time has stopped. They've found the ultimate oasis in each other's presence.",
34
- ),
35
- },
36
- {
37
- id: ScenarioId.DESERT_CARAVAN_SUNSET,
38
- title: "Desert Caravan",
39
- description: "Dunes and stars",
40
- icon: "🐪",
41
- imageUrl:
42
- "https://images.unsplash.com/photo-1542401886-65d6c61db217?w=800",
43
- aiPrompt: createPhotorealisticPrompt(
44
- "a couple standing on crest of massive golden sand dune at sunset, both facing camera with hopeful adventurous smiles, man in travel-worn indigo cotton desert robe with leather satchel and traditional headwrap, woman in flowing saffron and burgundy layered robes with silver Berber jewelry, caravan of decorated camels with colorful blankets silhouetted in distance, dramatic sky with vibrant orange coral and deep purple gradient",
45
- "spectacular golden hour desert light with warm orange and magenta tones casting long shadows"
46
- ),
47
- storyTemplate: createStoryTemplate(
48
- "journey across the golden sands towards a future of adventure",
49
- "Every dune they climb brings a new horizon, and every sunset they share is a promise of a new dawn. A love that's as vast and timeless as the desert itself.",
50
- ),
51
- },
52
- ];
@@ -1,69 +0,0 @@
1
- import { Scenario, ScenarioId } from "../../domain/Scenario";
2
- import { createPhotorealisticPrompt, createStoryTemplate } from "../utils/scenario-utils";
3
-
4
- export const ART_STUDIO_SCENARIOS: Omit<Scenario, 'outputType' | 'category'>[] = [
5
- {
6
- id: ScenarioId.CANVAS_TOGETHER,
7
- title: "Canvas Together",
8
- description: "Painting our future",
9
- icon: "🎨",
10
- imageUrl:
11
- "https://images.unsplash.com/photo-1513364776144-60967b0f800f?w=800",
12
- aiPrompt: createPhotorealisticPrompt(
13
- "a couple in bright industrial art studio, both facing camera with joyful creative grins, colorful acrylic paint splatters on cheeks and hands, man in white cotton t-shirt with blue and yellow paint streaks holding thick bristle brush, woman in oversized denim shirt with rolled sleeves and red paint in her hair holding palette knife, standing before massive vibrant abstract expressionist canvas, tall steel-framed windows with exposed brick walls and scattered paint tubes in background",
14
- "bright natural daylight streaming through industrial windows with paint-speckled atmosphere"
15
- ),
16
- storyTemplate: createStoryTemplate(
17
- "create a masterpiece of shared creativity",
18
- "They aren't just painting a canvas; they're painting a life together. Every splash of color is a memory, every stroke a promise.",
19
- ),
20
- },
21
- {
22
- id: ScenarioId.PORTRAIT_SKETCHING,
23
- title: "Portrait Sketching",
24
- description: "Seeing each other",
25
- icon: "✏️",
26
- imageUrl:
27
- "https://images.unsplash.com/photo-1513364776144-60967b0f800f?w=800",
28
- aiPrompt: createPhotorealisticPrompt(
29
- "a couple sketching portraits of each other in cozy art studio, each sitting behind wooden easel with charcoal pencils, peeking at each other over canvases with affectionate playful smiles, man in charcoal gray henley with smudged fingers, woman in cream cable-knit sweater with hair tied up messily, scattered charcoal sticks and crumpled paper sketches on worn wooden floor around them",
30
- "soft directional north light from skylights creating gentle shadows and highlighting charcoal dust in air"
31
- ),
32
- storyTemplate: createStoryTemplate(
33
- "capture the beauty they see in each other",
34
- "To draw is to truly see. In every line and shadow they sketch, they discover something new to love about the person in front of them.",
35
- ),
36
- },
37
- {
38
- id: ScenarioId.SCULPTING_LOVE,
39
- title: "Sculpting Love",
40
- description: "Shaping destiny",
41
- icon: "🏺",
42
- imageUrl:
43
- "https://images.unsplash.com/photo-1501386761578-eac5c94b800a?w=800",
44
- aiPrompt: createPhotorealisticPrompt(
45
- "a couple sculpting together in rustic ceramics studio, both facing camera with focused warm smiles, hands covered in wet gray clay and fingers gently intertwined while shaping tall abstract figure on turntable, man in rolled-up chambray shirt with clay on forearms, woman in linen apron over black tank top with clay-dusted cheeks, pottery wheels and terracotta pieces drying on wooden shelves in background",
46
- "warm soft natural light from high windows with earthy atmosphere and dust particles visible"
47
- ),
48
- storyTemplate: createStoryTemplate(
49
- "shape their bond from the raw clay of life",
50
- "With patience and care, they mold their relationship into something strong and beautiful. A love that's truly hand-crafted.",
51
- ),
52
- },
53
- {
54
- id: ScenarioId.GALLERY_WALK,
55
- title: "Gallery Walk",
56
- description: "Our own exhibition",
57
- icon: "🖼️",
58
- imageUrl:
59
- "https://images.unsplash.com/photo-1536924940846-227afb31e2a5?w=800",
60
- aiPrompt: createPhotorealisticPrompt(
61
- "a couple walking through sleek contemporary art gallery with their paintings on display, both facing camera with proud sophisticated smiles while holding hands, man in tailored charcoal wool blazer over black turtleneck, woman in elegant minimalist ivory midi dress with gold pendant necklace, large colorful canvases in gold frames on white walls with polished concrete floors in background",
62
- "bright clean gallery lighting with soft spotlights on artwork creating even professional illumination"
63
- ),
64
- storyTemplate: createStoryTemplate(
65
- "celebrate their shared achievements on the gallery walls",
66
- "The greatest art they've ever created is the life they share. Today, they're the stars of their own triumphant exhibition.",
67
- ),
68
- },
69
- ];