@adminide-stack/yantra-mobile 12.0.131 → 12.0.132
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/components/CustomDrawer.js +2 -2
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +7 -1
- package/lib/features/apps/AppsCatalog.js.map +1 -1
- package/lib/features/apps/nativeSurfaceTwin.js +35 -0
- package/lib/features/apps/nativeSurfaceTwin.js.map +1 -0
- package/lib/features/canvas/CanvasBoardsGrid.js +49 -49
- package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
- package/lib/features/canvas/CanvasExperience.js +69 -28
- package/lib/features/canvas/CanvasExperience.js.map +1 -1
- package/lib/features/canvas/audioEditor/AudioWaveform.js +1 -1
- package/lib/features/canvas/designCatalog.js +63 -39
- package/lib/features/canvas/designCatalog.js.map +1 -1
- package/lib/features/canvas/designCategories.js +56 -0
- package/lib/features/canvas/designCategories.js.map +1 -1
- package/lib/features/canvas/generator/DirectorSheet.js +3 -2
- package/lib/features/canvas/generator/DirectorSheet.js.map +1 -1
- package/lib/features/canvas/home/HeroComposer.js +165 -76
- package/lib/features/canvas/home/HeroComposer.js.map +1 -1
- package/lib/features/canvas/home/HeroMonitor.js +75 -46
- package/lib/features/canvas/home/HeroMonitor.js.map +1 -1
- package/lib/features/canvas/home/TemplatesGallery.js +273 -138
- package/lib/features/canvas/home/TemplatesGallery.js.map +1 -1
- package/lib/features/canvas/home/templatesGallerySources.js +221 -0
- package/lib/features/canvas/home/templatesGallerySources.js.map +1 -0
- package/lib/features/canvas/homeWork.js +12 -11
- package/lib/features/canvas/homeWork.js.map +1 -1
- package/lib/features/canvas/lazyEditors.js +51 -0
- package/lib/features/canvas/lazyEditors.js.map +1 -0
- package/lib/features/canvas/rankedCatalogSearch.js +33 -23
- package/lib/features/canvas/rankedCatalogSearch.js.map +1 -1
- package/lib/features/canvas/set/SetViewportWebView.js +1 -1
- package/lib/features/canvas/set/agent/tools.js +1 -1
- package/lib/features/canvas/studioCatalog.js +2 -2
- package/lib/features/canvas/studioCatalog.js.map +1 -1
- package/lib/features/canvas/templateSearch.js +8 -1
- package/lib/features/canvas/templateSearch.js.map +1 -1
- package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +1 -1
- package/lib/features/design/DesignEditorExperience.js +103 -29
- package/lib/features/design/DesignEditorExperience.js.map +1 -1
- package/lib/features/design/DesignExperience.js +4 -3
- package/lib/features/design/DesignExperience.js.map +1 -1
- package/lib/features/design/doc/aiDesign.js +1 -1
- package/lib/features/design/doc/aiDesign.js.map +1 -1
- package/lib/features/design/doc/artifacts.js +40 -13
- package/lib/features/design/doc/artifacts.js.map +1 -1
- package/lib/features/design/doc/chart.js +387 -13
- package/lib/features/design/doc/chart.js.map +1 -1
- package/lib/features/design/doc/copyStyle.js +47 -0
- package/lib/features/design/doc/copyStyle.js.map +1 -0
- package/lib/features/design/doc/docOps.js +22 -4
- package/lib/features/design/doc/docOps.js.map +1 -1
- package/lib/features/design/doc/geometry.js +32 -18
- package/lib/features/design/doc/geometry.js.map +1 -1
- package/lib/features/design/doc/newDoc.js +5 -1
- package/lib/features/design/doc/newDoc.js.map +1 -1
- package/lib/features/design/doc/resize.js +101 -0
- package/lib/features/design/doc/resize.js.map +1 -0
- package/lib/features/design/doc/sizes.js +15 -2
- package/lib/features/design/doc/sizes.js.map +1 -1
- package/lib/features/design/editor/ChartDataPanel.js +49 -9
- package/lib/features/design/editor/ChartDataPanel.js.map +1 -1
- package/lib/features/design/editor/CropOverlay.js +1 -1
- package/lib/features/design/editor/DesignCanvas.js +14 -13
- package/lib/features/design/editor/DesignCanvas.js.map +1 -1
- package/lib/features/design/editor/ExportSheet.js +8 -4
- package/lib/features/design/editor/ExportSheet.js.map +1 -1
- package/lib/features/design/editor/LayerTools.js +37 -5
- package/lib/features/design/editor/LayerTools.js.map +1 -1
- package/lib/features/design/editor/Slideshow.js +30 -5
- package/lib/features/design/editor/Slideshow.js.map +1 -1
- package/lib/features/design/editor/useDesignSave.js +21 -36
- package/lib/features/design/editor/useDesignSave.js.map +1 -1
- package/lib/features/design/export/exportDesign.js +3 -1
- package/lib/features/design/export/exportDesign.js.map +1 -1
- package/lib/features/design/home/DesignHome.js +7 -2
- package/lib/features/design/home/DesignHome.js.map +1 -1
- package/lib/features/design/render/DesignPageView.js +1 -1
- package/lib/features/design/render/DesignPageView.js.map +1 -1
- package/lib/features/design/render/PageCapture.js +11 -10
- package/lib/features/design/render/PageCapture.js.map +1 -1
- package/lib/features/design/render/fontRegistry.js +27 -3
- package/lib/features/design/render/fontRegistry.js.map +1 -1
- package/lib/features/design/render/svgParts.js +27 -74
- package/lib/features/design/render/svgParts.js.map +1 -1
- package/lib/features/devices/brands/qnScale.js +7 -2
- package/lib/features/devices/brands/qnScale.js.map +1 -1
- package/lib/features/devices/brands/uuids.js +2 -1
- package/lib/features/devices/brands/uuids.js.map +1 -1
- package/lib/features/devices/devices.js +2 -1
- package/lib/features/devices/devices.js.map +1 -1
- package/lib/features/docs/DocBlockRow.js +1 -1
- package/lib/features/docs/docArtifacts.js +2 -2
- package/lib/features/docs/docArtifacts.js.map +1 -1
- package/lib/features/health/healthSync.js +3 -1
- package/lib/features/health/healthSync.js.map +1 -1
- package/lib/features/health/nativeHealth.js +8 -0
- package/lib/features/health/nativeHealth.js.map +1 -0
- package/lib/features/links/openInApp.js +11 -1
- package/lib/features/links/openInApp.js.map +1 -1
- package/lib/features/webbuilder/WebBuilderExperience.js +135 -28
- package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
- package/lib/features/webbuilder/buildFragments.js +14 -6
- package/lib/features/webbuilder/buildFragments.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewFrame.js +28 -3
- package/lib/features/webbuilder/components/PreviewFrame.js.map +1 -1
- package/lib/features/webbuilder/components/PreviewScreen.js +1 -1
- package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectChat.js +24 -5
- package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
- package/lib/features/webbuilder/components/ProjectsScreen.js +18 -2
- package/lib/features/webbuilder/components/ProjectsScreen.js.map +1 -1
- package/lib/features/webbuilder/components/ui.js +20 -6
- package/lib/features/webbuilder/components/ui.js.map +1 -1
- package/lib/features/webbuilder/exportCode.js +52 -0
- package/lib/features/webbuilder/exportCode.js.map +1 -0
- package/lib/features/webbuilder/siteAddress.js +71 -0
- package/lib/features/webbuilder/siteAddress.js.map +1 -0
- package/lib/features/webbuilder/widgetBlocks.js +30 -0
- package/lib/features/webbuilder/widgetBlocks.js.map +1 -0
- package/lib/screens/Chat/index.js +5 -6
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/ChatHistory/index.js +3 -2
- package/lib/screens/ChatHistory/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +20 -4
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/WebBuilderCodePrewarm.js +18 -0
- package/lib/screens/Home/components/WebBuilderCodePrewarm.js.map +1 -0
- package/lib/screens/WebBuilderNative/index.js +1 -1
- package/lib/screens/WebBuilderNative/index.js.map +1 -1
- package/lib/screens/WebBuilderNative/keepAlive.js +112 -0
- package/lib/screens/WebBuilderNative/keepAlive.js.map +1 -0
- package/lib/screens/WebBuilderNative/runningBuilds.js +40 -0
- package/lib/screens/WebBuilderNative/runningBuilds.js.map +1 -0
- package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js +57 -0
- package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js.map +1 -0
- package/lib/screens/WebBuilderNative/useWebBuilderGallery.js +73 -14
- package/lib/screens/WebBuilderNative/useWebBuilderGallery.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js +143 -34
- package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
- package/lib/screens/WebBuilderNative/useWebBuilderJobs.js +17 -5
- package/lib/screens/WebBuilderNative/useWebBuilderJobs.js.map +1 -1
- package/lib/screens/WebBuilderNative/versionUndo.js +144 -0
- package/lib/screens/WebBuilderNative/versionUndo.js.map +1 -0
- package/lib/screens/WebBuilderNative/webbuilderSnapshotKey.js +1 -0
- package/lib/screens/WebBuilderNative/webbuilderSnapshotKey.js.map +1 -0
- package/lib/screens/WebBuilderNative/webbuilderTransport.js +90 -6
- 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 {useReducer,useState,useRef,useEffect,useCallback}from'react';import {useWindowDimensions,Alert,View,TextInput,Text,KeyboardAvoidingView,ActivityIndicator,Platform,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {useCanvasTheme,themedStyles}from'../canvas/canvasTheme.js';import {Pressable,RADIUS,SPACE,TYPE}from'../canvas/canvasUi.js';import {useSafeInsets}from'../canvas/withRemoteSafeArea.js';import {picturesToPaint
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useReducer,useState,useRef,useEffect,useCallback}from'react';import {useWindowDimensions,Alert,View,TextInput,Text,KeyboardAvoidingView,ActivityIndicator,Platform,StyleSheet}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {useCanvasTheme,themedStyles}from'../canvas/canvasTheme.js';import {Pressable,pressedStyle,RADIUS,SPACE,TYPE}from'../canvas/canvasUi.js';import {useSafeInsets}from'../canvas/withRemoteSafeArea.js';import {paintPicture,picturesToPaint}from'./doc/aiDesign.js';import {editorReducer,initEditorState,currentPage,selectedLayer,makeImageLayer,makeStickerLayer,makeChartLayer,makeShapeLayer,makeTextLayer,makeTextBox}from'./doc/docOps.js';import {qrMatrix,qrPath}from'./doc/qr.js';import {catalogToDoc,catalogKind,templatePagesFor}from'./doc/newDoc.js';import {resizeDocPatch}from'./doc/resize.js';import {copyStyle,pasteStylePatch}from'./doc/copyStyle.js';import {snapAspect}from'./doc/sizes.js';import {rebaseRuns}from'./doc/textLayout.js';import {newLayerId,designTitle}from'./doc/types.js';import {writePngToCache,exportDesign}from'./export/exportDesign.js';import {AiPanel}from'./editor/AiPanel.js';import {CropOverlay}from'./editor/CropOverlay.js';import {DesignCanvas}from'./editor/DesignCanvas.js';import {EditorSheet}from'./editor/controls.js';import {ExportSheet}from'./editor/ExportSheet.js';import {FindReplacePanel}from'./editor/FindReplacePanel.js';import {toolTitle,LayerToolPanel,SelectionToolbar}from'./editor/LayerTools.js';import {chooseAction,PageStrip}from'./editor/PageStrip.js';import {Slideshow}from'./editor/Slideshow.js';import {PageCapture}from'./render/PageCapture.js';import {DOCK_TOOLS,TemplatesPanel,ElementsPanel,TextPanel,BrandPanel,DetailsPanel,AssetsPanel}from'./editor/ToolPanels.js';import {useDesignSave}from'./editor/useDesignSave.js';var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
3
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
4
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -18,21 +18,21 @@ var __spreadValues = (a, b) => {
|
|
|
18
18
|
};
|
|
19
19
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
20
|
const DOCK_H = 64;
|
|
21
|
-
function statusLabel(status) {
|
|
21
|
+
function statusLabel(status, dirty, stored) {
|
|
22
|
+
if (status === "saving") return "Saving\u2026";
|
|
23
|
+
if (status === "offline") return "Not signed in";
|
|
24
|
+
if (dirty) return stored ? "Unsaved changes" : "Not saved";
|
|
22
25
|
switch (status) {
|
|
23
|
-
case "saving":
|
|
24
|
-
return "Saving\u2026";
|
|
25
26
|
case "saved":
|
|
26
27
|
return "Saved";
|
|
27
28
|
case "error":
|
|
28
29
|
return "Not saved";
|
|
29
|
-
case "offline":
|
|
30
|
-
return "Not signed in";
|
|
31
30
|
default:
|
|
32
31
|
return "";
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
function DesignEditorExperience({
|
|
35
|
+
padTopInset = false,
|
|
36
36
|
doc: initialDoc,
|
|
37
37
|
kind,
|
|
38
38
|
opened,
|
|
@@ -67,6 +67,7 @@ function DesignEditorExperience({
|
|
|
67
67
|
sessionId
|
|
68
68
|
});
|
|
69
69
|
const [dockTool, setDockTool] = useState(null);
|
|
70
|
+
const [styleClip, setStyleClip] = useState(null);
|
|
70
71
|
const [layerTool, setLayerTool] = useState(null);
|
|
71
72
|
const [editingTextId, setEditingTextId] = useState(null);
|
|
72
73
|
const [busy, setBusy] = useState(null);
|
|
@@ -109,10 +110,27 @@ function DesignEditorExperience({
|
|
|
109
110
|
});
|
|
110
111
|
setDockTool(null);
|
|
111
112
|
}, [page.id]);
|
|
112
|
-
const close = useCallback(
|
|
113
|
+
const close = useCallback(() => {
|
|
113
114
|
setEditingTextId(null);
|
|
114
|
-
|
|
115
|
-
|
|
115
|
+
if (!save.dirty) {
|
|
116
|
+
onClose();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
Alert.alert(save.artifactId ? "Save your changes?" : "Save this design?", save.artifactId ? "Your changes are not saved yet." : "It is not in your designs yet. Save it to keep it, or discard it.", [{
|
|
120
|
+
text: "Cancel",
|
|
121
|
+
style: "cancel"
|
|
122
|
+
}, {
|
|
123
|
+
text: "Discard",
|
|
124
|
+
style: "destructive",
|
|
125
|
+
onPress: onClose
|
|
126
|
+
}, {
|
|
127
|
+
text: "Save",
|
|
128
|
+
onPress: () => {
|
|
129
|
+
void save.save().then((ok) => {
|
|
130
|
+
if (ok) onClose();
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}]);
|
|
116
134
|
}, [save, onClose]);
|
|
117
135
|
const placePicture = useCallback((picked) => {
|
|
118
136
|
if ((layer == null ? void 0 : layer.kind) === "image" && !layer.locked) {
|
|
@@ -235,21 +253,50 @@ function DesignEditorExperience({
|
|
|
235
253
|
var _a2;
|
|
236
254
|
return dispatch({
|
|
237
255
|
type: "patchDoc",
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
pageHeight: size.height,
|
|
241
|
-
aspectRatio: snapAspect(size.width, size.height),
|
|
242
|
-
print: size.trimMm ? __spreadProps(__spreadValues({}, (_a2 = doc.print) != null ? _a2 : defaultPrintSpec()), {
|
|
243
|
-
trimMm: size.trimMm
|
|
244
|
-
}) : void 0
|
|
245
|
-
}
|
|
256
|
+
// Layers re-anchor instead of stretching; a screen size keeps bleed and safe area (web SET_DOC_SIZE).
|
|
257
|
+
patch: resizeDocPatch(doc, size.width, size.height, snapAspect(size.width, size.height), (_a2 = size.trimMm) != null ? _a2 : null)
|
|
246
258
|
});
|
|
247
|
-
}, [doc
|
|
259
|
+
}, [doc]);
|
|
248
260
|
const hostBytes = useCallback(async (b64, mime, stem) => {
|
|
249
261
|
if (!uploadFile) return `data:${mime};base64,${b64}`;
|
|
250
262
|
const ext = mime.includes("jpeg") ? "jpg" : mime.includes("webp") ? "webp" : "png";
|
|
251
263
|
return uploadFile(await writePngToCache(`${stem}-${Date.now()}.${ext}`, b64));
|
|
252
264
|
}, [uploadFile]);
|
|
265
|
+
const paintLayer = useCallback(async (pageId, layerId) => {
|
|
266
|
+
var _a2, _b2, _c2, _d2, _e;
|
|
267
|
+
if (!runCarousel) return;
|
|
268
|
+
const pages = stateRef.current.doc.pages;
|
|
269
|
+
const at = pages.findIndex((p) => p.id === pageId);
|
|
270
|
+
const target = (_b2 = (_a2 = pages[at]) == null ? void 0 : _a2.layers) == null ? void 0 : _b2.find((l) => l.id === layerId);
|
|
271
|
+
if ((target == null ? void 0 : target.kind) !== "image" || !((_c2 = target.prompt) == null ? void 0 : _c2.trim())) return;
|
|
272
|
+
const mark = (patch2) => dispatch({
|
|
273
|
+
type: "patchLayer",
|
|
274
|
+
silent: true,
|
|
275
|
+
pageId,
|
|
276
|
+
layerId,
|
|
277
|
+
patch: patch2
|
|
278
|
+
});
|
|
279
|
+
mark({
|
|
280
|
+
imageStatus: "generating"
|
|
281
|
+
});
|
|
282
|
+
try {
|
|
283
|
+
const pic = await paintPicture(runCarousel, {
|
|
284
|
+
prompt: target.prompt,
|
|
285
|
+
pageIndex: at + 1,
|
|
286
|
+
totalPages: pages.length,
|
|
287
|
+
aspectRatio: stateRef.current.doc.aspectRatio
|
|
288
|
+
});
|
|
289
|
+
const src = (_e = pic.url) != null ? _e : await hostBytes((_d2 = pic.dataBase64) != null ? _d2 : "", pic.mimeType, "ai-picture");
|
|
290
|
+
if (mounted.current) mark({
|
|
291
|
+
imageStatus: "ready",
|
|
292
|
+
src
|
|
293
|
+
});
|
|
294
|
+
} catch (e) {
|
|
295
|
+
if (mounted.current) mark({
|
|
296
|
+
imageStatus: "error"
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}, [runCarousel, hostBytes]);
|
|
253
300
|
const paintPage = useCallback(async (pageId) => {
|
|
254
301
|
var _a2, _b2, _c2, _d2;
|
|
255
302
|
if (!runCarousel) return;
|
|
@@ -290,8 +337,7 @@ function DesignEditorExperience({
|
|
|
290
337
|
patch: __spreadValues({
|
|
291
338
|
imageStatus: status
|
|
292
339
|
}, src ? {
|
|
293
|
-
src
|
|
294
|
-
uploaded: true
|
|
340
|
+
src
|
|
295
341
|
} : {})
|
|
296
342
|
});
|
|
297
343
|
}
|
|
@@ -411,7 +457,8 @@ function DesignEditorExperience({
|
|
|
411
457
|
pages: choice.pageIndices.map((i) => doc.pages[i]).filter(Boolean),
|
|
412
458
|
format: choice.format,
|
|
413
459
|
scale: choice.scale,
|
|
414
|
-
|
|
460
|
+
transparent: choice.transparent,
|
|
461
|
+
capture: (pg, px, opts) => cap.capture(pg, px, opts),
|
|
415
462
|
onProgress: (label) => mounted.current && setExporting(label)
|
|
416
463
|
});
|
|
417
464
|
if (result !== "cancelled" && mounted.current) setExtra(null);
|
|
@@ -464,7 +511,7 @@ function DesignEditorExperience({
|
|
|
464
511
|
pageId: page.id,
|
|
465
512
|
layerId: layer.id,
|
|
466
513
|
move
|
|
467
|
-
}), setBackground: (background, coalesce) => dispatch({
|
|
514
|
+
}), paintImage: runCarousel && layer ? () => void paintLayer(page.id, layer.id) : void 0, setBackground: (background, coalesce) => dispatch({
|
|
468
515
|
type: "setBackground",
|
|
469
516
|
pageId: page.id,
|
|
470
517
|
background,
|
|
@@ -518,16 +565,16 @@ function DesignEditorExperience({
|
|
|
518
565
|
return null;
|
|
519
566
|
})();
|
|
520
567
|
const title = designTitle(doc) || "Untitled design";
|
|
521
|
-
return /* @__PURE__ */ jsxs(KeyboardAvoidingView, { style: [styles.root, {
|
|
568
|
+
return /* @__PURE__ */ jsxs(KeyboardAvoidingView, { style: [styles.root, padTopInset ? {
|
|
522
569
|
paddingTop: insets.top
|
|
523
|
-
}], behavior: Platform.OS === "ios" ? "padding" : void 0, children: [
|
|
570
|
+
} : null], behavior: Platform.OS === "ios" ? "padding" : void 0, children: [
|
|
524
571
|
/* @__PURE__ */ jsxs(View, { style: styles.topBar, children: [
|
|
525
572
|
/* @__PURE__ */ jsx(Pressable, { onPress: () => void close(), hitSlop: 10, style: styles.topButton, accessibilityRole: "button", accessibilityLabel: "Back", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chevron-left", size: 28, color: theme.edInk }) }),
|
|
526
573
|
/* @__PURE__ */ jsxs(Pressable, { onPress: () => setDockTool("details"), style: styles.titleWrap, accessibilityRole: "button", accessibilityLabel: "Rename design", children: [
|
|
527
574
|
/* @__PURE__ */ jsx(Text, { style: styles.title, numberOfLines: 1, children: title }),
|
|
528
575
|
/* @__PURE__ */ jsx(Text, { style: [styles.status, save.status === "error" && {
|
|
529
576
|
color: theme.edDanger
|
|
530
|
-
}], numberOfLines: 1, children: save.status === "error" && save.error ? save.error : statusLabel(save.status) })
|
|
577
|
+
}], numberOfLines: 1, children: save.status === "error" && save.error ? save.error : statusLabel(save.status, save.dirty, Boolean(save.artifactId)) })
|
|
531
578
|
] }),
|
|
532
579
|
/* @__PURE__ */ jsx(Pressable, { onPress: () => dispatch({
|
|
533
580
|
type: "undo"
|
|
@@ -535,7 +582,15 @@ function DesignEditorExperience({
|
|
|
535
582
|
/* @__PURE__ */ jsx(Pressable, { onPress: () => dispatch({
|
|
536
583
|
type: "redo"
|
|
537
584
|
}), disabled: !state.future.length, hitSlop: 8, style: [styles.topButton, !state.future.length && styles.disabled], accessibilityRole: "button", accessibilityLabel: "Redo", children: /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "redo", size: 22, color: theme.edInk }) }),
|
|
538
|
-
|
|
585
|
+
save.dirty ? (
|
|
586
|
+
// Unsaved work: Save takes the download slot (Download stays in More until saved).
|
|
587
|
+
/* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
588
|
+
setEditingTextId(null);
|
|
589
|
+
void save.save();
|
|
590
|
+
}, disabled: save.status === "saving" || save.status === "offline", style: ({
|
|
591
|
+
pressed
|
|
592
|
+
}) => [styles.saveButton, (save.status === "saving" || save.status === "offline") && styles.disabled, pressedStyle(pressed)], accessibilityRole: "button", accessibilityLabel: "Save design", testID: "design-save", children: save.status === "saving" ? /* @__PURE__ */ jsx(ActivityIndicator, { size: "small", color: theme.primaryForeground }) : /* @__PURE__ */ jsx(Text, { style: styles.saveLabel, children: "Save" }) })
|
|
593
|
+
) : /* @__PURE__ */ jsx(Pressable, { onPress: () => {
|
|
539
594
|
setEditingTextId(null);
|
|
540
595
|
setDockTool(null);
|
|
541
596
|
setLayerTool(null);
|
|
@@ -567,7 +622,7 @@ function DesignEditorExperience({
|
|
|
567
622
|
}, children: sheet }) : /* @__PURE__ */ jsxs(View, { style: {
|
|
568
623
|
paddingBottom: insets.bottom
|
|
569
624
|
}, children: [
|
|
570
|
-
/* @__PURE__ */ jsx(SelectionToolbar, { doc, page, layer, tool: layerTool, layerActions: {
|
|
625
|
+
/* @__PURE__ */ jsx(SelectionToolbar, { doc, page, layer, tool: layerTool, layerActions: __spreadValues(__spreadValues({
|
|
571
626
|
patch: (p, coalesce) => layer && patch(layer.id, p, coalesce),
|
|
572
627
|
duplicate: () => layer && dispatch({
|
|
573
628
|
type: "duplicateLayer",
|
|
@@ -593,8 +648,13 @@ function DesignEditorExperience({
|
|
|
593
648
|
setLayerTool(null);
|
|
594
649
|
setCropping(layer.id);
|
|
595
650
|
}
|
|
596
|
-
}
|
|
597
|
-
|
|
651
|
+
},
|
|
652
|
+
copyStyle: () => layer && setStyleClip(copyStyle(layer))
|
|
653
|
+
}, runCarousel ? {
|
|
654
|
+
paintImage: () => layer && void paintLayer(page.id, layer.id)
|
|
655
|
+
} : {}), styleClip ? {
|
|
656
|
+
pasteStyle: () => layer && patch(layer.id, pasteStylePatch(styleClip, layer))
|
|
657
|
+
} : {}), pageActions: {
|
|
598
658
|
openTool,
|
|
599
659
|
addPage: () => dispatch({
|
|
600
660
|
type: "addPage",
|
|
@@ -671,6 +731,20 @@ const makeStyles = themedStyles((theme) => StyleSheet.create({
|
|
|
671
731
|
alignItems: "center",
|
|
672
732
|
justifyContent: "center"
|
|
673
733
|
},
|
|
734
|
+
saveButton: {
|
|
735
|
+
minWidth: 64,
|
|
736
|
+
height: 36,
|
|
737
|
+
paddingHorizontal: SPACE.md + 2,
|
|
738
|
+
marginHorizontal: SPACE.xs,
|
|
739
|
+
borderRadius: RADIUS.pill,
|
|
740
|
+
alignItems: "center",
|
|
741
|
+
justifyContent: "center",
|
|
742
|
+
backgroundColor: theme.primary
|
|
743
|
+
},
|
|
744
|
+
saveLabel: __spreadProps(__spreadValues({}, TYPE.label), {
|
|
745
|
+
fontSize: 14,
|
|
746
|
+
color: theme.primaryForeground
|
|
747
|
+
}),
|
|
674
748
|
disabled: {
|
|
675
749
|
opacity: 0.3
|
|
676
750
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DesignEditorExperience.js","sources":["../../../src/features/design/DesignEditorExperience.tsx"],"sourcesContent":["/**\n * The Design Studio editor - native twin of web's `CarouselEditor` on a phone.\n *\n * top bar back, the design's name, save state, undo / redo\n * canvas the open page; touch to select, move, resize, turn\n * selection the chip row for what is selected (or the page)\n * pages the page rail\n * dock AI, Templates, Elements, Text, Brand, Details, Assets\n * more Download (PNG, JPG, PDF), Present, Find and replace\n *\n * A tool opens a sheet in place of the selection row, pages and dock, so the\n * canvas shrinks above it and every change shows live. Typing into a text\n * layer works the same way, the keyboard pushing the canvas up. Crop mode\n * lies over the canvas until Done or Cancel.\n */\nimport React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n KeyboardAvoidingView,\n Platform,\n StyleSheet,\n Text,\n TextInput,\n useWindowDimensions,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { themedStyles, useCanvasTheme, type CanvasPalette } from '../canvas/canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE } from '../canvas/canvasUi';\nimport type { DesignCatalogCard } from '../canvas/designCatalog';\nimport type { LoadDesignCatalog } from '../canvas/DesignCategoryGallery';\nimport { useSafeInsets } from '../canvas/withRemoteSafeArea';\nimport { paintPicture, picturesToPaint, type ConnectorDesign, type RunCarousel } from './doc/aiDesign';\nimport type { DesignArtifact, IndexOptions } from './doc/artifacts';\nimport {\n currentPage,\n editorReducer,\n initEditorState,\n makeChartLayer,\n makeImageLayer,\n makeShapeLayer,\n makeStickerLayer,\n makeTextBox,\n makeTextLayer,\n selectedLayer,\n type TextPreset,\n} from './doc/docOps';\nimport { qrMatrix, qrPath, type QrStyle } from './doc/qr';\nimport { catalogKind, catalogToDoc, defaultPrintSpec, templatePagesFor, type DesignTemplate } from './doc/newDoc';\nimport { snapAspect, type DesignSize } from './doc/sizes';\nimport { rebaseRuns } from './doc/textLayout';\nimport {\n designTitle,\n newLayerId,\n type BrandKit,\n type DesignDoc,\n type DesignKind,\n type DesignPage,\n type EditorLayer,\n type ImageLayer,\n type TextLayer,\n} from './doc/types';\nimport { exportDesign, writePngToCache } from './export/exportDesign';\nimport { AiPanel } from './editor/AiPanel';\nimport { CropOverlay } from './editor/CropOverlay';\nimport { DesignCanvas } from './editor/DesignCanvas';\nimport { EditorSheet } from './editor/controls';\nimport { ExportSheet, type ExportChoice } from './editor/ExportSheet';\nimport { FindReplacePanel } from './editor/FindReplacePanel';\nimport { LayerToolPanel, SelectionToolbar, toolTitle, type LayerTool } from './editor/LayerTools';\nimport { PageStrip, chooseAction } from './editor/PageStrip';\nimport { Slideshow } from './editor/Slideshow';\nimport { PageCapture, type PageCaptureHandle } from './render/PageCapture';\nimport {\n AssetsPanel,\n BrandPanel,\n DOCK_TOOLS,\n DetailsPanel,\n ElementsPanel,\n TemplatesPanel,\n TextPanel,\n type DockTool,\n} from './editor/ToolPanels';\nimport { useDesignSave, type SaveStatus } from './editor/useDesignSave';\n\n/** A picked picture, hosted, with its pixel size when the picker knows it. */\nexport interface PickedImage {\n src: string;\n width?: number;\n height?: number;\n}\n\nexport interface DesignEditorExperienceProps {\n doc: DesignDoc;\n kind: DesignKind;\n /** The row this design was opened from. */\n opened?: DesignArtifact | null;\n index: IndexOptions | null;\n sessionId?: string;\n loadCatalog?: LoadDesignCatalog;\n /** Read a template's full pages (the Templates tool). */\n readTemplate?: (id: string) => Promise<DesignTemplate | null>;\n /** Pick a picture from the device and host it; null when the person cancels. */\n pickImage?: () => Promise<PickedImage | null>;\n /** Host a file the editor made (a QR code, an AI picture); resolves to its URL. */\n uploadFile?: (localUri: string) => Promise<string>;\n /** The `yantra-carousel` connector (the AI tool); absent hides what needs it. */\n runCarousel?: RunCarousel;\n onClose: () => void;\n}\n\n/** Sheets the top bar's More opens. */\ntype ExtraSheet = 'export' | 'find';\n\nconst DOCK_H = 64;\n\nfunction statusLabel(status: SaveStatus): string {\n switch (status) {\n case 'saving':\n return 'Saving…';\n case 'saved':\n return 'Saved';\n case 'error':\n return 'Not saved';\n case 'offline':\n return 'Not signed in';\n default:\n return '';\n }\n}\n\nexport function DesignEditorExperience({\n doc: initialDoc,\n kind,\n opened,\n index,\n sessionId,\n loadCatalog,\n readTemplate,\n pickImage,\n uploadFile,\n runCarousel,\n onClose,\n}: DesignEditorExperienceProps) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const insets = useSafeInsets();\n const { width, height } = useWindowDimensions();\n const [state, dispatch] = useReducer(editorReducer, initialDoc, initEditorState);\n const { doc } = state;\n const page = currentPage(state) ?? doc.pages[0];\n const layer = selectedLayer(state) ?? null;\n const save = useDesignSave({ doc, index, kind, opened, sessionId });\n\n const [dockTool, setDockTool] = useState<DockTool | null>(null);\n const [layerTool, setLayerTool] = useState<LayerTool | null>(null);\n const [editingTextId, setEditingTextId] = useState<string | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [extra, setExtra] = useState<ExtraSheet | null>(null);\n const [exporting, setExporting] = useState<string | null>(null);\n const [cropping, setCropping] = useState<string | null>(null);\n const [presenting, setPresenting] = useState(false);\n const capture = useRef<PageCaptureHandle>(null);\n // Async work (painting AI pictures) reads the newest document, not the one it started with.\n const stateRef = useRef(state);\n stateRef.current = state;\n const mounted = useRef(true);\n useEffect(\n () => () => {\n mounted.current = false;\n },\n [],\n );\n const pageIndex = Math.max(\n 0,\n doc.pages.findIndex((p) => p.id === page.id),\n );\n\n const sheetH = Math.round(Math.min(height * 0.46, 420));\n\n const select = useCallback((layerId: string | null) => {\n dispatch({ type: 'select', layerId });\n setLayerTool(null);\n if (layerId) {\n setDockTool(null);\n setExtra(null);\n }\n }, []);\n\n const patch = useCallback(\n (layerId: string, p: Partial<EditorLayer>, coalesce?: string) =>\n dispatch({ type: 'patchLayer', pageId: page.id, layerId, patch: p, coalesce }),\n [page.id],\n );\n\n const addLayer = useCallback(\n (l: EditorLayer) => {\n dispatch({ type: 'addLayer', pageId: page.id, layer: l });\n setDockTool(null);\n },\n [page.id],\n );\n\n const close = useCallback(async () => {\n setEditingTextId(null);\n await save.flush();\n onClose();\n }, [save, onClose]);\n\n // ── Pictures ──────────────────────────────────────────────────────────\n const placePicture = useCallback(\n (picked: PickedImage) => {\n if (layer?.kind === 'image' && !layer.locked) {\n // Replace keeps the frame; the old crop belonged to the old picture.\n patch(layer.id, { src: picked.src, crop: undefined, imageStatus: 'ready', uploaded: true });\n setDockTool(null);\n return;\n }\n const size = picked.width && picked.height ? { width: picked.width, height: picked.height } : null;\n addLayer(makeImageLayer(picked.src, doc.pageWidth, doc.pageHeight, size));\n },\n [layer, patch, addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n const pickAndPlace = useCallback(async () => {\n if (!pickImage) return;\n setBusy('Uploading photo…');\n try {\n const picked = await pickImage();\n if (picked) placePicture(picked);\n } catch (err) {\n Alert.alert('Could not add the photo', err instanceof Error ? err.message : 'Try again.');\n } finally {\n setBusy(null);\n }\n }, [pickImage, placePicture]);\n\n const setBrandKit = useCallback((kit: BrandKit) => dispatch({ type: 'patchDoc', patch: { brandKit: kit } }), []);\n\n const addLogo = useCallback(async () => {\n if (!pickImage) return;\n setBusy('Uploading logo…');\n try {\n const picked = await pickImage();\n if (picked) {\n const kit = doc.brandKit ?? {\n colors: [],\n fonts: doc.fontPair ?? { display: 'Inter', body: 'Inter' },\n logos: [],\n };\n setBrandKit({ ...kit, logos: [...kit.logos.filter((l) => l !== picked.src), picked.src] });\n }\n } catch (err) {\n Alert.alert('Could not add the logo', err instanceof Error ? err.message : 'Try again.');\n } finally {\n setBusy(null);\n }\n }, [pickImage, doc.brandKit, doc.fontPair, setBrandKit]);\n\n // ── Templates ─────────────────────────────────────────────────────────\n const applyTemplate = useCallback(\n async (card: DesignCatalogCard) => {\n if (!readTemplate) return;\n setBusy('Opening template…');\n let template: DesignTemplate | null = null;\n try {\n template = await readTemplate(card.id);\n } catch {\n template = null;\n } finally {\n setBusy(null);\n }\n if (!template) {\n Alert.alert('Template unavailable', 'That template could not be opened. Try another.');\n return;\n }\n const t = template;\n const empty = doc.pages.every((p) => !p.layers?.length && p.background?.kind !== 'image');\n const replace = () => {\n const next = catalogToDoc(t);\n save.setKind(catalogKind(t));\n dispatch({\n type: 'replaceDoc',\n doc: { ...next, ...(doc.title ? { title: doc.title } : {}), brandKit: doc.brandKit },\n });\n setDockTool(null);\n };\n const addPages = () => {\n dispatch({ type: 'insertPages', afterId: page.id, pages: templatePagesFor(t) });\n setDockTool(null);\n };\n if (empty) {\n replace();\n return;\n }\n Alert.alert(t.title, 'Use this template for the whole design, or add its pages after this one?', [\n { text: 'Add pages', onPress: addPages },\n { text: 'Replace design', style: 'destructive', onPress: replace },\n { text: 'Cancel', style: 'cancel' },\n ]);\n },\n [readTemplate, doc, page.id, save],\n );\n\n // ── Details ───────────────────────────────────────────────────────────\n const resize = useCallback(\n (size: DesignSize) =>\n dispatch({\n type: 'patchDoc',\n patch: {\n pageWidth: size.width,\n pageHeight: size.height,\n aspectRatio: snapAspect(size.width, size.height),\n print: size.trimMm ? { ...(doc.print ?? defaultPrintSpec()), trimMm: size.trimMm } : undefined,\n },\n }),\n [doc.print],\n );\n\n // ── AI ────────────────────────────────────────────────────────────────\n /** A file the editor made, hosted; a data URL when there is no uploader (it still saves and opens). */\n const hostBytes = useCallback(\n async (b64: string, mime: string, stem: string): Promise<string> => {\n if (!uploadFile) return `data:${mime};base64,${b64}`;\n const ext = mime.includes('jpeg') ? 'jpg' : mime.includes('webp') ? 'webp' : 'png';\n return uploadFile(await writePngToCache(`${stem}-${Date.now()}.${ext}`, b64));\n },\n [uploadFile],\n );\n\n /** Paint every picture a page still lacks, one at a time; each lands without its own undo step. */\n const paintPage = useCallback(\n async (pageId: string) => {\n if (!runCarousel) return;\n const find = () => stateRef.current.doc.pages.find((p) => p.id === pageId);\n const start = find();\n if (!start) return;\n for (const job of picturesToPaint(start)) {\n if (!mounted.current) return;\n const now = find();\n if (!now) return;\n const pages = stateRef.current.doc.pages;\n const at = pages.findIndex((p) => p.id === pageId);\n const prompt = job.target === 'background' ? (now.background?.imagePrompt ?? '') : job.prompt;\n const mark = (status: 'generating' | 'error' | 'ready', src?: string) => {\n const cur = find();\n if (!cur) return;\n if (job.target === 'background') {\n dispatch({\n type: 'replacePage',\n silent: true,\n page: {\n ...cur,\n background: {\n ...(cur.background ?? { kind: 'image' }),\n imageStatus: status,\n ...(src ? { src } : {}),\n },\n },\n });\n } else {\n dispatch({\n type: 'patchLayer',\n silent: true,\n pageId,\n layerId: job.layerId,\n patch: {\n imageStatus: status,\n ...(src ? { src, uploaded: true } : {}),\n } as Partial<EditorLayer>,\n });\n }\n };\n mark('generating');\n try {\n const pic = await paintPicture(runCarousel, {\n prompt,\n pageIndex: at + 1,\n totalPages: pages.length,\n aspectRatio: stateRef.current.doc.aspectRatio,\n });\n const src = pic.url ?? (await hostBytes(pic.dataBase64 ?? '', pic.mimeType, 'ai-picture'));\n mark('ready', src);\n } catch {\n mark('error');\n }\n }\n },\n [runCarousel, hostBytes],\n );\n\n const onAiCreated = useCallback(\n (pages: DesignPage[], design: ConnectorDesign) => {\n const current = stateRef.current.doc;\n const empty = current.pages.every((p) => !p.layers?.length && p.background?.kind !== 'image');\n if (empty) {\n dispatch({ type: 'patchDoc', patch: { pages, palette: design.palette, fontPair: design.fontPair } });\n dispatch({ type: 'select', pageId: pages[0].id, layerId: null });\n } else {\n dispatch({ type: 'insertPages', afterId: page.id, pages });\n }\n setDockTool(null);\n void (async () => {\n for (const p of pages) await paintPage(p.id);\n })();\n },\n [page.id, paintPage],\n );\n\n const onAiEdited = useCallback(\n (edited: DesignPage) => {\n dispatch({ type: 'replacePage', page: edited });\n setDockTool(null);\n void paintPage(edited.id);\n },\n [paintPage],\n );\n\n // ── Elements: stickers, frames, QR ────────────────────────────────────\n const addSticker = useCallback(\n (emoji: string) => addLayer(makeStickerLayer(emoji, doc.pageWidth, doc.pageHeight)),\n [addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n const applyFrame = useCallback(\n (d: string | undefined) => {\n if (layer?.kind === 'image' && !layer.locked) {\n patch(layer.id, { clipPath: d });\n return;\n }\n if (!d) return;\n // An empty frame, square on the page, waiting for Replace.\n const w = 0.4;\n const h = (w * doc.pageWidth) / doc.pageHeight;\n const frame: ImageLayer = {\n id: newLayerId(),\n kind: 'image',\n prompt: '',\n src: null,\n imageStatus: 'empty',\n replaceable: true,\n clipPath: d,\n x: (1 - w) / 2,\n y: (1 - h) / 2,\n w,\n h,\n };\n addLayer(frame);\n },\n [layer, patch, addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n const addQr = useCallback(\n async (text: string, style: QrStyle) => {\n if (!capture.current) throw new Error('The QR code could not be drawn.');\n let matrix;\n try {\n matrix = qrMatrix(text);\n } catch (err) {\n throw err instanceof Error && /newer version/.test(err.message)\n ? err\n : new Error('That is too long for a QR code.');\n }\n const side = matrix.size + style.margin * 2;\n const d = qrPath(matrix, style.margin);\n const png = await capture.current.captureSvg(\n (svg) => (\n <svg.G>\n <svg.Rect x={0} y={0} width={side} height={side} fill={style.background} />\n <svg.Path d={d} fill={style.foreground} />\n </svg.G>\n ),\n side,\n side,\n 1200,\n );\n const src = await hostBytes(png, 'image/png', 'qr-code');\n // Square on the page: image layers stretch to their box, and pages are rarely square.\n const w = 0.3;\n const h = (w * doc.pageWidth) / doc.pageHeight;\n addLayer({\n ...makeImageLayer(src, doc.pageWidth, doc.pageHeight, null),\n x: (1 - w) / 2,\n y: (1 - h) / 2,\n w,\n h,\n });\n },\n [hostBytes, addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n // ── Export ────────────────────────────────────────────────────────────\n const runExport = useCallback(\n async (choice: ExportChoice) => {\n const cap = capture.current;\n if (!cap) return;\n setExporting('Preparing…');\n try {\n const result = await exportDesign({\n doc,\n pages: choice.pageIndices.map((i) => doc.pages[i]).filter(Boolean),\n format: choice.format,\n scale: choice.scale,\n capture: (pg, px) => cap.capture(pg, px),\n onProgress: (label) => mounted.current && setExporting(label),\n });\n if (result !== 'cancelled' && mounted.current) setExtra(null);\n } catch (err) {\n Alert.alert('Could not download', err instanceof Error ? err.message : 'Try again.');\n } finally {\n if (mounted.current) setExporting(null);\n }\n },\n [doc],\n );\n\n const openMore = useCallback(() => {\n setEditingTextId(null);\n chooseAction<'export' | 'present' | 'find'>(\n 'Design',\n [\n { id: 'export', label: 'Download' },\n { id: 'present', label: 'Present' },\n { id: 'find', label: 'Find and replace' },\n ],\n (id) => {\n setDockTool(null);\n setLayerTool(null);\n if (id === 'present') setPresenting(true);\n else setExtra(id);\n },\n );\n }, []);\n\n // ── Text editing ──────────────────────────────────────────────────────\n const editing = editingTextId\n ? (page.layers?.find((l) => l.id === editingTextId && l.kind === 'text') as TextLayer | undefined)\n : undefined;\n\n const openTool = useCallback((tool: LayerTool) => {\n setLayerTool((prev) => (prev === tool ? null : tool));\n setDockTool(null);\n setExtra(null);\n }, []);\n\n const cropLayer = cropping\n ? (page.layers?.find((l) => l.id === cropping && l.kind === 'image') as ImageLayer | undefined)\n : undefined;\n\n const sheet = (() => {\n if (editing) {\n return (\n <View style={styles.textSheet}>\n <TextInput\n value={editing.content}\n onChangeText={(content) =>\n patch(\n editing.id,\n {\n content,\n ...(editing.runs\n ? { runs: rebaseRuns(editing.content, content, editing.runs) }\n : {}),\n },\n `text:${editing.id}`,\n )\n }\n multiline\n autoFocus\n style={styles.textInput}\n placeholder=\"Type your text\"\n placeholderTextColor={theme.edInk3}\n />\n <Pressable\n onPress={() => setEditingTextId(null)}\n style={styles.doneButton}\n accessibilityRole=\"button\"\n >\n <Text style={styles.doneLabel}>Done</Text>\n </Pressable>\n </View>\n );\n }\n if (layerTool) {\n return (\n <EditorSheet title={toolTitle(layerTool)} onClose={() => setLayerTool(null)} height={sheetH}>\n <LayerToolPanel\n tool={layerTool}\n doc={doc}\n page={page}\n layer={layer}\n patch={(p, coalesce) => layer && patch(layer.id, p, coalesce)}\n arrange={(move) =>\n layer && dispatch({ type: 'reorderLayer', pageId: page.id, layerId: layer.id, move })\n }\n setBackground={(background, coalesce) =>\n dispatch({\n type: 'setBackground',\n pageId: page.id,\n background,\n coalesce: coalesce ? `bg:${page.id}` : undefined,\n })\n }\n />\n </EditorSheet>\n );\n }\n if (extra) {\n return (\n <EditorSheet\n title={extra === 'export' ? 'Download' : 'Find and replace'}\n onClose={() => setExtra(null)}\n height={sheetH}\n >\n {extra === 'export' ? (\n <ExportSheet\n doc={doc}\n pageIndex={pageIndex}\n busy={exporting}\n onExport={(c) => void runExport(c)}\n />\n ) : (\n <FindReplacePanel\n doc={doc}\n onReveal={(pageId, layerId) => dispatch({ type: 'select', pageId, layerId })}\n onReplace={(next) => dispatch({ type: 'patchDoc', patch: { pages: next.pages } })}\n />\n )}\n </EditorSheet>\n );\n }\n if (dockTool) {\n const title = DOCK_TOOLS.find((t) => t.id === dockTool)?.label ?? '';\n return (\n <EditorSheet title={title} onClose={() => setDockTool(null)} height={sheetH}>\n {dockTool === 'ai' ? (\n <AiPanel\n doc={doc}\n page={page}\n pageIndex={pageIndex}\n run={runCarousel}\n onCreated={onAiCreated}\n onEdited={onAiEdited}\n />\n ) : dockTool === 'templates' ? (\n <TemplatesPanel\n doc={doc}\n load={loadCatalog}\n onPick={(card) => void applyTemplate(card)}\n width={width}\n />\n ) : dockTool === 'elements' ? (\n <ElementsPanel\n onShape={(shape) => addLayer(makeShapeLayer(shape, doc.palette))}\n onChart={(chart) => addLayer(makeChartLayer(chart, doc.palette))}\n onPhoto={pickImage ? () => void pickAndPlace() : undefined}\n onSticker={addSticker}\n onFrame={applyFrame}\n frameCurrent={layer?.kind === 'image' ? layer.clipPath : undefined}\n onQr={addQr}\n />\n ) : dockTool === 'text' ? (\n <TextPanel\n doc={doc}\n onTextBox={() => {\n const fonts = doc.brandKit?.fonts;\n const text = makeTextBox();\n addLayer(fonts ? { ...text, fontFamily: fonts[text.fontToken] } : text);\n }}\n onAdd={(preset: TextPreset) => {\n const fonts = doc.brandKit?.fonts;\n const text = makeTextLayer(preset);\n addLayer(fonts ? { ...text, fontFamily: fonts[text.fontToken] } : text);\n }}\n />\n ) : dockTool === 'brand' ? (\n <BrandPanel\n doc={doc}\n onBrandKit={setBrandKit}\n onPlaceLogo={(src) => placePicture({ src })}\n onAddLogo={pickImage ? () => void addLogo() : undefined}\n />\n ) : dockTool === 'details' ? (\n <DetailsPanel\n doc={doc}\n page={page}\n onRename={(title) => dispatch({ type: 'patchDoc', patch: { title: title || undefined } })}\n onResize={resize}\n onPage={(p) =>\n dispatch({\n type: 'patchDoc',\n patch: { pages: doc.pages.map((pg) => (pg.id === page.id ? { ...pg, ...p } : pg)) },\n })\n }\n />\n ) : (\n <AssetsPanel\n doc={doc}\n width={width}\n onUpload={pickImage ? () => void pickAndPlace() : undefined}\n uploading={Boolean(busy)}\n onPlace={(src) => placePicture({ src })}\n replacing={layer?.kind === 'image'}\n />\n )}\n </EditorSheet>\n );\n }\n return null;\n })();\n\n const title = designTitle(doc) || 'Untitled design';\n return (\n <KeyboardAvoidingView\n style={[styles.root, { paddingTop: insets.top }]}\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n >\n <View style={styles.topBar}>\n <Pressable\n onPress={() => void close()}\n hitSlop={10}\n style={styles.topButton}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Back\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={28} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => setDockTool('details')}\n style={styles.titleWrap}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Rename design\"\n >\n <Text style={styles.title} numberOfLines={1}>\n {title}\n </Text>\n <Text\n style={[styles.status, save.status === 'error' && { color: theme.edDanger }]}\n numberOfLines={1}\n >\n {save.status === 'error' && save.error ? save.error : statusLabel(save.status)}\n </Text>\n </Pressable>\n <Pressable\n onPress={() => dispatch({ type: 'undo' })}\n disabled={!state.past.length}\n hitSlop={8}\n style={[styles.topButton, !state.past.length && styles.disabled]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Undo\"\n >\n <MaterialCommunityIcons name=\"undo\" size={22} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => dispatch({ type: 'redo' })}\n disabled={!state.future.length}\n hitSlop={8}\n style={[styles.topButton, !state.future.length && styles.disabled]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Redo\"\n >\n <MaterialCommunityIcons name=\"redo\" size={22} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => {\n setEditingTextId(null);\n setDockTool(null);\n setLayerTool(null);\n setExtra('export');\n }}\n hitSlop={8}\n style={styles.topButton}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Download\"\n >\n <MaterialCommunityIcons name=\"tray-arrow-down\" size={22} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={openMore}\n hitSlop={8}\n style={styles.topButton}\n accessibilityRole=\"button\"\n accessibilityLabel=\"More\"\n >\n <MaterialCommunityIcons name=\"dots-horizontal\" size={22} color={theme.edInk} />\n </Pressable>\n </View>\n\n <View style={styles.canvasArea}>\n <DesignCanvas\n doc={doc}\n page={page}\n selectedId={state.layerId}\n editingId={editingTextId}\n onSelect={select}\n onPatch={(layerId, p, coalesce) => patch(layerId, p, coalesce)}\n onEditText={(layerId) => {\n setEditingTextId(layerId);\n setLayerTool(null);\n setDockTool(null);\n }}\n />\n {cropLayer ? (\n <CropOverlay\n doc={doc}\n layer={cropLayer}\n onCancel={() => setCropping(null)}\n onDone={(p) => {\n patch(cropLayer.id, p);\n setCropping(null);\n }}\n />\n ) : null}\n <PageCapture ref={capture} doc={doc} />\n {busy ? (\n <View pointerEvents=\"none\" style={styles.busy}>\n <ActivityIndicator color=\"#fff\" />\n <Text style={styles.busyLabel}>{busy}</Text>\n </View>\n ) : null}\n </View>\n\n {presenting ? <Slideshow doc={doc} startIndex={pageIndex} onClose={() => setPresenting(false)} /> : null}\n {cropLayer ? (\n <View style={{ height: insets.bottom }} />\n ) : sheet ? (\n <View style={{ height: editing ? undefined : sheetH }}>{sheet}</View>\n ) : (\n <View style={{ paddingBottom: insets.bottom }}>\n <SelectionToolbar\n doc={doc}\n page={page}\n layer={layer}\n tool={layerTool}\n layerActions={{\n patch: (p, coalesce) => layer && patch(layer.id, p, coalesce),\n duplicate: () =>\n layer && dispatch({ type: 'duplicateLayer', pageId: page.id, layerId: layer.id }),\n remove: () =>\n layer && dispatch({ type: 'deleteLayer', pageId: page.id, layerId: layer.id }),\n arrange: (move) =>\n layer && dispatch({ type: 'reorderLayer', pageId: page.id, layerId: layer.id, move }),\n editText: () => layer && setEditingTextId(layer.id),\n replaceImage: () => (pickImage ? void pickAndPlace() : setDockTool('assets')),\n openTool,\n crop: () => {\n if (layer?.kind === 'image' && layer.src) {\n setLayerTool(null);\n setCropping(layer.id);\n }\n },\n }}\n pageActions={{\n openTool,\n addPage: () => dispatch({ type: 'addPage', afterId: page.id }),\n duplicatePage: () => dispatch({ type: 'duplicatePage', pageId: page.id }),\n deletePage: () => dispatch({ type: 'deletePage', pageId: page.id }),\n }}\n />\n <PageStrip\n doc={doc}\n pageId={page.id}\n onSelect={(pageId) => {\n dispatch({ type: 'select', pageId, layerId: null });\n setLayerTool(null);\n }}\n onAdd={() => dispatch({ type: 'addPage', afterId: page.id })}\n onAction={(pageId, action) => {\n if (action === 'duplicate') dispatch({ type: 'duplicatePage', pageId });\n else if (action === 'delete') dispatch({ type: 'deletePage', pageId });\n else dispatch({ type: 'movePage', pageId, dir: action === 'left' ? -1 : 1 });\n }}\n onMove={(pageId, to) => dispatch({ type: 'movePageTo', pageId, index: to })}\n />\n <View style={styles.dock}>\n {DOCK_TOOLS.map((tool) => (\n <Pressable\n key={tool.id}\n onPress={() => {\n setDockTool(tool.id);\n setLayerTool(null);\n setExtra(null);\n }}\n style={styles.dockItem}\n accessibilityRole=\"button\"\n accessibilityLabel={tool.label}\n >\n <MaterialCommunityIcons name={tool.icon} size={22} color={theme.edInk2} />\n <Text style={styles.dockLabel}>{tool.label}</Text>\n </Pressable>\n ))}\n </View>\n </View>\n )}\n </KeyboardAvoidingView>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.edBg },\n topBar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n paddingHorizontal: SPACE.sm,\n // The shared studio and editor bar: 44pt on phones, 36pt controls.\n height: 44,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderColor: theme.edLine,\n backgroundColor: theme.edPanel,\n },\n topButton: { width: 36, height: 36, alignItems: 'center', justifyContent: 'center' },\n disabled: { opacity: 0.3 },\n titleWrap: { flex: 1, paddingHorizontal: SPACE.xs },\n title: { ...TYPE.title, color: theme.edInk },\n status: { ...TYPE.caption, color: theme.edInk3 },\n canvasArea: { flex: 1, backgroundColor: theme.edWell },\n busy: {\n position: 'absolute',\n alignSelf: 'center',\n top: SPACE.lg,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.sm,\n borderRadius: RADIUS.pill,\n backgroundColor: 'rgba(15,23,42,0.86)',\n },\n busyLabel: { ...TYPE.label, color: '#fff' },\n dock: {\n flexDirection: 'row',\n height: DOCK_H,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderColor: theme.edLine,\n backgroundColor: theme.edPanel,\n },\n dockItem: { flex: 1, alignItems: 'center', justifyContent: 'center', gap: 2 },\n dockLabel: { ...TYPE.caption, fontSize: 10, color: theme.edInk2 },\n textSheet: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: SPACE.sm,\n padding: SPACE.md,\n backgroundColor: theme.edPanel,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderColor: theme.edLine,\n },\n textInput: {\n flex: 1,\n minHeight: 44,\n maxHeight: 140,\n borderRadius: RADIUS.md,\n paddingHorizontal: SPACE.md,\n paddingTop: SPACE.sm,\n paddingBottom: SPACE.sm,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n ...TYPE.body,\n },\n doneButton: {\n height: 44,\n paddingHorizontal: SPACE.lg,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edAccent,\n alignItems: 'center',\n justifyContent: 'center',\n },\n doneLabel: { ...TYPE.label, color: theme.edOnInk },\n }),\n);\n"],"names":["_a","_b","_c","_d","title"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DesignEditorExperience.js","sources":["../../../src/features/design/DesignEditorExperience.tsx"],"sourcesContent":["/**\n * The Design Studio editor - native twin of web's `CarouselEditor` on a phone.\n *\n * top bar back, the design's name, save state, undo / redo\n * canvas the open page; touch to select, move, resize, turn\n * selection the chip row for what is selected (or the page)\n * pages the page rail\n * dock AI, Templates, Elements, Text, Brand, Details, Assets\n * more Download (PNG, JPG, PDF), Present, Find and replace\n *\n * A tool opens a sheet in place of the selection row, pages and dock, so the\n * canvas shrinks above it and every change shows live. Typing into a text\n * layer works the same way, the keyboard pushing the canvas up. Crop mode\n * lies over the canvas until Done or Cancel.\n */\nimport React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n Alert,\n KeyboardAvoidingView,\n Platform,\n StyleSheet,\n Text,\n TextInput,\n useWindowDimensions,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { themedStyles, useCanvasTheme, type CanvasPalette } from '../canvas/canvasTheme';\nimport { Pressable, RADIUS, SPACE, TYPE, pressedStyle } from '../canvas/canvasUi';\nimport type { DesignCatalogCard } from '../canvas/designCatalog';\nimport type { LoadDesignCatalog } from '../canvas/DesignCategoryGallery';\nimport { useSafeInsets } from '../canvas/withRemoteSafeArea';\nimport { paintPicture, picturesToPaint, type ConnectorDesign, type RunCarousel } from './doc/aiDesign';\nimport type { DesignArtifact, IndexOptions } from './doc/artifacts';\nimport {\n currentPage,\n editorReducer,\n initEditorState,\n makeChartLayer,\n makeImageLayer,\n makeShapeLayer,\n makeStickerLayer,\n makeTextBox,\n makeTextLayer,\n selectedLayer,\n type TextPreset,\n} from './doc/docOps';\nimport { qrMatrix, qrPath, type QrStyle } from './doc/qr';\nimport { catalogKind, catalogToDoc, templatePagesFor, type DesignTemplate } from './doc/newDoc';\nimport { resizeDocPatch } from './doc/resize';\nimport { copyStyle, pasteStylePatch, type CopiedStyle } from './doc/copyStyle';\nimport { snapAspect, type DesignSize } from './doc/sizes';\nimport { rebaseRuns } from './doc/textLayout';\nimport {\n designTitle,\n newLayerId,\n type BrandKit,\n type DesignDoc,\n type DesignKind,\n type DesignPage,\n type EditorLayer,\n type ImageLayer,\n type TextLayer,\n} from './doc/types';\nimport { exportDesign, writePngToCache } from './export/exportDesign';\nimport { AiPanel } from './editor/AiPanel';\nimport { CropOverlay } from './editor/CropOverlay';\nimport { DesignCanvas } from './editor/DesignCanvas';\nimport { EditorSheet } from './editor/controls';\nimport { ExportSheet, type ExportChoice } from './editor/ExportSheet';\nimport { FindReplacePanel } from './editor/FindReplacePanel';\nimport { LayerToolPanel, SelectionToolbar, toolTitle, type LayerTool } from './editor/LayerTools';\nimport { PageStrip, chooseAction } from './editor/PageStrip';\nimport { Slideshow } from './editor/Slideshow';\nimport { PageCapture, type PageCaptureHandle } from './render/PageCapture';\nimport {\n AssetsPanel,\n BrandPanel,\n DOCK_TOOLS,\n DetailsPanel,\n ElementsPanel,\n TemplatesPanel,\n TextPanel,\n type DockTool,\n} from './editor/ToolPanels';\nimport { useDesignSave, type SaveStatus } from './editor/useDesignSave';\n\n/** A picked picture, hosted, with its pixel size when the picker knows it. */\nexport interface PickedImage {\n src: string;\n width?: number;\n height?: number;\n}\n\nexport interface DesignEditorExperienceProps {\n doc: DesignDoc;\n kind: DesignKind;\n /** The row this design was opened from. */\n opened?: DesignArtifact | null;\n index: IndexOptions | null;\n sessionId?: string;\n loadCatalog?: LoadDesignCatalog;\n /** Read a template's full pages (the Templates tool). */\n readTemplate?: (id: string) => Promise<DesignTemplate | null>;\n /** Pick a picture from the device and host it; null when the person cancels. */\n pickImage?: () => Promise<PickedImage | null>;\n /** Host a file the editor made (a QR code, an AI picture); resolves to its URL. */\n uploadFile?: (localUri: string) => Promise<string>;\n /** The `yantra-carousel` connector (the AI tool); absent hides what needs it. */\n runCarousel?: RunCarousel;\n onClose: () => void;\n /**\n * Pad for the status bar. Off by default: inside Canvas the host screen's\n * header already sits above the studio, and padding again left a blank band.\n */\n padTopInset?: boolean;\n}\n\n/** Sheets the top bar's More opens. */\ntype ExtraSheet = 'export' | 'find';\n\nconst DOCK_H = 64;\n\nfunction statusLabel(status: SaveStatus, dirty: boolean, stored: boolean): string {\n if (status === 'saving') return 'Saving…';\n if (status === 'offline') return 'Not signed in';\n // Nothing is written until Save: say plainly what is and is not stored.\n if (dirty) return stored ? 'Unsaved changes' : 'Not saved';\n switch (status) {\n case 'saved':\n return 'Saved';\n case 'error':\n return 'Not saved';\n default:\n return '';\n }\n}\n\nexport function DesignEditorExperience({\n padTopInset = false,\n doc: initialDoc,\n kind,\n opened,\n index,\n sessionId,\n loadCatalog,\n readTemplate,\n pickImage,\n uploadFile,\n runCarousel,\n onClose,\n}: DesignEditorExperienceProps) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const insets = useSafeInsets();\n const { width, height } = useWindowDimensions();\n const [state, dispatch] = useReducer(editorReducer, initialDoc, initEditorState);\n const { doc } = state;\n const page = currentPage(state) ?? doc.pages[0];\n const layer = selectedLayer(state) ?? null;\n const save = useDesignSave({ doc, index, kind, opened, sessionId });\n\n const [dockTool, setDockTool] = useState<DockTool | null>(null);\n /** The look Copy style took; Paste style puts it on another layer. */\n const [styleClip, setStyleClip] = useState<CopiedStyle | null>(null);\n const [layerTool, setLayerTool] = useState<LayerTool | null>(null);\n const [editingTextId, setEditingTextId] = useState<string | null>(null);\n const [busy, setBusy] = useState<string | null>(null);\n const [extra, setExtra] = useState<ExtraSheet | null>(null);\n const [exporting, setExporting] = useState<string | null>(null);\n const [cropping, setCropping] = useState<string | null>(null);\n const [presenting, setPresenting] = useState(false);\n const capture = useRef<PageCaptureHandle>(null);\n // Async work (painting AI pictures) reads the newest document, not the one it started with.\n const stateRef = useRef(state);\n stateRef.current = state;\n const mounted = useRef(true);\n useEffect(\n () => () => {\n mounted.current = false;\n },\n [],\n );\n const pageIndex = Math.max(\n 0,\n doc.pages.findIndex((p) => p.id === page.id),\n );\n\n const sheetH = Math.round(Math.min(height * 0.46, 420));\n\n const select = useCallback((layerId: string | null) => {\n dispatch({ type: 'select', layerId });\n setLayerTool(null);\n if (layerId) {\n setDockTool(null);\n setExtra(null);\n }\n }, []);\n\n const patch = useCallback(\n (layerId: string, p: Partial<EditorLayer>, coalesce?: string) =>\n dispatch({ type: 'patchLayer', pageId: page.id, layerId, patch: p, coalesce }),\n [page.id],\n );\n\n const addLayer = useCallback(\n (l: EditorLayer) => {\n dispatch({ type: 'addLayer', pageId: page.id, layer: l });\n setDockTool(null);\n },\n [page.id],\n );\n\n const close = useCallback(() => {\n setEditingTextId(null);\n if (!save.dirty) {\n onClose();\n return;\n }\n // Leaving with unsaved work: ask, as any editor does, rather than save or drop it silently.\n Alert.alert(\n save.artifactId ? 'Save your changes?' : 'Save this design?',\n save.artifactId\n ? 'Your changes are not saved yet.'\n : 'It is not in your designs yet. Save it to keep it, or discard it.',\n [\n { text: 'Cancel', style: 'cancel' },\n { text: 'Discard', style: 'destructive', onPress: onClose },\n {\n text: 'Save',\n onPress: () => {\n void save.save().then((ok) => {\n if (ok) onClose();\n });\n },\n },\n ],\n );\n }, [save, onClose]);\n\n // ── Pictures ──────────────────────────────────────────────────────────\n const placePicture = useCallback(\n (picked: PickedImage) => {\n if (layer?.kind === 'image' && !layer.locked) {\n // Replace keeps the frame; the old crop belonged to the old picture.\n patch(layer.id, { src: picked.src, crop: undefined, imageStatus: 'ready', uploaded: true });\n setDockTool(null);\n return;\n }\n const size = picked.width && picked.height ? { width: picked.width, height: picked.height } : null;\n addLayer(makeImageLayer(picked.src, doc.pageWidth, doc.pageHeight, size));\n },\n [layer, patch, addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n const pickAndPlace = useCallback(async () => {\n if (!pickImage) return;\n setBusy('Uploading photo…');\n try {\n const picked = await pickImage();\n if (picked) placePicture(picked);\n } catch (err) {\n Alert.alert('Could not add the photo', err instanceof Error ? err.message : 'Try again.');\n } finally {\n setBusy(null);\n }\n }, [pickImage, placePicture]);\n\n const setBrandKit = useCallback((kit: BrandKit) => dispatch({ type: 'patchDoc', patch: { brandKit: kit } }), []);\n\n const addLogo = useCallback(async () => {\n if (!pickImage) return;\n setBusy('Uploading logo…');\n try {\n const picked = await pickImage();\n if (picked) {\n const kit = doc.brandKit ?? {\n colors: [],\n fonts: doc.fontPair ?? { display: 'Inter', body: 'Inter' },\n logos: [],\n };\n setBrandKit({ ...kit, logos: [...kit.logos.filter((l) => l !== picked.src), picked.src] });\n }\n } catch (err) {\n Alert.alert('Could not add the logo', err instanceof Error ? err.message : 'Try again.');\n } finally {\n setBusy(null);\n }\n }, [pickImage, doc.brandKit, doc.fontPair, setBrandKit]);\n\n // ── Templates ─────────────────────────────────────────────────────────\n const applyTemplate = useCallback(\n async (card: DesignCatalogCard) => {\n if (!readTemplate) return;\n setBusy('Opening template…');\n let template: DesignTemplate | null = null;\n try {\n template = await readTemplate(card.id);\n } catch {\n template = null;\n } finally {\n setBusy(null);\n }\n if (!template) {\n Alert.alert('Template unavailable', 'That template could not be opened. Try another.');\n return;\n }\n const t = template;\n const empty = doc.pages.every((p) => !p.layers?.length && p.background?.kind !== 'image');\n const replace = () => {\n const next = catalogToDoc(t);\n save.setKind(catalogKind(t));\n dispatch({\n type: 'replaceDoc',\n doc: { ...next, ...(doc.title ? { title: doc.title } : {}), brandKit: doc.brandKit },\n });\n setDockTool(null);\n };\n const addPages = () => {\n dispatch({ type: 'insertPages', afterId: page.id, pages: templatePagesFor(t) });\n setDockTool(null);\n };\n if (empty) {\n replace();\n return;\n }\n Alert.alert(t.title, 'Use this template for the whole design, or add its pages after this one?', [\n { text: 'Add pages', onPress: addPages },\n { text: 'Replace design', style: 'destructive', onPress: replace },\n { text: 'Cancel', style: 'cancel' },\n ]);\n },\n [readTemplate, doc, page.id, save],\n );\n\n // ── Details ───────────────────────────────────────────────────────────\n const resize = useCallback(\n (size: DesignSize) =>\n dispatch({\n type: 'patchDoc',\n // Layers re-anchor instead of stretching; a screen size keeps bleed and safe area (web SET_DOC_SIZE).\n patch: resizeDocPatch(\n doc,\n size.width,\n size.height,\n snapAspect(size.width, size.height),\n size.trimMm ?? null,\n ),\n }),\n [doc],\n );\n\n // ── AI ────────────────────────────────────────────────────────────────\n /** A file the editor made, hosted; a data URL when there is no uploader (it still saves and opens). */\n const hostBytes = useCallback(\n async (b64: string, mime: string, stem: string): Promise<string> => {\n if (!uploadFile) return `data:${mime};base64,${b64}`;\n const ext = mime.includes('jpeg') ? 'jpg' : mime.includes('webp') ? 'webp' : 'png';\n return uploadFile(await writePngToCache(`${stem}-${Date.now()}.${ext}`, b64));\n },\n [uploadFile],\n );\n\n /** Paint one AI picture from its prompt now (web regenerateLayerImage): a remake, or a retry. */\n const paintLayer = useCallback(\n async (pageId: string, layerId: string) => {\n if (!runCarousel) return;\n const pages = stateRef.current.doc.pages;\n const at = pages.findIndex((p) => p.id === pageId);\n const target = pages[at]?.layers?.find((l) => l.id === layerId);\n if (target?.kind !== 'image' || !target.prompt?.trim()) return;\n const mark = (patch: Partial<EditorLayer>) =>\n dispatch({ type: 'patchLayer', silent: true, pageId, layerId, patch });\n mark({ imageStatus: 'generating' } as Partial<EditorLayer>);\n try {\n const pic = await paintPicture(runCarousel, {\n prompt: target.prompt,\n pageIndex: at + 1,\n totalPages: pages.length,\n aspectRatio: stateRef.current.doc.aspectRatio,\n });\n const src = pic.url ?? (await hostBytes(pic.dataBase64 ?? '', pic.mimeType, 'ai-picture'));\n if (mounted.current) mark({ imageStatus: 'ready', src } as Partial<EditorLayer>);\n } catch {\n if (mounted.current) mark({ imageStatus: 'error' } as Partial<EditorLayer>);\n }\n },\n [runCarousel, hostBytes],\n );\n\n /** Paint every picture a page still lacks, one at a time; each lands without its own undo step. */\n const paintPage = useCallback(\n async (pageId: string) => {\n if (!runCarousel) return;\n const find = () => stateRef.current.doc.pages.find((p) => p.id === pageId);\n const start = find();\n if (!start) return;\n for (const job of picturesToPaint(start)) {\n if (!mounted.current) return;\n const now = find();\n if (!now) return;\n const pages = stateRef.current.doc.pages;\n const at = pages.findIndex((p) => p.id === pageId);\n const prompt = job.target === 'background' ? (now.background?.imagePrompt ?? '') : job.prompt;\n const mark = (status: 'generating' | 'error' | 'ready', src?: string) => {\n const cur = find();\n if (!cur) return;\n if (job.target === 'background') {\n dispatch({\n type: 'replacePage',\n silent: true,\n page: {\n ...cur,\n background: {\n ...(cur.background ?? { kind: 'image' }),\n imageStatus: status,\n ...(src ? { src } : {}),\n },\n },\n });\n } else {\n dispatch({\n type: 'patchLayer',\n silent: true,\n pageId,\n layerId: job.layerId,\n patch: {\n imageStatus: status,\n // Painted from its prompt, not uploaded: web keeps offering Regenerate for it.\n ...(src ? { src } : {}),\n } as Partial<EditorLayer>,\n });\n }\n };\n mark('generating');\n try {\n const pic = await paintPicture(runCarousel, {\n prompt,\n pageIndex: at + 1,\n totalPages: pages.length,\n aspectRatio: stateRef.current.doc.aspectRatio,\n });\n const src = pic.url ?? (await hostBytes(pic.dataBase64 ?? '', pic.mimeType, 'ai-picture'));\n mark('ready', src);\n } catch {\n mark('error');\n }\n }\n },\n [runCarousel, hostBytes],\n );\n\n const onAiCreated = useCallback(\n (pages: DesignPage[], design: ConnectorDesign) => {\n const current = stateRef.current.doc;\n const empty = current.pages.every((p) => !p.layers?.length && p.background?.kind !== 'image');\n if (empty) {\n dispatch({ type: 'patchDoc', patch: { pages, palette: design.palette, fontPair: design.fontPair } });\n dispatch({ type: 'select', pageId: pages[0].id, layerId: null });\n } else {\n dispatch({ type: 'insertPages', afterId: page.id, pages });\n }\n setDockTool(null);\n void (async () => {\n for (const p of pages) await paintPage(p.id);\n })();\n },\n [page.id, paintPage],\n );\n\n const onAiEdited = useCallback(\n (edited: DesignPage) => {\n dispatch({ type: 'replacePage', page: edited });\n setDockTool(null);\n void paintPage(edited.id);\n },\n [paintPage],\n );\n\n // ── Elements: stickers, frames, QR ────────────────────────────────────\n const addSticker = useCallback(\n (emoji: string) => addLayer(makeStickerLayer(emoji, doc.pageWidth, doc.pageHeight)),\n [addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n const applyFrame = useCallback(\n (d: string | undefined) => {\n if (layer?.kind === 'image' && !layer.locked) {\n patch(layer.id, { clipPath: d });\n return;\n }\n if (!d) return;\n // An empty frame, square on the page, waiting for Replace.\n const w = 0.4;\n const h = (w * doc.pageWidth) / doc.pageHeight;\n const frame: ImageLayer = {\n id: newLayerId(),\n kind: 'image',\n prompt: '',\n src: null,\n imageStatus: 'empty',\n replaceable: true,\n clipPath: d,\n x: (1 - w) / 2,\n y: (1 - h) / 2,\n w,\n h,\n };\n addLayer(frame);\n },\n [layer, patch, addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n const addQr = useCallback(\n async (text: string, style: QrStyle) => {\n if (!capture.current) throw new Error('The QR code could not be drawn.');\n let matrix;\n try {\n matrix = qrMatrix(text);\n } catch (err) {\n throw err instanceof Error && /newer version/.test(err.message)\n ? err\n : new Error('That is too long for a QR code.');\n }\n const side = matrix.size + style.margin * 2;\n const d = qrPath(matrix, style.margin);\n const png = await capture.current.captureSvg(\n (svg) => (\n <svg.G>\n <svg.Rect x={0} y={0} width={side} height={side} fill={style.background} />\n <svg.Path d={d} fill={style.foreground} />\n </svg.G>\n ),\n side,\n side,\n 1200,\n );\n const src = await hostBytes(png, 'image/png', 'qr-code');\n // Square on the page: image layers stretch to their box, and pages are rarely square.\n const w = 0.3;\n const h = (w * doc.pageWidth) / doc.pageHeight;\n addLayer({\n ...makeImageLayer(src, doc.pageWidth, doc.pageHeight, null),\n x: (1 - w) / 2,\n y: (1 - h) / 2,\n w,\n h,\n });\n },\n [hostBytes, addLayer, doc.pageWidth, doc.pageHeight],\n );\n\n // ── Export ────────────────────────────────────────────────────────────\n const runExport = useCallback(\n async (choice: ExportChoice) => {\n const cap = capture.current;\n if (!cap) return;\n setExporting('Preparing…');\n try {\n const result = await exportDesign({\n doc,\n pages: choice.pageIndices.map((i) => doc.pages[i]).filter(Boolean),\n format: choice.format,\n scale: choice.scale,\n transparent: choice.transparent,\n capture: (pg, px, opts) => cap.capture(pg, px, opts),\n onProgress: (label) => mounted.current && setExporting(label),\n });\n if (result !== 'cancelled' && mounted.current) setExtra(null);\n } catch (err) {\n Alert.alert('Could not download', err instanceof Error ? err.message : 'Try again.');\n } finally {\n if (mounted.current) setExporting(null);\n }\n },\n [doc],\n );\n\n const openMore = useCallback(() => {\n setEditingTextId(null);\n chooseAction<'export' | 'present' | 'find'>(\n 'Design',\n [\n { id: 'export', label: 'Download' },\n { id: 'present', label: 'Present' },\n { id: 'find', label: 'Find and replace' },\n ],\n (id) => {\n setDockTool(null);\n setLayerTool(null);\n if (id === 'present') setPresenting(true);\n else setExtra(id);\n },\n );\n }, []);\n\n // ── Text editing ──────────────────────────────────────────────────────\n const editing = editingTextId\n ? (page.layers?.find((l) => l.id === editingTextId && l.kind === 'text') as TextLayer | undefined)\n : undefined;\n\n const openTool = useCallback((tool: LayerTool) => {\n setLayerTool((prev) => (prev === tool ? null : tool));\n setDockTool(null);\n setExtra(null);\n }, []);\n\n const cropLayer = cropping\n ? (page.layers?.find((l) => l.id === cropping && l.kind === 'image') as ImageLayer | undefined)\n : undefined;\n\n const sheet = (() => {\n if (editing) {\n return (\n <View style={styles.textSheet}>\n <TextInput\n value={editing.content}\n onChangeText={(content) =>\n patch(\n editing.id,\n {\n content,\n ...(editing.runs\n ? { runs: rebaseRuns(editing.content, content, editing.runs) }\n : {}),\n },\n `text:${editing.id}`,\n )\n }\n multiline\n autoFocus\n style={styles.textInput}\n placeholder=\"Type your text\"\n placeholderTextColor={theme.edInk3}\n />\n <Pressable\n onPress={() => setEditingTextId(null)}\n style={styles.doneButton}\n accessibilityRole=\"button\"\n >\n <Text style={styles.doneLabel}>Done</Text>\n </Pressable>\n </View>\n );\n }\n if (layerTool) {\n return (\n <EditorSheet title={toolTitle(layerTool)} onClose={() => setLayerTool(null)} height={sheetH}>\n <LayerToolPanel\n tool={layerTool}\n doc={doc}\n page={page}\n layer={layer}\n patch={(p, coalesce) => layer && patch(layer.id, p, coalesce)}\n arrange={(move) =>\n layer && dispatch({ type: 'reorderLayer', pageId: page.id, layerId: layer.id, move })\n }\n paintImage={runCarousel && layer ? () => void paintLayer(page.id, layer.id) : undefined}\n setBackground={(background, coalesce) =>\n dispatch({\n type: 'setBackground',\n pageId: page.id,\n background,\n coalesce: coalesce ? `bg:${page.id}` : undefined,\n })\n }\n />\n </EditorSheet>\n );\n }\n if (extra) {\n return (\n <EditorSheet\n title={extra === 'export' ? 'Download' : 'Find and replace'}\n onClose={() => setExtra(null)}\n height={sheetH}\n >\n {extra === 'export' ? (\n <ExportSheet\n doc={doc}\n pageIndex={pageIndex}\n busy={exporting}\n onExport={(c) => void runExport(c)}\n />\n ) : (\n <FindReplacePanel\n doc={doc}\n onReveal={(pageId, layerId) => dispatch({ type: 'select', pageId, layerId })}\n onReplace={(next) => dispatch({ type: 'patchDoc', patch: { pages: next.pages } })}\n />\n )}\n </EditorSheet>\n );\n }\n if (dockTool) {\n const title = DOCK_TOOLS.find((t) => t.id === dockTool)?.label ?? '';\n return (\n <EditorSheet title={title} onClose={() => setDockTool(null)} height={sheetH}>\n {dockTool === 'ai' ? (\n <AiPanel\n doc={doc}\n page={page}\n pageIndex={pageIndex}\n run={runCarousel}\n onCreated={onAiCreated}\n onEdited={onAiEdited}\n />\n ) : dockTool === 'templates' ? (\n <TemplatesPanel\n doc={doc}\n load={loadCatalog}\n onPick={(card) => void applyTemplate(card)}\n width={width}\n />\n ) : dockTool === 'elements' ? (\n <ElementsPanel\n onShape={(shape) => addLayer(makeShapeLayer(shape, doc.palette))}\n onChart={(chart) => addLayer(makeChartLayer(chart, doc.palette))}\n onPhoto={pickImage ? () => void pickAndPlace() : undefined}\n onSticker={addSticker}\n onFrame={applyFrame}\n frameCurrent={layer?.kind === 'image' ? layer.clipPath : undefined}\n onQr={addQr}\n />\n ) : dockTool === 'text' ? (\n <TextPanel\n doc={doc}\n onTextBox={() => {\n const fonts = doc.brandKit?.fonts;\n const text = makeTextBox();\n addLayer(fonts ? { ...text, fontFamily: fonts[text.fontToken] } : text);\n }}\n onAdd={(preset: TextPreset) => {\n const fonts = doc.brandKit?.fonts;\n const text = makeTextLayer(preset);\n addLayer(fonts ? { ...text, fontFamily: fonts[text.fontToken] } : text);\n }}\n />\n ) : dockTool === 'brand' ? (\n <BrandPanel\n doc={doc}\n onBrandKit={setBrandKit}\n onPlaceLogo={(src) => placePicture({ src })}\n onAddLogo={pickImage ? () => void addLogo() : undefined}\n />\n ) : dockTool === 'details' ? (\n <DetailsPanel\n doc={doc}\n page={page}\n onRename={(title) => dispatch({ type: 'patchDoc', patch: { title: title || undefined } })}\n onResize={resize}\n onPage={(p) =>\n dispatch({\n type: 'patchDoc',\n patch: { pages: doc.pages.map((pg) => (pg.id === page.id ? { ...pg, ...p } : pg)) },\n })\n }\n />\n ) : (\n <AssetsPanel\n doc={doc}\n width={width}\n onUpload={pickImage ? () => void pickAndPlace() : undefined}\n uploading={Boolean(busy)}\n onPlace={(src) => placePicture({ src })}\n replacing={layer?.kind === 'image'}\n />\n )}\n </EditorSheet>\n );\n }\n return null;\n })();\n\n const title = designTitle(doc) || 'Untitled design';\n return (\n <KeyboardAvoidingView\n style={[styles.root, padTopInset ? { paddingTop: insets.top } : null]}\n behavior={Platform.OS === 'ios' ? 'padding' : undefined}\n >\n <View style={styles.topBar}>\n <Pressable\n onPress={() => void close()}\n hitSlop={10}\n style={styles.topButton}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Back\"\n >\n <MaterialCommunityIcons name=\"chevron-left\" size={28} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => setDockTool('details')}\n style={styles.titleWrap}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Rename design\"\n >\n <Text style={styles.title} numberOfLines={1}>\n {title}\n </Text>\n <Text\n style={[styles.status, save.status === 'error' && { color: theme.edDanger }]}\n numberOfLines={1}\n >\n {save.status === 'error' && save.error\n ? save.error\n : statusLabel(save.status, save.dirty, Boolean(save.artifactId))}\n </Text>\n </Pressable>\n <Pressable\n onPress={() => dispatch({ type: 'undo' })}\n disabled={!state.past.length}\n hitSlop={8}\n style={[styles.topButton, !state.past.length && styles.disabled]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Undo\"\n >\n <MaterialCommunityIcons name=\"undo\" size={22} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => dispatch({ type: 'redo' })}\n disabled={!state.future.length}\n hitSlop={8}\n style={[styles.topButton, !state.future.length && styles.disabled]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Redo\"\n >\n <MaterialCommunityIcons name=\"redo\" size={22} color={theme.edInk} />\n </Pressable>\n {save.dirty ? (\n // Unsaved work: Save takes the download slot (Download stays in More until saved).\n <Pressable\n onPress={() => {\n setEditingTextId(null);\n void save.save();\n }}\n disabled={save.status === 'saving' || save.status === 'offline'}\n style={({ pressed }) => [\n styles.saveButton,\n (save.status === 'saving' || save.status === 'offline') && styles.disabled,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Save design\"\n testID=\"design-save\"\n >\n {save.status === 'saving' ? (\n <ActivityIndicator size=\"small\" color={theme.primaryForeground} />\n ) : (\n <Text style={styles.saveLabel}>Save</Text>\n )}\n </Pressable>\n ) : (\n <Pressable\n onPress={() => {\n setEditingTextId(null);\n setDockTool(null);\n setLayerTool(null);\n setExtra('export');\n }}\n hitSlop={8}\n style={styles.topButton}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Download\"\n >\n <MaterialCommunityIcons name=\"tray-arrow-down\" size={22} color={theme.edInk} />\n </Pressable>\n )}\n <Pressable\n onPress={openMore}\n hitSlop={8}\n style={styles.topButton}\n accessibilityRole=\"button\"\n accessibilityLabel=\"More\"\n >\n <MaterialCommunityIcons name=\"dots-horizontal\" size={22} color={theme.edInk} />\n </Pressable>\n </View>\n\n <View style={styles.canvasArea}>\n <DesignCanvas\n doc={doc}\n page={page}\n selectedId={state.layerId}\n editingId={editingTextId}\n onSelect={select}\n onPatch={(layerId, p, coalesce) => patch(layerId, p, coalesce)}\n onEditText={(layerId) => {\n setEditingTextId(layerId);\n setLayerTool(null);\n setDockTool(null);\n }}\n />\n {cropLayer ? (\n <CropOverlay\n doc={doc}\n layer={cropLayer}\n onCancel={() => setCropping(null)}\n onDone={(p) => {\n patch(cropLayer.id, p);\n setCropping(null);\n }}\n />\n ) : null}\n <PageCapture ref={capture} doc={doc} />\n {busy ? (\n <View pointerEvents=\"none\" style={styles.busy}>\n <ActivityIndicator color=\"#fff\" />\n <Text style={styles.busyLabel}>{busy}</Text>\n </View>\n ) : null}\n </View>\n\n {presenting ? <Slideshow doc={doc} startIndex={pageIndex} onClose={() => setPresenting(false)} /> : null}\n {cropLayer ? (\n <View style={{ height: insets.bottom }} />\n ) : sheet ? (\n <View style={{ height: editing ? undefined : sheetH }}>{sheet}</View>\n ) : (\n <View style={{ paddingBottom: insets.bottom }}>\n <SelectionToolbar\n doc={doc}\n page={page}\n layer={layer}\n tool={layerTool}\n layerActions={{\n patch: (p, coalesce) => layer && patch(layer.id, p, coalesce),\n duplicate: () =>\n layer && dispatch({ type: 'duplicateLayer', pageId: page.id, layerId: layer.id }),\n remove: () =>\n layer && dispatch({ type: 'deleteLayer', pageId: page.id, layerId: layer.id }),\n arrange: (move) =>\n layer && dispatch({ type: 'reorderLayer', pageId: page.id, layerId: layer.id, move }),\n editText: () => layer && setEditingTextId(layer.id),\n replaceImage: () => (pickImage ? void pickAndPlace() : setDockTool('assets')),\n openTool,\n crop: () => {\n if (layer?.kind === 'image' && layer.src) {\n setLayerTool(null);\n setCropping(layer.id);\n }\n },\n copyStyle: () => layer && setStyleClip(copyStyle(layer)),\n ...(runCarousel ? { paintImage: () => layer && void paintLayer(page.id, layer.id) } : {}),\n ...(styleClip\n ? { pasteStyle: () => layer && patch(layer.id, pasteStylePatch(styleClip, layer)) }\n : {}),\n }}\n pageActions={{\n openTool,\n addPage: () => dispatch({ type: 'addPage', afterId: page.id }),\n duplicatePage: () => dispatch({ type: 'duplicatePage', pageId: page.id }),\n deletePage: () => dispatch({ type: 'deletePage', pageId: page.id }),\n }}\n />\n <PageStrip\n doc={doc}\n pageId={page.id}\n onSelect={(pageId) => {\n dispatch({ type: 'select', pageId, layerId: null });\n setLayerTool(null);\n }}\n onAdd={() => dispatch({ type: 'addPage', afterId: page.id })}\n onAction={(pageId, action) => {\n if (action === 'duplicate') dispatch({ type: 'duplicatePage', pageId });\n else if (action === 'delete') dispatch({ type: 'deletePage', pageId });\n else dispatch({ type: 'movePage', pageId, dir: action === 'left' ? -1 : 1 });\n }}\n onMove={(pageId, to) => dispatch({ type: 'movePageTo', pageId, index: to })}\n />\n <View style={styles.dock}>\n {DOCK_TOOLS.map((tool) => (\n <Pressable\n key={tool.id}\n onPress={() => {\n setDockTool(tool.id);\n setLayerTool(null);\n setExtra(null);\n }}\n style={styles.dockItem}\n accessibilityRole=\"button\"\n accessibilityLabel={tool.label}\n >\n <MaterialCommunityIcons name={tool.icon} size={22} color={theme.edInk2} />\n <Text style={styles.dockLabel}>{tool.label}</Text>\n </Pressable>\n ))}\n </View>\n </View>\n )}\n </KeyboardAvoidingView>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.edBg },\n topBar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n paddingHorizontal: SPACE.sm,\n // The shared studio and editor bar: 44pt on phones, 36pt controls.\n height: 44,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderColor: theme.edLine,\n backgroundColor: theme.edPanel,\n },\n topButton: { width: 36, height: 36, alignItems: 'center', justifyContent: 'center' },\n saveButton: {\n minWidth: 64,\n height: 36,\n paddingHorizontal: SPACE.md + 2,\n marginHorizontal: SPACE.xs,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primary,\n },\n saveLabel: { ...TYPE.label, fontSize: 14, color: theme.primaryForeground },\n disabled: { opacity: 0.3 },\n titleWrap: { flex: 1, paddingHorizontal: SPACE.xs },\n title: { ...TYPE.title, color: theme.edInk },\n status: { ...TYPE.caption, color: theme.edInk3 },\n canvasArea: { flex: 1, backgroundColor: theme.edWell },\n busy: {\n position: 'absolute',\n alignSelf: 'center',\n top: SPACE.lg,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.sm,\n borderRadius: RADIUS.pill,\n backgroundColor: 'rgba(15,23,42,0.86)',\n },\n busyLabel: { ...TYPE.label, color: '#fff' },\n dock: {\n flexDirection: 'row',\n height: DOCK_H,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderColor: theme.edLine,\n backgroundColor: theme.edPanel,\n },\n dockItem: { flex: 1, alignItems: 'center', justifyContent: 'center', gap: 2 },\n dockLabel: { ...TYPE.caption, fontSize: 10, color: theme.edInk2 },\n textSheet: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n gap: SPACE.sm,\n padding: SPACE.md,\n backgroundColor: theme.edPanel,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderColor: theme.edLine,\n },\n textInput: {\n flex: 1,\n minHeight: 44,\n maxHeight: 140,\n borderRadius: RADIUS.md,\n paddingHorizontal: SPACE.md,\n paddingTop: SPACE.sm,\n paddingBottom: SPACE.sm,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n ...TYPE.body,\n },\n doneButton: {\n height: 44,\n paddingHorizontal: SPACE.lg,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edAccent,\n alignItems: 'center',\n justifyContent: 'center',\n },\n doneLabel: { ...TYPE.label, color: theme.edOnInk },\n }),\n);\n"],"names":["_a","_b","_c","_d","patch","title"],"mappings":"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"}
|