@echoform/echo-ui 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -10
- package/dist/components/EchoChangeProfileNameModal.d.ts +59 -0
- package/dist/components/EchoChangeProfileNameModal.d.ts.map +1 -0
- package/dist/components/EchoChangeProfileNameModal.js +317 -0
- package/dist/components/EchoChangeProfileNameModal.js.map +1 -0
- package/dist/components/EchoColorPicker.d.ts +34 -0
- package/dist/components/EchoColorPicker.d.ts.map +1 -0
- package/dist/components/EchoColorPicker.js +206 -0
- package/dist/components/EchoColorPicker.js.map +1 -0
- package/dist/components/EchoConnectedAppsModal.d.ts +40 -0
- package/dist/components/EchoConnectedAppsModal.d.ts.map +1 -0
- package/dist/components/EchoConnectedAppsModal.js +220 -0
- package/dist/components/EchoConnectedAppsModal.js.map +1 -0
- package/dist/components/EchoDeleteProfilePanel.d.ts +63 -0
- package/dist/components/EchoDeleteProfilePanel.d.ts.map +1 -0
- package/dist/components/EchoDeleteProfilePanel.js +286 -0
- package/dist/components/EchoDeleteProfilePanel.js.map +1 -0
- package/dist/components/EchoDeletionIntercept.d.ts +39 -0
- package/dist/components/EchoDeletionIntercept.d.ts.map +1 -0
- package/dist/components/EchoDeletionIntercept.js +212 -0
- package/dist/components/EchoDeletionIntercept.js.map +1 -0
- package/dist/components/EchoDeletionStatusCard.d.ts +35 -0
- package/dist/components/EchoDeletionStatusCard.d.ts.map +1 -0
- package/dist/components/EchoDeletionStatusCard.js +156 -0
- package/dist/components/EchoDeletionStatusCard.js.map +1 -0
- package/dist/components/EchoEmblem.d.ts +1 -1
- package/dist/components/EchoEmblemPicker.d.ts +71 -0
- package/dist/components/EchoEmblemPicker.d.ts.map +1 -0
- package/dist/components/EchoEmblemPicker.js +490 -0
- package/dist/components/EchoEmblemPicker.js.map +1 -0
- package/dist/components/EchoErrorBanner.d.ts +17 -0
- package/dist/components/EchoErrorBanner.d.ts.map +1 -0
- package/dist/components/EchoErrorBanner.js +48 -0
- package/dist/components/EchoErrorBanner.js.map +1 -0
- package/dist/components/EchoFormField.d.ts +27 -0
- package/dist/components/EchoFormField.d.ts.map +1 -0
- package/dist/components/EchoFormField.js +49 -0
- package/dist/components/EchoFormField.js.map +1 -0
- package/dist/components/EchoLinkButton.d.ts +16 -0
- package/dist/components/EchoLinkButton.d.ts.map +1 -0
- package/dist/components/EchoLinkButton.js +37 -0
- package/dist/components/EchoLinkButton.js.map +1 -0
- package/dist/components/EchoMoreScreen.d.ts +47 -0
- package/dist/components/EchoMoreScreen.d.ts.map +1 -0
- package/dist/components/EchoMoreScreen.js +121 -0
- package/dist/components/EchoMoreScreen.js.map +1 -0
- package/dist/components/EchoPasswordField.d.ts +28 -0
- package/dist/components/EchoPasswordField.d.ts.map +1 -0
- package/dist/components/EchoPasswordField.js +67 -0
- package/dist/components/EchoPasswordField.js.map +1 -0
- package/dist/components/EchoPrimaryButton.d.ts +23 -0
- package/dist/components/EchoPrimaryButton.d.ts.map +1 -0
- package/dist/components/EchoPrimaryButton.js +54 -0
- package/dist/components/EchoPrimaryButton.js.map +1 -0
- package/dist/components/EchoProfileCard.d.ts +7 -3
- package/dist/components/EchoProfileCard.d.ts.map +1 -1
- package/dist/components/EchoProfileCard.js +5 -10
- package/dist/components/EchoProfileCard.js.map +1 -1
- package/dist/components/EchoProfileDivider.d.ts +14 -0
- package/dist/components/EchoProfileDivider.d.ts.map +1 -0
- package/dist/components/EchoProfileDivider.js +31 -0
- package/dist/components/EchoProfileDivider.js.map +1 -0
- package/dist/components/EchoProfileHero.d.ts +48 -0
- package/dist/components/EchoProfileHero.d.ts.map +1 -0
- package/dist/components/EchoProfileHero.js +215 -0
- package/dist/components/EchoProfileHero.js.map +1 -0
- package/dist/components/EchoProfileOverview.d.ts +18 -0
- package/dist/components/EchoProfileOverview.d.ts.map +1 -0
- package/dist/components/EchoProfileOverview.js +36 -0
- package/dist/components/EchoProfileOverview.js.map +1 -0
- package/dist/components/EchoProfileRow.d.ts +60 -0
- package/dist/components/EchoProfileRow.d.ts.map +1 -0
- package/dist/components/EchoProfileRow.js +113 -0
- package/dist/components/EchoProfileRow.js.map +1 -0
- package/dist/components/EchoProfileSection.d.ts +29 -0
- package/dist/components/EchoProfileSection.d.ts.map +1 -0
- package/dist/components/EchoProfileSection.js +58 -0
- package/dist/components/EchoProfileSection.js.map +1 -0
- package/dist/components/EchoRewardNotificationBanner.d.ts +61 -0
- package/dist/components/EchoRewardNotificationBanner.d.ts.map +1 -0
- package/dist/components/EchoRewardNotificationBanner.js +272 -0
- package/dist/components/EchoRewardNotificationBanner.js.map +1 -0
- package/dist/components/EchoSettingsRow.d.ts +24 -0
- package/dist/components/EchoSettingsRow.d.ts.map +1 -0
- package/dist/components/EchoSettingsRow.js +84 -0
- package/dist/components/EchoSettingsRow.js.map +1 -0
- package/dist/components/EchoSettingsSection.d.ts +16 -0
- package/dist/components/EchoSettingsSection.d.ts.map +1 -0
- package/dist/components/EchoSettingsSection.js +48 -0
- package/dist/components/EchoSettingsSection.js.map +1 -0
- package/dist/components/EchoSignOutButton.d.ts +28 -0
- package/dist/components/EchoSignOutButton.d.ts.map +1 -0
- package/dist/components/EchoSignOutButton.js +67 -0
- package/dist/components/EchoSignOutButton.js.map +1 -0
- package/dist/components/EchoSuccessBanner.d.ts +17 -0
- package/dist/components/EchoSuccessBanner.d.ts.map +1 -0
- package/dist/components/EchoSuccessBanner.js +48 -0
- package/dist/components/EchoSuccessBanner.js.map +1 -0
- package/dist/components/EchoSyncPanel.d.ts +165 -0
- package/dist/components/EchoSyncPanel.d.ts.map +1 -0
- package/dist/components/EchoSyncPanel.js +913 -0
- package/dist/components/EchoSyncPanel.js.map +1 -0
- package/dist/components/EchoSyncPromptModal.d.ts +87 -0
- package/dist/components/EchoSyncPromptModal.d.ts.map +1 -0
- package/dist/components/EchoSyncPromptModal.js +351 -0
- package/dist/components/EchoSyncPromptModal.js.map +1 -0
- package/dist/components/EchoTitlePicker.d.ts +72 -0
- package/dist/components/EchoTitlePicker.d.ts.map +1 -0
- package/dist/components/EchoTitlePicker.js +487 -0
- package/dist/components/EchoTitlePicker.js.map +1 -0
- package/dist/components/EchoVerificationCodeInput.d.ts +40 -0
- package/dist/components/EchoVerificationCodeInput.d.ts.map +1 -0
- package/dist/components/EchoVerificationCodeInput.js +140 -0
- package/dist/components/EchoVerificationCodeInput.js.map +1 -0
- package/dist/components/EchoWelcome.d.ts +44 -0
- package/dist/components/EchoWelcome.d.ts.map +1 -0
- package/dist/components/EchoWelcome.js +289 -0
- package/dist/components/EchoWelcome.js.map +1 -0
- package/dist/components/EchoWhyBecomeAnEchoModal.d.ts +34 -0
- package/dist/components/EchoWhyBecomeAnEchoModal.d.ts.map +1 -0
- package/dist/components/EchoWhyBecomeAnEchoModal.js +321 -0
- package/dist/components/EchoWhyBecomeAnEchoModal.js.map +1 -0
- package/dist/components/EchoformInfoButton.d.ts +27 -0
- package/dist/components/EchoformInfoButton.d.ts.map +1 -0
- package/dist/components/EchoformInfoButton.js +60 -0
- package/dist/components/EchoformInfoButton.js.map +1 -0
- package/dist/components/EchoformInfoModal.d.ts +63 -0
- package/dist/components/EchoformInfoModal.d.ts.map +1 -0
- package/dist/components/EchoformInfoModal.js +347 -0
- package/dist/components/EchoformInfoModal.js.map +1 -0
- package/dist/echoColors.d.ts +58 -0
- package/dist/echoColors.d.ts.map +1 -0
- package/dist/echoColors.js +94 -0
- package/dist/echoColors.js.map +1 -0
- package/dist/index.d.ts +64 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -4
- package/dist/index.js.map +1 -1
- package/dist/titleRarity.d.ts +5 -0
- package/dist/titleRarity.d.ts.map +1 -1
- package/dist/titleRarity.js +13 -0
- package/dist/titleRarity.js.map +1 -1
- package/package.json +2 -3
- package/dist/components/EchoUITest.d.ts +0 -14
- package/dist/components/EchoUITest.d.ts.map +0 -1
- package/dist/components/EchoUITest.js +0 -53
- package/dist/components/EchoUITest.js.map +0 -1
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* EchoDeletionStatusCard
|
|
4
|
+
*
|
|
5
|
+
* Presentation-only deletion-status card shown on the signed-in profile screen
|
|
6
|
+
* when an Echo Profile deletion has already been scheduled or is processing.
|
|
7
|
+
*
|
|
8
|
+
* Extracted from the deletion-card section of the Echo UI Reference account screen.
|
|
9
|
+
*
|
|
10
|
+
* STATUS BEHAVIOR
|
|
11
|
+
* ──────────────
|
|
12
|
+
* pending / failed → warning-styled "Deletion Scheduled" card with restore button
|
|
13
|
+
* processing → error-styled "Deletion In Progress" card, no restore button
|
|
14
|
+
*
|
|
15
|
+
* HOST RESPONSIBILITIES
|
|
16
|
+
* ─────────────────────
|
|
17
|
+
* • Actual cancellation / restoration RPC (onRestore)
|
|
18
|
+
* • Loading state while the restore RPC is in flight (restoreLoading)
|
|
19
|
+
*
|
|
20
|
+
* No Expo Router, no auth, no contexts, no services, no app-specific code.
|
|
21
|
+
* Canonical shared component for @echoform/echo-ui.
|
|
22
|
+
*/
|
|
23
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
24
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.EchoDeletionStatusCard = EchoDeletionStatusCard;
|
|
28
|
+
const react_1 = __importDefault(require("react"));
|
|
29
|
+
const react_native_1 = require("react-native");
|
|
30
|
+
const vector_icons_1 = require("@expo/vector-icons");
|
|
31
|
+
const theme_1 = require("../theme");
|
|
32
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
// Package-local date formatter
|
|
34
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
35
|
+
function formatDate(iso) {
|
|
36
|
+
try {
|
|
37
|
+
return new Date(iso).toLocaleDateString(undefined, {
|
|
38
|
+
day: 'numeric',
|
|
39
|
+
month: 'long',
|
|
40
|
+
year: 'numeric',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (_a) {
|
|
44
|
+
return iso;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
48
|
+
// Component
|
|
49
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
50
|
+
function EchoDeletionStatusCard({ status, scheduledFor, daysRemaining = 0, restoreLoading = false, onRestore, }) {
|
|
51
|
+
if (status === 'processing') {
|
|
52
|
+
return (<react_native_1.View style={styles.card} accessible accessibilityRole="alert" accessibilityLabel="Echo Profile deletion is currently in progress and cannot be cancelled.">
|
|
53
|
+
<react_native_1.View style={styles.header}>
|
|
54
|
+
<react_native_1.ActivityIndicator size="small" color={theme_1.COLORS.error} importantForAccessibility="no"/>
|
|
55
|
+
<react_native_1.Text style={styles.titleProcessing} importantForAccessibility="no">
|
|
56
|
+
Deletion In Progress
|
|
57
|
+
</react_native_1.Text>
|
|
58
|
+
</react_native_1.View>
|
|
59
|
+
<react_native_1.Text style={styles.body} importantForAccessibility="no">
|
|
60
|
+
Your Echo Profile is being permanently deleted. This process cannot be interrupted.
|
|
61
|
+
</react_native_1.Text>
|
|
62
|
+
</react_native_1.View>);
|
|
63
|
+
}
|
|
64
|
+
// pending or failed
|
|
65
|
+
const a11yLabel = [
|
|
66
|
+
'Echo Profile deletion scheduled.',
|
|
67
|
+
`${daysRemaining} days remaining.`,
|
|
68
|
+
'You may restore your profile before then.',
|
|
69
|
+
].join(' ');
|
|
70
|
+
return (<react_native_1.View style={styles.card} accessible accessibilityRole="alert" accessibilityLabel={a11yLabel}>
|
|
71
|
+
<react_native_1.View style={styles.header}>
|
|
72
|
+
<vector_icons_1.MaterialIcons name="schedule" size={20} color={theme_1.COLORS.warning} importantForAccessibility="no" accessibilityElementsHidden/>
|
|
73
|
+
<react_native_1.Text style={styles.titlePending} importantForAccessibility="no">
|
|
74
|
+
Deletion Scheduled
|
|
75
|
+
</react_native_1.Text>
|
|
76
|
+
</react_native_1.View>
|
|
77
|
+
|
|
78
|
+
<react_native_1.Text style={styles.body} importantForAccessibility="no">
|
|
79
|
+
Your Echo Profile is scheduled for permanent deletion on
|
|
80
|
+
</react_native_1.Text>
|
|
81
|
+
|
|
82
|
+
<react_native_1.Text style={styles.date} importantForAccessibility="no">
|
|
83
|
+
{scheduledFor ? formatDate(scheduledFor) : '—'}
|
|
84
|
+
</react_native_1.Text>
|
|
85
|
+
|
|
86
|
+
<react_native_1.Text style={[styles.body, { marginTop: theme_1.SPACING.xs }]} importantForAccessibility="no">
|
|
87
|
+
{`${daysRemaining} day${daysRemaining !== 1 ? 's' : ''} remaining. Cancel before then to restore your profile.`}
|
|
88
|
+
</react_native_1.Text>
|
|
89
|
+
|
|
90
|
+
{onRestore ? (<react_native_1.Pressable onPress={onRestore} disabled={restoreLoading} style={({ pressed }) => [
|
|
91
|
+
styles.restoreBtn,
|
|
92
|
+
pressed && { opacity: 0.75 },
|
|
93
|
+
restoreLoading && { opacity: 0.5 },
|
|
94
|
+
]} accessibilityLabel="Cancel deletion and restore Echo Profile" accessibilityRole="button" accessibilityState={{ busy: restoreLoading }}>
|
|
95
|
+
{restoreLoading ? (<react_native_1.ActivityIndicator size="small" color={theme_1.COLORS.neonGreen} importantForAccessibility="no"/>) : (<vector_icons_1.MaterialIcons name="restore" size={18} color={theme_1.COLORS.neonGreen} importantForAccessibility="no" accessibilityElementsHidden/>)}
|
|
96
|
+
<react_native_1.Text style={styles.restoreBtnText}>Restore Echo Profile</react_native_1.Text>
|
|
97
|
+
</react_native_1.Pressable>) : null}
|
|
98
|
+
</react_native_1.View>);
|
|
99
|
+
}
|
|
100
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
101
|
+
// Styles
|
|
102
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
103
|
+
const styles = react_native_1.StyleSheet.create({
|
|
104
|
+
card: {
|
|
105
|
+
backgroundColor: theme_1.COLORS.warning + '0C',
|
|
106
|
+
borderRadius: theme_1.RADIUS.xl,
|
|
107
|
+
borderWidth: 1,
|
|
108
|
+
borderColor: theme_1.COLORS.warning + '44',
|
|
109
|
+
padding: theme_1.SPACING.xl,
|
|
110
|
+
gap: theme_1.SPACING.sm,
|
|
111
|
+
},
|
|
112
|
+
header: {
|
|
113
|
+
flexDirection: 'row',
|
|
114
|
+
alignItems: 'center',
|
|
115
|
+
gap: theme_1.SPACING.sm,
|
|
116
|
+
},
|
|
117
|
+
titlePending: {
|
|
118
|
+
fontSize: theme_1.FONTS.md,
|
|
119
|
+
fontWeight: '800',
|
|
120
|
+
color: theme_1.COLORS.warning,
|
|
121
|
+
},
|
|
122
|
+
titleProcessing: {
|
|
123
|
+
fontSize: theme_1.FONTS.md,
|
|
124
|
+
fontWeight: '800',
|
|
125
|
+
color: theme_1.COLORS.error,
|
|
126
|
+
},
|
|
127
|
+
body: {
|
|
128
|
+
fontSize: theme_1.FONTS.sm,
|
|
129
|
+
color: theme_1.COLORS.textSecondary,
|
|
130
|
+
lineHeight: 20,
|
|
131
|
+
},
|
|
132
|
+
date: {
|
|
133
|
+
fontSize: theme_1.FONTS.lg,
|
|
134
|
+
fontWeight: '700',
|
|
135
|
+
color: theme_1.COLORS.warning,
|
|
136
|
+
},
|
|
137
|
+
restoreBtn: {
|
|
138
|
+
flexDirection: 'row',
|
|
139
|
+
alignItems: 'center',
|
|
140
|
+
justifyContent: 'center',
|
|
141
|
+
gap: theme_1.SPACING.sm,
|
|
142
|
+
backgroundColor: theme_1.COLORS.neonGreen + '15',
|
|
143
|
+
borderRadius: theme_1.RADIUS.lg,
|
|
144
|
+
borderWidth: 1.5,
|
|
145
|
+
borderColor: theme_1.COLORS.neonGreen + 'BB',
|
|
146
|
+
paddingVertical: theme_1.SPACING.md,
|
|
147
|
+
marginTop: theme_1.SPACING.xs,
|
|
148
|
+
minHeight: 52,
|
|
149
|
+
},
|
|
150
|
+
restoreBtnText: {
|
|
151
|
+
fontSize: theme_1.FONTS.md,
|
|
152
|
+
fontWeight: '700',
|
|
153
|
+
color: theme_1.COLORS.neonGreen,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
//# sourceMappingURL=EchoDeletionStatusCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EchoDeletionStatusCard.js","sourceRoot":"","sources":["../../src/components/EchoDeletionStatusCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,7 @@ import type { ImageSource } from 'expo-image';
|
|
|
44
44
|
export type EchoEmblemProps = {
|
|
45
45
|
/**
|
|
46
46
|
* Remote: `{ uri: 'https://...' }`
|
|
47
|
-
* Local: `require('
|
|
47
|
+
* Local: `require('./assets/my-emblem.png')`
|
|
48
48
|
*
|
|
49
49
|
* Uses expo-image ImageSource — covers both forms natively.
|
|
50
50
|
*/
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EchoEmblemPicker
|
|
3
|
+
*
|
|
4
|
+
* Presentation-only modal for selecting or clearing an Echo Emblem.
|
|
5
|
+
* Extracted from the Echo UI Reference EmblemPicker.
|
|
6
|
+
*
|
|
7
|
+
* The host app owns all data fetching and the savingId state.
|
|
8
|
+
* This component is purely presentational and accessible.
|
|
9
|
+
*
|
|
10
|
+
* DYNAMIC COLLECTION FILTERS
|
|
11
|
+
* ──────────────────────────
|
|
12
|
+
* Filters are generated from the owned Emblem list — no hardcoded app names:
|
|
13
|
+
*
|
|
14
|
+
* "All" → shows every owned Emblem.
|
|
15
|
+
* "Starter" → shows Emblems whose app_key is null (platform-wide collection).
|
|
16
|
+
* <AppName> → one chip per distinct app_key present in the owned list,
|
|
17
|
+
* using metadata.collection_name when available, falling back
|
|
18
|
+
* to a title-cased label derived from app_key itself.
|
|
19
|
+
*
|
|
20
|
+
* ACCESSIBILITY
|
|
21
|
+
* ─────────────
|
|
22
|
+
* • Modal heading announced on open.
|
|
23
|
+
* • Each filter chip is a button with selected state announced.
|
|
24
|
+
* • Each emblem cell is a button with selected/disabled/busy state.
|
|
25
|
+
* • Saving overlay announces busy on the active cell.
|
|
26
|
+
* • Error and empty states are accessible alert/text roles.
|
|
27
|
+
*
|
|
28
|
+
* No Expo Router, no safe-area hooks, no auth, no contexts, no services,
|
|
29
|
+
* no storage, no app-specific code.
|
|
30
|
+
* Canonical shared component for @echoform/echo-ui.
|
|
31
|
+
*/
|
|
32
|
+
import React from 'react';
|
|
33
|
+
export type EchoOwnedEmblem = {
|
|
34
|
+
asset_id: string;
|
|
35
|
+
asset_key: string;
|
|
36
|
+
display_name: string;
|
|
37
|
+
description: string | null;
|
|
38
|
+
image_url: string;
|
|
39
|
+
app_key: string | null;
|
|
40
|
+
sort_order: number;
|
|
41
|
+
acquired_at: string;
|
|
42
|
+
acquisition_type: string;
|
|
43
|
+
acquisition_reference: string | null;
|
|
44
|
+
is_currently_active: boolean;
|
|
45
|
+
metadata?: Record<string, unknown> | null;
|
|
46
|
+
};
|
|
47
|
+
export type EchoEmblemPickerProps = {
|
|
48
|
+
visible: boolean;
|
|
49
|
+
emblems: EchoOwnedEmblem[];
|
|
50
|
+
loading: boolean;
|
|
51
|
+
error: string | null;
|
|
52
|
+
onClose: () => void;
|
|
53
|
+
/**
|
|
54
|
+
* Called when the user taps an Emblem or "No Emblem".
|
|
55
|
+
* Receives the asset_id to equip, or null to clear.
|
|
56
|
+
*/
|
|
57
|
+
onSelect: (assetId: string | null) => void | Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* asset_id currently being saved, 'clear' when clearing, null when idle.
|
|
60
|
+
* Used to show a per-cell saving spinner and disable the grid.
|
|
61
|
+
*/
|
|
62
|
+
savingId: string | 'clear' | null;
|
|
63
|
+
/** Called when the user taps "Try Again" after a load error. */
|
|
64
|
+
onRetry: () => void;
|
|
65
|
+
/** Safe-area top inset supplied by the host. Defaults to 0. */
|
|
66
|
+
topInset?: number;
|
|
67
|
+
/** Safe-area bottom inset used for scroll padding. Defaults to 0. */
|
|
68
|
+
bottomInset?: number;
|
|
69
|
+
};
|
|
70
|
+
export declare function EchoEmblemPicker({ visible, emblems, loading, error, onClose, onSelect, savingId, onRetry, topInset, bottomInset, }: EchoEmblemPickerProps): React.JSX.Element;
|
|
71
|
+
//# sourceMappingURL=EchoEmblemPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EchoEmblemPicker.d.ts","sourceRoot":"","sources":["../../src/components/EchoEmblemPicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAoD,MAAM,OAAO,CAAC;AAoBzE,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D;;;OAGG;IACH,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAClC,gEAAgE;IAChE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAiFF,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,QAAY,EACZ,WAAe,GAChB,EAAE,qBAAqB,qBAiNvB"}
|