@adminide-stack/yantra-mobile 12.0.125-alpha.1 → 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.
Files changed (96) hide show
  1. package/lib/features/canvas/AudioEditorExperience.js +207 -109
  2. package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
  3. package/lib/features/canvas/CanvasAgentChatPane.js +87 -72
  4. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
  5. package/lib/features/canvas/CanvasBoardsGrid.js +494 -387
  6. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  7. package/lib/features/canvas/CanvasChatResultCard.js +78 -59
  8. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
  9. package/lib/features/canvas/CanvasEditToolsPanel.js +126 -84
  10. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
  11. package/lib/features/canvas/CanvasExperience.js +108 -126
  12. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  13. package/lib/features/canvas/CanvasGeneratePanel.js +178 -166
  14. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
  15. package/lib/features/canvas/CanvasLibrarySheet.js +119 -123
  16. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
  17. package/lib/features/canvas/CanvasLooksPanel.js +113 -89
  18. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
  19. package/lib/features/canvas/CanvasModelPicker.js +79 -79
  20. package/lib/features/canvas/CanvasModelPicker.js.map +1 -1
  21. package/lib/features/canvas/CanvasTasksPanel.js +193 -128
  22. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
  23. package/lib/features/canvas/CanvasTemplatesPanel.js +106 -94
  24. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
  25. package/lib/features/canvas/CanvasToolDock.js +195 -127
  26. package/lib/features/canvas/CanvasToolDock.js.map +1 -1
  27. package/lib/features/canvas/FrameExtractorExperience.js +163 -100
  28. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
  29. package/lib/features/canvas/GeneratorReferenceSlots.js +132 -69
  30. package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -1
  31. package/lib/features/canvas/ImageEditorExperience.js +278 -209
  32. package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
  33. package/lib/features/canvas/InfluencerStudioExperience.js +167 -125
  34. package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -1
  35. package/lib/features/canvas/MoodboardExperience.js +102 -85
  36. package/lib/features/canvas/MoodboardExperience.js.map +1 -1
  37. package/lib/features/canvas/NativeCanvasViewer.js +203 -192
  38. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
  39. package/lib/features/canvas/PromoContextFields.js +125 -92
  40. package/lib/features/canvas/PromoContextFields.js.map +1 -1
  41. package/lib/features/canvas/SetStudioExperience.js +225 -143
  42. package/lib/features/canvas/SetStudioExperience.js.map +1 -1
  43. package/lib/features/canvas/VideoClipsExperience.js +126 -92
  44. package/lib/features/canvas/VideoClipsExperience.js.map +1 -1
  45. package/lib/features/canvas/VideoEditExperience.js +154 -142
  46. package/lib/features/canvas/VideoEditExperience.js.map +1 -1
  47. package/lib/features/canvas/VideoEditorExperience.js +551 -492
  48. package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
  49. package/lib/features/canvas/VideoGeneratorExperience.js +284 -131
  50. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
  51. package/lib/features/canvas/canvasTasks.js +7 -3
  52. package/lib/features/canvas/canvasTasks.js.map +1 -1
  53. package/lib/features/canvas/canvasTheme.js +265 -0
  54. package/lib/features/canvas/canvasTheme.js.map +1 -0
  55. package/lib/features/canvas/canvasUi.js +381 -0
  56. package/lib/features/canvas/canvasUi.js.map +1 -0
  57. package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -52
  58. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
  59. package/lib/features/canvas/serverTasks.js +1 -1
  60. package/lib/features/canvas/serverTasks.js.map +1 -1
  61. package/lib/features/canvas/set/SetViewportWebView.js +1 -1
  62. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
  63. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +8 -7
  64. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -1
  65. package/lib/features/canvas/videoEditor/ExportTaskCard.js +44 -41
  66. package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -1
  67. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +50 -45
  68. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
  69. package/lib/features/canvas/videoEditor/exportTask.js +3 -2
  70. package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
  71. package/lib/features/canvas/videoEditor/formWidgets.js +116 -64
  72. package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -1
  73. package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +77 -63
  74. package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -1
  75. package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +95 -79
  76. package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -1
  77. package/lib/features/design/DesignEditorExperience.js +241 -160
  78. package/lib/features/design/DesignEditorExperience.js.map +1 -1
  79. package/lib/features/design/DesignExperience.js +300 -143
  80. package/lib/features/design/DesignExperience.js.map +1 -1
  81. package/lib/features/webbuilder/WebBuilderExperience.js +1 -1
  82. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  83. package/lib/features/webbuilder/buildFragments.js +3 -2
  84. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  85. package/lib/features/webbuilder/components/PublishSheet.js +1 -1
  86. package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
  87. package/lib/features/webbuilder/webbuilderPrompts.js +2 -5
  88. package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
  89. package/lib/screens/WebBuilderNative/sandboxProxyApi.js +120 -0
  90. package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -0
  91. package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
  92. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +26 -4
  93. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  94. package/lib/screens/WebBuilderNative/webbuilderTransport.js +110 -7
  95. package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
  96. 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 {StyleSheet,useWindowDimensions,View,Pressable,Text,FlatList,ActivityIndicator,Image,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';const SPREAD_COUNTS = [6, 12, 24];
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", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color: "#e2e8f0" }) }),
89
- /* @__PURE__ */ jsx(Text, { style: styles.title, children: "Frames" }),
90
- /* @__PURE__ */ jsx(Pressable, { onPress: place, disabled: chosen.size === 0, style: [styles.placeBtn, chosen.size === 0 && styles.placeBtnOff], accessibilityRole: "button", children: /* @__PURE__ */ jsxs(Text, { style: styles.placeLabel, children: [
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: [styles.sourceCard, (source == null ? void 0 : source.id) === item.id && styles.sourceOn], children: /* @__PURE__ */ jsx(Text, { style: styles.sourceLabel, numberOfLines: 1, children: item.generatedAssetName || "Video" }) }) }),
99
- /* @__PURE__ */ jsx(View, { style: styles.modeRow, children: ["spread", "interval"].map((id) => /* @__PURE__ */ jsx(Pressable, { onPress: () => setMode(id), style: [styles.chip, mode === id && styles.chipOn], children: /* @__PURE__ */ jsx(Text, { style: [styles.chipLabel, mode === id && styles.chipLabelOn], children: id === "spread" ? "Spread" : "Interval" }) }, id)) }),
100
- /* @__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: [styles.chip, (mode === "spread" ? count : interval) === value && styles.chipOn], children: /* @__PURE__ */ jsx(Text, { style: [styles.chipLabel, (mode === "spread" ? count : interval) === value && styles.chipLabelOn], children: mode === "spread" ? `${value}` : `${value}s` }) }, value)) }),
101
- /* @__PURE__ */ jsx(Pressable, { onPress: () => void extract(), disabled: busy || !source, style: [styles.extractBtn, (busy || !source) && styles.extractOff], children: busy ? /* @__PURE__ */ jsx(ActivityIndicator, { color: "#0f172a" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
102
- /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "content-cut", size: 18, color: "#0f172a" }),
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: [styles.chip, chosen.size === 0 && styles.extractOff], accessibilityRole: "button", accessibilityLabel: "Share chosen frames", children: /* @__PURE__ */ jsxs(Text, { style: styles.chipLabel, children: [
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: [styles.chip, (chosen.size === 0 || saving) && styles.extractOff], accessibilityRole: "button", accessibilityLabel: "Save chosen frames to Photos", children: /* @__PURE__ */ jsx(Text, { style: styles.chipLabel, children: saving ? "Saving\u2026" : "Save to Photos" }) }) : null,
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 \u2014 pick which to keep." }) : null, renderItem: ({
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: [styles.tile, {
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
- /* @__PURE__ */ jsx(View, { style: [styles.check, on && styles.checkOn], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: on ? "check" : "circle-outline", size: 16, color: on ? "#0f172a" : "#94a3b8" }) })
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 styles = StyleSheet.create({
176
+ const makeStyles = themedStyles((theme) => StyleSheet.create({
132
177
  root: {
133
178
  flex: 1,
134
- backgroundColor: "#0B0B0E"
179
+ backgroundColor: theme.edBg
135
180
  },
136
181
  head: {
137
182
  flexDirection: "row",
138
183
  alignItems: "center",
139
184
  justifyContent: "space-between",
140
- paddingHorizontal: 16,
141
- marginBottom: 12
185
+ gap: SPACE.sm,
186
+ paddingHorizontal: SPACE.md,
187
+ marginBottom: SPACE.md
142
188
  },
143
- title: {
144
- fontSize: 17,
145
- fontWeight: "700",
146
- color: "#F7F7FA"
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
- paddingHorizontal: 12,
150
- paddingVertical: 7,
151
- borderRadius: 9,
152
- backgroundColor: "#8B7CFF"
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
- fontSize: 13,
159
- fontWeight: "700",
160
- color: "#0A0A0C"
161
- },
162
- section: {
163
- color: "#9A9AA5",
164
- fontSize: 11,
165
- paddingHorizontal: 16,
166
- marginBottom: 6
167
- },
168
- hint: {
169
- color: "#7A7A88",
170
- fontSize: 13,
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: 12,
176
- gap: 8,
177
- paddingBottom: 10
228
+ paddingHorizontal: SPACE.lg,
229
+ gap: SPACE.sm,
230
+ paddingBottom: SPACE.md
178
231
  },
179
232
  sourceCard: {
180
- maxWidth: 160,
181
- paddingHorizontal: 12,
182
- paddingVertical: 10,
183
- borderRadius: 10,
184
- backgroundColor: "#1F1F24",
185
- marginHorizontal: 4
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: "#8B7CFF"
243
+ backgroundColor: theme.edRaisedHi,
244
+ borderColor: theme.edInk
189
245
  },
190
- sourceLabel: {
191
- color: "#F7F7FA",
192
- fontSize: 12,
193
- fontWeight: "600"
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
- gap: 8,
199
- paddingHorizontal: 16,
200
- paddingBottom: 8
257
+ alignItems: "center",
258
+ gap: SPACE.sm,
259
+ paddingHorizontal: SPACE.lg,
260
+ paddingBottom: SPACE.md
201
261
  },
202
262
  chip: {
203
- paddingHorizontal: 12,
204
- paddingVertical: 7,
205
- borderRadius: 9,
206
- backgroundColor: "#1F1F24"
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: "#8B7CFF"
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: "#0A0A0C"
277
+ color: theme.edOnInk
218
278
  },
219
279
  extractBtn: {
220
280
  flexDirection: "row",
221
281
  alignItems: "center",
222
282
  justifyContent: "center",
223
- gap: 8,
224
- marginHorizontal: 16,
225
- marginBottom: 8,
226
- paddingVertical: 12,
227
- borderRadius: 12,
228
- backgroundColor: "#F7F7FA"
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: 14,
235
- fontWeight: "700",
236
- color: "#0f172a"
237
- },
238
- error: {
239
- color: "#FECACA",
240
- fontSize: 12,
241
- paddingHorizontal: 16,
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: 12,
246
- paddingBottom: 24,
247
- gap: 8
303
+ paddingHorizontal: SPACE.md,
304
+ paddingBottom: SPACE.xl,
305
+ gap: SPACE.sm
248
306
  },
249
307
  tile: {
250
- margin: 4,
251
- borderRadius: 10,
308
+ margin: SPACE.xs,
309
+ borderRadius: RADIUS.sm,
252
310
  overflow: "hidden",
253
- backgroundColor: "#1F1F24"
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: 6,
262
- right: 6,
324
+ top: SPACE.sm - 2,
325
+ right: SPACE.sm - 2,
263
326
  width: 24,
264
327
  height: 24,
265
- borderRadius: 12,
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: "#F7F7FA"
334
+ backgroundColor: theme.edInk
272
335
  }
273
- });export{FrameExtractorExperience};//# sourceMappingURL=FrameExtractorExperience.js.map
336
+ }));export{FrameExtractorExperience};//# sourceMappingURL=FrameExtractorExperience.js.map