@adminide-stack/yantra-mobile 12.0.125-alpha.1 → 12.0.126
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/health/HealthSyncRunner.js +9 -1
- package/lib/features/health/HealthSyncRunner.js.map +1 -1
- package/lib/features/health/backgroundSync.js +41 -0
- package/lib/features/health/backgroundSync.js.map +1 -0
- package/lib/features/health/healthConnectBackground.js +32 -0
- package/lib/features/health/healthConnectBackground.js.map +1 -0
- package/lib/features/health/healthConnectReader.js +16 -2
- package/lib/features/health/healthConnectReader.js.map +1 -1
- package/lib/features/health/healthSync.js +31 -3
- package/lib/features/health/healthSync.js.map +1 -1
- package/lib/features/health/healthSyncStore.js +89 -5
- package/lib/features/health/healthSyncStore.js.map +1 -1
- package/lib/features/health/healthkitBackground.js +17 -0
- package/lib/features/health/healthkitBackground.js.map +1 -0
- package/lib/features/health/reader.js.map +1 -1
- package/lib/features/health/sessionVault.js +38 -0
- package/lib/features/health/sessionVault.js.map +1 -0
- package/lib/features/health/syncState.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/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/Health/index.js +12 -2
- package/lib/screens/Health/index.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 +6 -4
|
@@ -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 *\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
|
+
{"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 { ActivityIndicator, FlatList, Image, ScrollView, StyleSheet, Text, TextInput, View } 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';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\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;\n\n/** Tool-bar glyph per tab (presentation only). */\nconst TAB_ICONS: Record<Tab, React.ComponentProps<typeof MaterialCommunityIcons>['name']> = {\n set: 'auto-fix',\n view: 'rotate-3d-variant',\n world: 'earth',\n object: 'cube-outline',\n render: 'camera-iris',\n move: 'movie-open-outline',\n};\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 theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\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\n onPress={onClose}\n hitSlop={10}\n style={({ pressed }) => [styles.headBtn, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"close\" size={22} color={theme.edInk} />\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 style={({ pressed }) => [styles.headBtn, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"undo\" size={22} color={past.length ? theme.edInk : theme.edInk3} />\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\n style={HSCROLL}\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.tabs}\n >\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\n key={id}\n onPress={() => setTab(id)}\n style={({ pressed }) => [styles.tab, pressedStyle(pressed)]}\n >\n <View style={[styles.tabIcon, tab === id && styles.tabIconOn]}>\n <MaterialCommunityIcons\n name={TAB_ICONS[id]}\n size={22}\n color={tab === id ? theme.edInk : theme.edInk3}\n />\n </View>\n <Text style={[styles.tabLabel, tab === id && styles.tabLabelOn]}>{label}</Text>\n </Pressable>\n ))}\n </ScrollView>\n\n <ScrollView\n style={styles.body}\n contentContainerStyle={styles.bodyContent}\n keyboardShouldPersistTaps=\"handled\"\n >\n {tab === 'set' ? (\n <>\n <TextInput\n value={brief}\n onChangeText={setBrief}\n style={styles.input}\n multiline\n placeholderTextColor={theme.edInk3}\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={({ pressed }) => [\n styles.cta,\n (!brief.trim() || Boolean(busy)) && styles.ctaOff,\n pressedStyle(pressed),\n ]}\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={({ pressed }) => [\n styles.chip,\n o.id === selectedId && styles.chipOn,\n o.hidden && styles.chipHidden,\n pressedStyle(pressed),\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={({ pressed }) => [styles.iconBtn, pressedStyle(pressed)]}\n accessibilityLabel={label}\n >\n <MaterialCommunityIcons name={icon} size={20} color={theme.edInk} />\n </Pressable>\n ))}\n </View>\n )}\n <View style={styles.moveRow}>\n <Pressable\n onPress={() => editSelected({ id: selected.id, hidden: !selected.hidden })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\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={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\n <Text style={styles.chipLabel}>{selected.locked ? 'Unlock' : 'Lock'}</Text>\n </Pressable>\n <Pressable\n onPress={() => viewportApi.current?.frameObject(selected.id)}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\n <Text style={styles.chipLabel}>Frame</Text>\n </Pressable>\n <Pressable\n onPress={deleteSelected}\n style={({ pressed }) => [styles.chip, styles.chipDanger, pressedStyle(pressed)]}\n >\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\n key={entry.id}\n onPress={() => addKit(entry.id)}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\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={theme.edInk3}\n />\n <Pressable\n onPress={() => void runWorld()}\n style={({ pressed }) => [styles.cta, Boolean(busy) && styles.ctaOff, pressedStyle(pressed)]}\n disabled={Boolean(busy)}\n >\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={({ pressed }) => [\n styles.thumbWrap,\n propUrl === item.src && styles.thumbOn,\n pressedStyle(pressed),\n ]}\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={theme.edInk3}\n placeholder=\"Optional mesh prompt\"\n />\n <Pressable\n onPress={() => void runObject()}\n style={({ pressed }) => [styles.cta, Boolean(busy) && styles.ctaOff, pressedStyle(pressed)]}\n disabled={Boolean(busy)}\n >\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={theme.edInk3}\n />\n <Pressable\n onPress={() => void runRender()}\n style={({ pressed }) => [styles.cta, Boolean(busy) && styles.ctaOff, pressedStyle(pressed)]}\n disabled={Boolean(busy)}\n >\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={({ pressed }) => [\n styles.chip,\n move === m.kind && styles.chipOn,\n pressedStyle(pressed),\n ]}\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={({ pressed }) => [\n styles.chip,\n duration === sec && styles.chipOn,\n pressedStyle(pressed),\n ]}\n >\n <Text style={[styles.chipLabel, duration === sec && styles.chipLabelOn]}>\n {sec}s\n </Text>\n </Pressable>\n ))}\n </View>\n <Pressable\n onPress={() => void runMove()}\n style={({ pressed }) => [styles.cta, Boolean(busy) && styles.ctaOff, pressedStyle(pressed)]}\n disabled={Boolean(busy)}\n >\n <Text style={styles.ctaLabel}>Render move</Text>\n </Pressable>\n </>\n ) : null}\n {busy ? (\n <View style={styles.busyRow}>\n <ActivityIndicator color={theme.edInk2} />\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 makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.edBg },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: SPACE.sm,\n minHeight: HIT + SPACE.xs,\n marginBottom: SPACE.xs,\n },\n headBtn: { width: HIT, height: HIT, borderRadius: HIT / 2, alignItems: 'center', justifyContent: 'center' },\n title: { ...TYPE.title, color: theme.edInk },\n viewport: {\n height: 260,\n marginHorizontal: SPACE.md,\n borderRadius: RADIUS.lg,\n overflow: 'hidden',\n backgroundColor: '#050506',\n },\n tabs: {\n paddingHorizontal: SPACE.sm,\n paddingVertical: SPACE.sm,\n gap: SPACE.xs,\n },\n tab: { minWidth: 60, alignItems: 'center', gap: SPACE.xs, paddingVertical: SPACE.xs },\n tabIcon: {\n width: 48,\n height: 34,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n },\n tabIconOn: { backgroundColor: theme.edRaisedHi },\n tabLabel: { fontSize: 11, lineHeight: 14, fontWeight: '500', color: theme.edInk3 },\n tabLabelOn: { color: theme.edInk, fontWeight: '600' },\n body: {\n flex: 1,\n backgroundColor: theme.edPanel,\n borderTopLeftRadius: RADIUS.xl,\n borderTopRightRadius: RADIUS.xl,\n },\n bodyContent: { paddingHorizontal: SPACE.lg, paddingTop: SPACE.lg, paddingBottom: SPACE.xl },\n hint: {\n ...TYPE.caption,\n fontWeight: '400',\n fontSize: 13,\n lineHeight: 18,\n color: theme.edInk3,\n marginBottom: SPACE.sm,\n },\n input: {\n ...TYPE.body,\n minHeight: 76,\n borderRadius: RADIUS.md,\n paddingHorizontal: SPACE.md + 2,\n paddingVertical: SPACE.md,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n marginBottom: SPACE.md,\n textAlignVertical: 'top',\n },\n cta: {\n minHeight: 48,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: SPACE.md,\n },\n ctaLabel: { ...TYPE.label, fontSize: 15, color: theme.primaryForeground },\n ctaOff: { opacity: 0.45 },\n steps: { gap: SPACE.xs, marginBottom: SPACE.sm },\n step: { ...TYPE.caption, fontWeight: '400', color: theme.edInk2 },\n reply: { ...TYPE.body, fontSize: 14, lineHeight: 20, color: theme.edInk, marginBottom: SPACE.md },\n section: { ...TYPE.label, color: theme.edInk, marginTop: SPACE.md, marginBottom: SPACE.sm },\n editor: {\n padding: SPACE.md,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.edRaised,\n marginBottom: SPACE.md,\n gap: SPACE.xs,\n },\n editorTitle: { ...TYPE.label, color: theme.edInk, marginBottom: SPACE.sm },\n iconBtn: {\n width: 42,\n height: 42,\n borderRadius: 21,\n backgroundColor: theme.edRaisedHi,\n alignItems: 'center',\n justifyContent: 'center',\n },\n chipHidden: { opacity: 0.45 },\n chipDanger: { backgroundColor: theme.edDangerSoft },\n danger: { color: theme.edDanger },\n thumbWrap: {\n width: 68,\n height: 68,\n borderRadius: RADIUS.md,\n overflow: 'hidden',\n marginRight: SPACE.sm,\n marginBottom: SPACE.md,\n borderWidth: 2,\n borderColor: 'transparent',\n backgroundColor: theme.edRaised,\n },\n thumbOn: { borderColor: theme.edInk },\n thumb: { width: '100%', height: '100%', borderRadius: RADIUS.md - 2 },\n moveRow: { flexDirection: 'row', flexWrap: 'wrap', gap: SPACE.sm, marginBottom: SPACE.md },\n chip: {\n minHeight: 36,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.edRaisedHi,\n },\n chipOn: { backgroundColor: theme.edInk },\n chipLabel: { ...TYPE.label, color: theme.edInk },\n chipLabelOn: { color: theme.edOnInk },\n busyRow: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm, marginTop: SPACE.sm },\n progress: { ...TYPE.caption, color: theme.edInk2 },\n error: {\n ...TYPE.caption,\n color: theme.edDanger,\n marginTop: SPACE.sm,\n padding: SPACE.md,\n borderRadius: RADIUS.md,\n backgroundColor: theme.edDangerSoft,\n },\n }),\n);\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {useState}from'react';import {
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo,useState}from'react';import {View,Text,TextInput,ActivityIndicator,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {friendlyMediaError}from'./videoEditor/mediaActions.js';import {unwrapProxyUrl}from'./videoEditor/remoteMediaClient.js';import {CLIP_COUNT_CHOICES,CLIP_ASPECT_RATIOS,CLIP_RESOLUTIONS,buildClipRunParams,parseClipRunResult}from'./videoClips.js';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,Segmented,RADIUS,SPACE,HIT,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
function VideoClipsExperience({
|
|
2
21
|
item,
|
|
3
22
|
runAction,
|
|
4
23
|
onClose,
|
|
5
24
|
onClips
|
|
6
25
|
}) {
|
|
26
|
+
const theme = useCanvasTheme();
|
|
27
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
7
28
|
const [count, setCount] = useState(3);
|
|
8
29
|
const [aspect, setAspect] = useState("9:16");
|
|
9
30
|
const [resolution, setResolution] = useState("720");
|
|
@@ -17,7 +38,7 @@ import {jsxs,jsx}from'react/jsx-runtime';import {useState}from'react';import {St
|
|
|
17
38
|
return;
|
|
18
39
|
}
|
|
19
40
|
if (!runAction) {
|
|
20
|
-
setNotice("Clips need the host connector
|
|
41
|
+
setNotice("Clips need the host connector, which this host has not wired.");
|
|
21
42
|
return;
|
|
22
43
|
}
|
|
23
44
|
if (busy) return;
|
|
@@ -36,140 +57,153 @@ import {jsxs,jsx}from'react/jsx-runtime';import {useState}from'react';import {St
|
|
|
36
57
|
};
|
|
37
58
|
return /* @__PURE__ */ jsxs(View, { style: styles.root, testID: "video-clips", children: [
|
|
38
59
|
/* @__PURE__ */ jsxs(View, { style: styles.header, children: [
|
|
39
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close",
|
|
60
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close", style: ({
|
|
61
|
+
pressed
|
|
62
|
+
}) => [styles.close, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color: theme.foreground }) }),
|
|
40
63
|
/* @__PURE__ */ jsx(Text, { style: styles.headerTitle, children: "Clips" }),
|
|
41
|
-
/* @__PURE__ */ jsx(View, { style:
|
|
42
|
-
width: 22
|
|
43
|
-
} })
|
|
64
|
+
/* @__PURE__ */ jsx(View, { style: styles.close })
|
|
44
65
|
] }),
|
|
45
66
|
/* @__PURE__ */ jsxs(View, { style: styles.body, children: [
|
|
46
|
-
/* @__PURE__ */ jsx(Text, { style: styles.lead, children: "Cut a long video into
|
|
67
|
+
/* @__PURE__ */ jsx(Text, { style: styles.lead, children: "Cut a long video into short clips, ranked by AI." }),
|
|
47
68
|
/* @__PURE__ */ jsx(Text, { style: styles.label, children: "Source URL" }),
|
|
48
|
-
/* @__PURE__ */ jsx(TextInput, { value: videoUrl, onChangeText: setVideoUrl, placeholder: "https://\u2026", placeholderTextColor:
|
|
69
|
+
/* @__PURE__ */ jsx(TextInput, { value: videoUrl, onChangeText: setVideoUrl, placeholder: "https://\u2026", placeholderTextColor: theme.mutedForeground, autoCapitalize: "none", autoCorrect: false, style: styles.url, editable: !busy }),
|
|
49
70
|
/* @__PURE__ */ jsx(Text, { style: styles.label, children: "How many" }),
|
|
50
|
-
/* @__PURE__ */ jsx(
|
|
71
|
+
/* @__PURE__ */ jsx(Segmented, { options: CLIP_COUNT_CHOICES.map((n) => ({
|
|
72
|
+
id: String(n),
|
|
73
|
+
label: String(n)
|
|
74
|
+
})), value: String(count), onChange: (id) => setCount(Number(id)) }),
|
|
51
75
|
/* @__PURE__ */ jsx(Text, { style: styles.label, children: "Aspect" }),
|
|
52
|
-
/* @__PURE__ */ jsx(
|
|
76
|
+
/* @__PURE__ */ jsx(Segmented, { options: CLIP_ASPECT_RATIOS.map((value) => ({
|
|
77
|
+
id: value,
|
|
78
|
+
label: value
|
|
79
|
+
})), value: aspect, onChange: setAspect }),
|
|
53
80
|
/* @__PURE__ */ jsx(Text, { style: styles.label, children: "Resolution" }),
|
|
54
|
-
/* @__PURE__ */ jsx(
|
|
55
|
-
value,
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: run, disabled: busy, style:
|
|
81
|
+
/* @__PURE__ */ jsx(Segmented, { options: CLIP_RESOLUTIONS.map((value) => ({
|
|
82
|
+
id: value,
|
|
83
|
+
label: `${value}p`
|
|
84
|
+
})), value: resolution, onChange: setResolution }),
|
|
85
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: run, disabled: busy, style: ({
|
|
86
|
+
pressed
|
|
87
|
+
}) => [styles.go, busy && styles.goDisabled, pressedStyle(pressed && !busy)], accessibilityRole: "button", children: busy ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.primaryForeground }) : /* @__PURE__ */ jsx(Text, { style: styles.goLabel, children: "Make clips" }) }),
|
|
59
88
|
busy ? /* @__PURE__ */ jsx(Text, { style: styles.wait, children: "This can take a few minutes\u2026" }) : null
|
|
60
89
|
] }),
|
|
61
90
|
notice ? /* @__PURE__ */ jsxs(View, { style: styles.notice, children: [
|
|
62
91
|
/* @__PURE__ */ jsx(Text, { style: styles.noticeText, children: notice }),
|
|
63
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: () => setNotice(null), hitSlop: 8,
|
|
92
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => setNotice(null), hitSlop: 8, style: ({
|
|
93
|
+
pressed
|
|
94
|
+
}) => pressedStyle(pressed), children: /* @__PURE__ */ jsx(Text, { style: styles.noticeDismiss, children: "OK" }) })
|
|
64
95
|
] }) : null
|
|
65
96
|
] });
|
|
66
97
|
}
|
|
67
|
-
const
|
|
98
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
68
99
|
root: {
|
|
69
100
|
flex: 1,
|
|
70
|
-
backgroundColor:
|
|
101
|
+
backgroundColor: theme.background
|
|
71
102
|
},
|
|
72
103
|
header: {
|
|
73
104
|
flexDirection: "row",
|
|
74
105
|
alignItems: "center",
|
|
75
106
|
justifyContent: "space-between",
|
|
76
|
-
paddingHorizontal:
|
|
77
|
-
|
|
107
|
+
paddingHorizontal: SPACE.sm,
|
|
108
|
+
minHeight: HIT + SPACE.md
|
|
78
109
|
},
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
110
|
+
close: {
|
|
111
|
+
width: HIT,
|
|
112
|
+
height: HIT,
|
|
113
|
+
borderRadius: HIT / 2,
|
|
114
|
+
alignItems: "center",
|
|
115
|
+
justifyContent: "center"
|
|
83
116
|
},
|
|
117
|
+
headerTitle: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
118
|
+
color: theme.foreground
|
|
119
|
+
}),
|
|
84
120
|
body: {
|
|
85
|
-
paddingHorizontal:
|
|
86
|
-
paddingTop:
|
|
87
|
-
gap:
|
|
88
|
-
},
|
|
89
|
-
lead: {
|
|
90
|
-
color:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
fontSize: 14
|
|
108
|
-
},
|
|
121
|
+
paddingHorizontal: SPACE.lg,
|
|
122
|
+
paddingTop: SPACE.sm,
|
|
123
|
+
gap: SPACE.sm
|
|
124
|
+
},
|
|
125
|
+
lead: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
126
|
+
color: theme.mutedForeground,
|
|
127
|
+
marginBottom: SPACE.md
|
|
128
|
+
}),
|
|
129
|
+
label: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
130
|
+
color: theme.mutedForeground,
|
|
131
|
+
marginTop: SPACE.lg
|
|
132
|
+
}),
|
|
133
|
+
url: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
134
|
+
minHeight: HIT + 4,
|
|
135
|
+
borderRadius: RADIUS.md,
|
|
136
|
+
paddingHorizontal: SPACE.md + 2,
|
|
137
|
+
paddingVertical: SPACE.md,
|
|
138
|
+
backgroundColor: theme.card,
|
|
139
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
140
|
+
borderColor: theme.border,
|
|
141
|
+
color: theme.foreground
|
|
142
|
+
}),
|
|
109
143
|
row: {
|
|
110
144
|
flexDirection: "row",
|
|
111
|
-
gap:
|
|
145
|
+
gap: SPACE.sm,
|
|
112
146
|
flexWrap: "wrap"
|
|
113
147
|
},
|
|
114
148
|
chip: {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
149
|
+
minHeight: 38,
|
|
150
|
+
minWidth: 52,
|
|
151
|
+
paddingHorizontal: SPACE.lg,
|
|
152
|
+
borderRadius: RADIUS.pill,
|
|
153
|
+
alignItems: "center",
|
|
154
|
+
justifyContent: "center",
|
|
155
|
+
backgroundColor: theme.edRaised
|
|
119
156
|
},
|
|
120
157
|
chipOn: {
|
|
121
|
-
backgroundColor:
|
|
122
|
-
},
|
|
123
|
-
chipLabel: {
|
|
124
|
-
color: "#F7F7FA",
|
|
125
|
-
fontSize: 13,
|
|
126
|
-
fontWeight: "500"
|
|
158
|
+
backgroundColor: theme.edInk
|
|
127
159
|
},
|
|
160
|
+
chipLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
161
|
+
color: theme.edInk2
|
|
162
|
+
}),
|
|
128
163
|
chipLabelOn: {
|
|
129
|
-
color:
|
|
164
|
+
color: theme.edOnInk
|
|
130
165
|
},
|
|
131
166
|
go: {
|
|
132
|
-
marginTop:
|
|
133
|
-
|
|
134
|
-
borderRadius:
|
|
135
|
-
backgroundColor:
|
|
167
|
+
marginTop: SPACE.xl,
|
|
168
|
+
minHeight: 52,
|
|
169
|
+
borderRadius: RADIUS.pill,
|
|
170
|
+
backgroundColor: theme.primary,
|
|
136
171
|
alignItems: "center",
|
|
137
172
|
justifyContent: "center"
|
|
138
173
|
},
|
|
139
174
|
goDisabled: {
|
|
140
175
|
opacity: 0.6
|
|
141
176
|
},
|
|
142
|
-
goLabel: {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
},
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
},
|
|
177
|
+
goLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
178
|
+
fontSize: 16,
|
|
179
|
+
color: theme.primaryForeground
|
|
180
|
+
}),
|
|
181
|
+
wait: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
182
|
+
color: theme.mutedForeground,
|
|
183
|
+
textAlign: "center",
|
|
184
|
+
marginTop: SPACE.xs
|
|
185
|
+
}),
|
|
152
186
|
notice: {
|
|
153
187
|
position: "absolute",
|
|
154
|
-
left:
|
|
155
|
-
right:
|
|
156
|
-
bottom:
|
|
188
|
+
left: SPACE.lg,
|
|
189
|
+
right: SPACE.lg,
|
|
190
|
+
bottom: SPACE.xl,
|
|
157
191
|
flexDirection: "row",
|
|
158
192
|
alignItems: "center",
|
|
159
|
-
gap:
|
|
160
|
-
paddingHorizontal:
|
|
161
|
-
paddingVertical:
|
|
162
|
-
borderRadius:
|
|
163
|
-
backgroundColor:
|
|
164
|
-
},
|
|
165
|
-
noticeText: {
|
|
166
|
-
flex: 1,
|
|
167
|
-
color: "#0f172a",
|
|
168
|
-
fontSize: 13
|
|
193
|
+
gap: SPACE.md,
|
|
194
|
+
paddingHorizontal: SPACE.lg,
|
|
195
|
+
paddingVertical: SPACE.md,
|
|
196
|
+
borderRadius: RADIUS.lg,
|
|
197
|
+
backgroundColor: theme.edInk
|
|
169
198
|
},
|
|
170
|
-
|
|
171
|
-
color: "#6C5CE7",
|
|
199
|
+
noticeText: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
172
200
|
fontSize: 13,
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
201
|
+
lineHeight: 18,
|
|
202
|
+
flex: 1,
|
|
203
|
+
color: theme.edOnInk
|
|
204
|
+
}),
|
|
205
|
+
noticeDismiss: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
206
|
+
color: theme.edOnInk,
|
|
207
|
+
textDecorationLine: "underline"
|
|
208
|
+
})
|
|
209
|
+
}));export{VideoClipsExperience};//# sourceMappingURL=VideoClipsExperience.js.map
|