@oxyhq/services 22.10.0 → 22.11.0

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 (274) hide show
  1. package/lib/commonjs/ui/components/AvatarCameraBadge.js +42 -0
  2. package/lib/commonjs/ui/components/AvatarCameraBadge.js.map +1 -0
  3. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js +41 -19
  4. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -1
  5. package/lib/commonjs/ui/components/OxyAuthChooser.js +640 -168
  6. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  7. package/lib/commonjs/ui/components/ProfileButton.js +14 -0
  8. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  9. package/lib/commonjs/ui/components/ProfileSummaryCard.js +3 -23
  10. package/lib/commonjs/ui/components/ProfileSummaryCard.js.map +1 -1
  11. package/lib/commonjs/ui/components/SurfaceScreen.js +41 -5
  12. package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -1
  13. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js +78 -26
  14. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js.map +1 -1
  15. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js +83 -23
  16. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  17. package/lib/commonjs/ui/context/OxyContext.js +73 -37
  18. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  19. package/lib/commonjs/ui/hooks/queries/queryKeys.js +18 -1
  20. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  21. package/lib/commonjs/ui/hooks/queries/useFileQueries.js +129 -0
  22. package/lib/commonjs/ui/hooks/queries/useFileQueries.js.map +1 -0
  23. package/lib/commonjs/ui/hooks/useAvatarPicker.js +36 -48
  24. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  25. package/lib/commonjs/ui/hooks/useReduceMotion.js +57 -0
  26. package/lib/commonjs/ui/hooks/useReduceMotion.js.map +1 -0
  27. package/lib/commonjs/ui/hooks/useSurfaceHeader.js +1 -1
  28. package/lib/commonjs/ui/hooks/useSurfaceHeader.js.map +1 -1
  29. package/lib/commonjs/ui/navigation/accountDialogManager.js +22 -0
  30. package/lib/commonjs/ui/navigation/accountDialogManager.js.map +1 -1
  31. package/lib/commonjs/ui/navigation/bottomSheetManager.js +5 -6
  32. package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -1
  33. package/lib/commonjs/ui/navigation/routes.js +1 -0
  34. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  35. package/lib/commonjs/ui/navigation/surfaceNavStack.js +62 -15
  36. package/lib/commonjs/ui/navigation/surfaceNavStack.js.map +1 -1
  37. package/lib/commonjs/ui/navigation/surfaceRegistry.js +38 -17
  38. package/lib/commonjs/ui/navigation/surfaceRegistry.js.map +1 -1
  39. package/lib/commonjs/ui/navigation/surfaces.js +98 -21
  40. package/lib/commonjs/ui/navigation/surfaces.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AvatarCropScreen.js +281 -279
  42. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js +301 -0
  44. package/lib/commonjs/ui/screens/ChangeAvatarScreen.js.map +1 -0
  45. package/lib/commonjs/ui/screens/FileManagementScreen.js +194 -431
  46. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +16 -48
  48. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js +63 -0
  50. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -0
  51. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +54 -41
  52. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  53. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +44 -81
  54. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  55. package/lib/commonjs/ui/stores/resetSessionScopedStores.js +8 -3
  56. package/lib/commonjs/ui/stores/resetSessionScopedStores.js.map +1 -1
  57. package/lib/commonjs/ui/utils/avatarUtils.js +11 -2
  58. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  59. package/lib/commonjs/ui/utils/fileManagement.js +0 -79
  60. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  61. package/lib/module/ui/components/AvatarCameraBadge.js +40 -0
  62. package/lib/module/ui/components/AvatarCameraBadge.js.map +1 -0
  63. package/lib/module/ui/components/OxyAccountDialogScreen.js +41 -19
  64. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -1
  65. package/lib/module/ui/components/OxyAuthChooser.js +642 -171
  66. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  67. package/lib/module/ui/components/ProfileButton.js +15 -1
  68. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  69. package/lib/module/ui/components/ProfileSummaryCard.js +2 -23
  70. package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -1
  71. package/lib/module/ui/components/SurfaceScreen.js +43 -7
  72. package/lib/module/ui/components/SurfaceScreen.js.map +1 -1
  73. package/lib/module/ui/components/oxyAuthChooserStyles.js +78 -26
  74. package/lib/module/ui/components/oxyAuthChooserStyles.js.map +1 -1
  75. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js +83 -25
  76. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  77. package/lib/module/ui/context/OxyContext.js +74 -38
  78. package/lib/module/ui/context/OxyContext.js.map +1 -1
  79. package/lib/module/ui/hooks/queries/queryKeys.js +16 -0
  80. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  81. package/lib/module/ui/hooks/queries/useFileQueries.js +120 -0
  82. package/lib/module/ui/hooks/queries/useFileQueries.js.map +1 -0
  83. package/lib/module/ui/hooks/useAvatarPicker.js +37 -49
  84. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  85. package/lib/module/ui/hooks/useReduceMotion.js +53 -0
  86. package/lib/module/ui/hooks/useReduceMotion.js.map +1 -0
  87. package/lib/module/ui/hooks/useSurfaceHeader.js +1 -1
  88. package/lib/module/ui/hooks/useSurfaceHeader.js.map +1 -1
  89. package/lib/module/ui/navigation/accountDialogManager.js +20 -0
  90. package/lib/module/ui/navigation/accountDialogManager.js.map +1 -1
  91. package/lib/module/ui/navigation/bottomSheetManager.js +6 -7
  92. package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -1
  93. package/lib/module/ui/navigation/routes.js +1 -0
  94. package/lib/module/ui/navigation/routes.js.map +1 -1
  95. package/lib/module/ui/navigation/surfaceNavStack.js +62 -15
  96. package/lib/module/ui/navigation/surfaceNavStack.js.map +1 -1
  97. package/lib/module/ui/navigation/surfaceRegistry.js +38 -17
  98. package/lib/module/ui/navigation/surfaceRegistry.js.map +1 -1
  99. package/lib/module/ui/navigation/surfaces.js +97 -22
  100. package/lib/module/ui/navigation/surfaces.js.map +1 -1
  101. package/lib/module/ui/screens/AvatarCropScreen.js +283 -281
  102. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  103. package/lib/module/ui/screens/ChangeAvatarScreen.js +298 -0
  104. package/lib/module/ui/screens/ChangeAvatarScreen.js.map +1 -0
  105. package/lib/module/ui/screens/FileManagementScreen.js +196 -433
  106. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  107. package/lib/module/ui/screens/WelcomeNewUserScreen.js +17 -49
  108. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  109. package/lib/module/ui/screens/fileManagement/FileLibraryError.js +59 -0
  110. package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -0
  111. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +54 -42
  112. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  113. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +45 -81
  114. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  115. package/lib/module/ui/stores/resetSessionScopedStores.js +8 -3
  116. package/lib/module/ui/stores/resetSessionScopedStores.js.map +1 -1
  117. package/lib/module/ui/utils/avatarUtils.js +11 -2
  118. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  119. package/lib/module/ui/utils/fileManagement.js +0 -78
  120. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  121. package/lib/typescript/commonjs/ui/components/AvatarCameraBadge.d.ts +4 -0
  122. package/lib/typescript/commonjs/ui/components/AvatarCameraBadge.d.ts.map +1 -0
  123. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts +2 -1
  124. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  125. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts +1 -4
  129. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts +71 -19
  131. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/ui/components/photogrid/JustifiedPhotoGrid.d.ts +10 -8
  133. package/lib/typescript/commonjs/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +9 -0
  136. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/ui/hooks/queries/useFileQueries.d.ts +50 -0
  138. package/lib/typescript/commonjs/ui/hooks/queries/useFileQueries.d.ts.map +1 -0
  139. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts +15 -10
  140. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/ui/hooks/useReduceMotion.d.ts +14 -0
  142. package/lib/typescript/commonjs/ui/hooks/useReduceMotion.d.ts.map +1 -0
  143. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts +1 -1
  144. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts +13 -0
  146. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +4 -5
  148. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
  150. package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/ui/navigation/surfaceNavStack.d.ts +21 -0
  152. package/lib/typescript/commonjs/ui/navigation/surfaceNavStack.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts +73 -13
  154. package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts +42 -11
  156. package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts +18 -5
  158. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts +34 -0
  160. package/lib/typescript/commonjs/ui/screens/ChangeAvatarScreen.d.ts.map +1 -0
  161. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts +23 -0
  164. package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -0
  165. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts +4 -0
  166. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts +10 -2
  168. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/ui/stores/resetSessionScopedStores.d.ts +8 -1
  170. package/lib/typescript/commonjs/ui/stores/resetSessionScopedStores.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/ui/types/navigation.d.ts +2 -0
  172. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/ui/utils/avatarUtils.d.ts.map +1 -1
  174. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +0 -48
  175. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  176. package/lib/typescript/module/ui/components/AvatarCameraBadge.d.ts +4 -0
  177. package/lib/typescript/module/ui/components/AvatarCameraBadge.d.ts.map +1 -0
  178. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts +2 -1
  179. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -1
  180. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  181. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  182. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts.map +1 -1
  183. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts +1 -4
  184. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts.map +1 -1
  185. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts +71 -19
  186. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts.map +1 -1
  187. package/lib/typescript/module/ui/components/photogrid/JustifiedPhotoGrid.d.ts +10 -8
  188. package/lib/typescript/module/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
  189. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  190. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +9 -0
  191. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  192. package/lib/typescript/module/ui/hooks/queries/useFileQueries.d.ts +50 -0
  193. package/lib/typescript/module/ui/hooks/queries/useFileQueries.d.ts.map +1 -0
  194. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts +15 -10
  195. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  196. package/lib/typescript/module/ui/hooks/useReduceMotion.d.ts +14 -0
  197. package/lib/typescript/module/ui/hooks/useReduceMotion.d.ts.map +1 -0
  198. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts +1 -1
  199. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts.map +1 -1
  200. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts +13 -0
  201. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts.map +1 -1
  202. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +4 -5
  203. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  204. package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
  205. package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
  206. package/lib/typescript/module/ui/navigation/surfaceNavStack.d.ts +21 -0
  207. package/lib/typescript/module/ui/navigation/surfaceNavStack.d.ts.map +1 -1
  208. package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts +73 -13
  209. package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts.map +1 -1
  210. package/lib/typescript/module/ui/navigation/surfaces.d.ts +42 -11
  211. package/lib/typescript/module/ui/navigation/surfaces.d.ts.map +1 -1
  212. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts +18 -5
  213. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  214. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts +34 -0
  215. package/lib/typescript/module/ui/screens/ChangeAvatarScreen.d.ts.map +1 -0
  216. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  217. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  218. package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts +23 -0
  219. package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -0
  220. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts +4 -0
  221. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  222. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts +10 -2
  223. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  224. package/lib/typescript/module/ui/stores/resetSessionScopedStores.d.ts +8 -1
  225. package/lib/typescript/module/ui/stores/resetSessionScopedStores.d.ts.map +1 -1
  226. package/lib/typescript/module/ui/types/navigation.d.ts +2 -0
  227. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  228. package/lib/typescript/module/ui/utils/avatarUtils.d.ts.map +1 -1
  229. package/lib/typescript/module/ui/utils/fileManagement.d.ts +0 -48
  230. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  231. package/package.json +8 -4
  232. package/src/ui/components/AvatarCameraBadge.tsx +35 -0
  233. package/src/ui/components/OxyAccountDialogScreen.tsx +38 -15
  234. package/src/ui/components/OxyAuthChooser.tsx +722 -185
  235. package/src/ui/components/ProfileButton.tsx +16 -1
  236. package/src/ui/components/ProfileSummaryCard.tsx +2 -25
  237. package/src/ui/components/SurfaceScreen.tsx +48 -14
  238. package/src/ui/components/oxyAuthChooserStyles.ts +75 -23
  239. package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +158 -84
  240. package/src/ui/components/photogrid/__tests__/chunkPhotos.test.ts +51 -0
  241. package/src/ui/context/OxyContext.tsx +74 -34
  242. package/src/ui/hooks/queries/queryKeys.ts +15 -0
  243. package/src/ui/hooks/queries/useFileQueries.ts +162 -0
  244. package/src/ui/hooks/useAvatarPicker.ts +38 -53
  245. package/src/ui/hooks/useReduceMotion.ts +58 -0
  246. package/src/ui/hooks/useSurfaceHeader.ts +2 -1
  247. package/src/ui/navigation/__tests__/getSurfaceConfig.test.ts +55 -7
  248. package/src/ui/navigation/__tests__/surfaceNavStack.test.ts +81 -0
  249. package/src/ui/navigation/accountDialogManager.ts +28 -0
  250. package/src/ui/navigation/bottomSheetManager.ts +6 -7
  251. package/src/ui/navigation/routes.ts +3 -1
  252. package/src/ui/navigation/surfaceNavStack.ts +72 -9
  253. package/src/ui/navigation/surfaceRegistry.ts +91 -17
  254. package/src/ui/navigation/surfaces.ts +108 -29
  255. package/src/ui/screens/AvatarCropScreen.tsx +336 -298
  256. package/src/ui/screens/ChangeAvatarScreen.tsx +359 -0
  257. package/src/ui/screens/FileManagementScreen.tsx +189 -432
  258. package/src/ui/screens/WelcomeNewUserScreen.tsx +18 -48
  259. package/src/ui/screens/fileManagement/FileLibraryError.tsx +56 -0
  260. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +56 -46
  261. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +55 -71
  262. package/src/ui/stores/resetSessionScopedStores.ts +8 -3
  263. package/src/ui/types/navigation.ts +2 -0
  264. package/src/ui/utils/avatarUtils.ts +11 -2
  265. package/src/ui/utils/fileManagement.ts +1 -101
  266. package/lib/commonjs/ui/stores/fileStore.js +0 -153
  267. package/lib/commonjs/ui/stores/fileStore.js.map +0 -1
  268. package/lib/module/ui/stores/fileStore.js +0 -145
  269. package/lib/module/ui/stores/fileStore.js.map +0 -1
  270. package/lib/typescript/commonjs/ui/stores/fileStore.d.ts +0 -31
  271. package/lib/typescript/commonjs/ui/stores/fileStore.d.ts.map +0 -1
  272. package/lib/typescript/module/ui/stores/fileStore.d.ts +0 -31
  273. package/lib/typescript/module/ui/stores/fileStore.d.ts.map +0 -1
  274. package/src/ui/stores/fileStore.ts +0 -118
