@adminide-stack/yantra-mobile 12.0.53-alpha.8 → 12.0.54-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.
@@ -141,6 +141,7 @@ function CustomDrawer(props) {
141
141
  const focusedRouteName = String((_c = (_b = (_a = state == null ? void 0 : state.routes) == null ? void 0 : _a[state == null ? void 0 : state.index]) == null ? void 0 : _b.name) != null ? _c : "");
142
142
  const historyFocused = /ChatHistory/i.test(focusedRouteName);
143
143
  const appsFocused = /(^|\.)Apps$/i.test(focusedRouteName);
144
+ const billingFocused = /(^|\.)Billing/i.test(focusedRouteName);
144
145
  const isAuthenticated = useMemo(() => {
145
146
  if (!authUser) return false;
146
147
  const email = pickAuthEmail(authUser);
@@ -198,6 +199,14 @@ function CustomDrawer(props) {
198
199
  } : void 0
199
200
  }));
200
201
  }, [isLoggingOut, navigation, orgName]);
202
+ const handleOpenBilling = useCallback(() => {
203
+ var _a2, _b2;
204
+ if (isLoggingOut) return;
205
+ (_a2 = navigation == null ? void 0 : navigation.closeDrawer) == null ? void 0 : _a2.call(navigation);
206
+ (_b2 = navigation == null ? void 0 : navigation.navigate) == null ? void 0 : _b2.call(navigation, "MainStack.Billing", orgName ? {
207
+ orgName
208
+ } : void 0);
209
+ }, [isLoggingOut, navigation, orgName]);
201
210
  useEffect(() => {
202
211
  if (authUser) {
203
212
  setIsLoggingOut(false);
@@ -230,7 +239,8 @@ function CustomDrawer(props) {
230
239
  } }, r.key);
231
240
  }),
232
241
  /* @__PURE__ */ jsx(DrawerListRow, { icon: "apps-outline", label: "Apps", focused: appsFocused, onPress: handleOpenApps, showDivider: true }),
233
- /* @__PURE__ */ jsx(DrawerListRow, { icon: "time-outline", label: "History", focused: historyFocused, onPress: handleOpenHistory })
242
+ /* @__PURE__ */ jsx(DrawerListRow, { icon: "time-outline", label: "History", focused: historyFocused, onPress: handleOpenHistory, showDivider: true }),
243
+ /* @__PURE__ */ jsx(DrawerListRow, { icon: "card-outline", label: "Billing", focused: billingFocused, onPress: handleOpenBilling })
234
244
  ] }) : null,
