@adminide-stack/yantra-mobile 12.0.121 → 12.0.123-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/apps/appArt.js +1 -1
- package/lib/features/apps/appArt.js.map +1 -1
- package/lib/features/apps/mobileAppCatalog.js +15 -11
- package/lib/features/apps/mobileAppCatalog.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +82 -20
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +291 -100
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +105 -12
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +266 -68
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +204 -66
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +31 -13
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +176 -0
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -0
- package/lib/features/canvas/CanvasTasksPanel.js +325 -29
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +5 -4
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +137 -61
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +33 -2
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +197 -0
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -0
- package/lib/features/canvas/NativeCanvasViewer.js +89 -11
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +55 -2
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +323 -13
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +1 -53
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +697 -506
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +22 -5
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasAgentChat.js +125 -11
- package/lib/features/canvas/canvasAgentChat.js.map +1 -1
- package/lib/features/canvas/canvasCore.js +117 -12
- package/lib/features/canvas/canvasCore.js.map +1 -1
- package/lib/features/canvas/canvasEditOps.js +148 -111
- package/lib/features/canvas/canvasEditOps.js.map +1 -1
- package/lib/features/canvas/canvasTaskSync.js +235 -0
- package/lib/features/canvas/canvasTaskSync.js.map +1 -0
- package/lib/features/canvas/canvasTasks.js +98 -11
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/createTiles.js +247 -0
- package/lib/features/canvas/createTiles.js.map +1 -0
- package/lib/features/canvas/deepLinks.js +83 -0
- package/lib/features/canvas/deepLinks.js.map +1 -0
- package/lib/features/canvas/frameExtract.js +13 -1
- package/lib/features/canvas/frameExtract.js.map +1 -1
- package/lib/features/canvas/generationModels.js +36 -8
- package/lib/features/canvas/generationModels.js.map +1 -1
- package/lib/features/canvas/generatorCommands.js +106 -0
- package/lib/features/canvas/generatorCommands.js.map +1 -0
- package/lib/features/canvas/generatorReferences.js +82 -0
- package/lib/features/canvas/generatorReferences.js.map +1 -0
- package/lib/features/canvas/homeWork.js +74 -0
- package/lib/features/canvas/homeWork.js.map +1 -0
- package/lib/features/canvas/linksRpc.js +130 -0
- package/lib/features/canvas/linksRpc.js.map +1 -0
- package/lib/features/canvas/mediaRecheck.js +176 -0
- package/lib/features/canvas/mediaRecheck.js.map +1 -0
- package/lib/features/canvas/mediaUrls.js +258 -0
- package/lib/features/canvas/mediaUrls.js.map +1 -0
- package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
- package/lib/features/canvas/promoProjectImport.js +80 -13
- package/lib/features/canvas/promoProjectImport.js.map +1 -1
- package/lib/features/canvas/promoVideo.js +106 -15
- package/lib/features/canvas/promoVideo.js.map +1 -1
- package/lib/features/canvas/reframe.js +228 -0
- package/lib/features/canvas/reframe.js.map +1 -0
- package/lib/features/canvas/serverTasks.js +697 -0
- package/lib/features/canvas/serverTasks.js.map +1 -0
- package/lib/features/canvas/set/SetViewportWebView.js +207 -28
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/set/agent/prompt.js +66 -0
- package/lib/features/canvas/set/agent/prompt.js.map +1 -0
- package/lib/features/canvas/set/agent/setOps.js +203 -0
- package/lib/features/canvas/set/agent/setOps.js.map +1 -0
- package/lib/features/canvas/set/agent/setTurn.js +128 -0
- package/lib/features/canvas/set/agent/setTurn.js.map +1 -0
- package/lib/features/canvas/set/agent/snapshot.js +43 -0
- package/lib/features/canvas/set/agent/snapshot.js.map +1 -0
- package/lib/features/canvas/set/agent/tools.js +580 -0
- package/lib/features/canvas/set/agent/tools.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +43 -4
- package/lib/features/canvas/set/setProject.js.map +1 -1
- package/lib/features/canvas/set/supplyLibrary.js +397 -0
- package/lib/features/canvas/set/supplyLibrary.js.map +1 -0
- package/lib/features/canvas/storageLibrary.js +113 -52
- package/lib/features/canvas/storageLibrary.js.map +1 -1
- package/lib/features/canvas/studioCatalog.js +15 -2
- package/lib/features/canvas/studioCatalog.js.map +1 -1
- package/lib/features/canvas/studioLooks.js +1 -8
- package/lib/features/canvas/studioLooks.js.map +1 -1
- package/lib/features/canvas/useBoardMediaRefresh.js +66 -0
- package/lib/features/canvas/useBoardMediaRefresh.js.map +1 -0
- package/lib/features/canvas/useMediaSource.js +84 -0
- package/lib/features/canvas/useMediaSource.js.map +1 -0
- package/lib/features/canvas/video3d.js +11 -10
- package/lib/features/canvas/video3d.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +46 -0
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -0
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +134 -0
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +45 -7
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +4 -2
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/attachments.js +304 -0
- package/lib/features/canvas/videoEditor/agent/attachments.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js +3 -2
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/cutTools.js +207 -7
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
- package/lib/features/canvas/videoEditor/blurBox.js +34 -0
- package/lib/features/canvas/videoEditor/blurBox.js.map +1 -0
- package/lib/features/canvas/videoEditor/compileTimeline.js +668 -0
- package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -0
- package/lib/features/canvas/videoEditor/editorModel.js +56 -22
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportPipeline.js +77 -0
- package/lib/features/canvas/videoEditor/exportPipeline.js.map +1 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js +19 -12
- package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +216 -0
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -0
- package/lib/features/canvas/videoEditor/formWidgets.js +142 -0
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -0
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +195 -0
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -0
- package/lib/features/canvas/videoEditor/produce/produceScenes.js +158 -0
- package/lib/features/canvas/videoEditor/produce/produceScenes.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +17 -5
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/renderTimeline.js +207 -0
- package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -0
- package/lib/features/canvas/videoEditor/renewLinks.js +64 -0
- package/lib/features/canvas/videoEditor/renewLinks.js.map +1 -0
- package/lib/features/canvas/videoEditor/sceneLayers.js +101 -0
- package/lib/features/canvas/videoEditor/sceneLayers.js.map +1 -0
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +283 -0
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -0
- package/lib/features/canvas/videoEditor/tools/catalog.js +576 -0
- package/lib/features/canvas/videoEditor/tools/catalog.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js +27 -3
- package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +29 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +8 -4
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/codezenHandoff.js +108 -0
- package/lib/features/webbuilder/codezenHandoff.js.map +1 -0
- package/lib/features/webbuilder/workflow.js.map +1 -1
- package/lib/hooks/useChatApi.js +1 -2
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/screens/CanvasBoard/index.js +12 -1
- package/lib/screens/CanvasBoard/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/HomeSuggestions.js +3 -3
- package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
- package/lib/screens/WebBuilder/index.js +4 -2
- package/lib/screens/WebBuilder/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/index.js +29 -2
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +30 -6
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/package.json +4 -4
- /package/lib/assets/apps/{paper2poster.webp → poster.webp} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetStudioExperience.js","sources":["../../../src/features/canvas/SetStudioExperience.tsx"],"sourcesContent":["/**\n * Native Set studio with Three.js WebView viewport, world/object/render, and camera moves.\n */\nimport React, { useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n FlatList,\n Image,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport type { CanvasItem } from './canvasCore';\nimport { friendlyMediaError, resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { generateObject3D, generateWorld3D, renderSetStill } from './video3d';\nimport { MOVES, cameraPath, frameCount, type MoveKind } from './set/cameraPath';\nimport { newSet, type SetCamera } from './set/setProject';\nimport { SetViewportWebView } from './set/SetViewportWebView';\n\ntype Tab = 'view' | 'world' | 'object' | 'render' | 'move';\n\nexport function SetStudioExperience({\n boardItems,\n runAction,\n uploadMedia,\n onClose,\n onPlace,\n}: {\n boardItems: CanvasItem[];\n runAction?: RunMediaAction;\n uploadMedia?: (localUri: string) => Promise<string>;\n onClose: () => void;\n onPlace: (kind: 'image' | 'video', url: string, name: string) => void;\n}) {\n const insets = useSafeAreaInsets();\n const stills = useMemo(\n () =>\n boardItems\n .filter((item) => item.type === 'image')\n .map((item) => ({\n id: item.id,\n src: unwrapProxyUrl(item.src),\n label: item.generatedAssetName || 'Still',\n })),\n [boardItems],\n );\n const [project] = useState(() => newSet());\n const [tab, setTab] = useState<Tab>('view');\n const [worldUrl, setWorldUrl] = useState<string | undefined>();\n const [propUrl, setPropUrl] = useState<string | undefined>(stills[0]?.src);\n const [worldPrompt, setWorldPrompt] = useState('Soft daylight studio, neutral backdrop');\n const [objectPrompt, setObjectPrompt] = useState('');\n const [look, setLook] = useState('Photoreal product hero, soft rim light');\n const [move, setMove] = useState<MoveKind>('orbit-left');\n const [duration, setDuration] = useState(3);\n const [busy, setBusy] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [lastPreview, setLastPreview] = useState<string | null>(null);\n const frameWaiters = useRef<Array<(dataUrl: string) => void>>([]);\n const viewportApi = useRef<{ capture: () => void; setCamera: (c: SetCamera) => void } | null>(null);\n\n const onFrame = (dataUrl: string) => {\n const waiter = frameWaiters.current.shift();\n waiter?.(dataUrl);\n };\n\n const captureOnce = (): Promise<string> =>\n new Promise((resolve, reject) => {\n const timer = setTimeout(() => reject(new Error('Viewport capture timed out')), 8000);\n frameWaiters.current.push((dataUrl) => {\n clearTimeout(timer);\n resolve(dataUrl);\n });\n viewportApi.current?.capture();\n });\n\n const dataUrlToUpload = async (dataUrl: string): Promise<string> => {\n if (!uploadMedia) throw new Error('Upload seam needed to save viewport frames');\n // Host uploaders typically accept file://; write via fetch blob path unsupported —\n // pass data URL when host supports it, else fail clearly.\n if (dataUrl.startsWith('data:')) {\n // Many hosts accept data URLs through their upload helpers; try as-is.\n return uploadMedia(dataUrl);\n }\n return uploadMedia(dataUrl);\n };\n\n const runWorld = async () => {\n if (!runAction) return setError('3D needs a live connector.');\n setBusy('Generating world…');\n setError(null);\n try {\n const world = await generateWorld3D(runAction, { prompt: worldPrompt.trim() });\n setWorldUrl(world.imageUrl);\n setLastPreview(world.imageUrl);\n onPlace('image', world.imageUrl, `World · ${worldPrompt.slice(0, 24)}`);\n setTab('view');\n } catch (err: unknown) {\n setError(friendlyMediaError(err, '3D world'));\n } finally {\n setBusy(null);\n }\n };\n\n const runObject = async () => {\n if (!runAction) return setError('3D needs a live connector.');\n setBusy('Submitting mesh…');\n setError(null);\n try {\n const mesh = await generateObject3D(runAction, {\n imageUrl: propUrl,\n prompt: objectPrompt.trim() || undefined,\n onProgress: setBusy,\n });\n const preview = mesh.previewUrl || mesh.modelUrl;\n setPropUrl(preview);\n setLastPreview(preview);\n onPlace('image', preview, `Object · ${(objectPrompt || 'mesh').slice(0, 24)}`);\n setTab('view');\n } catch (err: unknown) {\n setError(friendlyMediaError(err, '3D object'));\n } finally {\n setBusy(null);\n }\n };\n\n const runRender = async () => {\n if (!runAction) return setError('Render needs a live connector.');\n setBusy('Capturing viewport…');\n setError(null);\n try {\n const frame = await captureOnce();\n let refUrl = lastPreview || propUrl || worldUrl;\n try {\n refUrl = await dataUrlToUpload(frame);\n } catch {\n /* keep prior ref */\n }\n setBusy('Rendering photographic still…');\n const url = await renderSetStill(runAction, {\n look,\n referenceUrls: [refUrl, propUrl, worldUrl].filter(Boolean) as string[],\n aspect: project.aspect,\n });\n setLastPreview(url);\n onPlace('image', url, `Set render · ${look.slice(0, 24)}`);\n } catch (err: unknown) {\n setError(friendlyMediaError(err, 'set render'));\n } finally {\n setBusy(null);\n }\n };\n\n const runMove = async () => {\n if (!runAction) return setError('Moves need a live connector.');\n setBusy('Rendering camera path…');\n setError(null);\n try {\n const frames = frameCount(duration, 12);\n const path = cameraPath(project.camera, { move, frames });\n const uploaded: string[] = [];\n for (let i = 0; i < path.length; i += 1) {\n setBusy(`Frame ${i + 1}/${path.length}…`);\n viewportApi.current?.setCamera(path[i]);\n await new Promise((r) => setTimeout(r, 120));\n const dataUrl = await captureOnce();\n uploaded.push(await dataUrlToUpload(dataUrl));\n }\n setBusy('Composing clip…');\n const slideshow = await runAction('yantra-video-editing', 'YANTRA_VIDEO_EDIT_SLIDESHOW', {\n input_urls: uploaded,\n duration_per_image: duration / Math.max(1, uploaded.length),\n fps: 12,\n });\n const url = resultUrl(slideshow, 'YANTRA_VIDEO_EDIT_SLIDESHOW');\n onPlace('video', url, `Move · ${move}`);\n setLastPreview(url);\n } catch (err: unknown) {\n setError(friendlyMediaError(err, 'camera move'));\n } finally {\n setBusy(null);\n }\n };\n\n return (\n <View style={[styles.root, { paddingTop: insets.top + 8, paddingBottom: insets.bottom + 8 }]}>\n <View style={styles.head}>\n <Pressable onPress={onClose} hitSlop={10}>\n <MaterialCommunityIcons name=\"close\" size={22} color=\"#e2e8f0\" />\n </Pressable>\n <Text style={styles.title}>3D set</Text>\n <View style={{ width: 22 }} />\n </View>\n\n <View style={styles.viewport}>\n <SetViewportWebView\n worldUrl={worldUrl}\n propUrl={propUrl}\n camera={project.camera}\n onFrame={onFrame}\n webRef={viewportApi}\n />\n </View>\n\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.tabs}>\n {(\n [\n ['view', 'View'],\n ['world', 'World'],\n ['object', 'Object'],\n ['render', 'Render'],\n ['move', 'Move'],\n ] as const\n ).map(([id, label]) => (\n <Pressable key={id} onPress={() => setTab(id)} style={[styles.tab, tab === id && styles.tabOn]}>\n <Text style={[styles.tabLabel, tab === id && styles.tabLabelOn]}>{label}</Text>\n </Pressable>\n ))}\n </ScrollView>\n\n <ScrollView style={styles.body} keyboardShouldPersistTaps=\"handled\">\n {tab === 'view' ? (\n <Text style={styles.hint}>Drag to orbit. Use World / Object / Render / Move for the shot.</Text>\n ) : null}\n {tab === 'world' ? (\n <>\n <TextInput\n value={worldPrompt}\n onChangeText={setWorldPrompt}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n />\n <Pressable onPress={() => void runWorld()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Generate world</Text>\n </Pressable>\n </>\n ) : null}\n {tab === 'object' ? (\n <>\n <FlatList\n horizontal\n data={stills}\n keyExtractor={(item) => item.id}\n renderItem={({ item }) => (\n <Pressable\n onPress={() => setPropUrl(item.src)}\n style={[styles.thumbWrap, propUrl === item.src && styles.thumbOn]}\n >\n <Image source={{ uri: item.src }} style={styles.thumb} />\n </Pressable>\n )}\n />\n <TextInput\n value={objectPrompt}\n onChangeText={setObjectPrompt}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n placeholder=\"Optional mesh prompt\"\n />\n <Pressable onPress={() => void runObject()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Generate object</Text>\n </Pressable>\n </>\n ) : null}\n {tab === 'render' ? (\n <>\n <TextInput\n value={look}\n onChangeText={setLook}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n />\n <Pressable onPress={() => void runRender()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Render still</Text>\n </Pressable>\n </>\n ) : null}\n {tab === 'move' ? (\n <>\n <View style={styles.moveRow}>\n {MOVES.map((m) => (\n <Pressable\n key={m.kind}\n onPress={() => setMove(m.kind)}\n style={[styles.chip, move === m.kind && styles.chipOn]}\n >\n <Text style={[styles.chipLabel, move === m.kind && styles.chipLabelOn]}>\n {m.label}\n </Text>\n </Pressable>\n ))}\n </View>\n <View style={styles.moveRow}>\n {[2, 3, 4, 6].map((sec) => (\n <Pressable\n key={sec}\n onPress={() => setDuration(sec)}\n style={[styles.chip, duration === sec && styles.chipOn]}\n >\n <Text style={[styles.chipLabel, duration === sec && styles.chipLabelOn]}>\n {sec}s\n </Text>\n </Pressable>\n ))}\n </View>\n <Pressable onPress={() => void runMove()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Render move</Text>\n </Pressable>\n </>\n ) : null}\n {busy ? (\n <View style={styles.busyRow}>\n <ActivityIndicator color=\"#C4B5FD\" />\n <Text style={styles.progress}>{busy}</Text>\n </View>\n ) : null}\n {error ? <Text style={styles.error}>{error}</Text> : null}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#0B0B0E' },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: 16,\n marginBottom: 6,\n },\n title: { fontSize: 17, fontWeight: '700', color: '#F7F7FA' },\n viewport: { height: 240, marginHorizontal: 12, borderRadius: 12, overflow: 'hidden' },\n tabs: { paddingHorizontal: 12, gap: 8, paddingVertical: 10 },\n tab: { paddingHorizontal: 12, paddingVertical: 8, borderRadius: 9, backgroundColor: '#1F1F24' },\n tabOn: { backgroundColor: '#8B7CFF' },\n tabLabel: { color: '#F7F7FA', fontSize: 12.5, fontWeight: '600' },\n tabLabelOn: { color: '#0A0A0C' },\n body: { flex: 1, paddingHorizontal: 12 },\n hint: { color: '#7A7A88', fontSize: 13, marginBottom: 8 },\n input: {\n minHeight: 64,\n borderRadius: 12,\n paddingHorizontal: 12,\n paddingVertical: 10,\n backgroundColor: '#1F1F24',\n color: '#F7F7FA',\n marginBottom: 10,\n textAlignVertical: 'top',\n },\n cta: {\n paddingVertical: 12,\n borderRadius: 12,\n backgroundColor: '#F7F7FA',\n alignItems: 'center',\n marginBottom: 10,\n },\n ctaLabel: { fontWeight: '700', color: '#0f172a' },\n thumbWrap: {\n width: 64,\n height: 64,\n borderRadius: 8,\n overflow: 'hidden',\n marginRight: 8,\n borderWidth: 2,\n borderColor: 'transparent',\n },\n thumbOn: { borderColor: '#8B7CFF' },\n thumb: { width: '100%', height: '100%' },\n moveRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8, marginBottom: 10 },\n chip: { paddingHorizontal: 10, paddingVertical: 7, borderRadius: 8, backgroundColor: '#1F1F24' },\n chipOn: { backgroundColor: '#8B7CFF' },\n chipLabel: { color: '#F7F7FA', fontSize: 12 },\n chipLabelOn: { color: '#0A0A0C' },\n busyRow: { flexDirection: 'row', alignItems: 'center', gap: 8, marginTop: 6 },\n progress: { color: '#C4B5FD', fontSize: 12 },\n error: { color: '#FECACA', fontSize: 12, marginTop: 8 },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SetStudioExperience.js","sources":["../../../src/features/canvas/SetStudioExperience.tsx"],"sourcesContent":["/**\n * Native Set studio with Three.js WebView viewport, world/object/render, and camera moves.\n *\n * \"Describe the set\" (web commit 9a884b6a): one sentence, and the set agent\n * blocks the whole shot - floor, subject, dressing, camera, light - through\n * the same tools the web studio runs (./set/agent). Every call lands on the\n * stage as it happens, and the Set tab then edits it by hand: pick a piece,\n * nudge, turn, resize, hide or delete it, or add one from the supply library.\n */\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n FlatList,\n Image,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport type { CanvasItem } from './canvasCore';\nimport { friendlyMediaError, resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport { deriveAgentEndpoint, unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { generateObject3D, generateWorld3D, renderSetStill } from './video3d';\nimport { MOVES, cameraPath, frameCount, type MoveKind } from './set/cameraPath';\nimport { MESH_TARGET_HEIGHT_M, newObjectId, newSet, vec3, type SetProject } from './set/setProject';\nimport { SetViewportWebView, type SetViewportApi } from './set/SetViewportWebView';\nimport { KIT_ENTRIES } from './set/supplyLibrary';\nimport { placeObjects, removeObjects, tidySet, uniqueName, updateObjects } from './set/agent/setOps';\nimport { runSetTurn, type SetChatMessage, type SetTurnStep } from './set/agent/setTurn';\nimport type { AgentStill, SetAgentContext } from './set/agent/tools';\n\ntype Tab = 'set' | 'view' | 'world' | 'object' | 'render' | 'move';\n\n/** How far one tap of a nudge button moves, turns or resizes the picked piece. */\nconst NUDGE_M = 0.25;\nconst LIFT_M = 0.1;\nconst TURN_DEG = 15;\nconst GROW = 1.15;\nconst MAX_UNDO = 30;\n\nexport function SetStudioExperience({\n boardItems,\n runAction,\n uploadMedia,\n onClose,\n onPlace,\n token,\n indexUrl,\n}: {\n boardItems: CanvasItem[];\n runAction?: RunMediaAction;\n uploadMedia?: (localUri: string) => Promise<string>;\n /** Session for the set agent's brain calls; without it \"Describe the set\" says so. */\n token?: string | null;\n indexUrl?: string | null;\n onClose: () => void;\n onPlace: (kind: 'image' | 'video', url: string, name: string) => void;\n}) {\n const insets = useSafeAreaInsets();\n const stills = useMemo(\n () =>\n boardItems\n .filter((item) => item.type === 'image')\n .map((item) => ({\n id: item.id,\n src: unwrapProxyUrl(item.src),\n label: item.generatedAssetName || 'Still',\n })),\n [boardItems],\n );\n const [project, setProject] = useState<SetProject>(() => newSet());\n const projectRef = useRef(project);\n const [past, setPast] = useState<SetProject[]>([]);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [brief, setBrief] = useState('');\n const [chat, setChat] = useState<SetChatMessage[]>([]);\n const [steps, setSteps] = useState<SetTurnStep[]>([]);\n const [agentReply, setAgentReply] = useState<string | null>(null);\n const [tab, setTab] = useState<Tab>('set');\n const worldUrl = project.world.imageUrl;\n const [propUrl, setPropUrl] = useState<string | undefined>(stills[0]?.src);\n const [worldPrompt, setWorldPrompt] = useState('Soft daylight studio, neutral backdrop');\n const [objectPrompt, setObjectPrompt] = useState('');\n const [look, setLook] = useState('Photoreal product hero, soft rim light');\n const [move, setMove] = useState<MoveKind>('orbit-left');\n const [duration, setDuration] = useState(3);\n const [busy, setBusy] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [lastPreview, setLastPreview] = useState<string | null>(null);\n const frameWaiters = useRef<Array<(dataUrl: string) => void>>([]);\n const viewportApi = useRef<SetViewportApi | null>(null);\n\n /** Replace the set as one undo step (an agent tool call, or a hand edit). */\n const commit = useCallback((next: SetProject) => {\n const prev = projectRef.current;\n projectRef.current = next;\n setPast((stack) => [...stack.slice(-(MAX_UNDO - 1)), prev]);\n setProject(next);\n }, []);\n\n const undo = () => {\n setPast((stack) => {\n const prev = stack[stack.length - 1];\n if (!prev) return stack;\n projectRef.current = prev;\n setProject(prev);\n return stack.slice(0, -1);\n });\n };\n\n const selected = project.objects.find((o) => o.id === selectedId) ?? null;\n\n const editSelected = (patch: Parameters<typeof updateObjects>[1][number]) => {\n if (!selected) return;\n commit(tidySet(updateObjects(projectRef.current, [patch]).project));\n };\n\n const nudge = (dx: number, dy: number, dz: number) => {\n if (!selected) return;\n const p = selected.position;\n editSelected({ id: selected.id, position: { x: p.x + dx, y: Math.max(0, p.y + dy), z: p.z + dz } });\n };\n\n const addKit = (kit: string) => {\n const target = projectRef.current.camera.target;\n const { project: next, placed } = placeObjects(projectRef.current, [\n { kit, position: { x: target.x, y: 0, z: target.z } },\n ]);\n commit(next);\n if (placed[0]) setSelectedId(placed[0].id);\n };\n\n const deleteSelected = () => {\n if (!selected) return;\n commit(removeObjects(projectRef.current, [selected.id]).project);\n setSelectedId(null);\n };\n\n const agentStills = useMemo<AgentStill[]>(\n () => stills.map((s) => ({ id: s.id, src: s.src, label: s.label })),\n [stills],\n );\n\n const describeSet = async () => {\n const text = brief.trim();\n if (!text) return;\n if (!token || !indexUrl)\n return setError('Describe the set needs a signed-in session. Reopen the canvas and try again.');\n setBusy('Reading the brief…');\n setError(null);\n setAgentReply(null);\n setSteps([]);\n const ctx: SetAgentContext = {\n project: () => projectRef.current,\n commit,\n progress: (line) => setBusy(line),\n stills: agentStills,\n applyCamera: (camera) => viewportApi.current?.setCamera(camera),\n services: {\n generateObject: async ({ prompt, imageUrl, onProgress }) => {\n if (!runAction) throw new Error('3D generation needs a live connector.');\n const mesh = await generateObject3D(runAction, { prompt, imageUrl, onProgress });\n return { modelUrl: mesh.modelUrl, previewUrl: mesh.previewUrl };\n },\n generateWorld: async (prompt) => {\n if (!runAction) throw new Error('3D generation needs a live connector.');\n const world = await generateWorld3D(runAction, { prompt });\n return { imageUrl: world.imageUrl, model: world.model };\n },\n },\n };\n try {\n const result = await runSetTurn({\n history: chat,\n userText: text,\n ctx,\n token,\n agentEndpoint: deriveAgentEndpoint(indexUrl),\n onStatus: (line) => setBusy(line),\n onStep: (step) => setSteps((list) => [...list, step]),\n });\n setChat((list) => [...list, { role: 'user', content: text }, { role: 'assistant', content: result.text }]);\n setAgentReply(result.text);\n setBrief('');\n } catch (err: unknown) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setBusy(null);\n }\n };\n\n const onFrame = (dataUrl: string) => {\n const waiter = frameWaiters.current.shift();\n waiter?.(dataUrl);\n };\n\n const captureOnce = (): Promise<string> =>\n new Promise((resolve, reject) => {\n const timer = setTimeout(() => reject(new Error('Viewport capture timed out')), 8000);\n frameWaiters.current.push((dataUrl) => {\n clearTimeout(timer);\n resolve(dataUrl);\n });\n viewportApi.current?.capture();\n });\n\n const dataUrlToUpload = async (dataUrl: string): Promise<string> => {\n if (!uploadMedia) throw new Error('Upload seam needed to save viewport frames');\n // Host uploaders typically accept file://; write via fetch blob path unsupported —\n // pass data URL when host supports it, else fail clearly.\n if (dataUrl.startsWith('data:')) {\n // Many hosts accept data URLs through their upload helpers; try as-is.\n return uploadMedia(dataUrl);\n }\n return uploadMedia(dataUrl);\n };\n\n const runWorld = async () => {\n if (!runAction) return setError('3D needs a live connector.');\n setBusy('Generating world…');\n setError(null);\n try {\n const world = await generateWorld3D(runAction, { prompt: worldPrompt.trim() });\n commit({\n ...projectRef.current,\n world: {\n ...projectRef.current.world,\n imageUrl: world.imageUrl,\n prompt: worldPrompt.trim(),\n model: world.model,\n },\n });\n setLastPreview(world.imageUrl);\n onPlace('image', world.imageUrl, `World · ${worldPrompt.slice(0, 24)}`);\n setTab('view');\n } catch (err: unknown) {\n setError(friendlyMediaError(err, '3D world'));\n } finally {\n setBusy(null);\n }\n };\n\n const runObject = async () => {\n if (!runAction) return setError('3D needs a live connector.');\n setBusy('Submitting mesh…');\n setError(null);\n try {\n const mesh = await generateObject3D(runAction, {\n imageUrl: propUrl,\n prompt: objectPrompt.trim() || undefined,\n onProgress: setBusy,\n });\n const preview = mesh.previewUrl || mesh.modelUrl;\n // The mesh joins the set as an object of its own, framed so a small prop reads.\n const current = projectRef.current;\n const id = newObjectId();\n const name = uniqueName(\n current.objects.map((o) => o.name),\n (objectPrompt.trim() || 'Object').slice(0, 28),\n );\n commit({\n ...current,\n objects: [\n ...current.objects,\n {\n id,\n name,\n source: 'mesh',\n modelUrl: mesh.modelUrl,\n previewUrl: preview,\n ...(propUrl ? { sourceImageUrl: propUrl } : {}),\n position: { x: current.camera.target.x, y: 0, z: current.camera.target.z },\n rotation: vec3(),\n scale: vec3(1, 1, 1),\n },\n ],\n });\n setSelectedId(id);\n setTimeout(() => viewportApi.current?.frameObject(id), 600);\n setLastPreview(preview);\n onPlace('image', preview, `Object · ${(objectPrompt || 'mesh').slice(0, 24)}`);\n setTab('view');\n } catch (err: unknown) {\n setError(friendlyMediaError(err, '3D object'));\n } finally {\n setBusy(null);\n }\n };\n\n const runRender = async () => {\n if (!runAction) return setError('Render needs a live connector.');\n setBusy('Capturing viewport…');\n setError(null);\n try {\n const frame = await captureOnce();\n let refUrl = lastPreview || propUrl || worldUrl;\n try {\n refUrl = await dataUrlToUpload(frame);\n } catch {\n /* keep prior ref */\n }\n setBusy('Rendering photographic still…');\n const url = await renderSetStill(runAction, {\n look,\n referenceUrls: [refUrl, propUrl, worldUrl].filter(Boolean) as string[],\n aspect: project.aspect,\n });\n setLastPreview(url);\n onPlace('image', url, `Set render · ${look.slice(0, 24)}`);\n } catch (err: unknown) {\n setError(friendlyMediaError(err, 'set render'));\n } finally {\n setBusy(null);\n }\n };\n\n const runMove = async () => {\n if (!runAction) return setError('Moves need a live connector.');\n setBusy('Rendering camera path…');\n setError(null);\n try {\n const frames = frameCount(duration, 12);\n const path = cameraPath(project.camera, { move, frames });\n const uploaded: string[] = [];\n for (let i = 0; i < path.length; i += 1) {\n setBusy(`Frame ${i + 1}/${path.length}…`);\n viewportApi.current?.setCamera(path[i]);\n await new Promise((r) => setTimeout(r, 120));\n const dataUrl = await captureOnce();\n uploaded.push(await dataUrlToUpload(dataUrl));\n }\n setBusy('Composing clip…');\n const slideshow = await runAction('yantra-video-editing', 'YANTRA_VIDEO_EDIT_SLIDESHOW', {\n input_urls: uploaded,\n duration_per_image: duration / Math.max(1, uploaded.length),\n fps: 12,\n });\n const url = resultUrl(slideshow, 'YANTRA_VIDEO_EDIT_SLIDESHOW');\n onPlace('video', url, `Move · ${move}`);\n setLastPreview(url);\n } catch (err: unknown) {\n setError(friendlyMediaError(err, 'camera move'));\n } finally {\n setBusy(null);\n }\n };\n\n return (\n <View style={[styles.root, { paddingTop: insets.top + 8, paddingBottom: insets.bottom + 8 }]}>\n <View style={styles.head}>\n <Pressable onPress={onClose} hitSlop={10}>\n <MaterialCommunityIcons name=\"close\" size={22} color=\"#e2e8f0\" />\n </Pressable>\n <Text style={styles.title}>3D set</Text>\n <Pressable\n onPress={undo}\n hitSlop={10}\n disabled={past.length === 0 || Boolean(busy)}\n accessibilityLabel=\"Undo\"\n >\n <MaterialCommunityIcons name=\"undo\" size={22} color={past.length ? '#e2e8f0' : '#3f3f46'} />\n </Pressable>\n </View>\n\n <View style={styles.viewport}>\n <SetViewportWebView\n worldUrl={worldUrl}\n propUrl={project.objects.length ? undefined : propUrl}\n camera={project.camera}\n objects={project.objects}\n lighting={project.lighting}\n onFrame={onFrame}\n onLoadError={(what) =>\n setError(\n what === 'world'\n ? 'The world backdrop would not load. Generate it again.'\n : 'The 3D object would not load. Generate it again.',\n )\n }\n webRef={viewportApi}\n />\n </View>\n\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.tabs}>\n {(\n [\n ['set', 'Set'],\n ['view', 'View'],\n ['world', 'World'],\n ['object', 'Object'],\n ['render', 'Render'],\n ['move', 'Move'],\n ] as const\n ).map(([id, label]) => (\n <Pressable key={id} onPress={() => setTab(id)} style={[styles.tab, tab === id && styles.tabOn]}>\n <Text style={[styles.tabLabel, tab === id && styles.tabLabelOn]}>{label}</Text>\n </Pressable>\n ))}\n </ScrollView>\n\n <ScrollView style={styles.body} keyboardShouldPersistTaps=\"handled\">\n {tab === 'set' ? (\n <>\n <TextInput\n value={brief}\n onChangeText={setBrief}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n placeholder={\n project.objects.length\n ? 'Change it: \"lower the camera\", \"add a second figure\"…'\n : 'Describe the set: \"a barista behind a café counter at dawn\"'\n }\n accessibilityLabel=\"Describe the set\"\n />\n <Pressable\n onPress={() => void describeSet()}\n style={[styles.cta, (!brief.trim() || Boolean(busy)) && styles.ctaOff]}\n disabled={!brief.trim() || Boolean(busy)}\n >\n <Text style={styles.ctaLabel}>\n {project.objects.length ? 'Ask the set agent' : 'Describe the set'}\n </Text>\n </Pressable>\n {steps.length ? (\n <View style={styles.steps}>\n {steps.map((step, i) => (\n <Text key={`${i}-${step.label}`} style={styles.step} numberOfLines={1}>\n {step.label}\n {step.detail ? ` · ${step.detail}` : ''}\n </Text>\n ))}\n </View>\n ) : null}\n {agentReply ? <Text style={styles.reply}>{agentReply}</Text> : null}\n\n <Text style={styles.section}>Pieces</Text>\n {project.objects.length === 0 ? (\n <Text style={styles.hint}>Nothing on the set yet. Describe it above, or add a piece.</Text>\n ) : (\n <View style={styles.moveRow}>\n {project.objects.map((o) => (\n <Pressable\n key={o.id}\n onPress={() => setSelectedId(o.id === selectedId ? null : o.id)}\n style={[\n styles.chip,\n o.id === selectedId && styles.chipOn,\n o.hidden && styles.chipHidden,\n ]}\n >\n <Text style={[styles.chipLabel, o.id === selectedId && styles.chipLabelOn]}>\n {o.locked ? '🔒 ' : ''}\n {o.name}\n </Text>\n </Pressable>\n ))}\n </View>\n )}\n {selected ? (\n <View style={styles.editor}>\n <Text style={styles.editorTitle} numberOfLines={1}>\n {selected.name} · {selected.position.x.toFixed(2)}, {selected.position.y.toFixed(2)}\n , {selected.position.z.toFixed(2)}\n </Text>\n {selected.locked ? (\n <Text style={styles.hint}>Locked - unlock it to move it.</Text>\n ) : (\n <View style={styles.moveRow}>\n {(\n [\n ['arrow-left', () => nudge(-NUDGE_M, 0, 0), 'Left'],\n ['arrow-right', () => nudge(NUDGE_M, 0, 0), 'Right'],\n ['arrow-up', () => nudge(0, 0, -NUDGE_M), 'Back'],\n ['arrow-down', () => nudge(0, 0, NUDGE_M), 'Forward'],\n ['arrow-collapse-up', () => nudge(0, LIFT_M, 0), 'Raise'],\n ['arrow-collapse-down', () => nudge(0, -LIFT_M, 0), 'Lower'],\n [\n 'rotate-left',\n () =>\n editSelected({\n id: selected.id,\n rotationY: selected.rotation.y + TURN_DEG,\n }),\n 'Turn left',\n ],\n [\n 'rotate-right',\n () =>\n editSelected({\n id: selected.id,\n rotationY: selected.rotation.y - TURN_DEG,\n }),\n 'Turn right',\n ],\n [\n 'plus',\n () =>\n editSelected({\n id: selected.id,\n scaleXyz: {\n x: selected.scale.x * GROW,\n y: selected.scale.y * GROW,\n z: selected.scale.z * GROW,\n },\n }),\n 'Bigger',\n ],\n [\n 'minus',\n () =>\n editSelected({\n id: selected.id,\n scaleXyz: {\n x: selected.scale.x / GROW,\n y: selected.scale.y / GROW,\n z: selected.scale.z / GROW,\n },\n }),\n 'Smaller',\n ],\n ] as const\n ).map(([icon, onPress, label]) => (\n <Pressable\n key={label}\n onPress={onPress}\n style={styles.iconBtn}\n accessibilityLabel={label}\n >\n <MaterialCommunityIcons name={icon} size={18} color=\"#F7F7FA\" />\n </Pressable>\n ))}\n </View>\n )}\n <View style={styles.moveRow}>\n <Pressable\n onPress={() => editSelected({ id: selected.id, hidden: !selected.hidden })}\n style={styles.chip}\n >\n <Text style={styles.chipLabel}>{selected.hidden ? 'Show' : 'Hide'}</Text>\n </Pressable>\n <Pressable\n onPress={() => editSelected({ id: selected.id, locked: !selected.locked })}\n style={styles.chip}\n >\n <Text style={styles.chipLabel}>{selected.locked ? 'Unlock' : 'Lock'}</Text>\n </Pressable>\n <Pressable\n onPress={() => viewportApi.current?.frameObject(selected.id)}\n style={styles.chip}\n >\n <Text style={styles.chipLabel}>Frame</Text>\n </Pressable>\n <Pressable onPress={deleteSelected} style={styles.chip}>\n <Text style={[styles.chipLabel, styles.danger]}>Delete</Text>\n </Pressable>\n </View>\n </View>\n ) : null}\n\n <Text style={styles.section}>Add a piece</Text>\n <View style={styles.moveRow}>\n {KIT_ENTRIES.map((entry) => (\n <Pressable key={entry.id} onPress={() => addKit(entry.id)} style={styles.chip}>\n <Text style={styles.chipLabel}>{entry.label}</Text>\n </Pressable>\n ))}\n </View>\n <Text style={styles.hint}>\n Generated meshes are normalised to {MESH_TARGET_HEIGHT_M}m; use Bigger / Smaller to size\n them.\n </Text>\n </>\n ) : null}\n {tab === 'view' ? (\n <Text style={styles.hint}>Drag to orbit. Use World / Object / Render / Move for the shot.</Text>\n ) : null}\n {tab === 'world' ? (\n <>\n <TextInput\n value={worldPrompt}\n onChangeText={setWorldPrompt}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n />\n <Pressable onPress={() => void runWorld()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Generate world</Text>\n </Pressable>\n </>\n ) : null}\n {tab === 'object' ? (\n <>\n <FlatList\n horizontal\n data={stills}\n keyExtractor={(item) => item.id}\n renderItem={({ item }) => (\n <Pressable\n onPress={() => setPropUrl(item.src)}\n style={[styles.thumbWrap, propUrl === item.src && styles.thumbOn]}\n >\n <Image source={{ uri: item.src }} style={styles.thumb} />\n </Pressable>\n )}\n />\n <TextInput\n value={objectPrompt}\n onChangeText={setObjectPrompt}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n placeholder=\"Optional mesh prompt\"\n />\n <Pressable onPress={() => void runObject()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Generate object</Text>\n </Pressable>\n </>\n ) : null}\n {tab === 'render' ? (\n <>\n <TextInput\n value={look}\n onChangeText={setLook}\n style={styles.input}\n multiline\n placeholderTextColor=\"#7A7A88\"\n />\n <Pressable onPress={() => void runRender()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Render still</Text>\n </Pressable>\n </>\n ) : null}\n {tab === 'move' ? (\n <>\n <View style={styles.moveRow}>\n {MOVES.map((m) => (\n <Pressable\n key={m.kind}\n onPress={() => setMove(m.kind)}\n style={[styles.chip, move === m.kind && styles.chipOn]}\n >\n <Text style={[styles.chipLabel, move === m.kind && styles.chipLabelOn]}>\n {m.label}\n </Text>\n </Pressable>\n ))}\n </View>\n <View style={styles.moveRow}>\n {[2, 3, 4, 6].map((sec) => (\n <Pressable\n key={sec}\n onPress={() => setDuration(sec)}\n style={[styles.chip, duration === sec && styles.chipOn]}\n >\n <Text style={[styles.chipLabel, duration === sec && styles.chipLabelOn]}>\n {sec}s\n </Text>\n </Pressable>\n ))}\n </View>\n <Pressable onPress={() => void runMove()} style={styles.cta} disabled={Boolean(busy)}>\n <Text style={styles.ctaLabel}>Render move</Text>\n </Pressable>\n </>\n ) : null}\n {busy ? (\n <View style={styles.busyRow}>\n <ActivityIndicator color=\"#C4B5FD\" />\n <Text style={styles.progress}>{busy}</Text>\n </View>\n ) : null}\n {error ? <Text style={styles.error}>{error}</Text> : null}\n </ScrollView>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1, backgroundColor: '#0B0B0E' },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: 16,\n marginBottom: 6,\n },\n title: { fontSize: 17, fontWeight: '700', color: '#F7F7FA' },\n viewport: { height: 240, marginHorizontal: 12, borderRadius: 12, overflow: 'hidden' },\n tabs: { paddingHorizontal: 12, gap: 8, paddingVertical: 10 },\n tab: { paddingHorizontal: 12, paddingVertical: 8, borderRadius: 9, backgroundColor: '#1F1F24' },\n tabOn: { backgroundColor: '#8B7CFF' },\n tabLabel: { color: '#F7F7FA', fontSize: 12.5, fontWeight: '600' },\n tabLabelOn: { color: '#0A0A0C' },\n body: { flex: 1, paddingHorizontal: 12 },\n hint: { color: '#7A7A88', fontSize: 13, marginBottom: 8 },\n input: {\n minHeight: 64,\n borderRadius: 12,\n paddingHorizontal: 12,\n paddingVertical: 10,\n backgroundColor: '#1F1F24',\n color: '#F7F7FA',\n marginBottom: 10,\n textAlignVertical: 'top',\n },\n cta: {\n paddingVertical: 12,\n borderRadius: 12,\n backgroundColor: '#F7F7FA',\n alignItems: 'center',\n marginBottom: 10,\n },\n ctaLabel: { fontWeight: '700', color: '#0f172a' },\n ctaOff: { opacity: 0.5 },\n steps: { gap: 2, marginBottom: 8 },\n step: { color: '#A5A5B4', fontSize: 11.5 },\n reply: { color: '#E4E4EC', fontSize: 13, lineHeight: 18, marginBottom: 10 },\n section: { color: '#F7F7FA', fontSize: 12, fontWeight: '700', marginTop: 6, marginBottom: 8 },\n editor: { padding: 10, borderRadius: 12, backgroundColor: '#16161B', marginBottom: 10, gap: 4 },\n editorTitle: { color: '#F7F7FA', fontSize: 12.5, fontWeight: '600', marginBottom: 6 },\n iconBtn: {\n width: 38,\n height: 38,\n borderRadius: 9,\n backgroundColor: '#1F1F24',\n alignItems: 'center',\n justifyContent: 'center',\n },\n chipHidden: { opacity: 0.45 },\n danger: { color: '#FCA5A5' },\n thumbWrap: {\n width: 64,\n height: 64,\n borderRadius: 8,\n overflow: 'hidden',\n marginRight: 8,\n borderWidth: 2,\n borderColor: 'transparent',\n },\n thumbOn: { borderColor: '#8B7CFF' },\n thumb: { width: '100%', height: '100%' },\n moveRow: { flexDirection: 'row', flexWrap: 'wrap', gap: 8, marginBottom: 10 },\n chip: { paddingHorizontal: 10, paddingVertical: 7, borderRadius: 8, backgroundColor: '#1F1F24' },\n chipOn: { backgroundColor: '#8B7CFF' },\n chipLabel: { color: '#F7F7FA', fontSize: 12 },\n chipLabelOn: { color: '#0A0A0C' },\n busyRow: { flexDirection: 'row', alignItems: 'center', gap: 8, marginTop: 6 },\n progress: { color: '#C4B5FD', fontSize: 12 },\n error: { color: '#FECACA', fontSize: 12, marginTop: 8 },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useCallback,useMemo}from'react';import {StyleSheet,View,Pressable,Text,ActivityIndicator,ScrollView
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useCallback,useMemo}from'react';import {StyleSheet,View,Pressable,Text,ActivityIndicator,ScrollView}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {resultUrl,friendlyMediaError}from'./videoEditor/mediaActions.js';import {Stepper,Field,PickRow,PickMulti}from'./videoEditor/formWidgets.js';import {VIDEO_EDIT_CATEGORIES,VIDEO_EDIT_ACTIONS,resultKind,INSTANT_HINT}from'./videoEditor/videoEditOps.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -530,58 +530,6 @@ function OpControls({
|
|
|
530
530
|
}
|
|
531
531
|
return /* @__PURE__ */ jsx(Text, { style: styles.hint, children: "Apply to run this edit." });
|
|
532
532
|
}
|
|
533
|
-
function Field({
|
|
534
|
-
label,
|
|
535
|
-
value,
|
|
536
|
-
onChange,
|
|
537
|
-
multiline
|
|
538
|
-
}) {
|
|
539
|
-
return /* @__PURE__ */ jsxs(View, { style: styles.field, children: [
|
|
540
|
-
/* @__PURE__ */ jsx(Text, { style: styles.fieldLabel, children: label }),
|
|
541
|
-
/* @__PURE__ */ jsx(TextInput, { value, onChangeText: onChange, style: [styles.fieldInput, multiline && styles.fieldMulti], placeholderTextColor: "#5A5A66", autoCapitalize: "none", autoCorrect: false, multiline })
|
|
542
|
-
] });
|
|
543
|
-
}
|
|
544
|
-
function Stepper({
|
|
545
|
-
label,
|
|
546
|
-
value,
|
|
547
|
-
onLess,
|
|
548
|
-
onMore
|
|
549
|
-
}) {
|
|
550
|
-
return /* @__PURE__ */ jsxs(View, { style: styles.stepper, children: [
|
|
551
|
-
/* @__PURE__ */ jsx(Text, { style: styles.stepperLabel, children: label }),
|
|
552
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onLess, hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `${label} less`, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "minus", size: 15, color: "#F7F7FA" }) }),
|
|
553
|
-
/* @__PURE__ */ jsx(Text, { style: styles.stepperValue, children: value }),
|
|
554
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onMore, hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `${label} more`, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "plus", size: 15, color: "#F7F7FA" }) })
|
|
555
|
-
] });
|
|
556
|
-
}
|
|
557
|
-
function PickRow({
|
|
558
|
-
label,
|
|
559
|
-
items,
|
|
560
|
-
selected,
|
|
561
|
-
onSelect,
|
|
562
|
-
empty
|
|
563
|
-
}) {
|
|
564
|
-
if (items.length === 0) return /* @__PURE__ */ jsx(Text, { style: styles.hint, children: empty });
|
|
565
|
-
return /* @__PURE__ */ jsxs(View, { children: [
|
|
566
|
-
/* @__PURE__ */ jsx(Text, { style: styles.fieldLabel, children: label }),
|
|
567
|
-
/* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: items.map((item) => {
|
|
568
|
-
const on = item.src === selected;
|
|
569
|
-
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onSelect(item.src), style: [styles.choice, on && styles.choiceOn], children: /* @__PURE__ */ jsx(Text, { style: [styles.choiceLabel, on && styles.choiceLabelOn], numberOfLines: 1, children: item.generatedAssetName || item.type }) }, item.id);
|
|
570
|
-
}) })
|
|
571
|
-
] });
|
|
572
|
-
}
|
|
573
|
-
function PickMulti({
|
|
574
|
-
items,
|
|
575
|
-
selected,
|
|
576
|
-
onChange,
|
|
577
|
-
empty
|
|
578
|
-
}) {
|
|
579
|
-
if (items.length === 0) return /* @__PURE__ */ jsx(Text, { style: styles.hint, children: empty });
|
|
580
|
-
return /* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: items.map((item) => {
|
|
581
|
-
const on = selected.includes(item.src);
|
|
582
|
-
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(on ? selected.filter((u) => u !== item.src) : [...selected, item.src]), style: [styles.choice, on && styles.choiceOn], children: /* @__PURE__ */ jsx(Text, { style: [styles.choiceLabel, on && styles.choiceLabelOn], numberOfLines: 1, children: item.generatedAssetName || item.type }) }, item.id);
|
|
583
|
-
}) });
|
|
584
|
-
}
|
|
585
533
|
const styles = StyleSheet.create({
|
|
586
534
|
root: {
|
|
587
535
|
flex: 1,
|