@adminide-stack/yantra-mobile 12.0.62 → 12.0.64-alpha.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.
- package/lib/components/CustomDrawer.js +15 -5
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/components/GatewayToolbarButtonMobile.js +1 -1
- package/lib/components/GatewayToolbarButtonMobile.js.map +1 -1
- package/lib/components/ProfileAvatar.js +12 -8
- package/lib/components/ProfileAvatar.js.map +1 -1
- package/lib/compute.js +25 -5
- package/lib/compute.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +5 -4
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/hooks/useWebViewRetention.js +18 -0
- package/lib/hooks/useWebViewRetention.js.map +1 -0
- package/lib/hooks/webViewRetentionPolicy.js +8 -0
- package/lib/hooks/webViewRetentionPolicy.js.map +1 -0
- package/lib/routes.json +5 -5
- package/lib/screens/Account/index.js +2 -4
- package/lib/screens/Account/index.js.map +1 -1
- package/lib/screens/Home/components/HomeSuggestions.js +1 -1
- package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
- package/lib/screens/WebBuilder/index.js +5 -2
- package/lib/screens/WebBuilder/index.js.map +1 -1
- package/lib/theme/mobileTokens.js +9 -9
- package/lib/theme/mobileTokens.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/screens/Account/index.tsx"],"sourcesContent":["/**\n * Account screen for App Store 5.1.1(v): profile details plus in-app\n * permanent account deletion. Layout follows the grouped iOS settings cards\n * (avatar, Name / Email / Username, Delete Account).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { IUserState } from '@adminide-stack/core';\nimport { Store, logoutAndRedirect, userSelector } from '@adminide-stack/user-auth0-client';\nimport { useAccountProfileQuery, useDeleteUserAccountMutation, useSetNameMutation } from 'common/graphql';\nimport { ProfileAvatar } from '../../components/ProfileAvatar';\nimport { mobileColors, mobileTokens } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport {\n pickAuthEmail,\n pickAuthUsername,\n pickPrimaryDisplayName,\n pickProfilePhotoUrl,\n} from '../../utils/authUserDisplay';\nimport { splitDisplayName } from './splitDisplayName';\n\nconst PAGE_BG = '#f2f2f7';\n\nexport default function AccountScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const { isDark } = useAppTheme();\n const colors = mobileColors(isDark);\n const insets = useSafeAreaInsets();\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-and-network',\n errorPolicy: 'all',\n });\n const [setName, { loading: savingName }] = useSetNameMutation();\n const [deleteUserAccount, { loading: deleting }] = useDeleteUserAccountMutation();\n\n const [nameOpen, setNameOpen] = useState(false);\n const [givenName, setGivenName] = useState('');\n const [familyName, setFamilyName] = useState('');\n\n const orgName = useMemo(() => {\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params?.orgName]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n const username = useMemo(() => pickAuthUsername(authUser), [authUser]);\n\n const photoUrl = useMemo(\n () => pickProfilePhotoUrl(profileData?.accountProfile?.photos, authUser),\n [profileData?.accountProfile?.photos, authUser],\n );\n\n const busy = deleting;\n\n const handleBack = useCallback(() => {\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Layout.Home',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [navigation, orgName]);\n\n const openNameEditor = useCallback(() => {\n const split = splitDisplayName(displayName === 'Account' ? '' : displayName);\n setGivenName(split.givenName);\n setFamilyName(split.familyName);\n setNameOpen(true);\n }, [displayName]);\n\n const saveName = useCallback(async () => {\n try {\n await setName({\n variables: {\n givenName: givenName.trim() || undefined,\n familyName: familyName.trim() || undefined,\n },\n });\n setNameOpen(false);\n } catch (error) {\n Alert.alert('Could not update name', error instanceof Error ? error.message : 'Please try again.');\n }\n }, [familyName, givenName, setName]);\n\n const runDelete = useCallback(async () => {\n try {\n const { data } = await deleteUserAccount();\n if (!data?.deleteUserAccount) {\n throw new Error('The server did not confirm account deletion.');\n }\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n } catch (error) {\n Alert.alert(\n 'Could not delete account',\n error instanceof Error ? error.message : 'Please try again or contact support.',\n );\n }\n }, [deleteUserAccount, dispatch]);\n\n const handleDeleteAccount = useCallback(() => {\n if (busy) return;\n Alert.alert(\n 'Delete Account',\n 'This permanently deletes your Yantra account and the data associated with it. This cannot be undone.',\n [\n { text: 'Cancel', style: 'cancel' },\n {\n text: 'Delete Account',\n style: 'destructive',\n onPress: () => {\n Alert.alert('Are you sure?', 'Your account will be deleted immediately.', [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Delete Account', style: 'destructive', onPress: () => void runDelete() },\n ]);\n },\n },\n ],\n );\n }, [busy, runDelete]);\n\n return (\n <SafeAreaView\n edges={['top', 'left', 'right']}\n style={[styles.safe, { backgroundColor: isDark ? '#0f172a' : PAGE_BG }]}\n >\n <View style={[styles.header, { paddingTop: insets.top > 0 ? 4 : 10 }]}>\n <Pressable\n onPress={handleBack}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Go back\"\n style={({ pressed }) => [\n styles.backCircle,\n { backgroundColor: colors.surface },\n pressed && styles.pressed,\n ]}\n >\n <Ionicons name=\"chevron-back\" size={22} color={colors.text} />\n </Pressable>\n <Text style={[styles.headerTitle, { color: colors.text }]}>Account</Text>\n <View style={styles.headerSpacer} />\n </View>\n\n <ScrollView contentContainerStyle={styles.scroll} keyboardShouldPersistTaps=\"handled\">\n <View style={styles.hero} accessibilityLabel=\"Profile picture\">\n <View style={styles.avatarLarge}>\n <ProfileAvatar uri={photoUrl} name={displayName} size={88} />\n </View>\n <Text style={[styles.heroHint, { color: colors.textMuted }]}>Profile picture</Text>\n </View>\n\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={openNameEditor}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Change name\"\n style={({ pressed }) => [\n styles.row,\n { backgroundColor: pressed ? colors.surfaceMuted : colors.surface },\n ]}\n >\n <Text style={[styles.rowLabel, { color: colors.text }]}>Name</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {displayName}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n <View style={[styles.rowLine, { backgroundColor: colors.border }]} />\n <View style={[styles.row, { backgroundColor: colors.surface }]}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>Email</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {email || '—'}\n </Text>\n </View>\n <View style={[styles.rowLine, { backgroundColor: colors.border }]} />\n <View style={[styles.row, { backgroundColor: colors.surface }]}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>Username</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {username || '—'}\n </Text>\n </View>\n </View>\n\n <Pressable\n onPress={handleDeleteAccount}\n disabled={busy}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Delete Account\"\n style={({ pressed }) => [\n styles.deleteCard,\n { backgroundColor: pressed && !busy ? colors.surfaceMuted : colors.surface },\n ]}\n >\n {deleting ? (\n <ActivityIndicator color=\"#ef4444\" />\n ) : (\n <Text style={styles.deleteLabel}>Delete Account</Text>\n )}\n </Pressable>\n </ScrollView>\n\n <Modal visible={nameOpen} animationType=\"fade\" transparent onRequestClose={() => setNameOpen(false)}>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n style={styles.modalBackdrop}\n >\n <Pressable style={styles.modalDismiss} onPress={() => setNameOpen(false)} />\n <View style={[styles.modalCard, { backgroundColor: colors.surface }]}>\n <Text style={[styles.modalTitle, { color: colors.text }]}>Change full name</Text>\n <Text style={[styles.modalFieldLabel, { color: colors.textMuted }]}>First name</Text>\n <TextInput\n value={givenName}\n onChangeText={setGivenName}\n autoCapitalize=\"words\"\n style={[\n styles.input,\n {\n color: colors.text,\n backgroundColor: colors.surfaceMuted,\n borderColor: colors.border,\n },\n ]}\n placeholder=\"First name\"\n placeholderTextColor={colors.textMuted}\n />\n <Text style={[styles.modalFieldLabel, { color: colors.textMuted }]}>Last name</Text>\n <TextInput\n value={familyName}\n onChangeText={setFamilyName}\n autoCapitalize=\"words\"\n style={[\n styles.input,\n {\n color: colors.text,\n backgroundColor: colors.surfaceMuted,\n borderColor: colors.border,\n },\n ]}\n placeholder=\"Last name\"\n placeholderTextColor={colors.textMuted}\n />\n <View style={styles.modalActions}>\n <Pressable onPress={() => setNameOpen(false)} style={styles.modalBtnGhost}>\n <Text style={styles.modalBtnGhostLabel}>Cancel</Text>\n </Pressable>\n <Pressable\n onPress={() => void saveName()}\n disabled={savingName}\n style={styles.modalBtnPrimary}\n >\n {savingName ? (\n <ActivityIndicator color=\"#fff\" />\n ) : (\n <Text style={styles.modalBtnPrimaryLabel}>Save</Text>\n )}\n </Pressable>\n </View>\n </View>\n </KeyboardAvoidingView>\n </Modal>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safe: {\n flex: 1,\n backgroundColor: PAGE_BG,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingBottom: 8,\n minHeight: 52,\n },\n backCircle: {\n width: 40,\n height: 40,\n borderRadius: 20,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n ...mobileTokens.shadow.card,\n },\n headerTitle: {\n flex: 1,\n textAlign: 'center',\n fontSize: 17,\n fontWeight: '600',\n color: '#111827',\n },\n headerSpacer: {\n width: 40,\n height: 40,\n },\n pressed: {\n opacity: 0.72,\n },\n scroll: {\n paddingHorizontal: 16,\n paddingBottom: 40,\n },\n hero: {\n alignItems: 'center',\n paddingTop: 12,\n paddingBottom: 28,\n gap: 12,\n },\n avatarLarge: {\n width: 88,\n height: 88,\n borderRadius: 44,\n overflow: 'hidden',\n },\n heroHint: {\n fontSize: 14,\n color: '#9ca3af',\n fontWeight: '500',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: 16,\n overflow: 'hidden',\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 52,\n paddingHorizontal: 16,\n gap: 12,\n backgroundColor: '#fff',\n },\n rowPressed: {\n backgroundColor: '#f8fafc',\n },\n rowLabel: {\n fontSize: 16,\n color: '#111827',\n fontWeight: '400',\n width: 96,\n },\n rowValue: {\n flex: 1,\n fontSize: 16,\n color: '#9ca3af',\n textAlign: 'right',\n },\n rowLine: {\n height: StyleSheet.hairlineWidth,\n backgroundColor: '#ececec',\n marginLeft: 16,\n },\n deleteCard: {\n marginTop: 16,\n backgroundColor: '#fff',\n borderRadius: 16,\n minHeight: 52,\n paddingHorizontal: 16,\n justifyContent: 'center',\n },\n deleteLabel: {\n fontSize: 16,\n fontWeight: '500',\n color: '#ef4444',\n },\n modalBackdrop: {\n flex: 1,\n backgroundColor: 'rgba(15, 23, 42, 0.45)',\n justifyContent: 'flex-end',\n },\n modalDismiss: {\n flex: 1,\n },\n modalCard: {\n backgroundColor: '#fff',\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n padding: 20,\n paddingBottom: 28,\n gap: 8,\n },\n modalTitle: {\n fontSize: 18,\n fontWeight: '700',\n color: '#0f172a',\n marginBottom: 8,\n },\n modalFieldLabel: {\n fontSize: 13,\n fontWeight: '600',\n color: '#64748b',\n marginTop: 4,\n },\n input: {\n borderWidth: 1,\n borderColor: '#e2e8f0',\n borderRadius: 12,\n paddingHorizontal: 12,\n paddingVertical: 12,\n fontSize: 16,\n color: '#0f172a',\n backgroundColor: '#f8fafc',\n },\n modalActions: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 10,\n marginTop: 16,\n },\n modalBtnGhost: {\n paddingHorizontal: 14,\n paddingVertical: 10,\n },\n modalBtnGhostLabel: {\n fontSize: 16,\n color: '#64748b',\n fontWeight: '600',\n },\n modalBtnPrimary: {\n backgroundColor: mobileTokens.color.primary,\n borderRadius: 12,\n paddingHorizontal: 18,\n paddingVertical: 10,\n minWidth: 88,\n alignItems: 'center',\n },\n modalBtnPrimaryLabel: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":";;;;;;;;;;;;;;;;AAoBA,MAAM,OAAU,GAAA,SAAA;AAChB,SAAwB,aAAgB,GAAA;AArBxC,EAAA,IAAA,EAAA,EAAA,EAAA;AAsBE,EAAA,MAAM,aAAa,aAAmB,EAAA;AACtC,EAAA,MAAM,QAAQ,QAAc,EAAA;AAC5B,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,WAAY,EAAA;AAChB,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,EAAA,MAAM,SAAS,iBAAkB,EAAA;AACjC,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAM,MAAA,QAAA,GAAW,YAAoC,YAAY,CAAA;AACjE,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA;AAAA,MACJ,sBAAuB,CAAA;AAAA,IACzB,WAAa,EAAA,mBAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACd,CAAA;AACD,EAAA,MAAM,CAAC,OAAS,EAAA;AAAA,IACd,OAAS,EAAA;AAAA,GACV,IAAI,kBAAmB,EAAA;AACxB,EAAA,MAAM,CAAC,iBAAmB,EAAA;AAAA,IACxB,OAAS,EAAA;AAAA,GACV,IAAI,4BAA6B,EAAA;AAClC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAM,MAAA,OAAA,GAAU,QAAQ,MAAM;AA9ChC,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA+CI,IAAM,MAAA,GAAA,GAAA,CAAMA,OAAAD,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAP,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAe,OAAf,KAAA,IAAA,GAAAC,GAAgD,GAAA,EAAA;AAC5D,IAAO,OAAA,OAAO,QAAQ,QAAY,IAAA,GAAA,CAAI,MAAS,GAAA,GAAA,CAAI,MAAS,GAAA,IAAA;AAAA,KAC3D,CAAC,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,OAAO,CAAC,CAAA;AAC3B,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM,sBAAA,CAAuB,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA;AAC9E,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM,aAAA,CAAc,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA;AAC/D,EAAM,MAAA,QAAA,GAAW,QAAQ,MAAM,gBAAA,CAAiB,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA;AACrE,EAAM,MAAA,QAAA,GAAW,QAAQ,MAAG;AArD9B,IAAAD,IAAAA,GAAAA;AAqDiC,IAAA,OAAA,mBAAA,CAAA,CAAoBA,MAAA,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,cAAA,KAAb,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAA6B,QAAQ,QAAQ,CAAA;AAAA,GAAA,EAAG,EAAC,EAAa,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,cAAA,KAAb,IAA6B,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClJ,EAAA,MAAM,IAAO,GAAA,QAAA;AACb,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AAvDvC,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAwDI,IAAA,IAAA,CAAID,GAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,SAAZ,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAA,IAA2B,CAAA,UAAA,CAAA,EAAA;AAC7B,MAAA,UAAA,CAAW,MAAO,EAAA;AAClB,MAAA;AAAA;AAEF,IAAA,CAAAC,MAAA,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,QAAA,KAAZ,gBAAAA,GAAA,CAAA,IAAA,CAAA,UAAA,EAAuB,cAAc,QAAS,CAAA;AAAA,MAC5C,IAAM,EAAA,uBAAA;AAAA,MACN,QAAQ,OAAU,GAAA;AAAA,QAChB;AAAA,OACE,GAAA;AAAA,KACL,CAAA,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,OAAO,CAAC,CAAA;AACxB,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAA,MAAM,KAAQ,GAAA,gBAAA,CAAiB,WAAgB,KAAA,SAAA,GAAY,KAAK,WAAW,CAAA;AAC3E,IAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAC5B,IAAA,aAAA,CAAc,MAAM,UAAU,CAAA;AAC9B,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,GAClB,EAAG,CAAC,WAAW,CAAC,CAAA;AAChB,EAAM,MAAA,QAAA,GAAW,YAAY,YAAY;AACvC,IAAI,IAAA;AACF,MAAA,MAAM,OAAQ,CAAA;AAAA,QACZ,SAAW,EAAA;AAAA,UACT,SAAA,EAAW,SAAU,CAAA,IAAA,EAAU,IAAA,KAAA,CAAA;AAAA,UAC/B,UAAA,EAAY,UAAW,CAAA,IAAA,EAAU,IAAA,KAAA;AAAA;AACnC,OACD,CAAA;AACD,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,aACV,KAAO,EAAA;AACd,MAAA,KAAA,CAAM,MAAM,uBAAyB,EAAA,KAAA,YAAiB,KAAQ,GAAA,KAAA,CAAM,UAAU,mBAAmB,CAAA;AAAA;AACnG,GACC,EAAA,CAAC,UAAY,EAAA,SAAA,EAAW,OAAO,CAAC,CAAA;AACnC,EAAM,MAAA,SAAA,GAAY,YAAY,YAAY;AACxC,IAAI,IAAA;AACF,MAAM,MAAA;AAAA,QACJ;AAAA,OACF,GAAI,MAAM,iBAAkB,EAAA;AAC5B,MAAI,IAAA,EAAC,6BAAM,iBAAmB,CAAA,EAAA;AAC5B,QAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA;AAAA;AAEhE,MAAA,MAAM,OAAQ,CAAA,OAAA,CAAQ,QAAS,CAAA,iBAAA,EAA0B,CAAC,CAAA;AAAA,aACnD,KAAO,EAAA;AACd,MAAA,KAAA,CAAM,MAAM,0BAA4B,EAAA,KAAA,YAAiB,KAAQ,GAAA,KAAA,CAAM,UAAU,sCAAsC,CAAA;AAAA;AACzH,GACC,EAAA,CAAC,iBAAmB,EAAA,QAAQ,CAAC,CAAA;AAChC,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAA,IAAI,IAAM,EAAA;AACV,IAAM,KAAA,CAAA,KAAA,CAAM,gBAAkB,EAAA,sGAAA,EAAwG,CAAC;AAAA,MACrI,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACN,EAAA;AAAA,MACD,IAAM,EAAA,gBAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,SAAS,MAAM;AACb,QAAM,KAAA,CAAA,KAAA,CAAM,eAAiB,EAAA,2CAAA,EAA6C,CAAC;AAAA,UACzE,IAAM,EAAA,QAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACN,EAAA;AAAA,UACD,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,aAAA;AAAA,UACP,OAAA,EAAS,MAAM,KAAK,SAAU;AAAA,SAC/B,CAAC,CAAA;AAAA;AACJ,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,IAAM,EAAA,SAAS,CAAC,CAAA;AACpB,EAAO,uBAAA,IAAA,CAAC,YAAa,EAAA,EAAA,KAAA,EAAO,CAAC,KAAA,EAAO,MAAQ,EAAA,OAAO,CAAG,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,IAAM,EAAA;AAAA,IACzE,eAAA,EAAiB,SAAS,SAAY,GAAA;AAAA,GACvC,CACS,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,MAAQ,EAAA;AAAA,MACnC,UAAY,EAAA,MAAA,CAAO,GAAM,GAAA,CAAA,GAAI,CAAI,GAAA;AAAA,KAClC,CACW,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,SAAA,EAAA,EAAU,SAAS,UAAY,EAAA,iBAAA,EAAkB,UAAS,kBAAmB,EAAA,SAAA,EAAU,OAAO,CAAC;AAAA,QACxG;AAAA,OACF,KAAM,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,QACxB,iBAAiB,MAAO,CAAA;AAAA,OACvB,EAAA,OAAA,IAAW,MAAO,CAAA,OAAO,GACd,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,cAAA,EAAe,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,MAAA,CAAO,MAAM,CAChE,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,WAAa,EAAA;AAAA,QAC1C,OAAO,MAAO,CAAA;AAAA,OACf,GAAG,QAAO,EAAA,SAAA,EAAA,CAAA;AAAA,sBACA,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,YAAc,EAAA;AAAA,KACtC,EAAA,CAAA;AAAA,yBAEC,UAAW,EAAA,EAAA,qBAAA,EAAuB,MAAO,CAAA,MAAA,EAAQ,2BAA0B,SACxE,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,EAAM,oBAAmB,iBACzC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAChB,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,GAAK,EAAA,QAAA,EAAU,IAAM,EAAA,WAAA,EAAa,IAAM,EAAA,EAAA,EAAI,CAC/D,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,UACzC,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAe,EAAA,iBAAA,EAAA;AAAA,OACX,EAAA,CAAA;AAAA,sBAEC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACnC,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACa,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,SAAA,EAAA,EAAU,SAAS,cAAgB,EAAA,iBAAA,EAAkB,UAAS,kBAAmB,EAAA,aAAA,EAAc,OAAO,CAAC;AAAA,UAClH;AAAA,SACF,KAAM,CAAC,MAAA,CAAO,GAAK,EAAA;AAAA,UACjB,eAAiB,EAAA,OAAA,GAAU,MAAO,CAAA,YAAA,GAAe,MAAO,CAAA;AAAA,SACzD,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,0BACO,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACA,QACL,EAAA,WAAA,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,YAAS,IAAK,EAAA,iBAAA,EAAkB,MAAM,EAAI,EAAA,KAAA,EAAO,MAAS,GAAA,SAAA,GAAY,SAAW,EAAA;AAAA,SACtF,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,UACxC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CAAG,EAAA,CAAA;AAAA,wBACS,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,GAAK,EAAA;AAAA,UACpC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAK,EAAA,OAAA,EAAA,CAAA;AAAA,0BACM,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACA,mBAAS,QACd,EAAA;AAAA,SACJ,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,UACxC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CAAG,EAAA,CAAA;AAAA,wBACS,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,GAAK,EAAA;AAAA,UACpC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAQ,EAAA,UAAA,EAAA,CAAA;AAAA,0BACG,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACA,sBAAY,QACjB,EAAA;AAAA,SACJ,EAAA;AAAA,OACJ,EAAA,CAAA;AAAA,sBAEA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,mBAAqB,EAAA,QAAA,EAAU,IAAM,EAAA,iBAAA,EAAkB,QAAS,EAAA,kBAAA,EAAmB,gBAAiB,EAAA,KAAA,EAAO,CAAC;AAAA,QACxI;AAAA,OACF,KAAM,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,QACxB,iBAAiB,OAAW,IAAA,CAAC,IAAO,GAAA,MAAA,CAAO,eAAe,MAAO,CAAA;AAAA,OAClE,CAAA,EACc,QAAW,EAAA,QAAA,mBAAA,GAAA,CAAC,qBAAkB,KAAM,EAAA,SAAA,EAAU,CAAK,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAa,4BAAc,CACvG,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA,oBAEA,GAAA,CAAC,SAAM,OAAS,EAAA,QAAA,EAAU,eAAc,MAAO,EAAA,WAAA,EAAW,IAAC,EAAA,cAAA,EAAgB,MAAM,WAAA,CAAY,KAAK,CAC9F,EAAA,QAAA,kBAAA,IAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAU,QAAS,CAAA,EAAA,KAAO,QAAQ,SAAY,GAAA,MAAA,EAAW,KAAO,EAAA,MAAA,CAAO,aACzF,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,SAAA,EAAA,EAAU,OAAO,MAAO,CAAA,YAAA,EAAc,SAAS,MAAM,WAAA,CAAY,KAAK,CAAG,EAAA,CAAA;AAAA,sBACzE,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,QAC1C,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACe,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,UAC7C,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAgB,EAAA,kBAAA,EAAA,CAAA;AAAA,wBACL,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,eAAiB,EAAA;AAAA,UAClD,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,SAAU,EAAA,EAAA,KAAA,EAAO,SAAW,EAAA,YAAA,EAAc,YAAc,EAAA,cAAA,EAAe,OAAQ,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,KAAO,EAAA;AAAA,UAClH,OAAO,MAAO,CAAA,IAAA;AAAA,UACd,iBAAiB,MAAO,CAAA,YAAA;AAAA,UACxB,aAAa,MAAO,CAAA;AAAA,SACrB,CAAG,EAAA,WAAA,EAAY,YAAa,EAAA,oBAAA,EAAsB,OAAO,SAAW,EAAA,CAAA;AAAA,wBACtD,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,eAAiB,EAAA;AAAA,UAClD,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAS,EAAA,WAAA,EAAA,CAAA;AAAA,wBACC,GAAA,CAAC,SAAU,EAAA,EAAA,KAAA,EAAO,UAAY,EAAA,YAAA,EAAc,aAAe,EAAA,cAAA,EAAe,OAAQ,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,KAAO,EAAA;AAAA,UACpH,OAAO,MAAO,CAAA,IAAA;AAAA,UACd,iBAAiB,MAAO,CAAA,YAAA;AAAA,UACxB,aAAa,MAAO,CAAA;AAAA,SACrB,CAAG,EAAA,WAAA,EAAY,WAAY,EAAA,oBAAA,EAAsB,OAAO,SAAW,EAAA,CAAA;AAAA,wBACrD,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,YAChB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAG,EAAA,KAAA,EAAO,MAAO,CAAA,aAAA,EACxD,8BAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,kBAAA,EAAoB,oBAAM,CAClD,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,KAAK,UAAY,EAAA,QAAA,EAAU,UAAY,EAAA,KAAA,EAAO,MAAO,CAAA,eAAA,EAC1E,uCAAc,GAAA,CAAA,iBAAA,EAAA,EAAkB,KAAM,EAAA,MAAA,EAAO,CAAK,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,oBAAsB,EAAA,QAAA,EAAA,MAAA,EAAI,CACrG,EAAA;AAAA,SACJ,EAAA;AAAA,OACJ,EAAA;AAAA,KAAA,EACJ,CACJ,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,CAAA;AAAA,IACN,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,iBAAmB,EAAA,EAAA;AAAA,IACnB,aAAe,EAAA,CAAA;AAAA,IACf,SAAW,EAAA;AAAA,GACb;AAAA,EACA,UAAY,EAAA,cAAA,CAAA;AAAA,IACV,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA,MAAA;AAAA,IACjB,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAAA,EACb,aAAa,MAAO,CAAA,IAAA,CAAA;AAAA,EAEzB,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,CAAA;AAAA,IACN,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,OAAS,EAAA;AAAA,IACP,OAAS,EAAA;AAAA,GACX;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,iBAAmB,EAAA,EAAA;AAAA,IACnB,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA,QAAA;AAAA,IACZ,UAAY,EAAA,EAAA;AAAA,IACZ,aAAe,EAAA,EAAA;AAAA,IACf,GAAK,EAAA;AAAA,GACP;AAAA,EACA,WAAa,EAAA;AAAA,IACX,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,eAAiB,EAAA,MAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,GAAK,EAAA;AAAA,IACH,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,SAAW,EAAA,EAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,GAAK,EAAA,EAAA;AAAA,IACL,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAQ,UAAW,CAAA,aAAA;AAAA,IACnB,eAAiB,EAAA,SAAA;AAAA,IACjB,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,EAAA;AAAA,IACX,eAAiB,EAAA,MAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,SAAW,EAAA,EAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,aAAe,EAAA;AAAA,IACb,IAAM,EAAA,CAAA;AAAA,IACN,eAAiB,EAAA,wBAAA;AAAA,IACjB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,SAAW,EAAA;AAAA,IACT,eAAiB,EAAA,MAAA;AAAA,IACjB,mBAAqB,EAAA,EAAA;AAAA,IACrB,oBAAsB,EAAA,EAAA;AAAA,IACtB,OAAS,EAAA,EAAA;AAAA,IACT,aAAe,EAAA,EAAA;AAAA,IACf,GAAK,EAAA;AAAA,GACP;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,KAAO,EAAA;AAAA,IACL,WAAa,EAAA,CAAA;AAAA,IACb,WAAa,EAAA,SAAA;AAAA,IACb,YAAc,EAAA,EAAA;AAAA,IACd,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA,UAAA;AAAA,IAChB,GAAK,EAAA,EAAA;AAAA,IACL,SAAW,EAAA;AAAA,GACb;AAAA,EACA,aAAe,EAAA;AAAA,IACb,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,kBAAoB,EAAA;AAAA,IAClB,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA;AAAA,GACd;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,eAAA,EAAiB,aAAa,KAAM,CAAA,OAAA;AAAA,IACpC,YAAc,EAAA,EAAA;AAAA,IACd,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,oBAAsB,EAAA;AAAA,IACpB,KAAO,EAAA,MAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA;AAEhB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/screens/Account/index.tsx"],"sourcesContent":["/**\n * Account screen for App Store 5.1.1(v): profile details plus in-app\n * permanent account deletion. Layout follows the grouped iOS settings cards\n * (avatar, Name / Email / Username, Delete Account).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n KeyboardAvoidingView,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n TextInput,\n View,\n} from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { IUserState } from '@adminide-stack/core';\nimport { Store, logoutAndRedirect, userSelector } from '@adminide-stack/user-auth0-client';\nimport { useAccountProfileQuery, useDeleteUserAccountMutation, useSetNameMutation } from 'common/graphql';\nimport { ProfileAvatar } from '../../components/ProfileAvatar';\nimport { mobileColors, mobileTokens } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport {\n pickAuthEmail,\n pickAuthUsername,\n pickPrimaryDisplayName,\n pickProfilePhotoUrl,\n} from '../../utils/authUserDisplay';\nimport { splitDisplayName } from './splitDisplayName';\n\nexport default function AccountScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const { isDark } = useAppTheme();\n const colors = mobileColors(isDark);\n const insets = useSafeAreaInsets();\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-and-network',\n errorPolicy: 'all',\n });\n const [setName, { loading: savingName }] = useSetNameMutation();\n const [deleteUserAccount, { loading: deleting }] = useDeleteUserAccountMutation();\n\n const [nameOpen, setNameOpen] = useState(false);\n const [givenName, setGivenName] = useState('');\n const [familyName, setFamilyName] = useState('');\n\n const orgName = useMemo(() => {\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params?.orgName]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n const username = useMemo(() => pickAuthUsername(authUser), [authUser]);\n\n const photoUrl = useMemo(\n () => pickProfilePhotoUrl(profileData?.accountProfile?.photos, authUser),\n [profileData?.accountProfile?.photos, authUser],\n );\n\n const busy = deleting;\n\n const handleBack = useCallback(() => {\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Layout.Home',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [navigation, orgName]);\n\n const openNameEditor = useCallback(() => {\n const split = splitDisplayName(displayName === 'Account' ? '' : displayName);\n setGivenName(split.givenName);\n setFamilyName(split.familyName);\n setNameOpen(true);\n }, [displayName]);\n\n const saveName = useCallback(async () => {\n try {\n await setName({\n variables: {\n givenName: givenName.trim() || undefined,\n familyName: familyName.trim() || undefined,\n },\n });\n setNameOpen(false);\n } catch (error) {\n Alert.alert('Could not update name', error instanceof Error ? error.message : 'Please try again.');\n }\n }, [familyName, givenName, setName]);\n\n const runDelete = useCallback(async () => {\n try {\n const { data } = await deleteUserAccount();\n if (!data?.deleteUserAccount) {\n throw new Error('The server did not confirm account deletion.');\n }\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n } catch (error) {\n Alert.alert(\n 'Could not delete account',\n error instanceof Error ? error.message : 'Please try again or contact support.',\n );\n }\n }, [deleteUserAccount, dispatch]);\n\n const handleDeleteAccount = useCallback(() => {\n if (busy) return;\n Alert.alert(\n 'Delete Account',\n 'This permanently deletes your Yantra account and the data associated with it. This cannot be undone.',\n [\n { text: 'Cancel', style: 'cancel' },\n {\n text: 'Delete Account',\n style: 'destructive',\n onPress: () => {\n Alert.alert('Are you sure?', 'Your account will be deleted immediately.', [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Delete Account', style: 'destructive', onPress: () => void runDelete() },\n ]);\n },\n },\n ],\n );\n }, [busy, runDelete]);\n\n return (\n <SafeAreaView edges={['top', 'left', 'right']} style={[styles.safe, { backgroundColor: colors.bg }]}>\n <View style={[styles.header, { paddingTop: insets.top > 0 ? 4 : 10 }]}>\n <Pressable\n onPress={handleBack}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Go back\"\n style={({ pressed }) => [\n styles.backCircle,\n { backgroundColor: colors.surface },\n pressed && styles.pressed,\n ]}\n >\n <Ionicons name=\"chevron-back\" size={22} color={colors.text} />\n </Pressable>\n <Text style={[styles.headerTitle, { color: colors.text }]}>Account</Text>\n <View style={styles.headerSpacer} />\n </View>\n\n <ScrollView contentContainerStyle={styles.scroll} keyboardShouldPersistTaps=\"handled\">\n <View style={styles.hero} accessibilityLabel=\"Profile picture\">\n <View style={styles.avatarLarge}>\n <ProfileAvatar uri={photoUrl} name={displayName} size={88} />\n </View>\n <Text style={[styles.heroHint, { color: colors.textMuted }]}>Profile picture</Text>\n </View>\n\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={openNameEditor}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Change name\"\n style={({ pressed }) => [\n styles.row,\n { backgroundColor: pressed ? colors.surfaceMuted : colors.surface },\n ]}\n >\n <Text style={[styles.rowLabel, { color: colors.text }]}>Name</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {displayName}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n <View style={[styles.rowLine, { backgroundColor: colors.border }]} />\n <View style={[styles.row, { backgroundColor: colors.surface }]}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>Email</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {email || '—'}\n </Text>\n </View>\n <View style={[styles.rowLine, { backgroundColor: colors.border }]} />\n <View style={[styles.row, { backgroundColor: colors.surface }]}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>Username</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {username || '—'}\n </Text>\n </View>\n </View>\n\n <Pressable\n onPress={handleDeleteAccount}\n disabled={busy}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Delete Account\"\n style={({ pressed }) => [\n styles.deleteCard,\n { backgroundColor: pressed && !busy ? colors.surfaceMuted : colors.surface },\n ]}\n >\n {deleting ? (\n <ActivityIndicator color=\"#ef4444\" />\n ) : (\n <Text style={styles.deleteLabel}>Delete Account</Text>\n )}\n </Pressable>\n </ScrollView>\n\n <Modal visible={nameOpen} animationType=\"fade\" transparent onRequestClose={() => setNameOpen(false)}>\n <KeyboardAvoidingView\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n style={styles.modalBackdrop}\n >\n <Pressable style={styles.modalDismiss} onPress={() => setNameOpen(false)} />\n <View style={[styles.modalCard, { backgroundColor: colors.surface }]}>\n <Text style={[styles.modalTitle, { color: colors.text }]}>Change full name</Text>\n <Text style={[styles.modalFieldLabel, { color: colors.textMuted }]}>First name</Text>\n <TextInput\n value={givenName}\n onChangeText={setGivenName}\n autoCapitalize=\"words\"\n style={[\n styles.input,\n {\n color: colors.text,\n backgroundColor: colors.surfaceMuted,\n borderColor: colors.border,\n },\n ]}\n placeholder=\"First name\"\n placeholderTextColor={colors.textMuted}\n />\n <Text style={[styles.modalFieldLabel, { color: colors.textMuted }]}>Last name</Text>\n <TextInput\n value={familyName}\n onChangeText={setFamilyName}\n autoCapitalize=\"words\"\n style={[\n styles.input,\n {\n color: colors.text,\n backgroundColor: colors.surfaceMuted,\n borderColor: colors.border,\n },\n ]}\n placeholder=\"Last name\"\n placeholderTextColor={colors.textMuted}\n />\n <View style={styles.modalActions}>\n <Pressable onPress={() => setNameOpen(false)} style={styles.modalBtnGhost}>\n <Text style={styles.modalBtnGhostLabel}>Cancel</Text>\n </Pressable>\n <Pressable\n onPress={() => void saveName()}\n disabled={savingName}\n style={styles.modalBtnPrimary}\n >\n {savingName ? (\n <ActivityIndicator color=\"#fff\" />\n ) : (\n <Text style={styles.modalBtnPrimaryLabel}>Save</Text>\n )}\n </Pressable>\n </View>\n </View>\n </KeyboardAvoidingView>\n </Modal>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safe: {\n flex: 1,\n },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingHorizontal: 16,\n paddingBottom: 8,\n minHeight: 52,\n },\n backCircle: {\n width: 40,\n height: 40,\n borderRadius: 20,\n backgroundColor: '#fff',\n alignItems: 'center',\n justifyContent: 'center',\n ...mobileTokens.shadow.card,\n },\n headerTitle: {\n flex: 1,\n textAlign: 'center',\n fontSize: 17,\n fontWeight: '600',\n color: '#111827',\n },\n headerSpacer: {\n width: 40,\n height: 40,\n },\n pressed: {\n opacity: 0.72,\n },\n scroll: {\n paddingHorizontal: 16,\n paddingBottom: 40,\n },\n hero: {\n alignItems: 'center',\n paddingTop: 12,\n paddingBottom: 28,\n gap: 12,\n },\n avatarLarge: {\n width: 88,\n height: 88,\n borderRadius: 44,\n overflow: 'hidden',\n },\n heroHint: {\n fontSize: 14,\n color: '#9ca3af',\n fontWeight: '500',\n },\n card: {\n backgroundColor: '#fff',\n borderRadius: 16,\n overflow: 'hidden',\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 52,\n paddingHorizontal: 16,\n gap: 12,\n backgroundColor: '#fff',\n },\n rowPressed: {\n backgroundColor: '#f8fafc',\n },\n rowLabel: {\n fontSize: 16,\n color: '#111827',\n fontWeight: '400',\n width: 96,\n },\n rowValue: {\n flex: 1,\n fontSize: 16,\n color: '#9ca3af',\n textAlign: 'right',\n },\n rowLine: {\n height: StyleSheet.hairlineWidth,\n backgroundColor: '#ececec',\n marginLeft: 16,\n },\n deleteCard: {\n marginTop: 16,\n backgroundColor: '#fff',\n borderRadius: 16,\n minHeight: 52,\n paddingHorizontal: 16,\n justifyContent: 'center',\n },\n deleteLabel: {\n fontSize: 16,\n fontWeight: '500',\n color: '#ef4444',\n },\n modalBackdrop: {\n flex: 1,\n backgroundColor: 'rgba(15, 23, 42, 0.45)',\n justifyContent: 'flex-end',\n },\n modalDismiss: {\n flex: 1,\n },\n modalCard: {\n backgroundColor: '#fff',\n borderTopLeftRadius: 20,\n borderTopRightRadius: 20,\n padding: 20,\n paddingBottom: 28,\n gap: 8,\n },\n modalTitle: {\n fontSize: 18,\n fontWeight: '700',\n color: '#0f172a',\n marginBottom: 8,\n },\n modalFieldLabel: {\n fontSize: 13,\n fontWeight: '600',\n color: '#64748b',\n marginTop: 4,\n },\n input: {\n borderWidth: 1,\n borderColor: '#e2e8f0',\n borderRadius: 12,\n paddingHorizontal: 12,\n paddingVertical: 12,\n fontSize: 16,\n color: '#0f172a',\n backgroundColor: '#f8fafc',\n },\n modalActions: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n gap: 10,\n marginTop: 16,\n },\n modalBtnGhost: {\n paddingHorizontal: 14,\n paddingVertical: 10,\n },\n modalBtnGhostLabel: {\n fontSize: 16,\n color: '#64748b',\n fontWeight: '600',\n },\n modalBtnPrimary: {\n backgroundColor: mobileTokens.color.primary,\n borderRadius: 12,\n paddingHorizontal: 18,\n paddingVertical: 10,\n minWidth: 88,\n alignItems: 'center',\n },\n modalBtnPrimaryLabel: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":";;;;;;;;;;;;;;;;AAoBA,SAAwB,aAAgB,GAAA;AApBxC,EAAA,IAAA,EAAA,EAAA,EAAA;AAqBE,EAAA,MAAM,aAAa,aAAmB,EAAA;AACtC,EAAA,MAAM,QAAQ,QAAc,EAAA;AAC5B,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,WAAY,EAAA;AAChB,EAAM,MAAA,MAAA,GAAS,aAAa,MAAM,CAAA;AAClC,EAAA,MAAM,SAAS,iBAAkB,EAAA;AACjC,EAAA,MAAM,WAAW,WAAY,EAAA;AAC7B,EAAM,MAAA,QAAA,GAAW,YAAoC,YAAY,CAAA;AACjE,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA;AAAA,MACJ,sBAAuB,CAAA;AAAA,IACzB,WAAa,EAAA,mBAAA;AAAA,IACb,WAAa,EAAA;AAAA,GACd,CAAA;AACD,EAAA,MAAM,CAAC,OAAS,EAAA;AAAA,IACd,OAAS,EAAA;AAAA,GACV,IAAI,kBAAmB,EAAA;AACxB,EAAA,MAAM,CAAC,iBAAmB,EAAA;AAAA,IACxB,OAAS,EAAA;AAAA,GACV,IAAI,4BAA6B,EAAA;AAClC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/C,EAAM,MAAA,OAAA,GAAU,QAAQ,MAAM;AA7ChC,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA8CI,IAAM,MAAA,GAAA,GAAA,CAAMA,OAAAD,GAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,WAAP,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAe,OAAf,KAAA,IAAA,GAAAC,GAAgD,GAAA,EAAA;AAC5D,IAAO,OAAA,OAAO,QAAQ,QAAY,IAAA,GAAA,CAAI,MAAS,GAAA,GAAA,CAAI,MAAS,GAAA,IAAA;AAAA,KAC3D,CAAC,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAO,MAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,OAAO,CAAC,CAAA;AAC3B,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM,sBAAA,CAAuB,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA;AAC9E,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM,aAAA,CAAc,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA;AAC/D,EAAM,MAAA,QAAA,GAAW,QAAQ,MAAM,gBAAA,CAAiB,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA;AACrE,EAAM,MAAA,QAAA,GAAW,QAAQ,MAAG;AApD9B,IAAAD,IAAAA,GAAAA;AAoDiC,IAAA,OAAA,mBAAA,CAAA,CAAoBA,MAAA,WAAa,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,cAAA,KAAb,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAA6B,QAAQ,QAAQ,CAAA;AAAA,GAAA,EAAG,EAAC,EAAa,GAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAA,cAAA,KAAb,IAA6B,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClJ,EAAA,MAAM,IAAO,GAAA,QAAA;AACb,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AAtDvC,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AAuDI,IAAA,IAAA,CAAID,GAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,SAAZ,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAA,IAA2B,CAAA,UAAA,CAAA,EAAA;AAC7B,MAAA,UAAA,CAAW,MAAO,EAAA;AAClB,MAAA;AAAA;AAEF,IAAA,CAAAC,MAAA,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,QAAA,KAAZ,gBAAAA,GAAA,CAAA,IAAA,CAAA,UAAA,EAAuB,cAAc,QAAS,CAAA;AAAA,MAC5C,IAAM,EAAA,uBAAA;AAAA,MACN,QAAQ,OAAU,GAAA;AAAA,QAChB;AAAA,OACE,GAAA;AAAA,KACL,CAAA,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,OAAO,CAAC,CAAA;AACxB,EAAM,MAAA,cAAA,GAAiB,YAAY,MAAM;AACvC,IAAA,MAAM,KAAQ,GAAA,gBAAA,CAAiB,WAAgB,KAAA,SAAA,GAAY,KAAK,WAAW,CAAA;AAC3E,IAAA,YAAA,CAAa,MAAM,SAAS,CAAA;AAC5B,IAAA,aAAA,CAAc,MAAM,UAAU,CAAA;AAC9B,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,GAClB,EAAG,CAAC,WAAW,CAAC,CAAA;AAChB,EAAM,MAAA,QAAA,GAAW,YAAY,YAAY;AACvC,IAAI,IAAA;AACF,MAAA,MAAM,OAAQ,CAAA;AAAA,QACZ,SAAW,EAAA;AAAA,UACT,SAAA,EAAW,SAAU,CAAA,IAAA,EAAU,IAAA,KAAA,CAAA;AAAA,UAC/B,UAAA,EAAY,UAAW,CAAA,IAAA,EAAU,IAAA,KAAA;AAAA;AACnC,OACD,CAAA;AACD,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,aACV,KAAO,EAAA;AACd,MAAA,KAAA,CAAM,MAAM,uBAAyB,EAAA,KAAA,YAAiB,KAAQ,GAAA,KAAA,CAAM,UAAU,mBAAmB,CAAA;AAAA;AACnG,GACC,EAAA,CAAC,UAAY,EAAA,SAAA,EAAW,OAAO,CAAC,CAAA;AACnC,EAAM,MAAA,SAAA,GAAY,YAAY,YAAY;AACxC,IAAI,IAAA;AACF,MAAM,MAAA;AAAA,QACJ;AAAA,OACF,GAAI,MAAM,iBAAkB,EAAA;AAC5B,MAAI,IAAA,EAAC,6BAAM,iBAAmB,CAAA,EAAA;AAC5B,QAAM,MAAA,IAAI,MAAM,8CAA8C,CAAA;AAAA;AAEhE,MAAA,MAAM,OAAQ,CAAA,OAAA,CAAQ,QAAS,CAAA,iBAAA,EAA0B,CAAC,CAAA;AAAA,aACnD,KAAO,EAAA;AACd,MAAA,KAAA,CAAM,MAAM,0BAA4B,EAAA,KAAA,YAAiB,KAAQ,GAAA,KAAA,CAAM,UAAU,sCAAsC,CAAA;AAAA;AACzH,GACC,EAAA,CAAC,iBAAmB,EAAA,QAAQ,CAAC,CAAA;AAChC,EAAM,MAAA,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAA,IAAI,IAAM,EAAA;AACV,IAAM,KAAA,CAAA,KAAA,CAAM,gBAAkB,EAAA,sGAAA,EAAwG,CAAC;AAAA,MACrI,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACN,EAAA;AAAA,MACD,IAAM,EAAA,gBAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,SAAS,MAAM;AACb,QAAM,KAAA,CAAA,KAAA,CAAM,eAAiB,EAAA,2CAAA,EAA6C,CAAC;AAAA,UACzE,IAAM,EAAA,QAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACN,EAAA;AAAA,UACD,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,aAAA;AAAA,UACP,OAAA,EAAS,MAAM,KAAK,SAAU;AAAA,SAC/B,CAAC,CAAA;AAAA;AACJ,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,IAAM,EAAA,SAAS,CAAC,CAAA;AACpB,EAAO,uBAAA,IAAA,CAAC,YAAa,EAAA,EAAA,KAAA,EAAO,CAAC,KAAA,EAAO,MAAQ,EAAA,OAAO,CAAG,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,IAAM,EAAA;AAAA,IACzE,iBAAiB,MAAO,CAAA;AAAA,GACzB,CACS,EAAA,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,MAAQ,EAAA;AAAA,MACnC,UAAY,EAAA,MAAA,CAAO,GAAM,GAAA,CAAA,GAAI,CAAI,GAAA;AAAA,KAClC,CACW,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,SAAA,EAAA,EAAU,SAAS,UAAY,EAAA,iBAAA,EAAkB,UAAS,kBAAmB,EAAA,SAAA,EAAU,OAAO,CAAC;AAAA,QACxG;AAAA,OACF,KAAM,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,QACxB,iBAAiB,MAAO,CAAA;AAAA,OACvB,EAAA,OAAA,IAAW,MAAO,CAAA,OAAO,GACd,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,IAAK,EAAA,cAAA,EAAe,IAAM,EAAA,EAAA,EAAI,KAAO,EAAA,MAAA,CAAO,MAAM,CAChE,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,WAAa,EAAA;AAAA,QAC1C,OAAO,MAAO,CAAA;AAAA,OACf,GAAG,QAAO,EAAA,SAAA,EAAA,CAAA;AAAA,sBACA,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,YAAc,EAAA;AAAA,KACtC,EAAA,CAAA;AAAA,yBAEC,UAAW,EAAA,EAAA,qBAAA,EAAuB,MAAO,CAAA,MAAA,EAAQ,2BAA0B,SACxE,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,IAAA,EAAM,oBAAmB,iBACzC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAChB,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,GAAK,EAAA,QAAA,EAAU,IAAM,EAAA,WAAA,EAAa,IAAM,EAAA,EAAA,EAAI,CAC/D,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,UACzC,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAe,EAAA,iBAAA,EAAA;AAAA,OACX,EAAA,CAAA;AAAA,sBAEC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACnC,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACa,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,SAAA,EAAA,EAAU,SAAS,cAAgB,EAAA,iBAAA,EAAkB,UAAS,kBAAmB,EAAA,aAAA,EAAc,OAAO,CAAC;AAAA,UAClH;AAAA,SACF,KAAM,CAAC,MAAA,CAAO,GAAK,EAAA;AAAA,UACjB,eAAiB,EAAA,OAAA,GAAU,MAAO,CAAA,YAAA,GAAe,MAAO,CAAA;AAAA,SACzD,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,0BACO,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACA,QACL,EAAA,WAAA,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,YAAS,IAAK,EAAA,iBAAA,EAAkB,MAAM,EAAI,EAAA,KAAA,EAAO,MAAS,GAAA,SAAA,GAAY,SAAW,EAAA;AAAA,SACtF,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,UACxC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CAAG,EAAA,CAAA;AAAA,wBACS,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,GAAK,EAAA;AAAA,UACpC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAK,EAAA,OAAA,EAAA,CAAA;AAAA,0BACM,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACA,mBAAS,QACd,EAAA;AAAA,SACJ,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,UACxC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CAAG,EAAA,CAAA;AAAA,wBACS,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,GAAK,EAAA;AAAA,UACpC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAQ,EAAA,UAAA,EAAA,CAAA;AAAA,0BACG,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,YAC3C,OAAO,MAAO,CAAA;AAAA,WACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACA,sBAAY,QACjB,EAAA;AAAA,SACJ,EAAA;AAAA,OACJ,EAAA,CAAA;AAAA,sBAEA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,mBAAqB,EAAA,QAAA,EAAU,IAAM,EAAA,iBAAA,EAAkB,QAAS,EAAA,kBAAA,EAAmB,gBAAiB,EAAA,KAAA,EAAO,CAAC;AAAA,QACxI;AAAA,OACF,KAAM,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,QACxB,iBAAiB,OAAW,IAAA,CAAC,IAAO,GAAA,MAAA,CAAO,eAAe,MAAO,CAAA;AAAA,OAClE,CAAA,EACc,QAAW,EAAA,QAAA,mBAAA,GAAA,CAAC,qBAAkB,KAAM,EAAA,SAAA,EAAU,CAAK,mBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAa,4BAAc,CACvG,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA,oBAEA,GAAA,CAAC,SAAM,OAAS,EAAA,QAAA,EAAU,eAAc,MAAO,EAAA,WAAA,EAAW,IAAC,EAAA,cAAA,EAAgB,MAAM,WAAA,CAAY,KAAK,CAC9F,EAAA,QAAA,kBAAA,IAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAU,QAAS,CAAA,EAAA,KAAO,QAAQ,SAAY,GAAA,MAAA,EAAW,KAAO,EAAA,MAAA,CAAO,aACzF,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,SAAA,EAAA,EAAU,OAAO,MAAO,CAAA,YAAA,EAAc,SAAS,MAAM,WAAA,CAAY,KAAK,CAAG,EAAA,CAAA;AAAA,sBACzE,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,QAC1C,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACe,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,UAC7C,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAgB,EAAA,kBAAA,EAAA,CAAA;AAAA,wBACL,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,eAAiB,EAAA;AAAA,UAClD,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAU,EAAA,YAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,SAAU,EAAA,EAAA,KAAA,EAAO,SAAW,EAAA,YAAA,EAAc,YAAc,EAAA,cAAA,EAAe,OAAQ,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,KAAO,EAAA;AAAA,UAClH,OAAO,MAAO,CAAA,IAAA;AAAA,UACd,iBAAiB,MAAO,CAAA,YAAA;AAAA,UACxB,aAAa,MAAO,CAAA;AAAA,SACrB,CAAG,EAAA,WAAA,EAAY,YAAa,EAAA,oBAAA,EAAsB,OAAO,SAAW,EAAA,CAAA;AAAA,wBACtD,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,eAAiB,EAAA;AAAA,UAClD,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAS,EAAA,WAAA,EAAA,CAAA;AAAA,wBACC,GAAA,CAAC,SAAU,EAAA,EAAA,KAAA,EAAO,UAAY,EAAA,YAAA,EAAc,aAAe,EAAA,cAAA,EAAe,OAAQ,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,KAAO,EAAA;AAAA,UACpH,OAAO,MAAO,CAAA,IAAA;AAAA,UACd,iBAAiB,MAAO,CAAA,YAAA;AAAA,UACxB,aAAa,MAAO,CAAA;AAAA,SACrB,CAAG,EAAA,WAAA,EAAY,WAAY,EAAA,oBAAA,EAAsB,OAAO,SAAW,EAAA,CAAA;AAAA,wBACrD,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,YAChB,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,WAAA,CAAY,KAAK,CAAG,EAAA,KAAA,EAAO,MAAO,CAAA,aAAA,EACxD,8BAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,kBAAA,EAAoB,oBAAM,CAClD,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,KAAK,UAAY,EAAA,QAAA,EAAU,UAAY,EAAA,KAAA,EAAO,MAAO,CAAA,eAAA,EAC1E,uCAAc,GAAA,CAAA,iBAAA,EAAA,EAAkB,KAAM,EAAA,MAAA,EAAO,CAAK,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,oBAAsB,EAAA,QAAA,EAAA,MAAA,EAAI,CACrG,EAAA;AAAA,SACJ,EAAA;AAAA,OACJ,EAAA;AAAA,KAAA,EACJ,CACJ,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,iBAAmB,EAAA,EAAA;AAAA,IACnB,aAAe,EAAA,CAAA;AAAA,IACf,SAAW,EAAA;AAAA,GACb;AAAA,EACA,UAAY,EAAA,cAAA,CAAA;AAAA,IACV,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA,MAAA;AAAA,IACjB,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAAA,EACb,aAAa,MAAO,CAAA,IAAA,CAAA;AAAA,EAEzB,WAAa,EAAA;AAAA,IACX,IAAM,EAAA,CAAA;AAAA,IACN,SAAW,EAAA,QAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,OAAS,EAAA;AAAA,IACP,OAAS,EAAA;AAAA,GACX;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,iBAAmB,EAAA,EAAA;AAAA,IACnB,aAAe,EAAA;AAAA,GACjB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA,QAAA;AAAA,IACZ,UAAY,EAAA,EAAA;AAAA,IACZ,aAAe,EAAA,EAAA;AAAA,IACf,GAAK,EAAA;AAAA,GACP;AAAA,EACA,WAAa,EAAA;AAAA,IACX,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,eAAiB,EAAA,MAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,GAAK,EAAA;AAAA,IACH,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,SAAW,EAAA,EAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,GAAK,EAAA,EAAA;AAAA,IACL,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAQ,UAAW,CAAA,aAAA;AAAA,IACnB,eAAiB,EAAA,SAAA;AAAA,IACjB,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,EAAA;AAAA,IACX,eAAiB,EAAA,MAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,SAAW,EAAA,EAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,aAAe,EAAA;AAAA,IACb,IAAM,EAAA,CAAA;AAAA,IACN,eAAiB,EAAA,wBAAA;AAAA,IACjB,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,SAAW,EAAA;AAAA,IACT,eAAiB,EAAA,MAAA;AAAA,IACjB,mBAAqB,EAAA,EAAA;AAAA,IACrB,oBAAsB,EAAA,EAAA;AAAA,IACtB,OAAS,EAAA,EAAA;AAAA,IACT,aAAe,EAAA,EAAA;AAAA,IACf,GAAK,EAAA;AAAA,GACP;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,KAAO,EAAA;AAAA,IACL,WAAa,EAAA,CAAA;AAAA,IACb,WAAa,EAAA,SAAA;AAAA,IACb,YAAc,EAAA,EAAA;AAAA,IACd,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA,UAAA;AAAA,IAChB,GAAK,EAAA,EAAA;AAAA,IACL,SAAW,EAAA;AAAA,GACb;AAAA,EACA,aAAe,EAAA;AAAA,IACb,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,kBAAoB,EAAA;AAAA,IAClB,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,UAAY,EAAA;AAAA,GACd;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,eAAA,EAAiB,aAAa,KAAM,CAAA,OAAA;AAAA,IACpC,YAAc,EAAA,EAAA;AAAA,IACd,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,oBAAsB,EAAA;AAAA,IACpB,KAAO,EAAA,MAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA;AAEhB,CAAC,CAAA"}
|
|
@@ -40,7 +40,7 @@ function HomeSuggestions({
|
|
|
40
40
|
return [...rotated.slice(offset), ...rotated.slice(0, offset)];
|
|
41
41
|
}, [seed]);
|
|
42
42
|
const shuffle = useCallback(() => setSeed((n) => n + 1), []);
|
|
43
|
-
const borderColor = isDark ? "rgba(148,163,184,0.28)" :
|
|
43
|
+
const borderColor = isDark ? "rgba(148,163,184,0.28)" : "#e2e8f0";
|
|
44
44
|
const chipBg = isDark ? "#1e293b" : mobileTokens.color.surface;
|
|
45
45
|
return /* @__PURE__ */ jsxs(View, { style: [styles.wrap, compact ? styles.wrapCompact : null], children: [
|
|
46
46
|
/* @__PURE__ */ jsxs(View, { style: styles.captionRow, children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomeSuggestions.js","sources":["../../../../src/screens/Home/components/HomeSuggestions.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport { Pressable, StyleSheet, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { mobileTokens } from '../../../theme/mobileTokens';\nimport type { RoutingMode } from '../types';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n\ntype HomeSuggestion = {\n id: string;\n label: string;\n icon: IconName;\n prompt: string;\n mode?: RoutingMode;\n /** Navigate here instead of injecting the prompt, when the host wires\n * navigation - a real native screen beats asking the agent to open one. */\n nativeRoute?: string;\n};\n\n/** Same starter set the browser home shows under the composer. */\nconst HOME_SUGGESTIONS: readonly HomeSuggestion[] = [\n {\n id: 'connect-apps',\n label: 'Connect your apps',\n icon: 'puzzle-outline',\n prompt: 'Show me which apps I can connect, and help me connect the ones I use daily.',\n },\n {\n id: 'design',\n label: 'Design a landing page',\n icon: 'palette-outline',\n prompt: 'Design a landing page for my product. Start with the hero and the pricing section.',\n },\n {\n id: 'canvas',\n label: 'Open a canvas',\n icon: 'view-grid-outline',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'MainStack.CanvasNative',\n },\n {\n id: 'paper2poster',\n label: 'Turn a paper into a poster',\n icon: 'monitor-screenshot',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n },\n {\n id: 'inbox',\n label: 'Get to inbox zero',\n icon: 'email-outline',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n },\n];\n\nexport type HomeSuggestionsProps = {\n isDark: boolean;\n primaryTextColor: string;\n secondaryTextColor: string;\n onInjectPrompt: (prompt: string, mode?: RoutingMode) => void;\n /** Open a native screen by route name; absent -> prompt fallback. */\n onOpenRoute?: (name: string) => void;\n compact?: boolean;\n};\n\nexport function HomeSuggestions({\n isDark,\n primaryTextColor,\n secondaryTextColor,\n onInjectPrompt,\n onOpenRoute,\n compact = false,\n}: HomeSuggestionsProps) {\n const [seed, setSeed] = useState(0);\n const suggestions = useMemo(() => {\n const rotated = [...HOME_SUGGESTIONS];\n const offset = seed % rotated.length;\n return [...rotated.slice(offset), ...rotated.slice(0, offset)];\n }, [seed]);\n\n const shuffle = useCallback(() => setSeed((n) => n + 1), []);\n const borderColor = isDark ? 'rgba(148,163,184,0.28)' :
|
|
1
|
+
{"version":3,"file":"HomeSuggestions.js","sources":["../../../../src/screens/Home/components/HomeSuggestions.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport { Pressable, StyleSheet, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { mobileTokens } from '../../../theme/mobileTokens';\nimport type { RoutingMode } from '../types';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n\ntype HomeSuggestion = {\n id: string;\n label: string;\n icon: IconName;\n prompt: string;\n mode?: RoutingMode;\n /** Navigate here instead of injecting the prompt, when the host wires\n * navigation - a real native screen beats asking the agent to open one. */\n nativeRoute?: string;\n};\n\n/** Same starter set the browser home shows under the composer. */\nconst HOME_SUGGESTIONS: readonly HomeSuggestion[] = [\n {\n id: 'connect-apps',\n label: 'Connect your apps',\n icon: 'puzzle-outline',\n prompt: 'Show me which apps I can connect, and help me connect the ones I use daily.',\n },\n {\n id: 'design',\n label: 'Design a landing page',\n icon: 'palette-outline',\n prompt: 'Design a landing page for my product. Start with the hero and the pricing section.',\n },\n {\n id: 'canvas',\n label: 'Open a canvas',\n icon: 'view-grid-outline',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'MainStack.CanvasNative',\n },\n {\n id: 'paper2poster',\n label: 'Turn a paper into a poster',\n icon: 'monitor-screenshot',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n },\n {\n id: 'inbox',\n label: 'Get to inbox zero',\n icon: 'email-outline',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n },\n];\n\nexport type HomeSuggestionsProps = {\n isDark: boolean;\n primaryTextColor: string;\n secondaryTextColor: string;\n onInjectPrompt: (prompt: string, mode?: RoutingMode) => void;\n /** Open a native screen by route name; absent -> prompt fallback. */\n onOpenRoute?: (name: string) => void;\n compact?: boolean;\n};\n\nexport function HomeSuggestions({\n isDark,\n primaryTextColor,\n secondaryTextColor,\n onInjectPrompt,\n onOpenRoute,\n compact = false,\n}: HomeSuggestionsProps) {\n const [seed, setSeed] = useState(0);\n const suggestions = useMemo(() => {\n const rotated = [...HOME_SUGGESTIONS];\n const offset = seed % rotated.length;\n return [...rotated.slice(offset), ...rotated.slice(0, offset)];\n }, [seed]);\n\n const shuffle = useCallback(() => setSeed((n) => n + 1), []);\n const borderColor = isDark ? 'rgba(148,163,184,0.28)' : '#e2e8f0';\n const chipBg = isDark ? '#1e293b' : mobileTokens.color.surface;\n\n return (\n <View style={[styles.wrap, compact ? styles.wrapCompact : null]}>\n <View style={styles.captionRow}>\n <Text style={[styles.caption, { color: secondaryTextColor }]}>Not sure where to start?</Text>\n <Pressable\n onPress={shuffle}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Shuffle suggestions\"\n style={({ pressed }) => [styles.shuffle, pressed && styles.pressed]}\n >\n <MaterialCommunityIcons name=\"shuffle-variant\" size={14} color={secondaryTextColor} />\n </Pressable>\n </View>\n <View style={styles.chips}>\n {suggestions.map((item) => (\n <Pressable\n key={item.id}\n onPress={() =>\n item.nativeRoute && onOpenRoute\n ? onOpenRoute(item.nativeRoute)\n : onInjectPrompt(item.prompt, item.mode)\n }\n accessibilityRole=\"button\"\n accessibilityLabel={item.label}\n style={({ pressed }) => [\n styles.chip,\n { borderColor, backgroundColor: chipBg },\n pressed && styles.pressed,\n ]}\n >\n <MaterialCommunityIcons name={item.icon} size={14} color={secondaryTextColor} />\n <Text style={[styles.chipLabel, { color: primaryTextColor }]}>{item.label}</Text>\n </Pressable>\n ))}\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrap: {\n width: '100%',\n maxWidth: 420,\n marginTop: 28,\n alignItems: 'center',\n gap: 12,\n },\n wrapCompact: {\n marginTop: 12,\n gap: 8,\n },\n captionRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 4,\n },\n caption: {\n fontSize: 13,\n },\n shuffle: {\n width: 28,\n height: 28,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 8,\n },\n chips: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: 8,\n },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n height: 34,\n paddingHorizontal: 12,\n borderRadius: 999,\n borderWidth: 1,\n },\n chipLabel: {\n fontSize: 13,\n fontWeight: '500',\n },\n pressed: {\n opacity: 0.72,\n },\n});\n\nexport default HomeSuggestions;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useMemo,useState,useEffect,useCallback}from'react';import {useColorScheme,AppState,StyleSheet,View,ActivityIndicator,Text,Pressable,Platform}from'react-native';import {SafeAreaView}from'react-native-safe-area-context';import {WebView}from'react-native-webview';import {useNavigation,useRoute}from'@react-navigation/native';import {config}from'../../config/env-config.js';import {mobileTokens}from'../../theme/mobileTokens.js';import {WebViewManager}from'../../bridge/WebViewManager.js';import {NativeWebViewBridge}from'../../bridge/NativeWebViewBridge.js';import {WEB_BRIDGE_BOOTSTRAP}from'../../bridge/webBridgeBootstrap.js';import {AuthBridgeHandler}from'../../bridge/handlers/AuthBridgeHandler.js';import {NavigationBridgeHandler}from'../../bridge/handlers/NavigationBridgeHandler.js';import {AnalyticsBridgeHandler}from'../../bridge/handlers/AnalyticsBridgeHandler.js';import {getPackagerHost,resolveMobileWebUrl}from'../../bridge/resolveMobileWebUrl.js';import {appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript}from'../../hooks/mintSurfaceSystemToken.js';import {useObtainSystemToken}from'../../hooks/useObtainSystemToken.js';import {usePrerequisiteIds}from'../../hooks/usePrerequisiteIds.js';import {WebViewWithNavigation}from'./WebViewWithNavigation.js';import {setWebBuilderBackHandler}from'./webbuilderBackHandler.js';import {getWarmWebBuilderSession,warmWebBuilderSession,setWarmWebBuilderSession,clearWarmWebBuilderSession}from'./webbuilderWarmCache.js';import {resolveSurfaceAuthGraphqlUrl}from'../../hooks/resolveSurfaceAuthGraphqlUrl.js';var __defProp = Object.defineProperty;
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useMemo,useState,useEffect,useCallback}from'react';import {useColorScheme,AppState,StyleSheet,View,ActivityIndicator,Text,Pressable,Platform}from'react-native';import {SafeAreaView}from'react-native-safe-area-context';import {WebView}from'react-native-webview';import {useNavigation,useRoute}from'@react-navigation/native';import {config}from'../../config/env-config.js';import {mobileTokens}from'../../theme/mobileTokens.js';import {useWebViewRetention}from'../../hooks/useWebViewRetention.js';import {WebViewManager}from'../../bridge/WebViewManager.js';import {NativeWebViewBridge}from'../../bridge/NativeWebViewBridge.js';import {WEB_BRIDGE_BOOTSTRAP}from'../../bridge/webBridgeBootstrap.js';import {AuthBridgeHandler}from'../../bridge/handlers/AuthBridgeHandler.js';import {NavigationBridgeHandler}from'../../bridge/handlers/NavigationBridgeHandler.js';import {AnalyticsBridgeHandler}from'../../bridge/handlers/AnalyticsBridgeHandler.js';import {getPackagerHost,resolveMobileWebUrl}from'../../bridge/resolveMobileWebUrl.js';import {appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript}from'../../hooks/mintSurfaceSystemToken.js';import {useObtainSystemToken}from'../../hooks/useObtainSystemToken.js';import {usePrerequisiteIds}from'../../hooks/usePrerequisiteIds.js';import {WebViewWithNavigation}from'./WebViewWithNavigation.js';import {setWebBuilderBackHandler}from'./webbuilderBackHandler.js';import {getWarmWebBuilderSession,warmWebBuilderSession,setWarmWebBuilderSession,clearWarmWebBuilderSession}from'./webbuilderWarmCache.js';import {resolveSurfaceAuthGraphqlUrl}from'../../hooks/resolveSurfaceAuthGraphqlUrl.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -253,6 +253,9 @@ function WebBuilderScreen() {
|
|
|
253
253
|
webViewManager.unregisterWebView(id);
|
|
254
254
|
};
|
|
255
255
|
}, [authToken, mfeConfig.url, webViewManager]);
|
|
256
|
+
const shouldRenderWebView = useWebViewRetention({
|
|
257
|
+
releaseOnBlur: false
|
|
258
|
+
});
|
|
256
259
|
useEffect(() => {
|
|
257
260
|
const handleAppStateChange = (nextAppState) => {
|
|
258
261
|
var _a2, _b2;
|
|
@@ -407,7 +410,7 @@ true;
|
|
|
407
410
|
isLoading && /* @__PURE__ */ jsx(View, { style: [styles.loadingOverlay, {
|
|
408
411
|
backgroundColor: surfaceColor
|
|
409
412
|
}], pointerEvents: "none", children: /* @__PURE__ */ jsx(ActivityIndicator, { size: "large", color: mobileTokens.color.primary }) }),
|
|
410
|
-
/* @__PURE__ */ jsx(
|
|
413
|
+
shouldRenderWebView && /* @__PURE__ */ jsx(
|
|
411
414
|
WebView,
|
|
412
415
|
__spreadValues({
|
|
413
416
|
ref: webViewRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/screens/WebBuilder/index.tsx"],"sourcesContent":["/**\n * WebBuilder — native shell hosting the webbuilder-surface WebView.\n *\n * Mints the org system JWT (same as CDeCLI) and hands it to the surface via\n * `?token=&state=` (SurfaceLoginGate.captureLoginCallback) + localStorage\n * `cdecli_token`, so the standalone \"Sign in with Yantra\" gate is skipped.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n AppState,\n type AppStateStatus,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n useColorScheme,\n View,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { WebView, type WebViewMessageEvent, type WebViewNavigation } from 'react-native-webview';\nimport type { WebViewErrorEvent, WebViewHttpErrorEvent } from 'react-native-webview/lib/WebViewTypes';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport {\n AnalyticsBridgeHandler,\n AuthBridgeHandler,\n getPackagerHost,\n NativeWebViewBridge,\n NavigationBridgeHandler,\n resolveMobileWebUrl,\n WEB_BRIDGE_BOOTSTRAP,\n WebViewManager,\n} from '../../bridge';\nimport {\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n resolveSurfaceAuthGraphqlUrl,\n} from '../../hooks/mintSurfaceSystemToken';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { WebViewWithNavigation } from './WebViewWithNavigation';\nimport { setWebBuilderBackHandler } from './webbuilderBackHandler';\nimport {\n getWarmWebBuilderSession,\n setWarmWebBuilderSession,\n warmWebBuilderSession,\n clearWarmWebBuilderSession,\n} from './webbuilderWarmCache';\n\nexport type MicroFrontendCachePolicy = 'default' | 'reload' | 'cache-else-load';\n\nexport interface MicroFrontendConfig {\n url: string;\n preload?: boolean;\n cachePolicy?: MicroFrontendCachePolicy;\n}\n\nexport interface WebBuilderRouteParams {\n orgName?: string | null;\n /** Optional override URL; defaults to WEB_BUILDER_URL from env. */\n url?: string | null;\n /** Channel to open / continue in the surface (`?channelId=`). */\n channelId?: string | null;\n /** Yantra project UUID (`?projectId=`). Defaults to channelId on the surface if omitted. */\n projectId?: string | null;\n /** Optional first Agent prompt to auto-send after hydrate (`?message=`). */\n message?: string | null;\n /** E2B snapshot for template remix (`?snapshotId=`). */\n snapshotId?: string | null;\n /** Yantra form / catalog template id (`?templateId=`). */\n templateId?: string | null;\n /** Display title for the handoff template (`?templateTitle=`). */\n templateTitle?: string | null;\n /** Launcher tile name (Canvas, Design, …) — shown in the native header. */\n appTitle?: string | null;\n /** Stack template hint (`?seedTemplate=` e.g. vite-react). */\n seedTemplate?: string | null;\n deployUrl?: string | null;\n previewUrl?: string | null;\n}\n\nfunction makeHandoffState(): string {\n return `mobile-webview-${Date.now().toString(36)}`;\n}\n\nexport default function WebBuilderScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n\n const webViewRef = useRef<WebView>(null);\n const bridgeRef = useRef<NativeWebViewBridge | null>(null);\n\n const packagerHost = getPackagerHost();\n const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);\n const routeSurfaceUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n return resolveMobileWebUrl(raw, packagerHost);\n }, [route?.params, packagerHost]);\n const authGraphqlUrl = useMemo(\n () => resolveSurfaceAuthGraphqlUrl(routeSurfaceUrl, graphqlUrl, config),\n [routeSurfaceUrl, graphqlUrl],\n );\n const crossBackendAuth = authGraphqlUrl.replace(/\\/$/, '') !== graphqlUrl.replace(/\\/$/, '');\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorDetail, setErrorDetail] = useState<string | null>(null);\n const [canGoBack, setCanGoBack] = useState(false);\n const previewOpenRef = useRef(false);\n const [reloadKey, setReloadKey] = useState(0);\n const warm = getWarmWebBuilderSession(authGraphqlUrl);\n const [authToken, setAuthToken] = useState<string | null>(() => warm?.token ?? null);\n const [authBackend, setAuthBackend] = useState<string | null>(() => warm?.backend ?? null);\n const [authState, setAuthState] = useState<string>(() => makeHandoffState());\n // If Home already warmed the session, skip the full-screen Preparing gate.\n const [authReady, setAuthReady] = useState(() => Boolean(warm?.token));\n const [authError, setAuthError] = useState<string | null>(null);\n const [mintGeneration, setMintGeneration] = useState(0);\n\n const { orgName, projectId, tagId } = usePrerequisiteIds();\n // Same Apollo session the rest of the app uses (web harness pastes this JWT).\n // Raw fetch + SecureStore Auth0 Bearer gets 401 on local GraphQL; Apollo does not.\n const { obtainSystemToken } = useObtainSystemToken(!crossBackendAuth);\n\n const handoffParams = useMemo(() => {\n const params = route?.params as WebBuilderRouteParams | undefined;\n const read = (key: keyof WebBuilderRouteParams) => {\n const value = params?.[key];\n return typeof value === 'string' ? value.trim() : '';\n };\n const channelId = read('channelId');\n const projectIdParam = read('projectId');\n const message = read('message');\n const snapshotId = read('snapshotId');\n const templateId = read('templateId');\n const templateTitle = read('templateTitle');\n const seedTemplate = read('seedTemplate');\n const deployUrl = read('deployUrl');\n const previewUrl = read('previewUrl');\n return {\n channelId: channelId || null,\n projectId: projectIdParam || null,\n message: message || null,\n snapshotId: snapshotId || null,\n templateId: templateId || null,\n templateTitle: templateTitle || null,\n seedTemplate: seedTemplate || null,\n deployUrl: deployUrl || null,\n previewUrl: previewUrl || null,\n };\n }, [route?.params]);\n\n const routeOrgName = useMemo(() => {\n const raw = (route?.params as WebBuilderRouteParams | undefined)?.orgName;\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params]);\n const effectiveOrgName = orgName || routeOrgName;\n const effectiveProjectId = projectId || handoffParams.projectId;\n\n const baseUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n const resolved = resolveMobileWebUrl(raw, packagerHost);\n const stamp = (url: URL) => {\n // Always mark mobile WebView embeds so the surface hides harness chrome\n // (cdecli JWT bar + @yantra/webbuilder-surface label).\n url.searchParams.set('embed', 'mobile');\n // Snapshot remix: omit channelId/projectId/previewUrl/deployUrl so the surface\n // mints a fresh listen channel+project from snapshotId (does not reconnect a\n // live sandbox or poll an empty mobile-precreated channel).\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) url.searchParams.set('channelId', handoffParams.channelId);\n if (!isRemix && handoffParams.projectId) url.searchParams.set('projectId', handoffParams.projectId);\n if (handoffParams.message) url.searchParams.set('message', handoffParams.message);\n if (handoffParams.snapshotId) url.searchParams.set('snapshotId', handoffParams.snapshotId);\n if (handoffParams.templateId) url.searchParams.set('templateId', handoffParams.templateId);\n if (handoffParams.templateTitle) url.searchParams.set('templateTitle', handoffParams.templateTitle);\n if (handoffParams.seedTemplate) url.searchParams.set('seedTemplate', handoffParams.seedTemplate);\n };\n try {\n const url = new URL(resolved);\n stamp(url);\n return url.toString();\n } catch {\n const sep = resolved.includes('?') ? '&' : '?';\n const parts: string[] = ['embed=mobile'];\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) {\n parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);\n }\n if (!isRemix && handoffParams.projectId) {\n parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);\n }\n if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);\n if (handoffParams.snapshotId) parts.push(`snapshotId=${encodeURIComponent(handoffParams.snapshotId)}`);\n if (handoffParams.templateId) parts.push(`templateId=${encodeURIComponent(handoffParams.templateId)}`);\n if (handoffParams.templateTitle) {\n parts.push(`templateTitle=${encodeURIComponent(handoffParams.templateTitle)}`);\n }\n if (handoffParams.seedTemplate) {\n parts.push(`seedTemplate=${encodeURIComponent(handoffParams.seedTemplate)}`);\n }\n return `${resolved}${sep}${parts.join('&')}`;\n }\n }, [route?.params, packagerHost, handoffParams]);\n\n useEffect(() => {\n let cancelled = false;\n const handoffState = makeHandoffState();\n setAuthState(handoffState);\n setAuthError(null);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] surface=', baseUrl, 'graphql=', graphqlUrl, 'authBackend=', authGraphqlUrl);\n }\n\n // Prefer Home prewarm only when it was minted for THIS surface's backend.\n // Canvas index verifies yantra-app-v1 keys; the webbuilder warm token is local.\n const cached = getWarmWebBuilderSession(authGraphqlUrl);\n if (cached?.token) {\n setAuthToken(cached.token);\n setAuthBackend(cached.backend || authGraphqlUrl);\n setAuthReady(true);\n return () => {\n cancelled = true;\n };\n }\n\n (async () => {\n try {\n // Don't hard-block on GetUserSystemToken loading — warm falls back to raw mint.\n const session = await warmWebBuilderSession({\n graphqlUrl: authGraphqlUrl,\n orgName: crossBackendAuth ? undefined : effectiveOrgName,\n projectId: crossBackendAuth ? undefined : effectiveProjectId,\n tagId: crossBackendAuth ? undefined : tagId,\n obtainSystemToken: crossBackendAuth ? undefined : obtainSystemToken,\n discoverScope: crossBackendAuth,\n });\n if (cancelled) return;\n setAuthToken(session.token);\n setAuthBackend(session.backend);\n setWarmWebBuilderSession(session);\n setAuthReady(true);\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log(\n '[WebBuilder] session ready length=',\n session.token.length,\n 'backend=',\n session.backend,\n );\n }\n } catch (err) {\n if (cancelled) return;\n // Still missing org/project — keep preparing a short while until they arrive.\n if (!crossBackendAuth && (!effectiveOrgName || !effectiveProjectId)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n const message = err instanceof Error ? err.message : 'Token mint failed';\n if (/Waiting for org\\/project/i.test(message)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] surface token mint failed:', message);\n setAuthError(message);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(true);\n }\n })();\n\n // Absolute ceiling so Preparing never hangs indefinitely.\n const failsafe = setTimeout(() => {\n if (cancelled) return;\n setAuthReady((ready) => {\n if (ready) return ready;\n setAuthError('Timed out preparing Web Builder. Ensure you are signed in with an org, then retry.');\n return true;\n });\n }, 20000);\n\n return () => {\n cancelled = true;\n clearTimeout(failsafe);\n };\n }, [\n baseUrl,\n graphqlUrl,\n authGraphqlUrl,\n crossBackendAuth,\n obtainSystemToken,\n effectiveOrgName,\n effectiveProjectId,\n tagId,\n mintGeneration,\n ]);\n\n const mfeUrl = useMemo(() => {\n if (!authToken) return baseUrl;\n return appendSurfaceAuthParams(baseUrl, authToken, authState);\n }, [baseUrl, authToken, authState]);\n\n const injectedBeforeContent = useMemo(() => {\n const parts = [WEB_BRIDGE_BOOTSTRAP];\n if (authToken && authBackend) {\n parts.unshift(buildCdecliTokenInjection(authToken, authBackend, authState));\n }\n return parts.join('\\n');\n }, [authToken, authBackend, authState]);\n\n /** If the SPA still shows the login gate after load, force one handoff reload. */\n const reinjectAfterLoad = useMemo(() => {\n if (!authToken || !authBackend) return undefined;\n return buildSurfaceGateRecoveryScript(authToken, authBackend, authState);\n }, [authToken, authBackend, authState]);\n\n const mfeConfig: MicroFrontendConfig = useMemo(\n () => ({\n url: mfeUrl,\n cachePolicy: 'default',\n }),\n [mfeUrl],\n );\n\n const webViewManager = WebViewManager.getInstance();\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const textColor = isDark ? '#f8fafc' : mobileTokens.color.text;\n const mutedColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n\n // Bridge + service handlers\n useEffect(() => {\n const bridge = new NativeWebViewBridge(webViewRef);\n bridgeRef.current = bridge;\n // eslint-disable-next-line no-new\n new AuthBridgeHandler(bridge);\n // eslint-disable-next-line no-new\n new NavigationBridgeHandler(bridge, () => navigation);\n // eslint-disable-next-line no-new\n new AnalyticsBridgeHandler(bridge);\n\n return () => {\n bridge.dispose();\n bridgeRef.current = null;\n };\n }, [navigation]);\n\n useEffect(() => {\n if (!authToken) return;\n const id = mfeConfig.url;\n webViewManager.registerWebView(id, webViewRef);\n return () => {\n webViewManager.unregisterWebView(id);\n };\n }, [authToken, mfeConfig.url, webViewManager]);\n\n useEffect(() => {\n const handleAppStateChange = (nextAppState: AppStateStatus) => {\n if (nextAppState === 'background') {\n webViewRef.current?.clearCache?.(true);\n }\n };\n const subscription = AppState.addEventListener('change', handleAppStateChange);\n return () => subscription.remove();\n }, []);\n\n useEffect(() => {\n if (!authReady || !authToken || hasError) return;\n const timer = setTimeout(() => {\n setIsLoading((loading) => {\n if (!loading) return loading;\n const detail = `Timed out loading ${mfeConfig.url}. Is WEB_BUILDER_URL reachable from this device?`;\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder]', detail);\n setErrorDetail(detail);\n setHasError(true);\n return false;\n });\n }, 20000);\n return () => clearTimeout(timer);\n }, [authReady, authToken, hasError, mfeConfig.url, reloadKey]);\n\n const handleLoadStart = useCallback(() => {\n setIsLoading(true);\n setHasError(false);\n setErrorDetail(null);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n setIsLoading(false);\n webViewManager.updateUsage(mfeConfig.url);\n }, [mfeConfig.url, webViewManager]);\n\n const handleError = useCallback(\n (event: WebViewErrorEvent) => {\n const { description, code, url } = event.nativeEvent;\n const detail = [description, code != null ? `code ${code}` : null, url || mfeConfig.url]\n .filter(Boolean)\n .join(' · ');\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] load error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleHttpError = useCallback(\n (event: WebViewHttpErrorEvent) => {\n const { statusCode, description, url } = event.nativeEvent;\n if (statusCode < 400) return;\n const detail = `HTTP ${statusCode}${description ? `: ${description}` : ''} · ${url || mfeConfig.url}`;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] http error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n try {\n const raw = event?.nativeEvent?.data;\n if (typeof raw === 'string' && raw.includes('wb-preview')) {\n const parsed = JSON.parse(raw) as { type?: string; open?: boolean };\n if (parsed?.type === 'wb-preview') {\n previewOpenRef.current = Boolean(parsed.open);\n }\n }\n } catch {\n /* non-JSON bridge frames are handled below */\n }\n bridgeRef.current?.handleMessage(event);\n }, []);\n\n const handleNavigationStateChange = useCallback((navState: WebViewNavigation) => {\n setCanGoBack(Boolean(navState.canGoBack));\n }, []);\n\n const handleRetry = useCallback(() => {\n clearWarmWebBuilderSession();\n setHasError(false);\n setErrorDetail(null);\n setAuthError(null);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(false);\n setIsLoading(true);\n setMintGeneration((g) => g + 1);\n setReloadKey((k) => k + 1);\n }, []);\n\n const handleNativeGoBack = useCallback(() => {\n if (navigation.canGoBack()) {\n navigation.goBack();\n return;\n }\n navigation.navigate('MainStack.Layout.Home' as never);\n }, [navigation]);\n\n // Header / hardware back: only intercept when in-app preview is open\n // (dismiss → stay on WebBuilder). Do NOT consume SPA WebView history —\n // handoff/pushState makes canGoBack true and trapped users on this screen.\n useEffect(() => {\n setWebBuilderBackHandler(() => {\n if (previewOpenRef.current) {\n webViewRef.current?.injectJavaScript(`\n(function () {\n try { window.__yantraWbNativeBack && window.__yantraWbNativeBack(); } catch (e) {}\n})();\ntrue;\n`);\n previewOpenRef.current = false;\n return true;\n }\n return false;\n });\n return () => setWebBuilderBackHandler(null);\n }, []);\n\n const cacheMode =\n mfeConfig.cachePolicy === 'cache-else-load' ? ('LOAD_CACHE_ELSE_NETWORK' as const) : ('LOAD_DEFAULT' as const);\n\n const showAuthSpinner = !authReady;\n const showAuthFailure = authReady && !authToken;\n\n if (showAuthSpinner) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n <Text style={[styles.errorBody, { color: mutedColor, marginTop: 12 }]}>Preparing Web Builder…</Text>\n </View>\n </SafeAreaView>\n );\n }\n\n if (showAuthFailure || hasError) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <Text style={[styles.errorTitle, { color: textColor }]}>\n {showAuthFailure ? 'Could not open Web Builder' : 'Failed to load micro frontend'}\n </Text>\n <Text style={[styles.errorBody, { color: mutedColor }]}>\n {showAuthFailure\n ? authError ||\n 'Sign-in token could not be minted for the surface. Ensure you are logged in with an org.'\n : `Could not open ${baseUrl}. Check WEB_BUILDER_URL / network, then retry.`}\n </Text>\n {errorDetail ? (\n <Text style={[styles.errorMeta, { color: mutedColor }]} selectable>\n {errorDetail}\n </Text>\n ) : null}\n <Pressable\n onPress={handleRetry}\n style={[styles.retryButton, { backgroundColor: mobileTokens.color.primary }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Retry loading WebBuilder\"\n >\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={[styles.container, { backgroundColor: surfaceColor }]}>\n <WebViewWithNavigation webViewRef={webViewRef} canGoBack={canGoBack} onGoBack={handleNativeGoBack} />\n\n {isLoading && (\n <View style={[styles.loadingOverlay, { backgroundColor: surfaceColor }]} pointerEvents=\"none\">\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n </View>\n )}\n\n <WebView\n key={`${reloadKey}-${handoffParams.channelId ?? 'none'}-${handoffParams.snapshotId ?? 'nosnap'}-${authToken?.slice(-8) ?? 'none'}`}\n ref={webViewRef}\n source={{\n uri: mfeConfig.url,\n }}\n style={styles.webview}\n onLoadStart={handleLoadStart}\n onLoadEnd={handleLoadEnd}\n onError={handleError}\n onHttpError={handleHttpError}\n onMessage={handleMessage}\n onNavigationStateChange={handleNavigationStateChange}\n injectedJavaScriptBeforeContentLoaded={injectedBeforeContent}\n injectedJavaScript={reinjectAfterLoad}\n cacheEnabled={mfeConfig.cachePolicy !== 'reload'}\n cacheMode={cacheMode}\n javaScriptEnabled\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n startInLoadingState\n scalesPageToFit\n originWhitelist={['*']}\n mixedContentMode=\"always\"\n // Surfaces run the shared AI chat, whose voice input records via\n // getUserMedia. WKWebView denies capture unless the host grants it\n // (the app already holds NSMicrophoneUsageDescription / RECORD_AUDIO),\n // which is why the record button in a surface silently did nothing.\n mediaCapturePermissionGrantType=\"grant\"\n // Inline playback so canvas/board videos play in place instead of\n // being hijacked into the fullscreen player.\n allowsInlineMediaPlayback\n mediaPlaybackRequiresUserAction\n setSupportMultipleWindows={false}\n allowsBackForwardNavigationGestures\n {...(Platform.OS === 'android' ? { overScrollMode: 'never' as const } : null)}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n webview: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n loadingOverlay: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n },\n centered: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 24,\n gap: 12,\n },\n errorTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n errorBody: {\n fontSize: 14,\n textAlign: 'center',\n marginBottom: 4,\n lineHeight: 20,\n },\n errorMeta: {\n fontSize: 12,\n textAlign: 'center',\n marginBottom: 8,\n lineHeight: 16,\n },\n retryButton: {\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderRadius: mobileTokens.radius.md,\n },\n retryLabel: {\n color: '#ffffff',\n fontSize: 15,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/screens/WebBuilder/index.tsx"],"sourcesContent":["/**\n * WebBuilder — native shell hosting the webbuilder-surface WebView.\n *\n * Mints the org system JWT (same as CDeCLI) and hands it to the surface via\n * `?token=&state=` (SurfaceLoginGate.captureLoginCallback) + localStorage\n * `cdecli_token`, so the standalone \"Sign in with Yantra\" gate is skipped.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n AppState,\n type AppStateStatus,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n useColorScheme,\n View,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { WebView, type WebViewMessageEvent, type WebViewNavigation } from 'react-native-webview';\nimport type { WebViewErrorEvent, WebViewHttpErrorEvent } from 'react-native-webview/lib/WebViewTypes';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { useWebViewRetention } from '../../hooks/useWebViewRetention';\nimport {\n AnalyticsBridgeHandler,\n AuthBridgeHandler,\n getPackagerHost,\n NativeWebViewBridge,\n NavigationBridgeHandler,\n resolveMobileWebUrl,\n WEB_BRIDGE_BOOTSTRAP,\n WebViewManager,\n} from '../../bridge';\nimport {\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n resolveSurfaceAuthGraphqlUrl,\n} from '../../hooks/mintSurfaceSystemToken';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { WebViewWithNavigation } from './WebViewWithNavigation';\nimport { setWebBuilderBackHandler } from './webbuilderBackHandler';\nimport {\n getWarmWebBuilderSession,\n setWarmWebBuilderSession,\n warmWebBuilderSession,\n clearWarmWebBuilderSession,\n} from './webbuilderWarmCache';\n\nexport type MicroFrontendCachePolicy = 'default' | 'reload' | 'cache-else-load';\n\nexport interface MicroFrontendConfig {\n url: string;\n preload?: boolean;\n cachePolicy?: MicroFrontendCachePolicy;\n}\n\nexport interface WebBuilderRouteParams {\n orgName?: string | null;\n /** Optional override URL; defaults to WEB_BUILDER_URL from env. */\n url?: string | null;\n /** Channel to open / continue in the surface (`?channelId=`). */\n channelId?: string | null;\n /** Yantra project UUID (`?projectId=`). Defaults to channelId on the surface if omitted. */\n projectId?: string | null;\n /** Optional first Agent prompt to auto-send after hydrate (`?message=`). */\n message?: string | null;\n /** E2B snapshot for template remix (`?snapshotId=`). */\n snapshotId?: string | null;\n /** Yantra form / catalog template id (`?templateId=`). */\n templateId?: string | null;\n /** Display title for the handoff template (`?templateTitle=`). */\n templateTitle?: string | null;\n /** Launcher tile name (Canvas, Design, …) — shown in the native header. */\n appTitle?: string | null;\n /** Stack template hint (`?seedTemplate=` e.g. vite-react). */\n seedTemplate?: string | null;\n deployUrl?: string | null;\n previewUrl?: string | null;\n}\n\nfunction makeHandoffState(): string {\n return `mobile-webview-${Date.now().toString(36)}`;\n}\n\nexport default function WebBuilderScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n\n const webViewRef = useRef<WebView>(null);\n const bridgeRef = useRef<NativeWebViewBridge | null>(null);\n\n const packagerHost = getPackagerHost();\n const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);\n const routeSurfaceUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n return resolveMobileWebUrl(raw, packagerHost);\n }, [route?.params, packagerHost]);\n const authGraphqlUrl = useMemo(\n () => resolveSurfaceAuthGraphqlUrl(routeSurfaceUrl, graphqlUrl, config),\n [routeSurfaceUrl, graphqlUrl],\n );\n const crossBackendAuth = authGraphqlUrl.replace(/\\/$/, '') !== graphqlUrl.replace(/\\/$/, '');\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorDetail, setErrorDetail] = useState<string | null>(null);\n const [canGoBack, setCanGoBack] = useState(false);\n const previewOpenRef = useRef(false);\n const [reloadKey, setReloadKey] = useState(0);\n const warm = getWarmWebBuilderSession(authGraphqlUrl);\n const [authToken, setAuthToken] = useState<string | null>(() => warm?.token ?? null);\n const [authBackend, setAuthBackend] = useState<string | null>(() => warm?.backend ?? null);\n const [authState, setAuthState] = useState<string>(() => makeHandoffState());\n // If Home already warmed the session, skip the full-screen Preparing gate.\n const [authReady, setAuthReady] = useState(() => Boolean(warm?.token));\n const [authError, setAuthError] = useState<string | null>(null);\n const [mintGeneration, setMintGeneration] = useState(0);\n\n const { orgName, projectId, tagId } = usePrerequisiteIds();\n // Same Apollo session the rest of the app uses (web harness pastes this JWT).\n // Raw fetch + SecureStore Auth0 Bearer gets 401 on local GraphQL; Apollo does not.\n const { obtainSystemToken } = useObtainSystemToken(!crossBackendAuth);\n\n const handoffParams = useMemo(() => {\n const params = route?.params as WebBuilderRouteParams | undefined;\n const read = (key: keyof WebBuilderRouteParams) => {\n const value = params?.[key];\n return typeof value === 'string' ? value.trim() : '';\n };\n const channelId = read('channelId');\n const projectIdParam = read('projectId');\n const message = read('message');\n const snapshotId = read('snapshotId');\n const templateId = read('templateId');\n const templateTitle = read('templateTitle');\n const seedTemplate = read('seedTemplate');\n const deployUrl = read('deployUrl');\n const previewUrl = read('previewUrl');\n return {\n channelId: channelId || null,\n projectId: projectIdParam || null,\n message: message || null,\n snapshotId: snapshotId || null,\n templateId: templateId || null,\n templateTitle: templateTitle || null,\n seedTemplate: seedTemplate || null,\n deployUrl: deployUrl || null,\n previewUrl: previewUrl || null,\n };\n }, [route?.params]);\n\n const routeOrgName = useMemo(() => {\n const raw = (route?.params as WebBuilderRouteParams | undefined)?.orgName;\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params]);\n const effectiveOrgName = orgName || routeOrgName;\n const effectiveProjectId = projectId || handoffParams.projectId;\n\n const baseUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n const resolved = resolveMobileWebUrl(raw, packagerHost);\n const stamp = (url: URL) => {\n // Always mark mobile WebView embeds so the surface hides harness chrome\n // (cdecli JWT bar + @yantra/webbuilder-surface label).\n url.searchParams.set('embed', 'mobile');\n // Snapshot remix: omit channelId/projectId/previewUrl/deployUrl so the surface\n // mints a fresh listen channel+project from snapshotId (does not reconnect a\n // live sandbox or poll an empty mobile-precreated channel).\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) url.searchParams.set('channelId', handoffParams.channelId);\n if (!isRemix && handoffParams.projectId) url.searchParams.set('projectId', handoffParams.projectId);\n if (handoffParams.message) url.searchParams.set('message', handoffParams.message);\n if (handoffParams.snapshotId) url.searchParams.set('snapshotId', handoffParams.snapshotId);\n if (handoffParams.templateId) url.searchParams.set('templateId', handoffParams.templateId);\n if (handoffParams.templateTitle) url.searchParams.set('templateTitle', handoffParams.templateTitle);\n if (handoffParams.seedTemplate) url.searchParams.set('seedTemplate', handoffParams.seedTemplate);\n };\n try {\n const url = new URL(resolved);\n stamp(url);\n return url.toString();\n } catch {\n const sep = resolved.includes('?') ? '&' : '?';\n const parts: string[] = ['embed=mobile'];\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) {\n parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);\n }\n if (!isRemix && handoffParams.projectId) {\n parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);\n }\n if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);\n if (handoffParams.snapshotId) parts.push(`snapshotId=${encodeURIComponent(handoffParams.snapshotId)}`);\n if (handoffParams.templateId) parts.push(`templateId=${encodeURIComponent(handoffParams.templateId)}`);\n if (handoffParams.templateTitle) {\n parts.push(`templateTitle=${encodeURIComponent(handoffParams.templateTitle)}`);\n }\n if (handoffParams.seedTemplate) {\n parts.push(`seedTemplate=${encodeURIComponent(handoffParams.seedTemplate)}`);\n }\n return `${resolved}${sep}${parts.join('&')}`;\n }\n }, [route?.params, packagerHost, handoffParams]);\n\n useEffect(() => {\n let cancelled = false;\n const handoffState = makeHandoffState();\n setAuthState(handoffState);\n setAuthError(null);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] surface=', baseUrl, 'graphql=', graphqlUrl, 'authBackend=', authGraphqlUrl);\n }\n\n // Prefer Home prewarm only when it was minted for THIS surface's backend.\n // Canvas index verifies yantra-app-v1 keys; the webbuilder warm token is local.\n const cached = getWarmWebBuilderSession(authGraphqlUrl);\n if (cached?.token) {\n setAuthToken(cached.token);\n setAuthBackend(cached.backend || authGraphqlUrl);\n setAuthReady(true);\n return () => {\n cancelled = true;\n };\n }\n\n (async () => {\n try {\n // Don't hard-block on GetUserSystemToken loading — warm falls back to raw mint.\n const session = await warmWebBuilderSession({\n graphqlUrl: authGraphqlUrl,\n orgName: crossBackendAuth ? undefined : effectiveOrgName,\n projectId: crossBackendAuth ? undefined : effectiveProjectId,\n tagId: crossBackendAuth ? undefined : tagId,\n obtainSystemToken: crossBackendAuth ? undefined : obtainSystemToken,\n discoverScope: crossBackendAuth,\n });\n if (cancelled) return;\n setAuthToken(session.token);\n setAuthBackend(session.backend);\n setWarmWebBuilderSession(session);\n setAuthReady(true);\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log(\n '[WebBuilder] session ready length=',\n session.token.length,\n 'backend=',\n session.backend,\n );\n }\n } catch (err) {\n if (cancelled) return;\n // Still missing org/project — keep preparing a short while until they arrive.\n if (!crossBackendAuth && (!effectiveOrgName || !effectiveProjectId)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n const message = err instanceof Error ? err.message : 'Token mint failed';\n if (/Waiting for org\\/project/i.test(message)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] surface token mint failed:', message);\n setAuthError(message);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(true);\n }\n })();\n\n // Absolute ceiling so Preparing never hangs indefinitely.\n const failsafe = setTimeout(() => {\n if (cancelled) return;\n setAuthReady((ready) => {\n if (ready) return ready;\n setAuthError('Timed out preparing Web Builder. Ensure you are signed in with an org, then retry.');\n return true;\n });\n }, 20000);\n\n return () => {\n cancelled = true;\n clearTimeout(failsafe);\n };\n }, [\n baseUrl,\n graphqlUrl,\n authGraphqlUrl,\n crossBackendAuth,\n obtainSystemToken,\n effectiveOrgName,\n effectiveProjectId,\n tagId,\n mintGeneration,\n ]);\n\n const mfeUrl = useMemo(() => {\n if (!authToken) return baseUrl;\n return appendSurfaceAuthParams(baseUrl, authToken, authState);\n }, [baseUrl, authToken, authState]);\n\n const injectedBeforeContent = useMemo(() => {\n const parts = [WEB_BRIDGE_BOOTSTRAP];\n if (authToken && authBackend) {\n parts.unshift(buildCdecliTokenInjection(authToken, authBackend, authState));\n }\n return parts.join('\\n');\n }, [authToken, authBackend, authState]);\n\n /** If the SPA still shows the login gate after load, force one handoff reload. */\n const reinjectAfterLoad = useMemo(() => {\n if (!authToken || !authBackend) return undefined;\n return buildSurfaceGateRecoveryScript(authToken, authBackend, authState);\n }, [authToken, authBackend, authState]);\n\n const mfeConfig: MicroFrontendConfig = useMemo(\n () => ({\n url: mfeUrl,\n cachePolicy: 'default',\n }),\n [mfeUrl],\n );\n\n const webViewManager = WebViewManager.getInstance();\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const textColor = isDark ? '#f8fafc' : mobileTokens.color.text;\n const mutedColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n\n // Bridge + service handlers\n useEffect(() => {\n const bridge = new NativeWebViewBridge(webViewRef);\n bridgeRef.current = bridge;\n // eslint-disable-next-line no-new\n new AuthBridgeHandler(bridge);\n // eslint-disable-next-line no-new\n new NavigationBridgeHandler(bridge, () => navigation);\n // eslint-disable-next-line no-new\n new AnalyticsBridgeHandler(bridge);\n\n return () => {\n bridge.dispose();\n bridgeRef.current = null;\n };\n }, [navigation]);\n\n useEffect(() => {\n if (!authToken) return;\n const id = mfeConfig.url;\n webViewManager.registerWebView(id, webViewRef);\n return () => {\n webViewManager.unregisterWebView(id);\n };\n }, [authToken, mfeConfig.url, webViewManager]);\n\n /**\n * `clearCache` frees the HTTP cache and leaves the WebContent renderer\n * process - and its whole JS heap and layer store - resident. That is why the\n * app used to be evicted within seconds of backgrounding on a 6GB device.\n * Releasing the WebView itself (below) is what actually returns the memory;\n * this still drops the cache on the way out.\n */\n /**\n * Release the builder WebView while the app is backgrounded, but NOT on blur:\n * the user is actively working in this surface and a reload on every\n * navigation away would be hostile. Backgrounding is different - the app was\n * being evicted outright there, losing everything, so dropping the renderer\n * and reloading on return is strictly the better trade. `webbuilderWarmCache`\n * makes that return cheap.\n */\n const shouldRenderWebView = useWebViewRetention({ releaseOnBlur: false });\n\n useEffect(() => {\n const handleAppStateChange = (nextAppState: AppStateStatus) => {\n if (nextAppState === 'background') {\n webViewRef.current?.clearCache?.(true);\n }\n };\n const subscription = AppState.addEventListener('change', handleAppStateChange);\n return () => subscription.remove();\n }, []);\n\n useEffect(() => {\n if (!authReady || !authToken || hasError) return;\n const timer = setTimeout(() => {\n setIsLoading((loading) => {\n if (!loading) return loading;\n const detail = `Timed out loading ${mfeConfig.url}. Is WEB_BUILDER_URL reachable from this device?`;\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder]', detail);\n setErrorDetail(detail);\n setHasError(true);\n return false;\n });\n }, 20000);\n return () => clearTimeout(timer);\n }, [authReady, authToken, hasError, mfeConfig.url, reloadKey]);\n\n const handleLoadStart = useCallback(() => {\n setIsLoading(true);\n setHasError(false);\n setErrorDetail(null);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n setIsLoading(false);\n webViewManager.updateUsage(mfeConfig.url);\n }, [mfeConfig.url, webViewManager]);\n\n const handleError = useCallback(\n (event: WebViewErrorEvent) => {\n const { description, code, url } = event.nativeEvent;\n const detail = [description, code != null ? `code ${code}` : null, url || mfeConfig.url]\n .filter(Boolean)\n .join(' · ');\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] load error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleHttpError = useCallback(\n (event: WebViewHttpErrorEvent) => {\n const { statusCode, description, url } = event.nativeEvent;\n if (statusCode < 400) return;\n const detail = `HTTP ${statusCode}${description ? `: ${description}` : ''} · ${url || mfeConfig.url}`;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] http error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n try {\n const raw = event?.nativeEvent?.data;\n if (typeof raw === 'string' && raw.includes('wb-preview')) {\n const parsed = JSON.parse(raw) as { type?: string; open?: boolean };\n if (parsed?.type === 'wb-preview') {\n previewOpenRef.current = Boolean(parsed.open);\n }\n }\n } catch {\n /* non-JSON bridge frames are handled below */\n }\n bridgeRef.current?.handleMessage(event);\n }, []);\n\n const handleNavigationStateChange = useCallback((navState: WebViewNavigation) => {\n setCanGoBack(Boolean(navState.canGoBack));\n }, []);\n\n const handleRetry = useCallback(() => {\n clearWarmWebBuilderSession();\n setHasError(false);\n setErrorDetail(null);\n setAuthError(null);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(false);\n setIsLoading(true);\n setMintGeneration((g) => g + 1);\n setReloadKey((k) => k + 1);\n }, []);\n\n const handleNativeGoBack = useCallback(() => {\n if (navigation.canGoBack()) {\n navigation.goBack();\n return;\n }\n navigation.navigate('MainStack.Layout.Home' as never);\n }, [navigation]);\n\n // Header / hardware back: only intercept when in-app preview is open\n // (dismiss → stay on WebBuilder). Do NOT consume SPA WebView history —\n // handoff/pushState makes canGoBack true and trapped users on this screen.\n useEffect(() => {\n setWebBuilderBackHandler(() => {\n if (previewOpenRef.current) {\n webViewRef.current?.injectJavaScript(`\n(function () {\n try { window.__yantraWbNativeBack && window.__yantraWbNativeBack(); } catch (e) {}\n})();\ntrue;\n`);\n previewOpenRef.current = false;\n return true;\n }\n return false;\n });\n return () => setWebBuilderBackHandler(null);\n }, []);\n\n const cacheMode =\n mfeConfig.cachePolicy === 'cache-else-load' ? ('LOAD_CACHE_ELSE_NETWORK' as const) : ('LOAD_DEFAULT' as const);\n\n const showAuthSpinner = !authReady;\n const showAuthFailure = authReady && !authToken;\n\n if (showAuthSpinner) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n <Text style={[styles.errorBody, { color: mutedColor, marginTop: 12 }]}>Preparing Web Builder…</Text>\n </View>\n </SafeAreaView>\n );\n }\n\n if (showAuthFailure || hasError) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <Text style={[styles.errorTitle, { color: textColor }]}>\n {showAuthFailure ? 'Could not open Web Builder' : 'Failed to load micro frontend'}\n </Text>\n <Text style={[styles.errorBody, { color: mutedColor }]}>\n {showAuthFailure\n ? authError ||\n 'Sign-in token could not be minted for the surface. Ensure you are logged in with an org.'\n : `Could not open ${baseUrl}. Check WEB_BUILDER_URL / network, then retry.`}\n </Text>\n {errorDetail ? (\n <Text style={[styles.errorMeta, { color: mutedColor }]} selectable>\n {errorDetail}\n </Text>\n ) : null}\n <Pressable\n onPress={handleRetry}\n style={[styles.retryButton, { backgroundColor: mobileTokens.color.primary }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Retry loading WebBuilder\"\n >\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={[styles.container, { backgroundColor: surfaceColor }]}>\n <WebViewWithNavigation webViewRef={webViewRef} canGoBack={canGoBack} onGoBack={handleNativeGoBack} />\n\n {isLoading && (\n <View style={[styles.loadingOverlay, { backgroundColor: surfaceColor }]} pointerEvents=\"none\">\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n </View>\n )}\n\n {shouldRenderWebView && (\n <WebView\n key={`${reloadKey}-${handoffParams.channelId ?? 'none'}-${handoffParams.snapshotId ?? 'nosnap'}-${authToken?.slice(-8) ?? 'none'}`}\n ref={webViewRef}\n source={{\n uri: mfeConfig.url,\n }}\n style={styles.webview}\n onLoadStart={handleLoadStart}\n onLoadEnd={handleLoadEnd}\n onError={handleError}\n onHttpError={handleHttpError}\n onMessage={handleMessage}\n onNavigationStateChange={handleNavigationStateChange}\n injectedJavaScriptBeforeContentLoaded={injectedBeforeContent}\n injectedJavaScript={reinjectAfterLoad}\n cacheEnabled={mfeConfig.cachePolicy !== 'reload'}\n cacheMode={cacheMode}\n javaScriptEnabled\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n startInLoadingState\n scalesPageToFit\n originWhitelist={['*']}\n mixedContentMode=\"always\"\n // Surfaces run the shared AI chat, whose voice input records via\n // getUserMedia. WKWebView denies capture unless the host grants it\n // (the app already holds NSMicrophoneUsageDescription / RECORD_AUDIO),\n // which is why the record button in a surface silently did nothing.\n mediaCapturePermissionGrantType=\"grant\"\n // Inline playback so canvas/board videos play in place instead of\n // being hijacked into the fullscreen player.\n allowsInlineMediaPlayback\n mediaPlaybackRequiresUserAction\n setSupportMultipleWindows={false}\n allowsBackForwardNavigationGestures\n {...(Platform.OS === 'android' ? { overScrollMode: 'never' as const } : null)}\n />\n )}\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n webview: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n loadingOverlay: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n },\n centered: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 24,\n gap: 12,\n },\n errorTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n errorBody: {\n fontSize: 14,\n textAlign: 'center',\n marginBottom: 4,\n lineHeight: 20,\n },\n errorMeta: {\n fontSize: 12,\n textAlign: 'center',\n marginBottom: 8,\n lineHeight: 16,\n },\n retryButton: {\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderRadius: mobileTokens.radius.md,\n },\n retryLabel: {\n color: '#ffffff',\n fontSize: 15,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
const lightColor = {
|
|
2
|
-
bg: "#
|
|
2
|
+
bg: "#ffffff",
|
|
3
3
|
surface: "#ffffff",
|
|
4
|
-
surfaceMuted: "#
|
|
5
|
-
border: "#
|
|
4
|
+
surfaceMuted: "#ffedd5",
|
|
5
|
+
border: "#fed7aa",
|
|
6
6
|
text: "#0f172a",
|
|
7
7
|
textMuted: "#475569",
|
|
8
|
-
primary: "#
|
|
9
|
-
primarySoft: "
|
|
10
|
-
primaryBorder: "
|
|
8
|
+
primary: "#ea580c",
|
|
9
|
+
primarySoft: "rgba(234,88,12,0.10)",
|
|
10
|
+
primaryBorder: "rgba(234,88,12,0.35)",
|
|
11
11
|
successSoft: "#ecfdf5",
|
|
12
12
|
successText: "#047857",
|
|
13
13
|
warningSoft: "#fffbeb",
|
|
@@ -22,9 +22,9 @@ const darkColor = {
|
|
|
22
22
|
border: "rgba(148,163,184,0.22)",
|
|
23
23
|
text: "#e2e8f0",
|
|
24
24
|
textMuted: "#94a3b8",
|
|
25
|
-
primary: "#
|
|
26
|
-
primarySoft: "rgba(
|
|
27
|
-
primaryBorder: "rgba(
|
|
25
|
+
primary: "#fb923c",
|
|
26
|
+
primarySoft: "rgba(234,88,12,0.22)",
|
|
27
|
+
primaryBorder: "rgba(251,146,60,0.45)",
|
|
28
28
|
successSoft: "rgba(16,185,129,0.16)",
|
|
29
29
|
successText: "#6ee7b7",
|
|
30
30
|
warningSoft: "rgba(245,158,11,0.16)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileTokens.js","sources":["../../src/theme/mobileTokens.ts"],"sourcesContent":["const lightColor = {\n bg: '#
|
|
1
|
+
{"version":3,"file":"mobileTokens.js","sources":["../../src/theme/mobileTokens.ts"],"sourcesContent":["const lightColor = {\n bg: '#ffffff',\n surface: '#ffffff',\n surfaceMuted: '#ffedd5',\n border: '#fed7aa',\n text: '#0f172a',\n textMuted: '#475569',\n primary: '#ea580c',\n primarySoft: 'rgba(234,88,12,0.10)',\n primaryBorder: 'rgba(234,88,12,0.35)',\n successSoft: '#ecfdf5',\n successText: '#047857',\n warningSoft: '#fffbeb',\n warningText: '#b45309',\n dangerSoft: '#fef2f2',\n dangerText: '#b91c1c',\n} as const;\n\nconst darkColor = {\n bg: '#0f172a',\n surface: '#1e293b',\n surfaceMuted: '#334155',\n border: 'rgba(148,163,184,0.22)',\n text: '#e2e8f0',\n textMuted: '#94a3b8',\n primary: '#fb923c',\n primarySoft: 'rgba(234,88,12,0.22)',\n primaryBorder: 'rgba(251,146,60,0.45)',\n successSoft: 'rgba(16,185,129,0.16)',\n successText: '#6ee7b7',\n warningSoft: 'rgba(245,158,11,0.16)',\n warningText: '#fbbf24',\n dangerSoft: 'rgba(239,68,68,0.16)',\n dangerText: '#fca5a5',\n} as const;\n\nexport function mobileColors(isDark: boolean) {\n return isDark ? darkColor : lightColor;\n}\n\nexport const mobileTokens = {\n color: lightColor,\n radius: {\n sm: 10,\n md: 14,\n lg: 18,\n pill: 999,\n },\n shadow: {\n card: {\n shadowColor: '#0f172a',\n shadowOpacity: 0.06,\n shadowRadius: 10,\n shadowOffset: { width: 0, height: 4 },\n elevation: 2,\n },\n },\n} as const;\n"],"names":[],"mappings":"AAAA,MAAM,UAAa,GAAA;AAAA,EACjB,EAAI,EAAA,SAAA;AAAA,EACJ,OAAS,EAAA,SAAA;AAAA,EACT,YAAc,EAAA,SAAA;AAAA,EACd,MAAQ,EAAA,SAAA;AAAA,EACR,IAAM,EAAA,SAAA;AAAA,EACN,SAAW,EAAA,SAAA;AAAA,EACX,OAAS,EAAA,SAAA;AAAA,EACT,WAAa,EAAA,sBAAA;AAAA,EACb,aAAe,EAAA,sBAAA;AAAA,EACf,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,UAAY,EAAA,SAAA;AAAA,EACZ,UAAY,EAAA;AACd,CAAA;AACA,MAAM,SAAY,GAAA;AAAA,EAChB,EAAI,EAAA,SAAA;AAAA,EACJ,OAAS,EAAA,SAAA;AAAA,EACT,YAAc,EAAA,SAAA;AAAA,EACd,MAAQ,EAAA,wBAAA;AAAA,EACR,IAAM,EAAA,SAAA;AAAA,EACN,SAAW,EAAA,SAAA;AAAA,EACX,OAAS,EAAA,SAAA;AAAA,EACT,WAAa,EAAA,sBAAA;AAAA,EACb,aAAe,EAAA,uBAAA;AAAA,EACf,WAAa,EAAA,uBAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,WAAa,EAAA,uBAAA;AAAA,EACb,WAAa,EAAA,SAAA;AAAA,EACb,UAAY,EAAA,sBAAA;AAAA,EACZ,UAAY,EAAA;AACd,CAAA;AACO,SAAS,aAAa,MAAiB,EAAA;AAC5C,EAAA,OAAO,SAAS,SAAY,GAAA,UAAA;AAC9B;AACO,MAAM,YAAe,GAAA;AAAA,EAC1B,KAAO,EAAA,UAAA;AAAA,EACP,MAAQ,EAAA;AAAA,IAEN,EAAI,EAAA,EAAA;AAAA,IACJ,EAAI,EAAA,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,WAAa,EAAA,SAAA;AAAA,MACb,aAAe,EAAA,IAAA;AAAA,MACf,YAAc,EAAA,EAAA;AAAA,MACd,YAAc,EAAA;AAAA,QACZ,KAAO,EAAA,CAAA;AAAA,QACP,MAAQ,EAAA;AAAA,OACV;AAAA,MACA,SAAW,EAAA;AAAA;AACb;AAEJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adminide-stack/yantra-mobile",
|
|
3
|
-
"version": "12.0.
|
|
3
|
+
"version": "12.0.64-alpha.0",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"uuid": "^9.0.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"common": "
|
|
28
|
+
"common": "12.0.64-alpha.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@admin-layout/gluestack-ui-mobile": "*",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@messenger-box/platform-mobile": "*",
|
|
42
42
|
"@react-native-async-storage/async-storage": "*",
|
|
43
43
|
"@react-navigation/native": "*",
|
|
44
|
-
"common": "12.0.
|
|
44
|
+
"common": "12.0.62-alpha.2",
|
|
45
45
|
"expo-constants": "*",
|
|
46
46
|
"expo-secure-store": "*",
|
|
47
47
|
"lodash": "*",
|
|
@@ -57,5 +57,5 @@
|
|
|
57
57
|
"typescript": {
|
|
58
58
|
"definition": "lib/index.d.ts"
|
|
59
59
|
},
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "80588f32d023e817d7e5f5117ce08c6645f59d2d"
|
|
61
61
|
}
|