@adminide-stack/yantra-mobile 12.0.125-alpha.0 → 12.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/features/canvas/AudioEditorExperience.js +207 -109
- package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
- package/lib/features/canvas/CanvasAgentChatPane.js +87 -72
- package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
- package/lib/features/canvas/CanvasBoardsGrid.js +494 -387
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasChatResultCard.js +78 -59
- package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
- package/lib/features/canvas/CanvasEditToolsPanel.js +126 -84
- package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +108 -126
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/CanvasGeneratePanel.js +178 -166
- package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
- package/lib/features/canvas/CanvasLibrarySheet.js +119 -123
- package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
- package/lib/features/canvas/CanvasLooksPanel.js +113 -89
- package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasModelPicker.js +79 -79
- package/lib/features/canvas/CanvasModelPicker.js.map +1 -1
- package/lib/features/canvas/CanvasTasksPanel.js +193 -128
- package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
- package/lib/features/canvas/CanvasTemplatesPanel.js +106 -94
- package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
- package/lib/features/canvas/CanvasToolDock.js +195 -127
- package/lib/features/canvas/CanvasToolDock.js.map +1 -1
- package/lib/features/canvas/FrameExtractorExperience.js +163 -100
- package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
- package/lib/features/canvas/GeneratorReferenceSlots.js +132 -69
- package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -1
- package/lib/features/canvas/ImageEditorExperience.js +278 -209
- package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
- package/lib/features/canvas/InfluencerStudioExperience.js +167 -125
- package/lib/features/canvas/InfluencerStudioExperience.js.map +1 -1
- package/lib/features/canvas/MoodboardExperience.js +102 -85
- package/lib/features/canvas/MoodboardExperience.js.map +1 -1
- package/lib/features/canvas/NativeCanvasViewer.js +203 -192
- package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
- package/lib/features/canvas/PromoContextFields.js +125 -92
- package/lib/features/canvas/PromoContextFields.js.map +1 -1
- package/lib/features/canvas/SetStudioExperience.js +225 -143
- package/lib/features/canvas/SetStudioExperience.js.map +1 -1
- package/lib/features/canvas/VideoClipsExperience.js +126 -92
- package/lib/features/canvas/VideoClipsExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditExperience.js +154 -142
- package/lib/features/canvas/VideoEditExperience.js.map +1 -1
- package/lib/features/canvas/VideoEditorExperience.js +551 -492
- package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
- package/lib/features/canvas/VideoGeneratorExperience.js +284 -131
- package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
- package/lib/features/canvas/canvasTasks.js +7 -3
- package/lib/features/canvas/canvasTasks.js.map +1 -1
- package/lib/features/canvas/canvasTheme.js +265 -0
- package/lib/features/canvas/canvasTheme.js.map +1 -0
- package/lib/features/canvas/canvasUi.js +381 -0
- package/lib/features/canvas/canvasUi.js.map +1 -0
- package/lib/features/canvas/recorder/CameraRecorderExperience.js +109 -52
- package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
- package/lib/features/canvas/serverTasks.js +1 -1
- package/lib/features/canvas/serverTasks.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +8 -7
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -1
- package/lib/features/canvas/videoEditor/ExportTaskCard.js +44 -41
- package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -1
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +50 -45
- package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
- package/lib/features/canvas/videoEditor/exportTask.js +3 -2
- package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
- package/lib/features/canvas/videoEditor/formWidgets.js +116 -64
- package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -1
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +77 -63
- package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -1
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +95 -79
- package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -1
- package/lib/features/design/DesignEditorExperience.js +241 -160
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +300 -143
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +3 -2
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js +1 -1
- package/lib/features/webbuilder/components/PublishSheet.js.map +1 -1
- package/lib/features/webbuilder/webbuilderPrompts.js +2 -5
- package/lib/features/webbuilder/webbuilderPrompts.js.map +1 -1
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js +120 -0
- package/lib/screens/WebBuilderNative/sandboxProxyApi.js.map +1 -0
- package/lib/screens/WebBuilderNative/useRestoredSandboxes.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +26 -4
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +110 -7
- package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {jsxs,jsx}from'react/jsx-runtime';import {useState
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useMemo,useState}from'react';import {Modal,View,Text,ScrollView,ActivityIndicator,Share,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {ensureFetchableMediaUrl}from'../../mediaUrls.js';import {useFormStyles,PickMulti,PickRow,Stepper,ChoiceRow}from'../formWidgets.js';import {friendlyMediaError}from'../mediaActions.js';import {isLocalOnlyUrl}from'../renderTimeline.js';import {inputsReady,TOOL_GROUPS,TOOLS,defaultValues}from'./catalog.js';import {useCanvasTheme,themedStyles}from'../../canvasTheme.js';import {Pressable,pressedStyle,SPACE,RADIUS,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;
|
|
@@ -32,6 +32,9 @@ function ToolsDrawer({
|
|
|
32
32
|
onAddMedia
|
|
33
33
|
}) {
|
|
34
34
|
var _a;
|
|
35
|
+
const theme = useCanvasTheme();
|
|
36
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
37
|
+
const formStyles = useFormStyles();
|
|
35
38
|
const [tool, setTool] = useState(null);
|
|
36
39
|
const [values, setValues] = useState({});
|
|
37
40
|
const [picked, setPicked] = useState([]);
|
|
@@ -87,19 +90,22 @@ function ToolsDrawer({
|
|
|
87
90
|
return /* @__PURE__ */ jsxs(Modal, { visible, transparent: true, animationType: "slide", onRequestClose: close, children: [
|
|
88
91
|
/* @__PURE__ */ jsx(Pressable, { style: styles.scrim, onPress: close, accessibilityLabel: "Close tools" }),
|
|
89
92
|
/* @__PURE__ */ jsxs(View, { style: styles.sheet, testID: "tools-drawer", children: [
|
|
93
|
+
/* @__PURE__ */ jsx(View, { style: styles.grabber }),
|
|
90
94
|
/* @__PURE__ */ jsxs(View, { style: styles.header, children: [
|
|
91
|
-
tool ? /* @__PURE__ */ jsx(Pressable, { onPress: () => setTool(null), hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "All tools", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-left", size: 24, color:
|
|
95
|
+
tool ? /* @__PURE__ */ jsx(Pressable, { onPress: () => setTool(null), hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "All tools", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-left", size: 24, color: theme.edInk }) }) : null,
|
|
92
96
|
/* @__PURE__ */ jsx(Text, { style: styles.title, children: tool ? tool.label : "Tools" }),
|
|
93
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: close, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color:
|
|
97
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: close, hitSlop: 10, accessibilityRole: "button", accessibilityLabel: "Close", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 22, color: theme.edInk }) })
|
|
94
98
|
] }),
|
|
95
99
|
/* @__PURE__ */ jsx(ScrollView, { contentContainerStyle: styles.body, keyboardShouldPersistTaps: "handled", children: !runAction ? /* @__PURE__ */ jsx(Text, { style: formStyles.hint, children: "Tools need the media service - not available in this host." }) : !tool ? TOOL_GROUPS.map((group) => /* @__PURE__ */ jsxs(View, { style: styles.group, children: [
|
|
96
|
-
/* @__PURE__ */ jsx(Text, { style: styles.groupLabel, children: group
|
|
97
|
-
TOOLS.filter((t) => t.group === group).map((t) => /* @__PURE__ */ jsxs(Pressable, { onPress: () => open(t), style:
|
|
100
|
+
/* @__PURE__ */ jsx(Text, { style: styles.groupLabel, children: group }),
|
|
101
|
+
TOOLS.filter((t) => t.group === group).map((t) => /* @__PURE__ */ jsxs(Pressable, { onPress: () => open(t), style: ({
|
|
102
|
+
pressed
|
|
103
|
+
}) => [styles.toolRow, pressedStyle(pressed)], accessibilityRole: "button", children: [
|
|
98
104
|
/* @__PURE__ */ jsxs(View, { style: styles.toolCopy, children: [
|
|
99
105
|
/* @__PURE__ */ jsx(Text, { style: styles.toolLabel, children: t.label }),
|
|
100
106
|
/* @__PURE__ */ jsx(Text, { style: styles.toolHint, children: t.hint })
|
|
101
107
|
] }),
|
|
102
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-right", size: 18, color:
|
|
108
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-right", size: 18, color: theme.edInk3 })
|
|
103
109
|
] }, t.id))
|
|
104
110
|
] }, group)) : /* @__PURE__ */ jsxs(View, { style: styles.form, children: [
|
|
105
111
|
/* @__PURE__ */ jsx(Text, { style: formStyles.hint, children: tool.hint }),
|
|
@@ -138,7 +144,9 @@ function ToolsDrawer({
|
|
|
138
144
|
}], value: values[field.key] ? "on" : "off", onChange: (value) => setValues((v) => __spreadProps(__spreadValues({}, v), {
|
|
139
145
|
[field.key]: value === "on"
|
|
140
146
|
})) }, field.key)),
|
|
141
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: run, disabled: !ready || busy, style:
|
|
147
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: run, disabled: !ready || busy, style: ({
|
|
148
|
+
pressed
|
|
149
|
+
}) => [styles.run, (!ready || busy) && styles.runOff, pressedStyle(pressed)], accessibilityRole: "button", children: busy ? /* @__PURE__ */ jsx(ActivityIndicator, { color: theme.edOnInk }) : /* @__PURE__ */ jsx(Text, { style: styles.runLabel, children: "Run" }) }),
|
|
142
150
|
error ? /* @__PURE__ */ jsx(Text, { style: styles.error, children: error }) : null,
|
|
143
151
|
(result == null ? void 0 : result.kind) === "file" ? /* @__PURE__ */ jsxs(View, { style: styles.result, children: [
|
|
144
152
|
/* @__PURE__ */ jsx(Text, { style: styles.resultName, numberOfLines: 1, children: result.name }),
|
|
@@ -146,11 +154,15 @@ function ToolsDrawer({
|
|
|
146
154
|
/* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
147
155
|
onAddMedia(result.url, result.type, result.name);
|
|
148
156
|
setAdded(true);
|
|
149
|
-
}, disabled: added, style:
|
|
157
|
+
}, disabled: added, style: ({
|
|
158
|
+
pressed
|
|
159
|
+
}) => [formStyles.choice, added && formStyles.choiceOn, pressedStyle(pressed)], accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: [formStyles.choiceLabel, added && formStyles.choiceLabelOn], children: added ? "In the library" : "Add to library" }) }),
|
|
150
160
|
/* @__PURE__ */ jsx(Pressable, { onPress: () => void Share.share({
|
|
151
161
|
url: result.url,
|
|
152
162
|
message: result.url
|
|
153
|
-
}), style:
|
|
163
|
+
}), style: ({
|
|
164
|
+
pressed
|
|
165
|
+
}) => [formStyles.choice, pressedStyle(pressed)], accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: formStyles.choiceLabel, children: "Share" }) })
|
|
154
166
|
] })
|
|
155
167
|
] }) : (result == null ? void 0 : result.kind) === "text" ? /* @__PURE__ */ jsxs(View, { style: styles.result, children: [
|
|
156
168
|
/* @__PURE__ */ jsx(Text, { style: styles.resultName, children: result.name }),
|
|
@@ -158,7 +170,9 @@ function ToolsDrawer({
|
|
|
158
170
|
/* @__PURE__ */ jsx(Pressable, { onPress: () => void Share.share({
|
|
159
171
|
message: result.text,
|
|
160
172
|
title: result.name
|
|
161
|
-
}), style:
|
|
173
|
+
}), style: ({
|
|
174
|
+
pressed
|
|
175
|
+
}) => [formStyles.choice, pressedStyle(pressed)], accessibilityRole: "button", children: /* @__PURE__ */ jsx(Text, { style: formStyles.choiceLabel, children: "Share" }) })
|
|
162
176
|
] }) : (result == null ? void 0 : result.kind) === "info" ? /* @__PURE__ */ jsx(View, { style: styles.result, children: result.rows.length === 0 ? /* @__PURE__ */ jsx(Text, { style: formStyles.hint, children: "The probe returned nothing readable." }) : result.rows.map(([k, v]) => /* @__PURE__ */ jsxs(View, { style: styles.infoRow, children: [
|
|
163
177
|
/* @__PURE__ */ jsx(Text, { style: styles.infoKey, children: k }),
|
|
164
178
|
/* @__PURE__ */ jsx(Text, { style: styles.infoValue, children: v })
|
|
@@ -167,117 +181,119 @@ function ToolsDrawer({
|
|
|
167
181
|
] })
|
|
168
182
|
] });
|
|
169
183
|
}
|
|
170
|
-
const
|
|
184
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
171
185
|
scrim: {
|
|
172
186
|
flex: 1,
|
|
173
187
|
backgroundColor: "rgba(0,0,0,0.45)"
|
|
174
188
|
},
|
|
175
189
|
sheet: {
|
|
176
190
|
maxHeight: "78%",
|
|
177
|
-
backgroundColor:
|
|
178
|
-
borderTopLeftRadius:
|
|
179
|
-
borderTopRightRadius:
|
|
180
|
-
paddingBottom:
|
|
191
|
+
backgroundColor: theme.edPanel,
|
|
192
|
+
borderTopLeftRadius: RADIUS.xl,
|
|
193
|
+
borderTopRightRadius: RADIUS.xl,
|
|
194
|
+
paddingBottom: SPACE.xl
|
|
195
|
+
},
|
|
196
|
+
grabber: {
|
|
197
|
+
alignSelf: "center",
|
|
198
|
+
width: 36,
|
|
199
|
+
height: 4,
|
|
200
|
+
borderRadius: RADIUS.pill,
|
|
201
|
+
backgroundColor: theme.edTint(0.18),
|
|
202
|
+
marginTop: SPACE.sm
|
|
181
203
|
},
|
|
182
204
|
header: {
|
|
183
205
|
flexDirection: "row",
|
|
184
206
|
alignItems: "center",
|
|
185
|
-
gap:
|
|
186
|
-
paddingHorizontal:
|
|
187
|
-
|
|
207
|
+
gap: SPACE.sm,
|
|
208
|
+
paddingHorizontal: SPACE.lg,
|
|
209
|
+
paddingTop: SPACE.sm,
|
|
210
|
+
paddingBottom: SPACE.md
|
|
188
211
|
},
|
|
189
|
-
title: {
|
|
212
|
+
title: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
190
213
|
flex: 1,
|
|
191
|
-
color:
|
|
192
|
-
|
|
193
|
-
fontWeight: "700"
|
|
194
|
-
},
|
|
214
|
+
color: theme.edInk
|
|
215
|
+
}),
|
|
195
216
|
body: {
|
|
196
|
-
paddingHorizontal:
|
|
197
|
-
paddingBottom:
|
|
198
|
-
gap:
|
|
217
|
+
paddingHorizontal: SPACE.lg,
|
|
218
|
+
paddingBottom: SPACE.xl,
|
|
219
|
+
gap: SPACE.lg
|
|
199
220
|
},
|
|
200
221
|
group: {
|
|
201
|
-
gap:
|
|
202
|
-
},
|
|
203
|
-
groupLabel: {
|
|
204
|
-
color: "#6A6A75",
|
|
205
|
-
fontSize: 11,
|
|
206
|
-
fontWeight: "700",
|
|
207
|
-
letterSpacing: 0.8,
|
|
208
|
-
marginTop: 6
|
|
222
|
+
gap: SPACE.sm
|
|
209
223
|
},
|
|
224
|
+
groupLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
225
|
+
color: theme.edInk2,
|
|
226
|
+
marginTop: SPACE.xs
|
|
227
|
+
}),
|
|
210
228
|
toolRow: {
|
|
211
229
|
flexDirection: "row",
|
|
212
230
|
alignItems: "center",
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
231
|
+
minHeight: 56,
|
|
232
|
+
paddingVertical: SPACE.md,
|
|
233
|
+
paddingHorizontal: SPACE.lg,
|
|
234
|
+
borderRadius: RADIUS.md,
|
|
235
|
+
backgroundColor: theme.edRaised
|
|
217
236
|
},
|
|
218
237
|
toolCopy: {
|
|
219
238
|
flex: 1,
|
|
220
239
|
gap: 2
|
|
221
240
|
},
|
|
222
|
-
toolLabel: {
|
|
223
|
-
color: "#F7F7FA",
|
|
241
|
+
toolLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
224
242
|
fontSize: 14,
|
|
225
|
-
|
|
226
|
-
},
|
|
227
|
-
toolHint: {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
},
|
|
243
|
+
color: theme.edInk
|
|
244
|
+
}),
|
|
245
|
+
toolHint: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
246
|
+
fontWeight: "400",
|
|
247
|
+
color: theme.edInk3
|
|
248
|
+
}),
|
|
231
249
|
form: {
|
|
232
|
-
gap:
|
|
250
|
+
gap: SPACE.md
|
|
233
251
|
},
|
|
234
252
|
run: {
|
|
235
253
|
alignItems: "center",
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
254
|
+
justifyContent: "center",
|
|
255
|
+
minHeight: 48,
|
|
256
|
+
borderRadius: RADIUS.pill,
|
|
257
|
+
backgroundColor: theme.edAccent
|
|
239
258
|
},
|
|
240
259
|
runOff: {
|
|
241
260
|
opacity: 0.4
|
|
242
261
|
},
|
|
243
|
-
runLabel: {
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
},
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
fontSize: 12.5
|
|
251
|
-
},
|
|
262
|
+
runLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
263
|
+
fontSize: 15,
|
|
264
|
+
color: theme.edOnInk
|
|
265
|
+
}),
|
|
266
|
+
error: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
267
|
+
color: theme.edDanger
|
|
268
|
+
}),
|
|
252
269
|
result: {
|
|
253
|
-
gap:
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
},
|
|
258
|
-
resultName: {
|
|
259
|
-
color: "#F7F7FA",
|
|
260
|
-
fontSize: 13,
|
|
261
|
-
fontWeight: "600"
|
|
270
|
+
gap: SPACE.sm,
|
|
271
|
+
paddingTop: SPACE.md,
|
|
272
|
+
borderTopWidth: StyleSheet.hairlineWidth,
|
|
273
|
+
borderTopColor: theme.edLine
|
|
262
274
|
},
|
|
275
|
+
resultName: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
276
|
+
color: theme.edInk
|
|
277
|
+
}),
|
|
263
278
|
mono: {
|
|
264
|
-
color:
|
|
279
|
+
color: theme.edInk2,
|
|
265
280
|
fontSize: 11.5,
|
|
281
|
+
lineHeight: 16,
|
|
266
282
|
fontFamily: "Menlo"
|
|
267
283
|
},
|
|
268
284
|
infoRow: {
|
|
269
285
|
flexDirection: "row",
|
|
270
286
|
justifyContent: "space-between",
|
|
271
|
-
gap:
|
|
272
|
-
|
|
273
|
-
infoKey: {
|
|
274
|
-
color: "#8B8B96",
|
|
275
|
-
fontSize: 12.5
|
|
287
|
+
gap: SPACE.md,
|
|
288
|
+
paddingVertical: 2
|
|
276
289
|
},
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
290
|
+
infoKey: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
291
|
+
fontWeight: "400",
|
|
292
|
+
color: theme.edInk3
|
|
293
|
+
}),
|
|
294
|
+
infoValue: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
295
|
+
color: theme.edInk,
|
|
280
296
|
flexShrink: 1,
|
|
281
297
|
textAlign: "right"
|
|
282
|
-
}
|
|
283
|
-
});export{ToolsDrawer};//# sourceMappingURL=ToolsDrawer.js.map
|
|
298
|
+
})
|
|
299
|
+
}));export{ToolsDrawer};//# sourceMappingURL=ToolsDrawer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolsDrawer.js","sources":["../../../../../src/features/canvas/videoEditor/tools/ToolsDrawer.tsx"],"sourcesContent":["/**\n * Tools drawer - the editor header's bottom sheet of one-off media utilities\n * (web tools/ToolsDrawer.tsx). Pick a tool, pick its inputs from the\n * editor's library, set its fields, run; a file lands back in the library,\n * text (transcripts) and info rows show inline with a share action.\n */\nimport React, { useMemo, useState } from 'react';\nimport { ActivityIndicator, Modal, Pressable, ScrollView, Share, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { CanvasItem } from '../../canvasCore';\nimport { ensureFetchableMediaUrl } from '../../mediaUrls';\nimport { ChoiceRow, PickMulti, PickRow, Stepper, formStyles } from '../formWidgets';\nimport { friendlyMediaError, type RunMediaAction } from '../mediaActions';\nimport { isLocalOnlyUrl } from '../renderTimeline';\nimport {\n TOOL_GROUPS,\n TOOLS,\n defaultValues,\n inputsReady,\n type MediaKind,\n type ToolDef,\n type ToolInput,\n type ToolResult,\n type ToolValues,\n} from './catalog';\n\nexport interface ToolsDrawerProps {\n visible: boolean;\n onClose: () => void;\n media: readonly CanvasItem[];\n /** The clip open in the editor - preselected as the input. */\n selectedSrc?: string | null;\n runAction?: RunMediaAction;\n uploadMedia?: (localUri: string) => Promise<string>;\n /** A produced file goes back into the editor's library. */\n onAddMedia: (url: string, type: MediaKind, name: string) => void;\n}\n\nconst asInput = (item: CanvasItem): ToolInput => ({\n src: item.src,\n name: item.generatedAssetName || item.type,\n type: item.type === 'video' ? 'video' : item.type === 'audio' ? 'audio' : 'image',\n});\n\nexport function ToolsDrawer({\n visible,\n onClose,\n media,\n selectedSrc,\n runAction,\n uploadMedia,\n onAddMedia,\n}: ToolsDrawerProps) {\n const [tool, setTool] = useState<ToolDef | null>(null);\n const [values, setValues] = useState<ToolValues>({});\n const [picked, setPicked] = useState<string[][]>([]);\n const [busy, setBusy] = useState(false);\n const [result, setResult] = useState<ToolResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [added, setAdded] = useState(false);\n\n const open = (next: ToolDef) => {\n setTool(next);\n setValues(defaultValues(next));\n setResult(null);\n setError(null);\n setAdded(false);\n setPicked(\n next.inputs.map((slot) => {\n const pre = media.find((m) => m.src === selectedSrc && slot.accepts.includes(asInput(m).type));\n return pre && !slot.many ? [pre.src] : [];\n }),\n );\n };\n\n const chosen = useMemo(\n () =>\n picked.map((srcs) =>\n srcs\n .map((src) => media.find((m) => m.src === src))\n .filter((m): m is CanvasItem => !!m)\n .map(asInput),\n ),\n [picked, media],\n );\n const ready = Boolean(tool && runAction && inputsReady(tool, chosen));\n\n const run = async () => {\n if (!tool || !runAction || !ready || busy) return;\n setBusy(true);\n setError(null);\n setResult(null);\n setAdded(false);\n try {\n const fetchable = await Promise.all(\n chosen.map((slot) =>\n Promise.all(\n slot.map(async (input) => {\n if (isLocalOnlyUrl(input.src)) {\n if (!uploadMedia)\n throw new Error('This file is on the phone and cannot be uploaded here.');\n return { ...input, src: await uploadMedia(input.src) };\n }\n return { ...input, src: await ensureFetchableMediaUrl(runAction, input.src) };\n }),\n ),\n ),\n );\n setResult(await tool.run({ run: runAction, keep: true }, fetchable.flat(), values));\n } catch (err: unknown) {\n setError(friendlyMediaError(err, tool.label.toLowerCase()));\n } finally {\n setBusy(false);\n }\n };\n\n const close = () => {\n setTool(null);\n onClose();\n };\n\n return (\n <Modal visible={visible} transparent animationType=\"slide\" onRequestClose={close}>\n <Pressable style={styles.scrim} onPress={close} accessibilityLabel=\"Close tools\" />\n <View style={styles.sheet} testID=\"tools-drawer\">\n <View style={styles.header}>\n {tool ? (\n <Pressable\n onPress={() => setTool(null)}\n hitSlop={10}\n accessibilityRole=\"button\"\n accessibilityLabel=\"All tools\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={24} color=\"#F7F7FA\" />\n </Pressable>\n ) : null}\n <Text style={styles.title}>{tool ? tool.label : 'Tools'}</Text>\n <Pressable onPress={close} hitSlop={10} accessibilityRole=\"button\" accessibilityLabel=\"Close\">\n <MaterialCommunityIcons name=\"close\" size={22} color=\"#F7F7FA\" />\n </Pressable>\n </View>\n <ScrollView contentContainerStyle={styles.body} keyboardShouldPersistTaps=\"handled\">\n {!runAction ? (\n <Text style={formStyles.hint}>Tools need the media service - not available in this host.</Text>\n ) : !tool ? (\n TOOL_GROUPS.map((group) => (\n <View key={group} style={styles.group}>\n <Text style={styles.groupLabel}>{group.toUpperCase()}</Text>\n {TOOLS.filter((t) => t.group === group).map((t) => (\n <Pressable\n key={t.id}\n onPress={() => open(t)}\n style={styles.toolRow}\n accessibilityRole=\"button\"\n >\n <View style={styles.toolCopy}>\n <Text style={styles.toolLabel}>{t.label}</Text>\n <Text style={styles.toolHint}>{t.hint}</Text>\n </View>\n <MaterialCommunityIcons name=\"chevron-right\" size={18} color=\"#6A6A75\" />\n </Pressable>\n ))}\n </View>\n ))\n ) : (\n <View style={styles.form}>\n <Text style={formStyles.hint}>{tool.hint}</Text>\n {tool.inputs.map((slot, i) => {\n const items = media.filter((m) => slot.accepts.includes(asInput(m).type));\n const empty = `Add ${slot.accepts.join(' or ')} to the library first.`;\n return slot.many ? (\n <View key={slot.label}>\n <Text style={formStyles.fieldLabel}>\n {slot.label} (at least {slot.min ?? 2}, in tap order)\n </Text>\n <PickMulti\n items={items}\n selected={picked[i] ?? []}\n onChange={(srcs) => setPicked((p) => p.map((v, j) => (j === i ? srcs : v)))}\n empty={empty}\n />\n </View>\n ) : (\n <PickRow\n key={slot.label}\n label={slot.label}\n items={items}\n selected={picked[i]?.[0] ?? ''}\n onSelect={(src) => setPicked((p) => p.map((v, j) => (j === i ? [src] : v)))}\n empty={empty}\n />\n );\n })}\n {(tool.fields ?? []).map((field) =>\n field.kind === 'number' ? (\n <Stepper\n key={field.key}\n label={field.label}\n value={`${values[field.key]}${field.unit ? ` ${field.unit}` : ''}`}\n onLess={() =>\n setValues((v) => ({\n ...v,\n [field.key]: Math.max(\n field.min ?? -Infinity,\n Number(v[field.key]) - (field.step ?? 1),\n ),\n }))\n }\n onMore={() =>\n setValues((v) => ({\n ...v,\n [field.key]: Math.min(\n field.max ?? Infinity,\n Number(v[field.key]) + (field.step ?? 1),\n ),\n }))\n }\n />\n ) : field.kind === 'select' ? (\n <ChoiceRow\n key={field.key}\n label={field.label}\n options={field.options}\n value={String(values[field.key])}\n onChange={(value) => setValues((v) => ({ ...v, [field.key]: value }))}\n />\n ) : (\n <ChoiceRow\n key={field.key}\n label={field.label}\n options={[\n { value: 'on', label: 'On' },\n { value: 'off', label: 'Off' },\n ]}\n value={values[field.key] ? 'on' : 'off'}\n onChange={(value) => setValues((v) => ({ ...v, [field.key]: value === 'on' }))}\n />\n ),\n )}\n <Pressable\n onPress={run}\n disabled={!ready || busy}\n style={[styles.run, (!ready || busy) && styles.runOff]}\n accessibilityRole=\"button\"\n >\n {busy ? (\n <ActivityIndicator color=\"#0A0A0C\" />\n ) : (\n <Text style={styles.runLabel}>Run</Text>\n )}\n </Pressable>\n {error ? <Text style={styles.error}>{error}</Text> : null}\n {result?.kind === 'file' ? (\n <View style={styles.result}>\n <Text style={styles.resultName} numberOfLines={1}>\n {result.name}\n </Text>\n <View style={formStyles.row}>\n <Pressable\n onPress={() => {\n onAddMedia(result.url, result.type, result.name);\n setAdded(true);\n }}\n disabled={added}\n style={[formStyles.choice, added && formStyles.choiceOn]}\n accessibilityRole=\"button\"\n >\n <Text style={[formStyles.choiceLabel, added && formStyles.choiceLabelOn]}>\n {added ? 'In the library' : 'Add to library'}\n </Text>\n </Pressable>\n <Pressable\n onPress={() => void Share.share({ url: result.url, message: result.url })}\n style={formStyles.choice}\n accessibilityRole=\"button\"\n >\n <Text style={formStyles.choiceLabel}>Share</Text>\n </Pressable>\n </View>\n </View>\n ) : result?.kind === 'text' ? (\n <View style={styles.result}>\n <Text style={styles.resultName}>{result.name}</Text>\n <Text style={styles.mono} selectable numberOfLines={14}>\n {result.text}\n </Text>\n <Pressable\n onPress={() => void Share.share({ message: result.text, title: result.name })}\n style={formStyles.choice}\n accessibilityRole=\"button\"\n >\n <Text style={formStyles.choiceLabel}>Share</Text>\n </Pressable>\n </View>\n ) : result?.kind === 'info' ? (\n <View style={styles.result}>\n {result.rows.length === 0 ? (\n <Text style={formStyles.hint}>The probe returned nothing readable.</Text>\n ) : (\n result.rows.map(([k, v]) => (\n <View key={k} style={styles.infoRow}>\n <Text style={styles.infoKey}>{k}</Text>\n <Text style={styles.infoValue}>{v}</Text>\n </View>\n ))\n )}\n </View>\n ) : null}\n </View>\n )}\n </ScrollView>\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: '78%',\n backgroundColor: '#141418',\n borderTopLeftRadius: 18,\n borderTopRightRadius: 18,\n paddingBottom: 24,\n },\n header: { flexDirection: 'row', alignItems: 'center', gap: 10, paddingHorizontal: 16, paddingVertical: 14 },\n title: { flex: 1, color: '#F7F7FA', fontSize: 16, fontWeight: '700' },\n body: { paddingHorizontal: 16, paddingBottom: 24, gap: 12 },\n group: { gap: 4 },\n groupLabel: { color: '#6A6A75', fontSize: 11, fontWeight: '700', letterSpacing: 0.8, marginTop: 6 },\n toolRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 10,\n paddingHorizontal: 12,\n borderRadius: 10,\n backgroundColor: '#1B1B21',\n },\n toolCopy: { flex: 1, gap: 2 },\n toolLabel: { color: '#F7F7FA', fontSize: 14, fontWeight: '600' },\n toolHint: { color: '#8B8B96', fontSize: 12 },\n form: { gap: 12 },\n run: { alignItems: 'center', paddingVertical: 12, borderRadius: 12, backgroundColor: '#8B7CFF' },\n runOff: { opacity: 0.4 },\n runLabel: { color: '#0A0A0C', fontSize: 14, fontWeight: '700' },\n error: { color: '#F87171', fontSize: 12.5 },\n result: { gap: 8, padding: 12, borderRadius: 12, backgroundColor: '#1B1B21' },\n resultName: { color: '#F7F7FA', fontSize: 13, fontWeight: '600' },\n mono: { color: '#D4D4DC', fontSize: 11.5, fontFamily: 'Menlo' },\n infoRow: { flexDirection: 'row', justifyContent: 'space-between', gap: 12 },\n infoKey: { color: '#8B8B96', fontSize: 12.5 },\n infoValue: { color: '#F7F7FA', fontSize: 12.5, flexShrink: 1, textAlign: 'right' },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolsDrawer.js","sources":["../../../../../src/features/canvas/videoEditor/tools/ToolsDrawer.tsx"],"sourcesContent":["/**\n * Tools drawer - the editor header's bottom sheet of one-off media utilities\n * (web tools/ToolsDrawer.tsx). Pick a tool, pick its inputs from the\n * editor's library, set its fields, run; a file lands back in the library,\n * text (transcripts) and info rows show inline with a share action.\n */\nimport React, { useMemo, useState } from 'react';\nimport { ActivityIndicator, Modal, ScrollView, Share, StyleSheet, Text, View } from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { CanvasItem } from '../../canvasCore';\nimport { ensureFetchableMediaUrl } from '../../mediaUrls';\nimport { ChoiceRow, PickMulti, PickRow, Stepper, useFormStyles } from '../formWidgets';\nimport { friendlyMediaError, type RunMediaAction } from '../mediaActions';\nimport { isLocalOnlyUrl } from '../renderTimeline';\nimport {\n TOOL_GROUPS,\n TOOLS,\n defaultValues,\n inputsReady,\n type MediaKind,\n type ToolDef,\n type ToolInput,\n type ToolResult,\n type ToolValues,\n} from './catalog';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from '../../canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from '../../canvasUi';\n\nexport interface ToolsDrawerProps {\n visible: boolean;\n onClose: () => void;\n media: readonly CanvasItem[];\n /** The clip open in the editor - preselected as the input. */\n selectedSrc?: string | null;\n runAction?: RunMediaAction;\n uploadMedia?: (localUri: string) => Promise<string>;\n /** A produced file goes back into the editor's library. */\n onAddMedia: (url: string, type: MediaKind, name: string) => void;\n}\n\nconst asInput = (item: CanvasItem): ToolInput => ({\n src: item.src,\n name: item.generatedAssetName || item.type,\n type: item.type === 'video' ? 'video' : item.type === 'audio' ? 'audio' : 'image',\n});\n\nexport function ToolsDrawer({\n visible,\n onClose,\n media,\n selectedSrc,\n runAction,\n uploadMedia,\n onAddMedia,\n}: ToolsDrawerProps) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const formStyles = useFormStyles();\n const [tool, setTool] = useState<ToolDef | null>(null);\n const [values, setValues] = useState<ToolValues>({});\n const [picked, setPicked] = useState<string[][]>([]);\n const [busy, setBusy] = useState(false);\n const [result, setResult] = useState<ToolResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [added, setAdded] = useState(false);\n\n const open = (next: ToolDef) => {\n setTool(next);\n setValues(defaultValues(next));\n setResult(null);\n setError(null);\n setAdded(false);\n setPicked(\n next.inputs.map((slot) => {\n const pre = media.find((m) => m.src === selectedSrc && slot.accepts.includes(asInput(m).type));\n return pre && !slot.many ? [pre.src] : [];\n }),\n );\n };\n\n const chosen = useMemo(\n () =>\n picked.map((srcs) =>\n srcs\n .map((src) => media.find((m) => m.src === src))\n .filter((m): m is CanvasItem => !!m)\n .map(asInput),\n ),\n [picked, media],\n );\n const ready = Boolean(tool && runAction && inputsReady(tool, chosen));\n\n const run = async () => {\n if (!tool || !runAction || !ready || busy) return;\n setBusy(true);\n setError(null);\n setResult(null);\n setAdded(false);\n try {\n const fetchable = await Promise.all(\n chosen.map((slot) =>\n Promise.all(\n slot.map(async (input) => {\n if (isLocalOnlyUrl(input.src)) {\n if (!uploadMedia)\n throw new Error('This file is on the phone and cannot be uploaded here.');\n return { ...input, src: await uploadMedia(input.src) };\n }\n return { ...input, src: await ensureFetchableMediaUrl(runAction, input.src) };\n }),\n ),\n ),\n );\n setResult(await tool.run({ run: runAction, keep: true }, fetchable.flat(), values));\n } catch (err: unknown) {\n setError(friendlyMediaError(err, tool.label.toLowerCase()));\n } finally {\n setBusy(false);\n }\n };\n\n const close = () => {\n setTool(null);\n onClose();\n };\n\n return (\n <Modal visible={visible} transparent animationType=\"slide\" onRequestClose={close}>\n <Pressable style={styles.scrim} onPress={close} accessibilityLabel=\"Close tools\" />\n <View style={styles.sheet} testID=\"tools-drawer\">\n <View style={styles.grabber} />\n <View style={styles.header}>\n {tool ? (\n <Pressable\n onPress={() => setTool(null)}\n hitSlop={10}\n accessibilityRole=\"button\"\n accessibilityLabel=\"All tools\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={24} color={theme.edInk} />\n </Pressable>\n ) : null}\n <Text style={styles.title}>{tool ? tool.label : 'Tools'}</Text>\n <Pressable onPress={close} hitSlop={10} accessibilityRole=\"button\" accessibilityLabel=\"Close\">\n <MaterialCommunityIcons name=\"close\" size={22} color={theme.edInk} />\n </Pressable>\n </View>\n <ScrollView contentContainerStyle={styles.body} keyboardShouldPersistTaps=\"handled\">\n {!runAction ? (\n <Text style={formStyles.hint}>Tools need the media service - not available in this host.</Text>\n ) : !tool ? (\n TOOL_GROUPS.map((group) => (\n <View key={group} style={styles.group}>\n <Text style={styles.groupLabel}>{group}</Text>\n {TOOLS.filter((t) => t.group === group).map((t) => (\n <Pressable\n key={t.id}\n onPress={() => open(t)}\n style={({ pressed }) => [styles.toolRow, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <View style={styles.toolCopy}>\n <Text style={styles.toolLabel}>{t.label}</Text>\n <Text style={styles.toolHint}>{t.hint}</Text>\n </View>\n <MaterialCommunityIcons name=\"chevron-right\" size={18} color={theme.edInk3} />\n </Pressable>\n ))}\n </View>\n ))\n ) : (\n <View style={styles.form}>\n <Text style={formStyles.hint}>{tool.hint}</Text>\n {tool.inputs.map((slot, i) => {\n const items = media.filter((m) => slot.accepts.includes(asInput(m).type));\n const empty = `Add ${slot.accepts.join(' or ')} to the library first.`;\n return slot.many ? (\n <View key={slot.label}>\n <Text style={formStyles.fieldLabel}>\n {slot.label} (at least {slot.min ?? 2}, in tap order)\n </Text>\n <PickMulti\n items={items}\n selected={picked[i] ?? []}\n onChange={(srcs) => setPicked((p) => p.map((v, j) => (j === i ? srcs : v)))}\n empty={empty}\n />\n </View>\n ) : (\n <PickRow\n key={slot.label}\n label={slot.label}\n items={items}\n selected={picked[i]?.[0] ?? ''}\n onSelect={(src) => setPicked((p) => p.map((v, j) => (j === i ? [src] : v)))}\n empty={empty}\n />\n );\n })}\n {(tool.fields ?? []).map((field) =>\n field.kind === 'number' ? (\n <Stepper\n key={field.key}\n label={field.label}\n value={`${values[field.key]}${field.unit ? ` ${field.unit}` : ''}`}\n onLess={() =>\n setValues((v) => ({\n ...v,\n [field.key]: Math.max(\n field.min ?? -Infinity,\n Number(v[field.key]) - (field.step ?? 1),\n ),\n }))\n }\n onMore={() =>\n setValues((v) => ({\n ...v,\n [field.key]: Math.min(\n field.max ?? Infinity,\n Number(v[field.key]) + (field.step ?? 1),\n ),\n }))\n }\n />\n ) : field.kind === 'select' ? (\n <ChoiceRow\n key={field.key}\n label={field.label}\n options={field.options}\n value={String(values[field.key])}\n onChange={(value) => setValues((v) => ({ ...v, [field.key]: value }))}\n />\n ) : (\n <ChoiceRow\n key={field.key}\n label={field.label}\n options={[\n { value: 'on', label: 'On' },\n { value: 'off', label: 'Off' },\n ]}\n value={values[field.key] ? 'on' : 'off'}\n onChange={(value) => setValues((v) => ({ ...v, [field.key]: value === 'on' }))}\n />\n ),\n )}\n <Pressable\n onPress={run}\n disabled={!ready || busy}\n style={({ pressed }) => [\n styles.run,\n (!ready || busy) && styles.runOff,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n >\n {busy ? (\n <ActivityIndicator color={theme.edOnInk} />\n ) : (\n <Text style={styles.runLabel}>Run</Text>\n )}\n </Pressable>\n {error ? <Text style={styles.error}>{error}</Text> : null}\n {result?.kind === 'file' ? (\n <View style={styles.result}>\n <Text style={styles.resultName} numberOfLines={1}>\n {result.name}\n </Text>\n <View style={formStyles.row}>\n <Pressable\n onPress={() => {\n onAddMedia(result.url, result.type, result.name);\n setAdded(true);\n }}\n disabled={added}\n style={({ pressed }) => [\n formStyles.choice,\n added && formStyles.choiceOn,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n >\n <Text style={[formStyles.choiceLabel, added && formStyles.choiceLabelOn]}>\n {added ? 'In the library' : 'Add to library'}\n </Text>\n </Pressable>\n <Pressable\n onPress={() => void Share.share({ url: result.url, message: result.url })}\n style={({ pressed }) => [formStyles.choice, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={formStyles.choiceLabel}>Share</Text>\n </Pressable>\n </View>\n </View>\n ) : result?.kind === 'text' ? (\n <View style={styles.result}>\n <Text style={styles.resultName}>{result.name}</Text>\n <Text style={styles.mono} selectable numberOfLines={14}>\n {result.text}\n </Text>\n <Pressable\n onPress={() => void Share.share({ message: result.text, title: result.name })}\n style={({ pressed }) => [formStyles.choice, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={formStyles.choiceLabel}>Share</Text>\n </Pressable>\n </View>\n ) : result?.kind === 'info' ? (\n <View style={styles.result}>\n {result.rows.length === 0 ? (\n <Text style={formStyles.hint}>The probe returned nothing readable.</Text>\n ) : (\n result.rows.map(([k, v]) => (\n <View key={k} style={styles.infoRow}>\n <Text style={styles.infoKey}>{k}</Text>\n <Text style={styles.infoValue}>{v}</Text>\n </View>\n ))\n )}\n </View>\n ) : null}\n </View>\n )}\n </ScrollView>\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: '78%',\n backgroundColor: theme.edPanel,\n borderTopLeftRadius: RADIUS.xl,\n borderTopRightRadius: RADIUS.xl,\n paddingBottom: SPACE.xl,\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: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n paddingHorizontal: SPACE.lg,\n paddingTop: SPACE.sm,\n paddingBottom: SPACE.md,\n },\n title: { ...TYPE.title, flex: 1, color: theme.edInk },\n body: { paddingHorizontal: SPACE.lg, paddingBottom: SPACE.xl, gap: SPACE.lg },\n group: { gap: SPACE.sm },\n groupLabel: { ...TYPE.label, color: theme.edInk2, marginTop: SPACE.xs },\n toolRow: {\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 56,\n paddingVertical: SPACE.md,\n paddingHorizontal: SPACE.lg,\n borderRadius: RADIUS.md,\n backgroundColor: theme.edRaised,\n },\n toolCopy: { flex: 1, gap: 2 },\n toolLabel: { ...TYPE.label, fontSize: 14, color: theme.edInk },\n toolHint: { ...TYPE.caption, fontWeight: '400', color: theme.edInk3 },\n form: { gap: SPACE.md },\n run: {\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 48,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edAccent,\n },\n runOff: { opacity: 0.4 },\n runLabel: { ...TYPE.label, fontSize: 15, color: theme.edOnInk },\n error: { ...TYPE.caption, color: theme.edDanger },\n result: {\n gap: SPACE.sm,\n paddingTop: SPACE.md,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: theme.edLine,\n },\n resultName: { ...TYPE.label, color: theme.edInk },\n mono: { color: theme.edInk2, fontSize: 11.5, lineHeight: 16, fontFamily: 'Menlo' },\n infoRow: { flexDirection: 'row', justifyContent: 'space-between', gap: SPACE.md, paddingVertical: 2 },\n infoKey: { ...TYPE.caption, fontWeight: '400', color: theme.edInk3 },\n infoValue: { ...TYPE.caption, color: theme.edInk, flexShrink: 1, textAlign: 'right' },\n }),\n);\n"],"names":["_a"],"mappings":"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"}
|