@adminide-stack/yantra-mobile 12.0.38 → 12.0.39-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,156 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {useCallback}from'react';import {useWindowDimensions,Pressable,StyleSheet,View,Image,Text,ActivityIndicator,ScrollView}from'react-native';import {useMarketplaceTemplateCards}from'../../../hooks/useMarketplaceTemplateCards.js';function BuildTemplatesSection({
2
+ enabled,
3
+ group,
4
+ orgName,
5
+ isDark,
6
+ primaryTextColor,
7
+ secondaryTextColor,
8
+ selectedTemplateId = null,
9
+ onUseTemplate
10
+ }) {
11
+ const {
12
+ width
13
+ } = useWindowDimensions();
14
+ const selectedGroup = (group != null ? group : "").trim();
15
+ const {
16
+ cards,
17
+ loading,
18
+ error
19
+ } = useMarketplaceTemplateCards({
20
+ group: selectedGroup,
21
+ orgName,
22
+ enabled: enabled && Boolean(selectedGroup)
23
+ });
24
+ const cardWidth = Math.min(168, Math.max(140, (width - 56) / 2));
25
+ const renderCard = useCallback((item) => {
26
+ var _a;
27
+ const cover = (_a = item.coverImageUrl) == null ? void 0 : _a.trim();
28
+ const selected = selectedTemplateId === item.id;
29
+ return /* @__PURE__ */ jsxs(Pressable, { onPress: () => onUseTemplate(item), style: [styles.card, {
30
+ width: cardWidth,
31
+ backgroundColor: isDark ? "#1e293b" : "#ffffff",
32
+ borderColor: selected ? isDark ? "#818cf8" : "#4338ca" : isDark ? "rgba(148,163,184,0.28)" : "rgba(15,23,42,0.08)",
33
+ borderWidth: selected ? 2 : 1
34
+ }], accessibilityRole: "button", accessibilityState: {
35
+ selected
36
+ }, accessibilityLabel: `${selected ? "Selected" : "Select"} template ${item.title}`, children: [
37
+ /* @__PURE__ */ jsx(View, { style: [styles.cover, {
38
+ backgroundColor: isDark ? "#0f172a" : "#f1f5f9"
39
+ }], children: cover ? /* @__PURE__ */ jsx(Image, { source: {
40
+ uri: cover
41
+ }, style: styles.coverImage, resizeMode: "cover" }) : /* @__PURE__ */ jsx(Text, { style: [styles.coverFallback, {
42
+ color: secondaryTextColor
43
+ }], children: "Yantra" }) }),
44
+ /* @__PURE__ */ jsxs(View, { style: styles.cardBody, children: [
45
+ /* @__PURE__ */ jsx(Text, { style: [styles.cardTitle, {
46
+ color: primaryTextColor
47
+ }], numberOfLines: 2, children: item.title }),
48
+ item.snapshotId ? /* @__PURE__ */ jsx(Text, { style: [styles.cardMeta, {
49
+ color: secondaryTextColor
50
+ }], numberOfLines: 1, children: "Remix ready" }) : null,
51
+ /* @__PURE__ */ jsx(Text, { style: [styles.useLabel, {
52
+ color: isDark ? "#a5b4fc" : "#4338ca"
53
+ }], children: selected ? "Selected" : "Select" })
54
+ ] })
55
+ ] }, item.id);
56
+ }, [cardWidth, isDark, onUseTemplate, primaryTextColor, secondaryTextColor, selectedTemplateId]);
57
+ if (!enabled || !selectedGroup) {
58
+ return null;
59
+ }
60
+ if (loading && cards.length === 0) {
61
+ return /* @__PURE__ */ jsxs(View, { style: styles.statusWrap, children: [
62
+ /* @__PURE__ */ jsx(ActivityIndicator, { color: isDark ? "#a5b4fc" : "#4338ca" }),
63
+ /* @__PURE__ */ jsx(Text, { style: [styles.statusText, {
64
+ color: secondaryTextColor
65
+ }], children: "Loading templates\u2026" })
66
+ ] });
67
+ }
68
+ if (error && cards.length === 0) {
69
+ return /* @__PURE__ */ jsx(View, { style: styles.statusWrap, children: /* @__PURE__ */ jsx(Text, { style: [styles.statusText, {
70
+ color: secondaryTextColor
71
+ }], children: "Couldn\u2019t load templates. Try another group." }) });
72
+ }
73
+ if (cards.length === 0) {
74
+ return /* @__PURE__ */ jsx(View, { style: styles.statusWrap, children: /* @__PURE__ */ jsx(Text, { style: [styles.statusText, {
75
+ color: secondaryTextColor
76
+ }], children: "No remixable templates in this group yet." }) });
77
+ }
78
+ return /* @__PURE__ */ jsxs(View, { style: styles.section, children: [
79
+ /* @__PURE__ */ jsx(Text, { style: [styles.sectionTitle, {
80
+ color: primaryTextColor
81
+ }], children: "Yantra templates" }),
82
+ /* @__PURE__ */ jsx(Text, { style: [styles.sectionHint, {
83
+ color: secondaryTextColor
84
+ }], children: "Select a starter, type your prompt, then send \u2014 message + snapshot go to Web Builder." }),
85
+ /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.listContent, children: cards.map(renderCard) })
86
+ ] });
87
+ }
88
+ const styles = StyleSheet.create({
89
+ section: {
90
+ width: "100%",
91
+ marginTop: 20,
92
+ paddingBottom: 8
93
+ },
94
+ sectionTitle: {
95
+ fontSize: 16,
96
+ fontWeight: "700",
97
+ marginBottom: 4,
98
+ paddingHorizontal: 4
99
+ },
100
+ sectionHint: {
101
+ fontSize: 12,
102
+ lineHeight: 18,
103
+ marginBottom: 12,
104
+ paddingHorizontal: 4
105
+ },
106
+ listContent: {
107
+ paddingHorizontal: 2,
108
+ gap: 12
109
+ },
110
+ card: {
111
+ borderRadius: 14,
112
+ borderWidth: 1,
113
+ overflow: "hidden"
114
+ },
115
+ cover: {
116
+ height: 96,
117
+ alignItems: "center",
118
+ justifyContent: "center"
119
+ },
120
+ coverImage: {
121
+ width: "100%",
122
+ height: "100%"
123
+ },
124
+ coverFallback: {
125
+ fontSize: 13,
126
+ fontWeight: "600"
127
+ },
128
+ cardBody: {
129
+ paddingHorizontal: 10,
130
+ paddingVertical: 10,
131
+ gap: 4
132
+ },
133
+ cardTitle: {
134
+ fontSize: 13,
135
+ fontWeight: "600",
136
+ lineHeight: 18
137
+ },
138
+ cardMeta: {
139
+ fontSize: 11
140
+ },
141
+ useLabel: {
142
+ marginTop: 2,
143
+ fontSize: 12,
144
+ fontWeight: "600"
145
+ },
146
+ statusWrap: {
147
+ marginTop: 20,
148
+ alignItems: "center",
149
+ gap: 8,
150
+ paddingHorizontal: 16
151
+ },
152
+ statusText: {
153
+ fontSize: 13,
154
+ textAlign: "center"
155
+ }
156
+ });export{BuildTemplatesSection,BuildTemplatesSection as default};//# sourceMappingURL=BuildTemplatesSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuildTemplatesSection.js","sources":["../../../../src/screens/Home/components/BuildTemplatesSection.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport {\n ActivityIndicator,\n Image,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n useWindowDimensions,\n} from 'react-native';\nimport type { BuildTemplateCard } from '../../../features/templates/buildTemplateCards';\nimport { useMarketplaceTemplateCards } from '../../../hooks/useMarketplaceTemplateCards';\n\nexport type BuildTemplatesSectionProps = {\n enabled: boolean;\n /** Selected marketplace group key (`codeAssistant`, …). */\n group: string | null;\n orgName?: string | null;\n isDark: boolean;\n primaryTextColor: string;\n secondaryTextColor: string;\n /** Armed card id — submit will send input message + this card's snapshotId. */\n selectedTemplateId?: string | null;\n onUseTemplate: (card: BuildTemplateCard) => void;\n};\n\n/**\n * Yantra template cards for Build mode (web `DefaultFormTemplatesSection` parity).\n * Tap arms the card (`snapshotId`); composer submit sends message + snapshotId.\n */\nexport function BuildTemplatesSection({\n enabled,\n group,\n orgName,\n isDark,\n primaryTextColor,\n secondaryTextColor,\n selectedTemplateId = null,\n onUseTemplate,\n}: BuildTemplatesSectionProps) {\n const { width } = useWindowDimensions();\n const selectedGroup = (group ?? '').trim();\n const { cards, loading, error } = useMarketplaceTemplateCards({\n group: selectedGroup,\n orgName,\n enabled: enabled && Boolean(selectedGroup),\n });\n\n const cardWidth = Math.min(168, Math.max(140, (width - 56) / 2));\n\n const renderCard = useCallback(\n (item: BuildTemplateCard) => {\n const cover = item.coverImageUrl?.trim();\n const selected = selectedTemplateId === item.id;\n return (\n <Pressable\n key={item.id}\n onPress={() => onUseTemplate(item)}\n style={[\n styles.card,\n {\n width: cardWidth,\n backgroundColor: isDark ? '#1e293b' : '#ffffff',\n borderColor: selected\n ? isDark\n ? '#818cf8'\n : '#4338ca'\n : isDark\n ? 'rgba(148,163,184,0.28)'\n : 'rgba(15,23,42,0.08)',\n borderWidth: selected ? 2 : 1,\n },\n ]}\n accessibilityRole=\"button\"\n accessibilityState={{ selected }}\n accessibilityLabel={`${selected ? 'Selected' : 'Select'} template ${item.title}`}\n >\n <View style={[styles.cover, { backgroundColor: isDark ? '#0f172a' : '#f1f5f9' }]}>\n {cover ? (\n <Image source={{ uri: cover }} style={styles.coverImage} resizeMode=\"cover\" />\n ) : (\n <Text style={[styles.coverFallback, { color: secondaryTextColor }]}>Yantra</Text>\n )}\n </View>\n <View style={styles.cardBody}>\n <Text style={[styles.cardTitle, { color: primaryTextColor }]} numberOfLines={2}>\n {item.title}\n </Text>\n {item.snapshotId ? (\n <Text style={[styles.cardMeta, { color: secondaryTextColor }]} numberOfLines={1}>\n Remix ready\n </Text>\n ) : null}\n <Text style={[styles.useLabel, { color: isDark ? '#a5b4fc' : '#4338ca' }]}>\n {selected ? 'Selected' : 'Select'}\n </Text>\n </View>\n </Pressable>\n );\n },\n [cardWidth, isDark, onUseTemplate, primaryTextColor, secondaryTextColor, selectedTemplateId],\n );\n\n if (!enabled || !selectedGroup) {\n return null;\n }\n\n if (loading && cards.length === 0) {\n return (\n <View style={styles.statusWrap}>\n <ActivityIndicator color={isDark ? '#a5b4fc' : '#4338ca'} />\n <Text style={[styles.statusText, { color: secondaryTextColor }]}>Loading templates…</Text>\n </View>\n );\n }\n\n if (error && cards.length === 0) {\n return (\n <View style={styles.statusWrap}>\n <Text style={[styles.statusText, { color: secondaryTextColor }]}>\n Couldn’t load templates. Try another group.\n </Text>\n </View>\n );\n }\n\n if (cards.length === 0) {\n return (\n <View style={styles.statusWrap}>\n <Text style={[styles.statusText, { color: secondaryTextColor }]}>\n No remixable templates in this group yet.\n </Text>\n </View>\n );\n }\n\n return (\n <View style={styles.section}>\n <Text style={[styles.sectionTitle, { color: primaryTextColor }]}>Yantra templates</Text>\n <Text style={[styles.sectionHint, { color: secondaryTextColor }]}>\n Select a starter, type your prompt, then send — message + snapshot go to Web Builder.\n </Text>\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.listContent}>\n {cards.map(renderCard)}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n section: {\n width: '100%',\n marginTop: 20,\n paddingBottom: 8,\n },\n sectionTitle: {\n fontSize: 16,\n fontWeight: '700',\n marginBottom: 4,\n paddingHorizontal: 4,\n },\n sectionHint: {\n fontSize: 12,\n lineHeight: 18,\n marginBottom: 12,\n paddingHorizontal: 4,\n },\n listContent: {\n paddingHorizontal: 2,\n gap: 12,\n },\n card: {\n borderRadius: 14,\n borderWidth: 1,\n overflow: 'hidden',\n },\n cover: {\n height: 96,\n alignItems: 'center',\n justifyContent: 'center',\n },\n coverImage: {\n width: '100%',\n height: '100%',\n },\n coverFallback: {\n fontSize: 13,\n fontWeight: '600',\n },\n cardBody: {\n paddingHorizontal: 10,\n paddingVertical: 10,\n gap: 4,\n },\n cardTitle: {\n fontSize: 13,\n fontWeight: '600',\n lineHeight: 18,\n },\n cardMeta: {\n fontSize: 11,\n },\n useLabel: {\n marginTop: 2,\n fontSize: 12,\n fontWeight: '600',\n },\n statusWrap: {\n marginTop: 20,\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 16,\n },\n statusText: {\n fontSize: 13,\n textAlign: 'center',\n },\n});\n\nexport default BuildTemplatesSection;\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React from'react';import {BackHandler}from'react-native';import {useFocusEffect}from'@react-navigation/native';function WebViewWithNavigation({
1
+ import React from'react';import {BackHandler}from'react-native';import {useFocusEffect}from'@react-navigation/native';import {tryWebBuilderBack}from'./webbuilderBackHandler.js';function WebViewWithNavigation({
2
2
  webViewRef,
3
3
  canGoBack,
4
4
  onGoBack
@@ -6,6 +6,9 @@ import React from'react';import {BackHandler}from'react-native';import {useFocus
6
6
  useFocusEffect(React.useCallback(() => {
7
7
  const onBackPress = () => {
8
8
  var _a;
9
+ if (tryWebBuilderBack()) {
10
+ return true;
11
+ }
9
12
  if (canGoBack) {
10
13
  (_a = webViewRef.current) == null ? void 0 : _a.goBack();
11
14
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"WebViewWithNavigation.js","sources":["../../../src/screens/WebBuilder/WebViewWithNavigation.tsx"],"sourcesContent":["import React from 'react';\nimport { BackHandler } from 'react-native';\nimport { useFocusEffect } from '@react-navigation/native';\nimport type { WebView } from 'react-native-webview';\n\n/**\n * Hardware back: WebView history first, then native navigation.\n */\nexport function WebViewWithNavigation({\n webViewRef,\n canGoBack,\n onGoBack,\n}: {\n webViewRef: React.RefObject<WebView | null>;\n canGoBack: boolean;\n onGoBack: () => void;\n}): null {\n useFocusEffect(\n React.useCallback(() => {\n const onBackPress = () => {\n if (canGoBack) {\n webViewRef.current?.goBack();\n return true;\n }\n onGoBack();\n return true;\n };\n\n const subscription = BackHandler.addEventListener('hardwareBackPress', onBackPress);\n return () => subscription.remove();\n }, [canGoBack, onGoBack, webViewRef]),\n );\n\n return null;\n}\n"],"names":[],"mappings":"sHAQO,SAAS,qBAAsB,CAAA;AAAA,EACpC,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAIS,EAAA;AACP,EAAe,cAAA,CAAA,KAAA,CAAM,YAAY,MAAM;AACrC,IAAA,MAAM,cAAc,MAAM;AAlB9B,MAAA,IAAA,EAAA;AAmBM,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,CAAA,EAAA,GAAA,UAAA,CAAW,YAAX,IAAoB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,EAAA;AACpB,QAAO,OAAA,IAAA;AAAA;AAET,MAAS,QAAA,EAAA;AACT,MAAO,OAAA,IAAA;AAAA,KACT;AACA,IAAA,MAAM,YAAe,GAAA,WAAA,CAAY,gBAAiB,CAAA,mBAAA,EAAqB,WAAW,CAAA;AAClF,IAAO,OAAA,MAAM,aAAa,MAAO,EAAA;AAAA,KAChC,CAAC,SAAA,EAAW,QAAU,EAAA,UAAU,CAAC,CAAC,CAAA;AACrC,EAAO,OAAA,IAAA;AACT"}
1
+ {"version":3,"file":"WebViewWithNavigation.js","sources":["../../../src/screens/WebBuilder/WebViewWithNavigation.tsx"],"sourcesContent":["import React from 'react';\nimport { BackHandler } from 'react-native';\nimport { useFocusEffect } from '@react-navigation/native';\nimport type { WebView } from 'react-native-webview';\nimport { tryWebBuilderBack } from './webbuilderBackHandler';\n\n/**\n * Hardware back: WebView history / in-app preview first, then native navigation.\n */\nexport function WebViewWithNavigation({\n webViewRef,\n canGoBack,\n onGoBack,\n}: {\n webViewRef: React.RefObject<WebView | null>;\n canGoBack: boolean;\n onGoBack: () => void;\n}): null {\n useFocusEffect(\n React.useCallback(() => {\n const onBackPress = () => {\n if (tryWebBuilderBack()) {\n return true;\n }\n if (canGoBack) {\n webViewRef.current?.goBack();\n return true;\n }\n onGoBack();\n return true;\n };\n\n const subscription = BackHandler.addEventListener('hardwareBackPress', onBackPress);\n return () => subscription.remove();\n }, [canGoBack, onGoBack, webViewRef]),\n );\n\n return null;\n}\n"],"names":[],"mappings":"iLASO,SAAS,qBAAsB,CAAA;AAAA,EACpC,UAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAIS,EAAA;AACP,EAAe,cAAA,CAAA,KAAA,CAAM,YAAY,MAAM;AACrC,IAAA,MAAM,cAAc,MAAM;AAnB9B,MAAA,IAAA,EAAA;AAoBM,MAAA,IAAI,mBAAqB,EAAA;AACvB,QAAO,OAAA,IAAA;AAAA;AAET,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,CAAA,EAAA,GAAA,UAAA,CAAW,YAAX,IAAoB,GAAA,MAAA,GAAA,EAAA,CAAA,MAAA,EAAA;AACpB,QAAO,OAAA,IAAA;AAAA;AAET,MAAS,QAAA,EAAA;AACT,MAAO,OAAA,IAAA;AAAA,KACT;AACA,IAAA,MAAM,YAAe,GAAA,WAAA,CAAY,gBAAiB,CAAA,mBAAA,EAAqB,WAAW,CAAA;AAClF,IAAO,OAAA,MAAM,aAAa,MAAO,EAAA;AAAA,KAChC,CAAC,SAAA,EAAW,QAAU,EAAA,UAAU,CAAC,CAAC,CAAA;AACrC,EAAO,OAAA,IAAA;AACT"}
@@ -1,4 +1,4 @@
1
- import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useState,useMemo,useEffect,useCallback}from'react';import {useColorScheme,AppState,StyleSheet,View,ActivityIndicator,Text,Pressable,Platform}from'react-native';import {SafeAreaView}from'react-native-safe-area-context';import {WebView}from'react-native-webview';import {useNavigation,useRoute}from'@react-navigation/native';import {config}from'../../config/env-config.js';import {mobileTokens}from'../../theme/mobileTokens.js';import {WebViewManager}from'../../bridge/WebViewManager.js';import {NativeWebViewBridge}from'../../bridge/NativeWebViewBridge.js';import {WEB_BRIDGE_BOOTSTRAP}from'../../bridge/webBridgeBootstrap.js';import {AuthBridgeHandler}from'../../bridge/handlers/AuthBridgeHandler.js';import {NavigationBridgeHandler}from'../../bridge/handlers/NavigationBridgeHandler.js';import {AnalyticsBridgeHandler}from'../../bridge/handlers/AnalyticsBridgeHandler.js';import {getPackagerHost,resolveMobileWebUrl}from'../../bridge/resolveMobileWebUrl.js';import {appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript}from'../../hooks/mintSurfaceSystemToken.js';import {useObtainSystemToken}from'../../hooks/useObtainSystemToken.js';import {usePrerequisiteIds}from'../../hooks/usePrerequisiteIds.js';import {WebViewWithNavigation}from'./WebViewWithNavigation.js';var __defProp = Object.defineProperty;
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useState,useMemo,useEffect,useCallback}from'react';import {useColorScheme,AppState,StyleSheet,View,ActivityIndicator,Text,Pressable,Platform}from'react-native';import {SafeAreaView}from'react-native-safe-area-context';import {WebView}from'react-native-webview';import {useNavigation,useRoute}from'@react-navigation/native';import {config}from'../../config/env-config.js';import {mobileTokens}from'../../theme/mobileTokens.js';import {WebViewManager}from'../../bridge/WebViewManager.js';import {NativeWebViewBridge}from'../../bridge/NativeWebViewBridge.js';import {WEB_BRIDGE_BOOTSTRAP}from'../../bridge/webBridgeBootstrap.js';import {AuthBridgeHandler}from'../../bridge/handlers/AuthBridgeHandler.js';import {NavigationBridgeHandler}from'../../bridge/handlers/NavigationBridgeHandler.js';import {AnalyticsBridgeHandler}from'../../bridge/handlers/AnalyticsBridgeHandler.js';import {getPackagerHost,resolveMobileWebUrl}from'../../bridge/resolveMobileWebUrl.js';import {appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript}from'../../hooks/mintSurfaceSystemToken.js';import {useObtainSystemToken}from'../../hooks/useObtainSystemToken.js';import {usePrerequisiteIds}from'../../hooks/usePrerequisiteIds.js';import {WebViewWithNavigation}from'./WebViewWithNavigation.js';import {setWebBuilderBackHandler}from'./webbuilderBackHandler.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -21,7 +21,7 @@ function makeHandoffState() {
21
21
  return `mobile-webview-${Date.now().toString(36)}`;
22
22
  }
23
23
  function WebBuilderScreen() {
24
- var _a;
24
+ var _a, _b, _c;
25
25
  const navigation = useNavigation();
26
26
  const route = useRoute();
27
27
  const colorScheme = useColorScheme();
@@ -32,6 +32,7 @@ function WebBuilderScreen() {
32
32
  const [hasError, setHasError] = useState(false);
33
33
  const [errorDetail, setErrorDetail] = useState(null);
34
34
  const [canGoBack, setCanGoBack] = useState(false);
35
+ const previewOpenRef = useRef(false);
35
36
  const [reloadKey, setReloadKey] = useState(0);
36
37
  const [authToken, setAuthToken] = useState(null);
37
38
  const [authBackend, setAuthBackend] = useState(null);
@@ -51,13 +52,29 @@ function WebBuilderScreen() {
51
52
  const packagerHost = getPackagerHost();
52
53
  const handoffParams = useMemo(() => {
53
54
  const params = route == null ? void 0 : route.params;
54
- const channelId = typeof (params == null ? void 0 : params.channelId) === "string" ? params.channelId.trim() : "";
55
- const projectIdParam = typeof (params == null ? void 0 : params.projectId) === "string" ? params.projectId.trim() : "";
56
- const message = typeof (params == null ? void 0 : params.message) === "string" ? params.message.trim() : "";
55
+ const read = (key) => {
56
+ const value = params == null ? void 0 : params[key];
57
+ return typeof value === "string" ? value.trim() : "";
58
+ };
59
+ const channelId = read("channelId");
60
+ const projectIdParam = read("projectId");
61
+ const message = read("message");
62
+ const snapshotId = read("snapshotId");
63
+ const templateId = read("templateId");
64
+ const templateTitle = read("templateTitle");
65
+ const seedTemplate = read("seedTemplate");
66
+ const deployUrl = read("deployUrl");
67
+ const previewUrl = read("previewUrl");
57
68
  return {
58
69
  channelId: channelId || null,
59
70
  projectId: projectIdParam || null,
60
- message: message || null
71
+ message: message || null,
72
+ snapshotId: snapshotId || null,
73
+ templateId: templateId || null,
74
+ templateTitle: templateTitle || null,
75
+ seedTemplate: seedTemplate || null,
76
+ deployUrl: deployUrl || null,
77
+ previewUrl: previewUrl || null
61
78
  };
62
79
  }, [route == null ? void 0 : route.params]);
63
80
  const baseUrl = useMemo(() => {
@@ -65,20 +82,41 @@ function WebBuilderScreen() {
65
82
  const fromParams = (_a2 = route == null ? void 0 : route.params) == null ? void 0 : _a2.url;
66
83
  const raw = typeof fromParams === "string" && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;
67
84
  const resolved = resolveMobileWebUrl(raw, packagerHost);
68
- if (!handoffParams.channelId && !handoffParams.message) return resolved;
85
+ const stamp = (url) => {
86
+ url.searchParams.set("embed", "mobile");
87
+ const isRemix = Boolean(handoffParams.snapshotId);
88
+ if (!isRemix && handoffParams.channelId) url.searchParams.set("channelId", handoffParams.channelId);
89
+ if (!isRemix && handoffParams.projectId) url.searchParams.set("projectId", handoffParams.projectId);
90
+ if (handoffParams.message) url.searchParams.set("message", handoffParams.message);
91
+ if (handoffParams.snapshotId) url.searchParams.set("snapshotId", handoffParams.snapshotId);
92
+ if (handoffParams.templateId) url.searchParams.set("templateId", handoffParams.templateId);
93
+ if (handoffParams.templateTitle) url.searchParams.set("templateTitle", handoffParams.templateTitle);
94
+ if (handoffParams.seedTemplate) url.searchParams.set("seedTemplate", handoffParams.seedTemplate);
95
+ };
69
96
  try {
70
97
  const url = new URL(resolved);
71
- if (handoffParams.channelId) url.searchParams.set("channelId", handoffParams.channelId);
72
- if (handoffParams.projectId) url.searchParams.set("projectId", handoffParams.projectId);
73
- if (handoffParams.message) url.searchParams.set("message", handoffParams.message);
98
+ stamp(url);
74
99
  return url.toString();
75
100
  } catch (e) {
76
101
  const sep = resolved.includes("?") ? "&" : "?";
77
- const parts = [];
78
- if (handoffParams.channelId) parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);
79
- if (handoffParams.projectId) parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);
102
+ const parts = ["embed=mobile"];
103
+ const isRemix = Boolean(handoffParams.snapshotId);
104
+ if (!isRemix && handoffParams.channelId) {
105
+ parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);
106
+ }
107
+ if (!isRemix && handoffParams.projectId) {
108
+ parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);
109
+ }
80
110
  if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);
81
- return parts.length ? `${resolved}${sep}${parts.join("&")}` : resolved;
111
+ if (handoffParams.snapshotId) parts.push(`snapshotId=${encodeURIComponent(handoffParams.snapshotId)}`);
112
+ if (handoffParams.templateId) parts.push(`templateId=${encodeURIComponent(handoffParams.templateId)}`);
113
+ if (handoffParams.templateTitle) {
114
+ parts.push(`templateTitle=${encodeURIComponent(handoffParams.templateTitle)}`);
115
+ }
116
+ if (handoffParams.seedTemplate) {
117
+ parts.push(`seedTemplate=${encodeURIComponent(handoffParams.seedTemplate)}`);
118
+ }
119
+ return `${resolved}${sep}${parts.join("&")}`;
82
120
  }
83
121
  }, [route == null ? void 0 : route.params, packagerHost, handoffParams]);
84
122
  const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);
@@ -167,9 +205,9 @@ function WebBuilderScreen() {
167
205
  }, [authToken, mfeConfig.url, webViewManager]);
168
206
  useEffect(() => {
169
207
  const handleAppStateChange = (nextAppState) => {
170
- var _a2, _b;
208
+ var _a2, _b2;
171
209
  if (nextAppState === "background") {
172
- (_b = (_a2 = webViewRef.current) == null ? void 0 : _a2.clearCache) == null ? void 0 : _b.call(_a2, true);
210
+ (_b2 = (_a2 = webViewRef.current) == null ? void 0 : _a2.clearCache) == null ? void 0 : _b2.call(_a2, true);
173
211
  }
174
212
  };
175
213
  const subscription = AppState.addEventListener("change", handleAppStateChange);
@@ -228,8 +266,18 @@ function WebBuilderScreen() {
228
266
  setIsLoading(false);
229
267
  }, [mfeConfig.url]);
230
268
  const handleMessage = useCallback((event) => {
231
- var _a2;
232
- (_a2 = bridgeRef.current) == null ? void 0 : _a2.handleMessage(event);
269
+ var _a2, _b2;
270
+ try {
271
+ const raw = (_a2 = event == null ? void 0 : event.nativeEvent) == null ? void 0 : _a2.data;
272
+ if (typeof raw === "string" && raw.includes("wb-preview")) {
273
+ const parsed = JSON.parse(raw);
274
+ if ((parsed == null ? void 0 : parsed.type) === "wb-preview") {
275
+ previewOpenRef.current = Boolean(parsed.open);
276
+ }
277
+ }
278
+ } catch (e) {
279
+ }
280
+ (_b2 = bridgeRef.current) == null ? void 0 : _b2.handleMessage(event);
233
281
  }, []);
234
282
  const handleNavigationStateChange = useCallback((navState) => {
235
283
  setCanGoBack(Boolean(navState.canGoBack));
@@ -249,6 +297,27 @@ function WebBuilderScreen() {
249
297
  navigation.goBack();
250
298
  }
251
299
  }, [navigation]);
300
+ useEffect(() => {
301
+ setWebBuilderBackHandler(() => {
302
+ var _a2, _b2;
303
+ if (canGoBack) {
304
+ (_a2 = webViewRef.current) == null ? void 0 : _a2.goBack();
305
+ return true;
306
+ }
307
+ if (previewOpenRef.current) {
308
+ (_b2 = webViewRef.current) == null ? void 0 : _b2.injectJavaScript(`
309
+ (function () {
310
+ try { window.__yantraWbNativeBack && window.__yantraWbNativeBack(); } catch (e) {}
311
+ })();
312
+ true;
313
+ `);
314
+ previewOpenRef.current = false;
315
+ return true;
316
+ }
317
+ return false;
318
+ });
319
+ return () => setWebBuilderBackHandler(null);
320
+ }, [canGoBack]);
252
321
  const cacheMode = mfeConfig.cachePolicy === "cache-else-load" ? "LOAD_CACHE_ELSE_NETWORK" : "LOAD_DEFAULT";
253
322
  const showAuthSpinner = !authReady;
254
323
  const showAuthFailure = authReady && !authToken;
@@ -292,7 +361,7 @@ function WebBuilderScreen() {
292
361
  uri: mfeConfig.url
293
362
  }, style: styles.webview, onLoadStart: handleLoadStart, onLoadEnd: handleLoadEnd, onError: handleError, onHttpError: handleHttpError, onMessage: handleMessage, onNavigationStateChange: handleNavigationStateChange, injectedJavaScriptBeforeContentLoaded: injectedBeforeContent, injectedJavaScript: reinjectAfterLoad, cacheEnabled: mfeConfig.cachePolicy !== "reload", cacheMode, javaScriptEnabled: true, domStorageEnabled: true, sharedCookiesEnabled: true, thirdPartyCookiesEnabled: true, startInLoadingState: true, scalesPageToFit: true, originWhitelist: ["*"], mixedContentMode: "always", allowsInlineMediaPlayback: false, mediaPlaybackRequiresUserAction: true, setSupportMultipleWindows: false, allowsBackForwardNavigationGestures: true }, Platform.OS === "android" ? {
294
363
  overScrollMode: "never"
295
- } : null), `${reloadKey}-${(_a = authToken == null ? void 0 : authToken.slice(-8)) != null ? _a : "none"}`)
364
+ } : null), `${reloadKey}-${(_a = handoffParams.channelId) != null ? _a : "none"}-${(_b = handoffParams.snapshotId) != null ? _b : "nosnap"}-${(_c = authToken == null ? void 0 : authToken.slice(-8)) != null ? _c : "none"}`)
296
365
  ] });
