@adminide-stack/yantra-mobile 12.0.129-alpha.0 → 12.0.129-alpha.1

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 (360) hide show
  1. package/lib/compute.js +57 -1
  2. package/lib/compute.js.map +1 -1
  3. package/lib/features/agent-chat/NativeAgentChat.js +3 -2
  4. package/lib/features/agent-chat/NativeAgentChat.js.map +1 -1
  5. package/lib/features/apps/AppsCatalog.js +10 -0
  6. package/lib/features/apps/AppsCatalog.js.map +1 -1
  7. package/lib/features/apps/mobileAppCatalog.js +11 -0
  8. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  9. package/lib/features/canvas/AudioEditorExperience.js +448 -105
  10. package/lib/features/canvas/AudioEditorExperience.js.map +1 -1
  11. package/lib/features/canvas/CanvasAgentChatPane.js +33 -14
  12. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
  13. package/lib/features/canvas/CanvasBoardsGrid.js +493 -41
  14. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  15. package/lib/features/canvas/CanvasChatResultCard.js.map +1 -1
  16. package/lib/features/canvas/CanvasEditToolsPanel.js +37 -1
  17. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
  18. package/lib/features/canvas/CanvasExperience.js +237 -22
  19. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  20. package/lib/features/canvas/CanvasGeneratePanel.js +119 -26
  21. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
  22. package/lib/features/canvas/CanvasLooksPanel.js +17 -6
  23. package/lib/features/canvas/CanvasLooksPanel.js.map +1 -1
  24. package/lib/features/canvas/CanvasTasksPanel.js +18 -1
  25. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
  26. package/lib/features/canvas/DesignCategoryGallery.js +423 -0
  27. package/lib/features/canvas/DesignCategoryGallery.js.map +1 -0
  28. package/lib/features/canvas/ImageEditorExperience.js +763 -187
  29. package/lib/features/canvas/ImageEditorExperience.js.map +1 -1
  30. package/lib/features/canvas/SetStudioExperience.js +199 -11
  31. package/lib/features/canvas/SetStudioExperience.js.map +1 -1
  32. package/lib/features/canvas/VideoEditorExperience.js +59 -40
  33. package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
  34. package/lib/features/canvas/VideoGeneratorExperience.js +134 -34
  35. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
  36. package/lib/features/canvas/aiEdit.js +4 -2
  37. package/lib/features/canvas/aiEdit.js.map +1 -1
  38. package/lib/features/canvas/audioEditor/AudioWaveform.js +96 -0
  39. package/lib/features/canvas/audioEditor/AudioWaveform.js.map +1 -0
  40. package/lib/features/canvas/audioEditor/audioPeaks.js +93 -0
  41. package/lib/features/canvas/audioEditor/audioPeaks.js.map +1 -0
  42. package/lib/features/canvas/canvasTaskSync.js +34 -7
  43. package/lib/features/canvas/canvasTaskSync.js.map +1 -1
  44. package/lib/features/canvas/canvasTasks.js +23 -3
  45. package/lib/features/canvas/canvasTasks.js.map +1 -1
  46. package/lib/features/canvas/canvasTheme.js +10 -24
  47. package/lib/features/canvas/canvasTheme.js.map +1 -1
  48. package/lib/features/canvas/canvasUi.js +1 -1
  49. package/lib/features/canvas/canvasUi.js.map +1 -1
  50. package/lib/features/canvas/createTiles.js +17 -9
  51. package/lib/features/canvas/createTiles.js.map +1 -1
  52. package/lib/features/canvas/deepLinks.js +35 -5
  53. package/lib/features/canvas/deepLinks.js.map +1 -1
  54. package/lib/features/canvas/designCatalog.js +165 -0
  55. package/lib/features/canvas/designCatalog.js.map +1 -0
  56. package/lib/features/canvas/designCategories.js +262 -0
  57. package/lib/features/canvas/designCategories.js.map +1 -0
  58. package/lib/features/canvas/editorControls.js +406 -0
  59. package/lib/features/canvas/editorControls.js.map +1 -0
  60. package/lib/features/canvas/generationModels.js +5 -3
  61. package/lib/features/canvas/generationModels.js.map +1 -1
  62. package/lib/features/canvas/generationTasks.js +162 -0
  63. package/lib/features/canvas/generationTasks.js.map +1 -0
  64. package/lib/features/canvas/generator/BottomSheet.js +167 -0
  65. package/lib/features/canvas/generator/BottomSheet.js.map +1 -0
  66. package/lib/features/canvas/generator/BusinessCardChatCard.js +155 -0
  67. package/lib/features/canvas/generator/BusinessCardChatCard.js.map +1 -0
  68. package/lib/features/canvas/generator/DirectorSheet.js +163 -0
  69. package/lib/features/canvas/generator/DirectorSheet.js.map +1 -0
  70. package/lib/features/canvas/generator/ReframePreview.js +122 -0
  71. package/lib/features/canvas/generator/ReframePreview.js.map +1 -0
  72. package/lib/features/canvas/generator/RunLogCard.js +119 -0
  73. package/lib/features/canvas/generator/RunLogCard.js.map +1 -0
  74. package/lib/features/canvas/generator/ShotPanel.js +261 -0
  75. package/lib/features/canvas/generator/ShotPanel.js.map +1 -0
  76. package/lib/features/canvas/generator/businessCardWidget.js +117 -0
  77. package/lib/features/canvas/generator/businessCardWidget.js.map +1 -0
  78. package/lib/features/canvas/generator/cameraVocabulary.js +142 -0
  79. package/lib/features/canvas/generator/cameraVocabulary.js.map +1 -0
  80. package/lib/features/canvas/generator/cinematicVocabulary.js +416 -0
  81. package/lib/features/canvas/generator/cinematicVocabulary.js.map +1 -0
  82. package/lib/features/canvas/generator/direction.js +41 -0
  83. package/lib/features/canvas/generator/direction.js.map +1 -0
  84. package/lib/features/canvas/generator/reframeGeometry.js +108 -0
  85. package/lib/features/canvas/generator/reframeGeometry.js.map +1 -0
  86. package/lib/features/canvas/generator/runLog.js +71 -0
  87. package/lib/features/canvas/generator/runLog.js.map +1 -0
  88. package/lib/features/canvas/generator/shot.js +133 -0
  89. package/lib/features/canvas/generator/shot.js.map +1 -0
  90. package/lib/features/canvas/generator/useShotSpec.js +87 -0
  91. package/lib/features/canvas/generator/useShotSpec.js.map +1 -0
  92. package/lib/features/canvas/home/HeroComposer.js +214 -0
  93. package/lib/features/canvas/home/HeroComposer.js.map +1 -0
  94. package/lib/features/canvas/home/HeroMonitor.js +225 -0
  95. package/lib/features/canvas/home/HeroMonitor.js.map +1 -0
  96. package/lib/features/canvas/home/LookDetail.js +185 -0
  97. package/lib/features/canvas/home/LookDetail.js.map +1 -0
  98. package/lib/features/canvas/home/LoopingVideo.js +37 -0
  99. package/lib/features/canvas/home/LoopingVideo.js.map +1 -0
  100. package/lib/features/canvas/home/TemplatesGallery.js +253 -0
  101. package/lib/features/canvas/home/TemplatesGallery.js.map +1 -0
  102. package/lib/features/canvas/home/heroShots.js +100 -0
  103. package/lib/features/canvas/home/heroShots.js.map +1 -0
  104. package/lib/features/canvas/homeWork.js +62 -3
  105. package/lib/features/canvas/homeWork.js.map +1 -1
  106. package/lib/features/canvas/imageEditor/ImageMarkup.js +195 -0
  107. package/lib/features/canvas/imageEditor/ImageMarkup.js.map +1 -0
  108. package/lib/features/canvas/imageEditor/imageEditOps.js +367 -0
  109. package/lib/features/canvas/imageEditor/imageEditOps.js.map +1 -0
  110. package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
  111. package/lib/features/canvas/rankedCatalogSearch.js +375 -0
  112. package/lib/features/canvas/rankedCatalogSearch.js.map +1 -0
  113. package/lib/features/canvas/recorder/CameraRecorderExperience.js +68 -20
  114. package/lib/features/canvas/recorder/CameraRecorderExperience.js.map +1 -1
  115. package/lib/features/canvas/recorder/RecordingReview.js +272 -0
  116. package/lib/features/canvas/recorder/RecordingReview.js.map +1 -0
  117. package/lib/features/canvas/recorder/RecordingsList.js +179 -0
  118. package/lib/features/canvas/recorder/RecordingsList.js.map +1 -0
  119. package/lib/features/canvas/recorder/recorderOps.js +99 -0
  120. package/lib/features/canvas/recorder/recorderOps.js.map +1 -0
  121. package/lib/features/canvas/seedanceShowcase.js +314 -0
  122. package/lib/features/canvas/seedanceShowcase.js.map +1 -0
  123. package/lib/features/canvas/serverTasks.js +149 -15
  124. package/lib/features/canvas/serverTasks.js.map +1 -1
  125. package/lib/features/canvas/sessionRenewal.js +114 -0
  126. package/lib/features/canvas/sessionRenewal.js.map +1 -0
  127. package/lib/features/canvas/set/SetViewportWebView.js +34 -1
  128. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
  129. package/lib/features/canvas/set/agent/setTurn.js +4 -2
  130. package/lib/features/canvas/set/agent/setTurn.js.map +1 -1
  131. package/lib/features/canvas/set/setPresets.js +85 -0
  132. package/lib/features/canvas/set/setPresets.js.map +1 -0
  133. package/lib/features/canvas/set/setProject.js +4 -1
  134. package/lib/features/canvas/set/setProject.js.map +1 -1
  135. package/lib/features/canvas/studioCatalog.js +59 -4
  136. package/lib/features/canvas/studioCatalog.js.map +1 -1
  137. package/lib/features/canvas/studioLooks.js +31 -4
  138. package/lib/features/canvas/studioLooks.js.map +1 -1
  139. package/lib/features/canvas/surfaceIndex.js +1 -14
  140. package/lib/features/canvas/surfaceIndex.js.map +1 -1
  141. package/lib/features/canvas/templateSearch.js +489 -0
  142. package/lib/features/canvas/templateSearch.js.map +1 -0
  143. package/lib/features/canvas/useCanvasSession.js +28 -6
  144. package/lib/features/canvas/useCanvasSession.js.map +1 -1
  145. package/lib/features/canvas/useStudioCatalogTemplates.js +41 -5
  146. package/lib/features/canvas/useStudioCatalogTemplates.js.map +1 -1
  147. package/lib/features/canvas/videoEditor/EditorPanels.js +531 -0
  148. package/lib/features/canvas/videoEditor/EditorPanels.js.map +1 -0
  149. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +48 -4
  150. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
  151. package/lib/features/canvas/videoEditor/agent/agentLoop.js +2 -0
  152. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
  153. package/lib/features/canvas/videoEditor/agent/brainClient.js +97 -27
  154. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
  155. package/lib/features/canvas/videoEditor/agent/cutTools.js +707 -3
  156. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
  157. package/lib/features/canvas/videoEditor/audioServices.js +165 -0
  158. package/lib/features/canvas/videoEditor/audioServices.js.map +1 -0
  159. package/lib/features/canvas/videoEditor/captions.js +144 -0
  160. package/lib/features/canvas/videoEditor/captions.js.map +1 -0
  161. package/lib/features/canvas/videoEditor/compileTimeline.js +24 -16
  162. package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -1
  163. package/lib/features/canvas/videoEditor/editorModel.js +12 -2
  164. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
  165. package/lib/features/canvas/videoEditor/exportTask.js +89 -7
  166. package/lib/features/canvas/videoEditor/exportTask.js.map +1 -1
  167. package/lib/features/canvas/videoEditor/layers.js +117 -0
  168. package/lib/features/canvas/videoEditor/layers.js.map +1 -0
  169. package/lib/features/canvas/videoEditor/remoteMediaClient.js +45 -18
  170. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
  171. package/lib/features/canvas/videoEditor/renderTimeline.js +18 -6
  172. package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -1
  173. package/lib/features/canvas/videoEditor/revoice.js +138 -0
  174. package/lib/features/canvas/videoEditor/revoice.js.map +1 -0
  175. package/lib/features/canvas/videoEditor/storageUpload.js +34 -0
  176. package/lib/features/canvas/videoEditor/storageUpload.js.map +1 -0
  177. package/lib/features/canvas/videoEditor/textMotion.js +109 -0
  178. package/lib/features/canvas/videoEditor/textMotion.js.map +1 -0
  179. package/lib/features/canvas/videoEditor/transitions.js +31 -0
  180. package/lib/features/canvas/videoEditor/transitions.js.map +1 -0
  181. package/lib/features/chat/TemplatesChatCards.js +8 -3
  182. package/lib/features/chat/TemplatesChatCards.js.map +1 -1
  183. package/lib/features/design/DesignEditorExperience.js +674 -644
  184. package/lib/features/design/DesignEditorExperience.js.map +1 -1
  185. package/lib/features/design/DesignExperience.js +285 -538
  186. package/lib/features/design/DesignExperience.js.map +1 -1
  187. package/lib/features/design/designCore.js +2 -212
  188. package/lib/features/design/designCore.js.map +1 -1
  189. package/lib/features/design/designIndex.js +1 -50
  190. package/lib/features/design/designIndex.js.map +1 -1
  191. package/lib/features/design/doc/aiDesign.js +247 -0
  192. package/lib/features/design/doc/aiDesign.js.map +1 -0
  193. package/lib/features/design/doc/artifacts.js +280 -0
  194. package/lib/features/design/doc/artifacts.js.map +1 -0
  195. package/lib/features/design/doc/chart.js +98 -0
  196. package/lib/features/design/doc/chart.js.map +1 -0
  197. package/lib/features/design/doc/crop.js +104 -0
  198. package/lib/features/design/doc/crop.js.map +1 -0
  199. package/lib/features/design/doc/curve.js +49 -0
  200. package/lib/features/design/doc/curve.js.map +1 -0
  201. package/lib/features/design/doc/docOps.js +397 -0
  202. package/lib/features/design/doc/docOps.js.map +1 -0
  203. package/lib/features/design/doc/findReplace.js +112 -0
  204. package/lib/features/design/doc/findReplace.js.map +1 -0
  205. package/lib/features/design/doc/fonts.js +79 -0
  206. package/lib/features/design/doc/fonts.js.map +1 -0
  207. package/lib/features/design/doc/frames.js +17 -0
  208. package/lib/features/design/doc/frames.js.map +1 -0
  209. package/lib/features/design/doc/geometry.js +133 -0
  210. package/lib/features/design/doc/geometry.js.map +1 -0
  211. package/lib/features/design/doc/imageAdjust.js +203 -0
  212. package/lib/features/design/doc/imageAdjust.js.map +1 -0
  213. package/lib/features/design/doc/legacyDoc.js +107 -0
  214. package/lib/features/design/doc/legacyDoc.js.map +1 -0
  215. package/lib/features/design/doc/newDoc.js +335 -0
  216. package/lib/features/design/doc/newDoc.js.map +1 -0
  217. package/lib/features/design/doc/pageRange.js +17 -0
  218. package/lib/features/design/doc/pageRange.js.map +1 -0
  219. package/lib/features/design/doc/pathScale.js +68 -0
  220. package/lib/features/design/doc/pathScale.js.map +1 -0
  221. package/lib/features/design/doc/qr.js +62 -0
  222. package/lib/features/design/doc/qr.js.map +1 -0
  223. package/lib/features/design/doc/shapes.js +366 -0
  224. package/lib/features/design/doc/shapes.js.map +1 -0
  225. package/lib/features/design/doc/sizes.js +230 -0
  226. package/lib/features/design/doc/sizes.js.map +1 -0
  227. package/lib/features/design/doc/textEffects.js +134 -0
  228. package/lib/features/design/doc/textEffects.js.map +1 -0
  229. package/lib/features/design/doc/textLayout.js +182 -0
  230. package/lib/features/design/doc/textLayout.js.map +1 -0
  231. package/lib/features/design/doc/types.js +30 -0
  232. package/lib/features/design/doc/types.js.map +1 -0
  233. package/lib/features/design/editor/AiPanel.js +194 -0
  234. package/lib/features/design/editor/AiPanel.js.map +1 -0
  235. package/lib/features/design/editor/ChartDataPanel.js +182 -0
  236. package/lib/features/design/editor/ChartDataPanel.js.map +1 -0
  237. package/lib/features/design/editor/CropOverlay.js +199 -0
  238. package/lib/features/design/editor/CropOverlay.js.map +1 -0
  239. package/lib/features/design/editor/DesignCanvas.js +363 -0
  240. package/lib/features/design/editor/DesignCanvas.js.map +1 -0
  241. package/lib/features/design/editor/ExportSheet.js +123 -0
  242. package/lib/features/design/editor/ExportSheet.js.map +1 -0
  243. package/lib/features/design/editor/FindReplacePanel.js +93 -0
  244. package/lib/features/design/editor/FindReplacePanel.js.map +1 -0
  245. package/lib/features/design/editor/ImageTools.js +188 -0
  246. package/lib/features/design/editor/ImageTools.js.map +1 -0
  247. package/lib/features/design/editor/LayerTools.js +485 -0
  248. package/lib/features/design/editor/LayerTools.js.map +1 -0
  249. package/lib/features/design/editor/PageStrip.js +203 -0
  250. package/lib/features/design/editor/PageStrip.js.map +1 -0
  251. package/lib/features/design/editor/Slideshow.js +97 -0
  252. package/lib/features/design/editor/Slideshow.js.map +1 -0
  253. package/lib/features/design/editor/ToolPanels.js +695 -0
  254. package/lib/features/design/editor/ToolPanels.js.map +1 -0
  255. package/lib/features/design/editor/controls.js +630 -0
  256. package/lib/features/design/editor/controls.js.map +1 -0
  257. package/lib/features/design/editor/useDesignSave.js +91 -0
  258. package/lib/features/design/editor/useDesignSave.js.map +1 -0
  259. package/lib/features/design/export/exportDesign.js +170 -0
  260. package/lib/features/design/export/exportDesign.js.map +1 -0
  261. package/lib/features/design/export/pdf.js +143 -0
  262. package/lib/features/design/export/pdf.js.map +1 -0
  263. package/lib/features/design/home/DesignHome.js +688 -0
  264. package/lib/features/design/home/DesignHome.js.map +1 -0
  265. package/lib/features/design/home/studioHome.js +61 -0
  266. package/lib/features/design/home/studioHome.js.map +1 -0
  267. package/lib/features/design/pickDesignImage.js +60 -0
  268. package/lib/features/design/pickDesignImage.js.map +1 -0
  269. package/lib/features/design/render/DesignPageView.js +69 -0
  270. package/lib/features/design/render/DesignPageView.js.map +1 -0
  271. package/lib/features/design/render/PageCapture.js +288 -0
  272. package/lib/features/design/render/PageCapture.js.map +1 -0
  273. package/lib/features/design/render/TextMeasure.js +115 -0
  274. package/lib/features/design/render/TextMeasure.js.map +1 -0
  275. package/lib/features/design/render/fontRegistry.js +110 -0
  276. package/lib/features/design/render/fontRegistry.js.map +1 -0
  277. package/lib/features/design/render/layers.js +392 -0
  278. package/lib/features/design/render/layers.js.map +1 -0
  279. package/lib/features/design/render/svg.js +35 -0
  280. package/lib/features/design/render/svg.js.map +1 -0
  281. package/lib/features/design/render/svgParts.js +435 -0
  282. package/lib/features/design/render/svgParts.js.map +1 -0
  283. package/lib/features/design/surface/BoardScreen.js +529 -0
  284. package/lib/features/design/surface/BoardScreen.js.map +1 -0
  285. package/lib/features/design/surface/CompareView.js +138 -0
  286. package/lib/features/design/surface/CompareView.js.map +1 -0
  287. package/lib/features/design/surface/CreationScreen.js +294 -0
  288. package/lib/features/design/surface/CreationScreen.js.map +1 -0
  289. package/lib/features/design/surface/DesignAgentChatPane.js +444 -0
  290. package/lib/features/design/surface/DesignAgentChatPane.js.map +1 -0
  291. package/lib/features/design/surface/DesignBoards.js +441 -0
  292. package/lib/features/design/surface/DesignBoards.js.map +1 -0
  293. package/lib/features/design/surface/DesignPreview.js +159 -0
  294. package/lib/features/design/surface/DesignPreview.js.map +1 -0
  295. package/lib/features/design/surface/DesignSurfaceExperience.js +80 -0
  296. package/lib/features/design/surface/DesignSurfaceExperience.js.map +1 -0
  297. package/lib/features/design/surface/FullScreenPreview.js +59 -0
  298. package/lib/features/design/surface/FullScreenPreview.js.map +1 -0
  299. package/lib/features/design/surface/NewSystemDialog.js +122 -0
  300. package/lib/features/design/surface/NewSystemDialog.js.map +1 -0
  301. package/lib/features/design/surface/PickerSheet.js +175 -0
  302. package/lib/features/design/surface/PickerSheet.js.map +1 -0
  303. package/lib/features/design/surface/TemplatesGallery.js +156 -0
  304. package/lib/features/design/surface/TemplatesGallery.js.map +1 -0
  305. package/lib/features/design/surface/WetPaint.js +140 -0
  306. package/lib/features/design/surface/WetPaint.js.map +1 -0
  307. package/lib/features/design/surface/agentTurn.js +229 -0
  308. package/lib/features/design/surface/agentTurn.js.map +1 -0
  309. package/lib/features/design/surface/designBoard.js +218 -0
  310. package/lib/features/design/surface/designBoard.js.map +1 -0
  311. package/lib/features/design/surface/designChannel.js +186 -0
  312. package/lib/features/design/surface/designChannel.js.map +1 -0
  313. package/lib/features/design/surface/designChat.js +141 -0
  314. package/lib/features/design/surface/designChat.js.map +1 -0
  315. package/lib/features/design/surface/designConnector.js +266 -0
  316. package/lib/features/design/surface/designConnector.js.map +1 -0
  317. package/lib/features/design/surface/designDocument.js +40 -0
  318. package/lib/features/design/surface/designDocument.js.map +1 -0
  319. package/lib/features/design/surface/designExport.js +55 -0
  320. package/lib/features/design/surface/designExport.js.map +1 -0
  321. package/lib/features/design/surface/designLinks.js +64 -0
  322. package/lib/features/design/surface/designLinks.js.map +1 -0
  323. package/lib/features/design/surface/designPalette.js +24 -0
  324. package/lib/features/design/surface/designPalette.js.map +1 -0
  325. package/lib/features/design/surface/designRun.js +161 -0
  326. package/lib/features/design/surface/designRun.js.map +1 -0
  327. package/lib/features/design/surface/designTheme.js +119 -0
  328. package/lib/features/design/surface/designTheme.js.map +1 -0
  329. package/lib/features/design/surface/execStream.js +206 -0
  330. package/lib/features/design/surface/execStream.js.map +1 -0
  331. package/lib/features/design/surface/metaball.js +48 -0
  332. package/lib/features/design/surface/metaball.js.map +1 -0
  333. package/lib/features/design/surface/pickReferenceFiles.js +35 -0
  334. package/lib/features/design/surface/pickReferenceFiles.js.map +1 -0
  335. package/lib/features/design/surface/useDesignSurface.js +379 -0
  336. package/lib/features/design/surface/useDesignSurface.js.map +1 -0
  337. package/lib/features/docs/DocBlockRow.js +336 -0
  338. package/lib/features/docs/DocBlockRow.js.map +1 -0
  339. package/lib/features/docs/DocsEditorExperience.js +949 -0
  340. package/lib/features/docs/DocsEditorExperience.js.map +1 -0
  341. package/lib/features/docs/DocsToolbar.js +247 -0
  342. package/lib/features/docs/DocsToolbar.js.map +1 -0
  343. package/lib/features/docs/blocks.js +560 -0
  344. package/lib/features/docs/blocks.js.map +1 -0
  345. package/lib/features/docs/docArtifacts.js +129 -0
  346. package/lib/features/docs/docArtifacts.js.map +1 -0
  347. package/lib/features/docs/docEdits.js +201 -0
  348. package/lib/features/docs/docEdits.js.map +1 -0
  349. package/lib/features/docs/docExport.js +235 -0
  350. package/lib/features/docs/docExport.js.map +1 -0
  351. package/lib/features/docs/docShare.js +62 -0
  352. package/lib/features/docs/docShare.js.map +1 -0
  353. package/lib/features/links/openInApp.js +38 -2
  354. package/lib/features/links/openInApp.js.map +1 -1
  355. package/lib/routes.json +54 -0
  356. package/lib/screens/DesignNative/index.js +35 -0
  357. package/lib/screens/DesignNative/index.js.map +1 -0
  358. package/package.json +3 -3
  359. package/lib/features/design/exportDesign.js +0 -133
  360. package/lib/features/design/exportDesign.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ImageEditorExperience.js","sources":["../../../src/features/canvas/ImageEditorExperience.tsx"],"sourcesContent":["/**\n * Native image editor - apply-based: every Apply runs ONE real connector op\n * (yantra-image-editing / ffmpeg) and the returned URL becomes the preview,\n * so what you see after Apply is the true render, not an approximation. The\n * URL history is the undo stack. Ships in the federated remote; the host\n * provides only the action runner (auth + transport).\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Image as RNImage,\n Linking,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport { friendlyMediaError, generationImageUrl, resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n EDIT_ASPECTS,\n EDIT_SIZES,\n VARIANT_COUNTS,\n editRequest,\n markedEditPrompt,\n settleVariants,\n type EditAspect,\n type EditSize,\n} from './aiEdit';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\n\ntype Tab = 'filters' | 'adjust' | 'transform' | 'effects' | 'aiedit';\n\nexport interface ImageEditorExperienceProps {\n src: string;\n name?: string;\n runAction?: RunMediaAction;\n onClose: () => void;\n /** Persist the working URL onto the board item (web Done). */\n onSave?: (url: string) => void;\n /** Open on Mark & edit (web board entry). */\n initialTab?: Tab;\n}\n\n/** Backend filter preset names supported by image.filter (image_ops.rs). */\nconst FILTER_NAMES = [\n 'grayscale',\n 'sepia',\n 'chrome',\n 'cold',\n 'warm',\n 'vintage',\n 'fade',\n 'posterize',\n 'vivid',\n 'invert',\n] as const;\n\nconst CROP_ASPECTS: ReadonlyArray<{ label: string; ratio: number | null }> = [\n { label: '1:1', ratio: 1 },\n { label: '4:3', ratio: 4 / 3 },\n { label: '16:9', ratio: 16 / 9 },\n { label: '9:16', ratio: 9 / 16 },\n];\n\nexport function ImageEditorExperience({\n src,\n name,\n runAction,\n onClose,\n onSave,\n initialTab,\n}: ImageEditorExperienceProps) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const [history, setHistory] = useState<string[]>([src]);\n const [busy, setBusy] = useState<string | null>(null);\n const [tab, setTab] = useState<Tab>(initialTab === 'aiedit' ? 'aiedit' : 'filters');\n const [notice, setNotice] = useState<string | null>(null);\n const [adjust, setAdjust] = useState({ brightness: 0, contrast: 1, saturation: 1 });\n const [editInstruction, setEditInstruction] = useState('');\n const [editAspect, setEditAspect] = useState<EditAspect>('original');\n const [editSize, setEditSize] = useState<EditSize>('1K');\n const [variantCount, setVariantCount] = useState<(typeof VARIANT_COUNTS)[number]>(2);\n const [variants, setVariants] = useState<string[]>([]);\n const [natural, setNatural] = useState<{ width: number; height: number } | null>(null);\n const current = history[history.length - 1];\n const edited = history.length > 1;\n\n React.useEffect(() => {\n RNImage.getSize(\n current,\n (w, h) => setNatural({ width: w, height: h }),\n () => setNatural(null),\n );\n }, [current]);\n\n const runMarkEdit = useCallback(async () => {\n if (!runAction) {\n setNotice('Mark & edit needs the host connector.');\n return;\n }\n const ask = editInstruction.trim();\n if (!ask || busy) return;\n setBusy(`Generating ${variantCount} variant${variantCount === 1 ? '' : 's'}`);\n setVariants([]);\n try {\n const prompt = markedEditPrompt(ask, false);\n const request = editRequest(editAspect, editSize, natural);\n const reference = unwrapProxyUrl(current);\n const settled = await Promise.allSettled(\n Array.from({ length: variantCount }, async () => {\n const result = await runAction('yantra-image-generation', 'YANTRA_GEMINI_IMAGE_EDIT', {\n prompt,\n referenceImages: [{ url: reference }],\n ...request,\n });\n return generationImageUrl(result);\n }),\n );\n const { urls, failed } = settleVariants(settled);\n if (!urls.length) throw new Error('No variant came back');\n setVariants(urls);\n if (failed) setNotice(`${failed} variant${failed === 1 ? '' : 's'} failed. The rest are below.`);\n else setNotice(null);\n } catch (err: unknown) {\n setNotice(friendlyMediaError(err, 'mark & edit'));\n } finally {\n setBusy(null);\n }\n }, [busy, current, editAspect, editInstruction, editSize, natural, runAction, variantCount]);\n\n const apply = useCallback(\n (label: string, action: string, params: Record<string, unknown>) => {\n if (!runAction) {\n setNotice('Editing needs the host connector - not wired in this host.');\n return;\n }\n if (busy) return;\n setBusy(label);\n runAction('yantra-image-editing', action, { input_url: current, ...params })\n .then((result) => {\n setHistory((h) => [...h, resultUrl(result, action)]);\n setNotice(null);\n })\n .catch((err: unknown) => setNotice(friendlyMediaError(err, 'image edit')))\n .finally(() => setBusy(null));\n },\n [busy, current, runAction],\n );\n\n const applyCrop = useCallback(\n (ratio: number | null, label: string) => {\n if (ratio === null) return;\n RNImage.getSize(\n current,\n (w, h) => {\n // Largest centered window with the requested ratio.\n let cw = w;\n let ch = Math.round(w / ratio);\n if (ch > h) {\n ch = h;\n cw = Math.round(h * ratio);\n }\n apply(label, 'YANTRA_IMAGE_EDIT_CROP', {\n width: cw,\n height: ch,\n x: Math.round((w - cw) / 2),\n y: Math.round((h - ch) / 2),\n });\n },\n () => setNotice('Could not read the image size for cropping.'),\n );\n },\n [apply, current],\n );\n\n const tabs = useMemo(\n () =>\n [\n { id: 'aiedit' as Tab, icon: 'marker' as const, label: 'Mark' },\n { id: 'filters' as Tab, icon: 'blur' as const, label: 'Filters' },\n { id: 'adjust' as Tab, icon: 'tune-variant' as const, label: 'Adjust' },\n { id: 'transform' as Tab, icon: 'crop-rotate' as const, label: 'Transform' },\n { id: 'effects' as Tab, icon: 'creation' as const, label: 'Effects' },\n ] as const,\n [],\n );\n\n return (\n <View style={styles.root} testID=\"image-editor\">\n <View style={styles.header}>\n <Pressable\n onPress={onClose}\n hitSlop={10}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close editor\"\n style={({ pressed }) => [styles.headerIcon, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"close\" size={22} color={theme.edInk} />\n </Pressable>\n <Text style={styles.headerTitle} numberOfLines={1}>\n {name?.trim() || 'Edit image'}\n </Text>\n <View style={styles.headerActions}>\n <Pressable\n onPress={() => setHistory((h) => (h.length > 1 ? h.slice(0, -1) : h))}\n hitSlop={10}\n disabled={!edited || busy !== null}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Undo\"\n style={({ pressed }) => [\n styles.headerIcon,\n !edited || busy ? styles.disabled : null,\n pressedStyle(pressed),\n ]}\n >\n <MaterialCommunityIcons name=\"undo-variant\" size={21} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => Linking.openURL(current)}\n hitSlop={10}\n disabled={!edited}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Open result\"\n style={({ pressed }) => [\n styles.headerIcon,\n !edited ? styles.disabled : null,\n pressedStyle(pressed),\n ]}\n >\n <MaterialCommunityIcons name=\"open-in-new\" size={20} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => {\n if (edited) onSave?.(current);\n onClose();\n }}\n hitSlop={10}\n disabled={busy !== null}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Done\"\n style={({ pressed }) => [styles.donePill, busy ? styles.disabled : null, pressedStyle(pressed)]}\n >\n <Text style={styles.doneLabel}>{edited ? 'Done' : 'Close'}</Text>\n </Pressable>\n </View>\n </View>\n\n <View style={styles.stage}>\n <Image\n source={{ uri: current }}\n style={StyleSheet.absoluteFill}\n contentFit=\"contain\"\n transition={150}\n />\n {busy ? (\n <View style={styles.busyVeil}>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.busyLabel}>{busy}…</Text>\n </View>\n ) : null}\n {edited && !busy ? (\n <View style={styles.editedBadge}>\n <Text style={styles.editedBadgeLabel}>edit {history.length - 1}</Text>\n </View>\n ) : null}\n </View>\n\n <View style={styles.dock}>\n <View style={styles.panel}>\n <Text style={styles.sheetTitle}>{tabs.find((entry) => entry.id === tab)?.label}</Text>\n {tab === 'aiedit' ? (\n <ScrollView style={{ maxHeight: 220 }} contentContainerStyle={{ paddingBottom: 8 }}>\n <Text style={styles.aiHint}>\n Say what should change. Phone Mark & edit sends the whole picture (scribble bake is\n web/Konva); Original framing keeps the photo's own ratio.\n </Text>\n <TextInput\n value={editInstruction}\n onChangeText={setEditInstruction}\n placeholder=\"Add a top hat and monocle\"\n placeholderTextColor={theme.edInk3}\n style={styles.aiInput}\n multiline\n />\n <View style={styles.row}>\n {EDIT_ASPECTS.map((a) => (\n <Pressable\n key={a.id}\n onPress={() => setEditAspect(a.id)}\n style={[styles.chip, editAspect === a.id && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{a.label}</Text>\n </Pressable>\n ))}\n {EDIT_SIZES.map((s) => (\n <Pressable\n key={s}\n onPress={() => setEditSize(s)}\n style={[styles.chip, editSize === s && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{s}</Text>\n </Pressable>\n ))}\n {VARIANT_COUNTS.map((n) => (\n <Pressable\n key={n}\n onPress={() => setVariantCount(n)}\n style={[styles.chip, variantCount === n && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{n}×</Text>\n </Pressable>\n ))}\n </View>\n <Pressable\n onPress={() => void runMarkEdit()}\n disabled={!editInstruction.trim() || Boolean(busy)}\n style={({ pressed }) => [\n styles.aiCta,\n (!editInstruction.trim() || busy) && styles.disabled,\n pressedStyle(pressed),\n ]}\n >\n <Text style={styles.aiCtaLabel}>Generate variants</Text>\n </Pressable>\n {variants.length ? (\n <ScrollView style={HSCROLL} horizontal contentContainerStyle={styles.row}>\n {variants.map((url) => (\n <Pressable\n key={url}\n onPress={() => {\n setHistory((h) => [...h, url]);\n setVariants([]);\n setNotice('Applied. Undo brings the original back.');\n }}\n style={styles.variantThumb}\n >\n <Image source={{ uri: url }} style={styles.variantImg} contentFit=\"cover\" />\n </Pressable>\n ))}\n </ScrollView>\n ) : null}\n </ScrollView>\n ) : tab === 'filters' ? (\n <ScrollView\n style={HSCROLL}\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {FILTER_NAMES.map((filter) => (\n <Pressable\n key={filter}\n onPress={() =>\n apply(`Filter ${filter}`, 'YANTRA_IMAGE_EDIT_FILTER', { name: filter })\n }\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>{filter}</Text>\n </Pressable>\n ))}\n </ScrollView>\n ) : tab === 'adjust' ? (\n <View>\n <AdjustRow\n label=\"Brightness\"\n value={adjust.brightness}\n format={(v) => v.toFixed(2)}\n onChange={(d) =>\n setAdjust((a) => ({\n ...a,\n brightness: Math.min(1, Math.max(-1, a.brightness + d * 0.1)),\n }))\n }\n />\n <AdjustRow\n label=\"Contrast\"\n value={adjust.contrast}\n format={(v) => v.toFixed(2)}\n onChange={(d) =>\n setAdjust((a) => ({\n ...a,\n contrast: Math.min(3, Math.max(0.2, a.contrast + d * 0.1)),\n }))\n }\n />\n <AdjustRow\n label=\"Saturation\"\n value={adjust.saturation}\n format={(v) => v.toFixed(2)}\n onChange={(d) =>\n setAdjust((a) => ({\n ...a,\n saturation: Math.min(3, Math.max(0, a.saturation + d * 0.1)),\n }))\n }\n />\n <Pressable\n onPress={() =>\n apply('Adjusting', 'YANTRA_IMAGE_EDIT_FINETUNE', {\n brightness: adjust.brightness,\n contrast: adjust.contrast,\n saturation: adjust.saturation,\n })\n }\n style={({ pressed }) => [\n styles.chip,\n styles.chipAccent,\n styles.applyBtn,\n pressedStyle(pressed),\n ]}\n accessibilityRole=\"button\"\n >\n <Text style={[styles.chipLabel, styles.chipLabelDark]}>Apply adjustments</Text>\n </Pressable>\n </View>\n ) : tab === 'transform' ? (\n <View style={styles.row}>\n <Pressable\n onPress={() => apply('Rotating', 'YANTRA_IMAGE_EDIT_ROTATE', { degrees: 90 })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"rotate-right\" size={14} color={theme.edInk} />\n <Text style={styles.chipLabel}>90°</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Flipping', 'YANTRA_IMAGE_EDIT_FLIP', { horizontal: true })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"flip-horizontal\" size={14} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => apply('Flipping', 'YANTRA_IMAGE_EDIT_FLIP', { vertical: true })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <MaterialCommunityIcons name=\"flip-vertical\" size={14} color={theme.edInk} />\n </Pressable>\n {CROP_ASPECTS.map((aspect) => (\n <Pressable\n key={aspect.label}\n onPress={() => applyCrop(aspect.ratio, `Cropping ${aspect.label}`)}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>{aspect.label}</Text>\n </Pressable>\n ))}\n </View>\n ) : (\n <View style={styles.row}>\n <Pressable\n onPress={() => apply('Vignette', 'YANTRA_IMAGE_EDIT_VIGNETTE', {})}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Vignette</Text>\n </Pressable>\n <Pressable\n onPress={() =>\n apply('Framing', 'YANTRA_IMAGE_EDIT_FRAME', { thickness: 24, color: 'white' })\n }\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Frame</Text>\n </Pressable>\n <Pressable\n onPress={() =>\n apply('Shadow', 'YANTRA_IMAGE_EDIT_DROP_SHADOW', {\n offset_x: 12,\n offset_y: 12,\n blur: 18,\n })\n }\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Shadow</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Removing background', 'YANTRA_IMAGE_EDIT_REMOVE_BACKGROUND', {})}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>Cut out</Text>\n </Pressable>\n </View>\n )}\n </View>\n\n <View style={styles.toolbar}>\n {tabs.map((entry) => {\n const active = tab === entry.id;\n return (\n <Pressable\n key={entry.id}\n onPress={() => setTab(entry.id)}\n style={({ pressed }) => [styles.toolbarTab, pressedStyle(pressed)]}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: active }}\n >\n <View style={[styles.toolbarIcon, active && styles.toolbarIconOn]}>\n <MaterialCommunityIcons\n name={entry.icon}\n size={22}\n color={active ? theme.edInk : theme.edInk3}\n />\n </View>\n <Text style={[styles.toolbarLabel, active && styles.toolbarLabelActive]}>\n {entry.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n\n {notice ? (\n <View style={styles.notice}>\n <Text style={styles.noticeText}>{notice}</Text>\n <Pressable onPress={() => setNotice(null)} hitSlop={8}>\n <Text style={styles.noticeDismiss}>OK</Text>\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction AdjustRow({\n label,\n value,\n format,\n onChange,\n}: {\n label: string;\n value: number;\n format: (v: number) => string;\n onChange: (dir: -1 | 1) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n return (\n <View style={styles.adjustRow}>\n <Text style={styles.adjustLabel}>{label}</Text>\n <Pressable\n onPress={() => onChange(-1)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`${label} less`}\n >\n <MaterialCommunityIcons name=\"minus\" size={16} color={theme.edInk} />\n </Pressable>\n <Text style={styles.adjustValue}>{format(value)}</Text>\n <Pressable\n onPress={() => onChange(1)}\n hitSlop={8}\n accessibilityRole=\"button\"\n accessibilityLabel={`${label} more`}\n >\n <MaterialCommunityIcons name=\"plus\" size={16} color={theme.edInk} />\n </Pressable>\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.edBg },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n gap: SPACE.sm,\n },\n headerIcon: {\n width: 40,\n height: 40,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerTitle: { ...TYPE.title, flex: 1, color: theme.edInk, textAlign: 'center' },\n headerActions: { flexDirection: 'row', alignItems: 'center', gap: SPACE.xs },\n donePill: {\n minHeight: 36,\n marginLeft: SPACE.xs,\n paddingHorizontal: SPACE.lg,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n alignItems: 'center',\n justifyContent: 'center',\n },\n doneLabel: { ...TYPE.label, color: theme.primaryForeground },\n disabled: { opacity: 0.35 },\n stage: {\n flex: 1,\n marginHorizontal: SPACE.md,\n marginTop: SPACE.xs,\n borderRadius: RADIUS.xl,\n overflow: 'hidden',\n backgroundColor: '#000000', // media stage stays dark\n },\n busyVeil: {\n ...StyleSheet.absoluteFillObject,\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm,\n backgroundColor: 'rgba(10, 10, 12, 0.55)',\n },\n busyLabel: { ...TYPE.caption, color: '#E8E8EE' },\n editedBadge: {\n position: 'absolute',\n right: SPACE.md,\n top: SPACE.md,\n paddingHorizontal: SPACE.sm,\n paddingVertical: SPACE.xs,\n borderRadius: RADIUS.pill,\n backgroundColor: 'rgba(10, 10, 12, 0.6)',\n },\n editedBadgeLabel: { ...TYPE.caption, color: '#F7F7FA' },\n dock: {\n marginTop: SPACE.md,\n backgroundColor: theme.edPanel,\n borderTopLeftRadius: RADIUS.xl,\n borderTopRightRadius: RADIUS.xl,\n },\n sheetTitle: { ...TYPE.label, color: theme.edInk, marginBottom: SPACE.sm },\n aiHint: { ...TYPE.caption, color: theme.edInk2, marginBottom: SPACE.sm },\n aiInput: {\n ...TYPE.body,\n minHeight: 60,\n borderRadius: RADIUS.md,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n textAlignVertical: 'top',\n marginBottom: SPACE.sm,\n },\n chipOn: { borderColor: theme.edInk, backgroundColor: theme.edRaisedHi },\n aiCta: {\n minHeight: HIT,\n marginTop: SPACE.xs,\n marginBottom: SPACE.sm,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edInk,\n alignItems: 'center',\n justifyContent: 'center',\n },\n aiCtaLabel: { ...TYPE.label, color: theme.edOnInk },\n variantThumb: {\n width: 64,\n height: 64,\n borderRadius: RADIUS.sm,\n overflow: 'hidden',\n marginRight: SPACE.sm,\n backgroundColor: theme.edRaised,\n },\n variantImg: { width: '100%', height: '100%' },\n panel: {\n minHeight: 104,\n justifyContent: 'center',\n paddingHorizontal: SPACE.lg,\n paddingTop: SPACE.lg,\n paddingBottom: SPACE.sm,\n },\n row: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm, flexWrap: 'wrap', paddingVertical: SPACE.xs },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n minHeight: 36,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edRaised,\n borderWidth: 1,\n borderColor: 'transparent',\n },\n chipAccent: { backgroundColor: theme.edInk },\n chipLabel: { ...TYPE.label, color: theme.edInk, textTransform: 'capitalize' },\n chipLabelDark: { color: theme.edOnInk },\n applyBtn: { alignSelf: 'flex-start', marginTop: SPACE.sm },\n adjustRow: { flexDirection: 'row', alignItems: 'center', gap: SPACE.md, minHeight: 36 },\n adjustLabel: { ...TYPE.caption, color: theme.edInk2, width: 84 },\n adjustValue: {\n ...TYPE.label,\n color: theme.edInk,\n fontVariant: ['tabular-nums'],\n minWidth: 48,\n textAlign: 'center',\n },\n toolbar: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n paddingHorizontal: SPACE.sm,\n paddingTop: SPACE.xs,\n paddingBottom: SPACE.md,\n },\n toolbarTab: { alignItems: 'center', gap: SPACE.xs, minWidth: 60, minHeight: HIT },\n toolbarIcon: {\n width: 48,\n height: 32,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n },\n toolbarIconOn: { backgroundColor: theme.edRaisedHi },\n toolbarLabel: { color: theme.edInk3, fontSize: 11, lineHeight: 14, fontWeight: '500' },\n toolbarLabelActive: { color: theme.edInk, fontWeight: '600' },\n notice: {\n position: 'absolute',\n left: SPACE.lg,\n right: SPACE.lg,\n bottom: 96,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.md,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.edInk,\n },\n noticeText: { ...TYPE.label, fontWeight: '500', flex: 1, color: theme.edOnInk },\n noticeDismiss: { ...TYPE.label, color: theme.edAccent },\n }),\n);\n\nexport default ImageEditorExperience;\n"],"names":["React","RNImage","Image"],"mappings":"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"}
1
+ {"version":3,"file":"ImageEditorExperience.js","sources":["../../../src/features/canvas/ImageEditorExperience.tsx"],"sourcesContent":["/**\n * Native image editor - apply-based: every Apply runs ONE real connector op\n * (yantra-image-editing / ffmpeg) and the returned URL becomes the preview,\n * so what you see after Apply is the true render, not an approximation. The\n * URL history is the undo stack. Ships in the federated remote; the host\n * provides only the action runner (auth + transport).\n *\n * Web ImageToolPanel parity: Mark & edit with a real scribble (the strokes\n * are baked onto a copy by the `annotate` op, then that marked-up picture is\n * the model's reference, exactly the web contract), free crop by dragging,\n * resize presets and pad, draw and shapes, redact regions, background\n * replace, watermark, logo, overlay and mask, levels, colorspace, shadow\n * presets and format conversion. Erase stays web-only: it needs a client\n * canvas (destination-out) and has no connector op.\n */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport {\n ActivityIndicator,\n Image as RNImage,\n Linking,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { Image } from 'expo-image';\nimport type { CanvasItem } from './canvasCore';\nimport { friendlyMediaError, generationImageUrl, resultUrl, type RunMediaAction } from './videoEditor/mediaActions';\nimport {\n EDIT_ASPECTS,\n EDIT_SIZES,\n MARKER_COLOR,\n VARIANT_COUNTS,\n editRequest,\n markedEditPrompt,\n settleVariants,\n type EditAspect,\n type EditSize,\n} from './aiEdit';\nimport { unwrapProxyUrl } from './videoEditor/remoteMediaClient';\nimport { useCanvasTheme, themedStyles, type CanvasPalette } from './canvasTheme';\nimport { Pressable, HIT, RADIUS, SPACE, TYPE, pressedStyle } from './canvasUi';\nimport {\n ApplyButton,\n ChoiceRow,\n MediaUrlPicker,\n NumberField,\n SWATCHES,\n SliderRow,\n SwatchRow,\n TextField,\n ToggleRow,\n} from './editorControls';\nimport {\n COLORSPACE_TARGETS,\n CROP_ASPECTS,\n EXPORT_FORMATS,\n IMAGE_EDIT_ACTIONS,\n LOGO_POSITIONS,\n RESIZE_SUGGESTIONS,\n SHADOW_PRESETS,\n annotateOp,\n centeredAspectRect,\n convertParams,\n logoComposeParams,\n shadowParams,\n strokesToAnnotateOps,\n type AnnotateKind,\n type AnnotateShape,\n type ExportFormat,\n type ImageEditOp,\n type LogoPosition,\n type PixelRect,\n type Stroke,\n} from './imageEditor/imageEditOps';\nimport { ImageMarkup, type MarkupBox, type MarkupMode } from './imageEditor/ImageMarkup';\n\n/** RN gives a horizontal ScrollView flexGrow 1: on a fixed-height screen a chip row swells into empty space. */\nconst HSCROLL = { flexGrow: 0 } as const;\n\ntype Tab =\n | 'aiedit'\n | 'filters'\n | 'adjust'\n | 'crop'\n | 'resize'\n | 'draw'\n | 'redact'\n | 'effects'\n | 'background'\n | 'brand'\n | 'layers'\n | 'levels'\n | 'export';\n\nexport interface ImageEditorExperienceProps {\n src: string;\n name?: string;\n runAction?: RunMediaAction;\n onClose: () => void;\n /** Persist the working URL onto the board item (web Done). */\n onSave?: (url: string) => void;\n /** Open on Mark & edit (web board entry). */\n initialTab?: 'aiedit' | 'filters' | 'adjust' | 'transform' | 'effects';\n /** The board's media, offered as backgrounds, logos and overlays. */\n libraryItems?: CanvasItem[];\n}\n\n/** Backend filter preset names supported by image.filter (image_ops.rs). */\nconst FILTER_NAMES = [\n 'grayscale',\n 'sepia',\n 'chrome',\n 'cold',\n 'warm',\n 'vintage',\n 'fade',\n 'posterize',\n 'vivid',\n 'invert',\n] as const;\n\nconst TABS: ReadonlyArray<{\n id: Tab;\n icon: React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n label: string;\n}> = [\n { id: 'aiedit', icon: 'marker', label: 'Mark' },\n { id: 'filters', icon: 'blur', label: 'Filters' },\n { id: 'adjust', icon: 'tune-variant', label: 'Adjust' },\n { id: 'crop', icon: 'crop-rotate', label: 'Crop' },\n { id: 'resize', icon: 'resize', label: 'Resize' },\n { id: 'draw', icon: 'draw', label: 'Draw' },\n { id: 'redact', icon: 'eye-off-outline', label: 'Redact' },\n { id: 'effects', icon: 'creation', label: 'Effects' },\n { id: 'background', icon: 'image-filter-hdr', label: 'Backdrop' },\n { id: 'brand', icon: 'watermark', label: 'Brand' },\n { id: 'layers', icon: 'layers-outline', label: 'Layers' },\n { id: 'levels', icon: 'chart-bell-curve', label: 'Levels' },\n { id: 'export', icon: 'file-export-outline', label: 'Export' },\n];\n\ntype DrawTool = 'pen' | AnnotateKind;\n\nexport function ImageEditorExperience({\n src,\n name,\n runAction,\n onClose,\n onSave,\n initialTab,\n libraryItems,\n}: ImageEditorExperienceProps) {\n const theme = useCanvasTheme();\n const styles = useMemo(() => makeStyles(theme), [theme]);\n const [history, setHistory] = useState<string[]>([src]);\n const [busy, setBusy] = useState<string | null>(null);\n const [tab, setTab] = useState<Tab>(initialTab === 'transform' ? 'crop' : (initialTab ?? 'filters'));\n const [notice, setNotice] = useState<string | null>(null);\n const [adjust, setAdjust] = useState({ brightness: 0, contrast: 1, saturation: 1 });\n const [natural, setNatural] = useState<{ width: number; height: number } | null>(null);\n /** The picture before the first size pick, so back-to-back sizes do not stack crops (web resizeBase). */\n const [resizeBase, setResizeBase] = useState<string | null>(null);\n const current = history[history.length - 1];\n const edited = history.length > 1;\n\n // Mark & edit\n const [editInstruction, setEditInstruction] = useState('');\n const [editAspect, setEditAspect] = useState<EditAspect>('original');\n const [editSize, setEditSize] = useState<EditSize>('1K');\n const [variantCount, setVariantCount] = useState<(typeof VARIANT_COUNTS)[number]>(2);\n const [variants, setVariants] = useState<string[]>([]);\n const [before, setBefore] = useState<string | null>(null);\n const [markStrokes, setMarkStrokes] = useState<Stroke[]>([]);\n const [markSize, setMarkSize] = useState(24);\n\n // Draw + shapes\n const [drawTool, setDrawTool] = useState<DrawTool>('pen');\n const [drawColor, setDrawColor] = useState<string>(SWATCHES[0]);\n const [drawSize, setDrawSize] = useState(12);\n const [drawStrokes, setDrawStrokes] = useState<Stroke[]>([]);\n const [shapes, setShapes] = useState<AnnotateShape[]>([]);\n const [shapeFill, setShapeFill] = useState(false);\n const [shapeText, setShapeText] = useState('');\n\n // Crop + redact\n const [cropAspect, setCropAspect] = useState('free');\n const [cropRect, setCropRect] = useState<PixelRect | null>(null);\n const [redact, setRedact] = useState<Array<PixelRect & { id: string }>>([]);\n const [redactMethod, setRedactMethod] = useState<'blur' | 'pixelate' | 'solid'>('blur');\n const [redactRadius, setRedactRadius] = useState(12);\n const [redactColor, setRedactColor] = useState('#000000');\n\n // Resize + pad\n const [size, setSize] = useState({ w: 0, h: 0 });\n const [fit, setFit] = useState<'fill' | 'contain' | 'cover'>('fill');\n const [lockAspect, setLockAspect] = useState(true);\n const [pad, setPad] = useState({ w: 0, h: 0, color: '#000000' });\n\n // Background, brand, layers\n const [bgUrl, setBgUrl] = useState('');\n const [bgFit, setBgFit] = useState<'cover' | 'contain'>('cover');\n const [wmText, setWmText] = useState('');\n const [wmPosition, setWmPosition] = useState<LogoPosition>('bottom-right');\n const [wmSize, setWmSize] = useState(24);\n const [wmColor, setWmColor] = useState('#ffffff');\n const [wmOpacity, setWmOpacity] = useState(0.7);\n const [wmPadding, setWmPadding] = useState(10);\n const [logoUrl, setLogoUrl] = useState('');\n const [logoPosition, setLogoPosition] = useState<LogoPosition>('bottom-right');\n const [logoPercent, setLogoPercent] = useState(20);\n const [logoOpacity, setLogoOpacity] = useState(1);\n const [overlay, setOverlay] = useState({ url: '', x: 0, y: 0, scale: '', opacity: 1 });\n const [mask, setMask] = useState({ url: '', invert: false });\n\n // Levels, colorspace, export, shadow\n const [levels, setLevels] = useState({ inBlack: 0, inWhite: 1, outBlack: 0, outWhite: 1, gamma: 1 });\n const [csTo, setCsTo] = useState<(typeof COLORSPACE_TARGETS)[number]>('srgb');\n const [csRange, setCsRange] = useState<'' | 'tv' | 'pc'>('');\n const [csZscale, setCsZscale] = useState(false);\n const [format, setFormat] = useState<ExportFormat>('png');\n const [quality, setQuality] = useState(90);\n\n const images = useMemo(\n () =>\n (libraryItems ?? [])\n .filter((item) => item.type === 'image' && item.src !== current)\n .map((item) => ({\n id: item.id,\n src: unwrapProxyUrl(item.src),\n label: item.generatedAssetName,\n kind: 'image' as const,\n })),\n [current, libraryItems],\n );\n\n React.useEffect(() => {\n RNImage.getSize(\n current,\n (w, h) => {\n setNatural({ width: w, height: h });\n setSize((s) => (s.w ? s : { w, h }));\n setPad((p) => (p.w ? p : { ...p, w, h }));\n },\n () => setNatural(null),\n );\n }, [current]);\n\n /** One connector op on a given input, resolved to its output URL. */\n const op = useCallback(\n async (kind: ImageEditOp, input: string, params: Record<string, unknown>): Promise<string> => {\n if (!runAction) throw new Error('Editing needs the host connector - not wired in this host.');\n const action = IMAGE_EDIT_ACTIONS[kind];\n const result = await runAction('yantra-image-editing', action, {\n input_url: unwrapProxyUrl(input),\n ...params,\n });\n return resultUrl(result, action);\n },\n [runAction],\n );\n\n /** Run an edit (one op or a chain) and push its result as the new picture. */\n const runEdit = useCallback(\n (label: string, fn: () => Promise<string>, opts?: { resizeBase?: string; after?: () => void }) => {\n if (!runAction) {\n setNotice('Editing needs the host connector - not wired in this host.');\n return;\n }\n if (busy) return;\n setBusy(label);\n fn()\n .then((url) => {\n setHistory((h) => [...h, url]);\n setResizeBase(opts?.resizeBase ?? null);\n setNotice(null);\n opts?.after?.();\n })\n .catch((err: unknown) => setNotice(friendlyMediaError(err, 'image edit')))\n .finally(() => setBusy(null));\n },\n [busy, runAction],\n );\n\n const apply = useCallback(\n (label: string, kind: ImageEditOp, params: Record<string, unknown>, after?: () => void) =>\n runEdit(label, () => op(kind, current, params), { after }),\n [current, op, runEdit],\n );\n\n const runMarkEdit = useCallback(async () => {\n if (!runAction) {\n setNotice('Mark & edit needs the host connector.');\n return;\n }\n const ask = editInstruction.trim();\n if (!ask || busy) return;\n const marked = markStrokes.length > 0;\n setVariants([]);\n try {\n // The strokes on the picture at its own resolution, in the marker colour.\n setBusy(marked ? 'Preparing the marked-up picture' : `Generating ${variantCount} variants`);\n const reference = marked\n ? await op('annotate', current, { ops: strokesToAnnotateOps(markStrokes) })\n : unwrapProxyUrl(current);\n setBusy(`Generating ${variantCount} variant${variantCount === 1 ? '' : 's'}`);\n const prompt = markedEditPrompt(ask, marked);\n const request = editRequest(editAspect, editSize, natural);\n const settled = await Promise.allSettled(\n Array.from({ length: variantCount }, async () => {\n const result = await runAction('yantra-image-generation', 'YANTRA_GEMINI_IMAGE_EDIT', {\n prompt,\n referenceImages: [{ url: reference }],\n ...request,\n });\n const url = generationImageUrl(result);\n // The model answers in its own pixel size; pin each variant back to the picture's frame.\n if (editAspect !== 'original' || !natural) return url;\n return op('resize', url, { width: natural.width, height: natural.height, fit: 'cover' }).catch(\n () => url,\n );\n }),\n );\n const { urls, failed } = settleVariants(settled);\n if (!urls.length) throw new Error('No variant came back');\n setBefore(current);\n setVariants(urls);\n setEditInstruction('');\n if (failed) setNotice(`${failed} variant${failed === 1 ? '' : 's'} failed. The rest are below.`);\n else setNotice(null);\n } catch (err: unknown) {\n setNotice(friendlyMediaError(err, 'mark & edit'));\n } finally {\n setBusy(null);\n }\n }, [busy, current, editAspect, editInstruction, editSize, markStrokes, natural, op, runAction, variantCount]);\n\n const applyAspectCrop = useCallback(\n (ratio: number, label: string) => {\n if (!natural) return setNotice('Could not read the image size for cropping.');\n const r = centeredAspectRect(natural, ratio);\n apply(label, 'crop', { width: r.width, height: r.height, x: r.x, y: r.y });\n },\n [apply, natural],\n );\n\n // What the touch layer collects on this tab.\n const markupMode: MarkupMode =\n busy !== null\n ? 'none'\n : tab === 'aiedit'\n ? 'stroke'\n : tab === 'draw'\n ? drawTool === 'pen'\n ? 'stroke'\n : 'rect'\n : (tab === 'crop' && cropAspect === 'free') || tab === 'redact'\n ? 'rect'\n : 'none';\n const markupStrokes = tab === 'aiedit' ? markStrokes : tab === 'draw' ? drawStrokes : [];\n const markupBoxes: MarkupBox[] =\n tab === 'crop' && cropRect\n ? [\n {\n id: 'crop',\n x1: cropRect.x,\n y1: cropRect.y,\n x2: cropRect.x + cropRect.width,\n y2: cropRect.y + cropRect.height,\n kind: 'crop',\n color: '#ffffff',\n },\n ]\n : tab === 'redact'\n ? redact.map((r) => ({\n id: r.id,\n x1: r.x,\n y1: r.y,\n x2: r.x + r.width,\n y2: r.y + r.height,\n kind: 'redact' as const,\n color: '#ffffff',\n }))\n : tab === 'draw'\n ? shapes.map((sh) => ({\n id: sh.id,\n x1: sh.x1,\n y1: sh.y1,\n x2: sh.x2,\n y2: sh.y2,\n kind: sh.kind === 'ellipse' ? 'ellipse' : sh.kind === 'arrow' ? 'arrow' : 'rect',\n color: sh.color,\n }))\n : [];\n\n const onStroke = (stroke: Stroke) => {\n if (tab === 'aiedit') setMarkStrokes((list) => [...list, stroke]);\n else setDrawStrokes((list) => [...list, stroke]);\n };\n const onBox = (box: MarkupBox, rect: PixelRect) => {\n if (tab === 'crop') setCropRect(rect);\n else if (tab === 'redact') setRedact((list) => [...list, { ...rect, id: box.id }]);\n else if (tab === 'draw' && drawTool !== 'pen')\n setShapes((list) => [\n ...list,\n {\n id: box.id,\n kind: drawTool,\n x1: box.x1,\n y1: box.y1,\n x2: box.x2,\n y2: box.y2,\n color: drawColor,\n thickness: Math.max(2, Math.round(drawSize / 3)),\n fill: shapeFill,\n ...(drawTool === 'text'\n ? { text: shapeText.trim() || 'Text', fontSize: Math.max(12, drawSize * 2) }\n : {}),\n },\n ]);\n };\n\n const setWidth = (w: number) => {\n setSize((s) => ({\n w,\n h: lockAspect && natural ? Math.max(1, Math.round(w * (natural.height / natural.width))) : s.h,\n }));\n };\n const setHeight = (h: number) => {\n setSize((s) => ({\n h,\n w: lockAspect && natural ? Math.max(1, Math.round(h * (natural.width / natural.height))) : s.w,\n }));\n };\n\n const placeLogo = () => {\n const url = logoUrl.trim();\n if (!url || !natural) return;\n runEdit('Placing logo', async () => {\n const aspect = await new Promise<number>((resolve) =>\n RNImage.getSize(\n url,\n (w, h) => resolve(w / Math.max(1, h)),\n () => resolve(1),\n ),\n );\n return op(\n 'compose',\n current,\n logoComposeParams({\n logoUrl: unwrapProxyUrl(url),\n logoAspect: aspect,\n natural,\n percent: logoPercent,\n position: logoPosition,\n opacity: logoOpacity,\n }),\n );\n });\n };\n\n const variantOptions = before\n ? [{ src: before, label: 'Before' }, ...variants.map((url, i) => ({ src: url, label: `Variant ${i + 1}` }))]\n : [];\n\n const panel = (() => {\n switch (tab) {\n case 'aiedit':\n return (\n <>\n <Text style={styles.aiHint}>\n Scribble over what should change, then say what. Leave the picture unmarked to change all of\n it.\n </Text>\n <SliderRow\n label=\"Marker size\"\n value={markSize}\n min={4}\n max={120}\n onChange={setMarkSize}\n format={(v) => `${v}px`}\n />\n <View style={styles.countRow}>\n <Text style={styles.countLabel}>\n {markStrokes.length} mark{markStrokes.length === 1 ? '' : 's'}\n </Text>\n <Pressable\n onPress={() => setMarkStrokes((m) => m.slice(0, -1))}\n disabled={!markStrokes.length}\n hitSlop={8}\n >\n <Text style={[styles.linkLabel, !markStrokes.length && styles.disabled]}>\n Undo mark\n </Text>\n </Pressable>\n <Pressable onPress={() => setMarkStrokes([])} disabled={!markStrokes.length} hitSlop={8}>\n <Text style={[styles.linkLabel, !markStrokes.length && styles.disabled]}>Clear</Text>\n </Pressable>\n </View>\n <TextInput\n value={editInstruction}\n onChangeText={setEditInstruction}\n placeholder=\"Add a top hat and monocle\"\n placeholderTextColor={theme.edInk3}\n style={styles.aiInput}\n multiline\n accessibilityLabel=\"What to change\"\n />\n <View style={styles.row}>\n {EDIT_ASPECTS.map((a) => (\n <Pressable\n key={a.id}\n onPress={() => setEditAspect(a.id)}\n style={[styles.chip, editAspect === a.id && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{a.label}</Text>\n </Pressable>\n ))}\n {EDIT_SIZES.map((s) => (\n <Pressable\n key={s}\n onPress={() => setEditSize(s)}\n style={[styles.chip, editSize === s && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{s}</Text>\n </Pressable>\n ))}\n {VARIANT_COUNTS.map((n) => (\n <Pressable\n key={n}\n onPress={() => setVariantCount(n)}\n style={[styles.chip, variantCount === n && styles.chipOn]}\n >\n <Text style={styles.chipLabel}>{n}×</Text>\n </Pressable>\n ))}\n </View>\n <Pressable\n onPress={() => void runMarkEdit()}\n disabled={!editInstruction.trim() || Boolean(busy)}\n style={({ pressed }) => [\n styles.aiCta,\n (!editInstruction.trim() || busy) && styles.disabled,\n pressedStyle(pressed),\n ]}\n >\n <Text style={styles.aiCtaLabel}>\n {markStrokes.length ? 'Edit the marked area' : 'Generate variants'}\n </Text>\n </Pressable>\n {variantOptions.length ? (\n <ScrollView style={HSCROLL} horizontal contentContainerStyle={styles.row}>\n {variantOptions.map((o) => {\n const showing = o.src === current;\n return (\n <Pressable\n key={o.label}\n disabled={showing}\n onPress={() => {\n setHistory((h) => [...h, o.src]);\n setMarkStrokes([]);\n setNotice('Applied. Pick another, or Before to go back.');\n }}\n accessibilityLabel={`Use ${o.label}`}\n style={[styles.variantThumb, showing && styles.variantOn]}\n >\n <Image\n source={{ uri: o.src }}\n style={styles.variantImg}\n contentFit=\"cover\"\n />\n <Text style={styles.variantLabel}>{o.label}</Text>\n </Pressable>\n );\n })}\n </ScrollView>\n ) : null}\n </>\n );\n case 'filters':\n return (\n <ScrollView\n style={HSCROLL}\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {FILTER_NAMES.map((filter) => (\n <Pressable\n key={filter}\n onPress={() => apply(`Filter ${filter}`, 'filter', { name: filter })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n >\n <Text style={styles.chipLabel}>{filter}</Text>\n </Pressable>\n ))}\n </ScrollView>\n );\n case 'adjust':\n return (\n <View>\n <SliderRow\n label=\"Brightness\"\n value={adjust.brightness}\n min={-1}\n max={1}\n step={0.01}\n format={(v) => v.toFixed(2)}\n onChange={(brightness) => setAdjust((a) => ({ ...a, brightness }))}\n />\n <SliderRow\n label=\"Contrast\"\n value={adjust.contrast}\n min={0.2}\n max={3}\n step={0.01}\n format={(v) => v.toFixed(2)}\n onChange={(contrast) => setAdjust((a) => ({ ...a, contrast }))}\n />\n <SliderRow\n label=\"Saturation\"\n value={adjust.saturation}\n min={0}\n max={3}\n step={0.01}\n format={(v) => v.toFixed(2)}\n onChange={(saturation) => setAdjust((a) => ({ ...a, saturation }))}\n />\n <ApplyButton\n label=\"Apply adjustments\"\n disabled={Boolean(busy)}\n onPress={() =>\n apply('Adjusting', 'finetune', {\n brightness: adjust.brightness,\n contrast: adjust.contrast,\n saturation: adjust.saturation,\n })\n }\n />\n </View>\n );\n case 'crop':\n return (\n <View>\n <View style={styles.row}>\n <Pressable\n onPress={() => apply('Rotating', 'rotate', { degrees: 90 })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityLabel=\"Rotate right\"\n >\n <MaterialCommunityIcons name=\"rotate-right\" size={14} color={theme.edInk} />\n <Text style={styles.chipLabel}>90°</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Flipping', 'flip', { horizontal: true })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityLabel=\"Flip horizontal\"\n >\n <MaterialCommunityIcons name=\"flip-horizontal\" size={14} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => apply('Flipping', 'flip', { vertical: true })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n accessibilityLabel=\"Flip vertical\"\n >\n <MaterialCommunityIcons name=\"flip-vertical\" size={14} color={theme.edInk} />\n </Pressable>\n </View>\n <ChoiceRow\n label=\"Crop\"\n options={CROP_ASPECTS.map((a) => ({ value: a.id, label: a.label }))}\n value={cropAspect}\n onChange={(id) => {\n setCropAspect(id);\n setCropRect(null);\n const ratio = CROP_ASPECTS.find((a) => a.id === id)?.ratio;\n if (ratio) applyAspectCrop(ratio, `Cropping ${id}`);\n }}\n />\n {cropAspect === 'free' ? (\n <>\n <Text style={styles.aiHint}>\n {cropRect\n ? `${cropRect.width} × ${cropRect.height} at ${cropRect.x}, ${cropRect.y}`\n : 'Drag a box on the picture to crop to it.'}\n </Text>\n <ApplyButton\n label=\"Apply crop\"\n disabled={!cropRect || Boolean(busy)}\n onPress={() =>\n cropRect &&\n apply(\n 'Cropping',\n 'crop',\n {\n width: cropRect.width,\n height: cropRect.height,\n x: cropRect.x,\n y: cropRect.y,\n },\n () => setCropRect(null),\n )\n }\n />\n </>\n ) : null}\n </View>\n );\n case 'resize':\n return (\n <View>\n <Text style={styles.sectionLabel}>Suggested sizes</Text>\n <ScrollView\n style={HSCROLL}\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.row}\n >\n {RESIZE_SUGGESTIONS.map((s) => {\n const on = size.w === s.width && size.h === s.height;\n return (\n <Pressable\n key={`${s.width}x${s.height}`}\n onPress={() => {\n setSize({ w: s.width, h: s.height });\n setFit('cover');\n }}\n style={({ pressed }) => [\n styles.sizeCard,\n on && styles.chipOn,\n pressedStyle(pressed),\n ]}\n >\n <Text style={styles.sizeTitle} numberOfLines={1}>\n {s.label}\n </Text>\n <Text style={styles.sizeMeta}>\n {s.hint} · {s.width}×{s.height}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n <View style={styles.fieldRow}>\n <NumberField\n label=\"Width\"\n value={size.w}\n onChange={(v) => setWidth(Math.max(1, Math.round(v)))}\n />\n <NumberField\n label=\"Height\"\n value={size.h}\n onChange={(v) => setHeight(Math.max(1, Math.round(v)))}\n />\n </View>\n <ToggleRow label=\"Lock aspect ratio\" value={lockAspect} onChange={setLockAspect} />\n <ChoiceRow\n label=\"Fit\"\n options={[\n { value: 'fill' as const, label: 'Stretch' },\n { value: 'contain' as const, label: 'Contain' },\n { value: 'cover' as const, label: 'Cover' },\n ]}\n value={fit}\n onChange={setFit}\n />\n <ApplyButton\n label=\"Resize\"\n disabled={Boolean(busy) || size.w < 1 || size.h < 1}\n onPress={() => {\n // Resize from the picture before the first pick, or back-to-back sizes stack crops.\n const base = resizeBase ?? current;\n runEdit('Resizing', () => op('resize', base, { width: size.w, height: size.h, fit }), {\n resizeBase: base,\n });\n }}\n />\n <Text style={styles.sectionLabel}>Pad</Text>\n <View style={styles.fieldRow}>\n <NumberField\n label=\"Pad width\"\n value={pad.w}\n onChange={(v) => setPad((p) => ({ ...p, w: Math.round(v) }))}\n />\n <NumberField\n label=\"Pad height\"\n value={pad.h}\n onChange={(v) => setPad((p) => ({ ...p, h: Math.round(v) }))}\n />\n </View>\n <SwatchRow\n label=\"Pad colour\"\n colors={SWATCHES}\n value={pad.color}\n onChange={(color) => setPad((p) => ({ ...p, color }))}\n />\n <ApplyButton\n label=\"Pad\"\n tone=\"soft\"\n disabled={Boolean(busy) || pad.w < 1 || pad.h < 1}\n onPress={() =>\n apply('Padding', 'pad', {\n width: String(pad.w),\n height: String(pad.h),\n color: pad.color,\n })\n }\n />\n </View>\n );\n case 'draw':\n return (\n <View>\n <ChoiceRow\n options={[\n { value: 'pen' as DrawTool, label: 'Pen' },\n { value: 'box' as DrawTool, label: 'Box' },\n { value: 'ellipse' as DrawTool, label: 'Ellipse' },\n { value: 'arrow' as DrawTool, label: 'Arrow' },\n { value: 'text' as DrawTool, label: 'Text' },\n ]}\n value={drawTool}\n onChange={setDrawTool}\n />\n <SwatchRow colors={SWATCHES} value={drawColor} onChange={setDrawColor} />\n <SliderRow\n label={drawTool === 'text' ? 'Text size' : 'Brush size'}\n value={drawSize}\n min={1}\n max={100}\n onChange={setDrawSize}\n format={(v) => `${v}px`}\n />\n {drawTool === 'box' || drawTool === 'ellipse' ? (\n <ToggleRow label=\"Filled\" value={shapeFill} onChange={setShapeFill} />\n ) : null}\n {drawTool === 'text' ? (\n <TextField\n value={shapeText}\n onChange={setShapeText}\n placeholder=\"Text, then drag where it goes\"\n />\n ) : null}\n <View style={styles.countRow}>\n <Text style={styles.countLabel}>\n {drawStrokes.length} stroke{drawStrokes.length === 1 ? '' : 's'} · {shapes.length} shape\n {shapes.length === 1 ? '' : 's'}\n </Text>\n <Pressable\n onPress={() => {\n setDrawStrokes([]);\n setShapes([]);\n }}\n disabled={!drawStrokes.length && !shapes.length}\n hitSlop={8}\n >\n <Text\n style={[styles.linkLabel, !drawStrokes.length && !shapes.length && styles.disabled]}\n >\n Clear\n </Text>\n </Pressable>\n </View>\n <ApplyButton\n label=\"Apply drawing\"\n disabled={Boolean(busy) || (!drawStrokes.length && !shapes.length)}\n onPress={() =>\n apply(\n 'Drawing',\n 'annotate',\n { ops: [...strokesToAnnotateOps(drawStrokes), ...shapes.map(annotateOp)] },\n () => {\n setDrawStrokes([]);\n setShapes([]);\n },\n )\n }\n />\n </View>\n );\n case 'redact':\n return (\n <View>\n <Text style={styles.aiHint}>Drag on the picture to mark regions to redact.</Text>\n <ChoiceRow\n label=\"Method\"\n options={[\n { value: 'blur' as const, label: 'Blur' },\n { value: 'pixelate' as const, label: 'Pixelate' },\n { value: 'solid' as const, label: 'Solid fill' },\n ]}\n value={redactMethod}\n onChange={setRedactMethod}\n />\n {redactMethod === 'solid' ? (\n <SwatchRow\n label=\"Fill colour\"\n colors={SWATCHES}\n value={redactColor}\n onChange={setRedactColor}\n />\n ) : (\n <SliderRow\n label={redactMethod === 'blur' ? 'Blur strength' : 'Pixel size'}\n value={redactRadius}\n min={2}\n max={50}\n onChange={setRedactRadius}\n />\n )}\n <View style={styles.countRow}>\n <Text style={styles.countLabel}>\n {redact.length} region{redact.length === 1 ? '' : 's'}\n </Text>\n <Pressable\n onPress={() => setRedact((r) => r.slice(0, -1))}\n disabled={!redact.length}\n hitSlop={8}\n >\n <Text style={[styles.linkLabel, !redact.length && styles.disabled]}>Undo</Text>\n </Pressable>\n <Pressable onPress={() => setRedact([])} disabled={!redact.length} hitSlop={8}>\n <Text style={[styles.linkLabel, !redact.length && styles.disabled]}>Clear</Text>\n </Pressable>\n </View>\n <ApplyButton\n label=\"Redact\"\n disabled={Boolean(busy) || !redact.length}\n onPress={() =>\n apply(\n 'Redacting',\n 'redact',\n {\n regions: redact.map(({ x, y, width, height }) => ({ x, y, width, height })),\n method: redactMethod,\n radius: redactRadius,\n color: redactColor,\n },\n () => setRedact([]),\n )\n }\n />\n </View>\n );\n case 'effects':\n return (\n <View>\n <View style={styles.row}>\n <Pressable\n onPress={() => apply('Vignette', 'vignette', {})}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\n <Text style={styles.chipLabel}>Vignette</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Framing', 'frame', { thickness: 24, color: 'white' })}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\n <Text style={styles.chipLabel}>Frame</Text>\n </Pressable>\n <Pressable\n onPress={() => apply('Removing background', 'remove_background', {})}\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\n <Text style={styles.chipLabel}>Cut out</Text>\n </Pressable>\n </View>\n <Text style={styles.sectionLabel}>Shadow</Text>\n <View style={styles.row}>\n {SHADOW_PRESETS.map((preset) => (\n <Pressable\n key={preset.id}\n onPress={() =>\n apply(`Shadow ${preset.label}`, 'drop_shadow', shadowParams(preset.params))\n }\n style={({ pressed }) => [styles.chip, pressedStyle(pressed)]}\n >\n <Text style={styles.chipLabel}>{preset.label}</Text>\n </Pressable>\n ))}\n </View>\n </View>\n );\n case 'background':\n return (\n <View>\n <Text style={styles.aiHint}>\n Keys the subject out and puts it on a background you choose. Exact and instant, but the\n light will not match.\n </Text>\n <MediaUrlPicker label=\"New background\" items={images} value={bgUrl} onChange={setBgUrl} />\n <ChoiceRow\n label=\"Fit\"\n options={[\n { value: 'cover' as const, label: 'Fill the frame' },\n { value: 'contain' as const, label: 'Fit inside' },\n ]}\n value={bgFit}\n onChange={setBgFit}\n />\n <ApplyButton\n label=\"Cut and place\"\n disabled={Boolean(busy) || !bgUrl.trim()}\n onPress={() =>\n runEdit('Cutting out and placing', async () => {\n // Key the subject first; compose needs transparency or it pastes a rectangle.\n const cut = await op('remove_background', current, {});\n return op('compose', bgUrl.trim(), {\n overlay_url: cut,\n x: '0',\n y: '0',\n scale: bgFit === 'cover' ? 'W:H' : 'W:-1',\n opacity: 1,\n });\n })\n }\n />\n </View>\n );\n case 'brand':\n return (\n <View>\n <Text style={styles.sectionLabel}>Watermark</Text>\n <TextField value={wmText} onChange={setWmText} placeholder=\"© Yantra\" />\n <ChoiceRow\n options={LOGO_POSITIONS.map((p) => ({ value: p, label: p.replace('-', ' ') }))}\n value={wmPosition}\n onChange={setWmPosition}\n />\n <SliderRow label=\"Font size\" value={wmSize} min={6} max={160} onChange={setWmSize} />\n <SwatchRow colors={SWATCHES} value={wmColor} onChange={setWmColor} />\n <SliderRow\n label=\"Opacity\"\n value={wmOpacity}\n min={0}\n max={1}\n step={0.05}\n format={(v) => `${Math.round(v * 100)}%`}\n onChange={setWmOpacity}\n />\n <SliderRow label=\"Padding\" value={wmPadding} min={0} max={120} onChange={setWmPadding} />\n <ApplyButton\n label=\"Apply watermark\"\n disabled={Boolean(busy) || !wmText.trim()}\n onPress={() =>\n apply('Watermarking', 'watermark', {\n text: wmText,\n position: wmPosition,\n font_size: wmSize,\n font_color: wmColor,\n opacity: wmOpacity,\n padding: wmPadding,\n })\n }\n />\n <Text style={styles.sectionLabel}>Logo</Text>\n <MediaUrlPicker items={images} value={logoUrl} onChange={setLogoUrl} />\n <ChoiceRow\n options={LOGO_POSITIONS.map((p) => ({ value: p, label: p.replace('-', ' ') }))}\n value={logoPosition}\n onChange={setLogoPosition}\n />\n <SliderRow\n label=\"Size\"\n value={logoPercent}\n min={4}\n max={80}\n format={(v) => `${v}% of width`}\n onChange={setLogoPercent}\n />\n <SliderRow\n label=\"Opacity\"\n value={logoOpacity}\n min={0}\n max={1}\n step={0.05}\n format={(v) => `${Math.round(v * 100)}%`}\n onChange={setLogoOpacity}\n />\n <ApplyButton\n label=\"Apply logo\"\n tone=\"soft\"\n disabled={Boolean(busy) || !logoUrl.trim() || !natural}\n onPress={placeLogo}\n />\n </View>\n );\n case 'layers':\n return (\n <View>\n <Text style={styles.sectionLabel}>Overlay</Text>\n <MediaUrlPicker\n items={images}\n value={overlay.url}\n onChange={(url) => setOverlay((o) => ({ ...o, url }))}\n />\n <View style={styles.fieldRow}>\n <NumberField\n label=\"X\"\n value={overlay.x}\n onChange={(x) => setOverlay((o) => ({ ...o, x }))}\n />\n <NumberField\n label=\"Y\"\n value={overlay.y}\n onChange={(y) => setOverlay((o) => ({ ...o, y }))}\n />\n </View>\n <TextField\n label=\"Scale (0.5 or 200:-1)\"\n value={overlay.scale}\n onChange={(scale) => setOverlay((o) => ({ ...o, scale }))}\n placeholder=\"optional\"\n />\n <SliderRow\n label=\"Opacity\"\n value={overlay.opacity}\n min={0}\n max={1}\n step={0.05}\n format={(v) => `${Math.round(v * 100)}%`}\n onChange={(opacity) => setOverlay((o) => ({ ...o, opacity }))}\n />\n <ApplyButton\n label=\"Compose overlay\"\n disabled={Boolean(busy) || !overlay.url.trim()}\n onPress={() =>\n apply('Compositing', 'compose', {\n overlay_url: unwrapProxyUrl(overlay.url.trim()),\n x: String(Math.round(overlay.x)),\n y: String(Math.round(overlay.y)),\n ...(overlay.scale.trim() ? { scale: overlay.scale.trim() } : {}),\n opacity: overlay.opacity,\n })\n }\n />\n <Text style={styles.sectionLabel}>Mask</Text>\n <MediaUrlPicker\n items={images}\n value={mask.url}\n onChange={(url) => setMask((m) => ({ ...m, url }))}\n placeholder=\"A greyscale mask image\"\n />\n <ToggleRow\n label=\"Invert mask\"\n value={mask.invert}\n onChange={(invert) => setMask((m) => ({ ...m, invert }))}\n />\n <ApplyButton\n label=\"Apply mask\"\n tone=\"soft\"\n disabled={Boolean(busy) || !mask.url.trim()}\n onPress={() =>\n apply('Masking', 'mask', {\n mask_url: unwrapProxyUrl(mask.url.trim()),\n invert: mask.invert,\n })\n }\n />\n </View>\n );\n case 'levels':\n return (\n <View>\n {(\n [\n ['inBlack', 'Input black', 0, 1],\n ['inWhite', 'Input white', 0, 1],\n ['outBlack', 'Output black', 0, 1],\n ['outWhite', 'Output white', 0, 1],\n ['gamma', 'Gamma', 0.1, 3],\n ] as const\n ).map(([key, label, min, max]) => (\n <SliderRow\n key={key}\n label={label}\n value={levels[key]}\n min={min}\n max={max}\n step={0.01}\n format={(v) => v.toFixed(2)}\n onChange={(v) => setLevels((l) => ({ ...l, [key]: v }))}\n />\n ))}\n <ApplyButton\n label=\"Apply levels\"\n disabled={Boolean(busy)}\n onPress={() =>\n apply('Applying levels', 'levels', {\n in_black: levels.inBlack,\n in_white: levels.inWhite,\n out_black: levels.outBlack,\n out_white: levels.outWhite,\n gamma: levels.gamma,\n })\n }\n />\n <Text style={styles.sectionLabel}>Colorspace</Text>\n <ChoiceRow\n options={COLORSPACE_TARGETS.map((v) => ({ value: v, label: v }))}\n value={csTo}\n onChange={setCsTo}\n />\n <ChoiceRow\n label=\"Range\"\n options={[\n { value: '' as const, label: 'Auto' },\n { value: 'tv' as const, label: 'Limited (tv)' },\n { value: 'pc' as const, label: 'Full (pc)' },\n ]}\n value={csRange}\n onChange={setCsRange}\n />\n <ToggleRow label=\"High quality (zscale)\" value={csZscale} onChange={setCsZscale} />\n <ApplyButton\n label=\"Convert colorspace\"\n tone=\"soft\"\n disabled={Boolean(busy)}\n onPress={() =>\n apply('Converting colorspace', 'colorspace', {\n to: csTo,\n ...(csRange ? { range: csRange } : {}),\n use_zscale: csZscale,\n })\n }\n />\n </View>\n );\n case 'export':\n default:\n return (\n <View>\n <ChoiceRow\n label=\"Format\"\n options={EXPORT_FORMATS.map((v) => ({ value: v, label: v.toUpperCase() }))}\n value={format}\n onChange={setFormat}\n />\n {format !== 'png' ? (\n <SliderRow label=\"Quality\" value={quality} min={1} max={100} onChange={setQuality} />\n ) : null}\n <ApplyButton\n label={`Convert to ${format.toUpperCase()}`}\n disabled={Boolean(busy)}\n onPress={() => apply(`Converting to ${format}`, 'convert', convertParams(format, quality))}\n />\n <ApplyButton\n label=\"Open current image\"\n tone=\"soft\"\n onPress={() => void Linking.openURL(current)}\n />\n </View>\n );\n }\n })();\n\n return (\n <View style={styles.root} testID=\"image-editor\">\n <View style={styles.header}>\n <Pressable\n onPress={onClose}\n hitSlop={10}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close editor\"\n style={({ pressed }) => [styles.headerIcon, pressedStyle(pressed)]}\n >\n <MaterialCommunityIcons name=\"close\" size={22} color={theme.edInk} />\n </Pressable>\n <Text style={styles.headerTitle} numberOfLines={1}>\n {name?.trim() || 'Edit image'}\n </Text>\n <View style={styles.headerActions}>\n <Pressable\n onPress={() => setHistory((h) => (h.length > 1 ? h.slice(0, -1) : h))}\n hitSlop={10}\n disabled={!edited || busy !== null}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Undo\"\n style={({ pressed }) => [\n styles.headerIcon,\n !edited || busy ? styles.disabled : null,\n pressedStyle(pressed),\n ]}\n >\n <MaterialCommunityIcons name=\"undo-variant\" size={21} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => Linking.openURL(current)}\n hitSlop={10}\n disabled={!edited}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Open result\"\n style={({ pressed }) => [\n styles.headerIcon,\n !edited ? styles.disabled : null,\n pressedStyle(pressed),\n ]}\n >\n <MaterialCommunityIcons name=\"open-in-new\" size={20} color={theme.edInk} />\n </Pressable>\n <Pressable\n onPress={() => {\n if (edited) onSave?.(current);\n onClose();\n }}\n hitSlop={10}\n disabled={busy !== null}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Done\"\n style={({ pressed }) => [styles.donePill, busy ? styles.disabled : null, pressedStyle(pressed)]}\n >\n <Text style={styles.doneLabel}>{edited ? 'Done' : 'Close'}</Text>\n </Pressable>\n </View>\n </View>\n\n <View style={styles.stage}>\n <Image\n source={{ uri: current }}\n style={StyleSheet.absoluteFill}\n contentFit=\"contain\"\n transition={150}\n />\n <ImageMarkup\n natural={natural}\n mode={markupMode}\n strokes={markupStrokes}\n strokeColor={tab === 'aiedit' ? MARKER_COLOR : drawColor}\n strokeSize={tab === 'aiedit' ? markSize : drawSize}\n onStroke={onStroke}\n boxes={markupBoxes}\n boxKind={\n tab === 'crop'\n ? 'crop'\n : tab === 'redact'\n ? 'redact'\n : drawTool === 'ellipse'\n ? 'ellipse'\n : drawTool === 'arrow'\n ? 'arrow'\n : 'rect'\n }\n boxColor={tab === 'draw' ? drawColor : '#ffffff'}\n onBox={onBox}\n />\n {busy ? (\n <View style={styles.busyVeil}>\n <ActivityIndicator color=\"#F7F7FA\" />\n <Text style={styles.busyLabel}>{busy}…</Text>\n </View>\n ) : null}\n {edited && !busy ? (\n <View style={styles.editedBadge} pointerEvents=\"none\">\n <Text style={styles.editedBadgeLabel}>edit {history.length - 1}</Text>\n </View>\n ) : null}\n </View>\n\n <View style={styles.dock}>\n <ScrollView\n style={styles.panelScroll}\n contentContainerStyle={styles.panel}\n keyboardShouldPersistTaps=\"handled\"\n >\n <Text style={styles.sheetTitle}>{TABS.find((entry) => entry.id === tab)?.label}</Text>\n {panel}\n </ScrollView>\n\n <ScrollView\n horizontal\n style={HSCROLL}\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.toolbar}\n >\n {TABS.map((entry) => {\n const active = tab === entry.id;\n return (\n <Pressable\n key={entry.id}\n onPress={() => setTab(entry.id)}\n style={({ pressed }) => [styles.toolbarTab, pressedStyle(pressed)]}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: active }}\n >\n <View style={[styles.toolbarIcon, active && styles.toolbarIconOn]}>\n <MaterialCommunityIcons\n name={entry.icon}\n size={22}\n color={active ? theme.edInk : theme.edInk3}\n />\n </View>\n <Text style={[styles.toolbarLabel, active && styles.toolbarLabelActive]}>\n {entry.label}\n </Text>\n </Pressable>\n );\n })}\n </ScrollView>\n </View>\n\n {notice ? (\n <View style={styles.notice}>\n <Text style={styles.noticeText}>{notice}</Text>\n <Pressable onPress={() => setNotice(null)} hitSlop={8}>\n <Text style={styles.noticeDismiss}>OK</Text>\n </Pressable>\n </View>\n ) : null}\n </View>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.edBg },\n header: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n gap: SPACE.sm,\n },\n headerIcon: {\n width: 40,\n height: 40,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n },\n headerTitle: { ...TYPE.title, flex: 1, color: theme.edInk, textAlign: 'center' },\n headerActions: { flexDirection: 'row', alignItems: 'center', gap: SPACE.xs },\n donePill: {\n minHeight: 36,\n marginLeft: SPACE.xs,\n paddingHorizontal: SPACE.lg,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.primary,\n alignItems: 'center',\n justifyContent: 'center',\n },\n doneLabel: { ...TYPE.label, color: theme.primaryForeground },\n disabled: { opacity: 0.35 },\n stage: {\n flex: 1,\n marginHorizontal: SPACE.md,\n marginTop: SPACE.xs,\n borderRadius: RADIUS.xl,\n overflow: 'hidden',\n backgroundColor: '#000000', // media stage stays dark\n },\n busyVeil: {\n ...StyleSheet.absoluteFillObject,\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm,\n backgroundColor: 'rgba(10, 10, 12, 0.55)',\n },\n busyLabel: { ...TYPE.caption, color: '#E8E8EE' },\n editedBadge: {\n position: 'absolute',\n right: SPACE.md,\n top: SPACE.md,\n paddingHorizontal: SPACE.sm,\n paddingVertical: SPACE.xs,\n borderRadius: RADIUS.pill,\n backgroundColor: 'rgba(10, 10, 12, 0.6)',\n },\n editedBadgeLabel: { ...TYPE.caption, color: '#F7F7FA' },\n dock: {\n marginTop: SPACE.md,\n backgroundColor: theme.edPanel,\n borderTopLeftRadius: RADIUS.xl,\n borderTopRightRadius: RADIUS.xl,\n },\n sheetTitle: { ...TYPE.label, color: theme.edInk, marginBottom: SPACE.sm },\n aiHint: { ...TYPE.caption, color: theme.edInk2, marginBottom: SPACE.sm },\n aiInput: {\n ...TYPE.body,\n minHeight: 60,\n borderRadius: RADIUS.md,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n backgroundColor: theme.edRaised,\n color: theme.edInk,\n textAlignVertical: 'top',\n marginBottom: SPACE.sm,\n },\n chipOn: { borderColor: theme.edInk, backgroundColor: theme.edRaisedHi },\n aiCta: {\n minHeight: HIT,\n marginTop: SPACE.xs,\n marginBottom: SPACE.sm,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edInk,\n alignItems: 'center',\n justifyContent: 'center',\n },\n aiCtaLabel: { ...TYPE.label, color: theme.edOnInk },\n variantThumb: {\n width: 72,\n height: 72,\n borderRadius: RADIUS.sm,\n overflow: 'hidden',\n marginRight: SPACE.sm,\n backgroundColor: theme.edRaised,\n },\n variantImg: { width: '100%', height: '100%' },\n panelScroll: { maxHeight: 300 },\n panel: {\n minHeight: 104,\n paddingHorizontal: SPACE.lg,\n paddingTop: SPACE.lg,\n paddingBottom: SPACE.sm,\n },\n sectionLabel: { ...TYPE.label, color: theme.edInk, marginTop: SPACE.md, marginBottom: SPACE.sm },\n countRow: { flexDirection: 'row', alignItems: 'center', gap: SPACE.lg, minHeight: 32, marginBottom: SPACE.xs },\n countLabel: { ...TYPE.caption, color: theme.edInk2, flex: 1 },\n linkLabel: { ...TYPE.label, color: theme.edInk2 },\n fieldRow: { flexDirection: 'row', gap: SPACE.sm, marginBottom: SPACE.sm },\n sizeCard: {\n width: 150,\n paddingHorizontal: SPACE.md,\n paddingVertical: SPACE.sm,\n borderRadius: RADIUS.md,\n backgroundColor: theme.edRaised,\n borderWidth: 1,\n borderColor: 'transparent',\n },\n sizeTitle: { ...TYPE.label, color: theme.edInk },\n sizeMeta: { ...TYPE.caption, fontWeight: '400', color: theme.edInk3 },\n variantOn: { borderWidth: 2, borderColor: theme.edAccent },\n variantLabel: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n textAlign: 'center',\n fontSize: 10,\n lineHeight: 14,\n color: '#FFFFFF',\n backgroundColor: 'rgba(0,0,0,0.55)',\n },\n row: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm, flexWrap: 'wrap', paddingVertical: SPACE.xs },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n minHeight: 36,\n paddingHorizontal: SPACE.md + 2,\n borderRadius: RADIUS.pill,\n backgroundColor: theme.edRaised,\n borderWidth: 1,\n borderColor: 'transparent',\n },\n chipAccent: { backgroundColor: theme.edInk },\n chipLabel: { ...TYPE.label, color: theme.edInk, textTransform: 'capitalize' },\n chipLabelDark: { color: theme.edOnInk },\n applyBtn: { alignSelf: 'flex-start', marginTop: SPACE.sm },\n adjustRow: { flexDirection: 'row', alignItems: 'center', gap: SPACE.md, minHeight: 36 },\n adjustLabel: { ...TYPE.caption, color: theme.edInk2, width: 84 },\n adjustValue: {\n ...TYPE.label,\n color: theme.edInk,\n fontVariant: ['tabular-nums'],\n minWidth: 48,\n textAlign: 'center',\n },\n toolbar: {\n flexDirection: 'row',\n gap: SPACE.xs,\n paddingHorizontal: SPACE.sm,\n paddingTop: SPACE.xs,\n paddingBottom: SPACE.md,\n },\n toolbarTab: { alignItems: 'center', gap: SPACE.xs, minWidth: 60, minHeight: HIT },\n toolbarIcon: {\n width: 48,\n height: 32,\n borderRadius: RADIUS.pill,\n alignItems: 'center',\n justifyContent: 'center',\n },\n toolbarIconOn: { backgroundColor: theme.edRaisedHi },\n toolbarLabel: { color: theme.edInk3, fontSize: 11, lineHeight: 14, fontWeight: '500' },\n toolbarLabelActive: { color: theme.edInk, fontWeight: '600' },\n notice: {\n position: 'absolute',\n left: SPACE.lg,\n right: SPACE.lg,\n bottom: 96,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.md,\n borderRadius: RADIUS.lg,\n backgroundColor: theme.edInk,\n },\n noticeText: { ...TYPE.label, fontWeight: '500', flex: 1, color: theme.edOnInk },\n noticeDismiss: { ...TYPE.label, color: theme.edAccent },\n }),\n);\n\nexport default ImageEditorExperience;\n"],"names":["React","RNImage","_a","Image"],"mappings":"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"}