235
245
  !isAuthenticated ? /* @__PURE__ */ jsxs(View, { style: styles.loggedOutStateCard, children: [
236
246
  /* @__PURE__ */ jsx(View, { style: styles.loggedOutStateIconWrap, children: /* @__PURE__ */ jsx(Ionicons, { name: "shield-checkmark-outline", size: 22, color: mobileTokens.color.primary }) }),
@@ -1 +1 @@
1
- {"version":3,"file":"CustomDrawer.js","sources":["../../src/components/CustomDrawer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Image, Pressable, StyleSheet, View } from 'react-native';\nimport { DrawerContentScrollView } from '@react-navigation/drawer';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, 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 } from 'common/graphql';\nimport { mobileTokens } from '../theme/mobileTokens';\n// Shared with the chat surface so the drawer and a message header can never\n// show two different names for the same account.\nimport {\n getInitials,\n pickAuthEmail,\n pickAuthPicture,\n pickPrimaryDisplayName,\n type Auth0ProfileClaims,\n} from '../utils/authUserDisplay';\n\nconst APP_ICON = require('../assets/icon.png');\n\n/** Standard neutral drawer (iOS/Material-like): lets the logo stay the only strong color accent. */\nconst PALETTE = {\n bg: mobileTokens.color.bg,\n surface: mobileTokens.color.surface,\n border: mobileTokens.color.border,\n text: mobileTokens.color.text,\n textSecondary: mobileTokens.color.textMuted,\n icon: '#334155',\n rowHighlight: mobileTokens.color.primarySoft,\n} as const;\n\nfunction routeLabel(descriptor: any, route: any): string {\n const optLabel = descriptor?.options?.drawerLabel;\n if (typeof optLabel === 'string' && optLabel.trim()) return optLabel;\n const title = descriptor?.options?.title;\n if (typeof title === 'string' && title.trim()) return title;\n const tail =\n String(route?.name ?? '')\n .split('.')\n .pop() || 'Route';\n return tail === 'Chat' ? 'Chat' : tail;\n}\n\nfunction isVisibleDrawerRoute(route: any, descriptor: any): boolean {\n const routeName = String(route?.name ?? '');\n if (routeName.includes('WebBuilder') || routeName.toLowerCase().includes('webbuilder')) {\n return false;\n }\n if (/ChatHistory/i.test(routeName) || /CanvasNative/i.test(routeName) || /(^|\\.)Apps$/i.test(routeName)) {\n return false;\n }\n const itemStyle = descriptor?.options?.drawerItemStyle as any;\n if (itemStyle && itemStyle.display === 'none') return false;\n if (descriptor?.options?.hideInMenu === true) return false;\n return true;\n}\n\nfunction pickFocusedOrgName(state: any, route: any): string | null {\n const candidates = [route?.params?.orgName, state?.routes?.[state?.index]?.params?.orgName];\n for (const raw of candidates) {\n if (typeof raw === 'string' && raw.trim()) return raw.trim();\n }\n const focused = state?.routes?.[state?.index];\n const nestedState = focused?.state;\n if (nestedState?.routes && typeof nestedState.index === 'number') {\n const nested = nestedState.routes[nestedState.index]?.params?.orgName;\n if (typeof nested === 'string' && nested.trim()) return nested.trim();\n }\n return null;\n}\n\nfunction DrawerListRow({\n icon,\n label,\n focused,\n onPress,\n showDivider,\n iconNode,\n}: {\n icon?: React.ComponentProps<typeof Ionicons>['name'];\n label: string;\n focused?: boolean;\n onPress: () => void;\n showDivider?: boolean;\n iconNode?: React.ReactNode;\n}) {\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: Boolean(focused) }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.listRow,\n focused ? styles.listRowFocused : null,\n pressed && styles.listRowPressed,\n ]}\n >\n {iconNode ?? (\n <Ionicons\n name={icon ?? 'ellipse-outline'}\n size={22}\n color={focused ? PALETTE.text : PALETTE.icon}\n />\n )}\n <Text style={[styles.listLabel, focused && styles.listLabelFocused]}>{label}</Text>\n <Ionicons name=\"chevron-forward\" size={16} color=\"#c4c4c4\" style={styles.navChevron} />\n </Pressable>\n {showDivider ? <View style={styles.rowDivider} /> : null}\n </>\n );\n}\n\nfunction DrawerProfileHeader({ isAuthenticated }: { isAuthenticated: boolean }) {\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'all',\n skip: !isAuthenticated,\n });\n\n const photoUrl = useMemo(() => {\n const fromProfile = profileData?.accountProfile?.photos?.find((p) => p?.url)?.url;\n if (fromProfile) return fromProfile;\n return pickAuthPicture(authUser);\n }, [profileData?.accountProfile?.photos, authUser]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n\n const subtitle = useMemo(() => {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; nickname?: string };\n const nick = (u?.profile?.nickname ?? u?.nickname ?? '').trim();\n if (!nick || nick === displayName.trim()) return null;\n return `@${nick.replace(/^@/, '')}`;\n }, [authUser, displayName]);\n\n if (!isAuthenticated) return null;\n\n return (\n <View style={styles.profileCard}>\n <View style={styles.profileCardInner}>\n <View style={styles.avatarOuter}>\n {photoUrl ? (\n <Image source={{ uri: photoUrl }} style={styles.avatarImage} resizeMode=\"cover\" />\n ) : (\n <View style={styles.avatarPlaceholder}>\n <Text style={styles.avatarInitials}>{getInitials(displayName)}</Text>\n </View>\n )}\n </View>\n <View style={styles.profileMeta}>\n <Text style={styles.profileName} numberOfLines={2}>\n {displayName}\n </Text>\n {subtitle ? (\n <Text style={styles.profileUsername} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n {email ? (\n <Text style={styles.profileEmail} numberOfLines={1}>\n {email}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\nexport default function CustomDrawer(props: any) {\n const { state, descriptors, navigation } = props;\n /** Mirrors layout settings from `navigation.js` (`defaultHeaderProps.logout`). */\n const showLogout = props.logout !== false;\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const route = useRoute<any>();\n const insets = useSafeAreaInsets();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const orgName = useMemo(() => pickFocusedOrgName(state, route), [state, route]);\n const focusedRouteName = String(state?.routes?.[state?.index]?.name ?? '');\n const historyFocused = /ChatHistory/i.test(focusedRouteName);\n const appsFocused = /(^|\\.)Apps$/i.test(focusedRouteName);\n const isAuthenticated = useMemo(() => {\n if (!authUser) return false;\n const email = pickAuthEmail(authUser);\n const name = pickPrimaryDisplayName(authUser);\n return Boolean(email || name !== 'Account');\n }, [authUser]);\n const visibleRoutes = (state?.routes ?? []).filter((r: any) => isVisibleDrawerRoute(r, descriptors?.[r.key]));\n\n const scrollContentStyle = useMemo(\n () => [\n styles.contentWrap,\n {\n // Drawer scroll views often don't reserve status-bar space reliably — combine inset + breathing room.\n paddingTop: Math.max(insets.top, 14) + 10,\n },\n ],\n [insets.top],\n );\n\n const handleLogout = useCallback(async () => {\n if (isLoggingOut) return;\n setIsLoggingOut(true);\n try {\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n navigation?.closeDrawer?.();\n } catch (error) {\n console.error('[CustomDrawer] Logout failed:', error);\n } finally {\n setIsLoggingOut(false);\n }\n }, [dispatch, isLoggingOut, navigation]);\n\n const handleLogin = useCallback(() => {\n navigation?.closeDrawer?.();\n try {\n navigation?.navigate?.('MainStack.Login');\n } catch {\n navigation?.getParent?.()?.navigate?.('MainStack', { screen: 'MainStack.Login' });\n }\n }, [navigation]);\n\n const handleOpenApps = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Apps',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenHistory = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.ChatHistory',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [isLoggingOut, navigation, orgName]);\n\n useEffect(() => {\n // Prevent stale \"Logging out...\" state if the user logs back in and returns to the drawer.\n if (authUser) {\n setIsLoggingOut(false);\n }\n }, [authUser]);\n\n return (\n <SafeAreaView style={styles.safeArea} edges={['left', 'bottom']}>\n <View style={styles.drawerColumn}>\n <DrawerContentScrollView {...props} style={styles.scroll} contentContainerStyle={scrollContentStyle}>\n <View style={styles.brandBlock}>\n <View style={styles.brandStrip}>\n <Image source={APP_ICON} style={styles.brandIconSmall} resizeMode=\"contain\" />\n <Text style={styles.brandStripTitle}>Yantra</Text>\n </View>\n </View>\n\n <DrawerProfileHeader isAuthenticated={isAuthenticated} />\n\n {isAuthenticated ? (\n <View style={styles.menuCard}>\n {visibleRoutes.map((r: any) => {\n const descriptor = descriptors?.[r.key];\n const focused = state?.index === state?.routes?.findIndex((x: any) => x.key === r.key);\n const label = routeLabel(descriptor, r);\n const iconFn = descriptor?.options?.drawerIcon;\n const fallbackIcon =\n label.trim().toLowerCase() === 'chat' ? 'chatbubbles-outline' : 'home-outline';\n\n return (\n <DrawerListRow\n key={r.key}\n label={label}\n focused={focused}\n showDivider\n icon={fallbackIcon}\n iconNode={\n typeof iconFn === 'function'\n ? iconFn({\n color: focused ? PALETTE.text : PALETTE.icon,\n size: 22,\n focused,\n })\n : undefined\n }\n onPress={() => {\n if (isLoggingOut) return;\n navigation.navigate(r.name, orgName ? { orgName } : undefined);\n }}\n />\n );\n })}\n <DrawerListRow\n icon=\"apps-outline\"\n label=\"Apps\"\n focused={appsFocused}\n onPress={handleOpenApps}\n showDivider\n />\n <DrawerListRow\n icon=\"time-outline\"\n label=\"History\"\n focused={historyFocused}\n onPress={handleOpenHistory}\n />\n </View>\n ) : null}\n {!isAuthenticated ? (\n <View style={styles.loggedOutStateCard}>\n <View style={styles.loggedOutStateIconWrap}>\n <Ionicons\n name=\"shield-checkmark-outline\"\n size={22}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={styles.loggedOutStateTitle}>Sign in to continue</Text>\n <Text style={styles.loggedOutStateSubtitle}>\n Access your chat history, profile, and personalized workspace after login.\n </Text>\n <Pressable\n onPress={handleLogin}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log in\"\n style={({ pressed }) => [\n styles.loggedOutStateButton,\n pressed && styles.loggedOutStateButtonPressed,\n ]}\n >\n <Ionicons name=\"log-in-outline\" size={18} color={mobileTokens.color.surface} />\n <Text style={styles.loggedOutStateButtonLabel}>Log in</Text>\n </Pressable>\n </View>\n ) : null}\n </DrawerContentScrollView>\n\n {showLogout && isAuthenticated ? (\n <View style={styles.logoutFooter}>\n <Pressable\n onPress={handleLogout}\n disabled={isLoggingOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log out\"\n style={({ pressed }) => [\n styles.logoutButton,\n pressed && !isLoggingOut && styles.logoutButtonPressed,\n ]}\n >\n <View style={styles.logoutIconCircle}>\n {isLoggingOut ? (\n <ActivityIndicator size=\"small\" color=\"#b91c1c\" />\n ) : (\n <Ionicons name=\"log-out-outline\" size={20} color=\"#b91c1c\" />\n )}\n </View>\n <Text style={styles.logoutLabel}>{isLoggingOut ? 'Logging out...' : 'Log out'}</Text>\n </Pressable>\n </View>\n ) : showLogout ? (\n <View style={styles.logoutFooter}>\n <Text style={styles.loggedOutFooterHint}>You are currently signed out</Text>\n </View>\n ) : null}\n </View>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: PALETTE.bg,\n },\n drawerColumn: {\n flex: 1,\n },\n scroll: {\n flex: 1,\n },\n contentWrap: {\n flexGrow: 1,\n paddingBottom: 24,\n paddingHorizontal: 18,\n },\n brandBlock: {\n marginBottom: 16,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: PALETTE.border,\n },\n brandStrip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n brandIconSmall: {\n width: 36,\n height: 36,\n borderRadius: 10,\n },\n brandStripTitle: {\n color: PALETTE.text,\n fontSize: 22,\n fontWeight: '800',\n letterSpacing: -0.6,\n },\n profileCard: {\n borderRadius: 12,\n overflow: 'hidden',\n marginBottom: 20,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n },\n profileCardInner: {\n flexDirection: 'row',\n padding: 16,\n gap: 14,\n },\n avatarOuter: {\n width: 56,\n height: 56,\n borderRadius: 28,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarImage: {\n width: '100%',\n height: '100%',\n },\n avatarPlaceholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarInitials: {\n fontSize: 20,\n fontWeight: '700',\n color: mobileTokens.color.primary,\n letterSpacing: 0.3,\n },\n profileMeta: {\n flex: 1,\n minWidth: 0,\n justifyContent: 'center',\n },\n profileName: {\n fontSize: 19,\n fontWeight: '600',\n color: PALETTE.text,\n letterSpacing: -0.3,\n lineHeight: 24,\n },\n profileUsername: {\n marginTop: 4,\n fontSize: 14,\n fontWeight: '500',\n color: PALETTE.textSecondary,\n letterSpacing: -0.1,\n },\n profileEmail: {\n marginTop: 6,\n fontSize: 13,\n fontWeight: '400',\n color: PALETTE.textSecondary,\n },\n menuCard: {\n borderRadius: 16,\n overflow: 'hidden',\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n },\n listRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 15,\n paddingHorizontal: 16,\n gap: 14,\n backgroundColor: PALETTE.surface,\n },\n listRowFocused: {\n backgroundColor: PALETTE.rowHighlight,\n },\n listRowPressed: {\n backgroundColor: PALETTE.rowHighlight,\n },\n listLabel: {\n flex: 1,\n fontSize: 16,\n fontWeight: '400',\n color: PALETTE.text,\n },\n listLabelFocused: {\n fontWeight: '600',\n color: mobileTokens.color.primary,\n },\n rowDivider: {\n height: StyleSheet.hairlineWidth,\n backgroundColor: PALETTE.border,\n marginLeft: 52,\n },\n loggedOutStateCard: {\n marginTop: 18,\n borderRadius: 14,\n paddingHorizontal: 16,\n paddingVertical: 18,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n alignItems: 'center',\n gap: 10,\n },\n loggedOutStateIconWrap: {\n width: 44,\n height: 44,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n loggedOutStateTitle: {\n fontSize: 17,\n fontWeight: '700',\n color: PALETTE.text,\n letterSpacing: -0.2,\n },\n loggedOutStateSubtitle: {\n fontSize: 13,\n lineHeight: 19,\n color: PALETTE.textSecondary,\n textAlign: 'center',\n paddingHorizontal: 4,\n },\n loggedOutStateButton: {\n marginTop: 4,\n borderRadius: 12,\n backgroundColor: mobileTokens.color.primary,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n loggedOutStateButtonPressed: {\n opacity: 0.88,\n },\n loggedOutStateButtonLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: mobileTokens.color.surface,\n },\n navChevron: {\n marginLeft: 'auto',\n },\n logoutFooter: {\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: PALETTE.border,\n paddingHorizontal: 18,\n paddingTop: 10,\n paddingBottom: 8,\n backgroundColor: PALETTE.surface,\n },\n logoutButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingVertical: 12,\n paddingHorizontal: 12,\n borderRadius: 14,\n },\n logoutIconCircle: {\n width: 40,\n height: 40,\n borderRadius: 12,\n backgroundColor: '#fef2f2',\n alignItems: 'center',\n justifyContent: 'center',\n },\n logoutButtonPressed: {\n opacity: 0.75,\n backgroundColor: '#fef2f2',\n },\n logoutLabel: {\n fontSize: 16,\n fontWeight: '600',\n color: '#b91c1c',\n },\n loggedOutFooterHint: {\n fontSize: 12,\n textAlign: 'center',\n color: PALETTE.textSecondary,\n paddingVertical: 8,\n },\n});\n"],"names":["_a","_b","_c","_d"],"mappings":"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"}
1
+ {"version":3,"file":"CustomDrawer.js","sources":["../../src/components/CustomDrawer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Image, Pressable, StyleSheet, View } from 'react-native';\nimport { DrawerContentScrollView } from '@react-navigation/drawer';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { CommonActions, 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 } from 'common/graphql';\nimport { mobileTokens } from '../theme/mobileTokens';\n// Shared with the chat surface so the drawer and a message header can never\n// show two different names for the same account.\nimport {\n getInitials,\n pickAuthEmail,\n pickAuthPicture,\n pickPrimaryDisplayName,\n type Auth0ProfileClaims,\n} from '../utils/authUserDisplay';\n\nconst APP_ICON = require('../assets/icon.png');\n\n/** Standard neutral drawer (iOS/Material-like): lets the logo stay the only strong color accent. */\nconst PALETTE = {\n bg: mobileTokens.color.bg,\n surface: mobileTokens.color.surface,\n border: mobileTokens.color.border,\n text: mobileTokens.color.text,\n textSecondary: mobileTokens.color.textMuted,\n icon: '#334155',\n rowHighlight: mobileTokens.color.primarySoft,\n} as const;\n\nfunction routeLabel(descriptor: any, route: any): string {\n const optLabel = descriptor?.options?.drawerLabel;\n if (typeof optLabel === 'string' && optLabel.trim()) return optLabel;\n const title = descriptor?.options?.title;\n if (typeof title === 'string' && title.trim()) return title;\n const tail =\n String(route?.name ?? '')\n .split('.')\n .pop() || 'Route';\n return tail === 'Chat' ? 'Chat' : tail;\n}\n\nfunction isVisibleDrawerRoute(route: any, descriptor: any): boolean {\n const routeName = String(route?.name ?? '');\n if (routeName.includes('WebBuilder') || routeName.toLowerCase().includes('webbuilder')) {\n return false;\n }\n if (/ChatHistory/i.test(routeName) || /CanvasNative/i.test(routeName) || /(^|\\.)Apps$/i.test(routeName)) {\n return false;\n }\n const itemStyle = descriptor?.options?.drawerItemStyle as any;\n if (itemStyle && itemStyle.display === 'none') return false;\n if (descriptor?.options?.hideInMenu === true) return false;\n return true;\n}\n\nfunction pickFocusedOrgName(state: any, route: any): string | null {\n const candidates = [route?.params?.orgName, state?.routes?.[state?.index]?.params?.orgName];\n for (const raw of candidates) {\n if (typeof raw === 'string' && raw.trim()) return raw.trim();\n }\n const focused = state?.routes?.[state?.index];\n const nestedState = focused?.state;\n if (nestedState?.routes && typeof nestedState.index === 'number') {\n const nested = nestedState.routes[nestedState.index]?.params?.orgName;\n if (typeof nested === 'string' && nested.trim()) return nested.trim();\n }\n return null;\n}\n\nfunction DrawerListRow({\n icon,\n label,\n focused,\n onPress,\n showDivider,\n iconNode,\n}: {\n icon?: React.ComponentProps<typeof Ionicons>['name'];\n label: string;\n focused?: boolean;\n onPress: () => void;\n showDivider?: boolean;\n iconNode?: React.ReactNode;\n}) {\n return (\n <>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ selected: Boolean(focused) }}\n onPress={onPress}\n style={({ pressed }) => [\n styles.listRow,\n focused ? styles.listRowFocused : null,\n pressed && styles.listRowPressed,\n ]}\n >\n {iconNode ?? (\n <Ionicons\n name={icon ?? 'ellipse-outline'}\n size={22}\n color={focused ? PALETTE.text : PALETTE.icon}\n />\n )}\n <Text style={[styles.listLabel, focused && styles.listLabelFocused]}>{label}</Text>\n <Ionicons name=\"chevron-forward\" size={16} color=\"#c4c4c4\" style={styles.navChevron} />\n </Pressable>\n {showDivider ? <View style={styles.rowDivider} /> : null}\n </>\n );\n}\n\nfunction DrawerProfileHeader({ isAuthenticated }: { isAuthenticated: boolean }) {\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'all',\n skip: !isAuthenticated,\n });\n\n const photoUrl = useMemo(() => {\n const fromProfile = profileData?.accountProfile?.photos?.find((p) => p?.url)?.url;\n if (fromProfile) return fromProfile;\n return pickAuthPicture(authUser);\n }, [profileData?.accountProfile?.photos, authUser]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n\n const subtitle = useMemo(() => {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; nickname?: string };\n const nick = (u?.profile?.nickname ?? u?.nickname ?? '').trim();\n if (!nick || nick === displayName.trim()) return null;\n return `@${nick.replace(/^@/, '')}`;\n }, [authUser, displayName]);\n\n if (!isAuthenticated) return null;\n\n return (\n <View style={styles.profileCard}>\n <View style={styles.profileCardInner}>\n <View style={styles.avatarOuter}>\n {photoUrl ? (\n <Image source={{ uri: photoUrl }} style={styles.avatarImage} resizeMode=\"cover\" />\n ) : (\n <View style={styles.avatarPlaceholder}>\n <Text style={styles.avatarInitials}>{getInitials(displayName)}</Text>\n </View>\n )}\n </View>\n <View style={styles.profileMeta}>\n <Text style={styles.profileName} numberOfLines={2}>\n {displayName}\n </Text>\n {subtitle ? (\n <Text style={styles.profileUsername} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n {email ? (\n <Text style={styles.profileEmail} numberOfLines={1}>\n {email}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\nexport default function CustomDrawer(props: any) {\n const { state, descriptors, navigation } = props;\n /** Mirrors layout settings from `navigation.js` (`defaultHeaderProps.logout`). */\n const showLogout = props.logout !== false;\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const route = useRoute<any>();\n const insets = useSafeAreaInsets();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const orgName = useMemo(() => pickFocusedOrgName(state, route), [state, route]);\n const focusedRouteName = String(state?.routes?.[state?.index]?.name ?? '');\n const historyFocused = /ChatHistory/i.test(focusedRouteName);\n const appsFocused = /(^|\\.)Apps$/i.test(focusedRouteName);\n const billingFocused = /(^|\\.)Billing/i.test(focusedRouteName);\n const isAuthenticated = useMemo(() => {\n if (!authUser) return false;\n const email = pickAuthEmail(authUser);\n const name = pickPrimaryDisplayName(authUser);\n return Boolean(email || name !== 'Account');\n }, [authUser]);\n const visibleRoutes = (state?.routes ?? []).filter((r: any) => isVisibleDrawerRoute(r, descriptors?.[r.key]));\n\n const scrollContentStyle = useMemo(\n () => [\n styles.contentWrap,\n {\n // Drawer scroll views often don't reserve status-bar space reliably — combine inset + breathing room.\n paddingTop: Math.max(insets.top, 14) + 10,\n },\n ],\n [insets.top],\n );\n\n const handleLogout = useCallback(async () => {\n if (isLoggingOut) return;\n setIsLoggingOut(true);\n try {\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n navigation?.closeDrawer?.();\n } catch (error) {\n console.error('[CustomDrawer] Logout failed:', error);\n } finally {\n setIsLoggingOut(false);\n }\n }, [dispatch, isLoggingOut, navigation]);\n\n const handleLogin = useCallback(() => {\n navigation?.closeDrawer?.();\n try {\n navigation?.navigate?.('MainStack.Login');\n } catch {\n navigation?.getParent?.()?.navigate?.('MainStack', { screen: 'MainStack.Login' });\n }\n }, [navigation]);\n\n const handleOpenApps = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.Apps',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenHistory = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n navigation?.dispatch?.(\n CommonActions.navigate({\n name: 'MainStack.ChatHistory',\n params: orgName ? { orgName } : undefined,\n }),\n );\n }, [isLoggingOut, navigation, orgName]);\n\n const handleOpenBilling = useCallback(() => {\n if (isLoggingOut) return;\n navigation?.closeDrawer?.();\n navigation?.navigate?.('MainStack.Billing', orgName ? { orgName } : undefined);\n }, [isLoggingOut, navigation, orgName]);\n\n useEffect(() => {\n // Prevent stale \"Logging out...\" state if the user logs back in and returns to the drawer.\n if (authUser) {\n setIsLoggingOut(false);\n }\n }, [authUser]);\n\n return (\n <SafeAreaView style={styles.safeArea} edges={['left', 'bottom']}>\n <View style={styles.drawerColumn}>\n <DrawerContentScrollView {...props} style={styles.scroll} contentContainerStyle={scrollContentStyle}>\n <View style={styles.brandBlock}>\n <View style={styles.brandStrip}>\n <Image source={APP_ICON} style={styles.brandIconSmall} resizeMode=\"contain\" />\n <Text style={styles.brandStripTitle}>Yantra</Text>\n </View>\n </View>\n\n <DrawerProfileHeader isAuthenticated={isAuthenticated} />\n\n {isAuthenticated ? (\n <View style={styles.menuCard}>\n {visibleRoutes.map((r: any) => {\n const descriptor = descriptors?.[r.key];\n const focused = state?.index === state?.routes?.findIndex((x: any) => x.key === r.key);\n const label = routeLabel(descriptor, r);\n const iconFn = descriptor?.options?.drawerIcon;\n const fallbackIcon =\n label.trim().toLowerCase() === 'chat' ? 'chatbubbles-outline' : 'home-outline';\n\n return (\n <DrawerListRow\n key={r.key}\n label={label}\n focused={focused}\n showDivider\n icon={fallbackIcon}\n iconNode={\n typeof iconFn === 'function'\n ? iconFn({\n color: focused ? PALETTE.text : PALETTE.icon,\n size: 22,\n focused,\n })\n : undefined\n }\n onPress={() => {\n if (isLoggingOut) return;\n navigation.navigate(r.name, orgName ? { orgName } : undefined);\n }}\n />\n );\n })}\n <DrawerListRow\n icon=\"apps-outline\"\n label=\"Apps\"\n focused={appsFocused}\n onPress={handleOpenApps}\n showDivider\n />\n <DrawerListRow\n icon=\"time-outline\"\n label=\"History\"\n focused={historyFocused}\n onPress={handleOpenHistory}\n showDivider\n />\n <DrawerListRow\n icon=\"card-outline\"\n label=\"Billing\"\n focused={billingFocused}\n onPress={handleOpenBilling}\n />\n </View>\n ) : null}\n {!isAuthenticated ? (\n <View style={styles.loggedOutStateCard}>\n <View style={styles.loggedOutStateIconWrap}>\n <Ionicons\n name=\"shield-checkmark-outline\"\n size={22}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={styles.loggedOutStateTitle}>Sign in to continue</Text>\n <Text style={styles.loggedOutStateSubtitle}>\n Access your chat history, profile, and personalized workspace after login.\n </Text>\n <Pressable\n onPress={handleLogin}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log in\"\n style={({ pressed }) => [\n styles.loggedOutStateButton,\n pressed && styles.loggedOutStateButtonPressed,\n ]}\n >\n <Ionicons name=\"log-in-outline\" size={18} color={mobileTokens.color.surface} />\n <Text style={styles.loggedOutStateButtonLabel}>Log in</Text>\n </Pressable>\n </View>\n ) : null}\n </DrawerContentScrollView>\n\n {showLogout && isAuthenticated ? (\n <View style={styles.logoutFooter}>\n <Pressable\n onPress={handleLogout}\n disabled={isLoggingOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log out\"\n style={({ pressed }) => [\n styles.logoutButton,\n pressed && !isLoggingOut && styles.logoutButtonPressed,\n ]}\n >\n <View style={styles.logoutIconCircle}>\n {isLoggingOut ? (\n <ActivityIndicator size=\"small\" color=\"#b91c1c\" />\n ) : (\n <Ionicons name=\"log-out-outline\" size={20} color=\"#b91c1c\" />\n )}\n </View>\n <Text style={styles.logoutLabel}>{isLoggingOut ? 'Logging out...' : 'Log out'}</Text>\n </Pressable>\n </View>\n ) : showLogout ? (\n <View style={styles.logoutFooter}>\n <Text style={styles.loggedOutFooterHint}>You are currently signed out</Text>\n </View>\n ) : null}\n </View>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: PALETTE.bg,\n },\n drawerColumn: {\n flex: 1,\n },\n scroll: {\n flex: 1,\n },\n contentWrap: {\n flexGrow: 1,\n paddingBottom: 24,\n paddingHorizontal: 18,\n },\n brandBlock: {\n marginBottom: 16,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: PALETTE.border,\n },\n brandStrip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n brandIconSmall: {\n width: 36,\n height: 36,\n borderRadius: 10,\n },\n brandStripTitle: {\n color: PALETTE.text,\n fontSize: 22,\n fontWeight: '800',\n letterSpacing: -0.6,\n },\n profileCard: {\n borderRadius: 12,\n overflow: 'hidden',\n marginBottom: 20,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n },\n profileCardInner: {\n flexDirection: 'row',\n padding: 16,\n gap: 14,\n },\n avatarOuter: {\n width: 56,\n height: 56,\n borderRadius: 28,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarImage: {\n width: '100%',\n height: '100%',\n },\n avatarPlaceholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarInitials: {\n fontSize: 20,\n fontWeight: '700',\n color: mobileTokens.color.primary,\n letterSpacing: 0.3,\n },\n profileMeta: {\n flex: 1,\n minWidth: 0,\n justifyContent: 'center',\n },\n profileName: {\n fontSize: 19,\n fontWeight: '600',\n color: PALETTE.text,\n letterSpacing: -0.3,\n lineHeight: 24,\n },\n profileUsername: {\n marginTop: 4,\n fontSize: 14,\n fontWeight: '500',\n color: PALETTE.textSecondary,\n letterSpacing: -0.1,\n },\n profileEmail: {\n marginTop: 6,\n fontSize: 13,\n fontWeight: '400',\n color: PALETTE.textSecondary,\n },\n menuCard: {\n borderRadius: 16,\n overflow: 'hidden',\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n },\n listRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 15,\n paddingHorizontal: 16,\n gap: 14,\n backgroundColor: PALETTE.surface,\n },\n listRowFocused: {\n backgroundColor: PALETTE.rowHighlight,\n },\n listRowPressed: {\n backgroundColor: PALETTE.rowHighlight,\n },\n listLabel: {\n flex: 1,\n fontSize: 16,\n fontWeight: '400',\n color: PALETTE.text,\n },\n listLabelFocused: {\n fontWeight: '600',\n color: mobileTokens.color.primary,\n },\n rowDivider: {\n height: StyleSheet.hairlineWidth,\n backgroundColor: PALETTE.border,\n marginLeft: 52,\n },\n loggedOutStateCard: {\n marginTop: 18,\n borderRadius: 14,\n paddingHorizontal: 16,\n paddingVertical: 18,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n alignItems: 'center',\n gap: 10,\n },\n loggedOutStateIconWrap: {\n width: 44,\n height: 44,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n loggedOutStateTitle: {\n fontSize: 17,\n fontWeight: '700',\n color: PALETTE.text,\n letterSpacing: -0.2,\n },\n loggedOutStateSubtitle: {\n fontSize: 13,\n lineHeight: 19,\n color: PALETTE.textSecondary,\n textAlign: 'center',\n paddingHorizontal: 4,\n },\n loggedOutStateButton: {\n marginTop: 4,\n borderRadius: 12,\n backgroundColor: mobileTokens.color.primary,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n loggedOutStateButtonPressed: {\n opacity: 0.88,\n },\n loggedOutStateButtonLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: mobileTokens.color.surface,\n },\n navChevron: {\n marginLeft: 'auto',\n },\n logoutFooter: {\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: PALETTE.border,\n paddingHorizontal: 18,\n paddingTop: 10,\n paddingBottom: 8,\n backgroundColor: PALETTE.surface,\n },\n logoutButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingVertical: 12,\n paddingHorizontal: 12,\n borderRadius: 14,\n },\n logoutIconCircle: {\n width: 40,\n height: 40,\n borderRadius: 12,\n backgroundColor: '#fef2f2',\n alignItems: 'center',\n justifyContent: 'center',\n },\n logoutButtonPressed: {\n opacity: 0.75,\n backgroundColor: '#fef2f2',\n },\n logoutLabel: {\n fontSize: 16,\n fontWeight: '600',\n color: '#b91c1c',\n },\n loggedOutFooterHint: {\n fontSize: 12,\n textAlign: 'center',\n color: PALETTE.textSecondary,\n paddingVertical: 8,\n },\n});\n"],"names":["_a","_b","_c","_d"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useRef,useState,useEffect}from'react';import {StyleSheet,View,PanResponder,Platform,Keyboard,LayoutAnimation}from'react-native';import {isKeyboardControllerAvailable,dismissKeyboard}from'../utils/keyboardController.js';var __defProp = Object.defineProperty;
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useState,useEffect}from'react';import {StyleSheet,View,PanResponder,Platform,Keyboard,LayoutAnimation}from'react-native';import {isKeyboardControllerAvailable,dismissKeyboard}from'../utils/keyboardController.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -112,23 +112,30 @@ function KeyboardComposerDock({
112
112
  else if (g.dy > 28 || g.vy > 0.55) dismissKeyboard();
113
113
  }
114
114
  })).current;
