@adminide-stack/yantra-mobile 12.0.125-alpha.0 → 12.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/canvas/AudioEditorExperience.js +207 -109
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +87 -72
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +494 -387
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js +78 -59
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +126 -84
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +108 -126
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +178 -166
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +119 -123
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +113 -89
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +79 -79
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +193 -128
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +106 -94
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +195 -127
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +163 -100
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +132 -69
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -1
- package/lib/features/canvas/ImageEditorExperience.js +278 -209
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/InfluencerStudioExperience.js +167 -125
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -1
- package/lib/features/canvas/MoodboardExperience.js +102 -85
- package/lib/features/canvas/MoodboardExperience.js.map +1 -1
- package/lib/features/canvas/NativeCanvasViewer.js +203 -192
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +125 -92
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +225 -143
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoClipsExperience.js +126 -92
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +154 -142
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +551 -492
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +284 -131
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +7 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +265 -0
- package/lib/features/canvas/canvasTheme.js.map +1 -0
- package/lib/features/canvas/canvasUi.js +381 -0
- package/lib/features/canvas/canvasUi.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -52
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/serverTasks.js +1 -1
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +8 -7
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -1
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +44 -41
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +50 -45
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +3 -2
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/formWidgets.js +116 -64
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -1
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +77 -63
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -1
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +95 -79
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +241 -160
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +300 -143
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +3 -2
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/webbuilderPrompts.js +2 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +120 -0
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +26 -4
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +110 -7
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- 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, Pressable, StyleSheet, Text, View, useColorScheme } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { NativeCanvasViewer, type CanvasItemAction } from './NativeCanvasViewer';\nimport { CanvasBoardsGrid } from './CanvasBoardsGrid';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport { VideoEditorExperience, type VideoExportSpec } from './VideoEditorExperience';\nimport { ImageEditorExperience } from './ImageEditorExperience';\nimport { AudioEditorExperience } from './AudioEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n createRemoteRunAction,\n createRemoteUploadMedia,\n proxiedMediaUrl,\n unwrapProxyUrl,\n} from './videoEditor/remoteMediaClient';\nimport { renderExportSpec } from './videoEditor/exportRenderer';\nimport { startExportTask } from './videoEditor/exportTask';\nimport { ExportTaskCard, useCanvasTask } from './videoEditor/ExportTaskCard';\nimport { dismissTask as dismissCanvasTask, markTaskDelivered } from './canvasTasks';\nimport { fetchMyCanvasBoards, pushCanvasBoard, getCachedCanvasBoards, type CanvasBoardSummary } from './surfaceIndex';\nimport { applySrcRenewals, useBoardMediaRefresh, useMediaSigning } from './useBoardMediaRefresh';\nimport { readCachedCanvasBoards, writeCachedCanvasBoards } from './canvasBoardsCatalog';\nimport { hydrateCanvasBoardsSnapshot, persistCanvasBoardsSnapshot } from './canvasBoardsSnapshot';\nimport {\n boardSignature,\n buildBoardState,\n dimsForAspect,\n emptyBoardState,\n mediaItemsFor,\n mediaKey,\n newBoardId,\n reconcileDismissed,\n type CanvasItem,\n type MediaPlacement,\n type PersistedCanvasState,\n} from './canvasCore';\nimport { visibleCreateGroups, type CreateAction } from './createTiles';\nimport { parseCreateTileLink, parseDesignLink, parseMediaLink, type MediaLink } from './deepLinks';\nimport { promoProjectToTimeline } from './promoProjectImport';\nimport type { DesignedPromo } from './promoVideo';\nimport { loadTemplateTimeline } from './templateImport/loadTemplate';\nimport type { CanvasPromptTemplate } from './canvasChatTemplates';\nimport { CanvasToolDock, type DockStudio, type MediaPickSource } from './CanvasToolDock';\nimport { describeSession } from './sessionIdentity';\nimport { DesignExperience } from '../design/DesignExperience';\nimport type { DesignKind } from '../design/designCore';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport { VideoGeneratorExperience, type GeneratorMode } from './VideoGeneratorExperience';\nimport { VideoEditExperience } from './VideoEditExperience';\nimport { VideoClipsExperience } from './VideoClipsExperience';\nimport { FrameExtractorExperience } from './FrameExtractorExperience';\nimport { MoodboardExperience } from './MoodboardExperience';\nimport { SetStudioExperience } from './SetStudioExperience';\nimport { configureServerTasks } from './serverTasks';\nimport { setCanvasTasksHost } from './canvasTaskSync';\nimport { InfluencerStudioExperience } from './InfluencerStudioExperience';\nimport { CameraRecorderExperience } from './recorder/CameraRecorderExperience';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\n\nexport interface CanvasExperienceProps {\n /** Bearer for the surface index. Absent -> the unauthenticated notice. */\n token?: string | null;\n /** Index endpoint for this environment. */\n indexUrl: string;\n /** Open this board when it exists; otherwise the newest opens. */\n channelId?: string;\n /** Render this board and skip the network entirely (deep links, tests). */\n board?: PersistedCanvasState | null;\n /** Host-side session problem, shown instead of attempting a doomed read. */\n sessionError?: string | null;\n /** Sign in again now, from the session-error screen. */\n onRetrySession?: () => void;\n /** Agent-backed item actions (Edit Image, Create Video) - raised by the\n * viewer toolbar. Create Video / Edit Video / Clips are handled HERE\n * (same connectors as web canvas) and only forwarded if a host overrides. */\n onItemAction?: (action: CanvasItemAction, item: CanvasItem) => void;\n /** Hand a finished editor timeline to the host's renderer (yantra-video). */\n onExportVideo?: (spec: VideoExportSpec) => void;\n /** Device-library picker the host provides (native capability).\n * `onStatus` is the web upload toast: `Uploading IMG_0003.jpeg…`. */\n onPickLocalMedia?: (onStatus?: (message: string) => void, source?: MediaPickSource) => Promise<CanvasItem[]>;\n /** Host uploader for phone-local URIs (file:// -> store URL) so board\n * items persist as fetchable media, like the web's uploadFileToStore. */\n uploadMedia?: (localUri: string) => Promise<string>;\n /** Host microphone (expo-audio) - the Voice tab's record flows. */\n audioRecorder?: AudioRecorderSeam;\n /** Connector runner (auth + transport live host-side). Present -> the\n * native image/audio editors open for edit actions; absent -> those\n * actions forward to onItemAction like before. */\n runMediaAction?: RunMediaAction;\n /** Host Apollo client — templates gallery is cache-first against typePolicies. */\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n /**\n * Deep links (web `?create=`, `?media=&kind=&name=`, `?design=`, `?artifact=`).\n * Each runs once on mount, after the board list has settled.\n */\n /** A Create tile id (`video-editor`, `clips`, `logo`): runs that tile. */\n createTile?: string;\n /** Another surface's \"Edit in Canvas\": placed on a new board, its editor opened. */\n media?: { src: string; kind?: string; name?: string };\n /** Open this saved design in the design studio. */\n designId?: string;\n /** A design template link: native has no design catalog, so a blank design opens. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n}\n\nfunction untitledBoard(channelId?: string): CanvasBoardSummary {\n const id = channelId?.trim() || newBoardId();\n return {\n channelId: id,\n title: '',\n savedAt: Date.now(),\n itemCount: 0,\n board: emptyBoardState(),\n };\n}\n\nconst SAVE_DEBOUNCE_MS = 600;\n/** How long a media link waits for its picture's size before taking an upload's footprint. */\nconst MEDIA_LINK_MEASURE_MS = 1500;\n\nconst boardMediaKey = (src: string): string => mediaKey(src, unwrapProxyUrl);\n\ntype PlaceOpts = { name?: string; aspect?: string; size?: { width: number; height: number } };\n\n/** Generated/linked media as a placement: its requested ratio (or measured size) shapes the tile. */\nfunction placementFor(type: CanvasItem['type'], src: string, opts?: PlaceOpts): MediaPlacement {\n const maxEdge = type === 'video' ? 640 : 600;\n const size = opts?.aspect ? dimsForAspect(opts.aspect, maxEdge) : opts?.size;\n return {\n type,\n src,\n label: opts?.name ?? (type === 'video' ? 'Edited video' : type),\n ...(size ? { size } : {}),\n };\n}\n\n/** A device pick: the host reports its pixel size, which only shapes the tile. */\nfunction placementForPicked(item: CanvasItem): MediaPlacement {\n return {\n type: item.type,\n src: item.src,\n ...(item.generatedAssetName ? { label: item.generatedAssetName } : {}),\n ...(item.width > 0 && item.height > 0 ? { size: { width: item.width, height: item.height } } : {}),\n ...(item.hasAudio === false ? { hasAudio: false } : {}),\n };\n}\n\n/** `next` from the viewer, with the tombstones its item edit implies. */\nfunction withTombstones(prev: PersistedCanvasState, next: PersistedCanvasState): PersistedCanvasState {\n const dismissed = reconcileDismissed(prev.items, next.items, prev.dismissed ?? [], boardMediaKey);\n const out: PersistedCanvasState = { ...next };\n if (dismissed.length > 0) out.dismissed = dismissed;\n else delete out.dismissed;\n return out;\n}\n\nexport function CanvasExperience({\n token,\n indexUrl,\n channelId,\n board: explicitBoard,\n sessionError,\n onRetrySession,\n onItemAction,\n onExportVideo,\n onPickLocalMedia,\n uploadMedia,\n audioRecorder,\n runMediaAction,\n apolloClient,\n createTile,\n media,\n designId,\n designTemplateId,\n artifactId,\n testID,\n}: CanvasExperienceProps) {\n const isDark = useColorScheme() === 'dark';\n // Host seams win (they can refresh auth); on binaries that predate them\n // the remote builds its own from what it already holds, so the editors\n // work OTA without an app release.\n const effectiveRunAction = useMemo<RunMediaAction | undefined>(\n () => runMediaAction ?? (token && indexUrl ? createRemoteRunAction(token, indexUrl) : undefined),\n [runMediaAction, token, indexUrl],\n );\n // Server-backed Tasks: point the Task API at this session before any child effect resumes a run.\n useMemo(() => configureServerTasks({ token, indexUrl }), [token, indexUrl]);\n const effectiveUploadMedia = useMemo(\n () => uploadMedia ?? (token && indexUrl ? createRemoteUploadMedia(token, indexUrl) : undefined),\n [uploadMedia, token, indexUrl],\n );\n const cachedBoards =\n getCachedCanvasBoards(indexUrl) ?? (apolloClient ? readCachedCanvasBoards(apolloClient) : null);\n const [boards, setBoards] = useState<CanvasBoardSummary[]>(() => cachedBoards ?? []);\n /** Live boards for placement guesses outside a state updater. */\n const boardsRef = useRef(boards);\n boardsRef.current = boards;\n const [loading, setLoading] = useState(!explicitBoard && cachedBoards == null);\n const [error, setError] = useState<string | null>(null);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [agentOpen, setAgentOpen] = useState(false);\n const [gridAgentOpen, setGridAgentOpen] = useState(false);\n const [generation, setGeneration] = useState(0);\n const [mediaBusy, setMediaBusy] = useState(false);\n const [uploadStatus, setUploadStatus] = useState<string | null>(null);\n const lastSavedByIdRef = useRef<Record<string, string>>({});\n /** The first index read has landed (or failed): deep links wait for it, so the\n * fetch's wholesale `setBoards` cannot drop a board a link just made. */\n const [boardsSettled, setBoardsSettled] = useState(false);\n\n const skipFetch = Boolean(explicitBoard);\n\n // The Tasks sheet lives in the dock; what it cannot learn from its props (the open board, how to open another).\n const tasksBoardsRef = useRef(boards);\n tasksBoardsRef.current = boards;\n useEffect(() => {\n setCanvasTasksHost({\n openBoardId: selectedId,\n openBoard: (id) => setSelectedId(id),\n boardLabel: (id) => tasksBoardsRef.current.find((entry) => entry.channelId === id)?.title || undefined,\n runAction: effectiveRunAction,\n });\n }, [selectedId, effectiveRunAction]);\n\n useEffect(() => {\n if (skipFetch || !indexUrl) return undefined;\n let cancelled = false;\n void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {\n if (cancelled || !rows?.length) return;\n setBoards((prev) => (prev.length > 0 ? prev : rows));\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [indexUrl, skipFetch]);\n\n useEffect(() => {\n if (skipFetch) return undefined;\n if (!token) {\n // The index answers unauthenticated reads as \"Missing tenantId\".\n // Wait for the host mint — but keep a cached grid on screen.\n if (getCachedCanvasBoards(indexUrl) == null) {\n setLoading(true);\n }\n setError(null);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;\n\n (async () => {\n // Only the first visit (no cache) blocks on the spinner. Later visits\n // show the cached grid immediately and refresh in the background.\n if (!hasCache) {\n setLoading(true);\n setError(null);\n }\n const result = await fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal });\n if (cancelled) return;\n if (__DEV__) {\n // Board geometry at a glance - \"why does this board render\n // this way\" starts with positions, not the picture.\n // eslint-disable-next-line no-console\n console.log(\n '[CanvasExperience] boards:',\n JSON.stringify(\n result.boards.map((b) => ({\n channelId: b.channelId,\n title: b.title,\n items: b.board.items.map((i) => ({\n type: i.type,\n x: i.x,\n y: i.y,\n w: i.width,\n h: i.height,\n z: i.zIndex,\n src: `${i.src.slice(0, 96)}…`,\n })),\n })),\n ),\n );\n }\n if (result.error) {\n // Keep the cached grid; only surface an error on a true first load.\n if (!hasCache) setError(result.error);\n setLoading(false);\n setBoardsSettled(true);\n return;\n }\n lastSavedByIdRef.current = Object.fromEntries(\n result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]),\n );\n setBoards(result.boards);\n writeCachedCanvasBoards(apolloClient, result.boards);\n setError(null);\n setLoading(false);\n setBoardsSettled(true);\n })();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [indexUrl, token, skipFetch, generation, apolloClient]);\n\n useEffect(() => {\n if (skipFetch || loading || !indexUrl) return;\n persistCanvasBoardsSnapshot(indexUrl, boards);\n }, [boards, indexUrl, loading, skipFetch]);\n\n // Honour a deep-linked board only when it actually exists in the index.\n // Otherwise stay on the grid — that is screen one on web.\n useEffect(() => {\n if (selectedId || !channelId || boards.length === 0) return;\n const match = boards.find((entry) => entry.channelId === channelId);\n if (match) setSelectedId(match.channelId);\n }, [boards, channelId, selectedId]);\n\n const selected = useMemo(\n () => (selectedId ? boards.find((entry) => entry.channelId === selectedId) : undefined),\n [boards, selectedId],\n );\n\n // Presigned link upkeep (web pullBoard): renew an opened board's expiring\n // links so the auto-save below persists fresh URLs.\n useMediaSigning(token, indexUrl);\n useBoardMediaRefresh(selected?.channelId, selected?.board.items, effectiveRunAction, (boardId, renewals) =>\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== boardId) return entry;\n const items = applySrcRenewals(entry.board.items, renewals);\n return items === entry.board.items ? entry : { ...entry, board: { ...entry.board, items } };\n }),\n ),\n );\n\n /** Google Veo URIs only play through the agent proxy — same wrap web uses. */\n const playableBoard = useCallback(\n (board: PersistedCanvasState): PersistedCanvasState => {\n if (!indexUrl) return board;\n return {\n ...board,\n items: board.items.map((item) =>\n item.type === 'video' || item.type === 'audio'\n ? { ...item, src: proxiedMediaUrl(indexUrl, item.src) }\n : item,\n ),\n };\n },\n [indexUrl],\n );\n\n const handleDockStudio = useCallback((studio: DockStudio) => {\n if (studio === 'video') {\n setEditorSeed({ itemId: null });\n return;\n }\n if (studio === 'agent') {\n setEditorSeed({ itemId: null, initialRailTab: 'agent' });\n return;\n }\n if (studio === 'influencer') {\n setShowInfluencer(true);\n return;\n }\n if (studio === 'set3d') {\n setShowSet3d(true);\n return;\n }\n if (studio === 'frames') {\n setShowFrames(true);\n return;\n }\n if (studio === 'moodboard') {\n setShowMoodboard(true);\n return;\n }\n // Match web studios: docs → design page, carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n const kind = studio === 'flyers' ? 'postcard' : studio === 'carousel' ? 'carousel' : 'design';\n setDesignEntry({ kind });\n }, []);\n const reload = useCallback(() => setGeneration((n) => n + 1), []);\n const handleBoardChange = useCallback(\n (board: PersistedCanvasState) => {\n setBoards((prev) =>\n prev.map((entry) =>\n entry.channelId === selectedId\n ? {\n ...entry,\n // A delete must leave a tombstone, or web's channel\n // drain puts the media straight back (web #530).\n board: withTombstones(entry.board, board),\n title: board.title || entry.title,\n itemCount: board.items.length,\n savedAt: board.savedAt,\n }\n : entry,\n ),\n );\n },\n [selectedId],\n );\n\n const handleAddPhotos = useCallback(\n async (source: MediaPickSource) => {\n if (!onPickLocalMedia || mediaBusy) return;\n try {\n const picked = await onPickLocalMedia((message) => {\n setMediaBusy(true);\n setUploadStatus(message);\n }, source);\n if (!picked.length) return;\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n // Web `mediaItemsFor`: fanned across free grid slots, each\n // tile in the picked media's own shape (not stacked at 100,100).\n const placed = mediaItemsFor(entry.board.items, picked.map(placementForPicked));\n const items = [\n ...entry.board.items,\n ...picked.map((item, i) => ({ ...item, ...placed[i], id: item.id || placed[i].id })),\n ];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] add photos failed:', err);\n }\n } finally {\n setMediaBusy(false);\n setUploadStatus(null);\n }\n },\n [onPickLocalMedia, selectedId, channelId, mediaBusy],\n );\n\n const handleNewCanvas = useCallback(() => {\n const entry = untitledBoard();\n lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);\n setBoards((prev) => [entry, ...prev]);\n setSelectedId(entry.channelId);\n }, []);\n\n const handleAskAgentFromGrid = useCallback(() => {\n setGridAgentOpen(true);\n }, []);\n\n const closeBoard = useCallback(() => {\n setAgentOpen(false);\n setGridAgentOpen(false);\n setBoardSelectedItem(null);\n setSelectedId(null);\n // Web's grid hides empty rows. Drop a New canvas that never got media\n // so it does not sit next to real boards as \"0 items\".\n setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));\n }, []);\n\n // Twin of canvas-surface's 600ms auto-save: item add/remove/src change ->\n // registerSurfaceChannel. Drags and zoom are not a reason to write.\n useEffect(() => {\n if (skipFetch || loading || !token || !indexUrl || !selected) return undefined;\n const state = buildBoardState(\n selected.board.items,\n selected.board.zoom,\n selected.title,\n selected.board.dismissed,\n );\n if (state.items.length === 0) return undefined;\n const sig = boardSignature(state);\n if (lastSavedByIdRef.current[selected.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n void pushCanvasBoard({\n url: indexUrl,\n token,\n channelId: selected.channelId,\n state,\n }).then((ok) => {\n if (ok) lastSavedByIdRef.current[selected.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [selected, token, indexUrl, loading, skipFetch]);\n\n /** null = canvas; otherwise the editor is open, optionally seeded. */\n const [editorSeed, setEditorSeed] = useState<{\n itemId: string | null;\n initialTimeline?: import('./videoEditor/editorModel').EditorTimeline;\n projectTitle?: string;\n logoSrc?: string | null;\n initialRailTab?: string | null;\n } | null>(null);\n /** Item being edited in the native image/audio editor. */\n const [mediaEdit, setMediaEdit] = useState<{\n kind: 'image' | 'audio';\n item: CanvasItem;\n initialTab?: 'aiedit';\n } | null>(null);\n /** Web-parity generator (dock Image/Video/Audio + toolbar Create Video). */\n const [generator, setGenerator] = useState<{\n mode: GeneratorMode;\n item?: CanvasItem | null;\n restyle?: boolean;\n initialPrompt?: string;\n } | null>(null);\n const [videoEdit, setVideoEdit] = useState<CanvasItem | null>(null);\n const [videoClips, setVideoClips] = useState<CanvasItem | 'url' | null>(null);\n const [showFrames, setShowFrames] = useState(false);\n const [showMoodboard, setShowMoodboard] = useState(false);\n const [showSet3d, setShowSet3d] = useState(false);\n const [showInfluencer, setShowInfluencer] = useState(false);\n const [showRecorder, setShowRecorder] = useState(false);\n /** Board selection for generate seed + edit tools. */\n const [boardSelectedItem, setBoardSelectedItem] = useState<CanvasItem | null>(null);\n /** Remote-side render in flight (stage label) or its failure. */\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n /** The durable export (canvasTasks kind 'export') the editor overlay is following. */\n const [exportTaskId, setExportTaskId] = useState<string | null>(null);\n const exportTask = useCanvasTask(exportTaskId);\n /** Design studio screen (opened from the grid); null = canvas screens. */\n const [designEntry, setDesignEntry] = useState<{ kind: DesignKind } | { channelId: string } | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n\n // The grid also lists the user's designs - fetched from the same index\n // under its `design` surface. Refreshes when the studio closes.\n useEffect(() => {\n if (skipFetch || !token || !indexUrl || designEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, generation]);\n\n useEffect(() => {\n if (!token && !effectiveRunAction && !apolloClient) {\n setFeaturedLooks([]);\n return;\n }\n let cancelled = false;\n void listStudioLooks(effectiveRunAction, { limit: 12 }, { client: apolloClient, token, indexUrl })\n .then((page) => {\n if (!cancelled) setFeaturedLooks(page.looks);\n })\n .catch(() => {\n if (!cancelled) setFeaturedLooks([]);\n });\n return () => {\n cancelled = true;\n };\n }, [apolloClient, effectiveRunAction, indexUrl, token]);\n\n /** Place generated/uploaded media on the open board — same as web addGeneratedItem. */\n const addBoardItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const placement = placementFor(type, src, opts);\n const target = boardsRef.current.find((entry) => entry.channelId === selectedId) ?? boardsRef.current[0];\n // Best guess for the caller; the updater re-places against the live items.\n const item: CanvasItem = mediaItemsFor(target?.board.items ?? [], [placement])[0];\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const [placed] = mediaItemsFor(entry.board.items, [{ ...placement, id: item.id }]);\n const items = [...entry.board.items, placed];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n return item;\n },\n [selectedId, channelId, indexUrl],\n );\n\n /** Gallery AI Chat: first generate opens a new board; closing with no media stays on the grid. */\n const openFreshBoardWithItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = mediaItemsFor([], [placementFor(type, src, opts)])[0];\n const entry = untitledBoard();\n const items = [item];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n const next: CanvasBoardSummary = {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);\n setBoards((prev) => [next, ...prev]);\n setSelectedId(entry.channelId);\n setGridAgentOpen(false);\n return item;\n },\n [indexUrl],\n );\n\n const addRenderedVideo = useCallback(\n (url: string, opts?: { name?: string; aspect?: string }) => addBoardItem('video', url, opts),\n [addBoardItem],\n );\n\n const patchItemSrc = useCallback(\n (itemId: string, url: string, type?: CanvasItem['type']) => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== selectedId) return entry;\n const items = entry.board.items.map((item) =>\n // New media: the old short link would point at the old object.\n item.id === itemId ? { ...item, src, share: undefined, ...(type ? { type } : {}) } : item,\n );\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n }),\n );\n },\n [selectedId, indexUrl],\n );\n\n // Same fallback rule as the connector seams: a host renderer wins, and\n // without one the remote drives the connector chain itself, so the\n // editor's checkmark produces a real video on old binaries too.\n const exportBusyRef = useRef(false);\n const effectiveOnExport = useMemo(() => {\n // The REMOTE renderer is preferred when it can run at all: it ships\n // with surface deploys, so every binary - old or new - exports with\n // the newest chain (soundtrack, future transitions) without an app\n // release. The host seam is only the last resort without a runner.\n if (!effectiveRunAction) return onExportVideo;\n const runAction = effectiveRunAction;\n const upload = effectiveUploadMedia;\n return (spec: VideoExportSpec) => {\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n // Durable lane: compiled timeline (transitions, segments, scene\n // layers) rendered detached on the connector, followed as a task\n // that survives the editor closing and an app relaunch. It falls\n // back to the client chain itself when SUBMIT is unavailable.\n void startExportTask(runAction, {\n spec,\n boardId: selectedId ?? '',\n brief: editorSeed?.projectTitle || selected?.board.title || selected?.title || 'Video export',\n upload,\n })\n .then((id) => setExportTaskId(id))\n .catch(() => {\n setExporting({ stage: 'Starting render' });\n return renderExportSpec(spec, runAction, upload, (p) => setExporting(p)).then((url) => {\n addRenderedVideo(url);\n setEditorSeed(null);\n setExporting(null);\n });\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'video export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n };\n }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo, selectedId, editorSeed, selected]);\n\n // A finished durable export lands on the canvas like the old inline one.\n useEffect(() => {\n if (!exportTask || exportTask.state !== 'succeeded' || exportTask.delivered || !exportTask.result?.url) return;\n markTaskDelivered(exportTask.id);\n addRenderedVideo(exportTask.result.url);\n setEditorSeed(null);\n setExportTaskId(null);\n }, [exportTask, addRenderedVideo]);\n\n const handleItemAction = useCallback(\n (action: CanvasItemAction, item: CanvasItem) => {\n // Match web canvas toolbar:\n // Create Video → generator (yantra-video-generation), image/video as reference\n // Promo → marketing produce submit/poll\n // Edit Video → yantra-video-editing ops (trim/speed/mute/…)\n // Clips → yantra-video-clip\n if (action === 'create-video') {\n setGenerator({ mode: 'video', item });\n return;\n }\n if (action === 'restyle-video') {\n setGenerator({ mode: 'video', item, restyle: true });\n return;\n }\n if (action === 'promo-video') {\n setGenerator({ mode: 'promo', item });\n return;\n }\n if (action === 'edit-video') {\n setVideoEdit(item);\n return;\n }\n if (action === 'trim-video') {\n setVideoClips(item);\n return;\n }\n if ((action === 'edit-image' || action === 'mark-edit') && effectiveRunAction) {\n setMediaEdit({\n kind: 'image',\n item,\n ...(action === 'mark-edit' ? { initialTab: 'aiedit' as const } : {}),\n });\n return;\n }\n if (action === 'edit-audio' && effectiveRunAction) {\n setMediaEdit({ kind: 'audio', item });\n return;\n }\n onItemAction?.(action, item);\n },\n [onItemAction, effectiveRunAction],\n );\n\n const handleUseTemplate = useCallback(async (template: CanvasPromptTemplate) => {\n try {\n const imported = await loadTemplateTimeline(template);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n } catch {\n // Agent / editor surfaces their own notices when Use fails in-editor.\n }\n }, []);\n\n /** Home's Photo / Audio editor: pick the file first, then edit it on a fresh board (web opens its upload screen). */\n const pickThenEdit = useCallback(\n async (kind: 'image' | 'audio') => {\n if (!onPickLocalMedia) return;\n try {\n const picked = await onPickLocalMedia(undefined, kind === 'image' ? 'library' : 'file');\n const first = picked.find((p) => p.type === kind);\n if (!first) return;\n const item = openFreshBoardWithItem(kind, first.src, {\n name: first.generatedAssetName,\n ...(first.width > 0 && first.height > 0\n ? { size: { width: first.width, height: first.height } }\n : {}),\n });\n setMediaEdit({ kind, item });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] pick for editor failed:', err);\n }\n }\n },\n [onPickLocalMedia, openFreshBoardWithItem],\n );\n\n /** Tiles home can run here: the photo/audio editors need a picker and a connector runner. */\n const canRunCreate = useCallback(\n (action: CreateAction) =>\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction),\n [onPickLocalMedia, effectiveRunAction],\n );\n const createGroups = useMemo(() => visibleCreateGroups(canRunCreate), [canRunCreate]);\n\n /**\n * Screen one's Create tile (web `actFromHome`): a design kind opens the\n * design studio; a generator or studio opens on a fresh board, so what it\n * makes lands there and closing it leaves a canvas, not someone's old board.\n */\n const handleCreate = useCallback(\n (action: CreateAction) => {\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Native slides are the design studio's deck (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ kind: 'design' });\n return;\n }\n handleNewCanvas();\n if (action.mode === 'clips') setVideoClips('url');\n else setGenerator({ mode: action.mode });\n return;\n }\n if (action.studio === 'image' || action.studio === 'audio') {\n void pickThenEdit(action.studio);\n return;\n }\n handleNewCanvas();\n switch (action.studio) {\n case 'record':\n setShowRecorder(true);\n return;\n case 'ai-cut':\n handleDockStudio('agent');\n return;\n case 'set':\n handleDockStudio('set3d');\n return;\n default:\n handleDockStudio(action.studio);\n }\n },\n [handleNewCanvas, handleDockStudio, pickThenEdit],\n );\n\n /** A media link (web `?media=`): a new board holding it, its editor open. */\n const openMediaLink = useCallback(\n async (link: MediaLink) => {\n const size =\n link.kind === 'image'\n ? await new Promise<{ width: number; height: number } | undefined>((resolve) => {\n // Whichever comes first, the size or the deadline, decides the tile.\n const timer = setTimeout(() => resolve(undefined), MEDIA_LINK_MEASURE_MS);\n RNImage.getSize(\n link.src,\n (width, height) => {\n clearTimeout(timer);\n resolve(width > 0 && height > 0 ? { width, height } : undefined);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n })\n : undefined;\n const item = openFreshBoardWithItem(link.kind, link.src, {\n name:\n link.name ?? link.fileName?.replace(/\\.[^.]+$/, '') ?? (link.kind === 'image' ? 'Image' : 'Video'),\n ...(size ? { size } : {}),\n });\n if (link.kind === 'video') setEditorSeed({ itemId: item.id });\n else if (effectiveRunAction) setMediaEdit({ kind: 'image', item });\n },\n [openFreshBoardWithItem, effectiveRunAction],\n );\n\n // Deep links run once. A design opens straight away; media and Create\n // tiles wait for the first index read, whose wholesale `setBoards` would\n // otherwise drop the board they make.\n const designLinkRanRef = useRef(false);\n useEffect(() => {\n if (designLinkRanRef.current || skipFetch) return;\n designLinkRanRef.current = true;\n const entry = parseDesignLink({ designId, designTemplateId, artifactId });\n if (entry) setDesignEntry(entry);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const boardLinkRanRef = useRef(false);\n useEffect(() => {\n if (boardLinkRanRef.current || skipFetch || !boardsSettled) return;\n boardLinkRanRef.current = true;\n if (parseDesignLink({ designId, designTemplateId, artifactId })) return;\n const mediaLink = parseMediaLink(media);\n if (mediaLink) {\n void openMediaLink(mediaLink);\n return;\n }\n const action = parseCreateTileLink(createTile);\n if (action) handleCreate(action);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardsSettled, skipFetch]);\n\n if (generator) {\n return (\n <VideoGeneratorExperience\n mode={generator.mode}\n item={generator.item}\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n runAction={effectiveRunAction}\n onClose={() => setGenerator(null)}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n setGenerator(null);\n }}\n onPromoDesigned={(designed) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setGenerator(null);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n />\n );\n }\n\n if (showFrames) {\n return (\n <FrameExtractorExperience\n boardItems={selected?.board.items ?? []}\n seedVideo={boardSelectedItem?.type === 'video' ? boardSelectedItem : null}\n runAction={effectiveRunAction}\n onClose={() => setShowFrames(false)}\n onPlace={(urls) => {\n urls.forEach((url, i) => addBoardItem('image', url, { name: `Frame ${i + 1}` }));\n setShowFrames(false);\n }}\n />\n );\n }\n\n if (showMoodboard) {\n return (\n <MoodboardExperience\n boardItems={selected?.board.items ?? []}\n onClose={() => setShowMoodboard(false)}\n onUseBrief={(brief) => {\n setShowMoodboard(false);\n setGenerator({ mode: 'image', initialPrompt: brief });\n }}\n />\n );\n }\n\n if (showSet3d) {\n return (\n <SetStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n token={token}\n indexUrl={indexUrl}\n onClose={() => setShowSet3d(false)}\n onPlace={(kind, url, name) => {\n addBoardItem(kind, url, { name });\n }}\n />\n );\n }\n\n if (showRecorder) {\n return (\n <CameraRecorderExperience\n onClose={() => setShowRecorder(false)}\n onPick={async (source) => {\n if (!onPickLocalMedia) return [];\n return onPickLocalMedia(undefined, source);\n }}\n onPlaced={(items) => {\n for (const item of items) {\n addBoardItem(item.type === 'video' ? 'video' : 'image', item.src, {\n name: item.generatedAssetName,\n });\n }\n }}\n />\n );\n }\n\n if (showInfluencer) {\n return (\n <InfluencerStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setShowInfluencer(false)}\n onPlace={(url, name) => {\n addBoardItem('video', url, { name, aspect: '9:16' });\n setShowInfluencer(false);\n }}\n />\n );\n }\n\n if (videoEdit) {\n return (\n <VideoEditExperience\n src={videoEdit.src}\n name={videoEdit.generatedAssetName}\n items={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setVideoEdit(null)}\n onApplied={(url, kind) => {\n if (kind === 'audio') {\n addBoardItem('audio', url, { name: 'Extracted audio' });\n } else {\n patchItemSrc(videoEdit.id, url, kind === 'image' ? 'image' : 'video');\n }\n setVideoEdit(null);\n }}\n />\n );\n }\n\n if (videoClips) {\n return (\n <VideoClipsExperience\n item={videoClips === 'url' ? null : videoClips}\n runAction={effectiveRunAction}\n onClose={() => setVideoClips(null)}\n onClips={(urls, aspect) => {\n urls.forEach((url, i) => addRenderedVideo(url, { name: `Clip ${i + 1}`, aspect }));\n setVideoClips(null);\n }}\n />\n );\n }\n\n if (explicitBoard) {\n return (\n <NativeCanvasViewer\n board={playableBoard(explicitBoard)}\n controls\n onItemAction={handleItemAction}\n testID={testID}\n />\n );\n }\n\n if (sessionError) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t open your canvases\"\n detail={sessionError}\n onRetry={onRetrySession}\n />\n );\n }\n\n if (error && boards.length === 0) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t load your canvases\"\n detail={error}\n fine={describeSession(token, indexUrl)}\n onRetry={reload}\n />\n );\n }\n\n // Grid is screen one (web CanvasBoards). Opening a board is screen two.\n\n if (mediaEdit) {\n const shared = {\n src: mediaEdit.item.src,\n name: mediaEdit.item.generatedAssetName,\n runAction: effectiveRunAction,\n onClose: () => setMediaEdit(null),\n onSave: (url: string) => {\n patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);\n setMediaEdit(null);\n },\n };\n return mediaEdit.kind === 'image' ? (\n <ImageEditorExperience {...shared} initialTab={mediaEdit.initialTab} />\n ) : (\n <AudioEditorExperience {...shared} />\n );\n }\n\n if (editorSeed) {\n return (\n <View style={styles.fill}>\n <VideoEditorExperience\n items={selected?.board.items ?? []}\n seedItemId={editorSeed.itemId}\n initialTimeline={editorSeed.initialTimeline}\n projectTitle={editorSeed.projectTitle || selected?.board.title || selected?.title}\n initialLogoSrc={editorSeed.logoSrc}\n onClose={() => setEditorSeed(null)}\n onExport={effectiveOnExport}\n onPickLocalMedia={onPickLocalMedia}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n audioRecorder={audioRecorder}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n initialRailTab={editorSeed.initialRailTab}\n />\n {exportTask ? (\n <View style={styles.exportOverlay}>\n <ExportTaskCard\n task={exportTask}\n onDismiss={() => {\n dismissCanvasTask(exportTask.id);\n setExportTaskId(null);\n }}\n onBackground={() => setExportTaskId(null)}\n />\n </View>\n ) : exporting ? (\n <View style={styles.exportOverlay}>\n <View style={styles.exportCard}>\n {exporting.error ? (\n <>\n <Text style={styles.exportError}>Export failed</Text>\n <Text style={styles.exportStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable\n onPress={() => setExporting(null)}\n style={styles.exportDismiss}\n accessibilityRole=\"button\"\n >\n <Text style={styles.exportDismissLabel}>Dismiss</Text>\n </Pressable>\n </>\n ) : (\n <>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.exportStage}>{exporting.stage}</Text>\n </>\n )}\n </View>\n </View>\n ) : null}\n </View>\n );\n }\n\n if (designEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignExperience\n token={token}\n indexUrl={indexUrl}\n entry={designEntry}\n onClose={() => setDesignEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n runMediaAction={effectiveRunAction}\n />\n </View>\n );\n }\n\n if (!selected) {\n return (\n <View style={styles.fill} testID={testID}>\n {loading && boards.length === 0 ? (\n <View style={styles.gridLoading} pointerEvents=\"none\">\n <ActivityIndicator size=\"small\" />\n </View>\n ) : null}\n <CanvasBoardsGrid\n boards={boards.filter((entry) => entry.itemCount > 0)}\n onOpen={setSelectedId}\n onNewCanvas={handleNewCanvas}\n designs={designs}\n onOpenDesign={(designChannelId) => setDesignEntry({ channelId: designChannelId })}\n onAskAgent={handleAskAgentFromGrid}\n createGroups={createGroups}\n onCreate={handleCreate}\n runAction={effectiveRunAction}\n featuredLooks={featuredLooks}\n onRecreateLook={(look) => {\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n });\n }}\n />\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n runAction={effectiveRunAction}\n boardItems={[]}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return openFreshBoardWithItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.fill} testID={testID}>\n <CanvasToolDock\n busy={mediaBusy}\n boards={boards}\n boardId={selectedId}\n runAction={effectiveRunAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n seedItem={boardSelectedItem}\n dockHidden={agentOpen}\n onUpload={(source) => void handleAddPhotos(source)}\n onPickDeviceStill={\n onPickLocalMedia\n ? async () => {\n // A generator reference slot: the connector fetches it, so it must be hosted.\n const picked = await onPickLocalMedia(undefined, 'library');\n const first = picked.find((p) => p.type === 'image');\n if (!first) return null;\n return /^https?:/i.test(first.src) || !effectiveUploadMedia\n ? first.src\n : effectiveUploadMedia(first.src);\n }\n : undefined\n }\n onPlace={(item) =>\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n })\n }\n onPickStorage={(kind, url, name) => addBoardItem(kind, url, { name })}\n onStudio={handleDockStudio}\n onSlides={() => setDesignEntry({ kind: 'design' })}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : meta.mode === 'clips' ? 'Clip' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onPromoDesigned={(designed: DesignedPromo) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n onEditReplaced={(itemId, url) => patchItemSrc(itemId, url)}\n onEditVideo={(item) => setVideoEdit(item)}\n onRecord={() => setShowRecorder(true)}\n >\n <NativeCanvasViewer\n board={playableBoard(selected.board)}\n controls\n onBoardsPress={closeBoard}\n onItemAction={handleItemAction}\n onBoardChange={handleBoardChange}\n onAgentOpenChange={setAgentOpen}\n onSelectionChange={setBoardSelectedItem}\n runAction={effectiveRunAction}\n onAgentGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onAgentReplace={(itemId, url) => patchItemSrc(itemId, url)}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n shareLinks={token && indexUrl ? { token, indexUrl } : undefined}\n />\n </CanvasToolDock>\n {uploadStatus ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n {mediaBusy ? <ActivityIndicator size=\"small\" color=\"#2563eb\" /> : null}\n <Text style={styles.uploadToastText} numberOfLines={2}>\n {uploadStatus}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction Notice({\n isDark,\n title,\n detail,\n fine,\n primaryLabel,\n onPrimary,\n onRetry,\n retryLabel = 'Try again',\n}: {\n isDark: boolean;\n title: string;\n detail: string;\n /** Session/context fine print - the who-and-where behind the state. */\n fine?: string;\n primaryLabel?: string;\n onPrimary?: () => void;\n onRetry?: () => void;\n retryLabel?: string;\n}) {\n return (\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>{title}</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>{detail}</Text>\n {fine ? <Text style={styles.fine}>{fine}</Text> : null}\n {onPrimary ? (\n <Pressable onPress={onPrimary} style={styles.primaryCta} accessibilityRole=\"button\">\n <Text style={styles.primaryCtaLabel}>{primaryLabel ?? 'Create'}</Text>\n </Pressable>\n ) : null}\n {onRetry ? (\n <Pressable onPress={onRetry} style={styles.retry} accessibilityRole=\"button\">\n <Text style={styles.retryLabel}>{retryLabel}</Text>\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n primaryCta: {\n marginTop: 16,\n paddingHorizontal: 22,\n paddingVertical: 11,\n borderRadius: 11,\n backgroundColor: '#2563eb',\n },\n primaryCtaLabel: { color: '#ffffff', fontSize: 14, fontWeight: '600' },\n fill: { flex: 1 },\n gridLoading: {\n position: 'absolute',\n top: 12,\n right: 16,\n zIndex: 4,\n },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 15, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n fine: { marginTop: 10, fontSize: 11, color: '#94a3b8', textAlign: 'center', paddingHorizontal: 20, lineHeight: 15 },\n spaced: { marginTop: 10 },\n textLight: { color: '#f8fafc' },\n textMuted: { color: '#94a3b8' },\n retry: { marginTop: 16, paddingHorizontal: 18, paddingVertical: 10, borderRadius: 10, backgroundColor: '#2563eb' },\n retryLabel: { color: '#ffffff', fontSize: 13, fontWeight: '600' },\n backPill: {\n position: 'absolute',\n top: 12,\n left: 12,\n zIndex: 40,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n maxWidth: 220,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderRadius: 12,\n backgroundColor: '#ffffff',\n borderWidth: 1,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 8,\n shadowOffset: { width: 0, height: 2 },\n elevation: 2,\n },\n backLabel: { fontSize: 15, fontWeight: '600', color: '#475569' },\n uploadToast: {\n position: 'absolute',\n top: 56,\n left: 16,\n right: 16,\n zIndex: 60,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 10,\n paddingHorizontal: 14,\n paddingVertical: 12,\n borderRadius: 14,\n backgroundColor: '#ffffff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: 'rgba(15,23,42,0.08)',\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 4 },\n elevation: 6,\n },\n uploadToastText: { flex: 1, fontSize: 14, fontWeight: '600', color: '#0f172a' },\n exportOverlay: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: 'rgba(0,0,0,0.65)',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 32,\n },\n exportCard: {\n minWidth: 220,\n maxWidth: 320,\n alignItems: 'center',\n gap: 10,\n backgroundColor: '#17171C',\n borderRadius: 16,\n paddingVertical: 20,\n paddingHorizontal: 24,\n },\n exportStage: { fontSize: 13, color: '#CBD5E1', textAlign: 'center' },\n exportError: { fontSize: 15, fontWeight: '600', color: '#F87171' },\n exportDismiss: {\n marginTop: 4,\n backgroundColor: '#26262E',\n borderRadius: 16,\n paddingHorizontal: 14,\n paddingVertical: 8,\n },\n exportDismissLabel: { fontSize: 13, fontWeight: '600', color: '#F7F7FA' },\n});\n\nexport default CanvasExperience;\n"],"names":["_a","_b","_c","RNImage","dismissCanvasTask"],"mappings":";;;;;;;;;;;;;;;;;;;AA8GA,SAAS,cAAc,SAAwC,EAAA;AAC7D,EAAM,MAAA,EAAA,GAAA,CAAK,SAAW,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAA,IAAA,EAAA,KAAU,UAAW,EAAA;AAC3C,EAAO,OAAA;AAAA,IACL,SAAW,EAAA,EAAA;AAAA,IACX,KAAO,EAAA,EAAA;AAAA,IACP,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,IAClB,SAAW,EAAA,CAAA;AAAA,IACX,OAAO,eAAgB;AAAA,GACzB;AACF;AACA,MAAM,gBAAmB,GAAA,GAAA;AAEzB,MAAM,qBAAwB,GAAA,IAAA;AAC9B,MAAM,aAAgB,GAAA,CAAC,GAAwB,KAAA,QAAA,CAAS,KAAK,cAAc,CAAA;AAW3E,SAAS,YAAA,CAAa,IAA0B,EAAA,GAAA,EAAa,IAAkC,EAAA;AAtI/F,EAAA,IAAA,EAAA;AAuIE,EAAM,MAAA,OAAA,GAAU,IAAS,KAAA,OAAA,GAAU,GAAM,GAAA,GAAA;AACzC,EAAM,MAAA,IAAA,GAAA,CAAO,6BAAM,MAAS,IAAA,aAAA,CAAc,KAAK,MAAQ,EAAA,OAAO,IAAI,IAAM,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,IAAA;AACxE,EAAO,OAAA,cAAA,CAAA;AAAA,IACL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,QAAO,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,IAAA,KAAN,IAAe,GAAA,EAAA,GAAA,IAAA,KAAS,UAAU,cAAiB,GAAA;AAAA,GAAA,EACtD,IAAO,GAAA;AAAA,IACT;AAAA,MACE,EAAC,CAAA;AAET;AAGA,SAAS,mBAAmB,IAAkC,EAAA;AAC5D,EAAO,OAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA;AAAA,IACL,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,KAAK,IAAK,CAAA;AAAA,GAAA,EACN,KAAK,kBAAqB,GAAA;AAAA,IAC5B,OAAO,IAAK,CAAA;AAAA,GACd,GAAI,EACA,CAAA,EAAA,IAAA,CAAK,QAAQ,CAAK,IAAA,IAAA,CAAK,SAAS,CAAI,GAAA;AAAA,IACtC,IAAM,EAAA;AAAA,MACJ,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,QAAQ,IAAK,CAAA;AAAA;AACf,GACE,GAAA,EACA,CAAA,EAAA,IAAA,CAAK,aAAa,KAAQ,GAAA;AAAA,IAC5B,QAAU,EAAA;AAAA,MACR,EAAC,CAAA;AAET;AAGA,SAAS,cAAA,CAAe,MAA4B,IAAkD,EAAA;AAxKtG,EAAA,IAAA,EAAA;AAyKE,EAAM,MAAA,SAAA,GAAY,kBAAmB,CAAA,IAAA,CAAK,KAAO,EAAA,IAAA,CAAK,KAAO,EAAA,CAAA,EAAA,GAAA,IAAA,CAAK,SAAL,KAAA,IAAA,GAAA,EAAA,GAAkB,EAAC,EAAG,aAAa,CAAA;AAChG,EAAA,MAAM,MAA4B,cAC7B,CAAA,EAAA,EAAA,IAAA,CAAA;AAEL,EAAA,IAAI,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA,GAAA,CAAI,SAAY,GAAA,SAAA;AAAA,cAAsB,GAAI,CAAA,SAAA;AACpE,EAAO,OAAA,GAAA;AACT;AACO,SAAS,gBAAiB,CAAA;AAAA,EAC/B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAO,EAAA,aAAA;AAAA,EACP,YAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAA0B,EAAA;AApM1B,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAqME,EAAM,MAAA,MAAA,GAAS,gBAAqB,KAAA,MAAA;AAIpC,EAAA,MAAM,kBAAqB,GAAA,OAAA,CAAoC,MAAM,cAAA,IAAA,IAAA,GAAA,cAAA,GAAmB,SAAS,QAAW,GAAA,qBAAA,CAAsB,KAAO,EAAA,QAAQ,IAAI,MAAY,EAAA,CAAC,cAAgB,EAAA,KAAA,EAAO,QAAQ,CAAC,CAAA;AAElM,EAAA,OAAA,CAAQ,MAAM,oBAAqB,CAAA;AAAA,IACjC,KAAA;AAAA,IACA;AAAA,GACD,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AACrB,EAAA,MAAM,oBAAuB,GAAA,OAAA,CAAQ,MAAM,WAAA,IAAA,IAAA,GAAA,WAAA,GAAgB,SAAS,QAAW,GAAA,uBAAA,CAAwB,KAAO,EAAA,QAAQ,IAAI,MAAY,EAAA,CAAC,WAAa,EAAA,KAAA,EAAO,QAAQ,CAAC,CAAA;AACpK,EAAM,MAAA,YAAA,GAAA,CAAe,2BAAsB,QAAQ,CAAA,KAA9B,YAAoC,YAAe,GAAA,sBAAA,CAAuB,YAAY,CAAI,GAAA,IAAA;AAC/G,EAAM,MAAA,CAAC,QAAQ,SAAS,CAAA,GAAI,SAA+B,MAAM,YAAA,IAAA,IAAA,GAAA,YAAA,GAAgB,EAAE,CAAA;AAEnF,EAAM,MAAA,SAAA,GAAY,OAAO,MAAM,CAAA;AAC/B,EAAA,SAAA,CAAU,OAAU,GAAA,MAAA;AACpB,EAAM,MAAA,CAAC,SAAS,UAAU,CAAA,GAAI,SAAS,CAAC,aAAA,IAAiB,gBAAgB,IAAI,CAAA;AAC7E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,CAAC,CAAA;AAC9C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAM,MAAA,gBAAA,GAAmB,MAA+B,CAAA,EAAE,CAAA;AAG1D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAM,MAAA,SAAA,GAAY,QAAQ,aAAa,CAAA;AAGvC,EAAM,MAAA,cAAA,GAAiB,OAAO,MAAM,CAAA;AACpC,EAAA,cAAA,CAAe,OAAU,GAAA,MAAA;AACzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAmB,kBAAA,CAAA;AAAA,MACjB,WAAa,EAAA,UAAA;AAAA,MACb,SAAA,EAAW,CAAM,EAAA,KAAA,aAAA,CAAc,EAAE,CAAA;AAAA,MACjC,YAAY,CAAG,EAAA,KAAA;AA1OrB,QAAAA,IAAAA,GAAAA;AA0OwB,QAAAA,OAAAA,CAAAA,CAAAA,GAAAA,GAAA,cAAe,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,SAAA,KAAc,EAAE,CAAA,KAA3D,IAAAA,GAAAA,MAAAA,GAAAA,GAAAA,CAA8D,KAAS,KAAA,MAAA;AAAA,OAAA;AAAA,MACzF,SAAW,EAAA;AAAA,KACZ,CAAA;AAAA,GACA,EAAA,CAAC,UAAY,EAAA,kBAAkB,CAAC,CAAA;AACnC,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA,IAAa,CAAC,QAAA,EAAiB,OAAA,MAAA;AACnC,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAA,KAAK,2BAA4B,CAAA,QAAQ,CAAE,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA;AACtD,MAAI,IAAA,SAAA,IAAa,EAAC,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,MAAQ,CAAA,EAAA;AAChC,MAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAS,GAAA,CAAA,GAAI,OAAO,IAAI,CAAA;AAC/C,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AAAA,KACd;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,SAAS,CAAC,CAAA;AACxB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAkB,OAAA,MAAA;AACtB,IAAA,IAAI,CAAC,KAAO,EAAA;AAGV,MAAI,IAAA,qBAAA,CAAsB,QAAQ,CAAA,IAAK,IAAM,EAAA;AAC3C,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA;AAEjB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAO,OAAA,MAAA;AAAA;AAET,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAM,MAAA,QAAA,GAAW,sBAAsB,QAAQ,CAAA,IAAK,QAAQ,sBAAuB,CAAA,YAAY,EAAE,MAAS,GAAA,CAAA;AAC1G,IAAA,CAAC,YAAY;AAGX,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAA,UAAA,CAAW,IAAI,CAAA;AACf,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA;AAEf,MAAM,MAAA,MAAA,GAAS,MAAM,mBAAoB,CAAA;AAAA,QACvC,GAAK,EAAA,QAAA;AAAA,QACL,KAAA;AAAA,QACA,QAAQ,UAAW,CAAA;AAAA,OACpB,CAAA;AACD,MAAA,IAAI,SAAW,EAAA;AACf,MAAA,IAAI,OAAS,EAAA;AAIX,QAAA,OAAA,CAAQ,IAAI,4BAA8B,EAAA,IAAA,CAAK,UAAU,MAAO,CAAA,MAAA,CAAO,IAAI,CAAM,CAAA,MAAA;AAAA,UAC/E,WAAW,CAAE,CAAA,SAAA;AAAA,UACb,OAAO,CAAE,CAAA,KAAA;AAAA,UACT,KAAO,EAAA,CAAA,CAAE,KAAM,CAAA,KAAA,CAAM,IAAI,CAAM,CAAA,MAAA;AAAA,YAC7B,MAAM,CAAE,CAAA,IAAA;AAAA,YACR,GAAG,CAAE,CAAA,CAAA;AAAA,YACL,GAAG,CAAE,CAAA,CAAA;AAAA,YACL,GAAG,CAAE,CAAA,KAAA;AAAA,YACL,GAAG,CAAE,CAAA,MAAA;AAAA,YACL,GAAG,CAAE,CAAA,MAAA;AAAA,YACL,KAAK,CAAG,EAAA,CAAA,CAAE,IAAI,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,MAAA;AAAA,WAC1B,CAAA;AAAA,SACJ,CAAE,CAAC,CAAC,CAAA;AAAA;AAEN,MAAA,IAAI,OAAO,KAAO,EAAA;AAEhB,QAAA,IAAI,CAAC,QAAA,EAAmB,QAAA,CAAA,MAAA,CAAO,KAAK,CAAA;AACpC,QAAA,UAAA,CAAW,KAAK,CAAA;AAChB,QAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,QAAA;AAAA;AAEF,MAAA,gBAAA,CAAiB,OAAU,GAAA,MAAA,CAAO,WAAY,CAAA,MAAA,CAAO,OAAO,GAAI,CAAA,CAAA,KAAA,KAAS,CAAC,KAAA,CAAM,WAAW,cAAe,CAAA,KAAA,CAAM,KAAK,CAAC,CAAC,CAAC,CAAA;AACxH,MAAA,SAAA,CAAU,OAAO,MAAM,CAAA;AACvB,MAAwB,uBAAA,CAAA,YAAA,EAAc,OAAO,MAAM,CAAA;AACnD,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,KACpB,GAAA;AACH,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AACZ,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA,KACnB;AAAA,KACC,CAAC,QAAA,EAAU,OAAO,SAAW,EAAA,UAAA,EAAY,YAAY,CAAC,CAAA;AACzD,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA,IAAa,OAAW,IAAA,CAAC,QAAU,EAAA;AACvC,IAAA,2BAAA,CAA4B,UAAU,MAAM,CAAA;AAAA,KAC3C,CAAC,MAAA,EAAQ,QAAU,EAAA,OAAA,EAAS,SAAS,CAAC,CAAA;AAIzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAc,IAAA,CAAC,SAAa,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACrD,IAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAK,CAAS,KAAA,KAAA,KAAA,CAAM,cAAc,SAAS,CAAA;AAChE,IAAI,IAAA,KAAA,EAAqB,aAAA,CAAA,KAAA,CAAM,SAAS,CAAA;AAAA,GACvC,EAAA,CAAC,MAAQ,EAAA,SAAA,EAAW,UAAU,CAAC,CAAA;AAClC,EAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,MAAM,UAAA,GAAa,OAAO,IAAK,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,SAAA,KAAc,UAAU,CAAI,GAAA,MAAA,EAAW,CAAC,MAAA,EAAQ,UAAU,CAAC,CAAA;AAIlI,EAAA,eAAA,CAAgB,OAAO,QAAQ,CAAA;AAC/B,EAAA,oBAAA,CAAqB,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,SAAA,EAAW,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,KAAA,CAAM,KAAO,EAAA,kBAAA,EAAoB,CAAC,OAAA,EAAS,QAAa,KAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,IAAA,CAAK,IAAI,CAAS,KAAA,KAAA;AAC9I,IAAI,IAAA,KAAA,CAAM,SAAc,KAAA,OAAA,EAAgB,OAAA,KAAA;AACxC,IAAA,MAAM,KAAQ,GAAA,gBAAA,CAAiB,KAAM,CAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;AAC1D,IAAA,OAAO,UAAU,KAAM,CAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,GAAQ,iCACxC,KADwC,CAAA,EAAA;AAAA,MAE3C,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,QAEL;AAAA,OACF;AAAA,KACF,CAAA;AAAA,GACD,CAAC,CAAC,CAAA;AAGH,EAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,CAAC,KAAsD,KAAA;AACvF,IAAI,IAAA,CAAC,UAAiB,OAAA,KAAA;AACtB,IAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,MAEL,KAAO,EAAA,KAAA,CAAM,KAAM,CAAA,GAAA,CAAI,CAAQ,IAAA,KAAA,IAAA,CAAK,IAAS,KAAA,OAAA,IAAW,IAAK,CAAA,IAAA,KAAS,OAAU,GAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAC3E,IAD2E,CAAA,EAAA;AAAA,QAE9E,GAAK,EAAA,eAAA,CAAgB,QAAU,EAAA,IAAA,CAAK,GAAG;AAAA,WACrC,IAAI;AAAA,KACV,CAAA;AAAA,GACF,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAM,MAAA,gBAAA,GAAmB,WAAY,CAAA,CAAC,MAAuB,KAAA;AAC3D,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA;AAAA,OACT,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,cAAgB,EAAA;AAAA,OACjB,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,QAAU,EAAA;AACvB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA;AAAA;AAIF,IAAA,MAAM,OAAO,MAAW,KAAA,QAAA,GAAW,UAAa,GAAA,MAAA,KAAW,aAAa,UAAa,GAAA,QAAA;AACrF,IAAe,cAAA,CAAA;AAAA,MACb;AAAA,KACD,CAAA;AAAA,GACH,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,MAAA,GAAS,YAAY,MAAM,aAAA,CAAc,OAAK,CAAI,GAAA,CAAC,CAAG,EAAA,EAAE,CAAA;AAC9D,EAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,CAAC,KAAgC,KAAA;AACrE,IAAU,SAAA,CAAA,CAAA,IAAA,KAAQ,KAAK,GAAI,CAAA,CAAA,KAAA,KAAS,MAAM,SAAc,KAAA,UAAA,GAAa,iCAChE,KADgE,CAAA,EAAA;AAAA;AAAA;AAAA,MAInE,KAAO,EAAA,cAAA,CAAe,KAAM,CAAA,KAAA,EAAO,KAAK,CAAA;AAAA,MACxC,KAAA,EAAO,KAAM,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,MAC5B,SAAA,EAAW,MAAM,KAAM,CAAA,MAAA;AAAA,MACvB,SAAS,KAAM,CAAA;AAAA,KACjB,CAAA,GAAI,KAAK,CAAC,CAAA;AAAA,GACZ,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAM,MAAA,eAAA,GAAkB,WAAY,CAAA,OAAO,MAA4B,KAAA;AACrE,IAAI,IAAA,CAAC,oBAAoB,SAAW,EAAA;AACpC,IAAI,IAAA;AACF,MAAM,MAAA,MAAA,GAAS,MAAM,gBAAA,CAAiB,CAAW,OAAA,KAAA;AAC/C,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,SACtB,MAAM,CAAA;AACT,MAAI,IAAA,CAAC,OAAO,MAAQ,EAAA;AACpB,MAAA,SAAA,CAAU,CAAQ,IAAA,KAAA;AAChB,QAAA,MAAM,OAAO,IAAK,CAAA,MAAA,GAAS,OAAO,CAAC,aAAA,CAAc,SAAS,CAAC,CAAA;AAC3D,QAAA,MAAM,QAAW,GAAA,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,IAAK,CAAA,CAAC,CAAE,CAAA,SAAA;AACvC,QAAO,OAAA,IAAA,CAAK,IAAI,CAAS,KAAA,KAAA;AACvB,UAAI,IAAA,KAAA,CAAM,SAAc,KAAA,QAAA,EAAiB,OAAA,KAAA;AAGzC,UAAM,MAAA,MAAA,GAAS,cAAc,KAAM,CAAA,KAAA,CAAM,OAAO,MAAO,CAAA,GAAA,CAAI,kBAAkB,CAAC,CAAA;AAC9E,UAAA,MAAM,QAAQ,CAAC,GAAG,KAAM,CAAA,KAAA,CAAM,OAAO,GAAG,MAAA,CAAO,GAAI,CAAA,CAAC,MAAM,CAAO,KAAA,aAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAC5D,IACA,CAAA,EAAA,MAAA,CAAO,CAAC,CAFoD,CAAA,EAAA;AAAA,YAG/D,EAAI,EAAA,IAAA,CAAK,EAAM,IAAA,MAAA,CAAO,CAAC,CAAE,CAAA;AAAA,YACzB,CAAC,CAAA;AACH,UAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,UAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,YAEL,KAAA,EAAO,SAAU,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,YAChC,WAAW,KAAM,CAAA,MAAA;AAAA,YACjB,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,cAEL,KAAA;AAAA,cACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,cAClB,OAAO,SAAU,CAAA;AAAA,aACnB;AAAA,WACF,CAAA;AAAA,SACD,CAAA;AAAA,OACF,CAAA;AAAA,aACM,GAAK,EAAA;AACZ,MAAA,IAAI,OAAS,EAAA;AAEX,QAAQ,OAAA,CAAA,IAAA,CAAK,yCAAyC,GAAG,CAAA;AAAA;AAC3D,KACA,SAAA;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA;AACtB,KACC,CAAC,gBAAA,EAAkB,UAAY,EAAA,SAAA,EAAW,SAAS,CAAC,CAAA;AACvD,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AACxC,IAAA,MAAM,QAAQ,aAAc,EAAA;AAC5B,IAAA,gBAAA,CAAiB,QAAQ,KAAM,CAAA,SAAS,CAAI,GAAA,cAAA,CAAe,MAAM,KAAK,CAAA;AACtE,IAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,CAAC,KAAO,EAAA,GAAG,IAAI,CAAC,CAAA;AAClC,IAAA,aAAA,CAAc,MAAM,SAAS,CAAA;AAAA,GAC/B,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,GACvB,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,aAAA,CAAc,IAAI,CAAA;AAGlB,IAAA,SAAA,CAAU,UAAQ,IAAK,CAAA,MAAA,CAAO,WAAS,KAAM,CAAA,SAAA,GAAY,CAAC,CAAC,CAAA;AAAA,GAC7D,EAAG,EAAE,CAAA;AAIL,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,SAAA,IAAa,WAAW,CAAC,KAAA,IAAS,CAAC,QAAY,IAAA,CAAC,UAAiB,OAAA,MAAA;AACrE,IAAA,MAAM,KAAQ,GAAA,eAAA,CAAgB,QAAS,CAAA,KAAA,CAAM,KAAO,EAAA,QAAA,CAAS,KAAM,CAAA,IAAA,EAAM,QAAS,CAAA,KAAA,EAAO,QAAS,CAAA,KAAA,CAAM,SAAS,CAAA;AACjH,IAAA,IAAI,KAAM,CAAA,KAAA,CAAM,MAAW,KAAA,CAAA,EAAU,OAAA,MAAA;AACrC,IAAM,MAAA,GAAA,GAAM,eAAe,KAAK,CAAA;AAChC,IAAA,IAAI,iBAAiB,OAAQ,CAAA,QAAA,CAAS,SAAS,CAAA,KAAM,KAAY,OAAA,MAAA;AACjE,IAAM,MAAA,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,KAAK,eAAgB,CAAA;AAAA,QACnB,GAAK,EAAA,QAAA;AAAA,QACL,KAAA;AAAA,QACA,WAAW,QAAS,CAAA,SAAA;AAAA,QACpB;AAAA,OACD,CAAE,CAAA,IAAA,CAAK,CAAM,EAAA,KAAA;AACZ,QAAA,IAAI,EAAI,EAAA,gBAAA,CAAiB,OAAQ,CAAA,QAAA,CAAS,SAAS,CAAI,GAAA,GAAA;AAAA,OACxD,CAAA;AAAA,OACA,gBAAgB,CAAA;AACnB,IAAO,OAAA,MAAM,aAAa,KAAK,CAAA;AAAA,KAC9B,CAAC,QAAA,EAAU,OAAO,QAAU,EAAA,OAAA,EAAS,SAAS,CAAC,CAAA;AAGlD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAM1B,IAAI,CAAA;AAEd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAIxB,IAAI,CAAA;AAEd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAKxB,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAA4B,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAoC,IAAI,CAAA;AAC5E,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,KAAK,CAAA;AAC1D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAA4B,IAAI,CAAA;AAElF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAGxB,IAAI,CAAA;AAEd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAM,MAAA,UAAA,GAAa,cAAc,YAAY,CAAA;AAE7C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAI5B,IAAI,CAAA;AACd,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA,CAA6B,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,aAAe,EAAA,gBAAgB,CAAI,GAAA,QAAA,CAAuB,EAAE,CAAA;AAInE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAa,CAAC,KAAA,IAAS,CAAC,QAAA,IAAY,aAAoB,OAAA,MAAA;AAC5D,IAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,IAAA,KAAK,cAAe,CAAA;AAAA,MAClB,GAAK,EAAA,QAAA;AAAA,MACL,KAAA;AAAA,MACA,QAAQ,UAAW,CAAA;AAAA,KACpB,CAAE,CAAA,IAAA,CAAK,CAAU,MAAA,KAAA;AAChB,MAAA,UAAA,CAAW,OAAO,OAAO,CAAA;AAAA,KAC1B,CAAA;AACD,IAAO,OAAA,MAAM,WAAW,KAAM,EAAA;AAAA,KAC7B,CAAC,KAAA,EAAO,UAAU,SAAW,EAAA,WAAA,EAAa,UAAU,CAAC,CAAA;AACxD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,kBAAA,IAAsB,CAAC,YAAc,EAAA;AAClD,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA;AAAA;AAEF,IAAA,IAAI,SAAY,GAAA,KAAA;AAChB,IAAA,KAAK,gBAAgB,kBAAoB,EAAA;AAAA,MACvC,KAAO,EAAA;AAAA,KACN,EAAA;AAAA,MACD,MAAQ,EAAA,YAAA;AAAA,MACR,KAAA;AAAA,MACA;AAAA,KACD,CAAE,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA;AACd,MAAA,IAAI,CAAC,SAAA,EAA4B,gBAAA,CAAA,IAAA,CAAK,KAAK,CAAA;AAAA,KAC5C,CAAE,CAAA,KAAA,CAAM,MAAM;AACb,MAAA,IAAI,CAAC,SAAA,EAA4B,gBAAA,CAAA,EAAE,CAAA;AAAA,KACpC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,IAAA;AAAA,KACd;AAAA,KACC,CAAC,YAAA,EAAc,kBAAoB,EAAA,QAAA,EAAU,KAAK,CAAC,CAAA;AAGtD,EAAA,MAAM,YAAe,GAAA,WAAA,CAAY,CAAC,IAAA,EAA0B,KAAa,IAAiC,KAAA;AA5jB5G,IAAA,IAAAA,GAAAC,EAAAA,GAAAA;AA6jBI,IAAA,MAAM,GAAM,GAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,EAAU,GAAG,CAAI,GAAA,GAAA;AACxD,IAAA,MAAM,SAAY,GAAA,YAAA,CAAa,IAAM,EAAA,GAAA,EAAK,IAAI,CAAA;AAC9C,IAAA,MAAM,MAASD,GAAAA,CAAAA,GAAAA,GAAA,SAAU,CAAA,OAAA,CAAQ,KAAK,CAAS,KAAA,KAAA,KAAA,CAAM,SAAc,KAAA,UAAU,CAA9D,KAAA,IAAA,GAAAA,GAAmE,GAAA,SAAA,CAAU,QAAQ,CAAC,CAAA;AAErG,IAAA,MAAM,IAAmB,GAAA,aAAA,CAAA,CAAcC,GAAA,GAAA,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,MAAM,KAAd,KAAA,IAAA,GAAAA,GAAuB,GAAA,EAAI,EAAA,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;AAChF,IAAA,SAAA,CAAU,CAAQ,IAAA,KAAA;AAChB,MAAA,MAAM,OAAO,IAAK,CAAA,MAAA,GAAS,OAAO,CAAC,aAAA,CAAc,SAAS,CAAC,CAAA;AAC3D,MAAA,MAAM,QAAW,GAAA,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,IAAK,CAAA,CAAC,CAAE,CAAA,SAAA;AACvC,MAAO,OAAA,IAAA,CAAK,IAAI,CAAS,KAAA,KAAA;AACvB,QAAI,IAAA,KAAA,CAAM,SAAc,KAAA,QAAA,EAAiB,OAAA,KAAA;AACzC,QAAM,MAAA,CAAC,MAAM,CAAI,GAAA,aAAA,CAAc,MAAM,KAAM,CAAA,KAAA,EAAO,CAAC,aAAA,CAAA,cAAA,CAAA,EAAA,EAC9C,SAD8C,CAAA,EAAA;AAAA,UAEjD,IAAI,IAAK,CAAA;AAAA,UACV,CAAC,CAAA;AACF,QAAA,MAAM,QAAQ,CAAC,GAAG,KAAM,CAAA,KAAA,CAAM,OAAO,MAAM,CAAA;AAC3C,QAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,QAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,UAEL,KAAA,EAAO,SAAU,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,UAChC,WAAW,KAAM,CAAA,MAAA;AAAA,UACjB,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,YAEL,KAAA;AAAA,YACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,YAClB,OAAO,SAAU,CAAA;AAAA,WACnB;AAAA,SACF,CAAA;AAAA,OACD,CAAA;AAAA,KACF,CAAA;AACD,IAAO,OAAA,IAAA;AAAA,GACN,EAAA,CAAC,UAAY,EAAA,SAAA,EAAW,QAAQ,CAAC,CAAA;AAGpC,EAAA,MAAM,sBAAyB,GAAA,WAAA,CAAY,CAAC,IAAA,EAA0B,KAAa,IAAiC,KAAA;AAClH,IAAA,MAAM,GAAM,GAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,EAAU,GAAG,CAAI,GAAA,GAAA;AACxD,IAAA,MAAM,IAAmB,GAAA,aAAA,CAAc,EAAC,EAAG,CAAC,YAAA,CAAa,IAAM,EAAA,GAAA,EAAK,IAAI,CAAC,CAAC,CAAA,CAAE,CAAC,CAAA;AAC7E,IAAA,MAAM,QAAQ,aAAc,EAAA;AAC5B,IAAM,MAAA,KAAA,GAAQ,CAAC,IAAI,CAAA;AACnB,IAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,IAAM,MAAA,IAAA,GAA2B,iCAC5B,KAD4B,CAAA,EAAA;AAAA,MAE/B,KAAA,EAAO,SAAU,CAAA,KAAA,IAAS,KAAM,CAAA,KAAA;AAAA,MAChC,WAAW,KAAM,CAAA,MAAA;AAAA,MACjB,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,QAEL,KAAA;AAAA,QACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,QAClB,OAAO,SAAU,CAAA;AAAA,OACnB;AAAA,KACF,CAAA;AACA,IAAA,gBAAA,CAAiB,QAAQ,KAAM,CAAA,SAAS,CAAI,GAAA,cAAA,CAAe,KAAK,KAAK,CAAA;AACrE,IAAA,SAAA,CAAU,CAAQ,IAAA,KAAA,CAAC,IAAM,EAAA,GAAG,IAAI,CAAC,CAAA;AACjC,IAAA,aAAA,CAAc,MAAM,SAAS,CAAA;AAC7B,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAO,OAAA,IAAA;AAAA,GACT,EAAG,CAAC,QAAQ,CAAC,CAAA;AACb,EAAA,MAAM,gBAAmB,GAAA,WAAA,CAAY,CAAC,GAAA,EAAa,IAG7C,KAAA,YAAA,CAAa,OAAS,EAAA,GAAA,EAAK,IAAI,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AACtD,EAAA,MAAM,YAAe,GAAA,WAAA,CAAY,CAAC,MAAA,EAAgB,KAAa,IAA8B,KAAA;AAC3F,IAAA,MAAM,GAAM,GAAA,QAAA,GAAW,eAAgB,CAAA,QAAA,EAAU,GAAG,CAAI,GAAA,GAAA;AACxD,IAAU,SAAA,CAAA,CAAA,IAAA,KAAQ,IAAK,CAAA,GAAA,CAAI,CAAS,KAAA,KAAA;AAClC,MAAI,IAAA,KAAA,CAAM,SAAc,KAAA,UAAA,EAAmB,OAAA,KAAA;AAC3C,MAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,IAAA;AAAA;AAAA,QAEpC,IAAK,CAAA,EAAA,KAAO,MAAS,GAAA,cAAA,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAChB,IADgB,CAAA,EAAA;AAAA,UAEnB,GAAA;AAAA,UACA,KAAO,EAAA;AAAA,SAAA,CAAA,EACH,IAAO,GAAA;AAAA,UACT;AAAA,SACF,GAAI,EACF,CAAA,GAAA;AAAA,OAAI,CAAA;AACR,MAAA,MAAM,YAAY,eAAgB,CAAA,KAAA,EAAO,MAAM,KAAM,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA;AACtE,MAAA,OAAO,iCACF,KADE,CAAA,EAAA;AAAA,QAEL,KAAA,EAAO,aACF,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADJ,CAAA,EAAA;AAAA,UAEL,KAAA;AAAA,UACA,OAAA,EAAS,KAAK,GAAI,EAAA;AAAA,UAClB,OAAO,SAAU,CAAA;AAAA,SACnB;AAAA,OACF,CAAA;AAAA,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,UAAY,EAAA,QAAQ,CAAC,CAAA;AAKzB,EAAM,MAAA,aAAA,GAAgB,OAAO,KAAK,CAAA;AAClC,EAAM,MAAA,iBAAA,GAAoB,QAAQ,MAAM;AAKtC,IAAI,IAAA,CAAC,oBAA2B,OAAA,aAAA;AAChC,IAAA,MAAM,SAAY,GAAA,kBAAA;AAClB,IAAA,MAAM,MAAS,GAAA,oBAAA;AACf,IAAA,OAAO,CAAC,IAA0B,KAAA;AAChC,MAAA,IAAI,cAAc,OAAS,EAAA;AAC3B,MAAA,aAAA,CAAc,OAAU,GAAA,IAAA;AAKxB,MAAA,KAAK,gBAAgB,SAAW,EAAA;AAAA,QAC9B,IAAA;AAAA,QACA,SAAS,UAAc,IAAA,IAAA,GAAA,UAAA,GAAA,EAAA;AAAA,QACvB,QAAO,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,YAAA,MAAgB,qCAAU,KAAM,CAAA,KAAA,CAAA,KAAS,qCAAU,KAAS,CAAA,IAAA,cAAA;AAAA,QAC/E;AAAA,OACD,EAAE,IAAK,CAAA,CAAA,EAAA,KAAM,gBAAgB,EAAE,CAAC,CAAE,CAAA,KAAA,CAAM,MAAM;AAC7C,QAAa,YAAA,CAAA;AAAA,UACX,KAAO,EAAA;AAAA,SACR,CAAA;AACD,QAAO,OAAA,gBAAA,CAAiB,IAAM,EAAA,SAAA,EAAW,MAAQ,EAAA,CAAA,CAAA,KAAK,aAAa,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,CAAO,GAAA,KAAA;AACjF,UAAA,gBAAA,CAAiB,GAAG,CAAA;AACpB,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,YAAA,CAAa,IAAI,CAAA;AAAA,SAClB,CAAA;AAAA,OACF,CAAA,CAAE,KAAM,CAAA,CAAC,GAAiB,KAAA;AACzB,QAAa,YAAA,CAAA;AAAA,UACX,KAAO,EAAA,EAAA;AAAA,UACP,KAAA,EAAO,kBAAmB,CAAA,GAAA,EAAK,cAAc;AAAA,SAC9C,CAAA;AAAA,OACF,CAAE,CAAA,OAAA,CAAQ,MAAM;AACf,QAAA,aAAA,CAAc,OAAU,GAAA,KAAA;AAAA,OACzB,CAAA;AAAA,KACH;AAAA,GACF,EAAG,CAAC,aAAe,EAAA,kBAAA,EAAoB,sBAAsB,gBAAkB,EAAA,UAAA,EAAY,UAAY,EAAA,QAAQ,CAAC,CAAA;AAGhH,EAAA,SAAA,CAAU,MAAM;AAjsBlB,IAAAD,IAAAA,GAAAA;AAksBI,IAAA,IAAI,CAAC,UAAA,IAAc,UAAW,CAAA,KAAA,KAAU,WAAe,IAAA,UAAA,CAAW,SAAa,IAAA,EAAA,CAACA,GAAA,GAAA,UAAA,CAAW,MAAX,KAAA,IAAA,GAAA,MAAA,GAAAA,IAAmB,GAAK,CAAA,EAAA;AACxG,IAAA,iBAAA,CAAkB,WAAW,EAAE,CAAA;AAC/B,IAAiB,gBAAA,CAAA,UAAA,CAAW,OAAO,GAAG,CAAA;AACtC,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,GACnB,EAAA,CAAC,UAAY,EAAA,gBAAgB,CAAC,CAAA;AACjC,EAAA,MAAM,gBAAmB,GAAA,WAAA,CAAY,CAAC,MAAA,EAA0B,IAAqB,KAAA;AAMnF,IAAA,IAAI,WAAW,cAAgB,EAAA;AAC7B,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,eAAiB,EAAA;AAC9B,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN,IAAA;AAAA,QACA,OAAS,EAAA;AAAA,OACV,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,aAAe,EAAA;AAC5B,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA;AAAA;AAEF,IAAA,IAAI,WAAW,YAAc,EAAA;AAC3B,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA;AAAA;AAEF,IAAA,IAAA,CAAK,MAAW,KAAA,YAAA,IAAgB,MAAW,KAAA,WAAA,KAAgB,kBAAoB,EAAA;AAC7E,MAAa,YAAA,CAAA,cAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OAAA,EACI,WAAW,WAAc,GAAA;AAAA,QAC3B,UAAY,EAAA;AAAA,OACd,GAAI,EACL,CAAA,CAAA;AACD,MAAA;AAAA;AAEF,IAAI,IAAA,MAAA,KAAW,gBAAgB,kBAAoB,EAAA;AACjD,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACD,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,MAAQ,EAAA,IAAA,CAAA;AAAA,GACtB,EAAA,CAAC,YAAc,EAAA,kBAAkB,CAAC,CAAA;AACrC,EAAM,MAAA,iBAAA,GAAoB,WAAY,CAAA,OAAO,QAAmC,KAAA;AAC9E,IAAI,IAAA;AACF,MAAM,MAAA,QAAA,GAAW,MAAM,oBAAA,CAAqB,QAAQ,CAAA;AACpD,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,iBAAiB,QAAS,CAAA,QAAA;AAAA,QAC1B,cAAc,QAAS,CAAA,KAAA;AAAA,QACvB,SAAS,QAAS,CAAA;AAAA,OACnB,CAAA;AAAA,KACK,CAAA,OAAA,CAAA,EAAA;AAAA;AAER,GACF,EAAG,EAAE,CAAA;AAGL,EAAM,MAAA,YAAA,GAAe,WAAY,CAAA,OAAO,IAA4B,KAAA;AAClE,IAAA,IAAI,CAAC,gBAAkB,EAAA;AACvB,IAAI,IAAA;AACF,MAAA,MAAM,SAAS,MAAM,gBAAA,CAAiB,QAAW,IAAS,KAAA,OAAA,GAAU,YAAY,MAAM,CAAA;AACtF,MAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,IAAI,CAAA;AAC9C,MAAA,IAAI,CAAC,KAAO,EAAA;AACZ,MAAA,MAAM,IAAO,GAAA,sBAAA,CAAuB,IAAM,EAAA,KAAA,CAAM,GAAK,EAAA,cAAA,CAAA;AAAA,QACnD,MAAM,KAAM,CAAA;AAAA,OAAA,EACR,KAAM,CAAA,KAAA,GAAQ,CAAK,IAAA,KAAA,CAAM,SAAS,CAAI,GAAA;AAAA,QACxC,IAAM,EAAA;AAAA,UACJ,OAAO,KAAM,CAAA,KAAA;AAAA,UACb,QAAQ,KAAM,CAAA;AAAA;AAChB,OACF,GAAI,EACL,CAAA,CAAA;AACD,MAAa,YAAA,CAAA;AAAA,QACX,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,aACM,GAAK,EAAA;AACZ,MAAA,IAAI,OAAS,EAAA;AAEX,QAAQ,OAAA,CAAA,IAAA,CAAK,8CAA8C,GAAG,CAAA;AAAA;AAChE;AACF,GACC,EAAA,CAAC,gBAAkB,EAAA,sBAAsB,CAAC,CAAA;AAG7C,EAAM,MAAA,YAAA,GAAe,YAAY,CAAC,MAAA,KAAyB,OAAO,IAAS,KAAA,QAAA,IAAY,OAAO,MAAW,KAAA,OAAA,IAAW,OAAO,MAAW,KAAA,OAAA,IAAW,QAAQ,gBAAoB,IAAA,kBAAkB,GAAG,CAAC,gBAAA,EAAkB,kBAAkB,CAAC,CAAA;AACxO,EAAM,MAAA,YAAA,GAAe,QAAQ,MAAM,mBAAA,CAAoB,YAAY,CAAG,EAAA,CAAC,YAAY,CAAC,CAAA;AAOpF,EAAM,MAAA,YAAA,GAAe,WAAY,CAAA,CAAC,MAAyB,KAAA;AACzD,IAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,MAAe,cAAA,CAAA;AAAA,QACb,MAAM,MAAO,CAAA;AAAA,OACd,CAAA;AACD,MAAA;AAAA;AAEF,IAAI,IAAA,MAAA,CAAO,SAAS,UAAY,EAAA;AAE9B,MAAI,IAAA,MAAA,CAAO,SAAS,QAAU,EAAA;AAC5B,QAAe,cAAA,CAAA;AAAA,UACb,IAAM,EAAA;AAAA,SACP,CAAA;AACD,QAAA;AAAA;AAEF,MAAgB,eAAA,EAAA;AAChB,MAAA,IAAI,MAAO,CAAA,IAAA,KAAS,OAAS,EAAA,aAAA,CAAc,KAAK,CAAA;AAAA,WAAoB,YAAA,CAAA;AAAA,QAClE,MAAM,MAAO,CAAA;AAAA,OACd,CAAA;AACD,MAAA;AAAA;AAEF,IAAA,IAAI,MAAO,CAAA,MAAA,KAAW,OAAW,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA;AAC1D,MAAK,KAAA,YAAA,CAAa,OAAO,MAAM,CAAA;AAC/B,MAAA;AAAA;AAEF,IAAgB,eAAA,EAAA;AAChB,IAAA,QAAQ,OAAO,MAAQ;AAAA,MACrB,KAAK,QAAA;AACH,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,QAAA;AAAA,MACF;AACE,QAAA,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA;AAClC,GACC,EAAA,CAAC,eAAiB,EAAA,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAGpD,EAAM,MAAA,aAAA,GAAgB,WAAY,CAAA,OAAO,IAAoB,KAAA;AA51B/D,IAAA,IAAAA,KAAAC,GAAAC,EAAAA,GAAAA;AA61BI,IAAA,MAAM,OAAO,IAAK,CAAA,IAAA,KAAS,UAAU,MAAM,IAAI,QAGhC,CAAW,OAAA,KAAA;AAExB,MAAA,MAAM,QAAQ,UAAW,CAAA,MAAM,OAAQ,CAAA,MAAS,GAAG,qBAAqB,CAAA;AACxE,MAAAC,KAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,GAAK,EAAA,CAAC,OAAO,MAAW,KAAA;AAC3C,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAQ,OAAA,CAAA,KAAA,GAAQ,CAAK,IAAA,MAAA,GAAS,CAAI,GAAA;AAAA,UAChC,KAAA;AAAA,UACA;AAAA,YACE,MAAS,CAAA;AAAA,SACZ,MAAM;AACP,QAAA,YAAA,CAAa,KAAK,CAAA;AAClB,QAAA,OAAA,CAAQ,MAAS,CAAA;AAAA,OAClB,CAAA;AAAA,KACF,CAAI,GAAA,MAAA;AACL,IAAA,MAAM,IAAO,GAAA,sBAAA,CAAuB,IAAK,CAAA,IAAA,EAAM,KAAK,GAAK,EAAA,cAAA,CAAA;AAAA,MACvD,IAAA,EAAA,CAAMD,OAAAD,GAAA,GAAA,IAAA,CAAK,SAAL,IAAAA,GAAAA,GAAAA,GAAAA,CAAaD,MAAA,IAAK,CAAA,QAAA,KAAL,gBAAAA,GAAe,CAAA,OAAA,CAAQ,YAAY,EAAhD,CAAA,KAAA,IAAA,GAAAE,MAAwD,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA;AAAA,KAAA,EAC5F,IAAO,GAAA;AAAA,MACT;AAAA,KACF,GAAI,EACL,CAAA,CAAA;AACD,IAAI,IAAA,IAAA,CAAK,IAAS,KAAA,OAAA,EAAuB,aAAA,CAAA;AAAA,MACvC,QAAQ,IAAK,CAAA;AAAA,KACd,CAAA;AAAA,SAAA,IAAW,oBAAiC,YAAA,CAAA;AAAA,MAC3C,IAAM,EAAA,OAAA;AAAA,MACN;AAAA,KACD,CAAA;AAAA,GACA,EAAA,CAAC,sBAAwB,EAAA,kBAAkB,CAAC,CAAA;AAK/C,EAAM,MAAA,gBAAA,GAAmB,OAAO,KAAK,CAAA;AACrC,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,gBAAA,CAAiB,WAAW,SAAW,EAAA;AAC3C,IAAA,gBAAA,CAAiB,OAAU,GAAA,IAAA;AAC3B,IAAA,MAAM,QAAQ,eAAgB,CAAA;AAAA,MAC5B,QAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAI,IAAA,KAAA,iBAAsB,KAAK,CAAA;AAAA,GAEjC,EAAG,EAAE,CAAA;AACL,EAAM,MAAA,eAAA,GAAkB,OAAO,KAAK,CAAA;AACpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,eAAgB,CAAA,OAAA,IAAW,SAAa,IAAA,CAAC,aAAe,EAAA;AAC5D,IAAA,eAAA,CAAgB,OAAU,GAAA,IAAA;AAC1B,IAAA,IAAI,eAAgB,CAAA;AAAA,MAClB,QAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACD,CAAG,EAAA;AACJ,IAAM,MAAA,SAAA,GAAY,eAAe,KAAK,CAAA;AACtC,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,KAAK,cAAc,SAAS,CAAA;AAC5B,MAAA;AAAA;AAEF,IAAM,MAAA,MAAA,GAAS,oBAAoB,UAAU,CAAA;AAC7C,IAAI,IAAA,MAAA,eAAqB,MAAM,CAAA;AAAA,GAE9B,EAAA,CAAC,aAAe,EAAA,SAAS,CAAC,CAAA;AAC7B,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,wBAAyB,EAAA,EAAA,IAAA,EAAM,SAAU,CAAA,IAAA,EAAM,MAAM,SAAU,CAAA,IAAA,EAAM,OAAS,EAAA,SAAA,CAAU,OAAS,EAAA,aAAA,EAAe,UAAU,aAAe,EAAA,SAAA,EAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAG,EAAA,WAAA,EAAa,CAAC,GAAA,EAAK,IAAS,KAAA;AAC7O,MAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,MAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QACtB,MAAM,CAAG,EAAA,IAAA,KAAS,UAAU,OAAU,GAAA,IAAA,KAAS,UAAU,OAAU,GAAA,IAAA,CAAK,SAAS,OAAU,GAAA,OAAA,GAAU,OAAO,CAAM,MAAA,EAAA,IAAA,CAAK,OAAO,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,QAC1I,QAAQ,IAAK,CAAA;AAAA,OACd,CAAA;AACD,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,KACnB,EAAG,iBAAiB,CAAY,QAAA,KAAA;AAC9B,MAAA,MAAM,QAAW,GAAA,sBAAA,CAAuB,QAAS,CAAA,OAAA,EAAS,SAAS,KAAK,CAAA;AACxE,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,iBAAiB,QAAS,CAAA,QAAA;AAAA,QAC1B,cAAc,QAAS,CAAA,KAAA;AAAA,QACvB,SAAS,QAAS,CAAA;AAAA,OACnB,CAAA;AAAA,KACA,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,UAAY,EAAA;AACd,IAAO,uBAAA,GAAA,CAAC,4BAAyB,UAAY,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,EAAC,EAAG,SAAW,EAAA,CAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAmB,UAAS,OAAU,GAAA,iBAAA,GAAoB,IAAM,EAAA,SAAA,EAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,aAAc,CAAA,KAAK,CAAG,EAAA,OAAA,EAAS,CAAQ,IAAA,KAAA;AACxO,MAAA,IAAA,CAAK,QAAQ,CAAC,GAAA,EAAK,CAAM,KAAA,YAAA,CAAa,SAAS,GAAK,EAAA;AAAA,QAClD,IAAA,EAAM,CAAS,MAAA,EAAA,CAAA,GAAI,CAAC,CAAA;AAAA,OACrB,CAAC,CAAA;AACF,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,KAClB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,uBAAQ,GAAA,CAAA,mBAAA,EAAA,EAAoB,UAAY,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,EAAC,EAAG,SAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA,EAAG,YAAY,CAAS,KAAA,KAAA;AAChI,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAa,YAAA,CAAA;AAAA,QACX,IAAM,EAAA,OAAA;AAAA,QACN,aAAe,EAAA;AAAA,OAChB,CAAA;AAAA,KACA,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,UAAA,EAAA,CAAY,EAAU,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,KAAA,CAAM,UAAhB,IAAyB,GAAA,EAAA,GAAA,EAAI,EAAA,SAAA,EAAW,kBAAoB,EAAA,WAAA,EAAa,sBAAsB,KAAc,EAAA,QAAA,EAAoB,OAAS,EAAA,MAAM,YAAa,CAAA,KAAK,GAAG,OAAS,EAAA,CAAC,IAAM,EAAA,GAAA,EAAK,IAAS,KAAA;AACzO,MAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QACtB;AAAA,OACD,CAAA;AAAA,KACA,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,uBAAA,GAAA,CAAC,4BAAyB,OAAS,EAAA,MAAM,gBAAgB,KAAK,CAAA,EAAG,MAAQ,EAAA,OAAM,MAAU,KAAA;AAC9F,MAAI,IAAA,CAAC,gBAAkB,EAAA,OAAO,EAAC;AAC/B,MAAO,OAAA,gBAAA,CAAiB,QAAW,MAAM,CAAA;AAAA,KAC3C,EAAG,UAAU,CAAS,KAAA,KAAA;AACpB,MAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,QAAA,YAAA,CAAa,KAAK,IAAS,KAAA,OAAA,GAAU,OAAU,GAAA,OAAA,EAAS,KAAK,GAAK,EAAA;AAAA,UAChE,MAAM,IAAK,CAAA;AAAA,SACZ,CAAA;AAAA;AACH,KACC,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,cAAgB,EAAA;AAClB,IAAA,2BAAQ,0BAA2B,EAAA,EAAA,UAAA,EAAA,CAAY,0CAAU,KAAM,CAAA,KAAA,KAAhB,YAAyB,EAAC,EAAG,WAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,iBAAkB,CAAA,KAAK,GAAG,OAAS,EAAA,CAAC,KAAK,IAAS,KAAA;AAC1K,MAAA,YAAA,CAAa,SAAS,GAAK,EAAA;AAAA,QACzB,IAAA;AAAA,QACA,MAAQ,EAAA;AAAA,OACT,CAAA;AACD,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,KACtB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,uBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,GAAA,EAAK,SAAU,CAAA,GAAA,EAAK,MAAM,SAAU,CAAA,kBAAA,EAAoB,KAAO,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,KAAM,CAAA,KAAA,KAAhB,YAAyB,EAAC,EAAG,SAAW,EAAA,kBAAA,EAAoB,OAAS,EAAA,MAAM,YAAa,CAAA,IAAI,CAAG,EAAA,SAAA,EAAW,CAAC,GAAA,EAAK,IAAS,KAAA;AAClN,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,YAAA,CAAa,SAAS,GAAK,EAAA;AAAA,UACzB,IAAM,EAAA;AAAA,SACP,CAAA;AAAA,OACI,MAAA;AACL,QAAA,YAAA,CAAa,UAAU,EAAI,EAAA,GAAA,EAAK,IAAS,KAAA,OAAA,GAAU,UAAU,OAAO,CAAA;AAAA;AAEtE,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,KAChB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,2BAAQ,oBAAqB,EAAA,EAAA,IAAA,EAAM,UAAe,KAAA,KAAA,GAAQ,OAAO,UAAY,EAAA,SAAA,EAAW,kBAAoB,EAAA,OAAA,EAAS,MAAM,aAAc,CAAA,IAAI,GAAG,OAAS,EAAA,CAAC,MAAM,MAAW,KAAA;AACzK,MAAA,IAAA,CAAK,OAAQ,CAAA,CAAC,GAAK,EAAA,CAAA,KAAM,iBAAiB,GAAK,EAAA;AAAA,QAC7C,IAAA,EAAM,CAAQ,KAAA,EAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAAA,QACnB;AAAA,OACD,CAAC,CAAA;AACF,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,KACjB,EAAA,CAAA;AAAA;AAEL,EAAA,IAAI,aAAe,EAAA;AACjB,IAAO,uBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,KAAA,EAAO,aAAc,CAAA,aAAa,GAAG,QAAQ,EAAA,IAAA,EAAC,YAAc,EAAA,gBAAA,EAAkB,MAAgB,EAAA,CAAA;AAAA;AAE3H,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,uBAAA,GAAA,CAAC,UAAO,MAAgB,EAAA,KAAA,EAAM,oCAA8B,MAAQ,EAAA,YAAA,EAAc,SAAS,cAAgB,EAAA,CAAA;AAAA;AAEpH,EAAI,IAAA,KAAA,IAAS,MAAO,CAAA,MAAA,KAAW,CAAG,EAAA;AAChC,IAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA,EAAO,MAAgB,EAAA,KAAA,EAAM,kCAA8B,EAAA,MAAA,EAAQ,KAAO,EAAA,IAAA,EAAM,eAAgB,CAAA,KAAA,EAAO,QAAQ,CAAA,EAAG,SAAS,MAAQ,EAAA,CAAA;AAAA;AAK7I,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,GAAA,EAAK,UAAU,IAAK,CAAA,GAAA;AAAA,MACpB,IAAA,EAAM,UAAU,IAAK,CAAA,kBAAA;AAAA,MACrB,SAAW,EAAA,kBAAA;AAAA,MACX,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,MAChC,MAAA,EAAQ,CAAC,GAAgB,KAAA;AACvB,QAAA,YAAA,CAAa,SAAU,CAAA,IAAA,CAAK,EAAI,EAAA,GAAA,EAAK,UAAU,IAAI,CAAA;AACnD,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA;AACnB,KACF;AACA,IAAA,OAAO,SAAU,CAAA,IAAA,KAAS,OAAU,mBAAA,GAAA,CAAC,qBAA0B,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAA1B,EAAkC,UAAA,EAAY,SAAU,CAAA,UAAA,EAAA,CAAY,CAAK,mBAAA,GAAA,CAAC,0CAA0B,MAAQ,CAAA,CAAA;AAAA;AAEnJ,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,IACf,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,yBAAsB,KAAO,EAAA,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,EAAI,EAAA,UAAA,EAAY,WAAW,MAAQ,EAAA,eAAA,EAAiB,WAAW,eAAiB,EAAA,YAAA,EAAc,WAAW,YAAgB,KAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAM,KAAS,CAAA,KAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,QAAO,cAAgB,EAAA,UAAA,CAAW,SAAS,OAAS,EAAA,MAAM,cAAc,IAAI,CAAA,EAAG,UAAU,iBAAmB,EAAA,gBAAA,EAAoC,WAAW,kBAAoB,EAAA,WAAA,EAAa,sBAAsB,aAA8B,EAAA,YAAA,EAA4B,OAAc,QAAoB,EAAA,cAAA,EAAgB,WAAW,cAAgB,EAAA,CAAA;AAAA,MAC3iB,UAAA,mBAAc,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,aAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,IAAA,EAAM,UAAY,EAAA,SAAA,EAAW,MAAM;AACjE,QAAAE,WAAA,CAAkB,WAAW,EAAE,CAAA;AAC/B,QAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,OACtB,EAAG,cAAc,MAAM,eAAA,CAAgB,IAAI,CAAG,EAAA,CAAA,EAClC,IAAU,SAAY,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,eACtC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,UAAA,EACf,QAAU,EAAA,SAAA,CAAA,KAAA,mBACH,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAa,QAAa,EAAA,eAAA,EAAA,CAAA;AAAA,wBAC9C,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,aAAa,aAAe,EAAA,CAAA,EAC3C,oBAAU,KACf,EAAA,CAAA;AAAA,4BACC,SAAU,EAAA,EAAA,OAAA,EAAS,MAAM,YAAa,CAAA,IAAI,GAAG,KAAO,EAAA,MAAA,CAAO,aAAe,EAAA,iBAAA,EAAkB,UACzF,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,kBAAA,EAAoB,qBAAO,CACnD,EAAA;AAAA,OAAA,EACJ,oBACI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,iBAAA,EAAA,EAAkB,OAAM,SAAU,EAAA,CAAA;AAAA,4BAClC,IAAK,EAAA,EAAA,KAAA,EAAO,MAAO,CAAA,WAAA,EAAc,oBAAU,KAAM,EAAA;AAAA,OACtD,EAAA,CAAA,EACR,GACJ,CAAU,GAAA;AAAA,KAClB,EAAA,CAAA;AAAA;AAEV,EAAA,IAAI,WAAa,EAAA;AACf,IAAO,uBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,MAAM,MACrB,EAAA,QAAA,kBAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,KAAA,EAAc,QAAoB,EAAA,KAAA,EAAO,aAAa,OAAS,EAAA,MAAM,eAAe,IAAI,CAAA,EAAG,kBAAoC,WAAa,EAAA,oBAAA,EAAsB,cAAgB,EAAA,kBAAA,EAAoB,CAC5N,EAAA,CAAA;AAAA;AAEV,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MAAM,MACpB,EAAA,QAAA,EAAA;AAAA,MAAA,OAAA,IAAW,MAAO,CAAA,MAAA,KAAW,CAAI,mBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,WAAa,EAAA,aAAA,EAAc,QACzE,QAAC,kBAAA,GAAA,CAAA,iBAAA,EAAA,EAAkB,IAAK,EAAA,OAAA,EAAQ,GACpC,CAAU,GAAA,IAAA;AAAA,0BACb,gBAAiB,EAAA,EAAA,MAAA,EAAQ,MAAO,CAAA,MAAA,CAAO,WAAS,KAAM,CAAA,SAAA,GAAY,CAAC,CAAA,EAAG,QAAQ,aAAe,EAAA,WAAA,EAAa,iBAAiB,OAAkB,EAAA,YAAA,EAAc,qBAAmB,cAAe,CAAA;AAAA,QACtM,SAAW,EAAA;AAAA,OACZ,CAAG,EAAA,UAAA,EAAY,sBAAwB,EAAA,YAAA,EAA4B,QAAU,EAAA,YAAA,EAAc,SAAW,EAAA,kBAAA,EAAoB,aAA8B,EAAA,cAAA,EAAgB,CAAQ,IAAA,KAAA;AAC/K,QAAa,YAAA,CAAA;AAAA,UACX,IAAM,EAAA,OAAA;AAAA,UACN,eAAe,IAAK,CAAA;AAAA,SACrB,CAAA;AAAA,OACA,EAAA,CAAA;AAAA,0BACQ,mBAAoB,EAAA,EAAA,OAAA,EAAS,aAAe,EAAA,OAAA,EAAS,MAAM,gBAAiB,CAAA,KAAK,CAAG,EAAA,SAAA,EAAW,oBAAoB,UAAY,EAAA,IAAI,WAAa,EAAA,CAAC,KAAK,IAAS,KAAA;AACxK,QAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,QAAO,OAAA,sBAAA,CAAuB,MAAM,GAAK,EAAA;AAAA,UACvC,MAAM,CAAG,EAAA,IAAA,KAAS,OAAU,GAAA,OAAA,GAAU,SAAS,OAAU,GAAA,OAAA,GAAU,OAAO,CAAA,MAAA,EAAA,CAAO,KAAK,KAAS,IAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,UACxH,QAAQ,IAAK,CAAA;AAAA,SACd,CAAA;AAAA,SACA,aAAe,EAAA,CAAA,QAAA,KAAY,KAAK,iBAAA,CAAkB,QAAQ,CAAG,EAAA;AAAA,KAC1D,EAAA,CAAA;AAAA;AAEV,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MAAM,MACvB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,cAAA,EAAA,EAAe,MAAM,SAAW,EAAA,MAAA,EAAgB,SAAS,UAAY,EAAA,SAAA,EAAW,kBAAoB,EAAA,YAAA,EAA4B,KAAc,EAAA,QAAA,EAAoB,UAAU,iBAAmB,EAAA,UAAA,EAAY,SAAW,EAAA,QAAA,EAAU,CAAU,MAAA,KAAA,KAAK,gBAAgB,MAAM,CAAA,EAAG,iBAAmB,EAAA,gBAAA,GAAmB,YAAY;AAEjU,MAAA,MAAM,MAAS,GAAA,MAAM,gBAAiB,CAAA,MAAA,EAAW,SAAS,CAAA;AAC1D,MAAA,MAAM,QAAQ,MAAO,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,OAAO,CAAA;AACjD,MAAI,IAAA,CAAC,OAAc,OAAA,IAAA;AACnB,MAAO,OAAA,WAAA,CAAY,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,IAAK,CAAC,oBAAA,GAAuB,KAAM,CAAA,GAAA,GAAM,oBAAqB,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,KAC1G,GAAI,QAAW,OAAS,EAAA,CAAA,IAAA,KAAQ,aAAa,IAAK,CAAA,IAAA,EAAM,KAAK,GAAK,EAAA;AAAA,MAChE,MAAM,IAAK,CAAA;AAAA,KACZ,GAAG,aAAe,EAAA,CAAC,MAAM,GAAK,EAAA,IAAA,KAAS,YAAa,CAAA,IAAA,EAAM,GAAK,EAAA;AAAA,MAC9D;AAAA,KACD,CAAG,EAAA,QAAA,EAAU,gBAAkB,EAAA,QAAA,EAAU,MAAM,cAAe,CAAA;AAAA,MAC7D,IAAM,EAAA;AAAA,KACP,CAAA,EAAG,WAAa,EAAA,CAAC,KAAK,IAAS,KAAA;AAC9B,MAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,MAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QACtB,IAAA,EAAM,GAAG,IAAS,KAAA,OAAA,GAAU,UAAU,IAAS,KAAA,OAAA,GAAU,OAAU,GAAA,IAAA,CAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,OAAU,GAAA,MAAA,GAAS,OAAO,CAAA,MAAA,EAAM,KAAK,MAAO,CAAA,KAAA,CAAM,CAAG,EAAA,EAAE,CAAC,CAAA,CAAA;AAAA,QAC3K,QAAQ,IAAK,CAAA;AAAA,OACd,CAAA;AAAA,KACH,EAAG,eAAiB,EAAA,CAAC,QAA4B,KAAA;AAC/C,MAAA,MAAM,QAAW,GAAA,sBAAA,CAAuB,QAAS,CAAA,OAAA,EAAS,SAAS,KAAK,CAAA;AACxE,MAAc,aAAA,CAAA;AAAA,QACZ,MAAQ,EAAA,IAAA;AAAA,QACR,iBAAiB,QAAS,CAAA,QAAA;AAAA,QAC1B,cAAc,QAAS,CAAA,KAAA;AAAA,QACvB,SAAS,QAAS,CAAA;AAAA,OACnB,CAAA;AAAA,OACA,cAAgB,EAAA,CAAC,QAAQ,GAAQ,KAAA,YAAA,CAAa,QAAQ,GAAG,CAAA,EAAG,aAAa,CAAQ,IAAA,KAAA,YAAA,CAAa,IAAI,CAAG,EAAA,QAAA,EAAU,MAAM,eAAgB,CAAA,IAAI,GAChI,QAAC,kBAAA,GAAA,CAAA,kBAAA,EAAA,EAAmB,OAAO,aAAc,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA,QAAA,EAAQ,MAAC,aAAe,EAAA,UAAA,EAAY,cAAc,gBAAkB,EAAA,aAAA,EAAe,mBAAmB,iBAAmB,EAAA,YAAA,EAAc,mBAAmB,oBAAsB,EAAA,SAAA,EAAW,oBAAoB,gBAAkB,EAAA,CAAC,KAAK,IAAS,KAAA;AAClT,MAAM,MAAA,IAAA,GAAO,KAAK,IAAS,KAAA,OAAA,GAAU,UAAU,IAAK,CAAA,IAAA,KAAS,UAAU,OAAU,GAAA,OAAA;AACjF,MAAO,OAAA,YAAA,CAAa,MAAM,GAAK,EAAA;AAAA,QAC7B,MAAM,CAAG,EAAA,IAAA,KAAS,OAAU,GAAA,OAAA,GAAU,SAAS,OAAU,GAAA,OAAA,GAAU,OAAO,CAAA,MAAA,EAAA,CAAO,KAAK,KAAS,IAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,QACxH,QAAQ,IAAK,CAAA;AAAA,OACd,CAAA;AAAA,OACA,cAAgB,EAAA,CAAC,MAAQ,EAAA,GAAA,KAAQ,aAAa,MAAQ,EAAA,GAAG,CAAG,EAAA,aAAA,EAAe,cAAY,KAAK,iBAAA,CAAkB,QAAQ,CAAG,EAAA,UAAA,EAAY,SAAS,QAAW,GAAA;AAAA,MAC1J,KAAA;AAAA,MACA;AAAA,KACF,GAAI,QAAW,CACT,EAAA,CAAA;AAAA,IACC,+BAAgB,IAAA,CAAA,IAAA,EAAA,EAAK,eAAc,MAAO,EAAA,KAAA,EAAO,OAAO,WAChD,EAAA,QAAA,EAAA;AAAA,MAAA,SAAA,uBAAa,iBAAkB,EAAA,EAAA,IAAA,EAAK,OAAQ,EAAA,KAAA,EAAM,WAAU,CAAK,GAAA,IAAA;AAAA,0BACjE,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,eAAiB,EAAA,aAAA,EAAe,GAC/C,QACL,EAAA,YAAA,EAAA;AAAA,KAAA,EACJ,CAAU,GAAA;AAAA,GAClB,EAAA,CAAA;AACR;AACA,SAAS,MAAO,CAAA;AAAA,EACd,MAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAa,GAAA;AACf,CAUG,EAAA;AACD,EAAA,uBAAQ,IAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,MAAA,CAAO,MACjB,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,OAAO,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAI,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,oBAChE,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAQ,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAI,QAAO,EAAA,MAAA,EAAA,CAAA;AAAA,IACjE,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,MAAO,CAAA,IAAA,EAAO,gBAAK,CAAU,GAAA,IAAA;AAAA,IACjD,4BAAa,GAAA,CAAA,SAAA,EAAA,EAAU,SAAS,SAAW,EAAA,KAAA,EAAO,OAAO,UAAY,EAAA,iBAAA,EAAkB,QAChF,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAO,EAAA,MAAA,CAAO,iBAAkB,QAAgB,EAAA,YAAA,IAAA,IAAA,GAAA,YAAA,GAAA,QAAA,EAAS,GACnE,CAAe,GAAA,IAAA;AAAA,IAClB,0BAAW,GAAA,CAAA,SAAA,EAAA,EAAU,OAAS,EAAA,OAAA,EAAS,OAAO,MAAO,CAAA,KAAA,EAAO,iBAAkB,EAAA,QAAA,EACvE,8BAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,UAAa,EAAA,QAAA,EAAA,UAAA,EAAW,GAChD,CAAe,GAAA;AAAA,GACvB,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,UAAY,EAAA;AAAA,IACV,SAAW,EAAA,EAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,KAAO,EAAA,SAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA;AAAA,GACR;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,GAAK,EAAA,EAAA;AAAA,IACL,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACV;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,SAAW,EAAA,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA,QAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,UAAY,EAAA;AAAA,GACd;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,SAAW,EAAA;AAAA,GACb;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,KAAO,EAAA;AAAA,IACL,SAAW,EAAA,EAAA;AAAA,IACX,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,UAAY,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA;AAAA,GACd;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,UAAA;AAAA,IACV,GAAK,EAAA,EAAA;AAAA,IACL,IAAM,EAAA,EAAA;AAAA,IACN,MAAQ,EAAA,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,CAAA;AAAA,IACL,QAAU,EAAA,GAAA;AAAA,IACV,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA,SAAA;AAAA,IACjB,WAAa,EAAA,CAAA;AAAA,IACb,WAAa,EAAA,qBAAA;AAAA,IACb,WAAa,EAAA,SAAA;AAAA,IACb,aAAe,EAAA,IAAA;AAAA,IACf,YAAc,EAAA,CAAA;AAAA,IACd,YAAc,EAAA;AAAA,MACZ,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,SAAW,EAAA;AAAA,GACb;AAAA,EACA,SAAW,EAAA;AAAA,IACT,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,GAAK,EAAA,EAAA;AAAA,IACL,IAAM,EAAA,EAAA;AAAA,IACN,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,aAAe,EAAA,KAAA;AAAA,IACf,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,EAAA;AAAA,IACL,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA,EAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA,SAAA;AAAA,IACjB,aAAa,UAAW,CAAA,aAAA;AAAA,IACxB,WAAa,EAAA,qBAAA;AAAA,IACb,WAAa,EAAA,SAAA;AAAA,IACb,aAAe,EAAA,IAAA;AAAA,IACf,YAAc,EAAA,EAAA;AAAA,IACd,YAAc,EAAA;AAAA,MACZ,KAAO,EAAA,CAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,SAAW,EAAA;AAAA,GACb;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,IAAM,EAAA,CAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,aAAA,EAAe,aACV,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CAAW,kBADD,CAAA,EAAA;AAAA,IAEb,eAAiB,EAAA,kBAAA;AAAA,IACjB,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX,CAAA;AAAA,EACA,UAAY,EAAA;AAAA,IACV,QAAU,EAAA,GAAA;AAAA,IACV,QAAU,EAAA,GAAA;AAAA,IACV,UAAY,EAAA,QAAA;AAAA,IACZ,GAAK,EAAA,EAAA;AAAA,IACL,eAAiB,EAAA,SAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,eAAiB,EAAA,EAAA;AAAA,IACjB,iBAAmB,EAAA;AAAA,GACrB;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA,GACT;AAAA,EACA,aAAe,EAAA;AAAA,IACb,SAAW,EAAA,CAAA;AAAA,IACX,eAAiB,EAAA,SAAA;AAAA,IACjB,YAAc,EAAA,EAAA;AAAA,IACd,iBAAmB,EAAA,EAAA;AAAA,IACnB,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,kBAAoB,EAAA;AAAA,IAClB,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA;AAAA;AAEX,CAAC,CAAA"}
|
|
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 } from './CanvasBoardsGrid';\nimport { CanvasAgentChatPane } from './CanvasAgentChatPane';\nimport { VideoEditorExperience, type VideoExportSpec } from './VideoEditorExperience';\nimport { ImageEditorExperience } from './ImageEditorExperience';\nimport { AudioEditorExperience } from './AudioEditorExperience';\nimport { friendlyMediaError, type AudioRecorderSeam, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n createRemoteRunAction,\n createRemoteUploadMedia,\n proxiedMediaUrl,\n unwrapProxyUrl,\n} from './videoEditor/remoteMediaClient';\nimport { renderExportSpec } from './videoEditor/exportRenderer';\nimport { startExportTask } from './videoEditor/exportTask';\nimport { ExportTaskCard, useCanvasTask } from './videoEditor/ExportTaskCard';\nimport { dismissTask as dismissCanvasTask, markTaskDelivered } from './canvasTasks';\nimport { fetchMyCanvasBoards, pushCanvasBoard, getCachedCanvasBoards, type CanvasBoardSummary } from './surfaceIndex';\nimport { applySrcRenewals, useBoardMediaRefresh, useMediaSigning } from './useBoardMediaRefresh';\nimport { readCachedCanvasBoards, writeCachedCanvasBoards } from './canvasBoardsCatalog';\nimport { hydrateCanvasBoardsSnapshot, persistCanvasBoardsSnapshot } from './canvasBoardsSnapshot';\nimport {\n boardSignature,\n buildBoardState,\n dimsForAspect,\n emptyBoardState,\n mediaItemsFor,\n mediaKey,\n newBoardId,\n reconcileDismissed,\n type CanvasItem,\n type MediaPlacement,\n type PersistedCanvasState,\n} from './canvasCore';\nimport { visibleCreateGroups, type CreateAction } from './createTiles';\nimport { parseCreateTileLink, parseDesignLink, parseMediaLink, type MediaLink } from './deepLinks';\nimport { promoProjectToTimeline } from './promoProjectImport';\nimport type { DesignedPromo } from './promoVideo';\nimport { loadTemplateTimeline } from './templateImport/loadTemplate';\nimport type { CanvasPromptTemplate } from './canvasChatTemplates';\nimport { CanvasToolDock, type DockStudio, type MediaPickSource } from './CanvasToolDock';\nimport { describeSession } from './sessionIdentity';\nimport { DesignExperience } from '../design/DesignExperience';\nimport type { DesignKind } from '../design/designCore';\nimport { fetchMyDesigns, type DesignDocSummary } from '../design/designIndex';\nimport { VideoGeneratorExperience, type GeneratorMode } from './VideoGeneratorExperience';\nimport { VideoEditExperience } from './VideoEditExperience';\nimport { VideoClipsExperience } from './VideoClipsExperience';\nimport { FrameExtractorExperience } from './FrameExtractorExperience';\nimport { MoodboardExperience } from './MoodboardExperience';\nimport { SetStudioExperience } from './SetStudioExperience';\nimport { configureServerTasks } from './serverTasks';\nimport { setCanvasTasksHost } from './canvasTaskSync';\nimport { InfluencerStudioExperience } from './InfluencerStudioExperience';\nimport { CameraRecorderExperience } from './recorder/CameraRecorderExperience';\nimport { listStudioLooks, type StudioLook } from './studioLooks';\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: native has no design catalog, so a blank design opens. */\n designTemplateId?: string;\n /** A chat card's design (`artifactId`): opened like `designId`. */\n artifactId?: string;\n testID?: string;\n /**\n * 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 const lastSavedByIdRef = useRef<Record<string, string>>({});\n /** The first index read has landed (or failed): deep links wait for it, so the\n * fetch's wholesale `setBoards` cannot drop a board a link just made. */\n const [boardsSettled, setBoardsSettled] = useState(false);\n\n const skipFetch = Boolean(explicitBoard);\n\n // The Tasks sheet lives in the dock; what it cannot learn from its props (the open board, how to open another).\n const tasksBoardsRef = useRef(boards);\n tasksBoardsRef.current = boards;\n useEffect(() => {\n setCanvasTasksHost({\n openBoardId: selectedId,\n openBoard: (id) => setSelectedId(id),\n boardLabel: (id) => tasksBoardsRef.current.find((entry) => entry.channelId === id)?.title || undefined,\n runAction: effectiveRunAction,\n });\n }, [selectedId, effectiveRunAction]);\n\n useEffect(() => {\n if (skipFetch || !indexUrl) return undefined;\n let cancelled = false;\n void hydrateCanvasBoardsSnapshot(indexUrl).then((rows) => {\n if (cancelled || !rows?.length) return;\n setBoards((prev) => (prev.length > 0 ? prev : rows));\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [indexUrl, skipFetch]);\n\n useEffect(() => {\n if (skipFetch) return undefined;\n if (!token) {\n // The index answers unauthenticated reads as \"Missing tenantId\".\n // Wait for the host mint — but keep a cached grid on screen.\n if (getCachedCanvasBoards(indexUrl) == null) {\n setLoading(true);\n }\n setError(null);\n return undefined;\n }\n const controller = new AbortController();\n let cancelled = false;\n const hasCache = getCachedCanvasBoards(indexUrl) != null || readCachedCanvasBoards(apolloClient).length > 0;\n\n (async () => {\n // Only the first visit (no cache) blocks on the spinner. Later visits\n // show the cached grid immediately and refresh in the background.\n if (!hasCache) {\n setLoading(true);\n setError(null);\n }\n const result = await fetchMyCanvasBoards({ url: indexUrl, token, signal: controller.signal });\n if (cancelled) return;\n if (__DEV__) {\n // Board geometry at a glance - \"why does this board render\n // this way\" starts with positions, not the picture.\n // eslint-disable-next-line no-console\n console.log(\n '[CanvasExperience] boards:',\n JSON.stringify(\n result.boards.map((b) => ({\n channelId: b.channelId,\n title: b.title,\n items: b.board.items.map((i) => ({\n type: i.type,\n x: i.x,\n y: i.y,\n w: i.width,\n h: i.height,\n z: i.zIndex,\n src: `${i.src.slice(0, 96)}…`,\n })),\n })),\n ),\n );\n }\n if (result.error) {\n // Keep the cached grid; only surface an error on a true first load.\n if (!hasCache) setError(result.error);\n setLoading(false);\n setBoardsSettled(true);\n return;\n }\n lastSavedByIdRef.current = Object.fromEntries(\n result.boards.map((entry) => [entry.channelId, boardSignature(entry.board)]),\n );\n setBoards(result.boards);\n writeCachedCanvasBoards(apolloClient, result.boards);\n setError(null);\n setLoading(false);\n setBoardsSettled(true);\n })();\n\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [indexUrl, token, skipFetch, generation, apolloClient]);\n\n useEffect(() => {\n if (skipFetch || loading || !indexUrl) return;\n persistCanvasBoardsSnapshot(indexUrl, boards);\n }, [boards, indexUrl, loading, skipFetch]);\n\n // Honour a deep-linked board only when it actually exists in the index.\n // Otherwise stay on the grid — that is screen one on web.\n useEffect(() => {\n if (selectedId || !channelId || boards.length === 0) return;\n const match = boards.find((entry) => entry.channelId === channelId);\n if (match) setSelectedId(match.channelId);\n }, [boards, channelId, selectedId]);\n\n const selected = useMemo(\n () => (selectedId ? boards.find((entry) => entry.channelId === selectedId) : undefined),\n [boards, selectedId],\n );\n\n // Presigned link upkeep (web pullBoard): renew an opened board's expiring\n // links so the auto-save below persists fresh URLs.\n useMediaSigning(token, indexUrl);\n useBoardMediaRefresh(selected?.channelId, selected?.board.items, effectiveRunAction, (boardId, renewals) =>\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== boardId) return entry;\n const items = applySrcRenewals(entry.board.items, renewals);\n return items === entry.board.items ? entry : { ...entry, board: { ...entry.board, items } };\n }),\n ),\n );\n\n /** Google Veo URIs only play through the agent proxy — same wrap web uses. */\n const playableBoard = useCallback(\n (board: PersistedCanvasState): PersistedCanvasState => {\n if (!indexUrl) return board;\n return {\n ...board,\n items: board.items.map((item) =>\n item.type === 'video' || item.type === 'audio'\n ? { ...item, src: proxiedMediaUrl(indexUrl, item.src) }\n : item,\n ),\n };\n },\n [indexUrl],\n );\n\n const handleDockStudio = useCallback((studio: DockStudio) => {\n if (studio === 'video') {\n setEditorSeed({ itemId: null });\n return;\n }\n if (studio === 'agent') {\n setEditorSeed({ itemId: null, initialRailTab: 'agent' });\n return;\n }\n if (studio === 'influencer') {\n setShowInfluencer(true);\n return;\n }\n if (studio === 'set3d') {\n setShowSet3d(true);\n return;\n }\n if (studio === 'frames') {\n setShowFrames(true);\n return;\n }\n if (studio === 'moodboard') {\n setShowMoodboard(true);\n return;\n }\n // Match web studios: docs → design page, carousel → multi-slide deck,\n // flyers → postcard kit. Never collapse carousel into generic design.\n const kind = studio === 'flyers' ? 'postcard' : studio === 'carousel' ? 'carousel' : 'design';\n setDesignEntry({ kind });\n }, []);\n const reload = useCallback(() => setGeneration((n) => n + 1), []);\n const handleBoardChange = useCallback(\n (board: PersistedCanvasState) => {\n setBoards((prev) =>\n prev.map((entry) =>\n entry.channelId === selectedId\n ? {\n ...entry,\n // A delete must leave a tombstone, or web's channel\n // drain puts the media straight back (web #530).\n board: withTombstones(entry.board, board),\n title: board.title || entry.title,\n itemCount: board.items.length,\n savedAt: board.savedAt,\n }\n : entry,\n ),\n );\n },\n [selectedId],\n );\n\n const handleAddPhotos = useCallback(\n async (source: MediaPickSource) => {\n if (!onPickLocalMedia || mediaBusy) return;\n try {\n const picked = await onPickLocalMedia((message) => {\n setMediaBusy(true);\n setUploadStatus(message);\n }, source);\n if (!picked.length) return;\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n // Web `mediaItemsFor`: fanned across free grid slots, each\n // tile in the picked media's own shape (not stacked at 100,100).\n const placed = mediaItemsFor(entry.board.items, picked.map(placementForPicked));\n const items = [\n ...entry.board.items,\n ...picked.map((item, i) => ({ ...item, ...placed[i], id: item.id || placed[i].id })),\n ];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] add photos failed:', err);\n }\n } finally {\n setMediaBusy(false);\n setUploadStatus(null);\n }\n },\n [onPickLocalMedia, selectedId, channelId, mediaBusy],\n );\n\n const handleNewCanvas = useCallback(() => {\n const entry = untitledBoard();\n lastSavedByIdRef.current[entry.channelId] = boardSignature(entry.board);\n setBoards((prev) => [entry, ...prev]);\n setSelectedId(entry.channelId);\n }, []);\n\n const handleAskAgentFromGrid = useCallback(() => {\n setGridAgentOpen(true);\n }, []);\n\n const closeBoard = useCallback(() => {\n setAgentOpen(false);\n setGridAgentOpen(false);\n setBoardSelectedItem(null);\n setSelectedId(null);\n // Web's grid hides empty rows. Drop a New canvas that never got media\n // so it does not sit next to real boards as \"0 items\".\n setBoards((prev) => prev.filter((entry) => entry.itemCount > 0));\n }, []);\n\n // Twin of canvas-surface's 600ms auto-save: item add/remove/src change ->\n // registerSurfaceChannel. Drags and zoom are not a reason to write.\n useEffect(() => {\n if (skipFetch || loading || !token || !indexUrl || !selected) return undefined;\n const state = buildBoardState(\n selected.board.items,\n selected.board.zoom,\n selected.title,\n selected.board.dismissed,\n );\n if (state.items.length === 0) return undefined;\n const sig = boardSignature(state);\n if (lastSavedByIdRef.current[selected.channelId] === sig) return undefined;\n const timer = setTimeout(() => {\n void pushCanvasBoard({\n url: indexUrl,\n token,\n channelId: selected.channelId,\n state,\n }).then((ok) => {\n if (ok) lastSavedByIdRef.current[selected.channelId] = sig;\n });\n }, SAVE_DEBOUNCE_MS);\n return () => clearTimeout(timer);\n }, [selected, token, indexUrl, loading, skipFetch]);\n\n /** null = canvas; otherwise the editor is open, optionally seeded. */\n const [editorSeed, setEditorSeed] = useState<{\n itemId: string | null;\n initialTimeline?: import('./videoEditor/editorModel').EditorTimeline;\n projectTitle?: string;\n logoSrc?: string | null;\n initialRailTab?: string | null;\n } | null>(null);\n /** Item being edited in the native image/audio editor. */\n const [mediaEdit, setMediaEdit] = useState<{\n kind: 'image' | 'audio';\n item: CanvasItem;\n initialTab?: 'aiedit';\n } | null>(null);\n /** Web-parity generator (dock Image/Video/Audio + toolbar Create Video). */\n const [generator, setGenerator] = useState<{\n mode: GeneratorMode;\n item?: CanvasItem | null;\n restyle?: boolean;\n initialPrompt?: string;\n } | null>(null);\n const [videoEdit, setVideoEdit] = useState<CanvasItem | null>(null);\n const [videoClips, setVideoClips] = useState<CanvasItem | 'url' | null>(null);\n const [showFrames, setShowFrames] = useState(false);\n const [showMoodboard, setShowMoodboard] = useState(false);\n const [showSet3d, setShowSet3d] = useState(false);\n const [showInfluencer, setShowInfluencer] = useState(false);\n const [showRecorder, setShowRecorder] = useState(false);\n /** Board selection for generate seed + edit tools. */\n const [boardSelectedItem, setBoardSelectedItem] = useState<CanvasItem | null>(null);\n /** Remote-side render in flight (stage label) or its failure. */\n const [exporting, setExporting] = useState<{ stage: string; error?: string } | null>(null);\n /** The durable export (canvasTasks kind 'export') the editor overlay is following. */\n const [exportTaskId, setExportTaskId] = useState<string | null>(null);\n const exportTask = useCanvasTask(exportTaskId);\n /** Design studio screen (opened from the grid); null = canvas screens. */\n const [designEntry, setDesignEntry] = useState<{ kind: DesignKind } | { channelId: string } | null>(null);\n const [designs, setDesigns] = useState<DesignDocSummary[]>([]);\n const [featuredLooks, setFeaturedLooks] = useState<StudioLook[]>([]);\n\n // The grid also lists the user's designs - fetched from the same index\n // under its `design` surface. Refreshes when the studio closes.\n useEffect(() => {\n if (skipFetch || !token || !indexUrl || designEntry) return undefined;\n const controller = new AbortController();\n void fetchMyDesigns({ url: indexUrl, token, signal: controller.signal }).then((result) => {\n setDesigns(result.designs);\n });\n return () => controller.abort();\n }, [token, indexUrl, skipFetch, designEntry, generation]);\n\n useEffect(() => {\n if (!token && !effectiveRunAction && !apolloClient) {\n setFeaturedLooks([]);\n return;\n }\n let cancelled = false;\n void listStudioLooks(effectiveRunAction, { limit: 12 }, { client: apolloClient, token, indexUrl })\n .then((page) => {\n if (!cancelled) setFeaturedLooks(page.looks);\n })\n .catch(() => {\n if (!cancelled) setFeaturedLooks([]);\n });\n return () => {\n cancelled = true;\n };\n }, [apolloClient, effectiveRunAction, indexUrl, token]);\n\n /** Place generated/uploaded media on the open board — same as web addGeneratedItem. */\n const addBoardItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const placement = placementFor(type, src, opts);\n const target = boardsRef.current.find((entry) => entry.channelId === selectedId) ?? boardsRef.current[0];\n // Best guess for the caller; the updater re-places against the live items.\n const item: CanvasItem = mediaItemsFor(target?.board.items ?? [], [placement])[0];\n setBoards((prev) => {\n const list = prev.length ? prev : [untitledBoard(channelId)];\n const targetId = selectedId ?? list[0].channelId;\n return list.map((entry) => {\n if (entry.channelId !== targetId) return entry;\n const [placed] = mediaItemsFor(entry.board.items, [{ ...placement, id: item.id }]);\n const items = [...entry.board.items, placed];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n });\n });\n return item;\n },\n [selectedId, channelId, indexUrl],\n );\n\n /** Gallery AI Chat: first generate opens a new board; closing with no media stays on the grid. */\n const openFreshBoardWithItem = useCallback(\n (type: CanvasItem['type'], url: string, opts?: PlaceOpts): CanvasItem => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n const item: CanvasItem = mediaItemsFor([], [placementFor(type, src, opts)])[0];\n const entry = untitledBoard();\n const items = [item];\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n const next: CanvasBoardSummary = {\n ...entry,\n title: nextState.title || entry.title,\n itemCount: items.length,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n lastSavedByIdRef.current[entry.channelId] = boardSignature(next.board);\n setBoards((prev) => [next, ...prev]);\n setSelectedId(entry.channelId);\n setGridAgentOpen(false);\n return item;\n },\n [indexUrl],\n );\n\n const addRenderedVideo = useCallback(\n (url: string, opts?: { name?: string; aspect?: string }) => addBoardItem('video', url, opts),\n [addBoardItem],\n );\n\n const patchItemSrc = useCallback(\n (itemId: string, url: string, type?: CanvasItem['type']) => {\n const src = indexUrl ? proxiedMediaUrl(indexUrl, url) : url;\n setBoards((prev) =>\n prev.map((entry) => {\n if (entry.channelId !== selectedId) return entry;\n const items = entry.board.items.map((item) =>\n // New media: the old short link would point at the old object.\n item.id === itemId ? { ...item, src, share: undefined, ...(type ? { type } : {}) } : item,\n );\n const nextState = buildBoardState(items, entry.board.zoom, entry.title);\n return {\n ...entry,\n board: { ...entry.board, items, savedAt: Date.now(), title: nextState.title },\n };\n }),\n );\n },\n [selectedId, indexUrl],\n );\n\n // Same fallback rule as the connector seams: a host renderer wins, and\n // without one the remote drives the connector chain itself, so the\n // editor's checkmark produces a real video on old binaries too.\n const exportBusyRef = useRef(false);\n const effectiveOnExport = useMemo(() => {\n // The REMOTE renderer is preferred when it can run at all: it ships\n // with surface deploys, so every binary - old or new - exports with\n // the newest chain (soundtrack, future transitions) without an app\n // release. The host seam is only the last resort without a runner.\n if (!effectiveRunAction) return onExportVideo;\n const runAction = effectiveRunAction;\n const upload = effectiveUploadMedia;\n return (spec: VideoExportSpec) => {\n if (exportBusyRef.current) return;\n exportBusyRef.current = true;\n // Durable lane: compiled timeline (transitions, segments, scene\n // layers) rendered detached on the connector, followed as a task\n // that survives the editor closing and an app relaunch. It falls\n // back to the client chain itself when SUBMIT is unavailable.\n void startExportTask(runAction, {\n spec,\n boardId: selectedId ?? '',\n brief: editorSeed?.projectTitle || selected?.board.title || selected?.title || 'Video export',\n upload,\n })\n .then((id) => setExportTaskId(id))\n .catch(() => {\n setExporting({ stage: 'Starting render' });\n return renderExportSpec(spec, runAction, upload, (p) => setExporting(p)).then((url) => {\n addRenderedVideo(url);\n setEditorSeed(null);\n setExporting(null);\n });\n })\n .catch((err: unknown) => {\n setExporting({ stage: '', error: friendlyMediaError(err, 'video export') });\n })\n .finally(() => {\n exportBusyRef.current = false;\n });\n };\n }, [onExportVideo, effectiveRunAction, effectiveUploadMedia, addRenderedVideo, selectedId, editorSeed, selected]);\n\n // A finished durable export lands on the canvas like the old inline one.\n useEffect(() => {\n if (!exportTask || exportTask.state !== 'succeeded' || exportTask.delivered || !exportTask.result?.url) return;\n markTaskDelivered(exportTask.id);\n addRenderedVideo(exportTask.result.url);\n setEditorSeed(null);\n setExportTaskId(null);\n }, [exportTask, addRenderedVideo]);\n\n const handleItemAction = useCallback(\n (action: CanvasItemAction, item: CanvasItem) => {\n // Match web canvas toolbar:\n // Create Video → generator (yantra-video-generation), image/video as reference\n // Promo → marketing produce submit/poll\n // Edit Video → yantra-video-editing ops (trim/speed/mute/…)\n // Clips → yantra-video-clip\n if (action === 'create-video') {\n setGenerator({ mode: 'video', item });\n return;\n }\n if (action === 'restyle-video') {\n setGenerator({ mode: 'video', item, restyle: true });\n return;\n }\n if (action === 'promo-video') {\n setGenerator({ mode: 'promo', item });\n return;\n }\n if (action === 'edit-video') {\n setVideoEdit(item);\n return;\n }\n if (action === 'trim-video') {\n setVideoClips(item);\n return;\n }\n if ((action === 'edit-image' || action === 'mark-edit') && effectiveRunAction) {\n setMediaEdit({\n kind: 'image',\n item,\n ...(action === 'mark-edit' ? { initialTab: 'aiedit' as const } : {}),\n });\n return;\n }\n if (action === 'edit-audio' && effectiveRunAction) {\n setMediaEdit({ kind: 'audio', item });\n return;\n }\n onItemAction?.(action, item);\n },\n [onItemAction, effectiveRunAction],\n );\n\n const handleUseTemplate = useCallback(async (template: CanvasPromptTemplate) => {\n try {\n const imported = await loadTemplateTimeline(template);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n } catch {\n // Agent / editor surfaces their own notices when Use fails in-editor.\n }\n }, []);\n\n /** Home's Photo / Audio editor: pick the file first, then edit it on a fresh board (web opens its upload screen). */\n const pickThenEdit = useCallback(\n async (kind: 'image' | 'audio') => {\n if (!onPickLocalMedia) return;\n try {\n const picked = await onPickLocalMedia(undefined, kind === 'image' ? 'library' : 'file');\n const first = picked.find((p) => p.type === kind);\n if (!first) return;\n const item = openFreshBoardWithItem(kind, first.src, {\n name: first.generatedAssetName,\n ...(first.width > 0 && first.height > 0\n ? { size: { width: first.width, height: first.height } }\n : {}),\n });\n setMediaEdit({ kind, item });\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[CanvasExperience] pick for editor failed:', err);\n }\n }\n },\n [onPickLocalMedia, openFreshBoardWithItem],\n );\n\n /** Tiles home can run here: the photo/audio editors need a picker and a connector runner. */\n const canRunCreate = useCallback(\n (action: CreateAction) =>\n action.type !== 'studio' ||\n (action.studio !== 'image' && action.studio !== 'audio') ||\n Boolean(onPickLocalMedia && effectiveRunAction),\n [onPickLocalMedia, effectiveRunAction],\n );\n const createGroups = useMemo(() => visibleCreateGroups(canRunCreate), [canRunCreate]);\n\n /**\n * Screen one's Create tile (web `actFromHome`): a design kind opens the\n * design studio; a generator or studio opens on a fresh board, so what it\n * makes lands there and closing it leaves a canvas, not someone's old board.\n */\n const handleCreate = useCallback(\n (action: CreateAction) => {\n if (action.type === 'design') {\n setDesignEntry({ kind: action.kind });\n return;\n }\n if (action.type === 'generate') {\n // Native slides are the design studio's deck (dock `onSlides`).\n if (action.mode === 'slides') {\n setDesignEntry({ kind: 'design' });\n return;\n }\n handleNewCanvas();\n if (action.mode === 'clips') setVideoClips('url');\n else setGenerator({ mode: action.mode });\n return;\n }\n if (action.studio === 'image' || action.studio === 'audio') {\n void pickThenEdit(action.studio);\n return;\n }\n handleNewCanvas();\n switch (action.studio) {\n case 'record':\n setShowRecorder(true);\n return;\n case 'ai-cut':\n handleDockStudio('agent');\n return;\n case 'set':\n handleDockStudio('set3d');\n return;\n default:\n handleDockStudio(action.studio);\n }\n },\n [handleNewCanvas, handleDockStudio, pickThenEdit],\n );\n\n /** A media link (web `?media=`): a new board holding it, its editor open. */\n const openMediaLink = useCallback(\n async (link: MediaLink) => {\n const size =\n link.kind === 'image'\n ? await new Promise<{ width: number; height: number } | undefined>((resolve) => {\n // Whichever comes first, the size or the deadline, decides the tile.\n const timer = setTimeout(() => resolve(undefined), MEDIA_LINK_MEASURE_MS);\n RNImage.getSize(\n link.src,\n (width, height) => {\n clearTimeout(timer);\n resolve(width > 0 && height > 0 ? { width, height } : undefined);\n },\n () => {\n clearTimeout(timer);\n resolve(undefined);\n },\n );\n })\n : undefined;\n const item = openFreshBoardWithItem(link.kind, link.src, {\n name:\n link.name ?? link.fileName?.replace(/\\.[^.]+$/, '') ?? (link.kind === 'image' ? 'Image' : 'Video'),\n ...(size ? { size } : {}),\n });\n if (link.kind === 'video') setEditorSeed({ itemId: item.id });\n else if (effectiveRunAction) setMediaEdit({ kind: 'image', item });\n },\n [openFreshBoardWithItem, effectiveRunAction],\n );\n\n // Deep links run once. A design opens straight away; media and Create\n // tiles wait for the first index read, whose wholesale `setBoards` would\n // otherwise drop the board they make.\n const designLinkRanRef = useRef(false);\n useEffect(() => {\n if (designLinkRanRef.current || skipFetch) return;\n designLinkRanRef.current = true;\n const entry = parseDesignLink({ designId, designTemplateId, artifactId });\n if (entry) setDesignEntry(entry);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const boardLinkRanRef = useRef(false);\n useEffect(() => {\n if (boardLinkRanRef.current || skipFetch || !boardsSettled) return;\n boardLinkRanRef.current = true;\n if (parseDesignLink({ designId, designTemplateId, artifactId })) return;\n const mediaLink = parseMediaLink(media);\n if (mediaLink) {\n void openMediaLink(mediaLink);\n return;\n }\n const action = parseCreateTileLink(createTile);\n if (action) handleCreate(action);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boardsSettled, skipFetch]);\n\n if (generator) {\n return (\n <VideoGeneratorExperience\n mode={generator.mode}\n item={generator.item}\n restyle={generator.restyle}\n initialPrompt={generator.initialPrompt}\n runAction={effectiveRunAction}\n onClose={() => setGenerator(null)}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n setGenerator(null);\n }}\n onPromoDesigned={(designed) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setGenerator(null);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n />\n );\n }\n\n if (showFrames) {\n return (\n <FrameExtractorExperience\n boardItems={selected?.board.items ?? []}\n seedVideo={boardSelectedItem?.type === 'video' ? boardSelectedItem : null}\n runAction={effectiveRunAction}\n onClose={() => setShowFrames(false)}\n onPlace={(urls) => {\n urls.forEach((url, i) => addBoardItem('image', url, { name: `Frame ${i + 1}` }));\n setShowFrames(false);\n }}\n />\n );\n }\n\n if (showMoodboard) {\n return (\n <MoodboardExperience\n boardItems={selected?.board.items ?? []}\n onClose={() => setShowMoodboard(false)}\n onUseBrief={(brief) => {\n setShowMoodboard(false);\n setGenerator({ mode: 'image', initialPrompt: brief });\n }}\n />\n );\n }\n\n if (showSet3d) {\n return (\n <SetStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n token={token}\n indexUrl={indexUrl}\n onClose={() => setShowSet3d(false)}\n onPlace={(kind, url, name) => {\n addBoardItem(kind, url, { name });\n }}\n />\n );\n }\n\n if (showRecorder) {\n return (\n <CameraRecorderExperience\n onClose={() => setShowRecorder(false)}\n onPick={async (source) => {\n if (!onPickLocalMedia) return [];\n return onPickLocalMedia(undefined, source);\n }}\n onPlaced={(items) => {\n for (const item of items) {\n addBoardItem(item.type === 'video' ? 'video' : 'image', item.src, {\n name: item.generatedAssetName,\n });\n }\n }}\n />\n );\n }\n\n if (showInfluencer) {\n return (\n <InfluencerStudioExperience\n boardItems={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setShowInfluencer(false)}\n onPlace={(url, name) => {\n addBoardItem('video', url, { name, aspect: '9:16' });\n setShowInfluencer(false);\n }}\n />\n );\n }\n\n if (videoEdit) {\n return (\n <VideoEditExperience\n src={videoEdit.src}\n name={videoEdit.generatedAssetName}\n items={selected?.board.items ?? []}\n runAction={effectiveRunAction}\n onClose={() => setVideoEdit(null)}\n onApplied={(url, kind) => {\n if (kind === 'audio') {\n addBoardItem('audio', url, { name: 'Extracted audio' });\n } else {\n patchItemSrc(videoEdit.id, url, kind === 'image' ? 'image' : 'video');\n }\n setVideoEdit(null);\n }}\n />\n );\n }\n\n if (videoClips) {\n return (\n <VideoClipsExperience\n item={videoClips === 'url' ? null : videoClips}\n runAction={effectiveRunAction}\n onClose={() => setVideoClips(null)}\n onClips={(urls, aspect) => {\n urls.forEach((url, i) => addRenderedVideo(url, { name: `Clip ${i + 1}`, aspect }));\n setVideoClips(null);\n }}\n />\n );\n }\n\n if (explicitBoard) {\n return (\n <NativeCanvasViewer\n board={playableBoard(explicitBoard)}\n controls\n onItemAction={handleItemAction}\n testID={testID}\n />\n );\n }\n\n if (sessionError) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t open your canvases\"\n detail={sessionError}\n onRetry={onRetrySession}\n />\n );\n }\n\n if (error && boards.length === 0) {\n return (\n <Notice\n isDark={isDark}\n title=\"Couldn’t load your canvases\"\n detail={error}\n fine={describeSession(token, indexUrl)}\n onRetry={reload}\n />\n );\n }\n\n // Grid is screen one (web CanvasBoards). Opening a board is screen two.\n\n if (mediaEdit) {\n const shared = {\n src: mediaEdit.item.src,\n name: mediaEdit.item.generatedAssetName,\n runAction: effectiveRunAction,\n onClose: () => setMediaEdit(null),\n onSave: (url: string) => {\n patchItemSrc(mediaEdit.item.id, url, mediaEdit.kind);\n setMediaEdit(null);\n },\n };\n return mediaEdit.kind === 'image' ? (\n <ImageEditorExperience {...shared} initialTab={mediaEdit.initialTab} />\n ) : (\n <AudioEditorExperience {...shared} />\n );\n }\n\n if (editorSeed) {\n return (\n <View style={styles.fill}>\n <VideoEditorExperience\n items={selected?.board.items ?? []}\n seedItemId={editorSeed.itemId}\n initialTimeline={editorSeed.initialTimeline}\n projectTitle={editorSeed.projectTitle || selected?.board.title || selected?.title}\n initialLogoSrc={editorSeed.logoSrc}\n onClose={() => setEditorSeed(null)}\n onExport={effectiveOnExport}\n onPickLocalMedia={onPickLocalMedia}\n runAction={effectiveRunAction}\n uploadMedia={effectiveUploadMedia}\n audioRecorder={audioRecorder}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n initialRailTab={editorSeed.initialRailTab}\n />\n {exportTask ? (\n <View style={styles.exportOverlay}>\n <ExportTaskCard\n task={exportTask}\n onDismiss={() => {\n dismissCanvasTask(exportTask.id);\n setExportTaskId(null);\n }}\n onBackground={() => setExportTaskId(null)}\n />\n </View>\n ) : exporting ? (\n <View style={styles.exportOverlay}>\n <View style={styles.exportCard}>\n {exporting.error ? (\n <>\n <Text style={styles.exportError}>Export failed</Text>\n <Text style={styles.exportStage} numberOfLines={4}>\n {exporting.error}\n </Text>\n <Pressable\n onPress={() => setExporting(null)}\n style={({ 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 (designEntry) {\n return (\n <View style={styles.fill} testID={testID}>\n <DesignExperience\n token={token}\n indexUrl={indexUrl}\n entry={designEntry}\n onClose={() => setDesignEntry(null)}\n onPickLocalMedia={onPickLocalMedia}\n uploadMedia={effectiveUploadMedia}\n runMediaAction={effectiveRunAction}\n />\n </View>\n );\n }\n\n if (!selected) {\n return (\n <View style={styles.fill} testID={testID}>\n {loading && boards.length === 0 ? (\n <View style={styles.gridLoading} pointerEvents=\"none\">\n <ActivityIndicator size=\"small\" />\n </View>\n ) : null}\n <CanvasBoardsGrid\n boards={boards.filter((entry) => entry.itemCount > 0)}\n onOpen={setSelectedId}\n onNewCanvas={handleNewCanvas}\n designs={designs}\n onOpenDesign={(designChannelId) => setDesignEntry({ channelId: designChannelId })}\n onAskAgent={handleAskAgentFromGrid}\n createGroups={createGroups}\n onCreate={handleCreate}\n runAction={effectiveRunAction}\n featuredLooks={featuredLooks}\n onRecreateLook={(look) => {\n setGenerator({\n mode: 'video',\n initialPrompt: look.prompt,\n });\n }}\n />\n <CanvasAgentChatPane\n visible={gridAgentOpen}\n onClose={() => setGridAgentOpen(false)}\n runAction={effectiveRunAction}\n boardItems={[]}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return openFreshBoardWithItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n />\n </View>\n );\n }\n\n return (\n <View style={styles.fill} testID={testID}>\n <CanvasToolDock\n busy={mediaBusy}\n boards={boards}\n boardId={selectedId}\n runAction={effectiveRunAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n seedItem={boardSelectedItem}\n dockHidden={agentOpen}\n onUpload={(source) => void handleAddPhotos(source)}\n onPickDeviceStill={\n onPickLocalMedia\n ? async () => {\n // A generator reference slot: the connector fetches it, so it must be hosted.\n const picked = await onPickLocalMedia(undefined, 'library');\n const first = picked.find((p) => p.type === 'image');\n if (!first) return null;\n return /^https?:/i.test(first.src) || !effectiveUploadMedia\n ? first.src\n : effectiveUploadMedia(first.src);\n }\n : undefined\n }\n onPlace={(item) =>\n addBoardItem(item.type, item.src, {\n name: item.generatedAssetName,\n })\n }\n onPickStorage={(kind, url, name) => addBoardItem(kind, url, { name })}\n onStudio={handleDockStudio}\n onSlides={() => setDesignEntry({ kind: 'design' })}\n onGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : meta.mode === 'promo' ? 'Promo' : meta.mode === 'clips' ? 'Clip' : 'Video'} · ${meta.prompt.slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onPromoDesigned={(designed: DesignedPromo) => {\n const imported = promoProjectToTimeline(designed.project, designed.title);\n setEditorSeed({\n itemId: null,\n initialTimeline: imported.timeline,\n projectTitle: imported.title,\n logoSrc: imported.logoSrc,\n });\n }}\n onEditReplaced={(itemId, url) => patchItemSrc(itemId, url)}\n onEditVideo={(item) => setVideoEdit(item)}\n onRecord={() => setShowRecorder(true)}\n >\n <NativeCanvasViewer\n board={playableBoard(selected.board)}\n controls\n onBoardsPress={closeBoard}\n onItemAction={handleItemAction}\n onBoardChange={handleBoardChange}\n onAgentOpenChange={setAgentOpen}\n onSelectionChange={setBoardSelectedItem}\n runAction={effectiveRunAction}\n onAgentGenerated={(url, meta) => {\n const kind = meta.mode === 'audio' ? 'audio' : meta.mode === 'image' ? 'image' : 'video';\n return addBoardItem(kind, url, {\n name: `${kind === 'image' ? 'Image' : kind === 'audio' ? 'Audio' : 'Video'} · ${(meta.title || meta.prompt).slice(0, 28)}`,\n aspect: meta.aspect,\n });\n }}\n onAgentReplace={(itemId, url) => patchItemSrc(itemId, url)}\n onUseTemplate={(template) => void handleUseTemplate(template)}\n shareLinks={token && indexUrl ? { token, indexUrl } : undefined}\n />\n </CanvasToolDock>\n {uploadStatus ? (\n <View pointerEvents=\"none\" style={styles.uploadToast}>\n {mediaBusy ? <ActivityIndicator size=\"small\" color={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"],"mappings":"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"}
|