@echoform/echo-ui 0.1.1 → 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 (147) 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 +1 -1
  27. package/dist/components/EchoEmblemPicker.d.ts +71 -0
  28. package/dist/components/EchoEmblemPicker.d.ts.map +1 -0
  29. package/dist/components/EchoEmblemPicker.js +490 -0
  30. package/dist/components/EchoEmblemPicker.js.map +1 -0
  31. package/dist/components/EchoErrorBanner.d.ts +17 -0
  32. package/dist/components/EchoErrorBanner.d.ts.map +1 -0
  33. package/dist/components/EchoErrorBanner.js +48 -0
  34. package/dist/components/EchoErrorBanner.js.map +1 -0
  35. package/dist/components/EchoFormField.d.ts +27 -0
  36. package/dist/components/EchoFormField.d.ts.map +1 -0
  37. package/dist/components/EchoFormField.js +49 -0
  38. package/dist/components/EchoFormField.js.map +1 -0
  39. package/dist/components/EchoLinkButton.d.ts +16 -0
  40. package/dist/components/EchoLinkButton.d.ts.map +1 -0
  41. package/dist/components/EchoLinkButton.js +37 -0
  42. package/dist/components/EchoLinkButton.js.map +1 -0
  43. package/dist/components/EchoMoreScreen.d.ts +41 -0
  44. package/dist/components/EchoMoreScreen.d.ts.map +1 -0
  45. package/dist/components/EchoMoreScreen.js +94 -0
  46. package/dist/components/EchoMoreScreen.js.map +1 -0
  47. package/dist/components/EchoPasswordField.d.ts +28 -0
  48. package/dist/components/EchoPasswordField.d.ts.map +1 -0
  49. package/dist/components/EchoPasswordField.js +67 -0
  50. package/dist/components/EchoPasswordField.js.map +1 -0
  51. package/dist/components/EchoPrimaryButton.d.ts +23 -0
  52. package/dist/components/EchoPrimaryButton.d.ts.map +1 -0
  53. package/dist/components/EchoPrimaryButton.js +54 -0
  54. package/dist/components/EchoPrimaryButton.js.map +1 -0
  55. package/dist/components/EchoProfileCard.d.ts +7 -3
  56. package/dist/components/EchoProfileCard.d.ts.map +1 -1
  57. package/dist/components/EchoProfileCard.js +5 -10
  58. package/dist/components/EchoProfileCard.js.map +1 -1
  59. package/dist/components/EchoProfileDivider.d.ts +14 -0
  60. package/dist/components/EchoProfileDivider.d.ts.map +1 -0
  61. package/dist/components/EchoProfileDivider.js +31 -0
  62. package/dist/components/EchoProfileDivider.js.map +1 -0
  63. package/dist/components/EchoProfileHero.d.ts +48 -0
  64. package/dist/components/EchoProfileHero.d.ts.map +1 -0
  65. package/dist/components/EchoProfileHero.js +215 -0
  66. package/dist/components/EchoProfileHero.js.map +1 -0
  67. package/dist/components/EchoProfileOverview.d.ts +18 -0
  68. package/dist/components/EchoProfileOverview.d.ts.map +1 -0
  69. package/dist/components/EchoProfileOverview.js +36 -0
  70. package/dist/components/EchoProfileOverview.js.map +1 -0
  71. package/dist/components/EchoProfileRow.d.ts +60 -0
  72. package/dist/components/EchoProfileRow.d.ts.map +1 -0
  73. package/dist/components/EchoProfileRow.js +113 -0
  74. package/dist/components/EchoProfileRow.js.map +1 -0
  75. package/dist/components/EchoProfileSection.d.ts +29 -0
  76. package/dist/components/EchoProfileSection.d.ts.map +1 -0
  77. package/dist/components/EchoProfileSection.js +58 -0
  78. package/dist/components/EchoProfileSection.js.map +1 -0
  79. package/dist/components/EchoRewardNotificationBanner.d.ts +61 -0
  80. package/dist/components/EchoRewardNotificationBanner.d.ts.map +1 -0
  81. package/dist/components/EchoRewardNotificationBanner.js +272 -0
  82. package/dist/components/EchoRewardNotificationBanner.js.map +1 -0
  83. package/dist/components/EchoSettingsRow.d.ts +24 -0
  84. package/dist/components/EchoSettingsRow.d.ts.map +1 -0
  85. package/dist/components/EchoSettingsRow.js +84 -0
  86. package/dist/components/EchoSettingsRow.js.map +1 -0
  87. package/dist/components/EchoSettingsSection.d.ts +16 -0
  88. package/dist/components/EchoSettingsSection.d.ts.map +1 -0
  89. package/dist/components/EchoSettingsSection.js +48 -0
  90. package/dist/components/EchoSettingsSection.js.map +1 -0
  91. package/dist/components/EchoSignOutButton.d.ts +28 -0
  92. package/dist/components/EchoSignOutButton.d.ts.map +1 -0
  93. package/dist/components/EchoSignOutButton.js +67 -0
  94. package/dist/components/EchoSignOutButton.js.map +1 -0
  95. package/dist/components/EchoSuccessBanner.d.ts +17 -0
  96. package/dist/components/EchoSuccessBanner.d.ts.map +1 -0
  97. package/dist/components/EchoSuccessBanner.js +48 -0
  98. package/dist/components/EchoSuccessBanner.js.map +1 -0
  99. package/dist/components/EchoSyncPanel.d.ts +165 -0
  100. package/dist/components/EchoSyncPanel.d.ts.map +1 -0
  101. package/dist/components/EchoSyncPanel.js +913 -0
  102. package/dist/components/EchoSyncPanel.js.map +1 -0
  103. package/dist/components/EchoSyncPromptModal.d.ts +87 -0
  104. package/dist/components/EchoSyncPromptModal.d.ts.map +1 -0
  105. package/dist/components/EchoSyncPromptModal.js +351 -0
  106. package/dist/components/EchoSyncPromptModal.js.map +1 -0
  107. package/dist/components/EchoTitlePicker.d.ts +72 -0
  108. package/dist/components/EchoTitlePicker.d.ts.map +1 -0
  109. package/dist/components/EchoTitlePicker.js +487 -0
  110. package/dist/components/EchoTitlePicker.js.map +1 -0
  111. package/dist/components/EchoVerificationCodeInput.d.ts +40 -0
  112. package/dist/components/EchoVerificationCodeInput.d.ts.map +1 -0
  113. package/dist/components/EchoVerificationCodeInput.js +140 -0
  114. package/dist/components/EchoVerificationCodeInput.js.map +1 -0
  115. package/dist/components/EchoWelcome.d.ts +44 -0
  116. package/dist/components/EchoWelcome.d.ts.map +1 -0
  117. package/dist/components/EchoWelcome.js +289 -0
  118. package/dist/components/EchoWelcome.js.map +1 -0
  119. package/dist/components/EchoWhyBecomeAnEchoModal.d.ts +34 -0
  120. package/dist/components/EchoWhyBecomeAnEchoModal.d.ts.map +1 -0
  121. package/dist/components/EchoWhyBecomeAnEchoModal.js +321 -0
  122. package/dist/components/EchoWhyBecomeAnEchoModal.js.map +1 -0
  123. package/dist/components/EchoformInfoButton.d.ts +27 -0
  124. package/dist/components/EchoformInfoButton.d.ts.map +1 -0
  125. package/dist/components/EchoformInfoButton.js +60 -0
  126. package/dist/components/EchoformInfoButton.js.map +1 -0
  127. package/dist/components/EchoformInfoModal.d.ts +63 -0
  128. package/dist/components/EchoformInfoModal.d.ts.map +1 -0
  129. package/dist/components/EchoformInfoModal.js +347 -0
  130. package/dist/components/EchoformInfoModal.js.map +1 -0
  131. package/dist/echoColors.d.ts +58 -0
  132. package/dist/echoColors.d.ts.map +1 -0
  133. package/dist/echoColors.js +94 -0
  134. package/dist/echoColors.js.map +1 -0
  135. package/dist/index.d.ts +64 -3
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +71 -4
  138. package/dist/index.js.map +1 -1
  139. package/dist/titleRarity.d.ts +5 -0
  140. package/dist/titleRarity.d.ts.map +1 -1
  141. package/dist/titleRarity.js +13 -0
  142. package/dist/titleRarity.js.map +1 -1
  143. package/package.json +2 -3
  144. package/dist/components/EchoUITest.d.ts +0 -14
  145. package/dist/components/EchoUITest.d.ts.map +0 -1
  146. package/dist/components/EchoUITest.js +0 -53
  147. package/dist/components/EchoUITest.js.map +0 -1