115
- return /* @__PURE__ */ jsxs(Fragment, { children: [
116
- /* @__PURE__ */ jsx(View, __spreadProps(__spreadValues({ style: [styles.dock, {
115
+ return /* @__PURE__ */ jsxs(View, __spreadProps(__spreadValues({ style: styles.dockWrap }, useNativeSwipe ? null : fallbackGestures.panHandlers), { children: [
116
+ /* @__PURE__ */ jsx(View, { style: [styles.dock, {
117
117
  paddingBottom: Math.max(0, closedPadding - keyboardHeight)
118
- }] }, useNativeSwipe ? null : fallbackGestures.panHandlers), { children })),
118
+ }], children }),
119
119
  Platform.OS === "ios" ? /* @__PURE__ */ jsx(View, { style: {
120
120
  height: keyboardHeight
121
121
  }, pointerEvents: "none" }) : null
122
- ] });
122
+ ] }));
123
123
  }
124
124
  const styles = StyleSheet.create({
125
125
  flex: {
126
126
  flex: 1
127
127
  },
128
- dock: {
128
+ // Pin composer + keyboard spacer to the bottom of the column. Without this,
129
+ // a short sibling (collapsed stage, chips) top-aligns the field and the
130
+ // leftover reads as a hole above the keys.
131
+ dockWrap: {
132
+ marginTop: "auto",
129
133
  width: "100%",
130
- alignItems: "center",
131
134
  zIndex: 20,
132
135
  elevation: 20
136
+ },
137
+ dock: {
138
+ width: "100%",
139
+ alignItems: "center"
133
140
  }
134
141
  });export{COMPOSER_INPUT_NATIVE_ID,KeyboardAwareScreen,KeyboardComposerDock,useKeyboardLiftHeight};//# sourceMappingURL=KeyboardComposerDock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardComposerDock.js","sources":["../../src/components/KeyboardComposerDock.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Keyboard,\n LayoutAnimation,\n PanResponder,\n Platform,\n StyleSheet,\n View,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { dismissKeyboard, isKeyboardControllerAvailable } from '../utils/keyboardController';\n\nexport const COMPOSER_INPUT_NATIVE_ID = 'yantra-composer';\n\nexport type KeyboardComposerDockProps = {\n children: React.ReactNode;\n /** Home-indicator inset when the keyboard is closed. */\n closedInset: number;\n keyboardVisible?: boolean;\n /** Expo Go: swipe up on the composer focuses this field (opens the keyboard). */\n onSwipeUp?: () => void;\n};\n\n/**\n * Native swipe region when keyboard-controller is linked: swipe up opens the\n * keyboard, swipe down closes it and the keys follow the finger (iOS interpolator).\n */\nexport function KeyboardAwareScreen({\n children,\n style,\n testID,\n}: {\n children: React.ReactNode;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n}) {\n if (isKeyboardControllerAvailable()) {\n const KeyboardGestureArea = require('react-native-keyboard-controller')\n .KeyboardGestureArea as React.ComponentType<{\n style?: StyleProp<ViewStyle>;\n interpolator?: 'ios' | 'linear';\n showOnSwipeUp?: boolean;\n enableSwipeToDismiss?: boolean;\n textInputNativeID?: string;\n testID?: string;\n children?: React.ReactNode;\n }>;\n return (\n <KeyboardGestureArea\n style={[styles.flex, style]}\n interpolator=\"ios\"\n showOnSwipeUp\n enableSwipeToDismiss\n textInputNativeID={COMPOSER_INPUT_NATIVE_ID}\n testID={testID}\n >\n {children}\n </KeyboardGestureArea>\n );\n }\n return (\n <View style={[styles.flex, style]} testID={testID}>\n {children}\n </View>\n );\n}\n\n/** In-flow iOS spacer so a flex sibling (stage/canvas) shrinks above the keys. */\nexport function KeyboardLiftSpacer() {\n const height = useKeyboardLiftHeight();\n if (Platform.OS !== 'ios' || height <= 0) return null;\n return <View style={{ height }} pointerEvents=\"none\" />;\n}\n\nfunction configureKeyboardLayout(duration?: number) {\n if (Platform.OS !== 'ios') return;\n LayoutAnimation.configureNext({\n duration: duration && duration > 0 ? duration : 250,\n update: {\n type: LayoutAnimation.Types.keyboard,\n },\n });\n}\n\ntype KeyboardHeightListener = { remove: () => void };\n\nfunction listenKeyboardController(\n onHeight: (height: number, duration?: number) => void,\n): KeyboardHeightListener | null {\n if (!isKeyboardControllerAvailable()) return null;\n try {\n const { KeyboardEvents } = require('react-native-keyboard-controller') as {\n KeyboardEvents?: {\n addListener: (\n event: string,\n cb: (e: { height?: number; duration?: number }) => void,\n ) => {\n remove: () => void;\n };\n };\n };\n if (!KeyboardEvents?.addListener) return null;\n const show = KeyboardEvents.addListener('keyboardWillShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const shown = KeyboardEvents.addListener('keyboardDidShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const hide = KeyboardEvents.addListener('keyboardWillHide', (e) => {\n onHeight(0, e?.duration);\n });\n const hidden = KeyboardEvents.addListener('keyboardDidHide', (e) => {\n onHeight(0, e?.duration);\n });\n return {\n remove: () => {\n show.remove();\n shown.remove();\n hide.remove();\n hidden.remove();\n },\n };\n } catch {\n return null;\n }\n}\n\n/** Keyboard height used by the dock spacer. Chat reads this so it scrolls after the list shrinks. */\nexport function useKeyboardLiftHeight(): number {\n const [height, setHeight] = useState(0);\n\n useEffect(() => {\n const apply = (next: number, duration?: number) => {\n configureKeyboardLayout(duration);\n setHeight(next);\n };\n const show = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', (e) => {\n apply(e.endCoordinates?.height ?? 0, e.duration);\n });\n const hide = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', (e) => {\n apply(0, e.duration);\n });\n // KeyboardProvider swallows RN Keyboard events on staging binaries, so\n // Create image / video inputs sat under the keys. Mirror height from\n // keyboard-controller when it is linked.\n const controller = listenKeyboardController(apply);\n return () => {\n show.remove();\n hide.remove();\n controller?.remove();\n };\n }, []);\n\n return Platform.OS === 'android' ? 0 : height;\n}\n\n/**\n * In-flow spacer = full keyboard height so the composer docks on the keys.\n * Native swipe lives on KeyboardAwareScreen; Expo Go uses a composer pan.\n */\nexport function KeyboardComposerDock({ children, closedInset, onSwipeUp }: KeyboardComposerDockProps) {\n const keyboardHeight = useKeyboardLiftHeight();\n const closedPadding = Math.max(closedInset, 0);\n const useNativeSwipe = isKeyboardControllerAvailable();\n const onSwipeUpRef = useRef(onSwipeUp);\n onSwipeUpRef.current = onSwipeUp;\n const fallbackGestures = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dy) > 12 && Math.abs(g.dy) > Math.abs(g.dx) * 1.2,\n onPanResponderRelease: (_, g) => {\n if (g.dy < -28 || g.vy < -0.55) onSwipeUpRef.current?.();\n else if (g.dy > 28 || g.vy > 0.55) dismissKeyboard();\n },\n }),\n ).current;\n\n return (\n <>\n <View\n style={[styles.dock, { paddingBottom: Math.max(0, closedPadding - keyboardHeight) }]}\n {...(useNativeSwipe ? null : fallbackGestures.panHandlers)}\n >\n {children}\n </View>\n {Platform.OS === 'ios' ? <View style={{ height: keyboardHeight }} pointerEvents=\"none\" /> : null}\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n dock: {\n width: '100%',\n alignItems: 'center',\n zIndex: 20,\n elevation: 20,\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KeyboardComposerDock.js","sources":["../../src/components/KeyboardComposerDock.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Keyboard,\n LayoutAnimation,\n PanResponder,\n Platform,\n StyleSheet,\n View,\n type StyleProp,\n type ViewStyle,\n} from 'react-native';\nimport { dismissKeyboard, isKeyboardControllerAvailable } from '../utils/keyboardController';\n\nexport const COMPOSER_INPUT_NATIVE_ID = 'yantra-composer';\n\nexport type KeyboardComposerDockProps = {\n children: React.ReactNode;\n /** Home-indicator inset when the keyboard is closed. */\n closedInset: number;\n keyboardVisible?: boolean;\n /** Expo Go: swipe up on the composer focuses this field (opens the keyboard). */\n onSwipeUp?: () => void;\n};\n\n/**\n * Native swipe region when keyboard-controller is linked: swipe up opens the\n * keyboard, swipe down closes it and the keys follow the finger (iOS interpolator).\n */\nexport function KeyboardAwareScreen({\n children,\n style,\n testID,\n}: {\n children: React.ReactNode;\n style?: StyleProp<ViewStyle>;\n testID?: string;\n}) {\n if (isKeyboardControllerAvailable()) {\n const KeyboardGestureArea = require('react-native-keyboard-controller')\n .KeyboardGestureArea as React.ComponentType<{\n style?: StyleProp<ViewStyle>;\n interpolator?: 'ios' | 'linear';\n showOnSwipeUp?: boolean;\n enableSwipeToDismiss?: boolean;\n textInputNativeID?: string;\n testID?: string;\n children?: React.ReactNode;\n }>;\n return (\n <KeyboardGestureArea\n style={[styles.flex, style]}\n interpolator=\"ios\"\n showOnSwipeUp\n enableSwipeToDismiss\n textInputNativeID={COMPOSER_INPUT_NATIVE_ID}\n testID={testID}\n >\n {children}\n </KeyboardGestureArea>\n );\n }\n return (\n <View style={[styles.flex, style]} testID={testID}>\n {children}\n </View>\n );\n}\n\n/** In-flow iOS spacer so a flex sibling (stage/canvas) shrinks above the keys. */\nexport function KeyboardLiftSpacer() {\n const height = useKeyboardLiftHeight();\n if (Platform.OS !== 'ios' || height <= 0) return null;\n return <View style={{ height }} pointerEvents=\"none\" />;\n}\n\nfunction configureKeyboardLayout(duration?: number) {\n if (Platform.OS !== 'ios') return;\n LayoutAnimation.configureNext({\n duration: duration && duration > 0 ? duration : 250,\n update: {\n type: LayoutAnimation.Types.keyboard,\n },\n });\n}\n\ntype KeyboardHeightListener = { remove: () => void };\n\nfunction listenKeyboardController(\n onHeight: (height: number, duration?: number) => void,\n): KeyboardHeightListener | null {\n if (!isKeyboardControllerAvailable()) return null;\n try {\n const { KeyboardEvents } = require('react-native-keyboard-controller') as {\n KeyboardEvents?: {\n addListener: (\n event: string,\n cb: (e: { height?: number; duration?: number }) => void,\n ) => {\n remove: () => void;\n };\n };\n };\n if (!KeyboardEvents?.addListener) return null;\n const show = KeyboardEvents.addListener('keyboardWillShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const shown = KeyboardEvents.addListener('keyboardDidShow', (e) => {\n onHeight(e?.height ?? 0, e?.duration);\n });\n const hide = KeyboardEvents.addListener('keyboardWillHide', (e) => {\n onHeight(0, e?.duration);\n });\n const hidden = KeyboardEvents.addListener('keyboardDidHide', (e) => {\n onHeight(0, e?.duration);\n });\n return {\n remove: () => {\n show.remove();\n shown.remove();\n hide.remove();\n hidden.remove();\n },\n };\n } catch {\n return null;\n }\n}\n\n/** Keyboard height used by the dock spacer. Chat reads this so it scrolls after the list shrinks. */\nexport function useKeyboardLiftHeight(): number {\n const [height, setHeight] = useState(0);\n\n useEffect(() => {\n const apply = (next: number, duration?: number) => {\n configureKeyboardLayout(duration);\n setHeight(next);\n };\n const show = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow', (e) => {\n apply(e.endCoordinates?.height ?? 0, e.duration);\n });\n const hide = Keyboard.addListener(Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide', (e) => {\n apply(0, e.duration);\n });\n // KeyboardProvider swallows RN Keyboard events on staging binaries, so\n // Create image / video inputs sat under the keys. Mirror height from\n // keyboard-controller when it is linked.\n const controller = listenKeyboardController(apply);\n return () => {\n show.remove();\n hide.remove();\n controller?.remove();\n };\n }, []);\n\n return Platform.OS === 'android' ? 0 : height;\n}\n\n/**\n * In-flow spacer = full keyboard height so the composer docks on the keys.\n * Native swipe lives on KeyboardAwareScreen; Expo Go uses a composer pan.\n */\nexport function KeyboardComposerDock({ children, closedInset, onSwipeUp }: KeyboardComposerDockProps) {\n const keyboardHeight = useKeyboardLiftHeight();\n const closedPadding = Math.max(closedInset, 0);\n const useNativeSwipe = isKeyboardControllerAvailable();\n const onSwipeUpRef = useRef(onSwipeUp);\n onSwipeUpRef.current = onSwipeUp;\n const fallbackGestures = useRef(\n PanResponder.create({\n onMoveShouldSetPanResponder: (_, g) => Math.abs(g.dy) > 12 && Math.abs(g.dy) > Math.abs(g.dx) * 1.2,\n onPanResponderRelease: (_, g) => {\n if (g.dy < -28 || g.vy < -0.55) onSwipeUpRef.current?.();\n else if (g.dy > 28 || g.vy > 0.55) dismissKeyboard();\n },\n }),\n ).current;\n\n return (\n <View style={styles.dockWrap} {...(useNativeSwipe ? null : fallbackGestures.panHandlers)}>\n <View style={[styles.dock, { paddingBottom: Math.max(0, closedPadding - keyboardHeight) }]}>\n {children}\n </View>\n {Platform.OS === 'ios' ? <View style={{ height: keyboardHeight }} pointerEvents=\"none\" /> : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n // Pin composer + keyboard spacer to the bottom of the column. Without this,\n // a short sibling (collapsed stage, chips) top-aligns the field and the\n // leftover reads as a hole above the keys.\n dockWrap: {\n marginTop: 'auto',\n width: '100%',\n zIndex: 20,\n elevation: 20,\n },\n dock: {\n width: '100%',\n alignItems: 'center',\n },\n});\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import {jsx,jsxs,Fragment}from'react/jsx-runtime';import React,{useMemo,useCallb
2
2
  function resolveTitle(options, route) {
3
3
  var _a, _b, _c, _d;
4
4
  const paramTitle = (_a = route == null ? void 0 : route.params) == null ? void 0 : _a.appTitle;
5
+ const routeName = typeof (route == null ? void 0 : route.name) === "string" ? route.name : "";
6
+ if (/CanvasNative/i.test(routeName)) return "Canvas";
5
7
  if (typeof paramTitle === "string" && paramTitle.trim()) {
6
8
  return paramTitle.trim();
7
9
  }
@@ -165,7 +167,7 @@ const styles = StyleSheet.create({
165
167
  fontSize: 17,
166
168
  fontWeight: "700",
167
169
  letterSpacing: -0.2,
168
- width: "100%"
170
+ flexShrink: 1
169
171
  },
170
172
  titleAlignCenter: {
171
173
  textAlign: "center"
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationHeader.js","sources":["../../../src/components/NavigationHeader/NavigationHeader.tsx"],"sourcesContent":["/**\n * Universal navigation header for the Yantra mobile app.\n *\n * Home and Chat keep Tasks · Skills in the top bar. Apps and History live in\n * the sidebar drawer (Manus-style rows); Apps opens a full screen, not a popup.\n *\n * Wired via `customHeader` in `compute.ts`. Screens never call `setOptions`.\n */\nimport React, { useCallback, useMemo } from 'react';\nimport { Pressable, ScrollView, StyleSheet, View, useColorScheme } from 'react-native';\nimport { dismissKeyboard } from '../../utils/keyboardController';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StatusBar } from 'expo-status-bar';\nimport { CommonActions, DrawerActions, useNavigation } from '@react-navigation/native';\nimport { getHeaderTitle } from '@react-navigation/elements';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { GatewayConnector } from '../GatewayConnector';\nimport { tryWebBuilderBack } from '../../screens/WebBuilder/webbuilderBackHandler';\nimport { config } from '../../config/env-config';\nimport { resolveAppTitleFromSurfaceUrl } from '../../features/apps/resolveSurfaceUrl';\nimport { navigateToNewChatHome } from '../../utils/navigateToNewChatHome';\nimport { HeaderMoreMenu } from './HeaderMoreMenu';\nimport { HeaderSkillsButton } from './HeaderSkillsButton';\nimport { HeaderTasksButton } from './HeaderTasksButton';\nimport { HeaderToolbarButton } from './HeaderToolbarButton';\n\ninterface NavigationHeaderProps {\n navigation?: any;\n route?: any;\n options?: any;\n back?: { title?: string };\n\n showTitle?: boolean;\n showToggle?: boolean;\n showBack?: boolean;\n showFilter?: boolean;\n isSearchBack?: boolean;\n showGateway?: boolean;\n showApps?: boolean;\n showHistory?: boolean;\n showNewChat?: boolean;\n headerBgColor?: string;\n}\n\nconst ICON_SIZE = 22;\n\nfunction resolveTitle(options: any, route: any): string {\n const paramTitle = route?.params?.appTitle;\n if (typeof paramTitle === 'string' && paramTitle.trim()) {\n return paramTitle.trim();\n }\n const fromUrl = resolveAppTitleFromSurfaceUrl(route?.params?.url, config);\n if (fromUrl) return fromUrl;\n\n if (typeof options?.title === 'string' && options.title.trim()) {\n return options.title.trim();\n }\n if (typeof options?.headerTitle === 'string' && options.headerTitle.trim()) {\n return options.headerTitle.trim();\n }\n const fallback = getHeaderTitle?.(options ?? {}, route?.name ?? 'Yantra');\n return typeof fallback === 'string' && fallback.trim() ? fallback : 'Yantra';\n}\n\nconst NavigationHeader: React.FC<NavigationHeaderProps> = (props) => {\n const {\n navigation: navProp,\n route,\n options,\n back,\n showTitle = true,\n showToggle = false,\n showBack = false,\n showGateway = false,\n showNewChat = false,\n headerBgColor,\n } = props;\n\n const showChatToolbar = showGateway;\n\n const fallbackNav = useNavigation<any>();\n const navigation = navProp ?? fallbackNav;\n\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const insets = useSafeAreaInsets();\n\n const themeTitleColor = isDark ? '#f1f5f9' : '#0f172a';\n const optionTint = typeof options?.headerTintColor === 'string' ? options.headerTintColor : null;\n const tintLooksDark = optionTint && /^(#?000(000)?|black)$/i.test(optionTint.trim());\n const effectiveTint = optionTint && !(isDark && tintLooksDark) ? optionTint : null;\n const titleColor = effectiveTint ?? themeTitleColor;\n const iconColor = effectiveTint ?? themeTitleColor;\n\n const surfaceColor = headerBgColor ?? (isDark ? '#0f172a' : '#ffffff');\n const dividerColor = isDark ? 'rgba(148, 163, 184, 0.18)' : 'rgba(15, 23, 42, 0.06)';\n\n const titleAlignLeft = options?.headerTitleAlign === 'left';\n const title = useMemo(\n () => resolveTitle(options, route),\n [options, route, route?.params?.appTitle, route?.params?.url],\n );\n const optionTitleStyle = options?.headerTitleStyle ?? null;\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 handleBack = useCallback(() => {\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/webbuilder/i.test(routeName) && tryWebBuilderBack()) {\n return;\n }\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, route?.name]);\n\n const handleToggleDrawer = useCallback(() => {\n try {\n navigation?.dispatch?.(DrawerActions.openDrawer());\n } catch {\n /* Current navigator may not be a drawer — ignore. */\n }\n }, [navigation]);\n\n const handleNewChat = useCallback(() => {\n navigateToNewChatHome(navigation, orgName);\n }, [navigation, orgName]);\n\n const wantsBack = Boolean(back) || showBack;\n\n const leftSlot = wantsBack ? (\n <Pressable\n onPress={handleBack}\n accessibilityLabel=\"Go back\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={ICON_SIZE + 4} color={iconColor} />\n </Pressable>\n ) : showToggle ? (\n <Pressable\n onPress={handleToggleDrawer}\n accessibilityLabel=\"Open menu\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"menu\" size={ICON_SIZE} color={iconColor} />\n </Pressable>\n ) : null;\n\n const hideBrandTitle = showChatToolbar && title === 'Yantra';\n const titleSlot =\n showTitle && !hideBrandTitle ? (\n <Text\n style={[\n styles.title,\n titleAlignLeft ? styles.titleAlignLeft : styles.titleAlignCenter,\n { color: titleColor },\n optionTitleStyle,\n ]}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {title}\n </Text>\n ) : null;\n\n return (\n <>\n <StatusBar style={isDark ? 'light' : 'dark'} />\n <SafeAreaView edges={['top']} style={{ backgroundColor: surfaceColor }}>\n <View\n onStartShouldSetResponderCapture={() => {\n dismissKeyboard();\n return false;\n }}\n style={[\n styles.row,\n {\n backgroundColor: surfaceColor,\n borderBottomColor: dividerColor,\n paddingTop: insets.top > 0 ? 0 : 6,\n },\n options?.headerStyle ?? null,\n ]}\n >\n <View style={styles.leftSlot}>{leftSlot}</View>\n\n {showChatToolbar ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.toolsScroll}\n contentContainerStyle={styles.toolsContent}\n keyboardShouldPersistTaps=\"handled\"\n >\n <HeaderTasksButton isDark={isDark} />\n <HeaderSkillsButton isDark={isDark} />\n </ScrollView>\n ) : (\n <View style={[styles.titleSlot, titleAlignLeft && styles.titleSlotLeft]}>{titleSlot}</View>\n )}\n\n <View style={styles.rightSlot}>\n {showChatToolbar ? (\n <View style={styles.rightActions}>\n {showGateway ? <GatewayConnector /> : null}\n <HeaderMoreMenu isDark={isDark} onNewChat={showNewChat ? handleNewChat : undefined} />\n </View>\n ) : showNewChat ? (\n <HeaderToolbarButton\n icon=\"chat-plus-outline\"\n onPress={handleNewChat}\n accessibilityLabel=\"New chat\"\n isDark={isDark}\n />\n ) : null}\n </View>\n </View>\n </SafeAreaView>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 4,\n paddingRight: 6,\n paddingVertical: 4,\n minHeight: 48,\n borderBottomWidth: StyleSheet.hairlineWidth,\n overflow: 'visible',\n },\n leftSlot: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n toolsScroll: {\n flex: 1,\n minWidth: 0,\n },\n toolsContent: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 2,\n paddingRight: 8,\n gap: 2,\n },\n titleSlot: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 8,\n minWidth: 0,\n },\n titleSlotLeft: {\n alignItems: 'flex-start',\n },\n rightSlot: {\n flexShrink: 0,\n alignItems: 'flex-end',\n justifyContent: 'center',\n paddingLeft: 4,\n },\n rightActions: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n title: {\n fontSize: 17,\n fontWeight: '700',\n letterSpacing: -0.2,\n width: '100%',\n },\n titleAlignCenter: {\n textAlign: 'center',\n },\n titleAlignLeft: {\n textAlign: 'left',\n },\n iconButton: {\n width: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n },\n iconButtonPressed: {\n opacity: 0.6,\n },\n});\n\nexport default React.memo(NavigationHeader);\n"],"names":["_a","_b"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationHeader.js","sources":["../../../src/components/NavigationHeader/NavigationHeader.tsx"],"sourcesContent":["/**\n * Universal navigation header for the Yantra mobile app.\n *\n * Home and Chat keep Tasks · Skills in the top bar. Apps and History live in\n * the sidebar drawer (Manus-style rows); Apps opens a full screen, not a popup.\n *\n * Wired via `customHeader` in `compute.ts`. Screens never call `setOptions`.\n */\nimport React, { useCallback, useMemo } from 'react';\nimport { Pressable, ScrollView, StyleSheet, View, useColorScheme } from 'react-native';\nimport { dismissKeyboard } from '../../utils/keyboardController';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StatusBar } from 'expo-status-bar';\nimport { CommonActions, DrawerActions, useNavigation } from '@react-navigation/native';\nimport { getHeaderTitle } from '@react-navigation/elements';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { GatewayConnector } from '../GatewayConnector';\nimport { tryWebBuilderBack } from '../../screens/WebBuilder/webbuilderBackHandler';\nimport { config } from '../../config/env-config';\nimport { resolveAppTitleFromSurfaceUrl } from '../../features/apps/resolveSurfaceUrl';\nimport { navigateToNewChatHome } from '../../utils/navigateToNewChatHome';\nimport { HeaderMoreMenu } from './HeaderMoreMenu';\nimport { HeaderSkillsButton } from './HeaderSkillsButton';\nimport { HeaderTasksButton } from './HeaderTasksButton';\nimport { HeaderToolbarButton } from './HeaderToolbarButton';\n\ninterface NavigationHeaderProps {\n navigation?: any;\n route?: any;\n options?: any;\n back?: { title?: string };\n\n showTitle?: boolean;\n showToggle?: boolean;\n showBack?: boolean;\n showFilter?: boolean;\n isSearchBack?: boolean;\n showGateway?: boolean;\n showApps?: boolean;\n showHistory?: boolean;\n showNewChat?: boolean;\n headerBgColor?: string;\n}\n\nconst ICON_SIZE = 22;\n\nfunction resolveTitle(options: any, route: any): string {\n const paramTitle = route?.params?.appTitle;\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/CanvasNative/i.test(routeName)) return 'Canvas';\n if (typeof paramTitle === 'string' && paramTitle.trim()) {\n return paramTitle.trim();\n }\n const fromUrl = resolveAppTitleFromSurfaceUrl(route?.params?.url, config);\n if (fromUrl) return fromUrl;\n\n if (typeof options?.title === 'string' && options.title.trim()) {\n return options.title.trim();\n }\n if (typeof options?.headerTitle === 'string' && options.headerTitle.trim()) {\n return options.headerTitle.trim();\n }\n const fallback = getHeaderTitle?.(options ?? {}, route?.name ?? 'Yantra');\n return typeof fallback === 'string' && fallback.trim() ? fallback : 'Yantra';\n}\n\nconst NavigationHeader: React.FC<NavigationHeaderProps> = (props) => {\n const {\n navigation: navProp,\n route,\n options,\n back,\n showTitle = true,\n showToggle = false,\n showBack = false,\n showGateway = false,\n showNewChat = false,\n headerBgColor,\n } = props;\n\n const showChatToolbar = showGateway;\n\n const fallbackNav = useNavigation<any>();\n const navigation = navProp ?? fallbackNav;\n\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const insets = useSafeAreaInsets();\n\n const themeTitleColor = isDark ? '#f1f5f9' : '#0f172a';\n const optionTint = typeof options?.headerTintColor === 'string' ? options.headerTintColor : null;\n const tintLooksDark = optionTint && /^(#?000(000)?|black)$/i.test(optionTint.trim());\n const effectiveTint = optionTint && !(isDark && tintLooksDark) ? optionTint : null;\n const titleColor = effectiveTint ?? themeTitleColor;\n const iconColor = effectiveTint ?? themeTitleColor;\n\n const surfaceColor = headerBgColor ?? (isDark ? '#0f172a' : '#ffffff');\n const dividerColor = isDark ? 'rgba(148, 163, 184, 0.18)' : 'rgba(15, 23, 42, 0.06)';\n\n const titleAlignLeft = options?.headerTitleAlign === 'left';\n const title = useMemo(\n () => resolveTitle(options, route),\n [options, route, route?.params?.appTitle, route?.params?.url],\n );\n const optionTitleStyle = options?.headerTitleStyle ?? null;\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 handleBack = useCallback(() => {\n const routeName = typeof route?.name === 'string' ? route.name : '';\n if (/webbuilder/i.test(routeName) && tryWebBuilderBack()) {\n return;\n }\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, route?.name]);\n\n const handleToggleDrawer = useCallback(() => {\n try {\n navigation?.dispatch?.(DrawerActions.openDrawer());\n } catch {\n /* Current navigator may not be a drawer — ignore. */\n }\n }, [navigation]);\n\n const handleNewChat = useCallback(() => {\n navigateToNewChatHome(navigation, orgName);\n }, [navigation, orgName]);\n\n const wantsBack = Boolean(back) || showBack;\n\n const leftSlot = wantsBack ? (\n <Pressable\n onPress={handleBack}\n accessibilityLabel=\"Go back\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={ICON_SIZE + 4} color={iconColor} />\n </Pressable>\n ) : showToggle ? (\n <Pressable\n onPress={handleToggleDrawer}\n accessibilityLabel=\"Open menu\"\n accessibilityRole=\"button\"\n style={({ pressed }) => [styles.iconButton, pressed && styles.iconButtonPressed]}\n hitSlop={8}\n >\n <MaterialCommunityIcons name=\"menu\" size={ICON_SIZE} color={iconColor} />\n </Pressable>\n ) : null;\n\n const hideBrandTitle = showChatToolbar && title === 'Yantra';\n const titleSlot =\n showTitle && !hideBrandTitle ? (\n <Text\n style={[\n styles.title,\n titleAlignLeft ? styles.titleAlignLeft : styles.titleAlignCenter,\n { color: titleColor },\n optionTitleStyle,\n ]}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {title}\n </Text>\n ) : null;\n\n return (\n <>\n <StatusBar style={isDark ? 'light' : 'dark'} />\n <SafeAreaView edges={['top']} style={{ backgroundColor: surfaceColor }}>\n <View\n onStartShouldSetResponderCapture={() => {\n dismissKeyboard();\n return false;\n }}\n style={[\n styles.row,\n {\n backgroundColor: surfaceColor,\n borderBottomColor: dividerColor,\n paddingTop: insets.top > 0 ? 0 : 6,\n },\n options?.headerStyle ?? null,\n ]}\n >\n <View style={styles.leftSlot}>{leftSlot}</View>\n\n {showChatToolbar ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.toolsScroll}\n contentContainerStyle={styles.toolsContent}\n keyboardShouldPersistTaps=\"handled\"\n >\n <HeaderTasksButton isDark={isDark} />\n <HeaderSkillsButton isDark={isDark} />\n </ScrollView>\n ) : (\n <View style={[styles.titleSlot, titleAlignLeft && styles.titleSlotLeft]}>{titleSlot}</View>\n )}\n\n <View style={styles.rightSlot}>\n {showChatToolbar ? (\n <View style={styles.rightActions}>\n {showGateway ? <GatewayConnector /> : null}\n <HeaderMoreMenu isDark={isDark} onNewChat={showNewChat ? handleNewChat : undefined} />\n </View>\n ) : showNewChat ? (\n <HeaderToolbarButton\n icon=\"chat-plus-outline\"\n onPress={handleNewChat}\n accessibilityLabel=\"New chat\"\n isDark={isDark}\n />\n ) : null}\n </View>\n </View>\n </SafeAreaView>\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 4,\n paddingRight: 6,\n paddingVertical: 4,\n minHeight: 48,\n borderBottomWidth: StyleSheet.hairlineWidth,\n overflow: 'visible',\n },\n leftSlot: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n toolsScroll: {\n flex: 1,\n minWidth: 0,\n },\n toolsContent: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 2,\n paddingRight: 8,\n gap: 2,\n },\n titleSlot: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 8,\n minWidth: 0,\n },\n titleSlotLeft: {\n alignItems: 'flex-start',\n },\n rightSlot: {\n flexShrink: 0,\n alignItems: 'flex-end',\n justifyContent: 'center',\n paddingLeft: 4,\n },\n rightActions: {\n flexDirection: 'row',\n alignItems: 'center',\n flexShrink: 0,\n },\n title: {\n fontSize: 17,\n fontWeight: '700',\n letterSpacing: -0.2,\n flexShrink: 1,\n },\n titleAlignCenter: {\n textAlign: 'center',\n },\n titleAlignLeft: {\n textAlign: 'left',\n },\n iconButton: {\n width: 36,\n height: 36,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 10,\n },\n iconButtonPressed: {\n opacity: 0.6,\n },\n});\n\nexport default React.memo(NavigationHeader);\n"],"names":["_a","_b"],"mappings":"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"}
package/lib/compute.js CHANGED
@@ -413,7 +413,60 @@ const yantraMobilePageStore = [{
413
413
  },
414
414
  componentPath: "@adminide-stack/yantra-mobile/lib/screens/ChatNative/index.js",
415
415
  hasComponent: true
416
+ }, {
417
+ key: "shopping-native",
418
+ path: "/:orgName/c/shopping-native",
419
+ name: "ShoppingNative",
420
+ exact: true,
421
+ priority: 4,
422
+ hideInMenu: true,
423
+ auth: true,
424
+ menu_position: "side"
425
+ // Federated like canvas: opening it fetches shopping_native/Shop from
426
+ // the shopping-native surface at runtime.
427
+ ,
428
+
429
+ importPaths: {
430
+ navigationHeader: "@adminide-stack/yantra-mobile/lib/components/NavigationHeader/NavigationHeader.js"
431
+ },
432
+ customHeader: {
433
+ name: "NavigationHeader",
434
+ component: "$.importPaths.navigationHeader",
435
+ props: {
436
+ showTitle: true,
437
+ showToggle: false,
438
+ showFilter: false,
439
+ isSearchBack: false,
440
+ showBack: true,
441
+ showGateway: false,
442
+ showHistory: false,
443
+ showNewChat: false
444
+ }
445
+ },
446
+ props: {
447
+ initialParams: {
448
+ orgName: null
449
+ },
450
+ options: {
451
+ title: "Shop",
452
+ headerTintColor: "black",
453
+ headerTitleStyle: {
454
+ fontWeight: "bold"
455
+ },
456
+ drawerItemStyle: {
457
+ display: "none"
458
+ },
459
+ headerTitleAlign: "left",
460
+ gestureEnabled: false,
461
+ swipeEnabled: false,
462
+ animation: "fade",
463
+ animationTypeForReplace: "pop",
464
+ keyboardHandlingEnabled: false
465
+ }
466
+ },
467
+ componentPath: "@adminide-stack/yantra-mobile/lib/screens/ShoppingNative/index.js",
468
+ hasComponent: true
416
469
  }];
417
- const selectedRoutes = ["home", "chat", "chathistory", "apps", "webbuilder", "canvas-native", "characters-native", "chat-native"];
470
+ const selectedRoutes = ["home", "chat", "chathistory", "apps", "webbuilder", "canvas-native", "characters-native", "chat-native", "shopping-native"];
418
471
  const filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);
419
472
  export { filteredRoutes, yantraMobilePageStore }; //# sourceMappingURL=compute.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';\nimport type { IRouteModule } from '@common-stack/core';\n\nexport const yantraMobilePageStore: IRouteModule[] = [\n {\n key: 'home',\n path: '/:orgName/l/home',\n name: 'Home',\n exact: true,\n index: true,\n priority: 1,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/Home'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: true,\n showFilter: true,\n isSearchBack: false,\n showGateway: true,\n showApps: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { initialSessionId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'chat',\n path: '/:orgName/chat/:channelId',\n name: 'Chat',\n exact: false,\n priority: 2,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/Chat'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: true,\n showApps: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { channelId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'chathistory',\n path: '/:orgName/chathistory',\n name: 'ChatHistory',\n exact: false,\n priority: 3,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/ChatHistory'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Chat history',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'apps',\n path: '/:orgName/apps',\n name: 'Apps',\n exact: true,\n priority: 3,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/Apps'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showApps: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Apps',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'canvas-native',\n path: '/:orgName/c/canvas-native',\n name: 'CanvasNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // The screen renders the FEDERATED viewer: opening it triggers the\n // Module Federation fetch of canvas_native/Viewer from the surface\n // origin - the viewer's code is not in the app binary.\n component: () => import('./screens/CanvasBoard'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, board: null },\n options: {\n title: 'Canvas',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable via the Apps launcher tile - never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'characters-native',\n path: '/:orgName/c/characters-native',\n name: 'CharactersNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // Federated like canvas: opening it fetches characters_native/Experience\n // from the character-surface origin at runtime.\n component: () => import('./screens/Characters'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, board: null },\n options: {\n title: 'Canvas',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable via the Apps launcher tile - never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'webbuilder',\n path: '/:orgName/c/:channelId/webbuilder',\n name: 'WebBuilder',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/WebBuilder'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, url: null, channelId: null, projectId: null, message: null },\n options: {\n title: 'Web Builder',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable only via Build-mode submit — never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'chat-native',\n path: '/:orgName/c/chat-native',\n name: 'ChatNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // Federated like canvas: opening it fetches chat_native/Chat from the\n // chat-native surface at runtime. `channelId` is the push deep link.\n component: () => import('./screens/ChatNative'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, channelId: null },\n options: {\n title: 'Chats',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable via the Apps launcher tile - never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n // The composer owns its keyboard inset via KeyboardComposerDock;\n // letting the navigator resize too double-shifts the thread.\n keyboardHandlingEnabled: false,\n },\n },\n },\n];\n\nconst selectedRoutes = [\n 'home',\n 'chat',\n 'chathistory',\n 'apps',\n 'webbuilder',\n 'canvas-native',\n 'characters-native',\n 'chat-native',\n];\n\nconst filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';\nimport type { IRouteModule } from '@common-stack/core';\n\nexport const yantraMobilePageStore: IRouteModule[] = [\n {\n key: 'home',\n path: '/:orgName/l/home',\n name: 'Home',\n exact: true,\n index: true,\n priority: 1,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/Home'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: true,\n showFilter: true,\n isSearchBack: false,\n showGateway: true,\n showApps: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { initialSessionId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'chat',\n path: '/:orgName/chat/:channelId',\n name: 'Chat',\n exact: false,\n priority: 2,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/Chat'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: true,\n showApps: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { channelId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'chathistory',\n path: '/:orgName/chathistory',\n name: 'ChatHistory',\n exact: false,\n priority: 3,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/ChatHistory'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Chat history',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'apps',\n path: '/:orgName/apps',\n name: 'Apps',\n exact: true,\n priority: 3,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/Apps'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showApps: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Apps',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'canvas-native',\n path: '/:orgName/c/canvas-native',\n name: 'CanvasNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // The screen renders the FEDERATED viewer: opening it triggers the\n // Module Federation fetch of canvas_native/Viewer from the surface\n // origin - the viewer's code is not in the app binary.\n component: () => import('./screens/CanvasBoard'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, board: null },\n options: {\n title: 'Canvas',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable via the Apps launcher tile - never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'characters-native',\n path: '/:orgName/c/characters-native',\n name: 'CharactersNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // Federated like canvas: opening it fetches characters_native/Experience\n // from the character-surface origin at runtime.\n component: () => import('./screens/Characters'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, board: null },\n options: {\n title: 'Canvas',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable via the Apps launcher tile - never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'webbuilder',\n path: '/:orgName/c/:channelId/webbuilder',\n name: 'WebBuilder',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/WebBuilder'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, url: null, channelId: null, projectId: null, message: null },\n options: {\n title: 'Web Builder',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable only via Build-mode submit — never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'chat-native',\n path: '/:orgName/c/chat-native',\n name: 'ChatNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // Federated like canvas: opening it fetches chat_native/Chat from the\n // chat-native surface at runtime. `channelId` is the push deep link.\n component: () => import('./screens/ChatNative'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, channelId: null },\n options: {\n title: 'Chats',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable via the Apps launcher tile - never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n // The composer owns its keyboard inset via KeyboardComposerDock;\n // letting the navigator resize too double-shifts the thread.\n keyboardHandlingEnabled: false,\n },\n },\n },\n {\n key: 'shopping-native',\n path: '/:orgName/c/shopping-native',\n name: 'ShoppingNative',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n // Federated like canvas: opening it fetches shopping_native/Shop from\n // the shopping-native surface at runtime.\n component: () => import('./screens/ShoppingNative'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Shop',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n keyboardHandlingEnabled: false,\n },\n },\n },\n];\n\nconst selectedRoutes = [\n 'home',\n 'chat',\n 'chathistory',\n 'apps',\n 'webbuilder',\n 'canvas-native',\n 'characters-native',\n 'chat-native',\n 'shopping-native',\n];\n\nconst filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"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"}
@@ -66,7 +66,7 @@ function AppsCatalog({
66
66
  name: "MainStack.CanvasNative",
67
67
  params: {
68
68
  orgName: orgName != null ? orgName : void 0,
69
- appTitle: app.label
69
+ appTitle: "Canvas"
70
70
  }
71
71
  }));
72
72
  return;
@@ -80,6 +80,22 @@ function AppsCatalog({
80
80
  }));
81
81
  return;
82
82
  }
