@adminide-stack/yantra-mobile 12.0.131 → 12.0.132-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 (149) hide show
  1. package/lib/components/CustomDrawer.js +2 -2
  2. package/lib/components/CustomDrawer.js.map +1 -1
  3. package/lib/features/apps/AppsCatalog.js +7 -1
  4. package/lib/features/apps/AppsCatalog.js.map +1 -1
  5. package/lib/features/apps/nativeSurfaceTwin.js +35 -0
  6. package/lib/features/apps/nativeSurfaceTwin.js.map +1 -0
  7. package/lib/features/canvas/CanvasBoardsGrid.js +49 -49
  8. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  9. package/lib/features/canvas/CanvasExperience.js +69 -28
  10. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  11. package/lib/features/canvas/audioEditor/AudioWaveform.js +1 -1
  12. package/lib/features/canvas/designCatalog.js +63 -39
  13. package/lib/features/canvas/designCatalog.js.map +1 -1
  14. package/lib/features/canvas/designCategories.js +56 -0
  15. package/lib/features/canvas/designCategories.js.map +1 -1
  16. package/lib/features/canvas/generator/DirectorSheet.js +3 -2
  17. package/lib/features/canvas/generator/DirectorSheet.js.map +1 -1
  18. package/lib/features/canvas/home/HeroComposer.js +165 -76
  19. package/lib/features/canvas/home/HeroComposer.js.map +1 -1
  20. package/lib/features/canvas/home/HeroMonitor.js +75 -46
  21. package/lib/features/canvas/home/HeroMonitor.js.map +1 -1
  22. package/lib/features/canvas/home/TemplatesGallery.js +273 -138
  23. package/lib/features/canvas/home/TemplatesGallery.js.map +1 -1
  24. package/lib/features/canvas/home/templatesGallerySources.js +221 -0
  25. package/lib/features/canvas/home/templatesGallerySources.js.map +1 -0
  26. package/lib/features/canvas/homeWork.js +12 -11
  27. package/lib/features/canvas/homeWork.js.map +1 -1
  28. package/lib/features/canvas/lazyEditors.js +51 -0
  29. package/lib/features/canvas/lazyEditors.js.map +1 -0
  30. package/lib/features/canvas/rankedCatalogSearch.js +33 -23
  31. package/lib/features/canvas/rankedCatalogSearch.js.map +1 -1
  32. package/lib/features/canvas/set/SetViewportWebView.js +1 -1
  33. package/lib/features/canvas/set/agent/tools.js +1 -1
  34. package/lib/features/canvas/studioCatalog.js +2 -2
  35. package/lib/features/canvas/studioCatalog.js.map +1 -1
  36. package/lib/features/canvas/templateSearch.js +8 -1
  37. package/lib/features/canvas/templateSearch.js.map +1 -1
  38. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +1 -1
  39. package/lib/features/design/DesignEditorExperience.js +103 -29
  40. package/lib/features/design/DesignEditorExperience.js.map +1 -1
  41. package/lib/features/design/DesignExperience.js +4 -3
  42. package/lib/features/design/DesignExperience.js.map +1 -1
  43. package/lib/features/design/doc/aiDesign.js +1 -1
  44. package/lib/features/design/doc/aiDesign.js.map +1 -1
  45. package/lib/features/design/doc/artifacts.js +40 -13
  46. package/lib/features/design/doc/artifacts.js.map +1 -1
  47. package/lib/features/design/doc/chart.js +387 -13
  48. package/lib/features/design/doc/chart.js.map +1 -1
  49. package/lib/features/design/doc/copyStyle.js +47 -0
  50. package/lib/features/design/doc/copyStyle.js.map +1 -0
  51. package/lib/features/design/doc/docOps.js +22 -4
  52. package/lib/features/design/doc/docOps.js.map +1 -1
  53. package/lib/features/design/doc/geometry.js +32 -18
  54. package/lib/features/design/doc/geometry.js.map +1 -1
  55. package/lib/features/design/doc/newDoc.js +5 -1
  56. package/lib/features/design/doc/newDoc.js.map +1 -1
  57. package/lib/features/design/doc/resize.js +101 -0
  58. package/lib/features/design/doc/resize.js.map +1 -0
  59. package/lib/features/design/doc/sizes.js +15 -2
  60. package/lib/features/design/doc/sizes.js.map +1 -1
  61. package/lib/features/design/editor/ChartDataPanel.js +49 -9
  62. package/lib/features/design/editor/ChartDataPanel.js.map +1 -1
  63. package/lib/features/design/editor/CropOverlay.js +1 -1
  64. package/lib/features/design/editor/DesignCanvas.js +14 -13
  65. package/lib/features/design/editor/DesignCanvas.js.map +1 -1
  66. package/lib/features/design/editor/ExportSheet.js +8 -4
  67. package/lib/features/design/editor/ExportSheet.js.map +1 -1
  68. package/lib/features/design/editor/LayerTools.js +37 -5
  69. package/lib/features/design/editor/LayerTools.js.map +1 -1
  70. package/lib/features/design/editor/Slideshow.js +30 -5
  71. package/lib/features/design/editor/Slideshow.js.map +1 -1
  72. package/lib/features/design/editor/useDesignSave.js +21 -36
  73. package/lib/features/design/editor/useDesignSave.js.map +1 -1
  74. package/lib/features/design/export/exportDesign.js +3 -1
  75. package/lib/features/design/export/exportDesign.js.map +1 -1
  76. package/lib/features/design/home/DesignHome.js +7 -2
  77. package/lib/features/design/home/DesignHome.js.map +1 -1
  78. package/lib/features/design/render/DesignPageView.js +1 -1
  79. package/lib/features/design/render/DesignPageView.js.map +1 -1
  80. package/lib/features/design/render/PageCapture.js +11 -10
  81. package/lib/features/design/render/PageCapture.js.map +1 -1
  82. package/lib/features/design/render/fontRegistry.js +27 -3
  83. package/lib/features/design/render/fontRegistry.js.map +1 -1
  84. package/lib/features/design/render/svgParts.js +27 -74
  85. package/lib/features/design/render/svgParts.js.map +1 -1
  86. package/lib/features/devices/brands/qnScale.js +7 -2
  87. package/lib/features/devices/brands/qnScale.js.map +1 -1
  88. package/lib/features/devices/brands/uuids.js +2 -1
  89. package/lib/features/devices/brands/uuids.js.map +1 -1
  90. package/lib/features/devices/devices.js +2 -1
  91. package/lib/features/devices/devices.js.map +1 -1
  92. package/lib/features/docs/DocBlockRow.js +1 -1
  93. package/lib/features/docs/docArtifacts.js +2 -2
  94. package/lib/features/docs/docArtifacts.js.map +1 -1
  95. package/lib/features/health/healthSync.js +3 -1
  96. package/lib/features/health/healthSync.js.map +1 -1
  97. package/lib/features/health/nativeHealth.js +8 -0
  98. package/lib/features/health/nativeHealth.js.map +1 -0
  99. package/lib/features/links/openInApp.js +11 -1
  100. package/lib/features/links/openInApp.js.map +1 -1
  101. package/lib/features/webbuilder/WebBuilderExperience.js +135 -28
  102. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  103. package/lib/features/webbuilder/buildFragments.js +14 -6
  104. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  105. package/lib/features/webbuilder/components/PreviewFrame.js +28 -3
  106. package/lib/features/webbuilder/components/PreviewFrame.js.map +1 -1
  107. package/lib/features/webbuilder/components/PreviewScreen.js +1 -1
  108. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  109. package/lib/features/webbuilder/components/ProjectChat.js +24 -5
  110. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  111. package/lib/features/webbuilder/components/ProjectsScreen.js +18 -2
  112. package/lib/features/webbuilder/components/ProjectsScreen.js.map +1 -1
  113. package/lib/features/webbuilder/components/ui.js +20 -6
  114. package/lib/features/webbuilder/components/ui.js.map +1 -1
  115. package/lib/features/webbuilder/exportCode.js +52 -0
  116. package/lib/features/webbuilder/exportCode.js.map +1 -0
  117. package/lib/features/webbuilder/siteAddress.js +71 -0
  118. package/lib/features/webbuilder/siteAddress.js.map +1 -0
  119. package/lib/features/webbuilder/widgetBlocks.js +30 -0
  120. package/lib/features/webbuilder/widgetBlocks.js.map +1 -0
  121. package/lib/screens/Chat/index.js +5 -6
  122. package/lib/screens/Chat/index.js.map +1 -1
  123. package/lib/screens/ChatHistory/index.js +3 -2
  124. package/lib/screens/ChatHistory/index.js.map +1 -1
  125. package/lib/screens/Home/HomeScreen.js +20 -4
  126. package/lib/screens/Home/HomeScreen.js.map +1 -1
  127. package/lib/screens/Home/components/WebBuilderCodePrewarm.js +18 -0
  128. package/lib/screens/Home/components/WebBuilderCodePrewarm.js.map +1 -0
  129. package/lib/screens/WebBuilderNative/index.js +1 -1
  130. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  131. package/lib/screens/WebBuilderNative/keepAlive.js +112 -0
  132. package/lib/screens/WebBuilderNative/keepAlive.js.map +1 -0
  133. package/lib/screens/WebBuilderNative/runningBuilds.js +40 -0
  134. package/lib/screens/WebBuilderNative/runningBuilds.js.map +1 -0
  135. package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js +57 -0
  136. package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js.map +1 -0
  137. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js +73 -14
  138. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js.map +1 -1
  139. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +143 -34
  140. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  141. package/lib/screens/WebBuilderNative/useWebBuilderJobs.js +17 -5
  142. package/lib/screens/WebBuilderNative/useWebBuilderJobs.js.map +1 -1
  143. package/lib/screens/WebBuilderNative/versionUndo.js +144 -0
  144. package/lib/screens/WebBuilderNative/versionUndo.js.map +1 -0
  145. package/lib/screens/WebBuilderNative/webbuilderSnapshotKey.js +1 -0
  146. package/lib/screens/WebBuilderNative/webbuilderSnapshotKey.js.map +1 -0
  147. package/lib/screens/WebBuilderNative/webbuilderTransport.js +90 -6
  148. package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
  149. package/package.json +4 -4