@@ -0,0 +1,487 @@
1
+ "use strict";
2
+ /**
3
+ * EchoTitlePicker
4
+ *
5
+ * Presentation-only modal for selecting or clearing an Echo Title.
6
+ * Extracted from the Echo UI Reference TitlePicker.
7
+ *
8
+ * HIDDEN COLLECTION PHILOSOPHY
9
+ * ─────────────────────────────
10
+ * Only Titles the user has already earned appear.
11
+ * No locked placeholders, no progress bars, no hints, no counts.
12
+ *
13
+ * DYNAMIC COLLECTION FILTERS
14
+ * ──────────────────────────
15
+ * Filters are generated from the owned Title list — no hardcoded app names:
16
+ *
17
+ * "All" → shows every owned Title.
18
+ * "Echo Profile" → shows Titles whose app_key is null (platform-wide,
19
+ * EchoBrain-level Titles not tied to any individual app).
20
+ * <AppName> → one chip per distinct non-null app_key, using a
21
+ * title-cased label derived from app_key itself.
22
+ *
23
+ * RARITY ORDERING
24
+ * ───────────────
25
+ * Common (0) → Rare (1) → Legendary (2) → Mythic (3)
26
+ * Within the same rarity: sort_order ascending, then display_name alphabetically.
27
+ *
28
+ * ACCESSIBILITY
29
+ * ─────────────
30
+ * • Modal heading announced on open.
31
+ * • Filter chips: button role, label, selected state.
32
+ * • Title rows: button role, label includes rarity, selected/disabled/busy state.
33
+ *
34
+ * No Expo Router, no safe-area hooks, no auth, no contexts, no services,
35
+ * no storage, no app-specific code.
36
+ * Canonical shared component for @echoform/echo-ui.
37
+ */
38
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
39
+ if (k2 === undefined) k2 = k;
40
+ var desc = Object.getOwnPropertyDescriptor(m, k);
41
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
42
+ desc = { enumerable: true, get: function() { return m[k]; } };
43
+ }
44
+ Object.defineProperty(o, k2, desc);
45
+ }) : (function(o, m, k, k2) {
46
+ if (k2 === undefined) k2 = k;
47
+ o[k2] = m[k];
48
+ }));
49
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
50
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
51
+ }) : function(o, v) {
52
+ o["default"] = v;
53
+ });
54
+ var __importStar = (this && this.__importStar) || (function () {
55
+ var ownKeys = function(o) {
56
+ ownKeys = Object.getOwnPropertyNames || function (o) {
57
+ var ar = [];
58
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
59
+ return ar;
60
+ };
61
+ return ownKeys(o);
62
+ };
63
+ return function (mod) {
64
+ if (mod && mod.__esModule) return mod;
65
+ var result = {};
66
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
67
+ __setModuleDefault(result, mod);
68
+ return result;
69
+ };
70
+ })();
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ exports.EchoTitlePicker = EchoTitlePicker;
73
+ const react_1 = __importStar(require("react"));
74
+ const react_native_1 = require("react-native");
75
+ const vector_icons_1 = require("@expo/vector-icons");
76
+ const titleRarity_1 = require("../titleRarity");
77
+ const theme_1 = require("../theme");
78
+ // ─────────────────────────────────────────────────────────────────────────────
79
+ // Rarity ordering
80
+ // ─────────────────────────────────────────────────────────────────────────────
81
+ const RARITY_RANK = {
82
+ common: 0,
83
+ rare: 1,
84
+ legendary: 2,
85
+ mythic: 3,
86
+ };
87
+ function sortTitles(titles) {
88
+ return [...titles].sort((a, b) => {
89
+ var _a, _b, _c, _d;
90
+ const rarityDiff = ((_a = RARITY_RANK[a.rarity]) !== null && _a !== void 0 ? _a : 0) - ((_b = RARITY_RANK[b.rarity]) !== null && _b !== void 0 ? _b : 0);
91
+ if (rarityDiff !== 0)
92
+ return rarityDiff;
93
+ const orderDiff = ((_c = a.sort_order) !== null && _c !== void 0 ? _c : 0) - ((_d = b.sort_order) !== null && _d !== void 0 ? _d : 0);
94
+ if (orderDiff !== 0)
95
+ return orderDiff;
96
+ return a.display_name.localeCompare(b.display_name);
97
+ });
98
+ }
99
+ function appKeyToLabel(appKey) {
100
+ return appKey
101
+ .replace(/_/g, ' ')
102
+ .replace(/-/g, ' ')
103
+ .replace(/\b\w/g, c => c.toUpperCase())
104
+ .trim();
105
+ }
106
+ function buildFilters(titles) {
107
+ if (titles.length === 0)
108
+ return [];
109
+ const filters = [{ key: '__all__', label: 'All' }];
110
+ const hasEchoProfile = titles.some(t => t.app_key === null);
111
+ if (hasEchoProfile) {
112
+ filters.push({ key: '__echo_profile__', label: 'Echo Profile' });
113
+ }
114
+ const appMap = new Map();
115
+ for (const title of titles) {
116
+ if (title.app_key === null)
117
+ continue;
118
+ if (appMap.has(title.app_key))
119
+ continue;
120
+ appMap.set(title.app_key, appKeyToLabel(title.app_key));
121
+ }
122
+ const sortedApps = Array.from(appMap.entries()).sort(([, a], [, b]) => a.localeCompare(b));
123
+ for (const [appKey, label] of sortedApps) {
124
+ filters.push({ key: appKey, label });
125
+ }
126
+ if (filters.length <= 1)
127
+ return [];
128
+ return filters;
129
+ }
130
+ function applyFilter(titles, filterKey) {
131
+ if (filterKey === '__all__')
132
+ return titles;
133
+ if (filterKey === '__echo_profile__')
134
+ return titles.filter(t => t.app_key === null);
135
+ return titles.filter(t => t.app_key === filterKey);
136
+ }
137
+ // ─────────────────────────────────────────────────────────────────────────────
138
+ // Rarity badge style helpers
139
+ // ─────────────────────────────────────────────────────────────────────────────
140
+ function rarityBg(rarity) {
141
+ switch (rarity) {
142
+ case 'legendary': return 'rgba(255,107,0,0.12)';
143
+ case 'mythic': return 'rgba(255,215,0,0.12)';
144
+ default: return (0, titleRarity_1.rarityColor)(rarity) + '18';
145
+ }
146
+ }
147
+ function rarityBorder(rarity) {
148
+ switch (rarity) {
149
+ case 'legendary': return 'rgba(255,107,0,0.45)';
150
+ case 'mythic': return 'rgba(255,215,0,0.45)';
151
+ default: return (0, titleRarity_1.rarityColor)(rarity) + '66';
152
+ }
153
+ }
154
+ // ─────────────────────────────────────────────────────────────────────────────
155
+ // Component
156
+ // ─────────────────────────────────────────────────────────────────────────────
157
+ function EchoTitlePicker({ visible, titles, loading, error, onClose, onSelect, savingId, onRetry, topInset = 0, bottomInset = 0, }) {
158
+ const isSaving = savingId !== null;
159
+ const filters = (0, react_1.useMemo)(() => buildFilters(titles), [titles]);
160
+ const [activeFilter, setActiveFilter] = (0, react_1.useState)('__all__');
161
+ (0, react_1.useEffect)(() => {
162
+ if (filters.length > 0 && !filters.some(f => f.key === activeFilter)) {
163
+ setActiveFilter('__all__');
164
+ }
165
+ }, [filters, activeFilter]);
166
+ const sortedTitles = (0, react_1.useMemo)(() => sortTitles(titles), [titles]);
167
+ const filteredTitles = (0, react_1.useMemo)(() => applyFilter(sortedTitles, activeFilter), [sortedTitles, activeFilter]);
168
+ const handleSelect = (0, react_1.useCallback)((titleId) => {
169
+ void onSelect(titleId);
170
+ }, [onSelect]);
171
+ const handleFilterPress = (0, react_1.useCallback)((key) => {
172
+ setActiveFilter(key);
173
+ }, []);
174
+ return (<react_native_1.Modal visible={visible} animationType="slide" presentationStyle={react_native_1.Platform.OS === 'ios' ? 'pageSheet' : 'fullScreen'} onRequestClose={onClose} accessibilityViewIsModal>
175
+ <react_native_1.View style={[styles.root, { paddingTop: topInset || theme_1.SPACING.xl }]}>
176
+ {/* ── Header ─────────────────────────────────────────────────────── */}
177
+ <react_native_1.View style={styles.header}>
178
+ <react_native_1.Text style={styles.heading} accessibilityRole="header">
179
+ Choose Echo Title
180
+ </react_native_1.Text>
181
+ <react_native_1.Pressable onPress={onClose} disabled={isSaving} style={({ pressed }) => [styles.closeBtn, pressed ? { opacity: 0.7 } : null]} accessibilityLabel="Close Echo Title picker" accessibilityRole="button" hitSlop={8}>
182
+ <vector_icons_1.MaterialIcons name="close" size={22} color={theme_1.COLORS.textSecondary}/>
183
+ </react_native_1.Pressable>
184
+ </react_native_1.View>
185
+
186
+ {/* ── Collection filter chips ──────────────────────────────────────
187
+ Only shown when the user owns Titles from 2+ collections.
188
+ Chips are derived entirely from the owned Title list. */}
189
+ {!loading && !error && filters.length > 0 ? (<react_native_1.View style={styles.filterBarOuter} accessible={false}>
190
+ <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.filterBarContent} keyboardShouldPersistTaps="handled">
191
+ {filters.map(f => {
192
+ const isSelected = f.key === activeFilter;
193
+ return (<react_native_1.Pressable key={f.key} onPress={() => handleFilterPress(f.key)} style={({ pressed }) => [
194
+ styles.filterChip,
195
+ isSelected ? styles.filterChipActive : null,
196
+ (pressed && !isSelected) ? styles.filterChipPressed : null,
197
+ ]} accessibilityRole="button" accessibilityLabel={f.label} accessibilityHint={isSelected
198
+ ? `Currently showing ${f.label} Titles`
199
+ : `Show only ${f.label} Titles`} accessibilityState={{ selected: isSelected }}>
200
+ <react_native_1.Text style={[
201
+ styles.filterChipText,
202
+ isSelected ? styles.filterChipTextActive : null,
203
+ ]} importantForAccessibility="no" accessibilityElementsHidden>
204
+ {f.label}
205
+ </react_native_1.Text>
206
+ </react_native_1.Pressable>);
207
+ })}
208
+ </react_native_1.ScrollView>
209
+ </react_native_1.View>) : null}
210
+
211
+ {/* ── Body ───────────────────────────────────────────────────────── */}
212
+ {loading ? (<react_native_1.View style={styles.centerState}>
213
+ <react_native_1.ActivityIndicator size="large" color={theme_1.COLORS.neonPurple}/>
214
+ <react_native_1.Text style={styles.centerStateText} accessibilityLiveRegion="polite" accessibilityLabel="Loading your Echo Titles">
215
+ Loading your Echo Titles…
216
+ </react_native_1.Text>
217
+ </react_native_1.View>) : error ? (<react_native_1.View style={styles.centerState} accessible accessibilityRole="alert" accessibilityLabel={`Error loading Echo Titles: ${error}`}>
218
+ <vector_icons_1.MaterialIcons name="error-outline" size={44} color={theme_1.COLORS.error}/>
219
+ <react_native_1.Text style={styles.errorText}>{error}</react_native_1.Text>
220
+ <react_native_1.Pressable onPress={onRetry} style={({ pressed }) => [styles.retryBtn, pressed ? { opacity: 0.75 } : null]} accessibilityLabel="Retry loading Echo Titles" accessibilityRole="button">
221
+ <vector_icons_1.MaterialIcons name="refresh" size={18} color={theme_1.COLORS.neonPurple}/>
222
+ <react_native_1.Text style={styles.retryBtnText}>Try Again</react_native_1.Text>
223
+ </react_native_1.Pressable>
224
+ </react_native_1.View>) : titles.length === 0 ? (<react_native_1.View style={styles.centerState} accessible accessibilityRole="text" accessibilityLabel="You have not unlocked any Echo Titles yet. Echo Titles are earned through your journey in Echoform.">
225
+ <vector_icons_1.MaterialIcons name="military-tech" size={52} color={theme_1.COLORS.textMuted}/>
226
+ <react_native_1.Text style={styles.emptyTitle}>No Echo Titles Yet</react_native_1.Text>
227
+ <react_native_1.Text style={styles.emptyBody}>
228
+ Echo Titles are earned through your journey in Echoform.
229
+ </react_native_1.Text>
230
+ </react_native_1.View>) : filteredTitles.length === 0 ? (<react_native_1.View style={styles.centerState} accessible accessibilityRole="text" accessibilityLabel="No Titles in this collection.">
231
+ <vector_icons_1.MaterialIcons name="filter-none" size={44} color={theme_1.COLORS.textMuted}/>
232
+ <react_native_1.Text style={styles.emptyTitle}>No Titles Here</react_native_1.Text>
233
+ <react_native_1.Text style={styles.emptyBody}>
234
+ You do not own any Titles in this collection.
235
+ </react_native_1.Text>
236
+ </react_native_1.View>) : (<react_native_1.ScrollView contentContainerStyle={[
237
+ styles.scroll,
238
+ { paddingBottom: bottomInset + 40 },
239
+ ]} showsVerticalScrollIndicator={false}>
240
+ {/* No Title — clear option */}
241
+ <NoTitleRow isSaving={savingId === 'clear'} disabled={isSaving} onPress={() => handleSelect(null)}/>
242
+
243
+ {/* Sorted + filtered owned Titles */}
244
+ {filteredTitles.map(title => (<TitleRow key={title.title_id} title={title} isSaving={savingId === title.title_id} disabled={isSaving} onPress={() => handleSelect(title.title_id)}/>))}
245
+ </react_native_1.ScrollView>)}
246
+ </react_native_1.View>
247
+ </react_native_1.Modal>);
248
+ }
249
+ function TitleRow({ title, isSaving, disabled, onPress }) {
250
+ const isActive = title.is_currently_active;
251
+ const color = (0, titleRarity_1.rarityColor)(title.rarity);
252
+ const label = (0, titleRarity_1.rarityLabel)(title.rarity);
253
+ return (<react_native_1.Pressable onPress={disabled ? undefined : onPress} disabled={disabled} style={({ pressed }) => [
254
+ styles.titleRow,
255
+ isActive ? [styles.titleRowActive, { borderColor: color + '88', shadowColor: color }] : null,
256
+ (pressed && !disabled) ? styles.titleRowPressed : null,
257
+ ]} accessibilityRole="button" accessibilityLabel={`${title.display_name}, ${label}${isActive ? ', currently equipped' : ''}`} accessibilityHint={isActive ? 'Currently equipped' : 'Double tap to equip this Echo Title'} accessibilityState={{ selected: isActive, disabled, busy: isSaving }}>
258
+ <react_native_1.View style={styles.titleContent}>
259
+ <react_native_1.Text style={[styles.titleName, isActive ? { color } : null]} numberOfLines={2} importantForAccessibility="no" accessibilityElementsHidden>
260
+ {title.display_name}
261
+ </react_native_1.Text>
262
+ <react_native_1.View style={[
263
+ styles.rarityBadge,
264
+ { backgroundColor: rarityBg(title.rarity), borderColor: rarityBorder(title.rarity) },
265
+ ]} importantForAccessibility="no" accessibilityElementsHidden>
266
+ <react_native_1.Text style={[styles.rarityText, { color }]}>{label}</react_native_1.Text>
267
+ </react_native_1.View>
268
+ </react_native_1.View>
269
+
270
+ <react_native_1.View style={styles.titleRowBadge} importantForAccessibility="no" accessibilityElementsHidden>
271
+ {isSaving ? (<react_native_1.ActivityIndicator size="small" color={color}/>) : isActive ? (<vector_icons_1.MaterialIcons name="check-circle" size={20} color={color}/>) : null}
272
+ </react_native_1.View>
273
+ </react_native_1.Pressable>);
274
+ }
275
+ function NoTitleRow({ isSaving, disabled, onPress }) {
276
+ return (<react_native_1.Pressable onPress={disabled ? undefined : onPress} disabled={disabled} style={({ pressed }) => [
277
+ styles.noTitleRow,
278
+ (pressed && !disabled) ? styles.titleRowPressed : null,
279
+ ]} accessibilityRole="button" accessibilityLabel="Remove active Echo Title" accessibilityHint="Clears the Echo Title from your Echo Profile" accessibilityState={{ disabled, busy: isSaving }}>
280
+ {isSaving ? (<react_native_1.ActivityIndicator size="small" color={theme_1.COLORS.textMuted}/>) : (<vector_icons_1.MaterialIcons name="do-not-disturb" size={20} color={theme_1.COLORS.textMuted}/>)}
281
+ <react_native_1.Text style={styles.noTitleText}>No Title</react_native_1.Text>
282
+ </react_native_1.Pressable>);
283
+ }
284
+ // ─────────────────────────────────────────────────────────────────────────────
285
+ // Styles
286
+ // ─────────────────────────────────────────────────────────────────────────────
287
+ const styles = react_native_1.StyleSheet.create({
288
+ root: {
289
+ flex: 1,
290
+ backgroundColor: theme_1.COLORS.bg,
291
+ },
292
+ // Header
293
+ header: {
294
+ flexDirection: 'row',
295
+ alignItems: 'center',
296
+ justifyContent: 'space-between',
297
+ paddingHorizontal: theme_1.SPACING.lg,
298
+ paddingBottom: theme_1.SPACING.md,
299
+ borderBottomWidth: 1,
300
+ borderBottomColor: theme_1.COLORS.border,
301
+ },
302
+ heading: {
303
+ fontSize: theme_1.FONTS.xl,
304
+ fontWeight: '800',
305
+ color: theme_1.COLORS.neonPurple,
306
+ letterSpacing: 0.3,
307
+ },
308
+ closeBtn: {
309
+ width: 44,
310
+ height: 44,
311
+ borderRadius: 22,
312
+ backgroundColor: theme_1.COLORS.surfaceHigh,
313
+ alignItems: 'center',
314
+ justifyContent: 'center',
315
+ },
316
+ // Filter chips
317
+ filterBarOuter: {
318
+ borderBottomWidth: 1,
319
+ borderBottomColor: theme_1.COLORS.border,
320
+ minHeight: 54,
321
+ justifyContent: 'center',
322
+ },
323
+ filterBarContent: {
324
+ flexDirection: 'row',
325
+ alignItems: 'center',
326
+ paddingHorizontal: theme_1.SPACING.lg,
327
+ paddingVertical: theme_1.SPACING.sm,
328
+ gap: theme_1.SPACING.sm,
329
+ },
330
+ filterChip: {
331
+ height: 36,
332
+ borderRadius: 18,
333
+ paddingHorizontal: theme_1.SPACING.md,
334
+ paddingVertical: theme_1.SPACING.xs,
335
+ backgroundColor: theme_1.COLORS.surfaceHigh,
336
+ borderWidth: 1,
337
+ borderColor: theme_1.COLORS.border,
338
+ alignItems: 'center',
339
+ justifyContent: 'center',
340
+ minWidth: 44,
341
+ },
342
+ filterChipActive: {
343
+ backgroundColor: theme_1.COLORS.neonPurple + '25',
344
+ borderColor: theme_1.COLORS.neonPurple + 'BB',
345
+ },
346
+ filterChipPressed: {
347
+ opacity: 0.7,
348
+ },
349
+ filterChipText: {
350
+ fontSize: theme_1.FONTS.sm,
351
+ fontWeight: '600',
352
+ color: theme_1.COLORS.textSecondary,
353
+ },
354
+ filterChipTextActive: {
355
+ color: theme_1.COLORS.neonPurple,
356
+ },
357
+ // Center states
358
+ centerState: {
359
+ flex: 1,
360
+ alignItems: 'center',
361
+ justifyContent: 'center',
362
+ gap: theme_1.SPACING.md,
363
+ padding: theme_1.SPACING.xl,
364
+ },
365
+ centerStateText: {
366
+ fontSize: theme_1.FONTS.sm,
367
+ color: theme_1.COLORS.textSecondary,
368
+ textAlign: 'center',
369
+ },
370
+ errorText: {
371
+ fontSize: theme_1.FONTS.sm,
372
+ color: theme_1.COLORS.error,
373
+ textAlign: 'center',
374
+ lineHeight: 20,
375
+ },
376
+ retryBtn: {
377
+ flexDirection: 'row',
378
+ alignItems: 'center',
379
+ gap: theme_1.SPACING.sm,
380
+ backgroundColor: theme_1.COLORS.neonPurple + '15',
381
+ borderRadius: theme_1.RADIUS.lg,
382
+ borderWidth: 1,
383
+ borderColor: theme_1.COLORS.neonPurple + '55',
384
+ paddingVertical: theme_1.SPACING.sm,
385
+ paddingHorizontal: theme_1.SPACING.lg,
386
+ minHeight: 44,
387
+ },
388
+ retryBtnText: {
389
+ fontSize: theme_1.FONTS.sm,
390
+ fontWeight: '700',
391
+ color: theme_1.COLORS.neonPurple,
392
+ },
393
+ emptyTitle: {
394
+ fontSize: theme_1.FONTS.md,
395
+ fontWeight: '700',
396
+ color: theme_1.COLORS.textSecondary,
397
+ textAlign: 'center',
398
+ },
399
+ emptyBody: {
400
+ fontSize: theme_1.FONTS.sm,
401
+ color: theme_1.COLORS.textMuted,
402
+ textAlign: 'center',
403
+ lineHeight: 20,
404
+ maxWidth: 260,
405
+ },
406
+ // Scroll
407
+ scroll: {
408
+ paddingHorizontal: theme_1.SPACING.lg,
409
+ paddingTop: theme_1.SPACING.lg,
410
+ gap: theme_1.SPACING.sm,
411
+ },
412
+ // Title row
413
+ titleRow: {
414
+ alignItems: 'center',
415
+ justifyContent: 'center',
416
+ backgroundColor: theme_1.COLORS.surface,
417
+ borderRadius: theme_1.RADIUS.lg,
418
+ borderWidth: 1,
419
+ borderColor: theme_1.COLORS.border,
420
+ minHeight: 68,
421
+ },
422
+ titleRowActive: {
423
+ shadowOffset: { width: 0, height: 0 },
424
+ shadowOpacity: 0.25,
425
+ shadowRadius: 8,
426
+ elevation: 4,
427
+ },
428
+ titleRowPressed: {
429
+ opacity: 0.75,
430
+ },
431
+ titleContent: {
432
+ alignItems: 'center',
433
+ gap: theme_1.SPACING.xs,
434
+ paddingVertical: theme_1.SPACING.md,
435
+ paddingHorizontal: theme_1.SPACING.xl,
436
+ width: '100%',
437
+ },
438
+ titleName: {
439
+ fontSize: theme_1.FONTS.md,
440
+ fontWeight: '700',
441
+ color: theme_1.COLORS.textPrimary,
442
+ letterSpacing: 0.2,
443
+ textAlign: 'center',
444
+ },
445
+ rarityBadge: {
446
+ alignSelf: 'center',
447
+ borderRadius: theme_1.RADIUS.full,
448
+ borderWidth: 1,
449
+ paddingVertical: 3,
450
+ paddingHorizontal: theme_1.SPACING.sm,
451
+ },
452
+ rarityText: {
453
+ fontSize: theme_1.FONTS.xs,
454
+ fontWeight: '700',
455
+ letterSpacing: 0.5,
456
+ textTransform: 'uppercase',
457
+ },
458
+ titleRowBadge: {
459
+ position: 'absolute',
460
+ top: theme_1.SPACING.sm,
461
+ right: theme_1.SPACING.sm,
462
+ width: 24,
463
+ height: 24,
464
+ alignItems: 'center',
465
+ justifyContent: 'center',
466
+ },
467
+ // No Title clear row
468
+ noTitleRow: {
469
+ flexDirection: 'row',
470
+ alignItems: 'center',
471
+ gap: theme_1.SPACING.sm,
472
+ backgroundColor: theme_1.COLORS.surfaceHigh,
473
+ borderRadius: theme_1.RADIUS.lg,
474
+ borderWidth: 1,
475
+ borderColor: theme_1.COLORS.border,
476
+ paddingVertical: theme_1.SPACING.md,
477
+ paddingHorizontal: theme_1.SPACING.lg,
478
+ minHeight: 52,
479
+ alignSelf: 'flex-start',
480
+ },
481
+ noTitleText: {
482
+ fontSize: theme_1.FONTS.sm,
483
+ color: theme_1.COLORS.textMuted,
484
+ fontWeight: '600',
485
+ },
486
+ });
487
+ //# sourceMappingURL=EchoTitlePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoTitlePicker.js","sourceRoot":"","sources":["../../src/components/EchoTitlePicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * EchoVerificationCodeInput
3
+ *
4
+ * Reusable in-app verification code input for Echo Profile flows.
5
+ * Extracted verbatim from components/ui/VerificationCodeInput.tsx.
6
+ *
7
+ * Design decisions:
8
+ * - ONE normal TextInput — full copy/paste support, no six-box fragmentation
9
+ * - Numeric soft keyboard on mobile
10
+ * - Auto-strips non-digit characters (spaces, hyphens, dashes)
11
+ * - Exposes a single accessible "Verification Code" label
12
+ * - Does NOT auto-submit — the caller provides an explicit Verify button
13
+ *
14
+ * Accessibility:
15
+ * - accessibilityLabel: "Verification Code"
16
+ * - accessibilityHint: describes that the code was emailed
17
+ * - Accepts pasted codes (React Native handles this natively on TextInput)
18
+ *
19
+ * No Expo Router, no auth, no contexts, no services, no app-specific code.
20
+ * Canonical shared component for @echoform/echo-ui.
21
+ */
22
+ import React from 'react';
23
+ export type EchoVerificationCodeInputRef = {
24
+ focus: () => void;
25
+ clear: () => void;
26
+ };
27
+ export type EchoVerificationCodeInputProps = {
28
+ /** Current raw (already-sanitized) value — digits only. */
29
+ value: string;
30
+ /** Called with a sanitized (digits-only) string on every change. */
31
+ onChangeCode: (sanitized: string) => void;
32
+ /** Email address shown in the accessibility hint and sub-label. */
33
+ email?: string;
34
+ /** Whether the input is disabled (e.g. while verifying). */
35
+ disabled?: boolean;
36
+ /** Callback when the user presses the keyboard's submit/go action. */
37
+ onSubmitEditing?: () => void;
38
+ };
39
+ export declare const EchoVerificationCodeInput: React.ForwardRefExoticComponent<EchoVerificationCodeInputProps & React.RefAttributes<EchoVerificationCodeInputRef>>;
40
+ //# sourceMappingURL=EchoVerificationCodeInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoVerificationCodeInput.d.ts","sourceRoot":"","sources":["../../src/components/EchoVerificationCodeInput.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAkD,MAAM,OAAO,CAAC;AAQvE,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAcF,eAAO,MAAM,yBAAyB,qHA8DrC,CAAC"}