@adminide-stack/yantra-mobile 12.0.121 → 12.0.123-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/apps/appArt.js +1 -1
- package/lib/features/apps/appArt.js.map +1 -1
- package/lib/features/apps/mobileAppCatalog.js +15 -11
- package/lib/features/apps/mobileAppCatalog.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +82 -20
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +291 -100
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +105 -12
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +266 -68
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +204 -66
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +31 -13
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +176 -0
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -0
- package/lib/features/canvas/CanvasTasksPanel.js +325 -29
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +5 -4
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +137 -61
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +33 -2
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +197 -0
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -0
- package/lib/features/canvas/NativeCanvasViewer.js +89 -11
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +55 -2
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +323 -13
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +1 -53
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +697 -506
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +22 -5
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasAgentChat.js +125 -11
- package/lib/features/canvas/canvasAgentChat.js.map +1 -1
- package/lib/features/canvas/canvasCore.js +117 -12
- package/lib/features/canvas/canvasCore.js.map +1 -1
- package/lib/features/canvas/canvasEditOps.js +148 -111
- package/lib/features/canvas/canvasEditOps.js.map +1 -1
- package/lib/features/canvas/canvasTaskSync.js +235 -0
- package/lib/features/canvas/canvasTaskSync.js.map +1 -0
- package/lib/features/canvas/canvasTasks.js +98 -11
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/createTiles.js +247 -0
- package/lib/features/canvas/createTiles.js.map +1 -0
- package/lib/features/canvas/deepLinks.js +83 -0
- package/lib/features/canvas/deepLinks.js.map +1 -0
- package/lib/features/canvas/frameExtract.js +13 -1
- package/lib/features/canvas/frameExtract.js.map +1 -1
- package/lib/features/canvas/generationModels.js +36 -8
- package/lib/features/canvas/generationModels.js.map +1 -1
- package/lib/features/canvas/generatorCommands.js +106 -0
- package/lib/features/canvas/generatorCommands.js.map +1 -0
- package/lib/features/canvas/generatorReferences.js +82 -0
- package/lib/features/canvas/generatorReferences.js.map +1 -0
- package/lib/features/canvas/homeWork.js +74 -0
- package/lib/features/canvas/homeWork.js.map +1 -0
- package/lib/features/canvas/linksRpc.js +130 -0
- package/lib/features/canvas/linksRpc.js.map +1 -0
- package/lib/features/canvas/mediaRecheck.js +176 -0
- package/lib/features/canvas/mediaRecheck.js.map +1 -0
- package/lib/features/canvas/mediaUrls.js +258 -0
- package/lib/features/canvas/mediaUrls.js.map +1 -0
- package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
- package/lib/features/canvas/promoProjectImport.js +80 -13
- package/lib/features/canvas/promoProjectImport.js.map +1 -1
- package/lib/features/canvas/promoVideo.js +106 -15
- package/lib/features/canvas/promoVideo.js.map +1 -1
- package/lib/features/canvas/reframe.js +228 -0
- package/lib/features/canvas/reframe.js.map +1 -0
- package/lib/features/canvas/serverTasks.js +697 -0
- package/lib/features/canvas/serverTasks.js.map +1 -0
- package/lib/features/canvas/set/SetViewportWebView.js +207 -28
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/set/agent/prompt.js +66 -0
- package/lib/features/canvas/set/agent/prompt.js.map +1 -0
- package/lib/features/canvas/set/agent/setOps.js +203 -0
- package/lib/features/canvas/set/agent/setOps.js.map +1 -0
- package/lib/features/canvas/set/agent/setTurn.js +128 -0
- package/lib/features/canvas/set/agent/setTurn.js.map +1 -0
- package/lib/features/canvas/set/agent/snapshot.js +43 -0
- package/lib/features/canvas/set/agent/snapshot.js.map +1 -0
- package/lib/features/canvas/set/agent/tools.js +580 -0
- package/lib/features/canvas/set/agent/tools.js.map +1 -0
- package/lib/features/canvas/set/setProject.js +43 -4
- package/lib/features/canvas/set/setProject.js.map +1 -1
- package/lib/features/canvas/set/supplyLibrary.js +397 -0
- package/lib/features/canvas/set/supplyLibrary.js.map +1 -0
- package/lib/features/canvas/storageLibrary.js +113 -52
- package/lib/features/canvas/storageLibrary.js.map +1 -1
- package/lib/features/canvas/studioCatalog.js +15 -2
- package/lib/features/canvas/studioCatalog.js.map +1 -1
- package/lib/features/canvas/studioLooks.js +1 -8
- package/lib/features/canvas/studioLooks.js.map +1 -1
- package/lib/features/canvas/useBoardMediaRefresh.js +66 -0
- package/lib/features/canvas/useBoardMediaRefresh.js.map +1 -0
- package/lib/features/canvas/useMediaSource.js +84 -0
- package/lib/features/canvas/useMediaSource.js.map +1 -0
- package/lib/features/canvas/video3d.js +11 -10
- package/lib/features/canvas/video3d.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +46 -0
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -0
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +134 -0
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +45 -7
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/agentLoop.js +4 -2
- package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/attachments.js +304 -0
- package/lib/features/canvas/videoEditor/agent/attachments.js.map +1 -0
- package/lib/features/canvas/videoEditor/agent/brainClient.js +3 -2
- package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/cutTools.js +207 -7
- package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
- package/lib/features/canvas/videoEditor/blurBox.js +34 -0
- package/lib/features/canvas/videoEditor/blurBox.js.map +1 -0
- package/lib/features/canvas/videoEditor/compileTimeline.js +668 -0
- package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -0
- package/lib/features/canvas/videoEditor/editorModel.js +56 -22
- package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportPipeline.js +77 -0
- package/lib/features/canvas/videoEditor/exportPipeline.js.map +1 -0
- package/lib/features/canvas/videoEditor/exportRenderer.js +19 -12
- package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +216 -0
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -0
- package/lib/features/canvas/videoEditor/formWidgets.js +142 -0
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -0
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +195 -0
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -0
- package/lib/features/canvas/videoEditor/produce/produceScenes.js +158 -0
- package/lib/features/canvas/videoEditor/produce/produceScenes.js.map +1 -0
- package/lib/features/canvas/videoEditor/remoteMediaClient.js +17 -5
- package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
- package/lib/features/canvas/videoEditor/renderTimeline.js +207 -0
- package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -0
- package/lib/features/canvas/videoEditor/renewLinks.js +64 -0
- package/lib/features/canvas/videoEditor/renewLinks.js.map +1 -0
- package/lib/features/canvas/videoEditor/sceneLayers.js +101 -0
- package/lib/features/canvas/videoEditor/sceneLayers.js.map +1 -0
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +283 -0
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -0
- package/lib/features/canvas/videoEditor/tools/catalog.js +576 -0
- package/lib/features/canvas/videoEditor/tools/catalog.js.map +1 -0
- package/lib/features/canvas/videoEditor/videoProjectsStore.js +27 -3
- package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +29 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +8 -4
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/codezenHandoff.js +108 -0
- package/lib/features/webbuilder/codezenHandoff.js.map +1 -0
- package/lib/features/webbuilder/workflow.js.map +1 -1
- package/lib/hooks/useChatApi.js +1 -2
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/screens/CanvasBoard/index.js +12 -1
- package/lib/screens/CanvasBoard/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/HomeSuggestions.js +3 -3
- package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
- package/lib/screens/WebBuilder/index.js +4 -2
- package/lib/screens/WebBuilder/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/index.js +29 -2
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +30 -6
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/package.json +4 -4
- /package/lib/assets/apps/{paper2poster.webp → poster.webp} +0 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {StyleSheet,Platform,View,Pressable,Text,ScrollView}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {groupCanvasChatModels}from'./canvasAgentChat.js';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
function CanvasModelPicker({
|
|
21
|
+
models,
|
|
22
|
+
selectedId,
|
|
23
|
+
onSelect,
|
|
24
|
+
onClose,
|
|
25
|
+
title = "Select model"
|
|
26
|
+
}) {
|
|
27
|
+
const selected = models.find((m) => m.id === selectedId);
|
|
28
|
+
const groups = groupCanvasChatModels(models);
|
|
29
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.scrim, pointerEvents: "auto", children: [
|
|
30
|
+
/* @__PURE__ */ jsx(Pressable, { style: StyleSheet.absoluteFill, onPress: onClose, accessibilityLabel: "Close model picker" }),
|
|
31
|
+
/* @__PURE__ */ jsxs(View, { style: styles.sheet, children: [
|
|
32
|
+
/* @__PURE__ */ jsxs(View, { style: styles.head, children: [
|
|
33
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chip", size: 16, color: "#64748b" }),
|
|
34
|
+
/* @__PURE__ */ jsx(Text, { style: styles.headTitle, children: title }),
|
|
35
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityLabel: "Close model picker", style: styles.close, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 18, color: "#64748b" }) })
|
|
36
|
+
] }),
|
|
37
|
+
selected ? /* @__PURE__ */ jsxs(View, { style: styles.selectedBar, children: [
|
|
38
|
+
/* @__PURE__ */ jsx(Text, { style: styles.selectedKicker, children: "Selected" }),
|
|
39
|
+
/* @__PURE__ */ jsx(Text, { style: styles.selectedTitle, numberOfLines: 1, children: selected.title })
|
|
40
|
+
] }) : null,
|
|
41
|
+
/* @__PURE__ */ jsx(ScrollView, { style: styles.list, contentContainerStyle: styles.listBody, keyboardShouldPersistTaps: "handled", children: groups.map(({
|
|
42
|
+
group,
|
|
43
|
+
options
|
|
44
|
+
}) => /* @__PURE__ */ jsxs(View, { style: styles.group, children: [
|
|
45
|
+
/* @__PURE__ */ jsx(Text, { style: styles.groupLabel, children: group }),
|
|
46
|
+
options.map((m) => {
|
|
47
|
+
const active = m.id === selectedId;
|
|
48
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
49
|
+
onSelect(m.id);
|
|
50
|
+
onClose();
|
|
51
|
+
}, style: [styles.row, active && styles.rowOn], accessibilityRole: "button", accessibilityState: {
|
|
52
|
+
selected: active
|
|
53
|
+
}, children: /* @__PURE__ */ jsxs(View, { style: styles.rowBody, children: [
|
|
54
|
+
/* @__PURE__ */ jsxs(View, { style: styles.rowTitleLine, children: [
|
|
55
|
+
/* @__PURE__ */ jsx(Text, { style: styles.rowTitle, numberOfLines: 1, children: m.title }),
|
|
56
|
+
active ? /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "check", size: 16, color: "#0f172a" }) : null
|
|
57
|
+
] }),
|
|
58
|
+
/* @__PURE__ */ jsx(Text, { style: styles.rowId, numberOfLines: 1, children: m.id }),
|
|
59
|
+
m.description ? /* @__PURE__ */ jsx(Text, { style: styles.rowDesc, numberOfLines: 2, children: m.description }) : null
|
|
60
|
+
] }) }, m.id);
|
|
61
|
+
})
|
|
62
|
+
] }, group)) })
|
|
63
|
+
] })
|
|
64
|
+
] });
|
|
65
|
+
}
|
|
66
|
+
const styles = StyleSheet.create({
|
|
67
|
+
scrim: __spreadProps(__spreadValues({}, StyleSheet.absoluteFillObject), {
|
|
68
|
+
zIndex: 40,
|
|
69
|
+
elevation: 40,
|
|
70
|
+
backgroundColor: "rgba(0,0,0,0.4)",
|
|
71
|
+
justifyContent: "center",
|
|
72
|
+
padding: 16
|
|
73
|
+
}),
|
|
74
|
+
sheet: {
|
|
75
|
+
maxHeight: "80%",
|
|
76
|
+
borderRadius: 16,
|
|
77
|
+
backgroundColor: "#fff",
|
|
78
|
+
borderWidth: StyleSheet.hairlineWidth,
|
|
79
|
+
borderColor: "#e2e8f0",
|
|
80
|
+
overflow: "hidden"
|
|
81
|
+
},
|
|
82
|
+
head: {
|
|
83
|
+
flexDirection: "row",
|
|
84
|
+
alignItems: "center",
|
|
85
|
+
gap: 8,
|
|
86
|
+
paddingHorizontal: 16,
|
|
87
|
+
paddingVertical: 12,
|
|
88
|
+
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
89
|
+
borderBottomColor: "#e2e8f0"
|
|
90
|
+
},
|
|
91
|
+
headTitle: {
|
|
92
|
+
flex: 1,
|
|
93
|
+
fontSize: 14,
|
|
94
|
+
fontWeight: "600",
|
|
95
|
+
color: "#0f172a"
|
|
96
|
+
},
|
|
97
|
+
close: {
|
|
98
|
+
padding: 4
|
|
99
|
+
},
|
|
100
|
+
selectedBar: {
|
|
101
|
+
flexDirection: "row",
|
|
102
|
+
alignItems: "center",
|
|
103
|
+
gap: 8,
|
|
104
|
+
paddingHorizontal: 16,
|
|
105
|
+
paddingVertical: 8,
|
|
106
|
+
backgroundColor: "#f8fafc",
|
|
107
|
+
borderBottomWidth: StyleSheet.hairlineWidth,
|
|
108
|
+
borderBottomColor: "#e2e8f0"
|
|
109
|
+
},
|
|
110
|
+
selectedKicker: {
|
|
111
|
+
fontSize: 11,
|
|
112
|
+
fontWeight: "600",
|
|
113
|
+
letterSpacing: 0.6,
|
|
114
|
+
textTransform: "uppercase",
|
|
115
|
+
color: "#64748b"
|
|
116
|
+
},
|
|
117
|
+
selectedTitle: {
|
|
118
|
+
flex: 1,
|
|
119
|
+
fontSize: 14,
|
|
120
|
+
fontWeight: "500",
|
|
121
|
+
color: "#0f172a"
|
|
122
|
+
},
|
|
123
|
+
list: {
|
|
124
|
+
maxHeight: 420
|
|
125
|
+
},
|
|
126
|
+
listBody: {
|
|
127
|
+
padding: 8,
|
|
128
|
+
paddingBottom: 16
|
|
129
|
+
},
|
|
130
|
+
group: {
|
|
131
|
+
marginBottom: 8
|
|
132
|
+
},
|
|
133
|
+
groupLabel: {
|
|
134
|
+
paddingHorizontal: 8,
|
|
135
|
+
paddingVertical: 4,
|
|
136
|
+
fontSize: 11,
|
|
137
|
+
fontWeight: "600",
|
|
138
|
+
letterSpacing: 0.6,
|
|
139
|
+
textTransform: "uppercase",
|
|
140
|
+
color: "#94a3b8"
|
|
141
|
+
},
|
|
142
|
+
row: {
|
|
143
|
+
borderRadius: 10,
|
|
144
|
+
paddingHorizontal: 12,
|
|
145
|
+
paddingVertical: 8
|
|
146
|
+
},
|
|
147
|
+
rowOn: {
|
|
148
|
+
backgroundColor: "#f1f5f9"
|
|
149
|
+
},
|
|
150
|
+
rowBody: {
|
|
151
|
+
minWidth: 0,
|
|
152
|
+
flex: 1
|
|
153
|
+
},
|
|
154
|
+
rowTitleLine: {
|
|
155
|
+
flexDirection: "row",
|
|
156
|
+
alignItems: "center",
|
|
157
|
+
gap: 8
|
|
158
|
+
},
|
|
159
|
+
rowTitle: {
|
|
160
|
+
flex: 1,
|
|
161
|
+
fontSize: 14,
|
|
162
|
+
fontWeight: "600",
|
|
163
|
+
color: "#0f172a"
|
|
164
|
+
},
|
|
165
|
+
rowId: {
|
|
166
|
+
marginTop: 2,
|
|
167
|
+
fontSize: 11,
|
|
168
|
+
fontFamily: Platform.OS === "ios" ? "Menlo" : "monospace",
|
|
169
|
+
color: "#94a3b8"
|
|
170
|
+
},
|
|
171
|
+
rowDesc: {
|
|
172
|
+
marginTop: 2,
|
|
173
|
+
fontSize: 12,
|
|
174
|
+
color: "#94a3b8"
|
|
175
|
+
}
|
|
176
|
+
});export{CanvasModelPicker};//# sourceMappingURL=CanvasModelPicker.js.map
|
|
@@ -0,0 +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,38 +1,296 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useEffect}from'react';import {StyleSheet,View,Text,Pressable,ScrollView}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {listCanvasTasks,hydrateCanvasTasks,subscribeCanvasTasks,markTaskDelivered,isTerminal,
|
|
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;
|
|
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 STALE_LINE = `${DEADLINE_VERDICT_ERROR}.`;
|
|
21
|
+
function useClock(active) {
|
|
22
|
+
const [now, setNow] = useState(() => Date.now());
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!active) return void 0;
|
|
25
|
+
const timer = setInterval(() => setNow(Date.now()), 1e3);
|
|
26
|
+
return () => clearInterval(timer);
|
|
27
|
+
}, [active]);
|
|
28
|
+
return now;
|
|
29
|
+
}
|
|
30
|
+
function CanvasTasksPanel({
|
|
2
31
|
onClose,
|
|
3
32
|
onPlaceResult
|
|
4
33
|
}) {
|
|
5
|
-
const
|
|
34
|
+
const host = useCanvasTasksHost();
|
|
35
|
+
const [local, setLocal] = useState(() => listCanvasTasks());
|
|
36
|
+
const [remote, setRemote] = useState([]);
|
|
37
|
+
const [hidden, setHidden] = useState(() => /* @__PURE__ */ new Set());
|
|
38
|
+
const syncing = useRef(false);
|
|
6
39
|
useEffect(() => {
|
|
7
|
-
void hydrateCanvasTasks().then(() =>
|
|
8
|
-
return subscribeCanvasTasks(() =>
|
|
40
|
+
void hydrateCanvasTasks().then(() => setLocal(listCanvasTasks()));
|
|
41
|
+
return subscribeCanvasTasks(() => setLocal(listCanvasTasks()));
|
|
42
|
+
}, []);
|
|
43
|
+
const sync = useCallback(async () => {
|
|
44
|
+
if (syncing.current) return;
|
|
45
|
+
syncing.current = true;
|
|
46
|
+
try {
|
|
47
|
+
setRemote(await syncCanvasTasks());
|
|
48
|
+
} catch (e) {
|
|
49
|
+
} finally {
|
|
50
|
+
syncing.current = false;
|
|
51
|
+
}
|
|
9
52
|
}, []);
|
|
53
|
+
const rows = buildTaskRows(local, remote, hidden);
|
|
54
|
+
const now = useClock(rows.some((row) => isRowRunningAt(row, Date.now())));
|
|
55
|
+
const anyRunning = rows.some((row) => isRowRunningAt(row, now));
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
void sync();
|
|
58
|
+
const timer = setInterval(() => void sync(), anyRunning ? SYNC_RUNNING_MS : SYNC_IDLE_MS);
|
|
59
|
+
return () => clearInterval(timer);
|
|
60
|
+
}, [sync, anyRunning]);
|
|
61
|
+
const hide = (key) => setHidden((prev) => new Set(prev).add(key));
|
|
62
|
+
const place = async (row) => {
|
|
63
|
+
var _a, _b, _c, _d;
|
|
64
|
+
if (row.kind === "task") {
|
|
65
|
+
if (!await claimRow((_a = row.remote) == null ? void 0 : _a.remoteId)) {
|
|
66
|
+
markTaskDelivered(row.task.id);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
onPlaceResult(row.task);
|
|
70
|
+
markTaskDelivered(row.task.id);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const media = (_b = row.job.results) == null ? void 0 : _b.find(isVisualResult);
|
|
74
|
+
if (!media) return;
|
|
75
|
+
if (!await claimRow(row.job.remoteId)) {
|
|
76
|
+
hide(row.key);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
onPlaceResult({
|
|
80
|
+
id: row.job.id,
|
|
81
|
+
kind: "promo",
|
|
82
|
+
title: row.job.title,
|
|
83
|
+
brief: row.job.brief,
|
|
84
|
+
boardId: (_d = (_c = jobBoardId(row.job)) != null ? _c : host.openBoardId) != null ? _d : "",
|
|
85
|
+
state: "succeeded",
|
|
86
|
+
createdAt: row.job.createdAt,
|
|
87
|
+
request: {
|
|
88
|
+
prompt: row.job.brief
|
|
89
|
+
},
|
|
90
|
+
result: {
|
|
91
|
+
url: media.url,
|
|
92
|
+
title: media.title || row.job.title,
|
|
93
|
+
projectId: "",
|
|
94
|
+
preset: "",
|
|
95
|
+
pipeline: ""
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
hide(row.key);
|
|
99
|
+
};
|
|
100
|
+
const dismiss = (row) => {
|
|
101
|
+
var _a;
|
|
102
|
+
hide(row.key);
|
|
103
|
+
if (row.kind === "task") {
|
|
104
|
+
dismissTask(row.task.id);
|
|
105
|
+
void removeRemoteRow((_a = row.remote) == null ? void 0 : _a.remoteId);
|
|
106
|
+
} else {
|
|
107
|
+
void removeRemoteRow(row.job.remoteId);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
const retryPromo = (request, boardId, brief) => {
|
|
111
|
+
if (!host.runAction) return;
|
|
112
|
+
void startPromoTask(host.runAction, {
|
|
113
|
+
request,
|
|
114
|
+
boardId,
|
|
115
|
+
brief
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
const retry = (row) => {
|
|
119
|
+
var _a, _b;
|
|
120
|
+
if (!host.runAction) return void 0;
|
|
121
|
+
if (row.kind === "task") {
|
|
122
|
+
if (row.task.kind !== "promo" || isExportTask(row.task)) return void 0;
|
|
123
|
+
const {
|
|
124
|
+
task
|
|
125
|
+
} = row;
|
|
126
|
+
return () => {
|
|
127
|
+
dismiss(row);
|
|
128
|
+
retryPromo(task.request, task.boardId, task.brief);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const params = (_a = row.job.input) == null ? void 0 : _a.params;
|
|
132
|
+
if (row.job.lane !== "promo" || !params || typeof params.prompt !== "string") return void 0;
|
|
133
|
+
const boardId = (_b = jobBoardId(row.job)) != null ? _b : host.openBoardId;
|
|
134
|
+
if (!boardId) return void 0;
|
|
135
|
+
return () => {
|
|
136
|
+
dismiss(row);
|
|
137
|
+
retryPromo(params, boardId, row.job.brief);
|
|
138
|
+
};
|
|
139
|
+
};
|
|
10
140
|
return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
|
|
11
141
|
/* @__PURE__ */ jsxs(View, { style: styles.head, children: [
|
|
12
142
|
/* @__PURE__ */ jsx(Text, { style: styles.title, children: "Tasks" }),
|
|
13
143
|
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 8, accessibilityLabel: "Close tasks", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 20, color: "#64748b" }) })
|
|
14
144
|
] }),
|
|
15
|
-
/* @__PURE__ */ jsx(ScrollView, { contentContainerStyle: styles.list, children: rows.length === 0 ? /* @__PURE__ */ jsx(Text, { style: styles.empty, children: "
|
|
16
|
-
var _a;
|
|
17
|
-
return /* @__PURE__ */ jsxs(View, { style: styles.card, children: [
|
|
18
|
-
/* @__PURE__ */ jsxs(View, { style: styles.cardHead, children: [
|
|
19
|
-
/* @__PURE__ */ jsx(Text, { style: styles.cardTitle, numberOfLines: 1, children: task.title }),
|
|
20
|
-
/* @__PURE__ */ jsx(Text, { style: [styles.badge, task.state === "succeeded" && styles.badgeOk, task.state === "failed" && styles.badgeFail], children: task.state })
|
|
21
|
-
] }),
|
|
22
|
-
task.brief ? /* @__PURE__ */ jsx(Text, { style: styles.brief, numberOfLines: 2, children: task.brief }) : null,
|
|
23
|
-
task.lastLine ? /* @__PURE__ */ jsx(Text, { style: styles.line, children: task.lastLine }) : null,
|
|
24
|
-
task.error ? /* @__PURE__ */ jsx(Text, { style: styles.error, children: task.error }) : null,
|
|
25
|
-
/* @__PURE__ */ jsxs(View, { style: styles.actions, children: [
|
|
26
|
-
task.state === "succeeded" && ((_a = task.result) == null ? void 0 : _a.url) && !task.delivered ? /* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
27
|
-
onPlaceResult(task);
|
|
28
|
-
markTaskDelivered(task.id);
|
|
29
|
-
}, style: styles.primary, children: /* @__PURE__ */ jsx(Text, { style: styles.primaryLabel, children: "Place on board" }) }) : null,
|
|
30
|
-
isTerminal(task.state) ? /* @__PURE__ */ jsx(Pressable, { onPress: () => dismissTask(task.id), style: styles.ghost, children: /* @__PURE__ */ jsx(Text, { style: styles.ghostLabel, children: "Dismiss" }) }) : null
|
|
31
|
-
] })
|
|
32
|
-
] }, task.id);
|
|
33
|
-
}) })
|
|
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)) })
|
|
34
146
|
] });
|
|
35
147
|
}
|
|
148
|
+
const isVisualResult = (r) => r.kind === "image" || r.kind === "video";
|
|
149
|
+
function viewOf(row, now) {
|
|
150
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
151
|
+
if (row.kind === "task") {
|
|
152
|
+
const {
|
|
153
|
+
task
|
|
154
|
+
} = row;
|
|
155
|
+
const loose = task;
|
|
156
|
+
const isExport = isExportTask(task);
|
|
157
|
+
const stale2 = !isTerminal(task.state) && isStaleJob({
|
|
158
|
+
state: "running",
|
|
159
|
+
deadlineAt: jobDeadline(task),
|
|
160
|
+
createdAt: task.createdAt
|
|
161
|
+
}, now) || isDeadlineVerdict(task);
|
|
162
|
+
return __spreadProps(__spreadValues({
|
|
163
|
+
title: task.title,
|
|
164
|
+
state: stale2 ? "stale" : task.state,
|
|
165
|
+
line: task.lastLine,
|
|
166
|
+
error: task.error,
|
|
167
|
+
boardId: task.boardId,
|
|
168
|
+
media: ((_a = task.result) == null ? void 0 : _a.url) ? {
|
|
169
|
+
url: task.result.url,
|
|
170
|
+
kind: isExport && ((_b = loose.request) == null ? void 0 : _b.media) === "image" ? "image" : "video"
|
|
171
|
+
} : void 0,
|
|
172
|
+
delivered: Boolean(task.delivered),
|
|
173
|
+
elapsedMs: ((_c = task.endedAt) != null ? _c : now) - ((_d = task.startedAt) != null ? _d : task.createdAt)
|
|
174
|
+
}, isExport ? {
|
|
175
|
+
exportInfo: {
|
|
176
|
+
step: loose.step,
|
|
177
|
+
projectedMs: (_e = loose.handle) == null ? void 0 : _e.projectedMs,
|
|
178
|
+
notice: (_f = loose.handle) == null ? void 0 : _f.notice
|
|
179
|
+
}
|
|
180
|
+
} : {}), {
|
|
181
|
+
elsewhere: false
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const {
|
|
185
|
+
job
|
|
186
|
+
} = row;
|
|
187
|
+
const stale = isStaleJob(job, now) || isDeadlineVerdict(job);
|
|
188
|
+
const media = (_g = job.results) == null ? void 0 : _g.find(isVisualResult);
|
|
189
|
+
return {
|
|
190
|
+
title: job.title,
|
|
191
|
+
state: stale ? "stale" : job.state,
|
|
192
|
+
line: serverProgressLine(job),
|
|
193
|
+
error: job.error,
|
|
194
|
+
boardId: jobBoardId(job),
|
|
195
|
+
media: media ? {
|
|
196
|
+
url: media.url,
|
|
197
|
+
kind: media.kind
|
|
198
|
+
} : void 0,
|
|
199
|
+
delivered: Boolean(job.delivered),
|
|
200
|
+
elapsedMs: ((_h = job.endedAt) != null ? _h : now) - ((_i = job.startedAt) != null ? _i : job.createdAt),
|
|
201
|
+
elsewhere: true
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
function RowCard({
|
|
205
|
+
row,
|
|
206
|
+
now,
|
|
207
|
+
openBoardId,
|
|
208
|
+
boardLabel,
|
|
209
|
+
onPlace,
|
|
210
|
+
onOpenBoard,
|
|
211
|
+
onDismiss,
|
|
212
|
+
onRetry
|
|
213
|
+
}) {
|
|
214
|
+
var _a;
|
|
215
|
+
const view = viewOf(row, now);
|
|
216
|
+
const worked = formatWorked(view.elapsedMs);
|
|
217
|
+
const onThisBoard = !view.boardId || view.boardId === openBoardId;
|
|
218
|
+
const board = view.boardId ? boardLabel == null ? void 0 : boardLabel(view.boardId) : void 0;
|
|
219
|
+
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
|
+
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 }),
|
|
224
|
+
/* @__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
|
|
249
|
+
] });
|
|
250
|
+
}
|
|
251
|
+
function StateChip({
|
|
252
|
+
state,
|
|
253
|
+
worked
|
|
254
|
+
}) {
|
|
255
|
+
if (state === "stale") return /* @__PURE__ */ jsx(Text, { style: [styles.badge, styles.badgeFail], children: "Stopped responding" });
|
|
256
|
+
if (state === "succeeded") return /* @__PURE__ */ jsxs(Text, { style: [styles.badge, styles.badgeOk], children: [
|
|
257
|
+
"Ready \xB7 ",
|
|
258
|
+
worked
|
|
259
|
+
] });
|
|
260
|
+
if (state === "failed") return /* @__PURE__ */ jsxs(Text, { style: [styles.badge, styles.badgeFail], children: [
|
|
261
|
+
"Stopped \xB7 ",
|
|
262
|
+
worked
|
|
263
|
+
] });
|
|
264
|
+
return /* @__PURE__ */ jsx(Text, { style: [styles.badge, styles.badgeRun], children: state === "submitting" ? "Starting" : `Running \xB7 ${worked}` });
|
|
265
|
+
}
|
|
266
|
+
function ExportProgress({
|
|
267
|
+
info,
|
|
268
|
+
elapsedMs,
|
|
269
|
+
line
|
|
270
|
+
}) {
|
|
271
|
+
const pct = Math.round(renderProgressPct(info.step, info.projectedMs, elapsedMs));
|
|
272
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.progressBox, children: [
|
|
273
|
+
/* @__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" }),
|
|
274
|
+
/* @__PURE__ */ jsx(View, { style: styles.bar, accessibilityRole: "progressbar", accessibilityValue: {
|
|
275
|
+
min: 0,
|
|
276
|
+
max: 100,
|
|
277
|
+
now: pct
|
|
278
|
+
}, accessibilityLabel: "Render progress", children: /* @__PURE__ */ jsx(View, { style: [styles.barFill, {
|
|
279
|
+
width: `${pct}%`
|
|
280
|
+
}] }) }),
|
|
281
|
+
info.projectedMs ? /* @__PURE__ */ jsx(Text, { style: styles.line, children: renderTimeLeft(info.projectedMs, elapsedMs) }) : null,
|
|
282
|
+
info.notice ? /* @__PURE__ */ jsx(Text, { style: styles.notice, children: info.notice }) : null
|
|
283
|
+
] });
|
|
284
|
+
}
|
|
285
|
+
function ResultThumb({
|
|
286
|
+
url,
|
|
287
|
+
kind
|
|
288
|
+
}) {
|
|
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" }) });
|
|
293
|
+
}
|
|
36
294
|
const styles = StyleSheet.create({
|
|
37
295
|
root: {
|
|
38
296
|
flex: 1,
|
|
@@ -83,12 +341,16 @@ const styles = StyleSheet.create({
|
|
|
83
341
|
badge: {
|
|
84
342
|
fontSize: 10,
|
|
85
343
|
fontWeight: "700",
|
|
86
|
-
textTransform: "uppercase",
|
|
87
344
|
color: "#64748b",
|
|
88
345
|
backgroundColor: "#f1f5f9",
|
|
89
346
|
paddingHorizontal: 6,
|
|
90
347
|
paddingVertical: 2,
|
|
91
|
-
borderRadius: 6
|
|
348
|
+
borderRadius: 6,
|
|
349
|
+
overflow: "hidden"
|
|
350
|
+
},
|
|
351
|
+
badgeRun: {
|
|
352
|
+
color: "#fff7ed",
|
|
353
|
+
backgroundColor: "#ea580c"
|
|
92
354
|
},
|
|
93
355
|
badgeOk: {
|
|
94
356
|
color: "#166534",
|
|
@@ -98,10 +360,6 @@ const styles = StyleSheet.create({
|
|
|
98
360
|
color: "#991b1b",
|
|
99
361
|
backgroundColor: "#fee2e2"
|
|
100
362
|
},
|
|
101
|
-
brief: {
|
|
102
|
-
fontSize: 12,
|
|
103
|
-
color: "#334155"
|
|
104
|
-
},
|
|
105
363
|
line: {
|
|
106
364
|
fontSize: 11,
|
|
107
365
|
color: "#64748b"
|
|
@@ -110,6 +368,44 @@ const styles = StyleSheet.create({
|
|
|
110
368
|
fontSize: 12,
|
|
111
369
|
color: "#b91c1c"
|
|
112
370
|
},
|
|
371
|
+
notice: {
|
|
372
|
+
fontSize: 11,
|
|
373
|
+
color: "#b45309"
|
|
374
|
+
},
|
|
375
|
+
done: {
|
|
376
|
+
fontSize: 12,
|
|
377
|
+
fontWeight: "600",
|
|
378
|
+
color: "#166534",
|
|
379
|
+
paddingVertical: 8
|
|
380
|
+
},
|
|
381
|
+
staleBox: {
|
|
382
|
+
gap: 6
|
|
383
|
+
},
|
|
384
|
+
progressBox: {
|
|
385
|
+
gap: 4
|
|
386
|
+
},
|
|
387
|
+
bar: {
|
|
388
|
+
height: 6,
|
|
389
|
+
borderRadius: 3,
|
|
390
|
+
backgroundColor: "#f1f5f9",
|
|
391
|
+
overflow: "hidden"
|
|
392
|
+
},
|
|
393
|
+
barFill: {
|
|
394
|
+
height: 6,
|
|
395
|
+
borderRadius: 3,
|
|
396
|
+
backgroundColor: "#ea580c"
|
|
397
|
+
},
|
|
398
|
+
thumb: {
|
|
399
|
+
width: "100%",
|
|
400
|
+
aspectRatio: 16 / 9,
|
|
401
|
+
borderRadius: 8,
|
|
402
|
+
overflow: "hidden",
|
|
403
|
+
backgroundColor: "#f1f5f9"
|
|
404
|
+
},
|
|
405
|
+
thumbGlyph: {
|
|
406
|
+
alignItems: "center",
|
|
407
|
+
justifyContent: "center"
|
|
408
|
+
},
|
|
113
409
|
actions: {
|
|
114
410
|
flexDirection: "row",
|
|
115
411
|
gap: 8,
|