297
366
  }
298
367
  const styles = StyleSheet.create({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/screens/WebBuilder/index.tsx"],"sourcesContent":["/**\n * WebBuilder — native shell hosting the webbuilder-surface WebView.\n *\n * Mints the org system JWT (same as CDeCLI) and hands it to the surface via\n * `?token=&state=` (SurfaceLoginGate.captureLoginCallback) + localStorage\n * `cdecli_token`, so the standalone \"Sign in with Yantra\" gate is skipped.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n AppState,\n type AppStateStatus,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n useColorScheme,\n View,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport {\n WebView,\n type WebViewMessageEvent,\n type WebViewNavigation,\n type WebViewErrorEvent,\n type WebViewHttpErrorEvent,\n} from 'react-native-webview';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport {\n AnalyticsBridgeHandler,\n AuthBridgeHandler,\n getPackagerHost,\n NativeWebViewBridge,\n NavigationBridgeHandler,\n resolveMobileWebUrl,\n WEB_BRIDGE_BOOTSTRAP,\n WebViewManager,\n} from '../../bridge';\nimport {\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n} from '../../hooks/mintSurfaceSystemToken';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { WebViewWithNavigation } from './WebViewWithNavigation';\n\nexport type MicroFrontendCachePolicy = 'default' | 'reload' | 'cache-else-load';\n\nexport interface MicroFrontendConfig {\n url: string;\n preload?: boolean;\n cachePolicy?: MicroFrontendCachePolicy;\n}\n\nexport interface WebBuilderRouteParams {\n orgName?: string | null;\n /** Optional override URL; defaults to WEB_BUILDER_URL from env. */\n url?: string | null;\n /** Channel to open / continue in the surface (`?channelId=`). */\n channelId?: string | null;\n /** Yantra project UUID (`?projectId=`). Defaults to channelId on the surface if omitted. */\n projectId?: string | null;\n /** Optional first Agent prompt to auto-send after hydrate (`?message=`). */\n message?: string | null;\n}\n\nfunction makeHandoffState(): string {\n return `mobile-webview-${Date.now().toString(36)}`;\n}\n\nexport default function WebBuilderScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n\n const webViewRef = useRef<WebView>(null);\n const bridgeRef = useRef<NativeWebViewBridge | null>(null);\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorDetail, setErrorDetail] = useState<string | null>(null);\n const [canGoBack, setCanGoBack] = useState(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [authToken, setAuthToken] = useState<string | null>(null);\n const [authBackend, setAuthBackend] = useState<string | null>(null);\n const [authState, setAuthState] = useState<string>(() => makeHandoffState());\n const [authReady, setAuthReady] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const [mintGeneration, setMintGeneration] = useState(0);\n\n const { orgName, projectId, tagId } = usePrerequisiteIds();\n // Same Apollo session the rest of the app uses (web harness pastes this JWT).\n // Raw fetch + SecureStore Auth0 Bearer gets 401 on local GraphQL; Apollo does not.\n const { obtainSystemToken, loading: systemTokenQueryLoading } = useObtainSystemToken(true);\n\n const packagerHost = getPackagerHost();\n\n const handoffParams = useMemo(() => {\n const params = route?.params as WebBuilderRouteParams | undefined;\n const channelId = typeof params?.channelId === 'string' ? params.channelId.trim() : '';\n const projectIdParam = typeof params?.projectId === 'string' ? params.projectId.trim() : '';\n const message = typeof params?.message === 'string' ? params.message.trim() : '';\n return {\n channelId: channelId || null,\n projectId: projectIdParam || null,\n message: message || null,\n };\n }, [route?.params]);\n\n const baseUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n const resolved = resolveMobileWebUrl(raw, packagerHost);\n // Stamp Chat → Build handoff before auth params so the surface can deep-link.\n if (!handoffParams.channelId && !handoffParams.message) return resolved;\n try {\n const url = new URL(resolved);\n if (handoffParams.channelId) url.searchParams.set('channelId', handoffParams.channelId);\n if (handoffParams.projectId) url.searchParams.set('projectId', handoffParams.projectId);\n if (handoffParams.message) url.searchParams.set('message', handoffParams.message);\n return url.toString();\n } catch {\n const sep = resolved.includes('?') ? '&' : '?';\n const parts: string[] = [];\n if (handoffParams.channelId) parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);\n if (handoffParams.projectId) parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);\n if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);\n return parts.length ? `${resolved}${sep}${parts.join('&')}` : resolved;\n }\n }, [route?.params, packagerHost, handoffParams]);\n\n /** Same GRAPHQL_URL the rest of the app uses — rewritten for device LAN. */\n const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);\n\n useEffect(() => {\n let cancelled = false;\n setAuthReady(false);\n setAuthError(null);\n const handoffState = makeHandoffState();\n setAuthState(handoffState);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] surface=', baseUrl, 'graphql=', graphqlUrl);\n }\n\n // Wait for org/project (and initial GetUserSystemToken) so create/reveal can succeed.\n if (systemTokenQueryLoading) {\n return () => {\n cancelled = true;\n };\n }\n\n (async () => {\n try {\n const token = await obtainSystemToken();\n if (cancelled) return;\n if (!token?.trim()) {\n throw new Error(\n 'Could not obtain system token via Apollo. Ensure org/project are set (same as chat).',\n );\n }\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] Apollo system token length=', token.length);\n }\n setAuthToken(token.trim());\n setAuthBackend(graphqlUrl);\n setAuthReady(true);\n } catch (err) {\n if (cancelled) return;\n const message = err instanceof Error ? err.message : 'Token mint failed';\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] surface token mint failed:', message);\n setAuthError(message);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(true);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [baseUrl, graphqlUrl, obtainSystemToken, systemTokenQueryLoading, orgName, projectId, tagId, mintGeneration]);\n\n const mfeUrl = useMemo(() => {\n if (!authToken) return baseUrl;\n return appendSurfaceAuthParams(baseUrl, authToken, authState);\n }, [baseUrl, authToken, authState]);\n\n const injectedBeforeContent = useMemo(() => {\n const parts = [WEB_BRIDGE_BOOTSTRAP];\n if (authToken && authBackend) {\n parts.unshift(buildCdecliTokenInjection(authToken, authBackend, authState));\n }\n return parts.join('\\n');\n }, [authToken, authBackend, authState]);\n\n /** If the SPA still shows the login gate after load, force one handoff reload. */\n const reinjectAfterLoad = useMemo(() => {\n if (!authToken || !authBackend) return undefined;\n return buildSurfaceGateRecoveryScript(authToken, authBackend, authState);\n }, [authToken, authBackend, authState]);\n\n const mfeConfig: MicroFrontendConfig = useMemo(\n () => ({\n url: mfeUrl,\n cachePolicy: 'default',\n }),\n [mfeUrl],\n );\n\n const webViewManager = WebViewManager.getInstance();\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const textColor = isDark ? '#f8fafc' : mobileTokens.color.text;\n const mutedColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n\n // Bridge + service handlers\n useEffect(() => {\n const bridge = new NativeWebViewBridge(webViewRef);\n bridgeRef.current = bridge;\n // eslint-disable-next-line no-new\n new AuthBridgeHandler(bridge);\n // eslint-disable-next-line no-new\n new NavigationBridgeHandler(bridge, () => navigation);\n // eslint-disable-next-line no-new\n new AnalyticsBridgeHandler(bridge);\n\n return () => {\n bridge.dispose();\n bridgeRef.current = null;\n };\n }, [navigation]);\n\n useEffect(() => {\n if (!authToken) return;\n const id = mfeConfig.url;\n webViewManager.registerWebView(id, webViewRef);\n return () => {\n webViewManager.unregisterWebView(id);\n };\n }, [authToken, mfeConfig.url, webViewManager]);\n\n useEffect(() => {\n const handleAppStateChange = (nextAppState: AppStateStatus) => {\n if (nextAppState === 'background') {\n webViewRef.current?.clearCache?.(true);\n }\n };\n const subscription = AppState.addEventListener('change', handleAppStateChange);\n return () => subscription.remove();\n }, []);\n\n useEffect(() => {\n if (!authReady || !authToken || hasError) return;\n const timer = setTimeout(() => {\n setIsLoading((loading) => {\n if (!loading) return loading;\n const detail = `Timed out loading ${mfeConfig.url}. Is WEB_BUILDER_URL reachable from this device?`;\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder]', detail);\n setErrorDetail(detail);\n setHasError(true);\n return false;\n });\n }, 20000);\n return () => clearTimeout(timer);\n }, [authReady, authToken, hasError, mfeConfig.url, reloadKey]);\n\n const handleLoadStart = useCallback(() => {\n setIsLoading(true);\n setHasError(false);\n setErrorDetail(null);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n setIsLoading(false);\n webViewManager.updateUsage(mfeConfig.url);\n }, [mfeConfig.url, webViewManager]);\n\n const handleError = useCallback(\n (event: WebViewErrorEvent) => {\n const { description, code, url } = event.nativeEvent;\n const detail = [description, code != null ? `code ${code}` : null, url || mfeConfig.url]\n .filter(Boolean)\n .join(' · ');\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] load error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleHttpError = useCallback(\n (event: WebViewHttpErrorEvent) => {\n const { statusCode, description, url } = event.nativeEvent;\n if (statusCode < 400) return;\n const detail = `HTTP ${statusCode}${description ? `: ${description}` : ''} · ${url || mfeConfig.url}`;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] http error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n bridgeRef.current?.handleMessage(event);\n }, []);\n\n const handleNavigationStateChange = useCallback((navState: WebViewNavigation) => {\n setCanGoBack(Boolean(navState.canGoBack));\n }, []);\n\n const handleRetry = useCallback(() => {\n setHasError(false);\n setErrorDetail(null);\n setAuthError(null);\n setAuthToken(null);\n setAuthBackend(null);\n setIsLoading(true);\n setMintGeneration((g) => g + 1);\n setReloadKey((k) => k + 1);\n }, []);\n\n const handleNativeGoBack = useCallback(() => {\n if (navigation.canGoBack()) {\n navigation.goBack();\n }\n }, [navigation]);\n\n const cacheMode =\n mfeConfig.cachePolicy === 'cache-else-load' ? ('LOAD_CACHE_ELSE_NETWORK' as const) : ('LOAD_DEFAULT' as const);\n\n const showAuthSpinner = !authReady;\n const showAuthFailure = authReady && !authToken;\n\n if (showAuthSpinner) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n <Text style={[styles.errorBody, { color: mutedColor, marginTop: 12 }]}>Preparing Web Builder…</Text>\n </View>\n </SafeAreaView>\n );\n }\n\n if (showAuthFailure || hasError) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <Text style={[styles.errorTitle, { color: textColor }]}>\n {showAuthFailure ? 'Could not open Web Builder' : 'Failed to load micro frontend'}\n </Text>\n <Text style={[styles.errorBody, { color: mutedColor }]}>\n {showAuthFailure\n ? authError ||\n 'Sign-in token could not be minted for the surface. Ensure you are logged in with an org.'\n : `Could not open ${baseUrl}. Check WEB_BUILDER_URL / network, then retry.`}\n </Text>\n {errorDetail ? (\n <Text style={[styles.errorMeta, { color: mutedColor }]} selectable>\n {errorDetail}\n </Text>\n ) : null}\n <Pressable\n onPress={handleRetry}\n style={[styles.retryButton, { backgroundColor: mobileTokens.color.primary }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Retry loading WebBuilder\"\n >\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={[styles.container, { backgroundColor: surfaceColor }]}>\n <WebViewWithNavigation webViewRef={webViewRef} canGoBack={canGoBack} onGoBack={handleNativeGoBack} />\n\n {isLoading && (\n <View style={[styles.loadingOverlay, { backgroundColor: surfaceColor }]} pointerEvents=\"none\">\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n </View>\n )}\n\n <WebView\n key={`${reloadKey}-${authToken?.slice(-8) ?? 'none'}`}\n ref={webViewRef}\n source={{\n uri: mfeConfig.url,\n }}\n style={styles.webview}\n onLoadStart={handleLoadStart}\n onLoadEnd={handleLoadEnd}\n onError={handleError}\n onHttpError={handleHttpError}\n onMessage={handleMessage}\n onNavigationStateChange={handleNavigationStateChange}\n injectedJavaScriptBeforeContentLoaded={injectedBeforeContent}\n injectedJavaScript={reinjectAfterLoad}\n cacheEnabled={mfeConfig.cachePolicy !== 'reload'}\n cacheMode={cacheMode}\n javaScriptEnabled\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n startInLoadingState\n scalesPageToFit\n originWhitelist={['*']}\n mixedContentMode=\"always\"\n allowsInlineMediaPlayback={false}\n mediaPlaybackRequiresUserAction\n setSupportMultipleWindows={false}\n allowsBackForwardNavigationGestures\n {...(Platform.OS === 'android' ? { overScrollMode: 'never' as const } : null)}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n webview: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n loadingOverlay: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n },\n centered: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 24,\n gap: 12,\n },\n errorTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n errorBody: {\n fontSize: 14,\n textAlign: 'center',\n marginBottom: 4,\n lineHeight: 20,\n },\n errorMeta: {\n fontSize: 12,\n textAlign: 'center',\n marginBottom: 8,\n lineHeight: 16,\n },\n retryButton: {\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderRadius: mobileTokens.radius.md,\n },\n retryLabel: {\n color: '#ffffff',\n fontSize: 15,\n fontWeight: '600',\n },\n});\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/screens/WebBuilder/index.tsx"],"sourcesContent":["/**\n * WebBuilder — native shell hosting the webbuilder-surface WebView.\n *\n * Mints the org system JWT (same as CDeCLI) and hands it to the surface via\n * `?token=&state=` (SurfaceLoginGate.captureLoginCallback) + localStorage\n * `cdecli_token`, so the standalone \"Sign in with Yantra\" gate is skipped.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n AppState,\n type AppStateStatus,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n useColorScheme,\n View,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport {\n WebView,\n type WebViewMessageEvent,\n type WebViewNavigation,\n type WebViewErrorEvent,\n type WebViewHttpErrorEvent,\n} from 'react-native-webview';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport {\n AnalyticsBridgeHandler,\n AuthBridgeHandler,\n getPackagerHost,\n NativeWebViewBridge,\n NavigationBridgeHandler,\n resolveMobileWebUrl,\n WEB_BRIDGE_BOOTSTRAP,\n WebViewManager,\n} from '../../bridge';\nimport {\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n} from '../../hooks/mintSurfaceSystemToken';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { WebViewWithNavigation } from './WebViewWithNavigation';\nimport { setWebBuilderBackHandler } from './webbuilderBackHandler';\n\nexport type MicroFrontendCachePolicy = 'default' | 'reload' | 'cache-else-load';\n\nexport interface MicroFrontendConfig {\n url: string;\n preload?: boolean;\n cachePolicy?: MicroFrontendCachePolicy;\n}\n\nexport interface WebBuilderRouteParams {\n orgName?: string | null;\n /** Optional override URL; defaults to WEB_BUILDER_URL from env. */\n url?: string | null;\n /** Channel to open / continue in the surface (`?channelId=`). */\n channelId?: string | null;\n /** Yantra project UUID (`?projectId=`). Defaults to channelId on the surface if omitted. */\n projectId?: string | null;\n /** Optional first Agent prompt to auto-send after hydrate (`?message=`). */\n message?: string | null;\n /** E2B snapshot for template remix (`?snapshotId=`). */\n snapshotId?: string | null;\n /** Yantra form / catalog template id (`?templateId=`). */\n templateId?: string | null;\n /** Display title for the handoff template (`?templateTitle=`). */\n templateTitle?: string | null;\n /** Stack template hint (`?seedTemplate=` e.g. vite-react). */\n seedTemplate?: string | null;\n deployUrl?: string | null;\n previewUrl?: string | null;\n}\n\nfunction makeHandoffState(): string {\n return `mobile-webview-${Date.now().toString(36)}`;\n}\n\nexport default function WebBuilderScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n\n const webViewRef = useRef<WebView>(null);\n const bridgeRef = useRef<NativeWebViewBridge | null>(null);\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorDetail, setErrorDetail] = useState<string | null>(null);\n const [canGoBack, setCanGoBack] = useState(false);\n const previewOpenRef = useRef(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [authToken, setAuthToken] = useState<string | null>(null);\n const [authBackend, setAuthBackend] = useState<string | null>(null);\n const [authState, setAuthState] = useState<string>(() => makeHandoffState());\n const [authReady, setAuthReady] = useState(false);\n const [authError, setAuthError] = useState<string | null>(null);\n const [mintGeneration, setMintGeneration] = useState(0);\n\n const { orgName, projectId, tagId } = usePrerequisiteIds();\n // Same Apollo session the rest of the app uses (web harness pastes this JWT).\n // Raw fetch + SecureStore Auth0 Bearer gets 401 on local GraphQL; Apollo does not.\n const { obtainSystemToken, loading: systemTokenQueryLoading } = useObtainSystemToken(true);\n\n const packagerHost = getPackagerHost();\n\n const handoffParams = useMemo(() => {\n const params = route?.params as WebBuilderRouteParams | undefined;\n const read = (key: keyof WebBuilderRouteParams) => {\n const value = params?.[key];\n return typeof value === 'string' ? value.trim() : '';\n };\n const channelId = read('channelId');\n const projectIdParam = read('projectId');\n const message = read('message');\n const snapshotId = read('snapshotId');\n const templateId = read('templateId');\n const templateTitle = read('templateTitle');\n const seedTemplate = read('seedTemplate');\n const deployUrl = read('deployUrl');\n const previewUrl = read('previewUrl');\n return {\n channelId: channelId || null,\n projectId: projectIdParam || null,\n message: message || null,\n snapshotId: snapshotId || null,\n templateId: templateId || null,\n templateTitle: templateTitle || null,\n seedTemplate: seedTemplate || null,\n deployUrl: deployUrl || null,\n previewUrl: previewUrl || null,\n };\n }, [route?.params]);\n\n const baseUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n const resolved = resolveMobileWebUrl(raw, packagerHost);\n const stamp = (url: URL) => {\n // Always mark mobile WebView embeds so the surface hides harness chrome\n // (cdecli JWT bar + @yantra/webbuilder-surface label).\n url.searchParams.set('embed', 'mobile');\n // Snapshot remix: omit channelId/projectId/previewUrl/deployUrl so the surface\n // mints a fresh listen channel+project from snapshotId (does not reconnect a\n // live sandbox or poll an empty mobile-precreated channel).\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) url.searchParams.set('channelId', handoffParams.channelId);\n if (!isRemix && handoffParams.projectId) url.searchParams.set('projectId', handoffParams.projectId);\n if (handoffParams.message) url.searchParams.set('message', handoffParams.message);\n if (handoffParams.snapshotId) url.searchParams.set('snapshotId', handoffParams.snapshotId);\n if (handoffParams.templateId) url.searchParams.set('templateId', handoffParams.templateId);\n if (handoffParams.templateTitle) url.searchParams.set('templateTitle', handoffParams.templateTitle);\n if (handoffParams.seedTemplate) url.searchParams.set('seedTemplate', handoffParams.seedTemplate);\n };\n try {\n const url = new URL(resolved);\n stamp(url);\n return url.toString();\n } catch {\n const sep = resolved.includes('?') ? '&' : '?';\n const parts: string[] = ['embed=mobile'];\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) {\n parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);\n }\n if (!isRemix && handoffParams.projectId) {\n parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);\n }\n if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);\n if (handoffParams.snapshotId) parts.push(`snapshotId=${encodeURIComponent(handoffParams.snapshotId)}`);\n if (handoffParams.templateId) parts.push(`templateId=${encodeURIComponent(handoffParams.templateId)}`);\n if (handoffParams.templateTitle) {\n parts.push(`templateTitle=${encodeURIComponent(handoffParams.templateTitle)}`);\n }\n if (handoffParams.seedTemplate) {\n parts.push(`seedTemplate=${encodeURIComponent(handoffParams.seedTemplate)}`);\n }\n return `${resolved}${sep}${parts.join('&')}`;\n }\n }, [route?.params, packagerHost, handoffParams]);\n\n /** Same GRAPHQL_URL the rest of the app uses — rewritten for device LAN. */\n const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);\n\n useEffect(() => {\n let cancelled = false;\n setAuthReady(false);\n setAuthError(null);\n const handoffState = makeHandoffState();\n setAuthState(handoffState);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] surface=', baseUrl, 'graphql=', graphqlUrl);\n }\n\n // Wait for org/project (and initial GetUserSystemToken) so create/reveal can succeed.\n if (systemTokenQueryLoading) {\n return () => {\n cancelled = true;\n };\n }\n\n (async () => {\n try {\n const token = await obtainSystemToken();\n if (cancelled) return;\n if (!token?.trim()) {\n throw new Error(\n 'Could not obtain system token via Apollo. Ensure org/project are set (same as chat).',\n );\n }\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] Apollo system token length=', token.length);\n }\n setAuthToken(token.trim());\n setAuthBackend(graphqlUrl);\n setAuthReady(true);\n } catch (err) {\n if (cancelled) return;\n const message = err instanceof Error ? err.message : 'Token mint failed';\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] surface token mint failed:', message);\n setAuthError(message);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(true);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [baseUrl, graphqlUrl, obtainSystemToken, systemTokenQueryLoading, orgName, projectId, tagId, mintGeneration]);\n\n const mfeUrl = useMemo(() => {\n if (!authToken) return baseUrl;\n return appendSurfaceAuthParams(baseUrl, authToken, authState);\n }, [baseUrl, authToken, authState]);\n\n const injectedBeforeContent = useMemo(() => {\n const parts = [WEB_BRIDGE_BOOTSTRAP];\n if (authToken && authBackend) {\n parts.unshift(buildCdecliTokenInjection(authToken, authBackend, authState));\n }\n return parts.join('\\n');\n }, [authToken, authBackend, authState]);\n\n /** If the SPA still shows the login gate after load, force one handoff reload. */\n const reinjectAfterLoad = useMemo(() => {\n if (!authToken || !authBackend) return undefined;\n return buildSurfaceGateRecoveryScript(authToken, authBackend, authState);\n }, [authToken, authBackend, authState]);\n\n const mfeConfig: MicroFrontendConfig = useMemo(\n () => ({\n url: mfeUrl,\n cachePolicy: 'default',\n }),\n [mfeUrl],\n );\n\n const webViewManager = WebViewManager.getInstance();\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const textColor = isDark ? '#f8fafc' : mobileTokens.color.text;\n const mutedColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n\n // Bridge + service handlers\n useEffect(() => {\n const bridge = new NativeWebViewBridge(webViewRef);\n bridgeRef.current = bridge;\n // eslint-disable-next-line no-new\n new AuthBridgeHandler(bridge);\n // eslint-disable-next-line no-new\n new NavigationBridgeHandler(bridge, () => navigation);\n // eslint-disable-next-line no-new\n new AnalyticsBridgeHandler(bridge);\n\n return () => {\n bridge.dispose();\n bridgeRef.current = null;\n };\n }, [navigation]);\n\n useEffect(() => {\n if (!authToken) return;\n const id = mfeConfig.url;\n webViewManager.registerWebView(id, webViewRef);\n return () => {\n webViewManager.unregisterWebView(id);\n };\n }, [authToken, mfeConfig.url, webViewManager]);\n\n useEffect(() => {\n const handleAppStateChange = (nextAppState: AppStateStatus) => {\n if (nextAppState === 'background') {\n webViewRef.current?.clearCache?.(true);\n }\n };\n const subscription = AppState.addEventListener('change', handleAppStateChange);\n return () => subscription.remove();\n }, []);\n\n useEffect(() => {\n if (!authReady || !authToken || hasError) return;\n const timer = setTimeout(() => {\n setIsLoading((loading) => {\n if (!loading) return loading;\n const detail = `Timed out loading ${mfeConfig.url}. Is WEB_BUILDER_URL reachable from this device?`;\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder]', detail);\n setErrorDetail(detail);\n setHasError(true);\n return false;\n });\n }, 20000);\n return () => clearTimeout(timer);\n }, [authReady, authToken, hasError, mfeConfig.url, reloadKey]);\n\n const handleLoadStart = useCallback(() => {\n setIsLoading(true);\n setHasError(false);\n setErrorDetail(null);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n setIsLoading(false);\n webViewManager.updateUsage(mfeConfig.url);\n }, [mfeConfig.url, webViewManager]);\n\n const handleError = useCallback(\n (event: WebViewErrorEvent) => {\n const { description, code, url } = event.nativeEvent;\n const detail = [description, code != null ? `code ${code}` : null, url || mfeConfig.url]\n .filter(Boolean)\n .join(' · ');\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] load error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleHttpError = useCallback(\n (event: WebViewHttpErrorEvent) => {\n const { statusCode, description, url } = event.nativeEvent;\n if (statusCode < 400) return;\n const detail = `HTTP ${statusCode}${description ? `: ${description}` : ''} · ${url || mfeConfig.url}`;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] http error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n try {\n const raw = event?.nativeEvent?.data;\n if (typeof raw === 'string' && raw.includes('wb-preview')) {\n const parsed = JSON.parse(raw) as { type?: string; open?: boolean };\n if (parsed?.type === 'wb-preview') {\n previewOpenRef.current = Boolean(parsed.open);\n }\n }\n } catch {\n /* non-JSON bridge frames are handled below */\n }\n bridgeRef.current?.handleMessage(event);\n }, []);\n\n const handleNavigationStateChange = useCallback((navState: WebViewNavigation) => {\n setCanGoBack(Boolean(navState.canGoBack));\n }, []);\n\n const handleRetry = useCallback(() => {\n setHasError(false);\n setErrorDetail(null);\n setAuthError(null);\n setAuthToken(null);\n setAuthBackend(null);\n setIsLoading(true);\n setMintGeneration((g) => g + 1);\n setReloadKey((k) => k + 1);\n }, []);\n\n const handleNativeGoBack = useCallback(() => {\n if (navigation.canGoBack()) {\n navigation.goBack();\n }\n }, [navigation]);\n\n // Header back (iOS) must use WebView history / in-app preview before popping\n // this screen — otherwise Preview → back jumps straight to Home.\n useEffect(() => {\n setWebBuilderBackHandler(() => {\n if (canGoBack) {\n webViewRef.current?.goBack();\n return true;\n }\n if (previewOpenRef.current) {\n webViewRef.current?.injectJavaScript(`\n(function () {\n try { window.__yantraWbNativeBack && window.__yantraWbNativeBack(); } catch (e) {}\n})();\ntrue;\n`);\n previewOpenRef.current = false;\n return true;\n }\n return false;\n });\n return () => setWebBuilderBackHandler(null);\n }, [canGoBack]);\n\n const cacheMode =\n mfeConfig.cachePolicy === 'cache-else-load' ? ('LOAD_CACHE_ELSE_NETWORK' as const) : ('LOAD_DEFAULT' as const);\n\n const showAuthSpinner = !authReady;\n const showAuthFailure = authReady && !authToken;\n\n if (showAuthSpinner) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n <Text style={[styles.errorBody, { color: mutedColor, marginTop: 12 }]}>Preparing Web Builder…</Text>\n </View>\n </SafeAreaView>\n );\n }\n\n if (showAuthFailure || hasError) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <Text style={[styles.errorTitle, { color: textColor }]}>\n {showAuthFailure ? 'Could not open Web Builder' : 'Failed to load micro frontend'}\n </Text>\n <Text style={[styles.errorBody, { color: mutedColor }]}>\n {showAuthFailure\n ? authError ||\n 'Sign-in token could not be minted for the surface. Ensure you are logged in with an org.'\n : `Could not open ${baseUrl}. Check WEB_BUILDER_URL / network, then retry.`}\n </Text>\n {errorDetail ? (\n <Text style={[styles.errorMeta, { color: mutedColor }]} selectable>\n {errorDetail}\n </Text>\n ) : null}\n <Pressable\n onPress={handleRetry}\n style={[styles.retryButton, { backgroundColor: mobileTokens.color.primary }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Retry loading WebBuilder\"\n >\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={[styles.container, { backgroundColor: surfaceColor }]}>\n <WebViewWithNavigation webViewRef={webViewRef} canGoBack={canGoBack} onGoBack={handleNativeGoBack} />\n\n {isLoading && (\n <View style={[styles.loadingOverlay, { backgroundColor: surfaceColor }]} pointerEvents=\"none\">\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n </View>\n )}\n\n <WebView\n key={`${reloadKey}-${handoffParams.channelId ?? 'none'}-${handoffParams.snapshotId ?? 'nosnap'}-${authToken?.slice(-8) ?? 'none'}`}\n ref={webViewRef}\n source={{\n uri: mfeConfig.url,\n }}\n style={styles.webview}\n onLoadStart={handleLoadStart}\n onLoadEnd={handleLoadEnd}\n onError={handleError}\n onHttpError={handleHttpError}\n onMessage={handleMessage}\n onNavigationStateChange={handleNavigationStateChange}\n injectedJavaScriptBeforeContentLoaded={injectedBeforeContent}\n injectedJavaScript={reinjectAfterLoad}\n cacheEnabled={mfeConfig.cachePolicy !== 'reload'}\n cacheMode={cacheMode}\n javaScriptEnabled\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n startInLoadingState\n scalesPageToFit\n originWhitelist={['*']}\n mixedContentMode=\"always\"\n allowsInlineMediaPlayback={false}\n mediaPlaybackRequiresUserAction\n setSupportMultipleWindows={false}\n allowsBackForwardNavigationGestures\n {...(Platform.OS === 'android' ? { overScrollMode: 'never' as const } : null)}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n webview: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n loadingOverlay: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n },\n centered: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 24,\n gap: 12,\n },\n errorTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n errorBody: {\n fontSize: 14,\n textAlign: 'center',\n marginBottom: 4,\n lineHeight: 20,\n },\n errorMeta: {\n fontSize: 12,\n textAlign: 'center',\n marginBottom: 8,\n lineHeight: 16,\n },\n retryButton: {\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderRadius: mobileTokens.radius.md,\n },\n retryLabel: {\n color: '#ffffff',\n fontSize: 15,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ let handler = null;
2
+ function setWebBuilderBackHandler(next) {
3
+ handler = next;
4
+ }
5
+ function tryWebBuilderBack() {
6
+ try {
7
+ return (handler == null ? void 0 : handler()) === true;
8
+ } catch (e) {
9
+ return false;
10
+ }
11
+ }export{setWebBuilderBackHandler,tryWebBuilderBack};//# sourceMappingURL=webbuilderBackHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webbuilderBackHandler.js","sources":["../../../src/screens/WebBuilder/webbuilderBackHandler.ts"],"sourcesContent":["/**\n * Lets NavigationHeader prefer in-WebView back (preview / sandbox history)\n * before popping the native WebBuilder screen to Home.\n */\n\ntype BackHandler = () => boolean;\n\nlet handler: BackHandler | null = null;\n\nexport function setWebBuilderBackHandler(next: BackHandler | null): void {\n handler = next;\n}\n\n/** @returns true if the WebBuilder WebView consumed the back press */\nexport function tryWebBuilderBack(): boolean {\n try {\n return handler?.() === true;\n } catch {\n return false;\n }\n}\n"],"names":[],"mappings":"AAMA,IAAI,OAA8B,GAAA,IAAA;AAC3B,SAAS,yBAAyB,IAAgC,EAAA;AACvE,EAAU,OAAA,GAAA,IAAA;AACZ;AAGO,SAAS,iBAA6B,GAAA;AAC3C,EAAI,IAAA;AACF,IAAA,OAAA,CAAO,OAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,EAAA,MAAA,IAAA;AAAA,GACjB,CAAA,OAAA,CAAA,EAAA;AACN,IAAO,OAAA,KAAA;AAAA;AAEX"}
@@ -57,6 +57,16 @@ function isUnhydratedCdecodeUri(value) {
57
57
  }
58
58
  return Object.keys(uri).length === 0;
59
59
  }
60
+ function settingsUriForOrg(orgName) {
61
+ const slug = orgName.trim();
62
+ const path = slug ? `/${slug}/` : "/";
63
+ return {
64
+ scheme: "cdecode",
65
+ authority: "default",
66
+ path,
67
+ fragment: "settings"
68
+ };
69
+ }
60
70
  function settingsUriForAccount(accountId) {
61
71
  const id = accountId.trim();
62
72
  return {
@@ -65,4 +75,4 @@ function settingsUriForAccount(accountId) {
65
75
  path: id ? `//accounts/${id}` : "/",
66
76
  fragment: "settings"
67
77
  };
68
- }export{FALLBACK_SETTINGS_URI,isUnhydratedCdecodeUri,settingsUriForAccount,toUriInput};//# sourceMappingURL=cdecodeUri.js.map
78
+ }export{FALLBACK_SETTINGS_URI,isUnhydratedCdecodeUri,settingsUriForAccount,settingsUriForOrg,toUriInput};//# sourceMappingURL=cdecodeUri.js.map