83
+ if (app.nativeRoute === "billing-native") {
84
+ navigation.navigate("MainStack.Billing", {
85
+ orgName: orgName != null ? orgName : void 0
86
+ });
87
+ return;
88
+ }
89
+ if (app.nativeRoute === "shopping-native") {
90
+ navigation.dispatch(CommonActions.navigate({
91
+ name: "MainStack.ShoppingNative",
92
+ params: {
93
+ orgName: orgName != null ? orgName : void 0,
94
+ appTitle: "Shop"
95
+ }
96
+ }));
97
+ return;
98
+ }
83
99
  if (app.nativeRoute === "webbuilder") {
84
100
  const surfaceUrl = resolveSurfaceUrl(app, config);
85
101
  navigation.dispatch(CommonActions.navigate({
@@ -1 +1 @@
1
- {"version":3,"file":"AppsCatalog.js","sources":["../../../src/features/apps/AppsCatalog.tsx"],"sourcesContent":["/**\n * Full-screen Apps catalog: search + grouped tiles, then navigate into a\n * native surface or a new chat. Shared by the Apps screen (not a popup).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, TextInput, View, useColorScheme } from 'react-native';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { v4 as uuidv4 } from 'uuid';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { useChatMutations } from '../../hooks/useChatApi';\nimport { resolveSurfaceUrl } from './resolveSurfaceUrl';\nimport { groupMobileApps, MOBILE_APP_CATALOG, type MobileAppItem } from './mobileAppCatalog';\n\nfunction buildChannelTitle(channelId: string): string {\n return `chat-channel-${channelId}`;\n}\n\nexport function AppsCatalog({ orgName: orgNameProp }: { orgName?: string | null }) {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const { createChannel } = useChatMutations();\n const [query, setQuery] = useState('');\n\n const orgName = useMemo(() => {\n if (typeof orgNameProp === 'string' && orgNameProp.trim()) return orgNameProp.trim();\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [orgNameProp, route?.params?.orgName]);\n\n const grouped = useMemo(() => groupMobileApps(MOBILE_APP_CATALOG, query), [query]);\n\n const muted = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const foreground = isDark ? '#e2e8f0' : mobileTokens.color.text;\n const surface = isDark ? '#111827' : mobileTokens.color.surface;\n const screenBg = isDark ? '#0f172a' : mobileTokens.color.bg;\n const borderColor = isDark ? 'rgba(148,163,184,0.22)' : mobileTokens.color.border;\n const fieldBg = isDark ? '#1e293b' : mobileTokens.color.surfaceMuted;\n const accent = isDark ? '#a5b4fc' : mobileTokens.color.primary;\n const accentSoft = isDark ? 'rgba(99,102,241,0.18)' : mobileTokens.color.primarySoft;\n\n const openApp = useCallback(\n (app: MobileAppItem) => {\n const channelId = uuidv4();\n const params: Record<string, unknown> = {\n orgName: orgName ?? undefined,\n channelId,\n appTitle: app.label,\n };\n\n if (app.nativeRoute === 'characters-native') {\n // Same wiring as AppsMenu: the tile opens the self-contained native\n // character studio (never a chat with the tile's prompt). The host\n // contributes only the session token + subgraph endpoint, built in\n // the screen, so no manifest/handoff params are needed here.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CharactersNative',\n params,\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'canvas-native') {\n // Web canvas opens the boards grid first. Do not mint a chat\n // channelId here — that id is not an index row, and passing it\n // looks like a deep link into a board that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CanvasNative',\n params: { orgName: orgName ?? undefined, appTitle: app.label },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'chat-native') {\n // Opens the conversation list. Deliberately no channelId: the\n // uuid minted above is an AI-chat channel, not a messenger\n // channel, and passing it would read as a deep link into a\n // thread that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ChatNative',\n params: { orgName: orgName ?? undefined },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'webbuilder') {\n const surfaceUrl = resolveSurfaceUrl(app, config);\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.WebBuilder',\n params: surfaceUrl ? { ...params, url: surfaceUrl } : params,\n }),\n );\n return;\n }\n\n void createChannel({\n id: channelId,\n title: buildChannelTitle(channelId),\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName,\n } as any).catch((err) => {\n console.error('[AppsCatalog] createChannel failed:', err);\n });\n\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.Chat',\n params: {\n ...params,\n initialQuery: app.prompt,\n initialMode: 'chat',\n },\n }),\n );\n },\n [createChannel, navigation, orgName],\n );\n\n return (\n <View style={[styles.root, { backgroundColor: screenBg }]}>\n <View style={[styles.searchWrap, { backgroundColor: fieldBg, borderColor }]}>\n <MaterialCommunityIcons name=\"magnify\" size={18} color={muted} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search apps\"\n placeholderTextColor={muted}\n autoCorrect={false}\n autoCapitalize=\"none\"\n style={[styles.searchInput, { color: foreground }]}\n />\n </View>\n <ScrollView keyboardShouldPersistTaps=\"handled\" contentContainerStyle={styles.list}>\n {grouped.length === 0 ? (\n <Text style={[styles.empty, { color: muted }]}>No apps match that search.</Text>\n ) : (\n grouped.map((group) => (\n <View key={group.label} style={styles.group}>\n <Text style={[styles.groupLabel, { color: muted }]}>{group.label}</Text>\n <View style={styles.groupGrid}>\n {group.items.map((app) => (\n <Pressable\n key={app.key}\n onPress={() => openApp(app)}\n accessibilityRole=\"button\"\n accessibilityLabel={app.label}\n style={({ pressed }) => [\n styles.appTile,\n {\n backgroundColor: surface,\n borderColor,\n },\n pressed && { backgroundColor: accentSoft },\n ]}\n >\n <View style={[styles.appIcon, { backgroundColor: accentSoft }]}>\n <MaterialCommunityIcons name={app.icon} size={18} color={accent} />\n </View>\n <Text style={[styles.appLabel, { color: foreground }]} numberOfLines={2}>\n {app.label}\n </Text>\n </Pressable>\n ))}\n </View>\n </View>\n ))\n )}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n searchWrap: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginHorizontal: 16,\n marginTop: 12,\n marginBottom: 8,\n borderWidth: 1,\n borderRadius: 12,\n paddingHorizontal: 12,\n minHeight: 42,\n },\n searchInput: {\n flex: 1,\n fontSize: 15,\n paddingVertical: 8,\n },\n list: {\n paddingHorizontal: 16,\n paddingTop: 8,\n paddingBottom: 28,\n gap: 16,\n },\n group: {\n gap: 8,\n },\n groupLabel: {\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.7,\n textTransform: 'uppercase',\n },\n groupGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n appTile: {\n width: '31%',\n flexGrow: 1,\n minWidth: 96,\n maxWidth: '32.5%',\n borderWidth: 1,\n borderRadius: 14,\n paddingHorizontal: 10,\n paddingVertical: 12,\n gap: 8,\n },\n appIcon: {\n width: 32,\n height: 32,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n },\n appLabel: {\n fontSize: 13,\n fontWeight: '600',\n lineHeight: 17,\n },\n empty: {\n textAlign: 'center',\n paddingVertical: 28,\n fontSize: 14,\n },\n});\n"],"names":["_a","uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"AppsCatalog.js","sources":["../../../src/features/apps/AppsCatalog.tsx"],"sourcesContent":["/**\n * Full-screen Apps catalog: search + grouped tiles, then navigate into a\n * native surface or a new chat. Shared by the Apps screen (not a popup).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, TextInput, View, useColorScheme } from 'react-native';\nimport { CommonActions, useNavigation, useRoute } from '@react-navigation/native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { v4 as uuidv4 } from 'uuid';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport { useChatMutations } from '../../hooks/useChatApi';\nimport { resolveSurfaceUrl } from './resolveSurfaceUrl';\nimport { groupMobileApps, MOBILE_APP_CATALOG, type MobileAppItem } from './mobileAppCatalog';\n\nfunction buildChannelTitle(channelId: string): string {\n return `chat-channel-${channelId}`;\n}\n\nexport function AppsCatalog({ orgName: orgNameProp }: { orgName?: string | null }) {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n const { createChannel } = useChatMutations();\n const [query, setQuery] = useState('');\n\n const orgName = useMemo(() => {\n if (typeof orgNameProp === 'string' && orgNameProp.trim()) return orgNameProp.trim();\n const raw = (route?.params?.orgName as string | undefined) ?? '';\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [orgNameProp, route?.params?.orgName]);\n\n const grouped = useMemo(() => groupMobileApps(MOBILE_APP_CATALOG, query), [query]);\n\n const muted = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n const foreground = isDark ? '#e2e8f0' : mobileTokens.color.text;\n const surface = isDark ? '#111827' : mobileTokens.color.surface;\n const screenBg = isDark ? '#0f172a' : mobileTokens.color.bg;\n const borderColor = isDark ? 'rgba(148,163,184,0.22)' : mobileTokens.color.border;\n const fieldBg = isDark ? '#1e293b' : mobileTokens.color.surfaceMuted;\n const accent = isDark ? '#a5b4fc' : mobileTokens.color.primary;\n const accentSoft = isDark ? 'rgba(99,102,241,0.18)' : mobileTokens.color.primarySoft;\n\n const openApp = useCallback(\n (app: MobileAppItem) => {\n const channelId = uuidv4();\n const params: Record<string, unknown> = {\n orgName: orgName ?? undefined,\n channelId,\n appTitle: app.label,\n };\n\n if (app.nativeRoute === 'characters-native') {\n // Same wiring as AppsMenu: the tile opens the self-contained native\n // character studio (never a chat with the tile's prompt). The host\n // contributes only the session token + subgraph endpoint, built in\n // the screen, so no manifest/handoff params are needed here.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CharactersNative',\n params,\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'canvas-native') {\n // Web canvas opens the boards grid first. Do not mint a chat\n // channelId here — that id is not an index row, and passing it\n // looks like a deep link into a board that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CanvasNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Canvas' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'chat-native') {\n // Opens the conversation list. Deliberately no channelId: the\n // uuid minted above is an AI-chat channel, not a messenger\n // channel, and passing it would read as a deep link into a\n // thread that does not exist.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ChatNative',\n params: { orgName: orgName ?? undefined },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'billing-native') {\n navigation.navigate('MainStack.Billing', { orgName: orgName ?? undefined });\n return;\n }\n\n if (app.nativeRoute === 'shopping-native') {\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.ShoppingNative',\n params: { orgName: orgName ?? undefined, appTitle: 'Shop' },\n }),\n );\n return;\n }\n\n if (app.nativeRoute === 'webbuilder') {\n const surfaceUrl = resolveSurfaceUrl(app, config);\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.WebBuilder',\n params: surfaceUrl ? { ...params, url: surfaceUrl } : params,\n }),\n );\n return;\n }\n\n void createChannel({\n id: channelId,\n title: buildChannelTitle(channelId),\n isShared: false,\n sharedSlug: null,\n isArchived: false,\n isPinned: false,\n model: null,\n systemPrompt: null,\n orgName,\n } as any).catch((err) => {\n console.error('[AppsCatalog] createChannel failed:', err);\n });\n\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.Chat',\n params: {\n ...params,\n initialQuery: app.prompt,\n initialMode: 'chat',\n },\n }),\n );\n },\n [createChannel, navigation, orgName],\n );\n\n return (\n <View style={[styles.root, { backgroundColor: screenBg }]}>\n <View style={[styles.searchWrap, { backgroundColor: fieldBg, borderColor }]}>\n <MaterialCommunityIcons name=\"magnify\" size={18} color={muted} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search apps\"\n placeholderTextColor={muted}\n autoCorrect={false}\n autoCapitalize=\"none\"\n style={[styles.searchInput, { color: foreground }]}\n />\n </View>\n <ScrollView keyboardShouldPersistTaps=\"handled\" contentContainerStyle={styles.list}>\n {grouped.length === 0 ? (\n <Text style={[styles.empty, { color: muted }]}>No apps match that search.</Text>\n ) : (\n grouped.map((group) => (\n <View key={group.label} style={styles.group}>\n <Text style={[styles.groupLabel, { color: muted }]}>{group.label}</Text>\n <View style={styles.groupGrid}>\n {group.items.map((app) => (\n <Pressable\n key={app.key}\n onPress={() => openApp(app)}\n accessibilityRole=\"button\"\n accessibilityLabel={app.label}\n style={({ pressed }) => [\n styles.appTile,\n {\n backgroundColor: surface,\n borderColor,\n },\n pressed && { backgroundColor: accentSoft },\n ]}\n >\n <View style={[styles.appIcon, { backgroundColor: accentSoft }]}>\n <MaterialCommunityIcons name={app.icon} size={18} color={accent} />\n </View>\n <Text style={[styles.appLabel, { color: foreground }]} numberOfLines={2}>\n {app.label}\n </Text>\n </Pressable>\n ))}\n </View>\n </View>\n ))\n )}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n searchWrap: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n marginHorizontal: 16,\n marginTop: 12,\n marginBottom: 8,\n borderWidth: 1,\n borderRadius: 12,\n paddingHorizontal: 12,\n minHeight: 42,\n },\n searchInput: {\n flex: 1,\n fontSize: 15,\n paddingVertical: 8,\n },\n list: {\n paddingHorizontal: 16,\n paddingTop: 8,\n paddingBottom: 28,\n gap: 16,\n },\n group: {\n gap: 8,\n },\n groupLabel: {\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.7,\n textTransform: 'uppercase',\n },\n groupGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 8,\n },\n appTile: {\n width: '31%',\n flexGrow: 1,\n minWidth: 96,\n maxWidth: '32.5%',\n borderWidth: 1,\n borderRadius: 14,\n paddingHorizontal: 10,\n paddingVertical: 12,\n gap: 8,\n },\n appIcon: {\n width: 32,\n height: 32,\n borderRadius: 10,\n alignItems: 'center',\n justifyContent: 'center',\n },\n appLabel: {\n fontSize: 13,\n fontWeight: '600',\n lineHeight: 17,\n },\n empty: {\n textAlign: 'center',\n paddingVertical: 28,\n fontSize: 14,\n },\n});\n"],"names":["_a","uuidv4"],"mappings":"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"}
@@ -147,7 +147,7 @@ const MOBILE_APP_CATALOG = [{
147
147
  icon: "currency-usd",
148
148
  group: "Money",
149
149
  prompt: "Create an invoice for a $2,400 consulting project",
150
- nativeRoute: "webbuilder",
150
+ nativeRoute: "billing-native",
151
151
  surfaceSlug: "billing"
152
152
  }, {
153
153
  key: "kpi-motivation",
@@ -197,6 +197,15 @@ const MOBILE_APP_CATALOG = [{
197
197
  prompt: "Compare the best options for what I need and show me the tradeoffs.",
198
198
  nativeRoute: "webbuilder",
199
199
  surfaceSlug: "shopping"
200
+ }, {
201
+ key: "shopping-native",
202
+ label: "Shop Native",
203
+ icon: "storefront-outline",
204
+ group: "More",
205
+ prompt: "Compare the best options for what I need and show me the tradeoffs.",
206
+ // Federated storefront: search + cart download from shopping_native/Shop.
207
+ // The classic Shop tile keeps the web surface in the WebView host.
208
+ nativeRoute: "shopping-native"
200
209
  }, {
201
210
  key: "travel",
202
211
  label: "Travel",
@@ -1 +1 @@
1
- {"version":3,"file":"mobileAppCatalog.js","sources":["../../../src/features/apps/mobileAppCatalog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport type { MaterialCommunityIcons } from '@expo/vector-icons';\n\ntype IconName = ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type AppGroupId = 'Create' | 'Automate' | 'Sell' | 'Money' | 'Team' | 'More';\n\nexport type MobileAppItem = {\n key: string;\n label: string;\n icon: IconName;\n group: AppGroupId;\n /** Prompt sent as the first chat turn when the app has no native screen. */\n prompt: string;\n /**\n * Which surface host opens this app, if it has one. `webbuilder` is the\n * historical name of the shared WebView surface shell (`screens/WebBuilder`),\n * which is not web-builder-specific: it takes a `url` route param, mints the\n * system token, injects the bridge + cdecli token, stamps `embed=mobile` and\n * owns the timeout/retry UI. Anything with a deployed surface SPA can use it.\n */\n nativeRoute?: 'webbuilder' | 'canvas-native' | 'characters-native' | 'chat-native';\n /**\n * Deployed surface SPA for this app, as the `<slug>-surface` name. Resolved\n * against SURFACE_URL_TEMPLATE so one env var covers every surface and stays\n * per-environment, instead of 20+ near-identical URLs in eas.json.\n *\n * The slug is the SURFACE's name, which is not always the tile key\n * (issue-ticket -> issues, shop -> shopping, notebook -> notebooklm).\n */\n surfaceSlug?: string;\n /**\n * Explicit env override, for the surfaces people actually run locally\n * (design 5174, canvas 5175, webbuilder). Wins over `surfaceSlug`.\n */\n surfaceUrlKey?: 'WEB_BUILDER_URL' | 'CANVAS_SURFACE_URL' | 'DESIGN_SURFACE_URL';\n};\n\n/**\n * Mobile Apps launcher. Labels, groups, and prompts stay in lockstep with the\n * browser ChatTopBar Apps menu (`packages-modules/account/browser`).\n */\nexport const MOBILE_APP_CATALOG: readonly MobileAppItem[] = [\n {\n key: 'design',\n label: 'Design',\n icon: 'palette-outline',\n group: 'Create',\n prompt: 'Design a 10-slide pitch deck for a coffee subscription startup',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'DESIGN_SURFACE_URL',\n surfaceSlug: 'design',\n },\n {\n key: 'canvas',\n label: 'Canvas',\n icon: 'view-grid-outline',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'CANVAS_SURFACE_URL',\n surfaceSlug: 'canvas',\n },\n {\n key: 'canvas-native',\n label: 'Canvas Native',\n icon: 'vector-square',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n // Renders through Module Federation: the viewer downloads from the\n // canvas-surface origin on open. First native surface; the classic\n // Canvas tile keeps the full web editor in the WebView host.\n nativeRoute: 'canvas-native',\n },\n {\n key: 'webbuilder',\n label: 'Web Builder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'WEB_BUILDER_URL',\n surfaceSlug: 'webbuilder',\n },\n {\n key: 'paper2poster',\n label: 'Paper 2 Poster',\n icon: 'presentation',\n group: 'Create',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'paper2poster',\n },\n {\n key: 'codezen',\n label: 'Codezen',\n icon: 'code-braces',\n group: 'Create',\n prompt: 'Clone my repository and fix the failing test',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'codezen',\n },\n {\n key: 'character',\n label: 'Characters',\n icon: 'drama-masks',\n group: 'Create',\n prompt: 'Create a stoic philosophy mentor character I can chat with',\n // Native federated experience (gallery -> detail -> chat); the web\n // surface remains reachable through the surface lane if ever needed.\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'characters-native',\n label: 'Characters Native',\n icon: 'account-star',\n group: 'Create',\n prompt: 'Show me characters I can chat with.',\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'chat-native',\n label: 'Chats',\n icon: 'message-text-outline',\n group: 'Team',\n prompt: 'Show me my conversations.',\n // Person-to-person messaging, federated like canvas: the whole UI\n // downloads from the chat-native surface on open. Not the AI chat -\n // that is the Home tab.\n nativeRoute: 'chat-native',\n },\n {\n key: 'workflow',\n label: 'Workflow',\n icon: 'sitemap',\n group: 'Automate',\n prompt: 'Build a workflow that runs every morning and sends me a summary of what changed.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'workflow',\n },\n {\n key: 'computer',\n label: 'Computer',\n icon: 'monitor',\n group: 'Automate',\n prompt: 'Open a browser and compare the top 5 CRM tools with screenshots',\n },\n {\n key: 'crm',\n label: 'CRM',\n icon: 'account-group-outline',\n group: 'Sell',\n prompt: 'Look at my pipeline and tell me which deals are going cold and what I should send them.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'crm',\n },\n {\n key: 'salesiq',\n label: 'SalesIQ',\n icon: 'radar',\n group: 'Sell',\n prompt: 'Show me who is on my website right now',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'salesiq',\n },\n {\n key: 'inbox',\n label: 'Inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'inbox',\n },\n {\n key: 'mailcampaign',\n label: 'Mail Campaigns',\n icon: 'bullhorn-outline',\n group: 'Sell',\n prompt: 'Draft an email campaign announcing what we shipped this month.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'mailcampaign',\n },\n {\n key: 'expenses',\n label: 'Expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'expenses',\n },\n {\n key: 'cards-wallet',\n label: 'Cards & Wallet',\n icon: 'credit-card-outline',\n group: 'Money',\n prompt: 'Issue a $200 virtual card for monthly ad spend',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'cards-wallet',\n },\n {\n key: 'billing',\n label: 'Billing',\n icon: 'currency-usd',\n group: 'Money',\n prompt: 'Create an invoice for a $2,400 consulting project',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'billing',\n },\n {\n key: 'kpi-motivation',\n label: 'KPI Motivation',\n icon: 'trophy-outline',\n group: 'Team',\n prompt: 'Set up a weekly sales KPI scoreboard for my team',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'kpi-motivation',\n },\n {\n key: 'issue-ticket',\n label: 'Issue Ticket',\n icon: 'bug-outline',\n group: 'Team',\n prompt: 'Create a bug board and triage my open issues',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'issues',\n },\n {\n key: 'notebook',\n label: 'Study',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'notebooklm',\n },\n {\n key: 'resume',\n label: 'Resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'resume',\n },\n {\n key: 'job-search',\n label: 'Job Search',\n icon: 'briefcase-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'job-search',\n },\n {\n key: 'shop',\n label: 'Shop',\n icon: 'cart-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'shopping',\n },\n {\n key: 'travel',\n label: 'Travel',\n icon: 'airplane',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'travel',\n },\n {\n key: 'social-events',\n label: 'yantra.live',\n icon: 'ticket-outline',\n group: 'More',\n prompt: 'What concerts are happening nearby this weekend?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'social-events',\n },\n];\n\nexport const APP_GROUP_ORDER: readonly AppGroupId[] = ['Create', 'Automate', 'Sell', 'Money', 'Team', 'More'];\n\nexport function matchesAppQuery(label: string, query: string): boolean {\n const q = query.toLowerCase().replace(/[^a-z0-9]/g, '');\n if (!q) return true;\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .includes(q);\n}\n\nexport function groupMobileApps(items: readonly MobileAppItem[], query: string) {\n const hits = items.filter((item) => matchesAppQuery(item.label, query));\n return APP_GROUP_ORDER.map((label) => ({\n label,\n items: hits.filter((item) => item.group === label),\n })).filter((group) => group.items.length > 0);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mobileAppCatalog.js","sources":["../../../src/features/apps/mobileAppCatalog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport type { MaterialCommunityIcons } from '@expo/vector-icons';\n\ntype IconName = ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type AppGroupId = 'Create' | 'Automate' | 'Sell' | 'Money' | 'Team' | 'More';\n\nexport type MobileAppItem = {\n key: string;\n label: string;\n icon: IconName;\n group: AppGroupId;\n /** Prompt sent as the first chat turn when the app has no native screen. */\n prompt: string;\n /**\n * Which surface host opens this app, if it has one. `webbuilder` is the\n * historical name of the shared WebView surface shell (`screens/WebBuilder`),\n * which is not web-builder-specific: it takes a `url` route param, mints the\n * system token, injects the bridge + cdecli token, stamps `embed=mobile` and\n * owns the timeout/retry UI. Anything with a deployed surface SPA can use it.\n */\n nativeRoute?:\n | 'webbuilder'\n | 'canvas-native'\n | 'characters-native'\n | 'chat-native'\n | 'billing-native'\n | 'shopping-native';\n /**\n * Deployed surface SPA for this app, as the `<slug>-surface` name. Resolved\n * against SURFACE_URL_TEMPLATE so one env var covers every surface and stays\n * per-environment, instead of 20+ near-identical URLs in eas.json.\n *\n * The slug is the SURFACE's name, which is not always the tile key\n * (issue-ticket -> issues, shop -> shopping, notebook -> notebooklm).\n */\n surfaceSlug?: string;\n /**\n * Explicit env override, for the surfaces people actually run locally\n * (design 5174, canvas 5175, webbuilder). Wins over `surfaceSlug`.\n */\n surfaceUrlKey?: 'WEB_BUILDER_URL' | 'CANVAS_SURFACE_URL' | 'DESIGN_SURFACE_URL';\n};\n\n/**\n * Mobile Apps launcher. Labels, groups, and prompts stay in lockstep with the\n * browser ChatTopBar Apps menu (`packages-modules/account/browser`).\n */\nexport const MOBILE_APP_CATALOG: readonly MobileAppItem[] = [\n {\n key: 'design',\n label: 'Design',\n icon: 'palette-outline',\n group: 'Create',\n prompt: 'Design a 10-slide pitch deck for a coffee subscription startup',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'DESIGN_SURFACE_URL',\n surfaceSlug: 'design',\n },\n {\n key: 'canvas',\n label: 'Canvas',\n icon: 'view-grid-outline',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'CANVAS_SURFACE_URL',\n surfaceSlug: 'canvas',\n },\n {\n key: 'canvas-native',\n label: 'Canvas Native',\n icon: 'vector-square',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n // Renders through Module Federation: the viewer downloads from the\n // canvas-surface origin on open. First native surface; the classic\n // Canvas tile keeps the full web editor in the WebView host.\n nativeRoute: 'canvas-native',\n },\n {\n key: 'webbuilder',\n label: 'Web Builder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'WEB_BUILDER_URL',\n surfaceSlug: 'webbuilder',\n },\n {\n key: 'paper2poster',\n label: 'Paper 2 Poster',\n icon: 'presentation',\n group: 'Create',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'paper2poster',\n },\n {\n key: 'codezen',\n label: 'Codezen',\n icon: 'code-braces',\n group: 'Create',\n prompt: 'Clone my repository and fix the failing test',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'codezen',\n },\n {\n key: 'character',\n label: 'Characters',\n icon: 'drama-masks',\n group: 'Create',\n prompt: 'Create a stoic philosophy mentor character I can chat with',\n // Native federated experience (gallery -> detail -> chat); the web\n // surface remains reachable through the surface lane if ever needed.\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'characters-native',\n label: 'Characters Native',\n icon: 'account-star',\n group: 'Create',\n prompt: 'Show me characters I can chat with.',\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'chat-native',\n label: 'Chats',\n icon: 'message-text-outline',\n group: 'Team',\n prompt: 'Show me my conversations.',\n // Person-to-person messaging, federated like canvas: the whole UI\n // downloads from the chat-native surface on open. Not the AI chat -\n // that is the Home tab.\n nativeRoute: 'chat-native',\n },\n {\n key: 'workflow',\n label: 'Workflow',\n icon: 'sitemap',\n group: 'Automate',\n prompt: 'Build a workflow that runs every morning and sends me a summary of what changed.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'workflow',\n },\n {\n key: 'computer',\n label: 'Computer',\n icon: 'monitor',\n group: 'Automate',\n prompt: 'Open a browser and compare the top 5 CRM tools with screenshots',\n },\n {\n key: 'crm',\n label: 'CRM',\n icon: 'account-group-outline',\n group: 'Sell',\n prompt: 'Look at my pipeline and tell me which deals are going cold and what I should send them.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'crm',\n },\n {\n key: 'salesiq',\n label: 'SalesIQ',\n icon: 'radar',\n group: 'Sell',\n prompt: 'Show me who is on my website right now',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'salesiq',\n },\n {\n key: 'inbox',\n label: 'Inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'inbox',\n },\n {\n key: 'mailcampaign',\n label: 'Mail Campaigns',\n icon: 'bullhorn-outline',\n group: 'Sell',\n prompt: 'Draft an email campaign announcing what we shipped this month.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'mailcampaign',\n },\n {\n key: 'expenses',\n label: 'Expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'expenses',\n },\n {\n key: 'cards-wallet',\n label: 'Cards & Wallet',\n icon: 'credit-card-outline',\n group: 'Money',\n prompt: 'Issue a $200 virtual card for monthly ad spend',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'cards-wallet',\n },\n {\n key: 'billing',\n label: 'Billing',\n icon: 'currency-usd',\n group: 'Money',\n prompt: 'Create an invoice for a $2,400 consulting project',\n nativeRoute: 'billing-native',\n surfaceSlug: 'billing',\n },\n {\n key: 'kpi-motivation',\n label: 'KPI Motivation',\n icon: 'trophy-outline',\n group: 'Team',\n prompt: 'Set up a weekly sales KPI scoreboard for my team',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'kpi-motivation',\n },\n {\n key: 'issue-ticket',\n label: 'Issue Ticket',\n icon: 'bug-outline',\n group: 'Team',\n prompt: 'Create a bug board and triage my open issues',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'issues',\n },\n {\n key: 'notebook',\n label: 'Study',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'notebooklm',\n },\n {\n key: 'resume',\n label: 'Resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'resume',\n },\n {\n key: 'job-search',\n label: 'Job Search',\n icon: 'briefcase-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'job-search',\n },\n {\n key: 'shop',\n label: 'Shop',\n icon: 'cart-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'shopping',\n },\n {\n key: 'shopping-native',\n label: 'Shop Native',\n icon: 'storefront-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n // Federated storefront: search + cart download from shopping_native/Shop.\n // The classic Shop tile keeps the web surface in the WebView host.\n nativeRoute: 'shopping-native',\n },\n {\n key: 'travel',\n label: 'Travel',\n icon: 'airplane',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'travel',\n },\n {\n key: 'social-events',\n label: 'yantra.live',\n icon: 'ticket-outline',\n group: 'More',\n prompt: 'What concerts are happening nearby this weekend?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'social-events',\n },\n];\n\nexport const APP_GROUP_ORDER: readonly AppGroupId[] = ['Create', 'Automate', 'Sell', 'Money', 'Team', 'More'];\n\nexport function matchesAppQuery(label: string, query: string): boolean {\n const q = query.toLowerCase().replace(/[^a-z0-9]/g, '');\n if (!q) return true;\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .includes(q);\n}\n\nexport function groupMobileApps(items: readonly MobileAppItem[], query: string) {\n const hits = items.filter((item) => matchesAppQuery(item.label, query));\n return APP_GROUP_ORDER.map((label) => ({\n label,\n items: hits.filter((item) => item.group === label),\n })).filter((group) => group.items.length > 0);\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ let experience = null;
2
+ let experiencePreload = null;
3
+ function registerNativeShoppingExperience(component) {
4
+ experience = component;
5
+ }
6
+ function getNativeShoppingExperience() {
7
+ return experience;
8
+ }
9
+ function registerShoppingExperiencePreload(fn) {
10
+ experiencePreload = fn;
11
+ }
12
+ function preloadNativeShoppingExperience() {
13
+ var _a;
14
+ return (_a = experiencePreload == null ? void 0 : experiencePreload()) != null ? _a : Promise.resolve();
15
+ }export{getNativeShoppingExperience,preloadNativeShoppingExperience,registerNativeShoppingExperience,registerShoppingExperiencePreload};//# sourceMappingURL=nativeShoppingRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeShoppingRegistry.js","sources":["../../../src/features/shopping/nativeShoppingRegistry.ts"],"sourcesContent":["/**\n * Seam between the app shell and this package for the FEDERATED shopping\n * experience. Same inversion as canvas / chat: the loader\n * (`import('shopping_native/Shop')`) lives in the app so rollup never sees\n * the bare specifier; the ShoppingNative screen reads it back here.\n */\nimport type { ComponentType } from 'react';\nimport type { ShoppingExperienceProps } from './ShoppingExperience';\n\nexport type ShoppingExperienceComponent = ComponentType<ShoppingExperienceProps>;\n\nlet experience: ShoppingExperienceComponent | null = null;\nlet experiencePreload: (() => Promise<void>) | null = null;\n\nexport function registerNativeShoppingExperience(component: ShoppingExperienceComponent): void {\n experience = component;\n}\n\nexport function getNativeShoppingExperience(): ShoppingExperienceComponent | null {\n return experience;\n}\n\nexport function registerShoppingExperiencePreload(fn: () => Promise<void>): void {\n experiencePreload = fn;\n}\n\nexport function preloadNativeShoppingExperience(): Promise<void> {\n return experiencePreload?.() ?? Promise.resolve();\n}\n"],"names":[],"mappings":"AASA,IAAI,UAAiD,GAAA,IAAA;AACrD,IAAI,iBAAkD,GAAA,IAAA;AAC/C,SAAS,iCAAiC,SAA8C,EAAA;AAC7F,EAAa,UAAA,GAAA,SAAA;AACf;AACO,SAAS,2BAAkE,GAAA;AAChF,EAAO,OAAA,UAAA;AACT;AACO,SAAS,kCAAkC,EAA+B,EAAA;AAC/E,EAAoB,iBAAA,GAAA,EAAA;AACtB;AACO,SAAS,+BAAiD,GAAA;AApBjE,EAAA,IAAA,EAAA;AAqBE,EAAO,OAAA,CAAA,EAAA,GAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,EAAA,KAAA,IAAA,GAAA,EAAA,GAAyB,QAAQ,OAAQ,EAAA;AAClD"}
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- import {Feature}from'@common-stack/client-react';import YantraMobileModule from'./module.js';export{default as Home}from'./screens/Home/HomeScreen.js';export{default as NewChat}from'./screens/NewChat/index.js';export{default as ChatHistory}from'./screens/ChatHistory/index.js';export{default as Apps}from'./screens/Apps/index.js';export{default as WebBuilder}from'./screens/WebBuilder/index.js';export{GatewayContextProvider,useGatewayContext}from'./contexts/GatewayContext.js';export{CdecliConnectionProvider,useCdecliConnection}from'./contexts/CdecliConnectionContext.js';export{BUILTIN_MOBILE_GATEWAYS,MAX_CONCURRENT_TASKS,STORAGE_KEYS}from'./config/constants.js';export{config}from'./config/env-config.js';export{useCdecliAutoConnect}from'./hooks/useCdecliAutoConnect.js';export{useObtainSystemToken}from'./hooks/useObtainSystemToken.js';export{appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript,mintSurfaceSystemToken,resolveSurfaceCatalogBackend}from'./hooks/mintSurfaceSystemToken.js';export{isInstanceNotFoundError,useGatewayConnection}from'./hooks/useGatewayConnection.js';export{usePrerequisiteIds}from'./hooks/usePrerequisiteIds.js';export{useWorkspaceProvisioner}from'./hooks/useWorkspaceProvisioner.js';export{useGatewayRegistry}from'./hooks/useGatewayRegistry.js';export{agentSessionManager}from'./services/agentSessionManager.js';export{ensureGatewayApiKeys,resetGatewayApiKeyBridge}from'./services/gatewayApiKeyBridge.js';export{GatewayClient}from'./services/gatewayClient.js';export{BRIDGE_PROTOCOL_VERSION,BRIDGE_READY_ACTION,DEFAULT_BRIDGE_TIMEOUT_MS,DEFAULT_CHUNK_SIZE,MessageType}from'./bridge/types.js';export{WebViewManager}from'./bridge/WebViewManager.js';export{NativeWebViewBridge}from'./bridge/NativeWebViewBridge.js';export{TypedBridge}from'./bridge/TypedBridge.js';export{CancellableRequest}from'./bridge/CancellableRequest.js';export{ChunkedMessageHandler}from'./bridge/ChunkedMessageHandler.js';export{BridgeDebugger}from'./bridge/BridgeDebugger.js';export{WEB_BRIDGE_BOOTSTRAP}from'./bridge/webBridgeBootstrap.js';export{AuthenticatedFetch}from'./bridge/AuthenticatedFetch.js';export{AuthBridgeHandler}from'./bridge/handlers/AuthBridgeHandler.js';export{NavigationBridgeHandler}from'./bridge/handlers/NavigationBridgeHandler.js';export{AnalyticsBridgeHandler}from'./bridge/handlers/AnalyticsBridgeHandler.js';export{getPackagerHost,resolveMobileWebUrl}from'./bridge/resolveMobileWebUrl.js';export{YANTRA_LOADER_SIZE_COMPACT,YANTRA_LOADER_SIZE_DEFAULT,YantraBrandLoader}from'./components/YantraBrandLoader.js';export{default as CustomDrawer}from'./components/CustomDrawer.js';export{isKeyboardControllerAvailable}from'./utils/keyboardController.js';export{getNativeCanvasExperience,getNativeCanvasViewer,preloadNativeCanvasExperience,registerCanvasExperiencePreload,registerNativeCanvasExperience,registerNativeCanvasViewer}from'./features/canvas/nativeViewerRegistry.js';export{getNativeCharactersExperience,registerNativeCharactersExperience}from'./features/characters/nativeCharactersRegistry.js';export{getNativeChatExperience,registerNativeChatExperience}from'./features/messaging/nativeChatRegistry.js';export{resolveSurfaceAuthGraphqlUrl}from'./hooks/resolveSurfaceAuthGraphqlUrl.js';var index = new Feature(YantraMobileModule);export{index as default};//# sourceMappingURL=index.js.map
1
+ import {Feature}from'@common-stack/client-react';import YantraMobileModule from'./module.js';export{default as Home}from'./screens/Home/HomeScreen.js';export{default as NewChat}from'./screens/NewChat/index.js';export{default as ChatHistory}from'./screens/ChatHistory/index.js';export{default as Apps}from'./screens/Apps/index.js';export{default as WebBuilder}from'./screens/WebBuilder/index.js';export{GatewayContextProvider,useGatewayContext}from'./contexts/GatewayContext.js';export{CdecliConnectionProvider,useCdecliConnection}from'./contexts/CdecliConnectionContext.js';export{BUILTIN_MOBILE_GATEWAYS,MAX_CONCURRENT_TASKS,STORAGE_KEYS}from'./config/constants.js';export{config}from'./config/env-config.js';export{useCdecliAutoConnect}from'./hooks/useCdecliAutoConnect.js';export{useObtainSystemToken}from'./hooks/useObtainSystemToken.js';export{appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript,mintSurfaceSystemToken,resolveSurfaceCatalogBackend}from'./hooks/mintSurfaceSystemToken.js';export{isInstanceNotFoundError,useGatewayConnection}from'./hooks/useGatewayConnection.js';export{usePrerequisiteIds}from'./hooks/usePrerequisiteIds.js';export{useWorkspaceProvisioner}from'./hooks/useWorkspaceProvisioner.js';export{useGatewayRegistry}from'./hooks/useGatewayRegistry.js';export{agentSessionManager}from'./services/agentSessionManager.js';export{ensureGatewayApiKeys,resetGatewayApiKeyBridge}from'./services/gatewayApiKeyBridge.js';export{GatewayClient}from'./services/gatewayClient.js';export{BRIDGE_PROTOCOL_VERSION,BRIDGE_READY_ACTION,DEFAULT_BRIDGE_TIMEOUT_MS,DEFAULT_CHUNK_SIZE,MessageType}from'./bridge/types.js';export{WebViewManager}from'./bridge/WebViewManager.js';export{NativeWebViewBridge}from'./bridge/NativeWebViewBridge.js';export{TypedBridge}from'./bridge/TypedBridge.js';export{CancellableRequest}from'./bridge/CancellableRequest.js';export{ChunkedMessageHandler}from'./bridge/ChunkedMessageHandler.js';export{BridgeDebugger}from'./bridge/BridgeDebugger.js';export{WEB_BRIDGE_BOOTSTRAP}from'./bridge/webBridgeBootstrap.js';export{AuthenticatedFetch}from'./bridge/AuthenticatedFetch.js';export{AuthBridgeHandler}from'./bridge/handlers/AuthBridgeHandler.js';export{NavigationBridgeHandler}from'./bridge/handlers/NavigationBridgeHandler.js';export{AnalyticsBridgeHandler}from'./bridge/handlers/AnalyticsBridgeHandler.js';export{getPackagerHost,resolveMobileWebUrl}from'./bridge/resolveMobileWebUrl.js';export{YANTRA_LOADER_SIZE_COMPACT,YANTRA_LOADER_SIZE_DEFAULT,YantraBrandLoader}from'./components/YantraBrandLoader.js';export{default as CustomDrawer}from'./components/CustomDrawer.js';export{isKeyboardControllerAvailable}from'./utils/keyboardController.js';export{getNativeCanvasExperience,getNativeCanvasViewer,preloadNativeCanvasExperience,registerCanvasExperiencePreload,registerNativeCanvasExperience,registerNativeCanvasViewer}from'./features/canvas/nativeViewerRegistry.js';export{getNativeCharactersExperience,registerNativeCharactersExperience}from'./features/characters/nativeCharactersRegistry.js';export{getNativeChatExperience,registerNativeChatExperience}from'./features/messaging/nativeChatRegistry.js';export{getNativeShoppingExperience,preloadNativeShoppingExperience,registerNativeShoppingExperience,registerShoppingExperiencePreload}from'./features/shopping/nativeShoppingRegistry.js';export{resolveSurfaceAuthGraphqlUrl}from'./hooks/resolveSurfaceAuthGraphqlUrl.js';var index = new Feature(YantraMobileModule);export{index as default};//# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { Feature } from '@common-stack/client-react';\nimport YantraMobileModule from './module';\n\nexport default new Feature(YantraMobileModule);\nexport * from './screens';\nexport { GatewayContextProvider, useGatewayContext } from './contexts/GatewayContext';\nexport { CdecliConnectionProvider, useCdecliConnection } from './contexts/CdecliConnectionContext';\nexport * from './config/constants';\nexport { config } from './config/env-config';\nexport { useCdecliAutoConnect } from './hooks/useCdecliAutoConnect';\nexport { useObtainSystemToken } from './hooks/useObtainSystemToken';\nexport {\n mintSurfaceSystemToken,\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n resolveSurfaceCatalogBackend,\n resolveSurfaceAuthGraphqlUrl,\n} from './hooks/mintSurfaceSystemToken';\nexport { useGatewayConnection, isInstanceNotFoundError } from './hooks/useGatewayConnection';\nexport { usePrerequisiteIds } from './hooks/usePrerequisiteIds';\nexport { useWorkspaceProvisioner } from './hooks/useWorkspaceProvisioner';\nexport { useGatewayRegistry } from './hooks/useGatewayRegistry';\nexport * from './services';\nexport * from './bridge';\nexport {\n YantraBrandLoader,\n YANTRA_LOADER_SIZE_DEFAULT,\n YANTRA_LOADER_SIZE_COMPACT,\n} from './components/YantraBrandLoader';\nexport { default as CustomDrawer } from './components/CustomDrawer';\nexport { isKeyboardControllerAvailable } from './utils/keyboardController';\n// The canvas viewer seam. Exported from the index on purpose: the app (the MF\n// host) registers the federated viewer here and the CanvasBoard screen reads\n// it. Reachability from this entry is what makes rollup emit the registry as a\n// real shared module - as an internal-only file, `registerNativeCanvasViewer`\n// is never called inside the package, so rollup tree-shakes it and constant-\n// folds the screen down to its fallback branch.\nexport {\n registerNativeCanvasViewer,\n getNativeCanvasViewer,\n registerNativeCanvasExperience,\n getNativeCanvasExperience,\n registerCanvasExperiencePreload,\n preloadNativeCanvasExperience,\n} from './features/canvas/nativeViewerRegistry';\n// Characters seam - same reachability contract as the canvas registry above.\nexport {\n registerNativeCharactersExperience,\n getNativeCharactersExperience,\n} from './features/characters/nativeCharactersRegistry';\n// Chat seam - same reachability contract as the two registries above.\nexport { registerNativeChatExperience, getNativeChatExperience } from './features/messaging/nativeChatRegistry';\nexport type {\n ChatHostServices,\n ChatViewer,\n FederatedChatProps,\n NativeChatExperienceProps,\n} from './features/messaging/chatHost';\n"],"names":[],"mappings":"orGAEA,YAAe,IAAI,QAAQ,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { Feature } from '@common-stack/client-react';\nimport YantraMobileModule from './module';\n\nexport default new Feature(YantraMobileModule);\nexport * from './screens';\nexport { GatewayContextProvider, useGatewayContext } from './contexts/GatewayContext';\nexport { CdecliConnectionProvider, useCdecliConnection } from './contexts/CdecliConnectionContext';\nexport * from './config/constants';\nexport { config } from './config/env-config';\nexport { useCdecliAutoConnect } from './hooks/useCdecliAutoConnect';\nexport { useObtainSystemToken } from './hooks/useObtainSystemToken';\nexport {\n mintSurfaceSystemToken,\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n resolveSurfaceCatalogBackend,\n resolveSurfaceAuthGraphqlUrl,\n} from './hooks/mintSurfaceSystemToken';\nexport { useGatewayConnection, isInstanceNotFoundError } from './hooks/useGatewayConnection';\nexport { usePrerequisiteIds } from './hooks/usePrerequisiteIds';\nexport { useWorkspaceProvisioner } from './hooks/useWorkspaceProvisioner';\nexport { useGatewayRegistry } from './hooks/useGatewayRegistry';\nexport * from './services';\nexport * from './bridge';\nexport {\n YantraBrandLoader,\n YANTRA_LOADER_SIZE_DEFAULT,\n YANTRA_LOADER_SIZE_COMPACT,\n} from './components/YantraBrandLoader';\nexport { default as CustomDrawer } from './components/CustomDrawer';\nexport { isKeyboardControllerAvailable } from './utils/keyboardController';\n// The canvas viewer seam. Exported from the index on purpose: the app (the MF\n// host) registers the federated viewer here and the CanvasBoard screen reads\n// it. Reachability from this entry is what makes rollup emit the registry as a\n// real shared module - as an internal-only file, `registerNativeCanvasViewer`\n// is never called inside the package, so rollup tree-shakes it and constant-\n// folds the screen down to its fallback branch.\nexport {\n registerNativeCanvasViewer,\n getNativeCanvasViewer,\n registerNativeCanvasExperience,\n getNativeCanvasExperience,\n registerCanvasExperiencePreload,\n preloadNativeCanvasExperience,\n} from './features/canvas/nativeViewerRegistry';\n// Characters seam - same reachability contract as the canvas registry above.\nexport {\n registerNativeCharactersExperience,\n getNativeCharactersExperience,\n} from './features/characters/nativeCharactersRegistry';\n// Chat seam - same reachability contract as the two registries above.\nexport { registerNativeChatExperience, getNativeChatExperience } from './features/messaging/nativeChatRegistry';\nexport {\n registerNativeShoppingExperience,\n getNativeShoppingExperience,\n registerShoppingExperiencePreload,\n preloadNativeShoppingExperience,\n} from './features/shopping/nativeShoppingRegistry';\nexport type { ShoppingExperienceProps } from './features/shopping/ShoppingExperience';\nexport type {\n ChatHostServices,\n ChatViewer,\n FederatedChatProps,\n NativeChatExperienceProps,\n} from './features/messaging/chatHost';\n"],"names":[],"mappings":"82GAEA,YAAe,IAAI,QAAQ,kBAAkB,CAAA"}
package/lib/module.js CHANGED
@@ -3,5 +3,11 @@ import {Feature}from'@common-stack/client-react';import {filteredRoutes}from'./c
3
3
  routeConfig: filteredRoutes,
4
4
  clientStateParams: {
5
5
  typePolicies
6
+ },
7
+ // Mirror billing/browser: namespace plan vs subscription cache ids so a
8
+ // CurrentSubscription{id:'basic'} cannot clobber AdminPlan{id:'basic'}.
9
+ dataIdFromObject: {
10
+ AdminPlan: (result) => `AdminPlan:${result.id}`,
11
+ CurrentSubscription: (result) => `CurrentSubscription:${result.id}`
6
12
  }
7
13
  });export{YantraMobileModule as default};//# sourceMappingURL=module.js.map
package/lib/module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sources":["../src/module.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { Feature } from '@common-stack/client-react';\nimport { filteredRoutes } from './compute';\nimport { typePolicies } from './graphql/typePolicies';\n\nexport default new Feature({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n routeConfig: filteredRoutes as any,\n clientStateParams: {\n typePolicies,\n },\n});\n"],"names":[],"mappings":"gJAIA,yBAAe,IAAI,OAAQ,CAAA;AAAA;AAAA,EAEzB,WAAa,EAAA,cAAA;AAAA,EACb,iBAAmB,EAAA;AAAA,IACjB;AAAA;AAEJ,CAAC,CAAA"}
1
+ {"version":3,"file":"module.js","sources":["../src/module.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { Feature } from '@common-stack/client-react';\nimport { filteredRoutes } from './compute';\nimport { typePolicies } from './graphql/typePolicies';\n\nexport default new Feature({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n routeConfig: filteredRoutes as any,\n clientStateParams: {\n typePolicies,\n },\n // Mirror billing/browser: namespace plan vs subscription cache ids so a\n // CurrentSubscription{id:'basic'} cannot clobber AdminPlan{id:'basic'}.\n dataIdFromObject: {\n AdminPlan: (result: { id: string }) => `AdminPlan:${result.id}`,\n CurrentSubscription: (result: { id: string }) => `CurrentSubscription:${result.id}`,\n },\n});\n"],"names":[],"mappings":"gJAIA,yBAAe,IAAI,OAAQ,CAAA;AAAA;AAAA,EAEzB,WAAa,EAAA,cAAA;AAAA,EACb,iBAAmB,EAAA;AAAA,IACjB;AAAA,GACF;AAAA;AAAA;AAAA,EAGA,gBAAkB,EAAA;AAAA,IAChB,SAAW,EAAA,CAAC,MAEN,KAAA,CAAA,UAAA,EAAa,OAAO,EAAE,CAAA,CAAA;AAAA,IAC5B,mBAAqB,EAAA,CAAC,MAEhB,KAAA,CAAA,oBAAA,EAAuB,OAAO,EAAE,CAAA;AAAA;AAE1C,CAAC,CAAA"}
package/lib/routes.json CHANGED
@@ -417,5 +417,57 @@
417
417
  "componentPath": "@adminide-stack/yantra-mobile/lib/screens/ChatNative/index.js",
418
418
  "hasComponent": true
419
419
  }
420
+ },
421
+ {
422
+ "/:orgName/c/shopping-native": {
423
+ "key": "shopping-native",
424
+ "path": "/:orgName/c/shopping-native",
425
+ "name": "ShoppingNative",
426
+ "exact": true,
427
+ "priority": 4,
428
+ "hideInMenu": true,
429
+ "auth": true,
430
+ "menu_position": "side",
431
+ "importPaths": {
432
+ "navigationHeader": "@adminide-stack/yantra-mobile/lib/components/NavigationHeader/NavigationHeader.js"
433
+ },
434
+ "customHeader": {
435
+ "name": "NavigationHeader",
436
+ "component": "$.importPaths.navigationHeader",
437
+ "props": {
438
+ "showTitle": true,
439
+ "showToggle": false,
440
+ "showFilter": false,
441
+ "isSearchBack": false,
442
+ "showBack": true,
443
+ "showGateway": false,
444
+ "showHistory": false,
445
+ "showNewChat": false
446
+ }
447
+ },
448
+ "props": {
449
+ "initialParams": {
450
+ "orgName": null
451
+ },
452
+ "options": {
453
+ "title": "Shop",
454
+ "headerTintColor": "black",
455
+ "headerTitleStyle": {
456
+ "fontWeight": "bold"
457
+ },
458
+ "drawerItemStyle": {
459
+ "display": "none"
460
+ },
461
+ "headerTitleAlign": "left",
462
+ "gestureEnabled": false,
463
+ "swipeEnabled": false,
464
+ "animation": "fade",
465
+ "animationTypeForReplace": "pop",
466
+ "keyboardHandlingEnabled": false
467
+ }
468
+ },
469
+ "componentPath": "@adminide-stack/yantra-mobile/lib/screens/ShoppingNative/index.js",
470
+ "hasComponent": true
471
+ }
420
472
  }
421
473
  ]
@@ -16,7 +16,7 @@ import {jsx,jsxs}from'react/jsx-runtime';import {useColorScheme,StyleSheet,View,
16
16
  /* @__PURE__ */ jsx(Text, { style: [styles.detail, isDark && styles.textMuted], children: "This build does not carry the federation host runtime." })
17
17
  ] }) });
