@adminide-stack/yantra-mobile 12.0.125-alpha.1 → 12.0.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/canvas/AudioEditorExperience.js +207 -109
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +87 -72
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +494 -387
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js +78 -59
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +126 -84
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +108 -126
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +178 -166
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +119 -123
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +113 -89
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +79 -79
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +193 -128
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +106 -94
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +195 -127
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +163 -100
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +132 -69
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -1
- package/lib/features/canvas/ImageEditorExperience.js +278 -209
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/InfluencerStudioExperience.js +167 -125
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -1
- package/lib/features/canvas/MoodboardExperience.js +102 -85
- package/lib/features/canvas/MoodboardExperience.js.map +1 -1
- package/lib/features/canvas/NativeCanvasViewer.js +203 -192
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +125 -92
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +225 -143
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoClipsExperience.js +126 -92
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +154 -142
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +551 -492
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +284 -131
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +7 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +265 -0
- package/lib/features/canvas/canvasTheme.js.map +1 -0
- package/lib/features/canvas/canvasUi.js +381 -0
- package/lib/features/canvas/canvasUi.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -52
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/serverTasks.js +1 -1
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +8 -7
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -1
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +44 -41
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +50 -45
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +3 -2
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/formWidgets.js +116 -64
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -1
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +77 -63
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -1
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +95 -79
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +241 -160
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +300 -143
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/health/HealthSyncRunner.js +9 -1
- package/lib/features/health/HealthSyncRunner.js.map +1 -1
- package/lib/features/health/backgroundSync.js +41 -0
- package/lib/features/health/backgroundSync.js.map +1 -0
- package/lib/features/health/healthConnectBackground.js +32 -0
- package/lib/features/health/healthConnectBackground.js.map +1 -0
- package/lib/features/health/healthConnectReader.js +16 -2
- package/lib/features/health/healthConnectReader.js.map +1 -1
- package/lib/features/health/healthSync.js +31 -3
- package/lib/features/health/healthSync.js.map +1 -1
- package/lib/features/health/healthSyncStore.js +89 -5
- package/lib/features/health/healthSyncStore.js.map +1 -1
- package/lib/features/health/healthkitBackground.js +17 -0
- package/lib/features/health/healthkitBackground.js.map +1 -0
- package/lib/features/health/reader.js.map +1 -1
- package/lib/features/health/sessionVault.js +38 -0
- package/lib/features/health/sessionVault.js.map +1 -0
- package/lib/features/health/syncState.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +3 -2
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/webbuilderPrompts.js +2 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/screens/Health/index.js +12 -2
- package/lib/screens/Health/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +120 -0
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +26 -4
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +110 -7
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/package.json +6 -4
|
@@ -1,13 +1,37 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo}from'react';import {View,Text,TextInput,ScrollView,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {useCanvasTheme,themedStyles}from'../canvasTheme.js';import {Pressable,pressedStyle,RADIUS,SPACE,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 HSCROLL = {
|
|
21
|
+
flexGrow: 0
|
|
22
|
+
};
|
|
23
|
+
function Field({
|
|
2
24
|
label,
|
|
3
25
|
value,
|
|
4
26
|
onChange,
|
|
5
27
|
multiline,
|
|
6
28
|
keyboardType
|
|
7
29
|
}) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
30
|
+
const theme = useCanvasTheme();
|
|
31
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
32
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.field, children: [
|
|
33
|
+
/* @__PURE__ */ jsx(Text, { style: styles.fieldLabel, children: label }),
|
|
34
|
+
/* @__PURE__ */ jsx(TextInput, { value, onChangeText: onChange, style: [styles.fieldInput, multiline && styles.fieldMulti], placeholderTextColor: theme.edInk3, autoCapitalize: "none", autoCorrect: false, multiline, keyboardType })
|
|
11
35
|
] });
|
|
12
36
|
}
|
|
13
37
|
function Stepper({
|
|
@@ -16,11 +40,17 @@ function Stepper({
|
|
|
16
40
|
onLess,
|
|
17
41
|
onMore
|
|
18
42
|
}) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/* @__PURE__ */ jsx(Text, { style:
|
|
23
|
-
/* @__PURE__ */ jsx(Pressable, { onPress:
|
|
43
|
+
const theme = useCanvasTheme();
|
|
44
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
45
|
+
return /* @__PURE__ */ jsxs(View, { style: styles.stepper, children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Text, { style: styles.stepperLabel, children: label }),
|
|
47
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onLess, hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `${label} less`, style: ({
|
|
48
|
+
pressed
|
|
49
|
+
}) => [styles.stepBtn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "minus", size: 16, color: theme.edInk }) }),
|
|
50
|
+
/* @__PURE__ */ jsx(Text, { style: styles.stepperValue, children: value }),
|
|
51
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onMore, hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `${label} more`, style: ({
|
|
52
|
+
pressed
|
|
53
|
+
}) => [styles.stepBtn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "plus", size: 16, color: theme.edInk }) })
|
|
24
54
|
] });
|
|
25
55
|
}
|
|
26
56
|
function ChoiceRow({
|
|
@@ -29,13 +59,17 @@ function ChoiceRow({
|
|
|
29
59
|
value,
|
|
30
60
|
onChange
|
|
31
61
|
}) {
|
|
62
|
+
const theme = useCanvasTheme();
|
|
63
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
32
64
|
return /* @__PURE__ */ jsxs(View, { children: [
|
|
33
|
-
/* @__PURE__ */ jsx(Text, { style:
|
|
34
|
-
/* @__PURE__ */ jsx(View, { style:
|
|
65
|
+
/* @__PURE__ */ jsx(Text, { style: styles.fieldLabel, children: label }),
|
|
66
|
+
/* @__PURE__ */ jsx(View, { style: styles.row, children: options.map((o) => {
|
|
35
67
|
const on = o.value === value;
|
|
36
|
-
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(o.value), style:
|
|
68
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(o.value), style: ({
|
|
69
|
+
pressed
|
|
70
|
+
}) => [styles.choice, on && styles.choiceOn, pressedStyle(pressed)], accessibilityRole: "button", accessibilityState: {
|
|
37
71
|
selected: on
|
|
38
|
-
}, children: /* @__PURE__ */ jsx(Text, { style: [
|
|
72
|
+
}, children: /* @__PURE__ */ jsx(Text, { style: [styles.choiceLabel, on && styles.choiceLabelOn], numberOfLines: 1, children: o.label }) }, o.value);
|
|
39
73
|
}) })
|
|
40
74
|
] });
|
|
41
75
|
}
|
|
@@ -46,12 +80,16 @@ function PickRow({
|
|
|
46
80
|
onSelect,
|
|
47
81
|
empty
|
|
48
82
|
}) {
|
|
49
|
-
|
|
83
|
+
const theme = useCanvasTheme();
|
|
84
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
85
|
+
if (items.length === 0) return /* @__PURE__ */ jsx(Text, { style: styles.hint, children: empty });
|
|
50
86
|
return /* @__PURE__ */ jsxs(View, { children: [
|
|
51
|
-
/* @__PURE__ */ jsx(Text, { style:
|
|
52
|
-
/* @__PURE__ */ jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle:
|
|
87
|
+
/* @__PURE__ */ jsx(Text, { style: styles.fieldLabel, children: label }),
|
|
88
|
+
/* @__PURE__ */ jsx(ScrollView, { style: HSCROLL, horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: items.map((item) => {
|
|
53
89
|
const on = item.src === selected;
|
|
54
|
-
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onSelect(item.src), style:
|
|
90
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onSelect(item.src), style: ({
|
|
91
|
+
pressed
|
|
92
|
+
}) => [styles.choice, on && styles.choiceOn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: [styles.choiceLabel, on && styles.choiceLabelOn], numberOfLines: 1, children: item.generatedAssetName || item.type }) }, item.id);
|
|
55
93
|
}) })
|
|
56
94
|
] });
|
|
57
95
|
}
|
|
@@ -61,82 +99,96 @@ function PickMulti({
|
|
|
61
99
|
onChange,
|
|
62
100
|
empty
|
|
63
101
|
}) {
|
|
64
|
-
|
|
65
|
-
|
|
102
|
+
const theme = useCanvasTheme();
|
|
103
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
104
|
+
if (items.length === 0) return /* @__PURE__ */ jsx(Text, { style: styles.hint, children: empty });
|
|
105
|
+
return /* @__PURE__ */ jsx(ScrollView, { style: HSCROLL, horizontal: true, showsHorizontalScrollIndicator: false, contentContainerStyle: styles.row, children: items.map((item) => {
|
|
66
106
|
const on = selected.includes(item.src);
|
|
67
|
-
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(on ? selected.filter((u) => u !== item.src) : [...selected, item.src]), style:
|
|
107
|
+
return /* @__PURE__ */ jsx(Pressable, { onPress: () => onChange(on ? selected.filter((u) => u !== item.src) : [...selected, item.src]), style: ({
|
|
108
|
+
pressed
|
|
109
|
+
}) => [styles.choice, on && styles.choiceOn, pressedStyle(pressed)], children: /* @__PURE__ */ jsx(Text, { style: [styles.choiceLabel, on && styles.choiceLabelOn], numberOfLines: 1, children: item.generatedAssetName || item.type }) }, item.id);
|
|
68
110
|
}) });
|
|
69
111
|
}
|
|
70
|
-
const
|
|
112
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
71
113
|
field: {
|
|
72
114
|
minWidth: 88,
|
|
73
115
|
flexGrow: 1
|
|
74
116
|
},
|
|
75
|
-
fieldLabel: {
|
|
76
|
-
color:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
},
|
|
117
|
+
fieldLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
118
|
+
color: theme.edInk2,
|
|
119
|
+
marginBottom: SPACE.xs
|
|
120
|
+
}),
|
|
80
121
|
fieldInput: {
|
|
81
|
-
color:
|
|
82
|
-
fontSize:
|
|
83
|
-
paddingHorizontal:
|
|
84
|
-
paddingVertical:
|
|
85
|
-
borderRadius:
|
|
86
|
-
backgroundColor:
|
|
122
|
+
color: theme.edInk,
|
|
123
|
+
fontSize: 14,
|
|
124
|
+
paddingHorizontal: SPACE.md,
|
|
125
|
+
paddingVertical: 10,
|
|
126
|
+
borderRadius: RADIUS.md,
|
|
127
|
+
backgroundColor: theme.edRaised
|
|
87
128
|
},
|
|
88
129
|
fieldMulti: {
|
|
89
|
-
minHeight:
|
|
130
|
+
minHeight: 64,
|
|
90
131
|
textAlignVertical: "top"
|
|
91
132
|
},
|
|
92
133
|
stepper: {
|
|
93
134
|
flexDirection: "row",
|
|
94
135
|
alignItems: "center",
|
|
95
|
-
gap:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
136
|
+
gap: SPACE.xs,
|
|
137
|
+
paddingLeft: SPACE.md,
|
|
138
|
+
paddingRight: SPACE.xs,
|
|
139
|
+
minHeight: 40,
|
|
140
|
+
borderRadius: RADIUS.md,
|
|
141
|
+
backgroundColor: theme.edRaised
|
|
100
142
|
},
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
143
|
+
stepBtn: {
|
|
144
|
+
width: 30,
|
|
145
|
+
height: 30,
|
|
146
|
+
borderRadius: RADIUS.pill,
|
|
147
|
+
backgroundColor: theme.edRaisedHi,
|
|
148
|
+
alignItems: "center",
|
|
149
|
+
justifyContent: "center"
|
|
104
150
|
},
|
|
105
|
-
|
|
106
|
-
color:
|
|
107
|
-
|
|
151
|
+
stepperLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
152
|
+
color: theme.edInk2,
|
|
153
|
+
marginRight: SPACE.xs
|
|
154
|
+
}),
|
|
155
|
+
stepperValue: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
156
|
+
color: theme.edInk,
|
|
108
157
|
fontVariant: ["tabular-nums"],
|
|
109
158
|
minWidth: 44,
|
|
110
159
|
textAlign: "center"
|
|
111
|
-
},
|
|
112
|
-
hint: {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
},
|
|
160
|
+
}),
|
|
161
|
+
hint: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
162
|
+
fontWeight: "400",
|
|
163
|
+
color: theme.edInk2
|
|
164
|
+
}),
|
|
117
165
|
row: {
|
|
118
166
|
flexDirection: "row",
|
|
119
167
|
alignItems: "center",
|
|
120
|
-
gap:
|
|
168
|
+
gap: SPACE.sm,
|
|
121
169
|
flexWrap: "wrap",
|
|
122
|
-
paddingVertical:
|
|
170
|
+
paddingVertical: SPACE.xs
|
|
123
171
|
},
|
|
124
172
|
choice: {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
173
|
+
minHeight: 34,
|
|
174
|
+
justifyContent: "center",
|
|
175
|
+
paddingHorizontal: SPACE.md,
|
|
176
|
+
borderRadius: RADIUS.pill,
|
|
177
|
+
backgroundColor: theme.edRaised,
|
|
129
178
|
maxWidth: 160
|
|
130
179
|
},
|
|
131
180
|
choiceOn: {
|
|
132
|
-
backgroundColor:
|
|
133
|
-
},
|
|
134
|
-
choiceLabel: {
|
|
135
|
-
color: "#F7F7FA",
|
|
136
|
-
fontSize: 12.5,
|
|
137
|
-
fontWeight: "500"
|
|
181
|
+
backgroundColor: theme.edInk
|
|
138
182
|
},
|
|
183
|
+
choiceLabel: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
184
|
+
color: theme.edInk
|
|
185
|
+
}),
|
|
139
186
|
choiceLabelOn: {
|
|
140
|
-
color:
|
|
187
|
+
color: theme.edOnInk,
|
|
188
|
+
fontWeight: "600"
|
|
141
189
|
}
|
|
142
|
-
});
|
|
190
|
+
}));
|
|
191
|
+
function useFormStyles() {
|
|
192
|
+
const theme = useCanvasTheme();
|
|
193
|
+
return useMemo(() => makeStyles(theme), [theme]);
|
|
194
|
+
}export{ChoiceRow,Field,PickMulti,PickRow,Stepper,useFormStyles};//# sourceMappingURL=formWidgets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formWidgets.js","sources":["../../../../src/features/canvas/videoEditor/formWidgets.tsx"],"sourcesContent":["/**\n * Small form widgets shared by the Edit Video sheet (VideoEditExperience) and\n * the editor's Tools drawer: a text field, a +/- stepper and media pickers.\n */\nimport React from 'react';\nimport { Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { CanvasItem } from '../canvasCore';\n\nexport function Field({\n label,\n value,\n onChange,\n multiline,\n keyboardType,\n}: {\n label: string;\n value: string;\n onChange: (v: string) => void;\n multiline?: boolean;\n keyboardType?: 'default' | 'decimal-pad' | 'numbers-and-punctuation';\n}) {\n return (\n <View style={formStyles.field}>\n <Text style={formStyles.fieldLabel}>{label}</Text>\n <TextInput\n value={value}\n onChangeText={onChange}\n style={[formStyles.fieldInput, multiline && formStyles.fieldMulti]}\n placeholderTextColor=\"#5A5A66\"\n autoCapitalize=\"none\"\n autoCorrect={false}\n multiline={multiline}\n keyboardType={keyboardType}\n />\n </View>\n );\n}\n\nexport function Stepper({\n label,\n value,\n onLess,\n onMore,\n}: {\n label: string;\n value: string;\n onLess: () => void;\n onMore: () => void;\n}) {\n return (\n <View style={formStyles.stepper}>\n <Text style={formStyles.stepperLabel}>{label}</Text>\n <Pressable onPress={onLess} hitSlop={8} accessibilityRole=\"button\" accessibilityLabel={`${label} less`}>\n <MaterialCommunityIcons name=\"minus\" size={15} color=\"#F7F7FA\" />\n </Pressable>\n <Text style={formStyles.stepperValue}>{value}</Text>\n <Pressable onPress={onMore} hitSlop={8} accessibilityRole=\"button\" accessibilityLabel={`${label} more`}>\n <MaterialCommunityIcons name=\"plus\" size={15} color=\"#F7F7FA\" />\n </Pressable>\n </View>\n );\n}\n\n/** Pick one of a fixed set of labelled values (chips). */\nexport function ChoiceRow({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: ReadonlyArray<{ value: string; label: string }>;\n value: string;\n onChange: (v: string) => void;\n}) {\n return (\n <View>\n <Text style={formStyles.fieldLabel}>{label}</Text>\n <View style={formStyles.row}>\n {options.map((o) => {\n const on = o.value === value;\n return (\n <Pressable\n key={o.value}\n onPress={() => onChange(o.value)}\n style={[formStyles.choice, on && formStyles.choiceOn]}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: on }}\n >\n <Text style={[formStyles.choiceLabel, on && formStyles.choiceLabelOn]} numberOfLines={1}>\n {o.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\nexport function PickRow({\n label,\n items,\n selected,\n onSelect,\n empty,\n}: {\n label: string;\n items: readonly CanvasItem[];\n selected: string;\n onSelect: (url: string) => void;\n empty: string;\n}) {\n if (items.length === 0) return <Text style={formStyles.hint}>{empty}</Text>;\n return (\n <View>\n <Text style={formStyles.fieldLabel}>{label}</Text>\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={formStyles.row}>\n {items.map((item) => {\n const on = item.src === selected;\n return (\n <Pressable\n key={item.id}\n onPress={() => onSelect(item.src)}\n style={[formStyles.choice, on && formStyles.choiceOn]}\n >\n <Text style={[formStyles.choiceLabel, on && formStyles.choiceLabelOn]} numberOfLines={1}>\n {item.generatedAssetName || item.type}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n </View>\n );\n}\n\nexport function PickMulti({\n items,\n selected,\n onChange,\n empty,\n}: {\n items: readonly CanvasItem[];\n selected: string[];\n onChange: (urls: string[]) => void;\n empty: string;\n}) {\n if (items.length === 0) return <Text style={formStyles.hint}>{empty}</Text>;\n return (\n <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={formStyles.row}>\n {items.map((item) => {\n const on = selected.includes(item.src);\n return (\n <Pressable\n key={item.id}\n onPress={() => onChange(on ? selected.filter((u) => u !== item.src) : [...selected, item.src])}\n style={[formStyles.choice, on && formStyles.choiceOn]}\n >\n <Text style={[formStyles.choiceLabel, on && formStyles.choiceLabelOn]} numberOfLines={1}>\n {item.generatedAssetName || item.type}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\nexport const formStyles = StyleSheet.create({\n field: { minWidth: 88, flexGrow: 1 },\n fieldLabel: { color: '#9A9AA5', fontSize: 11, marginBottom: 4 },\n fieldInput: {\n color: '#F7F7FA',\n fontSize: 13,\n paddingHorizontal: 10,\n paddingVertical: 8,\n borderRadius: 9,\n backgroundColor: '#1F1F24',\n },\n fieldMulti: { minHeight: 56, textAlignVertical: 'top' },\n stepper: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 9,\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 9,\n backgroundColor: '#1F1F24',\n },\n stepperLabel: { color: '#9A9AA5', fontSize: 11.5 },\n stepperValue: {\n color: '#F7F7FA',\n fontSize: 12.5,\n fontVariant: ['tabular-nums'],\n minWidth: 44,\n textAlign: 'center',\n },\n hint: { color: '#9A9AA5', fontSize: 13, lineHeight: 18 },\n row: { flexDirection: 'row', alignItems: 'center', gap: 8, flexWrap: 'wrap', paddingVertical: 4 },\n choice: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderRadius: 9,\n backgroundColor: '#1F1F24',\n maxWidth: 160,\n },\n choiceOn: { backgroundColor: '#8B7CFF' },\n choiceLabel: { color: '#F7F7FA', fontSize: 12.5, fontWeight: '500' },\n choiceLabelOn: { color: '#0A0A0C' },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"formWidgets.js","sources":["../../../../src/features/canvas/videoEditor/formWidgets.tsx"],"sourcesContent":["/**\n * Small form widgets shared by the Edit Video sheet (VideoEditExperience) and\n * the editor's Tools drawer: a text field, a +/- stepper and media pickers.\n */\nimport React, { useMemo } from 'react';\nimport { ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { CanvasItem } from '../canvasCore';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from '../canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from '../canvasUi';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\n\nexport function Field({\n label,\n value,\n onChange,\n multiline,\n keyboardType,\n}: {\n label: string;\n value: string;\n onChange: (v: string) => void;\n multiline?: boolean;\n keyboardType?: 'default' | 'decimal-pad' | 'numbers-and-punctuation';\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.field}>\n <Text style={styles.fieldLabel}>{label}</Text>\n <TextInput\n value={value}\n onChangeText={onChange}\n style={[styles.fieldInput, multiline && styles.fieldMulti]}\n placeholderTextColor={theme.edInk3}\n autoCapitalize=\"none\"\n autoCorrect={false}\n multiline={multiline}\n keyboardType={keyboardType}\n />\n </View>\n );\n}\n\nexport function Stepper({\n label,\n value,\n onLess,\n onMore,\n}: {\n label: string;\n value: string;\n onLess: () => void;\n onMore: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.stepper}>\n <Text style={styles.stepperLabel}>{label}</Text>\n <Pressable\n onPress={onLess}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`${label} less`}\n style={({ pressed }) => [styles.stepBtn, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"minus\" size={16} color={theme.edInk} />\n </Pressable>\n <Text style={styles.stepperValue}>{value}</Text>\n <Pressable\n onPress={onMore}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`${label} more`}\n style={({ pressed }) => [styles.stepBtn, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"plus\" size={16} color={theme.edInk} />\n </Pressable>\n </View>\n );\n}\n\n/** Pick one of a fixed set of labelled values (chips). */\nexport function ChoiceRow({\n label,\n options,\n value,\n onChange,\n}: {\n label: string;\n options: ReadonlyArray<{ value: string; label: string }>;\n value: string;\n onChange: (v: string) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View>\n <Text style={styles.fieldLabel}>{label}</Text>\n <View style={styles.row}>\n {options.map((o) => {\n const on = o.value === value;\n return (\n <Pressable\n key={o.value}\n onPress={() => onChange(o.value)}\n style={({ pressed }) => [styles.choice, on && styles.choiceOn, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: on }}\n >\n <Text style={[styles.choiceLabel, on && styles.choiceLabelOn]} numberOfLines={1}>\n {o.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n );\n}\n\nexport function PickRow({\n label,\n items,\n selected,\n onSelect,\n empty,\n}: {\n label: string;\n items: readonly CanvasItem[];\n selected: string;\n onSelect: (url: string) => void;\n empty: string;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n if (items.length === 0) return <Text style={styles.hint}>{empty}</Text>;\n return (\n <View>\n <Text style={styles.fieldLabel}>{label}</Text>\n <ScrollView\n style={HSCROLL}\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {items.map((item) => {\n const on = item.src === selected;\n return (\n <Pressable\n key={item.id}\n onPress={() => onSelect(item.src)}\n style={({ pressed }) => [styles.choice, on && styles.choiceOn, pressedStyle(pressed)]}\n >\n <Text style={[styles.choiceLabel, on && styles.choiceLabelOn]} numberOfLines={1}>\n {item.generatedAssetName || item.type}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n </View>\n );\n}\n\nexport function PickMulti({\n items,\n selected,\n onChange,\n empty,\n}: {\n items: readonly CanvasItem[];\n selected: string[];\n onChange: (urls: string[]) => void;\n empty: string;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n if (items.length === 0) return <Text style={styles.hint}>{empty}</Text>;\n return (\n <ScrollView\n style={HSCROLL}\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {items.map((item) => {\n const on = selected.includes(item.src);\n return (\n <Pressable\n key={item.id}\n onPress={() => onChange(on ? selected.filter((u) => u !== item.src) : [...selected, item.src])}\n style={({ pressed }) => [styles.choice, on && styles.choiceOn, pressedStyle(pressed)]}\n >\n <Text style={[styles.choiceLabel, on && styles.choiceLabelOn]} numberOfLines={1}>\n {item.generatedAssetName || item.type}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n field: { minWidth: 88, flexGrow: 1 },\n fieldLabel: { ...TYPE.caption, color: theme.edInk2, marginBottom: SPACE.xs },\n fieldInput: {\n color: theme.edInk,\n fontSize: 14,\n paddingHorizontal: SPACE.md,\n paddingVertical: 10,\n borderRadius: RADIUS.md,\n backgroundColor: theme.edRaised,\n },\n fieldMulti: { minHeight: 64, textAlignVertical: 'top' },\n stepper: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n paddingLeft: SPACE.md,\n paddingRight: SPACE.xs,\n minHeight: 40,\n borderRadius: RADIUS.md,\n backgroundColor: theme.edRaised,\n },\n stepBtn: {\n width: 30,\n height: 30,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edRaisedHi,\n alignItems: 'center',\n justifyContent: 'center',\n },\n stepperLabel: { ...TYPE.caption, color: theme.edInk2, marginRight: SPACE.xs },\n stepperValue: {\n ...TYPE.label,\n color: theme.edInk,\n fontVariant: ['tabular-nums'],\n minWidth: 44,\n textAlign: 'center',\n },\n hint: { ...TYPE.label, fontWeight: '400', color: theme.edInk2 },\n row: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm, flexWrap: 'wrap', paddingVertical: SPACE.xs },\n choice: {\n minHeight: 34,\n justifyContent: 'center',\n paddingHorizontal: SPACE.md,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edRaised,\n maxWidth: 160,\n },\n choiceOn: { backgroundColor: theme.edInk },\n choiceLabel: { ...TYPE.caption, color: theme.edInk },\n choiceLabelOn: { color: theme.edOnInk, fontWeight: '600' },\n }),\n);\n\n/** The shared form skins for the active canvas theme (used by the editor's Tools drawer too). */\nexport function useFormStyles() {\n const theme = useCanvasTheme();\n return useMemo(() => makeStyles(theme), [theme]);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo,useState}from'react';import {
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo,useState}from'react';import {Modal,View,Text,ScrollView,ActivityIndicator,TextInput,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {STATIC_VIDEO_MODELS}from'../../generationModels.js';import {produceScenes,produceSummary,produceJob,runProduce}from'./produceScenes.js';import {useCanvasTheme,themedStyles}from'../../canvasTheme.js';import {Pressable,pressedStyle,RADIUS,SPACE,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;
|
|
@@ -30,6 +30,8 @@ function ProduceVideoSheet({
|
|
|
30
30
|
onFootage
|
|
31
31
|
}) {
|
|
32
32
|
var _a2;
|
|
33
|
+
const theme = useCanvasTheme();
|
|
34
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
33
35
|
const scenes = useMemo(() => produceScenes(timeline, sourceSec), [timeline, sourceSec]);
|
|
34
36
|
const [picked, setPicked] = useState({});
|
|
35
37
|
const [shots, setShots] = useState({});
|
|
@@ -61,9 +63,10 @@ function ProduceVideoSheet({
|
|
|
61
63
|
return /* @__PURE__ */ jsxs(Modal, { visible, transparent: true, animationType: "slide", onRequestClose: onClose, children: [
|
|
62
64
|
/* @__PURE__ */ jsx(Pressable, { style: styles.scrim, onPress: running ? void 0 : onClose, accessibilityLabel: "Close" }),
|
|
63
65
|
/* @__PURE__ */ jsxs(View, { style: styles.sheet, testID: "produce-video-sheet", children: [
|
|
66
|
+
/* @__PURE__ */ jsx(View, { style: styles.grabber }),
|
|
64
67
|
/* @__PURE__ */ jsxs(View, { style: styles.header, children: [
|
|
65
68
|
/* @__PURE__ */ jsx(Text, { style: styles.title, children: "Produce video" }),
|
|
66
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color:
|
|
69
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color: theme.edInk }) })
|
|
67
70
|
] }),
|
|
68
71
|
/* @__PURE__ */ jsxs(Text, { style: styles.hint, children: [
|
|
69
72
|
"Films each chosen scene with ",
|
|
@@ -79,117 +82,128 @@ function ProduceVideoSheet({
|
|
|
79
82
|
return /* @__PURE__ */ jsxs(View, { style: [styles.row, on && styles.rowOn], children: [
|
|
80
83
|
/* @__PURE__ */ jsxs(Pressable, { onPress: () => setPicked((p) => __spreadProps(__spreadValues({}, p), {
|
|
81
84
|
[s.sceneId]: !on
|
|
82
|
-
})), disabled: running, style:
|
|
85
|
+
})), disabled: running, style: ({
|
|
86
|
+
pressed
|
|
87
|
+
}) => [styles.rowHead, pressedStyle(pressed)], accessibilityRole: "checkbox", accessibilityState: {
|
|
83
88
|
checked: on
|
|
84
89
|
}, children: [
|
|
85
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: on ? "checkbox-marked" : "checkbox-blank-outline", size:
|
|
90
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: on ? "checkbox-marked" : "checkbox-blank-outline", size: 20, color: on ? theme.edAccent : theme.edInk3 }),
|
|
86
91
|
/* @__PURE__ */ jsx(Text, { style: styles.label, numberOfLines: 1, children: s.label }),
|
|
87
92
|
/* @__PURE__ */ jsxs(Text, { style: styles.meta, children: [
|
|
88
93
|
s.seconds,
|
|
89
94
|
"s",
|
|
90
95
|
s.hasFootage ? " \xB7 has footage" : ""
|
|
91
96
|
] }),
|
|
92
|
-
(st == null ? void 0 : st.state) === "filming" ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color:
|
|
93
|
-
(st == null ? void 0 : st.state) === "done" ? /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "check-circle", size: 16, color:
|
|
97
|
+
(st == null ? void 0 : st.state) === "filming" ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: theme.edAccent }) : null,
|
|
98
|
+
(st == null ? void 0 : st.state) === "done" ? /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "check-circle", size: 16, color: theme.edOk }) : null
|
|
94
99
|
] }),
|
|
95
100
|
on ? /* @__PURE__ */ jsx(TextInput, { value: (_a3 = shots[s.sceneId]) != null ? _a3 : s.shot, onChangeText: (text) => setShots((p) => __spreadProps(__spreadValues({}, p), {
|
|
96
101
|
[s.sceneId]: text
|
|
97
|
-
})), editable: !running, multiline: true, style: styles.shot, placeholderTextColor:
|
|
102
|
+
})), editable: !running, multiline: true, style: styles.shot, placeholderTextColor: theme.edInk3 }) : null,
|
|
98
103
|
(st == null ? void 0 : st.state) === "failed" ? /* @__PURE__ */ jsx(Text, { style: styles.error, children: st.message }) : null
|
|
99
104
|
] }, s.sceneId);
|
|
100
105
|
})
|
|
101
106
|
] }),
|
|
102
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: start, disabled: !runAction || running || chosen.length === 0, style:
|
|
107
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: start, disabled: !runAction || running || chosen.length === 0, style: ({
|
|
108
|
+
pressed
|
|
109
|
+
}) => [styles.run, (!runAction || running || chosen.length === 0) && styles.runOff, pressedStyle(pressed)], accessibilityRole: "button", children: running ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.primaryForeground }) : /* @__PURE__ */ jsxs(Text, { style: styles.runLabel, children: [
|
|
103
110
|
"Film ",
|
|
104
111
|
produceSummary(chosen, DURATIONS)
|
|
105
112
|
] }) })
|
|
106
113
|
] })
|
|
107
114
|
] });
|
|
108
115
|
}
|
|
109
|
-
const
|
|
116
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
110
117
|
scrim: {
|
|
111
118
|
flex: 1,
|
|
112
119
|
backgroundColor: "rgba(0,0,0,0.45)"
|
|
113
120
|
},
|
|
114
121
|
sheet: {
|
|
115
122
|
maxHeight: "82%",
|
|
116
|
-
backgroundColor:
|
|
117
|
-
borderTopLeftRadius:
|
|
118
|
-
borderTopRightRadius:
|
|
119
|
-
paddingHorizontal:
|
|
120
|
-
paddingBottom:
|
|
121
|
-
gap:
|
|
123
|
+
backgroundColor: theme.edPanel,
|
|
124
|
+
borderTopLeftRadius: RADIUS.xl,
|
|
125
|
+
borderTopRightRadius: RADIUS.xl,
|
|
126
|
+
paddingHorizontal: SPACE.lg,
|
|
127
|
+
paddingBottom: SPACE.xxl,
|
|
128
|
+
gap: SPACE.md
|
|
129
|
+
},
|
|
130
|
+
grabber: {
|
|
131
|
+
alignSelf: "center",
|
|
132
|
+
width: 36,
|
|
133
|
+
height: 4,
|
|
134
|
+
borderRadius: RADIUS.pill,
|
|
135
|
+
backgroundColor: theme.edTint(0.18),
|
|
136
|
+
marginTop: SPACE.sm
|
|
122
137
|
},
|
|
123
138
|
header: {
|
|
124
139
|
flexDirection: "row",
|
|
125
140
|
alignItems: "center",
|
|
126
|
-
paddingTop:
|
|
141
|
+
paddingTop: SPACE.xs
|
|
127
142
|
},
|
|
128
|
-
title: {
|
|
143
|
+
title: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
129
144
|
flex: 1,
|
|
130
|
-
color:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
color:
|
|
136
|
-
|
|
137
|
-
lineHeight: 17
|
|
138
|
-
},
|
|
145
|
+
color: theme.edInk
|
|
146
|
+
}),
|
|
147
|
+
hint: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
148
|
+
fontWeight: "400",
|
|
149
|
+
lineHeight: 17,
|
|
150
|
+
color: theme.edInk3
|
|
151
|
+
}),
|
|
139
152
|
list: {
|
|
140
|
-
gap:
|
|
141
|
-
paddingVertical:
|
|
153
|
+
gap: SPACE.sm,
|
|
154
|
+
paddingVertical: SPACE.xs
|
|
142
155
|
},
|
|
143
156
|
row: {
|
|
144
|
-
gap:
|
|
145
|
-
padding:
|
|
146
|
-
borderRadius:
|
|
147
|
-
|
|
157
|
+
gap: SPACE.sm,
|
|
158
|
+
padding: SPACE.md,
|
|
159
|
+
borderRadius: RADIUS.md,
|
|
160
|
+
borderWidth: 1,
|
|
161
|
+
borderColor: "transparent",
|
|
162
|
+
backgroundColor: theme.edRaised
|
|
148
163
|
},
|
|
149
164
|
rowOn: {
|
|
150
|
-
|
|
151
|
-
borderColor: "#3B3366"
|
|
165
|
+
borderColor: theme.edAccent
|
|
152
166
|
},
|
|
153
167
|
rowHead: {
|
|
154
168
|
flexDirection: "row",
|
|
155
169
|
alignItems: "center",
|
|
156
|
-
gap:
|
|
170
|
+
gap: SPACE.sm,
|
|
171
|
+
minHeight: 32
|
|
157
172
|
},
|
|
158
|
-
label: {
|
|
173
|
+
label: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
159
174
|
flex: 1,
|
|
160
|
-
color:
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
fontSize: 12
|
|
167
|
-
},
|
|
175
|
+
color: theme.edInk
|
|
176
|
+
}),
|
|
177
|
+
meta: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
178
|
+
fontWeight: "400",
|
|
179
|
+
color: theme.edInk3
|
|
180
|
+
}),
|
|
168
181
|
shot: {
|
|
169
|
-
color:
|
|
170
|
-
fontSize:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
182
|
+
color: theme.edInk,
|
|
183
|
+
fontSize: 13,
|
|
184
|
+
lineHeight: 18,
|
|
185
|
+
minHeight: 52,
|
|
186
|
+
paddingHorizontal: SPACE.md,
|
|
187
|
+
paddingVertical: SPACE.sm,
|
|
188
|
+
borderRadius: RADIUS.sm,
|
|
189
|
+
backgroundColor: theme.edRaisedHi,
|
|
175
190
|
textAlignVertical: "top"
|
|
176
191
|
},
|
|
177
|
-
error: {
|
|
178
|
-
color:
|
|
179
|
-
|
|
180
|
-
},
|
|
192
|
+
error: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
193
|
+
color: theme.edDanger
|
|
194
|
+
}),
|
|
181
195
|
run: {
|
|
182
196
|
alignItems: "center",
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
justifyContent: "center",
|
|
198
|
+
minHeight: 50,
|
|
199
|
+
borderRadius: RADIUS.pill,
|
|
200
|
+
backgroundColor: theme.primary
|
|
186
201
|
},
|
|
187
202
|
runOff: {
|
|
188
203
|
opacity: 0.4
|
|
189
204
|
},
|
|
190
|
-
runLabel: {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
});export{ProduceVideoSheet};//# sourceMappingURL=ProduceVideoSheet.js.map
|
|
205
|
+
runLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
206
|
+
fontSize: 15,
|
|
207
|
+
color: theme.primaryForeground
|
|
208
|
+
})
|
|
209
|
+
}));export{ProduceVideoSheet};//# sourceMappingURL=ProduceVideoSheet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProduceVideoSheet.js","sources":["../../../../../src/features/canvas/videoEditor/produce/ProduceVideoSheet.tsx"],"sourcesContent":["/**\n * Produce video sheet (web produce/ProduceVideoSheet.tsx): lists the cut's\n * scenes with their shots, films the chosen ones with an AI video model -\n * two at a time - and swaps each colour scene for its clip as it lands.\n */\nimport React, { useMemo, useState } from 'react';\nimport { ActivityIndicator, Modal, Pressable, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { STATIC_VIDEO_MODELS } from '../../generationModels';\nimport type { EditorTimeline } from '../editorModel';\nimport type { RunMediaAction } from '../mediaActions';\nimport {\n produceJob,\n produceScenes,\n produceSummary,\n runProduce,\n type ProduceStatus,\n type SceneFootage,\n} from './produceScenes';\n\nexport interface ProduceVideoSheetProps {\n visible: boolean;\n onClose: () => void;\n timeline: EditorTimeline;\n sourceSec: Readonly<Record<string, number>>;\n aspectRatio: string;\n runAction?: RunMediaAction;\n /** A scene's footage came back: swap it in. */\n onFootage: (sceneId: string, footage: SceneFootage) => void;\n}\n\nconst MODEL = STATIC_VIDEO_MODELS[0];\nconst DURATIONS = MODEL?.supportedDurationsSeconds ?? [4, 6, 8];\n\nexport function ProduceVideoSheet({\n visible,\n onClose,\n timeline,\n sourceSec,\n aspectRatio,\n runAction,\n onFootage,\n}: ProduceVideoSheetProps) {\n const scenes = useMemo(() => produceScenes(timeline, sourceSec), [timeline, sourceSec]);\n const [picked, setPicked] = useState<Record<string, boolean>>({});\n const [shots, setShots] = useState<Record<string, string>>({});\n const [status, setStatus] = useState<Record<string, ProduceStatus>>({});\n const [running, setRunning] = useState(false);\n\n const isPicked = (id: string, hasFootage: boolean) => picked[id] ?? !hasFootage;\n const chosen = scenes.filter((s) => isPicked(s.sceneId, s.hasFootage));\n\n const start = () => {\n if (!runAction || running || chosen.length === 0) return;\n setRunning(true);\n const jobs = chosen.map((s) => produceJob(s, DURATIONS, shots[s.sceneId]?.trim() || s.shot));\n void runProduce(jobs, runAction, {\n aspectRatio,\n model: MODEL?.id,\n onStatus: (sceneId, next) => {\n setStatus((prev) => ({ ...prev, [sceneId]: next }));\n if (next.state === 'done') onFootage(sceneId, next.footage);\n },\n }).finally(() => setRunning(false));\n };\n\n return (\n <Modal visible={visible} transparent animationType=\"slide\" onRequestClose={onClose}>\n <Pressable style={styles.scrim} onPress={running ? undefined : onClose} accessibilityLabel=\"Close\" />\n <View style={styles.sheet} testID=\"produce-video-sheet\">\n <View style={styles.header}>\n <Text style={styles.title}>Produce video</Text>\n <Pressable onPress={onClose} hitSlop={10} accessibilityRole=\"button\" accessibilityLabel=\"Close\">\n <MaterialCommunityIcons name=\"close\" size={22} color=\"#F7F7FA\" />\n </Pressable>\n </View>\n <Text style={styles.hint}>\n Films each chosen scene with {MODEL?.label ?? 'the video model'} and puts the clip under its titles.\n The scene keeps its length, layers and transition.\n </Text>\n <ScrollView contentContainerStyle={styles.list} keyboardShouldPersistTaps=\"handled\">\n {scenes.length === 0 ? <Text style={styles.hint}>Add scenes first.</Text> : null}\n {scenes.map((s) => {\n const on = isPicked(s.sceneId, s.hasFootage);\n const st = status[s.sceneId];\n return (\n <View key={s.sceneId} style={[styles.row, on && styles.rowOn]}>\n <Pressable\n onPress={() => setPicked((p) => ({ ...p, [s.sceneId]: !on }))}\n disabled={running}\n style={styles.rowHead}\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: on }}\n >\n <MaterialCommunityIcons\n name={on ? 'checkbox-marked' : 'checkbox-blank-outline'}\n size={18}\n color={on ? '#8B7CFF' : '#6A6A75'}\n />\n <Text style={styles.label} numberOfLines={1}>\n {s.label}\n </Text>\n <Text style={styles.meta}>\n {s.seconds}s{s.hasFootage ? ' · has footage' : ''}\n </Text>\n {st?.state === 'filming' ? (\n <ActivityIndicator size=\"small\" color=\"#8B7CFF\" />\n ) : null}\n {st?.state === 'done' ? (\n <MaterialCommunityIcons name=\"check-circle\" size={16} color=\"#34D399\" />\n ) : null}\n </Pressable>\n {on ? (\n <TextInput\n value={shots[s.sceneId] ?? s.shot}\n onChangeText={(text) => setShots((p) => ({ ...p, [s.sceneId]: text }))}\n editable={!running}\n multiline\n style={styles.shot}\n placeholderTextColor=\"#5A5A66\"\n />\n ) : null}\n {st?.state === 'failed' ? <Text style={styles.error}>{st.message}</Text> : null}\n </View>\n );\n })}\n </ScrollView>\n <Pressable\n onPress={start}\n disabled={!runAction || running || chosen.length === 0}\n style={[styles.run, (!runAction || running || chosen.length === 0) && styles.runOff]}\n accessibilityRole=\"button\"\n >\n {running ? (\n <ActivityIndicator color=\"#0A0A0C\" />\n ) : (\n <Text style={styles.runLabel}>Film {produceSummary(chosen, DURATIONS)}</Text>\n )}\n </Pressable>\n </View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n scrim: { flex: 1, backgroundColor: 'rgba(0,0,0,0.45)' },\n sheet: {\n maxHeight: '82%',\n backgroundColor: '#141418',\n borderTopLeftRadius: 18,\n borderTopRightRadius: 18,\n paddingHorizontal: 16,\n paddingBottom: 28,\n gap: 10,\n },\n header: { flexDirection: 'row', alignItems: 'center', paddingTop: 14 },\n title: { flex: 1, color: '#F7F7FA', fontSize: 16, fontWeight: '700' },\n hint: { color: '#8B8B96', fontSize: 12.5, lineHeight: 17 },\n list: { gap: 8, paddingVertical: 6 },\n row: { gap: 6, padding: 10, borderRadius: 12, backgroundColor: '#1B1B21' },\n rowOn: { borderWidth: 1, borderColor: '#3B3366' },\n rowHead: { flexDirection: 'row', alignItems: 'center', gap: 8 },\n label: { flex: 1, color: '#F7F7FA', fontSize: 13.5, fontWeight: '600' },\n meta: { color: '#8B8B96', fontSize: 12 },\n shot: {\n color: '#E4E4EA',\n fontSize: 12.5,\n minHeight: 48,\n padding: 8,\n borderRadius: 8,\n backgroundColor: '#24242B',\n textAlignVertical: 'top',\n },\n error: { color: '#F87171', fontSize: 12 },\n run: { alignItems: 'center', paddingVertical: 13, borderRadius: 12, backgroundColor: '#8B7CFF' },\n runOff: { opacity: 0.4 },\n runLabel: { color: '#0A0A0C', fontSize: 14, fontWeight: '700' },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProduceVideoSheet.js","sources":["../../../../../src/features/canvas/videoEditor/produce/ProduceVideoSheet.tsx"],"sourcesContent":["/**\n * Produce video sheet (web produce/ProduceVideoSheet.tsx): lists the cut's\n * scenes with their shots, films the chosen ones with an AI video model -\n * two at a time - and swaps each colour scene for its clip as it lands.\n */\nimport React, { useMemo, useState } from 'react';\nimport { ActivityIndicator, Modal, ScrollView, StyleSheet, Text, TextInput, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { STATIC_VIDEO_MODELS } from '../../generationModels';\nimport type { EditorTimeline } from '../editorModel';\nimport type { RunMediaAction } from '../mediaActions';\nimport {\n produceJob,\n produceScenes,\n produceSummary,\n runProduce,\n type ProduceStatus,\n type SceneFootage,\n} from './produceScenes';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from '../../canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from '../../canvasUi';\n\nexport interface ProduceVideoSheetProps {\n visible: boolean;\n onClose: () => void;\n timeline: EditorTimeline;\n sourceSec: Readonly<Record<string, number>>;\n aspectRatio: string;\n runAction?: RunMediaAction;\n /** A scene's footage came back: swap it in. */\n onFootage: (sceneId: string, footage: SceneFootage) => void;\n}\n\nconst MODEL = STATIC_VIDEO_MODELS[0];\nconst DURATIONS = MODEL?.supportedDurationsSeconds ?? [4, 6, 8];\n\nexport function ProduceVideoSheet({\n visible,\n onClose,\n timeline,\n sourceSec,\n aspectRatio,\n runAction,\n onFootage,\n}: ProduceVideoSheetProps) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const scenes = useMemo(() => produceScenes(timeline, sourceSec), [timeline, sourceSec]);\n const [picked, setPicked] = useState<Record<string, boolean>>({});\n const [shots, setShots] = useState<Record<string, string>>({});\n const [status, setStatus] = useState<Record<string, ProduceStatus>>({});\n const [running, setRunning] = useState(false);\n\n const isPicked = (id: string, hasFootage: boolean) => picked[id] ?? !hasFootage;\n const chosen = scenes.filter((s) => isPicked(s.sceneId, s.hasFootage));\n\n const start = () => {\n if (!runAction || running || chosen.length === 0) return;\n setRunning(true);\n const jobs = chosen.map((s) => produceJob(s, DURATIONS, shots[s.sceneId]?.trim() || s.shot));\n void runProduce(jobs, runAction, {\n aspectRatio,\n model: MODEL?.id,\n onStatus: (sceneId, next) => {\n setStatus((prev) => ({ ...prev, [sceneId]: next }));\n if (next.state === 'done') onFootage(sceneId, next.footage);\n },\n }).finally(() => setRunning(false));\n };\n\n return (\n <Modal visible={visible} transparent animationType=\"slide\" onRequestClose={onClose}>\n <Pressable style={styles.scrim} onPress={running ? undefined : onClose} accessibilityLabel=\"Close\" />\n <View style={styles.sheet} testID=\"produce-video-sheet\">\n <View style={styles.grabber} />\n <View style={styles.header}>\n <Text style={styles.title}>Produce video</Text>\n <Pressable onPress={onClose} hitSlop={10} accessibilityRole=\"button\" accessibilityLabel=\"Close\">\n <MaterialCommunityIcons name=\"close\" size={22} color={theme.edInk} />\n </Pressable>\n </View>\n <Text style={styles.hint}>\n Films each chosen scene with {MODEL?.label ?? 'the video model'} and puts the clip under its titles.\n The scene keeps its length, layers and transition.\n </Text>\n <ScrollView contentContainerStyle={styles.list} keyboardShouldPersistTaps=\"handled\">\n {scenes.length === 0 ? <Text style={styles.hint}>Add scenes first.</Text> : null}\n {scenes.map((s) => {\n const on = isPicked(s.sceneId, s.hasFootage);\n const st = status[s.sceneId];\n return (\n <View key={s.sceneId} style={[styles.row, on && styles.rowOn]}>\n <Pressable\n onPress={() => setPicked((p) => ({ ...p, [s.sceneId]: !on }))}\n disabled={running}\n style={({ pressed }) => [styles.rowHead, pressedStyle(pressed)]}\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: on }}\n >\n <MaterialCommunityIcons\n name={on ? 'checkbox-marked' : 'checkbox-blank-outline'}\n size={20}\n color={on ? theme.edAccent : theme.edInk3}\n />\n <Text style={styles.label} numberOfLines={1}>\n {s.label}\n </Text>\n <Text style={styles.meta}>\n {s.seconds}s{s.hasFootage ? ' · has footage' : ''}\n </Text>\n {st?.state === 'filming' ? (\n <ActivityIndicator size=\"small\" color={theme.edAccent} />\n ) : null}\n {st?.state === 'done' ? (\n <MaterialCommunityIcons name=\"check-circle\" size={16} color={theme.edOk} />\n ) : null}\n </Pressable>\n {on ? (\n <TextInput\n value={shots[s.sceneId] ?? s.shot}\n onChangeText={(text) => setShots((p) => ({ ...p, [s.sceneId]: text }))}\n editable={!running}\n multiline\n style={styles.shot}\n placeholderTextColor={theme.edInk3}\n />\n ) : null}\n {st?.state === 'failed' ? <Text style={styles.error}>{st.message}</Text> : null}\n </View>\n );\n })}\n </ScrollView>\n <Pressable\n onPress={start}\n disabled={!runAction || running || chosen.length === 0}\n style={({ pressed }) => [\n styles.run,\n (!runAction || running || chosen.length === 0) && styles.runOff,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n >\n {running ? (\n <ActivityIndicator color={theme.primaryForeground} />\n ) : (\n <Text style={styles.runLabel}>Film {produceSummary(chosen, DURATIONS)}</Text>\n )}\n </Pressable>\n </View>\n </Modal>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n scrim: { flex: 1, backgroundColor: 'rgba(0,0,0,0.45)' },\n sheet: {\n maxHeight: '82%',\n backgroundColor: theme.edPanel,\n borderTopLeftRadius: RADIUS.xl,\n borderTopRightRadius: RADIUS.xl,\n paddingHorizontal: SPACE.lg,\n paddingBottom: SPACE.xxl,\n gap: SPACE.md,\n },\n grabber: {\n alignSelf: 'center',\n width: 36,\n height: 4,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edTint(0.18),\n marginTop: SPACE.sm,\n },\n header: { flexDirection: 'row', alignItems: 'center', paddingTop: SPACE.xs },\n title: { ...TYPE.title, flex: 1, color: theme.edInk },\n hint: { ...TYPE.caption, fontWeight: '400', lineHeight: 17, color: theme.edInk3 },\n list: { gap: SPACE.sm, paddingVertical: SPACE.xs },\n row: {\n gap: SPACE.sm,\n padding: SPACE.md,\n borderRadius: RADIUS.md,\n borderWidth: 1,\n borderColor: 'transparent',\n backgroundColor: theme.edRaised,\n },\n rowOn: { borderColor: theme.edAccent },\n rowHead: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm, minHeight: 32 },\n label: { ...TYPE.label, flex: 1, color: theme.edInk },\n meta: { ...TYPE.caption, fontWeight: '400', color: theme.edInk3 },\n shot: {\n color: theme.edInk,\n fontSize: 13,\n lineHeight: 18,\n minHeight: 52,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n borderRadius: RADIUS.sm,\n backgroundColor: theme.edRaisedHi,\n textAlignVertical: 'top',\n },\n error: { ...TYPE.caption, color: theme.edDanger },\n run: {\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 50,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n },\n runOff: { opacity: 0.4 },\n runLabel: { ...TYPE.label, fontSize: 15, color: theme.primaryForeground },\n }),\n);\n"],"names":["_a"],"mappings":"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"}
|