@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
+ * EchoColorPicker
4
+ *
5
+ * Presentation-only modal for selecting an Echo Profile accent color.
6
+ * Extracted from the Echo UI Reference EchoColorPickerModal.
7
+ *
8
+ * Renders all 15 approved Echo Colors as swatches in a grid.
9
+ * The current color is highlighted with a glow border, a colored label,
10
+ * and a checkmark badge (or saving spinner while saving).
11
+ *
12
+ * ACCESSIBILITY
13
+ * ─────────────
14
+ * • Modal heading announced on open.
15
+ * • Each swatch is a button with label, selected state, and busy state.
16
+ * • Current color summary row is an accessible text element.
17
+ *
18
+ * No Expo Router, no safe-area hooks, no auth, no contexts, no services,
19
+ * no storage, no app-specific code.
20
+ * Canonical shared component for @echoform/echo-ui.
21
+ */
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.EchoColorPicker = EchoColorPicker;
27
+ const react_1 = __importDefault(require("react"));
28
+ const react_native_1 = require("react-native");
29
+ const vector_icons_1 = require("@expo/vector-icons");
30
+ const echoColors_1 = require("../echoColors");
31
+ const theme_1 = require("../theme");
32
+ // ─────────────────────────────────────────────────────────────────────────────
33
+ // Component
34
+ // ─────────────────────────────────────────────────────────────────────────────
35
+ function EchoColorPicker({ visible, currentColor, saving, onClose, onSelect, topInset = 0, bottomInset = 0, }) {
36
+ var _a, _b, _c, _d;
37
+ return (<react_native_1.Modal visible={visible} animationType="slide" presentationStyle="pageSheet" onRequestClose={onClose} accessibilityViewIsModal>
38
+ <react_native_1.View style={[styles.root, { paddingTop: topInset || theme_1.SPACING.lg }]}>
39
+ {/* ── Header ─────────────────────────────────────────────────────── */}
40
+ <react_native_1.View style={styles.header}>
41
+ <react_native_1.Text style={styles.title} accessibilityRole="header">
42
+ Echo Color
43
+ </react_native_1.Text>
44
+ <react_native_1.Pressable onPress={onClose} hitSlop={8} style={({ pressed }) => (pressed ? { opacity: 0.7 } : undefined)} accessibilityLabel="Close Echo Color picker" accessibilityRole="button">
45
+ <vector_icons_1.MaterialIcons name="close" size={24} color={theme_1.COLORS.textSecondary}/>
46
+ </react_native_1.Pressable>
47
+ </react_native_1.View>
48
+
49
+ <react_native_1.ScrollView contentContainerStyle={[
50
+ styles.scroll,
51
+ { paddingBottom: bottomInset + 40 },
52
+ ]} showsVerticalScrollIndicator={false}>
53
+ {/* ── Description ──────────────────────────────────────────────── */}
54
+ <react_native_1.Text style={styles.description} accessible accessibilityRole="text">
55
+ Choose an accent color for your Echo Profile. It changes the outline
56
+ of your Echo Profile cards across the Echo ecosystem.
57
+ </react_native_1.Text>
58
+
59
+ {/* ── Swatch grid ──────────────────────────────────────────────── */}
60
+ <react_native_1.View style={styles.grid}>
61
+ {echoColors_1.ECHO_COLOR_PALETTE.map((entry) => {
62
+ const isSelected = entry.hex === currentColor;
63
+ return (<react_native_1.Pressable key={entry.hex} onPress={() => !saving && void onSelect(entry.hex)} disabled={saving} style={({ pressed }) => [
64
+ styles.swatch,
65
+ isSelected
66
+ ? { borderColor: entry.hex, borderWidth: 2.5 }
67
+ : { borderColor: entry.hex + '44', borderWidth: 1 },
68
+ pressed && !saving ? { opacity: 0.75 } : null,
69
+ saving ? { opacity: 0.6 } : null,
70
+ ]} accessibilityLabel={`${entry.label}${isSelected ? ', selected' : ''}`} accessibilityRole="button" accessibilityState={{ selected: isSelected, busy: saving && isSelected }} accessibilityHint={isSelected
71
+ ? 'This is your current Echo Color'
72
+ : `Set Echo Color to ${entry.label}`}>
73
+ {/* Color circle */}
74
+ <react_native_1.View style={[
75
+ styles.swatchCircle,
76
+ { backgroundColor: entry.hex },
77
+ isSelected
78
+ ? {
79
+ shadowColor: entry.hex,
80
+ shadowOpacity: 0.7,
81
+ shadowRadius: 8,
82
+ shadowOffset: { width: 0, height: 0 },
83
+ elevation: 4,
84
+ }
85
+ : null,
86
+ ]} importantForAccessibility="no" accessibilityElementsHidden/>
87
+
88
+ {/* Label */}
89
+ <react_native_1.Text style={[
90
+ styles.swatchLabel,
91
+ isSelected ? { color: entry.hex, fontWeight: '700' } : null,
92
+ ]} numberOfLines={1} importantForAccessibility="no" accessibilityElementsHidden>
93
+ {entry.label}
94
+ </react_native_1.Text>
95
+
96
+ {/* Selected checkmark / saving spinner */}
97
+ {isSelected ? (<react_native_1.View style={[styles.swatchCheck, { backgroundColor: entry.hex }]} importantForAccessibility="no" accessibilityElementsHidden>
98
+ {saving ? (<react_native_1.ActivityIndicator size="small" color={theme_1.COLORS.bg}/>) : (<vector_icons_1.MaterialIcons name="check" size={12} color={theme_1.COLORS.bg}/>)}
99
+ </react_native_1.View>) : null}
100
+ </react_native_1.Pressable>);
101
+ })}
102
+ </react_native_1.View>
103
+
104
+ {/* ── Current color summary ─────────────────────────────────────── */}
105
+ <react_native_1.View style={[styles.currentRow, { borderColor: currentColor + '44' }]} accessible accessibilityRole="text" accessibilityLabel={`Current Echo Color: ${(_b = (_a = echoColors_1.ECHO_COLOR_PALETTE.find(e => e.hex === currentColor)) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : currentColor}`}>
106
+ <react_native_1.View style={[styles.currentDot, { backgroundColor: currentColor }]} importantForAccessibility="no" accessibilityElementsHidden/>
107
+ <react_native_1.Text style={[styles.currentLabel, { color: currentColor }]} importantForAccessibility="no" accessibilityElementsHidden>
108
+ {(_d = (_c = echoColors_1.ECHO_COLOR_PALETTE.find(e => e.hex === currentColor)) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : currentColor}
109
+ </react_native_1.Text>
110
+ </react_native_1.View>
111
+ </react_native_1.ScrollView>
112
+ </react_native_1.View>
113
+ </react_native_1.Modal>);
114
+ }
115
+ // ─────────────────────────────────────────────────────────────────────────────
116
+ // Styles
117
+ // ─────────────────────────────────────────────────────────────────────────────
118
+ const styles = react_native_1.StyleSheet.create({
119
+ root: {
120
+ flex: 1,
121
+ backgroundColor: theme_1.COLORS.bg,
122
+ },
123
+ header: {
124
+ flexDirection: 'row',
125
+ alignItems: 'center',
126
+ justifyContent: 'space-between',
127
+ paddingHorizontal: theme_1.SPACING.lg,
128
+ paddingVertical: theme_1.SPACING.md,
129
+ borderBottomWidth: 1,
130
+ borderBottomColor: theme_1.COLORS.border,
131
+ },
132
+ title: {
133
+ fontSize: theme_1.FONTS.lg,
134
+ fontWeight: '700',
135
+ color: theme_1.COLORS.textPrimary,
136
+ },
137
+ scroll: {
138
+ padding: theme_1.SPACING.lg,
139
+ gap: theme_1.SPACING.xl,
140
+ },
141
+ description: {
142
+ fontSize: theme_1.FONTS.sm,
143
+ color: theme_1.COLORS.textSecondary,
144
+ lineHeight: 22,
145
+ marginBottom: theme_1.SPACING.sm,
146
+ },
147
+ grid: {
148
+ flexDirection: 'row',
149
+ flexWrap: 'wrap',
150
+ gap: theme_1.SPACING.md,
151
+ },
152
+ swatch: {
153
+ width: '29%',
154
+ alignItems: 'center',
155
+ gap: theme_1.SPACING.xs,
156
+ backgroundColor: theme_1.COLORS.surface,
157
+ borderRadius: theme_1.RADIUS.lg,
158
+ paddingVertical: theme_1.SPACING.md,
159
+ paddingHorizontal: theme_1.SPACING.sm,
160
+ minHeight: 80,
161
+ justifyContent: 'center',
162
+ position: 'relative',
163
+ },
164
+ swatchCircle: {
165
+ width: 36,
166
+ height: 36,
167
+ borderRadius: 18,
168
+ },
169
+ swatchLabel: {
170
+ fontSize: 11,
171
+ color: theme_1.COLORS.textSecondary,
172
+ fontWeight: '500',
173
+ textAlign: 'center',
174
+ },
175
+ swatchCheck: {
176
+ position: 'absolute',
177
+ top: 6,
178
+ right: 6,
179
+ width: 18,
180
+ height: 18,
181
+ borderRadius: 9,
182
+ alignItems: 'center',
183
+ justifyContent: 'center',
184
+ },
185
+ currentRow: {
186
+ flexDirection: 'row',
187
+ alignItems: 'center',
188
+ gap: theme_1.SPACING.sm,
189
+ borderRadius: theme_1.RADIUS.lg,
190
+ borderWidth: 1,
191
+ paddingVertical: theme_1.SPACING.md,
192
+ paddingHorizontal: theme_1.SPACING.lg,
193
+ marginTop: theme_1.SPACING.xs,
194
+ },
195
+ currentDot: {
196
+ width: 18,
197
+ height: 18,
198
+ borderRadius: 9,
199
+ },
200
+ currentLabel: {
201
+ fontSize: theme_1.FONTS.sm,
202
+ fontWeight: '700',
203
+ letterSpacing: 0.3,
204
+ },
205
+ });
206
+ //# sourceMappingURL=EchoColorPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoColorPicker.js","sourceRoot":"","sources":["../../src/components/EchoColorPicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * EchoConnectedAppsModal
3
+ *
4
+ * Presentation-only Connected Apps modal.
5
+ * Extracted from the Connected Apps modal in the Echo UI Reference account screen.
6
+ *
7
+ * Renders:
8
+ * • Page-sheet (iOS) / full-screen (other) modal
9
+ * • Centered "Connected Apps" header with close button and matching spacer
10
+ * • Loading, error (with retry), and empty states
11
+ * • List of connected apps with display name, date, check-circle icon,
12
+ * 52×52 icon wrapper, and row dividers
13
+ *
14
+ * HOST RESPONSIBILITIES
15
+ * ─────────────────────
16
+ * • Fetching the connected apps list (onRetry triggers a re-fetch)
17
+ * • Opening/closing modal state
18
+ * • Safe-area insets (topInset / bottomInset)
19
+ *
20
+ * No connectedAppsService, no auth, no Router, no app-specific code.
21
+ * Canonical shared component for @echoform/echo-ui.
22
+ */
23
+ import React from 'react';
24
+ export type EchoConnectedApp = {
25
+ appKey: string;
26
+ displayName: string;
27
+ firstUsedAt: string;
28
+ };
29
+ export type EchoConnectedAppsModalProps = {
30
+ visible: boolean;
31
+ apps: EchoConnectedApp[];
32
+ loading: boolean;
33
+ error: string | null;
34
+ onClose: () => void;
35
+ onRetry: () => void;
36
+ topInset?: number;
37
+ bottomInset?: number;
38
+ };
39
+ export declare function EchoConnectedAppsModal({ visible, apps, loading, error, onClose, onRetry, topInset, bottomInset, }: EchoConnectedAppsModalProps): React.JSX.Element;
40
+ //# sourceMappingURL=EchoConnectedAppsModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoConnectedAppsModal.d.ts","sourceRoot":"","sources":["../../src/components/EchoConnectedAppsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAkB1B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAQ,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;IACrB,WAAW,EAAG,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAO,OAAO,CAAC;IACtB,IAAI,EAAU,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAO,OAAO,CAAC;IACtB,KAAK,EAAS,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAO,MAAM,IAAI,CAAC;IACzB,OAAO,EAAO,MAAM,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAK,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAsBF,wBAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAe,EACf,WAAe,GAChB,EAAE,2BAA2B,qBA4G7B"}
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+ /**
3
+ * EchoConnectedAppsModal
4
+ *
5
+ * Presentation-only Connected Apps modal.
6
+ * Extracted from the Connected Apps modal in the Echo UI Reference account screen.
7
+ *
8
+ * Renders:
9
+ * • Page-sheet (iOS) / full-screen (other) modal
10
+ * • Centered "Connected Apps" header with close button and matching spacer
11
+ * • Loading, error (with retry), and empty states
12
+ * • List of connected apps with display name, date, check-circle icon,
13
+ * 52×52 icon wrapper, and row dividers
14
+ *
15
+ * HOST RESPONSIBILITIES
16
+ * ─────────────────────
17
+ * • Fetching the connected apps list (onRetry triggers a re-fetch)
18
+ * • Opening/closing modal state
19
+ * • Safe-area insets (topInset / bottomInset)
20
+ *
21
+ * No connectedAppsService, no auth, no Router, no app-specific code.
22
+ * Canonical shared component for @echoform/echo-ui.
23
+ */
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.EchoConnectedAppsModal = EchoConnectedAppsModal;
29
+ const react_1 = __importDefault(require("react"));
30
+ const react_native_1 = require("react-native");
31
+ const vector_icons_1 = require("@expo/vector-icons");
32
+ const theme_1 = require("../theme");
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+ // Package-local date formatter
35
+ // ─────────────────────────────────────────────────────────────────────────────
36
+ function formatDate(iso) {
37
+ try {
38
+ return new Date(iso).toLocaleDateString(undefined, {
39
+ day: 'numeric',
40
+ month: 'long',
41
+ year: 'numeric',
42
+ });
43
+ }
44
+ catch (_a) {
45
+ return iso;
46
+ }
47
+ }
48
+ // ─────────────────────────────────────────────────────────────────────────────
49
+ // Component
50
+ // ─────────────────────────────────────────────────────────────────────────────
51
+ function EchoConnectedAppsModal({ visible, apps, loading, error, onClose, onRetry, topInset = 0, bottomInset = 0, }) {
52
+ return (<react_native_1.Modal visible={visible} animationType="slide" presentationStyle={react_native_1.Platform.OS === 'ios' ? 'pageSheet' : 'fullScreen'} onRequestClose={onClose} accessibilityViewIsModal>
53
+ <react_native_1.View style={[styles.root, { paddingTop: topInset || theme_1.SPACING.xl }]}>
54
+
55
+ {/* Header */}
56
+ <react_native_1.View style={styles.header} accessibilityRole="header">
57
+ <react_native_1.Pressable onPress={onClose} style={({ pressed }) => [styles.headerSlot, pressed && { opacity: 0.7 }]} accessibilityLabel="Close Connected Apps" accessibilityRole="button" hitSlop={8}>
58
+ <vector_icons_1.MaterialIcons name="close" size={24} color={theme_1.COLORS.textPrimary}/>
59
+ </react_native_1.Pressable>
60
+ <react_native_1.Text style={styles.headerTitle}>Connected Apps</react_native_1.Text>
61
+ {/* Matching right spacer so title remains centered */}
62
+ <react_native_1.View style={styles.headerSlot}/>
63
+ </react_native_1.View>
64
+
65
+ {/* Body */}
66
+ {loading ? (<react_native_1.View style={styles.centerContent}>
67
+ <react_native_1.ActivityIndicator size="large" color={theme_1.COLORS.neonCyan}/>
68
+ <react_native_1.Text style={styles.statusText} accessibilityLiveRegion="polite">
69
+ Loading connected apps…
70
+ </react_native_1.Text>
71
+ </react_native_1.View>) : error ? (<react_native_1.View style={styles.centerContent}>
72
+ <vector_icons_1.MaterialIcons name="error-outline" size={44} color={theme_1.COLORS.error}/>
73
+ <react_native_1.Text style={[styles.statusText, { color: theme_1.COLORS.error, textAlign: 'center' }]}>
74
+ {error}
75
+ </react_native_1.Text>
76
+ <react_native_1.Pressable onPress={onRetry} style={({ pressed }) => [
77
+ styles.retryBtn,
78
+ pressed && { opacity: 0.75 },
79
+ ]} accessibilityLabel="Retry loading connected apps" accessibilityRole="button">
80
+ <react_native_1.Text style={styles.retryBtnText}>Try Again</react_native_1.Text>
81
+ </react_native_1.Pressable>
82
+ </react_native_1.View>) : apps.length === 0 ? (<react_native_1.View style={styles.centerContent}>
83
+ <vector_icons_1.MaterialIcons name="apps" size={52} color={theme_1.COLORS.textMuted}/>
84
+ <react_native_1.Text style={[styles.statusText, { textAlign: 'center' }]}>
85
+ No connected apps yet.
86
+ </react_native_1.Text>
87
+ </react_native_1.View>) : (<react_native_1.ScrollView contentContainerStyle={[
88
+ styles.scroll,
89
+ { paddingBottom: bottomInset + 40 },
90
+ ]} showsVerticalScrollIndicator={false}>
91
+ <react_native_1.View style={styles.listCard}>
92
+ {apps.map((app, idx) => (<react_native_1.View key={app.appKey}>
93
+ {idx > 0 ? <react_native_1.View style={styles.rowDivider}/> : null}
94
+ <react_native_1.View style={styles.row} accessible accessibilityRole="text" accessibilityLabel={`${app.displayName}. Connected ${formatDate(app.firstUsedAt)}.`}>
95
+ <react_native_1.View style={styles.iconWrap} importantForAccessibility="no" accessibilityElementsHidden>
96
+ <vector_icons_1.MaterialIcons name="check-circle" size={18} color={theme_1.COLORS.neonCyan} importantForAccessibility="no" accessibilityElementsHidden/>
97
+ </react_native_1.View>
98
+ <react_native_1.View style={{ flex: 1 }}>
99
+ <react_native_1.Text style={styles.appName} importantForAccessibility="no">
100
+ {app.displayName}
101
+ </react_native_1.Text>
102
+ <react_native_1.Text style={styles.appDate} importantForAccessibility="no">
103
+ {'Connected ' + formatDate(app.firstUsedAt)}
104
+ </react_native_1.Text>
105
+ </react_native_1.View>
106
+ </react_native_1.View>
107
+ </react_native_1.View>))}
108
+ </react_native_1.View>
109
+ </react_native_1.ScrollView>)}
110
+ </react_native_1.View>
111
+ </react_native_1.Modal>);
112
+ }
113
+ // ─────────────────────────────────────────────────────────────────────────────
114
+ // Styles
115
+ // ─────────────────────────────────────────────────────────────────────────────
116
+ const styles = react_native_1.StyleSheet.create({
117
+ root: {
118
+ flex: 1,
119
+ backgroundColor: theme_1.COLORS.bg,
120
+ },
121
+ // Header
122
+ header: {
123
+ flexDirection: 'row',
124
+ alignItems: 'center',
125
+ paddingHorizontal: theme_1.SPACING.lg,
126
+ paddingVertical: theme_1.SPACING.md,
127
+ borderBottomWidth: 1,
128
+ borderBottomColor: theme_1.COLORS.border,
129
+ },
130
+ headerSlot: {
131
+ width: 44,
132
+ height: 44,
133
+ alignItems: 'center',
134
+ justifyContent: 'center',
135
+ },
136
+ headerTitle: {
137
+ flex: 1,
138
+ textAlign: 'center',
139
+ fontSize: theme_1.FONTS.lg,
140
+ fontWeight: '700',
141
+ color: theme_1.COLORS.textPrimary,
142
+ },
143
+ // Center states
144
+ centerContent: {
145
+ flex: 1,
146
+ alignItems: 'center',
147
+ justifyContent: 'center',
148
+ padding: theme_1.SPACING.xl,
149
+ gap: theme_1.SPACING.md,
150
+ },
151
+ statusText: {
152
+ fontSize: theme_1.FONTS.sm,
153
+ color: theme_1.COLORS.textSecondary,
154
+ marginTop: theme_1.SPACING.md,
155
+ },
156
+ retryBtn: {
157
+ borderRadius: theme_1.RADIUS.md,
158
+ borderWidth: 1,
159
+ borderColor: theme_1.COLORS.neonCyan + '66',
160
+ backgroundColor: theme_1.COLORS.neonCyan + '10',
161
+ paddingVertical: theme_1.SPACING.sm,
162
+ paddingHorizontal: theme_1.SPACING.lg,
163
+ alignItems: 'center',
164
+ justifyContent: 'center',
165
+ minHeight: 44,
166
+ marginTop: theme_1.SPACING.sm,
167
+ },
168
+ retryBtnText: {
169
+ fontSize: theme_1.FONTS.sm,
170
+ fontWeight: '700',
171
+ color: theme_1.COLORS.neonCyan,
172
+ },
173
+ // Scroll + list
174
+ scroll: {
175
+ padding: theme_1.SPACING.lg,
176
+ gap: theme_1.SPACING.md,
177
+ },
178
+ listCard: {
179
+ backgroundColor: theme_1.COLORS.surface,
180
+ borderRadius: theme_1.RADIUS.xl,
181
+ borderWidth: 1,
182
+ borderColor: theme_1.COLORS.border,
183
+ overflow: 'hidden',
184
+ },
185
+ row: {
186
+ flexDirection: 'row',
187
+ alignItems: 'center',
188
+ gap: theme_1.SPACING.md,
189
+ paddingHorizontal: theme_1.SPACING.lg,
190
+ paddingVertical: theme_1.SPACING.md,
191
+ minHeight: 56,
192
+ },
193
+ iconWrap: {
194
+ width: 52,
195
+ height: 52,
196
+ borderRadius: theme_1.RADIUS.md,
197
+ backgroundColor: theme_1.COLORS.neonCyan + '18',
198
+ alignItems: 'center',
199
+ justifyContent: 'center',
200
+ },
201
+ appName: {
202
+ fontSize: theme_1.FONTS.md,
203
+ fontWeight: '500',
204
+ color: theme_1.COLORS.textPrimary,
205
+ },
206
+ appDate: {
207
+ fontSize: theme_1.FONTS.xs,
208
+ color: theme_1.COLORS.textMuted,
209
+ fontWeight: '600',
210
+ textTransform: 'uppercase',
211
+ letterSpacing: 0.8,
212
+ marginTop: 2,
213
+ },
214
+ rowDivider: {
215
+ height: 1,
216
+ backgroundColor: theme_1.COLORS.border,
217
+ marginHorizontal: theme_1.SPACING.lg,
218
+ },
219
+ });
220
+ //# sourceMappingURL=EchoConnectedAppsModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoConnectedAppsModal.js","sourceRoot":"","sources":["../../src/components/EchoConnectedAppsModal.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;AAyDH,wDAqHC;AA5KD,kDAA0B;AAC1B,+CASsB;AACtB,qDAAmD;AACnD,oCAA0D;AAuB1D,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAEhF,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;YACjD,GAAG,EAAI,SAAS;YAChB,KAAK,EAAE,MAAM;YACb,IAAI,EAAG,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,SAAgB,sBAAsB,CAAC,EACrC,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,GAAM,CAAC,EACf,WAAW,GAAG,CAAC,GACa;IAC5B,OAAO,CACL,CAAC,oBAAK,CACJ,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,aAAa,CAAC,OAAO,CACrB,iBAAiB,CAAC,CAAC,uBAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CACtE,cAAc,CAAC,CAAC,OAAO,CAAC,CACxB,wBAAwB,CAExB;MAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,IAAI,eAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAEjE;;QAAA,CAAC,YAAY,CACb;QAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CACpD;UAAA,CAAC,wBAAS,CACR,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CACzE,kBAAkB,CAAC,sBAAsB,CACzC,iBAAiB,CAAC,QAAQ,CAC1B,OAAO,CAAC,CAAC,CAAC,CAAC,CAEX;YAAA,CAAC,4BAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAM,CAAC,WAAW,CAAC,EAClE;UAAA,EAAE,wBAAS,CACX;UAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,cAAc,EAAE,mBAAI,CACrD;UAAA,CAAC,qDAAqD,CACtD;UAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EACjC;QAAA,EAAE,mBAAI,CAEN;;QAAA,CAAC,UAAU,CACX;QAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CACT,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;YAAA,CAAC,gCAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,cAAM,CAAC,QAAQ,CAAC,EACvD;YAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAC9D;;YACF,EAAE,mBAAI,CACR;UAAA,EAAE,mBAAI,CAAC,CACR,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;YAAA,CAAC,4BAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAM,CAAC,KAAK,CAAC,EAClE;YAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,cAAM,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC7E;cAAA,CAAC,KAAK,CACR;YAAA,EAAE,mBAAI,CACN;YAAA,CAAC,wBAAS,CACR,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBACtB,MAAM,CAAC,QAAQ;gBACf,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;aAC7B,CAAC,CACF,kBAAkB,CAAC,8BAA8B,CACjD,iBAAiB,CAAC,QAAQ,CAE1B;cAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,EAAE,mBAAI,CACnD;YAAA,EAAE,wBAAS,CACb;UAAA,EAAE,mBAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;YAAA,CAAC,4BAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAM,CAAC,SAAS,CAAC,EAC7D;YAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CACxD;;YACF,EAAE,mBAAI,CACR;UAAA,EAAE,mBAAI,CAAC,CACR,CAAC,CAAC,CAAC,CACF,CAAC,yBAAU,CACT,qBAAqB,CAAC,CAAC;gBACrB,MAAM,CAAC,MAAM;gBACb,EAAE,aAAa,EAAE,WAAW,GAAG,EAAE,EAAE;aACpC,CAAC,CACF,4BAA4B,CAAC,CAAC,KAAK,CAAC,CAEpC;YAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC3B;cAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CACtB,CAAC,mBAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CACpB;kBAAA,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG,CAAC,CAAC,CAAC,IAAI,CACpD;kBAAA,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAClB,UAAU,CACV,iBAAiB,CAAC,MAAM,CACxB,kBAAkB,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,eAAe,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAEpF;oBAAA,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACvB,yBAAyB,CAAC,IAAI,CAC9B,2BAA2B,CAE3B;sBAAA,CAAC,4BAAa,CACZ,IAAI,CAAC,cAAc,CACnB,IAAI,CAAC,CAAC,EAAE,CAAC,CACT,KAAK,CAAC,CAAC,cAAM,CAAC,QAAQ,CAAC,CACvB,yBAAyB,CAAC,IAAI,CAC9B,2BAA2B,EAE/B;oBAAA,EAAE,mBAAI,CACN;oBAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACvB;sBAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CACzD;wBAAA,CAAC,GAAG,CAAC,WAAW,CAClB;sBAAA,EAAE,mBAAI,CACN;sBAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,yBAAyB,CAAC,IAAI,CACzD;wBAAA,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAC7C;sBAAA,EAAE,mBAAI,CACR;oBAAA,EAAE,mBAAI,CACR;kBAAA,EAAE,mBAAI,CACR;gBAAA,EAAE,mBAAI,CAAC,CACR,CAAC,CACJ;YAAA,EAAE,mBAAI,CACR;UAAA,EAAE,yBAAU,CAAC,CACd,CACH;MAAA,EAAE,mBAAI,CACR;IAAA,EAAE,oBAAK,CAAC,CACT,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE;QACJ,IAAI,EAAa,CAAC;QAClB,eAAe,EAAE,cAAM,CAAC,EAAE;KAC3B;IAED,SAAS;IACT,MAAM,EAAE;QACN,aAAa,EAAI,KAAK;QACtB,UAAU,EAAO,QAAQ;QACzB,iBAAiB,EAAE,eAAO,CAAC,EAAE;QAC7B,eAAe,EAAE,eAAO,CAAC,EAAE;QAC3B,iBAAiB,EAAE,CAAC;QACpB,iBAAiB,EAAE,cAAM,CAAC,MAAM;KACjC;IACD,UAAU,EAAE;QACV,KAAK,EAAW,EAAE;QAClB,MAAM,EAAU,EAAE;QAClB,UAAU,EAAM,QAAQ;QACxB,cAAc,EAAE,QAAQ;KACzB;IACD,WAAW,EAAE;QACX,IAAI,EAAS,CAAC;QACd,SAAS,EAAI,QAAQ;QACrB,QAAQ,EAAK,aAAK,CAAC,EAAE;QACrB,UAAU,EAAG,KAAK;QAClB,KAAK,EAAQ,cAAM,CAAC,WAAW;KAChC;IAED,gBAAgB;IAChB,aAAa,EAAE;QACb,IAAI,EAAY,CAAC;QACjB,UAAU,EAAM,QAAQ;QACxB,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAS,eAAO,CAAC,EAAE;QAC1B,GAAG,EAAa,eAAO,CAAC,EAAE;KAC3B;IACD,UAAU,EAAE;QACV,QAAQ,EAAI,aAAK,CAAC,EAAE;QACpB,KAAK,EAAO,cAAM,CAAC,aAAa;QAChC,SAAS,EAAG,eAAO,CAAC,EAAE;KACvB;IACD,QAAQ,EAAE;QACR,YAAY,EAAK,cAAM,CAAC,EAAE;QAC1B,WAAW,EAAM,CAAC;QAClB,WAAW,EAAM,cAAM,CAAC,QAAQ,GAAG,IAAI;QACvC,eAAe,EAAE,cAAM,CAAC,QAAQ,GAAG,IAAI;QACvC,eAAe,EAAE,eAAO,CAAC,EAAE;QAC3B,iBAAiB,EAAE,eAAO,CAAC,EAAE;QAC7B,UAAU,EAAO,QAAQ;QACzB,cAAc,EAAG,QAAQ;QACzB,SAAS,EAAQ,EAAE;QACnB,SAAS,EAAQ,eAAO,CAAC,EAAE;KAC5B;IACD,YAAY,EAAE;QACZ,QAAQ,EAAI,aAAK,CAAC,EAAE;QACpB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAO,cAAM,CAAC,QAAQ;KAC5B;IAED,gBAAgB;IAChB,MAAM,EAAE;QACN,OAAO,EAAE,eAAO,CAAC,EAAE;QACnB,GAAG,EAAM,eAAO,CAAC,EAAE;KACpB;IACD,QAAQ,EAAE;QACR,eAAe,EAAE,cAAM,CAAC,OAAO;QAC/B,YAAY,EAAK,cAAM,CAAC,EAAE;QAC1B,WAAW,EAAM,CAAC;QAClB,WAAW,EAAM,cAAM,CAAC,MAAM;QAC9B,QAAQ,EAAS,QAAQ;KAC1B;IACD,GAAG,EAAE;QACH,aAAa,EAAI,KAAK;QACtB,UAAU,EAAO,QAAQ;QACzB,GAAG,EAAc,eAAO,CAAC,EAAE;QAC3B,iBAAiB,EAAE,eAAO,CAAC,EAAE;QAC7B,eAAe,EAAE,eAAO,CAAC,EAAE;QAC3B,SAAS,EAAQ,EAAE;KACpB;IACD,QAAQ,EAAE;QACR,KAAK,EAAW,EAAE;QAClB,MAAM,EAAU,EAAE;QAClB,YAAY,EAAI,cAAM,CAAC,EAAE;QACzB,eAAe,EAAE,cAAM,CAAC,QAAQ,GAAG,IAAI;QACvC,UAAU,EAAM,QAAQ;QACxB,cAAc,EAAE,QAAQ;KACzB;IACD,OAAO,EAAE;QACP,QAAQ,EAAI,aAAK,CAAC,EAAE;QACpB,UAAU,EAAE,KAAK;QACjB,KAAK,EAAO,cAAM,CAAC,WAAW;KAC/B;IACD,OAAO,EAAE;QACP,QAAQ,EAAO,aAAK,CAAC,EAAE;QACvB,KAAK,EAAU,cAAM,CAAC,SAAS;QAC/B,UAAU,EAAK,KAAK;QACpB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,GAAG;QAClB,SAAS,EAAM,CAAC;KACjB;IACD,UAAU,EAAE;QACV,MAAM,EAAW,CAAC;QAClB,eAAe,EAAE,cAAM,CAAC,MAAM;QAC9B,gBAAgB,EAAE,eAAO,CAAC,EAAE;KAC7B;CACF,CAAC,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * EchoDeleteProfilePanel
3
+ *
4
+ * Presentation-only Delete Echo Profile trigger + expanded confirmation panel.
5
+ * Extracted from the delete-account section of the Echo UI Reference account screen.
6
+ *
7
+ * COLLAPSED STATE
8
+ * ───────────────
9
+ * Shows a discrete "Delete Echo Profile" text trigger.
10
+ *
11
+ * EXPANDED STATE
12
+ * ──────────────
13
+ * Shows the full confirmation panel with:
14
+ * • "Before you delete:" info block with five canonical warnings
15
+ * • DELETE confirmation text field
16
+ * • Cancel and Schedule Deletion buttons
17
+ *
18
+ * LOCAL DATA WARNING
19
+ * ──────────────────
20
+ * The text "Your local [hostAppName] data on this device is not affected."
21
+ * uses the supplied hostAppName so this component is host-app neutral.
22
+ * Default: "this app".
23
+ *
24
+ * CONFIRM BUTTON GUARD
25
+ * ────────────────────
26
+ * The Schedule Deletion button is only enabled when:
27
+ * confirmationText.trim() === 'DELETE' && !loading
28
+ * The package enforces this UI condition; onConfirm remains host-owned.
29
+ *
30
+ * HOST RESPONSIBILITIES
31
+ * ─────────────────────
32
+ * • expanded / confirmationText state
33
+ * • onOpen / onChangeConfirmationText / onCancel / onConfirm handlers
34
+ * • Actual account-deletion RPC (onConfirm)
35
+ * • Alerts / announcements after deletion is scheduled
36
+ *
37
+ * No Expo Router, no auth, no contexts, no services, no app-specific code.
38
+ * Canonical shared component for @echoform/echo-ui.
39
+ */
40
+ import React from 'react';
41
+ export type EchoDeleteProfilePanelProps = {
42
+ /** Whether the full confirmation panel is expanded. */
43
+ expanded: boolean;
44
+ /** Controlled value of the DELETE confirmation text field. */
45
+ confirmationText: string;
46
+ /** True while the deletion RPC is in flight. */
47
+ loading?: boolean;
48
+ /**
49
+ * Name of the host application used in the local-data-not-affected warning.
50
+ * Defaults to "this app".
51
+ */
52
+ hostAppName?: string;
53
+ /** Called when the user taps the collapsed trigger. */
54
+ onOpen: () => void;
55
+ /** Called on every keystroke in the confirmation field. */
56
+ onChangeConfirmationText: (value: string) => void;
57
+ /** Called when the user taps Cancel. */
58
+ onCancel: () => void;
59
+ /** Called when the user taps Schedule Deletion (only when guard passes). */
60
+ onConfirm: () => void;
61
+ };
62
+ export declare function EchoDeleteProfilePanel({ expanded, confirmationText, loading, hostAppName, onOpen, onChangeConfirmationText, onCancel, onConfirm, }: EchoDeleteProfilePanelProps): React.JSX.Element;
63
+ //# sourceMappingURL=EchoDeleteProfilePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EchoDeleteProfilePanel.d.ts","sourceRoot":"","sources":["../../src/components/EchoDeleteProfilePanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAiB1B,MAAM,MAAM,2BAA2B,GAAG;IACxC,uDAAuD;IACvD,QAAQ,EAAkB,OAAO,CAAC;IAClC,8DAA8D;IAC9D,gBAAgB,EAAU,MAAM,CAAC;IACjC,gDAAgD;IAChD,OAAO,CAAC,EAAkB,OAAO,CAAC;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAc,MAAM,CAAC;IACjC,uDAAuD;IACvD,MAAM,EAAoB,MAAM,IAAI,CAAC;IACrC,2DAA2D;IAC3D,wBAAwB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,wCAAwC;IACxC,QAAQ,EAAkB,MAAM,IAAI,CAAC;IACrC,4EAA4E;IAC5E,SAAS,EAAiB,MAAM,IAAI,CAAC;CACtC,CAAC;AAwCF,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,gBAAgB,EAChB,OAAoB,EACpB,WAAyB,EACzB,MAAM,EACN,wBAAwB,EACxB,QAAQ,EACR,SAAS,GACV,EAAE,2BAA2B,qBAsI7B"}