@adminide-stack/yantra-mobile 12.0.125 → 12.0.127-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/features/health/HealthSyncRunner.js +9 -1
- package/lib/features/health/HealthSyncRunner.js.map +1 -1
- package/lib/features/health/backgroundSync.js +41 -0
- package/lib/features/health/backgroundSync.js.map +1 -0
- package/lib/features/health/healthConnectBackground.js +32 -0
- package/lib/features/health/healthConnectBackground.js.map +1 -0
- package/lib/features/health/healthConnectReader.js +16 -2
- package/lib/features/health/healthConnectReader.js.map +1 -1
- package/lib/features/health/healthSync.js +31 -3
- package/lib/features/health/healthSync.js.map +1 -1
- package/lib/features/health/healthSyncStore.js +89 -5
- package/lib/features/health/healthSyncStore.js.map +1 -1
- package/lib/features/health/healthkitBackground.js +17 -0
- package/lib/features/health/healthkitBackground.js.map +1 -0
- package/lib/features/health/reader.js.map +1 -1
- package/lib/features/health/sessionVault.js +38 -0
- package/lib/features/health/sessionVault.js.map +1 -0
- package/lib/features/health/syncState.js.map +1 -1
- package/lib/features/messaging/useChatViewer.js +14 -18
- package/lib/features/messaging/useChatViewer.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/Health/index.js +12 -2
- package/lib/screens/Health/index.js.map +1 -1
- package/package.json +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/screens/Health/index.tsx"],"sourcesContent":["/**\n * Health: connect Apple Health (iOS) or Health Connect (Android) so the\n * fitness coach gets Sleep, Recovery and Strain from real data. Shows what\n * is shared, when it last synced, how many days, and any problem in plain\n * words. Reached from Account. Same grouped-card layout as the Account screen.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Alert, Linking, Platform, Pressable, ScrollView, StyleSheet, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useFocusEffect, useNavigation, useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { mobileColors, mobileTokens } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport { healthSyncStore, useHealthSync } from '../../features/health/healthSync';\nimport { HEALTH_DATA_TYPES, labelOf, type HealthDataType } from '../../features/health/reader';\nimport { formatDaysSynced, formatLastSync } from '../../features/health/format';\nimport { openHealthConnectInstall } from '../../features/health/healthConnectLinks';\nimport { useDevices } from '../../features/devices/devices';\n\nconst IS_IOS = Platform.OS === 'ios';\nconst STORE_NAME = IS_IOS ? 'Apple Health' : 'Health Connect';\n\nexport default function HealthScreen() {\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 snapshot = useHealthSync();\n const devices = useDevices();\n const { sync, availability, granted, running, busy, types } = snapshot;\n const [now, setNow] = useState(() => Date.now());\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 useFocusEffect(\n useCallback(() => {\n void healthSyncStore.refreshStatus();\n setNow(Date.now());\n }, []),\n );\n\n // Keep \"5 min ago\" honest while the screen is open.\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), 30_000);\n return () => clearInterval(timer);\n }, []);\n\n const handleBack = useCallback(() => {\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({ name: 'MainStack.Account', params: orgName ? { orgName } : undefined }),\n );\n }, [navigation, orgName]);\n\n const openDevices = useCallback(() => {\n navigation?.navigate?.('MainStack.Devices', orgName ? { orgName } : undefined);\n }, [navigation, orgName]);\n\n const handleConnect = useCallback(async () => {\n const ok = await healthSyncStore.connect();\n if (!ok && healthSyncStore.getSnapshot().availability?.status === 'available') {\n const message = healthSyncStore.getSnapshot().sync.lastError;\n if (message) Alert.alert(`Could not connect ${STORE_NAME}`, message);\n }\n }, []);\n\n const handleSyncNow = useCallback(() => {\n void healthSyncStore.syncNow({ interactive: true });\n }, []);\n\n const handleInstall = useCallback(async () => {\n try {\n await openHealthConnectInstall();\n } catch {\n Alert.alert('Could not open Google Play', 'Search for \"Health Connect\" in Google Play to install it.');\n }\n }, []);\n\n const handleManageAccess = useCallback(() => {\n if (IS_IOS) {\n Alert.alert(\n 'Choose what Yantra reads',\n 'Open the Health app, tap your profile picture, then Apps > Yantra, and turn data types on or off.',\n [\n { text: 'Not now', style: 'cancel' },\n {\n text: 'Open Health',\n onPress: () => void Linking.openURL('x-apple-health://').catch(() => undefined),\n },\n ],\n );\n return;\n }\n void healthSyncStore.openStoreSettings().then((opened) => {\n if (!opened) Alert.alert('Could not open Health Connect', 'Open Health Connect from your phone settings.');\n });\n }, []);\n\n const runDisconnect = useCallback(async (deleteData: boolean) => {\n const res = await healthSyncStore.disconnect({ deleteData });\n if (!res.ok) {\n Alert.alert('Could not disconnect', res.message ?? 'Please try again.');\n return;\n }\n if (IS_IOS) {\n Alert.alert(\n 'Sync stopped',\n 'Yantra no longer reads Apple Health. To remove its access completely, open the Health app > Apps > Yantra.',\n );\n }\n }, []);\n\n const handleDisconnect = useCallback(() => {\n Alert.alert(\n `Disconnect ${STORE_NAME}?`,\n 'Yantra stops reading your health data. Your coach keeps what was already synced unless you delete it.',\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Stop syncing', onPress: () => void runDisconnect(false) },\n { text: 'Stop and delete synced data', style: 'destructive', onPress: () => void runDisconnect(true) },\n ],\n );\n }, [runDisconnect]);\n\n const statusLabel = describeStatus(snapshot.loaded, running, sync.connected);\n\n // Only what this phone's health store is read for (no \"Not allowed\" for a type it does not have).\n const listed = types ? HEALTH_DATA_TYPES.filter((t) => types.includes(t.id)) : HEALTH_DATA_TYPES;\n const notGranted = granted ? listed.filter((t) => !granted.includes(t.id)) : [];\n const unreadable = (sync.unreadableTypes ?? []).filter((t) => !notGranted.some((n) => n.id === t));\n const needsAccess = listed.filter((t) => sync.needsAccessTypes?.includes(t.id));\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 }]}>Health</Text>\n <View style={styles.headerSpacer} />\n </View>\n\n <ScrollView contentContainerStyle={styles.scroll}>\n <View style={styles.hero}>\n <View style={[styles.heroIcon, { backgroundColor: colors.primarySoft }]}>\n <Ionicons name=\"heart\" size={30} color={colors.primary} />\n </View>\n <Text style={[styles.heroTitle, { color: colors.text }]}>{STORE_NAME}</Text>\n <Text style={[styles.heroBody, { color: colors.textMuted }]}>\n Yantra reads your sleep, heart rate, activity and body measurements so your fitness coach can\n score your Sleep, Recovery and Strain each day and follow your weight. It saves only the\n measurements it takes from devices you pair in Yantra.\n </Text>\n </View>\n\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Row label=\"Status\" value={statusLabel} colors={colors} />\n <Divider color={colors.border} />\n <Row label=\"Last sync\" value={formatLastSync(sync.lastSyncAt, now)} colors={colors} />\n <Divider color={colors.border} />\n <Row label=\"Days synced\" value={formatDaysSynced(sync.syncedDates.length)} colors={colors} />\n </View>\n\n {sync.lastError ? (\n <Notice tone=\"danger\" colors={colors} icon=\"alert-circle\" text={sync.lastError} />\n ) : null}\n {sync.connected && unreadable.length ? (\n <Notice\n tone=\"warning\"\n colors={colors}\n icon=\"information-circle\"\n text={`Could not read ${unreadable.map(labelOf).join(', ')} last time. Everything else synced.`}\n />\n ) : null}\n {sync.connected && needsAccess.length ? (\n <Notice\n tone=\"info\"\n colors={colors}\n icon=\"add-circle\"\n text={`Yantra can now also read ${needsAccess.map((t) => t.label).join(', ')}. Tap Sync now to allow ${needsAccess.length === 1 ? 'it' : 'them'}.`}\n />\n ) : null}\n\n <View style={styles.actions}>{renderActions()}</View>\n\n <Text style={[styles.sectionTitle, { color: colors.textMuted }]}>DATA YANTRA READS</Text>\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n {listed.map((t, i) => {\n const state = typeState(sync.connected, granted, t.id);\n return (\n <React.Fragment key={t.id}>\n {i > 0 ? <Divider color={colors.border} /> : null}\n <View style={styles.row}>\n <Text style={[styles.typeLabel, { color: colors.text }]}>{t.label}</Text>\n {state === 'allowed' ? (\n <Ionicons name=\"checkmark-circle\" size={20} color={colors.successText} />\n ) : null}\n {state === 'off' ? (\n <Text style={[styles.rowValue, { color: colors.textMuted }]}>Not allowed</Text>\n ) : null}\n </View>\n </React.Fragment>\n );\n })}\n </View>\n <Text style={[styles.footnote, { color: colors.textMuted }]}>\n {IS_IOS\n ? 'Apple Health does not tell apps which types you allowed; types you turned off are left out. '\n : ''}\n The last 30 days sync first, then new days each time you open Yantra.\n </Text>\n\n <Text style={[styles.sectionTitle, { color: colors.textMuted }]}>DEVICES</Text>\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={openDevices}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Bluetooth devices\"\n style={({ pressed }) => [styles.row, pressed && { backgroundColor: colors.surfaceMuted }]}\n >\n <Text style={[styles.rowLabelWide, { color: colors.text }]}>Bluetooth devices</Text>\n <Text style={[styles.rowValueShort, { color: colors.textMuted }]}>\n {devices.loaded ? (devices.devices.length ? String(devices.devices.length) : 'None') : ''}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n </View>\n <Text style={[styles.footnote, { color: colors.textMuted }]}>\n A scale, blood-pressure monitor or heart-rate strap you pair in Yantra sends its readings to your\n coach, and Yantra saves them to {STORE_NAME} too. Nothing else is ever written to {STORE_NAME}.\n </Text>\n </ScrollView>\n </SafeAreaView>\n );\n\n function renderActions() {\n if (!snapshot.loaded || (!availability && !sync.connected)) {\n return <ActivityIndicator color={colors.primary} />;\n }\n if (!sync.connected) {\n if (availability?.status === 'not-installed') {\n return (\n <>\n <Text style={[styles.actionHint, { color: colors.textMuted }]}>\n Health Connect is not installed on this phone. Install it from Google Play, then come back\n to connect.\n </Text>\n <PrimaryButton label=\"Install Health Connect\" onPress={handleInstall} />\n </>\n );\n }\n if (availability?.status === 'needs-update') {\n return (\n <>\n <Text style={[styles.actionHint, { color: colors.textMuted }]}>\n Health Connect needs an update before Yantra can use it.\n </Text>\n <PrimaryButton label=\"Update Health Connect\" onPress={handleInstall} />\n </>\n );\n }\n if (availability?.status === 'unsupported') {\n return <Text style={[styles.actionHint, { color: colors.textMuted }]}>{availability.reason}</Text>;\n }\n return (\n <PrimaryButton\n label={`Connect ${STORE_NAME}`}\n loading={busy === 'connecting'}\n onPress={() => void handleConnect()}\n />\n );\n }\n return (\n <>\n <PrimaryButton label=\"Sync now\" loading={running} onPress={handleSyncNow} />\n <View style={[styles.card, styles.secondaryCard, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={handleManageAccess}\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.row, pressed && { backgroundColor: colors.surfaceMuted }]}\n >\n <Text style={[styles.rowLabelWide, { color: colors.text }]}>Choose what Yantra reads</Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n <Divider color={colors.border} />\n <Pressable\n onPress={handleDisconnect}\n disabled={busy === 'disconnecting'}\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.row, pressed && { backgroundColor: colors.surfaceMuted }]}\n >\n {busy === 'disconnecting' ? (\n <ActivityIndicator color={colors.dangerText} />\n ) : (\n <Text style={[styles.rowLabelWide, { color: colors.dangerText }]}>Disconnect</Text>\n )}\n </Pressable>\n </View>\n </>\n );\n }\n}\n\ntype Colors = ReturnType<typeof mobileColors>;\n\nfunction describeStatus(loaded: boolean, running: boolean, connected: boolean): string {\n if (!loaded) return ' ';\n if (running) return 'Syncing...';\n return connected ? 'Connected' : 'Off';\n}\n\n/** Android reports grants per type; Apple Health does not (null). */\nfunction typeState(\n connected: boolean,\n granted: HealthDataType[] | null | undefined,\n id: HealthDataType,\n): 'idle' | 'requested' | 'allowed' | 'off' {\n if (!connected) return 'idle';\n if (granted === null || granted === undefined) return 'requested';\n return granted.includes(id) ? 'allowed' : 'off';\n}\n\nfunction Row({ label, value, colors }: { label: string; value: string; colors: Colors }) {\n return (\n <View style={styles.row}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>{label}</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {value}\n </Text>\n </View>\n );\n}\n\nfunction Divider({ color }: { color: string }) {\n return <View style={[styles.rowLine, { backgroundColor: color }]} />;\n}\n\nfunction Notice({\n tone,\n colors,\n icon,\n text,\n}: {\n tone: 'danger' | 'warning' | 'info';\n colors: Colors;\n icon: keyof typeof Ionicons.glyphMap;\n text: string;\n}) {\n const bg = { danger: colors.dangerSoft, warning: colors.warningSoft, info: colors.primarySoft }[tone];\n const fg = { danger: colors.dangerText, warning: colors.warningText, info: colors.primary }[tone];\n return (\n <View style={[styles.notice, { backgroundColor: bg }]} accessibilityRole=\"alert\">\n <Ionicons name={icon} size={18} color={fg} style={styles.noticeIcon} />\n <Text style={[styles.noticeText, { color: fg }]}>{text}</Text>\n </View>\n );\n}\n\nfunction PrimaryButton({ label, onPress, loading }: { label: string; onPress: () => void; loading?: boolean }) {\n return (\n <Pressable\n onPress={onPress}\n disabled={loading}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n style={({ pressed }) => [styles.primary, (pressed || loading) && styles.pressed]}\n >\n {loading ? <ActivityIndicator color=\"#fff\" /> : <Text style={styles.primaryLabel}>{label}</Text>}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n safe: { flex: 1 },\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 alignItems: 'center',\n justifyContent: 'center',\n ...mobileTokens.shadow.card,\n },\n headerTitle: { flex: 1, textAlign: 'center', fontSize: 17, fontWeight: '600' },\n headerSpacer: { width: 40, height: 40 },\n pressed: { opacity: 0.72 },\n scroll: { paddingHorizontal: 16, paddingBottom: 40 },\n hero: { alignItems: 'center', paddingTop: 8, paddingBottom: 24, gap: 10 },\n heroIcon: { width: 64, height: 64, borderRadius: 32, alignItems: 'center', justifyContent: 'center' },\n heroTitle: { fontSize: 20, fontWeight: '700' },\n heroBody: { fontSize: 15, lineHeight: 21, textAlign: 'center', paddingHorizontal: 8 },\n card: { borderRadius: 16, overflow: 'hidden' },\n secondaryCard: { marginTop: 12, alignSelf: 'stretch' },\n row: { flexDirection: 'row', alignItems: 'center', minHeight: 52, paddingHorizontal: 16, gap: 12 },\n rowLabel: { fontSize: 16, width: 110 },\n rowLabelWide: { flex: 1, fontSize: 16 },\n typeLabel: { flex: 1, fontSize: 16 },\n rowValue: { flex: 1, fontSize: 16, textAlign: 'right' },\n rowValueShort: { fontSize: 16 },\n rowLine: { height: StyleSheet.hairlineWidth, marginLeft: 16 },\n notice: { flexDirection: 'row', borderRadius: 14, padding: 12, marginTop: 12, gap: 8 },\n noticeIcon: { marginTop: 1 },\n noticeText: { flex: 1, fontSize: 14, lineHeight: 20 },\n actions: { marginTop: 20, alignItems: 'stretch' },\n actionHint: { fontSize: 15, lineHeight: 21, textAlign: 'center', marginBottom: 12 },\n primary: {\n backgroundColor: mobileTokens.color.primary,\n borderRadius: 14,\n minHeight: 50,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 18,\n },\n primaryLabel: { color: '#fff', fontSize: 16, fontWeight: '600' },\n sectionTitle: {\n fontSize: 13,\n fontWeight: '600',\n letterSpacing: 0.4,\n marginTop: 28,\n marginBottom: 8,\n marginLeft: 16,\n },\n footnote: { fontSize: 13, lineHeight: 18, marginTop: 8, marginHorizontal: 16 },\n});\n"],"names":["_a","_b","React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/screens/Health/index.tsx"],"sourcesContent":["/**\n * Health: connect Apple Health (iOS) or Health Connect (Android) so the\n * fitness coach gets Sleep, Recovery and Strain from real data. Shows what\n * is shared, when it last synced, how many days, and any problem in plain\n * words. Reached from Account. Same grouped-card layout as the Account screen.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Alert, Linking, Platform, Pressable, ScrollView, StyleSheet, View } from 'react-native';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, useFocusEffect, useNavigation, useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { mobileColors, mobileTokens } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\nimport { healthSyncStore, useHealthSync } from '../../features/health/healthSync';\nimport { HEALTH_DATA_TYPES, labelOf, type HealthDataType } from '../../features/health/reader';\nimport { formatDaysSynced, formatLastSync } from '../../features/health/format';\nimport { openHealthConnectInstall } from '../../features/health/healthConnectLinks';\nimport { useDevices } from '../../features/devices/devices';\n\nconst IS_IOS = Platform.OS === 'ios';\nconst STORE_NAME = IS_IOS ? 'Apple Health' : 'Health Connect';\n\nexport default function HealthScreen() {\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 snapshot = useHealthSync();\n const devices = useDevices();\n const { sync, availability, granted, running, busy, types, backgroundAccess } = snapshot;\n const [now, setNow] = useState(() => Date.now());\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 useFocusEffect(\n useCallback(() => {\n void healthSyncStore.refreshStatus();\n setNow(Date.now());\n }, []),\n );\n\n // Keep \"5 min ago\" honest while the screen is open.\n useEffect(() => {\n const timer = setInterval(() => setNow(Date.now()), 30_000);\n return () => clearInterval(timer);\n }, []);\n\n const handleBack = useCallback(() => {\n if (navigation?.canGoBack?.()) {\n navigation.goBack();\n return;\n }\n navigation?.dispatch?.(\n CommonActions.navigate({ name: 'MainStack.Account', params: orgName ? { orgName } : undefined }),\n );\n }, [navigation, orgName]);\n\n const openDevices = useCallback(() => {\n navigation?.navigate?.('MainStack.Devices', orgName ? { orgName } : undefined);\n }, [navigation, orgName]);\n\n const handleConnect = useCallback(async () => {\n const ok = await healthSyncStore.connect();\n if (!ok && healthSyncStore.getSnapshot().availability?.status === 'available') {\n const message = healthSyncStore.getSnapshot().sync.lastError;\n if (message) Alert.alert(`Could not connect ${STORE_NAME}`, message);\n }\n }, []);\n\n const handleSyncNow = useCallback(() => {\n void healthSyncStore.syncNow({ interactive: true });\n }, []);\n\n const handleInstall = useCallback(async () => {\n try {\n await openHealthConnectInstall();\n } catch {\n Alert.alert('Could not open Google Play', 'Search for \"Health Connect\" in Google Play to install it.');\n }\n }, []);\n\n const handleManageAccess = useCallback(() => {\n if (IS_IOS) {\n Alert.alert(\n 'Choose what Yantra reads',\n 'Open the Health app, tap your profile picture, then Apps > Yantra, and turn data types on or off.',\n [\n { text: 'Not now', style: 'cancel' },\n {\n text: 'Open Health',\n onPress: () => void Linking.openURL('x-apple-health://').catch(() => undefined),\n },\n ],\n );\n return;\n }\n void healthSyncStore.openStoreSettings().then((opened) => {\n if (!opened) Alert.alert('Could not open Health Connect', 'Open Health Connect from your phone settings.');\n });\n }, []);\n\n const runDisconnect = useCallback(async (deleteData: boolean) => {\n const res = await healthSyncStore.disconnect({ deleteData });\n if (!res.ok) {\n Alert.alert('Could not disconnect', res.message ?? 'Please try again.');\n return;\n }\n if (IS_IOS) {\n Alert.alert(\n 'Sync stopped',\n 'Yantra no longer reads Apple Health. To remove its access completely, open the Health app > Apps > Yantra.',\n );\n }\n }, []);\n\n const handleDisconnect = useCallback(() => {\n Alert.alert(\n `Disconnect ${STORE_NAME}?`,\n 'Yantra stops reading your health data. Your coach keeps what was already synced unless you delete it.',\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Stop syncing', onPress: () => void runDisconnect(false) },\n { text: 'Stop and delete synced data', style: 'destructive', onPress: () => void runDisconnect(true) },\n ],\n );\n }, [runDisconnect]);\n\n const statusLabel = describeStatus(snapshot.loaded, running, sync.connected);\n\n // Only what this phone's health store is read for (no \"Not allowed\" for a type it does not have).\n const listed = types ? HEALTH_DATA_TYPES.filter((t) => types.includes(t.id)) : HEALTH_DATA_TYPES;\n const notGranted = granted ? listed.filter((t) => !granted.includes(t.id)) : [];\n const unreadable = (sync.unreadableTypes ?? []).filter((t) => !notGranted.some((n) => n.id === t));\n const needsAccess = listed.filter((t) => sync.needsAccessTypes?.includes(t.id));\n // Health Connect only: reading while Yantra is closed is a permission of its own.\n const backgroundOff = sync.connected && backgroundAccess === false;\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 }]}>Health</Text>\n <View style={styles.headerSpacer} />\n </View>\n\n <ScrollView contentContainerStyle={styles.scroll}>\n <View style={styles.hero}>\n <View style={[styles.heroIcon, { backgroundColor: colors.primarySoft }]}>\n <Ionicons name=\"heart\" size={30} color={colors.primary} />\n </View>\n <Text style={[styles.heroTitle, { color: colors.text }]}>{STORE_NAME}</Text>\n <Text style={[styles.heroBody, { color: colors.textMuted }]}>\n Yantra reads your sleep, heart rate, activity and body measurements so your fitness coach can\n score your Sleep, Recovery and Strain each day and follow your weight. It saves only the\n measurements it takes from devices you pair in Yantra.\n </Text>\n </View>\n\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Row label=\"Status\" value={statusLabel} colors={colors} />\n <Divider color={colors.border} />\n <Row label=\"Last sync\" value={formatLastSync(sync.lastSyncAt, now)} colors={colors} />\n <Divider color={colors.border} />\n <Row label=\"Days synced\" value={formatDaysSynced(sync.syncedDates.length)} colors={colors} />\n </View>\n\n {sync.lastError ? (\n <Notice tone=\"danger\" colors={colors} icon=\"alert-circle\" text={sync.lastError} />\n ) : null}\n {sync.connected && unreadable.length ? (\n <Notice\n tone=\"warning\"\n colors={colors}\n icon=\"information-circle\"\n text={`Could not read ${unreadable.map(labelOf).join(', ')} last time. Everything else synced.`}\n />\n ) : null}\n {sync.connected && needsAccess.length ? (\n <Notice\n tone=\"info\"\n colors={colors}\n icon=\"add-circle\"\n text={`Yantra can now also read ${needsAccess.map((t) => t.label).join(', ')}. Tap Sync now to allow ${needsAccess.length === 1 ? 'it' : 'them'}.`}\n />\n ) : null}\n {backgroundOff && !sync.backgroundAskedAt ? (\n <Notice\n tone=\"info\"\n colors={colors}\n icon=\"add-circle\"\n text=\"Yantra can now sync while it is closed. Tap Sync now to allow it.\"\n />\n ) : null}\n\n <View style={styles.actions}>{renderActions()}</View>\n\n <Text style={[styles.sectionTitle, { color: colors.textMuted }]}>DATA YANTRA READS</Text>\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n {listed.map((t, i) => {\n const state = typeState(sync.connected, granted, t.id);\n return (\n <React.Fragment key={t.id}>\n {i > 0 ? <Divider color={colors.border} /> : null}\n <View style={styles.row}>\n <Text style={[styles.typeLabel, { color: colors.text }]}>{t.label}</Text>\n {state === 'allowed' ? (\n <Ionicons name=\"checkmark-circle\" size={20} color={colors.successText} />\n ) : null}\n {state === 'off' ? (\n <Text style={[styles.rowValue, { color: colors.textMuted }]}>Not allowed</Text>\n ) : null}\n </View>\n </React.Fragment>\n );\n })}\n </View>\n <Text style={[styles.footnote, { color: colors.textMuted }]}>\n {IS_IOS\n ? 'Apple Health does not tell apps which types you allowed; types you turned off are left out. '\n : ''}\n {describeCadence(backgroundAccess, backgroundOff && Boolean(sync.backgroundAskedAt))}\n </Text>\n\n <Text style={[styles.sectionTitle, { color: colors.textMuted }]}>DEVICES</Text>\n <View style={[styles.card, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={openDevices}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Bluetooth devices\"\n style={({ pressed }) => [styles.row, pressed && { backgroundColor: colors.surfaceMuted }]}\n >\n <Text style={[styles.rowLabelWide, { color: colors.text }]}>Bluetooth devices</Text>\n <Text style={[styles.rowValueShort, { color: colors.textMuted }]}>\n {devices.loaded ? (devices.devices.length ? String(devices.devices.length) : 'None') : ''}\n </Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n </View>\n <Text style={[styles.footnote, { color: colors.textMuted }]}>\n A scale, blood-pressure monitor or heart-rate strap you pair in Yantra sends its readings to your\n coach, and Yantra saves them to {STORE_NAME} too. Nothing else is ever written to {STORE_NAME}.\n </Text>\n </ScrollView>\n </SafeAreaView>\n );\n\n function renderActions() {\n if (!snapshot.loaded || (!availability && !sync.connected)) {\n return <ActivityIndicator color={colors.primary} />;\n }\n if (!sync.connected) {\n if (availability?.status === 'not-installed') {\n return (\n <>\n <Text style={[styles.actionHint, { color: colors.textMuted }]}>\n Health Connect is not installed on this phone. Install it from Google Play, then come back\n to connect.\n </Text>\n <PrimaryButton label=\"Install Health Connect\" onPress={handleInstall} />\n </>\n );\n }\n if (availability?.status === 'needs-update') {\n return (\n <>\n <Text style={[styles.actionHint, { color: colors.textMuted }]}>\n Health Connect needs an update before Yantra can use it.\n </Text>\n <PrimaryButton label=\"Update Health Connect\" onPress={handleInstall} />\n </>\n );\n }\n if (availability?.status === 'unsupported') {\n return <Text style={[styles.actionHint, { color: colors.textMuted }]}>{availability.reason}</Text>;\n }\n return (\n <PrimaryButton\n label={`Connect ${STORE_NAME}`}\n loading={busy === 'connecting'}\n onPress={() => void handleConnect()}\n />\n );\n }\n return (\n <>\n <PrimaryButton label=\"Sync now\" loading={running} onPress={handleSyncNow} />\n <View style={[styles.card, styles.secondaryCard, { backgroundColor: colors.surface }]}>\n <Pressable\n onPress={handleManageAccess}\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.row, pressed && { backgroundColor: colors.surfaceMuted }]}\n >\n <Text style={[styles.rowLabelWide, { color: colors.text }]}>Choose what Yantra reads</Text>\n <Ionicons name=\"chevron-forward\" size={16} color={isDark ? '#64748b' : '#c4c4c4'} />\n </Pressable>\n <Divider color={colors.border} />\n <Pressable\n onPress={handleDisconnect}\n disabled={busy === 'disconnecting'}\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.row, pressed && { backgroundColor: colors.surfaceMuted }]}\n >\n {busy === 'disconnecting' ? (\n <ActivityIndicator color={colors.dangerText} />\n ) : (\n <Text style={[styles.rowLabelWide, { color: colors.dangerText }]}>Disconnect</Text>\n )}\n </Pressable>\n </View>\n </>\n );\n }\n}\n\ntype Colors = ReturnType<typeof mobileColors>;\n\nfunction describeStatus(loaded: boolean, running: boolean, connected: boolean): string {\n if (!loaded) return ' ';\n if (running) return 'Syncing...';\n return connected ? 'Connected' : 'Off';\n}\n\n/** When new data comes in. On Android, while closed only with Health Connect's background access. */\nfunction describeCadence(backgroundAccess: boolean | undefined, howToAllow: boolean): string {\n const first = 'The last 30 days sync first, then';\n if (IS_IOS) return `${first} new data as your watch saves it, even while Yantra is closed.`;\n if (backgroundAccess) return `${first} new data about every hour, even while Yantra is closed.`;\n const onOpen = `${first} new days each time you open Yantra.`;\n return howToAllow\n ? `${onOpen} To also sync while it is closed, allow background access under Choose what Yantra reads.`\n : onOpen;\n}\n\n/** Android reports grants per type; Apple Health does not (null). */\nfunction typeState(\n connected: boolean,\n granted: HealthDataType[] | null | undefined,\n id: HealthDataType,\n): 'idle' | 'requested' | 'allowed' | 'off' {\n if (!connected) return 'idle';\n if (granted === null || granted === undefined) return 'requested';\n return granted.includes(id) ? 'allowed' : 'off';\n}\n\nfunction Row({ label, value, colors }: { label: string; value: string; colors: Colors }) {\n return (\n <View style={styles.row}>\n <Text style={[styles.rowLabel, { color: colors.text }]}>{label}</Text>\n <Text style={[styles.rowValue, { color: colors.textMuted }]} numberOfLines={1}>\n {value}\n </Text>\n </View>\n );\n}\n\nfunction Divider({ color }: { color: string }) {\n return <View style={[styles.rowLine, { backgroundColor: color }]} />;\n}\n\nfunction Notice({\n tone,\n colors,\n icon,\n text,\n}: {\n tone: 'danger' | 'warning' | 'info';\n colors: Colors;\n icon: keyof typeof Ionicons.glyphMap;\n text: string;\n}) {\n const bg = { danger: colors.dangerSoft, warning: colors.warningSoft, info: colors.primarySoft }[tone];\n const fg = { danger: colors.dangerText, warning: colors.warningText, info: colors.primary }[tone];\n return (\n <View style={[styles.notice, { backgroundColor: bg }]} accessibilityRole=\"alert\">\n <Ionicons name={icon} size={18} color={fg} style={styles.noticeIcon} />\n <Text style={[styles.noticeText, { color: fg }]}>{text}</Text>\n </View>\n );\n}\n\nfunction PrimaryButton({ label, onPress, loading }: { label: string; onPress: () => void; loading?: boolean }) {\n return (\n <Pressable\n onPress={onPress}\n disabled={loading}\n accessibilityRole=\"button\"\n accessibilityLabel={label}\n style={({ pressed }) => [styles.primary, (pressed || loading) && styles.pressed]}\n >\n {loading ? <ActivityIndicator color=\"#fff\" /> : <Text style={styles.primaryLabel}>{label}</Text>}\n </Pressable>\n );\n}\n\nconst styles = StyleSheet.create({\n safe: { flex: 1 },\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 alignItems: 'center',\n justifyContent: 'center',\n ...mobileTokens.shadow.card,\n },\n headerTitle: { flex: 1, textAlign: 'center', fontSize: 17, fontWeight: '600' },\n headerSpacer: { width: 40, height: 40 },\n pressed: { opacity: 0.72 },\n scroll: { paddingHorizontal: 16, paddingBottom: 40 },\n hero: { alignItems: 'center', paddingTop: 8, paddingBottom: 24, gap: 10 },\n heroIcon: { width: 64, height: 64, borderRadius: 32, alignItems: 'center', justifyContent: 'center' },\n heroTitle: { fontSize: 20, fontWeight: '700' },\n heroBody: { fontSize: 15, lineHeight: 21, textAlign: 'center', paddingHorizontal: 8 },\n card: { borderRadius: 16, overflow: 'hidden' },\n secondaryCard: { marginTop: 12, alignSelf: 'stretch' },\n row: { flexDirection: 'row', alignItems: 'center', minHeight: 52, paddingHorizontal: 16, gap: 12 },\n rowLabel: { fontSize: 16, width: 110 },\n rowLabelWide: { flex: 1, fontSize: 16 },\n typeLabel: { flex: 1, fontSize: 16 },\n rowValue: { flex: 1, fontSize: 16, textAlign: 'right' },\n rowValueShort: { fontSize: 16 },\n rowLine: { height: StyleSheet.hairlineWidth, marginLeft: 16 },\n notice: { flexDirection: 'row', borderRadius: 14, padding: 12, marginTop: 12, gap: 8 },\n noticeIcon: { marginTop: 1 },\n noticeText: { flex: 1, fontSize: 14, lineHeight: 20 },\n actions: { marginTop: 20, alignItems: 'stretch' },\n actionHint: { fontSize: 15, lineHeight: 21, textAlign: 'center', marginBottom: 12 },\n primary: {\n backgroundColor: mobileTokens.color.primary,\n borderRadius: 14,\n minHeight: 50,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 18,\n },\n primaryLabel: { color: '#fff', fontSize: 16, fontWeight: '600' },\n sectionTitle: {\n fontSize: 13,\n fontWeight: '600',\n letterSpacing: 0.4,\n marginTop: 28,\n marginBottom: 8,\n marginLeft: 16,\n },\n footnote: { fontSize: 13, lineHeight: 18, marginTop: 8, marginHorizontal: 16 },\n});\n"],"names":["_a","_b","React"],"mappings":";;;;;;;;;;;;;;;;AAmBA,MAAM,MAAA,GAAS,SAAS,EAAO,KAAA,KAAA;AAC/B,MAAM,UAAA,GAAa,SAAS,cAAiB,GAAA,gBAAA;AAC7C,SAAwB,YAAe,GAAA;AArBvC,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,aAAc,EAAA;AAC/B,EAAA,MAAM,UAAU,UAAW,EAAA;AAC3B,EAAM,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,YAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACE,GAAA,QAAA;AACJ,EAAM,MAAA,CAAC,KAAK,MAAM,CAAA,GAAI,SAAS,MAAM,IAAA,CAAK,KAAK,CAAA;AAC/C,EAAM,MAAA,OAAA,GAAU,QAAQ,MAAM;AAzChC,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA0CI,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,EAAA,cAAA,CAAe,YAAY,MAAM;AAC/B,IAAA,KAAK,gBAAgB,aAAc,EAAA;AACnC,IAAO,MAAA,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA,GACnB,EAAG,EAAE,CAAC,CAAA;AAGN,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,KAAA,GAAQ,YAAY,MAAM,MAAA,CAAO,KAAK,GAAI,EAAC,GAAG,GAAM,CAAA;AAC1D,IAAO,OAAA,MAAM,cAAc,KAAK,CAAA;AAAA,GAClC,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AAvDvC,IAAA,IAAAD,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,mBAAA;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,WAAA,GAAc,YAAY,MAAM;AAnExC,IAAAD,IAAAA,GAAAA;AAoEI,IAAA,CAAAA,MAAA,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,QAAA,KAAZ,gBAAAA,GAAA,CAAA,IAAA,CAAA,UAAA,EAAuB,qBAAqB,OAAU,GAAA;AAAA,MACpD;AAAA,KACE,GAAA,MAAA,CAAA;AAAA,GACH,EAAA,CAAC,UAAY,EAAA,OAAO,CAAC,CAAA;AACxB,EAAM,MAAA,aAAA,GAAgB,YAAY,YAAY;AAxEhD,IAAAA,IAAAA,GAAAA;AAyEI,IAAM,MAAA,EAAA,GAAK,MAAM,eAAA,CAAgB,OAAQ,EAAA;AACzC,IAAI,IAAA,CAAC,EAAMA,IAAAA,CAAAA,CAAAA,GAAAA,GAAA,eAAgB,CAAA,WAAA,GAAc,YAA9B,KAAA,IAAA,GAAA,MAAA,GAAAA,GAA4C,CAAA,MAAA,MAAW,WAAa,EAAA;AAC7E,MAAA,MAAM,OAAU,GAAA,eAAA,CAAgB,WAAY,EAAA,CAAE,IAAK,CAAA,SAAA;AACnD,MAAA,IAAI,SAAe,KAAA,CAAA,KAAA,CAAM,CAAqB,kBAAA,EAAA,UAAU,IAAI,OAAO,CAAA;AAAA;AACrE,GACF,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,KAAK,gBAAgB,OAAQ,CAAA;AAAA,MAC3B,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACH,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,aAAA,GAAgB,YAAY,YAAY;AAC5C,IAAI,IAAA;AACF,MAAA,MAAM,wBAAyB,EAAA;AAAA,KACzB,CAAA,OAAA,CAAA,EAAA;AACN,MAAM,KAAA,CAAA,KAAA,CAAM,8BAA8B,2DAA2D,CAAA;AAAA;AACvG,GACF,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAA,IAAI,MAAQ,EAAA;AACV,MAAM,KAAA,CAAA,KAAA,CAAM,0BAA4B,EAAA,mGAAA,EAAqG,CAAC;AAAA,QAC5I,IAAM,EAAA,SAAA;AAAA,QACN,KAAO,EAAA;AAAA,OACN,EAAA;AAAA,QACD,IAAM,EAAA,aAAA;AAAA,QACN,OAAA,EAAS,MAAM,KAAK,OAAA,CAAQ,QAAQ,mBAAmB,CAAA,CAAE,KAAM,CAAA,MAAM,MAAS;AAAA,OAC/E,CAAC,CAAA;AACF,MAAA;AAAA;AAEF,IAAA,KAAK,eAAgB,CAAA,iBAAA,EAAoB,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA;AACtD,MAAA,IAAI,CAAC,MAAA,EAAc,KAAA,CAAA,KAAA,CAAM,iCAAiC,+CAA+C,CAAA;AAAA,KAC1G,CAAA;AAAA,GACH,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,OAAO,UAAwB,KAAA;AA1GnE,IAAAA,IAAAA,GAAAA;AA2GI,IAAM,MAAA,GAAA,GAAM,MAAM,eAAA,CAAgB,UAAW,CAAA;AAAA,MAC3C;AAAA,KACD,CAAA;AACD,IAAI,IAAA,CAAC,IAAI,EAAI,EAAA;AACX,MAAA,KAAA,CAAM,MAAM,sBAAwBA,EAAAA,CAAAA,GAAAA,GAAA,IAAI,OAAJ,KAAA,IAAA,GAAAA,MAAe,mBAAmB,CAAA;AACtE,MAAA;AAAA;AAEF,IAAA,IAAI,MAAQ,EAAA;AACV,MAAM,KAAA,CAAA,KAAA,CAAM,gBAAgB,4GAA4G,CAAA;AAAA;AAC1I,GACF,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,gBAAA,GAAmB,YAAY,MAAM;AACzC,IAAA,KAAA,CAAM,KAAM,CAAA,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,CAAA,EAAK,yGAAyG,CAAC;AAAA,MACjJ,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACN,EAAA;AAAA,MACD,IAAM,EAAA,cAAA;AAAA,MACN,OAAS,EAAA,MAAM,KAAK,aAAA,CAAc,KAAK;AAAA,KACtC,EAAA;AAAA,MACD,IAAM,EAAA,6BAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,OAAS,EAAA,MAAM,KAAK,aAAA,CAAc,IAAI;AAAA,KACvC,CAAC,CAAA;AAAA,GACJ,EAAG,CAAC,aAAa,CAAC,CAAA;AAClB,EAAA,MAAM,cAAc,cAAe,CAAA,QAAA,CAAS,MAAQ,EAAA,OAAA,EAAS,KAAK,SAAS,CAAA;AAG3E,EAAM,MAAA,MAAA,GAAS,KAAQ,GAAA,iBAAA,CAAkB,MAAO,CAAA,CAAA,CAAA,KAAK,MAAM,QAAS,CAAA,CAAA,CAAE,EAAE,CAAC,CAAI,GAAA,iBAAA;AAC7E,EAAA,MAAM,UAAa,GAAA,OAAA,GAAU,MAAO,CAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAC,OAAQ,CAAA,QAAA,CAAS,CAAE,CAAA,EAAE,CAAC,CAAA,GAAI,EAAC;AAC5E,EAAA,MAAM,UAAc,GAAA,CAAA,CAAA,EAAA,GAAA,IAAA,CAAK,eAAL,KAAA,IAAA,GAAA,EAAA,GAAwB,EAAI,EAAA,MAAA,CAAO,CAAK,CAAA,KAAA,CAAC,WAAW,IAAK,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,EAAA,KAAO,CAAC,CAAC,CAAA;AAC7F,EAAM,MAAA,WAAA,GAAc,MAAO,CAAA,MAAA,CAAO,CAAE,CAAA,KAAA;AAzItC,IAAAA,IAAAA,GAAAA;AAyIyC,IAAA,OAAA,CAAAA,MAAA,IAAK,CAAA,gBAAA,KAAL,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAAuB,SAAS,CAAE,CAAA,EAAA,CAAA;AAAA,GAAG,CAAA;AAE5E,EAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,SAAA,IAAa,gBAAqB,KAAA,KAAA;AAC7D,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,QAAM,EAAA,QAAA,EAAA,CAAA;AAAA,sBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,YAAc,EAAA;AAAA,KACtC,EAAA,CAAA;AAAA,oBAEC,IAAA,CAAA,UAAA,EAAA,EAAW,qBAAuB,EAAA,MAAA,CAAO,MACtC,EAAA,QAAA,EAAA;AAAA,sBAAC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IAChB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,UACzC,iBAAiB,MAAO,CAAA;AAAA,SACzB,CACe,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,OAAQ,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,MAAO,CAAA,OAAA,EAAS,CAC5D,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,SAAW,EAAA;AAAA,UAC1C,OAAO,MAAO,CAAA;AAAA,SACf,GAAI,QAAW,EAAA,UAAA,EAAA,CAAA;AAAA,wBACH,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,UACzC,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAIQ,EAAA,+OAAA,EAAA;AAAA,OACJ,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,wBAAA,GAAA,CAAC,GAAI,EAAA,EAAA,KAAA,EAAM,QAAS,EAAA,KAAA,EAAO,aAAa,MAAgB,EAAA,CAAA;AAAA,wBACvD,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,MAAA,CAAO,MAAQ,EAAA,CAAA;AAAA,wBAC/B,GAAA,CAAC,GAAI,EAAA,EAAA,KAAA,EAAM,WAAY,EAAA,KAAA,EAAO,eAAe,IAAK,CAAA,UAAA,EAAY,GAAG,CAAA,EAAG,MAAgB,EAAA,CAAA;AAAA,wBACnF,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,MAAA,CAAO,MAAQ,EAAA,CAAA;AAAA,wBAC/B,GAAA,CAAC,GAAI,EAAA,EAAA,KAAA,EAAM,aAAc,EAAA,KAAA,EAAO,iBAAiB,IAAK,CAAA,WAAA,CAAY,MAAM,CAAA,EAAG,MAAgB,EAAA;AAAA,OAC/F,EAAA,CAAA;AAAA,MAEC,IAAK,CAAA,SAAA,mBAAa,GAAA,CAAA,MAAA,EAAA,EAAO,IAAK,EAAA,QAAA,EAAS,MAAgB,EAAA,IAAA,EAAK,cAAe,EAAA,IAAA,EAAM,IAAK,CAAA,SAAA,EAAW,CAAK,GAAA,IAAA;AAAA,MACtG,IAAA,CAAK,aAAa,UAAW,CAAA,MAAA,uBAAU,MAAO,EAAA,EAAA,IAAA,EAAK,WAAU,MAAgB,EAAA,IAAA,EAAK,sBAAqB,IAAM,EAAA,CAAA,eAAA,EAAkB,WAAW,GAAI,CAAA,OAAO,EAAE,IAAK,CAAA,IAAI,CAAC,CAAA,mCAAA,CAAA,EAAuC,CAAK,GAAA,IAAA;AAAA,MAC7M,IAAK,CAAA,SAAA,IAAa,WAAY,CAAA,MAAA,mBAAU,GAAA,CAAA,MAAA,EAAA,EAAO,IAAK,EAAA,MAAA,EAAO,MAAgB,EAAA,IAAA,EAAK,YAAa,EAAA,IAAA,EAAM,CAA4B,yBAAA,EAAA,WAAA,CAAY,GAAI,CAAA,CAAA,CAAA,KAAK,CAAE,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,IAAI,CAAC,CAA2B,wBAAA,EAAA,WAAA,CAAY,MAAW,KAAA,CAAA,GAAI,IAAO,GAAA,MAAM,KAAK,CAAK,GAAA,IAAA;AAAA,MACpP,aAAiB,IAAA,CAAC,IAAK,CAAA,iBAAA,mBAAqB,GAAA,CAAA,MAAA,EAAA,EAAO,IAAK,EAAA,MAAA,EAAO,MAAgB,EAAA,IAAA,EAAK,YAAa,EAAA,IAAA,EAAK,qEAAoE,CAAK,GAAA,IAAA;AAAA,0BAE/K,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,OAAA,EAAU,yBAAgB,EAAA,CAAA;AAAA,sBAE7C,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,YAAc,EAAA;AAAA,QAC3C,OAAO,MAAO,CAAA;AAAA,OACf,GAAG,QAAiB,EAAA,mBAAA,EAAA,CAAA;AAAA,sBACV,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACnC,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACc,EAAA,QAAA,EAAA,MAAA,CAAO,GAAI,CAAA,CAAC,GAAG,CAAM,KAAA;AAChC,QAAA,MAAM,QAAQ,SAAU,CAAA,IAAA,CAAK,SAAW,EAAA,OAAA,EAAS,EAAE,EAAE,CAAA;AACrD,QAAO,uBAAA,IAAA,CAACE,cAAM,CAAA,QAAA,EAAN,EACe,QAAA,EAAA;AAAA,UAAA,CAAA,GAAI,oBAAK,GAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,MAAA,CAAO,QAAQ,CAAK,GAAA,IAAA;AAAA,0BAC5C,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,GAChB,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,SAAW,EAAA;AAAA,cACpD,OAAO,MAAO,CAAA;AAAA,aACf,CAAI,EAAA,QAAA,EAAA,CAAA,CAAE,KAAM,EAAA,CAAA;AAAA,YACU,KAAA,KAAU,SAAY,mBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,IAAA,EAAK,kBAAmB,EAAA,IAAA,EAAM,EAAI,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAa,CAAK,GAAA,IAAA;AAAA,YAClG,UAAU,KAAQ,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,cACtE,OAAO,MAAO,CAAA;AAAA,aACf,CAAG,EAAA,QAAA,EAAA,aAAA,EAAW,CAAU,GAAA;AAAA,WACP,EAAA;AAAA,SAAA,EAAA,EAVM,EAAE,EAWZ,CAAA;AAAA,OACnB,CACO,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,QACvC,OAAO,MAAO,CAAA;AAAA,OACf,CACc,EAAA,QAAA,EAAA;AAAA,QAAA,MAAA,GAAS,8FAAiG,GAAA,EAAA;AAAA,QAC1G,gBAAgB,gBAAkB,EAAA,aAAA,IAAiB,OAAQ,CAAA,IAAA,CAAK,iBAAiB,CAAC;AAAA,OACvF,EAAA,CAAA;AAAA,sBAEC,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,YAAc,EAAA;AAAA,QAC3C,OAAO,MAAO,CAAA;AAAA,OACf,GAAG,QAAO,EAAA,SAAA,EAAA,CAAA;AAAA,sBACA,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QACnC,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACa,EAAA,QAAA,kBAAA,IAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,WAAa,EAAA,iBAAA,EAAkB,QAAS,EAAA,kBAAA,EAAmB,mBAAoB,EAAA,KAAA,EAAO,CAAC;AAAA,QACrH;AAAA,OACI,KAAA,CAAC,MAAO,CAAA,GAAA,EAAK,OAAW,IAAA;AAAA,QAC5B,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACe,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,YAAc,EAAA;AAAA,UAC/C,OAAO,MAAO,CAAA;AAAA,SACf,GAAG,QAAiB,EAAA,mBAAA,EAAA,CAAA;AAAA,wBACN,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,aAAe,EAAA;AAAA,UAChD,OAAO,MAAO,CAAA;AAAA,SACf,CAAA,EACkB,QAAQ,EAAA,OAAA,CAAA,MAAA,GAAS,OAAQ,CAAA,OAAA,CAAQ,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,SAAS,EACzF,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,YAAS,IAAK,EAAA,iBAAA,EAAkB,MAAM,EAAI,EAAA,KAAA,EAAO,MAAS,GAAA,SAAA,GAAY,SAAW,EAAA;AAAA,OAAA,EACtF,CACJ,EAAA,CAAA;AAAA,sBACC,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,QACvC,OAAO,MAAO,CAAA;AAAA,OACf,CAAG,EAAA,QAAA,EAAA;AAAA,QAAA,oIAAA;AAAA,QAE2C,UAAA;AAAA,QAAW,wCAAA;AAAA,QAAuC,UAAA;AAAA,QAAW;AAAA,OAClG,EAAA;AAAA,KACJ,EAAA;AAAA,GACJ,EAAA,CAAA;AACN,EAAA,SAAS,aAAgB,GAAA;AACvB,IAAA,IAAI,CAAC,QAAS,CAAA,MAAA,IAAU,CAAC,YAAgB,IAAA,CAAC,KAAK,SAAW,EAAA;AACxD,MAAA,uBAAQ,GAAA,CAAA,iBAAA,EAAA,EAAkB,KAAO,EAAA,MAAA,CAAO,OAAS,EAAA,CAAA;AAAA;AAEnD,IAAI,IAAA,CAAC,KAAK,SAAW,EAAA;AACnB,MAAI,IAAA,CAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,YAAW,eAAiB,EAAA;AAC5C,QAAA,uBACgB,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,YAC7C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAGU,EAAA,wGAAA,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,aAAA,EAAA,EAAc,KAAM,EAAA,wBAAA,EAAyB,SAAS,aAAe,EAAA;AAAA,SAC1E,EAAA,CAAA;AAAA;AAEd,MAAI,IAAA,CAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,YAAW,cAAgB,EAAA;AAC3C,QAAA,uBACgB,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,UAAY,EAAA;AAAA,YAC7C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAEU,EAAA,0DAAA,EAAA,CAAA;AAAA,0BACC,GAAA,CAAA,aAAA,EAAA,EAAc,KAAM,EAAA,uBAAA,EAAwB,SAAS,aAAe,EAAA;AAAA,SACzE,EAAA,CAAA;AAAA;AAEd,MAAI,IAAA,CAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAc,YAAW,aAAe,EAAA;AAC1C,QAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,UACtC,OAAO,MAAO,CAAA;AAAA,SACf,CAAI,EAAA,QAAA,EAAA,YAAA,CAAa,MAAO,EAAA,CAAA;AAAA;AAE3B,MAAA,uBAAQ,GAAA,CAAA,aAAA,EAAA,EAAc,KAAO,EAAA,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAI,OAAS,EAAA,IAAA,KAAS,YAAc,EAAA,OAAA,EAAS,MAAM,KAAK,eAAiB,EAAA,CAAA;AAAA;AAE7H,IAAA,uBACY,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAc,KAAM,EAAA,UAAA,EAAW,OAAS,EAAA,OAAA,EAAS,SAAS,aAAe,EAAA,CAAA;AAAA,2BACzE,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAO,CAAA,IAAA,EAAM,OAAO,aAAe,EAAA;AAAA,QACzD,iBAAiB,MAAO,CAAA;AAAA,OACzB,CACa,EAAA,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,aAAU,OAAS,EAAA,kBAAA,EAAoB,iBAAkB,EAAA,QAAA,EAAS,OAAO,CAAC;AAAA,UACrF;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,GAAA,EAAK,OAAW,IAAA;AAAA,UAC5B,iBAAiB,MAAO,CAAA;AAAA,SACzB,CACe,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,YAAc,EAAA;AAAA,YAC/C,OAAO,MAAO,CAAA;AAAA,WACf,GAAG,QAAwB,EAAA,0BAAA,EAAA,CAAA;AAAA,0BACd,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,OAAA,EAAA,EAAQ,KAAO,EAAA,MAAA,CAAO,MAAQ,EAAA,CAAA;AAAA,wBAC/B,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAS,gBAAkB,EAAA,QAAA,EAAU,SAAS,eAAiB,EAAA,iBAAA,EAAkB,QAAS,EAAA,KAAA,EAAO,CAAC;AAAA,UACvH;AAAA,SACI,KAAA,CAAC,MAAO,CAAA,GAAA,EAAK,OAAW,IAAA;AAAA,UAC5B,iBAAiB,MAAO,CAAA;AAAA,SACzB,CAAA,EACgB,QAAS,EAAA,IAAA,KAAA,eAAA,uBAAmB,iBAAkB,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,UAAA,EAAY,oBAAM,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,YAAc,EAAA;AAAA,UAC7H,OAAO,MAAO,CAAA;AAAA,SACf,CAAG,EAAA,QAAA,EAAA,YAAA,EAAU,CACJ,EAAA;AAAA,OACJ,EAAA;AAAA,KACJ,EAAA,CAAA;AAAA;AAEZ;AAEA,SAAS,cAAA,CAAe,MAAiB,EAAA,OAAA,EAAkB,SAA4B,EAAA;AACrF,EAAI,IAAA,CAAC,QAAe,OAAA,GAAA;AACpB,EAAA,IAAI,SAAgB,OAAA,YAAA;AACpB,EAAA,OAAO,YAAY,WAAc,GAAA,KAAA;AACnC;AAGA,SAAS,eAAA,CAAgB,kBAAuC,UAA6B,EAAA;AAC3F,EAAA,MAAM,KAAQ,GAAA,mCAAA;AACd,EAAI,IAAA,MAAA,EAAe,OAAA,CAAA,EAAG,KAAK,CAAA,8DAAA,CAAA;AAC3B,EAAI,IAAA,gBAAA,EAAyB,OAAA,CAAA,EAAG,KAAK,CAAA,wDAAA,CAAA;AACrC,EAAM,MAAA,MAAA,GAAS,GAAG,KAAK,CAAA,oCAAA,CAAA;AACvB,EAAO,OAAA,UAAA,GAAa,CAAG,EAAA,MAAM,CAA8F,yFAAA,CAAA,GAAA,MAAA;AAC7H;AAGA,SAAS,SAAA,CAAU,SAAoB,EAAA,OAAA,EAA8C,EAA8D,EAAA;AACjJ,EAAI,IAAA,CAAC,WAAkB,OAAA,MAAA;AACvB,EAAA,IAAI,OAAY,KAAA,IAAA,IAAQ,OAAY,KAAA,MAAA,EAAkB,OAAA,WAAA;AACtD,EAAA,OAAO,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAA,GAAI,SAAY,GAAA,KAAA;AAC5C;AACA,SAAS,GAAI,CAAA;AAAA,EACX,KAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,GACjB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAU,EAAA;AAAA,MACrC,OAAO,MAAO,CAAA;AAAA,KACf,GAAI,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,oBACF,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,QAAU,EAAA;AAAA,MACrC,OAAO,MAAO,CAAA;AAAA,KACf,CAAA,EAAG,aAAe,EAAA,CAAA,EACN,QACL,EAAA,KAAA,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AACA,SAAS,OAAQ,CAAA;AAAA,EACf;AACF,CAEG,EAAA;AACD,EAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,OAAS,EAAA;AAAA,IACnC,eAAiB,EAAA;AAAA,GAClB,CAAG,EAAA,CAAA;AACN;AACA,SAAS,MAAO,CAAA;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAA,MAAM,EAAK,GAAA;AAAA,IACT,QAAQ,MAAO,CAAA,UAAA;AAAA,IACf,SAAS,MAAO,CAAA,WAAA;AAAA,IAChB,MAAM,MAAO,CAAA;AAAA,IACb,IAAI,CAAA;AACN,EAAA,MAAM,EAAK,GAAA;AAAA,IACT,QAAQ,MAAO,CAAA,UAAA;AAAA,IACf,SAAS,MAAO,CAAA,WAAA;AAAA,IAChB,MAAM,MAAO,CAAA;AAAA,IACb,IAAI,CAAA;AACN,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,MAAQ,EAAA;AAAA,IAClC,eAAiB,EAAA;AAAA,GAClB,CAAG,EAAA,iBAAA,EAAkB,OACZ,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,QAAA,EAAA,EAAS,MAAM,IAAM,EAAA,IAAA,EAAM,IAAI,KAAO,EAAA,EAAA,EAAI,KAAO,EAAA,MAAA,CAAO,UAAY,EAAA,CAAA;AAAA,oBACpE,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,UAAY,EAAA;AAAA,MACvC,KAAO,EAAA;AAAA,KACR,GAAI,QAAK,EAAA,IAAA,EAAA;AAAA,GACN,EAAA,CAAA;AACR;AACA,SAAS,aAAc,CAAA;AAAA,EACrB,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,EAAO,uBAAA,GAAA,CAAC,SAAU,EAAA,EAAA,OAAA,EAAkB,QAAU,EAAA,OAAA,EAAS,mBAAkB,QAAS,EAAA,kBAAA,EAAoB,KAAO,EAAA,KAAA,EAAO,CAAC;AAAA,IACnH;AAAA,GACF,KAAM,CAAC,MAAO,CAAA,OAAA,EAAA,CAAU,WAAW,OAAY,KAAA,MAAA,CAAO,OAAO,CAClD,EAAA,QAAA,EAAA,OAAA,uBAAW,iBAAkB,EAAA,EAAA,KAAA,EAAM,QAAO,CAAK,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,YAAe,EAAA,QAAA,EAAA,KAAA,EAAM,CAC7F,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,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;AAAA,GACd;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,CAAA;AAAA,IACZ,aAAe,EAAA,EAAA;AAAA,IACf,GAAK,EAAA;AAAA,GACP;AAAA,EACA,QAAU,EAAA;AAAA,IACR,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA,EAAA;AAAA,IACd,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,SAAW,EAAA,QAAA;AAAA,IACX,iBAAmB,EAAA;AAAA,GACrB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,YAAc,EAAA,EAAA;AAAA,IACd,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,aAAe,EAAA;AAAA,IACb,SAAW,EAAA,EAAA;AAAA,IACX,SAAW,EAAA;AAAA,GACb;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;AAAA,GACP;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA;AAAA,GACT;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,SAAW,EAAA;AAAA,IACT,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,SAAW,EAAA;AAAA,GACb;AAAA,EACA,aAAe,EAAA;AAAA,IACb,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,OAAS,EAAA;AAAA,IACP,QAAQ,UAAW,CAAA,aAAA;AAAA,IACnB,UAAY,EAAA;AAAA,GACd;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,aAAe,EAAA,KAAA;AAAA,IACf,YAAc,EAAA,EAAA;AAAA,IACd,OAAS,EAAA,EAAA;AAAA,IACT,SAAW,EAAA,EAAA;AAAA,IACX,GAAK,EAAA;AAAA,GACP;AAAA,EACA,UAAY,EAAA;AAAA,IACV,SAAW,EAAA;AAAA,GACb;AAAA,EACA,UAAY,EAAA;AAAA,IACV,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,OAAS,EAAA;AAAA,IACP,SAAW,EAAA,EAAA;AAAA,IACX,UAAY,EAAA;AAAA,GACd;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,SAAW,EAAA,QAAA;AAAA,IACX,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,OAAS,EAAA;AAAA,IACP,eAAA,EAAiB,aAAa,KAAM,CAAA,OAAA;AAAA,IACpC,YAAc,EAAA,EAAA;AAAA,IACd,SAAW,EAAA,EAAA;AAAA,IACX,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,iBAAmB,EAAA;AAAA,GACrB;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,KAAO,EAAA,MAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,aAAe,EAAA,GAAA;AAAA,IACf,SAAW,EAAA,EAAA;AAAA,IACX,YAAc,EAAA,CAAA;AAAA,IACd,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,EAAA;AAAA,IACZ,SAAW,EAAA,CAAA;AAAA,IACX,gBAAkB,EAAA;AAAA;AAEtB,CAAC,CAAA"}
|
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.127-alpha.0",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"uuid": "^9.0.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"common": "
|
|
30
|
+
"common": "12.0.127-alpha.0",
|
|
31
31
|
"libphonenumber-js": "^1.13.3"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
@@ -45,9 +45,11 @@
|
|
|
45
45
|
"@messenger-box/platform-mobile": "*",
|
|
46
46
|
"@react-native-async-storage/async-storage": "*",
|
|
47
47
|
"@react-navigation/native": "*",
|
|
48
|
-
"common": "12.0.
|
|
48
|
+
"common": "12.0.125-alpha.0",
|
|
49
|
+
"expo-background-task": "*",
|
|
49
50
|
"expo-constants": "*",
|
|
50
51
|
"expo-secure-store": "*",
|
|
52
|
+
"expo-task-manager": "*",
|
|
51
53
|
"expo-web-browser": "*",
|
|
52
54
|
"lodash": "*",
|
|
53
55
|
"react-native": "*",
|
|
@@ -65,5 +67,5 @@
|
|
|
65
67
|
"typescript": {
|
|
66
68
|
"definition": "lib/index.d.ts"
|
|
67
69
|
},
|
|
68
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "f0e3917d46211415b206400ed76d88fa9b2f1d31"
|
|
69
71
|
}
|