@adminide-stack/yantra-mobile 12.0.49 → 12.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bridge/NativeWebViewBridge.js +14 -1
- package/lib/bridge/NativeWebViewBridge.js.map +1 -1
- package/lib/components/KeyboardComposerDock.js +41 -25
- package/lib/components/KeyboardComposerDock.js.map +1 -1
- package/lib/compute.js +14 -7
- package/lib/compute.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +9 -0
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/chat/ChatTranscript.js +16 -8
- package/lib/features/chat/ChatTranscript.js.map +1 -1
- package/lib/features/skills/skillTemplates.js.map +1 -1
- package/lib/hooks/useCdecliChannel.js +30 -10
- package/lib/hooks/useCdecliChannel.js.map +1 -1
- package/lib/hooks/useChatStream.js +30 -6
- package/lib/hooks/useChatStream.js.map +1 -1
- package/lib/routes.json +14 -7
- package/lib/screens/Chat/index.js +5 -8
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +7 -17
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/DeepSearchModal.js +1 -1
- package/lib/screens/Home/components/DeepSearchModal.js.map +1 -1
- package/lib/screens/Home/components/WebBuilderPrewarm.js +4 -47
- package/lib/screens/Home/components/WebBuilderPrewarm.js.map +1 -1
- package/lib/screens/WebBuilder/webbuilderWarmCache.js +1 -15
- package/lib/screens/WebBuilder/webbuilderWarmCache.js.map +1 -1
- package/package.json +4 -4
- package/lib/hooks/useKeyboardBottomOffset.js +0 -42
- package/lib/hooks/useKeyboardBottomOffset.js.map +0 -1
|
@@ -16,6 +16,8 @@ class NativeWebViewBridge {
|
|
|
16
16
|
batchDelayMs: 100
|
|
17
17
|
});
|
|
18
18
|
__publicField(this, "listeners", /* @__PURE__ */ new Map());
|
|
19
|
+
__publicField(this, "disposed", false);
|
|
20
|
+
__publicField(this, "rafHandles", /* @__PURE__ */ new Set());
|
|
19
21
|
this.webViewRef = webViewRef;
|
|
20
22
|
}
|
|
21
23
|
on(event, listener) {
|
|
@@ -113,6 +115,7 @@ class NativeWebViewBridge {
|
|
|
113
115
|
this.sendMessage(response);
|
|
114
116
|
}
|
|
115
117
|
handleMessage(event) {
|
|
118
|
+
if (this.disposed) return;
|
|
116
119
|
const rawData = event.nativeEvent.data;
|
|
117
120
|
const data = typeof rawData === "string" ? rawData : JSON.stringify(rawData);
|
|
118
121
|
try {
|
|
@@ -135,6 +138,9 @@ class NativeWebViewBridge {
|
|
|
135
138
|
}
|
|
136
139
|
}
|
|
137
140
|
dispose() {
|
|
141
|
+
this.disposed = true;
|
|
142
|
+
this.rafHandles.forEach((handle) => cancelAnimationFrame(handle));
|
|
143
|
+
this.rafHandles.clear();
|
|
138
144
|
this.flushBatch();
|
|
139
145
|
this.pendingRequests.forEach((pending) => {
|
|
140
146
|
clearTimeout(pending.timeout);
|
|
@@ -201,18 +207,25 @@ class NativeWebViewBridge {
|
|
|
201
207
|
this.emitLocal("bridge:error", message.payload);
|
|
202
208
|
}
|
|
203
209
|
sendMessage(message) {
|
|
210
|
+
if (this.disposed) return;
|
|
204
211
|
if (!this.isReady && message.action !== BRIDGE_READY_ACTION) {
|
|
205
212
|
this.messageQueue.push(message);
|
|
206
213
|
return;
|
|
207
214
|
}
|
|
208
215
|
this.debugger.logSent(message);
|
|
209
216
|
const deliver = (serialized) => {
|
|
217
|
+
if (this.disposed) return;
|
|
210
218
|
const post = () => {
|
|
211
219
|
var _a;
|
|
220
|
+
if (this.disposed) return;
|
|
212
221
|
(_a = this.webViewRef.current) == null ? void 0 : _a.postMessage(serialized);
|
|
213
222
|
};
|
|
214
223
|
if (Platform.OS === "ios") {
|
|
215
|
-
requestAnimationFrame(
|
|
224
|
+
const handle = requestAnimationFrame(() => {
|
|
225
|
+
this.rafHandles.delete(handle);
|
|
226
|
+
post();
|
|
227
|
+
});
|
|
228
|
+
this.rafHandles.add(handle);
|
|
216
229
|
} else {
|
|
217
230
|
post();
|
|
218
231
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeWebViewBridge.js","sources":["../../src/bridge/NativeWebViewBridge.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport type { WebView, WebViewMessageEvent } from 'react-native-webview';\nimport type React from 'react';\nimport { CancellableRequest } from './CancellableRequest';\nimport { ChunkedMessageHandler } from './ChunkedMessageHandler';\nimport { BridgeDebugger } from './BridgeDebugger';\nimport {\n BRIDGE_PROTOCOL_VERSION,\n BRIDGE_READY_ACTION,\n DEFAULT_BRIDGE_TIMEOUT_MS,\n MessageType,\n type BridgeErrorPayload,\n type BridgeMessage,\n type BridgeResponse,\n} from './types';\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype BatchConfig = {\n batchSize: number;\n batchDelayMs: number;\n};\n\ntype BridgeListener = (payload: any) => void;\n\n/**\n * Native-side type-safe WebView bridge with READY queue, timeouts,\n * cancellation, chunking, analytics batching, and iOS/Android quirks.\n */\nexport class NativeWebViewBridge {\n private webViewRef: React.RefObject<WebView | null>;\n\n private pendingRequests = new Map<string, PendingRequest>();\n\n private messageQueue: BridgeMessage[] = [];\n\n private isReady = false;\n\n private readonly chunker = new ChunkedMessageHandler();\n\n private readonly debugger = new BridgeDebugger();\n\n private batch: BridgeMessage[] = [];\n\n private batchTimeout?: ReturnType<typeof setTimeout>;\n\n private readonly batchConfig: BatchConfig = { batchSize: 10, batchDelayMs: 100 };\n\n private readonly listeners = new Map<string, Set<BridgeListener>>();\n\n constructor(webViewRef: React.RefObject<WebView | null>) {\n this.webViewRef = webViewRef;\n }\n\n on(event: string, listener: BridgeListener): this {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(listener);\n return this;\n }\n\n off(event: string, listener: BridgeListener): this {\n this.listeners.get(event)?.delete(listener);\n return this;\n }\n\n private emitLocal(event: string, payload?: unknown): void {\n const set = this.listeners.get(event);\n if (!set) return;\n set.forEach((listener) => {\n try {\n listener(payload);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`[Bridge] listener error for ${event}:`, error);\n }\n });\n }\n\n private removeAllListeners(): void {\n this.listeners.clear();\n }\n\n getDebugger(): BridgeDebugger {\n return this.debugger;\n }\n\n request<TRequest, TResponse>(\n action: string,\n payload: TRequest,\n timeoutMs = DEFAULT_BRIDGE_TIMEOUT_MS,\n ): CancellableRequest<TResponse> {\n const id = this.generateId();\n const message: BridgeMessage<TRequest> = {\n id,\n type: MessageType.REQUEST,\n action,\n payload,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const promise = new Promise<TResponse>((resolve, reject) => {\n timeoutId = setTimeout(() => {\n this.pendingRequests.delete(id);\n reject(new Error(`Request ${action} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n this.pendingRequests.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n timeout: timeoutId,\n });\n\n this.sendMessage(message);\n });\n\n const cancellable = new CancellableRequest<TResponse>(promise, () => {\n clearTimeout(timeoutId);\n this.pendingRequests.delete(id);\n this.sendEvent('request.cancelled', { requestId: id });\n });\n cancellable.addCleanup(() => clearTimeout(timeoutId));\n\n return cancellable;\n }\n\n /** One-way event toward the WebView (batches analytics.* / metrics.*). */\n sendEvent(action: string, payload?: unknown): void {\n const message: BridgeMessage = {\n id: this.generateId(),\n type: MessageType.EVENT,\n action,\n payload,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n\n if (this.shouldBatch(action)) {\n this.addToBatch(message);\n return;\n }\n\n this.sendMessage(message);\n }\n\n sendResponse(id: string, success: boolean, data?: unknown, error?: BridgeErrorPayload): void {\n const response: BridgeMessage = {\n id,\n type: MessageType.RESPONSE,\n action: 'response',\n payload: {\n id,\n success,\n data,\n error,\n } satisfies BridgeResponse,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n this.sendMessage(response);\n }\n\n handleMessage(event: WebViewMessageEvent): void {\n // Android may send string; iOS sometimes surfaces an object.\n const rawData = event.nativeEvent.data;\n const data = typeof rawData === 'string' ? rawData : JSON.stringify(rawData);\n\n try {\n const parsed: unknown = JSON.parse(data);\n\n if (this.chunker.isChunkEnvelope(parsed)) {\n const complete = this.chunker.handleChunk(parsed);\n if (complete) this.dispatchMessage(complete);\n return;\n }\n\n this.dispatchMessage(parsed as BridgeMessage);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[Bridge] Failed to parse message:', error);\n }\n }\n\n onBridgeReady(): void {\n this.isReady = true;\n while (this.messageQueue.length > 0) {\n const message = this.messageQueue.shift();\n if (message) this.sendMessage(message);\n }\n }\n\n dispose(): void {\n this.flushBatch();\n this.pendingRequests.forEach((pending) => {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Bridge disposed'));\n });\n this.pendingRequests.clear();\n this.messageQueue = [];\n this.isReady = false;\n this.removeAllListeners();\n }\n\n private dispatchMessage(message: BridgeMessage): void {\n this.debugger.logReceived(message);\n\n switch (message.type) {\n case MessageType.RESPONSE:\n this.handleResponse(message);\n break;\n case MessageType.REQUEST:\n this.handleRequest(message);\n break;\n case MessageType.EVENT:\n this.handleEvent(message);\n break;\n case MessageType.ERROR:\n this.handleError(message);\n break;\n default:\n break;\n }\n }\n\n private handleResponse(message: BridgeMessage): void {\n const payload = message.payload as BridgeResponse | undefined;\n const responseId = payload?.id ?? message.id;\n const pending = this.pendingRequests.get(responseId);\n if (!pending) return;\n\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(responseId);\n\n const success = payload?.success ?? true;\n if (success) {\n pending.resolve(payload?.data !== undefined ? payload.data : message.payload);\n } else {\n pending.reject(new Error(payload?.error?.message || 'Unknown error'));\n }\n }\n\n private handleRequest(message: BridgeMessage): void {\n this.emitLocal(`request:${message.action}`, message);\n }\n\n private handleEvent(message: BridgeMessage): void {\n if (message.action === BRIDGE_READY_ACTION) {\n this.onBridgeReady();\n }\n if (message.action === 'batch' && Array.isArray(message.payload)) {\n (message.payload as BridgeMessage[]).forEach((inner) => this.dispatchMessage(inner));\n return;\n }\n this.emitLocal(`event:${message.action}`, message.payload);\n }\n\n private handleError(message: BridgeMessage): void {\n const pending = this.pendingRequests.get(message.id);\n if (pending) {\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(message.id);\n const err = message.payload as BridgeErrorPayload | undefined;\n pending.reject(new Error(err?.message || 'Bridge error'));\n }\n this.emitLocal('bridge:error', message.payload);\n }\n\n private sendMessage(message: BridgeMessage): void {\n if (!this.isReady && message.action !== BRIDGE_READY_ACTION) {\n this.messageQueue.push(message);\n return;\n }\n\n this.debugger.logSent(message);\n\n const deliver = (serialized: string) => {\n const post = () => {\n this.webViewRef.current?.postMessage(serialized);\n };\n // iOS WebView is more reliable when postMessage is deferred one frame.\n if (Platform.OS === 'ios') {\n requestAnimationFrame(post);\n } else {\n post();\n }\n };\n\n this.chunker.sendChunked(message, deliver);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log(`[Bridge] Sent: ${message.action}`, message);\n }\n }\n\n private shouldBatch(action: string): boolean {\n return action.startsWith('analytics.') || action.startsWith('metrics.');\n }\n\n private addToBatch(message: BridgeMessage): void {\n this.batch.push(message);\n if (this.batch.length >= this.batchConfig.batchSize) {\n this.flushBatch();\n } else if (!this.batchTimeout) {\n this.batchTimeout = setTimeout(() => this.flushBatch(), this.batchConfig.batchDelayMs);\n }\n }\n\n private flushBatch(): void {\n if (this.batchTimeout) {\n clearTimeout(this.batchTimeout);\n this.batchTimeout = undefined;\n }\n if (this.batch.length === 0) return;\n\n const batchMessage: BridgeMessage = {\n id: this.generateId(),\n type: MessageType.EVENT,\n action: 'batch',\n payload: this.batch,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n this.batch = [];\n this.sendMessage(batchMessage);\n }\n\n private generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NativeWebViewBridge.js","sources":["../../src/bridge/NativeWebViewBridge.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport type { WebView, WebViewMessageEvent } from 'react-native-webview';\nimport type React from 'react';\nimport { CancellableRequest } from './CancellableRequest';\nimport { ChunkedMessageHandler } from './ChunkedMessageHandler';\nimport { BridgeDebugger } from './BridgeDebugger';\nimport {\n BRIDGE_PROTOCOL_VERSION,\n BRIDGE_READY_ACTION,\n DEFAULT_BRIDGE_TIMEOUT_MS,\n MessageType,\n type BridgeErrorPayload,\n type BridgeMessage,\n type BridgeResponse,\n} from './types';\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n};\n\ntype BatchConfig = {\n batchSize: number;\n batchDelayMs: number;\n};\n\ntype BridgeListener = (payload: any) => void;\n\n/**\n * Native-side type-safe WebView bridge with READY queue, timeouts,\n * cancellation, chunking, analytics batching, and iOS/Android quirks.\n */\nexport class NativeWebViewBridge {\n private webViewRef: React.RefObject<WebView | null>;\n\n private pendingRequests = new Map<string, PendingRequest>();\n\n private messageQueue: BridgeMessage[] = [];\n\n private isReady = false;\n\n private readonly chunker = new ChunkedMessageHandler();\n\n private readonly debugger = new BridgeDebugger();\n\n private batch: BridgeMessage[] = [];\n\n private batchTimeout?: ReturnType<typeof setTimeout>;\n\n private readonly batchConfig: BatchConfig = { batchSize: 10, batchDelayMs: 100 };\n\n private readonly listeners = new Map<string, Set<BridgeListener>>();\n\n private disposed = false;\n\n private readonly rafHandles = new Set<number>();\n\n constructor(webViewRef: React.RefObject<WebView | null>) {\n this.webViewRef = webViewRef;\n }\n\n on(event: string, listener: BridgeListener): this {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(listener);\n return this;\n }\n\n off(event: string, listener: BridgeListener): this {\n this.listeners.get(event)?.delete(listener);\n return this;\n }\n\n private emitLocal(event: string, payload?: unknown): void {\n const set = this.listeners.get(event);\n if (!set) return;\n set.forEach((listener) => {\n try {\n listener(payload);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(`[Bridge] listener error for ${event}:`, error);\n }\n });\n }\n\n private removeAllListeners(): void {\n this.listeners.clear();\n }\n\n getDebugger(): BridgeDebugger {\n return this.debugger;\n }\n\n request<TRequest, TResponse>(\n action: string,\n payload: TRequest,\n timeoutMs = DEFAULT_BRIDGE_TIMEOUT_MS,\n ): CancellableRequest<TResponse> {\n const id = this.generateId();\n const message: BridgeMessage<TRequest> = {\n id,\n type: MessageType.REQUEST,\n action,\n payload,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const promise = new Promise<TResponse>((resolve, reject) => {\n timeoutId = setTimeout(() => {\n this.pendingRequests.delete(id);\n reject(new Error(`Request ${action} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n this.pendingRequests.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n timeout: timeoutId,\n });\n\n this.sendMessage(message);\n });\n\n const cancellable = new CancellableRequest<TResponse>(promise, () => {\n clearTimeout(timeoutId);\n this.pendingRequests.delete(id);\n this.sendEvent('request.cancelled', { requestId: id });\n });\n cancellable.addCleanup(() => clearTimeout(timeoutId));\n\n return cancellable;\n }\n\n /** One-way event toward the WebView (batches analytics.* / metrics.*). */\n sendEvent(action: string, payload?: unknown): void {\n const message: BridgeMessage = {\n id: this.generateId(),\n type: MessageType.EVENT,\n action,\n payload,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n\n if (this.shouldBatch(action)) {\n this.addToBatch(message);\n return;\n }\n\n this.sendMessage(message);\n }\n\n sendResponse(id: string, success: boolean, data?: unknown, error?: BridgeErrorPayload): void {\n const response: BridgeMessage = {\n id,\n type: MessageType.RESPONSE,\n action: 'response',\n payload: {\n id,\n success,\n data,\n error,\n } satisfies BridgeResponse,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n this.sendMessage(response);\n }\n\n handleMessage(event: WebViewMessageEvent): void {\n if (this.disposed) return;\n // Android may send string; iOS sometimes surfaces an object.\n const rawData = event.nativeEvent.data;\n const data = typeof rawData === 'string' ? rawData : JSON.stringify(rawData);\n\n try {\n const parsed: unknown = JSON.parse(data);\n\n if (this.chunker.isChunkEnvelope(parsed)) {\n const complete = this.chunker.handleChunk(parsed);\n if (complete) this.dispatchMessage(complete);\n return;\n }\n\n this.dispatchMessage(parsed as BridgeMessage);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('[Bridge] Failed to parse message:', error);\n }\n }\n\n onBridgeReady(): void {\n this.isReady = true;\n while (this.messageQueue.length > 0) {\n const message = this.messageQueue.shift();\n if (message) this.sendMessage(message);\n }\n }\n\n dispose(): void {\n this.disposed = true;\n this.rafHandles.forEach((handle) => cancelAnimationFrame(handle));\n this.rafHandles.clear();\n this.flushBatch();\n this.pendingRequests.forEach((pending) => {\n clearTimeout(pending.timeout);\n pending.reject(new Error('Bridge disposed'));\n });\n this.pendingRequests.clear();\n this.messageQueue = [];\n this.isReady = false;\n this.removeAllListeners();\n }\n\n private dispatchMessage(message: BridgeMessage): void {\n this.debugger.logReceived(message);\n\n switch (message.type) {\n case MessageType.RESPONSE:\n this.handleResponse(message);\n break;\n case MessageType.REQUEST:\n this.handleRequest(message);\n break;\n case MessageType.EVENT:\n this.handleEvent(message);\n break;\n case MessageType.ERROR:\n this.handleError(message);\n break;\n default:\n break;\n }\n }\n\n private handleResponse(message: BridgeMessage): void {\n const payload = message.payload as BridgeResponse | undefined;\n const responseId = payload?.id ?? message.id;\n const pending = this.pendingRequests.get(responseId);\n if (!pending) return;\n\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(responseId);\n\n const success = payload?.success ?? true;\n if (success) {\n pending.resolve(payload?.data !== undefined ? payload.data : message.payload);\n } else {\n pending.reject(new Error(payload?.error?.message || 'Unknown error'));\n }\n }\n\n private handleRequest(message: BridgeMessage): void {\n this.emitLocal(`request:${message.action}`, message);\n }\n\n private handleEvent(message: BridgeMessage): void {\n if (message.action === BRIDGE_READY_ACTION) {\n this.onBridgeReady();\n }\n if (message.action === 'batch' && Array.isArray(message.payload)) {\n (message.payload as BridgeMessage[]).forEach((inner) => this.dispatchMessage(inner));\n return;\n }\n this.emitLocal(`event:${message.action}`, message.payload);\n }\n\n private handleError(message: BridgeMessage): void {\n const pending = this.pendingRequests.get(message.id);\n if (pending) {\n clearTimeout(pending.timeout);\n this.pendingRequests.delete(message.id);\n const err = message.payload as BridgeErrorPayload | undefined;\n pending.reject(new Error(err?.message || 'Bridge error'));\n }\n this.emitLocal('bridge:error', message.payload);\n }\n\n private sendMessage(message: BridgeMessage): void {\n if (this.disposed) return;\n if (!this.isReady && message.action !== BRIDGE_READY_ACTION) {\n this.messageQueue.push(message);\n return;\n }\n\n this.debugger.logSent(message);\n\n const deliver = (serialized: string) => {\n if (this.disposed) return;\n const post = () => {\n if (this.disposed) return;\n this.webViewRef.current?.postMessage(serialized);\n };\n // iOS WebView is more reliable when postMessage is deferred one frame.\n if (Platform.OS === 'ios') {\n const handle = requestAnimationFrame(() => {\n this.rafHandles.delete(handle);\n post();\n });\n this.rafHandles.add(handle);\n } else {\n post();\n }\n };\n\n this.chunker.sendChunked(message, deliver);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log(`[Bridge] Sent: ${message.action}`, message);\n }\n }\n\n private shouldBatch(action: string): boolean {\n return action.startsWith('analytics.') || action.startsWith('metrics.');\n }\n\n private addToBatch(message: BridgeMessage): void {\n this.batch.push(message);\n if (this.batch.length >= this.batchConfig.batchSize) {\n this.flushBatch();\n } else if (!this.batchTimeout) {\n this.batchTimeout = setTimeout(() => this.flushBatch(), this.batchConfig.batchDelayMs);\n }\n }\n\n private flushBatch(): void {\n if (this.batchTimeout) {\n clearTimeout(this.batchTimeout);\n this.batchTimeout = undefined;\n }\n if (this.batch.length === 0) return;\n\n const batchMessage: BridgeMessage = {\n id: this.generateId(),\n type: MessageType.EVENT,\n action: 'batch',\n payload: this.batch,\n timestamp: Date.now(),\n version: BRIDGE_PROTOCOL_VERSION,\n };\n this.batch = [];\n this.sendMessage(batchMessage);\n }\n\n private generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,52 @@
|
|
|
1
|
-
import {jsx}from'react/jsx-runtime';import {
|
|
1
|
+
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {View,StyleSheet,Platform}from'react-native';import Animated,{useAnimatedKeyboard,useSharedValue,useAnimatedStyle}from'react-native-reanimated';const OPEN_GAP = 8;
|
|
2
|
+
function KeyboardAwareScreen({
|
|
3
|
+
children,
|
|
4
|
+
style
|
|
5
|
+
}) {
|
|
6
|
+
return /* @__PURE__ */ jsx(View, { style: [styles.flex, style], children });
|
|
7
|
+
}
|
|
8
|
+
function keyboardLift(height, closedPadding) {
|
|
9
|
+
"worklet";
|
|
10
|
+
if (Platform.OS === "android") return 0;
|
|
11
|
+
if (height <= 0) return 0;
|
|
12
|
+
return Math.max(0, height - closedPadding + OPEN_GAP);
|
|
13
|
+
}
|
|
2
14
|
function KeyboardComposerDock({
|
|
3
15
|
children,
|
|
4
|
-
closedInset
|
|
5
|
-
keyboardVisible = false
|
|
16
|
+
closedInset
|
|
6
17
|
}) {
|
|
7
18
|
const keyboard = useAnimatedKeyboard();
|
|
8
19
|
const closedPadding = Math.max(closedInset, OPEN_GAP);
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
paddingBottom:
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
return /* @__PURE__ */ jsx(Animated.View, { style: [styles.dock, Platform.OS === "android" ? {
|
|
27
|
-
paddingBottom: keyboardVisible ? OPEN_GAP : closedPadding
|
|
28
|
-
} : null, dockStyle], children });
|
|
20
|
+
const restHeight = useSharedValue(120);
|
|
21
|
+
const dockStyle = useAnimatedStyle(() => ({
|
|
22
|
+
transform: [{
|
|
23
|
+
translateY: -keyboardLift(keyboard.height.value, closedPadding)
|
|
24
|
+
}]
|
|
25
|
+
}));
|
|
26
|
+
const slotStyle = useAnimatedStyle(() => ({
|
|
27
|
+
height: restHeight.value
|
|
28
|
+
}));
|
|
29
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Animated.View, { pointerEvents: "none", style: slotStyle }),
|
|
31
|
+
/* @__PURE__ */ jsx(Animated.View, { onLayout: (event) => {
|
|
32
|
+
restHeight.value = event.nativeEvent.layout.height;
|
|
33
|
+
}, style: [styles.dock, {
|
|
34
|
+
paddingBottom: closedPadding
|
|
35
|
+
}, dockStyle], children })
|
|
36
|
+
] });
|
|
29
37
|
}
|
|
30
38
|
const styles = StyleSheet.create({
|
|
39
|
+
flex: {
|
|
40
|
+
flex: 1
|
|
41
|
+
},
|
|
31
42
|
dock: {
|
|
43
|
+
position: "absolute",
|
|
44
|
+
left: 0,
|
|
45
|
+
right: 0,
|
|
46
|
+
bottom: 0,
|
|
32
47
|
width: "100%",
|
|
33
48
|
alignItems: "center",
|
|
34
|
-
zIndex: 20
|
|
49
|
+
zIndex: 20,
|
|
50
|
+
elevation: 20
|
|
35
51
|
}
|
|
36
|
-
});export{KeyboardComposerDock};//# sourceMappingURL=KeyboardComposerDock.js.map
|
|
52
|
+
});export{KeyboardAwareScreen,KeyboardComposerDock};//# sourceMappingURL=KeyboardComposerDock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyboardComposerDock.js","sources":["../../src/components/KeyboardComposerDock.tsx"],"sourcesContent":["import React
|
|
1
|
+
{"version":3,"file":"KeyboardComposerDock.js","sources":["../../src/components/KeyboardComposerDock.tsx"],"sourcesContent":["import React from 'react';\nimport { Platform, StyleSheet, View, type StyleProp, type ViewStyle } from 'react-native';\nimport Animated, { useAnimatedKeyboard, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';\n\nconst OPEN_GAP = 8;\n\nexport type KeyboardComposerDockProps = {\n children: React.ReactNode;\n /** Home-indicator inset applied when the keyboard is closed. */\n closedInset: number;\n /** Kept for call-site compatibility; lift is not gated on JS keyboard state. */\n keyboardVisible?: boolean;\n};\n\nexport function KeyboardAwareScreen({ children, style }: { children: React.ReactNode; style?: StyleProp<ViewStyle> }) {\n return <View style={[styles.flex, style]}>{children}</View>;\n}\n\nfunction keyboardLift(height: number, closedPadding: number): number {\n 'worklet';\n if (Platform.OS === 'android') return 0;\n if (height <= 0) return 0;\n return Math.max(0, height - closedPadding + OPEN_GAP);\n}\n\n/**\n * Composer rides the keyboard with a UI-thread `translateY`, like Manus.\n *\n * A growing-height spacer used to lag the iOS keyboard (Yoga layout), so the\n * field sat behind the keys and then jumped — the blink. Transform stays in\n * lock-step with `useAnimatedKeyboard().height` and does not relayout the input.\n */\nexport function KeyboardComposerDock({ children, closedInset }: KeyboardComposerDockProps) {\n const keyboard = useAnimatedKeyboard();\n const closedPadding = Math.max(closedInset, OPEN_GAP);\n const restHeight = useSharedValue(120);\n\n const dockStyle = useAnimatedStyle(() => ({\n transform: [{ translateY: -keyboardLift(keyboard.height.value, closedPadding) }],\n }));\n\n const slotStyle = useAnimatedStyle(() => ({\n height: restHeight.value,\n }));\n\n return (\n <>\n <Animated.View pointerEvents=\"none\" style={slotStyle} />\n <Animated.View\n onLayout={(event) => {\n restHeight.value = event.nativeEvent.layout.height;\n }}\n style={[styles.dock, { paddingBottom: closedPadding }, dockStyle]}\n >\n {children}\n </Animated.View>\n </>\n );\n}\n\nconst styles = StyleSheet.create({\n flex: {\n flex: 1,\n },\n dock: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n width: '100%',\n alignItems: 'center',\n zIndex: 20,\n elevation: 20,\n },\n});\n"],"names":[],"mappings":"yMAGA,MAAM,QAAW,GAAA,CAAA;AAQV,SAAS,mBAAoB,CAAA;AAAA,EAClC,QAAA;AAAA,EACA;AACF,CAGG,EAAA;AACD,EAAO,uBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,KAAK,GAAI,QAAS,EAAA,CAAA;AACtD;AACA,SAAS,YAAA,CAAa,QAAgB,aAA+B,EAAA;AACnE,EAAA,SAAA;AAEA,EAAI,IAAA,QAAA,CAAS,EAAO,KAAA,SAAA,EAAkB,OAAA,CAAA;AACtC,EAAI,IAAA,MAAA,IAAU,GAAU,OAAA,CAAA;AACxB,EAAA,OAAO,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,MAAA,GAAS,gBAAgB,QAAQ,CAAA;AACtD;AASO,SAAS,oBAAqB,CAAA;AAAA,EACnC,QAAA;AAAA,EACA;AACF,CAA8B,EAAA;AAC5B,EAAA,MAAM,WAAW,mBAAoB,EAAA;AACrC,EAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,GAAI,CAAA,WAAA,EAAa,QAAQ,CAAA;AACpD,EAAM,MAAA,UAAA,GAAa,eAAe,GAAG,CAAA;AACrC,EAAM,MAAA,SAAA,GAAY,iBAAiB,OAAO;AAAA,IACxC,WAAW,CAAC;AAAA,MACV,YAAY,CAAC,YAAA,CAAa,QAAS,CAAA,MAAA,CAAO,OAAO,aAAa;AAAA,KAC/D;AAAA,GACD,CAAA,CAAA;AACF,EAAM,MAAA,SAAA,GAAY,iBAAiB,OAAO;AAAA,IACxC,QAAQ,UAAW,CAAA;AAAA,GACnB,CAAA,CAAA;AACF,EAAA,uBACU,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAS,IAAT,EAAA,EAAc,aAAc,EAAA,MAAA,EAAO,OAAO,SAAW,EAAA,CAAA;AAAA,oBACrD,GAAA,CAAA,QAAA,CAAS,IAAT,EAAA,EAAc,UAAU,CAAS,KAAA,KAAA;AACxC,MAAW,UAAA,CAAA,KAAA,GAAQ,KAAM,CAAA,WAAA,CAAY,MAAO,CAAA,MAAA;AAAA,KAC3C,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,IAAM,EAAA;AAAA,MACtB,aAAe,EAAA;AAAA,KACjB,EAAG,SAAS,CAAA,EACC,QACL,EAAA;AAAA,GACJ,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,QAAU,EAAA,UAAA;AAAA,IACV,IAAM,EAAA,CAAA;AAAA,IACN,KAAO,EAAA,CAAA;AAAA,IACP,MAAQ,EAAA,CAAA;AAAA,IACR,KAAO,EAAA,MAAA;AAAA,IACP,UAAY,EAAA,QAAA;AAAA,IACZ,MAAQ,EAAA,EAAA;AAAA,IACR,SAAW,EAAA;AAAA;AAEf,CAAC,CAAA"}
|
package/lib/compute.js
CHANGED
|
@@ -42,7 +42,8 @@ const yantraMobilePageStore = [{
|
|
|
42
42
|
gestureEnabled: false,
|
|
43
43
|
swipeEnabled: false,
|
|
44
44
|
animation: "fade",
|
|
45
|
-
animationTypeForReplace: "pop"
|
|
45
|
+
animationTypeForReplace: "pop",
|
|
46
|
+
keyboardHandlingEnabled: false
|
|
46
47
|
}
|
|
47
48
|
},
|
|
48
49
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/Home/index.js",
|
|
@@ -89,7 +90,8 @@ const yantraMobilePageStore = [{
|
|
|
89
90
|
gestureEnabled: false,
|
|
90
91
|
swipeEnabled: false,
|
|
91
92
|
animation: "fade",
|
|
92
|
-
animationTypeForReplace: "pop"
|
|
93
|
+
animationTypeForReplace: "pop",
|
|
94
|
+
keyboardHandlingEnabled: false
|
|
93
95
|
}
|
|
94
96
|
},
|
|
95
97
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/Chat/index.js",
|
|
@@ -133,7 +135,8 @@ const yantraMobilePageStore = [{
|
|
|
133
135
|
gestureEnabled: false,
|
|
134
136
|
swipeEnabled: false,
|
|
135
137
|
animation: "fade",
|
|
136
|
-
animationTypeForReplace: "pop"
|
|
138
|
+
animationTypeForReplace: "pop",
|
|
139
|
+
keyboardHandlingEnabled: false
|
|
137
140
|
}
|
|
138
141
|
},
|
|
139
142
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/ChatHistory/index.js",
|
|
@@ -182,7 +185,8 @@ const yantraMobilePageStore = [{
|
|
|
182
185
|
gestureEnabled: false,
|
|
183
186
|
swipeEnabled: false,
|
|
184
187
|
animation: "fade",
|
|
185
|
-
animationTypeForReplace: "pop"
|
|
188
|
+
animationTypeForReplace: "pop",
|
|
189
|
+
keyboardHandlingEnabled: false
|
|
186
190
|
}
|
|
187
191
|
},
|
|
188
192
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/Apps/index.js",
|
|
@@ -237,7 +241,8 @@ const yantraMobilePageStore = [{
|
|
|
237
241
|
gestureEnabled: false,
|
|
238
242
|
swipeEnabled: false,
|
|
239
243
|
animation: "fade",
|
|
240
|
-
animationTypeForReplace: "pop"
|
|
244
|
+
animationTypeForReplace: "pop",
|
|
245
|
+
keyboardHandlingEnabled: false
|
|
241
246
|
}
|
|
242
247
|
},
|
|
243
248
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/CanvasBoard/index.js",
|
|
@@ -291,7 +296,8 @@ const yantraMobilePageStore = [{
|
|
|
291
296
|
gestureEnabled: false,
|
|
292
297
|
swipeEnabled: false,
|
|
293
298
|
animation: "fade",
|
|
294
|
-
animationTypeForReplace: "pop"
|
|
299
|
+
animationTypeForReplace: "pop",
|
|
300
|
+
keyboardHandlingEnabled: false
|
|
295
301
|
}
|
|
296
302
|
},
|
|
297
303
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/Characters/index.js",
|
|
@@ -344,7 +350,8 @@ const yantraMobilePageStore = [{
|
|
|
344
350
|
gestureEnabled: false,
|
|
345
351
|
swipeEnabled: false,
|
|
346
352
|
animation: "fade",
|
|
347
|
-
animationTypeForReplace: "pop"
|
|
353
|
+
animationTypeForReplace: "pop",
|
|
354
|
+
keyboardHandlingEnabled: false
|
|
348
355
|
}
|
|
349
356
|
},
|
|
350
357
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/WebBuilder/index.js",
|
package/lib/compute.js.map
CHANGED
|
@@ -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 },\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 },\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 },\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 },\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 },\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 },\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 },\n },\n },\n];\n\nconst selectedRoutes = ['home', 'chat', 'chathistory', 'apps', 'webbuilder', 'canvas-native', 'characters-native'];\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\nconst selectedRoutes = ['home', 'chat', 'chathistory', 'apps', 'webbuilder', 'canvas-native', 'characters-native'];\n\nconst filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"uFAGO,MAAM,wBAAwC,CAAC;AAAA,EACpD,GAAK,EAAA,MAAA;AAAA,EACL,IAAM,EAAA,kBAAA;AAAA,EACN,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA,IAAA;AAAA,EACP,KAAO,EAAA,IAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,MAAA;AAAA,EACf,SAAA,EAAW,MAAM,OAAO,yBAAgB,CAAA;AAAA,EACxC,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,IAAA;AAAA,MACZ,UAAY,EAAA,IAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,WAAa,EAAA,IAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,gBAAkB,EAAA,IAAA;AAAA,MAClB,OAAS,EAAA;AAAA,KACX;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,QAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA,MACA,WAAa,EAAA,MAAA;AAAA,MACb,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAG,EAAA;AAAA,EACD,GAAK,EAAA,MAAA;AAAA,EACL,IAAM,EAAA,2BAAA;AAAA,EACN,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA,KAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,SAAA,EAAW,MAAM,OAAO,yBAAgB,CAAA;AAAA,EACxC,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,KAAA;AAAA,MACZ,UAAY,EAAA,KAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,IAAA;AAAA,MACV,WAAa,EAAA,IAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,SAAW,EAAA,IAAA;AAAA,MACX,OAAS,EAAA;AAAA,KACX;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,QAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA,MACA,WAAa,EAAA,MAAA;AAAA,MACb,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAG,EAAA;AAAA,EACD,GAAK,EAAA,aAAA;AAAA,EACL,IAAM,EAAA,uBAAA;AAAA,EACN,IAAM,EAAA,aAAA;AAAA,EACN,KAAO,EAAA,KAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,SAAA,EAAW,MAAM,OAAO,gCAAuB,CAAA;AAAA,EAC/C,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,KAAA;AAAA,MACZ,UAAY,EAAA,KAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,IAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACX;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,cAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA,MACA,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAG,EAAA;AAAA,EACD,GAAK,EAAA,MAAA;AAAA,EACL,IAAM,EAAA,gBAAA;AAAA,EACN,IAAM,EAAA,MAAA;AAAA,EACN,KAAO,EAAA,IAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,MAAA;AAAA,EACf,SAAA,EAAW,MAAM,OAAO,yBAAgB,CAAA;AAAA,EACxC,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,KAAA;AAAA,MACZ,UAAY,EAAA,KAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,IAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,OAAS,EAAA;AAAA,KACX;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,MAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA,MACA,eAAiB,EAAA;AAAA,QACf,OAAS,EAAA;AAAA,OACX;AAAA,MACA,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAG,EAAA;AAAA,EACD,GAAK,EAAA,eAAA;AAAA,EACL,IAAM,EAAA,2BAAA;AAAA,EACN,IAAM,EAAA,cAAA;AAAA,EACN,KAAO,EAAA,IAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,MAAA;AAAA;AAAA;AAAA;AAAA,EAIf,SAAA,EAAW,MAAM,OAAO,gCAAuB,CAAA;AAAA,EAC/C,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,KAAA;AAAA,MACZ,UAAY,EAAA,KAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,IAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA;AAAA,KACT;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,QAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA;AAAA,MAEA,eAAiB,EAAA;AAAA,QACf,OAAS,EAAA;AAAA,OACX;AAAA,MACA,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAG,EAAA;AAAA,EACD,GAAK,EAAA,mBAAA;AAAA,EACL,IAAM,EAAA,+BAAA;AAAA,EACN,IAAM,EAAA,kBAAA;AAAA,EACN,KAAO,EAAA,IAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,MAAA;AAAA;AAAA;AAAA,EAGf,SAAA,EAAW,MAAM,OAAO,+BAAsB,CAAA;AAAA,EAC9C,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,KAAA;AAAA,MACZ,UAAY,EAAA,KAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,IAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA;AAAA,KACT;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,QAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA;AAAA,MAEA,eAAiB,EAAA;AAAA,QACf,OAAS,EAAA;AAAA,OACX;AAAA,MACA,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAG,EAAA;AAAA,EACD,GAAK,EAAA,YAAA;AAAA,EACL,IAAM,EAAA,mCAAA;AAAA,EACN,IAAM,EAAA,YAAA;AAAA,EACN,KAAO,EAAA,IAAA;AAAA,EACP,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,IAAA;AAAA,EACZ,IAAM,EAAA,IAAA;AAAA,EACN,aAAe,EAAA,MAAA;AAAA,EACf,SAAA,EAAW,MAAM,OAAO,+BAAsB,CAAA;AAAA,EAC9C,WAAa,EAAA;AAAA,IACX,gBAAA,EAAkB,MAAM,OAAO,mDAAgD;AAAA,GACjF;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,IAAM,EAAA,kBAAA;AAAA,IACN,SAAW,EAAA,gCAAA;AAAA,IACX,KAAO,EAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,UAAY,EAAA,KAAA;AAAA,MACZ,UAAY,EAAA,KAAA;AAAA,MACZ,YAAc,EAAA,KAAA;AAAA,MACd,QAAU,EAAA,IAAA;AAAA,MACV,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA,KAAA;AAAA,MACb,WAAa,EAAA;AAAA;AACf,GACF;AAAA,EACA,KAAO,EAAA;AAAA,IACL,aAAe,EAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,GAAK,EAAA,IAAA;AAAA,MACL,SAAW,EAAA,IAAA;AAAA,MACX,SAAW,EAAA,IAAA;AAAA,MACX,OAAS,EAAA;AAAA,KACX;AAAA,IACA,OAAS,EAAA;AAAA,MACP,KAAO,EAAA,aAAA;AAAA,MACP,eAAiB,EAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACd;AAAA;AAAA,MAEA,eAAiB,EAAA;AAAA,QACf,OAAS,EAAA;AAAA,OACX;AAAA,MACA,gBAAkB,EAAA,MAAA;AAAA,MAClB,cAAgB,EAAA,KAAA;AAAA,MAChB,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,MAAA;AAAA,MACX,uBAAyB,EAAA,KAAA;AAAA,MACzB,uBAAyB,EAAA;AAAA;AAC3B;AAEJ,CAAC;AACD,MAAM,cAAA,GAAiB,CAAC,MAAQ,EAAA,MAAA,EAAQ,eAAe,MAAQ,EAAA,YAAA,EAAc,iBAAiB,mBAAmB,CAAA;AAC3G,MAAA,cAAA,GAAiB,iBAAkB,CAAA,qBAAA,EAAuB,cAAc"}
|
|
@@ -54,6 +54,15 @@ function AppsCatalog({
|
|
|
54
54
|
channelId,
|
|
55
55
|
appTitle: app.label
|
|
56
56
|
};
|
|
57
|
+
if (app.nativeRoute === "characters-native") {
|
|
58
|
+
navigation.dispatch(CommonActions.navigate({
|
|
59
|
+
name: "MainStack.CharactersNative",
|
|
60
|
+
params: __spreadProps(__spreadValues({}, params), {
|
|
61
|
+
manifestUrl: config.CHARACTERS_NATIVE_MANIFEST_URL
|
|
62
|
+
})
|
|
63
|
+
}));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
57
66
|
if (app.nativeRoute === "canvas-native") {
|
|
58
67
|
navigation.dispatch(CommonActions.navigate({
|
|
59
68
|
name: "MainStack.CanvasNative",
|
|
@@ -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 === '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 === '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 native character\n // studio, never a chat with the tile's prompt.\n navigation.dispatch(\n CommonActions.navigate({\n name: 'MainStack.CharactersNative',\n params: {\n ...params,\n manifestUrl: config.CHARACTERS_NATIVE_MANIFEST_URL,\n },\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 === '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,4 +1,4 @@
|
|
|
1
|
-
import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useMemo,useCallback,useEffect,memo}from'react';import {FlatList,StyleSheet,View,Text}from'react-native';import Markdown from'react-native-markdown-display';import {shouldRenderUserTranscriptTurn,displayUserMessageText}from'../attachments/displayUserMessageText.js';import {MessageAttachmentPreviews}from'../attachments/MessageAttachmentPreviews.js';var __defProp = Object.defineProperty;
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useRef,useMemo,useCallback,useEffect,memo}from'react';import {Keyboard,FlatList,StyleSheet,View,Text}from'react-native';import Markdown from'react-native-markdown-display';import {shouldRenderUserTranscriptTurn,displayUserMessageText}from'../attachments/displayUserMessageText.js';import {MessageAttachmentPreviews}from'../attachments/MessageAttachmentPreviews.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -23,8 +23,7 @@ function ChatTranscript({
|
|
|
23
23
|
streamingContent,
|
|
24
24
|
renderMessageActions,
|
|
25
25
|
listContentStyle,
|
|
26
|
-
isDark = false
|
|
27
|
-
keyboardVisible = false
|
|
26
|
+
isDark = false
|
|
28
27
|
}) {
|
|
29
28
|
const listRef = useRef(null);
|
|
30
29
|
const stickToBottomRef = useRef(true);
|
|
@@ -56,9 +55,12 @@ function ChatTranscript({
|
|
|
56
55
|
return () => clearTimeout(t);
|
|
57
56
|
}, [rows.length, streamingContent == null ? void 0 : streamingContent.length, scrollToLatest]);
|
|
58
57
|
useEffect(() => {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
const show = Keyboard.addListener("keyboardDidShow", () => {
|
|
59
|
+
if (!stickToBottomRef.current) return;
|
|
60
|
+
scrollToLatest(true);
|
|
61
|
+
});
|
|
62
|
+
return () => show.remove();
|
|
63
|
+
}, [scrollToLatest]);
|
|
62
64
|
const handleScroll = useCallback((e) => {
|
|
63
65
|
const {
|
|
64
66
|
contentOffset,
|
|
@@ -79,7 +81,7 @@ function ChatTranscript({
|
|
|
79
81
|
const renderItem = useCallback(({
|
|
80
82
|
item
|
|
81
83
|
}) => /* @__PURE__ */ jsx(TranscriptRowView, { item, isDark, renderMessageActions: item.streaming ? void 0 : renderMessageActions }), [isDark, renderMessageActions]);
|
|
82
|
-
return /* @__PURE__ */ jsx(FlatList, { ref: listRef, data: rows, keyExtractor: (item) => item.id, renderItem, extraData:
|
|
84
|
+
return /* @__PURE__ */ jsx(FlatList, { ref: listRef, data: rows, keyExtractor: (item) => item.id, renderItem, extraData: streamingContent, initialNumToRender: 12, maxToRenderPerBatch: 8, updateCellsBatchingPeriod: 50, windowSize: 7, onScroll: handleScroll, onContentSizeChange: handleContentSizeChange, onLayout: () => {
|
|
83
85
|
if (stickToBottomRef.current) scrollToLatest(false);
|
|
84
86
|
}, scrollEventThrottle: 16, keyboardShouldPersistTaps: "always", keyboardDismissMode: "none", automaticallyAdjustKeyboardInsets: false, automaticallyAdjustContentInsets: false, contentInsetAdjustmentBehavior: "never", contentContainerStyle: [styles.listContent, listContentStyle], style: styles.list });
|
|
85
87
|
}
|
|
@@ -102,7 +104,9 @@ const TranscriptRowView = memo(function TranscriptRowView2({
|
|
|
102
104
|
const codeBg = isDark ? "#1e293b" : "#f3f4f6";
|
|
103
105
|
return /* @__PURE__ */ jsxs(View, { style: styles.assistantCol, children: [
|
|
104
106
|
attachments.length > 0 ? /* @__PURE__ */ jsx(MessageAttachmentPreviews, { attachments, align: "start", isDark }) : null,
|
|
105
|
-
text ? /* @__PURE__ */ jsx(
|
|
107
|
+
text ? item.streaming ? /* @__PURE__ */ jsx(Text, { style: [styles.assistantStreamText, {
|
|
108
|
+
color: markdownColor
|
|
109
|
+
}], children: text }) : /* @__PURE__ */ jsx(Markdown, { style: {
|
|
106
110
|
body: {
|
|
107
111
|
color: markdownColor,
|
|
108
112
|
fontSize: 15,
|
|
@@ -199,5 +203,9 @@ const styles = StyleSheet.create({
|
|
|
199
203
|
alignItems: "flex-start",
|
|
200
204
|
marginBottom: 8,
|
|
201
205
|
paddingHorizontal: 4
|
|
206
|
+
},
|
|
207
|
+
assistantStreamText: {
|
|
208
|
+
fontSize: 15,
|
|
209
|
+
lineHeight: 22
|
|
202
210
|
}
|
|
203
211
|
});export{ChatTranscript};//# sourceMappingURL=ChatTranscript.js.map
|