@@ -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, Image as RNImage, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\nimport { CanvasBoardsGrid, type TemplateRailsState } from './CanvasBoardsGrid';\nimport { DesignCategoryGallery, type LoadDesignCatalog } from './DesignCategoryGallery';\nimport { fetchDesignCatalog, fetchDesignCatalogViaClient, interleaveTemplateRows } from './designCatalog';\nimport { designCategoryFor, type DesignCategory } from './designCategories';\nimport { SEEDANCE_SHOWCASE, type ShowcaseClip } from './seedanceShowcase';\nimport { TemplatesGallery, type HomeGallerySource } from './home/TemplatesGallery';\nimport type { HeroSettings } from './home/heroShots';\nimport { WORK_ARTIFACTS } from './homeWork';\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 deriveBackendGraphqlUrl,\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 { isDocsCreate, visibleCreateGroups, type CreateAction } from './createTiles';\nimport {\n designEntryForCreate,\n designTemplateIdOf,\n parseCreateTileLink,\n parseDesignLink,\n parseDocLink,\n parseMediaLink,\n type MediaLink,\n} 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, type DesignEntry } from '../design/DesignExperience';\nimport { listDesignArtifacts, type DesignArtifact } from '../design/doc/artifacts';\nimport { DocsEditorExperience } from '../docs/DocsEditorExperience';\nimport { listDocArtifacts, type DocArtifact } from '../docs/docArtifacts';\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';\nimport { CanvasThemeProvider, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, ActionButton, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\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: opens the template in the native design studio. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n /**\n * @deprecated Ignored: templates and every design kind now open in the native\n * design studio, never the web canvas. Kept so existing hosts still typecheck.\n */\n onOpenWebCanvas?: (query: string) => void;\n /** @deprecated Ignored, as `onOpenWebCanvas`. */\n webCanvasUrl?: string;\n /**\n * Host-provided theme (the app's own light/dark). Used while the canvas\n * theme toggle is on \"system\"; absent -> the canvas follows the OS.\n */\n isDark?: boolean;\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\nfunction CanvasExperienceBody({\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 theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const isDark = theme.isDark;\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 /** A short home notice (the grid has no other toast). */\n const [homeNotice, setHomeNotice] = useState<string | null>(null);\n useEffect(() => {\n if (!homeNotice) return undefined;\n const timer = setTimeout(() => setHomeNotice(null), 3200);\n return () => clearTimeout(timer);\n }, [homeNotice]);\n /** The design category gallery (a Design & write tile, or \"See all\"). */\n const [designGallery, setDesignGallery] = useState<DesignCategory | null>(null);\n\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 // Docs open the native docs editor on a new doc (web Studios -> Docs).\n if (studio === 'docs') {\n setDocEntry({ docId: null });\n return;\n }\n // Match web studios: carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n if (studio === 'carousel') setDesignEntry({ categoryId: 'carousel' });\n else if (studio === 'flyers') setDesignEntry({ categoryId: 'flyer' });\n else setDesignEntry({ kind: 'design' });\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 /** Home hero / look seeds: VideoGeneratorExperience initialAspect / initialResolution / initialReferenceUrl. */\n aspect?: string;\n resolution?: string;\n referenceImageUrl?: 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<DesignEntry | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n /** Studio designs (`deck:` / `flyer:` rows, the web Design Studio's own) for Your work. */\n const [studioDesigns, setStudioDesigns] = useState<DesignArtifact[]>([]);\n /** Docs editor screen: a saved doc by id, or a new doc (null id). */\n const [docEntry, setDocEntry] = useState<{ docId: string | null } | null>(null);\n /** Rich-text docs (`doc:` rows, the web docs editor's own) for Your work. */\n const [workDocs, setWorkDocs] = useState<DocArtifact[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n /** Your work: the design index read (web `useWorkArtifacts`), 96 rows once \"Show all\" is open. */\n const [studioMore, setStudioMore] = useState(false);\n const [studioError, setStudioError] = useState<string | null>(null);\n const [workExpanded, setWorkExpanded] = useState(false);\n const [studioRead, setStudioRead] = useState(0);\n /** Home \"See all\" / hero \"Start from a template\": one gallery with source chips. */\n const [homeGallery, setHomeGallery] = useState<HomeGallerySource | null>(null);\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 || docEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n const limit = workExpanded ? WORK_ARTIFACTS.expanded : WORK_ARTIFACTS.collapsed;\n void listDesignArtifacts({ url: indexUrl, token, signal: controller.signal }, limit).then((result) => {\n if (controller.signal.aborted) return;\n // A failed refresh keeps the list it had; only an empty one reports the error.\n if (result.designs.length || !result.error) setStudioDesigns(result.designs);\n setStudioMore(result.more);\n setStudioError(result.error);\n });\n void listDocArtifacts({ url: indexUrl, token, signal: controller.signal }, limit).then((result) => {\n if (controller.signal.aborted) return;\n if (result.docs.length || !result.error) setWorkDocs(result.docs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, docEntry, generation, workExpanded, studioRead]);\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 // `web` tiles (presentation, banner, brochure...) open the native design studio.\n if (action.type === 'web') return true;\n return (\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction)\n );\n },\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 (isDocsCreate(action)) {\n setDocEntry({ docId: null });\n return;\n }\n if (action.type === 'web') {\n setDesignEntry(designEntryForCreate(action.create));\n return;\n }\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Slides are a presentation in the design studio (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ categoryId: 'presentation' });\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 /**\n * Catalog reads for \"Templates for you\" and the category gallery: the\n * backend directly (studio catalog's lane), else the host's Apollo client.\n */\n const loadDesignCatalog = useMemo<LoadDesignCatalog | undefined>(() => {\n const graphqlUrl = indexUrl ? deriveBackendGraphqlUrl(indexUrl) : null;\n if (graphqlUrl) return (group, opts) => fetchDesignCatalog(graphqlUrl, token, group, opts);\n if (apolloClient) return (group, opts) => fetchDesignCatalogViaClient(apolloClient, group, opts);\n return undefined;\n }, [indexUrl, token, apolloClient]);\n\n /** Web TemplateRails: 12 flyers and 12 slides, interleaved over two rows. */\n const [templateRails, setTemplateRails] = useState<TemplateRailsState | undefined>(undefined);\n const [templateRailsRead, setTemplateRailsRead] = useState(0);\n useEffect(() => {\n if (!loadDesignCatalog || skipFetch) {\n setTemplateRails(undefined);\n return undefined;\n }\n let live = true;\n setTemplateRails((prev) => ({ status: 'loading', rows: prev?.rows ?? [[], []] }));\n const read = (group: 'canvas-flyer' | 'canvas-presentation') =>\n loadDesignCatalog(group, { limit: 12, offset: 0 }).then(\n (page) => ({ ok: true as const, cards: page.cards }),\n () => ({ ok: false as const, cards: [] }),\n );\n void Promise.all([read('canvas-flyer'), read('canvas-presentation')]).then(([flyers, slides]) => {\n if (!live) return;\n const rows = interleaveTemplateRows(flyers.cards, slides.cards);\n setTemplateRails({ status: flyers.ok && slides.ok ? 'ready' : 'failed', rows });\n });\n return () => {\n live = false;\n };\n }, [loadDesignCatalog, skipFetch, templateRailsRead]);\n\n /** A Design & write tile with a gallery opens it; doc, custom and t-shirt run their own action. */\n const openCategory = useCallback((tileId: string): boolean => {\n const category = designCategoryFor(tileId);\n if (!category) return false;\n setDesignGallery(category);\n return true;\n }, []);\n\n /** A catalog template opens natively in the design studio. */\n const openTemplate = useCallback((templateId: string) => {\n setDesignGallery(null);\n setDesignEntry({ templateId });\n }, []);\n\n /** \"Use this prompt\" on a Seedance clip: a fresh canvas, the video generator seeded with it. */\n const handleShowcasePrompt = useCallback(\n (clip: ShowcaseClip) => {\n handleNewCanvas();\n setGenerator({ mode: 'video', initialPrompt: clip.prompt });\n },\n [handleNewCanvas],\n );\n\n /**\n * Home hero Generate (web `onStartWithPrompt`): a fresh canvas, the generator\n * seeded with the shot. A product reference reaches the video lane as its image item.\n */\n const handleStartWithPrompt = useCallback(\n (prompt: string, settings: HeroSettings) => {\n handleNewCanvas();\n setGenerator({\n mode: settings.mode,\n initialPrompt: prompt,\n aspect: settings.aspect,\n resolution: settings.resolution,\n ...(settings.referenceImageUrl ? { referenceImageUrl: settings.referenceImageUrl } : {}),\n });\n },\n [handleNewCanvas],\n );\n\n /** Hero Product chip: one device image, uploaded; its URL or null. */\n const pickHeroReference = useCallback(async (): Promise<string | null> => {\n if (!onPickLocalMedia) return null;\n const picked = await onPickLocalMedia(undefined, 'library');\n return picked.find((it) => it.type === 'image')?.src ?? null;\n }, [onPickLocalMedia]);\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 // A doc link (`?artifact=doc:<uuid>`) opens the docs editor, never the design studio.\n const docLink = parseDocLink({ designId, artifactId });\n if (docLink) {\n setDocEntry({ docId: docLink });\n return;\n }\n // A template link opens the template itself in the design studio; only a saved\n // design (designId / artifactId) wins over it.\n const templateId = designId || artifactId ? null : designTemplateIdOf(designTemplateId);\n if (templateId) {\n setDesignEntry({ templateId });\n return;\n }\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 if (parseDocLink({ designId, 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={\n generator.item ??\n (generator.referenceImageUrl && generator.mode === 'video'\n ? {\n id: 'hero-reference',\n type: 'image',\n src: generator.referenceImageUrl,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n zIndex: 0,\n }\n : undefined)\n }\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n initialAspect={generator.aspect}\n initialResolution={generator.resolution}\n initialReferenceUrl={generator.referenceImageUrl}\n boardId={selectedId}\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 runAction={effectiveRunAction}\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, 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 libraryItems: selected?.board.items ?? [],\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={({ pressed }) => [styles.exportDismiss, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color={theme.edInk} />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (docEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DocsEditorExperience\n token={token}\n indexUrl={indexUrl}\n docId={docEntry.docId}\n onClose={() => setDocEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n />\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 && homeGallery) {\n return (\n <View style={styles.fill} testID={testID}>\n <TemplatesGallery\n initialSource={homeGallery}\n runAction={effectiveRunAction}\n loadDesignCatalog={loadDesignCatalog}\n onClose={() => setHomeGallery(null)}\n onUseVideoTemplate={(template) => {\n setHomeGallery(null);\n handleNewCanvas();\n setGenerator({\n mode: 'video',\n initialPrompt: template.prompt,\n ...(template.aspect ? { aspect: template.aspect } : {}),\n });\n }}\n onBlank={(size) => {\n setHomeGallery(null);\n setDesignEntry({ sizeId: size.id });\n }}\n onOpenTemplate={(card) => {\n setHomeGallery(null);\n openTemplate(card.id);\n }}\n />\n </View>\n );\n }\n\n if (!selected && designGallery) {\n const category = designGallery;\n return (\n <View style={styles.fill} testID={testID}>\n <DesignCategoryGallery\n category={category}\n load={loadDesignCatalog}\n onClose={() => setDesignGallery(null)}\n onBlank={(size) => {\n // Every category's blank opens at its own size in the design studio.\n setDesignGallery(null);\n setDesignEntry({ sizeId: size.id });\n }}\n onOpenTemplate={(card) => openTemplate(card.id)}\n />\n {homeNotice ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {homeNotice}\n </Text>\n </View>\n ) : null}\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 studioDesigns={studioDesigns}\n onOpenStudioDesign={(id) => setDesignEntry({ artifactId: id })}\n docs={workDocs}\n onOpenDoc={(id) => setDocEntry({ docId: id })}\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 ...(look.aspect ? { aspect: look.aspect } : {}),\n });\n }}\n onOpenCategory={openCategory}\n templateRails={templateRails}\n onOpenTemplate={openTemplate}\n onSeeAllTemplates={() => setHomeGallery('flyers')}\n onRetryTemplates={() => setTemplateRailsRead((n) => n + 1)}\n showcase={SEEDANCE_SHOWCASE}\n onUseShowcasePrompt={handleShowcasePrompt}\n onStartWithPrompt={handleStartWithPrompt}\n onPickReference={onPickLocalMedia ? pickHeroReference : undefined}\n onBrowseTemplates={() => setHomeGallery('video')}\n studioMore={studioMore}\n studioError={studioError}\n onRetryStudioDesigns={() => setStudioRead((n) => n + 1)}\n onExpandWork={setWorkExpanded}\n currentSessionId={channelId}\n onOpenSession={(sessionId) => {\n setBoards((prev) =>\n prev.some((entry) => entry.channelId === sessionId)\n ? prev\n : [untitledBoard(sessionId), ...prev],\n );\n setSelectedId(sessionId);\n }}\n />\n {homeNotice ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {homeNotice}\n </Text>\n </View>\n ) : null}\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n onOpenDesign={(artifactId) => setDesignEntry({ artifactId })}\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({ categoryId: 'presentation' })}\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={theme.info} /> : 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 const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]} accessibilityRole=\"header\">\n {title}\n </Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary || onRetry ? (\n <View style={styles.noticeActions}>\n {onPrimary ? <ActionButton label={primaryLabel ?? 'Create'} onPress={onPrimary} /> : null}\n {onRetry ? (\n <ActionButton\n label={retryLabel}\n onPress={onRetry}\n variant={onPrimary ? 'secondary' : 'primary'}\n />\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\n/**\n * The exposed experience: mounts the canvas theme (OS / host mode / persisted\n * toggle) so every screen below can call useCanvasTheme().\n */\nexport function CanvasExperience(props: CanvasExperienceProps) {\n const hostMode = props.isDark == null ? null : props.isDark ? 'dark' : 'light';\n return (\n <CanvasThemeProvider mode={hostMode}>\n <CanvasExperienceBody {...props} />\n </CanvasThemeProvider>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n noticeActions: {\n marginTop: SPACE.xl,\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: SPACE.sm,\n },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: SPACE.md,\n right: SPACE.lg,\n zIndex: 4,\n },\n center: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: SPACE.xxl,\n paddingVertical: SPACE.xl,\n backgroundColor: theme.background,\n },\n title: {\n ...TYPE.title,\n fontSize: 19,\n lineHeight: 24,\n color: theme.foreground,\n textAlign: 'center',\n marginBottom: SPACE.sm,\n },\n detail: { ...TYPE.body, color: theme.mutedForeground, textAlign: 'center', maxWidth: 320 },\n fine: {\n ...TYPE.caption,\n fontWeight: '400',\n marginTop: SPACE.md,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n spaced: { marginTop: SPACE.md - 2 },\n textLight: { color: theme.foreground },\n textMuted: { color: theme.mutedForeground },\n backPill: {\n position: 'absolute',\n top: SPACE.md,\n left: SPACE.md,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm - 2,\n maxWidth: 220,\n minHeight: 40,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n backLabel: { ...TYPE.label, color: theme.foreground },\n uploadToast: {\n position: 'absolute',\n top: 60,\n left: SPACE.lg,\n right: SPACE.lg,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md - 2,\n minHeight: 48,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.md - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.isDark ? theme.card : theme.surface,\n borderWidth: theme.isDark ? StyleSheet.hairlineWidth : 0,\n borderColor: theme.border,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0.4 : 0.12,\n shadowRadius: 18,\n shadowOffset: { width: 0, height: 6 },\n elevation: 8,\n },\n uploadToastText: { ...TYPE.label, fontSize: 14, flex: 1, color: theme.foreground },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: SPACE.xxl,\n },\n exportCard: {\n minWidth: 240,\n maxWidth: 320,\n alignItems: 'center',\n gap: SPACE.md,\n backgroundColor: theme.edPanel,\n borderRadius: RADIUS.xl,\n paddingVertical: SPACE.xl,\n paddingHorizontal: SPACE.xl,\n },\n exportStage: { ...TYPE.body, fontSize: 14, color: theme.edInk2, textAlign: 'center' },\n exportError: { ...TYPE.title, color: theme.edDanger },\n exportDismiss: {\n marginTop: SPACE.xs,\n minHeight: 40,\n justifyContent: 'center',\n backgroundColor: theme.edRaisedHi,\n borderRadius: RADIUS.pill,\n paddingHorizontal: SPACE.lg + 2,\n },\n exportDismissLabel: { ...TYPE.label, color: theme.edInk },\n }),\n);\n\nexport default CanvasExperience;\n"],"names":["_a","_b","_c","RNImage","dismissCanvasTask","artifactId"],"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, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\n// Editors and studios load when opened, not with the home (see lazyEditors.tsx).\nimport {\n AudioEditorExperience,\n CameraRecorderExperience,\n DesignExperience,\n DocsEditorExperience,\n FrameExtractorExperience,\n ImageEditorExperience,\n InfluencerStudioExperience,\n MoodboardExperience,\n SetStudioExperience,\n VideoClipsExperience,\n VideoEditExperience,\n VideoEditorExperience,\n VideoGeneratorExperience,\n} from './lazyEditors';\nimport { CanvasBoardsGrid, type TemplateRailsState } from './CanvasBoardsGrid';\nimport { DesignCategoryGallery, type LoadDesignCatalog } from './DesignCategoryGallery';\nimport { fetchDesignCatalog, fetchDesignCatalogViaClient, interleaveTemplateRows } from './designCatalog';\nimport { designCategoryFor, type DesignCategory } from './designCategories';\nimport { SEEDANCE_SHOWCASE, type ShowcaseClip } from './seedanceShowcase';\nimport { TemplatesGallery, type HomeGallerySource } from './home/TemplatesGallery';\nimport type { HeroSettings } from './home/heroShots';\nimport { WORK_ARTIFACTS, WORK_READ_MAX, nextWorkReadLimit } from './homeWork';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport type { VideoExportSpec } from './VideoEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n createRemoteRunAction,\n createRemoteUploadMedia,\n deriveBackendGraphqlUrl,\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 { isDocsCreate, visibleCreateGroups, type CreateAction } from './createTiles';\nimport {\n designEntryForCreate,\n designTemplateIdOf,\n parseCreateTileLink,\n parseDesignLink,\n parseDocLink,\n parseMediaLink,\n type MediaLink,\n} 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 type { DesignEntry } from '../design/DesignExperience';\nimport { listDesignArtifacts, type DesignArtifact } from '../design/doc/artifacts';\nimport { listDocArtifacts, type DocArtifact } from '../docs/docArtifacts';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport type { GeneratorMode } from './VideoGeneratorExperience';\nimport { configureServerTasks } from './serverTasks';\nimport { setCanvasTasksHost } from './canvasTaskSync';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\nimport { CanvasThemeProvider, useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, ActionButton, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\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: opens the template in the native design studio. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n /**\n * @deprecated Ignored: templates and every design kind now open in the native\n * design studio, never the web canvas. Kept so existing hosts still typecheck.\n */\n onOpenWebCanvas?: (query: string) => void;\n /** @deprecated Ignored, as `onOpenWebCanvas`. */\n webCanvasUrl?: string;\n /**\n * Host-provided theme (the app's own light/dark). Used while the canvas\n * theme toggle is on \"system\"; absent -> the canvas follows the OS.\n */\n isDark?: boolean;\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\nfunction CanvasExperienceBody({\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 theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const isDark = theme.isDark;\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 /** A short home notice (the grid has no other toast). */\n const [homeNotice, setHomeNotice] = useState<string | null>(null);\n useEffect(() => {\n if (!homeNotice) return undefined;\n const timer = setTimeout(() => setHomeNotice(null), 3200);\n return () => clearTimeout(timer);\n }, [homeNotice]);\n /** The design category gallery (a Design & write tile, or \"See all\"). */\n const [designGallery, setDesignGallery] = useState<DesignCategory | null>(null);\n\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 // Docs open the native docs editor on a new doc (web Studios -> Docs).\n if (studio === 'docs') {\n setDocEntry({ docId: null });\n return;\n }\n // Match web studios: carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n if (studio === 'carousel') setDesignEntry({ categoryId: 'carousel' });\n else if (studio === 'flyers') setDesignEntry({ categoryId: 'flyer' });\n else setDesignEntry({ kind: 'design' });\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 /** Home hero / look seeds: VideoGeneratorExperience initialAspect / initialResolution / initialReferenceUrl. */\n aspect?: string;\n resolution?: string;\n referenceImageUrl?: 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<DesignEntry | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n /** Studio designs (`deck:` / `flyer:` rows, the web Design Studio's own) for Your work. */\n const [studioDesigns, setStudioDesigns] = useState<DesignArtifact[]>([]);\n /** Docs editor screen: a saved doc by id, or a new doc (null id). */\n const [docEntry, setDocEntry] = useState<{ docId: string | null } | null>(null);\n /** Rich-text docs (`doc:` rows, the web docs editor's own) for Your work. */\n const [workDocs, setWorkDocs] = useState<DocArtifact[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n /** Your work: the design index read (web `useWorkArtifacts`), 96 rows once \"Show all\" is open. */\n const [studioMore, setStudioMore] = useState(false);\n const [studioError, setStudioError] = useState<string | null>(null);\n /** How many designs of each kind Your work reads; grows a step at a time as the list pages. */\n const [workReadLimit, setWorkReadLimit] = useState<number>(WORK_ARTIFACTS.collapsed);\n const [studioRead, setStudioRead] = useState(0);\n /** Home \"See all\" / hero \"Start from a template\": one gallery with source chips. */\n const [homeGallery, setHomeGallery] = useState<HomeGallerySource | null>(null);\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 || docEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n const limit = workReadLimit;\n void listDesignArtifacts({ url: indexUrl, token, signal: controller.signal }, limit).then((result) => {\n if (controller.signal.aborted) return;\n // A failed refresh keeps the list it had; only an empty one reports the error.\n if (result.designs.length || !result.error) setStudioDesigns(result.designs);\n setStudioMore(result.more);\n setStudioError(result.error);\n });\n void listDocArtifacts({ url: indexUrl, token, signal: controller.signal }, limit).then((result) => {\n if (controller.signal.aborted) return;\n if (result.docs.length || !result.error) setWorkDocs(result.docs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, docEntry, generation, workReadLimit, studioRead]);\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 // `web` tiles (presentation, banner, brochure...) open the native design studio.\n if (action.type === 'web') return true;\n return (\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction)\n );\n },\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 (isDocsCreate(action)) {\n setDocEntry({ docId: null });\n return;\n }\n if (action.type === 'web') {\n setDesignEntry(designEntryForCreate(action.create));\n return;\n }\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Slides are a presentation in the design studio (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ categoryId: 'presentation' });\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 /**\n * Catalog reads for \"Templates for you\" and the category gallery: the\n * backend directly (studio catalog's lane), else the host's Apollo client.\n */\n const loadDesignCatalog = useMemo<LoadDesignCatalog | undefined>(() => {\n const graphqlUrl = indexUrl ? deriveBackendGraphqlUrl(indexUrl) : null;\n if (graphqlUrl) return (group, opts) => fetchDesignCatalog(graphqlUrl, token, group, opts);\n if (apolloClient) return (group, opts) => fetchDesignCatalogViaClient(apolloClient, group, opts);\n return undefined;\n }, [indexUrl, token, apolloClient]);\n\n /** Web TemplateRails: 12 flyers and 12 slides, interleaved over two rows. */\n const [templateRails, setTemplateRails] = useState<TemplateRailsState | undefined>(undefined);\n const [templateRailsRead, setTemplateRailsRead] = useState(0);\n useEffect(() => {\n if (!loadDesignCatalog || skipFetch) {\n setTemplateRails(undefined);\n return undefined;\n }\n let live = true;\n setTemplateRails((prev) => ({ status: 'loading', rows: prev?.rows ?? [[], []] }));\n const read = (group: 'canvas-flyer' | 'canvas-presentation') =>\n loadDesignCatalog(group, { limit: 12, offset: 0 }).then(\n (page) => ({ ok: true as const, cards: page.cards }),\n () => ({ ok: false as const, cards: [] }),\n );\n void Promise.all([read('canvas-flyer'), read('canvas-presentation')]).then(([flyers, slides]) => {\n if (!live) return;\n const rows = interleaveTemplateRows(flyers.cards, slides.cards);\n setTemplateRails({ status: flyers.ok && slides.ok ? 'ready' : 'failed', rows });\n });\n return () => {\n live = false;\n };\n }, [loadDesignCatalog, skipFetch, templateRailsRead]);\n\n /** A Design & write tile with a gallery opens it; doc, custom and t-shirt run their own action. */\n const openCategory = useCallback((tileId: string): boolean => {\n const category = designCategoryFor(tileId);\n if (!category) return false;\n setDesignGallery(category);\n return true;\n }, []);\n\n /** A catalog template opens natively in the design studio. */\n const openTemplate = useCallback((templateId: string) => {\n setDesignGallery(null);\n setDesignEntry({ templateId });\n }, []);\n\n /** \"Use this prompt\" on a Seedance clip: a fresh canvas, the video generator seeded with it. */\n const handleShowcasePrompt = useCallback(\n (clip: ShowcaseClip) => {\n handleNewCanvas();\n setGenerator({ mode: 'video', initialPrompt: clip.prompt });\n },\n [handleNewCanvas],\n );\n\n /**\n * Home hero Generate (web `onStartWithPrompt`): a fresh canvas, the generator\n * seeded with the shot. A product reference reaches the video lane as its image item.\n */\n const handleStartWithPrompt = useCallback(\n (prompt: string, settings: HeroSettings) => {\n handleNewCanvas();\n setGenerator({\n mode: settings.mode,\n initialPrompt: prompt,\n aspect: settings.aspect,\n resolution: settings.resolution,\n ...(settings.referenceImageUrl ? { referenceImageUrl: settings.referenceImageUrl } : {}),\n });\n },\n [handleNewCanvas],\n );\n\n /** Hero Product chip: one device image, uploaded; its URL or null. */\n const pickHeroReference = useCallback(async (): Promise<string | null> => {\n if (!onPickLocalMedia) return null;\n const picked = await onPickLocalMedia(undefined, 'library');\n return picked.find((it) => it.type === 'image')?.src ?? null;\n }, [onPickLocalMedia]);\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 // A doc link (`?artifact=doc:<uuid>`) opens the docs editor, never the design studio.\n const docLink = parseDocLink({ designId, artifactId });\n if (docLink) {\n setDocEntry({ docId: docLink });\n return;\n }\n // A template link opens the template itself in the design studio; only a saved\n // design (designId / artifactId) wins over it.\n const templateId = designId || artifactId ? null : designTemplateIdOf(designTemplateId);\n if (templateId) {\n setDesignEntry({ templateId });\n return;\n }\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 if (parseDocLink({ designId, 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={\n generator.item ??\n (generator.referenceImageUrl && generator.mode === 'video'\n ? {\n id: 'hero-reference',\n type: 'image',\n src: generator.referenceImageUrl,\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n zIndex: 0,\n }\n : undefined)\n }\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n initialAspect={generator.aspect}\n initialResolution={generator.resolution}\n initialReferenceUrl={generator.referenceImageUrl}\n boardId={selectedId}\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 runAction={effectiveRunAction}\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, 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 libraryItems: selected?.board.items ?? [],\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={({ pressed }) => [styles.exportDismiss, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color={theme.edInk} />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (docEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DocsEditorExperience\n token={token}\n indexUrl={indexUrl}\n docId={docEntry.docId}\n onClose={() => setDocEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n />\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 && homeGallery) {\n return (\n <View style={styles.fill} testID={testID}>\n <TemplatesGallery\n initialSource={homeGallery}\n runAction={effectiveRunAction}\n loadDesignCatalog={loadDesignCatalog}\n looksOptions={{ client: apolloClient, token, indexUrl }}\n onClose={() => setHomeGallery(null)}\n onRecreateLook={(look) => {\n setHomeGallery(null);\n handleNewCanvas();\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n ...(look.aspect ? { aspect: look.aspect } : {}),\n });\n }}\n onUsePrompt={(mode, prompt) => {\n setHomeGallery(null);\n handleNewCanvas();\n setGenerator({ mode, initialPrompt: prompt });\n }}\n onOpenTemplate={(card) => {\n setHomeGallery(null);\n openTemplate(card.id);\n }}\n />\n </View>\n );\n }\n\n if (!selected && designGallery) {\n const category = designGallery;\n return (\n <View style={styles.fill} testID={testID}>\n <DesignCategoryGallery\n category={category}\n load={loadDesignCatalog}\n onClose={() => setDesignGallery(null)}\n onBlank={(size) => {\n // Every category's blank opens at its own size in the design studio.\n setDesignGallery(null);\n setDesignEntry({ sizeId: size.id });\n }}\n onOpenTemplate={(card) => openTemplate(card.id)}\n />\n {homeNotice ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {homeNotice}\n </Text>\n </View>\n ) : null}\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 studioDesigns={studioDesigns}\n onOpenStudioDesign={(id) => setDesignEntry({ artifactId: id })}\n docs={workDocs}\n onOpenDoc={(id) => setDocEntry({ docId: id })}\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 ...(look.aspect ? { aspect: look.aspect } : {}),\n });\n }}\n onOpenCategory={openCategory}\n templateRails={templateRails}\n onOpenTemplate={openTemplate}\n onSeeAllTemplates={() => setHomeGallery('flyers')}\n onRetryTemplates={() => setTemplateRailsRead((n) => n + 1)}\n showcase={SEEDANCE_SHOWCASE}\n onUseShowcasePrompt={handleShowcasePrompt}\n onStartWithPrompt={handleStartWithPrompt}\n onPickReference={onPickLocalMedia ? pickHeroReference : undefined}\n onBrowseTemplates={() => setHomeGallery('video')}\n // At the read cap there is nothing more to page in, so no \"Load more\".\n studioMore={studioMore && workReadLimit < WORK_READ_MAX}\n studioError={studioError}\n onRetryStudioDesigns={() => setStudioRead((n) => n + 1)}\n onLoadMoreWork={() => setWorkReadLimit(nextWorkReadLimit)}\n currentSessionId={channelId}\n onOpenSession={(sessionId) => {\n setBoards((prev) =>\n prev.some((entry) => entry.channelId === sessionId)\n ? prev\n : [untitledBoard(sessionId), ...prev],\n );\n setSelectedId(sessionId);\n }}\n />\n {homeNotice ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {homeNotice}\n </Text>\n </View>\n ) : null}\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n onOpenDesign={(artifactId) => setDesignEntry({ artifactId })}\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({ categoryId: 'presentation' })}\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={theme.info} /> : 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 const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]} accessibilityRole=\"header\">\n {title}\n </Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary || onRetry ? (\n <View style={styles.noticeActions}>\n {onPrimary ? <ActionButton label={primaryLabel ?? 'Create'} onPress={onPrimary} /> : null}\n {onRetry ? (\n <ActionButton\n label={retryLabel}\n onPress={onRetry}\n variant={onPrimary ? 'secondary' : 'primary'}\n />\n ) : null}\n </View>\n ) : null}\n </View>\n );\n}\n\n/**\n * The exposed experience: mounts the canvas theme (OS / host mode / persisted\n * toggle) so every screen below can call useCanvasTheme().\n */\nexport function CanvasExperience(props: CanvasExperienceProps) {\n const hostMode = props.isDark == null ? null : props.isDark ? 'dark' : 'light';\n return (\n <CanvasThemeProvider mode={hostMode}>\n <CanvasExperienceBody {...props} />\n </CanvasThemeProvider>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n noticeActions: {\n marginTop: SPACE.xl,\n flexDirection: 'row',\n flexWrap: 'wrap',\n justifyContent: 'center',\n gap: SPACE.sm,\n },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: SPACE.md,\n right: SPACE.lg,\n zIndex: 4,\n },\n center: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: SPACE.xxl,\n paddingVertical: SPACE.xl,\n backgroundColor: theme.background,\n },\n title: {\n ...TYPE.title,\n fontSize: 19,\n lineHeight: 24,\n color: theme.foreground,\n textAlign: 'center',\n marginBottom: SPACE.sm,\n },\n detail: { ...TYPE.body, color: theme.mutedForeground, textAlign: 'center', maxWidth: 320 },\n fine: {\n ...TYPE.caption,\n fontWeight: '400',\n marginTop: SPACE.md,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n spaced: { marginTop: SPACE.md - 2 },\n textLight: { color: theme.foreground },\n textMuted: { color: theme.mutedForeground },\n backPill: {\n position: 'absolute',\n top: SPACE.md,\n left: SPACE.md,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm - 2,\n maxWidth: 220,\n minHeight: 40,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n backLabel: { ...TYPE.label, color: theme.foreground },\n uploadToast: {\n position: 'absolute',\n top: 60,\n left: SPACE.lg,\n right: SPACE.lg,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md - 2,\n minHeight: 48,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.md - 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.isDark ? theme.card : theme.surface,\n borderWidth: theme.isDark ? StyleSheet.hairlineWidth : 0,\n borderColor: theme.border,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0.4 : 0.12,\n shadowRadius: 18,\n shadowOffset: { width: 0, height: 6 },\n elevation: 8,\n },\n uploadToastText: { ...TYPE.label, fontSize: 14, flex: 1, color: theme.foreground },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: SPACE.xxl,\n },\n exportCard: {\n minWidth: 240,\n maxWidth: 320,\n alignItems: 'center',\n gap: SPACE.md,\n backgroundColor: theme.edPanel,\n borderRadius: RADIUS.xl,\n paddingVertical: SPACE.xl,\n paddingHorizontal: SPACE.xl,\n },\n exportStage: { ...TYPE.body, fontSize: 14, color: theme.edInk2, textAlign: 'center' },\n exportError: { ...TYPE.title, color: theme.edDanger },\n exportDismiss: {\n marginTop: SPACE.xs,\n minHeight: 40,\n justifyContent: 'center',\n backgroundColor: theme.edRaisedHi,\n borderRadius: RADIUS.pill,\n paddingHorizontal: SPACE.lg + 2,\n },\n exportDismissLabel: { ...TYPE.label, color: theme.edInk },\n }),\n);\n\nexport default CanvasExperience;\n"],"names":["_a","_b","_c","RNImage","dismissCanvasTask","artifactId"],"mappings":"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"}