@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":"CanvasModelPicker.js","sources":["../../../src/features/canvas/CanvasModelPicker.tsx"],"sourcesContent":["/**\n * Native twin of surface-kit `ModelPicker` — grouped Auto / Image / Video / Audio.\n */\nimport React from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, View, Platform } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { groupCanvasChatModels, type CanvasChatModelOption } from './canvasAgentChat';\n\nexport function CanvasModelPicker({\n models,\n selectedId,\n onSelect,\n onClose,\n title = 'Select model',\n}: {\n title?: string;\n models: readonly CanvasChatModelOption[];\n selectedId?: string;\n onSelect: (id: string) => void;\n onClose: () => void;\n}) {\n const selected = models.find((m) => m.id === selectedId);\n const groups = groupCanvasChatModels(models);\n\n return (\n <View style={styles.scrim} pointerEvents=\"auto\">\n <Pressable style={StyleSheet.absoluteFill} onPress={onClose} accessibilityLabel=\"Close model picker\" />\n <View style={styles.sheet}>\n <View style={styles.head}>\n <MaterialCommunityIcons name=\"chip\" size={16} color=\"#64748b\" />\n <Text style={styles.headTitle}>{title}</Text>\n <Pressable\n onPress={onClose}\n hitSlop={10}\n accessibilityLabel=\"Close model picker\"\n style={styles.close}\n >\n <MaterialCommunityIcons name=\"close\" size={18} color=\"#64748b\" />\n </Pressable>\n </View>\n {selected ? (\n <View style={styles.selectedBar}>\n <Text style={styles.selectedKicker}>Selected</Text>\n <Text style={styles.selectedTitle} numberOfLines={1}>\n {selected.title}\n </Text>\n </View>\n ) : null}\n <ScrollView\n style={styles.list}\n contentContainerStyle={styles.listBody}\n keyboardShouldPersistTaps=\"handled\"\n >\n {groups.map(({ group, options }) => (\n <View key={group} style={styles.group}>\n <Text style={styles.groupLabel}>{group}</Text>\n {options.map((m) => {\n const active = m.id === selectedId;\n return (\n <Pressable\n key={m.id}\n onPress={() => {\n onSelect(m.id);\n onClose();\n }}\n style={[styles.row, active && styles.rowOn]}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: active }}\n >\n <View style={styles.rowBody}>\n <View style={styles.rowTitleLine}>\n <Text style={styles.rowTitle} numberOfLines={1}>\n {m.title}\n </Text>\n {active ? (\n <MaterialCommunityIcons name=\"check\" size={16} color=\"#0f172a\" />\n ) : null}\n </View>\n <Text style={styles.rowId} numberOfLines={1}>\n {m.id}\n </Text>\n {m.description ? (\n <Text style={styles.rowDesc} numberOfLines={2}>\n {m.description}\n </Text>\n ) : null}\n </View>\n </Pressable>\n );\n })}\n </View>\n ))}\n </ScrollView>\n </View>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n scrim: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 40,\n elevation: 40,\n backgroundColor: 'rgba(0,0,0,0.4)',\n justifyContent: 'center',\n padding: 16,\n },\n sheet: {\n maxHeight: '80%',\n borderRadius: 16,\n backgroundColor: '#fff',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n overflow: 'hidden',\n },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: '#e2e8f0',\n },\n headTitle: { flex: 1, fontSize: 14, fontWeight: '600', color: '#0f172a' },\n close: { padding: 4 },\n selectedBar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 8,\n backgroundColor: '#f8fafc',\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: '#e2e8f0',\n },\n selectedKicker: {\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.6,\n textTransform: 'uppercase',\n color: '#64748b',\n },\n selectedTitle: { flex: 1, fontSize: 14, fontWeight: '500', color: '#0f172a' },\n list: { maxHeight: 420 },\n listBody: { padding: 8, paddingBottom: 16 },\n group: { marginBottom: 8 },\n groupLabel: {\n paddingHorizontal: 8,\n paddingVertical: 4,\n fontSize: 11,\n fontWeight: '600',\n letterSpacing: 0.6,\n textTransform: 'uppercase',\n color: '#94a3b8',\n },\n row: { borderRadius: 10, paddingHorizontal: 12, paddingVertical: 8 },\n rowOn: { backgroundColor: '#f1f5f9' },\n rowBody: { minWidth: 0, flex: 1 },\n rowTitleLine: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n rowTitle: { flex: 1, fontSize: 14, fontWeight: '600', color: '#0f172a' },\n rowId: {\n marginTop: 2,\n fontSize: 11,\n fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',\n color: '#94a3b8',\n },\n rowDesc: { marginTop: 2, fontSize: 12, color: '#94a3b8' },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CanvasModelPicker.js","sources":["../../../src/features/canvas/CanvasModelPicker.tsx"],"sourcesContent":["/**\n * Native twin of surface-kit `ModelPicker` — grouped Auto / Image / Video / Audio.\n */\nimport React, { useMemo } from 'react';\nimport { ScrollView, StyleSheet, Text, View, Platform } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { groupCanvasChatModels, type CanvasChatModelOption } from './canvasAgentChat';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\nexport function CanvasModelPicker({\n models,\n selectedId,\n onSelect,\n onClose,\n title = 'Select model',\n}: {\n title?: string;\n models: readonly CanvasChatModelOption[];\n selectedId?: string;\n onSelect: (id: string) => void;\n onClose: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const selected = models.find((m) => m.id === selectedId);\n const groups = groupCanvasChatModels(models);\n\n return (\n <View style={styles.scrim} pointerEvents=\"auto\">\n <Pressable style={StyleSheet.absoluteFill} onPress={onClose} accessibilityLabel=\"Close model picker\" />\n <View style={styles.sheet}>\n <View style={styles.head}>\n <Text style={styles.headTitle}>{title}</Text>\n <Pressable\n onPress={onClose}\n hitSlop={10}\n accessibilityLabel=\"Close model picker\"\n style={({ pressed }) => [styles.close, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"close\" size={18} color={theme.foreground} />\n </Pressable>\n </View>\n {selected ? (\n <View style={styles.selectedBar}>\n <Text style={styles.selectedKicker}>Selected</Text>\n <Text style={styles.selectedTitle} numberOfLines={1}>\n {selected.title}\n </Text>\n </View>\n ) : null}\n <ScrollView\n style={styles.list}\n contentContainerStyle={styles.listBody}\n keyboardShouldPersistTaps=\"handled\"\n >\n {groups.map(({ group, options }) => (\n <View key={group} style={styles.group}>\n <Text style={styles.groupLabel}>{group}</Text>\n {options.map((m) => {\n const active = m.id === selectedId;\n return (\n <Pressable\n key={m.id}\n onPress={() => {\n onSelect(m.id);\n onClose();\n }}\n style={({ pressed }) => [\n styles.row,\n active && styles.rowOn,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: active }}\n >\n <View style={styles.rowBody}>\n <Text style={styles.rowTitle} numberOfLines={1}>\n {m.title}\n </Text>\n {m.description ? (\n <Text style={styles.rowDesc} numberOfLines={1}>\n {m.description}\n </Text>\n ) : (\n <Text style={styles.rowId} numberOfLines={1}>\n {m.id}\n </Text>\n )}\n </View>\n <View style={[styles.check, active && styles.checkOn]}>\n {active ? (\n <MaterialCommunityIcons\n name=\"check\"\n size={14}\n color={theme.background}\n />\n ) : null}\n </View>\n </Pressable>\n );\n })}\n </View>\n ))}\n </ScrollView>\n </View>\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n scrim: {\n ...StyleSheet.absoluteFillObject,\n zIndex: 40,\n elevation: 40,\n backgroundColor: 'rgba(0,0,0,0.45)',\n justifyContent: 'center',\n padding: SPACE.lg,\n },\n sheet: {\n maxHeight: '80%',\n borderRadius: RADIUS.xl,\n backgroundColor: theme.surface,\n overflow: 'hidden',\n },\n head: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n paddingLeft: SPACE.xl - 4,\n paddingRight: SPACE.sm,\n paddingTop: SPACE.md,\n paddingBottom: SPACE.xs,\n },\n headTitle: { ...TYPE.title, flex: 1, color: theme.foreground },\n close: {\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.card,\n },\n selectedBar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs + 2,\n paddingHorizontal: SPACE.xl - 4,\n paddingBottom: SPACE.sm,\n },\n selectedKicker: { ...TYPE.caption, color: theme.mutedForeground },\n selectedTitle: { ...TYPE.caption, flex: 1, fontWeight: '600', color: theme.foreground },\n list: { maxHeight: 440 },\n listBody: { paddingHorizontal: SPACE.sm, paddingBottom: SPACE.md },\n group: { marginTop: SPACE.sm },\n groupLabel: {\n ...TYPE.caption,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.xs + 2,\n color: theme.mutedForeground,\n },\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n minHeight: HIT + 12,\n borderRadius: RADIUS.md + 2,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm + 2,\n },\n rowOn: { backgroundColor: theme.card },\n rowBody: { minWidth: 0, flex: 1 },\n rowTitle: { ...TYPE.body, fontWeight: '600', color: theme.foreground },\n rowId: {\n marginTop: 2,\n fontSize: 11,\n fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',\n color: theme.mutedForeground,\n },\n rowDesc: { ...TYPE.caption, fontWeight: '400', marginTop: 2, color: theme.mutedForeground },\n check: {\n width: 22,\n height: 22,\n borderRadius: 11,\n alignItems: 'center',\n justifyContent: 'center',\n },\n checkOn: { backgroundColor: theme.foreground },\n }),\n);\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {useState,useRef,useEffect,useCallback}from'react';import {StyleSheet,View,Text,Pressable,ScrollView,Image}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {listCanvasTasks,hydrateCanvasTasks,subscribeCanvasTasks,dismissTask,markTaskDelivered,isTerminal,startPromoTask}from'./canvasTasks.js';import {useCanvasTasksHost,syncCanvasTasks,buildTaskRows,isRowRunningAt,SYNC_RUNNING_MS,SYNC_IDLE_MS,formatWorked,removeRemoteRow,claimRow,renderProgressPct,renderTimeLeft}from'./canvasTaskSync.js';import {isExportTask,DEADLINE_VERDICT_ERROR,jobBoardId,isStaleJob,jobDeadline,isDeadlineVerdict,serverProgressLine}from'./serverTasks.js';var __defProp = Object.defineProperty;
1
+ import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {useMemo,useState,useRef,useEffect,useCallback}from'react';import {View,Text,ScrollView,StyleSheet,Image}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {listCanvasTasks,hydrateCanvasTasks,subscribeCanvasTasks,dismissTask,markTaskDelivered,isTerminal,startPromoTask}from'./canvasTasks.js';import {useCanvasTasksHost,syncCanvasTasks,buildTaskRows,isRowRunningAt,SYNC_RUNNING_MS,SYNC_IDLE_MS,formatWorked,removeRemoteRow,claimRow,renderProgressPct,renderTimeLeft}from'./canvasTaskSync.js';import {isExportTask,DEADLINE_VERDICT_ERROR,jobBoardId,isStaleJob,jobDeadline,isDeadlineVerdict,serverProgressLine}from'./serverTasks.js';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,RADIUS,SPACE,CoverPlaceholder,Skeleton,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -31,6 +31,8 @@ function CanvasTasksPanel({
31
31
  onClose,
32
32
  onPlaceResult
33
33
  }) {
34
+ const theme = useCanvasTheme();
35
+ const styles = useMemo(() => makeStyles(theme), [theme]);
34
36
  const host = useCanvasTasksHost();
35
37
  const [local, setLocal] = useState(() => listCanvasTasks());
36
38
  const [remote, setRemote] = useState([]);
@@ -140,9 +142,14 @@ function CanvasTasksPanel({
140
142
  return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
141
143
  /* @__PURE__ */ jsxs(View, { style: styles.head, children: [
142
144
  /* @__PURE__ */ jsx(Text, { style: styles.title, children: "Tasks" }),
143
- /* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 8, accessibilityLabel: "Close tasks", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 20, color: "#64748b" }) })
145
+ /* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 8, style: ({
146
+ pressed
147
+ }) => [styles.close, pressedStyle(pressed)], accessibilityLabel: "Close tasks", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 18, color: theme.foreground }) })
144
148
  ] }),
145
- /* @__PURE__ */ jsx(ScrollView, { contentContainerStyle: styles.list, children: rows.length === 0 ? /* @__PURE__ */ jsx(Text, { style: styles.empty, children: "Nothing running. A marketing video, an export or a lip sync shows up here when you start one - here or on the web - and keeps going while you work on something else." }) : rows.map((row) => /* @__PURE__ */ jsx(RowCard, { row, now, openBoardId: host.openBoardId, boardLabel: host.boardLabel, onPlace: () => void place(row), onOpenBoard: host.openBoard, onDismiss: () => dismiss(row), onRetry: retry(row) }, row.key)) })
149
+ /* @__PURE__ */ jsx(ScrollView, { contentContainerStyle: styles.list, children: rows.length === 0 ? /* @__PURE__ */ jsxs(View, { style: styles.emptyBox, children: [
150
+ /* @__PURE__ */ jsx(View, { style: styles.emptyIcon, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "progress-clock", size: 24, color: theme.mutedForeground }) }),
151
+ /* @__PURE__ */ jsx(Text, { style: styles.empty, children: "Nothing running. A marketing video, an export or a lip sync shows up here when you start one, here or on the web, and keeps going while you work on something else." })
152
+ ] }) : rows.map((row) => /* @__PURE__ */ jsx(RowCard, { row, now, openBoardId: host.openBoardId, boardLabel: host.boardLabel, onPlace: () => void place(row), onOpenBoard: host.openBoard, onDismiss: () => dismiss(row), onRetry: retry(row) }, row.key)) })
146
153
  ] });
147
154
  }
148
155
  const isVisualResult = (r) => r.kind === "image" || r.kind === "video";
@@ -167,15 +174,15 @@ function viewOf(row, now) {
167
174
  boardId: task.boardId,
168
175
  media: ((_a = task.result) == null ? void 0 : _a.url) ? {
169
176
  url: task.result.url,
170
- kind: isExport && ((_b = loose.request) == null ? void 0 : _b.media) === "image" ? "image" : "video"
177
+ kind: "video"
171
178
  } : void 0,
172
179
  delivered: Boolean(task.delivered),
173
- elapsedMs: ((_c = task.endedAt) != null ? _c : now) - ((_d = task.startedAt) != null ? _d : task.createdAt)
180
+ elapsedMs: ((_b = task.endedAt) != null ? _b : now) - ((_c = task.startedAt) != null ? _c : task.createdAt)
174
181
  }, isExport ? {
175
182
  exportInfo: {
176
183
  step: loose.step,
177
- projectedMs: (_e = loose.handle) == null ? void 0 : _e.projectedMs,
178
- notice: (_f = loose.handle) == null ? void 0 : _f.notice
184
+ projectedMs: (_d = loose.render) == null ? void 0 : _d.projectedMs,
185
+ notice: (_f = loose.notice) != null ? _f : (_e = loose.render) == null ? void 0 : _e.notice
179
186
  }
180
187
  } : {}), {
181
188
  elsewhere: false
@@ -212,46 +219,61 @@ function RowCard({
212
219
  onRetry
213
220
  }) {
214
221
  var _a;
222
+ const theme = useCanvasTheme();
223
+ const styles = useMemo(() => makeStyles(theme), [theme]);
215
224
  const view = viewOf(row, now);
216
225
  const worked = formatWorked(view.elapsedMs);
217
226
  const onThisBoard = !view.boardId || view.boardId === openBoardId;
218
227
  const board = view.boardId ? boardLabel == null ? void 0 : boardLabel(view.boardId) : void 0;
219
228
  const icon = row.kind === "task" ? isExportTask(row.task) ? "movie-open-outline" : "bullhorn-outline" : row.job.lane === "lipsync" ? "account-voice" : row.job.lane === "promo" || row.job.lane === "promo-design" ? "bullhorn-outline" : "creation";
220
229
  return /* @__PURE__ */ jsxs(View, { style: styles.card, testID: `task-card-${row.key}`, children: [
221
- /* @__PURE__ */ jsxs(View, { style: styles.cardHead, children: [
222
- /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: icon, size: 16, color: "#64748b" }),
223
- /* @__PURE__ */ jsx(Text, { style: styles.cardTitle, numberOfLines: 1, children: view.title }),
230
+ /* @__PURE__ */ jsx(View, { style: styles.cardLead, children: view.state === "succeeded" && view.media ? /* @__PURE__ */ jsx(ResultThumb, { url: view.media.url, kind: view.media.kind }) : /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbGlyph], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: icon, size: 22, color: theme.mutedForeground }) }) }),
231
+ /* @__PURE__ */ jsxs(View, { style: styles.cardBody, children: [
232
+ /* @__PURE__ */ jsxs(View, { style: styles.cardHead, children: [
233
+ /* @__PURE__ */ jsx(Text, { style: styles.cardTitle, numberOfLines: 1, children: view.title }),
234
+ view.state !== "submitting" ? /* @__PURE__ */ jsx(Pressable, { onPress: onDismiss, hitSlop: 12, style: ({
235
+ pressed
236
+ }) => [styles.dismiss, pressedStyle(pressed)], accessibilityLabel: "Dismiss", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 16, color: theme.mutedForeground }) }) : null
237
+ ] }),
224
238
  /* @__PURE__ */ jsx(StateChip, { state: view.state, worked }),
225
- view.state !== "submitting" ? /* @__PURE__ */ jsx(Pressable, { onPress: onDismiss, hitSlop: 8, accessibilityLabel: "Dismiss", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 16, color: "#94a3b8" }) }) : null
226
- ] }),
227
- !onThisBoard ? /* @__PURE__ */ jsxs(Text, { style: styles.line, children: [
228
- "on ",
229
- board ? `\u201C${board}\u201D` : "another board"
230
- ] }) : null,
231
- view.elsewhere ? /* @__PURE__ */ jsx(Text, { style: styles.line, children: "Started on another device" }) : null,
232
- view.state === "stale" ? /* @__PURE__ */ jsxs(View, { style: styles.staleBox, children: [
233
- /* @__PURE__ */ jsx(Text, { style: styles.error, children: STALE_LINE }),
234
- /* @__PURE__ */ jsxs(View, { style: styles.actions, children: [
235
- onRetry ? /* @__PURE__ */ jsx(Pressable, { onPress: onRetry, style: styles.primary, children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Run again" }) }) : null,
236
- /* @__PURE__ */ jsx(Pressable, { onPress: onDismiss, style: styles.ghost, children: /* @__PURE__ */ jsx(Text, { style: styles.ghostLabel, children: "Dismiss" }) })
237
- ] })
238
- ] }) : null,
239
- view.state === "running" || view.state === "submitting" ? /* @__PURE__ */ jsx(Fragment, { children: view.exportInfo ? /* @__PURE__ */ jsx(ExportProgress, { info: view.exportInfo, elapsedMs: view.elapsedMs, line: view.line }) : view.line ? /* @__PURE__ */ jsx(Text, { style: styles.line, numberOfLines: 2, children: view.line }) : null }) : null,
240
- view.state === "succeeded" ? /* @__PURE__ */ jsxs(Fragment, { children: [
241
- view.media ? /* @__PURE__ */ jsx(ResultThumb, { url: view.media.url, kind: view.media.kind }) : null,
242
- /* @__PURE__ */ jsx(View, { style: styles.actions, children: !view.media ? null : view.delivered && onThisBoard ? /* @__PURE__ */ jsx(Text, { style: styles.done, children: "On this board" }) : onThisBoard ? /* @__PURE__ */ jsx(Pressable, { onPress: onPlace, style: styles.primary, children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Place on board" }) }) : onOpenBoard && view.boardId ? /* @__PURE__ */ jsx(Pressable, { onPress: () => onOpenBoard(view.boardId), style: styles.primary, children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Open board" }) }) : null })
243
- ] }) : null,
244
- view.state === "failed" ? /* @__PURE__ */ jsxs(Fragment, { children: [
245
- /* @__PURE__ */ jsx(Text, { style: styles.error, children: view.error || "The run could not finish." }),
246
- ((_a = view.exportInfo) == null ? void 0 : _a.notice) ? /* @__PURE__ */ jsx(Text, { style: styles.notice, children: view.exportInfo.notice }) : null,
247
- onRetry ? /* @__PURE__ */ jsx(View, { style: styles.actions, children: /* @__PURE__ */ jsx(Pressable, { onPress: onRetry, style: styles.primary, children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Run again" }) }) }) : null
248
- ] }) : null
239
+ !onThisBoard ? /* @__PURE__ */ jsxs(Text, { style: styles.line, children: [
240
+ "on ",
241
+ board ? `\u201C${board}\u201D` : "another board"
242
+ ] }) : null,
243
+ view.elsewhere ? /* @__PURE__ */ jsx(Text, { style: styles.line, children: "Started on another device" }) : null,
244
+ view.state === "stale" ? /* @__PURE__ */ jsxs(View, { style: styles.staleBox, children: [
245
+ /* @__PURE__ */ jsx(Text, { style: styles.error, children: STALE_LINE }),
246
+ /* @__PURE__ */ jsxs(View, { style: styles.actions, children: [
247
+ onRetry ? /* @__PURE__ */ jsx(Pressable, { onPress: onRetry, style: ({
248
+ pressed
249
+ }) => [styles.primary, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Run again" }) }) : null,
250
+ /* @__PURE__ */ jsx(Pressable, { onPress: onDismiss, style: ({
251
+ pressed
252
+ }) => [styles.ghost, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: styles.ghostLabel, children: "Dismiss" }) })
253
+ ] })
254
+ ] }) : null,
255
+ view.state === "running" || view.state === "submitting" ? /* @__PURE__ */ jsx(Fragment, { children: view.exportInfo ? /* @__PURE__ */ jsx(ExportProgress, { info: view.exportInfo, elapsedMs: view.elapsedMs, line: view.line }) : view.line ? /* @__PURE__ */ jsx(Text, { style: styles.line, numberOfLines: 2, children: view.line }) : null }) : null,
256
+ view.state === "succeeded" ? /* @__PURE__ */ jsx(View, { style: styles.actions, children: !view.media ? null : view.delivered && onThisBoard ? /* @__PURE__ */ jsx(Text, { style: styles.done, children: "On this board" }) : onThisBoard ? /* @__PURE__ */ jsx(Pressable, { onPress: onPlace, style: ({
257
+ pressed
258
+ }) => [styles.primary, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Place on board" }) }) : onOpenBoard && view.boardId ? /* @__PURE__ */ jsx(Pressable, { onPress: () => onOpenBoard(view.boardId), style: ({
259
+ pressed
260
+ }) => [styles.primary, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Open board" }) }) : null }) : null,
261
+ view.state === "failed" ? /* @__PURE__ */ jsxs(Fragment, { children: [
262
+ /* @__PURE__ */ jsx(Text, { style: styles.error, children: view.error || "The run could not finish." }),
263
+ ((_a = view.exportInfo) == null ? void 0 : _a.notice) ? /* @__PURE__ */ jsx(Text, { style: styles.notice, children: view.exportInfo.notice }) : null,
264
+ onRetry ? /* @__PURE__ */ jsx(View, { style: styles.actions, children: /* @__PURE__ */ jsx(Pressable, { onPress: onRetry, style: ({
265
+ pressed
266
+ }) => [styles.primary, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Run again" }) }) }) : null
267
+ ] }) : null
268
+ ] })
249
269
  ] });
250
270
  }
251
271
  function StateChip({
252
272
  state,
253
273
  worked
254
274
  }) {
275
+ const theme = useCanvasTheme();
276
+ const styles = useMemo(() => makeStyles(theme), [theme]);
255
277
  if (state === "stale") return /* @__PURE__ */ jsx(Text, { style: [styles.badge, styles.badgeFail], children: "Stopped responding" });
256
278
  if (state === "succeeded") return /* @__PURE__ */ jsxs(Text, { style: [styles.badge, styles.badgeOk], children: [
257
279
  "Ready \xB7 ",
@@ -268,6 +290,8 @@ function ExportProgress({
268
290
  elapsedMs,
269
291
  line
270
292
  }) {
293
+ const theme = useCanvasTheme();
294
+ const styles = useMemo(() => makeStyles(theme), [theme]);
271
295
  const pct = Math.round(renderProgressPct(info.step, info.projectedMs, elapsedMs));
272
296
  return /* @__PURE__ */ jsxs(View, { style: styles.progressBox, children: [
273
297
  /* @__PURE__ */ jsx(Text, { style: styles.line, numberOfLines: 1, children: info.step ? `Step ${info.step.index} of ${info.step.total} \xB7 ${info.step.label}` : line || "Rendering\u2026" }),
@@ -286,12 +310,21 @@ function ResultThumb({
286
310
  url,
287
311
  kind
288
312
  }) {
289
- if (kind === "image") return /* @__PURE__ */ jsx(Image, { source: {
290
- uri: url
291
- }, style: styles.thumb, resizeMode: "cover" });
292
- return /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbGlyph], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "filmstrip", size: 28, color: "#94a3b8" }) });
313
+ const theme = useCanvasTheme();
314
+ const styles = useMemo(() => makeStyles(theme), [theme]);
315
+ const [state, setState] = useState("loading");
316
+ if (kind === "image") {
317
+ return /* @__PURE__ */ jsxs(View, { style: [styles.thumb, styles.thumbClip], children: [
318
+ state === "failed" ? /* @__PURE__ */ jsx(CoverPlaceholder, { seed: url, icon: "image-outline" }) : null,
319
+ state === "loading" ? /* @__PURE__ */ jsx(Skeleton, {}) : null,
320
+ state !== "failed" ? /* @__PURE__ */ jsx(Image, { source: {
321
+ uri: url
322
+ }, style: StyleSheet.absoluteFill, resizeMode: "cover", onLoad: () => setState("ok"), onError: () => setState("failed") }) : null
323
+ ] });
324
+ }
325
+ return /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbClip], children: /* @__PURE__ */ jsx(CoverPlaceholder, { seed: url, icon: "play" }) });
293
326
  }
294
- const styles = StyleSheet.create({
327
+ const makeStyles = themedStyles((theme) => StyleSheet.create({
295
328
  root: {
296
329
  flex: 1,
297
330
  minHeight: 240
@@ -300,107 +333,138 @@ const styles = StyleSheet.create({
300
333
  flexDirection: "row",
301
334
  alignItems: "center",
302
335
  justifyContent: "space-between",
303
- paddingHorizontal: 16,
304
- paddingBottom: 8
336
+ paddingLeft: SPACE.lg,
337
+ paddingRight: SPACE.md,
338
+ paddingBottom: SPACE.md
305
339
  },
306
- title: {
307
- fontSize: 15,
308
- fontWeight: "700",
309
- color: "#0f172a"
340
+ title: __spreadProps(__spreadValues({}, TYPE.title), {
341
+ color: theme.foreground
342
+ }),
343
+ close: {
344
+ width: 36,
345
+ height: 36,
346
+ borderRadius: 18,
347
+ alignItems: "center",
348
+ justifyContent: "center",
349
+ backgroundColor: theme.card
310
350
  },
311
351
  list: {
312
- paddingHorizontal: 16,
313
- paddingBottom: 20,
314
- gap: 10
352
+ paddingHorizontal: SPACE.lg,
353
+ paddingBottom: SPACE.xl,
354
+ gap: SPACE.sm
355
+ },
356
+ emptyBox: {
357
+ alignItems: "center",
358
+ paddingVertical: SPACE.xl + 4,
359
+ paddingHorizontal: SPACE.xl,
360
+ borderRadius: RADIUS.xl,
361
+ backgroundColor: theme.card
315
362
  },
316
- empty: {
317
- fontSize: 13,
318
- color: "#64748b",
319
- lineHeight: 18,
320
- paddingVertical: 16
363
+ emptyIcon: {
364
+ width: 48,
365
+ height: 48,
366
+ borderRadius: 24,
367
+ alignItems: "center",
368
+ justifyContent: "center",
369
+ backgroundColor: theme.background,
370
+ marginBottom: SPACE.md
321
371
  },
372
+ empty: __spreadProps(__spreadValues({}, TYPE.body), {
373
+ fontSize: 14,
374
+ lineHeight: 20,
375
+ color: theme.mutedForeground,
376
+ textAlign: "center"
377
+ }),
322
378
  card: {
323
- borderWidth: StyleSheet.hairlineWidth,
324
- borderColor: "#e2e8f0",
325
- borderRadius: 12,
326
- padding: 12,
327
- backgroundColor: "#fff",
328
- gap: 6
379
+ flexDirection: "row",
380
+ alignItems: "flex-start",
381
+ gap: SPACE.md,
382
+ borderRadius: RADIUS.lg,
383
+ padding: SPACE.md,
384
+ backgroundColor: theme.card
385
+ },
386
+ cardLead: {
387
+ width: 56
388
+ },
389
+ cardBody: {
390
+ flex: 1,
391
+ minWidth: 0,
392
+ gap: SPACE.xs
329
393
  },
330
394
  cardHead: {
331
395
  flexDirection: "row",
332
396
  alignItems: "center",
333
- gap: 8
397
+ gap: SPACE.sm,
398
+ minHeight: 22
334
399
  },
335
- cardTitle: {
400
+ cardTitle: __spreadProps(__spreadValues({}, TYPE.label), {
401
+ fontSize: 15,
336
402
  flex: 1,
337
- fontSize: 13,
338
- fontWeight: "700",
339
- color: "#0f172a"
340
- },
341
- badge: {
342
- fontSize: 10,
343
- fontWeight: "700",
344
- color: "#64748b",
345
- backgroundColor: "#f1f5f9",
346
- paddingHorizontal: 6,
347
- paddingVertical: 2,
348
- borderRadius: 6,
349
- overflow: "hidden"
403
+ color: theme.foreground
404
+ }),
405
+ dismiss: {
406
+ width: 24,
407
+ height: 24,
408
+ alignItems: "center",
409
+ justifyContent: "center",
410
+ borderRadius: 12
350
411
  },
412
+ badge: __spreadProps(__spreadValues({}, TYPE.caption), {
413
+ color: theme.mutedForeground
414
+ }),
351
415
  badgeRun: {
352
- color: "#fff7ed",
353
- backgroundColor: "#ea580c"
416
+ color: theme.foreground
354
417
  },
355
418
  badgeOk: {
356
- color: "#166534",
357
- backgroundColor: "#dcfce7"
419
+ color: theme.successText
358
420
  },
359
421
  badgeFail: {
360
- color: "#991b1b",
361
- backgroundColor: "#fee2e2"
362
- },
363
- line: {
364
- fontSize: 11,
365
- color: "#64748b"
366
- },
367
- error: {
368
- fontSize: 12,
369
- color: "#b91c1c"
370
- },
371
- notice: {
372
- fontSize: 11,
373
- color: "#b45309"
422
+ color: theme.destructiveText
374
423
  },
375
- done: {
376
- fontSize: 12,
424
+ line: __spreadProps(__spreadValues({}, TYPE.caption), {
425
+ fontWeight: "400",
426
+ color: theme.mutedForeground
427
+ }),
428
+ error: __spreadProps(__spreadValues({}, TYPE.caption), {
429
+ fontWeight: "400",
430
+ color: theme.destructiveText
431
+ }),
432
+ notice: __spreadProps(__spreadValues({}, TYPE.caption), {
433
+ fontWeight: "400",
434
+ color: theme.warningText
435
+ }),
436
+ done: __spreadProps(__spreadValues({}, TYPE.caption), {
377
437
  fontWeight: "600",
378
- color: "#166534",
379
- paddingVertical: 8
380
- },
438
+ color: theme.successText,
439
+ paddingVertical: SPACE.xs + 2
440
+ }),
381
441
  staleBox: {
382
- gap: 6
442
+ gap: SPACE.xs
383
443
  },
384
444
  progressBox: {
385
- gap: 4
445
+ gap: SPACE.xs + 2,
446
+ marginTop: 2
386
447
  },
387
448
  bar: {
388
- height: 6,
389
- borderRadius: 3,
390
- backgroundColor: "#f1f5f9",
449
+ height: 4,
450
+ borderRadius: 2,
451
+ backgroundColor: theme.tint(0.08),
391
452
  overflow: "hidden"
392
453
  },
393
454
  barFill: {
394
- height: 6,
395
- borderRadius: 3,
396
- backgroundColor: "#ea580c"
455
+ height: 4,
456
+ borderRadius: 2,
457
+ backgroundColor: theme.foreground
458
+ },
459
+ thumbClip: {
460
+ overflow: "hidden"
397
461
  },
398
462
  thumb: {
399
- width: "100%",
400
- aspectRatio: 16 / 9,
401
- borderRadius: 8,
463
+ width: 56,
464
+ height: 56,
465
+ borderRadius: RADIUS.md,
402
466
  overflow: "hidden",
403
- backgroundColor: "#f1f5f9"
467
+ backgroundColor: theme.background
404
468
  },
405
469
  thumbGlyph: {
406
470
  alignItems: "center",
@@ -408,27 +472,28 @@ const styles = StyleSheet.create({
408
472
  },
409
473
  actions: {
410
474
  flexDirection: "row",
411
- gap: 8,
412
- marginTop: 4
475
+ flexWrap: "wrap",
476
+ gap: SPACE.sm - 2,
477
+ marginTop: SPACE.xs + 2
413
478
  },
414
479
  primary: {
415
- paddingHorizontal: 12,
416
- paddingVertical: 8,
417
- borderRadius: 8,
418
- backgroundColor: "#ea580c"
419
- },
420
- primaryLabel: {
421
- fontSize: 12,
422
- fontWeight: "700",
423
- color: "#fff7ed"
480
+ minHeight: 32,
481
+ justifyContent: "center",
482
+ paddingHorizontal: SPACE.md + 2,
483
+ borderRadius: RADIUS.pill,
484
+ backgroundColor: theme.foreground
424
485
  },
486
+ primaryLabel: __spreadProps(__spreadValues({}, TYPE.label), {
487
+ color: theme.background
488
+ }),
425
489
  ghost: {
426
- paddingHorizontal: 12,
427
- paddingVertical: 8
490
+ minHeight: 32,
491
+ justifyContent: "center",
492
+ paddingHorizontal: SPACE.md + 2,
493
+ borderRadius: RADIUS.pill,
494
+ backgroundColor: theme.background
428
495
  },
429
- ghostLabel: {
430
- fontSize: 12,
431
- fontWeight: "600",
432
- color: "#64748b"
433
- }
434
- });export{CanvasTasksPanel};//# sourceMappingURL=CanvasTasksPanel.js.map
496
+ ghostLabel: __spreadProps(__spreadValues({}, TYPE.label), {
497
+ color: theme.foreground
498
+ })
499
+ }));export{CanvasTasksPanel};//# sourceMappingURL=CanvasTasksPanel.js.map