@@ -4,8 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.closeAccountDialog = closeAccountDialog;
7
+ exports.getAccountDialogConsumerHooks = getAccountDialogConsumerHooks;
7
8
  exports.notifyAccountDialogVisibility = notifyAccountDialogVisibility;
8
9
  exports.openAccountDialog = openAccountDialog;
10
+ exports.registerAccountDialogConsumerHooks = registerAccountDialogConsumerHooks;
9
11
  exports.registerAccountDialogControls = registerAccountDialogControls;
10
12
  exports.subscribeToAccountDialog = subscribeToAccountDialog;
11
13
  /**
@@ -26,7 +28,14 @@ exports.subscribeToAccountDialog = subscribeToAccountDialog;
26
28
  * are stack operations — this interface never carries visibility state.
27
29
  */
28
30
 
31
+ /**
32
+ * Optional consumer overrides for account-dialog actions. `ProfileButton` (and
33
+ * similar hosts) register these while mounted so inbox/accounts can route
34
+ * "Manage" / "Add account" to app-local navigation instead of the SDK default.
35
+ */
36
+
29
37
  let controls = null;
38
+ let consumerHooks = null;
30
39
  const visibilityListeners = new Set();
31
40
  function registerAccountDialogControls(next) {
32
41
  controls = next;
@@ -37,6 +46,19 @@ function registerAccountDialogControls(next) {
37
46
  };
38
47
  }
39
48
 
49
+ /** Register app-local manage/add/profile handlers for the account dialog. */
50
+ function registerAccountDialogConsumerHooks(next) {
51
+ consumerHooks = next;
52
+ return () => {
53
+ if (consumerHooks === next) {
54
+ consumerHooks = null;
55
+ }
56
+ };
57
+ }
58
+ function getAccountDialogConsumerHooks() {
59
+ return consumerHooks;
60
+ }
61
+
40
62
  /** Open the account dialog on `view` (default `accounts`). No-op before mount. */
