@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
@@ -0,0 +1,195 @@
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useState,useRef,useMemo}from'react';import {PanResponder,View,StyleSheet}from'react-native';import Svg,{Polyline,Ellipse,Line,Rect}from'react-native-svg';import {containRect,rectFromCorners,viewToNatural}from'./imageEditOps.js';var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ let seq = 0;
21
+ const nextId = () => `mk-${Date.now().toString(36)}-${seq++}`;
22
+ function ImageMarkup({
23
+ natural,
24
+ mode,
25
+ strokes,
26
+ strokeColor,
27
+ strokeSize,
28
+ onStroke,
29
+ boxes,
30
+ boxKind = "rect",
31
+ boxColor = "#ffffff",
32
+ onBox
33
+ }) {
34
+ const [view, setView] = useState({
35
+ width: 0,
36
+ height: 0
37
+ });
38
+ const [livePoints, setLivePoints] = useState(null);
39
+ const [liveBox, setLiveBox] = useState(null);
40
+ const frame = natural ? containRect(view, natural) : null;
41
+ const scale = frame && natural ? frame.width / natural.width : 1;
42
+ const live = useRef({
43
+ mode,
44
+ natural,
45
+ frame,
46
+ strokeColor,
47
+ strokeSize,
48
+ boxKind,
49
+ boxColor,
50
+ onStroke,
51
+ onBox
52
+ });
53
+ live.current = {
54
+ mode,
55
+ natural,
56
+ frame,
57
+ strokeColor,
58
+ strokeSize,
59
+ boxKind,
60
+ boxColor,
61
+ onStroke,
62
+ onBox
63
+ };
64
+ const points = useRef([]);
65
+ const anchor = useRef(null);
66
+ const responder = useMemo(() => PanResponder.create({
67
+ onStartShouldSetPanResponder: () => live.current.mode !== "none" && Boolean(live.current.natural),
68
+ onMoveShouldSetPanResponder: () => live.current.mode !== "none" && Boolean(live.current.natural),
69
+ onPanResponderTerminationRequest: () => false,
70
+ onPanResponderGrant: (e) => {
71
+ const {
72
+ natural: nat,
73
+ frame: fr,
74
+ mode: m
75
+ } = live.current;
76
+ if (!nat || !fr) return;
77
+ const p = viewToNatural({
78
+ x: e.nativeEvent.locationX,
79
+ y: e.nativeEvent.locationY
80
+ }, fr, nat);
81
+ if (m === "stroke") {
82
+ points.current = [p.x, p.y];
83
+ setLivePoints(points.current);
84
+ } else {
85
+ anchor.current = p;
86
+ setLiveBox({
87
+ id: "live",
88
+ x1: p.x,
89
+ y1: p.y,
90
+ x2: p.x,
91
+ y2: p.y,
92
+ kind: live.current.boxKind,
93
+ color: live.current.boxColor
94
+ });
95
+ }
96
+ },
97
+ onPanResponderMove: (e) => {
98
+ const {
99
+ natural: nat,
100
+ frame: fr,
101
+ mode: m
102
+ } = live.current;
103
+ if (!nat || !fr) return;
104
+ const p = viewToNatural({
105
+ x: e.nativeEvent.locationX,
106
+ y: e.nativeEvent.locationY
107
+ }, fr, nat);
108
+ if (m === "stroke") {
109
+ const pts = points.current;
110
+ const lx = pts[pts.length - 2];
111
+ const ly = pts[pts.length - 1];
112
+ if (Math.hypot(p.x - lx, p.y - ly) < 2) return;
113
+ points.current = [...pts, p.x, p.y];
114
+ setLivePoints(points.current);
115
+ } else if (anchor.current) {
116
+ const a = anchor.current;
117
+ setLiveBox((b) => b ? __spreadProps(__spreadValues({}, b), {
118
+ x1: a.x,
119
+ y1: a.y,
120
+ x2: p.x,
121
+ y2: p.y
122
+ }) : b);
123
+ }
124
+ },
125
+ onPanResponderRelease: () => {
126
+ const {
127
+ mode: m
128
+ } = live.current;
129
+ if (m === "stroke") {
130
+ const pts = points.current;
131
+ if (pts.length >= 2) live.current.onStroke({
132
+ id: nextId(),
133
+ points: pts.length === 2 ? [...pts, pts[0] + 1, pts[1]] : pts,
134
+ size: live.current.strokeSize,
135
+ color: live.current.strokeColor
136
+ });
137
+ points.current = [];
138
+ setLivePoints(null);
139
+ } else {
140
+ setLiveBox((b) => {
141
+ if (b) {
142
+ const rect = rectFromCorners({
143
+ x: b.x1,
144
+ y: b.y1
145
+ }, {
146
+ x: b.x2,
147
+ y: b.y2
148
+ });
149
+ if (rect.width >= 4 || rect.height >= 4) live.current.onBox(__spreadProps(__spreadValues({}, b), {
150
+ id: nextId()
151
+ }), rect);
152
+ }
153
+ return null;
154
+ });
155
+ anchor.current = null;
156
+ }
157
+ }
158
+ }), []);
159
+ const toView = (x, y) => frame ? {
160
+ x: frame.x + x * scale,
161
+ y: frame.y + y * scale
162
+ } : {
163
+ x,
164
+ y
165
+ };
166
+ const polyline = (pts) => {
167
+ const out = [];
168
+ for (let i = 0; i + 1 < pts.length; i += 2) {
169
+ const v = toView(pts[i], pts[i + 1]);
170
+ out.push(`${v.x.toFixed(1)},${v.y.toFixed(1)}`);
171
+ }
172
+ return out.join(" ");
173
+ };
174
+ const drawBox = (b, key) => {
175
+ const a = toView(b.x1, b.y1);
176
+ const c = toView(b.x2, b.y2);
177
+ const x = Math.min(a.x, c.x);
178
+ const y = Math.min(a.y, c.y);
179
+ const w = Math.abs(c.x - a.x);
180
+ const h = Math.abs(c.y - a.y);
181
+ if (b.kind === "ellipse") return /* @__PURE__ */ jsx(Ellipse, { cx: x + w / 2, cy: y + h / 2, rx: w / 2, ry: h / 2, stroke: b.color, strokeWidth: 2, fill: "none" }, key);
182
+ if (b.kind === "arrow") return /* @__PURE__ */ jsx(Line, { x1: a.x, y1: a.y, x2: c.x, y2: c.y, stroke: b.color, strokeWidth: 3 }, key);
183
+ if (b.kind === "redact") return /* @__PURE__ */ jsx(Rect, { x, y, width: w, height: h, fill: "rgba(0,0,0,0.45)", stroke: b.color, strokeWidth: 1.5 }, key);
184
+ return /* @__PURE__ */ jsx(Rect, { x, y, width: w, height: h, fill: b.kind === "crop" ? "rgba(255,255,255,0.08)" : "none", stroke: b.color, strokeWidth: 2, strokeDasharray: b.kind === "crop" ? "6,4" : void 0 }, key);
185
+ };
186
+ return /* @__PURE__ */ jsx(View, __spreadProps(__spreadValues({ style: StyleSheet.absoluteFill, pointerEvents: mode === "none" ? "none" : "auto", onLayout: (e) => setView({
187
+ width: e.nativeEvent.layout.width,
188
+ height: e.nativeEvent.layout.height
189
+ }) }, responder.panHandlers), { children: view.width > 0 ? /* @__PURE__ */ jsxs(Svg, { width: view.width, height: view.height, pointerEvents: "none", children: [
190
+ strokes.map((s) => /* @__PURE__ */ jsx(Polyline, { points: polyline(s.points), stroke: s.color, strokeWidth: Math.max(1, s.size * scale), strokeLinecap: "round", strokeLinejoin: "round", strokeOpacity: 0.85, fill: "none" }, s.id)),
191
+ livePoints ? /* @__PURE__ */ jsx(Polyline, { points: polyline(livePoints), stroke: strokeColor, strokeWidth: Math.max(1, strokeSize * scale), strokeLinecap: "round", strokeLinejoin: "round", strokeOpacity: 0.85, fill: "none" }) : null,
192
+ boxes.map((b) => drawBox(b, b.id)),
193
+ liveBox ? drawBox(liveBox, "live") : null
194
+ ] }) : null }));
195
+ }export{ImageMarkup};//# sourceMappingURL=ImageMarkup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageMarkup.js","sources":["../../../../src/features/canvas/imageEditor/ImageMarkup.tsx"],"sourcesContent":["/**\n * The touch layer over the image editor's picture - the phone twin of the web\n * KonvaOverlay. It sits exactly over the contain-fit picture and works in\n * the picture's own pixels, so whatever it collects goes straight to the\n * connector ops:\n *\n * stroke freehand scribble (Mark & edit, Draw)\n * rect drag a box (free crop, redact, annotate shapes)\n *\n * Drawn with react-native-svg; gestures through PanResponder.\n */\nimport React, { useMemo, useRef, useState } from 'react';\nimport { PanResponder, StyleSheet, View, type LayoutChangeEvent } from 'react-native';\nimport Svg, { Ellipse, Line, Polyline, Rect } from 'react-native-svg';\nimport {\n containRect,\n rectFromCorners,\n viewToNatural,\n type NaturalSize,\n type PixelRect,\n type Stroke,\n} from './imageEditOps';\n\nexport type MarkupMode = 'none' | 'stroke' | 'rect';\n\nexport interface MarkupBox {\n id: string;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n kind: 'rect' | 'ellipse' | 'arrow' | 'crop' | 'redact';\n color: string;\n}\n\nlet seq = 0;\nconst nextId = () => `mk-${Date.now().toString(36)}-${seq++}`;\n\nexport function ImageMarkup({\n natural,\n mode,\n strokes,\n strokeColor,\n strokeSize,\n onStroke,\n boxes,\n boxKind = 'rect',\n boxColor = '#ffffff',\n onBox,\n}: {\n natural: NaturalSize | null;\n mode: MarkupMode;\n strokes: Stroke[];\n strokeColor: string;\n /** Brush diameter in natural pixels. */\n strokeSize: number;\n onStroke: (stroke: Stroke) => void;\n boxes: MarkupBox[];\n boxKind?: MarkupBox['kind'];\n boxColor?: string;\n onBox: (box: MarkupBox, rect: PixelRect) => void;\n}) {\n const [view, setView] = useState({ width: 0, height: 0 });\n const [livePoints, setLivePoints] = useState<number[] | null>(null);\n const [liveBox, setLiveBox] = useState<MarkupBox | null>(null);\n const frame = natural ? containRect(view, natural) : null;\n const scale = frame && natural ? frame.width / natural.width : 1;\n\n const live = useRef({ mode, natural, frame, strokeColor, strokeSize, boxKind, boxColor, onStroke, onBox });\n live.current = { mode, natural, frame, strokeColor, strokeSize, boxKind, boxColor, onStroke, onBox };\n const points = useRef<number[]>([]);\n const anchor = useRef<{ x: number; y: number } | null>(null);\n\n const responder = useMemo(\n () =>\n PanResponder.create({\n onStartShouldSetPanResponder: () => live.current.mode !== 'none' && Boolean(live.current.natural),\n onMoveShouldSetPanResponder: () => live.current.mode !== 'none' && Boolean(live.current.natural),\n onPanResponderTerminationRequest: () => false,\n onPanResponderGrant: (e) => {\n const { natural: nat, frame: fr, mode: m } = live.current;\n if (!nat || !fr) return;\n const p = viewToNatural({ x: e.nativeEvent.locationX, y: e.nativeEvent.locationY }, fr, nat);\n if (m === 'stroke') {\n points.current = [p.x, p.y];\n setLivePoints(points.current);\n } else {\n anchor.current = p;\n setLiveBox({\n id: 'live',\n x1: p.x,\n y1: p.y,\n x2: p.x,\n y2: p.y,\n kind: live.current.boxKind,\n color: live.current.boxColor,\n });\n }\n },\n onPanResponderMove: (e) => {\n const { natural: nat, frame: fr, mode: m } = live.current;\n if (!nat || !fr) return;\n const p = viewToNatural({ x: e.nativeEvent.locationX, y: e.nativeEvent.locationY }, fr, nat);\n if (m === 'stroke') {\n const pts = points.current;\n const lx = pts[pts.length - 2];\n const ly = pts[pts.length - 1];\n // Skip sub-2px jitter: it only fattens the op list.\n if (Math.hypot(p.x - lx, p.y - ly) < 2) return;\n points.current = [...pts, p.x, p.y];\n setLivePoints(points.current);\n } else if (anchor.current) {\n const a = anchor.current;\n setLiveBox((b) => (b ? { ...b, x1: a.x, y1: a.y, x2: p.x, y2: p.y } : b));\n }\n },\n onPanResponderRelease: () => {\n const { mode: m } = live.current;\n if (m === 'stroke') {\n const pts = points.current;\n if (pts.length >= 2)\n live.current.onStroke({\n id: nextId(),\n points: pts.length === 2 ? [...pts, pts[0] + 1, pts[1]] : pts,\n size: live.current.strokeSize,\n color: live.current.strokeColor,\n });\n points.current = [];\n setLivePoints(null);\n } else {\n setLiveBox((b) => {\n if (b) {\n const rect = rectFromCorners({ x: b.x1, y: b.y1 }, { x: b.x2, y: b.y2 });\n // A tap is not a box; arrows only need length.\n if (rect.width >= 4 || rect.height >= 4)\n live.current.onBox({ ...b, id: nextId() }, rect);\n }\n return null;\n });\n anchor.current = null;\n }\n },\n }),\n [],\n );\n\n const toView = (x: number, y: number) => (frame ? { x: frame.x + x * scale, y: frame.y + y * scale } : { x, y });\n const polyline = (pts: number[]) => {\n const out: string[] = [];\n for (let i = 0; i + 1 < pts.length; i += 2) {\n const v = toView(pts[i], pts[i + 1]);\n out.push(`${v.x.toFixed(1)},${v.y.toFixed(1)}`);\n }\n return out.join(' ');\n };\n const drawBox = (b: MarkupBox, key: string) => {\n const a = toView(b.x1, b.y1);\n const c = toView(b.x2, b.y2);\n const x = Math.min(a.x, c.x);\n const y = Math.min(a.y, c.y);\n const w = Math.abs(c.x - a.x);\n const h = Math.abs(c.y - a.y);\n if (b.kind === 'ellipse')\n return (\n <Ellipse\n key={key}\n cx={x + w / 2}\n cy={y + h / 2}\n rx={w / 2}\n ry={h / 2}\n stroke={b.color}\n strokeWidth={2}\n fill=\"none\"\n />\n );\n if (b.kind === 'arrow')\n return <Line key={key} x1={a.x} y1={a.y} x2={c.x} y2={c.y} stroke={b.color} strokeWidth={3} />;\n if (b.kind === 'redact')\n return (\n <Rect\n key={key}\n x={x}\n y={y}\n width={w}\n height={h}\n fill=\"rgba(0,0,0,0.45)\"\n stroke={b.color}\n strokeWidth={1.5}\n />\n );\n return (\n <Rect\n key={key}\n x={x}\n y={y}\n width={w}\n height={h}\n fill={b.kind === 'crop' ? 'rgba(255,255,255,0.08)' : 'none'}\n stroke={b.color}\n strokeWidth={2}\n strokeDasharray={b.kind === 'crop' ? '6,4' : undefined}\n />\n );\n };\n\n return (\n <View\n style={StyleSheet.absoluteFill}\n pointerEvents={mode === 'none' ? 'none' : 'auto'}\n onLayout={(e: LayoutChangeEvent) =>\n setView({ width: e.nativeEvent.layout.width, height: e.nativeEvent.layout.height })\n }\n {...responder.panHandlers}\n >\n {view.width > 0 ? (\n <Svg width={view.width} height={view.height} pointerEvents=\"none\">\n {strokes.map((s) => (\n <Polyline\n key={s.id}\n points={polyline(s.points)}\n stroke={s.color}\n strokeWidth={Math.max(1, s.size * scale)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeOpacity={0.85}\n fill=\"none\"\n />\n ))}\n {livePoints ? (\n <Polyline\n points={polyline(livePoints)}\n stroke={strokeColor}\n strokeWidth={Math.max(1, strokeSize * scale)}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeOpacity={0.85}\n fill=\"none\"\n />\n ) : null}\n {boxes.map((b) => drawBox(b, b.id))}\n {liveBox ? drawBox(liveBox, 'live') : null}\n </Svg>\n ) : null}\n </View>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAyBA,IAAI,GAAM,GAAA,CAAA;AACV,MAAM,MAAA,GAAS,MAAM,CAAA,GAAA,EAAM,IAAK,CAAA,GAAA,GAAM,QAAS,CAAA,EAAE,CAAC,CAAA,CAAA,EAAI,GAAK,EAAA,CAAA,CAAA;AACpD,SAAS,WAAY,CAAA;AAAA,EAC1B,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAU,GAAA,MAAA;AAAA,EACV,QAAW,GAAA,SAAA;AAAA,EACX;AACF,CAYG,EAAA;AACD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAS,CAAA;AAAA,IAC/B,KAAO,EAAA,CAAA;AAAA,IACP,MAAQ,EAAA;AAAA,GACT,CAAA;AACD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAA0B,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAA2B,IAAI,CAAA;AAC7D,EAAA,MAAM,KAAQ,GAAA,OAAA,GAAU,WAAY,CAAA,IAAA,EAAM,OAAO,CAAI,GAAA,IAAA;AACrD,EAAA,MAAM,QAAQ,KAAS,IAAA,OAAA,GAAU,KAAM,CAAA,KAAA,GAAQ,QAAQ,KAAQ,GAAA,CAAA;AAC/D,EAAA,MAAM,OAAO,MAAO,CAAA;AAAA,IAClB,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,IAAA,CAAK,OAAU,GAAA;AAAA,IACb,IAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACA,EAAM,MAAA,MAAA,GAAS,MAAiB,CAAA,EAAE,CAAA;AAClC,EAAM,MAAA,MAAA,GAAS,OAGL,IAAI,CAAA;AACd,EAAA,MAAM,SAAY,GAAA,OAAA,CAAQ,MAAM,YAAA,CAAa,MAAO,CAAA;AAAA,IAClD,4BAAA,EAA8B,MAAM,IAAK,CAAA,OAAA,CAAQ,SAAS,MAAU,IAAA,OAAA,CAAQ,IAAK,CAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IAChG,2BAAA,EAA6B,MAAM,IAAK,CAAA,OAAA,CAAQ,SAAS,MAAU,IAAA,OAAA,CAAQ,IAAK,CAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IAC/F,kCAAkC,MAAM,KAAA;AAAA,IACxC,qBAAqB,CAAK,CAAA,KAAA;AACxB,MAAM,MAAA;AAAA,QACJ,OAAS,EAAA,GAAA;AAAA,QACT,KAAO,EAAA,EAAA;AAAA,QACP,IAAM,EAAA;AAAA,UACJ,IAAK,CAAA,OAAA;AACT,MAAI,IAAA,CAAC,GAAO,IAAA,CAAC,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,aAAc,CAAA;AAAA,QACtB,CAAA,EAAG,EAAE,WAAY,CAAA,SAAA;AAAA,QACjB,CAAA,EAAG,EAAE,WAAY,CAAA;AAAA,OACnB,EAAG,IAAI,GAAG,CAAA;AACV,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,MAAA,CAAO,OAAU,GAAA,CAAC,CAAE,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA;AAC1B,QAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAAA,OACvB,MAAA;AACL,QAAA,MAAA,CAAO,OAAU,GAAA,CAAA;AACjB,QAAW,UAAA,CAAA;AAAA,UACT,EAAI,EAAA,MAAA;AAAA,UACJ,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAA,EAAM,KAAK,OAAQ,CAAA,OAAA;AAAA,UACnB,KAAA,EAAO,KAAK,OAAQ,CAAA;AAAA,SACrB,CAAA;AAAA;AACH,KACF;AAAA,IACA,oBAAoB,CAAK,CAAA,KAAA;AACvB,MAAM,MAAA;AAAA,QACJ,OAAS,EAAA,GAAA;AAAA,QACT,KAAO,EAAA,EAAA;AAAA,QACP,IAAM,EAAA;AAAA,UACJ,IAAK,CAAA,OAAA;AACT,MAAI,IAAA,CAAC,GAAO,IAAA,CAAC,EAAI,EAAA;AACjB,MAAA,MAAM,IAAI,aAAc,CAAA;AAAA,QACtB,CAAA,EAAG,EAAE,WAAY,CAAA,SAAA;AAAA,QACjB,CAAA,EAAG,EAAE,WAAY,CAAA;AAAA,OACnB,EAAG,IAAI,GAAG,CAAA;AACV,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,MAAM,MAAM,MAAO,CAAA,OAAA;AACnB,QAAA,MAAM,EAAK,GAAA,GAAA,CAAI,GAAI,CAAA,MAAA,GAAS,CAAC,CAAA;AAC7B,QAAA,MAAM,EAAK,GAAA,GAAA,CAAI,GAAI,CAAA,MAAA,GAAS,CAAC,CAAA;AAE7B,QAAI,IAAA,IAAA,CAAK,MAAM,CAAE,CAAA,CAAA,GAAI,IAAI,CAAE,CAAA,CAAA,GAAI,EAAE,CAAA,GAAI,CAAG,EAAA;AACxC,QAAA,MAAA,CAAO,UAAU,CAAC,GAAG,KAAK,CAAE,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA;AAClC,QAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAAA,OAC9B,MAAA,IAAW,OAAO,OAAS,EAAA;AACzB,QAAA,MAAM,IAAI,MAAO,CAAA,OAAA;AACjB,QAAW,UAAA,CAAA,CAAA,CAAA,KAAK,CAAI,GAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACf,CADe,CAAA,EAAA;AAAA,UAElB,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAI,CAAE,CAAA,CAAA;AAAA,UACN,IAAI,CAAE,CAAA;AAAA,aACJ,CAAC,CAAA;AAAA;AACP,KACF;AAAA,IACA,uBAAuB,MAAM;AAC3B,MAAM,MAAA;AAAA,QACJ,IAAM,EAAA;AAAA,UACJ,IAAK,CAAA,OAAA;AACT,MAAA,IAAI,MAAM,QAAU,EAAA;AAClB,QAAA,MAAM,MAAM,MAAO,CAAA,OAAA;AACnB,QAAA,IAAI,GAAI,CAAA,MAAA,IAAU,CAAG,EAAA,IAAA,CAAK,QAAQ,QAAS,CAAA;AAAA,UACzC,IAAI,MAAO,EAAA;AAAA,UACX,MAAQ,EAAA,GAAA,CAAI,MAAW,KAAA,CAAA,GAAI,CAAC,GAAG,GAAA,EAAK,GAAI,CAAA,CAAC,CAAI,GAAA,CAAA,EAAG,GAAI,CAAA,CAAC,CAAC,CAAI,GAAA,GAAA;AAAA,UAC1D,IAAA,EAAM,KAAK,OAAQ,CAAA,UAAA;AAAA,UACnB,KAAA,EAAO,KAAK,OAAQ,CAAA;AAAA,SACrB,CAAA;AACD,QAAA,MAAA,CAAO,UAAU,EAAC;AAClB,QAAA,aAAA,CAAc,IAAI,CAAA;AAAA,OACb,MAAA;AACL,QAAA,UAAA,CAAW,CAAK,CAAA,KAAA;AACd,UAAA,IAAI,CAAG,EAAA;AACL,YAAA,MAAM,OAAO,eAAgB,CAAA;AAAA,cAC3B,GAAG,CAAE,CAAA,EAAA;AAAA,cACL,GAAG,CAAE,CAAA;AAAA,aACJ,EAAA;AAAA,cACD,GAAG,CAAE,CAAA,EAAA;AAAA,cACL,GAAG,CAAE,CAAA;AAAA,aACN,CAAA;AAED,YAAI,IAAA,IAAA,CAAK,KAAS,IAAA,CAAA,IAAK,IAAK,CAAA,MAAA,IAAU,GAAQ,IAAA,CAAA,OAAA,CAAQ,KAAM,CAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EACvD,CADuD,CAAA,EAAA;AAAA,cAE1D,IAAI,MAAO;AAAA,gBACV,IAAI,CAAA;AAAA;AAET,UAAO,OAAA,IAAA;AAAA,SACR,CAAA;AACD,QAAA,MAAA,CAAO,OAAU,GAAA,IAAA;AAAA;AACnB;AACF,GACD,CAAG,EAAA,EAAE,CAAA;AACN,EAAA,MAAM,MAAS,GAAA,CAAC,CAAW,EAAA,CAAA,KAAc,KAAQ,GAAA;AAAA,IAC/C,CAAA,EAAG,KAAM,CAAA,CAAA,GAAI,CAAI,GAAA,KAAA;AAAA,IACjB,CAAA,EAAG,KAAM,CAAA,CAAA,GAAI,CAAI,GAAA;AAAA,GACf,GAAA;AAAA,IACF,CAAA;AAAA,IACA;AAAA,GACF;AACA,EAAM,MAAA,QAAA,GAAW,CAAC,GAAkB,KAAA;AAClC,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAI,GAAI,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AAC1C,MAAM,MAAA,CAAA,GAAI,OAAO,GAAI,CAAA,CAAC,GAAG,GAAI,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA;AACnC,MAAA,GAAA,CAAI,IAAK,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,CAAC,CAAA,CAAA,EAAI,CAAE,CAAA,CAAA,CAAE,OAAQ,CAAA,CAAC,CAAC,CAAE,CAAA,CAAA;AAAA;AAEhD,IAAO,OAAA,GAAA,CAAI,KAAK,GAAG,CAAA;AAAA,GACrB;AACA,EAAM,MAAA,OAAA,GAAU,CAAC,CAAA,EAAc,GAAgB,KAAA;AAC7C,IAAA,MAAM,CAAI,GAAA,MAAA,CAAO,CAAE,CAAA,EAAA,EAAI,EAAE,EAAE,CAAA;AAC3B,IAAA,MAAM,CAAI,GAAA,MAAA,CAAO,CAAE,CAAA,EAAA,EAAI,EAAE,EAAE,CAAA;AAC3B,IAAA,MAAM,IAAI,IAAK,CAAA,GAAA,CAAI,CAAE,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3B,IAAA,MAAM,IAAI,IAAK,CAAA,GAAA,CAAI,CAAE,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3B,IAAA,MAAM,IAAI,IAAK,CAAA,GAAA,CAAI,CAAE,CAAA,CAAA,GAAI,EAAE,CAAC,CAAA;AAC5B,IAAA,MAAM,IAAI,IAAK,CAAA,GAAA,CAAI,CAAE,CAAA,CAAA,GAAI,EAAE,CAAC,CAAA;AAC5B,IAAI,IAAA,CAAA,CAAE,IAAS,KAAA,SAAA,EAAkB,uBAAA,GAAA,CAAC,OAAkB,EAAA,EAAA,EAAA,EAAI,CAAI,GAAA,CAAA,GAAI,CAAG,EAAA,EAAA,EAAI,CAAI,GAAA,CAAA,GAAI,CAAG,EAAA,EAAA,EAAI,CAAI,GAAA,CAAA,EAAG,EAAI,EAAA,CAAA,GAAI,CAAG,EAAA,MAAA,EAAQ,CAAE,CAAA,KAAA,EAAO,WAAa,EAAA,CAAA,EAAG,IAAK,EAAA,MAAA,EAAA,EAA/F,GAAsG,CAAA;AACrJ,IAAI,IAAA,CAAA,CAAE,SAAS,OAAS,EAAA,2BAAQ,IAAe,EAAA,EAAA,EAAA,EAAI,CAAE,CAAA,CAAA,EAAG,EAAI,EAAA,CAAA,CAAE,GAAG,EAAI,EAAA,CAAA,CAAE,CAAG,EAAA,EAAA,EAAI,CAAE,CAAA,CAAA,EAAG,QAAQ,CAAE,CAAA,KAAA,EAAO,WAAa,EAAA,CAAA,EAAA,EAAvE,GAA0E,CAAA;AACpH,IAAA,IAAI,EAAE,IAAS,KAAA,QAAA,yBAAkB,GAAA,CAAA,IAAA,EAAA,EAAe,GAAM,CAAM,EAAA,KAAA,EAAO,GAAG,MAAQ,EAAA,CAAA,EAAG,MAAK,kBAAmB,EAAA,MAAA,EAAQ,EAAE,KAAO,EAAA,WAAA,EAAa,OAA5F,GAAiG,CAAA;AAC5I,IAAO,uBAAA,GAAA,CAAC,IAAe,EAAA,EAAA,CAAA,EAAM,CAAM,EAAA,KAAA,EAAO,GAAG,MAAQ,EAAA,CAAA,EAAG,IAAM,EAAA,CAAA,CAAE,IAAS,KAAA,MAAA,GAAS,2BAA2B,MAAQ,EAAA,MAAA,EAAQ,CAAE,CAAA,KAAA,EAAO,WAAa,EAAA,CAAA,EAAG,eAAiB,EAAA,CAAA,CAAE,IAAS,KAAA,MAAA,GAAS,KAAQ,GAAA,MAAA,EAAA,EAAjL,GAA4L,CAAA;AAAA,GAChN;AACA,EAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAK,KAAO,EAAA,UAAA,CAAW,YAAc,EAAA,aAAA,EAAe,IAAS,KAAA,MAAA,GAAS,MAAS,GAAA,MAAA,EAAQ,QAAU,EAAA,CAAC,MAAyB,OAAQ,CAAA;AAAA,IACzI,KAAA,EAAO,CAAE,CAAA,WAAA,CAAY,MAAO,CAAA,KAAA;AAAA,IAC5B,MAAA,EAAQ,CAAE,CAAA,WAAA,CAAY,MAAO,CAAA;AAAA,GAC9B,CAAO,EAAA,EAAA,SAAA,CAAU,WAHV,CAAA,EAAA,EAIG,eAAK,KAAQ,GAAA,CAAA,mBAAK,IAAA,CAAA,GAAA,EAAA,EAAI,OAAO,IAAK,CAAA,KAAA,EAAO,QAAQ,IAAK,CAAA,MAAA,EAAQ,eAAc,MACpE,EAAA,QAAA,EAAA;AAAA,IAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,CAAA,qBAAM,GAAA,CAAA,QAAA,EAAA,EAAoB,MAAQ,EAAA,QAAA,CAAS,CAAE,CAAA,MAAM,CAAG,EAAA,MAAA,EAAQ,CAAE,CAAA,KAAA,EAAO,aAAa,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,CAAA,CAAE,IAAO,GAAA,KAAK,CAAG,EAAA,aAAA,EAAc,OAAQ,EAAA,cAAA,EAAe,OAAQ,EAAA,aAAA,EAAe,IAAM,EAAA,IAAA,EAAK,MAApK,EAAA,EAAA,CAAA,CAAE,EAAyK,CAAE,CAAA;AAAA,IAC7M,UAAA,mBAAc,GAAA,CAAA,QAAA,EAAA,EAAS,MAAQ,EAAA,QAAA,CAAS,UAAU,CAAG,EAAA,MAAA,EAAQ,WAAa,EAAA,WAAA,EAAa,IAAK,CAAA,GAAA,CAAI,GAAG,UAAa,GAAA,KAAK,CAAG,EAAA,aAAA,EAAc,OAAQ,EAAA,cAAA,EAAe,SAAQ,aAAe,EAAA,IAAA,EAAM,IAAK,EAAA,MAAA,EAAO,CAAK,GAAA,IAAA;AAAA,IAC3M,MAAM,GAAI,CAAA,CAAA,CAAA,KAAK,QAAQ,CAAG,EAAA,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA,IAC/B,OAAU,GAAA,OAAA,CAAQ,OAAS,EAAA,MAAM,CAAI,GAAA;AAAA,GAAA,EAC1C,IAAS,IACjB,EAAA,CAAA,CAAA;AACR"}
@@ -0,0 +1,367 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ const IMAGE_EDIT_ACTIONS = {
18
+ crop: "YANTRA_IMAGE_EDIT_CROP",
19
+ rotate: "YANTRA_IMAGE_EDIT_ROTATE",
20
+ flip: "YANTRA_IMAGE_EDIT_FLIP",
21
+ resize: "YANTRA_IMAGE_EDIT_RESIZE",
22
+ pad: "YANTRA_IMAGE_EDIT_PAD",
23
+ finetune: "YANTRA_IMAGE_EDIT_FINETUNE",
24
+ filter: "YANTRA_IMAGE_EDIT_FILTER",
25
+ redact: "YANTRA_IMAGE_EDIT_REDACT",
26
+ frame: "YANTRA_IMAGE_EDIT_FRAME",
27
+ annotate: "YANTRA_IMAGE_EDIT_ANNOTATE",
28
+ watermark: "YANTRA_IMAGE_EDIT_WATERMARK",
29
+ convert: "YANTRA_IMAGE_EDIT_CONVERT",
30
+ colorspace: "YANTRA_IMAGE_EDIT_COLORSPACE",
31
+ compose: "YANTRA_IMAGE_EDIT_COMPOSE",
32
+ mask: "YANTRA_IMAGE_EDIT_MASK",
33
+ levels: "YANTRA_IMAGE_EDIT_LEVELS",
34
+ vignette: "YANTRA_IMAGE_EDIT_VIGNETTE",
35
+ drop_shadow: "YANTRA_IMAGE_EDIT_DROP_SHADOW",
36
+ remove_background: "YANTRA_IMAGE_EDIT_REMOVE_BACKGROUND"
37
+ };
38
+ function containRect(view, natural) {
39
+ if (!(view.width > 0) || !(view.height > 0) || !(natural.width > 0) || !(natural.height > 0)) return {
40
+ x: 0,
41
+ y: 0,
42
+ width: Math.max(0, view.width),
43
+ height: Math.max(0, view.height)
44
+ };
45
+ const k = Math.min(view.width / natural.width, view.height / natural.height);
46
+ const width = natural.width * k;
47
+ const height = natural.height * k;
48
+ return {
49
+ x: (view.width - width) / 2,
50
+ y: (view.height - height) / 2,
51
+ width,
52
+ height
53
+ };
54
+ }
55
+ function viewToNatural(point, frame, natural) {
56
+ const fx = frame.width > 0 ? (point.x - frame.x) / frame.width : 0;
57
+ const fy = frame.height > 0 ? (point.y - frame.y) / frame.height : 0;
58
+ return {
59
+ x: Math.round(Math.min(1, Math.max(0, fx)) * natural.width),
60
+ y: Math.round(Math.min(1, Math.max(0, fy)) * natural.height)
61
+ };
62
+ }
63
+ function rectFromCorners(a, b) {
64
+ return {
65
+ x: Math.round(Math.min(a.x, b.x)),
66
+ y: Math.round(Math.min(a.y, b.y)),
67
+ width: Math.round(Math.abs(b.x - a.x)),
68
+ height: Math.round(Math.abs(b.y - a.y))
69
+ };
70
+ }
71
+ function centeredAspectRect(natural, ratio) {
72
+ let w = natural.width;
73
+ let h = w / ratio;
74
+ if (h > natural.height) {
75
+ h = natural.height;
76
+ w = h * ratio;
77
+ }
78
+ return {
79
+ x: Math.round((natural.width - w) / 2),
80
+ y: Math.round((natural.height - h) / 2),
81
+ width: Math.round(w),
82
+ height: Math.round(h)
83
+ };
84
+ }
85
+ const MAX_STROKE_DOTS = 1500;
86
+ function strokesToAnnotateOps(strokes, maxDots = MAX_STROKE_DOTS) {
87
+ const dotsAt = (spacingK) => {
88
+ const dots2 = [];
89
+ for (const s of strokes) {
90
+ const r = Math.max(1, Math.round(s.size / 2));
91
+ const gap = Math.max(1, s.size * spacingK);
92
+ const pts = s.points;
93
+ if (pts.length < 2) continue;
94
+ dots2.push({
95
+ x: pts[0],
96
+ y: pts[1],
97
+ r,
98
+ color: s.color
99
+ });
100
+ for (let i = 2; i + 1 < pts.length; i += 2) {
101
+ const x0 = pts[i - 2];
102
+ const y0 = pts[i - 1];
103
+ const dx = pts[i] - x0;
104
+ const dy = pts[i + 1] - y0;
105
+ const n = Math.max(1, Math.ceil(Math.hypot(dx, dy) / gap));
106
+ for (let k2 = 1; k2 <= n; k2 += 1) dots2.push({
107
+ x: x0 + dx * k2 / n,
108
+ y: y0 + dy * k2 / n,
109
+ r,
110
+ color: s.color
111
+ });
112
+ }
113
+ }
114
+ return dots2;
115
+ };
116
+ let k = 1 / 3;
117
+ let dots = dotsAt(k);
118
+ while (dots.length > maxDots && k < 4) {
119
+ k *= 1.5;
120
+ dots = dotsAt(k);
121
+ }
122
+ return dots.slice(0, maxDots).map((d) => ({
123
+ type: "ellipse",
124
+ cx: Math.round(d.x),
125
+ cy: Math.round(d.y),
126
+ rx: d.r,
127
+ ry: d.r,
128
+ color: d.color,
129
+ thickness: 1,
130
+ fill: true
131
+ }));
132
+ }
133
+ function annotateOp(a) {
134
+ var _a, _b;
135
+ const x = Math.min(a.x1, a.x2);
136
+ const y = Math.min(a.y1, a.y2);
137
+ const w = Math.abs(a.x2 - a.x1);
138
+ const h = Math.abs(a.y2 - a.y1);
139
+ switch (a.kind) {
140
+ case "text":
141
+ return {
142
+ type: "text",
143
+ text: (_a = a.text) != null ? _a : "",
144
+ x: String(a.x1),
145
+ y: String(a.y1),
146
+ font_size: (_b = a.fontSize) != null ? _b : 24,
147
+ font_color: a.color
148
+ };
149
+ case "box":
150
+ return {
151
+ type: "box",
152
+ x,
153
+ y,
154
+ width: w,
155
+ height: h,
156
+ color: a.color,
157
+ thickness: a.thickness,
158
+ fill: a.fill
159
+ };
160
+ case "ellipse":
161
+ return {
162
+ type: "ellipse",
163
+ cx: Math.round(x + w / 2),
164
+ cy: Math.round(y + h / 2),
165
+ rx: Math.round(w / 2),
166
+ ry: Math.round(h / 2),
167
+ color: a.color,
168
+ thickness: a.thickness,
169
+ fill: a.fill
170
+ };
171
+ case "arrow":
172
+ default:
173
+ return {
174
+ type: "arrow",
175
+ x1: a.x1,
176
+ y1: a.y1,
177
+ x2: a.x2,
178
+ y2: a.y2,
179
+ color: a.color,
180
+ thickness: a.thickness,
181
+ head_size: Math.max(8, a.thickness * 4)
182
+ };
183
+ }
184
+ }
185
+ const RESIZE_SUGGESTIONS = [{
186
+ label: "Instagram Post",
187
+ hint: "Portrait 4:5",
188
+ width: 1080,
189
+ height: 1350
190
+ }, {
191
+ label: "Instagram Post",
192
+ hint: "Square",
193
+ width: 1080,
194
+ height: 1080
195
+ }, {
196
+ label: "Instagram Story or Reel",
197
+ hint: "Vertical 9:16",
198
+ width: 1080,
199
+ height: 1920
200
+ }, {
201
+ label: "Facebook Post",
202
+ hint: "Landscape",
203
+ width: 1200,
204
+ height: 630
205
+ }, {
206
+ label: "YouTube Thumbnail",
207
+ hint: "HD",
208
+ width: 1280,
209
+ height: 720
210
+ }, {
211
+ label: "X / Twitter Post",
212
+ hint: "Landscape",
213
+ width: 1600,
214
+ height: 900
215
+ }, {
216
+ label: "LinkedIn Banner",
217
+ hint: "Wide",
218
+ width: 1584,
219
+ height: 396
220
+ }, {
221
+ label: "Pinterest Pin",
222
+ hint: "Vertical",
223
+ width: 1e3,
224
+ height: 1500
225
+ }, {
226
+ label: "Full HD",
227
+ hint: "1080p",
228
+ width: 1920,
229
+ height: 1080
230
+ }];
231
+ const CROP_ASPECTS = [{
232
+ id: "free",
233
+ label: "Free",
234
+ ratio: null
235
+ }, {
236
+ id: "1:1",
237
+ label: "1:1",
238
+ ratio: 1
239
+ }, {
240
+ id: "4:5",
241
+ label: "4:5",
242
+ ratio: 4 / 5
243
+ }, {
244
+ id: "4:3",
245
+ label: "4:3",
246
+ ratio: 4 / 3
247
+ }, {
248
+ id: "3:2",
249
+ label: "3:2",
250
+ ratio: 3 / 2
251
+ }, {
252
+ id: "16:9",
253
+ label: "16:9",
254
+ ratio: 16 / 9
255
+ }, {
256
+ id: "9:16",
257
+ label: "9:16",
258
+ ratio: 9 / 16
259
+ }];
260
+ const SHADOW_PRESETS = [{
261
+ id: "subtle",
262
+ label: "Subtle",
263
+ params: {
264
+ offsetX: 3,
265
+ offsetY: 3,
266
+ blur: 6,
267
+ color: "#000000",
268
+ opacity: 0.3
269
+ }
270
+ }, {
271
+ id: "drop",
272
+ label: "Drop",
273
+ params: {
274
+ offsetX: 8,
275
+ offsetY: 8,
276
+ blur: 10,
277
+ color: "#000000",
278
+ opacity: 0.55
279
+ }
280
+ }, {
281
+ id: "strong",
282
+ label: "Strong",
283
+ params: {
284
+ offsetX: 14,
285
+ offsetY: 14,
286
+ blur: 22,
287
+ color: "#000000",
288
+ opacity: 0.7
289
+ }
290
+ }, {
291
+ id: "left",
292
+ label: "Left tilt",
293
+ params: {
294
+ offsetX: -12,
295
+ offsetY: 10,
296
+ blur: 16,
297
+ color: "#000000",
298
+ opacity: 0.5
299
+ }
300
+ }, {
301
+ id: "backdrop",
302
+ label: "Backdrop",
303
+ params: {
304
+ offsetX: 0,
305
+ offsetY: 18,
306
+ blur: 32,
307
+ color: "#000000",
308
+ opacity: 0.45
309
+ }
310
+ }, {
311
+ id: "glow",
312
+ label: "Glow",
313
+ params: {
314
+ offsetX: 0,
315
+ offsetY: 0,
316
+ blur: 28,
317
+ color: "#ffffff",
318
+ opacity: 0.85
319
+ }
320
+ }];
321
+ function shadowParams(p) {
322
+ return {
323
+ offset_x: p.offsetX,
324
+ offset_y: p.offsetY,
325
+ blur: p.blur,
326
+ color: p.color,
327
+ opacity: p.opacity
328
+ };
329
+ }
330
+ const LOGO_POSITIONS = ["top-left", "top-center", "top-right", "center", "bottom-left", "bottom-center", "bottom-right"];
331
+ function positionLogo(box, natural, position) {
332
+ const margin = Math.round(natural.width * 0.04);
333
+ const [vertical, horizontal] = position === "center" ? ["center", "center"] : position.split("-");
334
+ const x = horizontal === "left" ? margin : horizontal === "right" ? natural.width - box.width - margin : (natural.width - box.width) / 2;
335
+ const y = vertical === "top" ? margin : vertical === "bottom" ? natural.height - box.height - margin : (natural.height - box.height) / 2;
336
+ return {
337
+ x: Math.round(Math.max(0, x)),
338
+ y: Math.round(Math.max(0, y))
339
+ };
340
+ }
341
+ function logoComposeParams(opts) {
342
+ const width = Math.max(1, Math.round(opts.natural.width * opts.percent / 100));
343
+ const height = Math.max(1, Math.round(width / (opts.logoAspect > 0 ? opts.logoAspect : 1)));
344
+ const {
345
+ x,
346
+ y
347
+ } = positionLogo({
348
+ width,
349
+ height
350
+ }, opts.natural, opts.position);
351
+ return {
352
+ overlay_url: opts.logoUrl,
353
+ x: String(x),
354
+ y: String(y),
355
+ scale: `${width}:${height}`,
356
+ opacity: opts.opacity
357
+ };
358
+ }
359
+ const COLORSPACE_TARGETS = ["srgb", "bt709", "bt601", "bt2020", "display-p3"];
360
+ const EXPORT_FORMATS = ["png", "jpeg", "webp", "avif"];
361
+ function convertParams(format, quality) {
362
+ return __spreadValues({
363
+ format
364
+ }, format !== "png" ? {
365
+ quality
366
+ } : {});
367
+ }export{COLORSPACE_TARGETS,CROP_ASPECTS,EXPORT_FORMATS,IMAGE_EDIT_ACTIONS,LOGO_POSITIONS,MAX_STROKE_DOTS,RESIZE_SUGGESTIONS,SHADOW_PRESETS,annotateOp,centeredAspectRect,containRect,convertParams,logoComposeParams,positionLogo,rectFromCorners,shadowParams,strokesToAnnotateOps,viewToNatural};//# sourceMappingURL=imageEditOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageEditOps.js","sources":["../../../../src/features/canvas/imageEditor/imageEditOps.ts"],"sourcesContent":["/**\n * Pure helpers for the native image editor, twinned from the web\n * `editors/image-editor` (types.ts, ImageToolPanel.tsx) and the connector\n * action map in `rpc/mediaEditingRpc.ts`.\n *\n * The web bakes marks, pen strokes and logos on a client canvas; a phone has\n * no 2D canvas in the remote, so strokes are baked on the server instead: a\n * stroke becomes a run of filled dots through the `annotate` op, which draws\n * the same marker line at the picture's own resolution.\n */\n\n/** Connector action slugs - must match `image-edit-extension/src/constants.ts` (web IMAGE_EDIT_ACTIONS). */\nexport const IMAGE_EDIT_ACTIONS = {\n crop: 'YANTRA_IMAGE_EDIT_CROP',\n rotate: 'YANTRA_IMAGE_EDIT_ROTATE',\n flip: 'YANTRA_IMAGE_EDIT_FLIP',\n resize: 'YANTRA_IMAGE_EDIT_RESIZE',\n pad: 'YANTRA_IMAGE_EDIT_PAD',\n finetune: 'YANTRA_IMAGE_EDIT_FINETUNE',\n filter: 'YANTRA_IMAGE_EDIT_FILTER',\n redact: 'YANTRA_IMAGE_EDIT_REDACT',\n frame: 'YANTRA_IMAGE_EDIT_FRAME',\n annotate: 'YANTRA_IMAGE_EDIT_ANNOTATE',\n watermark: 'YANTRA_IMAGE_EDIT_WATERMARK',\n convert: 'YANTRA_IMAGE_EDIT_CONVERT',\n colorspace: 'YANTRA_IMAGE_EDIT_COLORSPACE',\n compose: 'YANTRA_IMAGE_EDIT_COMPOSE',\n mask: 'YANTRA_IMAGE_EDIT_MASK',\n levels: 'YANTRA_IMAGE_EDIT_LEVELS',\n vignette: 'YANTRA_IMAGE_EDIT_VIGNETTE',\n drop_shadow: 'YANTRA_IMAGE_EDIT_DROP_SHADOW',\n remove_background: 'YANTRA_IMAGE_EDIT_REMOVE_BACKGROUND',\n} as const;\nexport type ImageEditOp = keyof typeof IMAGE_EDIT_ACTIONS;\n\nexport interface NaturalSize {\n width: number;\n height: number;\n}\n\nexport interface PixelRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** A freehand stroke in image-natural pixels: flat [x1, y1, x2, y2, ...], brush diameter, colour. */\nexport interface Stroke {\n id: string;\n points: number[];\n size: number;\n color: string;\n}\n\n/** Where a `contain`-fit picture actually sits inside its view box. */\nexport function containRect(view: { width: number; height: number }, natural: NaturalSize): PixelRect {\n if (!(view.width > 0) || !(view.height > 0) || !(natural.width > 0) || !(natural.height > 0))\n return { x: 0, y: 0, width: Math.max(0, view.width), height: Math.max(0, view.height) };\n const k = Math.min(view.width / natural.width, view.height / natural.height);\n const width = natural.width * k;\n const height = natural.height * k;\n return { x: (view.width - width) / 2, y: (view.height - height) / 2, width, height };\n}\n\n/** A touch in view space as a natural-pixel point, clamped onto the picture. */\nexport function viewToNatural(\n point: { x: number; y: number },\n frame: PixelRect,\n natural: NaturalSize,\n): { x: number; y: number } {\n const fx = frame.width > 0 ? (point.x - frame.x) / frame.width : 0;\n const fy = frame.height > 0 ? (point.y - frame.y) / frame.height : 0;\n return {\n x: Math.round(Math.min(1, Math.max(0, fx)) * natural.width),\n y: Math.round(Math.min(1, Math.max(0, fy)) * natural.height),\n };\n}\n\n/** The rect two drag corners span, in whole pixels. */\nexport function rectFromCorners(a: { x: number; y: number }, b: { x: number; y: number }): PixelRect {\n return {\n x: Math.round(Math.min(a.x, b.x)),\n y: Math.round(Math.min(a.y, b.y)),\n width: Math.round(Math.abs(b.x - a.x)),\n height: Math.round(Math.abs(b.y - a.y)),\n };\n}\n\n/** Largest centred rect of a width/height ratio inside the picture (web centeredAspectRect). */\nexport function centeredAspectRect(natural: NaturalSize, ratio: number): PixelRect {\n let w = natural.width;\n let h = w / ratio;\n if (h > natural.height) {\n h = natural.height;\n w = h * ratio;\n }\n return {\n x: Math.round((natural.width - w) / 2),\n y: Math.round((natural.height - h) / 2),\n width: Math.round(w),\n height: Math.round(h),\n };\n}\n\n/** The most dots one bake sends; long scribbles thin their spacing to stay under it. */\nexport const MAX_STROKE_DOTS = 1500;\n\n/**\n * Freehand strokes as `annotate` ops: a filled dot every third of a brush\n * width along each segment reads as one continuous marker line.\n */\nexport function strokesToAnnotateOps(strokes: Stroke[], maxDots = MAX_STROKE_DOTS): Record<string, unknown>[] {\n const dotsAt = (spacingK: number) => {\n const dots: Array<{ x: number; y: number; r: number; color: string }> = [];\n for (const s of strokes) {\n const r = Math.max(1, Math.round(s.size / 2));\n const gap = Math.max(1, s.size * spacingK);\n const pts = s.points;\n if (pts.length < 2) continue;\n dots.push({ x: pts[0], y: pts[1], r, color: s.color });\n for (let i = 2; i + 1 < pts.length; i += 2) {\n const x0 = pts[i - 2];\n const y0 = pts[i - 1];\n const dx = pts[i] - x0;\n const dy = pts[i + 1] - y0;\n const n = Math.max(1, Math.ceil(Math.hypot(dx, dy) / gap));\n for (let k = 1; k <= n; k += 1)\n dots.push({ x: x0 + (dx * k) / n, y: y0 + (dy * k) / n, r, color: s.color });\n }\n }\n return dots;\n };\n let k = 1 / 3;\n let dots = dotsAt(k);\n while (dots.length > maxDots && k < 4) {\n k *= 1.5;\n dots = dotsAt(k);\n }\n return dots.slice(0, maxDots).map((d) => ({\n type: 'ellipse',\n cx: Math.round(d.x),\n cy: Math.round(d.y),\n rx: d.r,\n ry: d.r,\n color: d.color,\n thickness: 1,\n fill: true,\n }));\n}\n\nexport type AnnotateKind = 'box' | 'ellipse' | 'arrow' | 'text';\n\nexport interface AnnotateShape {\n id: string;\n kind: AnnotateKind;\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n color: string;\n thickness: number;\n fill: boolean;\n text?: string;\n fontSize?: number;\n}\n\n/** One pending shape as the `annotate` op takes it (web AnnotateSection onApply). */\nexport function annotateOp(a: AnnotateShape): Record<string, unknown> {\n const x = Math.min(a.x1, a.x2);\n const y = Math.min(a.y1, a.y2);\n const w = Math.abs(a.x2 - a.x1);\n const h = Math.abs(a.y2 - a.y1);\n switch (a.kind) {\n case 'text':\n return {\n type: 'text',\n text: a.text ?? '',\n x: String(a.x1),\n y: String(a.y1),\n font_size: a.fontSize ?? 24,\n font_color: a.color,\n };\n case 'box':\n return { type: 'box', x, y, width: w, height: h, color: a.color, thickness: a.thickness, fill: a.fill };\n case 'ellipse':\n return {\n type: 'ellipse',\n cx: Math.round(x + w / 2),\n cy: Math.round(y + h / 2),\n rx: Math.round(w / 2),\n ry: Math.round(h / 2),\n color: a.color,\n thickness: a.thickness,\n fill: a.fill,\n };\n case 'arrow':\n default:\n return {\n type: 'arrow',\n x1: a.x1,\n y1: a.y1,\n x2: a.x2,\n y2: a.y2,\n color: a.color,\n thickness: a.thickness,\n head_size: Math.max(8, a.thickness * 4),\n };\n }\n}\n\n/** Canva-style \"resize for...\" sizes (web RESIZE_SUGGESTIONS). */\nexport const RESIZE_SUGGESTIONS: ReadonlyArray<{ label: string; hint: string; width: number; height: number }> = [\n { label: 'Instagram Post', hint: 'Portrait 4:5', width: 1080, height: 1350 },\n { label: 'Instagram Post', hint: 'Square', width: 1080, height: 1080 },\n { label: 'Instagram Story or Reel', hint: 'Vertical 9:16', width: 1080, height: 1920 },\n { label: 'Facebook Post', hint: 'Landscape', width: 1200, height: 630 },\n { label: 'YouTube Thumbnail', hint: 'HD', width: 1280, height: 720 },\n { label: 'X / Twitter Post', hint: 'Landscape', width: 1600, height: 900 },\n { label: 'LinkedIn Banner', hint: 'Wide', width: 1584, height: 396 },\n { label: 'Pinterest Pin', hint: 'Vertical', width: 1000, height: 1500 },\n { label: 'Full HD', hint: '1080p', width: 1920, height: 1080 },\n];\n\n/** Crop aspect presets; `null` is free crop (drag a box on the picture). */\nexport const CROP_ASPECTS: ReadonlyArray<{ id: string; label: string; ratio: number | null }> = [\n { id: 'free', label: 'Free', ratio: null },\n { id: '1:1', label: '1:1', ratio: 1 },\n { id: '4:5', label: '4:5', ratio: 4 / 5 },\n { id: '4:3', label: '4:3', ratio: 4 / 3 },\n { id: '3:2', label: '3:2', ratio: 3 / 2 },\n { id: '16:9', label: '16:9', ratio: 16 / 9 },\n { id: '9:16', label: '9:16', ratio: 9 / 16 },\n];\n\n/** Drop-shadow presets; params feed the `drop_shadow` op unchanged (web SHADOW_PRESETS). */\nexport const SHADOW_PRESETS: ReadonlyArray<{\n id: string;\n label: string;\n params: { offsetX: number; offsetY: number; blur: number; color: string; opacity: number };\n}> = [\n { id: 'subtle', label: 'Subtle', params: { offsetX: 3, offsetY: 3, blur: 6, color: '#000000', opacity: 0.3 } },\n { id: 'drop', label: 'Drop', params: { offsetX: 8, offsetY: 8, blur: 10, color: '#000000', opacity: 0.55 } },\n { id: 'strong', label: 'Strong', params: { offsetX: 14, offsetY: 14, blur: 22, color: '#000000', opacity: 0.7 } },\n { id: 'left', label: 'Left tilt', params: { offsetX: -12, offsetY: 10, blur: 16, color: '#000000', opacity: 0.5 } },\n {\n id: 'backdrop',\n label: 'Backdrop',\n params: { offsetX: 0, offsetY: 18, blur: 32, color: '#000000', opacity: 0.45 },\n },\n { id: 'glow', label: 'Glow', params: { offsetX: 0, offsetY: 0, blur: 28, color: '#ffffff', opacity: 0.85 } },\n];\n\nexport function shadowParams(p: (typeof SHADOW_PRESETS)[number]['params']): Record<string, unknown> {\n return { offset_x: p.offsetX, offset_y: p.offsetY, blur: p.blur, color: p.color, opacity: p.opacity };\n}\n\nexport type LogoPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'center'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport const LOGO_POSITIONS: readonly LogoPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'center',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n];\n\n/** Top-left corner for a box snapped to a position preset, 4% of the width in from the edge (web positionLogo). */\nexport function positionLogo(\n box: { width: number; height: number },\n natural: NaturalSize,\n position: LogoPosition,\n): { x: number; y: number } {\n const margin = Math.round(natural.width * 0.04);\n const [vertical, horizontal] = position === 'center' ? ['center', 'center'] : position.split('-');\n const x =\n horizontal === 'left'\n ? margin\n : horizontal === 'right'\n ? natural.width - box.width - margin\n : (natural.width - box.width) / 2;\n const y =\n vertical === 'top'\n ? margin\n : vertical === 'bottom'\n ? natural.height - box.height - margin\n : (natural.height - box.height) / 2;\n return { x: Math.round(Math.max(0, x)), y: Math.round(Math.max(0, y)) };\n}\n\n/** A logo `percent` of the picture's width, at a position, as `compose` params. */\nexport function logoComposeParams(opts: {\n logoUrl: string;\n logoAspect: number;\n natural: NaturalSize;\n percent: number;\n position: LogoPosition;\n opacity: number;\n}): Record<string, unknown> {\n const width = Math.max(1, Math.round((opts.natural.width * opts.percent) / 100));\n const height = Math.max(1, Math.round(width / (opts.logoAspect > 0 ? opts.logoAspect : 1)));\n const { x, y } = positionLogo({ width, height }, opts.natural, opts.position);\n return {\n overlay_url: opts.logoUrl,\n x: String(x),\n y: String(y),\n scale: `${width}:${height}`,\n opacity: opts.opacity,\n };\n}\n\nexport const COLORSPACE_TARGETS = ['srgb', 'bt709', 'bt601', 'bt2020', 'display-p3'] as const;\nexport const EXPORT_FORMATS = ['png', 'jpeg', 'webp', 'avif'] as const;\nexport type ExportFormat = (typeof EXPORT_FORMATS)[number];\n\nexport function convertParams(format: ExportFormat, quality: number): Record<string, unknown> {\n return { format, ...(format !== 'png' ? { quality } : {}) };\n}\n"],"names":["dots","k"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nativeViewerRegistry.js","sources":["../../../src/features/canvas/nativeViewerRegistry.ts"],"sourcesContent":["/**\n * Seam between the app shell and this package for the FEDERATED canvas viewer.\n *\n * The federated loader (`import('canvas_native/Viewer')`) must live in the app\n * (portable-devices/mobile): this package also builds through rollup for lib/,\n * and rollup must never see a bare `canvas_native/...` specifier. The screen,\n * however, lives HERE, where routes register. So the app injects its loader at\n * startup and the screen reads it back - the same inversion the surfaces use\n * for host services, scaled down to one component.\n */\nimport type { ComponentType } from 'react';\nimport type { NativeCanvasViewerProps } from './NativeCanvasViewer';\n\nlet registered: ComponentType<NativeCanvasViewerProps> | null = null;\n\nexport function registerNativeCanvasViewer(component: ComponentType<NativeCanvasViewerProps>): void {\n registered = component;\n}\n\n/** Null when the host app has not injected a loader (e.g. a build without federation). */\nexport function getNativeCanvasViewer(): ComponentType<NativeCanvasViewerProps> | null {\n return registered;\n}\n\n/**\n * The federated canvas EXPERIENCE (boards + viewer), registered by the app the\n * same way the viewer is. Kept as a separate seam so a host that only wants the\n * raw renderer - a preview, a test - is unaffected.\n */\nexport type CanvasExperienceComponent = ComponentType<{\n token?: string | null;\n indexUrl: string;\n channelId?: string;\n sessionError?: string | null;\n onRetrySession?: () => void;\n /** Deep links (CanvasExperienceProps): each runs once on mount. */\n createTile?: string;\n media?: { src: string; kind?: string; name?: string };\n designId?: string;\n designTemplateId?: string;\n artifactId?: string;\n}>;\n\nlet experience: CanvasExperienceComponent | null = null;\nlet experiencePreload: (() => Promise<void>) | null = null;\n\nexport function registerNativeCanvasExperience(component: CanvasExperienceComponent): void {\n experience = component;\n}\n\nexport function getNativeCanvasExperience(): CanvasExperienceComponent | null {\n return experience;\n}\n\n/**\n * Host registers the federated `import('canvas_native/Viewer')` so Home can\n * start the download before the user opens Canvas Native.\n */\nexport function registerCanvasExperiencePreload(fn: () => Promise<void>): void {\n experiencePreload = fn;\n}\n\nexport function preloadNativeCanvasExperience(): Promise<void> {\n return experiencePreload?.() ?? Promise.resolve();\n}\n"],"names":[],"mappings":"AAYA,IAAI,UAA4D,GAAA,IAAA;AACzD,SAAS,2BAA2B,SAAyD,EAAA;AAClG,EAAa,UAAA,GAAA,SAAA;AACf;AAGO,SAAS,qBAAuE,GAAA;AACrF,EAAO,OAAA,UAAA;AACT;AAwBA,IAAI,UAA+C,GAAA,IAAA;AACnD,IAAI,iBAAkD,GAAA,IAAA;AAC/C,SAAS,+BAA+B,SAA4C,EAAA;AACzF,EAAa,UAAA,GAAA,SAAA;AACf;AACO,SAAS,yBAA8D,GAAA;AAC5E,EAAO,OAAA,UAAA;AACT;AAMO,SAAS,gCAAgC,EAA+B,EAAA;AAC7E,EAAoB,iBAAA,GAAA,EAAA;AACtB;AACO,SAAS,6BAA+C,GAAA;AA5D/D,EAAA,IAAA,EAAA;AA6DE,EAAO,OAAA,CAAA,EAAA,GAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,EAAA,KAAA,IAAA,GAAA,EAAA,GAAyB,QAAQ,OAAQ,EAAA;AAClD"}
1
+ {"version":3,"file":"nativeViewerRegistry.js","sources":["../../../src/features/canvas/nativeViewerRegistry.ts"],"sourcesContent":["/**\n * Seam between the app shell and this package for the FEDERATED canvas viewer.\n *\n * The federated loader (`import('canvas_native/Viewer')`) must live in the app\n * (portable-devices/mobile): this package also builds through rollup for lib/,\n * and rollup must never see a bare `canvas_native/...` specifier. The screen,\n * however, lives HERE, where routes register. So the app injects its loader at\n * startup and the screen reads it back - the same inversion the surfaces use\n * for host services, scaled down to one component.\n */\nimport type { ComponentType } from 'react';\nimport type { NativeCanvasViewerProps } from './NativeCanvasViewer';\n\nlet registered: ComponentType<NativeCanvasViewerProps> | null = null;\n\nexport function registerNativeCanvasViewer(component: ComponentType<NativeCanvasViewerProps>): void {\n registered = component;\n}\n\n/** Null when the host app has not injected a loader (e.g. a build without federation). */\nexport function getNativeCanvasViewer(): ComponentType<NativeCanvasViewerProps> | null {\n return registered;\n}\n\n/**\n * The federated canvas EXPERIENCE (boards + viewer), registered by the app the\n * same way the viewer is. Kept as a separate seam so a host that only wants the\n * raw renderer - a preview, a test - is unaffected.\n */\nexport type CanvasExperienceComponent = ComponentType<{\n token?: string | null;\n indexUrl: string;\n channelId?: string;\n sessionError?: string | null;\n onRetrySession?: () => void;\n /** Deep links (CanvasExperienceProps): each runs once on mount. */\n createTile?: string;\n media?: { src: string; kind?: string; name?: string };\n designId?: string;\n designTemplateId?: string;\n artifactId?: string;\n /** Open the web canvas in the app on `?<query>` (`design=<id>`, `create=<tile>`). */\n onOpenWebCanvas?: (query: string) => void;\n}>;\n\nlet experience: CanvasExperienceComponent | null = null;\nlet experiencePreload: (() => Promise<void>) | null = null;\n\nexport function registerNativeCanvasExperience(component: CanvasExperienceComponent): void {\n experience = component;\n}\n\nexport function getNativeCanvasExperience(): CanvasExperienceComponent | null {\n return experience;\n}\n\n/**\n * Host registers the federated `import('canvas_native/Viewer')` so Home can\n * start the download before the user opens Canvas Native.\n */\nexport function registerCanvasExperiencePreload(fn: () => Promise<void>): void {\n experiencePreload = fn;\n}\n\nexport function preloadNativeCanvasExperience(): Promise<void> {\n return experiencePreload?.() ?? Promise.resolve();\n}\n"],"names":[],"mappings":"AAYA,IAAI,UAA4D,GAAA,IAAA;AACzD,SAAS,2BAA2B,SAAyD,EAAA;AAClG,EAAa,UAAA,GAAA,SAAA;AACf;AAGO,SAAS,qBAAuE,GAAA;AACrF,EAAO,OAAA,UAAA;AACT;AA0BA,IAAI,UAA+C,GAAA,IAAA;AACnD,IAAI,iBAAkD,GAAA,IAAA;AAC/C,SAAS,+BAA+B,SAA4C,EAAA;AACzF,EAAa,UAAA,GAAA,SAAA;AACf;AACO,SAAS,yBAA8D,GAAA;AAC5E,EAAO,OAAA,UAAA;AACT;AAMO,SAAS,gCAAgC,EAA+B,EAAA;AAC7E,EAAoB,iBAAA,GAAA,EAAA;AACtB;AACO,SAAS,6BAA+C,GAAA;AA9D/D,EAAA,IAAA,EAAA;AA+DE,EAAO,OAAA,CAAA,EAAA,GAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,EAAA,KAAA,IAAA,GAAA,EAAA,GAAyB,QAAQ,OAAQ,EAAA;AAClD"}