@adminide-stack/yantra-mobile 12.0.121 → 12.0.123

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 (175) hide show
  1. package/lib/features/apps/appArt.js +1 -1
  2. package/lib/features/apps/appArt.js.map +1 -1
  3. package/lib/features/apps/mobileAppCatalog.js +15 -11
  4. package/lib/features/apps/mobileAppCatalog.js.map +1 -1
  5. package/lib/features/canvas/CanvasAgentChatPane.js +82 -20
  6. package/lib/features/canvas/CanvasAgentChatPane.js.map +1 -1
  7. package/lib/features/canvas/CanvasBoardsGrid.js +291 -100
  8. package/lib/features/canvas/CanvasBoardsGrid.js.map +1 -1
  9. package/lib/features/canvas/CanvasEditToolsPanel.js +105 -12
  10. package/lib/features/canvas/CanvasEditToolsPanel.js.map +1 -1
  11. package/lib/features/canvas/CanvasExperience.js +266 -68
  12. package/lib/features/canvas/CanvasExperience.js.map +1 -1
  13. package/lib/features/canvas/CanvasGeneratePanel.js +204 -66
  14. package/lib/features/canvas/CanvasGeneratePanel.js.map +1 -1
  15. package/lib/features/canvas/CanvasLibrarySheet.js +31 -13
  16. package/lib/features/canvas/CanvasLibrarySheet.js.map +1 -1
  17. package/lib/features/canvas/CanvasModelPicker.js +176 -0
  18. package/lib/features/canvas/CanvasModelPicker.js.map +1 -0
  19. package/lib/features/canvas/CanvasTasksPanel.js +325 -29
  20. package/lib/features/canvas/CanvasTasksPanel.js.map +1 -1
  21. package/lib/features/canvas/CanvasTemplatesPanel.js +5 -4
  22. package/lib/features/canvas/CanvasTemplatesPanel.js.map +1 -1
  23. package/lib/features/canvas/CanvasToolDock.js +137 -61
  24. package/lib/features/canvas/CanvasToolDock.js.map +1 -1
  25. package/lib/features/canvas/FrameExtractorExperience.js +33 -2
  26. package/lib/features/canvas/FrameExtractorExperience.js.map +1 -1
  27. package/lib/features/canvas/GeneratorReferenceSlots.js +197 -0
  28. package/lib/features/canvas/GeneratorReferenceSlots.js.map +1 -0
  29. package/lib/features/canvas/NativeCanvasViewer.js +89 -11
  30. package/lib/features/canvas/NativeCanvasViewer.js.map +1 -1
  31. package/lib/features/canvas/PromoContextFields.js +55 -2
  32. package/lib/features/canvas/PromoContextFields.js.map +1 -1
  33. package/lib/features/canvas/SetStudioExperience.js +323 -13
  34. package/lib/features/canvas/SetStudioExperience.js.map +1 -1
  35. package/lib/features/canvas/VideoEditExperience.js +1 -53
  36. package/lib/features/canvas/VideoEditExperience.js.map +1 -1
  37. package/lib/features/canvas/VideoEditorExperience.js +697 -506
  38. package/lib/features/canvas/VideoEditorExperience.js.map +1 -1
  39. package/lib/features/canvas/VideoGeneratorExperience.js +22 -5
  40. package/lib/features/canvas/VideoGeneratorExperience.js.map +1 -1
  41. package/lib/features/canvas/canvasAgentChat.js +125 -11
  42. package/lib/features/canvas/canvasAgentChat.js.map +1 -1
  43. package/lib/features/canvas/canvasCore.js +117 -12
  44. package/lib/features/canvas/canvasCore.js.map +1 -1
  45. package/lib/features/canvas/canvasEditOps.js +148 -111
  46. package/lib/features/canvas/canvasEditOps.js.map +1 -1
  47. package/lib/features/canvas/canvasTaskSync.js +235 -0
  48. package/lib/features/canvas/canvasTaskSync.js.map +1 -0
  49. package/lib/features/canvas/canvasTasks.js +98 -11
  50. package/lib/features/canvas/canvasTasks.js.map +1 -1
  51. package/lib/features/canvas/createTiles.js +247 -0
  52. package/lib/features/canvas/createTiles.js.map +1 -0
  53. package/lib/features/canvas/deepLinks.js +83 -0
  54. package/lib/features/canvas/deepLinks.js.map +1 -0
  55. package/lib/features/canvas/frameExtract.js +13 -1
  56. package/lib/features/canvas/frameExtract.js.map +1 -1
  57. package/lib/features/canvas/generationModels.js +36 -8
  58. package/lib/features/canvas/generationModels.js.map +1 -1
  59. package/lib/features/canvas/generatorCommands.js +106 -0
  60. package/lib/features/canvas/generatorCommands.js.map +1 -0
  61. package/lib/features/canvas/generatorReferences.js +82 -0
  62. package/lib/features/canvas/generatorReferences.js.map +1 -0
  63. package/lib/features/canvas/homeWork.js +74 -0
  64. package/lib/features/canvas/homeWork.js.map +1 -0
  65. package/lib/features/canvas/linksRpc.js +130 -0
  66. package/lib/features/canvas/linksRpc.js.map +1 -0
  67. package/lib/features/canvas/mediaRecheck.js +176 -0
  68. package/lib/features/canvas/mediaRecheck.js.map +1 -0
  69. package/lib/features/canvas/mediaUrls.js +258 -0
  70. package/lib/features/canvas/mediaUrls.js.map +1 -0
  71. package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
  72. package/lib/features/canvas/promoProjectImport.js +80 -13
  73. package/lib/features/canvas/promoProjectImport.js.map +1 -1
  74. package/lib/features/canvas/promoVideo.js +106 -15
  75. package/lib/features/canvas/promoVideo.js.map +1 -1
  76. package/lib/features/canvas/reframe.js +228 -0
  77. package/lib/features/canvas/reframe.js.map +1 -0
  78. package/lib/features/canvas/serverTasks.js +697 -0
  79. package/lib/features/canvas/serverTasks.js.map +1 -0
  80. package/lib/features/canvas/set/SetViewportWebView.js +207 -28
  81. package/lib/features/canvas/set/SetViewportWebView.js.map +1 -1
  82. package/lib/features/canvas/set/agent/prompt.js +66 -0
  83. package/lib/features/canvas/set/agent/prompt.js.map +1 -0
  84. package/lib/features/canvas/set/agent/setOps.js +203 -0
  85. package/lib/features/canvas/set/agent/setOps.js.map +1 -0
  86. package/lib/features/canvas/set/agent/setTurn.js +128 -0
  87. package/lib/features/canvas/set/agent/setTurn.js.map +1 -0
  88. package/lib/features/canvas/set/agent/snapshot.js +43 -0
  89. package/lib/features/canvas/set/agent/snapshot.js.map +1 -0
  90. package/lib/features/canvas/set/agent/tools.js +580 -0
  91. package/lib/features/canvas/set/agent/tools.js.map +1 -0
  92. package/lib/features/canvas/set/setProject.js +43 -4
  93. package/lib/features/canvas/set/setProject.js.map +1 -1
  94. package/lib/features/canvas/set/supplyLibrary.js +397 -0
  95. package/lib/features/canvas/set/supplyLibrary.js.map +1 -0
  96. package/lib/features/canvas/storageLibrary.js +113 -52
  97. package/lib/features/canvas/storageLibrary.js.map +1 -1
  98. package/lib/features/canvas/studioCatalog.js +15 -2
  99. package/lib/features/canvas/studioCatalog.js.map +1 -1
  100. package/lib/features/canvas/studioLooks.js +1 -8
  101. package/lib/features/canvas/studioLooks.js.map +1 -1
  102. package/lib/features/canvas/useBoardMediaRefresh.js +66 -0
  103. package/lib/features/canvas/useBoardMediaRefresh.js.map +1 -0
  104. package/lib/features/canvas/useMediaSource.js +84 -0
  105. package/lib/features/canvas/useMediaSource.js.map +1 -0
  106. package/lib/features/canvas/video3d.js +11 -10
  107. package/lib/features/canvas/video3d.js.map +1 -1
  108. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js +46 -0
  109. package/lib/features/canvas/videoEditor/BlurBoxOverlay.js.map +1 -0
  110. package/lib/features/canvas/videoEditor/ExportTaskCard.js +134 -0
  111. package/lib/features/canvas/videoEditor/ExportTaskCard.js.map +1 -0
  112. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js +45 -7
  113. package/lib/features/canvas/videoEditor/agent/AgentCutPane.js.map +1 -1
  114. package/lib/features/canvas/videoEditor/agent/agentLoop.js +4 -2
  115. package/lib/features/canvas/videoEditor/agent/agentLoop.js.map +1 -1
  116. package/lib/features/canvas/videoEditor/agent/attachments.js +304 -0
  117. package/lib/features/canvas/videoEditor/agent/attachments.js.map +1 -0
  118. package/lib/features/canvas/videoEditor/agent/brainClient.js +3 -2
  119. package/lib/features/canvas/videoEditor/agent/brainClient.js.map +1 -1
  120. package/lib/features/canvas/videoEditor/agent/cutTools.js +207 -7
  121. package/lib/features/canvas/videoEditor/agent/cutTools.js.map +1 -1
  122. package/lib/features/canvas/videoEditor/blurBox.js +34 -0
  123. package/lib/features/canvas/videoEditor/blurBox.js.map +1 -0
  124. package/lib/features/canvas/videoEditor/compileTimeline.js +668 -0
  125. package/lib/features/canvas/videoEditor/compileTimeline.js.map +1 -0
  126. package/lib/features/canvas/videoEditor/editorModel.js +56 -22
  127. package/lib/features/canvas/videoEditor/editorModel.js.map +1 -1
  128. package/lib/features/canvas/videoEditor/exportPipeline.js +77 -0
  129. package/lib/features/canvas/videoEditor/exportPipeline.js.map +1 -0
  130. package/lib/features/canvas/videoEditor/exportRenderer.js +19 -12
  131. package/lib/features/canvas/videoEditor/exportRenderer.js.map +1 -1
  132. package/lib/features/canvas/videoEditor/exportTask.js +216 -0
  133. package/lib/features/canvas/videoEditor/exportTask.js.map +1 -0
  134. package/lib/features/canvas/videoEditor/formWidgets.js +142 -0
  135. package/lib/features/canvas/videoEditor/formWidgets.js.map +1 -0
  136. package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js +195 -0
  137. package/lib/features/canvas/videoEditor/produce/ProduceVideoSheet.js.map +1 -0
  138. package/lib/features/canvas/videoEditor/produce/produceScenes.js +158 -0
  139. package/lib/features/canvas/videoEditor/produce/produceScenes.js.map +1 -0
  140. package/lib/features/canvas/videoEditor/remoteMediaClient.js +17 -5
  141. package/lib/features/canvas/videoEditor/remoteMediaClient.js.map +1 -1
  142. package/lib/features/canvas/videoEditor/renderTimeline.js +207 -0
  143. package/lib/features/canvas/videoEditor/renderTimeline.js.map +1 -0
  144. package/lib/features/canvas/videoEditor/renewLinks.js +64 -0
  145. package/lib/features/canvas/videoEditor/renewLinks.js.map +1 -0
  146. package/lib/features/canvas/videoEditor/sceneLayers.js +101 -0
  147. package/lib/features/canvas/videoEditor/sceneLayers.js.map +1 -0
  148. package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js +283 -0
  149. package/lib/features/canvas/videoEditor/tools/ToolsDrawer.js.map +1 -0
  150. package/lib/features/canvas/videoEditor/tools/catalog.js +576 -0
  151. package/lib/features/canvas/videoEditor/tools/catalog.js.map +1 -0
  152. package/lib/features/canvas/videoEditor/videoProjectsStore.js +27 -3
  153. package/lib/features/canvas/videoEditor/videoProjectsStore.js.map +1 -1
  154. package/lib/features/webbuilder/WebBuilderExperience.js +29 -1
  155. package/lib/features/webbuilder/WebBuilderExperience.js.map +1 -1
  156. package/lib/features/webbuilder/buildFragments.js +8 -4
  157. package/lib/features/webbuilder/buildFragments.js.map +1 -1
  158. package/lib/features/webbuilder/codezenHandoff.js +108 -0
  159. package/lib/features/webbuilder/codezenHandoff.js.map +1 -0
  160. package/lib/features/webbuilder/workflow.js.map +1 -1
  161. package/lib/hooks/useChatApi.js +1 -2
  162. package/lib/hooks/useChatApi.js.map +1 -1
  163. package/lib/screens/CanvasBoard/index.js +12 -1
  164. package/lib/screens/CanvasBoard/index.js.map +1 -1
  165. package/lib/screens/Home/HomeScreen.js.map +1 -1
  166. package/lib/screens/Home/components/HomeSuggestions.js +3 -3
  167. package/lib/screens/Home/components/HomeSuggestions.js.map +1 -1
  168. package/lib/screens/WebBuilder/index.js +4 -2
  169. package/lib/screens/WebBuilder/index.js.map +1 -1
  170. package/lib/screens/WebBuilderNative/index.js +29 -2
  171. package/lib/screens/WebBuilderNative/index.js.map +1 -1
  172. package/lib/screens/WebBuilderNative/useWebBuilderHost.js +30 -6
  173. package/lib/screens/WebBuilderNative/useWebBuilderHost.js.map +1 -1
  174. package/package.json +3 -3
  175. /package/lib/assets/apps/{paper2poster.webp → poster.webp} +0 -0
