@adminide-stack/yantra-mobile 12.0.131 → 12.0.132-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/lib/components/CustomDrawer.js +2 -2
  2. package/lib/components/CustomDrawer.js.map +1 -1
  3. package/lib/features/apps/AppsCatalog.js +7 -1
  4. package/lib/features/apps/AppsCatalog.js.map +1 -1
  5. package/lib/features/apps/nativeSurfaceTwin.js +35 -0
  6. package/lib/features/apps/nativeSurfaceTwin.js.map +1 -0
  7. package/lib/features/canvas/CanvasBoardsGrid.js +49 -49
  8. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  9. package/lib/features/canvas/CanvasExperience.js +69 -28
  10. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  11. package/lib/features/canvas/audioEditor/AudioWaveform.js +1 -1
  12. package/lib/features/canvas/designCatalog.js +63 -39
  13. package/lib/features/canvas/designCatalog.js.map +1 -1
  14. package/lib/features/canvas/designCategories.js +56 -0
  15. package/lib/features/canvas/designCategories.js.map +1 -1
  16. package/lib/features/canvas/generator/DirectorSheet.js +3 -2
  17. package/lib/features/canvas/generator/DirectorSheet.js.map +1 -1
  18. package/lib/features/canvas/home/HeroComposer.js +165 -76
  19. package/lib/features/canvas/home/HeroComposer.js.map +1 -1
  20. package/lib/features/canvas/home/HeroMonitor.js +75 -46
  21. package/lib/features/canvas/home/HeroMonitor.js.map +1 -1
  22. package/lib/features/canvas/home/TemplatesGallery.js +273 -138
  23. package/lib/features/canvas/home/TemplatesGallery.js.map +1 -1
  24. package/lib/features/canvas/home/templatesGallerySources.js +221 -0
  25. package/lib/features/canvas/home/templatesGallerySources.js.map +1 -0
  26. package/lib/features/canvas/homeWork.js +12 -11
  27. package/lib/features/canvas/homeWork.js.map +1 -1
  28. package/lib/features/canvas/lazyEditors.js +51 -0
  29. package/lib/features/canvas/lazyEditors.js.map +1 -0
  30. package/lib/features/canvas/rankedCatalogSearch.js +33 -23
  31. package/lib/features/canvas/rankedCatalogSearch.js.map +1 -1
  32. package/lib/features/canvas/set/SetViewportWebView.js +1 -1
  33. package/lib/features/canvas/set/agent/tools.js +1 -1
  34. package/lib/features/canvas/studioCatalog.js +2 -2
  35. package/lib/features/canvas/studioCatalog.js.map +1 -1
  36. package/lib/features/canvas/templateSearch.js +8 -1
  37. package/lib/features/canvas/templateSearch.js.map +1 -1
  38. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +1 -1
  39. package/lib/features/design/DesignEditorExperience.js +103 -29
  40. package/lib/features/design/DesignEditorExperience.js.map +1 -1
  41. package/lib/features/design/DesignExperience.js +4 -3
  42. package/lib/features/design/DesignExperience.js.map +1 -1
  43. package/lib/features/design/doc/aiDesign.js +1 -1
  44. package/lib/features/design/doc/aiDesign.js.map +1 -1
  45. package/lib/features/design/doc/artifacts.js +40 -13
  46. package/lib/features/design/doc/artifacts.js.map +1 -1
  47. package/lib/features/design/doc/chart.js +387 -13
  48. package/lib/features/design/doc/chart.js.map +1 -1
  49. package/lib/features/design/doc/copyStyle.js +47 -0
  50. package/lib/features/design/doc/copyStyle.js.map +1 -0
  51. package/lib/features/design/doc/docOps.js +22 -4
  52. package/lib/features/design/doc/docOps.js.map +1 -1
  53. package/lib/features/design/doc/geometry.js +32 -18
  54. package/lib/features/design/doc/geometry.js.map +1 -1
  55. package/lib/features/design/doc/newDoc.js +5 -1
  56. package/lib/features/design/doc/newDoc.js.map +1 -1
  57. package/lib/features/design/doc/resize.js +101 -0
  58. package/lib/features/design/doc/resize.js.map +1 -0
  59. package/lib/features/design/doc/sizes.js +15 -2
  60. package/lib/features/design/doc/sizes.js.map +1 -1
  61. package/lib/features/design/editor/ChartDataPanel.js +49 -9
  62. package/lib/features/design/editor/ChartDataPanel.js.map +1 -1
  63. package/lib/features/design/editor/CropOverlay.js +1 -1
  64. package/lib/features/design/editor/DesignCanvas.js +14 -13
  65. package/lib/features/design/editor/DesignCanvas.js.map +1 -1
  66. package/lib/features/design/editor/ExportSheet.js +8 -4
  67. package/lib/features/design/editor/ExportSheet.js.map +1 -1
  68. package/lib/features/design/editor/LayerTools.js +37 -5
  69. package/lib/features/design/editor/LayerTools.js.map +1 -1
  70. package/lib/features/design/editor/Slideshow.js +30 -5
  71. package/lib/features/design/editor/Slideshow.js.map +1 -1
  72. package/lib/features/design/editor/useDesignSave.js +21 -36
  73. package/lib/features/design/editor/useDesignSave.js.map +1 -1
  74. package/lib/features/design/export/exportDesign.js +3 -1
  75. package/lib/features/design/export/exportDesign.js.map +1 -1
  76. package/lib/features/design/home/DesignHome.js +7 -2
  77. package/lib/features/design/home/DesignHome.js.map +1 -1
  78. package/lib/features/design/render/DesignPageView.js +1 -1
  79. package/lib/features/design/render/DesignPageView.js.map +1 -1
  80. package/lib/features/design/render/PageCapture.js +11 -10
  81. package/lib/features/design/render/PageCapture.js.map +1 -1
  82. package/lib/features/design/render/fontRegistry.js +27 -3
  83. package/lib/features/design/render/fontRegistry.js.map +1 -1
  84. package/lib/features/design/render/svgParts.js +27 -74
  85. package/lib/features/design/render/svgParts.js.map +1 -1
  86. package/lib/features/devices/brands/qnScale.js +7 -2
  87. package/lib/features/devices/brands/qnScale.js.map +1 -1
  88. package/lib/features/devices/brands/uuids.js +2 -1
  89. package/lib/features/devices/brands/uuids.js.map +1 -1
  90. package/lib/features/devices/devices.js +2 -1
  91. package/lib/features/devices/devices.js.map +1 -1
  92. package/lib/features/docs/DocBlockRow.js +1 -1
  93. package/lib/features/docs/docArtifacts.js +2 -2
  94. package/lib/features/docs/docArtifacts.js.map +1 -1
  95. package/lib/features/health/healthSync.js +3 -1
  96. package/lib/features/health/healthSync.js.map +1 -1
  97. package/lib/features/health/nativeHealth.js +8 -0
  98. package/lib/features/health/nativeHealth.js.map +1 -0
  99. package/lib/features/links/openInApp.js +11 -1
  100. package/lib/features/links/openInApp.js.map +1 -1
  101. package/lib/features/webbuilder/WebBuilderExperience.js +135 -28
  102. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  103. package/lib/features/webbuilder/buildFragments.js +14 -6
  104. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  105. package/lib/features/webbuilder/components/PreviewFrame.js +28 -3
  106. package/lib/features/webbuilder/components/PreviewFrame.js.map +1 -1
  107. package/lib/features/webbuilder/components/PreviewScreen.js +1 -1
  108. package/lib/features/webbuilder/components/PreviewScreen.js.map +1 -1
  109. package/lib/features/webbuilder/components/ProjectChat.js +24 -5
  110. package/lib/features/webbuilder/components/ProjectChat.js.map +1 -1
  111. package/lib/features/webbuilder/components/ProjectsScreen.js +18 -2
  112. package/lib/features/webbuilder/components/ProjectsScreen.js.map +1 -1
  113. package/lib/features/webbuilder/components/ui.js +20 -6
  114. package/lib/features/webbuilder/components/ui.js.map +1 -1
  115. package/lib/features/webbuilder/exportCode.js +52 -0
  116. package/lib/features/webbuilder/exportCode.js.map +1 -0
  117. package/lib/features/webbuilder/siteAddress.js +71 -0
  118. package/lib/features/webbuilder/siteAddress.js.map +1 -0
  119. package/lib/features/webbuilder/widgetBlocks.js +30 -0
  120. package/lib/features/webbuilder/widgetBlocks.js.map +1 -0
  121. package/lib/screens/Chat/index.js +5 -6
  122. package/lib/screens/Chat/index.js.map +1 -1
  123. package/lib/screens/ChatHistory/index.js +3 -2
  124. package/lib/screens/ChatHistory/index.js.map +1 -1
  125. package/lib/screens/Home/HomeScreen.js +20 -4
  126. package/lib/screens/Home/HomeScreen.js.map +1 -1
  127. package/lib/screens/Home/components/WebBuilderCodePrewarm.js +18 -0
  128. package/lib/screens/Home/components/WebBuilderCodePrewarm.js.map +1 -0
  129. package/lib/screens/WebBuilderNative/index.js +1 -1
  130. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  131. package/lib/screens/WebBuilderNative/keepAlive.js +112 -0
  132. package/lib/screens/WebBuilderNative/keepAlive.js.map +1 -0
  133. package/lib/screens/WebBuilderNative/runningBuilds.js +40 -0
  134. package/lib/screens/WebBuilderNative/runningBuilds.js.map +1 -0
  135. package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js +57 -0
  136. package/lib/screens/WebBuilderNative/useSandboxKeepAlive.js.map +1 -0
  137. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js +73 -14
  138. package/lib/screens/WebBuilderNative/useWebBuilderGallery.js.map +1 -1
  139. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +143 -34
  140. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  141. package/lib/screens/WebBuilderNative/useWebBuilderJobs.js +17 -5
  142. package/lib/screens/WebBuilderNative/useWebBuilderJobs.js.map +1 -1
  143. package/lib/screens/WebBuilderNative/versionUndo.js +144 -0
  144. package/lib/screens/WebBuilderNative/versionUndo.js.map +1 -0
  145. package/lib/screens/WebBuilderNative/webbuilderSnapshotKey.js +1 -0
  146. package/lib/screens/WebBuilderNative/webbuilderSnapshotKey.js.map +1 -0
  147. package/lib/screens/WebBuilderNative/webbuilderTransport.js +90 -6
  148. package/lib/screens/WebBuilderNative/webbuilderTransport.js.map +1 -1
  149. 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,paintPicture}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 {defaultPrintSpec,catalogToDoc,catalogKind,templatePagesFor}from'./doc/newDoc.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;
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(async () => {
113
+ const close = useCallback(() => {
113
114
  setEditingTextId(null);
114
- await save.flush();
115
- onClose();
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
- patch: {
239
- pageWidth: size.width,
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.print]);
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
- capture: (pg, px) => cap.capture(pg, px),
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
- /* @__PURE__ */ jsx(Pressable, { onPress: () => {
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
- }, pageActions: {
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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"}