@echoform/echo-ui 0.1.0 → 0.2.0

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 (154) hide show
  1. package/README.md +57 -10
  2. package/dist/components/EchoChangeProfileNameModal.d.ts +59 -0
  3. package/dist/components/EchoChangeProfileNameModal.d.ts.map +1 -0
  4. package/dist/components/EchoChangeProfileNameModal.js +317 -0
  5. package/dist/components/EchoChangeProfileNameModal.js.map +1 -0
  6. package/dist/components/EchoColorPicker.d.ts +34 -0
  7. package/dist/components/EchoColorPicker.d.ts.map +1 -0
  8. package/dist/components/EchoColorPicker.js +206 -0
  9. package/dist/components/EchoColorPicker.js.map +1 -0
  10. package/dist/components/EchoConnectedAppsModal.d.ts +40 -0
  11. package/dist/components/EchoConnectedAppsModal.d.ts.map +1 -0
  12. package/dist/components/EchoConnectedAppsModal.js +220 -0
  13. package/dist/components/EchoConnectedAppsModal.js.map +1 -0
  14. package/dist/components/EchoDeleteProfilePanel.d.ts +63 -0
  15. package/dist/components/EchoDeleteProfilePanel.d.ts.map +1 -0
  16. package/dist/components/EchoDeleteProfilePanel.js +286 -0
  17. package/dist/components/EchoDeleteProfilePanel.js.map +1 -0
  18. package/dist/components/EchoDeletionIntercept.d.ts +39 -0
  19. package/dist/components/EchoDeletionIntercept.d.ts.map +1 -0
  20. package/dist/components/EchoDeletionIntercept.js +212 -0
  21. package/dist/components/EchoDeletionIntercept.js.map +1 -0
  22. package/dist/components/EchoDeletionStatusCard.d.ts +35 -0
  23. package/dist/components/EchoDeletionStatusCard.d.ts.map +1 -0
  24. package/dist/components/EchoDeletionStatusCard.js +156 -0
  25. package/dist/components/EchoDeletionStatusCard.js.map +1 -0
  26. package/dist/components/EchoEmblem.d.ts +93 -0
  27. package/dist/components/EchoEmblem.d.ts.map +1 -0
  28. package/dist/components/EchoEmblem.js +308 -0
  29. package/dist/components/EchoEmblem.js.map +1 -0
  30. package/dist/components/EchoEmblemPicker.d.ts +71 -0
  31. package/dist/components/EchoEmblemPicker.d.ts.map +1 -0
  32. package/dist/components/EchoEmblemPicker.js +490 -0
  33. package/dist/components/EchoEmblemPicker.js.map +1 -0
  34. package/dist/components/EchoErrorBanner.d.ts +17 -0
  35. package/dist/components/EchoErrorBanner.d.ts.map +1 -0
  36. package/dist/components/EchoErrorBanner.js +48 -0
  37. package/dist/components/EchoErrorBanner.js.map +1 -0
  38. package/dist/components/EchoFormField.d.ts +27 -0
  39. package/dist/components/EchoFormField.d.ts.map +1 -0
  40. package/dist/components/EchoFormField.js +49 -0
  41. package/dist/components/EchoFormField.js.map +1 -0
  42. package/dist/components/EchoLinkButton.d.ts +16 -0
  43. package/dist/components/EchoLinkButton.d.ts.map +1 -0
  44. package/dist/components/EchoLinkButton.js +37 -0
  45. package/dist/components/EchoLinkButton.js.map +1 -0
  46. package/dist/components/EchoMoreScreen.d.ts +41 -0
  47. package/dist/components/EchoMoreScreen.d.ts.map +1 -0
  48. package/dist/components/EchoMoreScreen.js +94 -0
  49. package/dist/components/EchoMoreScreen.js.map +1 -0
  50. package/dist/components/EchoPasswordField.d.ts +28 -0
  51. package/dist/components/EchoPasswordField.d.ts.map +1 -0
  52. package/dist/components/EchoPasswordField.js +67 -0
  53. package/dist/components/EchoPasswordField.js.map +1 -0
  54. package/dist/components/EchoPrimaryButton.d.ts +23 -0
  55. package/dist/components/EchoPrimaryButton.d.ts.map +1 -0
  56. package/dist/components/EchoPrimaryButton.js +54 -0
  57. package/dist/components/EchoPrimaryButton.js.map +1 -0
  58. package/dist/components/EchoProfileCard.d.ts +35 -0
  59. package/dist/components/EchoProfileCard.d.ts.map +1 -0
  60. package/dist/components/EchoProfileCard.js +206 -0
  61. package/dist/components/EchoProfileCard.js.map +1 -0
  62. package/dist/components/EchoProfileDivider.d.ts +14 -0
  63. package/dist/components/EchoProfileDivider.d.ts.map +1 -0
  64. package/dist/components/EchoProfileDivider.js +31 -0
  65. package/dist/components/EchoProfileDivider.js.map +1 -0
  66. package/dist/components/EchoProfileHero.d.ts +48 -0
  67. package/dist/components/EchoProfileHero.d.ts.map +1 -0
  68. package/dist/components/EchoProfileHero.js +215 -0
  69. package/dist/components/EchoProfileHero.js.map +1 -0
  70. package/dist/components/EchoProfileOverview.d.ts +18 -0
  71. package/dist/components/EchoProfileOverview.d.ts.map +1 -0
  72. package/dist/components/EchoProfileOverview.js +36 -0
  73. package/dist/components/EchoProfileOverview.js.map +1 -0
  74. package/dist/components/EchoProfileRow.d.ts +60 -0
  75. package/dist/components/EchoProfileRow.d.ts.map +1 -0
  76. package/dist/components/EchoProfileRow.js +113 -0
  77. package/dist/components/EchoProfileRow.js.map +1 -0
  78. package/dist/components/EchoProfileSection.d.ts +29 -0
  79. package/dist/components/EchoProfileSection.d.ts.map +1 -0
  80. package/dist/components/EchoProfileSection.js +58 -0
  81. package/dist/components/EchoProfileSection.js.map +1 -0
  82. package/dist/components/EchoRewardNotificationBanner.d.ts +61 -0
  83. package/dist/components/EchoRewardNotificationBanner.d.ts.map +1 -0
  84. package/dist/components/EchoRewardNotificationBanner.js +272 -0
  85. package/dist/components/EchoRewardNotificationBanner.js.map +1 -0
  86. package/dist/components/EchoSettingsRow.d.ts +24 -0
  87. package/dist/components/EchoSettingsRow.d.ts.map +1 -0
  88. package/dist/components/EchoSettingsRow.js +84 -0
  89. package/dist/components/EchoSettingsRow.js.map +1 -0
  90. package/dist/components/EchoSettingsSection.d.ts +16 -0
  91. package/dist/components/EchoSettingsSection.d.ts.map +1 -0
  92. package/dist/components/EchoSettingsSection.js +48 -0
  93. package/dist/components/EchoSettingsSection.js.map +1 -0
  94. package/dist/components/EchoSignOutButton.d.ts +28 -0
  95. package/dist/components/EchoSignOutButton.d.ts.map +1 -0
  96. package/dist/components/EchoSignOutButton.js +67 -0
  97. package/dist/components/EchoSignOutButton.js.map +1 -0
  98. package/dist/components/EchoSuccessBanner.d.ts +17 -0
  99. package/dist/components/EchoSuccessBanner.d.ts.map +1 -0
  100. package/dist/components/EchoSuccessBanner.js +48 -0
  101. package/dist/components/EchoSuccessBanner.js.map +1 -0
  102. package/dist/components/EchoSyncPanel.d.ts +165 -0
  103. package/dist/components/EchoSyncPanel.d.ts.map +1 -0
  104. package/dist/components/EchoSyncPanel.js +913 -0
  105. package/dist/components/EchoSyncPanel.js.map +1 -0
  106. package/dist/components/EchoSyncPromptModal.d.ts +87 -0
  107. package/dist/components/EchoSyncPromptModal.d.ts.map +1 -0
  108. package/dist/components/EchoSyncPromptModal.js +351 -0
  109. package/dist/components/EchoSyncPromptModal.js.map +1 -0
  110. package/dist/components/EchoTitlePicker.d.ts +72 -0
  111. package/dist/components/EchoTitlePicker.d.ts.map +1 -0
  112. package/dist/components/EchoTitlePicker.js +487 -0
  113. package/dist/components/EchoTitlePicker.js.map +1 -0
  114. package/dist/components/EchoVerificationCodeInput.d.ts +40 -0
  115. package/dist/components/EchoVerificationCodeInput.d.ts.map +1 -0
  116. package/dist/components/EchoVerificationCodeInput.js +140 -0
  117. package/dist/components/EchoVerificationCodeInput.js.map +1 -0
  118. package/dist/components/EchoWelcome.d.ts +44 -0
  119. package/dist/components/EchoWelcome.d.ts.map +1 -0
  120. package/dist/components/EchoWelcome.js +289 -0
  121. package/dist/components/EchoWelcome.js.map +1 -0
  122. package/dist/components/EchoWhyBecomeAnEchoModal.d.ts +34 -0
  123. package/dist/components/EchoWhyBecomeAnEchoModal.d.ts.map +1 -0
  124. package/dist/components/EchoWhyBecomeAnEchoModal.js +321 -0
  125. package/dist/components/EchoWhyBecomeAnEchoModal.js.map +1 -0
  126. package/dist/components/EchoformInfoButton.d.ts +27 -0
  127. package/dist/components/EchoformInfoButton.d.ts.map +1 -0
  128. package/dist/components/EchoformInfoButton.js +60 -0
  129. package/dist/components/EchoformInfoButton.js.map +1 -0
  130. package/dist/components/EchoformInfoModal.d.ts +63 -0
  131. package/dist/components/EchoformInfoModal.d.ts.map +1 -0
  132. package/dist/components/EchoformInfoModal.js +347 -0
  133. package/dist/components/EchoformInfoModal.js.map +1 -0
  134. package/dist/echoColors.d.ts +58 -0
  135. package/dist/echoColors.d.ts.map +1 -0
  136. package/dist/echoColors.js +94 -0
  137. package/dist/echoColors.js.map +1 -0
  138. package/dist/index.d.ts +71 -3
  139. package/dist/index.d.ts.map +1 -1
  140. package/dist/index.js +86 -4
  141. package/dist/index.js.map +1 -1
  142. package/dist/theme.d.ts +48 -0
  143. package/dist/theme.d.ts.map +1 -0
  144. package/dist/theme.js +51 -0
  145. package/dist/theme.js.map +1 -0
  146. package/dist/titleRarity.d.ts +19 -0
  147. package/dist/titleRarity.d.ts.map +1 -0
  148. package/dist/titleRarity.js +46 -0
  149. package/dist/titleRarity.js.map +1 -0
  150. package/package.json +6 -5
  151. package/dist/components/EchoUITest.d.ts +0 -14
  152. package/dist/components/EchoUITest.d.ts.map +0 -1
  153. package/dist/components/EchoUITest.js +0 -53
  154. package/dist/components/EchoUITest.js.map +0 -1
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ /**
3
+ * EchoProfileCard
4
+ *
5
+ * Presentation-only card showing a signed-in Echo Profile or a guest state.
6
+ * No Supabase, no Expo Router, no app-specific services or contexts.
7
+ *
8
+ * Canonical shared component for @echoform/echo-ui.
9
+ * Source: Echo UI Reference – theme/rarity imports only changed.
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.EchoProfileCard = EchoProfileCard;
16
+ const react_1 = __importDefault(require("react"));
17
+ const react_native_1 = require("react-native");
18
+ const vector_icons_1 = require("@expo/vector-icons");
19
+ const theme_1 = require("../theme");
20
+ const titleRarity_1 = require("../titleRarity");
21
+ const EchoEmblem_1 = require("./EchoEmblem");
22
+ const EMBLEM_SIZE = 84;
23
+ const GUEST_AVATAR_SIZE = 52;
24
+ function EchoProfileCard({ signedIn, loading = false, profileName, email, emailVerified, emblemSource, emblemDisplayName, title, accentColor = theme_1.COLORS.neonCyan, guestDetail, onPress, accessibilityHint, }) {
25
+ var _a;
26
+ // ── Accessibility label ───────────────────────────────────────────────────
27
+ const a11yLabel = signedIn
28
+ ? [
29
+ `Echo Profile: ${(_a = profileName !== null && profileName !== void 0 ? profileName : email) !== null && _a !== void 0 ? _a : 'Echo Profile'}.`,
30
+ title ? `Echo Title: ${title.displayName}.` : null,
31
+ 'Double tap to manage your Echo Profile.',
32
+ ]
33
+ .filter(Boolean)
34
+ .join(' ')
35
+ : 'Guest mode. Double tap to sign in or create an Echo Profile.';
36
+ const borderColor = `${accentColor}44`;
37
+ return (<react_native_1.Pressable onPress={onPress} accessible accessibilityRole="button" accessibilityLabel={a11yLabel} accessibilityHint={accessibilityHint !== null && accessibilityHint !== void 0 ? accessibilityHint : 'Opens the Echo Profile screen'} accessibilityState={{ busy: loading }} style={({ pressed }) => [
38
+ styles.card,
39
+ {
40
+ borderColor,
41
+ shadowColor: accentColor,
42
+ },
43
+ pressed && styles.cardPressed,
44
+ ]}>
45
+ <react_native_1.View style={styles.row}>
46
+ {/* ── Avatar / Emblem area ── */}
47
+ <react_native_1.View style={styles.avatarArea}>
48
+ {loading ? (<react_native_1.View style={[
49
+ styles.avatarLoading,
50
+ signedIn
51
+ ? styles.avatarLoadingSignedIn
52
+ : styles.avatarLoadingGuest,
53
+ ]}>
54
+ <react_native_1.ActivityIndicator size="small" color={accentColor}/>
55
+ </react_native_1.View>) : signedIn ? (emblemSource ? (<EchoEmblem_1.EchoEmblem source={emblemSource} size={EMBLEM_SIZE} displayName={emblemDisplayName}/>) : (<react_native_1.View style={[
56
+ styles.emblemFallback,
57
+ { width: EMBLEM_SIZE, height: EMBLEM_SIZE },
58
+ ]}>
59
+ <vector_icons_1.MaterialIcons name="account-circle" size={EMBLEM_SIZE * 0.72} color={theme_1.COLORS.textMuted}/>
60
+ </react_native_1.View>)) : (<react_native_1.View style={styles.guestAvatar}>
61
+ <vector_icons_1.MaterialIcons name="devices" size={28} color={theme_1.COLORS.textSecondary}/>
62
+ </react_native_1.View>)}
63
+ </react_native_1.View>
64
+
65
+ {/* ── Text block ── */}
66
+ <react_native_1.View style={styles.textBlock}>
67
+ {signedIn ? (<SignedInText profileName={profileName} email={email} emailVerified={emailVerified} title={title}/>) : (<GuestText guestDetail={guestDetail}/>)}
68
+ </react_native_1.View>
69
+
70
+ {/* ── Chevron ── */}
71
+ <vector_icons_1.MaterialIcons name="chevron-right" size={20} color={theme_1.COLORS.textMuted}/>
72
+ </react_native_1.View>
73
+ </react_native_1.Pressable>);
74
+ }
75
+ function SignedInText({ profileName, email, emailVerified, title, }) {
76
+ var _a;
77
+ const displayLabel = (_a = profileName !== null && profileName !== void 0 ? profileName : email) !== null && _a !== void 0 ? _a : 'Echo Profile';
78
+ const titleColor = title ? (0, titleRarity_1.rarityColor)(title.rarity) : undefined;
79
+ const titleGlow = title ? (0, titleRarity_1.rarityGlowColor)(title.rarity) : undefined;
80
+ // Glow radius: legendary → 1, other glowing rarities → 7
81
+ const glowRadius = (title === null || title === void 0 ? void 0 : title.rarity) === 'legendary' ? 1 : 7;
82
+ const verifiedText = emailVerified
83
+ ? 'Signed in · Verified'
84
+ : 'Signed in · Email not verified';
85
+ return (<>
86
+ <react_native_1.Text style={styles.profileName} numberOfLines={1}>
87
+ {displayLabel}
88
+ </react_native_1.Text>
89
+
90
+ {title ? (<react_native_1.Text style={[
91
+ styles.titleText,
92
+ { color: titleColor },
93
+ titleGlow
94
+ ? {
95
+ textShadowColor: titleGlow,
96
+ textShadowOffset: { width: 0, height: 0 },
97
+ textShadowRadius: glowRadius,
98
+ }
99
+ : undefined,
100
+ ]} numberOfLines={1}>
101
+ {title.displayName}
102
+ </react_native_1.Text>) : null}
103
+
104
+ <react_native_1.Text style={[styles.accountNote, { color: theme_1.COLORS.textSecondary }]}>
105
+ {verifiedText}
106
+ </react_native_1.Text>
107
+ </>);
108
+ }
109
+ function GuestText({ guestDetail }) {
110
+ return (<>
111
+ <react_native_1.Text style={styles.profileName}>Guest (This Device)</react_native_1.Text>
112
+
113
+ {guestDetail ? (<react_native_1.Text style={styles.guestItemCount}>{guestDetail}</react_native_1.Text>) : null}
114
+
115
+ <react_native_1.Text style={styles.accountNote}>
116
+ Tap to sign in or create an Echo Profile
117
+ </react_native_1.Text>
118
+ </>);
119
+ }
120
+ // ─────────────────────────────────────────────────────────────────────────────
121
+ // Styles
122
+ // ─────────────────────────────────────────────────────────────────────────────
123
+ const styles = react_native_1.StyleSheet.create({
124
+ card: {
125
+ backgroundColor: theme_1.COLORS.surface,
126
+ borderRadius: theme_1.RADIUS.lg,
127
+ borderWidth: 1,
128
+ padding: theme_1.SPACING.lg,
129
+ // iOS shadow
130
+ shadowOffset: { width: 0, height: 0 },
131
+ shadowOpacity: 0.15,
132
+ shadowRadius: 12,
133
+ // Android
134
+ elevation: 4,
135
+ },
136
+ cardPressed: {
137
+ opacity: 0.85,
138
+ },
139
+ row: {
140
+ flexDirection: 'row',
141
+ alignItems: 'center',
142
+ gap: theme_1.SPACING.md,
143
+ },
144
+ avatarArea: {
145
+ alignItems: 'center',
146
+ justifyContent: 'center',
147
+ },
148
+ avatarLoading: {
149
+ alignItems: 'center',
150
+ justifyContent: 'center',
151
+ },
152
+ avatarLoadingSignedIn: {
153
+ width: EMBLEM_SIZE,
154
+ height: EMBLEM_SIZE,
155
+ },
156
+ avatarLoadingGuest: {
157
+ width: GUEST_AVATAR_SIZE,
158
+ height: GUEST_AVATAR_SIZE,
159
+ borderRadius: 26,
160
+ backgroundColor: theme_1.COLORS.surfaceHigh,
161
+ borderWidth: 1,
162
+ borderColor: theme_1.COLORS.border,
163
+ },
164
+ emblemFallback: {
165
+ alignItems: 'center',
166
+ justifyContent: 'center',
167
+ backgroundColor: theme_1.COLORS.surfaceHigh,
168
+ borderRadius: theme_1.RADIUS.md,
169
+ },
170
+ guestAvatar: {
171
+ width: GUEST_AVATAR_SIZE,
172
+ height: GUEST_AVATAR_SIZE,
173
+ borderRadius: 26,
174
+ backgroundColor: theme_1.COLORS.surfaceHigh,
175
+ borderWidth: 1,
176
+ borderColor: theme_1.COLORS.border,
177
+ alignItems: 'center',
178
+ justifyContent: 'center',
179
+ },
180
+ textBlock: {
181
+ flex: 1,
182
+ },
183
+ profileName: {
184
+ color: theme_1.COLORS.textPrimary,
185
+ fontSize: theme_1.FONTS.lg,
186
+ fontWeight: '700',
187
+ },
188
+ titleText: {
189
+ fontSize: theme_1.FONTS.xs,
190
+ fontWeight: '700',
191
+ letterSpacing: 0.4,
192
+ marginTop: 1,
193
+ },
194
+ guestItemCount: {
195
+ color: theme_1.COLORS.textSecondary,
196
+ fontSize: theme_1.FONTS.sm,
197
+ marginTop: 2,
198
+ },
199
+ accountNote: {
200
+ fontSize: theme_1.FONTS.xs,
201
+ color: theme_1.COLORS.neonCyan,
202
+ marginTop: 3,
203
+ fontWeight: '600',
204
+ },
205
+ });
206
+ //# sourceMappingURL=EchoProfileCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileCard.js","sourceRoot":"","sources":["../../src/components/EchoProfileCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * EchoProfileDivider
3
+ *
4
+ * 1px horizontal rule used between rows in Echo Profile section cards.
5
+ * Extracted from the Echo UI Reference rowDivider pattern.
6
+ *
7
+ * No props required.
8
+ *
9
+ * No Expo Router, no auth, no contexts, no services, no app-specific code.
10
+ * Canonical shared component for @echoform/echo-ui.
11
+ */
12
+ import React from 'react';
13
+ export declare function EchoProfileDivider(): React.JSX.Element;
14
+ //# sourceMappingURL=EchoProfileDivider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileDivider.d.ts","sourceRoot":"","sources":["../../src/components/EchoProfileDivider.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,wBAAgB,kBAAkB,sBAEjC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * EchoProfileDivider
4
+ *
5
+ * 1px horizontal rule used between rows in Echo Profile section cards.
6
+ * Extracted from the Echo UI Reference rowDivider pattern.
7
+ *
8
+ * No props required.
9
+ *
10
+ * No Expo Router, no auth, no contexts, no services, no app-specific code.
11
+ * Canonical shared component for @echoform/echo-ui.
12
+ */
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.EchoProfileDivider = EchoProfileDivider;
18
+ const react_1 = __importDefault(require("react"));
19
+ const react_native_1 = require("react-native");
20
+ const theme_1 = require("../theme");
21
+ function EchoProfileDivider() {
22
+ return <react_native_1.View style={styles.divider}/>;
23
+ }
24
+ const styles = react_native_1.StyleSheet.create({
25
+ divider: {
26
+ height: 1,
27
+ backgroundColor: theme_1.COLORS.border,
28
+ marginHorizontal: theme_1.SPACING.lg,
29
+ },
30
+ });
31
+ //# sourceMappingURL=EchoProfileDivider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileDivider.js","sourceRoot":"","sources":["../../src/components/EchoProfileDivider.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;AAMH,gDAEC;AAND,kDAA0B;AAC1B,+CAAgD;AAChD,oCAA2C;AAE3C,SAAgB,kBAAkB;IAChC,OAAO,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAG,CAAC;AACzC,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE;QACP,MAAM,EAAa,CAAC;QACpB,eAAe,EAAI,cAAM,CAAC,MAAM;QAChC,gBAAgB,EAAG,eAAO,CAAC,EAAE;KAC9B;CACF,CAAC,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * EchoProfileHero
3
+ *
4
+ * Presentation-only signed-in profile hero card extracted from the Echo UI Reference.
5
+ *
6
+ * Renders the 110×110 emblem area, Echo Color corner button, Echo Title with
7
+ * rarity color/glow, and Verified/Unverified badge — all driven purely by props.
8
+ *
9
+ * ACCESSIBILITY
10
+ * ─────────────
11
+ * • Grouped accessible element reports name, title, and verification state.
12
+ * • Echo Color button has label and hint.
13
+ * • All decorative inner elements are hidden from screen readers.
14
+ *
15
+ * No Expo Router, no auth, no contexts, no services, no storage, no app assets.
16
+ * Canonical shared component for @echoform/echo-ui.
17
+ */
18
+ import React from 'react';
19
+ import type { ImageSource } from 'expo-image';
20
+ import type { EchoTitleRarity } from '../titleRarity';
21
+ export type EchoProfileHeroProps = {
22
+ /** Display name for the signed-in Echo Profile. */
23
+ profileName?: string | null;
24
+ /** expo-image ImageSource for the active Echo Emblem. */
25
+ emblemSource?: ImageSource | null;
26
+ /** Display name of the active Echo Emblem (for accessibility). */
27
+ emblemDisplayName?: string;
28
+ /**
29
+ * Fallback image source shown when no emblem is active.
30
+ * If neither emblem nor fallback is supplied, a neutral icon is rendered.
31
+ */
32
+ fallbackProfileSource?: ImageSource | null;
33
+ /** True while emblem data is being loaded (shows spinner in emblem slot). */
34
+ emblemLoading?: boolean;
35
+ /** Active Echo Title, if any. */
36
+ title?: {
37
+ displayName: string;
38
+ rarity: EchoTitleRarity;
39
+ } | null;
40
+ /** Whether the user's email address has been verified. */
41
+ verified: boolean;
42
+ /** Current Echo Profile accent color hex. */
43
+ echoColor: string;
44
+ /** Called when the Echo Color palette button is pressed. */
45
+ onColorPress: () => void;
46
+ };
47
+ export declare function EchoProfileHero({ profileName, emblemSource, emblemDisplayName, fallbackProfileSource, emblemLoading, title, verified, echoColor, onColorPress, }: EchoProfileHeroProps): React.JSX.Element;
48
+ //# sourceMappingURL=EchoProfileHero.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileHero.d.ts","sourceRoot":"","sources":["../../src/components/EchoProfileHero.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAOtD,MAAM,MAAM,oBAAoB,GAAG;IACjC,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,yDAAyD;IACzD,YAAY,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,eAAe,CAAC;KACzB,GAAG,IAAI,CAAC;IACT,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC;AAMF,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,qBAAqB,EACrB,aAAqB,EACrB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,YAAY,GACb,EAAE,oBAAoB,qBA8JtB"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * EchoProfileHero
4
+ *
5
+ * Presentation-only signed-in profile hero card extracted from the Echo UI Reference.
6
+ *
7
+ * Renders the 110×110 emblem area, Echo Color corner button, Echo Title with
8
+ * rarity color/glow, and Verified/Unverified badge — all driven purely by props.
9
+ *
10
+ * ACCESSIBILITY
11
+ * ─────────────
12
+ * • Grouped accessible element reports name, title, and verification state.
13
+ * • Echo Color button has label and hint.
14
+ * • All decorative inner elements are hidden from screen readers.
15
+ *
16
+ * No Expo Router, no auth, no contexts, no services, no storage, no app assets.
17
+ * Canonical shared component for @echoform/echo-ui.
18
+ */
19
+ var __importDefault = (this && this.__importDefault) || function (mod) {
20
+ return (mod && mod.__esModule) ? mod : { "default": mod };
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.EchoProfileHero = EchoProfileHero;
24
+ const react_1 = __importDefault(require("react"));
25
+ const react_native_1 = require("react-native");
26
+ const expo_image_1 = require("expo-image");
27
+ const vector_icons_1 = require("@expo/vector-icons");
28
+ const EchoEmblem_1 = require("./EchoEmblem");
29
+ const titleRarity_1 = require("../titleRarity");
30
+ const theme_1 = require("../theme");
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+ // Component
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+ function EchoProfileHero({ profileName, emblemSource, emblemDisplayName, fallbackProfileSource, emblemLoading = false, title, verified, echoColor, onColorPress, }) {
35
+ // ── Grouped accessibility label ──────────────────────────────────────────
36
+ const groupedA11yLabel = [
37
+ `Echo Profile: ${profileName !== null && profileName !== void 0 ? profileName : 'No name set'}`,
38
+ title ? `Echo Title: ${title.displayName}` : null,
39
+ verified ? 'Verified Echo' : 'Email not verified',
40
+ ]
41
+ .filter(Boolean)
42
+ .join('. ');
43
+ // ── Emblem slot content ──────────────────────────────────────────────────
44
+ let emblemContent;
45
+ if (emblemSource) {
46
+ emblemContent = (<EchoEmblem_1.EchoEmblem source={emblemSource} size={110} displayName={emblemDisplayName}/>);
47
+ }
48
+ else if (emblemLoading) {
49
+ emblemContent = (<react_native_1.View style={styles.emblemPlaceholder}>
50
+ <react_native_1.ActivityIndicator size="small" color={theme_1.COLORS.neonCyan}/>
51
+ </react_native_1.View>);
52
+ }
53
+ else if (fallbackProfileSource) {
54
+ emblemContent = (<expo_image_1.Image source={fallbackProfileSource} style={styles.emblemFallback} contentFit="contain" importantForAccessibility="no" accessibilityElementsHidden/>);
55
+ }
56
+ else {
57
+ // Package-safe neutral fallback — no host asset required
58
+ emblemContent = (<react_native_1.View style={styles.emblemNeutral}>
59
+ <vector_icons_1.MaterialIcons name="account-circle" size={88} color={theme_1.COLORS.textMuted} importantForAccessibility="no" accessibilityElementsHidden/>
60
+ </react_native_1.View>);
61
+ }
62
+ return (<react_native_1.View style={[
63
+ styles.hero,
64
+ {
65
+ borderColor: echoColor + '33',
66
+ shadowColor: echoColor,
67
+ },
68
+ ]}>
69
+ {/* ── Echo Color corner button ─────────────────────────────────────── */}
70
+ <react_native_1.Pressable onPress={onColorPress} style={({ pressed }) => [
71
+ styles.colorCornerBtn,
72
+ {
73
+ borderColor: echoColor + '88',
74
+ backgroundColor: echoColor + '15',
75
+ },
76
+ pressed ? { opacity: 0.7 } : null,
77
+ ]} accessibilityLabel="Echo Color" accessibilityRole="button" accessibilityHint="Change your Echo Profile accent color">
78
+ <vector_icons_1.MaterialIcons name="palette" size={18} color={echoColor} importantForAccessibility="no" accessibilityElementsHidden/>
79
+ </react_native_1.Pressable>
80
+
81
+ {/* ── Emblem slot ──────────────────────────────────────────────────── */}
82
+ <react_native_1.View style={styles.emblemWrapper} importantForAccessibility="no" accessibilityElementsHidden>
83
+ {emblemContent}
84
+ </react_native_1.View>
85
+
86
+ {/* ── Name + title + badge (grouped) ──────────────────────────────── */}
87
+ <react_native_1.View accessible accessibilityLabel={groupedA11yLabel} accessibilityRole="text">
88
+ <react_native_1.Text style={styles.heroName} importantForAccessibility="no" accessibilityElementsHidden>
89
+ {profileName !== null && profileName !== void 0 ? profileName : '—'}
90
+ </react_native_1.Text>
91
+
92
+ {title ? (<react_native_1.View style={styles.activeTitleRow} importantForAccessibility="no" accessibilityElementsHidden>
93
+ <react_native_1.Text style={[
94
+ styles.activeTitleText,
95
+ { color: (0, titleRarity_1.rarityColor)(title.rarity) },
96
+ (0, titleRarity_1.rarityGlowColor)(title.rarity)
97
+ ? {
98
+ textShadowColor: (0, titleRarity_1.rarityGlowColor)(title.rarity),
99
+ textShadowOffset: { width: 0, height: 0 },
100
+ textShadowRadius: title.rarity === 'legendary' ? 2 : 8,
101
+ }
102
+ : null,
103
+ ]} numberOfLines={1}>
104
+ {title.displayName}
105
+ </react_native_1.Text>
106
+ </react_native_1.View>) : null}
107
+
108
+ {verified ? (<react_native_1.View style={styles.verifiedBadge} importantForAccessibility="no" accessibilityElementsHidden>
109
+ <vector_icons_1.MaterialIcons name="verified" size={14} color={theme_1.COLORS.neonGreen}/>
110
+ <react_native_1.Text style={styles.verifiedBadgeText}>Verified Echo</react_native_1.Text>
111
+ </react_native_1.View>) : (<react_native_1.View style={[styles.verifiedBadge, styles.unverifiedBadge]} importantForAccessibility="no" accessibilityElementsHidden>
112
+ <vector_icons_1.MaterialIcons name="warning-amber" size={14} color={theme_1.COLORS.warning}/>
113
+ <react_native_1.Text style={[styles.verifiedBadgeText, { color: theme_1.COLORS.warning }]}>
114
+ Email not verified
115
+ </react_native_1.Text>
116
+ </react_native_1.View>)}
117
+ </react_native_1.View>
118
+ </react_native_1.View>);
119
+ }
120
+ // ─────────────────────────────────────────────────────────────────────────────
121
+ // Styles
122
+ // ─────────────────────────────────────────────────────────────────────────────
123
+ const styles = react_native_1.StyleSheet.create({
124
+ hero: {
125
+ alignItems: 'center',
126
+ gap: theme_1.SPACING.sm,
127
+ backgroundColor: theme_1.COLORS.surface,
128
+ borderRadius: theme_1.RADIUS.xl,
129
+ borderWidth: 1,
130
+ paddingVertical: theme_1.SPACING.xxxl,
131
+ paddingHorizontal: theme_1.SPACING.xl,
132
+ shadowOffset: { width: 0, height: 0 },
133
+ shadowOpacity: 0.1,
134
+ shadowRadius: 20,
135
+ elevation: 3,
136
+ },
137
+ colorCornerBtn: {
138
+ position: 'absolute',
139
+ top: theme_1.SPACING.md,
140
+ right: theme_1.SPACING.md,
141
+ width: 36,
142
+ height: 36,
143
+ borderRadius: 18,
144
+ borderWidth: 1,
145
+ alignItems: 'center',
146
+ justifyContent: 'center',
147
+ zIndex: 2,
148
+ },
149
+ emblemWrapper: {
150
+ width: 110,
151
+ height: 110,
152
+ marginBottom: theme_1.SPACING.sm,
153
+ },
154
+ emblemPlaceholder: {
155
+ width: 110,
156
+ height: 110,
157
+ alignItems: 'center',
158
+ justifyContent: 'center',
159
+ },
160
+ emblemFallback: {
161
+ width: 110,
162
+ height: 110,
163
+ },
164
+ emblemNeutral: {
165
+ width: 110,
166
+ height: 110,
167
+ alignItems: 'center',
168
+ justifyContent: 'center',
169
+ },
170
+ heroName: {
171
+ fontSize: 22,
172
+ fontWeight: '800',
173
+ color: theme_1.COLORS.textPrimary,
174
+ textAlign: 'center',
175
+ letterSpacing: 0.3,
176
+ },
177
+ activeTitleRow: {
178
+ flexDirection: 'row',
179
+ alignItems: 'center',
180
+ justifyContent: 'center',
181
+ gap: 4,
182
+ marginTop: 2,
183
+ marginBottom: 1,
184
+ },
185
+ activeTitleText: {
186
+ fontSize: theme_1.FONTS.sm,
187
+ fontWeight: '700',
188
+ letterSpacing: 0.4,
189
+ textAlign: 'center',
190
+ },
191
+ verifiedBadge: {
192
+ flexDirection: 'row',
193
+ alignItems: 'center',
194
+ gap: 5,
195
+ backgroundColor: theme_1.COLORS.neonGreen + '18',
196
+ borderRadius: theme_1.RADIUS.full,
197
+ borderWidth: 1,
198
+ borderColor: theme_1.COLORS.neonGreen + '44',
199
+ paddingVertical: 4,
200
+ paddingHorizontal: theme_1.SPACING.md,
201
+ marginTop: theme_1.SPACING.xs,
202
+ alignSelf: 'center',
203
+ },
204
+ unverifiedBadge: {
205
+ backgroundColor: theme_1.COLORS.warning + '18',
206
+ borderColor: theme_1.COLORS.warning + '44',
207
+ },
208
+ verifiedBadgeText: {
209
+ fontSize: theme_1.FONTS.xs,
210
+ fontWeight: '700',
211
+ color: theme_1.COLORS.neonGreen,
212
+ letterSpacing: 0.4,
213
+ },
214
+ });
215
+ //# sourceMappingURL=EchoProfileHero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileHero.js","sourceRoot":"","sources":["../../src/components/EchoProfileHero.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * EchoProfileOverview
3
+ *
4
+ * Presentation-only layout wrapper for the signed-in profile screen content.
5
+ *
6
+ * Provides the canonical vertical gap used between all profile blocks
7
+ * (hero, section cards, action buttons) without owning navigation,
8
+ * scrolling, auth, or data.
9
+ *
10
+ * No Expo Router, no auth, no contexts, no services, no app-specific code.
11
+ * Canonical shared component for @echoform/echo-ui.
12
+ */
13
+ import React from 'react';
14
+ export type EchoProfileOverviewProps = {
15
+ children: React.ReactNode;
16
+ };
17
+ export declare function EchoProfileOverview({ children }: EchoProfileOverviewProps): React.JSX.Element;
18
+ //# sourceMappingURL=EchoProfileOverview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileOverview.d.ts","sourceRoot":"","sources":["../../src/components/EchoProfileOverview.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAMF,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,EAAE,wBAAwB,qBAEzE"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * EchoProfileOverview
4
+ *
5
+ * Presentation-only layout wrapper for the signed-in profile screen content.
6
+ *
7
+ * Provides the canonical vertical gap used between all profile blocks
8
+ * (hero, section cards, action buttons) without owning navigation,
9
+ * scrolling, auth, or data.
10
+ *
11
+ * No Expo Router, no auth, no contexts, no services, no app-specific code.
12
+ * Canonical shared component for @echoform/echo-ui.
13
+ */
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.EchoProfileOverview = EchoProfileOverview;
19
+ const react_1 = __importDefault(require("react"));
20
+ const react_native_1 = require("react-native");
21
+ const theme_1 = require("../theme");
22
+ // ─────────────────────────────────────────────────────────────────────────────
23
+ // Component
24
+ // ─────────────────────────────────────────────────────────────────────────────
25
+ function EchoProfileOverview({ children }) {
26
+ return <react_native_1.View style={styles.container}>{children}</react_native_1.View>;
27
+ }
28
+ // ─────────────────────────────────────────────────────────────────────────────
29
+ // Styles
30
+ // ─────────────────────────────────────────────────────────────────────────────
31
+ const styles = react_native_1.StyleSheet.create({
32
+ container: {
33
+ gap: theme_1.SPACING.lg,
34
+ },
35
+ });
36
+ //# sourceMappingURL=EchoProfileOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoProfileOverview.js","sourceRoot":"","sources":["../../src/components/EchoProfileOverview.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;AAkBH,kDAEC;AAlBD,kDAA0B;AAC1B,+CAAgD;AAChD,oCAAmC;AAUnC,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,SAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAA4B;IACxE,OAAO,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,mBAAI,CAAC,CAAC;AAC1D,CAAC;AAED,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,GAAG,EAAE,eAAO,CAAC,EAAE;KAChB;CACF,CAAC,CAAC"}