41
63
  function openAccountDialog(view) {
42
64
  controls?.open(view);
@@ -1 +1 @@
1
- {"version":3,"names":["controls","visibilityListeners","Set","registerAccountDialogControls","next","openAccountDialog","view","open","closeAccountDialog","close","notifyAccountDialogVisibility","visible","listener","subscribeToAccountDialog","add","delete"],"sourceRoot":"../../../../src","sources":["ui/navigation/accountDialogManager.ts"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;;AAMA,IAAIA,QAAsC,GAAG,IAAI;AACjD,MAAMC,mBAAmB,GAAG,IAAIC,GAAG,CAA6B,CAAC;AAE1D,SAASC,6BAA6BA,CAACC,IAA2B,EAAc;EACrFJ,QAAQ,GAAGI,IAAI;EACf,OAAO,MAAM;IACX,IAAIJ,QAAQ,KAAKI,IAAI,EAAE;MACrBJ,QAAQ,GAAG,IAAI;IACjB;EACF,CAAC;AACH;;AAEA;AACO,SAASK,iBAAiBA,CAACC,IAAwB,EAAQ;EAChEN,QAAQ,EAAEO,IAAI,CAACD,IAAI,CAAC;AACtB;;AAEA;AACO,SAASE,kBAAkBA,CAAA,EAAS;EACzCR,QAAQ,EAAES,KAAK,CAAC,CAAC;AACnB;;AAEA;AACO,SAASC,6BAA6BA,CAACC,OAAgB,EAAQ;EACpE,KAAK,MAAMC,QAAQ,IAAIX,mBAAmB,EAAE;IAC1CW,QAAQ,CAACD,OAAO,CAAC;EACnB;AACF;;AAEA;AACO,SAASE,wBAAwBA,CAACD,QAAoC,EAAc;EACzFX,mBAAmB,CAACa,GAAG,CAACF,QAAQ,CAAC;EACjC,OAAO,MAAM;IACXX,mBAAmB,CAACc,MAAM,CAACH,QAAQ,CAAC;EACtC,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"names":["controls","consumerHooks","visibilityListeners","Set","registerAccountDialogControls","next","registerAccountDialogConsumerHooks","getAccountDialogConsumerHooks","openAccountDialog","view","open","closeAccountDialog","close","notifyAccountDialogVisibility","visible","listener","subscribeToAccountDialog","add","delete"],"sourceRoot":"../../../../src","sources":["ui/navigation/accountDialogManager.ts"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;;AAOA,IAAIA,QAAsC,GAAG,IAAI;AACjD,IAAIC,aAAgD,GAAG,IAAI;AAC3D,MAAMC,mBAAmB,GAAG,IAAIC,GAAG,CAA6B,CAAC;AAE1D,SAASC,6BAA6BA,CAACC,IAA2B,EAAc;EACrFL,QAAQ,GAAGK,IAAI;EACf,OAAO,MAAM;IACX,IAAIL,QAAQ,KAAKK,IAAI,EAAE;MACrBL,QAAQ,GAAG,IAAI;IACjB;EACF,CAAC;AACH;;AAEA;AACO,SAASM,kCAAkCA,CAChDD,IAAuC,EAC3B;EACZJ,aAAa,GAAGI,IAAI;EACpB,OAAO,MAAM;IACX,IAAIJ,aAAa,KAAKI,IAAI,EAAE;MAC1BJ,aAAa,GAAG,IAAI;IACtB;EACF,CAAC;AACH;AAEO,SAASM,6BAA6BA,CAAA,EAAsC;EACjF,OAAON,aAAa;AACtB;;AAEA;AACO,SAASO,iBAAiBA,CAACC,IAAwB,EAAQ;EAChET,QAAQ,EAAEU,IAAI,CAACD,IAAI,CAAC;AACtB;;AAEA;AACO,SAASE,kBAAkBA,CAAA,EAAS;EACzCX,QAAQ,EAAEY,KAAK,CAAC,CAAC;AACnB;;AAEA;AACO,SAASC,6BAA6BA,CAACC,OAAgB,EAAQ;EACpE,KAAK,MAAMC,QAAQ,IAAIb,mBAAmB,EAAE;IAC1Ca,QAAQ,CAACD,OAAO,CAAC;EACnB;AACF;;AAEA;AACO,SAASE,wBAAwBA,CAACD,QAAoC,EAAc;EACzFb,mBAAmB,CAACe,GAAG,CAACF,QAAQ,CAAC;EACjC,OAAO,MAAM;IACXb,mBAAmB,CAACgB,MAAM,CAACH,QAAQ,CAAC;EACtC,CAAC;AACH","ignoreList":[]}
@@ -20,11 +20,10 @@ var _surfaces = require("./surfaces.js");
20
20
  */
21
21
 
22
22
  /**
23
- * Open a bottom-sheet route. If the top-most active surface hosts the SAME
24
- * presentation (the common all-sheets case) the route is drilled into it; a route
25
- * with a different presentation (the image picker's full-bleed surface) is
26
- * presented as a NEW surface on top. Opening with no active surface presents the
27
- * first one.
23
+ * Open a bottom-sheet route. By DEFAULT it drills into the top-most active
24
+ * surface morphing it in place (every screen morphs). A NEW surface is stacked
25
+ * on top only when the target route declares `stacks` (reserved for genuine
26
+ * overlays none today). Opening with no active surface presents the first one.
28
27
  *
29
28
  * `fullScreen` is accepted for signature compatibility and ignored — a route's
30
29
  * surface is now derived from its registry config, not a per-call flag.
@@ -37,7 +36,7 @@ const showBottomSheet = screenOrConfig => {
37
36
  return;
38
37
  }
39
38
  const top = (0, _surfaces.topRouteSurface)();
40
- if (top && top.presentation === (0, _surfaceRegistry.getSurfacePresentation)(screen, props)) {
39
+ if (top && !(0, _surfaceRegistry.getSurfaceConfig)(screen, props).stacks) {
41
40
  top.navigate(screen, props);
42
41
  } else {
43
42
  (0, _surfaces.presentRoute)(screen, props);
@@ -1 +1 @@
1
- {"version":3,"names":["_routes","require","_surfaceRegistry","_surfaces","showBottomSheet","screenOrConfig","screen","props","isValidRoute","__DEV__","console","warn","top","topRouteSurface","presentation","getSurfacePresentation","navigate","presentRoute","exports","closeBottomSheet","closeAllRouteSurfaces","goBack"],"sourceRoot":"../../../../src","sources":["ui/navigation/bottomSheetManager.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,eAAe,GAC1BC,cAEgF,IACvE;EACT,MAAMC,MAAM,GAAG,OAAOD,cAAc,KAAK,QAAQ,GAAGA,cAAc,GAAGA,cAAc,CAACC,MAAM;EAC1F,MAAMC,KAAK,GAAG,OAAOF,cAAc,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAGA,cAAc,CAACE,KAAK,IAAI,CAAC,CAAC;EAElF,IAAI,CAAC,IAAAC,oBAAY,EAACF,MAAM,CAAC,EAAE;IACzB,IAAIG,OAAO,EAAEC,OAAO,CAACC,IAAI,CAAC,gCAAgCL,MAAM,EAAE,CAAC;IACnE;EACF;EAEA,MAAMM,GAAG,GAAG,IAAAC,yBAAe,EAAC,CAAC;EAC7B,IAAID,GAAG,IAAIA,GAAG,CAACE,YAAY,KAAK,IAAAC,uCAAsB,EAACT,MAAM,EAAEC,KAAK,CAAC,EAAE;IACrEK,GAAG,CAACI,QAAQ,CAACV,MAAM,EAAEC,KAAK,CAAC;EAC7B,CAAC,MAAM;IACL,IAAAU,sBAAY,EAACX,MAAM,EAAEC,KAAK,CAAC;EAC7B;AACF,CAAC;;AAED;AAAAW,OAAA,CAAAd,eAAA,GAAAA,eAAA;AACO,MAAMe,gBAAgB,GAAGA,CAAA,KAAY;EAC1C,IAAAC,+BAAqB,EAAC,CAAC;AACzB,CAAC;;AAED;AACA;AACA;AACA;AAHAF,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AAIO,MAAME,MAAM,GAAGA,CAAA,KAAe;EACnC,MAAMT,GAAG,GAAG,IAAAC,yBAAe,EAAC,CAAC;EAC7B,OAAOD,GAAG,GAAGA,GAAG,CAACS,MAAM,CAAC,CAAC,GAAG,KAAK;AACnC,CAAC;AAACH,OAAA,CAAAG,MAAA,GAAAA,MAAA","ignoreList":[]}
1
+ {"version":3,"names":["_routes","require","_surfaceRegistry","_surfaces","showBottomSheet","screenOrConfig","screen","props","isValidRoute","__DEV__","console","warn","top","topRouteSurface","getSurfaceConfig","stacks","navigate","presentRoute","exports","closeBottomSheet","closeAllRouteSurfaces","goBack"],"sourceRoot":"../../../../src","sources":["ui/navigation/bottomSheetManager.ts"],"mappings":";;;;;;AACA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,eAAe,GAC1BC,cAEgF,IACvE;EACT,MAAMC,MAAM,GAAG,OAAOD,cAAc,KAAK,QAAQ,GAAGA,cAAc,GAAGA,cAAc,CAACC,MAAM;EAC1F,MAAMC,KAAK,GAAG,OAAOF,cAAc,KAAK,QAAQ,GAAG,CAAC,CAAC,GAAGA,cAAc,CAACE,KAAK,IAAI,CAAC,CAAC;EAElF,IAAI,CAAC,IAAAC,oBAAY,EAACF,MAAM,CAAC,EAAE;IACzB,IAAIG,OAAO,EAAEC,OAAO,CAACC,IAAI,CAAC,gCAAgCL,MAAM,EAAE,CAAC;IACnE;EACF;EAEA,MAAMM,GAAG,GAAG,IAAAC,yBAAe,EAAC,CAAC;EAC7B,IAAID,GAAG,IAAI,CAAC,IAAAE,iCAAgB,EAACR,MAAM,EAAEC,KAAK,CAAC,CAACQ,MAAM,EAAE;IAClDH,GAAG,CAACI,QAAQ,CAACV,MAAM,EAAEC,KAAK,CAAC;EAC7B,CAAC,MAAM;IACL,IAAAU,sBAAY,EAACX,MAAM,EAAEC,KAAK,CAAC;EAC7B;AACF,CAAC;;AAED;AAAAW,OAAA,CAAAd,eAAA,GAAAA,eAAA;AACO,MAAMe,gBAAgB,GAAGA,CAAA,KAAY;EAC1C,IAAAC,+BAAqB,EAAC,CAAC;AACzB,CAAC;;AAED;AACA;AACA;AACA;AAHAF,OAAA,CAAAC,gBAAA,GAAAA,gBAAA;AAIO,MAAME,MAAM,GAAGA,CAAA,KAAe;EACnC,MAAMT,GAAG,GAAG,IAAAC,yBAAe,EAAC,CAAC;EAC7B,OAAOD,GAAG,GAAGA,GAAG,CAACS,MAAM,CAAC,CAAC,GAAG,KAAK;AACnC,CAAC;AAACH,OAAA,CAAAG,MAAA,GAAAA,MAAA","ignoreList":[]}
@@ -50,6 +50,7 @@ const screenLoaders = {
50
50
  CreateAccount: () => require('../screens/CreateAccountScreen').default,
51
51
  AccountMembers: () => require('../screens/AccountMembersScreen').default,
52
52
  AccountSettings: () => require('../screens/AccountSettingsScreen').default,
53
+ ChangeAvatar: () => require('../screens/ChangeAvatarScreen').default,
53
54
  AvatarCrop: () => require('../screens/AvatarCropScreen').default,
54
55
  Notifications: () => require('../screens/NotificationsScreen').default,
55
56
  ConnectedApps: () => require('../screens/ConnectedAppsScreen').default,
@@ -1 +1 @@
1
- {"version":3,"names":["screenLoaders","ManageAccount","require","default","AccountVerification","PaymentGateway","Profile","LanguageSelector","PrivacySettings","SearchSettings","FileManagement","HelpSupport","FAQ","Feedback","LegalDocuments","AppInfo","PremiumSubscription","WelcomeNewUser","UserLinks","HistoryView","SavesCollections","EditProfile","EditProfileField","LearnMoreUsernames","TrustCenter","TrustLeaderboard","TrustRewards","TrustRules","AboutTrust","TrustFAQ","FollowersList","FollowingList","CreateAccount","AccountMembers","AccountSettings","AvatarCrop","Notifications","ConnectedApps","Preferences","AccountDialog","screenCache","Map","getScreenComponent","routeName","has","get","loader","component","set","error","__DEV__","console","undefined","exports","isValidRoute"],"sourceRoot":"../../../../src","sources":["ui/navigation/routes.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["screenLoaders","ManageAccount","require","default","AccountVerification","PaymentGateway","Profile","LanguageSelector","PrivacySettings","SearchSettings","FileManagement","HelpSupport","FAQ","Feedback","LegalDocuments","AppInfo","PremiumSubscription","WelcomeNewUser","UserLinks","HistoryView","SavesCollections","EditProfile","EditProfileField","LearnMoreUsernames","TrustCenter","TrustLeaderboard","TrustRewards","TrustRules","AboutTrust","TrustFAQ","FollowersList","FollowingList","CreateAccount","AccountMembers","AccountSettings","ChangeAvatar","AvatarCrop","Notifications","ConnectedApps","Preferences","AccountDialog","screenCache","Map","getScreenComponent","routeName","has","get","loader","component","set","error","__DEV__","console","undefined","exports","isValidRoute"],"sourceRoot":"../../../../src","sources":["ui/navigation/routes.ts"],"mappings":";;;;;;AAGA;AACA;AACA;;AAEA;;AAuCuB;;AAEvB;AACA;AACA,MAAMA,aAAsE,GAAG;EAC3EC,aAAa,EAAEA,CAAA,KAAMC,OAAO,CAAC,gCAAgC,CAAC,CAACC,OAAO;EACtEC,mBAAmB,EAAEA,CAAA,KAAMF,OAAO,CAAC,sCAAsC,CAAC,CAACC,OAAO;EAClFE,cAAc,EAAEA,CAAA,KAAMH,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EACxEG,OAAO,EAAEA,CAAA,KAAMJ,OAAO,CAAC,0BAA0B,CAAC,CAACC,OAAO;EAC1DI,gBAAgB,EAAEA,CAAA,KAAML,OAAO,CAAC,mCAAmC,CAAC,CAACC,OAAO;EAC5EK,eAAe,EAAEA,CAAA,KAAMN,OAAO,CAAC,kCAAkC,CAAC,CAACC,OAAO;EAC1EM,cAAc,EAAEA,CAAA,KAAMP,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EACxEO,cAAc,EAAEA,CAAA,KAAMR,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EACxEQ,WAAW,EAAEA,CAAA,KAAMT,OAAO,CAAC,8BAA8B,CAAC,CAACC,OAAO;EAClES,GAAG,EAAEA,CAAA,KAAMV,OAAO,CAAC,sBAAsB,CAAC,CAACC,OAAO;EAClDU,QAAQ,EAAEA,CAAA,KAAMX,OAAO,CAAC,2BAA2B,CAAC,CAACC,OAAO;EAC5DW,cAAc,EAAEA,CAAA,KAAMZ,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EACxEY,OAAO,EAAEA,CAAA,KAAMb,OAAO,CAAC,0BAA0B,CAAC,CAACC,OAAO;EAC1Da,mBAAmB,EAAEA,CAAA,KAAMd,OAAO,CAAC,sCAAsC,CAAC,CAACC,OAAO;EAClFc,cAAc,EAAEA,CAAA,KAAMf,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EACxEe,SAAS,EAAEA,CAAA,KAAMhB,OAAO,CAAC,4BAA4B,CAAC,CAACC,OAAO;EAC9DgB,WAAW,EAAEA,CAAA,KAAMjB,OAAO,CAAC,8BAA8B,CAAC,CAACC,OAAO;EAClEiB,gBAAgB,EAAEA,CAAA,KAAMlB,OAAO,CAAC,mCAAmC,CAAC,CAACC,OAAO;EAC5EkB,WAAW,EAAEA,CAAA,KAAMnB,OAAO,CAAC,8BAA8B,CAAC,CAACC,OAAO;EAClEmB,gBAAgB,EAAEA,CAAA,KAAMpB,OAAO,CAAC,mCAAmC,CAAC,CAACC,OAAO;EAC5E;EACAoB,kBAAkB,EAAEA,CAAA,KAAMrB,OAAO,CAAC,qCAAqC,CAAC,CAACC,OAAO;EAChF;EACAqB,WAAW,EAAEA,CAAA,KAAMtB,OAAO,CAAC,oCAAoC,CAAC,CAACC,OAAO;EACxEsB,gBAAgB,EAAEA,CAAA,KAAMvB,OAAO,CAAC,yCAAyC,CAAC,CAACC,OAAO;EAClFuB,YAAY,EAAEA,CAAA,KAAMxB,OAAO,CAAC,qCAAqC,CAAC,CAACC,OAAO;EAC1EwB,UAAU,EAAEA,CAAA,KAAMzB,OAAO,CAAC,mCAAmC,CAAC,CAACC,OAAO;EACtEyB,UAAU,EAAEA,CAAA,KAAM1B,OAAO,CAAC,mCAAmC,CAAC,CAACC,OAAO;EACtE0B,QAAQ,EAAEA,CAAA,KAAM3B,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EAClE;EACA2B,aAAa,EAAEA,CAAA,KAAM5B,OAAO,CAAC,gCAAgC,CAAC,CAACC,OAAO;EACtE4B,aAAa,EAAEA,CAAA,KAAM7B,OAAO,CAAC,gCAAgC,CAAC,CAACC,OAAO;EACtE6B,aAAa,EAAEA,CAAA,KAAM9B,OAAO,CAAC,gCAAgC,CAAC,CAACC,OAAO;EACtE8B,cAAc,EAAEA,CAAA,KAAM/B,OAAO,CAAC,iCAAiC,CAAC,CAACC,OAAO;EACxE+B,eAAe,EAAEA,CAAA,KAAMhC,OAAO,CAAC,kCAAkC,CAAC,CAACC,OAAO;EAC1EgC,YAAY,EAAEA,CAAA,KAAMjC,OAAO,CAAC,+BAA+B,CAAC,CAACC,OAAO;EACpEiC,UAAU,EAAEA,CAAA,KAAMlC,OAAO,CAAC,6BAA6B,CAAC,CAACC,OAAO;EAChEkC,aAAa,EAAEA,CAAA,KAAMnC,OAAO,CAAC,gCAAgC,CAAC,CAACC,OAAO;EACtEmC,aAAa,EAAEA,CAAA,KAAMpC,OAAO,CAAC,gCAAgC,CAAC,CAACC,OAAO;EACtEoC,WAAW,EAAEA,CAAA,KAAMrC,OAAO,CAAC,8BAA8B,CAAC,CAACC,OAAO;EAClE;EACA;EACA;EACAqC,aAAa,EAAEA,CAAA,KAAMtC,OAAO,CAAC,sCAAsC,CAAC,CAACC;AACzE,CAAC;;AAED;AACA,MAAMsC,WAAW,GAAG,IAAIC,GAAG,CAA4C,CAAC;;AAExE;AACO,MAAMC,kBAAkB,GAAIC,SAAoB,IAAiD;EACpG;EACA,IAAIH,WAAW,CAACI,GAAG,CAACD,SAAS,CAAC,EAAE;IAC5B,OAAOH,WAAW,CAACK,GAAG,CAACF,SAAS,CAAC;EACrC;;EAEA;EACA,MAAMG,MAAM,GAAG/C,aAAa,CAAC4C,SAAS,CAAC;EACvC,IAAIG,MAAM,EAAE;IACR,IAAI;MACA,MAAMC,SAAS,GAAGD,MAAM,CAAC,CAAC;MAC1BN,WAAW,CAACQ,GAAG,CAACL,SAAS,EAAEI,SAAS,CAAC;MACrC,OAAOA,SAAS;IACpB,CAAC,CAAC,OAAOE,KAAK,EAAE;MACZ,IAAIC,OAAO,EAAE;QACTC,OAAO,CAACF,KAAK,CAAC,mCAAmCN,SAAS,EAAE,EAAEM,KAAK,CAAC;MACxE;MACA,OAAOG,SAAS;IACpB;EACJ;EAEA,OAAOA,SAAS;AACpB,CAAC;;AAED;AACA;AAAAC,OAAA,CAAAX,kBAAA,GAAAA,kBAAA;AACO,MAAMY,YAAY,GAAIX,SAAiB,IAA6B;EACvE,OAAOA,SAAS,IAAI5C,aAAa;AACrC,CAAC;AAACsD,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
@@ -44,9 +44,46 @@ function createSurfaceNavStack(route, props) {
44
44
  } = store.getState();
45
45
  return frames[frames.length - 1];
46
46
  };
47
+
48
+ // Result-bearing sub-flows currently running in this surface (the morphed-in
49
+ // avatar picker, and — NESTED within it — the "My Oxy files" media selector).
50
+ // A STACK: flows nest (ChangeAvatar → FileManagement → back to ChangeAvatar).
51
+ // Held OUTSIDE the store (resolvers are functions; flow presence must not
52
+ // re-render frames). Each flow's `returnLength` is the frame count BEFORE its
53
+ // entry frame was pushed, so settling pops back to exactly the frame that
54
+ // started it. `flowStack` is ordered outer → inner; the top is the innermost.
55
+ const flowStack = [];
56
+ const requestDismiss = result => {
57
+ // Dismissing the whole surface abandons EVERY pending sub-flow — settle each
58
+ // promise so an awaiting caller (the avatar picker) never hangs.
59
+ while (flowStack.length) flowStack.pop()?.resolve(undefined);
60
+ if (store.getState().closing) return;
61
+ store.setState({
62
+ closing: true,
63
+ closeResult: result
64
+ });
65
+ };
66
+ const goBack = () => {
67
+ const {
68
+ frames
69
+ } = store.getState();
70
+ if (frames.length <= 1) return false;
71
+ const nextLength = frames.length - 1;
72
+ store.setState({
73
+ frames: frames.slice(0, -1)
74
+ });
75
+ // Backing out past a sub-flow's entry frame cancels it (resolve undefined).
76
+ // A single pop crosses at most one boundary, but loop for safety.
77
+ while (flowStack.length && nextLength <= flowStack[flowStack.length - 1].returnLength) {
78
+ flowStack.pop()?.resolve(undefined);
79
+ }
80
+ return true;
81
+ };
47
82
  return {
48
83
  store,
49
84
  getTop,
85
+ requestDismiss,
86
+ goBack,
50
87
  navigate(nextRoute, nextProps) {
51
88
  store.setState(state => ({
52
89
  frames: [...state.frames, makeFrame(nextRoute, nextProps)]
@@ -57,16 +94,6 @@ function createSurfaceNavStack(route, props) {
57
94
  frames: [...state.frames.slice(0, -1), makeFrame(nextRoute, nextProps)]
58
95
  }));
59
96
  },
60
- goBack() {
61
- const {
62
- frames
63
- } = store.getState();
64
- if (frames.length <= 1) return false;
65
- store.setState({
66
- frames: frames.slice(0, -1)
67
- });
68
- return true;
69
- },
70
97
  canGoBack() {
71
98
  const {
72
99
  frames
@@ -86,12 +113,32 @@ function createSurfaceNavStack(route, props) {
86
113
  };
87
114
  });
88
115
  },
89
- requestDismiss(result) {
90
- if (store.getState().closing) return;
91
- store.setState({
92
- closing: true,
93
- closeResult: result
116
+ beginFlow(nextRoute, nextProps) {
117
+ const returnLength = store.getState().frames.length;
118
+ store.setState(state => ({
119
+ frames: [...state.frames, makeFrame(nextRoute, nextProps)]
120
+ }));
121
+ return new Promise(resolve => {
122
+ flowStack.push({
123
+ returnLength,
124
+ resolve
125
+ });
94
126
  });
127
+ },
128
+ resolveFlowOrDismiss(result) {
129
+ const flow = flowStack.pop();
130
+ if (!flow) {
131
+ // No flow → this screen owns its surface; dismiss it as before.
132
+ requestDismiss(result);
133
+ return;
134
+ }
135
+ store.setState(state => ({
136
+ frames: state.frames.slice(0, flow.returnLength)
137
+ }));
138
+ flow.resolve(result);
139
+ },
140
+ abandonActiveFlow() {
141
+ while (flowStack.length) flowStack.pop()?.resolve(undefined);
95
142
  }
96
143
  };
97
144
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_vanilla","require","makeFrame","route","props","resolved","step","initialStep","createSurfaceNavStack","store","createStore","frames","closing","closeResult","undefined","getTop","getState","length","navigate","nextRoute","nextProps","setState","state","replace","slice","goBack","canGoBack","setStep","index","requestDismiss","result"],"sourceRoot":"../../../../src","sources":["ui/navigation/surfaceNavStack.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_vanilla","require","makeFrame","route","props","resolved","step","initialStep","createSurfaceNavStack","store","createStore","frames","closing","closeResult","undefined","getTop","getState","length","flowStack","requestDismiss","result","pop","resolve","setState","goBack","nextLength","slice","returnLength","navigate","nextRoute","nextProps","state","replace","canGoBack","setStep","index","beginFlow","Promise","push","resolveFlowOrDismiss","flow","abandonActiveFlow"],"sourceRoot":"../../../../src","sources":["ui/navigation/surfaceNavStack.ts"],"mappings":"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","ignoreList":[]}
@@ -35,15 +35,18 @@ void _registryCoversRoutes;
35
35
  * How a surface renders — the SDK's presentation taxonomy. Each value maps to a
36
36
  * concrete Bloom `Dialog` placement/chrome in `surfaces.ts`:
37
37
  *
38
- * - `'sheet'` → responsive `{ base: 'bottom', md: 'center' }` (the default:
39
- * a bottom sheet on narrow viewports, a centered card on wide).
40
- * - `'center'` → a plain centered modal at every width.
38
+ * - `'sheet'` → responsive `{ base: 'bottom', md: 'center' }` (the default,
39
+ * and since every screen morphs the presentation of EVERY
40
+ * route today: a bottom sheet on narrow, a centered card wide).
41
+ * - `'center'` → a plain centered modal at every width. Currently unused.
41
42
  * - `'drawer'` → responsive `{ base: 'bottom', md: 'left' }` side drawer.
42
- * - `'fullScreen'` → approximated with the shared `Dialog`: a full-height sheet /
43
- * large centered card, flush (`contentPadding: 0`) content, a
44
- * black canvas and programmatic-only dismiss (the flagship
45
- * image picker). A real Bloom `'fullScreen'` placement is a
46
- * follow-up if the approximation reads wrong on device.
43
+ * Currently unused.
44
+ * - `'fullScreen'` a flush black-canvas surface (`contentPadding: 0`,
45
+ * programmatic-only dismiss). Currently unused: the flagship
46
+ * photo picker now MORPHS in place as a `sheet` (it paints its
47
+ * own black canvas + bar inside the themed panel), so nothing
48
+ * needs a stacked full-bleed surface. Retained for a future
49
+ * route that genuinely must be full-bleed.
47
50
  */
48
51
 
49
52
  /**
@@ -63,13 +66,14 @@ const DEFAULT_SURFACE_CONFIG = {
63
66
  presentation: 'sheet',
64
67
  scrollable: true,
65
68
  header: true,
69
+ morph: true,
70
+ stacks: false,
66
71
  manualActivation: true,
67
72
  dynamicBackdrop: true
68
73
  };
69
74
 
70
75
  /**
71
76
  * Routes that render NO Dialog nav header — they own their chrome:
72
- * - `AvatarCrop` — its own translucent Cancel / title / Done top bar.
73
77
  * - `PaymentGateway` — the payment surface owns its controls.
74
78
  * - `WelcomeNewUser` — a full-bleed onboarding wizard with its own step chrome.
75
79
  * - `Profile` — a full profile view, no nav-header chrome.
@@ -78,8 +82,15 @@ const DEFAULT_SURFACE_CONFIG = {
78
82
  * `AccountDialog` used to be here — it now uses the SHARED Dialog nav header like
79
83
  * every other screen (its per-view title/subtitle + view-back go through
80
84
  * `useSurfaceHeader`), so the account/sign-in surface no longer feels bespoke.
85
+ *
86
+ * `AvatarCrop` used to be here too, for its own translucent Cancel/title/Done
87
+ * bar. It is now reached ONLY by navigating within a `ChangeAvatar` surface, and
88
+ * the Dialog's `header` is fixed for a surface's whole life — a headerless frame
89
+ * inside a header-mode surface would stack two bars. So the crop declares its
90
+ * title + its "Use photo" action through `useSurfaceHeader` like every other
91
+ * screen, and keeps only its dark crop stage.
81
92
  */
82
- const HEADERLESS_ROUTES = new Set(['AvatarCrop', 'PaymentGateway', 'WelcomeNewUser', 'Profile']);
93
+ const HEADERLESS_ROUTES = new Set(['PaymentGateway', 'WelcomeNewUser', 'Profile']);
83
94
 
84
95
  /**
85
96
  * Predicate matching `FileManagementScreen`'s internal `isImageOnlyPicker`
@@ -113,19 +124,29 @@ const isFileManagementImageOnlyPicker = props => {
113
124
  const OWN_SCROLL_CONTAINER_ROUTES = new Set(['FileManagement', 'ConnectedApps', 'TrustLeaderboard', 'FollowersList', 'FollowingList']);
114
125
 
115
126
  /**
116
- * Resolve the surface configuration for a route + props. Defaults to the
117
- * responsive sheet; the image-only FileManagement picker upgrades to a full-bleed
118
- * `'fullScreen'` surface, and every route that owns its own scroll container is
119
- * marked `scrollable: false`.
127
+ * Resolve the surface configuration for a route + props. Every route defaults to
128
+ * the responsive sheet and MORPHS in place when navigated to from within a surface
129
+ * (no route stacks genuine overlays are Bloom-raw `surfaces.present`/`confirm`
130
+ * calls, outside this registry). The image-only FileManagement picker is a normal
131
+ * sheet that owns its own scroll + translucent bar (no Dialog nav header); every
132
+ * other own-scroller is marked `scrollable: false`.
120
133
  */
121
134
  const getSurfaceConfig = (route, props) => {
122
135
  if (route === 'FileManagement' && isFileManagementImageOnlyPicker(props)) {
123
- // The full-bleed image picker owns its own translucent top bar no nav header.
136
+ // The flagship photo picker MORPHS in place like every other screen. It is an
137
+ // own-scroller (`PhotoPickerView`'s FlatList) that paints its OWN full-bleed
138
+ // black canvas + translucent top bar INSIDE the themed panel, so it takes no
139
+ // Dialog nav header. It needs ROOM for the photo grid, so it declares an
140
+ // explicit LARGE morph target — the panel grows UP to a near-full-height,
141
+ // wider card on entry (and back down on pick→crop), the grid scrolling within.
124
142
  return {
125
143
  ...DEFAULT_SURFACE_CONFIG,
126
- presentation: 'fullScreen',
127
144
  scrollable: false,
128
- header: false
145
+ header: false,
146
+ frameSize: {
147
+ heightRatio: 0.9,
148
+ maxWidth: 640
149
+ }
129
150
  };
130
151
  }
131
152
  if (HEADERLESS_ROUTES.has(route)) {
@@ -1 +1 @@
1
- {"version":3,"names":["_registryCoversRoutes","DEFAULT_SURFACE_CONFIG","presentation","scrollable","header","manualActivation","dynamicBackdrop","HEADERLESS_ROUTES","Set","isFileManagementImageOnlyPicker","props","selectMode","disabled","disabledMimeTypes","Array","isArray","length","has","predicate","some","mt","blocksVideos","startsWith","blocksAudio","blocksDocs","OWN_SCROLL_CONTAINER_ROUTES","getSurfaceConfig","route","exports","getSurfacePresentation"],"sourceRoot":"../../../../src","sources":["ui/navigation/surfaceRegistry.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_registryCoversRoutes","DEFAULT_SURFACE_CONFIG","presentation","scrollable","header","morph","stacks","manualActivation","dynamicBackdrop","HEADERLESS_ROUTES","Set","isFileManagementImageOnlyPicker","props","selectMode","disabled","disabledMimeTypes","Array","isArray","length","has","predicate","some","mt","blocksVideos","startsWith","blocksAudio","blocksDocs","OWN_SCROLL_CONTAINER_ROUTES","getSurfaceConfig","route","frameSize","heightRatio","maxWidth","exports","getSurfacePresentation"],"sourceRoot":"../../../../src","sources":["ui/navigation/surfaceRegistry.ts"],"mappings":";;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAgEA;AACA;AACA;AACA;AACA;;AAMA,MAAMA,qBAA2C,GAAG,IAAI;AACxD,KAAKA,qBAAqB;;AAE1B;;AAEA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAoEA;AACA,MAAMC,sBAA0C,GAAG;EACjDC,YAAY,EAAE,OAAO;EACrBC,UAAU,EAAE,IAAI;EAChBC,MAAM,EAAE,IAAI;EACZC,KAAK,EAAE,IAAI;EACXC,MAAM,EAAE,KAAK;EACbC,gBAAgB,EAAE,IAAI;EACtBC,eAAe,EAAE;AACnB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAAyC,GAAG,IAAIC,GAAG,CAAY,CACnE,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,CACV,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,+BAA+B,GAAIC,KAA8B,IAAc;EACnF,IAAI,CAACA,KAAK,CAACC,UAAU,EAAE,OAAO,KAAK;EACnC,MAAMC,QAAQ,GAAGF,KAAK,CAACG,iBAAiB;EACxC,IAAI,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,IAAIA,QAAQ,CAACI,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;EACnE,MAAMC,GAAG,GAAIC,SAAkC,IAC7CN,QAAQ,CAACO,IAAI,CAAEC,EAAE,IAAK,OAAOA,EAAE,KAAK,QAAQ,IAAIF,SAAS,CAACE,EAAE,CAAC,CAAC;EAChE,MAAMC,YAAY,GAAGJ,GAAG,CAAEG,EAAE,IAAKA,EAAE,KAAK,QAAQ,IAAIA,EAAE,CAACE,UAAU,CAAC,QAAQ,CAAC,CAAC;EAC5E,MAAMC,WAAW,GAAGN,GAAG,CAAEG,EAAE,IAAKA,EAAE,KAAK,QAAQ,IAAIA,EAAE,CAACE,UAAU,CAAC,QAAQ,CAAC,CAAC;EAC3E,MAAME,UAAU,GAAGP,GAAG,CACnBG,EAAE,IAAKA,EAAE,KAAK,iBAAiB,IAAIA,EAAE,KAAK,cAAc,IAAIA,EAAE,CAACE,UAAU,CAAC,cAAc,CAC3F,CAAC;EACD,OAAOD,YAAY,IAAIE,WAAW,IAAIC,UAAU;AAClD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,2BAAmD,GAAG,IAAIjB,GAAG,CAAY,CAC7E,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,CAChB,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMkB,gBAAgB,GAAGA,CAC9BC,KAAgB,EAChBjB,KAA8B,KACP;EACvB,IAAIiB,KAAK,KAAK,gBAAgB,IAAIlB,+BAA+B,CAACC,KAAK,CAAC,EAAE;IACxE;IACA;IACA;IACA;IACA;IACA;IACA,OAAO;MACL,GAAGX,sBAAsB;MACzBE,UAAU,EAAE,KAAK;MACjBC,MAAM,EAAE,KAAK;MACb0B,SAAS,EAAE;QAAEC,WAAW,EAAE,GAAG;QAAEC,QAAQ,EAAE;MAAI;IAC/C,CAAC;EACH;EACA,IAAIvB,iBAAiB,CAACU,GAAG,CAACU,KAAK,CAAC,EAAE;IAChC,OAAO;MAAE,GAAG5B,sBAAsB;MAAEG,MAAM,EAAE;IAAM,CAAC;EACrD;EACA,IAAIuB,2BAA2B,CAACR,GAAG,CAACU,KAAK,CAAC,EAAE;IAC1C;IACA;IACA,OAAO;MAAE,GAAG5B,sBAAsB;MAAEE,UAAU,EAAE;IAAM,CAAC;EACzD;EACA,OAAOF,sBAAsB;AAC/B,CAAC;;AAED;AAAAgC,OAAA,CAAAL,gBAAA,GAAAA,gBAAA;AACO,MAAMM,sBAAsB,GAAGA,CACpCL,KAAgB,EAChBjB,KAA8B,KACNgB,gBAAgB,CAACC,KAAK,EAAEjB,KAAK,CAAC,CAACV,YAAY;AAAC+B,OAAA,CAAAC,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -5,11 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.closeAllRouteSurfaces = closeAllRouteSurfaces;
7
7
  exports.navigateWithinOrPresent = navigateWithinOrPresent;
8
+ exports.openWithinOrPresent = openWithinOrPresent;
8
9
  exports.present = present;
9
10
  exports.presentDetached = presentDetached;
10
11
  exports.presentRoute = presentRoute;
11
12
  exports.replaceWithinOrPresent = replaceWithinOrPresent;
12
13
  exports.surfaces = void 0;
14
+ exports.topMorphableSurface = topMorphableSurface;
13
15
  exports.topRouteSurface = topRouteSurface;
14
16
  exports.useSurfaces = useSurfaces;
15
17
  var _react = require("react");
@@ -61,6 +63,11 @@ function bloomOptionsFor(config) {
61
63
  // Threaded onto every placement so a route that owns its own scroll container
62
64
  // (`scrollable: false`) opts out of the Dialog's internal ScrollView.
63
65
  const scrollable = config.scrollable;
66
+ // Surface-level morph opt-out (the DEPTH axis is untouched — this only governs
67
+ // whether the panel reshapes when the content is swapped in place). Each frame
68
+ // additionally declares its own opt-out through `useDialogFrame` in
69
+ // `SurfaceScreen`, so a surface can morph for most routes and not for one.
70
+ const morph = config.morph;
64
71
  // Nav-header mode marker: turns on the Dialog's OWN sticky gradient nav bar +
65
72
  // large collapsing title over its scroll content. The title/subtitle/action
66
73
  // slots are contributed at runtime by the mounted screen via `useSurfaceHeader`
@@ -74,6 +81,7 @@ function bloomOptionsFor(config) {
74
81
  placement: 'center',
75
82
  scrollable,
76
83
  header,
84
+ morph,
77
85
  ...SDK_SURFACE_CHROME
78
86
  };
79
87
  case 'drawer':
@@ -84,6 +92,7 @@ function bloomOptionsFor(config) {
84
92
  },
85
93
  scrollable,
86
94
  header,
95
+ morph,
87
96
  ...SDK_SURFACE_CHROME
88
97
  };
89
98
  case 'fullScreen':
@@ -97,6 +106,7 @@ function bloomOptionsFor(config) {
97
106
  maxHeightRatio: 0.9,
98
107
  dismissOnBackdrop: false,
99
108
  scrollable,
109
+ morph,
100
110
  style: FULLSCREEN_SURFACE_STYLE,
101
111
  panelStyle: FULLSCREEN_SURFACE_STYLE
102
112
  };
@@ -105,6 +115,7 @@ function bloomOptionsFor(config) {
105
115
  placement: SHEET_PLACEMENT,
106
116
  scrollable,
107
117
  header,
118
+ morph,
108
119
  ...SDK_SURFACE_CHROME
109
120
  };
110
121
  }
@@ -121,6 +132,8 @@ function bloomOptionsFor(config) {
121
132
  * The type-erased handle the `showBottomSheet` adapter needs from a tracked
122
133
  * surface: what it hosts, and how to drive/dismiss it. Kept result-type-free so
123
134
  * the (generic) `SurfaceInstance<K>` never has to be widened into a shared array.
135
+ * Exported so `OxyContext` can hold the surface it MORPHS the account dialog into
136
+ * (see {@link topRouteSurface}).
124
137
  */
125
138
 
126
139
  /**
@@ -130,6 +143,17 @@ function bloomOptionsFor(config) {
130
143
  * navigable base. Entries self-remove when their surface is dismissed.
131
144
  */
132
145
  const activeRouteSurfaces = [];
146
+
147
+ /**
148
+ * The frontmost DETACHED surface (the AccountDialog), while open. Detached
149
+ * surfaces are kept OUT of `activeRouteSurfaces` so `closeAllRouteSurfaces` never
150
+ * touches them — but the AccountDialog IS a valid morph target: a result-bearing
151
+ * flow opened from within it (the account-menu hero avatar → `ChangeAvatar`) must
152
+ * morph INTO it, not stack a new surface behind it. Invariant: whenever set, this
153
+ * surface is frontmost — every account-menu action that opens a tracked surface
154
+ * (Manage, Help, …) dismisses the dialog FIRST, so the two never overlap.
155
+ */
156
+ let detachedFrontSurface = null;
133
157
  function presentInternal(route, props, opts, track) {
134
158
  const navStack = (0, _surfaceNavStack.createSurfaceNavStack)(route, props);
135
159
  const config = (0, _surfaceRegistry.getSurfaceConfig)(route, props);
@@ -141,12 +165,10 @@ function presentInternal(route, props, opts, track) {
141
165
  const result = _surfaces.surfaces.present(surface => /*#__PURE__*/(0, _react.createElement)(_SurfaceScreen.default, {
142
166
  navStack,
143
167
  surface,
144
- presentation: config.presentation,
145
168
  dismissOnBackdrop: bloomOpts.dismissOnBackdrop ?? true
146
169
  }), bloomOpts);
147
170
  const instance = {
148
171
  route,
149
- presentation: config.presentation,
150
172
  navigate: (nextRoute, nextProps) => {
151
173
  const top = navStack.getTop();
152
174
  if (top.route === nextRoute) navStack.replace(nextRoute, nextProps);else navStack.navigate(nextRoute, nextProps);
@@ -155,22 +177,35 @@ function presentInternal(route, props, opts, track) {
155
177
  goBack: () => navStack.goBack(),
156
178
  canGoBack: () => navStack.canGoBack(),
157
179
  setStep: step => navStack.setStep(step),
180
+ beginFlow: (nextRoute, nextProps) => navStack.beginFlow(nextRoute, nextProps),
158
181
  dismiss: dismissResult => navStack.requestDismiss(dismissResult),
159
182
  result
160
183
  };
184
+
185
+ // If the surface is torn down (backdrop, `closeAll`, host unmount) while a
186
+ // result-bearing sub-flow is still open, settle that flow so an awaiting caller
187
+ // never hangs. Runs for tracked and detached surfaces alike.
188
+ result.finally(() => navStack.abandonActiveFlow());
189
+ const tracked = {
190
+ route: instance.route,
191
+ navigate: instance.navigate,
192
+ goBack: instance.goBack,
193
+ beginFlow: instance.beginFlow,
194
+ dismiss: () => instance.dismiss()
195
+ };
161
196
  if (track) {
162
- const tracked = {
163
- route: instance.route,
164
- presentation: instance.presentation,
165
- navigate: instance.navigate,
166
- goBack: instance.goBack,
167
- dismiss: () => instance.dismiss()
168
- };
169
197
  activeRouteSurfaces.push(tracked);
170
198
  result.finally(() => {
171
199
  const index = activeRouteSurfaces.indexOf(tracked);
172
200
  if (index >= 0) activeRouteSurfaces.splice(index, 1);
173
201
  });
202
+ } else {
203
+ // Detached (the AccountDialog): NOT in the closeAll lineage, but recorded as
204
+ // the frontmost morph target so a flow opened from within it morphs IN.
205
+ detachedFrontSurface = tracked;
206
+ result.finally(() => {
207
+ if (detachedFrontSurface === tracked) detachedFrontSurface = null;
208
+ });
174
209
  }
175
210
  return instance;
176
211
  }
@@ -204,6 +239,16 @@ function topRouteSurface() {
204
239
  return activeRouteSurfaces[activeRouteSurfaces.length - 1];
205
240
  }
206
241
 
242
+ /**
243
+ * The frontmost surface a result-bearing flow should morph INTO: the detached
244
+ * AccountDialog if open (it sits on top of everything), else the top tracked
245
+ * route surface. Used by {@link openWithinOrPresent} so the account-menu hero
246
+ * avatar morphs the dialog into `ChangeAvatar` instead of stacking a new surface.
247
+ */
248
+ function topMorphableSurface() {
249
+ return detachedFrontSurface ?? topRouteSurface();
250
+ }
251
+
207
252
  /**
208
253
  * Dismiss every active route surface (the whole `showBottomSheet` session). The
209
254
  * AccountDialog is untracked, so it is untouched. Iterates a snapshot because
@@ -214,27 +259,59 @@ function closeAllRouteSurfaces() {
214
259
  }
215
260
 
216
261
  /**
217
- * Drill in from a screen: navigate WITHIN the current surface when the target's
218
- * presentation matches, else present the target as a NEW surface on top (so a
219
- * sheet screen opening the full-bleed picker gets the right chrome).
262
+ * Drill in from a screen. From inside a surface the DEFAULT is to navigate WITHIN
263
+ * it the panel MORPHS from the current frame's size to the next's. EVERY screen
264
+ * morphs; a NEW surface is stacked on top ONLY when the target route declares
265
+ * `stacks` (reserved for genuine overlays — none today, since action sheets /
266
+ * confirms / prompts are Bloom-raw `surfaces.present` calls outside this
267
+ * registry). A stacked surface gets its own backdrop + entry animation; dismissing
268
+ * it unwinds back to the surface that opened it.
220
269
  */
221
- function navigateWithinOrPresent(currentPresentation, navStack, route, props) {
270
+ function navigateWithinOrPresent(navStack, route, props) {
222
271
  const nextProps = props ?? {};
223
- if ((0, _surfaceRegistry.getSurfacePresentation)(route, nextProps) === currentPresentation) {
224
- navStack.navigate(route, nextProps);
225
- } else {
272
+ if ((0, _surfaceRegistry.getSurfaceConfig)(route, nextProps).stacks) {
226
273
  presentRoute(route, nextProps);
274
+ } else {
275
+ navStack.navigate(route, nextProps);
227
276
  }
228
277
  }
229
278
 
230
- /** Replace variant of {@link navigateWithinOrPresent}. */
231
- function replaceWithinOrPresent(currentPresentation, navStack, route, props) {
279
+ /** Replace variant of {@link navigateWithinOrPresent} (swaps the top frame). */
280
+ function replaceWithinOrPresent(navStack, route, props) {
232
281
  const nextProps = props ?? {};
233
- if ((0, _surfaceRegistry.getSurfacePresentation)(route, nextProps) === currentPresentation) {
234
- navStack.replace(route, nextProps);
235
- } else {
282
+ if ((0, _surfaceRegistry.getSurfaceConfig)(route, nextProps).stacks) {
236
283
  presentRoute(route, nextProps);
284
+ } else {
285
+ navStack.replace(route, nextProps);
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Open a result-bearing route the SAME way a drill-in navigates (the morph-by-
291
+ * default rule), but returning the route's dismissal RESULT to the caller.
292
+ *
293
+ * When a surface is already open and the target morphs into it (the default —
294
+ * anything not marked `stacks`), it runs as a SUB-FLOW inside that surface: the
295
+ * panel morphs from the current screen into the target, and the promise resolves
296
+ * with the target's `dismiss(result)` (or `undefined` when cancelled), popping
297
+ * back to the caller's frame WITHOUT closing the host. Otherwise (no surface, or a
298
+ * route that stacks) it presents a fresh surface and resolves with its dismissal —
299
+ * identical to the historical `present(route).result`.
300
+ *
301
+ * The entry seam for the avatar picker AND its nested "My Oxy files" media
302
+ * selector: each awaits its result whether it morphed into the caller's surface
303
+ * or opened cold, with no morph-vs-present branch of its own.
304
+ */
305
+ function openWithinOrPresent(route, props) {
306
+ const nextProps = props ?? {};
307
+ const host = topMorphableSurface();
308
+ if (host && !(0, _surfaceRegistry.getSurfaceConfig)(route, nextProps).stacks) {
309
+ // Morph: run as a sub-flow inside the host. The erased `Promise<unknown>` is
310
+ // narrowed to this route's result at the typed boundary (the sub-flow resolves
311
+ // with exactly the value a descendant screen passes to `dismiss(result)`).
312
+ return host.beginFlow(route, nextProps);
237
313
  }
314
+ return present(route, props).result;
238
315
  }
239
316
 
240
317
  /**