@adminide-stack/yantra-mobile 12.0.125-alpha.0 → 12.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/canvas/AudioEditorExperience.js +207 -109
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +87 -72
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +494 -387
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js +78 -59
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +126 -84
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +108 -126
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +178 -166
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +119 -123
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +113 -89
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +79 -79
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +193 -128
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +106 -94
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +195 -127
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +163 -100
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +132 -69
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -1
- package/lib/features/canvas/ImageEditorExperience.js +278 -209
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/InfluencerStudioExperience.js +167 -125
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -1
- package/lib/features/canvas/MoodboardExperience.js +102 -85
- package/lib/features/canvas/MoodboardExperience.js.map +1 -1
- package/lib/features/canvas/NativeCanvasViewer.js +203 -192
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +125 -92
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +225 -143
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoClipsExperience.js +126 -92
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +154 -142
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +551 -492
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +284 -131
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +7 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +265 -0
- package/lib/features/canvas/canvasTheme.js.map +1 -0
- package/lib/features/canvas/canvasUi.js +381 -0
- package/lib/features/canvas/canvasUi.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -52
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/serverTasks.js +1 -1
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +8 -7
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -1
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +44 -41
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +50 -45
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +3 -2
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/formWidgets.js +116 -64
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -1
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +77 -63
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -1
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +95 -79
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +241 -160
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +300 -143
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +3 -2
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/webbuilderPrompts.js +2 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +120 -0
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +26 -4
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +110 -7
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasToolDock.js","sources":["../../../src/features/canvas/CanvasToolDock.tsx"],"sourcesContent":["/**\n * Phone chrome — native twin of canvas-surface `CanvasTabBar` + `CanvasToolSheet`.\n * The sheet is positioned inside the plane (flex-1), flush to its bottom, so\n * it sits on the tab bar. Keyboard open → tab bar hides, sheet lifts.\n */\nimport React, { useEffect, useRef, useState, type ReactNode } from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { useKeyboardLiftHeight } from '../../components/KeyboardComposerDock';\nimport { CanvasGeneratePanel, type GenerateLane } from './CanvasGeneratePanel';\nimport { CanvasEditToolsPanel } from './CanvasEditToolsPanel';\nimport { CanvasLibraryPanel } from './CanvasLibrarySheet';\nimport { CanvasLooksPanel } from './CanvasLooksPanel';\nimport { CanvasTasksPanel } from './CanvasTasksPanel';\nimport { LIBRARY_PICK, type LibraryPickTarget } from './generatorReferences';\nimport type { StillPickSource } from './GeneratorReferenceSlots';\nimport type { EditTool } from './editTools';\nimport {\n hydrateCanvasTasks,\n resumePromoTasks,\n runningTaskCount,\n subscribeCanvasTasks,\n type CanvasTask,\n} from './canvasTasks';\nimport type { CanvasItem } from './canvasCore';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport type { StudioLook } from './studioLooks';\nimport { nearestAspect } from './studioLooks';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type DockGenerateMode = GenerateLane;\nexport type DockStudio =\n | 'video'\n | 'agent'\n | 'influencer'\n | 'docs'\n | 'carousel'\n | 'flyers'\n | 'set3d'\n | 'moodboard'\n | 'frames';\ntype TabId = 'generate' | 'library' | 'media' | 'studios' | 'more';\ntype SheetId = 'generate' | 'library' | 'studios' | 'more' | 'media' | 'looks' | 'tasks';\ntype GeneratorTab = 'create' | 'edit';\nexport type MediaPickSource = 'library' | 'camera' | 'camera-video' | 'camera-photo' | 'file';\n\nconst TABS: ReadonlyArray<{ id: TabId; icon: IconName; label: string }> = [\n { id: 'generate', icon: 'creation', label: 'Generate' },\n { id: 'library', icon: 'image-outline', label: 'Library' },\n { id: 'media', icon: 'image-plus', label: 'Media' },\n { id: 'studios', icon: 'filmstrip', label: 'Studios' },\n { id: 'more', icon: 'dots-horizontal', label: 'More' },\n];\n\nconst UPLOAD_SOURCES: ReadonlyArray<{ id: MediaPickSource; icon: IconName; label: string }> = [\n { id: 'library', icon: 'image-multiple-outline', label: 'Photo Library' },\n { id: 'camera', icon: 'camera-outline', label: 'Take Photo or Video' },\n { id: 'file', icon: 'folder-outline', label: 'Choose File' },\n];\n\nconst STUDIOS: ReadonlyArray<{ id: DockStudio; icon: IconName; label: string }> = [\n { id: 'video', icon: 'movie-open-outline', label: 'Video' },\n { id: 'agent', icon: 'robot-outline', label: 'AI cut' },\n { id: 'influencer', icon: 'account-star-outline', label: 'Influencer' },\n { id: 'docs', icon: 'file-document-outline', label: 'Docs' },\n { id: 'carousel', icon: 'view-carousel-outline', label: 'Carousel' },\n { id: 'flyers', icon: 'printer-outline', label: 'Flyers' },\n { id: 'set3d', icon: 'cube-outline', label: '3D set' },\n { id: 'moodboard', icon: 'palette-outline', label: 'Moodboard' },\n { id: 'frames', icon: 'image-multiple-outline', label: 'Frames' },\n];\n\nexport function CanvasToolDock({\n children,\n busy,\n boards,\n boardId,\n runAction,\n seedItem,\n restyle,\n onUpload,\n onPlace,\n onStudio,\n onSlides,\n onGenerated,\n onPickStorage,\n onPromoDesigned,\n onEditReplaced,\n onEditVideo,\n onRecord,\n onPickDeviceStill,\n dockHidden = false,\n apolloClient,\n token,\n indexUrl,\n}: {\n children: ReactNode;\n busy: boolean;\n boards: CanvasBoardSummary[];\n boardId?: string | null;\n runAction?: RunMediaAction;\n seedItem?: CanvasItem | null;\n restyle?: boolean;\n onUpload: (source: MediaPickSource) => void;\n onPlace: (item: CanvasItem) => void;\n onStudio: (studio: DockStudio) => void;\n onSlides: () => void;\n onGenerated: (url: string, meta: { prompt: string; aspect: string; mode: GenerateLane }) => void;\n onPickStorage?: (kind: 'image' | 'video' | 'audio', url: string, name: string) => void;\n onPromoDesigned?: (designed: import('./promoVideo').DesignedPromo) => void;\n onEditReplaced?: (itemId: string, url: string) => void;\n onEditVideo?: (item: CanvasItem) => void;\n /** Phone Record: open the camera recorder studio (web screen share stays desktop-only). */\n onRecord?: (source?: MediaPickSource) => void;\n /** A generator reference slot's \"Device\" source: pick a still and return a hosted URL. */\n onPickDeviceStill?: () => Promise<string | null>;\n dockHidden?: boolean;\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n token?: string | null;\n indexUrl?: string | null;\n}) {\n const insets = useSafeAreaInsets();\n const keyboardHeight = useKeyboardLiftHeight();\n const hideTabs = dockHidden || keyboardHeight > 40;\n const [planeH, setPlaneH] = useState(0);\n const [sheet, setSheet] = useState<SheetId | null>(null);\n const [lookSeed, setLookSeed] = useState<{ prompt: string; aspect?: string } | null>(null);\n const [taskBadge, setTaskBadge] = useState(0);\n const [generatorTab, setGeneratorTab] = useState<GeneratorTab>('create');\n // Web `lastEditTool`: Edit reopens on the tool you used last.\n const lastEditTool = useRef<EditTool | null>(null);\n const [libraryPick, setLibraryPick] = useState<{\n target: LibraryPickTarget;\n resolve: (url: string | null) => void;\n reject: (err: Error) => void;\n } | null>(null);\n useEffect(() => {\n if (sheet !== 'generate' && libraryPick) {\n libraryPick.resolve(null);\n setLibraryPick(null);\n }\n }, [sheet, libraryPick]);\n useEffect(() => {\n if (dockHidden) setSheet(null);\n }, [dockHidden]);\n useEffect(() => {\n void hydrateCanvasTasks().then(() => setTaskBadge(runningTaskCount()));\n const unsub = subscribeCanvasTasks(() => setTaskBadge(runningTaskCount()));\n return unsub;\n }, []);\n useEffect(() => {\n if (runAction) resumePromoTasks(runAction);\n }, [runAction]);\n const chromeH = 48;\n const usable = Math.max(0, planeH - chromeH);\n const sheetTop = hideTabs\n ? Math.max(8, Math.round(usable * 0.08))\n : planeH > 0\n ? chromeH + Math.round(usable * 0.28)\n : chromeH;\n\n const onTab = (id: TabId) => {\n const mapped: SheetId = id;\n setSheet((current) => (current === mapped ? null : mapped));\n };\n\n /** A generator slot asks for a still: the library opens over the sheet in pick mode, or the device picker. */\n const pickStill = (target: LibraryPickTarget, source: StillPickSource): Promise<string | null> => {\n if (source === 'device') {\n return onPickDeviceStill\n ? onPickDeviceStill()\n : Promise.reject(new Error('This host has no device picker'));\n }\n return new Promise((resolve, reject) => setLibraryPick({ target, resolve, reject }));\n };\n const takeFromLibrary = (kind: string, url: string) => {\n const pick = libraryPick;\n setLibraryPick(null);\n if (!pick) return;\n if (kind !== 'image') pick.reject(new Error('That slot takes an image'));\n else pick.resolve(url);\n };\n\n const title =\n sheet === 'generate'\n ? 'Generate'\n : sheet === 'library'\n ? null\n : sheet === 'media'\n ? null\n : sheet === 'studios'\n ? 'Studios'\n : sheet === 'looks'\n ? null\n : sheet === 'tasks'\n ? null\n : 'More';\n\n const recreateLook = (look: StudioLook) => {\n const aspect = nearestAspect(look.aspect, ['16:9', '9:16', '1:1']);\n setLookSeed({ prompt: look.prompt, ...(aspect ? { aspect } : {}) });\n setSheet('generate');\n };\n\n const placeTask = (task: CanvasTask) => {\n const url = task.result?.url;\n if (!url) return;\n onGenerated(url, { prompt: task.brief || task.title, aspect: '16:9', mode: 'promo' });\n setSheet(null);\n };\n\n return (\n <View style={styles.root}>\n <View style={styles.plane} collapsable={false} onLayout={(e) => setPlaneH(e.nativeEvent.layout.height)}>\n {children}\n {sheet ? (\n <>\n <Pressable\n style={[styles.backdrop, { top: chromeH }]}\n onPress={() => setSheet(null)}\n accessibilityLabel=\"Close tools\"\n />\n <View\n style={[\n styles.sheet,\n {\n top: sheetTop,\n bottom: hideTabs ? keyboardHeight : 0,\n },\n ]}\n >\n <View style={styles.handle} />\n {title ? <Text style={styles.sheetTitle}>{title}</Text> : null}\n {sheet === 'generate' ? (\n <>\n <View style={styles.segment} accessibilityLabel=\"Create or edit\">\n {(['create', 'edit'] as const).map((id) => (\n <Pressable\n key={id}\n onPress={() => setGeneratorTab(id)}\n style={[styles.segmentTab, generatorTab === id && styles.segmentTabOn]}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: generatorTab === id }}\n >\n <Text\n style={[\n styles.segmentLabel,\n generatorTab === id && styles.segmentLabelOn,\n ]}\n >\n {id === 'create' ? 'Create' : 'Edit'}\n </Text>\n </Pressable>\n ))}\n </View>\n {generatorTab === 'edit' ? (\n seedItem && (seedItem.type === 'image' || seedItem.type === 'video') ? (\n <ScrollView keyboardShouldPersistTaps=\"handled\">\n <CanvasEditToolsPanel\n key={seedItem.id}\n item={seedItem}\n runAction={runAction}\n showTitle={false}\n initialTool={lastEditTool.current}\n onToolChange={(tool) => {\n if (tool) lastEditTool.current = tool;\n }}\n onReplaced={(url) => {\n onEditReplaced?.(seedItem.id, url);\n }}\n onEditVideo={() => {\n setSheet(null);\n onEditVideo?.(seedItem);\n }}\n />\n </ScrollView>\n ) : (\n <Text style={styles.hint}>\n Select an image or video on the board to edit.\n </Text>\n )\n ) : null}\n {/* Create stays mounted under Edit and the library picker so its state survives. */}\n <View style={generatorTab === 'create' ? styles.fill : styles.hidden}>\n <CanvasGeneratePanel\n runAction={runAction}\n seedItem={seedItem}\n restyle={restyle}\n lookSeed={lookSeed}\n boardId={boardId}\n pickStill={pickStill}\n onSlides={() => {\n setSheet(null);\n onSlides();\n }}\n onGenerated={(url, meta) => {\n onGenerated(url, meta);\n if (meta.mode !== 'clips') setSheet(null);\n }}\n onPromoDesigned={(designed) => {\n setSheet(null);\n onPromoDesigned?.(designed);\n }}\n onPromoQueued={() => {\n setSheet('tasks');\n }}\n />\n </View>\n {libraryPick ? (\n <View style={styles.pickLayer}>\n <CanvasLibraryPanel\n title={LIBRARY_PICK[libraryPick.target].title}\n boards={boards}\n boardId={null}\n runAction={runAction}\n onClose={() => {\n libraryPick.resolve(null);\n setLibraryPick(null);\n }}\n onPlace={(item) => takeFromLibrary(item.type, item.src)}\n onPickStorage={(kind, url) => takeFromLibrary(kind, url)}\n />\n </View>\n ) : null}\n </>\n ) : null}\n {sheet === 'library' ? (\n <CanvasLibraryPanel\n title=\"Your library\"\n boards={boards}\n boardId={null}\n runAction={runAction}\n onClose={() => setSheet(null)}\n onPlace={(item) => {\n onPlace(item);\n setSheet(null);\n }}\n onPickStorage={(kind, url, name) => {\n onPickStorage?.(kind, url, name);\n setSheet(null);\n }}\n />\n ) : null}\n {sheet === 'media' ? (\n <>\n {/* Web Media panel: upload sources on top, this board's media below. */}\n <View style={styles.uploadStrip}>\n {UPLOAD_SOURCES.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => {\n setSheet(null);\n onUpload(item.id);\n }}\n disabled={busy}\n style={[styles.uploadTile, busy && styles.tabMuted]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name={item.icon} size={20} color=\"#0f172a\" />\n <Text style={styles.uploadTileLabel} numberOfLines={1}>\n {item.label}\n </Text>\n </Pressable>\n ))}\n </View>\n <CanvasLibraryPanel\n title=\"On this board\"\n boards={boards}\n boardId={boardId}\n runAction={runAction}\n onClose={() => setSheet(null)}\n onPlace={(item) => {\n onPlace(item);\n setSheet(null);\n }}\n onPickStorage={(kind, url, name) => {\n onPickStorage?.(kind, url, name);\n setSheet(null);\n }}\n />\n </>\n ) : null}\n {sheet === 'studios'\n ? STUDIOS.map((studio) => (\n <Pressable\n key={studio.id}\n onPress={() => {\n setSheet(null);\n onStudio(studio.id);\n }}\n style={styles.row}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name={studio.icon} size={20} color=\"#0f172a\" />\n <Text style={styles.rowLabel}>{studio.label}</Text>\n </Pressable>\n ))\n : null}\n {sheet === 'more' ? (\n <>\n <Pressable\n onPress={() => setSheet('looks')}\n style={styles.row}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"movie-filter-outline\" size={20} color=\"#0f172a\" />\n <Text style={styles.rowLabel}>Looks</Text>\n </Pressable>\n <Pressable\n onPress={() => setSheet('tasks')}\n style={styles.row}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"playlist-check\" size={20} color=\"#0f172a\" />\n <Text style={styles.rowLabel}>Tasks</Text>\n {taskBadge > 0 ? (\n <View style={styles.badge}>\n <Text style={styles.badgeLabel}>{taskBadge}</Text>\n </View>\n ) : null}\n </Pressable>\n <Pressable\n onPress={() => {\n setSheet(null);\n onRecord?.('camera-video');\n }}\n style={styles.row}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons\n name=\"record-circle-outline\"\n size={20}\n color=\"#0f172a\"\n />\n <Text style={styles.rowLabel}>Record</Text>\n </Pressable>\n </>\n ) : null}\n {sheet === 'looks' ? (\n <CanvasLooksPanel\n runAction={runAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n onRecreate={recreateLook}\n onClose={() => setSheet(null)}\n />\n ) : null}\n {sheet === 'tasks' ? (\n <CanvasTasksPanel onClose={() => setSheet(null)} onPlaceResult={placeTask} />\n ) : null}\n </View>\n </>\n ) : null}\n </View>\n {hideTabs ? null : (\n <View style={[styles.tabBar, { paddingBottom: Math.max(insets.bottom, 8) }]}>\n {TABS.map((tab) => {\n const active =\n sheet === tab.id ||\n (tab.id === 'more' && (sheet === 'more' || sheet === 'looks' || sheet === 'tasks'));\n const disabled = false;\n return (\n <Pressable\n key={tab.id}\n onPress={() => onTab(tab.id)}\n disabled={disabled}\n accessibilityRole=\"button\"\n accessibilityLabel={tab.label}\n style={[styles.tab, active && styles.tabOn, disabled && styles.tabMuted]}\n >\n <View>\n <MaterialCommunityIcons\n name={tab.icon}\n size={18}\n color={active ? '#0f172a' : '#64748b'}\n />\n {tab.id === 'more' && taskBadge > 0 ? (\n <View style={styles.tabBadge}>\n <Text style={styles.tabBadgeLabel}>{taskBadge}</Text>\n </View>\n ) : null}\n </View>\n <Text style={[styles.tabLabel, active && styles.tabLabelOn]}>{tab.label}</Text>\n </Pressable>\n );\n })}\n </View>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1 },\n fill: { flex: 1 },\n hidden: { display: 'none' },\n hint: { padding: 16, fontSize: 13, color: '#64748b' },\n segment: {\n flexDirection: 'row',\n gap: 2,\n marginHorizontal: 16,\n marginBottom: 10,\n padding: 3,\n borderRadius: 999,\n backgroundColor: '#f1f5f9',\n },\n segmentTab: { flex: 1, alignItems: 'center', paddingVertical: 6, borderRadius: 999 },\n segmentTabOn: {\n backgroundColor: '#ffffff',\n shadowColor: '#0f172a',\n shadowOpacity: 0.08,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 1 },\n elevation: 1,\n },\n segmentLabel: { fontSize: 13, fontWeight: '600', color: '#64748b' },\n segmentLabelOn: { color: '#0f172a' },\n pickLayer: { ...StyleSheet.absoluteFillObject, zIndex: 5, backgroundColor: '#ffffff' },\n uploadStrip: { flexDirection: 'row', gap: 8, paddingHorizontal: 16, paddingBottom: 8 },\n uploadTile: {\n flex: 1,\n alignItems: 'center',\n gap: 4,\n paddingVertical: 10,\n borderRadius: 12,\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: '#cbd5e1',\n },\n uploadTileLabel: { fontSize: 11, fontWeight: '600', color: '#334155' },\n plane: { flex: 1, overflow: 'hidden' },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 10,\n backgroundColor: 'rgba(15,23,42,0.2)',\n },\n sheet: {\n position: 'absolute',\n left: 0,\n right: 0,\n zIndex: 15,\n flex: 0,\n flexDirection: 'column',\n overflow: 'hidden',\n borderTopLeftRadius: 18,\n borderTopRightRadius: 18,\n backgroundColor: '#ffffff',\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: '#e2e8f0',\n shadowColor: '#0f172a',\n shadowOpacity: 0.12,\n shadowRadius: 20,\n shadowOffset: { width: 0, height: -4 },\n elevation: 8,\n },\n handle: {\n alignSelf: 'center',\n width: 36,\n height: 4,\n borderRadius: 2,\n backgroundColor: '#e2e8f0',\n marginTop: 8,\n marginBottom: 4,\n },\n sheetTitle: {\n fontSize: 16,\n fontWeight: '700',\n color: '#0f172a',\n paddingHorizontal: 16,\n paddingBottom: 8,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingHorizontal: 16,\n paddingVertical: 12,\n },\n rowMuted: { opacity: 0.45 },\n rowLabel: { fontSize: 15, fontWeight: '500', color: '#0f172a' },\n rowLabelMuted: { fontSize: 15, fontWeight: '500', color: '#94a3b8' },\n tabBar: {\n flexDirection: 'row',\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: '#e2e8f0',\n backgroundColor: '#ffffff',\n paddingTop: 6,\n paddingHorizontal: 4,\n zIndex: 20,\n },\n tab: {\n flex: 1,\n alignItems: 'center',\n gap: 2,\n paddingVertical: 4,\n borderRadius: 12,\n },\n tabOn: { backgroundColor: '#f1f5f9' },\n tabMuted: { opacity: 0.45 },\n tabLabel: { fontSize: 9.5, fontWeight: '600', color: '#64748b' },\n tabLabelOn: { color: '#0f172a' },\n badge: {\n marginLeft: 'auto',\n minWidth: 18,\n height: 18,\n borderRadius: 9,\n backgroundColor: '#ea580c',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 5,\n },\n badgeLabel: { fontSize: 10, fontWeight: '700', color: '#fff7ed' },\n tabBadge: {\n position: 'absolute',\n top: -4,\n right: -8,\n minWidth: 14,\n height: 14,\n borderRadius: 7,\n backgroundColor: '#ea580c',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 3,\n },\n tabBadgeLabel: { fontSize: 9, fontWeight: '700', color: '#fff7ed' },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasToolDock.js","sources":["../../../src/features/canvas/CanvasToolDock.tsx"],"sourcesContent":["/**\n * Phone chrome — native twin of canvas-surface `CanvasTabBar` + `CanvasToolSheet`.\n * The sheet is positioned inside the plane (flex-1), flush to its bottom, so\n * it sits on the tab bar. Keyboard open → tab bar hides, sheet lifts.\n */\nimport React, { type ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport { ScrollView, StyleSheet, Text, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { useKeyboardLiftHeight } from '../../components/KeyboardComposerDock';\nimport { CanvasGeneratePanel, type GenerateLane } from './CanvasGeneratePanel';\nimport { CanvasEditToolsPanel } from './CanvasEditToolsPanel';\nimport { CanvasLibraryPanel } from './CanvasLibrarySheet';\nimport { CanvasLooksPanel } from './CanvasLooksPanel';\nimport { CanvasTasksPanel } from './CanvasTasksPanel';\nimport { LIBRARY_PICK, type LibraryPickTarget } from './generatorReferences';\nimport type { StillPickSource } from './GeneratorReferenceSlots';\nimport type { EditTool } from './editTools';\nimport {\n hydrateCanvasTasks,\n resumePromoTasks,\n runningTaskCount,\n subscribeCanvasTasks,\n type CanvasTask,\n} from './canvasTasks';\nimport type { CanvasItem } from './canvasCore';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport type { StudioLook } from './studioLooks';\nimport { nearestAspect } from './studioLooks';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type DockGenerateMode = GenerateLane;\nexport type DockStudio =\n | 'video'\n | 'agent'\n | 'influencer'\n | 'docs'\n | 'carousel'\n | 'flyers'\n | 'set3d'\n | 'moodboard'\n | 'frames';\ntype TabId = 'generate' | 'library' | 'media' | 'studios' | 'more';\ntype SheetId = 'generate' | 'library' | 'studios' | 'more' | 'media' | 'looks' | 'tasks';\ntype GeneratorTab = 'create' | 'edit';\nexport type MediaPickSource = 'library' | 'camera' | 'camera-video' | 'camera-photo' | 'file';\n\nconst TABS: ReadonlyArray<{ id: TabId; icon: IconName; label: string }> = [\n { id: 'generate', icon: 'creation', label: 'Generate' },\n { id: 'library', icon: 'image-outline', label: 'Library' },\n { id: 'media', icon: 'image-plus', label: 'Media' },\n { id: 'studios', icon: 'filmstrip', label: 'Studios' },\n { id: 'more', icon: 'dots-horizontal', label: 'More' },\n];\n\nconst UPLOAD_SOURCES: ReadonlyArray<{ id: MediaPickSource; icon: IconName; label: string }> = [\n { id: 'library', icon: 'image-multiple-outline', label: 'Photo Library' },\n { id: 'camera', icon: 'camera-outline', label: 'Take Photo or Video' },\n { id: 'file', icon: 'folder-outline', label: 'Choose File' },\n];\n\nconst STUDIOS: ReadonlyArray<{ id: DockStudio; icon: IconName; label: string }> = [\n { id: 'video', icon: 'movie-open-outline', label: 'Video' },\n { id: 'agent', icon: 'robot-outline', label: 'AI cut' },\n { id: 'influencer', icon: 'account-star-outline', label: 'Influencer' },\n { id: 'docs', icon: 'file-document-outline', label: 'Docs' },\n { id: 'carousel', icon: 'view-carousel-outline', label: 'Carousel' },\n { id: 'flyers', icon: 'printer-outline', label: 'Flyers' },\n { id: 'set3d', icon: 'cube-outline', label: '3D set' },\n { id: 'moodboard', icon: 'palette-outline', label: 'Moodboard' },\n { id: 'frames', icon: 'image-multiple-outline', label: 'Frames' },\n];\n\nexport function CanvasToolDock({\n children,\n busy,\n boards,\n boardId,\n runAction,\n seedItem,\n restyle,\n onUpload,\n onPlace,\n onStudio,\n onSlides,\n onGenerated,\n onPickStorage,\n onPromoDesigned,\n onEditReplaced,\n onEditVideo,\n onRecord,\n onPickDeviceStill,\n dockHidden = false,\n apolloClient,\n token,\n indexUrl,\n}: {\n children: ReactNode;\n busy: boolean;\n boards: CanvasBoardSummary[];\n boardId?: string | null;\n runAction?: RunMediaAction;\n seedItem?: CanvasItem | null;\n restyle?: boolean;\n onUpload: (source: MediaPickSource) => void;\n onPlace: (item: CanvasItem) => void;\n onStudio: (studio: DockStudio) => void;\n onSlides: () => void;\n onGenerated: (url: string, meta: { prompt: string; aspect: string; mode: GenerateLane }) => void;\n onPickStorage?: (kind: 'image' | 'video' | 'audio', url: string, name: string) => void;\n onPromoDesigned?: (designed: import('./promoVideo').DesignedPromo) => void;\n onEditReplaced?: (itemId: string, url: string) => void;\n onEditVideo?: (item: CanvasItem) => void;\n /** Phone Record: open the camera recorder studio (web screen share stays desktop-only). */\n onRecord?: (source?: MediaPickSource) => void;\n /** A generator reference slot's \"Device\" source: pick a still and return a hosted URL. */\n onPickDeviceStill?: () => Promise<string | null>;\n dockHidden?: boolean;\n apolloClient?: import('./useStudioCatalogTemplates').StudioCatalogClient | null;\n token?: string | null;\n indexUrl?: string | null;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const insets = useSafeAreaInsets();\n const keyboardHeight = useKeyboardLiftHeight();\n const hideTabs = dockHidden || keyboardHeight > 40;\n const [planeH, setPlaneH] = useState(0);\n const [sheet, setSheet] = useState<SheetId | null>(null);\n const [lookSeed, setLookSeed] = useState<{ prompt: string; aspect?: string } | null>(null);\n const [taskBadge, setTaskBadge] = useState(0);\n const [generatorTab, setGeneratorTab] = useState<GeneratorTab>('create');\n // Web `lastEditTool`: Edit reopens on the tool you used last.\n const lastEditTool = useRef<EditTool | null>(null);\n const [libraryPick, setLibraryPick] = useState<{\n target: LibraryPickTarget;\n resolve: (url: string | null) => void;\n reject: (err: Error) => void;\n } | null>(null);\n useEffect(() => {\n if (sheet !== 'generate' && libraryPick) {\n libraryPick.resolve(null);\n setLibraryPick(null);\n }\n }, [sheet, libraryPick]);\n useEffect(() => {\n if (dockHidden) setSheet(null);\n }, [dockHidden]);\n useEffect(() => {\n void hydrateCanvasTasks().then(() => setTaskBadge(runningTaskCount()));\n const unsub = subscribeCanvasTasks(() => setTaskBadge(runningTaskCount()));\n return unsub;\n }, []);\n useEffect(() => {\n if (runAction) resumePromoTasks(runAction);\n }, [runAction]);\n const chromeH = 48;\n const usable = Math.max(0, planeH - chromeH);\n const sheetTop = hideTabs\n ? Math.max(8, Math.round(usable * 0.08))\n : planeH > 0\n ? chromeH + Math.round(usable * 0.28)\n : chromeH;\n\n const onTab = (id: TabId) => {\n const mapped: SheetId = id;\n setSheet((current) => (current === mapped ? null : mapped));\n };\n\n /** A generator slot asks for a still: the library opens over the sheet in pick mode, or the device picker. */\n const pickStill = (target: LibraryPickTarget, source: StillPickSource): Promise<string | null> => {\n if (source === 'device') {\n return onPickDeviceStill\n ? onPickDeviceStill()\n : Promise.reject(new Error('This host has no device picker'));\n }\n return new Promise((resolve, reject) => setLibraryPick({ target, resolve, reject }));\n };\n const takeFromLibrary = (kind: string, url: string) => {\n const pick = libraryPick;\n setLibraryPick(null);\n if (!pick) return;\n if (kind !== 'image') pick.reject(new Error('That slot takes an image'));\n else pick.resolve(url);\n };\n\n const title =\n sheet === 'generate'\n ? 'Generate'\n : sheet === 'library'\n ? null\n : sheet === 'media'\n ? null\n : sheet === 'studios'\n ? 'Studios'\n : sheet === 'looks'\n ? null\n : sheet === 'tasks'\n ? null\n : 'More';\n\n const recreateLook = (look: StudioLook) => {\n const aspect = nearestAspect(look.aspect, ['16:9', '9:16', '1:1']);\n setLookSeed({ prompt: look.prompt, ...(aspect ? { aspect } : {}) });\n setSheet('generate');\n };\n\n const placeTask = (task: CanvasTask) => {\n const url = task.result?.url;\n if (!url) return;\n onGenerated(url, { prompt: task.brief || task.title, aspect: '16:9', mode: 'promo' });\n setSheet(null);\n };\n\n return (\n <View style={styles.root}>\n <View style={styles.plane} collapsable={false} onLayout={(e) => setPlaneH(e.nativeEvent.layout.height)}>\n {children}\n {sheet ? (\n <>\n <Pressable\n style={[styles.backdrop, { top: chromeH }]}\n onPress={() => setSheet(null)}\n accessibilityLabel=\"Close tools\"\n />\n <View\n style={[\n styles.sheet,\n {\n top: sheetTop,\n bottom: hideTabs ? keyboardHeight : 0,\n },\n ]}\n >\n <View style={styles.handle} />\n {title ? (\n <Text style={styles.sheetTitle} accessibilityRole=\"header\">\n {title}\n </Text>\n ) : null}\n {sheet === 'generate' ? (\n <>\n <View style={styles.segment} accessibilityLabel=\"Create or edit\">\n {(['create', 'edit'] as const).map((id) => (\n <Pressable\n key={id}\n onPress={() => setGeneratorTab(id)}\n style={({ pressed }) => [\n styles.segmentTab,\n generatorTab === id && styles.segmentTabOn,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: generatorTab === id }}\n >\n <Text\n style={[\n styles.segmentLabel,\n generatorTab === id && styles.segmentLabelOn,\n ]}\n >\n {id === 'create' ? 'Create' : 'Edit'}\n </Text>\n </Pressable>\n ))}\n </View>\n {generatorTab === 'edit' ? (\n seedItem && (seedItem.type === 'image' || seedItem.type === 'video') ? (\n <ScrollView keyboardShouldPersistTaps=\"handled\">\n <CanvasEditToolsPanel\n key={seedItem.id}\n item={seedItem}\n runAction={runAction}\n showTitle={false}\n initialTool={lastEditTool.current}\n onToolChange={(tool) => {\n if (tool) lastEditTool.current = tool;\n }}\n onReplaced={(url) => {\n onEditReplaced?.(seedItem.id, url);\n }}\n onEditVideo={() => {\n setSheet(null);\n onEditVideo?.(seedItem);\n }}\n />\n </ScrollView>\n ) : (\n <Text style={styles.hint}>\n Select an image or video on the board to edit.\n </Text>\n )\n ) : null}\n {/* Create stays mounted under Edit and the library picker so its state survives. */}\n <View style={generatorTab === 'create' ? styles.fill : styles.hidden}>\n <CanvasGeneratePanel\n runAction={runAction}\n seedItem={seedItem}\n restyle={restyle}\n lookSeed={lookSeed}\n boardId={boardId}\n pickStill={pickStill}\n onSlides={() => {\n setSheet(null);\n onSlides();\n }}\n onGenerated={(url, meta) => {\n onGenerated(url, meta);\n if (meta.mode !== 'clips') setSheet(null);\n }}\n onPromoDesigned={(designed) => {\n setSheet(null);\n onPromoDesigned?.(designed);\n }}\n onPromoQueued={() => {\n setSheet('tasks');\n }}\n />\n </View>\n {libraryPick ? (\n <View style={styles.pickLayer}>\n <CanvasLibraryPanel\n title={LIBRARY_PICK[libraryPick.target].title}\n boards={boards}\n boardId={null}\n runAction={runAction}\n onClose={() => {\n libraryPick.resolve(null);\n setLibraryPick(null);\n }}\n onPlace={(item) => takeFromLibrary(item.type, item.src)}\n onPickStorage={(kind, url) => takeFromLibrary(kind, url)}\n />\n </View>\n ) : null}\n </>\n ) : null}\n {sheet === 'library' ? (\n <CanvasLibraryPanel\n title=\"Your library\"\n boards={boards}\n boardId={null}\n runAction={runAction}\n onClose={() => setSheet(null)}\n onPlace={(item) => {\n onPlace(item);\n setSheet(null);\n }}\n onPickStorage={(kind, url, name) => {\n onPickStorage?.(kind, url, name);\n setSheet(null);\n }}\n />\n ) : null}\n {sheet === 'media' ? (\n <>\n {/* Web Media panel: upload sources on top, this board's media below. */}\n <View style={styles.uploadStrip}>\n {UPLOAD_SOURCES.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => {\n setSheet(null);\n onUpload(item.id);\n }}\n disabled={busy}\n style={({ pressed }) => [\n styles.uploadTile,\n busy && styles.tabMuted,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons\n name={item.icon}\n size={22}\n color={theme.foreground}\n />\n <Text style={styles.uploadTileLabel} numberOfLines={2}>\n {item.label}\n </Text>\n </Pressable>\n ))}\n </View>\n <CanvasLibraryPanel\n title=\"On this board\"\n boards={boards}\n boardId={boardId}\n runAction={runAction}\n onClose={() => setSheet(null)}\n onPlace={(item) => {\n onPlace(item);\n setSheet(null);\n }}\n onPickStorage={(kind, url, name) => {\n onPickStorage?.(kind, url, name);\n setSheet(null);\n }}\n />\n </>\n ) : null}\n {sheet === 'studios' ? (\n <ScrollView contentContainerStyle={styles.studioGrid}>\n {STUDIOS.map((studio) => (\n <Pressable\n key={studio.id}\n onPress={() => {\n setSheet(null);\n onStudio(studio.id);\n }}\n style={({ pressed }) => [styles.studioTile, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <View style={styles.studioIcon}>\n <MaterialCommunityIcons\n name={studio.icon}\n size={22}\n color={theme.foreground}\n />\n </View>\n <Text style={styles.studioLabel} numberOfLines={1}>\n {studio.label}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n ) : null}\n {sheet === 'more' ? (\n <>\n <Pressable\n onPress={() => setSheet('looks')}\n style={({ pressed }) => [styles.row, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons\n name=\"movie-filter-outline\"\n size={20}\n color={theme.foreground}\n />\n <Text style={styles.rowLabel}>Looks</Text>\n </Pressable>\n <Pressable\n onPress={() => setSheet('tasks')}\n style={({ pressed }) => [styles.row, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons\n name=\"playlist-check\"\n size={20}\n color={theme.foreground}\n />\n <Text style={styles.rowLabel}>Tasks</Text>\n {taskBadge > 0 ? (\n <View style={styles.badge}>\n <Text style={styles.badgeLabel}>{taskBadge}</Text>\n </View>\n ) : null}\n </Pressable>\n <Pressable\n onPress={() => {\n setSheet(null);\n onRecord?.('camera-video');\n }}\n style={({ pressed }) => [styles.row, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons\n name=\"record-circle-outline\"\n size={20}\n color={theme.foreground}\n />\n <Text style={styles.rowLabel}>Record</Text>\n </Pressable>\n </>\n ) : null}\n {sheet === 'looks' ? (\n <CanvasLooksPanel\n runAction={runAction}\n apolloClient={apolloClient}\n token={token}\n indexUrl={indexUrl}\n onRecreate={recreateLook}\n onClose={() => setSheet(null)}\n />\n ) : null}\n {sheet === 'tasks' ? (\n <CanvasTasksPanel onClose={() => setSheet(null)} onPlaceResult={placeTask} />\n ) : null}\n </View>\n </>\n ) : null}\n </View>\n {hideTabs ? null : (\n <View style={[styles.tabDock, { paddingBottom: Math.max(insets.bottom, SPACE.sm) }]}>\n <View style={styles.tabBar}>\n {TABS.map((tab) => {\n const active =\n sheet === tab.id ||\n (tab.id === 'more' && (sheet === 'more' || sheet === 'looks' || sheet === 'tasks'));\n const disabled = false;\n return (\n <Pressable\n key={tab.id}\n onPress={() => onTab(tab.id)}\n disabled={disabled}\n accessibilityRole=\"button\"\n accessibilityLabel={tab.label}\n style={({ pressed }) => [\n styles.tab,\n disabled && styles.tabMuted,\n pressedStyle(pressed),\n ]}\n >\n <View style={[styles.tabIcon, active && styles.tabOn]}>\n <MaterialCommunityIcons\n name={tab.icon}\n size={20}\n color={active ? theme.foreground : theme.mutedForeground}\n />\n {tab.id === 'more' && taskBadge > 0 ? (\n <View style={styles.tabBadge}>\n <Text style={styles.tabBadgeLabel}>{taskBadge}</Text>\n </View>\n ) : null}\n </View>\n <Text style={[styles.tabLabel, active && styles.tabLabelOn]} numberOfLines={1}>\n {tab.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n )}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.background },\n fill: { flex: 1 },\n hidden: { display: 'none' },\n hint: {\n ...TYPE.body,\n fontSize: 14,\n color: theme.mutedForeground,\n paddingHorizontal: SPACE.lg + 4,\n paddingVertical: SPACE.xl,\n textAlign: 'center',\n },\n segment: {\n flexDirection: 'row',\n gap: 2,\n marginHorizontal: SPACE.lg + 4,\n marginBottom: SPACE.md,\n padding: 3,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n segmentTab: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 36,\n borderRadius: RADIUS.pill,\n },\n segmentTabOn: {\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0 : 0.08,\n shadowRadius: 4,\n shadowOffset: { width: 0, height: 1 },\n elevation: theme.isDark ? 0 : 1,\n },\n segmentLabel: { ...TYPE.label, color: theme.mutedForeground },\n segmentLabelOn: { color: theme.foreground },\n pickLayer: { ...StyleSheet.absoluteFillObject, zIndex: 5, backgroundColor: theme.surface },\n uploadStrip: {\n flexDirection: 'row',\n gap: SPACE.sm,\n paddingHorizontal: SPACE.lg + 4,\n paddingTop: SPACE.xs,\n paddingBottom: SPACE.md,\n },\n uploadTile: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm - 2,\n minHeight: 76,\n paddingHorizontal: SPACE.sm,\n paddingVertical: SPACE.md,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.card,\n },\n uploadTileLabel: { ...TYPE.caption, textAlign: 'center', color: theme.foreground },\n plane: { flex: 1, overflow: 'hidden' },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 10,\n backgroundColor: theme.isDark ? 'rgba(0,0,0,0.45)' : 'rgba(10,10,10,0.22)',\n },\n sheet: {\n position: 'absolute',\n left: 0,\n right: 0,\n zIndex: 15,\n flex: 0,\n flexDirection: 'column',\n overflow: 'hidden',\n borderTopLeftRadius: RADIUS.xl + 4,\n borderTopRightRadius: RADIUS.xl + 4,\n backgroundColor: theme.surface,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0.4 : 0.1,\n shadowRadius: 24,\n shadowOffset: { width: 0, height: -6 },\n elevation: 12,\n },\n handle: {\n alignSelf: 'center',\n width: 40,\n height: 5,\n borderRadius: 3,\n backgroundColor: theme.borderStrong,\n marginTop: SPACE.sm,\n marginBottom: SPACE.sm,\n },\n sheetTitle: {\n ...TYPE.title,\n color: theme.foreground,\n paddingHorizontal: SPACE.lg + 4,\n paddingTop: SPACE.xs,\n paddingBottom: SPACE.md,\n },\n studioGrid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: SPACE.sm,\n paddingHorizontal: SPACE.lg + 4,\n paddingBottom: SPACE.xl,\n },\n studioTile: {\n width: '31.5%',\n flexGrow: 1,\n alignItems: 'center',\n gap: SPACE.sm,\n paddingVertical: SPACE.lg,\n paddingHorizontal: SPACE.sm,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.card,\n },\n studioIcon: {\n width: 44,\n height: 44,\n borderRadius: 22,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.isDark ? theme.secondary : theme.surface,\n },\n studioLabel: { ...TYPE.label, color: theme.foreground },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md + 2,\n minHeight: HIT + 8,\n marginHorizontal: SPACE.md,\n paddingHorizontal: SPACE.sm + 2,\n borderRadius: RADIUS.md,\n },\n rowMuted: { opacity: 0.45 },\n rowLabel: { ...TYPE.body, fontWeight: '500', color: theme.foreground },\n rowLabelMuted: { ...TYPE.body, fontWeight: '500', color: theme.mutedForeground },\n tabDock: {\n paddingHorizontal: SPACE.md,\n paddingTop: SPACE.sm,\n backgroundColor: theme.background,\n zIndex: 20,\n },\n tabBar: {\n flexDirection: 'row',\n alignItems: 'center',\n padding: SPACE.xs + 2,\n borderRadius: RADIUS.xl + 4,\n backgroundColor: theme.isDark ? theme.card : theme.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n shadowColor: '#000',\n shadowOpacity: theme.isDark ? 0.35 : 0.08,\n shadowRadius: 16,\n shadowOffset: { width: 0, height: 4 },\n elevation: 6,\n },\n tab: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n gap: 3,\n minHeight: HIT + 8,\n paddingVertical: SPACE.xs,\n },\n tabIcon: {\n width: 48,\n height: 28,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n },\n tabOn: { backgroundColor: theme.isDark ? theme.secondary : theme.card },\n tabMuted: { opacity: 0.45 },\n tabLabel: { fontSize: 11, lineHeight: 14, fontWeight: '500', color: theme.mutedForeground },\n tabLabelOn: { fontWeight: '600', color: theme.foreground },\n badge: {\n marginLeft: 'auto',\n minWidth: 22,\n height: 22,\n borderRadius: 11,\n backgroundColor: theme.primary,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 6,\n },\n badgeLabel: { fontSize: 12, fontWeight: '700', color: theme.primaryForeground },\n tabBadge: {\n position: 'absolute',\n top: -2,\n right: 4,\n minWidth: 16,\n height: 16,\n borderRadius: 8,\n backgroundColor: theme.primary,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 4,\n },\n tabBadgeLabel: { fontSize: 10, fontWeight: '700', color: theme.primaryForeground },\n }),\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {useMemo,useState,useCallback}from'react';import {
|
|
1
|
+
import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {useMemo,useState,useCallback}from'react';import {useWindowDimensions,View,Text,FlatList,ActivityIndicator,Image,StyleSheet,Share}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {useSafeAreaInsets}from'react-native-safe-area-context';import {extractFramesViaRpc,frameShareContent}from'./frameExtract.js';import {friendlyMediaError}from'./videoEditor/mediaActions.js';import {unwrapProxyUrl}from'./videoEditor/remoteMediaClient.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
|
+
const MODE_OPTIONS = [{
|
|
21
|
+
id: "spread",
|
|
22
|
+
label: "Spread"
|
|
23
|
+
}, {
|
|
24
|
+
id: "interval",
|
|
25
|
+
label: "Interval"
|
|
26
|
+
}];
|
|
27
|
+
const SPREAD_COUNTS = [6, 12, 24];
|
|
2
28
|
const INTERVALS = [0.5, 1, 2, 5];
|
|
3
29
|
function FrameExtractorExperience({
|
|
4
30
|
boardItems,
|
|
@@ -9,6 +35,8 @@ function FrameExtractorExperience({
|
|
|
9
35
|
onSaveFrames
|
|
10
36
|
}) {
|
|
11
37
|
var _a;
|
|
38
|
+
const theme = useCanvasTheme();
|
|
39
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
12
40
|
const insets = useSafeAreaInsets();
|
|
13
41
|
const {
|
|
14
42
|
width
|
|
@@ -85,9 +113,13 @@ function FrameExtractorExperience({
|
|
|
85
113
|
paddingBottom: insets.bottom + 12
|
|
86
114
|
}], children: [
|
|
87
115
|
/* @__PURE__ */ jsxs(View, { style: styles.head, children: [
|
|
88
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityLabel: "Close frames",
|
|
89
|
-
|
|
90
|
-
|
|
116
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityLabel: "Close frames", style: ({
|
|
117
|
+
pressed
|
|
118
|
+
}) => [styles.headIcon, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color: theme.edInk }) }),
|
|
119
|
+
/* @__PURE__ */ jsx(Text, { style: styles.title, numberOfLines: 1, children: "Frames" }),
|
|
120
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: place, disabled: chosen.size === 0, style: ({
|
|
121
|
+
pressed
|
|
122
|
+
}) => [styles.placeBtn, chosen.size === 0 && styles.placeBtnOff, pressedStyle(pressed)], accessibilityRole: "button", children: /* @__PURE__ */ jsxs(Text, { style: styles.placeLabel, children: [
|
|
91
123
|
"Place ",
|
|
92
124
|
chosen.size || ""
|
|
93
125
|
] }) })
|
|
@@ -95,179 +127,210 @@ function FrameExtractorExperience({
|
|
|
95
127
|
/* @__PURE__ */ jsx(Text, { style: styles.section, children: "Source clip" }),
|
|
96
128
|
videos.length === 0 ? /* @__PURE__ */ jsx(Text, { style: styles.hint, children: "Add a video to the board, then open Frames again." }) : /* @__PURE__ */ jsx(FlatList, { horizontal: true, data: videos, keyExtractor: (item) => item.id, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.sourceRow, renderItem: ({
|
|
97
129
|
item
|
|
98
|
-
}) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setSource(item), style:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
/* @__PURE__ */ jsx(
|
|
102
|
-
|
|
130
|
+
}) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setSource(item), style: ({
|
|
131
|
+
pressed
|
|
132
|
+
}) => [styles.sourceCard, (source == null ? void 0 : source.id) === item.id && styles.sourceOn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: styles.sourceLabel, numberOfLines: 1, children: item.generatedAssetName || "Video" }) }) }),
|
|
133
|
+
/* @__PURE__ */ jsx(Segmented, { options: MODE_OPTIONS, value: mode, onChange: setMode, style: styles.segmented }),
|
|
134
|
+
/* @__PURE__ */ jsx(View, { style: styles.modeRow, children: (mode === "spread" ? SPREAD_COUNTS : INTERVALS).map((value) => /* @__PURE__ */ jsx(Pressable, { onPress: () => mode === "spread" ? setCount(value) : setIntervalSec(value), style: ({
|
|
135
|
+
pressed
|
|
136
|
+
}) => [styles.chip, (mode === "spread" ? count : interval) === value && styles.chipOn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: [styles.chipLabel, (mode === "spread" ? count : interval) === value && styles.chipLabelOn], children: mode === "spread" ? `${value}` : `${value}s` }) }, value)) }),
|
|
137
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => void extract(), disabled: busy || !source, style: ({
|
|
138
|
+
pressed
|
|
139
|
+
}) => [styles.extractBtn, (busy || !source) && styles.extractOff, pressedStyle(pressed)], children: busy ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.edOnInk }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
140
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "content-cut", size: 18, color: theme.edOnInk }),
|
|
103
141
|
/* @__PURE__ */ jsx(Text, { style: styles.extractLabel, children: "Extract frames" })
|
|
104
142
|
] }) }),
|
|
105
143
|
error ? /* @__PURE__ */ jsx(Text, { style: styles.error, children: error }) : null,
|
|
106
144
|
frames.length > 0 ? /* @__PURE__ */ jsxs(View, { style: styles.modeRow, children: [
|
|
107
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: share, disabled: chosen.size === 0, style:
|
|
145
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: share, disabled: chosen.size === 0, style: ({
|
|
146
|
+
pressed
|
|
147
|
+
}) => [styles.chip, chosen.size === 0 && styles.extractOff, pressedStyle(pressed)], accessibilityRole: "button", accessibilityLabel: "Share chosen frames", children: /* @__PURE__ */ jsxs(Text, { style: styles.chipLabel, children: [
|
|
108
148
|
"Share ",
|
|
109
149
|
chosen.size || ""
|
|
110
150
|
] }) }),
|
|
111
|
-
onSaveFrames ? /* @__PURE__ */ jsx(Pressable, { onPress: save, disabled: chosen.size === 0 || saving, style:
|
|
151
|
+
onSaveFrames ? /* @__PURE__ */ jsx(Pressable, { onPress: save, disabled: chosen.size === 0 || saving, style: ({
|
|
152
|
+
pressed
|
|
153
|
+
}) => [styles.chip, (chosen.size === 0 || saving) && styles.extractOff, pressedStyle(pressed)], accessibilityRole: "button", accessibilityLabel: "Save chosen frames to Photos", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: saving ? "Saving\u2026" : "Save to Photos" }) }) : null,
|
|
112
154
|
saved ? /* @__PURE__ */ jsx(Text, { style: styles.hint, children: saved }) : null
|
|
113
155
|
] }) : null,
|
|
114
|
-
/* @__PURE__ */ jsx(FlatList, { data: frames, keyExtractor: (url, i) => `${i}-${url.slice(-24)}`, numColumns: 3, contentContainerStyle: styles.grid, ListEmptyComponent: !busy ? /* @__PURE__ */ jsx(Text, { style: styles.hint, children: "Extracted stills land here
|
|
156
|
+
/* @__PURE__ */ jsx(FlatList, { data: frames, keyExtractor: (url, i) => `${i}-${url.slice(-24)}`, numColumns: 3, contentContainerStyle: styles.grid, ListEmptyComponent: !busy ? /* @__PURE__ */ jsx(Text, { style: styles.hint, children: "Extracted stills land here. Pick which to keep." }) : null, renderItem: ({
|
|
115
157
|
item,
|
|
116
158
|
index
|
|
117
159
|
}) => {
|
|
118
160
|
const on = chosen.has(index);
|
|
119
|
-
return /* @__PURE__ */ jsxs(Pressable, { onPress: () => toggle(index), style:
|
|
161
|
+
return /* @__PURE__ */ jsxs(Pressable, { onPress: () => toggle(index), style: ({
|
|
162
|
+
pressed
|
|
163
|
+
}) => [styles.tile, {
|
|
120
164
|
width: tile,
|
|
121
165
|
height: tile
|
|
122
|
-
}], children: [
|
|
166
|
+
}, pressedStyle(pressed)], children: [
|
|
123
167
|
/* @__PURE__ */ jsx(Image, { source: {
|
|
124
168
|
uri: item
|
|
125
169
|
}, style: styles.thumb }),
|
|
126
|
-
|
|
170
|
+
on ? /* @__PURE__ */ jsx(View, { pointerEvents: "none", style: styles.tileOn }) : null,
|
|
171
|
+
/* @__PURE__ */ jsx(View, { style: [styles.check, on && styles.checkOn], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: on ? "check" : "circle-outline", size: 16, color: on ? theme.edOnInk : theme.edInk2 }) })
|
|
127
172
|
] });
|
|
128
173
|
} })
|
|
129
174
|
] });
|
|
130
175
|
}
|
|
131
|
-
const
|
|
176
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
132
177
|
root: {
|
|
133
178
|
flex: 1,
|
|
134
|
-
backgroundColor:
|
|
179
|
+
backgroundColor: theme.edBg
|
|
135
180
|
},
|
|
136
181
|
head: {
|
|
137
182
|
flexDirection: "row",
|
|
138
183
|
alignItems: "center",
|
|
139
184
|
justifyContent: "space-between",
|
|
140
|
-
|
|
141
|
-
|
|
185
|
+
gap: SPACE.sm,
|
|
186
|
+
paddingHorizontal: SPACE.md,
|
|
187
|
+
marginBottom: SPACE.md
|
|
142
188
|
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
189
|
+
headIcon: {
|
|
190
|
+
width: 40,
|
|
191
|
+
height: 40,
|
|
192
|
+
borderRadius: RADIUS.pill,
|
|
193
|
+
alignItems: "center",
|
|
194
|
+
justifyContent: "center"
|
|
147
195
|
},
|
|
196
|
+
title: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
197
|
+
flex: 1,
|
|
198
|
+
textAlign: "center",
|
|
199
|
+
color: theme.edInk
|
|
200
|
+
}),
|
|
148
201
|
placeBtn: {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
202
|
+
minHeight: 36,
|
|
203
|
+
minWidth: 72,
|
|
204
|
+
paddingHorizontal: SPACE.lg,
|
|
205
|
+
borderRadius: RADIUS.pill,
|
|
206
|
+
backgroundColor: theme.primary,
|
|
207
|
+
alignItems: "center",
|
|
208
|
+
justifyContent: "center"
|
|
153
209
|
},
|
|
154
210
|
placeBtnOff: {
|
|
155
211
|
opacity: 0.35
|
|
156
212
|
},
|
|
157
|
-
placeLabel: {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
paddingHorizontal: 16,
|
|
172
|
-
paddingVertical: 12
|
|
173
|
-
},
|
|
213
|
+
placeLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
214
|
+
color: theme.primaryForeground
|
|
215
|
+
}),
|
|
216
|
+
section: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
217
|
+
color: theme.edInk2,
|
|
218
|
+
paddingHorizontal: SPACE.lg,
|
|
219
|
+
marginBottom: SPACE.sm
|
|
220
|
+
}),
|
|
221
|
+
hint: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
222
|
+
fontWeight: "400",
|
|
223
|
+
color: theme.edInk3,
|
|
224
|
+
paddingHorizontal: SPACE.lg,
|
|
225
|
+
paddingVertical: SPACE.md
|
|
226
|
+
}),
|
|
174
227
|
sourceRow: {
|
|
175
|
-
paddingHorizontal:
|
|
176
|
-
gap:
|
|
177
|
-
paddingBottom:
|
|
228
|
+
paddingHorizontal: SPACE.lg,
|
|
229
|
+
gap: SPACE.sm,
|
|
230
|
+
paddingBottom: SPACE.md
|
|
178
231
|
},
|
|
179
232
|
sourceCard: {
|
|
180
|
-
maxWidth:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
233
|
+
maxWidth: 180,
|
|
234
|
+
minHeight: 36,
|
|
235
|
+
justifyContent: "center",
|
|
236
|
+
paddingHorizontal: SPACE.md + 2,
|
|
237
|
+
borderRadius: RADIUS.pill,
|
|
238
|
+
backgroundColor: theme.edRaised,
|
|
239
|
+
borderWidth: 1,
|
|
240
|
+
borderColor: "transparent"
|
|
186
241
|
},
|
|
187
242
|
sourceOn: {
|
|
188
|
-
backgroundColor:
|
|
243
|
+
backgroundColor: theme.edRaisedHi,
|
|
244
|
+
borderColor: theme.edInk
|
|
189
245
|
},
|
|
190
|
-
sourceLabel: {
|
|
191
|
-
color:
|
|
192
|
-
|
|
193
|
-
|
|
246
|
+
sourceLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
247
|
+
color: theme.edInk
|
|
248
|
+
}),
|
|
249
|
+
segmented: {
|
|
250
|
+
flexGrow: 0,
|
|
251
|
+
marginHorizontal: SPACE.lg,
|
|
252
|
+
marginBottom: SPACE.sm
|
|
194
253
|
},
|
|
195
254
|
modeRow: {
|
|
196
255
|
flexDirection: "row",
|
|
197
256
|
flexWrap: "wrap",
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
257
|
+
alignItems: "center",
|
|
258
|
+
gap: SPACE.sm,
|
|
259
|
+
paddingHorizontal: SPACE.lg,
|
|
260
|
+
paddingBottom: SPACE.md
|
|
201
261
|
},
|
|
202
262
|
chip: {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
263
|
+
minHeight: 36,
|
|
264
|
+
justifyContent: "center",
|
|
265
|
+
paddingHorizontal: SPACE.md + 2,
|
|
266
|
+
borderRadius: RADIUS.pill,
|
|
267
|
+
backgroundColor: theme.edRaised
|
|
207
268
|
},
|
|
208
269
|
chipOn: {
|
|
209
|
-
backgroundColor:
|
|
210
|
-
},
|
|
211
|
-
chipLabel: {
|
|
212
|
-
color: "#F7F7FA",
|
|
213
|
-
fontSize: 12.5,
|
|
214
|
-
fontWeight: "500"
|
|
270
|
+
backgroundColor: theme.edInk
|
|
215
271
|
},
|
|
272
|
+
chipLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
273
|
+
color: theme.edInk,
|
|
274
|
+
fontVariant: ["tabular-nums"]
|
|
275
|
+
}),
|
|
216
276
|
chipLabelOn: {
|
|
217
|
-
color:
|
|
277
|
+
color: theme.edOnInk
|
|
218
278
|
},
|
|
219
279
|
extractBtn: {
|
|
220
280
|
flexDirection: "row",
|
|
221
281
|
alignItems: "center",
|
|
222
282
|
justifyContent: "center",
|
|
223
|
-
gap:
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
borderRadius:
|
|
228
|
-
backgroundColor:
|
|
283
|
+
gap: SPACE.sm,
|
|
284
|
+
minHeight: HIT + 4,
|
|
285
|
+
marginHorizontal: SPACE.lg,
|
|
286
|
+
marginBottom: SPACE.md,
|
|
287
|
+
borderRadius: RADIUS.pill,
|
|
288
|
+
backgroundColor: theme.edInk
|
|
229
289
|
},
|
|
230
290
|
extractOff: {
|
|
231
291
|
opacity: 0.4
|
|
232
292
|
},
|
|
233
|
-
extractLabel: {
|
|
234
|
-
fontSize:
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
},
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
marginBottom: 8
|
|
243
|
-
},
|
|
293
|
+
extractLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
294
|
+
fontSize: 15,
|
|
295
|
+
color: theme.edOnInk
|
|
296
|
+
}),
|
|
297
|
+
error: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
298
|
+
color: theme.edDanger,
|
|
299
|
+
paddingHorizontal: SPACE.lg,
|
|
300
|
+
marginBottom: SPACE.sm
|
|
301
|
+
}),
|
|
244
302
|
grid: {
|
|
245
|
-
paddingHorizontal:
|
|
246
|
-
paddingBottom:
|
|
247
|
-
gap:
|
|
303
|
+
paddingHorizontal: SPACE.md,
|
|
304
|
+
paddingBottom: SPACE.xl,
|
|
305
|
+
gap: SPACE.sm
|
|
248
306
|
},
|
|
249
307
|
tile: {
|
|
250
|
-
margin:
|
|
251
|
-
borderRadius:
|
|
308
|
+
margin: SPACE.xs,
|
|
309
|
+
borderRadius: RADIUS.sm,
|
|
252
310
|
overflow: "hidden",
|
|
253
|
-
backgroundColor:
|
|
311
|
+
backgroundColor: theme.edRaised
|
|
254
312
|
},
|
|
255
313
|
thumb: {
|
|
256
314
|
width: "100%",
|
|
257
315
|
height: "100%"
|
|
258
316
|
},
|
|
317
|
+
tileOn: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
|
|
318
|
+
borderRadius: RADIUS.sm,
|
|
319
|
+
borderWidth: 2,
|
|
320
|
+
borderColor: theme.edInk
|
|
321
|
+
}),
|
|
259
322
|
check: {
|
|
260
323
|
position: "absolute",
|
|
261
|
-
top:
|
|
262
|
-
right:
|
|
324
|
+
top: SPACE.sm - 2,
|
|
325
|
+
right: SPACE.sm - 2,
|
|
263
326
|
width: 24,
|
|
264
327
|
height: 24,
|
|
265
|
-
borderRadius:
|
|
328
|
+
borderRadius: RADIUS.pill,
|
|
266
329
|
alignItems: "center",
|
|
267
330
|
justifyContent: "center",
|
|
268
331
|
backgroundColor: "rgba(15,23,42,0.55)"
|
|
269
332
|
},
|
|
270
333
|
checkOn: {
|
|
271
|
-
backgroundColor:
|
|
334
|
+
backgroundColor: theme.edInk
|
|
272
335
|
}
|
|
273
|
-
});export{FrameExtractorExperience};//# sourceMappingURL=FrameExtractorExperience.js.map
|
|
336
|
+
}));export{FrameExtractorExperience};//# sourceMappingURL=FrameExtractorExperience.js.map
|