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

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 +4 -4
  359. package/lib/features/design/exportDesign.js +0 -133
  360. package/lib/features/design/exportDesign.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignHome.js","sources":["../../../../src/features/design/home/DesignHome.tsx"],"sourcesContent":["/**\n * The Design Studio's home - native twin of web's `StartPanel` +\n * `RecentDesigns` at phone width: a compact 44pt bar, then a Browse / Recent\n * designs switch.\n *\n * Browse one search row (sizes, \"1200 x 800\", every catalog), then the\n * Formats and Topics a person opens (each its sizes and\n * templates), the popular formats drawn at their own proportions,\n * a custom size, and template previews\n * Recent the person's saved designs - phone and web alike, the same rows -\n * under a fixed title; only the list scrolls. Each row draws its\n * first page natively and has compact actions: Rename, Copy, Delete\n */\nimport React, { useState } from 'react';\nimport {\n FlatList,\n RefreshControl,\n ScrollView,\n StyleSheet,\n Text,\n TextInput,\n useWindowDimensions,\n View,\n} from 'react-native';\nimport { MaterialCommunityIcons } from '@expo/vector-icons';\nimport { themedStyles, useCanvasTheme, type CanvasPalette } from '../../canvas/canvasTheme';\nimport {\n ActionButton,\n IconButton,\n Pressable,\n RADIUS,\n SPACE,\n SectionHeader,\n Skeleton,\n TYPE,\n pressedStyle,\n} from '../../canvas/canvasUi';\nimport type { DesignCatalogCard } from '../../canvas/designCatalog';\nimport {\n DESIGN_CATEGORY_GROUPS,\n FORMAT_INTRO,\n SEARCH_SECTIONS,\n designCategoryFor,\n type DesignCategory,\n} from '../../canvas/designCategories';\nimport { CatalogPreviewShelf, type LoadDesignCatalog } from '../../canvas/DesignCategoryGallery';\nimport { useSafeInsets } from '../../canvas/withRemoteSafeArea';\nimport type { DesignArtifact } from '../doc/artifacts';\nimport { MAX_PX, MIN_PX, sizesIn, type DesignSize } from '../doc/sizes';\nimport { designTitle } from '../doc/types';\nimport { DesignPageView } from '../render/DesignPageView';\nimport {\n STUDIO_VIEWS,\n pagesLabel,\n relativeTime,\n searchStudioSizes,\n sizeLabel,\n visibleRecents,\n type StudioView,\n} from './studioHome';\n\nconst GUTTER = SPACE.lg;\n\ntype IconName = React.ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nconst CATEGORY_ICON: Record<string, IconName> = {\n social: 'share-variant-outline',\n carousel: 'layers-outline',\n flyer: 'file-image-outline',\n 'business-card': 'card-account-details-outline',\n presentation: 'presentation',\n 'pitch-deck': 'chart-bar',\n logo: 'shape-outline',\n banner: 'flag-outline',\n brochure: 'book-open-page-variant-outline',\n branding: 'palette-outline',\n certificate: 'certificate-outline',\n worksheet: 'notebook-edit-outline',\n proposal: 'file-document-outline',\n newsletter: 'newspaper-variant-outline',\n menu: 'silverware-fork-knife',\n infographic: 'page-layout-header',\n technology: 'chip',\n};\n\nexport type DesignRowAction = 'duplicate' | 'delete';\n\nexport function DesignHome({\n designs,\n loading,\n error,\n onRefresh,\n onClose,\n onOpenDesign,\n onDesignAction,\n onRenameDesign,\n onCreate,\n onCustom,\n onOpenCategory,\n onOpenTemplate,\n loadCatalog,\n}: {\n designs: DesignArtifact[];\n loading: boolean;\n error: string | null;\n onRefresh: () => void;\n onClose?: () => void;\n onOpenDesign: (design: DesignArtifact) => void;\n onDesignAction: (design: DesignArtifact, action: DesignRowAction) => void;\n onRenameDesign: (design: DesignArtifact, title: string) => void;\n onCreate: (size: DesignSize) => void;\n onCustom: (width: number, height: number) => void;\n /** A format or topic; `query` carries a search into its full catalog. */\n onOpenCategory: (category: DesignCategory, query?: string) => void;\n onOpenTemplate: (card: DesignCatalogCard) => void;\n loadCatalog?: LoadDesignCatalog;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const insets = useSafeInsets();\n const [view, setView] = useState<StudioView>('browse');\n\n return (\n <View style={[styles.root, { paddingTop: insets.top }]}>\n <View style={styles.bar}>\n {onClose ? <IconButton icon=\"chevron-left\" label=\"Back\" onPress={onClose} size={36} /> : null}\n <Text style={styles.barTitle} accessibilityRole=\"header\" numberOfLines={1}>\n Design\n </Text>\n </View>\n <View style={styles.switchWrap}>\n <View style={styles.viewSwitch} accessibilityRole=\"tablist\" accessibilityLabel=\"Studio view\">\n {STUDIO_VIEWS.map((option) => {\n const on = option.id === view;\n return (\n <Pressable\n key={option.id}\n onPress={() => setView(option.id)}\n style={[styles.viewButton, on && styles.viewButtonOn]}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: on }}\n >\n <MaterialCommunityIcons\n name={option.id === 'browse' ? 'view-grid-outline' : 'layers-outline'}\n size={16}\n color={on ? theme.foreground : theme.mutedForeground}\n />\n <Text style={[styles.viewLabel, on && styles.viewLabelOn]} numberOfLines={1}>\n {option.label}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n {view === 'browse' ? (\n <Browse\n bottomInset={insets.bottom}\n onCreate={onCreate}\n onCustom={onCustom}\n onOpenCategory={onOpenCategory}\n onOpenTemplate={onOpenTemplate}\n loadCatalog={loadCatalog}\n />\n ) : (\n <Recent\n bottomInset={insets.bottom}\n designs={designs}\n loading={loading}\n error={error}\n onRefresh={onRefresh}\n onOpenDesign={onOpenDesign}\n onDesignAction={onDesignAction}\n onRenameDesign={onRenameDesign}\n />\n )}\n </View>\n );\n}\n\n// ── Browse ────────────────────────────────────────────────────────────────\n\nfunction Browse({\n bottomInset,\n onCreate,\n onCustom,\n onOpenCategory,\n onOpenTemplate,\n loadCatalog,\n}: {\n bottomInset: number;\n onCreate: (size: DesignSize) => void;\n onCustom: (width: number, height: number) => void;\n onOpenCategory: (category: DesignCategory, query?: string) => void;\n onOpenTemplate: (card: DesignCatalogCard) => void;\n loadCatalog?: LoadDesignCatalog;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const [query, setQuery] = useState('');\n const [custom, setCustom] = useState(false);\n const q = query.trim();\n const results = searchStudioSizes(q);\n\n const submit = () => {\n if (results.typed) onCustom(results.typed.width, results.typed.height);\n else if (results.sizes[0]) onCreate(results.sizes[0]);\n };\n\n return (\n <ScrollView\n style={styles.fill}\n contentContainerStyle={{ paddingBottom: bottomInset + SPACE.xxl }}\n keyboardShouldPersistTaps=\"handled\"\n keyboardDismissMode=\"on-drag\"\n >\n {/* One row for search: the field and its clear button share the 44pt height. */}\n <View style={styles.searchRow}>\n <View style={styles.searchBox}>\n <MaterialCommunityIcons name=\"magnify\" size={20} color={theme.mutedForeground} />\n <TextInput\n value={query}\n onChangeText={setQuery}\n onSubmitEditing={submit}\n placeholder=\"Search templates or type 1200 × 800\"\n placeholderTextColor={theme.mutedForeground}\n style={styles.searchInput}\n returnKeyType=\"search\"\n autoCorrect={false}\n accessibilityLabel=\"Search design sizes and templates\"\n />\n {query ? (\n <IconButton icon=\"close\" label=\"Clear search\" onPress={() => setQuery('')} size={32} />\n ) : null}\n </View>\n </View>\n\n {q ? (\n <>\n <View style={styles.section}>\n <Text style={styles.sectionTitle} accessibilityRole=\"header\">\n Search results\n </Text>\n <Text style={styles.sectionIntro}>{`Sizes and templates matching \"${q}\".`}</Text>\n </View>\n {results.typed || results.sizes.length ? (\n <View style={styles.section}>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.rail}\n contentContainerStyle={styles.railContent}\n >\n {results.typed ? (\n <SizeCard\n label=\"Custom size\"\n width={results.typed.width}\n height={results.typed.height}\n detail={`${results.typed.width} × ${results.typed.height}`}\n onPress={() => onCustom(results.typed!.width, results.typed!.height)}\n />\n ) : null}\n {results.sizes.map((size) => (\n <SizeCard\n key={size.id}\n label={size.label}\n width={size.width}\n height={size.height}\n detail={size.physical ?? `${size.width} × ${size.height}`}\n onPress={() => onCreate(size)}\n />\n ))}\n </ScrollView>\n </View>\n ) : (\n <View style={[styles.section, styles.noMatch]}>\n <Text style={styles.sectionIntro}>{`No sizes match \"${q}\".`}</Text>\n <ActionButton\n label=\"Enter a custom size\"\n variant=\"secondary\"\n onPress={() => {\n setQuery('');\n setCustom(true);\n }}\n />\n </View>\n )}\n {loadCatalog ? (\n <View style={styles.shelves}>\n {SEARCH_SECTIONS.map((section) => (\n <CatalogPreviewShelf\n key={section.group}\n group={section.group}\n title={section.title}\n query={q}\n load={loadCatalog}\n onOpen={onOpenTemplate}\n onSeeAll={() => {\n const category = designCategoryFor(section.category);\n if (category) onOpenCategory(category, q);\n }}\n />\n ))}\n </View>\n ) : null}\n </>\n ) : (\n <>\n {DESIGN_CATEGORY_GROUPS.map((group) => (\n <View key={group.id} style={[styles.section, group.id === 'topics' && styles.topics]}>\n <SectionHeader title={group.label} />\n <View style={styles.categoryGrid} accessibilityLabel={group.label}>\n {group.items.map((category) => (\n <CategoryTile\n key={category.id}\n icon={CATEGORY_ICON[category.id] ?? 'shape-outline'}\n label={category.title}\n onPress={() => onOpenCategory(category)}\n />\n ))}\n {group.id === 'topics' ? (\n <CategoryTile\n icon=\"ruler\"\n label=\"Custom size\"\n active={custom}\n onPress={() => setCustom((v) => !v)}\n />\n ) : null}\n </View>\n {group.id === 'topics' && custom ? <CustomSize onCreate={onCustom} /> : null}\n </View>\n ))}\n\n <View style={styles.section}>\n <Text style={styles.sectionTitle} accessibilityRole=\"header\">\n Popular formats\n </Text>\n <Text style={[styles.sectionIntro, styles.introGap]}>{FORMAT_INTRO}</Text>\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n style={styles.rail}\n contentContainerStyle={styles.railContent}\n >\n {sizesIn('popular').map((size) => (\n <SizeCard\n key={size.id}\n label={size.label}\n width={size.width}\n height={size.height}\n detail={size.physical ?? `${size.width} × ${size.height}`}\n onPress={() => onCreate(size)}\n />\n ))}\n </ScrollView>\n </View>\n\n {loadCatalog ? (\n <View style={styles.shelves}>\n {(['flyer', 'presentation', 'social'] as const).map((id) => {\n const section = SEARCH_SECTIONS.find((s) => s.category === id)!;\n const category = designCategoryFor(id);\n return (\n <CatalogPreviewShelf\n key={section.group}\n group={section.group}\n title={category?.shelves[0]?.title ?? section.title}\n load={loadCatalog}\n onOpen={onOpenTemplate}\n onSeeAll={category ? () => onOpenCategory(category) : undefined}\n />\n );\n })}\n </View>\n ) : null}\n </>\n )}\n </ScrollView>\n );\n}\n\nfunction CategoryTile({\n icon,\n label,\n active,\n onPress,\n}: {\n icon: IconName;\n label: string;\n active?: boolean;\n onPress: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.category, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityState={active === undefined ? undefined : { expanded: active }}\n >\n <View style={[styles.categoryIcon, active && styles.categoryIconOn]}>\n <MaterialCommunityIcons name={icon} size={22} color={theme.foreground} />\n </View>\n <Text style={styles.categoryLabel} numberOfLines={2}>\n {label}\n </Text>\n </Pressable>\n );\n}\n\nfunction SizeCard({\n label,\n width,\n height,\n detail,\n onPress,\n}: {\n label: string;\n width: number;\n height: number;\n detail: string;\n onPress: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const h = 86;\n const w = Math.max(48, Math.min(108, (h * width) / height));\n const hh = Math.max(8, Math.min(h, (w * height) / width));\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.sizeCard, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`New ${label}, ${detail}`}\n >\n <View style={styles.sizeFrame}>\n <View style={[styles.sizeShape, { width: w, height: hh }]} />\n </View>\n <Text style={styles.sizeLabel} numberOfLines={1}>\n {label}\n </Text>\n <Text style={styles.sizeDetail}>{detail}</Text>\n </Pressable>\n );\n}\n\nfunction CustomSize({ onCreate }: { onCreate: (width: number, height: number) => void }) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const [w, setW] = useState('1080');\n const [h, setH] = useState('1080');\n const width = Number(w);\n const height = Number(h);\n const ok = [width, height].every((v) => Number.isFinite(v) && v >= MIN_PX && v <= MAX_PX);\n return (\n <View style={styles.custom}>\n <TextInput\n value={w}\n onChangeText={setW}\n keyboardType=\"number-pad\"\n style={styles.customInput}\n accessibilityLabel=\"Width in pixels\"\n />\n <Text style={styles.customX}>×</Text>\n <TextInput\n value={h}\n onChangeText={setH}\n keyboardType=\"number-pad\"\n style={styles.customInput}\n accessibilityLabel=\"Height in pixels\"\n />\n <Text style={styles.customX}>px</Text>\n <ActionButton\n label=\"Create\"\n disabled={!ok}\n onPress={() => onCreate(Math.round(width), Math.round(height))}\n />\n </View>\n );\n}\n\n// ── Recent designs ────────────────────────────────────────────────────────\n\nfunction Recent({\n bottomInset,\n designs,\n loading,\n error,\n onRefresh,\n onOpenDesign,\n onDesignAction,\n onRenameDesign,\n}: {\n bottomInset: number;\n designs: DesignArtifact[];\n loading: boolean;\n error: string | null;\n onRefresh: () => void;\n onOpenDesign: (design: DesignArtifact) => void;\n onDesignAction: (design: DesignArtifact, action: DesignRowAction) => void;\n onRenameDesign: (design: DesignArtifact, title: string) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const [expanded, setExpanded] = useState(false);\n const [openActions, setOpenActions] = useState<string | null>(null);\n const { shown, more } = visibleRecents(designs, expanded);\n const firstLoad = loading && designs.length === 0;\n const failed = Boolean(error) && designs.length === 0 && !loading;\n\n const footer = (\n <View style={styles.recentFooter}>\n {more ? (\n <ActionButton\n label={expanded ? 'Show fewer designs' : 'See all designs'}\n variant=\"secondary\"\n onPress={() => setExpanded((v) => !v)}\n style={styles.fullWidth}\n />\n ) : null}\n </View>\n );\n\n let empty: React.ReactElement | null = null;\n if (firstLoad) {\n empty = (\n <View style={styles.recentList} accessibilityState={{ busy: true }}>\n {Array.from({ length: 6 }, (_, i) => (\n <View key={i} style={styles.skeletonRow}>\n <Skeleton style={styles.skeletonThumb} radius={RADIUS.sm} />\n <View style={styles.skeletonText}>\n <Skeleton style={{ height: 12, width: '75%' }} radius={4} />\n <Skeleton style={{ height: 12, width: '50%' }} radius={4} />\n </View>\n </View>\n ))}\n </View>\n );\n } else if (failed) {\n empty = (\n <View style={styles.alert} accessibilityRole=\"alert\">\n <Text style={styles.alertText}>\n Couldn’t load your designs. Your saved work will appear here when the connection returns.\n </Text>\n {error ? <Text style={styles.rowDetail}>{error}</Text> : null}\n <ActionButton label=\"Retry\" variant=\"secondary\" onPress={onRefresh} />\n </View>\n );\n } else {\n empty = (\n <View style={styles.emptyBox}>\n <Text style={styles.emptyTitle}>Your work starts here</Text>\n <Text style={styles.sectionIntro}>\n Choose a format or template to create your first design. Your saved work will appear here.\n </Text>\n </View>\n );\n }\n\n return (\n <View style={styles.fill}>\n {/* Fixed while the list scrolls under it. */}\n <View style={styles.recentHeader}>\n <Text style={styles.sectionTitle} accessibilityRole=\"header\">\n Recent designs\n </Text>\n <Text style={styles.sectionIntro}>Pick up where you left off.</Text>\n </View>\n <FlatList\n data={firstLoad || failed ? [] : (shown as DesignArtifact[])}\n keyExtractor={(design) => design.id}\n style={styles.fill}\n contentContainerStyle={[styles.recentContent, { paddingBottom: bottomInset + SPACE.xxl }]}\n keyboardShouldPersistTaps=\"handled\"\n refreshControl={<RefreshControl refreshing={false} onRefresh={onRefresh} />}\n ItemSeparatorComponent={() => <View style={{ height: SPACE.sm }} />}\n ListEmptyComponent={empty}\n ListFooterComponent={footer}\n renderItem={({ item }) => (\n <RecentRow\n design={item}\n actionsOpen={openActions === item.id}\n onToggleActions={() => setOpenActions((id) => (id === item.id ? null : item.id))}\n onOpen={() => onOpenDesign(item)}\n onRename={(title) => onRenameDesign(item, title)}\n onAction={(action) => {\n setOpenActions(null);\n onDesignAction(item, action);\n }}\n />\n )}\n />\n </View>\n );\n}\n\nfunction RecentRow({\n design,\n actionsOpen,\n onToggleActions,\n onOpen,\n onRename,\n onAction,\n}: {\n design: DesignArtifact;\n actionsOpen: boolean;\n onToggleActions: () => void;\n onOpen: () => void;\n onRename: (title: string) => void;\n onAction: (action: DesignRowAction) => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const { doc } = design;\n const title = designTitle(doc) || design.title || 'Untitled design';\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(title);\n const page = doc.pages[0];\n const THUMB_W = 80;\n const THUMB_H = 64;\n const pad = 6;\n const ratio = doc.pageHeight / doc.pageWidth;\n const pageW = Math.min(THUMB_W - pad * 2, (THUMB_H - pad * 2) / ratio);\n\n const commit = () => {\n setEditing(false);\n if (draft.trim() !== title) onRename(draft);\n };\n\n return (\n <View style={styles.row}>\n <View style={styles.rowMain}>\n <Pressable\n onPress={onOpen}\n onLongPress={onToggleActions}\n style={({ pressed }) => [styles.rowOpen, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={`Open ${title}`}\n >\n <View style={styles.rowThumb}>\n {page ? <DesignPageView doc={doc} page={page} width={pageW} style={styles.rowPage} /> : null}\n </View>\n <View style={styles.rowText}>\n <Text style={styles.rowTitle} numberOfLines={2}>\n {title}\n </Text>\n <Text style={styles.rowDetail} numberOfLines={1}>\n {sizeLabel(doc, design.kind)}\n </Text>\n <Text style={styles.rowDetail}>{`${pagesLabel(doc)} · ${relativeTime(design.updatedAt)}`}</Text>\n </View>\n </Pressable>\n <IconButton icon=\"dots-horizontal\" label={`More for ${title}`} onPress={onToggleActions} size={32} />\n </View>\n {editing ? (\n <View style={styles.renameRow}>\n <TextInput\n value={draft}\n autoFocus\n selectTextOnFocus\n onChangeText={setDraft}\n onSubmitEditing={commit}\n onBlur={commit}\n maxLength={80}\n returnKeyType=\"done\"\n style={styles.renameInput}\n accessibilityLabel=\"Design name\"\n />\n <IconButton icon=\"check\" label=\"Save name\" onPress={commit} size={36} />\n </View>\n ) : null}\n {actionsOpen && !editing ? (\n <View style={styles.actions} accessibilityLabel={`Actions for ${title}`}>\n <RowAction\n icon=\"pencil-outline\"\n label=\"Rename\"\n a11y={`Rename ${title}`}\n onPress={() => {\n onToggleActions();\n setDraft(title);\n setEditing(true);\n }}\n />\n <RowAction\n icon=\"content-copy\"\n label=\"Copy\"\n a11y={`Duplicate ${title}`}\n onPress={() => onAction('duplicate')}\n />\n <RowAction\n icon=\"trash-can-outline\"\n label=\"Delete\"\n a11y={`Delete ${title}`}\n danger\n onPress={() => onAction('delete')}\n />\n </View>\n ) : null}\n </View>\n );\n}\n\nfunction RowAction({\n icon,\n label,\n a11y,\n danger,\n onPress,\n}: {\n icon: IconName;\n label: string;\n a11y: string;\n danger?: boolean;\n onPress: () => void;\n}) {\n const theme = useCanvasTheme();\n const styles = makeStyles(theme);\n const ink = danger ? theme.destructiveText : theme.inkSoft;\n return (\n <Pressable\n onPress={onPress}\n style={({ pressed }) => [styles.action, pressedStyle(pressed)]}\n accessibilityRole=\"button\"\n accessibilityLabel={a11y}\n >\n <MaterialCommunityIcons name={icon} size={15} color={ink} />\n <Text style={[styles.actionLabel, { color: ink }]}>{label}</Text>\n </Pressable>\n );\n}\n\nconst makeStyles = themedStyles((theme: CanvasPalette) =>\n StyleSheet.create({\n root: { flex: 1, backgroundColor: theme.background },\n fill: { flex: 1 },\n // The shared studio bar: 44pt on phones, no large title under it.\n bar: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n height: 44,\n paddingHorizontal: SPACE.sm,\n },\n barTitle: { ...TYPE.title, color: theme.foreground, paddingHorizontal: SPACE.sm },\n switchWrap: {\n paddingHorizontal: GUTTER,\n paddingBottom: SPACE.md,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n },\n viewSwitch: {\n flexDirection: 'row',\n gap: SPACE.xs,\n padding: SPACE.xs,\n borderRadius: RADIUS.sm,\n backgroundColor: theme.card,\n },\n viewButton: {\n flex: 1,\n minHeight: 40,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: SPACE.sm,\n paddingHorizontal: SPACE.md,\n borderRadius: 6,\n },\n viewButtonOn: { backgroundColor: theme.background },\n viewLabel: { ...TYPE.label, fontWeight: '500', color: theme.mutedForeground },\n viewLabelOn: { color: theme.foreground, fontWeight: '600' },\n searchRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.md,\n padding: GUTTER,\n paddingBottom: SPACE.lg,\n },\n searchBox: {\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.sm,\n height: 44,\n paddingLeft: SPACE.md,\n paddingRight: SPACE.xs,\n borderRadius: RADIUS.sm,\n backgroundColor: theme.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.borderStrong,\n },\n searchInput: { ...TYPE.body, fontSize: 14, flex: 1, paddingVertical: 0, color: theme.foreground },\n section: { paddingHorizontal: GUTTER, marginBottom: SPACE.xl },\n shelves: { paddingHorizontal: GUTTER },\n topics: {\n paddingTop: SPACE.lg,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n marginHorizontal: GUTTER,\n paddingHorizontal: 0,\n },\n sectionTitle: { fontSize: 18, lineHeight: 25, fontWeight: '600', color: theme.foreground },\n sectionIntro: { ...TYPE.body, fontSize: 14, lineHeight: 20, color: theme.mutedForeground },\n introGap: { marginTop: 2, marginBottom: SPACE.md },\n noMatch: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'center', gap: SPACE.md },\n categoryGrid: { flexDirection: 'row', flexWrap: 'wrap', gap: SPACE.sm },\n category: { width: '23%', alignItems: 'center', gap: SPACE.xs, paddingVertical: SPACE.xs },\n categoryIcon: {\n width: 52,\n height: 52,\n borderRadius: 26,\n backgroundColor: theme.card,\n alignItems: 'center',\n justifyContent: 'center',\n },\n categoryIconOn: { borderWidth: 1.5, borderColor: theme.foreground },\n categoryLabel: { ...TYPE.caption, color: theme.foreground, textAlign: 'center' },\n rail: { flexGrow: 0, marginHorizontal: -GUTTER },\n railContent: { paddingHorizontal: GUTTER, gap: SPACE.md },\n sizeCard: { width: 128, gap: 2 },\n sizeFrame: {\n height: 104,\n borderRadius: RADIUS.md,\n backgroundColor: theme.card,\n alignItems: 'center',\n justifyContent: 'center',\n },\n sizeShape: {\n backgroundColor: theme.surface,\n borderRadius: 3,\n borderWidth: 1,\n borderColor: theme.borderStrong,\n },\n sizeLabel: { ...TYPE.label, color: theme.foreground, marginTop: SPACE.xs },\n sizeDetail: { ...TYPE.caption, color: theme.mutedForeground },\n custom: { flexDirection: 'row', alignItems: 'center', gap: SPACE.sm, marginTop: SPACE.md },\n customInput: {\n width: 76,\n height: 44,\n borderRadius: RADIUS.sm,\n paddingHorizontal: SPACE.md,\n backgroundColor: theme.card,\n color: theme.foreground,\n ...TYPE.body,\n },\n customX: { ...TYPE.body, color: theme.mutedForeground },\n // Recent designs\n recentHeader: { paddingHorizontal: GUTTER, paddingTop: SPACE.lg, paddingBottom: SPACE.md, gap: 2 },\n recentContent: { paddingHorizontal: GUTTER - SPACE.xs, paddingTop: SPACE.xs },\n recentList: { gap: SPACE.sm },\n recentFooter: { paddingTop: SPACE.lg, paddingHorizontal: SPACE.xs },\n fullWidth: { alignSelf: 'stretch' },\n row: { borderRadius: RADIUS.sm, borderWidth: StyleSheet.hairlineWidth, borderColor: 'transparent' },\n rowMain: { flexDirection: 'row', alignItems: 'flex-start', gap: SPACE.xs, padding: SPACE.sm },\n rowOpen: { flex: 1, minWidth: 0, flexDirection: 'row', alignItems: 'center', gap: SPACE.md },\n rowThumb: {\n width: 80,\n height: 64,\n borderRadius: RADIUS.sm - 2,\n backgroundColor: theme.card,\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n },\n rowPage: { borderRadius: 3 },\n rowText: { flex: 1, minWidth: 0, gap: 4 },\n rowTitle: { ...TYPE.label, fontWeight: '500', fontSize: 14, lineHeight: 19, color: theme.foreground },\n rowDetail: { ...TYPE.caption, fontWeight: '400', color: theme.mutedForeground },\n renameRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: SPACE.xs,\n marginHorizontal: SPACE.sm,\n marginBottom: SPACE.sm,\n },\n renameInput: {\n flex: 1,\n height: 36,\n paddingHorizontal: SPACE.sm,\n borderRadius: RADIUS.sm,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.borderStrong,\n backgroundColor: theme.surface,\n color: theme.foreground,\n fontSize: 14,\n },\n actions: {\n flexDirection: 'row',\n gap: SPACE.xs,\n padding: 6,\n borderTopWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n },\n action: {\n flex: 1,\n minHeight: 36,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 6,\n borderRadius: 6,\n },\n actionLabel: { ...TYPE.caption },\n skeletonRow: { flexDirection: 'row', alignItems: 'center', gap: SPACE.md, padding: SPACE.sm },\n skeletonThumb: { width: 80, height: 64 },\n skeletonText: { flex: 1, gap: SPACE.sm },\n alert: {\n gap: SPACE.md,\n alignItems: 'flex-start',\n padding: SPACE.lg,\n borderRadius: RADIUS.sm,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: theme.border,\n },\n alertText: { ...TYPE.body, fontSize: 14, lineHeight: 20, color: theme.mutedForeground },\n emptyBox: {\n gap: SPACE.sm,\n paddingHorizontal: SPACE.lg,\n paddingVertical: SPACE.xl,\n borderRadius: RADIUS.sm,\n borderWidth: 1,\n borderStyle: 'dashed',\n borderColor: theme.borderStrong,\n },\n emptyTitle: { ...TYPE.label, fontSize: 14, color: theme.foreground },\n }),\n);\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import {searchSizes,inRange,DESIGN_SIZES}from'../doc/sizes.js';const RECENT_LIMIT = 6;
2
+ const STUDIO_VIEWS = [{
3
+ id: "browse",
4
+ label: "Browse"
5
+ }, {
6
+ id: "recent",
7
+ label: "Recent designs"
8
+ }];
9
+ function parsePixelSize(s) {
10
+ if (!s) return null;
11
+ const m = s.match(/(\d+)\s*[×xX*]\s*(\d+)/);
12
+ if (!m) return null;
13
+ const width = parseInt(m[1], 10);
14
+ const height = parseInt(m[2], 10);
15
+ if (!width || !height) return null;
16
+ return {
17
+ width,
18
+ height
19
+ };
20
+ }
21
+ function searchStudioSizes(query) {
22
+ const q = query.trim().toLowerCase();
23
+ if (!q) return {
24
+ typed: null,
25
+ sizes: []
26
+ };
27
+ const typed = parsePixelSize(q);
28
+ return {
29
+ typed: typed && inRange(typed.width) && inRange(typed.height) ? typed : null,
30
+ sizes: searchSizes(q)
31
+ };
32
+ }
33
+ function sizeLabel(doc, kind) {
34
+ var _a, _b;
35
+ const match = (s) => s.width === doc.pageWidth && s.height === doc.pageHeight;
36
+ const size = (_a = DESIGN_SIZES.find((s) => match(s) && (!kind || s.kind === kind))) != null ? _a : DESIGN_SIZES.find(match);
37
+ return (_b = size == null ? void 0 : size.label) != null ? _b : `${Math.round(doc.pageWidth)} \xD7 ${Math.round(doc.pageHeight)} px`;
38
+ }
39
+ function pagesLabel(doc) {
40
+ return `${doc.pages.length} ${doc.pages.length === 1 ? "page" : "pages"}`;
41
+ }
42
+ const MINUTE = 6e4;
43
+ const HOUR = 60 * MINUTE;
44
+ const DAY = 24 * HOUR;
45
+ function relativeTime(ts, now = Date.now()) {
46
+ const diff = now - ts;
47
+ if (diff < MINUTE) return "just now";
48
+ if (diff < HOUR) return `${Math.round(diff / MINUTE)}m ago`;
49
+ if (diff < DAY) return `${Math.round(diff / HOUR)}h ago`;
50
+ if (diff < 30 * DAY) return `${Math.round(diff / DAY)}d ago`;
51
+ return new Date(ts).toLocaleDateString(void 0, {
52
+ month: "short",
53
+ day: "numeric"
54
+ });
55
+ }
56
+ function visibleRecents(rows, expanded) {
57
+ return {
58
+ shown: expanded ? rows : rows.slice(0, RECENT_LIMIT),
59
+ more: rows.length > RECENT_LIMIT
60
+ };
61
+ }export{RECENT_LIMIT,STUDIO_VIEWS,pagesLabel,parsePixelSize,relativeTime,searchStudioSizes,sizeLabel,visibleRecents};//# sourceMappingURL=studioHome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studioHome.js","sources":["../../../../src/features/design/home/studioHome.ts"],"sourcesContent":["/**\n * The studio home's pure rules - native twin of web carousel-editor\n * `StartPanel` (search results) and `RecentDesigns` (row labels). Runs under\n * jest as-is.\n */\nimport { DESIGN_SIZES, inRange, searchSizes, type DesignSize } from '../doc/sizes';\nimport type { DesignDoc, DesignKind } from '../doc/types';\n\n/** Recent designs show this many until \"See all designs\". */\nexport const RECENT_LIMIT = 6;\n\nexport type StudioView = 'browse' | 'recent';\n\nexport const STUDIO_VIEWS: readonly { id: StudioView; label: string }[] = [\n { id: 'browse', label: 'Browse' },\n { id: 'recent', label: 'Recent designs' },\n];\n\n/** \"1200x800\", \"1200 × 800\" - the pixels a person typed, or null. */\nexport function parsePixelSize(s: string | undefined): { width: number; height: number } | null {\n if (!s) return null;\n const m = s.match(/(\\d+)\\s*[×xX*]\\s*(\\d+)/);\n if (!m) return null;\n const width = parseInt(m[1], 10);\n const height = parseInt(m[2], 10);\n if (!width || !height) return null;\n return { width, height };\n}\n\n/** A typed size the studio can make, ahead of the preset sizes matching the query. */\nexport interface SizeResults {\n typed: { width: number; height: number } | null;\n sizes: DesignSize[];\n}\n\nexport function searchStudioSizes(query: string): SizeResults {\n const q = query.trim().toLowerCase();\n if (!q) return { typed: null, sizes: [] };\n const typed = parsePixelSize(q);\n return {\n typed: typed && inRange(typed.width) && inRange(typed.height) ? typed : null,\n sizes: searchSizes(q),\n };\n}\n\n/** \"Instagram post (4:5)\" when the page is a preset size, else its pixels. */\nexport function sizeLabel(doc: Pick<DesignDoc, 'pageWidth' | 'pageHeight'>, kind?: DesignKind): string {\n const match = (s: DesignSize) => s.width === doc.pageWidth && s.height === doc.pageHeight;\n const size = DESIGN_SIZES.find((s) => match(s) && (!kind || s.kind === kind)) ?? DESIGN_SIZES.find(match);\n return size?.label ?? `${Math.round(doc.pageWidth)} × ${Math.round(doc.pageHeight)} px`;\n}\n\nexport function pagesLabel(doc: Pick<DesignDoc, 'pages'>): string {\n return `${doc.pages.length} ${doc.pages.length === 1 ? 'page' : 'pages'}`;\n}\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n\nexport function relativeTime(ts: number, now: number = Date.now()): string {\n const diff = now - ts;\n if (diff < MINUTE) return 'just now';\n if (diff < HOUR) return `${Math.round(diff / MINUTE)}m ago`;\n if (diff < DAY) return `${Math.round(diff / HOUR)}h ago`;\n if (diff < 30 * DAY) return `${Math.round(diff / DAY)}d ago`;\n return new Date(ts).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\n/** The rows a recent list shows: the first six until expanded. */\nexport function visibleRecents<T>(rows: readonly T[], expanded: boolean): { shown: readonly T[]; more: boolean } {\n return { shown: expanded ? rows : rows.slice(0, RECENT_LIMIT), more: rows.length > RECENT_LIMIT };\n}\n"],"names":[],"mappings":"+DASO,MAAM,YAAe,GAAA;AAErB,MAAM,eAGP,CAAC;AAAA,EACL,EAAI,EAAA,QAAA;AAAA,EACJ,KAAO,EAAA;AACT,CAAG,EAAA;AAAA,EACD,EAAI,EAAA,QAAA;AAAA,EACJ,KAAO,EAAA;AACT,CAAC;AAGM,SAAS,eAAe,CAGtB,EAAA;AACP,EAAI,IAAA,CAAC,GAAU,OAAA,IAAA;AACf,EAAM,MAAA,CAAA,GAAI,CAAE,CAAA,KAAA,CAAM,wBAAwB,CAAA;AAC1C,EAAI,IAAA,CAAC,GAAU,OAAA,IAAA;AACf,EAAA,MAAM,KAAQ,GAAA,QAAA,CAAS,CAAE,CAAA,CAAC,GAAG,EAAE,CAAA;AAC/B,EAAA,MAAM,MAAS,GAAA,QAAA,CAAS,CAAE,CAAA,CAAC,GAAG,EAAE,CAAA;AAChC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAA,EAAe,OAAA,IAAA;AAC9B,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAUO,SAAS,kBAAkB,KAA4B,EAAA;AAC5D,EAAA,MAAM,CAAI,GAAA,KAAA,CAAM,IAAK,EAAA,CAAE,WAAY,EAAA;AACnC,EAAI,IAAA,CAAC,GAAU,OAAA;AAAA,IACb,KAAO,EAAA,IAAA;AAAA,IACP,OAAO;AAAC,GACV;AACA,EAAM,MAAA,KAAA,GAAQ,eAAe,CAAC,CAAA;AAC9B,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,KAAS,IAAA,OAAA,CAAQ,KAAM,CAAA,KAAK,KAAK,OAAQ,CAAA,KAAA,CAAM,MAAM,CAAA,GAAI,KAAQ,GAAA,IAAA;AAAA,IACxE,KAAA,EAAO,YAAY,CAAC;AAAA,GACtB;AACF;AAGgB,SAAA,SAAA,CAAU,KAAkD,IAA2B,EAAA;AA7DvG,EAAA,IAAA,EAAA,EAAA,EAAA;AA8DE,EAAM,MAAA,KAAA,GAAQ,CAAC,CAAkB,KAAA,CAAA,CAAE,UAAU,GAAI,CAAA,SAAA,IAAa,CAAE,CAAA,MAAA,KAAW,GAAI,CAAA,UAAA;AAC/E,EAAA,MAAM,QAAO,EAAa,GAAA,YAAA,CAAA,IAAA,CAAK,CAAK,CAAA,KAAA,KAAA,CAAM,CAAC,CAAM,KAAA,CAAC,IAAQ,IAAA,CAAA,CAAE,SAAS,IAAK,CAAA,CAAA,KAA7D,IAAkE,GAAA,EAAA,GAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AACtG,EAAA,OAAA,CAAO,EAAM,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAA,KAAA,KAAN,IAAe,GAAA,EAAA,GAAA,CAAA,EAAG,KAAK,KAAM,CAAA,GAAA,CAAI,SAAS,CAAC,CAAM,MAAA,EAAA,IAAA,CAAK,KAAM,CAAA,GAAA,CAAI,UAAU,CAAC,CAAA,GAAA,CAAA;AACpF;AACO,SAAS,WAAW,GAAuC,EAAA;AAChE,EAAO,OAAA,CAAA,EAAG,GAAI,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,IAAI,KAAM,CAAA,MAAA,KAAW,CAAI,GAAA,MAAA,GAAS,OAAO,CAAA,CAAA;AACzE;AACA,MAAM,MAAS,GAAA,GAAA;AACf,MAAM,OAAO,EAAK,GAAA,MAAA;AAClB,MAAM,MAAM,EAAK,GAAA,IAAA;AACV,SAAS,YAAa,CAAA,EAAA,EAAY,GAAc,GAAA,IAAA,CAAK,KAAe,EAAA;AACzE,EAAA,MAAM,OAAO,GAAM,GAAA,EAAA;AACnB,EAAI,IAAA,IAAA,GAAO,QAAe,OAAA,UAAA;AAC1B,EAAI,IAAA,IAAA,GAAO,MAAa,OAAA,CAAA,EAAG,KAAK,KAAM,CAAA,IAAA,GAAO,MAAM,CAAC,CAAA,KAAA,CAAA;AACpD,EAAI,IAAA,IAAA,GAAO,KAAY,OAAA,CAAA,EAAG,KAAK,KAAM,CAAA,IAAA,GAAO,IAAI,CAAC,CAAA,KAAA,CAAA;AACjD,EAAI,IAAA,IAAA,GAAO,KAAK,GAAK,EAAA,OAAO,GAAG,IAAK,CAAA,KAAA,CAAM,IAAO,GAAA,GAAG,CAAC,CAAA,KAAA,CAAA;AACrD,EAAA,OAAO,IAAI,IAAA,CAAK,EAAE,CAAA,CAAE,mBAAmB,MAAW,EAAA;AAAA,IAChD,KAAO,EAAA,OAAA;AAAA,IACP,GAAK,EAAA;AAAA,GACN,CAAA;AACH;AAGgB,SAAA,cAAA,CAAkB,MAAoB,QAGpD,EAAA;AACA,EAAO,OAAA;AAAA,IACL,OAAO,QAAW,GAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAM,GAAG,YAAY,CAAA;AAAA,IACnD,IAAA,EAAM,KAAK,MAAS,GAAA;AAAA,GACtB;AACF"}
@@ -0,0 +1,60 @@
1
+ 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
+ async function pickWithImagePicker() {
21
+ var _a;
22
+ const ImagePicker = require("expo-image-picker");
23
+ const permission = await ImagePicker.requestMediaLibraryPermissionsAsync();
24
+ if (!permission.granted) throw new Error("Allow photo access in Settings to add pictures.");
25
+ const result = await ImagePicker.launchImageLibraryAsync({
26
+ mediaTypes: ["images"],
27
+ allowsMultipleSelection: false,
28
+ quality: 0.85,
29
+ exif: false
30
+ });
31
+ const asset = result.canceled ? null : (_a = result.assets) == null ? void 0 : _a[0];
32
+ if (!(asset == null ? void 0 : asset.uri)) return null;
33
+ return {
34
+ src: asset.uri,
35
+ width: asset.width,
36
+ height: asset.height
37
+ };
38
+ }
39
+ function createDesignImagePicker(pickLocalMedia, uploadMedia) {
40
+ if (!uploadMedia && !pickLocalMedia) return void 0;
41
+ return async () => {
42
+ let picked = null;
43
+ if (pickLocalMedia) {
44
+ const item = (await pickLocalMedia()).find((m) => m.type === "image");
45
+ picked = item ? {
46
+ src: item.src,
47
+ width: item.width || void 0,
48
+ height: item.height || void 0
49
+ } : null;
50
+ } else {
51
+ picked = await pickWithImagePicker();
52
+ }
53
+ if (!picked) return null;
54
+ if (/^https:\/\//i.test(picked.src)) return picked;
55
+ if (!uploadMedia) throw new Error("Pictures cannot be uploaded from this build.");
56
+ return __spreadProps(__spreadValues({}, picked), {
57
+ src: await uploadMedia(picked.src)
58
+ });
59
+ };
60
+ }export{createDesignImagePicker};//# sourceMappingURL=pickDesignImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickDesignImage.js","sources":["../../../src/features/design/pickDesignImage.ts"],"sourcesContent":["/**\n * A picture for a design: picked from the device, then hosted, because a\n * saved design must open on the web and on other phones - a `file://` URI\n * means nothing there (doc/artifacts.ts drops local sources from a save).\n *\n * The host's picker wins when it is passed (it may upload as it picks); else\n * the remote picks through expo-image-picker itself, required lazily like the\n * resume surface does, so an older host still gets a working picker.\n */\nimport type { CanvasItem } from '../canvas/canvasCore';\nimport type { PickedImage } from './DesignEditorExperience';\n\nexport type PickLocalMedia = () => Promise<CanvasItem[]>;\nexport type UploadMedia = (localUri: string) => Promise<string>;\n\nasync function pickWithImagePicker(): Promise<PickedImage | null> {\n // eslint-disable-next-line @typescript-eslint/no-require-imports, global-require\n const ImagePicker = require('expo-image-picker') as typeof import('expo-image-picker');\n const permission = await ImagePicker.requestMediaLibraryPermissionsAsync();\n if (!permission.granted) throw new Error('Allow photo access in Settings to add pictures.');\n const result = await ImagePicker.launchImageLibraryAsync({\n mediaTypes: ['images'],\n allowsMultipleSelection: false,\n quality: 0.85,\n exif: false,\n });\n const asset = result.canceled ? null : result.assets?.[0];\n if (!asset?.uri) return null;\n return { src: asset.uri, width: asset.width, height: asset.height };\n}\n\nexport function createDesignImagePicker(\n pickLocalMedia: PickLocalMedia | undefined,\n uploadMedia: UploadMedia | undefined,\n): (() => Promise<PickedImage | null>) | undefined {\n if (!uploadMedia && !pickLocalMedia) return undefined;\n return async () => {\n let picked: PickedImage | null = null;\n if (pickLocalMedia) {\n const item = (await pickLocalMedia()).find((m) => m.type === 'image');\n picked = item ? { src: item.src, width: item.width || undefined, height: item.height || undefined } : null;\n } else {\n picked = await pickWithImagePicker();\n }\n if (!picked) return null;\n if (/^https:\\/\\//i.test(picked.src)) return picked;\n if (!uploadMedia) throw new Error('Pictures cannot be uploaded from this build.');\n return { ...picked, src: await uploadMedia(picked.src) };\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAaA,eAAe,mBAAmD,GAAA;AAblE,EAAA,IAAA,EAAA;AAeE,EAAM,MAAA,WAAA,GAAc,QAAQ,mBAAmB,CAAA;AAC/C,EAAM,MAAA,UAAA,GAAa,MAAM,WAAA,CAAY,mCAAoC,EAAA;AACzE,EAAA,IAAI,CAAC,UAAW,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,iDAAiD,CAAA;AAC1F,EAAM,MAAA,MAAA,GAAS,MAAM,WAAA,CAAY,uBAAwB,CAAA;AAAA,IACvD,UAAA,EAAY,CAAC,QAAQ,CAAA;AAAA,IACrB,uBAAyB,EAAA,KAAA;AAAA,IACzB,OAAS,EAAA,IAAA;AAAA,IACT,IAAM,EAAA;AAAA,GACP,CAAA;AACD,EAAA,MAAM,QAAQ,MAAO,CAAA,QAAA,GAAW,IAAO,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,WAAP,IAAgB,GAAA,MAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AACvD,EAAI,IAAA,EAAC,KAAO,IAAA,IAAA,GAAA,MAAA,GAAA,KAAA,CAAA,GAAA,CAAA,EAAY,OAAA,IAAA;AACxB,EAAO,OAAA;AAAA,IACL,KAAK,KAAM,CAAA,GAAA;AAAA,IACX,OAAO,KAAM,CAAA,KAAA;AAAA,IACb,QAAQ,KAAM,CAAA;AAAA,GAChB;AACF;AACgB,SAAA,uBAAA,CAAwB,gBAA4C,WAAuF,EAAA;AACzK,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,cAAA,EAAuB,OAAA,MAAA;AAC5C,EAAA,OAAO,YAAY;AACjB,IAAA,IAAI,MAA6B,GAAA,IAAA;AACjC,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAM,MAAA,IAAA,GAAA,CAAQ,MAAM,cAAe,EAAA,EAAG,KAAK,CAAK,CAAA,KAAA,CAAA,CAAE,SAAS,OAAO,CAAA;AAClE,MAAA,MAAA,GAAS,IAAO,GAAA;AAAA,QACd,KAAK,IAAK,CAAA,GAAA;AAAA,QACV,KAAA,EAAO,KAAK,KAAS,IAAA,MAAA;AAAA,QACrB,MAAA,EAAQ,KAAK,MAAU,IAAA;AAAA,OACrB,GAAA,IAAA;AAAA,KACC,MAAA;AACL,MAAA,MAAA,GAAS,MAAM,mBAAoB,EAAA;AAAA;AAErC,IAAI,IAAA,CAAC,QAAe,OAAA,IAAA;AACpB,IAAA,IAAI,cAAe,CAAA,IAAA,CAAK,MAAO,CAAA,GAAG,GAAU,OAAA,MAAA;AAC5C,IAAA,IAAI,CAAC,WAAA,EAAmB,MAAA,IAAI,MAAM,8CAA8C,CAAA;AAChF,IAAA,OAAO,iCACF,MADE,CAAA,EAAA;AAAA,MAEL,GAAK,EAAA,MAAM,WAAY,CAAA,MAAA,CAAO,GAAG;AAAA,KACnC,CAAA;AAAA,GACF;AACF"}
@@ -0,0 +1,69 @@
1
+ import {jsxs,jsx}from'react/jsx-runtime';import {memo,useMemo}from'react';import {View,StyleSheet}from'react-native';import {Image}from'expo-image';import {gradientLine}from'../doc/shapes.js';import {facesUsed}from'../doc/textLayout.js';import {useDesignFonts}from'./fontRegistry.js';import {LayerView}from'./layers.js';import {getSvg,svgUsable,SvgBoundary}from'./svg.js';function Background({
2
+ background,
3
+ W,
4
+ H
5
+ }) {
6
+ var _a;
7
+ if (!background) return /* @__PURE__ */ jsx(View, { style: [StyleSheet.absoluteFill, styles.white] });
8
+ if (background.kind === "image" && background.src) {
9
+ return /* @__PURE__ */ jsx(Image, { source: {
10
+ uri: background.src
11
+ }, style: StyleSheet.absoluteFill, contentFit: "cover", transition: 120 });
12
+ }
13
+ if (background.kind === "gradient" && background.from && background.to) {
14
+ const svg = getSvg();
15
+ const flat = /* @__PURE__ */ jsx(View, { style: [StyleSheet.absoluteFill, {
16
+ backgroundColor: background.from
17
+ }] });
18
+ if (!svg || !svgUsable()) return flat;
19
+ const {
20
+ Svg,
21
+ Defs,
22
+ LinearGradient,
23
+ Stop,
24
+ Rect
25
+ } = svg;
26
+ const [x1, y1, x2, y2] = gradientLine(0, 0, W, H, (_a = background.angle) != null ? _a : 180);
27
+ return /* @__PURE__ */ jsx(SvgBoundary, { fallback: flat, children: /* @__PURE__ */ jsxs(Svg, { width: W, height: H, style: StyleSheet.absoluteFill, children: [
28
+ /* @__PURE__ */ jsx(Defs, { children: /* @__PURE__ */ jsxs(LinearGradient, { id: "bg", gradientUnits: "userSpaceOnUse", x1, y1, x2, y2, children: [
29
+ /* @__PURE__ */ jsx(Stop, { offset: "0", stopColor: background.from }),
30
+ /* @__PURE__ */ jsx(Stop, { offset: "1", stopColor: background.to })
31
+ ] }) }),
32
+ /* @__PURE__ */ jsx(Rect, { x: 0, y: 0, width: W, height: H, fill: "url(#bg)" })
33
+ ] }) });
34
+ }
35
+ return /* @__PURE__ */ jsx(View, { style: [StyleSheet.absoluteFill, {
36
+ backgroundColor: background.color || "#ffffff"
37
+ }] });
38
+ }
39
+ const DesignPageView = memo(function DesignPageView2({
40
+ doc,
41
+ page,
42
+ width,
43
+ hiddenLayerId,
44
+ style
45
+ }) {
46
+ var _a, _b;
47
+ const W = Math.max(1, width);
48
+ const H = W * doc.pageHeight / Math.max(1, doc.pageWidth);
49
+ const faces = useMemo(() => facesUsed(page, doc.fontPair), [page, doc.fontPair]);
50
+ useDesignFonts(faces);
51
+ return /* @__PURE__ */ jsxs(View, { style: [{
52
+ width: W,
53
+ height: H
54
+ }, styles.page, style], children: [
55
+ page.src && !((_a = page.layers) == null ? void 0 : _a.length) ? /* @__PURE__ */ jsx(Image, { source: {
56
+ uri: page.src
57
+ }, style: StyleSheet.absoluteFill, contentFit: "cover" }) : /* @__PURE__ */ jsx(Background, { background: page.background, W, H }),
58
+ ((_b = page.layers) != null ? _b : []).map((layer) => layer.id === hiddenLayerId ? null : /* @__PURE__ */ jsx(LayerView, { layer, W, H, fontPair: doc.fontPair }, layer.id))
59
+ ] });
60
+ });
61
+ const styles = StyleSheet.create({
62
+ page: {
63
+ overflow: "hidden",
64
+ backgroundColor: "#ffffff"
65
+ },
66
+ white: {
67
+ backgroundColor: "#ffffff"
68
+ }
69
+ });export{DesignPageView};//# sourceMappingURL=DesignPageView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignPageView.js","sources":["../../../../src/features/design/render/DesignPageView.tsx"],"sourcesContent":["/**\n * One design page drawn natively at any width - the editor's canvas, a page\n * strip thumbnail and a Recent designs tile are all this view at different\n * sizes. Layers paint in array order, background first, exactly as the web\n * renderer stacks them.\n */\nimport React, { memo, useMemo } from 'react';\nimport { StyleSheet, View, type StyleProp, type ViewStyle } from 'react-native';\nimport { Image } from 'expo-image';\nimport { gradientLine } from '../doc/shapes';\nimport { facesUsed } from '../doc/textLayout';\nimport type { DesignDoc, DesignPage, PageBackground } from '../doc/types';\nimport { useDesignFonts } from './fontRegistry';\nimport { LayerView } from './layers';\nimport { SvgBoundary, getSvg, svgUsable } from './svg';\n\nfunction Background({ background, W, H }: { background?: PageBackground; W: number; H: number }) {\n if (!background) return <View style={[StyleSheet.absoluteFill, styles.white]} />;\n if (background.kind === 'image' && background.src) {\n return (\n <Image\n source={{ uri: background.src }}\n style={StyleSheet.absoluteFill}\n contentFit=\"cover\"\n transition={120}\n />\n );\n }\n if (background.kind === 'gradient' && background.from && background.to) {\n const svg = getSvg();\n const flat = <View style={[StyleSheet.absoluteFill, { backgroundColor: background.from }]} />;\n if (!svg || !svgUsable()) return flat;\n const { Svg, Defs, LinearGradient, Stop, Rect } = svg;\n const [x1, y1, x2, y2] = gradientLine(0, 0, W, H, background.angle ?? 180);\n return (\n <SvgBoundary fallback={flat}>\n <Svg width={W} height={H} style={StyleSheet.absoluteFill}>\n <Defs>\n <LinearGradient id=\"bg\" gradientUnits=\"userSpaceOnUse\" x1={x1} y1={y1} x2={x2} y2={y2}>\n <Stop offset=\"0\" stopColor={background.from} />\n <Stop offset=\"1\" stopColor={background.to} />\n </LinearGradient>\n </Defs>\n <Rect x={0} y={0} width={W} height={H} fill=\"url(#bg)\" />\n </Svg>\n </SvgBoundary>\n );\n }\n return <View style={[StyleSheet.absoluteFill, { backgroundColor: background.color || '#ffffff' }]} />;\n}\n\nexport interface DesignPageViewProps {\n doc: Pick<DesignDoc, 'pageWidth' | 'pageHeight' | 'fontPair'>;\n page: DesignPage;\n /** Drawn width in dp; the height follows the page's own proportions. */\n width: number;\n /** Layers not to draw (the one being typed into is drawn by its editor). */\n hiddenLayerId?: string | null;\n style?: StyleProp<ViewStyle>;\n}\n\nexport const DesignPageView = memo(function DesignPageView({\n doc,\n page,\n width,\n hiddenLayerId,\n style,\n}: DesignPageViewProps) {\n const W = Math.max(1, width);\n const H = (W * doc.pageHeight) / Math.max(1, doc.pageWidth);\n const faces = useMemo(() => facesUsed(page, doc.fontPair), [page, doc.fontPair]);\n useDesignFonts(faces);\n return (\n <View style={[{ width: W, height: H }, styles.page, style]}>\n {page.src && !page.layers?.length ? (\n <Image source={{ uri: page.src }} style={StyleSheet.absoluteFill} contentFit=\"cover\" />\n ) : (\n <Background background={page.background} W={W} H={H} />\n )}\n {(page.layers ?? []).map((layer) =>\n layer.id === hiddenLayerId ? null : (\n <LayerView key={layer.id} layer={layer} W={W} H={H} fontPair={doc.fontPair} />\n ),\n )}\n </View>\n );\n});\n\nconst styles = StyleSheet.create({\n page: { overflow: 'hidden', backgroundColor: '#ffffff' },\n white: { backgroundColor: '#ffffff' },\n});\n"],"names":["DesignPageView"],"mappings":"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"}