@adminide-stack/yantra-mobile 12.0.121 → 12.0.123-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/lib/features/apps/appArt.js +1 -1
  2. package/lib/features/apps/appArt.js.map +1 -1
  3. package/lib/features/apps/mobileAppCatalog.js +15 -11
  4. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  5. package/lib/features/canvas/CanvasAgentChatPane.js +82 -20
  6. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
  7. package/lib/features/canvas/CanvasBoardsGrid.js +291 -100
  8. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  9. package/lib/features/canvas/CanvasEditToolsPanel.js +105 -12
  10. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
  11. package/lib/features/canvas/CanvasExperience.js +266 -68
  12. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  13. package/lib/features/canvas/CanvasGeneratePanel.js +204 -66
  14. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
  15. package/lib/features/canvas/CanvasLibrarySheet.js +31 -13
  16. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
  17. package/lib/features/canvas/CanvasModelPicker.js +176 -0
  18. package/lib/features/canvas/CanvasModelPicker.js.map +1 -0
  19. package/lib/features/canvas/CanvasTasksPanel.js +325 -29
  20. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
  21. package/lib/features/canvas/CanvasTemplatesPanel.js +5 -4
  22. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
  23. package/lib/features/canvas/CanvasToolDock.js +137 -61
  24. package/lib/features/canvas/CanvasToolDock.js.map +1 -1
  25. package/lib/features/canvas/FrameExtractorExperience.js +33 -2
  26. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
  27. package/lib/features/canvas/GeneratorReferenceSlots.js +197 -0
  28. package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -0
  29. package/lib/features/canvas/NativeCanvasViewer.js +89 -11
  30. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
  31. package/lib/features/canvas/PromoContextFields.js +55 -2
  32. package/lib/features/canvas/PromoContextFields.js.map +1 -1
  33. package/lib/features/canvas/SetStudioExperience.js +323 -13
  34. package/lib/features/canvas/SetStudioExperience.js.map +1 -1
  35. package/lib/features/canvas/VideoEditExperience.js +1 -53
  36. package/lib/features/canvas/VideoEditExperience.js.map +1 -1
  37. package/lib/features/canvas/VideoEditorExperience.js +697 -506
  38. package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
  39. package/lib/features/canvas/VideoGeneratorExperience.js +22 -5
  40. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
  41. package/lib/features/canvas/canvasAgentChat.js +125 -11
  42. package/lib/features/canvas/canvasAgentChat.js.map +1 -1
  43. package/lib/features/canvas/canvasCore.js +117 -12
  44. package/lib/features/canvas/canvasCore.js.map +1 -1
  45. package/lib/features/canvas/canvasEditOps.js +148 -111
  46. package/lib/features/canvas/canvasEditOps.js.map +1 -1
  47. package/lib/features/canvas/canvasTaskSync.js +235 -0
  48. package/lib/features/canvas/canvasTaskSync.js.map +1 -0
  49. package/lib/features/canvas/canvasTasks.js +98 -11
  50. package/lib/features/canvas/canvasTasks.js.map +1 -1
  51. package/lib/features/canvas/createTiles.js +247 -0
  52. package/lib/features/canvas/createTiles.js.map +1 -0
  53. package/lib/features/canvas/deepLinks.js +83 -0
  54. package/lib/features/canvas/deepLinks.js.map +1 -0
  55. package/lib/features/canvas/frameExtract.js +13 -1
  56. package/lib/features/canvas/frameExtract.js.map +1 -1
  57. package/lib/features/canvas/generationModels.js +36 -8
  58. package/lib/features/canvas/generationModels.js.map +1 -1
  59. package/lib/features/canvas/generatorCommands.js +106 -0
  60. package/lib/features/canvas/generatorCommands.js.map +1 -0
  61. package/lib/features/canvas/generatorReferences.js +82 -0
  62. package/lib/features/canvas/generatorReferences.js.map +1 -0
  63. package/lib/features/canvas/homeWork.js +74 -0
  64. package/lib/features/canvas/homeWork.js.map +1 -0
  65. package/lib/features/canvas/linksRpc.js +130 -0
  66. package/lib/features/canvas/linksRpc.js.map +1 -0
  67. package/lib/features/canvas/mediaRecheck.js +176 -0
  68. package/lib/features/canvas/mediaRecheck.js.map +1 -0
  69. package/lib/features/canvas/mediaUrls.js +258 -0
  70. package/lib/features/canvas/mediaUrls.js.map +1 -0
  71. package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
  72. package/lib/features/canvas/promoProjectImport.js +80 -13
  73. package/lib/features/canvas/promoProjectImport.js.map +1 -1
  74. package/lib/features/canvas/promoVideo.js +106 -15
  75. package/lib/features/canvas/promoVideo.js.map +1 -1
  76. package/lib/features/canvas/reframe.js +228 -0
  77. package/lib/features/canvas/reframe.js.map +1 -0
  78. package/lib/features/canvas/serverTasks.js +697 -0
  79. package/lib/features/canvas/serverTasks.js.map +1 -0
  80. package/lib/features/canvas/set/SetViewportWebView.js +207 -28
  81. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
  82. package/lib/features/canvas/set/agent/prompt.js +66 -0
  83. package/lib/features/canvas/set/agent/prompt.js.map +1 -0
  84. package/lib/features/canvas/set/agent/setOps.js +203 -0
  85. package/lib/features/canvas/set/agent/setOps.js.map +1 -0
  86. package/lib/features/canvas/set/agent/setTurn.js +128 -0
  87. package/lib/features/canvas/set/agent/setTurn.js.map +1 -0
  88. package/lib/features/canvas/set/agent/snapshot.js +43 -0
  89. package/lib/features/canvas/set/agent/snapshot.js.map +1 -0
  90. package/lib/features/canvas/set/agent/tools.js +580 -0
  91. package/lib/features/canvas/set/agent/tools.js.map +1 -0
  92. package/lib/features/canvas/set/setProject.js +43 -4
  93. package/lib/features/canvas/set/setProject.js.map +1 -1
  94. package/lib/features/canvas/set/supplyLibrary.js +397 -0
  95. package/lib/features/canvas/set/supplyLibrary.js.map +1 -0
  96. package/lib/features/canvas/storageLibrary.js +113 -52
  97. package/lib/features/canvas/storageLibrary.js.map +1 -1
  98. package/lib/features/canvas/studioCatalog.js +15 -2
  99. package/lib/features/canvas/studioCatalog.js.map +1 -1
  100. package/lib/features/canvas/studioLooks.js +1 -8
  101. package/lib/features/canvas/studioLooks.js.map +1 -1
  102. package/lib/features/canvas/useBoardMediaRefresh.js +66 -0
  103. package/lib/features/canvas/useBoardMediaRefresh.js.map +1 -0
  104. package/lib/features/canvas/useMediaSource.js +84 -0
  105. package/lib/features/canvas/useMediaSource.js.map +1 -0
  106. package/lib/features/canvas/video3d.js +11 -10
  107. package/lib/features/canvas/video3d.js.map +1 -1
  108. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +46 -0
  109. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -0
  110. package/lib/features/canvas/videoEditor/ExportTaskCard.js +134 -0
  111. package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -0
  112. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +45 -7
  113. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
  114. package/lib/features/canvas/videoEditor/agent/agentLoop.js +4 -2
  115. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
  116. package/lib/features/canvas/videoEditor/agent/attachments.js +304 -0
  117. package/lib/features/canvas/videoEditor/agent/attachments.js.map +1 -0
  118. package/lib/features/canvas/videoEditor/agent/brainClient.js +3 -2
  119. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
  120. package/lib/features/canvas/videoEditor/agent/cutTools.js +207 -7
  121. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
  122. package/lib/features/canvas/videoEditor/blurBox.js +34 -0
  123. package/lib/features/canvas/videoEditor/blurBox.js.map +1 -0
  124. package/lib/features/canvas/videoEditor/compileTimeline.js +668 -0
  125. package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -0
  126. package/lib/features/canvas/videoEditor/editorModel.js +56 -22
  127. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
  128. package/lib/features/canvas/videoEditor/exportPipeline.js +77 -0
  129. package/lib/features/canvas/videoEditor/exportPipeline.js.map +1 -0
  130. package/lib/features/canvas/videoEditor/exportRenderer.js +19 -12
  131. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -1
  132. package/lib/features/canvas/videoEditor/exportTask.js +216 -0
  133. package/lib/features/canvas/videoEditor/exportTask.js.map +1 -0
  134. package/lib/features/canvas/videoEditor/formWidgets.js +142 -0
  135. package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -0
  136. package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +195 -0
  137. package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -0
  138. package/lib/features/canvas/videoEditor/produce/produceScenes.js +158 -0
  139. package/lib/features/canvas/videoEditor/produce/produceScenes.js.map +1 -0
  140. package/lib/features/canvas/videoEditor/remoteMediaClient.js +17 -5
  141. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
  142. package/lib/features/canvas/videoEditor/renderTimeline.js +207 -0
  143. package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -0
  144. package/lib/features/canvas/videoEditor/renewLinks.js +64 -0
  145. package/lib/features/canvas/videoEditor/renewLinks.js.map +1 -0
  146. package/lib/features/canvas/videoEditor/sceneLayers.js +101 -0
  147. package/lib/features/canvas/videoEditor/sceneLayers.js.map +1 -0
  148. package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +283 -0
  149. package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -0
  150. package/lib/features/canvas/videoEditor/tools/catalog.js +576 -0
  151. package/lib/features/canvas/videoEditor/tools/catalog.js.map +1 -0
  152. package/lib/features/canvas/videoEditor/videoProjectsStore.js +27 -3
  153. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -1
  154. package/lib/features/webbuilder/WebBuilderExperience.js +29 -1
  155. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  156. package/lib/features/webbuilder/buildFragments.js +8 -4
  157. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  158. package/lib/features/webbuilder/codezenHandoff.js +108 -0
  159. package/lib/features/webbuilder/codezenHandoff.js.map +1 -0
  160. package/lib/features/webbuilder/workflow.js.map +1 -1
  161. package/lib/hooks/useChatApi.js +1 -2
  162. package/lib/hooks/useChatApi.js.map +1 -1
  163. package/lib/screens/CanvasBoard/index.js +12 -1
  164. package/lib/screens/CanvasBoard/index.js.map +1 -1
  165. package/lib/screens/Home/HomeScreen.js.map +1 -1
  166. package/lib/screens/Home/components/HomeSuggestions.js +3 -3
  167. package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
  168. package/lib/screens/WebBuilder/index.js +4 -2
  169. package/lib/screens/WebBuilder/index.js.map +1 -1
  170. package/lib/screens/WebBuilderNative/index.js +29 -2
  171. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  172. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +30 -6
  173. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  174. package/package.json +4 -4
  175. /package/lib/assets/apps/{paper2poster.webp → poster.webp} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasExperience.js","sources":["../../../src/features/canvas/CanvasExperience.tsx"],"sourcesContent":["/**\n * The canvas experience: boards + viewer, as one federated unit.\n *\n * This lives on the REMOTE side of the microfrontend on purpose. If the host\n * owned the fetch, every change to how a canvas is read - a new field, a\n * different empty state, a fix to board ordering - would need an App Store\n * build. Here it ships with `cdecli surfaces deploy canvas`, the same way the\n * renderer does.\n *\n * The host injects only what it alone can know: the session token and the index\n * endpoint for its environment. Everything downstream of that - fetching,\n * choosing a board, loading/error/empty states - is the remote's business, and\n * this file deliberately imports nothing from the app (no Apollo, no\n * navigation, no config): only React Native, `fetch`, and its sibling modules.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActivityIndicator, Pressable, StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\nimport { CanvasBoardsGrid } from './CanvasBoardsGrid';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport { VideoEditorExperience, type VideoExportSpec } from './VideoEditorExperience';\nimport { ImageEditorExperience } from './ImageEditorExperience';\nimport { AudioEditorExperience } from './AudioEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport { createRemoteRunAction, createRemoteUploadMedia, proxiedMediaUrl } from './videoEditor/remoteMediaClient';\nimport { renderExportSpec } from './videoEditor/exportRenderer';\nimport { fetchMyCanvasBoards, pushCanvasBoard, getCachedCanvasBoards, type CanvasBoardSummary } from './surfaceIndex';\nimport { readCachedCanvasBoards, writeCachedCanvasBoards } from './canvasBoardsCatalog';\nimport { hydrateCanvasBoardsSnapshot, persistCanvasBoardsSnapshot } from './canvasBoardsSnapshot';\nimport {\n boardSignature,\n buildBoardState,\n dimsForAspect,\n emptyBoardState,\n frameForUpload,\n newBoardId,\n type CanvasItem,\n type PersistedCanvasState,\n} from './canvasCore';\nimport { promoProjectToTimeline } from './promoProjectImport';\nimport type { DesignedPromo } from './promoVideo';\nimport { loadTemplateTimeline } from './templateImport/loadTemplate';\nimport type { CanvasPromptTemplate } from './canvasChatTemplates';\nimport { CanvasToolDock, type DockStudio, type MediaPickSource } from './CanvasToolDock';\nimport { describeSession } from './sessionIdentity';\nimport { DesignExperience } from '../design/DesignExperience';\nimport type { DesignKind } from '../design/designCore';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport { VideoGeneratorExperience, type GeneratorMode } from './VideoGeneratorExperience';\nimport { VideoEditExperience } from './VideoEditExperience';\nimport { VideoClipsExperience } from './VideoClipsExperience';\nimport { FrameExtractorExperience } from './FrameExtractorExperience';\nimport { MoodboardExperience } from './MoodboardExperience';\nimport { SetStudioExperience } from './SetStudioExperience';\nimport { InfluencerStudioExperience } from './InfluencerStudioExperience';\nimport { CameraRecorderExperience } from './recorder/CameraRecorderExperience';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\n\nexport interface CanvasExperienceProps {\n /** Bearer for the surface index. Absent -> the unauthenticated notice. */\n token?: string | null;\n /** Index endpoint for this environment. */\n indexUrl: string;\n /** Open this board when it exists; otherwise the newest opens. */\n channelId?: string;\n /** Render this board and skip the network entirely (deep links, tests). */\n board?: PersistedCanvasState | null;\n /** Host-side session problem, shown instead of attempting a doomed read. */\n sessionError?: string | null;\n /** Sign in again now, from the session-error screen. */\n onRetrySession?: () => void;\n /** Agent-backed item actions (Edit Image, Create Video) - raised by the\n * viewer toolbar. Create Video / Edit Video / Clips are handled HERE\n * (same connectors as web canvas) and only forwarded if a host overrides. */\n onItemAction?: (action: CanvasItemAction, item: CanvasItem) => void;\n /** Hand a finished editor timeline to the host's renderer (yantra-video). */\n onExportVideo?: (spec: VideoExportSpec) => void;\n /** Device-library picker the host provides (native capability).\n * `onStatus` is the web upload toast: `Uploading IMG_0003.jpeg…`. */\n onPickLocalMedia?: (onStatus?: (message: string) => void, source?: MediaPickSource) => Promise<CanvasItem[]>;\n /** Host uploader for phone-local URIs (file:// -> store URL) so board\n * items persist as fetchable media, like the web's uploadFileToStore. */\n uploadMedia?: (localUri: string) => Promise<string>;\n /** Host microphone (expo-audio) - the Voice tab's record flows. */\n audioRecorder?: AudioRecorderSeam;\n /** Connector runner (auth + transport live host-side). Present -> the\n * native image/audio editors open for edit actions; absent -> those\n * actions forward to onItemAction like before. */\n runMediaAction?: RunMediaAction;\n /** Host Apollo client — templates gallery is cache-first against typePolicies. */\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n testID?: string;\n}\n\nfunction untitledBoard(channelId?: string): CanvasBoardSummary {\n const id = channelId?.trim() || newBoardId();\n return {\n channelId: id,\n title: '',\n savedAt: Date.now(),\n itemCount: 0,\n board: emptyBoardState(),\n };\n}\n\nconst SAVE_DEBOUNCE_MS = 600;\n\nexport function CanvasExperience({\n token,\n indexUrl,\n channelId,\n board: explicitBoard,\n sessionError,\n onRetrySession,\n onItemAction,\n onExportVideo,\n onPickLocalMedia,\n uploadMedia,\n audioRecorder,\n runMediaAction,\n apolloClient,\n testID,\n}: CanvasExperienceProps) {\n const isDark = useColorScheme() === 'dark';\n // Host seams win (they can refresh auth); on binaries that predate them\n // the remote builds its own from what it already holds, so the editors\n // work OTA without an app release.\n const effectiveRunAction = useMemo<RunMediaAction | undefined>(\n () => runMediaAction ?? (token && indexUrl ? createRemoteRunAction(token, indexUrl) : undefined),\n [runMediaAction, token, indexUrl],\n );\n const effectiveUploadMedia = useMemo(\n () => uploadMedia ?? (token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : undefined),\n [uploadMedia, token, indexUrl],\n );\n const cachedBoards =\n getCachedCanvasBoards(indexUrl) ?? (apolloClient ? readCachedCanvasBoards(apolloClient) : null);\n const [boards, setBoards] = useState<CanvasBoardSummary[]>(() => cachedBoards ?? []);\n const [loading, setLoading] = useState(!explicitBoard && cachedBoards == null);\n const [error, setError] = useState<string | null>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [agentOpen, setAgentOpen] = useState(false);\n const [gridAgentOpen, setGridAgentOpen] = useState(false);\n const [generation, setGeneration] = useState(0);\n const [mediaBusy, setMediaBusy] = useState(false);\n const [uploadStatus, setUploadStatus] = useState<string | null>(null);\n const lastSavedByIdRef = useRef<Record<string, string>>({});\n\n const skipFetch = Boolean(explicitBoard);\n\n useEffect(() => {\n if (skipFetch || !indexUrl) return undefined;\n let cancelled = false;\n void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {\n if (cancelled || !rows?.length) return;\n setBoards((prev) => (prev.length > 0 ? prev : rows));\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [indexUrl, skipFetch]);\n\n useEffect(() => {\n if (skipFetch) return undefined;\n if (!token) {\n // The index answers unauthenticated reads as \"Missing tenantId\".\n // Wait for the host mint — but keep a cached grid on screen.\n if (getCachedCanvasBoards(indexUrl) == null) {\n setLoading(true);\n }\n setError(null);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;\n\n (async () => {\n // Only the first visit (no cache) blocks on the spinner. Later visits\n // show the cached grid immediately and refresh in the background.\n if (!hasCache) {\n setLoading(true);\n setError(null);\n }\n const result = await fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal });\n if (cancelled) return;\n if (__DEV__) {\n // Board geometry at a glance - \"why does this board render\n // this way\" starts with positions, not the picture.\n // eslint-disable-next-line no-console\n console.log(\n '[CanvasExperience] boards:',\n JSON.stringify(\n result.boards.map((b) => ({\n channelId: b.channelId,\n title: b.title,\n items: b.board.items.map((i) => ({\n type: i.type,\n x: i.x,\n y: i.y,\n w: i.width,\n h: i.height,\n z: i.zIndex,\n src: `${i.src.slice(0, 96)}…`,\n })),\n })),\n ),\n );\n }\n if (result.error) {\n // Keep the cached grid; only surface an error on a true first load.\n if (!hasCache) setError(result.error);\n setLoading(false);\n return;\n }\n lastSavedByIdRef.current = Object.fromEntries(\n result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]),\n );\n setBoards(result.boards);\n writeCachedCanvasBoards(apolloClient, result.boards);\n setError(null);\n setLoading(false);\n })();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [indexUrl, token, skipFetch, generation, apolloClient]);\n\n useEffect(() => {\n if (skipFetch || loading || !indexUrl) return;\n persistCanvasBoardsSnapshot(indexUrl, boards);\n }, [boards, indexUrl, loading, skipFetch]);\n\n // Honour a deep-linked board only when it actually exists in the index.\n // Otherwise stay on the grid — that is screen one on web.\n useEffect(() => {\n if (selectedId || !channelId || boards.length === 0) return;\n const match = boards.find((entry) => entry.channelId === channelId);\n if (match) setSelectedId(match.channelId);\n }, [boards, channelId, selectedId]);\n\n const selected = useMemo(\n () => (selectedId ? boards.find((entry) => entry.channelId === selectedId) : undefined),\n [boards, selectedId],\n );\n\n /** Google Veo URIs only play through the agent proxy — same wrap web uses. */\n const playableBoard = useCallback(\n (board: PersistedCanvasState): PersistedCanvasState => {\n if (!indexUrl) return board;\n return {\n ...board,\n items: board.items.map((item) =>\n item.type === 'video' || item.type === 'audio'\n ? { ...item, src: proxiedMediaUrl(indexUrl, item.src) }\n : item,\n ),\n };\n },\n [indexUrl],\n );\n\n const handleDockStudio = useCallback((studio: DockStudio) => {\n if (studio === 'video') {\n setEditorSeed({ itemId: null });\n return;\n }\n if (studio === 'agent') {\n setEditorSeed({ itemId: null, initialRailTab: 'agent' });\n return;\n }\n if (studio === 'influencer') {\n setShowInfluencer(true);\n return;\n }\n if (studio === 'set3d') {\n setShowSet3d(true);\n return;\n }\n if (studio === 'frames') {\n setShowFrames(true);\n return;\n }\n if (studio === 'moodboard') {\n setShowMoodboard(true);\n return;\n }\n // Match web studios: docs → design page, carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n const kind = studio === 'flyers' ? 'postcard' : studio === 'carousel' ? 'carousel' : 'design';\n setDesignEntry({ kind });\n }, []);\n const reload = useCallback(() => setGeneration((n) => n + 1), []);\n const handleBoardChange = useCallback(\n (board: PersistedCanvasState) => {\n setBoards((prev) =>\n prev.map((entry) =>\n entry.channelId === selectedId\n ? {\n ...entry,\n board,\n title: board.title || entry.title,\n itemCount: board.items.length,\n savedAt: board.savedAt,\n }\n : entry,\n ),\n );\n },\n [selectedId],\n );\n\n const handleAddPhotos = useCallback(\n async (source: MediaPickSource) => {\n if (!onPickLocalMedia || mediaBusy) return;\n try {\n const picked = await onPickLocalMedia((message) => {\n setMediaBusy(true);\n setUploadStatus(message);\n }, source);\n if (!picked.length) return;\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const startZ = entry.board.items.length;\n const items = [\n ...entry.board.items,\n ...picked.map((item, i) => ({\n ...item,\n ...frameForUpload(item.type),\n zIndex: startZ + i + 1,\n })),\n ];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] add photos failed:', err);\n }\n } finally {\n setMediaBusy(false);\n setUploadStatus(null);\n }\n },\n [onPickLocalMedia, selectedId, channelId, mediaBusy],\n );\n\n const handleNewCanvas = useCallback(() => {\n const entry = untitledBoard();\n lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);\n setBoards((prev) => [entry, ...prev]);\n setSelectedId(entry.channelId);\n }, []);\n\n const handleAskAgentFromGrid = useCallback(() => {\n setGridAgentOpen(true);\n }, []);\n\n const closeBoard = useCallback(() => {\n setAgentOpen(false);\n setGridAgentOpen(false);\n setBoardSelectedItem(null);\n setSelectedId(null);\n // Web's grid hides empty rows. Drop a New canvas that never got media\n // so it does not sit next to real boards as \"0 items\".\n setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));\n }, []);\n\n // Twin of canvas-surface's 600ms auto-save: item add/remove/src change ->\n // registerSurfaceChannel. Drags and zoom are not a reason to write.\n useEffect(() => {\n if (skipFetch || loading || !token || !indexUrl || !selected) return undefined;\n const state = buildBoardState(selected.board.items, selected.board.zoom, selected.title);\n if (state.items.length === 0) return undefined;\n const sig = boardSignature(state);\n if (lastSavedByIdRef.current[selected.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n void pushCanvasBoard({\n url: indexUrl,\n token,\n channelId: selected.channelId,\n state,\n }).then((ok) => {\n if (ok) lastSavedByIdRef.current[selected.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [selected, token, indexUrl, loading, skipFetch]);\n\n /** null = canvas; otherwise the editor is open, optionally seeded. */\n const [editorSeed, setEditorSeed] = useState<{\n itemId: string | null;\n initialTimeline?: import('./videoEditor/editorModel').EditorTimeline;\n projectTitle?: string;\n logoSrc?: string | null;\n initialRailTab?: string | null;\n } | null>(null);\n /** Item being edited in the native image/audio editor. */\n const [mediaEdit, setMediaEdit] = useState<{\n kind: 'image' | 'audio';\n item: CanvasItem;\n initialTab?: 'aiedit';\n } | null>(null);\n /** Web-parity generator (dock Image/Video/Audio + toolbar Create Video). */\n const [generator, setGenerator] = useState<{\n mode: GeneratorMode;\n item?: CanvasItem | null;\n restyle?: boolean;\n initialPrompt?: string;\n } | null>(null);\n const [videoEdit, setVideoEdit] = useState<CanvasItem | null>(null);\n const [videoClips, setVideoClips] = useState<CanvasItem | 'url' | null>(null);\n const [showFrames, setShowFrames] = useState(false);\n const [showMoodboard, setShowMoodboard] = useState(false);\n const [showSet3d, setShowSet3d] = useState(false);\n const [showInfluencer, setShowInfluencer] = useState(false);\n const [showRecorder, setShowRecorder] = useState(false);\n /** Board selection for generate seed + edit tools. */\n const [boardSelectedItem, setBoardSelectedItem] = useState<CanvasItem | null>(null);\n /** Remote-side render in flight (stage label) or its failure. */\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n /** Design studio screen (opened from the grid); null = canvas screens. */\n const [designEntry, setDesignEntry] = useState<{ kind: DesignKind } | { channelId: string } | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n\n // The grid also lists the user's designs - fetched from the same index\n // under its `design` surface. Refreshes when the studio closes.\n useEffect(() => {\n if (skipFetch || !token || !indexUrl || designEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, generation]);\n\n useEffect(() => {\n if (!token && !effectiveRunAction && !apolloClient) {\n setFeaturedLooks([]);\n return;\n }\n let cancelled = false;\n void listStudioLooks(effectiveRunAction, { limit: 12 }, { client: apolloClient, token, indexUrl })\n .then((page) => {\n if (!cancelled) setFeaturedLooks(page.looks);\n })\n .catch(() => {\n if (!cancelled) setFeaturedLooks([]);\n });\n return () => {\n cancelled = true;\n };\n }, [apolloClient, effectiveRunAction, indexUrl, token]);\n\n /** Place generated/uploaded media on the open board — same as web addGeneratedItem. */\n const addBoardItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: { name?: string; aspect?: string }): CanvasItem => {\n const maxEdge = type === 'video' ? 640 : 600;\n const frame = opts?.aspect\n ? { x: 100, y: 100, ...dimsForAspect(opts.aspect, maxEdge) }\n : frameForUpload(type);\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = {\n id: newBoardId(),\n type,\n src,\n generatedAssetName: opts?.name ?? (type === 'video' ? 'Edited video' : type),\n zIndex: 1,\n ...frame,\n };\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const items = [...entry.board.items, { ...item, zIndex: entry.board.items.length + 1 }];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n return item;\n },\n [selectedId, channelId, indexUrl],\n );\n\n /** Gallery AI Chat: first generate opens a new board; closing with no media stays on the grid. */\n const openFreshBoardWithItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: { name?: string; aspect?: string }): CanvasItem => {\n const maxEdge = type === 'video' ? 640 : 600;\n const frame = opts?.aspect\n ? { x: 100, y: 100, ...dimsForAspect(opts.aspect, maxEdge) }\n : frameForUpload(type);\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = {\n id: newBoardId(),\n type,\n src,\n generatedAssetName: opts?.name ?? (type === 'video' ? 'Edited video' : type),\n zIndex: 1,\n ...frame,\n };\n const entry = untitledBoard();\n const items = [{ ...item, zIndex: 1 }];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n const next: CanvasBoardSummary = {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);\n setBoards((prev) => [next, ...prev]);\n setSelectedId(entry.channelId);\n setGridAgentOpen(false);\n return item;\n },\n [indexUrl],\n );\n\n const addRenderedVideo = useCallback(\n (url: string, opts?: { name?: string; aspect?: string }) => addBoardItem('video', url, opts),\n [addBoardItem],\n );\n\n const patchItemSrc = useCallback(\n (itemId: string, url: string, type?: CanvasItem['type']) => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== selectedId) return entry;\n const items = entry.board.items.map((item) =>\n item.id === itemId ? { ...item, src, ...(type ? { type } : {}) } : item,\n );\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n }),\n );\n },\n [selectedId, indexUrl],\n );\n\n // Same fallback rule as the connector seams: a host renderer wins, and\n // without one the remote drives the connector chain itself, so the\n // editor's checkmark produces a real video on old binaries too.\n const exportBusyRef = useRef(false);\n const effectiveOnExport = useMemo(() => {\n // The REMOTE renderer is preferred when it can run at all: it ships\n // with surface deploys, so every binary - old or new - exports with\n // the newest chain (soundtrack, future transitions) without an app\n // release. The host seam is only the last resort without a runner.\n if (!effectiveRunAction) return onExportVideo;\n const runAction = effectiveRunAction;\n const upload = effectiveUploadMedia;\n return (spec: VideoExportSpec) => {\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n setExporting({ stage: 'Starting render' });\n void renderExportSpec(spec, runAction, upload, (p) => setExporting(p))\n .then((url) => {\n addRenderedVideo(url);\n setEditorSeed(null);\n setExporting(null);\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'video export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n };\n }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo]);\n\n const handleItemAction = useCallback(\n (action: CanvasItemAction, item: CanvasItem) => {\n // Match web canvas toolbar:\n // Create Video → generator (yantra-video-generation), image/video as reference\n // Promo → marketing produce submit/poll\n // Edit Video → yantra-video-editing ops (trim/speed/mute/…)\n // Clips → yantra-video-clip\n if (action === 'create-video') {\n setGenerator({ mode: 'video', item });\n return;\n }\n if (action === 'restyle-video') {\n setGenerator({ mode: 'video', item, restyle: true });\n return;\n }\n if (action === 'promo-video') {\n setGenerator({ mode: 'promo', item });\n return;\n }\n if (action === 'edit-video') {\n setVideoEdit(item);\n return;\n }\n if (action === 'trim-video') {\n setVideoClips(item);\n return;\n }\n if ((action === 'edit-image' || action === 'mark-edit') && effectiveRunAction) {\n setMediaEdit({\n kind: 'image',\n item,\n ...(action === 'mark-edit' ? { initialTab: 'aiedit' as const } : {}),\n });\n return;\n }\n if (action === 'edit-audio' && effectiveRunAction) {\n setMediaEdit({ kind: 'audio', item });\n return;\n }\n onItemAction?.(action, item);\n },\n [onItemAction, effectiveRunAction],\n );\n\n const handleUseTemplate = useCallback(async (template: CanvasPromptTemplate) => {\n try {\n const imported = await loadTemplateTimeline(template);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n } catch {\n // Agent / editor surfaces their own notices when Use fails in-editor.\n }\n }, []);\n\n if (generator) {\n return (\n <VideoGeneratorExperience\n mode={generator.mode}\n item={generator.item}\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n runAction={effectiveRunAction}\n onClose={() => setGenerator(null)}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n setGenerator(null);\n }}\n onPromoDesigned={(designed) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setGenerator(null);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n />\n );\n }\n\n if (showFrames) {\n return (\n <FrameExtractorExperience\n boardItems={selected?.board.items ?? []}\n seedVideo={boardSelectedItem?.type === 'video' ? boardSelectedItem : null}\n runAction={effectiveRunAction}\n onClose={() => setShowFrames(false)}\n onPlace={(urls) => {\n urls.forEach((url, i) => addBoardItem('image', url, { name: `Frame ${i + 1}` }));\n setShowFrames(false);\n }}\n />\n );\n }\n\n if (showMoodboard) {\n return (\n <MoodboardExperience\n boardItems={selected?.board.items ?? []}\n onClose={() => setShowMoodboard(false)}\n onUseBrief={(brief) => {\n setShowMoodboard(false);\n setGenerator({ mode: 'image', initialPrompt: brief });\n }}\n />\n );\n }\n\n if (showSet3d) {\n return (\n <SetStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n onClose={() => setShowSet3d(false)}\n onPlace={(kind, url, name) => {\n addBoardItem(kind, url, { name });\n }}\n />\n );\n }\n\n if (showRecorder) {\n return (\n <CameraRecorderExperience\n onClose={() => setShowRecorder(false)}\n onPick={async (source) => {\n if (!onPickLocalMedia) return [];\n return onPickLocalMedia(undefined, source);\n }}\n onPlaced={(items) => {\n for (const item of items) {\n addBoardItem(item.type === 'video' ? 'video' : 'image', item.src, {\n name: item.generatedAssetName,\n });\n }\n }}\n />\n );\n }\n\n if (showInfluencer) {\n return (\n <InfluencerStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setShowInfluencer(false)}\n onPlace={(url, name) => {\n addBoardItem('video', url, { name, aspect: '9:16' });\n setShowInfluencer(false);\n }}\n />\n );\n }\n\n if (videoEdit) {\n return (\n <VideoEditExperience\n src={videoEdit.src}\n name={videoEdit.generatedAssetName}\n items={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setVideoEdit(null)}\n onApplied={(url, kind) => {\n if (kind === 'audio') {\n addBoardItem('audio', url, { name: 'Extracted audio' });\n } else {\n patchItemSrc(videoEdit.id, url, kind === 'image' ? 'image' : 'video');\n }\n setVideoEdit(null);\n }}\n />\n );\n }\n\n if (videoClips) {\n return (\n <VideoClipsExperience\n item={videoClips === 'url' ? null : videoClips}\n runAction={effectiveRunAction}\n onClose={() => setVideoClips(null)}\n onClips={(urls, aspect) => {\n urls.forEach((url, i) => addRenderedVideo(url, { name: `Clip ${i + 1}`, aspect }));\n setVideoClips(null);\n }}\n />\n );\n }\n\n if (explicitBoard) {\n return (\n <NativeCanvasViewer\n board={playableBoard(explicitBoard)}\n controls\n onItemAction={handleItemAction}\n testID={testID}\n />\n );\n }\n\n if (sessionError) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t open your canvases\"\n detail={sessionError}\n onRetry={onRetrySession}\n />\n );\n }\n\n if (error && boards.length === 0) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t load your canvases\"\n detail={error}\n fine={describeSession(token, indexUrl)}\n onRetry={reload}\n />\n );\n }\n\n // Grid is screen one (web CanvasBoards). Opening a board is screen two.\n\n if (mediaEdit) {\n const shared = {\n src: mediaEdit.item.src,\n name: mediaEdit.item.generatedAssetName,\n runAction: effectiveRunAction,\n onClose: () => setMediaEdit(null),\n onSave: (url: string) => {\n patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);\n setMediaEdit(null);\n },\n };\n return mediaEdit.kind === 'image' ? (\n <ImageEditorExperience {...shared} initialTab={mediaEdit.initialTab} />\n ) : (\n <AudioEditorExperience {...shared} />\n );\n }\n\n if (editorSeed) {\n return (\n <View style={styles.fill}>\n <VideoEditorExperience\n items={selected?.board.items ?? []}\n seedItemId={editorSeed.itemId}\n initialTimeline={editorSeed.initialTimeline}\n projectTitle={editorSeed.projectTitle || selected?.board.title || selected?.title}\n initialLogoSrc={editorSeed.logoSrc}\n onClose={() => setEditorSeed(null)}\n onExport={effectiveOnExport}\n onPickLocalMedia={onPickLocalMedia}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n audioRecorder={audioRecorder}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n initialRailTab={editorSeed.initialRailTab}\n />\n {exporting ? (\n <View style={styles.exportOverlay}>\n <View style={styles.exportCard}>\n {exporting.error ? (\n <>\n <Text style={styles.exportError}>Export failed</Text>\n <Text style={styles.exportStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable\n onPress={() => setExporting(null)}\n style={styles.exportDismiss}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (designEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignExperience\n token={token}\n indexUrl={indexUrl}\n entry={designEntry}\n onClose={() => setDesignEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n runMediaAction={effectiveRunAction}\n />\n </View>\n );\n }\n\n if (!selected) {\n return (\n <View style={styles.fill} testID={testID}>\n {loading && boards.length === 0 ? (\n <View style={styles.gridLoading} pointerEvents=\"none\">\n <ActivityIndicator size=\"small\" />\n </View>\n ) : null}\n <CanvasBoardsGrid\n boards={boards.filter((entry) => entry.itemCount > 0)}\n onOpen={setSelectedId}\n onNewCanvas={handleNewCanvas}\n designs={designs}\n onOpenDesign={(channelId) => setDesignEntry({ channelId })}\n onNewDesign={(kind) => setDesignEntry({ kind })}\n onAskAgent={handleAskAgentFromGrid}\n onComposeGenerate={({ mode, prompt }) => {\n setGenerator({ mode, initialPrompt: prompt });\n }}\n featuredLooks={featuredLooks}\n onRecreateLook={(look) => {\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n });\n }}\n />\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n runAction={effectiveRunAction}\n boardItems={[]}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return openFreshBoardWithItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.fill} testID={testID}>\n <CanvasToolDock\n busy={mediaBusy}\n boards={boards}\n boardId={selectedId}\n runAction={effectiveRunAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n seedItem={boardSelectedItem}\n dockHidden={agentOpen}\n onUpload={(source) => void handleAddPhotos(source)}\n onPlace={(item) =>\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n })\n }\n onPickStorage={(kind, url, name) => addBoardItem(kind, url, { name })}\n onStudio={handleDockStudio}\n onSlides={() => setDesignEntry({ kind: 'design' })}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : meta.mode === 'clips' ? 'Clip' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onPromoDesigned={(designed: DesignedPromo) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n onEditReplaced={(itemId, url) => patchItemSrc(itemId, url)}\n onEditVideo={(item) => setVideoEdit(item)}\n onRecord={() => setShowRecorder(true)}\n >\n <NativeCanvasViewer\n board={playableBoard(selected.board)}\n controls\n onBoardsPress={closeBoard}\n onItemAction={handleItemAction}\n onBoardChange={handleBoardChange}\n onAgentOpenChange={setAgentOpen}\n onSelectionChange={setBoardSelectedItem}\n runAction={effectiveRunAction}\n onAgentGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onAgentReplace={(itemId, url) => patchItemSrc(itemId, url)}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </CanvasToolDock>\n {uploadStatus ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n {mediaBusy ? <ActivityIndicator size=\"small\" color=\"#2563eb\" /> : null}\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {uploadStatus}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction Notice({\n isDark,\n title,\n detail,\n fine,\n primaryLabel,\n onPrimary,\n onRetry,\n retryLabel = 'Try again',\n}: {\n isDark: boolean;\n title: string;\n detail: string;\n /** Session/context fine print - the who-and-where behind the state. */\n fine?: string;\n primaryLabel?: string;\n onPrimary?: () => void;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>{title}</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary ? (\n <Pressable onPress={onPrimary} style={styles.primaryCta} accessibilityRole=\"button\">\n <Text style={styles.primaryCtaLabel}>{primaryLabel ?? 'Create'}</Text>\n </Pressable>\n ) : null}\n {onRetry ? (\n <Pressable onPress={onRetry} style={styles.retry} accessibilityRole=\"button\">\n <Text style={styles.retryLabel}>{retryLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n primaryCta: {\n marginTop: 16,\n paddingHorizontal: 22,\n paddingVertical: 11,\n borderRadius: 11,\n backgroundColor: '#2563eb',\n },\n primaryCtaLabel: { color: '#ffffff', fontSize: 14, fontWeight: '600' },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: 12,\n right: 16,\n zIndex: 4,\n },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 15, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n fine: { marginTop: 10, fontSize: 11, color: '#94a3b8', textAlign: 'center', paddingHorizontal: 20, lineHeight: 15 },\n spaced: { marginTop: 10 },\n textLight: { color: '#f8fafc' },\n textMuted: { color: '#94a3b8' },\n retry: { marginTop: 16, paddingHorizontal: 18, paddingVertical: 10, borderRadius: 10, backgroundColor: '#2563eb' },\n retryLabel: { color: '#ffffff', fontSize: 13, fontWeight: '600' },\n backPill: {\n position: 'absolute',\n top: 12,\n left: 12,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n maxWidth: 220,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderRadius: 12,\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n backLabel: { fontSize: 15, fontWeight: '600', color: '#475569' },\n uploadToast: {\n position: 'absolute',\n top: 56,\n left: 16,\n right: 16,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n paddingHorizontal: 14,\n paddingVertical: 12,\n borderRadius: 14,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 4 },\n elevation: 6,\n },\n uploadToastText: { flex: 1, fontSize: 14, fontWeight: '600', color: '#0f172a' },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 32,\n },\n exportCard: {\n minWidth: 220,\n maxWidth: 320,\n alignItems: 'center',\n gap: 10,\n backgroundColor: '#17171C',\n borderRadius: 16,\n paddingVertical: 20,\n paddingHorizontal: 24,\n },\n exportStage: { fontSize: 13, color: '#CBD5E1', textAlign: 'center' },\n exportError: { fontSize: 15, fontWeight: '600', color: '#F87171' },\n exportDismiss: {\n marginTop: 4,\n backgroundColor: '#26262E',\n borderRadius: 16,\n paddingHorizontal: 14,\n paddingVertical: 8,\n },\n exportDismissLabel: { fontSize: 13, fontWeight: '600', color: '#F7F7FA' },\n});\n\nexport default CanvasExperience;\n"],"names":["_a","channelId"],"mappings":"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"}
1
+ {"version":3,"file":"CanvasExperience.js","sources":["../../../src/features/canvas/CanvasExperience.tsx"],"sourcesContent":["/**\n * The canvas experience: boards + viewer, as one federated unit.\n *\n * This lives on the REMOTE side of the microfrontend on purpose. If the host\n * owned the fetch, every change to how a canvas is read - a new field, a\n * different empty state, a fix to board ordering - would need an App Store\n * build. Here it ships with `cdecli surfaces deploy canvas`, the same way the\n * renderer does.\n *\n * The host injects only what it alone can know: the session token and the index\n * endpoint for its environment. Everything downstream of that - fetching,\n * choosing a board, loading/error/empty states - is the remote's business, and\n * this file deliberately imports nothing from the app (no Apollo, no\n * navigation, no config): only React Native, `fetch`, and its sibling modules.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActivityIndicator, Image as RNImage, Pressable, StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\nimport { CanvasBoardsGrid } from './CanvasBoardsGrid';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport { VideoEditorExperience, type VideoExportSpec } from './VideoEditorExperience';\nimport { ImageEditorExperience } from './ImageEditorExperience';\nimport { AudioEditorExperience } from './AudioEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n createRemoteRunAction,\n createRemoteUploadMedia,\n proxiedMediaUrl,\n unwrapProxyUrl,\n} from './videoEditor/remoteMediaClient';\nimport { renderExportSpec } from './videoEditor/exportRenderer';\nimport { startExportTask } from './videoEditor/exportTask';\nimport { ExportTaskCard, useCanvasTask } from './videoEditor/ExportTaskCard';\nimport { dismissTask as dismissCanvasTask, markTaskDelivered } from './canvasTasks';\nimport { fetchMyCanvasBoards, pushCanvasBoard, getCachedCanvasBoards, type CanvasBoardSummary } from './surfaceIndex';\nimport { applySrcRenewals, useBoardMediaRefresh, useMediaSigning } from './useBoardMediaRefresh';\nimport { readCachedCanvasBoards, writeCachedCanvasBoards } from './canvasBoardsCatalog';\nimport { hydrateCanvasBoardsSnapshot, persistCanvasBoardsSnapshot } from './canvasBoardsSnapshot';\nimport {\n boardSignature,\n buildBoardState,\n dimsForAspect,\n emptyBoardState,\n mediaItemsFor,\n mediaKey,\n newBoardId,\n reconcileDismissed,\n type CanvasItem,\n type MediaPlacement,\n type PersistedCanvasState,\n} from './canvasCore';\nimport { visibleCreateGroups, type CreateAction } from './createTiles';\nimport { parseCreateTileLink, parseDesignLink, parseMediaLink, type MediaLink } from './deepLinks';\nimport { promoProjectToTimeline } from './promoProjectImport';\nimport type { DesignedPromo } from './promoVideo';\nimport { loadTemplateTimeline } from './templateImport/loadTemplate';\nimport type { CanvasPromptTemplate } from './canvasChatTemplates';\nimport { CanvasToolDock, type DockStudio, type MediaPickSource } from './CanvasToolDock';\nimport { describeSession } from './sessionIdentity';\nimport { DesignExperience } from '../design/DesignExperience';\nimport type { DesignKind } from '../design/designCore';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport { VideoGeneratorExperience, type GeneratorMode } from './VideoGeneratorExperience';\nimport { VideoEditExperience } from './VideoEditExperience';\nimport { VideoClipsExperience } from './VideoClipsExperience';\nimport { FrameExtractorExperience } from './FrameExtractorExperience';\nimport { MoodboardExperience } from './MoodboardExperience';\nimport { SetStudioExperience } from './SetStudioExperience';\nimport { configureServerTasks } from './serverTasks';\nimport { setCanvasTasksHost } from './canvasTaskSync';\nimport { InfluencerStudioExperience } from './InfluencerStudioExperience';\nimport { CameraRecorderExperience } from './recorder/CameraRecorderExperience';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\n\nexport interface CanvasExperienceProps {\n /** Bearer for the surface index. Absent -> the unauthenticated notice. */\n token?: string | null;\n /** Index endpoint for this environment. */\n indexUrl: string;\n /** Open this board when it exists; otherwise the newest opens. */\n channelId?: string;\n /** Render this board and skip the network entirely (deep links, tests). */\n board?: PersistedCanvasState | null;\n /** Host-side session problem, shown instead of attempting a doomed read. */\n sessionError?: string | null;\n /** Sign in again now, from the session-error screen. */\n onRetrySession?: () => void;\n /** Agent-backed item actions (Edit Image, Create Video) - raised by the\n * viewer toolbar. Create Video / Edit Video / Clips are handled HERE\n * (same connectors as web canvas) and only forwarded if a host overrides. */\n onItemAction?: (action: CanvasItemAction, item: CanvasItem) => void;\n /** Hand a finished editor timeline to the host's renderer (yantra-video). */\n onExportVideo?: (spec: VideoExportSpec) => void;\n /** Device-library picker the host provides (native capability).\n * `onStatus` is the web upload toast: `Uploading IMG_0003.jpeg…`. */\n onPickLocalMedia?: (onStatus?: (message: string) => void, source?: MediaPickSource) => Promise<CanvasItem[]>;\n /** Host uploader for phone-local URIs (file:// -> store URL) so board\n * items persist as fetchable media, like the web's uploadFileToStore. */\n uploadMedia?: (localUri: string) => Promise<string>;\n /** Host microphone (expo-audio) - the Voice tab's record flows. */\n audioRecorder?: AudioRecorderSeam;\n /** Connector runner (auth + transport live host-side). Present -> the\n * native image/audio editors open for edit actions; absent -> those\n * actions forward to onItemAction like before. */\n runMediaAction?: RunMediaAction;\n /** Host Apollo client — templates gallery is cache-first against typePolicies. */\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n /**\n * Deep links (web `?create=`, `?media=&kind=&name=`, `?design=`, `?artifact=`).\n * Each runs once on mount, after the board list has settled.\n */\n /** A Create tile id (`video-editor`, `clips`, `logo`): runs that tile. */\n createTile?: string;\n /** Another surface's \"Edit in Canvas\": placed on a new board, its editor opened. */\n media?: { src: string; kind?: string; name?: string };\n /** Open this saved design in the design studio. */\n designId?: string;\n /** A design template link: native has no design catalog, so a blank design opens. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n}\n\nfunction untitledBoard(channelId?: string): CanvasBoardSummary {\n const id = channelId?.trim() || newBoardId();\n return {\n channelId: id,\n title: '',\n savedAt: Date.now(),\n itemCount: 0,\n board: emptyBoardState(),\n };\n}\n\nconst SAVE_DEBOUNCE_MS = 600;\n/** How long a media link waits for its picture's size before taking an upload's footprint. */\nconst MEDIA_LINK_MEASURE_MS = 1500;\n\nconst boardMediaKey = (src: string): string => mediaKey(src, unwrapProxyUrl);\n\ntype PlaceOpts = { name?: string; aspect?: string; size?: { width: number; height: number } };\n\n/** Generated/linked media as a placement: its requested ratio (or measured size) shapes the tile. */\nfunction placementFor(type: CanvasItem['type'], src: string, opts?: PlaceOpts): MediaPlacement {\n const maxEdge = type === 'video' ? 640 : 600;\n const size = opts?.aspect ? dimsForAspect(opts.aspect, maxEdge) : opts?.size;\n return {\n type,\n src,\n label: opts?.name ?? (type === 'video' ? 'Edited video' : type),\n ...(size ? { size } : {}),\n };\n}\n\n/** A device pick: the host reports its pixel size, which only shapes the tile. */\nfunction placementForPicked(item: CanvasItem): MediaPlacement {\n return {\n type: item.type,\n src: item.src,\n ...(item.generatedAssetName ? { label: item.generatedAssetName } : {}),\n ...(item.width > 0 && item.height > 0 ? { size: { width: item.width, height: item.height } } : {}),\n ...(item.hasAudio === false ? { hasAudio: false } : {}),\n };\n}\n\n/** `next` from the viewer, with the tombstones its item edit implies. */\nfunction withTombstones(prev: PersistedCanvasState, next: PersistedCanvasState): PersistedCanvasState {\n const dismissed = reconcileDismissed(prev.items, next.items, prev.dismissed ?? [], boardMediaKey);\n const out: PersistedCanvasState = { ...next };\n if (dismissed.length > 0) out.dismissed = dismissed;\n else delete out.dismissed;\n return out;\n}\n\nexport function CanvasExperience({\n token,\n indexUrl,\n channelId,\n board: explicitBoard,\n sessionError,\n onRetrySession,\n onItemAction,\n onExportVideo,\n onPickLocalMedia,\n uploadMedia,\n audioRecorder,\n runMediaAction,\n apolloClient,\n createTile,\n media,\n designId,\n designTemplateId,\n artifactId,\n testID,\n}: CanvasExperienceProps) {\n const isDark = useColorScheme() === 'dark';\n // Host seams win (they can refresh auth); on binaries that predate them\n // the remote builds its own from what it already holds, so the editors\n // work OTA without an app release.\n const effectiveRunAction = useMemo<RunMediaAction | undefined>(\n () => runMediaAction ?? (token && indexUrl ? createRemoteRunAction(token, indexUrl) : undefined),\n [runMediaAction, token, indexUrl],\n );\n // Server-backed Tasks: point the Task API at this session before any child effect resumes a run.\n useMemo(() => configureServerTasks({ token, indexUrl }), [token, indexUrl]);\n const effectiveUploadMedia = useMemo(\n () => uploadMedia ?? (token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : undefined),\n [uploadMedia, token, indexUrl],\n );\n const cachedBoards =\n getCachedCanvasBoards(indexUrl) ?? (apolloClient ? readCachedCanvasBoards(apolloClient) : null);\n const [boards, setBoards] = useState<CanvasBoardSummary[]>(() => cachedBoards ?? []);\n /** Live boards for placement guesses outside a state updater. */\n const boardsRef = useRef(boards);\n boardsRef.current = boards;\n const [loading, setLoading] = useState(!explicitBoard && cachedBoards == null);\n const [error, setError] = useState<string | null>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [agentOpen, setAgentOpen] = useState(false);\n const [gridAgentOpen, setGridAgentOpen] = useState(false);\n const [generation, setGeneration] = useState(0);\n const [mediaBusy, setMediaBusy] = useState(false);\n const [uploadStatus, setUploadStatus] = useState<string | null>(null);\n const lastSavedByIdRef = useRef<Record<string, string>>({});\n /** The first index read has landed (or failed): deep links wait for it, so the\n * fetch's wholesale `setBoards` cannot drop a board a link just made. */\n const [boardsSettled, setBoardsSettled] = useState(false);\n\n const skipFetch = Boolean(explicitBoard);\n\n // The Tasks sheet lives in the dock; what it cannot learn from its props (the open board, how to open another).\n const tasksBoardsRef = useRef(boards);\n tasksBoardsRef.current = boards;\n useEffect(() => {\n setCanvasTasksHost({\n openBoardId: selectedId,\n openBoard: (id) => setSelectedId(id),\n boardLabel: (id) => tasksBoardsRef.current.find((entry) => entry.channelId === id)?.title || undefined,\n runAction: effectiveRunAction,\n });\n }, [selectedId, effectiveRunAction]);\n\n useEffect(() => {\n if (skipFetch || !indexUrl) return undefined;\n let cancelled = false;\n void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {\n if (cancelled || !rows?.length) return;\n setBoards((prev) => (prev.length > 0 ? prev : rows));\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [indexUrl, skipFetch]);\n\n useEffect(() => {\n if (skipFetch) return undefined;\n if (!token) {\n // The index answers unauthenticated reads as \"Missing tenantId\".\n // Wait for the host mint — but keep a cached grid on screen.\n if (getCachedCanvasBoards(indexUrl) == null) {\n setLoading(true);\n }\n setError(null);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;\n\n (async () => {\n // Only the first visit (no cache) blocks on the spinner. Later visits\n // show the cached grid immediately and refresh in the background.\n if (!hasCache) {\n setLoading(true);\n setError(null);\n }\n const result = await fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal });\n if (cancelled) return;\n if (__DEV__) {\n // Board geometry at a glance - \"why does this board render\n // this way\" starts with positions, not the picture.\n // eslint-disable-next-line no-console\n console.log(\n '[CanvasExperience] boards:',\n JSON.stringify(\n result.boards.map((b) => ({\n channelId: b.channelId,\n title: b.title,\n items: b.board.items.map((i) => ({\n type: i.type,\n x: i.x,\n y: i.y,\n w: i.width,\n h: i.height,\n z: i.zIndex,\n src: `${i.src.slice(0, 96)}…`,\n })),\n })),\n ),\n );\n }\n if (result.error) {\n // Keep the cached grid; only surface an error on a true first load.\n if (!hasCache) setError(result.error);\n setLoading(false);\n setBoardsSettled(true);\n return;\n }\n lastSavedByIdRef.current = Object.fromEntries(\n result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]),\n );\n setBoards(result.boards);\n writeCachedCanvasBoards(apolloClient, result.boards);\n setError(null);\n setLoading(false);\n setBoardsSettled(true);\n })();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [indexUrl, token, skipFetch, generation, apolloClient]);\n\n useEffect(() => {\n if (skipFetch || loading || !indexUrl) return;\n persistCanvasBoardsSnapshot(indexUrl, boards);\n }, [boards, indexUrl, loading, skipFetch]);\n\n // Honour a deep-linked board only when it actually exists in the index.\n // Otherwise stay on the grid — that is screen one on web.\n useEffect(() => {\n if (selectedId || !channelId || boards.length === 0) return;\n const match = boards.find((entry) => entry.channelId === channelId);\n if (match) setSelectedId(match.channelId);\n }, [boards, channelId, selectedId]);\n\n const selected = useMemo(\n () => (selectedId ? boards.find((entry) => entry.channelId === selectedId) : undefined),\n [boards, selectedId],\n );\n\n // Presigned link upkeep (web pullBoard): renew an opened board's expiring\n // links so the auto-save below persists fresh URLs.\n useMediaSigning(token, indexUrl);\n useBoardMediaRefresh(selected?.channelId, selected?.board.items, effectiveRunAction, (boardId, renewals) =>\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== boardId) return entry;\n const items = applySrcRenewals(entry.board.items, renewals);\n return items === entry.board.items ? entry : { ...entry, board: { ...entry.board, items } };\n }),\n ),\n );\n\n /** Google Veo URIs only play through the agent proxy — same wrap web uses. */\n const playableBoard = useCallback(\n (board: PersistedCanvasState): PersistedCanvasState => {\n if (!indexUrl) return board;\n return {\n ...board,\n items: board.items.map((item) =>\n item.type === 'video' || item.type === 'audio'\n ? { ...item, src: proxiedMediaUrl(indexUrl, item.src) }\n : item,\n ),\n };\n },\n [indexUrl],\n );\n\n const handleDockStudio = useCallback((studio: DockStudio) => {\n if (studio === 'video') {\n setEditorSeed({ itemId: null });\n return;\n }\n if (studio === 'agent') {\n setEditorSeed({ itemId: null, initialRailTab: 'agent' });\n return;\n }\n if (studio === 'influencer') {\n setShowInfluencer(true);\n return;\n }\n if (studio === 'set3d') {\n setShowSet3d(true);\n return;\n }\n if (studio === 'frames') {\n setShowFrames(true);\n return;\n }\n if (studio === 'moodboard') {\n setShowMoodboard(true);\n return;\n }\n // Match web studios: docs → design page, carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n const kind = studio === 'flyers' ? 'postcard' : studio === 'carousel' ? 'carousel' : 'design';\n setDesignEntry({ kind });\n }, []);\n const reload = useCallback(() => setGeneration((n) => n + 1), []);\n const handleBoardChange = useCallback(\n (board: PersistedCanvasState) => {\n setBoards((prev) =>\n prev.map((entry) =>\n entry.channelId === selectedId\n ? {\n ...entry,\n // A delete must leave a tombstone, or web's channel\n // drain puts the media straight back (web #530).\n board: withTombstones(entry.board, board),\n title: board.title || entry.title,\n itemCount: board.items.length,\n savedAt: board.savedAt,\n }\n : entry,\n ),\n );\n },\n [selectedId],\n );\n\n const handleAddPhotos = useCallback(\n async (source: MediaPickSource) => {\n if (!onPickLocalMedia || mediaBusy) return;\n try {\n const picked = await onPickLocalMedia((message) => {\n setMediaBusy(true);\n setUploadStatus(message);\n }, source);\n if (!picked.length) return;\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n // Web `mediaItemsFor`: fanned across free grid slots, each\n // tile in the picked media's own shape (not stacked at 100,100).\n const placed = mediaItemsFor(entry.board.items, picked.map(placementForPicked));\n const items = [\n ...entry.board.items,\n ...picked.map((item, i) => ({ ...item, ...placed[i], id: item.id || placed[i].id })),\n ];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] add photos failed:', err);\n }\n } finally {\n setMediaBusy(false);\n setUploadStatus(null);\n }\n },\n [onPickLocalMedia, selectedId, channelId, mediaBusy],\n );\n\n const handleNewCanvas = useCallback(() => {\n const entry = untitledBoard();\n lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);\n setBoards((prev) => [entry, ...prev]);\n setSelectedId(entry.channelId);\n }, []);\n\n const handleAskAgentFromGrid = useCallback(() => {\n setGridAgentOpen(true);\n }, []);\n\n const closeBoard = useCallback(() => {\n setAgentOpen(false);\n setGridAgentOpen(false);\n setBoardSelectedItem(null);\n setSelectedId(null);\n // Web's grid hides empty rows. Drop a New canvas that never got media\n // so it does not sit next to real boards as \"0 items\".\n setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));\n }, []);\n\n // Twin of canvas-surface's 600ms auto-save: item add/remove/src change ->\n // registerSurfaceChannel. Drags and zoom are not a reason to write.\n useEffect(() => {\n if (skipFetch || loading || !token || !indexUrl || !selected) return undefined;\n const state = buildBoardState(\n selected.board.items,\n selected.board.zoom,\n selected.title,\n selected.board.dismissed,\n );\n if (state.items.length === 0) return undefined;\n const sig = boardSignature(state);\n if (lastSavedByIdRef.current[selected.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n void pushCanvasBoard({\n url: indexUrl,\n token,\n channelId: selected.channelId,\n state,\n }).then((ok) => {\n if (ok) lastSavedByIdRef.current[selected.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [selected, token, indexUrl, loading, skipFetch]);\n\n /** null = canvas; otherwise the editor is open, optionally seeded. */\n const [editorSeed, setEditorSeed] = useState<{\n itemId: string | null;\n initialTimeline?: import('./videoEditor/editorModel').EditorTimeline;\n projectTitle?: string;\n logoSrc?: string | null;\n initialRailTab?: string | null;\n } | null>(null);\n /** Item being edited in the native image/audio editor. */\n const [mediaEdit, setMediaEdit] = useState<{\n kind: 'image' | 'audio';\n item: CanvasItem;\n initialTab?: 'aiedit';\n } | null>(null);\n /** Web-parity generator (dock Image/Video/Audio + toolbar Create Video). */\n const [generator, setGenerator] = useState<{\n mode: GeneratorMode;\n item?: CanvasItem | null;\n restyle?: boolean;\n initialPrompt?: string;\n } | null>(null);\n const [videoEdit, setVideoEdit] = useState<CanvasItem | null>(null);\n const [videoClips, setVideoClips] = useState<CanvasItem | 'url' | null>(null);\n const [showFrames, setShowFrames] = useState(false);\n const [showMoodboard, setShowMoodboard] = useState(false);\n const [showSet3d, setShowSet3d] = useState(false);\n const [showInfluencer, setShowInfluencer] = useState(false);\n const [showRecorder, setShowRecorder] = useState(false);\n /** Board selection for generate seed + edit tools. */\n const [boardSelectedItem, setBoardSelectedItem] = useState<CanvasItem | null>(null);\n /** Remote-side render in flight (stage label) or its failure. */\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n /** The durable export (canvasTasks kind 'export') the editor overlay is following. */\n const [exportTaskId, setExportTaskId] = useState<string | null>(null);\n const exportTask = useCanvasTask(exportTaskId);\n /** Design studio screen (opened from the grid); null = canvas screens. */\n const [designEntry, setDesignEntry] = useState<{ kind: DesignKind } | { channelId: string } | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n\n // The grid also lists the user's designs - fetched from the same index\n // under its `design` surface. Refreshes when the studio closes.\n useEffect(() => {\n if (skipFetch || !token || !indexUrl || designEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, generation]);\n\n useEffect(() => {\n if (!token && !effectiveRunAction && !apolloClient) {\n setFeaturedLooks([]);\n return;\n }\n let cancelled = false;\n void listStudioLooks(effectiveRunAction, { limit: 12 }, { client: apolloClient, token, indexUrl })\n .then((page) => {\n if (!cancelled) setFeaturedLooks(page.looks);\n })\n .catch(() => {\n if (!cancelled) setFeaturedLooks([]);\n });\n return () => {\n cancelled = true;\n };\n }, [apolloClient, effectiveRunAction, indexUrl, token]);\n\n /** Place generated/uploaded media on the open board — same as web addGeneratedItem. */\n const addBoardItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const placement = placementFor(type, src, opts);\n const target = boardsRef.current.find((entry) => entry.channelId === selectedId) ?? boardsRef.current[0];\n // Best guess for the caller; the updater re-places against the live items.\n const item: CanvasItem = mediaItemsFor(target?.board.items ?? [], [placement])[0];\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const [placed] = mediaItemsFor(entry.board.items, [{ ...placement, id: item.id }]);\n const items = [...entry.board.items, placed];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n return item;\n },\n [selectedId, channelId, indexUrl],\n );\n\n /** Gallery AI Chat: first generate opens a new board; closing with no media stays on the grid. */\n const openFreshBoardWithItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = mediaItemsFor([], [placementFor(type, src, opts)])[0];\n const entry = untitledBoard();\n const items = [item];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n const next: CanvasBoardSummary = {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);\n setBoards((prev) => [next, ...prev]);\n setSelectedId(entry.channelId);\n setGridAgentOpen(false);\n return item;\n },\n [indexUrl],\n );\n\n const addRenderedVideo = useCallback(\n (url: string, opts?: { name?: string; aspect?: string }) => addBoardItem('video', url, opts),\n [addBoardItem],\n );\n\n const patchItemSrc = useCallback(\n (itemId: string, url: string, type?: CanvasItem['type']) => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== selectedId) return entry;\n const items = entry.board.items.map((item) =>\n // New media: the old short link would point at the old object.\n item.id === itemId ? { ...item, src, share: undefined, ...(type ? { type } : {}) } : item,\n );\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n }),\n );\n },\n [selectedId, indexUrl],\n );\n\n // Same fallback rule as the connector seams: a host renderer wins, and\n // without one the remote drives the connector chain itself, so the\n // editor's checkmark produces a real video on old binaries too.\n const exportBusyRef = useRef(false);\n const effectiveOnExport = useMemo(() => {\n // The REMOTE renderer is preferred when it can run at all: it ships\n // with surface deploys, so every binary - old or new - exports with\n // the newest chain (soundtrack, future transitions) without an app\n // release. The host seam is only the last resort without a runner.\n if (!effectiveRunAction) return onExportVideo;\n const runAction = effectiveRunAction;\n const upload = effectiveUploadMedia;\n return (spec: VideoExportSpec) => {\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n // Durable lane: compiled timeline (transitions, segments, scene\n // layers) rendered detached on the connector, followed as a task\n // that survives the editor closing and an app relaunch. It falls\n // back to the client chain itself when SUBMIT is unavailable.\n void startExportTask(runAction, {\n spec,\n boardId: selectedId ?? '',\n brief: editorSeed?.projectTitle || selected?.board.title || selected?.title || 'Video export',\n upload,\n })\n .then((id) => setExportTaskId(id))\n .catch(() => {\n setExporting({ stage: 'Starting render' });\n return renderExportSpec(spec, runAction, upload, (p) => setExporting(p)).then((url) => {\n addRenderedVideo(url);\n setEditorSeed(null);\n setExporting(null);\n });\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'video export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n };\n }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo, selectedId, editorSeed, selected]);\n\n // A finished durable export lands on the canvas like the old inline one.\n useEffect(() => {\n if (!exportTask || exportTask.state !== 'succeeded' || exportTask.delivered || !exportTask.result?.url) return;\n markTaskDelivered(exportTask.id);\n addRenderedVideo(exportTask.result.url);\n setEditorSeed(null);\n setExportTaskId(null);\n }, [exportTask, addRenderedVideo]);\n\n const handleItemAction = useCallback(\n (action: CanvasItemAction, item: CanvasItem) => {\n // Match web canvas toolbar:\n // Create Video → generator (yantra-video-generation), image/video as reference\n // Promo → marketing produce submit/poll\n // Edit Video → yantra-video-editing ops (trim/speed/mute/…)\n // Clips → yantra-video-clip\n if (action === 'create-video') {\n setGenerator({ mode: 'video', item });\n return;\n }\n if (action === 'restyle-video') {\n setGenerator({ mode: 'video', item, restyle: true });\n return;\n }\n if (action === 'promo-video') {\n setGenerator({ mode: 'promo', item });\n return;\n }\n if (action === 'edit-video') {\n setVideoEdit(item);\n return;\n }\n if (action === 'trim-video') {\n setVideoClips(item);\n return;\n }\n if ((action === 'edit-image' || action === 'mark-edit') && effectiveRunAction) {\n setMediaEdit({\n kind: 'image',\n item,\n ...(action === 'mark-edit' ? { initialTab: 'aiedit' as const } : {}),\n });\n return;\n }\n if (action === 'edit-audio' && effectiveRunAction) {\n setMediaEdit({ kind: 'audio', item });\n return;\n }\n onItemAction?.(action, item);\n },\n [onItemAction, effectiveRunAction],\n );\n\n const handleUseTemplate = useCallback(async (template: CanvasPromptTemplate) => {\n try {\n const imported = await loadTemplateTimeline(template);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n } catch {\n // Agent / editor surfaces their own notices when Use fails in-editor.\n }\n }, []);\n\n /** Home's Photo / Audio editor: pick the file first, then edit it on a fresh board (web opens its upload screen). */\n const pickThenEdit = useCallback(\n async (kind: 'image' | 'audio') => {\n if (!onPickLocalMedia) return;\n try {\n const picked = await onPickLocalMedia(undefined, kind === 'image' ? 'library' : 'file');\n const first = picked.find((p) => p.type === kind);\n if (!first) return;\n const item = openFreshBoardWithItem(kind, first.src, {\n name: first.generatedAssetName,\n ...(first.width > 0 && first.height > 0\n ? { size: { width: first.width, height: first.height } }\n : {}),\n });\n setMediaEdit({ kind, item });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] pick for editor failed:', err);\n }\n }\n },\n [onPickLocalMedia, openFreshBoardWithItem],\n );\n\n /** Tiles home can run here: the photo/audio editors need a picker and a connector runner. */\n const canRunCreate = useCallback(\n (action: CreateAction) =>\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction),\n [onPickLocalMedia, effectiveRunAction],\n );\n const createGroups = useMemo(() => visibleCreateGroups(canRunCreate), [canRunCreate]);\n\n /**\n * Screen one's Create tile (web `actFromHome`): a design kind opens the\n * design studio; a generator or studio opens on a fresh board, so what it\n * makes lands there and closing it leaves a canvas, not someone's old board.\n */\n const handleCreate = useCallback(\n (action: CreateAction) => {\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Native slides are the design studio's deck (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ kind: 'design' });\n return;\n }\n handleNewCanvas();\n if (action.mode === 'clips') setVideoClips('url');\n else setGenerator({ mode: action.mode });\n return;\n }\n if (action.studio === 'image' || action.studio === 'audio') {\n void pickThenEdit(action.studio);\n return;\n }\n handleNewCanvas();\n switch (action.studio) {\n case 'record':\n setShowRecorder(true);\n return;\n case 'ai-cut':\n handleDockStudio('agent');\n return;\n case 'set':\n handleDockStudio('set3d');\n return;\n default:\n handleDockStudio(action.studio);\n }\n },\n [handleNewCanvas, handleDockStudio, pickThenEdit],\n );\n\n /** A media link (web `?media=`): a new board holding it, its editor open. */\n const openMediaLink = useCallback(\n async (link: MediaLink) => {\n const size =\n link.kind === 'image'\n ? await new Promise<{ width: number; height: number } | undefined>((resolve) => {\n // Whichever comes first, the size or the deadline, decides the tile.\n const timer = setTimeout(() => resolve(undefined), MEDIA_LINK_MEASURE_MS);\n RNImage.getSize(\n link.src,\n (width, height) => {\n clearTimeout(timer);\n resolve(width > 0 && height > 0 ? { width, height } : undefined);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n })\n : undefined;\n const item = openFreshBoardWithItem(link.kind, link.src, {\n name:\n link.name ?? link.fileName?.replace(/\\.[^.]+$/, '') ?? (link.kind === 'image' ? 'Image' : 'Video'),\n ...(size ? { size } : {}),\n });\n if (link.kind === 'video') setEditorSeed({ itemId: item.id });\n else if (effectiveRunAction) setMediaEdit({ kind: 'image', item });\n },\n [openFreshBoardWithItem, effectiveRunAction],\n );\n\n // Deep links run once. A design opens straight away; media and Create\n // tiles wait for the first index read, whose wholesale `setBoards` would\n // otherwise drop the board they make.\n const designLinkRanRef = useRef(false);\n useEffect(() => {\n if (designLinkRanRef.current || skipFetch) return;\n designLinkRanRef.current = true;\n const entry = parseDesignLink({ designId, designTemplateId, artifactId });\n if (entry) setDesignEntry(entry);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const boardLinkRanRef = useRef(false);\n useEffect(() => {\n if (boardLinkRanRef.current || skipFetch || !boardsSettled) return;\n boardLinkRanRef.current = true;\n if (parseDesignLink({ designId, designTemplateId, artifactId })) return;\n const mediaLink = parseMediaLink(media);\n if (mediaLink) {\n void openMediaLink(mediaLink);\n return;\n }\n const action = parseCreateTileLink(createTile);\n if (action) handleCreate(action);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardsSettled, skipFetch]);\n\n if (generator) {\n return (\n <VideoGeneratorExperience\n mode={generator.mode}\n item={generator.item}\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n runAction={effectiveRunAction}\n onClose={() => setGenerator(null)}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n setGenerator(null);\n }}\n onPromoDesigned={(designed) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setGenerator(null);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n />\n );\n }\n\n if (showFrames) {\n return (\n <FrameExtractorExperience\n boardItems={selected?.board.items ?? []}\n seedVideo={boardSelectedItem?.type === 'video' ? boardSelectedItem : null}\n runAction={effectiveRunAction}\n onClose={() => setShowFrames(false)}\n onPlace={(urls) => {\n urls.forEach((url, i) => addBoardItem('image', url, { name: `Frame ${i + 1}` }));\n setShowFrames(false);\n }}\n />\n );\n }\n\n if (showMoodboard) {\n return (\n <MoodboardExperience\n boardItems={selected?.board.items ?? []}\n onClose={() => setShowMoodboard(false)}\n onUseBrief={(brief) => {\n setShowMoodboard(false);\n setGenerator({ mode: 'image', initialPrompt: brief });\n }}\n />\n );\n }\n\n if (showSet3d) {\n return (\n <SetStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n token={token}\n indexUrl={indexUrl}\n onClose={() => setShowSet3d(false)}\n onPlace={(kind, url, name) => {\n addBoardItem(kind, url, { name });\n }}\n />\n );\n }\n\n if (showRecorder) {\n return (\n <CameraRecorderExperience\n onClose={() => setShowRecorder(false)}\n onPick={async (source) => {\n if (!onPickLocalMedia) return [];\n return onPickLocalMedia(undefined, source);\n }}\n onPlaced={(items) => {\n for (const item of items) {\n addBoardItem(item.type === 'video' ? 'video' : 'image', item.src, {\n name: item.generatedAssetName,\n });\n }\n }}\n />\n );\n }\n\n if (showInfluencer) {\n return (\n <InfluencerStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setShowInfluencer(false)}\n onPlace={(url, name) => {\n addBoardItem('video', url, { name, aspect: '9:16' });\n setShowInfluencer(false);\n }}\n />\n );\n }\n\n if (videoEdit) {\n return (\n <VideoEditExperience\n src={videoEdit.src}\n name={videoEdit.generatedAssetName}\n items={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setVideoEdit(null)}\n onApplied={(url, kind) => {\n if (kind === 'audio') {\n addBoardItem('audio', url, { name: 'Extracted audio' });\n } else {\n patchItemSrc(videoEdit.id, url, kind === 'image' ? 'image' : 'video');\n }\n setVideoEdit(null);\n }}\n />\n );\n }\n\n if (videoClips) {\n return (\n <VideoClipsExperience\n item={videoClips === 'url' ? null : videoClips}\n runAction={effectiveRunAction}\n onClose={() => setVideoClips(null)}\n onClips={(urls, aspect) => {\n urls.forEach((url, i) => addRenderedVideo(url, { name: `Clip ${i + 1}`, aspect }));\n setVideoClips(null);\n }}\n />\n );\n }\n\n if (explicitBoard) {\n return (\n <NativeCanvasViewer\n board={playableBoard(explicitBoard)}\n controls\n onItemAction={handleItemAction}\n testID={testID}\n />\n );\n }\n\n if (sessionError) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t open your canvases\"\n detail={sessionError}\n onRetry={onRetrySession}\n />\n );\n }\n\n if (error && boards.length === 0) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t load your canvases\"\n detail={error}\n fine={describeSession(token, indexUrl)}\n onRetry={reload}\n />\n );\n }\n\n // Grid is screen one (web CanvasBoards). Opening a board is screen two.\n\n if (mediaEdit) {\n const shared = {\n src: mediaEdit.item.src,\n name: mediaEdit.item.generatedAssetName,\n runAction: effectiveRunAction,\n onClose: () => setMediaEdit(null),\n onSave: (url: string) => {\n patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);\n setMediaEdit(null);\n },\n };\n return mediaEdit.kind === 'image' ? (\n <ImageEditorExperience {...shared} initialTab={mediaEdit.initialTab} />\n ) : (\n <AudioEditorExperience {...shared} />\n );\n }\n\n if (editorSeed) {\n return (\n <View style={styles.fill}>\n <VideoEditorExperience\n items={selected?.board.items ?? []}\n seedItemId={editorSeed.itemId}\n initialTimeline={editorSeed.initialTimeline}\n projectTitle={editorSeed.projectTitle || selected?.board.title || selected?.title}\n initialLogoSrc={editorSeed.logoSrc}\n onClose={() => setEditorSeed(null)}\n onExport={effectiveOnExport}\n onPickLocalMedia={onPickLocalMedia}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n audioRecorder={audioRecorder}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n initialRailTab={editorSeed.initialRailTab}\n />\n {exportTask ? (\n <View style={styles.exportOverlay}>\n <ExportTaskCard\n task={exportTask}\n onDismiss={() => {\n dismissCanvasTask(exportTask.id);\n setExportTaskId(null);\n }}\n onBackground={() => setExportTaskId(null)}\n />\n </View>\n ) : exporting ? (\n <View style={styles.exportOverlay}>\n <View style={styles.exportCard}>\n {exporting.error ? (\n <>\n <Text style={styles.exportError}>Export failed</Text>\n <Text style={styles.exportStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable\n onPress={() => setExporting(null)}\n style={styles.exportDismiss}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (designEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignExperience\n token={token}\n indexUrl={indexUrl}\n entry={designEntry}\n onClose={() => setDesignEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n runMediaAction={effectiveRunAction}\n />\n </View>\n );\n }\n\n if (!selected) {\n return (\n <View style={styles.fill} testID={testID}>\n {loading && boards.length === 0 ? (\n <View style={styles.gridLoading} pointerEvents=\"none\">\n <ActivityIndicator size=\"small\" />\n </View>\n ) : null}\n <CanvasBoardsGrid\n boards={boards.filter((entry) => entry.itemCount > 0)}\n onOpen={setSelectedId}\n onNewCanvas={handleNewCanvas}\n designs={designs}\n onOpenDesign={(designChannelId) => setDesignEntry({ channelId: designChannelId })}\n onAskAgent={handleAskAgentFromGrid}\n createGroups={createGroups}\n onCreate={handleCreate}\n runAction={effectiveRunAction}\n featuredLooks={featuredLooks}\n onRecreateLook={(look) => {\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n });\n }}\n />\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n runAction={effectiveRunAction}\n boardItems={[]}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return openFreshBoardWithItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.fill} testID={testID}>\n <CanvasToolDock\n busy={mediaBusy}\n boards={boards}\n boardId={selectedId}\n runAction={effectiveRunAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n seedItem={boardSelectedItem}\n dockHidden={agentOpen}\n onUpload={(source) => void handleAddPhotos(source)}\n onPickDeviceStill={\n onPickLocalMedia\n ? async () => {\n // A generator reference slot: the connector fetches it, so it must be hosted.\n const picked = await onPickLocalMedia(undefined, 'library');\n const first = picked.find((p) => p.type === 'image');\n if (!first) return null;\n return /^https?:/i.test(first.src) || !effectiveUploadMedia\n ? first.src\n : effectiveUploadMedia(first.src);\n }\n : undefined\n }\n onPlace={(item) =>\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n })\n }\n onPickStorage={(kind, url, name) => addBoardItem(kind, url, { name })}\n onStudio={handleDockStudio}\n onSlides={() => setDesignEntry({ kind: 'design' })}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : meta.mode === 'clips' ? 'Clip' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onPromoDesigned={(designed: DesignedPromo) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n onEditReplaced={(itemId, url) => patchItemSrc(itemId, url)}\n onEditVideo={(item) => setVideoEdit(item)}\n onRecord={() => setShowRecorder(true)}\n >\n <NativeCanvasViewer\n board={playableBoard(selected.board)}\n controls\n onBoardsPress={closeBoard}\n onItemAction={handleItemAction}\n onBoardChange={handleBoardChange}\n onAgentOpenChange={setAgentOpen}\n onSelectionChange={setBoardSelectedItem}\n runAction={effectiveRunAction}\n onAgentGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onAgentReplace={(itemId, url) => patchItemSrc(itemId, url)}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n shareLinks={token && indexUrl ? { token, indexUrl } : undefined}\n />\n </CanvasToolDock>\n {uploadStatus ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n {mediaBusy ? <ActivityIndicator size=\"small\" color=\"#2563eb\" /> : null}\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {uploadStatus}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction Notice({\n isDark,\n title,\n detail,\n fine,\n primaryLabel,\n onPrimary,\n onRetry,\n retryLabel = 'Try again',\n}: {\n isDark: boolean;\n title: string;\n detail: string;\n /** Session/context fine print - the who-and-where behind the state. */\n fine?: string;\n primaryLabel?: string;\n onPrimary?: () => void;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>{title}</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary ? (\n <Pressable onPress={onPrimary} style={styles.primaryCta} accessibilityRole=\"button\">\n <Text style={styles.primaryCtaLabel}>{primaryLabel ?? 'Create'}</Text>\n </Pressable>\n ) : null}\n {onRetry ? (\n <Pressable onPress={onRetry} style={styles.retry} accessibilityRole=\"button\">\n <Text style={styles.retryLabel}>{retryLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n primaryCta: {\n marginTop: 16,\n paddingHorizontal: 22,\n paddingVertical: 11,\n borderRadius: 11,\n backgroundColor: '#2563eb',\n },\n primaryCtaLabel: { color: '#ffffff', fontSize: 14, fontWeight: '600' },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: 12,\n right: 16,\n zIndex: 4,\n },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 15, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n fine: { marginTop: 10, fontSize: 11, color: '#94a3b8', textAlign: 'center', paddingHorizontal: 20, lineHeight: 15 },\n spaced: { marginTop: 10 },\n textLight: { color: '#f8fafc' },\n textMuted: { color: '#94a3b8' },\n retry: { marginTop: 16, paddingHorizontal: 18, paddingVertical: 10, borderRadius: 10, backgroundColor: '#2563eb' },\n retryLabel: { color: '#ffffff', fontSize: 13, fontWeight: '600' },\n backPill: {\n position: 'absolute',\n top: 12,\n left: 12,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n maxWidth: 220,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderRadius: 12,\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n backLabel: { fontSize: 15, fontWeight: '600', color: '#475569' },\n uploadToast: {\n position: 'absolute',\n top: 56,\n left: 16,\n right: 16,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n paddingHorizontal: 14,\n paddingVertical: 12,\n borderRadius: 14,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 4 },\n elevation: 6,\n },\n uploadToastText: { flex: 1, fontSize: 14, fontWeight: '600', color: '#0f172a' },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 32,\n },\n exportCard: {\n minWidth: 220,\n maxWidth: 320,\n alignItems: 'center',\n gap: 10,\n backgroundColor: '#17171C',\n borderRadius: 16,\n paddingVertical: 20,\n paddingHorizontal: 24,\n },\n exportStage: { fontSize: 13, color: '#CBD5E1', textAlign: 'center' },\n exportError: { fontSize: 15, fontWeight: '600', color: '#F87171' },\n exportDismiss: {\n marginTop: 4,\n backgroundColor: '#26262E',\n borderRadius: 16,\n paddingHorizontal: 14,\n paddingVertical: 8,\n },\n exportDismissLabel: { fontSize: 13, fontWeight: '600', color: '#F7F7FA' },\n});\n\nexport default CanvasExperience;\n"],"names":["_a","_b","_c","RNImage","dismissCanvasTask"],"mappings":"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"}