@adminide-stack/yantra-mobile 12.0.128 → 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 +4 -4
  359. package/lib/features/design/exportDesign.js +0 -133
  360. package/lib/features/design/exportDesign.js.map +0 -1
@@ -0,0 +1,416 @@
1
+ const GENRES = [{
2
+ label: "Drama",
3
+ hint: "Grounded, intimate",
4
+ phrase: "intimate character drama, grounded performances, restrained emotional tone",
5
+ art: {
6
+ from: "#3b2f4a",
7
+ to: "#101018"
8
+ }
9
+ }, {
10
+ label: "Noir",
11
+ hint: "Hard shadows, rain",
12
+ phrase: "film noir, hard shadows, venetian-blind light, rain-slick streets",
13
+ art: {
14
+ from: "#2a2d33",
15
+ to: "#050507"
16
+ }
17
+ }, {
18
+ label: "Comedy",
19
+ hint: "Bright, playful",
20
+ phrase: "light comedic tone, bright and playful, brisk timing",
21
+ art: {
22
+ from: "#f4c542",
23
+ to: "#e0632e"
24
+ }
25
+ }, {
26
+ label: "Horror",
27
+ hint: "Dread at the edges",
28
+ phrase: "horror atmosphere, dread and unease, darkness at the edges of the frame",
29
+ art: {
30
+ from: "#3a0a0f",
31
+ to: "#0a0507"
32
+ }
33
+ }, {
34
+ label: "Action",
35
+ hint: "Kinetic, impact",
36
+ phrase: "high-energy action, kinetic movement, impact and momentum",
37
+ art: {
38
+ from: "#ff6a2b",
39
+ to: "#4a0f0f"
40
+ }
41
+ }, {
42
+ label: "Thriller",
43
+ hint: "Taut, withheld",
44
+ phrase: "taut thriller tension, suspense, something withheld",
45
+ art: {
46
+ from: "#1c3a4a",
47
+ to: "#07111a"
48
+ }
49
+ }, {
50
+ label: "Romance",
51
+ hint: "Warm, tender",
52
+ phrase: "romantic tone, warmth and tenderness, soft intimacy",
53
+ art: {
54
+ from: "#f2a7c3",
55
+ to: "#7a2e58"
56
+ }
57
+ }, {
58
+ label: "Sci-fi",
59
+ hint: "Sleek, otherworldly",
60
+ phrase: "science-fiction world, sleek technology, otherworldly scale",
61
+ art: {
62
+ from: "#25d1e6",
63
+ to: "#0b1a4a"
64
+ }
65
+ }, {
66
+ label: "Fantasy",
67
+ hint: "Wonder and myth",
68
+ phrase: "fantasy world, wonder and myth, heightened reality",
69
+ art: {
70
+ from: "#8a5cf6",
71
+ to: "#1e0b3a"
72
+ }
73
+ }, {
74
+ label: "Documentary",
75
+ hint: "Observational, honest",
76
+ phrase: "documentary realism, observational, unstaged and honest",
77
+ art: {
78
+ from: "#9aa3ad",
79
+ to: "#2d3339"
80
+ }
81
+ }, {
82
+ label: "Epic",
83
+ hint: "Sweeping scale",
84
+ phrase: "epic scale, sweeping vistas, grandeur",
85
+ art: {
86
+ from: "#e8b04b",
87
+ to: "#3b2a0f"
88
+ }
89
+ }, {
90
+ label: "Western",
91
+ hint: "Dust and horizon",
92
+ phrase: "western, dust and horizon, weathered faces, wide open land",
93
+ art: {
94
+ from: "#d89b5a",
95
+ to: "#5a3a1e"
96
+ }
97
+ }];
98
+ const ERAS = [{
99
+ label: "Silent era",
100
+ hint: "1920s, black and white",
101
+ phrase: "1920s silent-film era, black and white, flicker, iris wipes",
102
+ art: {
103
+ from: "#cfcfcf",
104
+ to: "#1a1a1a"
105
+ }
106
+ }, {
107
+ label: "Golden age",
108
+ hint: "1940s studio glamour",
109
+ phrase: "1940s Hollywood golden age, glamorous studio lighting, black and white",
110
+ art: {
111
+ from: "#e9e2cf",
112
+ to: "#3a352a"
113
+ }
114
+ }, {
115
+ label: "Dye-transfer 50s",
116
+ hint: "Saturated, glossy",
117
+ phrase: "1950s three-strip dye-transfer colour, saturated and glossy",
118
+ art: {
119
+ from: "#e63946",
120
+ to: "#1d7ea8"
121
+ }
122
+ }, {
123
+ label: "New wave",
124
+ hint: "1960s handheld freedom",
125
+ phrase: "1960s new-wave cinema, handheld freedom, natural light, jump cuts",
126
+ art: {
127
+ from: "#b8c4a8",
128
+ to: "#3d4a33"
129
+ }
130
+ }, {
131
+ label: "Gritty 70s",
132
+ hint: "Grain, warm fade",
133
+ phrase: "1970s cinema, gritty grain, warm faded colour, zoom lenses",
134
+ art: {
135
+ from: "#c9863f",
136
+ to: "#3f2a14"
137
+ }
138
+ }, {
139
+ label: "Neon 80s",
140
+ hint: "Synth glow, VHS",
141
+ phrase: "1980s aesthetic, neon glow, synth-pop colour, VHS softness",
142
+ art: {
143
+ from: "#ff2d95",
144
+ to: "#2a0a5e"
145
+ }
146
+ }, {
147
+ label: "Indie 90s",
148
+ hint: "Muted, unpolished",
149
+ phrase: "1990s indie film, muted colour, 35mm grain, unpolished",
150
+ art: {
151
+ from: "#8f9a7e",
152
+ to: "#2f3328"
153
+ }
154
+ }, {
155
+ label: "Digital 2000s",
156
+ hint: "Cool, crisp",
157
+ phrase: "early-2000s digital video, cool tint, crisp and slightly clinical",
158
+ art: {
159
+ from: "#7fb2d8",
160
+ to: "#1f2f3f"
161
+ }
162
+ }, {
163
+ label: "Contemporary",
164
+ hint: "Clean, modern",
165
+ phrase: "contemporary look, clean modern cinematography",
166
+ art: {
167
+ from: "#e6e8ec",
168
+ to: "#4a4f57"
169
+ }
170
+ }, {
171
+ label: "Near future",
172
+ hint: "Minimal, advanced",
173
+ phrase: "near-future, sleek minimal design, subtle advanced technology",
174
+ art: {
175
+ from: "#a7f0e0",
176
+ to: "#0f2f3a"
177
+ }
178
+ }];
179
+ const TEMPOS = [{
180
+ label: "Contemplative",
181
+ hint: "Long held moments",
182
+ phrase: "slow, contemplative pacing, long held moments",
183
+ art: {
184
+ from: "#3f5a6b",
185
+ to: "#0f1a22"
186
+ }
187
+ }, {
188
+ label: "Steady",
189
+ hint: "Measured",
190
+ phrase: "steady, measured pacing",
191
+ art: {
192
+ from: "#6b7a8a",
193
+ to: "#232a33"
194
+ }
195
+ }, {
196
+ label: "Brisk",
197
+ hint: "Energetic",
198
+ phrase: "brisk, energetic pacing",
199
+ art: {
200
+ from: "#f2b134",
201
+ to: "#7a3e0a"
202
+ }
203
+ }, {
204
+ label: "Frantic",
205
+ hint: "Breathless",
206
+ phrase: "frantic, breathless pacing, rapid motion",
207
+ art: {
208
+ from: "#ff3b3b",
209
+ to: "#3a0a0a"
210
+ }
211
+ }, {
212
+ label: "Dreamlike",
213
+ hint: "Drifting, stretched",
214
+ phrase: "dreamlike drifting pace, floating, time stretched",
215
+ art: {
216
+ from: "#c9b6ff",
217
+ to: "#2a1f5e"
218
+ }
219
+ }];
220
+ const PALETTES = [{
221
+ label: "Warm golden",
222
+ hint: "Amber and honey",
223
+ phrase: "warm golden palette, amber and honey tones",
224
+ swatches: ["#f6c453", "#e08a3c", "#8a4b2a", "#2b1a12"]
225
+ }, {
226
+ label: "Teal & orange",
227
+ hint: "Cool shadows, warm skin",
228
+ phrase: "teal and orange palette, cool shadows against warm skin tones",
229
+ swatches: ["#0f6f7c", "#2ab3c0", "#f0a35c", "#3a2418"]
230
+ }, {
231
+ label: "Monochrome",
232
+ hint: "Black and white",
233
+ phrase: "black and white, full monochrome tonal range",
234
+ swatches: ["#111111", "#555555", "#aaaaaa", "#f2f2f2"]
235
+ }, {
236
+ label: "Pastel",
237
+ hint: "Gentle, low saturation",
238
+ phrase: "soft pastel palette, gentle low-saturation colours",
239
+ swatches: ["#f7c6d9", "#cfe3f7", "#fff1b8", "#d9f2d0"]
240
+ }, {
241
+ label: "Neon",
242
+ hint: "Electric on black",
243
+ phrase: "neon palette, electric magenta and cyan against black",
244
+ swatches: ["#ff2d95", "#00e5ff", "#7b2dff", "#0a0a14"]
245
+ }, {
246
+ label: "Earth tones",
247
+ hint: "Ochre, umber, moss",
248
+ phrase: "earthy palette, ochre, umber and moss",
249
+ swatches: ["#6b4f2a", "#a67c52", "#c9b48a", "#3d4a2f"]
250
+ }, {
251
+ label: "Desaturated",
252
+ hint: "Muted, washed",
253
+ phrase: "desaturated palette, muted and washed colour",
254
+ swatches: ["#4a4f55", "#7c8288", "#a9adb2", "#d4d6d9"]
255
+ }, {
256
+ label: "Vivid",
257
+ hint: "Bold primaries",
258
+ phrase: "vivid saturated palette, bold primary colours",
259
+ swatches: ["#ff3b30", "#ffcc00", "#34c759", "#007aff"]
260
+ }, {
261
+ label: "Cool blue",
262
+ hint: "Steel and ice",
263
+ phrase: "cool blue palette, steel and ice tones",
264
+ swatches: ["#0b1f3a", "#1e4d8c", "#5b9bd5", "#cfe0f5"]
265
+ }, {
266
+ label: "Sepia",
267
+ hint: "Aged warm brown",
268
+ phrase: "sepia-toned palette, aged warm brown",
269
+ swatches: ["#3b2a1a", "#7a5a3a", "#b8905f", "#e8d3b0"]
270
+ }];
271
+ const LIGHTING = [{
272
+ label: "Daylight",
273
+ hint: "Soft, even",
274
+ phrase: "natural daylight, soft even illumination",
275
+ light: {
276
+ angle: 330,
277
+ key: "#fff6e0",
278
+ ambient: "#8a93a3",
279
+ spread: 70
280
+ }
281
+ }, {
282
+ label: "Golden hour",
283
+ hint: "Low, warm, long shadows",
284
+ phrase: "golden-hour sunlight, low warm light, long shadows",
285
+ light: {
286
+ angle: 280,
287
+ key: "#ffb347",
288
+ ambient: "#4a2a2a",
289
+ spread: 55
290
+ }
291
+ }, {
292
+ label: "Blue hour",
293
+ hint: "Cool twilight glow",
294
+ phrase: "blue-hour twilight, cool ambient glow",
295
+ light: {
296
+ angle: 0,
297
+ key: "#8fb8ff",
298
+ ambient: "#141c33",
299
+ spread: 75
300
+ }
301
+ }, {
302
+ label: "Overcast",
303
+ hint: "Diffused, low contrast",
304
+ phrase: "overcast diffused light, soft shadows, low contrast",
305
+ light: {
306
+ angle: 0,
307
+ key: "#dfe3ea",
308
+ ambient: "#6f7580",
309
+ spread: 90
310
+ }
311
+ }, {
312
+ label: "Hard sun",
313
+ hint: "Crisp deep shadows",
314
+ phrase: "hard direct sunlight, crisp deep shadows",
315
+ light: {
316
+ angle: 40,
317
+ key: "#ffffff",
318
+ ambient: "#2a2620",
319
+ spread: 35
320
+ }
321
+ }, {
322
+ label: "Low key",
323
+ hint: "One pool of light",
324
+ phrase: "low-key lighting, deep shadows, a single pool of light",
325
+ light: {
326
+ angle: 300,
327
+ key: "#e8e2d0",
328
+ ambient: "#050505",
329
+ spread: 30
330
+ }
331
+ }, {
332
+ label: "High key",
333
+ hint: "Bright, airy",
334
+ phrase: "high-key lighting, bright and airy, minimal shadow",
335
+ light: {
336
+ angle: 0,
337
+ key: "#ffffff",
338
+ ambient: "#c8ccd4",
339
+ spread: 95
340
+ }
341
+ }, {
342
+ label: "Neon practicals",
343
+ hint: "Signs and screens",
344
+ phrase: "neon practical lights, coloured glow from signs and screens",
345
+ light: {
346
+ angle: 90,
347
+ key: "#ff2d95",
348
+ ambient: "#0a2a3a",
349
+ spread: 50
350
+ }
351
+ }, {
352
+ label: "Candlelight",
353
+ hint: "Warm flicker",
354
+ phrase: "candlelight, warm flickering glow, intimate",
355
+ light: {
356
+ angle: 180,
357
+ key: "#ff9a3c",
358
+ ambient: "#1a0c05",
359
+ spread: 40
360
+ }
361
+ }, {
362
+ label: "Three-point",
363
+ hint: "Key, fill and rim",
364
+ phrase: "studio three-point lighting, clean key, fill and rim",
365
+ light: {
366
+ angle: 315,
367
+ key: "#f5f5f5",
368
+ ambient: "#3a3d45",
369
+ spread: 60
370
+ }
371
+ }, {
372
+ label: "Backlit",
373
+ hint: "Silhouette, haze",
374
+ phrase: "backlit silhouette, rim light, haze",
375
+ light: {
376
+ angle: 0,
377
+ key: "#fff1c9",
378
+ ambient: "#0b0c0e",
379
+ spread: 22
380
+ }
381
+ }, {
382
+ label: "Moonlight",
383
+ hint: "Cool silver night",
384
+ phrase: "moonlight, cool silver light, night",
385
+ light: {
386
+ angle: 20,
387
+ key: "#c9d8ff",
388
+ ambient: "#070a14",
389
+ spread: 45
390
+ }
391
+ }];
392
+ const phraseOf = (list, label) => {
393
+ var _a;
394
+ return label && ((_a = list.find((o) => o.label === label)) == null ? void 0 : _a.phrase) || "";
395
+ };
396
+ function composeFilmPhrase(s) {
397
+ return [phraseOf(GENRES, s.genre), phraseOf(ERAS, s.era), phraseOf(TEMPOS, s.tempo)].filter(Boolean).join(", ");
398
+ }
399
+ function composeLookPhrase(s) {
400
+ return [phraseOf(LIGHTING, s.lighting), phraseOf(PALETTES, s.palette)].filter(Boolean).join(", ");
401
+ }
402
+ function appendFragments(prompt, fragments) {
403
+ let out = prompt.trim();
404
+ for (const fragment of fragments) {
405
+ const f = fragment.trim();
406
+ if (!f) continue;
407
+ if (!out) out = f;
408
+ else out = /[.!?]$/.test(out) ? `${out} ${f}` : `${out}, ${f}`;
409
+ }
410
+ return out;
411
+ }
412
+ function applyCinematic(prompt, cameraPhrase, s) {
413
+ return appendFragments(prompt, [composeFilmPhrase(s), cameraPhrase, composeLookPhrase(s)]);
414
+ }
415
+ const filmSummary = (s) => [s.genre, s.era, s.tempo].filter((v) => Boolean(v));
416
+ const cinematicCount = (s) => [s.genre, s.era, s.tempo, s.palette, s.lighting].filter((v) => v !== void 0 && v !== "").length;export{ERAS,GENRES,LIGHTING,PALETTES,TEMPOS,appendFragments,applyCinematic,cinematicCount,composeFilmPhrase,composeLookPhrase,filmSummary};//# sourceMappingURL=cinematicVocabulary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cinematicVocabulary.js","sources":["../../../../src/features/canvas/generator/cinematicVocabulary.ts"],"sourcesContent":["/**\n * The cinematic vocabulary: genre, era, tempo, colour palette and lighting -\n * the things a director settles before the camera is even discussed - and the\n * one function that turns a selection into prompt text.\n *\n * It sits beside the camera vocabulary and follows its two rules. Labels and\n * phrases are separate: \"Noir\" is what a director says, \"film noir, hard\n * shadows, rain-slick streets\" is what a model reads. And an empty setup adds\n * NOTHING - a panel that quietly stamps a genre on every run is editorialising.\n *\n * Every entry also carries what it takes to DRAW it - a gradient, a set of\n * swatches, a key light - so the pickers can show an option rather than only\n * name it, without borrowing anyone's stills.\n *\n * Data only, no React: the same lists feed the pickers, the tests and, in\n * time, the connector's shot spec (`style`, `lighting`, `palette` are already\n * fields there).\n */\n\nexport interface CinematicOption {\n /** What the control shows. */\n label: string;\n /** What the prompt says. */\n phrase: string;\n /** One short line under the label: the character of the choice, not a repeat of the phrase. */\n hint: string;\n}\n\n/** A card painted from a two-stop gradient. */\nexport interface GradientOption extends CinematicOption {\n art: { from: string; to: string };\n}\n\n/** A card painted from its swatches, left to right. */\nexport interface PaletteOption extends CinematicOption {\n swatches: readonly [string, string, string, string];\n}\n\n/**\n * A card painted as a lit sphere: where the key light comes from, in degrees\n * clockwise from the top, what colour it is, and what the shadow side reads.\n */\nexport interface LightingOption extends CinematicOption {\n light: { angle: number; key: string; ambient: string; spread: number };\n}\n\nexport const GENRES: readonly GradientOption[] = [\n {\n label: 'Drama',\n hint: 'Grounded, intimate',\n phrase: 'intimate character drama, grounded performances, restrained emotional tone',\n art: { from: '#3b2f4a', to: '#101018' },\n },\n {\n label: 'Noir',\n hint: 'Hard shadows, rain',\n phrase: 'film noir, hard shadows, venetian-blind light, rain-slick streets',\n art: { from: '#2a2d33', to: '#050507' },\n },\n {\n label: 'Comedy',\n hint: 'Bright, playful',\n phrase: 'light comedic tone, bright and playful, brisk timing',\n art: { from: '#f4c542', to: '#e0632e' },\n },\n {\n label: 'Horror',\n hint: 'Dread at the edges',\n phrase: 'horror atmosphere, dread and unease, darkness at the edges of the frame',\n art: { from: '#3a0a0f', to: '#0a0507' },\n },\n {\n label: 'Action',\n hint: 'Kinetic, impact',\n phrase: 'high-energy action, kinetic movement, impact and momentum',\n art: { from: '#ff6a2b', to: '#4a0f0f' },\n },\n {\n label: 'Thriller',\n hint: 'Taut, withheld',\n phrase: 'taut thriller tension, suspense, something withheld',\n art: { from: '#1c3a4a', to: '#07111a' },\n },\n {\n label: 'Romance',\n hint: 'Warm, tender',\n phrase: 'romantic tone, warmth and tenderness, soft intimacy',\n art: { from: '#f2a7c3', to: '#7a2e58' },\n },\n {\n label: 'Sci-fi',\n hint: 'Sleek, otherworldly',\n phrase: 'science-fiction world, sleek technology, otherworldly scale',\n art: { from: '#25d1e6', to: '#0b1a4a' },\n },\n {\n label: 'Fantasy',\n hint: 'Wonder and myth',\n phrase: 'fantasy world, wonder and myth, heightened reality',\n art: { from: '#8a5cf6', to: '#1e0b3a' },\n },\n {\n label: 'Documentary',\n hint: 'Observational, honest',\n phrase: 'documentary realism, observational, unstaged and honest',\n art: { from: '#9aa3ad', to: '#2d3339' },\n },\n {\n label: 'Epic',\n hint: 'Sweeping scale',\n phrase: 'epic scale, sweeping vistas, grandeur',\n art: { from: '#e8b04b', to: '#3b2a0f' },\n },\n {\n label: 'Western',\n hint: 'Dust and horizon',\n phrase: 'western, dust and horizon, weathered faces, wide open land',\n art: { from: '#d89b5a', to: '#5a3a1e' },\n },\n];\n\nexport const ERAS: readonly GradientOption[] = [\n {\n label: 'Silent era',\n hint: '1920s, black and white',\n phrase: '1920s silent-film era, black and white, flicker, iris wipes',\n art: { from: '#cfcfcf', to: '#1a1a1a' },\n },\n {\n label: 'Golden age',\n hint: '1940s studio glamour',\n phrase: '1940s Hollywood golden age, glamorous studio lighting, black and white',\n art: { from: '#e9e2cf', to: '#3a352a' },\n },\n {\n label: 'Dye-transfer 50s',\n hint: 'Saturated, glossy',\n phrase: '1950s three-strip dye-transfer colour, saturated and glossy',\n art: { from: '#e63946', to: '#1d7ea8' },\n },\n {\n label: 'New wave',\n hint: '1960s handheld freedom',\n phrase: '1960s new-wave cinema, handheld freedom, natural light, jump cuts',\n art: { from: '#b8c4a8', to: '#3d4a33' },\n },\n {\n label: 'Gritty 70s',\n hint: 'Grain, warm fade',\n phrase: '1970s cinema, gritty grain, warm faded colour, zoom lenses',\n art: { from: '#c9863f', to: '#3f2a14' },\n },\n {\n label: 'Neon 80s',\n hint: 'Synth glow, VHS',\n phrase: '1980s aesthetic, neon glow, synth-pop colour, VHS softness',\n art: { from: '#ff2d95', to: '#2a0a5e' },\n },\n {\n label: 'Indie 90s',\n hint: 'Muted, unpolished',\n phrase: '1990s indie film, muted colour, 35mm grain, unpolished',\n art: { from: '#8f9a7e', to: '#2f3328' },\n },\n {\n label: 'Digital 2000s',\n hint: 'Cool, crisp',\n phrase: 'early-2000s digital video, cool tint, crisp and slightly clinical',\n art: { from: '#7fb2d8', to: '#1f2f3f' },\n },\n {\n label: 'Contemporary',\n hint: 'Clean, modern',\n phrase: 'contemporary look, clean modern cinematography',\n art: { from: '#e6e8ec', to: '#4a4f57' },\n },\n {\n label: 'Near future',\n hint: 'Minimal, advanced',\n phrase: 'near-future, sleek minimal design, subtle advanced technology',\n art: { from: '#a7f0e0', to: '#0f2f3a' },\n },\n];\n\nexport const TEMPOS: readonly GradientOption[] = [\n {\n label: 'Contemplative',\n hint: 'Long held moments',\n phrase: 'slow, contemplative pacing, long held moments',\n art: { from: '#3f5a6b', to: '#0f1a22' },\n },\n { label: 'Steady', hint: 'Measured', phrase: 'steady, measured pacing', art: { from: '#6b7a8a', to: '#232a33' } },\n { label: 'Brisk', hint: 'Energetic', phrase: 'brisk, energetic pacing', art: { from: '#f2b134', to: '#7a3e0a' } },\n {\n label: 'Frantic',\n hint: 'Breathless',\n phrase: 'frantic, breathless pacing, rapid motion',\n art: { from: '#ff3b3b', to: '#3a0a0a' },\n },\n {\n label: 'Dreamlike',\n hint: 'Drifting, stretched',\n phrase: 'dreamlike drifting pace, floating, time stretched',\n art: { from: '#c9b6ff', to: '#2a1f5e' },\n },\n];\n\nexport const PALETTES: readonly PaletteOption[] = [\n {\n label: 'Warm golden',\n hint: 'Amber and honey',\n phrase: 'warm golden palette, amber and honey tones',\n swatches: ['#f6c453', '#e08a3c', '#8a4b2a', '#2b1a12'],\n },\n {\n label: 'Teal & orange',\n hint: 'Cool shadows, warm skin',\n phrase: 'teal and orange palette, cool shadows against warm skin tones',\n swatches: ['#0f6f7c', '#2ab3c0', '#f0a35c', '#3a2418'],\n },\n {\n label: 'Monochrome',\n hint: 'Black and white',\n phrase: 'black and white, full monochrome tonal range',\n swatches: ['#111111', '#555555', '#aaaaaa', '#f2f2f2'],\n },\n {\n label: 'Pastel',\n hint: 'Gentle, low saturation',\n phrase: 'soft pastel palette, gentle low-saturation colours',\n swatches: ['#f7c6d9', '#cfe3f7', '#fff1b8', '#d9f2d0'],\n },\n {\n label: 'Neon',\n hint: 'Electric on black',\n phrase: 'neon palette, electric magenta and cyan against black',\n swatches: ['#ff2d95', '#00e5ff', '#7b2dff', '#0a0a14'],\n },\n {\n label: 'Earth tones',\n hint: 'Ochre, umber, moss',\n phrase: 'earthy palette, ochre, umber and moss',\n swatches: ['#6b4f2a', '#a67c52', '#c9b48a', '#3d4a2f'],\n },\n {\n label: 'Desaturated',\n hint: 'Muted, washed',\n phrase: 'desaturated palette, muted and washed colour',\n swatches: ['#4a4f55', '#7c8288', '#a9adb2', '#d4d6d9'],\n },\n {\n label: 'Vivid',\n hint: 'Bold primaries',\n phrase: 'vivid saturated palette, bold primary colours',\n swatches: ['#ff3b30', '#ffcc00', '#34c759', '#007aff'],\n },\n {\n label: 'Cool blue',\n hint: 'Steel and ice',\n phrase: 'cool blue palette, steel and ice tones',\n swatches: ['#0b1f3a', '#1e4d8c', '#5b9bd5', '#cfe0f5'],\n },\n {\n label: 'Sepia',\n hint: 'Aged warm brown',\n phrase: 'sepia-toned palette, aged warm brown',\n swatches: ['#3b2a1a', '#7a5a3a', '#b8905f', '#e8d3b0'],\n },\n];\n\nexport const LIGHTING: readonly LightingOption[] = [\n {\n label: 'Daylight',\n hint: 'Soft, even',\n phrase: 'natural daylight, soft even illumination',\n light: { angle: 330, key: '#fff6e0', ambient: '#8a93a3', spread: 70 },\n },\n {\n label: 'Golden hour',\n hint: 'Low, warm, long shadows',\n phrase: 'golden-hour sunlight, low warm light, long shadows',\n light: { angle: 280, key: '#ffb347', ambient: '#4a2a2a', spread: 55 },\n },\n {\n label: 'Blue hour',\n hint: 'Cool twilight glow',\n phrase: 'blue-hour twilight, cool ambient glow',\n light: { angle: 0, key: '#8fb8ff', ambient: '#141c33', spread: 75 },\n },\n {\n label: 'Overcast',\n hint: 'Diffused, low contrast',\n phrase: 'overcast diffused light, soft shadows, low contrast',\n light: { angle: 0, key: '#dfe3ea', ambient: '#6f7580', spread: 90 },\n },\n {\n label: 'Hard sun',\n hint: 'Crisp deep shadows',\n phrase: 'hard direct sunlight, crisp deep shadows',\n light: { angle: 40, key: '#ffffff', ambient: '#2a2620', spread: 35 },\n },\n {\n label: 'Low key',\n hint: 'One pool of light',\n phrase: 'low-key lighting, deep shadows, a single pool of light',\n light: { angle: 300, key: '#e8e2d0', ambient: '#050505', spread: 30 },\n },\n {\n label: 'High key',\n hint: 'Bright, airy',\n phrase: 'high-key lighting, bright and airy, minimal shadow',\n light: { angle: 0, key: '#ffffff', ambient: '#c8ccd4', spread: 95 },\n },\n {\n label: 'Neon practicals',\n hint: 'Signs and screens',\n phrase: 'neon practical lights, coloured glow from signs and screens',\n light: { angle: 90, key: '#ff2d95', ambient: '#0a2a3a', spread: 50 },\n },\n {\n label: 'Candlelight',\n hint: 'Warm flicker',\n phrase: 'candlelight, warm flickering glow, intimate',\n light: { angle: 180, key: '#ff9a3c', ambient: '#1a0c05', spread: 40 },\n },\n {\n label: 'Three-point',\n hint: 'Key, fill and rim',\n phrase: 'studio three-point lighting, clean key, fill and rim',\n light: { angle: 315, key: '#f5f5f5', ambient: '#3a3d45', spread: 60 },\n },\n {\n label: 'Backlit',\n hint: 'Silhouette, haze',\n phrase: 'backlit silhouette, rim light, haze',\n light: { angle: 0, key: '#fff1c9', ambient: '#0b0c0e', spread: 22 },\n },\n {\n label: 'Moonlight',\n hint: 'Cool silver night',\n phrase: 'moonlight, cool silver light, night',\n light: { angle: 20, key: '#c9d8ff', ambient: '#070a14', spread: 45 },\n },\n];\n\n/** One cinematic setup. Every field optional - an unset field says nothing. */\nexport interface CinematicSettings {\n genre?: string;\n era?: string;\n tempo?: string;\n palette?: string;\n lighting?: string;\n}\n\nconst phraseOf = (list: readonly CinematicOption[], label: string | undefined): string =>\n (label && list.find((o) => o.label === label)?.phrase) || '';\n\n/** The genre, era and tempo clause - the film's identity, said before the camera. */\nexport function composeFilmPhrase(s: CinematicSettings): string {\n return [phraseOf(GENRES, s.genre), phraseOf(ERAS, s.era), phraseOf(TEMPOS, s.tempo)].filter(Boolean).join(', ');\n}\n\n/** The lighting and palette clause - how the film is lit and graded. */\nexport function composeLookPhrase(s: CinematicSettings): string {\n return [phraseOf(LIGHTING, s.lighting), phraseOf(PALETTES, s.palette)].filter(Boolean).join(', ');\n}\n\n/**\n * Join prompt fragments the way the camera vocabulary does: the user's words\n * first and verbatim, then each fragment, with no stray comma after a brief\n * that already ends in punctuation and no empty joins.\n */\nexport function appendFragments(prompt: string, fragments: readonly string[]): string {\n let out = prompt.trim();\n for (const fragment of fragments) {\n const f = fragment.trim();\n if (!f) continue;\n if (!out) out = f;\n else out = /[.!?]$/.test(out) ? `${out} ${f}` : `${out}, ${f}`;\n }\n return out;\n}\n\n/**\n * The prompt the run should use, in the order a director would brief it:\n * what it is (the user's words), what kind of film, how it is shot, how it is\n * lit and graded. `camera` is the camera vocabulary's phrase, passed in so this\n * module does not depend on that one.\n */\nexport function applyCinematic(prompt: string, cameraPhrase: string, s: CinematicSettings): string {\n return appendFragments(prompt, [composeFilmPhrase(s), cameraPhrase, composeLookPhrase(s)]);\n}\n\n/** Labels of the set fields, for a chip that has to say what it holds. */\nexport const filmSummary = (s: CinematicSettings): string[] =>\n [s.genre, s.era, s.tempo].filter((v): v is string => Boolean(v));\n\nexport const cinematicCount = (s: CinematicSettings): number =>\n [s.genre, s.era, s.tempo, s.palette, s.lighting].filter((v) => v !== undefined && v !== '').length;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import {FOCAL_LENGTHS,composeCameraPhrase,cameraCount}from'./cameraVocabulary.js';import {filmSummary,applyCinematic,cinematicCount}from'./cinematicVocabulary.js';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 EMPTY_DIRECTION = {
18
+ camera: {},
19
+ cinematic: {}
20
+ };
21
+ function directedPrompt(prompt, direction) {
22
+ return applyCinematic(prompt, composeCameraPhrase(direction.camera), direction.cinematic);
23
+ }
24
+ const directionCount = (direction) => cameraCount(direction.camera) + cinematicCount(direction.cinematic);
25
+ function directionSummary(direction) {
26
+ var _a;
27
+ const {
28
+ camera,
29
+ cinematic
30
+ } = direction;
31
+ const labels = [...filmSummary(cinematic), camera.shot, camera.move, camera.angle, (_a = FOCAL_LENGTHS.find((f) => f.mm === camera.lensMm)) == null ? void 0 : _a.label, camera.aperture, camera.stock, cinematic.lighting, cinematic.palette].filter((v) => Boolean(v));
32
+ if (labels.length === 0) return "";
33
+ const shown = labels.slice(0, 2).join(" \xB7 ");
34
+ return labels.length > 2 ? `${shown} +${labels.length - 2}` : shown;
35
+ }
36
+ function toggleField(settings, key, value) {
37
+ const next = __spreadValues({}, settings);
38
+ if (next[key] === value) delete next[key];
39
+ else next[key] = value;
40
+ return next;
41
+ }export{EMPTY_DIRECTION,directedPrompt,directionCount,directionSummary,toggleField};//# sourceMappingURL=direction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direction.js","sources":["../../../../src/features/canvas/generator/direction.ts"],"sourcesContent":["/**\n * Camera + cinematic direction applied to a video prompt (web CanvasPage's\n * `applyCinematic(prompt, composeCameraPhrase(camera), cinematic)`). Pure, so\n * the generator, the sheet and the home hero compose the prompt the same way.\n */\nimport { FOCAL_LENGTHS, cameraCount, composeCameraPhrase, type CameraSettings } from './cameraVocabulary';\nimport { applyCinematic, cinematicCount, filmSummary, type CinematicSettings } from './cinematicVocabulary';\n\nexport interface Direction {\n camera: CameraSettings;\n cinematic: CinematicSettings;\n}\n\nexport const EMPTY_DIRECTION: Direction = { camera: {}, cinematic: {} };\n\n/** The prompt the video run sends: the user's words first and intact, then film, camera, look. */\nexport function directedPrompt(prompt: string, direction: Direction): string {\n return applyCinematic(prompt, composeCameraPhrase(direction.camera), direction.cinematic);\n}\n\nexport const directionCount = (direction: Direction): number =>\n cameraCount(direction.camera) + cinematicCount(direction.cinematic);\n\n/** A few words for the pill that opens the sheet: the first two picks, then how many more; '' when none. */\nexport function directionSummary(direction: Direction): string {\n const { camera, cinematic } = direction;\n const labels = [\n ...filmSummary(cinematic),\n camera.shot,\n camera.move,\n camera.angle,\n FOCAL_LENGTHS.find((f) => f.mm === camera.lensMm)?.label,\n camera.aperture,\n camera.stock,\n cinematic.lighting,\n cinematic.palette,\n ].filter((v): v is string => Boolean(v));\n if (labels.length === 0) return '';\n const shown = labels.slice(0, 2).join(' · ');\n return labels.length > 2 ? `${shown} +${labels.length - 2}` : shown;\n}\n\n/** Toggle one field: picking the selected value again clears it, so every pick can be undone. */\nexport function toggleField<T extends object, K extends keyof T>(settings: T, key: K, value: T[K]): T {\n const next = { ...settings };\n if (next[key] === value) delete next[key];\n else next[key] = value;\n return next;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAWO,MAAM,eAA6B,GAAA;AAAA,EACxC,QAAQ,EAAC;AAAA,EACT,WAAW;AACb;AAGgB,SAAA,cAAA,CAAe,QAAgB,SAA8B,EAAA;AAC3E,EAAA,OAAO,eAAe,MAAQ,EAAA,mBAAA,CAAoB,UAAU,MAAM,CAAA,EAAG,UAAU,SAAS,CAAA;AAC1F;AACa,MAAA,cAAA,GAAiB,CAAC,SAAiC,KAAA,WAAA,CAAY,UAAU,MAAM,CAAA,GAAI,cAAe,CAAA,SAAA,CAAU,SAAS;AAG3H,SAAS,iBAAiB,SAA8B,EAAA;AAvB/D,EAAA,IAAA,EAAA;AAwBE,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA;AAAA,GACE,GAAA,SAAA;AACJ,EAAA,MAAM,SAAS,CAAC,GAAG,WAAY,CAAA,SAAS,GAAG,MAAO,CAAA,IAAA,EAAM,MAAO,CAAA,IAAA,EAAM,OAAO,KAAO,EAAA,CAAA,EAAA,GAAA,aAAA,CAAc,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,EAAO,KAAA,MAAA,CAAO,MAAM,CAAA,KAA9C,mBAAiD,KAAO,EAAA,MAAA,CAAO,QAAU,EAAA,MAAA,CAAO,OAAO,SAAU,CAAA,QAAA,EAAU,SAAU,CAAA,OAAO,EAAE,MAAO,CAAA,CAAC,CAAmB,KAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AACtP,EAAI,IAAA,MAAA,CAAO,MAAW,KAAA,CAAA,EAAU,OAAA,EAAA;AAChC,EAAA,MAAM,QAAQ,MAAO,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA,CAAE,KAAK,QAAK,CAAA;AAC3C,EAAO,OAAA,MAAA,CAAO,SAAS,CAAI,GAAA,CAAA,EAAG,KAAK,CAAK,EAAA,EAAA,MAAA,CAAO,MAAS,GAAA,CAAC,CAAK,CAAA,GAAA,KAAA;AAChE;AAGgB,SAAA,WAAA,CAAiD,QAAa,EAAA,GAAA,EAAQ,KAAgB,EAAA;AACpG,EAAA,MAAM,OAAO,cACR,CAAA,EAAA,EAAA,QAAA,CAAA;AAEL,EAAA,IAAI,KAAK,GAAG,CAAA,KAAM,KAAO,EAAA,OAAO,KAAK,GAAG,CAAA;AAAA,OAAO,IAAA,CAAK,GAAG,CAAI,GAAA,KAAA;AAC3D,EAAO,OAAA,IAAA;AACT"}
@@ -0,0 +1,108 @@
1
+ import {reframePlan,reframeOutput,stillBars}from'../reframe.js';function previewOutDims(src, choice) {
2
+ const fit = choice.fit === "stack" ? "fit" : choice.fit;
3
+ const plan = reframePlan(src, choice.format.ratio, fit, choice.focus);
4
+ if (!plan) return null;
5
+ return reframeOutput(choice.format, plan);
6
+ }
7
+ function pictureBox(src, out, fit, focus = 0.5) {
8
+ const k = fit === "crop" ? Math.max(out.width / src.width, out.height / src.height) : Math.min(out.width / src.width, out.height / src.height);
9
+ const width = src.width * k;
10
+ const height = src.height * k;
11
+ const along = fit === "crop" ? Math.min(1, Math.max(0, focus)) : 0.5;
12
+ return {
13
+ x: (out.width - width) * along || 0,
14
+ y: (out.height - height) * along || 0,
15
+ width,
16
+ height
17
+ };
18
+ }
19
+ function previewBarColor(kind, bars) {
20
+ if (kind === "image") return stillBars({
21
+ fit: "fit",
22
+ bars
23
+ }) === "white" ? "#ffffff" : "#000000";
24
+ if (bars === "black") return "#000000";
25
+ if (bars === "white") return "#ffffff";
26
+ return null;
27
+ }
28
+ function fitPreview(out, maxW, maxH) {
29
+ if (!(out.width > 0) || !(out.height > 0) || false || false) return {
30
+ width: 0,
31
+ height: 0
32
+ };
33
+ const k = Math.min(maxW / out.width, maxH / out.height);
34
+ return {
35
+ width: Math.round(out.width * k),
36
+ height: Math.round(out.height * k)
37
+ };
38
+ }
39
+ function stackPreviewPanels(src, out) {
40
+ const srcWide = src.width > src.height;
41
+ const outTall = out.height > out.width;
42
+ if (srcWide !== outTall || !(src.width > 0) || !(src.height > 0)) return [];
43
+ const panels = [];
44
+ for (let i = 0; i < 2; i += 1) {
45
+ if (srcWide) {
46
+ const slot = {
47
+ w: out.width,
48
+ h: out.height / 2
49
+ };
50
+ const half = {
51
+ w: src.width / 2,
52
+ h: src.height
53
+ };
54
+ const k = Math.max(slot.w / half.w, slot.h / half.h);
55
+ const w = slot.w / k;
56
+ const h = slot.h / k;
57
+ panels.push({
58
+ crop: {
59
+ x: i * half.w + (half.w - w) / 2,
60
+ y: (half.h - h) / 2,
61
+ w,
62
+ h
63
+ },
64
+ at: {
65
+ x: 0,
66
+ y: i * slot.h
67
+ },
68
+ size: slot
69
+ });
70
+ } else {
71
+ const slot = {
72
+ w: out.width / 2,
73
+ h: out.height
74
+ };
75
+ const half = {
76
+ w: src.width,
77
+ h: src.height / 2
78
+ };
79
+ const k = Math.max(slot.w / half.w, slot.h / half.h);
80
+ const w = slot.w / k;
81
+ const h = slot.h / k;
82
+ panels.push({
83
+ crop: {
84
+ x: (half.w - w) / 2,
85
+ y: i * half.h + (half.h - h) / 2,
86
+ w,
87
+ h
88
+ },
89
+ at: {
90
+ x: i * slot.w,
91
+ y: 0
92
+ },
93
+ size: slot
94
+ });
95
+ }
96
+ }
97
+ return panels;
98
+ }
99
+ function dimsFromShape(width, height, longEdge = 1920) {
100
+ const ratio = width > 0 && height > 0 ? width / height : 16 / 9;
101
+ return ratio >= 1 ? {
102
+ width: longEdge,
103
+ height: Math.round(longEdge / ratio)
104
+ } : {
105
+ width: Math.round(longEdge * ratio),
106
+ height: longEdge
107
+ };
108
+ }export{dimsFromShape,fitPreview,pictureBox,previewBarColor,previewOutDims,stackPreviewPanels};//# sourceMappingURL=reframeGeometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reframeGeometry.js","sources":["../../../../src/features/canvas/generator/reframeGeometry.ts"],"sourcesContent":["/**\n * Reframe live preview geometry (native twin of web `EditToolPanel` ReframePreview\n * and `reframeMedia.pictureBox`). Pure: the panel lays an Image inside padded\n * Views from these boxes, so the person sees the fit, the bars or the crop\n * before paying for the render.\n */\nimport { reframePlan, reframeOutput, stillBars, type Dims, type ReframeChoice } from '../reframe';\n\nexport interface Box {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** A stacked panel: a window of the source (`crop`, source px) drawn at `at` / `size` (output px). */\nexport interface StackPreviewPanel {\n crop: { x: number; y: number; w: number; h: number };\n at: { x: number; y: number };\n size: { w: number; h: number };\n}\n\n/** The output frame the render will produce, or null when the source or ratio is unreadable. */\nexport function previewOutDims(src: Dims, choice: Pick<ReframeChoice, 'format' | 'fit' | 'focus'>): Dims | null {\n const fit = choice.fit === 'stack' ? 'fit' : choice.fit;\n const plan = reframePlan(src, choice.format.ratio, fit, choice.focus);\n if (!plan) return null;\n return reframeOutput(choice.format, plan);\n}\n\n/**\n * Where the picture sits in the output: covering it for a crop (shifted by\n * focus along the overflowing axis), inside it for a fit (centred).\n */\nexport function pictureBox(src: Dims, out: Dims, fit: 'crop' | 'fit', focus = 0.5): Box {\n const k =\n fit === 'crop'\n ? Math.max(out.width / src.width, out.height / src.height)\n : Math.min(out.width / src.width, out.height / src.height);\n const width = src.width * k;\n const height = src.height * k;\n const along = fit === 'crop' ? Math.min(1, Math.max(0, focus)) : 0.5;\n // `|| 0`: an overflow times a zero focus is -0.\n return { x: (out.width - width) * along || 0, y: (out.height - height) * along || 0, width, height };\n}\n\n/** The colour behind a fitted picture as the render will paint it. A still only gets black or white. */\nexport function previewBarColor(kind: 'image' | 'video', bars: ReframeChoice['bars']): string | null {\n if (kind === 'image') return stillBars({ fit: 'fit', bars }) === 'white' ? '#ffffff' : '#000000';\n if (bars === 'black') return '#000000';\n if (bars === 'white') return '#ffffff';\n // match: the render samples the edges; blur: the picture itself fills the bars.\n return null;\n}\n\n/**\n * The preview box size inside `maxW` x `maxH`, keeping the output's shape.\n */\nexport function fitPreview(out: Dims, maxW: number, maxH: number): { width: number; height: number } {\n if (!(out.width > 0) || !(out.height > 0) || !(maxW > 0) || !(maxH > 0)) return { width: 0, height: 0 };\n const k = Math.min(maxW / out.width, maxH / out.height);\n return { width: Math.round(out.width * k), height: Math.round(out.height * k) };\n}\n\n/**\n * A schematic stack for a clip: the source split into two halves along its\n * long axis, each half filling half of the output. The render finds the real\n * panels from the pixels (phones, faces, layout); a phone cannot sample a\n * video frame, so this shows the shape of the result rather than its seams.\n * Empty when the source and the output share an orientation (nothing to stack).\n */\nexport function stackPreviewPanels(src: Dims, out: Dims): StackPreviewPanel[] {\n const srcWide = src.width > src.height;\n const outTall = out.height > out.width;\n if (srcWide !== outTall || !(src.width > 0) || !(src.height > 0)) return [];\n const panels: StackPreviewPanel[] = [];\n for (let i = 0; i < 2; i += 1) {\n if (srcWide) {\n // Left half on top, right half below.\n const slot = { w: out.width, h: out.height / 2 };\n const half = { w: src.width / 2, h: src.height };\n const k = Math.max(slot.w / half.w, slot.h / half.h);\n const w = slot.w / k;\n const h = slot.h / k;\n panels.push({\n crop: { x: i * half.w + (half.w - w) / 2, y: (half.h - h) / 2, w, h },\n at: { x: 0, y: i * slot.h },\n size: slot,\n });\n } else {\n const slot = { w: out.width / 2, h: out.height };\n const half = { w: src.width, h: src.height / 2 };\n const k = Math.max(slot.w / half.w, slot.h / half.h);\n const w = slot.w / k;\n const h = slot.h / k;\n panels.push({\n crop: { x: (half.w - w) / 2, y: i * half.h + (half.h - h) / 2, w, h },\n at: { x: i * slot.w, y: 0 },\n size: slot,\n });\n }\n }\n return panels;\n}\n\n/** Source dims for a board item when the file cannot be probed: its on-board shape. */\nexport function dimsFromShape(width: number, height: number, longEdge = 1920): Dims {\n const ratio = width > 0 && height > 0 ? width / height : 16 / 9;\n return ratio >= 1\n ? { width: longEdge, height: Math.round(longEdge / ratio) }\n : { width: Math.round(longEdge * ratio), height: longEdge };\n}\n"],"names":[],"mappings":"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"}