18
18
  }
19
- return /* @__PURE__ */ jsx(SafeAreaView, { style: [styles.fill, isDark && styles.fillDark], edges: ["left", "right", "bottom"], children: /* @__PURE__ */ jsx(
19
+ return /* @__PURE__ */ jsx(SafeAreaView, { style: [styles.fill, isDark && styles.fillDark], edges: ["left", "right"], children: /* @__PURE__ */ jsx(
20
20
  Experience,
21
21
  {
22
22
  token,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/screens/CanvasBoard/index.tsx"],"sourcesContent":["/**\n * Native canvas board screen.\n *\n * The screen is deliberately thin. Opening it triggers the federated fetch of\n * the canvas remote, and the remote owns everything after that: reading the\n * user's boards from the SurfaceChannel index, choosing one, and rendering it.\n * That split is what lets a canvas change ship with `cdecli surfaces deploy\n * canvas` instead of an App Store release.\n *\n * The host contributes the two things the remote cannot know: a token the index\n * accepts, and the index endpoint for this environment.\n */\nimport React from 'react';\nimport { StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useRoute } from '@react-navigation/native';\nimport { getNativeCanvasExperience } from '../../features/canvas/nativeViewerRegistry';\nimport { useCanvasSession } from '../../features/canvas/useCanvasSession';\n\nexport interface CanvasBoardRouteParams {\n /** Open a specific board from the index; otherwise the newest one opens. */\n channelId?: string;\n}\n\nexport default function CanvasBoardScreen() {\n const route = useRoute();\n const isDark = useColorScheme() === 'dark';\n const Experience = getNativeCanvasExperience();\n const { token, indexUrl, error, ready } = useCanvasSession();\n\n const params = route.params as CanvasBoardRouteParams | undefined;\n const channelId = typeof params?.channelId === 'string' ? params.channelId : undefined;\n\n if (!Experience) {\n // A build without the federation host (or before App registered it).\n // Say so instead of rendering a blank screen.\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]}>\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>Native canvas unavailable</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>\n This build does not carry the federation host runtime.\n </Text>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]} edges={['left', 'right', 'bottom']}>\n <Experience\n token={token}\n indexUrl={indexUrl}\n channelId={channelId}\n // Until the mint settles, `sessionError` stays null so the remote\n // shows its loading state rather than flashing a failure.\n sessionError={ready ? error : null}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1, backgroundColor: '#f8fafc' },\n fillDark: { backgroundColor: '#0f172a' },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 15, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n textLight: { color: '#f8fafc' },\n textMuted: { color: '#94a3b8' },\n});\n"],"names":[],"mappings":"iXAsBA,SAAwB,iBAAoB,GAAA;AAC1C,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAM,MAAA,MAAA,GAAS,gBAAqB,KAAA,MAAA;AACpC,EAAA,MAAM,aAAa,yBAA0B,EAAA;AAC7C,EAAM,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,MACE,gBAAiB,EAAA;AACrB,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,EAAA,MAAM,YAAY,QAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,SAAc,CAAA,KAAA,QAAA,GAAW,OAAO,SAAY,GAAA,MAAA;AAC7E,EAAA,IAAI,CAAC,UAAY,EAAA;AAGf,IAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,CACvD,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,MAChB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,OAAO,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAAyB,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAClF,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAQ,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAE1D,EAAA,wDAAA,EAAA;AAAA,KAAA,EACJ,CACJ,EAAA,CAAA;AAAA;AAEV,EAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,GAAG,KAAO,EAAA,CAAC,MAAQ,EAAA,OAAA,EAAS,QAAQ,CAC7F,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAAW,KAAA;AAAA,MAAc,QAAA;AAAA,MAAoB,SAAA;AAAA,MAGtD,YAAA,EAAc,QAAQ,KAAQ,GAAA;AAAA;AAAA,GAC1B,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,QAAU,EAAA;AAAA,IACR,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA;AAEX,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/screens/CanvasBoard/index.tsx"],"sourcesContent":["/**\n * Native canvas board screen.\n *\n * The screen is deliberately thin. Opening it triggers the federated fetch of\n * the canvas remote, and the remote owns everything after that: reading the\n * user's boards from the SurfaceChannel index, choosing one, and rendering it.\n * That split is what lets a canvas change ship with `cdecli surfaces deploy\n * canvas` instead of an App Store release.\n *\n * The host contributes the two things the remote cannot know: a token the index\n * accepts, and the index endpoint for this environment.\n */\nimport React from 'react';\nimport { StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useRoute } from '@react-navigation/native';\nimport { getNativeCanvasExperience } from '../../features/canvas/nativeViewerRegistry';\nimport { useCanvasSession } from '../../features/canvas/useCanvasSession';\n\nexport interface CanvasBoardRouteParams {\n /** Open a specific board from the index; otherwise the newest one opens. */\n channelId?: string;\n}\n\nexport default function CanvasBoardScreen() {\n const route = useRoute();\n const isDark = useColorScheme() === 'dark';\n const Experience = getNativeCanvasExperience();\n const { token, indexUrl, error, ready } = useCanvasSession();\n\n const params = route.params as CanvasBoardRouteParams | undefined;\n const channelId = typeof params?.channelId === 'string' ? params.channelId : undefined;\n\n if (!Experience) {\n // A build without the federation host (or before App registered it).\n // Say so instead of rendering a blank screen.\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]}>\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>Native canvas unavailable</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>\n This build does not carry the federation host runtime.\n </Text>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]} edges={['left', 'right']}>\n <Experience\n token={token}\n indexUrl={indexUrl}\n channelId={channelId}\n // Until the mint settles, `sessionError` stays null so the remote\n // shows its loading state rather than flashing a failure.\n sessionError={ready ? error : null}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1, backgroundColor: '#f8fafc' },\n fillDark: { backgroundColor: '#0f172a' },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 15, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n textLight: { color: '#f8fafc' },\n textMuted: { color: '#94a3b8' },\n});\n"],"names":[],"mappings":"iXAsBA,SAAwB,iBAAoB,GAAA;AAC1C,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAM,MAAA,MAAA,GAAS,gBAAqB,KAAA,MAAA;AACpC,EAAA,MAAM,aAAa,yBAA0B,EAAA;AAC7C,EAAM,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,MACE,gBAAiB,EAAA;AACrB,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,EAAA,MAAM,YAAY,QAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,SAAc,CAAA,KAAA,QAAA,GAAW,OAAO,SAAY,GAAA,MAAA;AAC7E,EAAA,IAAI,CAAC,UAAY,EAAA;AAGf,IAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,CACvD,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,MAChB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,OAAO,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAAyB,EAAA,2BAAA,EAAA,CAAA;AAAA,sBAClF,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAQ,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAE1D,EAAA,wDAAA,EAAA;AAAA,KAAA,EACJ,CACJ,EAAA,CAAA;AAAA;AAEV,EAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,CAAG,EAAA,KAAA,EAAO,CAAC,MAAA,EAAQ,OAAO,CACnF,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MAAW,KAAA;AAAA,MAAc,QAAA;AAAA,MAAoB,SAAA;AAAA,MAGtD,YAAA,EAAc,QAAQ,KAAQ,GAAA;AAAA;AAAA,GAC1B,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,QAAU,EAAA;AAAA,IACR,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA;AAEX,CAAC,CAAA"}
@@ -0,0 +1,49 @@
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useColorScheme,StyleSheet,View,Text}from'react-native';import {SafeAreaView}from'react-native-safe-area-context';import {getNativeShoppingExperience}from'../../features/shopping/nativeShoppingRegistry.js';import {useCanvasSession}from'../../features/canvas/useCanvasSession.js';function ShoppingNativeScreen() {
2
+ const isDark = useColorScheme() === "dark";
3
+ const Experience = getNativeShoppingExperience();
4
+ const {
5
+ token,
6
+ indexUrl,
7
+ error,
8
+ ready
9
+ } = useCanvasSession();
10
+ if (!Experience) {
11
+ return /* @__PURE__ */ jsx(SafeAreaView, { style: [styles.fill, isDark && styles.fillDark], children: /* @__PURE__ */ jsxs(View, { style: styles.center, children: [
12
+ /* @__PURE__ */ jsx(Text, { style: [styles.title, isDark && styles.textLight], children: "Native shop unavailable" }),
13
+ /* @__PURE__ */ jsx(Text, { style: [styles.detail, isDark && styles.textMuted], children: "This build does not carry the federation host runtime." })
14
+ ] }) });
15
+ }
16
+ return /* @__PURE__ */ jsx(SafeAreaView, { style: [styles.fill, isDark && styles.fillDark], edges: ["left", "right"], children: /* @__PURE__ */ jsx(Experience, { token, indexUrl, sessionError: ready ? error : null }) });
17
+ }
18
+ const styles = StyleSheet.create({
19
+ fill: {
20
+ flex: 1,
21
+ backgroundColor: "#f8fafc"
22
+ },
23
+ fillDark: {
24
+ backgroundColor: "#0f172a"
25
+ },
26
+ center: {
27
+ flex: 1,
28
+ alignItems: "center",
29
+ justifyContent: "center",
30
+ padding: 24
31
+ },
32
+ title: {
33
+ fontSize: 15,
34
+ fontWeight: "600",
35
+ color: "#0f172a",
36
+ marginBottom: 6
37
+ },
38
+ detail: {
39
+ fontSize: 13,
40
+ color: "#64748b",
41
+ textAlign: "center"
42
+ },
43
+ textLight: {
44
+ color: "#f8fafc"
45
+ },
46
+ textMuted: {
47
+ color: "#94a3b8"
48
+ }
49
+ });export{ShoppingNativeScreen as default};//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/screens/ShoppingNative/index.tsx"],"sourcesContent":["/**\n * Native Shop screen — host route for the federated shopping storefront.\n *\n * Same delivery contract as CanvasBoard: the App registers the federated\n * component; this screen only reads the registry and hands over a token the\n * shopping connector accepts plus the surface-index endpoint for this\n * environment. Opening it fetches `shopping_native/Shop` from the shopping\n * native surface; that code is not in the app binary.\n */\nimport React from 'react';\nimport { StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { getNativeShoppingExperience } from '../../features/shopping/nativeShoppingRegistry';\nimport { useCanvasSession } from '../../features/canvas/useCanvasSession';\n\nexport default function ShoppingNativeScreen() {\n const isDark = useColorScheme() === 'dark';\n const Experience = getNativeShoppingExperience();\n const { token, indexUrl, error, ready } = useCanvasSession();\n\n if (!Experience) {\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]}>\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>Native shop unavailable</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>\n This build does not carry the federation host runtime.\n </Text>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]} edges={['left', 'right']}>\n <Experience token={token} indexUrl={indexUrl} sessionError={ready ? error : null} />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1, backgroundColor: '#f8fafc' },\n fillDark: { backgroundColor: '#0f172a' },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 15, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n textLight: { color: '#f8fafc' },\n textMuted: { color: '#94a3b8' },\n});\n"],"names":[],"mappings":"uUAcA,SAAwB,oBAAuB,GAAA;AAC7C,EAAM,MAAA,MAAA,GAAS,gBAAqB,KAAA,MAAA;AACpC,EAAA,MAAM,aAAa,2BAA4B,EAAA;AAC/C,EAAM,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,MACE,gBAAiB,EAAA;AACrB,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,CACvD,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,MAChB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,OAAO,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAAuB,EAAA,yBAAA,EAAA,CAAA;AAAA,sBAChF,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAQ,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAE1D,EAAA,wDAAA,EAAA;AAAA,KAAA,EACJ,CACJ,EAAA,CAAA;AAAA;AAEV,EAAO,uBAAA,GAAA,CAAC,gBAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,CAAG,EAAA,KAAA,EAAO,CAAC,MAAQ,EAAA,OAAO,CACnF,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAc,UAAoB,YAAc,EAAA,KAAA,GAAQ,KAAQ,GAAA,IAAA,EAAM,CACtF,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,QAAU,EAAA;AAAA,IACR,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA;AAEX,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminide-stack/yantra-mobile",
3
- "version": "12.0.53-alpha.8",
3
+ "version": "12.0.54-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": "12.0.53-alpha.7"
28
+ "common": "12.0.54-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.53-alpha.7",
44
+ "common": "12.0.53-alpha.20",
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": "87ae8f02d2ba0b04c7a882636041bea9d22b2888"
60
+ "gitHead": "490ee87e47f736e88cbb1f10178f68f500b67e19"
61
61
  }