@umituz/react-native-ai-generation-content 1.17.250 → 1.17.252

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-ai-generation-content",
3
- "version": "1.17.250",
3
+ "version": "1.17.252",
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",
@@ -21,7 +21,7 @@ export const ROMANTIC_MOOD_OPTIONS: CoupleFeatureOption[] = [
21
21
  { id: "romantic", iconKey: "heart", labelKey: "romantic" },
22
22
  { id: "mysterious", iconKey: "moon", labelKey: "mysterious" },
23
23
  { id: "magical", iconKey: "sparkles", labelKey: "magical" },
24
- { id: "energetic", iconKey: "bolt", labelKey: "energetic" },
24
+ { id: "energetic", iconKey: "flash-outline", labelKey: "energetic" },
25
25
  { id: "melancholic", iconKey: "cloud", labelKey: "melancholic" },
26
26
  { id: "passionate", iconKey: "flame", labelKey: "passionate" },
27
27
  { id: "nostalgic", iconKey: "camera", labelKey: "nostalgic" },
@@ -1,13 +1,15 @@
1
1
  /**
2
2
  * Couple Feature Screen
3
- * Generic screen for couple feature selection
3
+ * Generic screen for couple feature selection with NavigationHeader pattern
4
4
  */
5
5
 
6
6
  import React from "react";
7
- import { View, StyleSheet, ScrollView } from "react-native";
7
+ import { View, StyleSheet, TouchableOpacity } from "react-native";
8
8
  import {
9
- AtomicButton,
10
9
  AtomicText,
10
+ AtomicIcon,
11
+ NavigationHeader,
12
+ ScreenLayout,
11
13
  useAppDesignTokens,
12
14
  } from "@umituz/react-native-design-system";
13
15
  import type { CoupleFeatureId, CoupleFeatureSelection } from "../../domain/types";
@@ -49,20 +51,13 @@ export const CoupleFeatureScreen: React.FC<CoupleFeatureScreenProps> = ({
49
51
  featureId,
50
52
  hasConfig: !!config,
51
53
  hasComponent: !!FeatureComponentMap[featureId],
52
- selectionKeys: Object.keys(selection),
53
54
  });
54
55
  }
55
56
 
56
- if (!config) {
57
- if (__DEV__) console.log("[CoupleFeatureScreen] No config for:", featureId);
58
- return null;
59
- }
57
+ if (!config) return null;
60
58
 
61
59
  const FeatureComponent = FeatureComponentMap[featureId];
62
- if (!FeatureComponent) {
63
- if (__DEV__) console.log("[CoupleFeatureScreen] No component for:", featureId);
64
- return null;
65
- }
60
+ if (!FeatureComponent) return null;
66
61
 
67
62
  const selectorProps = {
68
63
  selection,
@@ -72,69 +67,47 @@ export const CoupleFeatureScreen: React.FC<CoupleFeatureScreenProps> = ({
72
67
  };
73
68
 
74
69
  return (
75
- <View
76
- style={[
77
- styles.container,
78
- { backgroundColor: tokens.colors.backgroundPrimary },
79
- ]}
80
- >
81
- <View style={styles.header}>
82
- <AtomicText
83
- type="headlineMedium"
84
- style={{ color: tokens.colors.textPrimary }}
85
- >
86
- {t(`${config.translationPrefix}.title`)}
87
- </AtomicText>
88
- </View>
89
-
90
- <ScrollView style={styles.content} showsVerticalScrollIndicator={false}>
91
- <FeatureComponent {...selectorProps} />
92
- </ScrollView>
93
-
94
- <View
95
- style={[
96
- styles.footer,
97
- { borderTopColor: tokens.colors.borderLight },
98
- ]}
70
+ <View style={[styles.container, { backgroundColor: tokens.colors.backgroundPrimary }]}>
71
+ <NavigationHeader
72
+ title={t(`${config.translationPrefix}.title`)}
73
+ onBackPress={onBack}
74
+ rightElement={
75
+ <TouchableOpacity
76
+ onPress={onContinue}
77
+ activeOpacity={0.7}
78
+ style={{
79
+ flexDirection: "row",
80
+ alignItems: "center",
81
+ backgroundColor: tokens.colors.primary,
82
+ paddingHorizontal: tokens.spacing.md,
83
+ paddingVertical: tokens.spacing.xs,
84
+ borderRadius: tokens.borders.radius.full,
85
+ }}
86
+ >
87
+ <AtomicText
88
+ type="bodyMedium"
89
+ style={{ fontWeight: "800", color: tokens.colors.onPrimary, marginRight: 4 }}
90
+ >
91
+ {t("common.continue")}
92
+ </AtomicText>
93
+ <AtomicIcon name="arrow-forward" size="sm" color="onPrimary" />
94
+ </TouchableOpacity>
95
+ }
96
+ />
97
+ <ScreenLayout
98
+ edges={["left", "right"]}
99
+ backgroundColor="transparent"
100
+ scrollable={true}
101
+ contentContainerStyle={styles.scrollContent}
102
+ hideScrollIndicator={true}
99
103
  >
100
- <AtomicButton
101
- title={t("common.back")}
102
- onPress={onBack}
103
- variant="secondary"
104
- style={styles.backButton}
105
- />
106
- <AtomicButton
107
- title={t("common.continue")}
108
- onPress={onContinue}
109
- variant="primary"
110
- style={styles.continueButton}
111
- />
112
- </View>
104
+ <FeatureComponent {...selectorProps} />
105
+ </ScreenLayout>
113
106
  </View>
114
107
  );
115
108
  };
116
109
 
117
110
  const styles = StyleSheet.create({
118
- container: {
119
- flex: 1,
120
- },
121
- header: {
122
- padding: 16,
123
- paddingTop: 20,
124
- },
125
- content: {
126
- flex: 1,
127
- },
128
- footer: {
129
- flexDirection: "row",
130
- padding: 16,
131
- borderTopWidth: 1,
132
- gap: 12,
133
- },
134
- backButton: {
135
- flex: 1,
136
- },
137
- continueButton: {
138
- flex: 2,
139
- },
111
+ container: { flex: 1 },
112
+ scrollContent: { paddingBottom: 24 },
140
113
  });