@@ -15,7 +15,7 @@ const APP_ART = {
15
15
  "kpi-motivation": require("../../assets/apps/kpi-motivation.webp"),
16
16
  mailcampaign: require("../../assets/apps/mailcampaign.webp"),
17
17
  notebook: require("../../assets/apps/notebook.webp"),
18
- paper2poster: require("../../assets/apps/paper2poster.webp"),
18
+ poster: require("../../assets/apps/poster.webp"),
19
19
  resume: require("../../assets/apps/resume.webp"),
20
20
  salesiq: require("../../assets/apps/salesiq.webp"),
21
21
  shop: require("../../assets/apps/shop.webp"),
@@ -1 +1 @@
1
- {"version":3,"file":"appArt.js","sources":["../../../src/features/apps/appArt.ts"],"sourcesContent":["/**\n * Bundled tile artwork for the Apps launcher, keyed by catalog `key`.\n *\n * Static `require` calls are mandatory: Metro resolves assets at build time,\n * so a computed path never bundles. Images are 480px square WebP (~25 KB\n * each); a key missing here simply falls back to the glyph poster.\n * Native twins (canvas-native, characters-native, shopping-native,\n * travel-native, job-search-native, resume-native) share their web sibling's artwork.\n */\nimport type { ImageSourcePropType } from 'react-native';\n\n/* eslint-disable global-require, @typescript-eslint/no-var-requires */\nexport const APP_ART: Partial<Record<string, ImageSourcePropType>> = {\n billing: require('../../assets/apps/billing.webp'),\n canvas: require('../../assets/apps/canvas.webp'),\n 'cards-wallet': require('../../assets/apps/cards-wallet.webp'),\n character: require('../../assets/apps/character.webp'),\n 'chat-native': require('../../assets/apps/chat-native.webp'),\n codezen: require('../../assets/apps/codezen.webp'),\n computer: require('../../assets/apps/computer.webp'),\n crm: require('../../assets/apps/crm.webp'),\n design: require('../../assets/apps/design.webp'),\n expenses: require('../../assets/apps/expenses.webp'),\n inbox: require('../../assets/apps/inbox.webp'),\n 'issue-ticket': require('../../assets/apps/issue-ticket.webp'),\n 'job-search': require('../../assets/apps/job-search.webp'),\n 'kpi-motivation': require('../../assets/apps/kpi-motivation.webp'),\n mailcampaign: require('../../assets/apps/mailcampaign.webp'),\n notebook: require('../../assets/apps/notebook.webp'),\n paper2poster: require('../../assets/apps/paper2poster.webp'),\n resume: require('../../assets/apps/resume.webp'),\n salesiq: require('../../assets/apps/salesiq.webp'),\n shop: require('../../assets/apps/shop.webp'),\n smscampaign: require('../../assets/apps/smscampaign.webp'),\n 'social-events': require('../../assets/apps/social-events.webp'),\n travel: require('../../assets/apps/travel.webp'),\n webbuilder: require('../../assets/apps/webbuilder.webp'),\n workflow: require('../../assets/apps/workflow.webp'),\n 'canvas-native': require('../../assets/apps/canvas.webp'),\n 'characters-native': require('../../assets/apps/character.webp'),\n 'shopping-native': require('../../assets/apps/shop.webp'),\n 'travel-native': require('../../assets/apps/travel.webp'),\n 'job-search-native': require('../../assets/apps/job-search.webp'),\n 'resume-native': require('../../assets/apps/resume.webp'),\n 'inbox-native': require('../../assets/apps/inbox.webp'),\n 'study-native': require('../../assets/apps/notebook.webp'),\n 'expenses-native': require('../../assets/apps/expenses.webp'),\n 'webbuilder-native': require('../../assets/apps/webbuilder.webp'),\n};\n"],"names":[],"mappings":"AAYO,MAAM,OAAwD,GAAA;AAAA,EACnE,OAAA,EAAS,QAAQ,gCAAgC,CAAA;AAAA,EACjD,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,cAAA,EAAgB,QAAQ,qCAAqC,CAAA;AAAA,EAC7D,SAAA,EAAW,QAAQ,kCAAkC,CAAA;AAAA,EACrD,aAAA,EAAe,QAAQ,oCAAoC,CAAA;AAAA,EAC3D,OAAA,EAAS,QAAQ,gCAAgC,CAAA;AAAA,EACjD,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,GAAA,EAAK,QAAQ,4BAA4B,CAAA;AAAA,EACzC,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,KAAA,EAAO,QAAQ,8BAA8B,CAAA;AAAA,EAC7C,cAAA,EAAgB,QAAQ,qCAAqC,CAAA;AAAA,EAC7D,YAAA,EAAc,QAAQ,mCAAmC,CAAA;AAAA,EACzD,gBAAA,EAAkB,QAAQ,uCAAuC,CAAA;AAAA,EACjE,YAAA,EAAc,QAAQ,qCAAqC,CAAA;AAAA,EAC3D,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,YAAA,EAAc,QAAQ,qCAAqC,CAAA;AAAA,EAC3D,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,OAAA,EAAS,QAAQ,gCAAgC,CAAA;AAAA,EACjD,IAAA,EAAM,QAAQ,6BAA6B,CAAA;AAAA,EAC3C,WAAA,EAAa,QAAQ,oCAAoC,CAAA;AAAA,EACzD,eAAA,EAAiB,QAAQ,sCAAsC,CAAA;AAAA,EAC/D,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,UAAA,EAAY,QAAQ,mCAAmC,CAAA;AAAA,EACvD,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,eAAA,EAAiB,QAAQ,+BAA+B,CAAA;AAAA,EACxD,mBAAA,EAAqB,QAAQ,kCAAkC,CAAA;AAAA,EAC/D,iBAAA,EAAmB,QAAQ,6BAA6B,CAAA;AAAA,EACxD,eAAA,EAAiB,QAAQ,+BAA+B,CAAA;AAAA,EACxD,mBAAA,EAAqB,QAAQ,mCAAmC,CAAA;AAAA,EAChE,eAAA,EAAiB,QAAQ,+BAA+B,CAAA;AAAA,EACxD,cAAA,EAAgB,QAAQ,8BAA8B,CAAA;AAAA,EACtD,cAAA,EAAgB,QAAQ,iCAAiC,CAAA;AAAA,EACzD,iBAAA,EAAmB,QAAQ,iCAAiC,CAAA;AAAA,EAC5D,mBAAA,EAAqB,QAAQ,mCAAmC;AAClE"}
1
+ {"version":3,"file":"appArt.js","sources":["../../../src/features/apps/appArt.ts"],"sourcesContent":["/**\n * Bundled tile artwork for the Apps launcher, keyed by catalog `key`.\n *\n * Static `require` calls are mandatory: Metro resolves assets at build time,\n * so a computed path never bundles. Images are 480px square WebP (~25 KB\n * each); a key missing here simply falls back to the glyph poster.\n * Native twins (canvas-native, characters-native, shopping-native,\n * travel-native, job-search-native, resume-native) share their web sibling's artwork.\n */\nimport type { ImageSourcePropType } from 'react-native';\n\n/* eslint-disable global-require, @typescript-eslint/no-var-requires */\nexport const APP_ART: Partial<Record<string, ImageSourcePropType>> = {\n billing: require('../../assets/apps/billing.webp'),\n canvas: require('../../assets/apps/canvas.webp'),\n 'cards-wallet': require('../../assets/apps/cards-wallet.webp'),\n character: require('../../assets/apps/character.webp'),\n 'chat-native': require('../../assets/apps/chat-native.webp'),\n codezen: require('../../assets/apps/codezen.webp'),\n computer: require('../../assets/apps/computer.webp'),\n crm: require('../../assets/apps/crm.webp'),\n design: require('../../assets/apps/design.webp'),\n expenses: require('../../assets/apps/expenses.webp'),\n inbox: require('../../assets/apps/inbox.webp'),\n 'issue-ticket': require('../../assets/apps/issue-ticket.webp'),\n 'job-search': require('../../assets/apps/job-search.webp'),\n 'kpi-motivation': require('../../assets/apps/kpi-motivation.webp'),\n mailcampaign: require('../../assets/apps/mailcampaign.webp'),\n notebook: require('../../assets/apps/notebook.webp'),\n poster: require('../../assets/apps/poster.webp'),\n resume: require('../../assets/apps/resume.webp'),\n salesiq: require('../../assets/apps/salesiq.webp'),\n shop: require('../../assets/apps/shop.webp'),\n smscampaign: require('../../assets/apps/smscampaign.webp'),\n 'social-events': require('../../assets/apps/social-events.webp'),\n travel: require('../../assets/apps/travel.webp'),\n webbuilder: require('../../assets/apps/webbuilder.webp'),\n workflow: require('../../assets/apps/workflow.webp'),\n 'canvas-native': require('../../assets/apps/canvas.webp'),\n 'characters-native': require('../../assets/apps/character.webp'),\n 'shopping-native': require('../../assets/apps/shop.webp'),\n 'travel-native': require('../../assets/apps/travel.webp'),\n 'job-search-native': require('../../assets/apps/job-search.webp'),\n 'resume-native': require('../../assets/apps/resume.webp'),\n 'inbox-native': require('../../assets/apps/inbox.webp'),\n 'study-native': require('../../assets/apps/notebook.webp'),\n 'expenses-native': require('../../assets/apps/expenses.webp'),\n 'webbuilder-native': require('../../assets/apps/webbuilder.webp'),\n};\n"],"names":[],"mappings":"AAYO,MAAM,OAAwD,GAAA;AAAA,EACnE,OAAA,EAAS,QAAQ,gCAAgC,CAAA;AAAA,EACjD,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,cAAA,EAAgB,QAAQ,qCAAqC,CAAA;AAAA,EAC7D,SAAA,EAAW,QAAQ,kCAAkC,CAAA;AAAA,EACrD,aAAA,EAAe,QAAQ,oCAAoC,CAAA;AAAA,EAC3D,OAAA,EAAS,QAAQ,gCAAgC,CAAA;AAAA,EACjD,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,GAAA,EAAK,QAAQ,4BAA4B,CAAA;AAAA,EACzC,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,KAAA,EAAO,QAAQ,8BAA8B,CAAA;AAAA,EAC7C,cAAA,EAAgB,QAAQ,qCAAqC,CAAA;AAAA,EAC7D,YAAA,EAAc,QAAQ,mCAAmC,CAAA;AAAA,EACzD,gBAAA,EAAkB,QAAQ,uCAAuC,CAAA;AAAA,EACjE,YAAA,EAAc,QAAQ,qCAAqC,CAAA;AAAA,EAC3D,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,OAAA,EAAS,QAAQ,gCAAgC,CAAA;AAAA,EACjD,IAAA,EAAM,QAAQ,6BAA6B,CAAA;AAAA,EAC3C,WAAA,EAAa,QAAQ,oCAAoC,CAAA;AAAA,EACzD,eAAA,EAAiB,QAAQ,sCAAsC,CAAA;AAAA,EAC/D,MAAA,EAAQ,QAAQ,+BAA+B,CAAA;AAAA,EAC/C,UAAA,EAAY,QAAQ,mCAAmC,CAAA;AAAA,EACvD,QAAA,EAAU,QAAQ,iCAAiC,CAAA;AAAA,EACnD,eAAA,EAAiB,QAAQ,+BAA+B,CAAA;AAAA,EACxD,mBAAA,EAAqB,QAAQ,kCAAkC,CAAA;AAAA,EAC/D,iBAAA,EAAmB,QAAQ,6BAA6B,CAAA;AAAA,EACxD,eAAA,EAAiB,QAAQ,+BAA+B,CAAA;AAAA,EACxD,mBAAA,EAAqB,QAAQ,mCAAmC,CAAA;AAAA,EAChE,eAAA,EAAiB,QAAQ,+BAA+B,CAAA;AAAA,EACxD,cAAA,EAAgB,QAAQ,8BAA8B,CAAA;AAAA,EACtD,cAAA,EAAgB,QAAQ,iCAAiC,CAAA;AAAA,EACzD,iBAAA,EAAmB,QAAQ,iCAAiC,CAAA;AAAA,EAC5D,mBAAA,EAAqB,QAAQ,mCAAmC;AAClE"}
@@ -52,15 +52,6 @@ const MOBILE_APP_CATALOG = [
52
52
  // build and edit with the agent, live preview, versions, publish.
53
53
  nativeRoute: "webbuilder-native"
54
54
  },
55
- {
56
- key: "paper2poster",
57
- label: "Paper 2 Poster",
58
- icon: "presentation",
59
- group: "Create",
60
- prompt: "Turn this research paper into a conference poster I can edit.",
61
- nativeRoute: "webbuilder",
62
- surfaceSlug: "paper2poster"
63
- },
64
55
  {
65
56
  key: "codezen",
66
57
  label: "Codezen",
@@ -91,8 +82,8 @@ const MOBILE_APP_CATALOG = [
91
82
  nativeRoute: "characters-native",
92
83
  surfaceSlug: "character"
93
84
  },
94
- // Word, Excel, PowerPoint and PDF files, pictures and interface designs, each in its own
95
- // browser editor (yantra-office).
85
+ // Word, Excel, PowerPoint and PDF files, pictures, interface designs and research posters,
86
+ // each in its own browser editor (yantra-office).
96
87
  {
97
88
  key: "word",
98
89
  label: "Documents",
@@ -149,6 +140,19 @@ const MOBILE_APP_CATALOG = [
149
140
  nativeRoute: "webbuilder",
150
141
  surfaceSlug: "figdesign"
151
142
  },
143
+ {
144
+ key: "poster",
145
+ label: "Posters",
146
+ // A printed sheet with a headline over its text, as on the web launcher, not
147
+ // Presentations' easel: a poster is one big page, not a deck.
148
+ icon: "post-outline",
149
+ group: "Office",
150
+ prompt: "Turn this research paper into a 48 x 36 inch conference poster I can edit and print.",
151
+ nativeRoute: "webbuilder",
152
+ surfaceSlug: "poster",
153
+ // Posters replaced Paper 2 Poster: a tile pinned under the old key stays pinned.
154
+ supersedes: "paper2poster"
155
+ },
152
156
  {
153
157
  key: "chat-native",
154
158
  label: "Chats",
@@ -1 +1 @@
1
- {"version":3,"file":"mobileAppCatalog.js","sources":["../../../src/features/apps/mobileAppCatalog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport type { MaterialCommunityIcons } from '@expo/vector-icons';\n\ntype IconName = ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type AppGroupId = 'Create' | 'Office' | 'Automate' | 'Sell' | 'Money' | 'Team' | 'More';\n\nexport type MobileAppItem = {\n key: string;\n label: string;\n icon: IconName;\n group: AppGroupId;\n /** Prompt sent as the first chat turn when the app has no native screen. */\n prompt: string;\n /**\n * Which surface host opens this app, if it has one. `webbuilder` is the\n * historical name of the shared WebView surface shell (`screens/WebBuilder`),\n * which is not web-builder-specific: it takes a `url` route param, mints the\n * system token, injects the bridge + cdecli token, stamps `embed=mobile` and\n * owns the timeout/retry UI. Anything with a deployed surface SPA can use it.\n */\n nativeRoute?:\n | 'webbuilder'\n | 'canvas-native'\n | 'characters-native'\n | 'chat-native'\n | 'billing-native'\n | 'shopping-native'\n | 'travel-native'\n | 'job-search-native'\n | 'resume-native'\n | 'inbox-native'\n | 'study-native'\n | 'local-services-native'\n | 'movies-native'\n | 'expenses-native'\n | 'webbuilder-native';\n /**\n * Deployed surface SPA for this app, as the `<slug>-surface` name. Resolved\n * against SURFACE_URL_TEMPLATE so one env var covers every surface and stays\n * per-environment, instead of 20+ near-identical URLs in eas.json.\n *\n * The slug is the SURFACE's name, which is not always the tile key\n * (issue-ticket -> issues, shop -> shopping, notebook -> notebooklm).\n */\n surfaceSlug?: string;\n /**\n * Explicit env override, for the surfaces people actually run locally\n * (design 5174, canvas 5175, webbuilder). Wins over `surfaceSlug`.\n */\n surfaceUrlKey?: 'WEB_BUILDER_URL' | 'CANVAS_SURFACE_URL' | 'DESIGN_SURFACE_URL';\n /**\n * Key of the web tile this native tile replaces in every launcher list.\n * The web entry stays in the catalog (deep links, tests, the WebView\n * lane) but users see one tile per app, the native one, under the\n * shared name.\n */\n supersedes?: string;\n /**\n * Account chrome, not a product app. Stays in the catalog so drawer /\n * deep-link routing still knows the native host, but never appears as\n * a tile in Apps or the Apps menu.\n */\n hideInLauncher?: boolean;\n};\n\n/**\n * Mobile Apps launcher. Labels, groups, and prompts stay in lockstep with the\n * browser ChatTopBar Apps menu (`packages-modules/account/browser`).\n */\nexport const MOBILE_APP_CATALOG: readonly MobileAppItem[] = [\n {\n key: 'design',\n label: 'Design',\n icon: 'palette-outline',\n group: 'Create',\n prompt: 'Design a 10-slide pitch deck for a coffee subscription startup',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'DESIGN_SURFACE_URL',\n surfaceSlug: 'design',\n },\n {\n key: 'canvas',\n label: 'Canvas',\n icon: 'view-grid-outline',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'CANVAS_SURFACE_URL',\n surfaceSlug: 'canvas',\n },\n {\n key: 'canvas-native',\n label: 'Canvas',\n supersedes: 'canvas',\n icon: 'vector-square',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n // Renders through Module Federation: the viewer downloads from the\n // canvas-surface origin on open. First native surface; the classic\n // Canvas tile keeps the full web editor in the WebView host.\n nativeRoute: 'canvas-native',\n },\n {\n key: 'webbuilder',\n label: 'Web Builder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'WEB_BUILDER_URL',\n surfaceSlug: 'webbuilder',\n },\n {\n key: 'webbuilder-native',\n label: 'Web Builder',\n supersedes: 'webbuilder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n // Native web builder over the same projects as the web surface: your sites,\n // build and edit with the agent, live preview, versions, publish.\n nativeRoute: 'webbuilder-native',\n },\n {\n key: 'paper2poster',\n label: 'Paper 2 Poster',\n icon: 'presentation',\n group: 'Create',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'paper2poster',\n },\n {\n key: 'codezen',\n label: 'Codezen',\n icon: 'code-braces',\n group: 'Create',\n prompt: 'Clone my repository and fix the failing test',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'codezen',\n },\n {\n key: 'character',\n label: 'Characters',\n icon: 'drama-masks',\n group: 'Create',\n prompt: 'Create a stoic philosophy mentor character I can chat with',\n // Native federated experience (gallery -> detail -> chat); the web\n // surface remains reachable through the surface lane if ever needed.\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'characters-native',\n label: 'Characters',\n supersedes: 'character',\n icon: 'account-star',\n group: 'Create',\n prompt: 'Show me characters I can chat with.',\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n // Word, Excel, PowerPoint and PDF files, pictures and interface designs, each in its own\n // browser editor (yantra-office).\n {\n key: 'word',\n label: 'Documents',\n icon: 'file-document-outline',\n group: 'Office',\n prompt: 'Write a one-page project proposal as a Word document',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'word',\n },\n {\n key: 'excel',\n label: 'Spreadsheets',\n icon: 'file-table-outline',\n group: 'Office',\n prompt: 'Make a monthly budget spreadsheet with totals and a chart',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'excel',\n },\n {\n key: 'presentation',\n label: 'Presentations',\n icon: 'presentation',\n group: 'Office',\n prompt: 'Turn my notes into a six-slide project update deck',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'presentation',\n },\n {\n key: 'pdf',\n label: 'PDFs',\n icon: 'file-pdf-box',\n group: 'Office',\n prompt: 'Make a one-page PDF checklist for moving house',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'pdf',\n },\n {\n key: 'photo',\n label: 'Photos',\n icon: 'image-edit-outline',\n group: 'Office',\n prompt: 'Make an Instagram post from a template with our spring sale headline',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'photo',\n },\n {\n key: 'figdesign',\n label: 'FigDesign',\n // The pen tool, not Design's palette or Canvas's vector-square: Design is AI web-design\n // boards and Canvas is media, this is the interface design editor.\n icon: 'fountain-pen-tip',\n group: 'Office',\n prompt: 'Start a mobile app design for my bakery in our brand green, with Light and Dark modes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'figdesign',\n },\n {\n key: 'chat-native',\n label: 'Chats',\n icon: 'message-text-outline',\n group: 'Team',\n prompt: 'Show me my conversations.',\n // Person-to-person messaging, federated like canvas: the whole UI\n // downloads from the chat-native surface on open. Not the AI chat -\n // that is the Home tab.\n nativeRoute: 'chat-native',\n },\n {\n key: 'workflow',\n label: 'Workflow',\n icon: 'sitemap',\n group: 'Automate',\n prompt: 'Build a workflow that runs every morning and sends me a summary of what changed.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'workflow',\n },\n {\n key: 'computer',\n label: 'Computer',\n icon: 'monitor',\n group: 'Automate',\n prompt: 'Open a browser and compare the top 5 CRM tools with screenshots',\n },\n {\n key: 'crm',\n label: 'CRM',\n icon: 'account-group-outline',\n group: 'Sell',\n prompt: 'Look at my pipeline and tell me which deals are going cold and what I should send them.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'crm',\n },\n {\n key: 'salesiq',\n label: 'SalesIQ',\n icon: 'radar',\n group: 'Sell',\n prompt: 'Show me who is on my website right now',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'salesiq',\n },\n {\n key: 'inbox',\n label: 'Inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'inbox',\n },\n {\n key: 'inbox-native',\n label: 'Inbox',\n supersedes: 'inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n // Native mail client over the same yantra-mailer store as the web Inbox.\n nativeRoute: 'inbox-native',\n },\n {\n key: 'mailcampaign',\n label: 'Mail Campaigns',\n icon: 'bullhorn-outline',\n group: 'Sell',\n prompt: 'Draft an email campaign announcing what we shipped this month.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'mailcampaign',\n },\n {\n key: 'smscampaign',\n label: 'SMS Campaigns',\n icon: 'message-text-outline',\n group: 'Sell',\n prompt: \"Text my customers a short reminder about this week's offer.\",\n nativeRoute: 'webbuilder',\n surfaceSlug: 'smscampaign',\n },\n {\n key: 'social-post',\n label: 'Social Posts',\n icon: 'send-outline',\n group: 'Sell',\n prompt: 'Draft a launch post for X and LinkedIn and schedule it for Tuesday morning.',\n nativeRoute: 'webbuilder',\n // The deployed surface is `posts-surface`, not `social-post-surface`.\n surfaceSlug: 'posts',\n },\n {\n key: 'expenses',\n label: 'Expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'expenses',\n },\n {\n key: 'expenses-native',\n label: 'Expenses',\n supersedes: 'expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n // Native expenses over the same expenses subgraph as the web app: scan receipts,\n // approvals, budgets, recurring payments, accounts.\n nativeRoute: 'expenses-native',\n },\n {\n key: 'cards-wallet',\n label: 'Cards & Wallet',\n icon: 'credit-card-outline',\n group: 'Money',\n prompt: 'Issue a $200 virtual card for monthly ad spend',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'cards-wallet',\n },\n {\n key: 'billing',\n label: 'Billing',\n icon: 'currency-usd',\n group: 'Money',\n prompt: 'Create an invoice for a $2,400 consulting project',\n nativeRoute: 'billing-native',\n surfaceSlug: 'billing',\n // Plan / subscription for this account — already in the drawer.\n hideInLauncher: true,\n },\n {\n key: 'kpi-motivation',\n label: 'KPI Motivation',\n icon: 'trophy-outline',\n group: 'Team',\n prompt: 'Set up a weekly sales KPI scoreboard for my team',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'kpi-motivation',\n },\n {\n key: 'issue-ticket',\n label: 'Issue Ticket',\n icon: 'bug-outline',\n group: 'Team',\n prompt: 'Create a bug board and triage my open issues',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'issues',\n },\n {\n key: 'notebook',\n label: 'Study',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'notebooklm',\n },\n {\n key: 'study-native',\n label: 'Study',\n supersedes: 'notebook',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n // Native study notebooks over the same yantra-notebook store as the web Study.\n nativeRoute: 'study-native',\n },\n {\n key: 'resume',\n label: 'Resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'resume',\n },\n {\n key: 'resume-native',\n label: 'Resume',\n supersedes: 'resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'resume-native',\n },\n {\n key: 'job-search',\n label: 'Job Search',\n icon: 'briefcase-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'job-search',\n },\n {\n key: 'job-search-native',\n label: 'Job Search',\n supersedes: 'job-search',\n icon: 'briefcase-search-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'job-search-native',\n },\n {\n key: 'shop',\n label: 'Shop',\n icon: 'cart-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'shopping',\n },\n {\n key: 'shopping-native',\n label: 'Shop',\n supersedes: 'shop',\n icon: 'storefront-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n // Federated storefront: search + cart download from shopping_native/Shop.\n // The classic Shop tile keeps the web surface in the WebView host.\n nativeRoute: 'shopping-native',\n },\n {\n key: 'travel-native',\n label: 'Travel',\n supersedes: 'travel',\n icon: 'airplane-takeoff',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'travel-native',\n },\n {\n key: 'travel',\n label: 'Travel',\n icon: 'airplane',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'travel',\n },\n {\n key: 'social-events',\n label: 'yantra.live',\n icon: 'ticket-outline',\n group: 'More',\n prompt: 'What concerts are happening nearby this weekend?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'social-events',\n },\n {\n key: 'movies',\n label: 'Movies',\n icon: 'popcorn',\n group: 'More',\n prompt: 'What movies are playing near me tonight?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'movies',\n },\n {\n key: 'movies-native',\n label: 'Movies',\n supersedes: 'movies',\n icon: 'popcorn',\n group: 'More',\n prompt: 'What movies are playing near me tonight?',\n // Native cinema app over the yantra-movies connector: discover, trailers, showtimes, watchlist.\n nativeRoute: 'movies-native',\n },\n {\n key: 'local-services',\n label: 'Local Services',\n icon: 'wrench',\n group: 'More',\n prompt: 'Find an electrician near me',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'local-services',\n },\n {\n key: 'local-services-native',\n label: 'Local Services',\n supersedes: 'local-services',\n icon: 'wrench',\n group: 'More',\n prompt: 'Find an electrician near me',\n // Native search, details and saved pros over the same yantra-local-services\n // connector as the web Local Services surface.\n nativeRoute: 'local-services-native',\n },\n {\n key: 'fitness',\n label: 'Fitness',\n icon: 'dumbbell',\n group: 'More',\n prompt: 'Build me a workout plan for this week',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'fitness',\n },\n];\n\nexport const APP_GROUP_ORDER: readonly AppGroupId[] = ['Create', 'Office', 'Automate', 'Sell', 'Money', 'Team', 'More'];\n\nexport type AppsTab = 'all' | 'favorites';\n\n/**\n * Poster colors per group - the tile artwork. Deliberately the same in light\n * and dark themes: artwork is content, the card chrome is what adapts.\n */\nexport const APP_GROUP_ART: Record<AppGroupId, { base: string; glow: string }> = {\n Create: { base: '#4f46e5', glow: '#c4b5fd' },\n Office: { base: '#334155', glow: '#cbd5e1' },\n Automate: { base: '#0f766e', glow: '#99f6e4' },\n Sell: { base: '#c2410c', glow: '#fed7aa' },\n Money: { base: '#15803d', glow: '#bbf7d0' },\n Team: { base: '#0369a1', glow: '#bae6fd' },\n More: { base: '#be185d', glow: '#fbcfe8' },\n};\n\nexport function matchesAppQuery(label: string, query: string): boolean {\n const q = query.toLowerCase().replace(/[^a-z0-9]/g, '');\n if (!q) return true;\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .includes(q);\n}\n\n/**\n * Favorites keyed by a web tile that a native tile now replaces, carried over to\n * the native tile, so pinning \"Inbox\" before it went native still pins it after.\n */\nexport function carryOverSupersededFavorites(\n favorites: ReadonlySet<string>,\n items: readonly MobileAppItem[] = MOBILE_APP_CATALOG,\n): Set<string> {\n const replacement = new Map<string, string>();\n for (const item of items) if (item.supersedes) replacement.set(item.supersedes, item.key);\n const out = new Set<string>();\n for (const key of favorites) out.add(replacement.get(key) ?? key);\n return out;\n}\n\n/** One tile per app: a web tile disappears when its native replacement is in the list. */\nexport function visibleMobileApps(items: readonly MobileAppItem[]): MobileAppItem[] {\n const replaced = new Set(items.map((item) => item.supersedes).filter(Boolean));\n return items.filter((item) => !item.hideInLauncher && !replaced.has(item.key));\n}\n\nexport function groupMobileApps(items: readonly MobileAppItem[], query: string) {\n const hits = visibleMobileApps(items).filter((item) => matchesAppQuery(item.label, query));\n return APP_GROUP_ORDER.map((label) => ({\n label,\n items: hits.filter((item) => item.group === label),\n })).filter((group) => group.items.length > 0);\n}\n\n/**\n * One flat grid (Manus/game-launcher style) instead of grouped sections: rows\n * stay dense and the group reads from each card's caption. Catalog order is\n * kept inside a group; groups follow APP_GROUP_ORDER.\n */\nexport function filterMobileApps(\n items: readonly MobileAppItem[],\n query: string,\n tab: AppsTab,\n favorites: ReadonlySet<string>,\n): MobileAppItem[] {\n const rank = new Map(APP_GROUP_ORDER.map((group, index) => [group, index]));\n return visibleMobileApps(items)\n .filter((item) => matchesAppQuery(item.label, query))\n .filter((item) => tab !== 'favorites' || favorites.has(item.key))\n .sort((a, b) => (rank.get(a.group) ?? APP_GROUP_ORDER.length) - (rank.get(b.group) ?? APP_GROUP_ORDER.length));\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mobileAppCatalog.js","sources":["../../../src/features/apps/mobileAppCatalog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport type { MaterialCommunityIcons } from '@expo/vector-icons';\n\ntype IconName = ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type AppGroupId = 'Create' | 'Office' | 'Automate' | 'Sell' | 'Money' | 'Team' | 'More';\n\nexport type MobileAppItem = {\n key: string;\n label: string;\n icon: IconName;\n group: AppGroupId;\n /** Prompt sent as the first chat turn when the app has no native screen. */\n prompt: string;\n /**\n * Which surface host opens this app, if it has one. `webbuilder` is the\n * historical name of the shared WebView surface shell (`screens/WebBuilder`),\n * which is not web-builder-specific: it takes a `url` route param, mints the\n * system token, injects the bridge + cdecli token, stamps `embed=mobile` and\n * owns the timeout/retry UI. Anything with a deployed surface SPA can use it.\n */\n nativeRoute?:\n | 'webbuilder'\n | 'canvas-native'\n | 'characters-native'\n | 'chat-native'\n | 'billing-native'\n | 'shopping-native'\n | 'travel-native'\n | 'job-search-native'\n | 'resume-native'\n | 'inbox-native'\n | 'study-native'\n | 'local-services-native'\n | 'movies-native'\n | 'expenses-native'\n | 'webbuilder-native';\n /**\n * Deployed surface SPA for this app, as the `<slug>-surface` name. Resolved\n * against SURFACE_URL_TEMPLATE so one env var covers every surface and stays\n * per-environment, instead of 20+ near-identical URLs in eas.json.\n *\n * The slug is the SURFACE's name, which is not always the tile key\n * (issue-ticket -> issues, shop -> shopping, notebook -> notebooklm).\n */\n surfaceSlug?: string;\n /**\n * Explicit env override, for the surfaces people actually run locally\n * (design 5174, canvas 5175, webbuilder). Wins over `surfaceSlug`.\n */\n surfaceUrlKey?: 'WEB_BUILDER_URL' | 'CANVAS_SURFACE_URL' | 'DESIGN_SURFACE_URL';\n /**\n * Key of the web tile this native tile replaces in every launcher list.\n * The web entry stays in the catalog (deep links, tests, the WebView\n * lane) but users see one tile per app, the native one, under the\n * shared name. Also the key of a retired tile this one took over from\n * (Posters for Paper 2 Poster). Either way a favorite pinned under the\n * old key carries over to this tile.\n */\n supersedes?: string;\n /**\n * Account chrome, not a product app. Stays in the catalog so drawer /\n * deep-link routing still knows the native host, but never appears as\n * a tile in Apps or the Apps menu.\n */\n hideInLauncher?: boolean;\n};\n\n/**\n * Mobile Apps launcher. Labels, groups, and prompts stay in lockstep with the\n * browser ChatTopBar Apps menu (`packages-modules/account/browser`).\n */\nexport const MOBILE_APP_CATALOG: readonly MobileAppItem[] = [\n {\n key: 'design',\n label: 'Design',\n icon: 'palette-outline',\n group: 'Create',\n prompt: 'Design a 10-slide pitch deck for a coffee subscription startup',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'DESIGN_SURFACE_URL',\n surfaceSlug: 'design',\n },\n {\n key: 'canvas',\n label: 'Canvas',\n icon: 'view-grid-outline',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'CANVAS_SURFACE_URL',\n surfaceSlug: 'canvas',\n },\n {\n key: 'canvas-native',\n label: 'Canvas',\n supersedes: 'canvas',\n icon: 'vector-square',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n // Renders through Module Federation: the viewer downloads from the\n // canvas-surface origin on open. First native surface; the classic\n // Canvas tile keeps the full web editor in the WebView host.\n nativeRoute: 'canvas-native',\n },\n {\n key: 'webbuilder',\n label: 'Web Builder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'WEB_BUILDER_URL',\n surfaceSlug: 'webbuilder',\n },\n {\n key: 'webbuilder-native',\n label: 'Web Builder',\n supersedes: 'webbuilder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n // Native web builder over the same projects as the web surface: your sites,\n // build and edit with the agent, live preview, versions, publish.\n nativeRoute: 'webbuilder-native',\n },\n {\n key: 'codezen',\n label: 'Codezen',\n icon: 'code-braces',\n group: 'Create',\n prompt: 'Clone my repository and fix the failing test',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'codezen',\n },\n {\n key: 'character',\n label: 'Characters',\n icon: 'drama-masks',\n group: 'Create',\n prompt: 'Create a stoic philosophy mentor character I can chat with',\n // Native federated experience (gallery -> detail -> chat); the web\n // surface remains reachable through the surface lane if ever needed.\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'characters-native',\n label: 'Characters',\n supersedes: 'character',\n icon: 'account-star',\n group: 'Create',\n prompt: 'Show me characters I can chat with.',\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n // Word, Excel, PowerPoint and PDF files, pictures, interface designs and research posters,\n // each in its own browser editor (yantra-office).\n {\n key: 'word',\n label: 'Documents',\n icon: 'file-document-outline',\n group: 'Office',\n prompt: 'Write a one-page project proposal as a Word document',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'word',\n },\n {\n key: 'excel',\n label: 'Spreadsheets',\n icon: 'file-table-outline',\n group: 'Office',\n prompt: 'Make a monthly budget spreadsheet with totals and a chart',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'excel',\n },\n {\n key: 'presentation',\n label: 'Presentations',\n icon: 'presentation',\n group: 'Office',\n prompt: 'Turn my notes into a six-slide project update deck',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'presentation',\n },\n {\n key: 'pdf',\n label: 'PDFs',\n icon: 'file-pdf-box',\n group: 'Office',\n prompt: 'Make a one-page PDF checklist for moving house',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'pdf',\n },\n {\n key: 'photo',\n label: 'Photos',\n icon: 'image-edit-outline',\n group: 'Office',\n prompt: 'Make an Instagram post from a template with our spring sale headline',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'photo',\n },\n {\n key: 'figdesign',\n label: 'FigDesign',\n // The pen tool, not Design's palette or Canvas's vector-square: Design is AI web-design\n // boards and Canvas is media, this is the interface design editor.\n icon: 'fountain-pen-tip',\n group: 'Office',\n prompt: 'Start a mobile app design for my bakery in our brand green, with Light and Dark modes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'figdesign',\n },\n {\n key: 'poster',\n label: 'Posters',\n // A printed sheet with a headline over its text, as on the web launcher, not\n // Presentations' easel: a poster is one big page, not a deck.\n icon: 'post-outline',\n group: 'Office',\n prompt: 'Turn this research paper into a 48 x 36 inch conference poster I can edit and print.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'poster',\n // Posters replaced Paper 2 Poster: a tile pinned under the old key stays pinned.\n supersedes: 'paper2poster',\n },\n {\n key: 'chat-native',\n label: 'Chats',\n icon: 'message-text-outline',\n group: 'Team',\n prompt: 'Show me my conversations.',\n // Person-to-person messaging, federated like canvas: the whole UI\n // downloads from the chat-native surface on open. Not the AI chat -\n // that is the Home tab.\n nativeRoute: 'chat-native',\n },\n {\n key: 'workflow',\n label: 'Workflow',\n icon: 'sitemap',\n group: 'Automate',\n prompt: 'Build a workflow that runs every morning and sends me a summary of what changed.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'workflow',\n },\n {\n key: 'computer',\n label: 'Computer',\n icon: 'monitor',\n group: 'Automate',\n prompt: 'Open a browser and compare the top 5 CRM tools with screenshots',\n },\n {\n key: 'crm',\n label: 'CRM',\n icon: 'account-group-outline',\n group: 'Sell',\n prompt: 'Look at my pipeline and tell me which deals are going cold and what I should send them.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'crm',\n },\n {\n key: 'salesiq',\n label: 'SalesIQ',\n icon: 'radar',\n group: 'Sell',\n prompt: 'Show me who is on my website right now',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'salesiq',\n },\n {\n key: 'inbox',\n label: 'Inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'inbox',\n },\n {\n key: 'inbox-native',\n label: 'Inbox',\n supersedes: 'inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n // Native mail client over the same yantra-mailer store as the web Inbox.\n nativeRoute: 'inbox-native',\n },\n {\n key: 'mailcampaign',\n label: 'Mail Campaigns',\n icon: 'bullhorn-outline',\n group: 'Sell',\n prompt: 'Draft an email campaign announcing what we shipped this month.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'mailcampaign',\n },\n {\n key: 'smscampaign',\n label: 'SMS Campaigns',\n icon: 'message-text-outline',\n group: 'Sell',\n prompt: \"Text my customers a short reminder about this week's offer.\",\n nativeRoute: 'webbuilder',\n surfaceSlug: 'smscampaign',\n },\n {\n key: 'social-post',\n label: 'Social Posts',\n icon: 'send-outline',\n group: 'Sell',\n prompt: 'Draft a launch post for X and LinkedIn and schedule it for Tuesday morning.',\n nativeRoute: 'webbuilder',\n // The deployed surface is `posts-surface`, not `social-post-surface`.\n surfaceSlug: 'posts',\n },\n {\n key: 'expenses',\n label: 'Expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'expenses',\n },\n {\n key: 'expenses-native',\n label: 'Expenses',\n supersedes: 'expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n // Native expenses over the same expenses subgraph as the web app: scan receipts,\n // approvals, budgets, recurring payments, accounts.\n nativeRoute: 'expenses-native',\n },\n {\n key: 'cards-wallet',\n label: 'Cards & Wallet',\n icon: 'credit-card-outline',\n group: 'Money',\n prompt: 'Issue a $200 virtual card for monthly ad spend',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'cards-wallet',\n },\n {\n key: 'billing',\n label: 'Billing',\n icon: 'currency-usd',\n group: 'Money',\n prompt: 'Create an invoice for a $2,400 consulting project',\n nativeRoute: 'billing-native',\n surfaceSlug: 'billing',\n // Plan / subscription for this account — already in the drawer.\n hideInLauncher: true,\n },\n {\n key: 'kpi-motivation',\n label: 'KPI Motivation',\n icon: 'trophy-outline',\n group: 'Team',\n prompt: 'Set up a weekly sales KPI scoreboard for my team',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'kpi-motivation',\n },\n {\n key: 'issue-ticket',\n label: 'Issue Ticket',\n icon: 'bug-outline',\n group: 'Team',\n prompt: 'Create a bug board and triage my open issues',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'issues',\n },\n {\n key: 'notebook',\n label: 'Study',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'notebooklm',\n },\n {\n key: 'study-native',\n label: 'Study',\n supersedes: 'notebook',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n // Native study notebooks over the same yantra-notebook store as the web Study.\n nativeRoute: 'study-native',\n },\n {\n key: 'resume',\n label: 'Resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'resume',\n },\n {\n key: 'resume-native',\n label: 'Resume',\n supersedes: 'resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'resume-native',\n },\n {\n key: 'job-search',\n label: 'Job Search',\n icon: 'briefcase-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'job-search',\n },\n {\n key: 'job-search-native',\n label: 'Job Search',\n supersedes: 'job-search',\n icon: 'briefcase-search-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'job-search-native',\n },\n {\n key: 'shop',\n label: 'Shop',\n icon: 'cart-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'shopping',\n },\n {\n key: 'shopping-native',\n label: 'Shop',\n supersedes: 'shop',\n icon: 'storefront-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n // Federated storefront: search + cart download from shopping_native/Shop.\n // The classic Shop tile keeps the web surface in the WebView host.\n nativeRoute: 'shopping-native',\n },\n {\n key: 'travel-native',\n label: 'Travel',\n supersedes: 'travel',\n icon: 'airplane-takeoff',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'travel-native',\n },\n {\n key: 'travel',\n label: 'Travel',\n icon: 'airplane',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'travel',\n },\n {\n key: 'social-events',\n label: 'yantra.live',\n icon: 'ticket-outline',\n group: 'More',\n prompt: 'What concerts are happening nearby this weekend?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'social-events',\n },\n {\n key: 'movies',\n label: 'Movies',\n icon: 'popcorn',\n group: 'More',\n prompt: 'What movies are playing near me tonight?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'movies',\n },\n {\n key: 'movies-native',\n label: 'Movies',\n supersedes: 'movies',\n icon: 'popcorn',\n group: 'More',\n prompt: 'What movies are playing near me tonight?',\n // Native cinema app over the yantra-movies connector: discover, trailers, showtimes, watchlist.\n nativeRoute: 'movies-native',\n },\n {\n key: 'local-services',\n label: 'Local Services',\n icon: 'wrench',\n group: 'More',\n prompt: 'Find an electrician near me',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'local-services',\n },\n {\n key: 'local-services-native',\n label: 'Local Services',\n supersedes: 'local-services',\n icon: 'wrench',\n group: 'More',\n prompt: 'Find an electrician near me',\n // Native search, details and saved pros over the same yantra-local-services\n // connector as the web Local Services surface.\n nativeRoute: 'local-services-native',\n },\n {\n key: 'fitness',\n label: 'Fitness',\n icon: 'dumbbell',\n group: 'More',\n prompt: 'Build me a workout plan for this week',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'fitness',\n },\n];\n\nexport const APP_GROUP_ORDER: readonly AppGroupId[] = ['Create', 'Office', 'Automate', 'Sell', 'Money', 'Team', 'More'];\n\nexport type AppsTab = 'all' | 'favorites';\n\n/**\n * Poster colors per group - the tile artwork. Deliberately the same in light\n * and dark themes: artwork is content, the card chrome is what adapts.\n */\nexport const APP_GROUP_ART: Record<AppGroupId, { base: string; glow: string }> = {\n Create: { base: '#4f46e5', glow: '#c4b5fd' },\n Office: { base: '#334155', glow: '#cbd5e1' },\n Automate: { base: '#0f766e', glow: '#99f6e4' },\n Sell: { base: '#c2410c', glow: '#fed7aa' },\n Money: { base: '#15803d', glow: '#bbf7d0' },\n Team: { base: '#0369a1', glow: '#bae6fd' },\n More: { base: '#be185d', glow: '#fbcfe8' },\n};\n\nexport function matchesAppQuery(label: string, query: string): boolean {\n const q = query.toLowerCase().replace(/[^a-z0-9]/g, '');\n if (!q) return true;\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .includes(q);\n}\n\n/**\n * Favorites keyed by a web tile that a native tile now replaces, carried over to\n * the native tile, so pinning \"Inbox\" before it went native still pins it after.\n */\nexport function carryOverSupersededFavorites(\n favorites: ReadonlySet<string>,\n items: readonly MobileAppItem[] = MOBILE_APP_CATALOG,\n): Set<string> {\n const replacement = new Map<string, string>();\n for (const item of items) if (item.supersedes) replacement.set(item.supersedes, item.key);\n const out = new Set<string>();\n for (const key of favorites) out.add(replacement.get(key) ?? key);\n return out;\n}\n\n/** One tile per app: a web tile disappears when its native replacement is in the list. */\nexport function visibleMobileApps(items: readonly MobileAppItem[]): MobileAppItem[] {\n const replaced = new Set(items.map((item) => item.supersedes).filter(Boolean));\n return items.filter((item) => !item.hideInLauncher && !replaced.has(item.key));\n}\n\nexport function groupMobileApps(items: readonly MobileAppItem[], query: string) {\n const hits = visibleMobileApps(items).filter((item) => matchesAppQuery(item.label, query));\n return APP_GROUP_ORDER.map((label) => ({\n label,\n items: hits.filter((item) => item.group === label),\n })).filter((group) => group.items.length > 0);\n}\n\n/**\n * One flat grid (Manus/game-launcher style) instead of grouped sections: rows\n * stay dense and the group reads from each card's caption. Catalog order is\n * kept inside a group; groups follow APP_GROUP_ORDER.\n */\nexport function filterMobileApps(\n items: readonly MobileAppItem[],\n query: string,\n tab: AppsTab,\n favorites: ReadonlySet<string>,\n): MobileAppItem[] {\n const rank = new Map(APP_GROUP_ORDER.map((group, index) => [group, index]));\n return visibleMobileApps(items)\n .filter((item) => matchesAppQuery(item.label, query))\n .filter((item) => tab !== 'favorites' || favorites.has(item.key))\n .sort((a, b) => (rank.get(a.group) ?? APP_GROUP_ORDER.length) - (rank.get(b.group) ?? APP_GROUP_ORDER.length));\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import {jsx,jsxs}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {StyleSheet,View,Text,Pressable}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {NativeAgentChat}from'../agent-chat/NativeAgentChat.js';import {attachmentSrc,attachmentMediaKind,inferCanvasChatLane,generateCanvasChatMedia,canvasChatGenerateError}from'./canvasAgentChat.js';import {CanvasTemplatesPanel}from'./CanvasTemplatesPanel.js';import {CANVAS_SUGGESTIONS}from'./canvasChatTemplates.js';import {canvasComposerSeed,canvasUserTurnLabel,mimeForCanvasLane,canvasAssistantReply}from'./canvasChatDisplay.js';import {CanvasChatResultCard}from'./CanvasChatResultCard.js';import {unwrapProxyUrl}from'./videoEditor/remoteMediaClient.js';var __defProp = Object.defineProperty;
1
+ import {jsx,jsxs}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {StyleSheet,View,Text,Pressable}from'react-native';import {MaterialCommunityIcons}from'@expo/vector-icons';import {NativeAgentChat}from'../agent-chat/NativeAgentChat.js';import {AGENT_MODELS,readStoredAgentModel,resolveAgentModelId,writeStoredAgentModel,attachmentMediaKind,asksForVideo,inferCanvasChatLane,planAttachments,laneTakesEndFrame,unusableAttachmentsReply,attachmentSrc,generateCanvasChatMedia,canvasChatGenerateError}from'./canvasAgentChat.js';import {CanvasModelPicker}from'./CanvasModelPicker.js';import {CanvasTemplatesPanel}from'./CanvasTemplatesPanel.js';import {CANVAS_SUGGESTIONS}from'./canvasChatTemplates.js';import {canvasComposerSeed,canvasUserTurnLabel,mimeForCanvasLane,canvasAssistantReply}from'./canvasChatDisplay.js';import {CanvasChatResultCard}from'./CanvasChatResultCard.js';import {unwrapProxyUrl}from'./videoEditor/remoteMediaClient.js';var __defProp = Object.defineProperty;
2
2
  var __defProps = Object.defineProperties;
3
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -17,6 +17,13 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ const SERVER_DEFAULT_PICK = AGENT_MODELS[0].id;
21
+ const AGENT_MODEL_OPTIONS = AGENT_MODELS.map((m) => {
22
+ var _a;
23
+ return __spreadProps(__spreadValues({}, m), {
24
+ group: (_a = m.group) != null ? _a : "Automatic"
25
+ });
26
+ });
20
27
  function CanvasAgentChatPane({
21
28
  visible,
22
29
  onClose,
@@ -28,6 +35,7 @@ function CanvasAgentChatPane({
28
35
  onOpenItem,
29
36
  onUseTemplate
30
37
  }) {
38
+ var _a, _b;
31
39
  const [messages, setMessages] = useState([]);
32
40
  const [busy, setBusy] = useState(false);
33
41
  const [templatesOpen, setTemplatesOpen] = useState(false);
@@ -39,6 +47,17 @@ function CanvasAgentChatPane({
39
47
  const [contextMode, setContextMode] = useState("edit");
40
48
  const [contextCleared, setContextCleared] = useState(false);
41
49
  const pendingGenerate = useRef(null);
50
+ const [agentModel, setAgentModel] = useState(SERVER_DEFAULT_PICK);
51
+ const [modelPickerOpen, setModelPickerOpen] = useState(false);
52
+ useEffect(() => {
53
+ let live = true;
54
+ void readStoredAgentModel().then((stored) => {
55
+ if (live) setAgentModel(resolveAgentModelId(AGENT_MODELS, stored));
56
+ });
57
+ return () => {
58
+ live = false;
59
+ };
60
+ }, []);
42
61
  useEffect(() => {
43
62
  if (!visible) setTemplatesOpen(false);
44
63
  }, [visible]);
@@ -64,7 +83,7 @@ function CanvasAgentChatPane({
64
83
  }
65
84
  };
66
85
  const send = (text, files) => {
67
- var _a;
86
+ var _a2;
68
87
  const trimmed = text.trim();
69
88
  const attachments = files != null ? files : [];
70
89
  const pending = pendingGenerate.current;
@@ -83,30 +102,52 @@ function CanvasAgentChatPane({
83
102
  attachments
84
103
  } : {})]);
85
104
  const placedNames = [];
86
- for (const file of attachments) {
105
+ const placeFile = (file, kind) => {
87
106
  const src = attachmentSrc(file);
88
- const kind = attachmentMediaKind(file);
89
- if (!src || !kind) continue;
107
+ if (!src) return;
90
108
  const placed = onGenerated(src, {
91
109
  prompt: file.name || trimmed,
92
110
  aspect: "1:1",
93
111
  mode: kind,
94
112
  title: file.name
95
- });
113
+ }) || void 0;
96
114
  if (placed) rememberPreview(placed, src, file.name, kind);
97
115
  placedNames.push(file.name || kind);
98
- }
116
+ };
117
+ const stillAttached = attachments.some((f) => attachmentMediaKind(f) === "image");
118
+ const lane = generateText ? (_a2 = preferredLaneRef.current) != null ? _a2 : stillAttached && asksForVideo(generateText) ? "video" : inferCanvasChatLane(generateText) : "image";
119
+ preferredLaneRef.current = null;
120
+ const plan = planAttachments(attachments, {
121
+ endFrame: laneTakesEndFrame(lane)
122
+ });
123
+ const unusable = unusableAttachmentsReply(plan.unusable);
99
124
  if (!generateText) {
125
+ if (plan.referenceImage) placeFile(plan.referenceImage, "image");
126
+ if (plan.endImage) placeFile(plan.endImage, "image");
127
+ for (const {
128
+ attachment,
129
+ type
130
+ } of plan.place) placeFile(attachment, type);
131
+ const lines = [placedNames.length ? `Placed ${placedNames.join(", ")} on the canvas.` : null, unusable, !placedNames.length && !unusable ? "Attach an image, video or audio file, or describe what to create." : null].filter(Boolean);
100
132
  setMessages((prev) => [...prev, {
101
133
  id: `a-${Date.now()}`,
102
134
  role: "assistant",
103
- content: placedNames.length ? `Placed ${placedNames.join(", ")} on the canvas.` : "Attach an image, video or audio file, or describe what to create."
135
+ content: lines.join(" ")
104
136
  }]);
105
137
  return;
106
138
  }
107
- const lane = (_a = preferredLaneRef.current) != null ? _a : inferCanvasChatLane(generateText);
108
- preferredLaneRef.current = null;
109
- const editing = Boolean(liveContext && contextMode === "edit" && liveContext.type === "image" && onReplace);
139
+ for (const {
140
+ attachment,
141
+ type
142
+ } of plan.place) placeFile(attachment, type);
143
+ if (unusable) {
144
+ setMessages((prev) => [...prev, {
145
+ id: `a-u-${Date.now()}`,
146
+ role: "assistant",
147
+ content: unusable
148
+ }]);
149
+ }
150
+ const editing = Boolean(!plan.referenceImage && liveContext && contextMode === "edit" && liveContext.type === "image" && onReplace);
110
151
  if (!runAction) {
111
152
  setMessages((prev) => [...prev, {
112
153
  id: `a-${Date.now()}`,
@@ -116,14 +157,20 @@ function CanvasAgentChatPane({
116
157
  return;
117
158
  }
118
159
  setBusy(true);
119
- const attached = attachments.map(attachmentSrc).find(Boolean);
120
- const reference = attached || (liveContext && (contextMode === "reference" || lane === "video") ? unwrapProxyUrl(liveContext.src) : void 0);
121
- generateCanvasChatMedia({
160
+ const attached = plan.referenceImage ? attachmentSrc(plan.referenceImage) : null;
161
+ const endFrame = plan.endImage ? attachmentSrc(plan.endImage) : null;
162
+ const contextStill = (liveContext == null ? void 0 : liveContext.type) === "image" ? unwrapProxyUrl(liveContext.src) : void 0;
163
+ const reference = attached || (contextStill && (editing || contextMode === "reference" || lane === "video") ? contextStill : void 0);
164
+ generateCanvasChatMedia(__spreadProps(__spreadValues({
122
165
  runAction,
123
166
  prompt: generateText,
124
167
  lane,
125
- referenceImageUrl: lane === "video" || contextMode === "reference" ? reference : void 0
126
- }).then((url) => {
168
+ referenceImageUrl: lane === "audio" ? void 0 : reference || void 0
169
+ }, lane === "video" && endFrame ? {
170
+ referenceEndImageUrl: endFrame
171
+ } : {}), {
172
+ imageRole: attached || editing ? "source" : "reference"
173
+ })).then((url) => {
127
174
  if (editing && liveContext) {
128
175
  onReplace == null ? void 0 : onReplace(liveContext.id, url);
129
176
  setMessages((prev) => [...prev, {
@@ -148,7 +195,7 @@ function CanvasAgentChatPane({
148
195
  aspect: "16:9",
149
196
  mode: lane,
150
197
  title
151
- });
198
+ }) || void 0;
152
199
  rememberPreview(placed, url, title, lane);
153
200
  setMessages((prev) => [...prev, {
154
201
  id: `a-${Date.now()}`,
@@ -179,9 +226,18 @@ function CanvasAgentChatPane({
179
226
  return /* @__PURE__ */ jsx(NativeAgentChat, { title: "Agent", visible, onClose, messages, onSend: send, onClear: () => {
180
227
  setMessages([]);
181
228
  setPreviews([]);
182
- }, busy, placeholder: liveContext && contextMode === "edit" ? `Ask for a change to \u201C${contextTitle}\u201D\u2026` : "Describe what to create\u2026", emptyTitle: "Describe your idea and I\u2019ll create it", emptyBody: "Images, video and audio land on the canvas \u2014 or select an item and ask for changes.", suggestions: [...CANVAS_SUGGESTIONS], headerTrailing: /* @__PURE__ */ jsxs(Pressable, { onPress: () => setTemplatesOpen((v) => !v), style: [styles.templatesBtn, templatesOpen && styles.templatesBtnOn], accessibilityRole: "button", accessibilityLabel: "Browse templates", children: [
183
- /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "view-grid-outline", size: 14, color: templatesOpen ? "#c2410c" : "#64748b" }),
184
- /* @__PURE__ */ jsx(Text, { style: [styles.templatesBtnLabel, templatesOpen && styles.templatesBtnLabelOn], children: "Templates" })
229
+ }, busy, placeholder: liveContext && contextMode === "edit" ? `Ask for a change to \u201C${contextTitle}\u201D\u2026` : "Describe what to create\u2026", emptyTitle: "Describe your idea and I\u2019ll create it", emptyBody: "Images, video and audio land on the canvas \u2014 or select an item and ask for changes.", suggestions: [...CANVAS_SUGGESTIONS], paneOverlay: modelPickerOpen ? /* @__PURE__ */ jsx(CanvasModelPicker, { title: "Agent model", models: AGENT_MODEL_OPTIONS, selectedId: agentModel, onSelect: (id) => {
230
+ setAgentModel(id);
231
+ void writeStoredAgentModel(id);
232
+ }, onClose: () => setModelPickerOpen(false) }) : null, headerTrailing: /* @__PURE__ */ jsxs(View, { style: styles.headRow, children: [
233
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => setModelPickerOpen(true), style: styles.templatesBtn, accessibilityRole: "button", accessibilityLabel: "Agent model", children: [
234
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "chip", size: 14, color: "#64748b" }),
235
+ /* @__PURE__ */ jsx(Text, { style: styles.templatesBtnLabel, numberOfLines: 1, children: (_b = (_a = AGENT_MODELS.find((m) => m.id === agentModel)) == null ? void 0 : _a.title) != null ? _b : "Model" })
236
+ ] }),
237
+ /* @__PURE__ */ jsxs(Pressable, { onPress: () => setTemplatesOpen((v) => !v), style: [styles.templatesBtn, templatesOpen && styles.templatesBtnOn], accessibilityRole: "button", accessibilityLabel: "Browse templates", children: [
238
+ /* @__PURE__ */ jsx(MaterialCommunityIcons, { name: "view-grid-outline", size: 14, color: templatesOpen ? "#c2410c" : "#64748b" }),
239
+ /* @__PURE__ */ jsx(Text, { style: [styles.templatesBtnLabel, templatesOpen && styles.templatesBtnLabelOn], children: "Templates" })
240
+ ] })
185
241
  ] }), belowHeader: /* @__PURE__ */ jsx(CanvasTemplatesPanel, { open: templatesOpen, runAction, onPick: (template) => {
186
242
  preferredLaneRef.current = template.kind;
187
243
  const display = canvasComposerSeed(template);
@@ -220,6 +276,12 @@ function CanvasAgentChatPane({
220
276
  ] }), embedded: true });
221
277
  }
222
278
  const styles = StyleSheet.create({
279
+ headRow: {
280
+ flexDirection: "row",
281
+ alignItems: "center",
282
+ gap: 6,
283
+ maxWidth: 220
284
+ },
223
285
  templatesBtn: {
224
286
  flexDirection: "row",
225
287
  alignItems: "center",