@adminide-stack/yantra-mobile 12.0.125-alpha.1 → 12.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,useEffect,
|
|
1
|
+
import {jsxs,jsx,Fragment}from'react/jsx-runtime';import {useMemo,useState,useEffect,useRef,useCallback}from'react';import {View,Text,TextInput,ScrollView,Alert,Image,StyleSheet,useWindowDimensions,Animated}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {canDeleteLibraryFile,deleteLibraryFile,fetchableLibraryUrl,listStorageLibraryPage}from'./storageLibrary.js';import {useMediaSource,mediaPhaseLabel}from'./useMediaSource.js';import {useCanvasTheme,themedStyles}from'./canvasTheme.js';import {Pressable,pressedStyle,Segmented,RADIUS,SPACE,CoverPlaceholder,Skeleton,TYPE}from'./canvasUi.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -31,6 +31,8 @@ function itemFileName(item) {
|
|
|
31
31
|
return item.generatedAssetName || fromUrl || item.type;
|
|
32
32
|
}
|
|
33
33
|
function LibrarySkeletons() {
|
|
34
|
+
const theme = useCanvasTheme();
|
|
35
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
34
36
|
const {
|
|
35
37
|
width
|
|
36
38
|
} = useWindowDimensions();
|
|
@@ -76,22 +78,33 @@ function StorageTile({
|
|
|
76
78
|
onPick,
|
|
77
79
|
onDelete
|
|
78
80
|
}) {
|
|
81
|
+
const theme = useCanvasTheme();
|
|
82
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
79
83
|
const renew = useCallback((url) => fetchableLibraryUrl(runAction, url), [runAction]);
|
|
80
84
|
const media = useMediaSource(file.url, file.kind, runAction ? renew : void 0);
|
|
81
85
|
const status = mediaPhaseLabel(media.phase);
|
|
86
|
+
const [loaded, setLoaded] = useState(false);
|
|
87
|
+
useEffect(() => setLoaded(false), [media.key]);
|
|
82
88
|
return /* @__PURE__ */ jsxs(View, { style: styles.tile, children: [
|
|
83
89
|
/* @__PURE__ */ jsxs(Pressable, { onPress: () => onPick(__spreadProps(__spreadValues({}, file), {
|
|
84
90
|
url: media.url
|
|
85
|
-
})), style:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
})), style: ({
|
|
92
|
+
pressed
|
|
93
|
+
}) => [styles.tileHit, pressedStyle(pressed)], accessibilityRole: "button", children: [
|
|
94
|
+
file.kind === "image" ? /* @__PURE__ */ jsxs(View, { style: [styles.thumb, styles.thumbClip], children: [
|
|
95
|
+
media.phase === "broken" ? /* @__PURE__ */ jsx(CoverPlaceholder, { seed: file.url, icon: "image-off-outline" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
96
|
+
!loaded ? /* @__PURE__ */ jsx(Skeleton, {}) : null,
|
|
97
|
+
/* @__PURE__ */ jsx(Image, { source: {
|
|
98
|
+
uri: media.src
|
|
99
|
+
}, style: StyleSheet.absoluteFill, onLoad: () => setLoaded(true), onError: media.onError }, media.key)
|
|
100
|
+
] }),
|
|
90
101
|
status ? /* @__PURE__ */ jsx(View, { style: styles.tileStatus, pointerEvents: "none", children: /* @__PURE__ */ jsx(Text, { style: styles.tileStatusLabel, children: status }) }) : null
|
|
91
|
-
] }) : /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.
|
|
102
|
+
] }) : /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbClip], children: /* @__PURE__ */ jsx(CoverPlaceholder, { seed: file.url, icon: file.kind === "video" ? "play" : "music", label: file.kind === "video" ? "Video" : "Audio" }) }),
|
|
92
103
|
/* @__PURE__ */ jsx(Text, { style: styles.tileName, numberOfLines: 1, children: file.name })
|
|
93
104
|
] }),
|
|
94
|
-
canDeleteLibraryFile(file) && onDelete ? /* @__PURE__ */ jsx(Pressable, { onPress: () => onDelete(file), style:
|
|
105
|
+
canDeleteLibraryFile(file) && onDelete ? /* @__PURE__ */ jsx(Pressable, { onPress: () => onDelete(file), style: ({
|
|
106
|
+
pressed
|
|
107
|
+
}) => [styles.deleteBtn, pressedStyle(pressed)], hitSlop: 8, accessibilityRole: "button", accessibilityLabel: `Delete ${file.name}`, children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "trash-can-outline", size: 15, color: "#fafafa" }) }) : null
|
|
95
108
|
] });
|
|
96
109
|
}
|
|
97
110
|
function CanvasLibraryPanel({
|
|
@@ -103,6 +116,8 @@ function CanvasLibraryPanel({
|
|
|
103
116
|
onPlace,
|
|
104
117
|
onPickStorage
|
|
105
118
|
}) {
|
|
119
|
+
const theme = useCanvasTheme();
|
|
120
|
+
const styles = useMemo(() => makeStyles(theme), [theme]);
|
|
106
121
|
const [filter, setFilter] = useState("all");
|
|
107
122
|
const [query, setQuery] = useState("");
|
|
108
123
|
const [storage, setStorage] = useState(null);
|
|
@@ -159,13 +174,15 @@ function CanvasLibraryPanel({
|
|
|
159
174
|
return /* @__PURE__ */ jsxs(View, { style: styles.root, children: [
|
|
160
175
|
/* @__PURE__ */ jsxs(View, { style: styles.header, children: [
|
|
161
176
|
/* @__PURE__ */ jsx(Text, { style: styles.title, children: title }),
|
|
162
|
-
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop:
|
|
177
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: onClose, hitSlop: 8, style: ({
|
|
178
|
+
pressed
|
|
179
|
+
}) => [styles.close, pressedStyle(pressed)], accessibilityRole: "button", accessibilityLabel: "Close", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "close", size: 18, color: theme.foreground }) })
|
|
163
180
|
] }),
|
|
164
181
|
/* @__PURE__ */ jsxs(View, { style: styles.toolbar, children: [
|
|
165
|
-
/* @__PURE__ */ jsx(
|
|
182
|
+
/* @__PURE__ */ jsx(Segmented, { options: FILTERS, value: filter, onChange: setFilter, style: styles.filters }),
|
|
166
183
|
/* @__PURE__ */ jsxs(View, { style: styles.search, children: [
|
|
167
|
-
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size:
|
|
168
|
-
/* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, placeholder: "Search by name...", placeholderTextColor:
|
|
184
|
+
/* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "magnify", size: 18, color: theme.mutedForeground }),
|
|
185
|
+
/* @__PURE__ */ jsx(TextInput, { value: query, onChangeText: setQuery, placeholder: "Search by name...", placeholderTextColor: theme.mutedForeground, style: styles.searchInput })
|
|
169
186
|
] })
|
|
170
187
|
] }),
|
|
171
188
|
waiting ? /* @__PURE__ */ jsx(ScrollView, { style: styles.body, contentContainerStyle: styles.gridWrap, children: /* @__PURE__ */ jsx(LibrarySkeletons, {}) }) : storageError ? /* @__PURE__ */ jsxs(View, { style: styles.empty, children: [
|
|
@@ -184,16 +201,20 @@ function CanvasLibraryPanel({
|
|
|
184
201
|
hasMore ? /* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
185
202
|
var _a;
|
|
186
203
|
return refreshStorage((_a = storage == null ? void 0 : storage.length) != null ? _a : 0, true);
|
|
187
|
-
}, disabled: loadingMore, style:
|
|
188
|
-
|
|
204
|
+
}, disabled: loadingMore, style: ({
|
|
205
|
+
pressed
|
|
206
|
+
}) => [styles.loadMore, pressedStyle(pressed && !loadingMore)], children: /* @__PURE__ */ jsx(Text, { style: styles.loadMoreLabel, children: loadingMore ? "Loading\u2026" : "Load more" }) }) : null
|
|
207
|
+
] }) : /* @__PURE__ */ jsx(ScrollView, { style: styles.body, contentContainerStyle: styles.grid, children: boardItems.map((item) => /* @__PURE__ */ jsxs(Pressable, { onPress: () => onPlace(item), style: ({
|
|
208
|
+
pressed
|
|
209
|
+
}) => [styles.tile, pressedStyle(pressed)], accessibilityRole: "button", children: [
|
|
189
210
|
item.type === "image" ? /* @__PURE__ */ jsx(Image, { source: {
|
|
190
211
|
uri: item.src
|
|
191
|
-
}, style: styles.thumb }) : /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbIcon], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: item.type === "video" ? "play" : "music", size: 28, color:
|
|
212
|
+
}, style: styles.thumb }) : /* @__PURE__ */ jsx(View, { style: [styles.thumb, styles.thumbIcon], children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: item.type === "video" ? "play" : "music", size: 28, color: theme.mutedForeground }) }),
|
|
192
213
|
/* @__PURE__ */ jsx(Text, { style: styles.tileName, numberOfLines: 1, children: itemFileName(item) })
|
|
193
214
|
] }, item.id)) })
|
|
194
215
|
] });
|
|
195
216
|
}
|
|
196
|
-
const
|
|
217
|
+
const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
197
218
|
root: {
|
|
198
219
|
flex: 1,
|
|
199
220
|
minHeight: 0
|
|
@@ -202,69 +223,46 @@ const styles = StyleSheet.create({
|
|
|
202
223
|
flexDirection: "row",
|
|
203
224
|
alignItems: "center",
|
|
204
225
|
justifyContent: "space-between",
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
borderBottomColor: "#e2e8f0"
|
|
226
|
+
paddingLeft: SPACE.lg,
|
|
227
|
+
paddingRight: SPACE.md,
|
|
228
|
+
minHeight: 56
|
|
209
229
|
},
|
|
210
|
-
title: {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
230
|
+
title: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
231
|
+
color: theme.foreground
|
|
232
|
+
}),
|
|
233
|
+
close: {
|
|
234
|
+
width: 36,
|
|
235
|
+
height: 36,
|
|
236
|
+
borderRadius: 18,
|
|
237
|
+
alignItems: "center",
|
|
238
|
+
justifyContent: "center",
|
|
239
|
+
backgroundColor: theme.card
|
|
214
240
|
},
|
|
215
241
|
toolbar: {
|
|
216
242
|
flexGrow: 0,
|
|
217
243
|
flexShrink: 0,
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
gap: 8,
|
|
222
|
-
paddingHorizontal: 16,
|
|
223
|
-
paddingVertical: 10
|
|
244
|
+
gap: SPACE.md,
|
|
245
|
+
paddingHorizontal: SPACE.lg,
|
|
246
|
+
paddingBottom: SPACE.md
|
|
224
247
|
},
|
|
225
248
|
filters: {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
alignItems: "center",
|
|
229
|
-
gap: 6
|
|
230
|
-
},
|
|
231
|
-
chip: {
|
|
232
|
-
paddingHorizontal: 12,
|
|
233
|
-
paddingVertical: 4,
|
|
234
|
-
borderRadius: 999,
|
|
235
|
-
backgroundColor: "#f1f5f9",
|
|
236
|
-
alignSelf: "center"
|
|
237
|
-
},
|
|
238
|
-
chipOn: {
|
|
239
|
-
backgroundColor: "#0f172a"
|
|
240
|
-
},
|
|
241
|
-
chipLabel: {
|
|
242
|
-
fontSize: 12,
|
|
243
|
-
fontWeight: "600",
|
|
244
|
-
color: "#64748b"
|
|
245
|
-
},
|
|
246
|
-
chipLabelOn: {
|
|
247
|
-
color: "#f8fafc"
|
|
249
|
+
flexGrow: 0,
|
|
250
|
+
alignSelf: "flex-start"
|
|
248
251
|
},
|
|
249
252
|
search: {
|
|
250
|
-
flexGrow: 1,
|
|
251
|
-
flexBasis: 160,
|
|
252
|
-
minWidth: 140,
|
|
253
253
|
flexDirection: "row",
|
|
254
254
|
alignItems: "center",
|
|
255
|
-
gap:
|
|
256
|
-
borderRadius:
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
backgroundColor: "#ffffff",
|
|
261
|
-
height: 32
|
|
255
|
+
gap: SPACE.sm,
|
|
256
|
+
borderRadius: RADIUS.pill,
|
|
257
|
+
paddingHorizontal: SPACE.md + 2,
|
|
258
|
+
backgroundColor: theme.card,
|
|
259
|
+
height: 44
|
|
262
260
|
},
|
|
263
261
|
searchInput: {
|
|
264
262
|
flex: 1,
|
|
265
263
|
paddingVertical: 0,
|
|
266
|
-
fontSize:
|
|
267
|
-
color:
|
|
264
|
+
fontSize: 15,
|
|
265
|
+
color: theme.foreground
|
|
268
266
|
},
|
|
269
267
|
body: {
|
|
270
268
|
flex: 1,
|
|
@@ -272,102 +270,100 @@ const styles = StyleSheet.create({
|
|
|
272
270
|
},
|
|
273
271
|
empty: {
|
|
274
272
|
flex: 1,
|
|
275
|
-
paddingHorizontal:
|
|
276
|
-
paddingVertical:
|
|
273
|
+
paddingHorizontal: SPACE.xl + 4,
|
|
274
|
+
paddingVertical: SPACE.xxl + 8,
|
|
277
275
|
alignItems: "center",
|
|
278
276
|
justifyContent: "center"
|
|
279
277
|
},
|
|
280
|
-
emptyTitle: {
|
|
281
|
-
|
|
282
|
-
fontWeight: "600",
|
|
283
|
-
color: "#0f172a"
|
|
284
|
-
},
|
|
285
|
-
emptyDetail: {
|
|
286
|
-
marginTop: 6,
|
|
287
|
-
fontSize: 13,
|
|
288
|
-
color: "#64748b",
|
|
278
|
+
emptyTitle: __spreadProps(__spreadValues({}, TYPE.title), {
|
|
279
|
+
color: theme.foreground,
|
|
289
280
|
textAlign: "center"
|
|
290
|
-
},
|
|
281
|
+
}),
|
|
282
|
+
emptyDetail: __spreadProps(__spreadValues({}, TYPE.body), {
|
|
283
|
+
fontSize: 14,
|
|
284
|
+
marginTop: SPACE.xs,
|
|
285
|
+
color: theme.mutedForeground,
|
|
286
|
+
textAlign: "center",
|
|
287
|
+
maxWidth: 300
|
|
288
|
+
}),
|
|
291
289
|
gridWrap: {
|
|
292
|
-
paddingBottom:
|
|
290
|
+
paddingBottom: SPACE.lg
|
|
293
291
|
},
|
|
294
292
|
grid: {
|
|
295
293
|
flexDirection: "row",
|
|
296
294
|
flexWrap: "wrap",
|
|
297
|
-
paddingHorizontal:
|
|
298
|
-
paddingBottom:
|
|
299
|
-
|
|
295
|
+
paddingHorizontal: SPACE.lg,
|
|
296
|
+
paddingBottom: SPACE.xl,
|
|
297
|
+
columnGap: SPACE.md,
|
|
298
|
+
rowGap: SPACE.lg
|
|
300
299
|
},
|
|
301
300
|
tile: {
|
|
302
301
|
width: "48%",
|
|
303
302
|
flexGrow: 1,
|
|
304
|
-
flexBasis: "
|
|
305
|
-
borderRadius: 10,
|
|
306
|
-
overflow: "hidden",
|
|
307
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
308
|
-
borderColor: "#e2e8f0",
|
|
309
|
-
backgroundColor: "#fff"
|
|
303
|
+
flexBasis: "46%"
|
|
310
304
|
},
|
|
311
305
|
tileHit: {
|
|
312
306
|
flex: 1
|
|
313
307
|
},
|
|
314
308
|
deleteBtn: {
|
|
315
309
|
position: "absolute",
|
|
316
|
-
top:
|
|
317
|
-
right:
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
borderRadius:
|
|
310
|
+
top: SPACE.sm,
|
|
311
|
+
right: SPACE.sm,
|
|
312
|
+
width: 28,
|
|
313
|
+
height: 28,
|
|
314
|
+
borderRadius: 14,
|
|
315
|
+
alignItems: "center",
|
|
316
|
+
justifyContent: "center",
|
|
317
|
+
backgroundColor: "rgba(10,10,10,0.55)"
|
|
321
318
|
},
|
|
322
319
|
loadMore: {
|
|
323
320
|
width: "100%",
|
|
324
|
-
|
|
325
|
-
|
|
321
|
+
minHeight: 44,
|
|
322
|
+
marginTop: SPACE.xs,
|
|
326
323
|
alignItems: "center",
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
loadMoreLabel: {
|
|
331
|
-
fontSize: 13,
|
|
332
|
-
fontWeight: "600",
|
|
333
|
-
color: "#0f172a"
|
|
324
|
+
justifyContent: "center",
|
|
325
|
+
borderRadius: RADIUS.pill,
|
|
326
|
+
backgroundColor: theme.card
|
|
334
327
|
},
|
|
328
|
+
loadMoreLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
329
|
+
fontSize: 15,
|
|
330
|
+
color: theme.foreground
|
|
331
|
+
}),
|
|
335
332
|
skeleton: {
|
|
336
|
-
borderRadius:
|
|
337
|
-
backgroundColor:
|
|
338
|
-
borderWidth: StyleSheet.hairlineWidth,
|
|
339
|
-
borderColor: "#e2e8f0"
|
|
333
|
+
borderRadius: RADIUS.lg,
|
|
334
|
+
backgroundColor: theme.card
|
|
340
335
|
},
|
|
341
336
|
thumb: {
|
|
342
337
|
width: "100%",
|
|
343
338
|
aspectRatio: 1,
|
|
344
|
-
borderRadius:
|
|
345
|
-
backgroundColor:
|
|
339
|
+
borderRadius: RADIUS.lg,
|
|
340
|
+
backgroundColor: theme.card
|
|
346
341
|
},
|
|
347
342
|
thumbIcon: {
|
|
348
343
|
alignItems: "center",
|
|
349
344
|
justifyContent: "center",
|
|
350
|
-
backgroundColor:
|
|
345
|
+
backgroundColor: theme.card
|
|
346
|
+
},
|
|
347
|
+
thumbClip: {
|
|
348
|
+
overflow: "hidden"
|
|
351
349
|
},
|
|
352
350
|
tileStatus: {
|
|
353
351
|
position: "absolute",
|
|
354
|
-
left:
|
|
355
|
-
bottom:
|
|
356
|
-
paddingHorizontal:
|
|
357
|
-
paddingVertical:
|
|
358
|
-
borderRadius:
|
|
359
|
-
backgroundColor: "rgba(
|
|
352
|
+
left: SPACE.sm,
|
|
353
|
+
bottom: SPACE.sm,
|
|
354
|
+
paddingHorizontal: SPACE.sm,
|
|
355
|
+
paddingVertical: 3,
|
|
356
|
+
borderRadius: RADIUS.pill,
|
|
357
|
+
backgroundColor: "rgba(10,10,10,0.55)"
|
|
360
358
|
},
|
|
361
359
|
tileStatusLabel: {
|
|
362
|
-
fontSize:
|
|
360
|
+
fontSize: 11,
|
|
363
361
|
fontWeight: "600",
|
|
364
|
-
color: "#
|
|
362
|
+
color: "#fafafa"
|
|
365
363
|
},
|
|
366
|
-
tileName: {
|
|
367
|
-
marginTop:
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
}
|
|
373
|
-
});export{CanvasLibraryPanel};//# sourceMappingURL=CanvasLibrarySheet.js.map
|
|
364
|
+
tileName: __spreadProps(__spreadValues({}, TYPE.caption), {
|
|
365
|
+
marginTop: SPACE.sm,
|
|
366
|
+
color: theme.foreground,
|
|
367
|
+
paddingHorizontal: 2
|
|
368
|
+
})
|
|
369
|
+
}));export{CanvasLibraryPanel};//# sourceMappingURL=CanvasLibrarySheet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasLibrarySheet.js","sources":["../../../src/features/canvas/CanvasLibrarySheet.tsx"],"sourcesContent":["/**\n * Native twin of canvas-surface Library / This-chat panels.\n * Your library reads yantra-storage (filenames like the web grid).\n * This chat still lists items on the open board.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Alert,\n Animated,\n Image,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n useWindowDimensions,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { CanvasItem } from './canvasCore';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport {\n canDeleteLibraryFile,\n deleteLibraryFile,\n fetchableLibraryUrl,\n listStorageLibraryPage,\n type StorageFile,\n type StorageKind,\n} from './storageLibrary';\nimport { mediaPhaseLabel, useMediaSource } from './useMediaSource';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\n\nfunction fileNameFromSrc(src: string): string {\n const path = src.split('?')[0];\n try {\n return decodeURIComponent(path.slice(path.lastIndexOf('/') + 1)) || '';\n } catch {\n return path.slice(path.lastIndexOf('/') + 1);\n }\n}\n\nfunction itemFileName(item: CanvasItem): string {\n const fromUrl = fileNameFromSrc(item.src);\n if (fromUrl && /\\.[a-z0-9]{2,5}$/i.test(fromUrl)) return fromUrl;\n return item.generatedAssetName || fromUrl || item.type;\n}\n\ntype Filter = 'all' | StorageKind;\n\n/** Web `TileSkeletons` — square muted tiles that pulse while LIST_FILES runs. */\nfunction LibrarySkeletons() {\n const { width } = useWindowDimensions();\n const tile = Math.max(120, Math.floor((width - 48) / 2));\n const pulse = useRef(new Animated.Value(0.4)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, { toValue: 1, duration: 650, useNativeDriver: true }),\n Animated.timing(pulse, { toValue: 0.35, duration: 650, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [pulse]);\n return (\n <View style={styles.grid}>\n {Array.from({ length: 12 }, (_, i) => (\n <Animated.View key={i} style={[styles.skeleton, { width: tile, height: tile, opacity: pulse }]} />\n ))}\n </View>\n );\n}\n\nconst FILTERS: ReadonlyArray<{ id: Filter; label: string }> = [\n { id: 'all', label: 'All' },\n { id: 'image', label: 'Images' },\n { id: 'video', label: 'Video' },\n { id: 'audio', label: 'Audio' },\n];\n\nfunction StorageTile({\n file,\n runAction,\n onPick,\n onDelete,\n}: {\n file: StorageFile;\n runAction?: RunMediaAction;\n onPick: (file: StorageFile) => void;\n onDelete?: (file: StorageFile) => void;\n}) {\n // Web StorageTile: a failed thumbnail renews its link once (re-sign a\n // presigned one, sign a raw object URL), then waits on the shared re-check.\n const renew = useCallback((url: string) => fetchableLibraryUrl(runAction, url), [runAction]);\n const media = useMediaSource(file.url, file.kind, runAction ? renew : undefined);\n const status = mediaPhaseLabel(media.phase);\n return (\n <View style={styles.tile}>\n <Pressable\n onPress={() => onPick({ ...file, url: media.url })}\n style={styles.tileHit}\n accessibilityRole=\"button\"\n >\n {file.kind === 'image' ? (\n <View>\n {media.phase === 'broken' ? (\n <View style={[styles.thumb, styles.thumbIcon]}>\n <MaterialCommunityIcons name=\"image-off-outline\" size={28} color=\"#94a3b8\" />\n </View>\n ) : (\n <Image\n key={media.key}\n source={{ uri: media.src }}\n style={styles.thumb}\n onError={media.onError}\n />\n )}\n {status ? (\n <View style={styles.tileStatus} pointerEvents=\"none\">\n <Text style={styles.tileStatusLabel}>{status}</Text>\n </View>\n ) : null}\n </View>\n ) : (\n <View style={[styles.thumb, styles.thumbIcon]}>\n <MaterialCommunityIcons\n name={file.kind === 'video' ? 'play' : 'music'}\n size={28}\n color=\"#f8fafc\"\n />\n </View>\n )}\n <Text style={styles.tileName} numberOfLines={1}>\n {file.name}\n </Text>\n </Pressable>\n {canDeleteLibraryFile(file) && onDelete ? (\n <Pressable\n onPress={() => onDelete(file)}\n style={styles.deleteBtn}\n accessibilityRole=\"button\"\n accessibilityLabel={`Delete ${file.name}`}\n >\n <MaterialCommunityIcons name=\"trash-can-outline\" size={16} color=\"#b91c1c\" />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nexport function CanvasLibraryPanel({\n title,\n boards,\n boardId,\n runAction,\n onClose,\n onPlace,\n onPickStorage,\n}: {\n title: string;\n boards: CanvasBoardSummary[];\n boardId?: string | null;\n runAction?: RunMediaAction;\n onClose: () => void;\n onPlace: (item: CanvasItem) => void;\n onPickStorage?: (kind: StorageKind, url: string, name: string) => void;\n}) {\n const [filter, setFilter] = useState<Filter>('all');\n const [query, setQuery] = useState('');\n const [storage, setStorage] = useState<StorageFile[] | null>(null);\n const [storageError, setStorageError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n const useStorage = !boardId;\n\n const refreshStorage = (skip = 0, append = false) => {\n if (!runAction) return;\n if (append) setLoadingMore(true);\n else setStorageError(null);\n void listStorageLibraryPage(runAction, { limit: 40, skip })\n .then((page) => {\n setStorage((prev) => (append && prev ? [...prev, ...page.files] : page.files));\n setHasMore(page.hasMore);\n })\n .catch((err: unknown) => {\n if (!append) setStorageError(err instanceof Error ? err.message : 'Could not load library');\n })\n .finally(() => setLoadingMore(false));\n };\n\n useEffect(() => {\n if (!useStorage || !runAction) {\n setStorage(null);\n return undefined;\n }\n refreshStorage(0, false);\n return undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [runAction, useStorage]);\n\n const boardItems = useMemo(() => {\n const source = boardId ? boards.filter((b) => b.channelId === boardId) : boards;\n const rows: CanvasItem[] = [];\n const q = query.trim().toLowerCase();\n for (const board of source) {\n for (const item of board.board.items) {\n if (filter !== 'all' && item.type !== filter) continue;\n const name = itemFileName(item).toLowerCase();\n if (q && !name.includes(q)) continue;\n rows.push(item);\n }\n }\n return rows;\n }, [boardId, boards, filter, query]);\n\n const storageItems = useMemo(() => {\n const q = query.trim().toLowerCase();\n return (storage ?? []).filter((file) => {\n if (filter !== 'all' && file.kind !== filter) return false;\n if (q && !file.name.toLowerCase().includes(q)) return false;\n return true;\n });\n }, [filter, query, storage]);\n\n const waiting = useStorage && Boolean(runAction) && storage === null && !storageError;\n const showStorageGrid = useStorage && storage !== null;\n\n return (\n <View style={styles.root}>\n <View style={styles.header}>\n <Text style={styles.title}>{title}</Text>\n <Pressable onPress={onClose} hitSlop={10} accessibilityRole=\"button\" accessibilityLabel=\"Close\">\n <MaterialCommunityIcons name=\"close\" size={18} color=\"#64748b\" />\n </Pressable>\n </View>\n <View style={styles.toolbar}>\n <View style={styles.filters}>\n {FILTERS.map((f) => (\n <Pressable\n key={f.id}\n onPress={() => setFilter(f.id)}\n style={[styles.chip, filter === f.id && styles.chipOn]}\n >\n <Text style={[styles.chipLabel, filter === f.id && styles.chipLabelOn]}>{f.label}</Text>\n </Pressable>\n ))}\n </View>\n <View style={styles.search}>\n <MaterialCommunityIcons name=\"magnify\" size={14} color=\"#94a3b8\" />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search by name...\"\n placeholderTextColor=\"#94a3b8\"\n style={styles.searchInput}\n />\n </View>\n </View>\n {waiting ? (\n <ScrollView style={styles.body} contentContainerStyle={styles.gridWrap}>\n <LibrarySkeletons />\n </ScrollView>\n ) : storageError ? (\n <View style={styles.empty}>\n <Text style={styles.emptyTitle}>Couldn’t load library</Text>\n <Text style={styles.emptyDetail}>{storageError}</Text>\n </View>\n ) : (showStorageGrid ? storageItems.length : boardItems.length) === 0 ? (\n <View style={styles.empty}>\n <Text style={styles.emptyTitle}>Nothing here yet</Text>\n <Text style={styles.emptyDetail}>\n Generate or upload media and it will show up in this library.\n </Text>\n </View>\n ) : showStorageGrid ? (\n <ScrollView style={styles.body} contentContainerStyle={styles.grid}>\n {storageItems.map((file) => (\n <StorageTile\n key={file.id}\n file={file}\n runAction={runAction}\n onPick={(picked) => {\n // Hand the board a link a connector can fetch, not a raw object URL.\n void fetchableLibraryUrl(runAction, picked.url).then((url) =>\n onPickStorage?.(picked.kind, url, picked.name),\n );\n }}\n onDelete={(target) => {\n if (!runAction || !canDeleteLibraryFile(target)) return;\n void deleteLibraryFile(runAction, target)\n .then(() => setStorage((prev) => (prev ?? []).filter((f) => f.id !== target.id)))\n .catch((err: unknown) =>\n Alert.alert(\n 'Couldn’t delete file',\n err instanceof Error ? err.message : 'Try again in a moment.',\n ),\n );\n }}\n />\n ))}\n {hasMore ? (\n <Pressable\n onPress={() => refreshStorage(storage?.length ?? 0, true)}\n disabled={loadingMore}\n style={styles.loadMore}\n >\n <Text style={styles.loadMoreLabel}>{loadingMore ? 'Loading…' : 'Load more'}</Text>\n </Pressable>\n ) : null}\n </ScrollView>\n ) : (\n <ScrollView style={styles.body} contentContainerStyle={styles.grid}>\n {boardItems.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => onPlace(item)}\n style={styles.tile}\n accessibilityRole=\"button\"\n >\n {item.type === 'image' ? (\n <Image source={{ uri: item.src }} style={styles.thumb} />\n ) : (\n <View style={[styles.thumb, styles.thumbIcon]}>\n <MaterialCommunityIcons\n name={item.type === 'video' ? 'play' : 'music'}\n size={28}\n color=\"#f8fafc\"\n />\n </View>\n )}\n <Text style={styles.tileName} numberOfLines={1}>\n {itemFileName(item)}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: { flex: 1, minHeight: 0 },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: 16,\n height: 48,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: '#e2e8f0',\n },\n title: { fontSize: 14, fontWeight: '600', color: '#0f172a' },\n toolbar: {\n flexGrow: 0,\n flexShrink: 0,\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 10,\n },\n filters: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'center', gap: 6 },\n chip: {\n paddingHorizontal: 12,\n paddingVertical: 4,\n borderRadius: 999,\n backgroundColor: '#f1f5f9',\n alignSelf: 'center',\n },\n chipOn: { backgroundColor: '#0f172a' },\n chipLabel: { fontSize: 12, fontWeight: '600', color: '#64748b' },\n chipLabelOn: { color: '#f8fafc' },\n search: {\n flexGrow: 1,\n flexBasis: 160,\n minWidth: 140,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n borderRadius: 999,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n paddingHorizontal: 10,\n backgroundColor: '#ffffff',\n height: 32,\n },\n searchInput: { flex: 1, paddingVertical: 0, fontSize: 12, color: '#0f172a' },\n body: { flex: 1, minHeight: 0 },\n empty: { flex: 1, paddingHorizontal: 28, paddingVertical: 40, alignItems: 'center', justifyContent: 'center' },\n emptyTitle: { fontSize: 15, fontWeight: '600', color: '#0f172a' },\n emptyDetail: { marginTop: 6, fontSize: 13, color: '#64748b', textAlign: 'center' },\n gridWrap: { paddingBottom: 16 },\n grid: { flexDirection: 'row', flexWrap: 'wrap', paddingHorizontal: 16, paddingBottom: 16, gap: 8 },\n tile: {\n width: '48%',\n flexGrow: 1,\n flexBasis: '47%',\n borderRadius: 10,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n backgroundColor: '#fff',\n },\n tileHit: { flex: 1 },\n deleteBtn: {\n position: 'absolute',\n top: 6,\n right: 6,\n padding: 4,\n backgroundColor: 'rgba(255,255,255,0.9)',\n borderRadius: 8,\n },\n loadMore: {\n width: '100%',\n marginTop: 8,\n paddingVertical: 12,\n alignItems: 'center',\n borderRadius: 10,\n backgroundColor: '#f1f5f9',\n },\n loadMoreLabel: { fontSize: 13, fontWeight: '600', color: '#0f172a' },\n skeleton: {\n borderRadius: 8,\n backgroundColor: '#e2e8f0',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: '#e2e8f0',\n },\n thumb: { width: '100%', aspectRatio: 1, borderRadius: 8, backgroundColor: '#e2e8f0' },\n thumbIcon: { alignItems: 'center', justifyContent: 'center', backgroundColor: '#0f172a' },\n tileStatus: {\n position: 'absolute',\n left: 6,\n bottom: 6,\n paddingHorizontal: 6,\n paddingVertical: 2,\n borderRadius: 6,\n backgroundColor: 'rgba(15,23,42,0.7)',\n },\n tileStatusLabel: { fontSize: 10, fontWeight: '600', color: '#f8fafc' },\n tileName: { marginTop: 6, fontSize: 11, color: '#475569', paddingHorizontal: 6, paddingBottom: 6 },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CanvasLibrarySheet.js","sources":["../../../src/features/canvas/CanvasLibrarySheet.tsx"],"sourcesContent":["/**\n * Native twin of canvas-surface Library / This-chat panels.\n * Your library reads yantra-storage (filenames like the web grid).\n * This chat still lists items on the open board.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Alert,\n Animated,\n Image,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n useWindowDimensions,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport type { CanvasItem } from './canvasCore';\nimport type { CanvasBoardSummary } from './surfaceIndex';\nimport {\n canDeleteLibraryFile,\n deleteLibraryFile,\n fetchableLibraryUrl,\n listStorageLibraryPage,\n type StorageFile,\n type StorageKind,\n} from './storageLibrary';\nimport { mediaPhaseLabel, useMediaSource } from './useMediaSource';\nimport type { RunMediaAction } from './videoEditor/mediaActions';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { CoverPlaceholder, Pressable, RADIUS, SPACE, Segmented, Skeleton, TYPE, pressedStyle } from './canvasUi';\n\nfunction fileNameFromSrc(src: string): string {\n const path = src.split('?')[0];\n try {\n return decodeURIComponent(path.slice(path.lastIndexOf('/') + 1)) || '';\n } catch {\n return path.slice(path.lastIndexOf('/') + 1);\n }\n}\n\nfunction itemFileName(item: CanvasItem): string {\n const fromUrl = fileNameFromSrc(item.src);\n if (fromUrl && /\\.[a-z0-9]{2,5}$/i.test(fromUrl)) return fromUrl;\n return item.generatedAssetName || fromUrl || item.type;\n}\n\ntype Filter = 'all' | StorageKind;\n\n/** Web `TileSkeletons` — square muted tiles that pulse while LIST_FILES runs. */\nfunction LibrarySkeletons() {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const { width } = useWindowDimensions();\n const tile = Math.max(120, Math.floor((width - 48) / 2));\n const pulse = useRef(new Animated.Value(0.4)).current;\n useEffect(() => {\n const loop = Animated.loop(\n Animated.sequence([\n Animated.timing(pulse, { toValue: 1, duration: 650, useNativeDriver: true }),\n Animated.timing(pulse, { toValue: 0.35, duration: 650, useNativeDriver: true }),\n ]),\n );\n loop.start();\n return () => loop.stop();\n }, [pulse]);\n return (\n <View style={styles.grid}>\n {Array.from({ length: 12 }, (_, i) => (\n <Animated.View key={i} style={[styles.skeleton, { width: tile, height: tile, opacity: pulse }]} />\n ))}\n </View>\n );\n}\n\nconst FILTERS: ReadonlyArray<{ id: Filter; label: string }> = [\n { id: 'all', label: 'All' },\n { id: 'image', label: 'Images' },\n { id: 'video', label: 'Video' },\n { id: 'audio', label: 'Audio' },\n];\n\nfunction StorageTile({\n file,\n runAction,\n onPick,\n onDelete,\n}: {\n file: StorageFile;\n runAction?: RunMediaAction;\n onPick: (file: StorageFile) => void;\n onDelete?: (file: StorageFile) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n // Web StorageTile: a failed thumbnail renews its link once (re-sign a\n // presigned one, sign a raw object URL), then waits on the shared re-check.\n const renew = useCallback((url: string) => fetchableLibraryUrl(runAction, url), [runAction]);\n const media = useMediaSource(file.url, file.kind, runAction ? renew : undefined);\n const status = mediaPhaseLabel(media.phase);\n const [loaded, setLoaded] = useState(false);\n useEffect(() => setLoaded(false), [media.key]);\n return (\n <View style={styles.tile}>\n <Pressable\n onPress={() => onPick({ ...file, url: media.url })}\n style={({ pressed }) => [styles.tileHit, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n {file.kind === 'image' ? (\n <View style={[styles.thumb, styles.thumbClip]}>\n {media.phase === 'broken' ? (\n <CoverPlaceholder seed={file.url} icon=\"image-off-outline\" />\n ) : (\n <>\n {/* Breathes until the picture paints, instead of an empty square. */}\n {!loaded ? <Skeleton /> : null}\n <Image\n key={media.key}\n source={{ uri: media.src }}\n style={StyleSheet.absoluteFill}\n onLoad={() => setLoaded(true)}\n onError={media.onError}\n />\n </>\n )}\n {status ? (\n <View style={styles.tileStatus} pointerEvents=\"none\">\n <Text style={styles.tileStatusLabel}>{status}</Text>\n </View>\n ) : null}\n </View>\n ) : (\n <View style={[styles.thumb, styles.thumbClip]}>\n <CoverPlaceholder\n seed={file.url}\n icon={file.kind === 'video' ? 'play' : 'music'}\n label={file.kind === 'video' ? 'Video' : 'Audio'}\n />\n </View>\n )}\n <Text style={styles.tileName} numberOfLines={1}>\n {file.name}\n </Text>\n </Pressable>\n {canDeleteLibraryFile(file) && onDelete ? (\n <Pressable\n onPress={() => onDelete(file)}\n style={({ pressed }) => [styles.deleteBtn, pressedStyle(pressed)]}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`Delete ${file.name}`}\n >\n <MaterialCommunityIcons name=\"trash-can-outline\" size={15} color=\"#fafafa\" />\n </Pressable>\n ) : null}\n </View>\n );\n}\n\nexport function CanvasLibraryPanel({\n title,\n boards,\n boardId,\n runAction,\n onClose,\n onPlace,\n onPickStorage,\n}: {\n title: string;\n boards: CanvasBoardSummary[];\n boardId?: string | null;\n runAction?: RunMediaAction;\n onClose: () => void;\n onPlace: (item: CanvasItem) => void;\n onPickStorage?: (kind: StorageKind, url: string, name: string) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const [filter, setFilter] = useState<Filter>('all');\n const [query, setQuery] = useState('');\n const [storage, setStorage] = useState<StorageFile[] | null>(null);\n const [storageError, setStorageError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n const useStorage = !boardId;\n\n const refreshStorage = (skip = 0, append = false) => {\n if (!runAction) return;\n if (append) setLoadingMore(true);\n else setStorageError(null);\n void listStorageLibraryPage(runAction, { limit: 40, skip })\n .then((page) => {\n setStorage((prev) => (append && prev ? [...prev, ...page.files] : page.files));\n setHasMore(page.hasMore);\n })\n .catch((err: unknown) => {\n if (!append) setStorageError(err instanceof Error ? err.message : 'Could not load library');\n })\n .finally(() => setLoadingMore(false));\n };\n\n useEffect(() => {\n if (!useStorage || !runAction) {\n setStorage(null);\n return undefined;\n }\n refreshStorage(0, false);\n return undefined;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [runAction, useStorage]);\n\n const boardItems = useMemo(() => {\n const source = boardId ? boards.filter((b) => b.channelId === boardId) : boards;\n const rows: CanvasItem[] = [];\n const q = query.trim().toLowerCase();\n for (const board of source) {\n for (const item of board.board.items) {\n if (filter !== 'all' && item.type !== filter) continue;\n const name = itemFileName(item).toLowerCase();\n if (q && !name.includes(q)) continue;\n rows.push(item);\n }\n }\n return rows;\n }, [boardId, boards, filter, query]);\n\n const storageItems = useMemo(() => {\n const q = query.trim().toLowerCase();\n return (storage ?? []).filter((file) => {\n if (filter !== 'all' && file.kind !== filter) return false;\n if (q && !file.name.toLowerCase().includes(q)) return false;\n return true;\n });\n }, [filter, query, storage]);\n\n const waiting = useStorage && Boolean(runAction) && storage === null && !storageError;\n const showStorageGrid = useStorage && storage !== null;\n\n return (\n <View style={styles.root}>\n <View style={styles.header}>\n <Text style={styles.title}>{title}</Text>\n <Pressable\n onPress={onClose}\n hitSlop={8}\n style={({ pressed }) => [styles.close, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close\"\n >\n <MaterialCommunityIcons name=\"close\" size={18} color={theme.foreground} />\n </Pressable>\n </View>\n <View style={styles.toolbar}>\n <Segmented options={FILTERS} value={filter} onChange={setFilter} style={styles.filters} />\n <View style={styles.search}>\n <MaterialCommunityIcons name=\"magnify\" size={18} color={theme.mutedForeground} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search by name...\"\n placeholderTextColor={theme.mutedForeground}\n style={styles.searchInput}\n />\n </View>\n </View>\n {waiting ? (\n <ScrollView style={styles.body} contentContainerStyle={styles.gridWrap}>\n <LibrarySkeletons />\n </ScrollView>\n ) : storageError ? (\n <View style={styles.empty}>\n <Text style={styles.emptyTitle}>Couldn’t load library</Text>\n <Text style={styles.emptyDetail}>{storageError}</Text>\n </View>\n ) : (showStorageGrid ? storageItems.length : boardItems.length) === 0 ? (\n <View style={styles.empty}>\n <Text style={styles.emptyTitle}>Nothing here yet</Text>\n <Text style={styles.emptyDetail}>\n Generate or upload media and it will show up in this library.\n </Text>\n </View>\n ) : showStorageGrid ? (\n <ScrollView style={styles.body} contentContainerStyle={styles.grid}>\n {storageItems.map((file) => (\n <StorageTile\n key={file.id}\n file={file}\n runAction={runAction}\n onPick={(picked) => {\n // Hand the board a link a connector can fetch, not a raw object URL.\n void fetchableLibraryUrl(runAction, picked.url).then((url) =>\n onPickStorage?.(picked.kind, url, picked.name),\n );\n }}\n onDelete={(target) => {\n if (!runAction || !canDeleteLibraryFile(target)) return;\n void deleteLibraryFile(runAction, target)\n .then(() => setStorage((prev) => (prev ?? []).filter((f) => f.id !== target.id)))\n .catch((err: unknown) =>\n Alert.alert(\n 'Couldn’t delete file',\n err instanceof Error ? err.message : 'Try again in a moment.',\n ),\n );\n }}\n />\n ))}\n {hasMore ? (\n <Pressable\n onPress={() => refreshStorage(storage?.length ?? 0, true)}\n disabled={loadingMore}\n style={({ pressed }) => [styles.loadMore, pressedStyle(pressed && !loadingMore)]}\n >\n <Text style={styles.loadMoreLabel}>{loadingMore ? 'Loading…' : 'Load more'}</Text>\n </Pressable>\n ) : null}\n </ScrollView>\n ) : (\n <ScrollView style={styles.body} contentContainerStyle={styles.grid}>\n {boardItems.map((item) => (\n <Pressable\n key={item.id}\n onPress={() => onPlace(item)}\n style={({ pressed }) => [styles.tile, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n {item.type === 'image' ? (\n <Image source={{ uri: item.src }} style={styles.thumb} />\n ) : (\n <View style={[styles.thumb, styles.thumbIcon]}>\n <MaterialCommunityIcons\n name={item.type === 'video' ? 'play' : 'music'}\n size={28}\n color={theme.mutedForeground}\n />\n </View>\n )}\n <Text style={styles.tileName} numberOfLines={1}>\n {itemFileName(item)}\n </Text>\n </Pressable>\n ))}\n </ScrollView>\n )}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, minHeight: 0 },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingLeft: SPACE.lg,\n paddingRight: SPACE.md,\n minHeight: 56,\n },\n title: { ...TYPE.title, color: theme.foreground },\n close: {\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.card,\n },\n toolbar: {\n flexGrow: 0,\n flexShrink: 0,\n gap: SPACE.md,\n paddingHorizontal: SPACE.lg,\n paddingBottom: SPACE.md,\n },\n filters: { flexGrow: 0, alignSelf: 'flex-start' },\n search: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n borderRadius: RADIUS.pill,\n paddingHorizontal: SPACE.md + 2,\n backgroundColor: theme.card,\n height: 44,\n },\n searchInput: { flex: 1, paddingVertical: 0, fontSize: 15, color: theme.foreground },\n body: { flex: 1, minHeight: 0 },\n empty: {\n flex: 1,\n paddingHorizontal: SPACE.xl + 4,\n paddingVertical: SPACE.xxl + 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n emptyTitle: { ...TYPE.title, color: theme.foreground, textAlign: 'center' },\n emptyDetail: {\n ...TYPE.body,\n fontSize: 14,\n marginTop: SPACE.xs,\n color: theme.mutedForeground,\n textAlign: 'center',\n maxWidth: 300,\n },\n gridWrap: { paddingBottom: SPACE.lg },\n grid: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n paddingHorizontal: SPACE.lg,\n paddingBottom: SPACE.xl,\n columnGap: SPACE.md,\n rowGap: SPACE.lg,\n },\n tile: {\n width: '48%',\n flexGrow: 1,\n flexBasis: '46%',\n },\n tileHit: { flex: 1 },\n deleteBtn: {\n position: 'absolute',\n top: SPACE.sm,\n right: SPACE.sm,\n width: 28,\n height: 28,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n loadMore: {\n width: '100%',\n minHeight: 44,\n marginTop: SPACE.xs,\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: RADIUS.pill,\n backgroundColor: theme.card,\n },\n loadMoreLabel: { ...TYPE.label, fontSize: 15, color: theme.foreground },\n skeleton: {\n borderRadius: RADIUS.lg,\n backgroundColor: theme.card,\n },\n thumb: { width: '100%', aspectRatio: 1, borderRadius: RADIUS.lg, backgroundColor: theme.card },\n thumbIcon: { alignItems: 'center', justifyContent: 'center', backgroundColor: theme.card },\n thumbClip: { overflow: 'hidden' },\n tileStatus: {\n position: 'absolute',\n left: SPACE.sm,\n bottom: SPACE.sm,\n paddingHorizontal: SPACE.sm,\n paddingVertical: 3,\n borderRadius: RADIUS.pill,\n backgroundColor: 'rgba(10,10,10,0.55)',\n },\n tileStatusLabel: { fontSize: 11, fontWeight: '600', color: '#fafafa' },\n tileName: { ...TYPE.caption, marginTop: SPACE.sm, color: theme.foreground, paddingHorizontal: 2 },\n }),\n);\n"],"names":[],"mappings":"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"}
|