@oxyhq/services 22.8.7 → 22.9.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 (116) hide show
  1. package/lib/commonjs/ui/components/OxyAccountDialog.js +30 -39
  2. package/lib/commonjs/ui/components/OxyAccountDialog.js.map +1 -1
  3. package/lib/commonjs/ui/components/OxyProvider.js +9 -29
  4. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  5. package/lib/commonjs/ui/components/SurfaceScreen.js +146 -0
  6. package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -0
  7. package/lib/commonjs/ui/context/OxyContext.js +32 -1
  8. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  9. package/lib/commonjs/ui/navigation/bottomSheetManager.js +38 -56
  10. package/lib/commonjs/ui/navigation/bottomSheetManager.js.map +1 -1
  11. package/lib/commonjs/ui/navigation/routes.js +7 -57
  12. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  13. package/lib/commonjs/ui/navigation/surfaceNavStack.js +98 -0
  14. package/lib/commonjs/ui/navigation/surfaceNavStack.js.map +1 -0
  15. package/lib/commonjs/ui/navigation/surfaceRegistry.js +108 -0
  16. package/lib/commonjs/ui/navigation/surfaceRegistry.js.map +1 -0
  17. package/lib/commonjs/ui/navigation/surfaces.js +219 -0
  18. package/lib/commonjs/ui/navigation/surfaces.js.map +1 -0
  19. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js +9 -7
  20. package/lib/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  21. package/lib/commonjs/ui/types/surfaceScreen.js +6 -0
  22. package/lib/commonjs/ui/types/surfaceScreen.js.map +1 -0
  23. package/lib/module/ui/components/OxyAccountDialog.js +31 -40
  24. package/lib/module/ui/components/OxyAccountDialog.js.map +1 -1
  25. package/lib/module/ui/components/OxyProvider.js +10 -30
  26. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  27. package/lib/module/ui/components/SurfaceScreen.js +141 -0
  28. package/lib/module/ui/components/SurfaceScreen.js.map +1 -0
  29. package/lib/module/ui/context/OxyContext.js +32 -1
  30. package/lib/module/ui/context/OxyContext.js.map +1 -1
  31. package/lib/module/ui/navigation/bottomSheetManager.js +37 -53
  32. package/lib/module/ui/navigation/bottomSheetManager.js.map +1 -1
  33. package/lib/module/ui/navigation/routes.js +6 -56
  34. package/lib/module/ui/navigation/routes.js.map +1 -1
  35. package/lib/module/ui/navigation/surfaceNavStack.js +95 -0
  36. package/lib/module/ui/navigation/surfaceNavStack.js.map +1 -0
  37. package/lib/module/ui/navigation/surfaceRegistry.js +102 -0
  38. package/lib/module/ui/navigation/surfaceRegistry.js.map +1 -0
  39. package/lib/module/ui/navigation/surfaces.js +207 -0
  40. package/lib/module/ui/navigation/surfaces.js.map +1 -0
  41. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js +8 -7
  42. package/lib/module/ui/screens/fileManagement/hooks/useFileUploadState.js.map +1 -1
  43. package/lib/module/ui/types/surfaceScreen.js +4 -0
  44. package/lib/module/ui/types/surfaceScreen.js.map +1 -0
  45. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts +29 -27
  46. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +3 -2
  48. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts +24 -0
  50. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts.map +1 -0
  51. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  52. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +24 -16
  53. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  54. package/lib/typescript/commonjs/ui/navigation/routes.d.ts +2 -60
  55. package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/ui/navigation/surfaceNavStack.d.ts +51 -0
  57. package/lib/typescript/commonjs/ui/navigation/surfaceNavStack.d.ts.map +1 -0
  58. package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts +117 -0
  59. package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts.map +1 -0
  60. package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts +79 -0
  61. package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts.map +1 -0
  62. package/lib/typescript/commonjs/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  63. package/lib/typescript/commonjs/ui/types/surfaceScreen.d.ts +38 -0
  64. package/lib/typescript/commonjs/ui/types/surfaceScreen.d.ts.map +1 -0
  65. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts +29 -27
  66. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts.map +1 -1
  67. package/lib/typescript/module/ui/components/OxyProvider.d.ts +3 -2
  68. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  69. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts +24 -0
  70. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts.map +1 -0
  71. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  72. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +24 -16
  73. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  74. package/lib/typescript/module/ui/navigation/routes.d.ts +2 -60
  75. package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
  76. package/lib/typescript/module/ui/navigation/surfaceNavStack.d.ts +51 -0
  77. package/lib/typescript/module/ui/navigation/surfaceNavStack.d.ts.map +1 -0
  78. package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts +117 -0
  79. package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts.map +1 -0
  80. package/lib/typescript/module/ui/navigation/surfaces.d.ts +79 -0
  81. package/lib/typescript/module/ui/navigation/surfaces.d.ts.map +1 -0
  82. package/lib/typescript/module/ui/screens/fileManagement/hooks/useFileUploadState.d.ts.map +1 -1
  83. package/lib/typescript/module/ui/types/surfaceScreen.d.ts +38 -0
  84. package/lib/typescript/module/ui/types/surfaceScreen.d.ts.map +1 -0
  85. package/package.json +2 -2
  86. package/src/ui/components/OxyAccountDialog.tsx +32 -38
  87. package/src/ui/components/OxyProvider.tsx +12 -34
  88. package/src/ui/components/SurfaceScreen.tsx +166 -0
  89. package/src/ui/context/OxyContext.tsx +27 -1
  90. package/src/ui/navigation/__tests__/getSurfaceConfig.test.ts +39 -0
  91. package/src/ui/navigation/bottomSheetManager.ts +46 -73
  92. package/src/ui/navigation/routes.ts +7 -106
  93. package/src/ui/navigation/surfaceNavStack.ts +110 -0
  94. package/src/ui/navigation/surfaceRegistry.ts +174 -0
  95. package/src/ui/navigation/surfaces.ts +244 -0
  96. package/src/ui/screens/fileManagement/hooks/useFileUploadState.ts +9 -7
  97. package/src/ui/types/surfaceScreen.ts +38 -0
  98. package/lib/commonjs/ui/components/BottomSheet.js +0 -49
  99. package/lib/commonjs/ui/components/BottomSheet.js.map +0 -1
  100. package/lib/commonjs/ui/components/BottomSheetRouter.js +0 -298
  101. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +0 -1
  102. package/lib/module/ui/components/BottomSheet.js +0 -45
  103. package/lib/module/ui/components/BottomSheet.js.map +0 -1
  104. package/lib/module/ui/components/BottomSheetRouter.js +0 -292
  105. package/lib/module/ui/components/BottomSheetRouter.js.map +0 -1
  106. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts +0 -29
  107. package/lib/typescript/commonjs/ui/components/BottomSheet.d.ts.map +0 -1
  108. package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts +0 -9
  109. package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +0 -1
  110. package/lib/typescript/module/ui/components/BottomSheet.d.ts +0 -29
  111. package/lib/typescript/module/ui/components/BottomSheet.d.ts.map +0 -1
  112. package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts +0 -9
  113. package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +0 -1
  114. package/src/ui/components/BottomSheet.tsx +0 -48
  115. package/src/ui/components/BottomSheetRouter.tsx +0 -310
  116. package/src/ui/navigation/__tests__/getSheetConfig.test.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"names":["isValidRoute","createStore","initialState","currentScreen","screenProps","currentStep","undefined","history","isOpen","fullScreen","bottomSheetStore","getState","showBottomSheet","screenOrConfig","screen","props","__DEV__","console","warn","state","setState","step","initialStep","closeBottomSheet","goBack","length","prev","slice","updateState","updates"],"sourceRoot":"../../../../src","sources":["ui/navigation/bottomSheetManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isValidRoute","getSurfacePresentation","closeAllRouteSurfaces","presentRoute","topRouteSurface","showBottomSheet","screenOrConfig","screen","props","__DEV__","console","warn","top","presentation","navigate","closeBottomSheet","goBack"],"sourceRoot":"../../../../src","sources":["ui/navigation/bottomSheetManager.ts"],"mappings":";;AACA,SAASA,YAAY,QAAQ,aAAU;AACvC,SAASC,sBAAsB,QAAQ,sBAAmB;AAC1D,SAASC,qBAAqB,EAAEC,YAAY,EAAEC,eAAe,QAAQ,eAAY;;AAEjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,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,CAACR,YAAY,CAACO,MAAM,CAAC,EAAE;IACzB,IAAIE,OAAO,EAAEC,OAAO,CAACC,IAAI,CAAC,gCAAgCJ,MAAM,EAAE,CAAC;IACnE;EACF;EAEA,MAAMK,GAAG,GAAGR,eAAe,CAAC,CAAC;EAC7B,IAAIQ,GAAG,IAAIA,GAAG,CAACC,YAAY,KAAKZ,sBAAsB,CAACM,MAAM,EAAEC,KAAK,CAAC,EAAE;IACrEI,GAAG,CAACE,QAAQ,CAACP,MAAM,EAAEC,KAAK,CAAC;EAC7B,CAAC,MAAM;IACLL,YAAY,CAACI,MAAM,EAAEC,KAAK,CAAC;EAC7B;AACF,CAAC;;AAED;AACA,OAAO,MAAMO,gBAAgB,GAAGA,CAAA,KAAY;EAC1Cb,qBAAqB,CAAC,CAAC;AACzB,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,MAAMc,MAAM,GAAGA,CAAA,KAAe;EACnC,MAAMJ,GAAG,GAAGR,eAAe,CAAC,CAAC;EAC7B,OAAOQ,GAAG,GAAGA,GAAG,CAACI,MAAM,CAAC,CAAC,GAAG,KAAK;AACnC,CAAC","ignoreList":[]}
@@ -6,7 +6,7 @@
6
6
 
7
7
  // Define all available route names
8
8
 
9
- // General user preferences (theme, reduce-motion, etc.)
9
+ // Unified account switcher + sign-in surface (folded OxyAccountDialog body)
10
10
 
11
11
  // Lazy screen loaders - functions that return screen components on-demand
12
12
  // This breaks the require cycle by deferring imports until screens are actually needed
@@ -49,7 +49,11 @@ const screenLoaders = {
49
49
  AvatarCrop: () => require('../screens/AvatarCropScreen').default,
50
50
  Notifications: () => require('../screens/NotificationsScreen').default,
51
51
  ConnectedApps: () => require('../screens/ConnectedAppsScreen').default,
52
- Preferences: () => require('../screens/PreferencesScreen').default
52
+ Preferences: () => require('../screens/PreferencesScreen').default,
53
+ // Unified account switcher + sign-in surface. Its body lives in the
54
+ // `OxyAccountDialog` component (folded from the standalone dialog); the
55
+ // surface stack provides the Dialog chrome around it.
56
+ AccountDialog: () => require('../components/OxyAccountDialog').default
53
57
  };
54
58
 
55
59
  // Cache loaded components to avoid re-requiring
@@ -84,58 +88,4 @@ export const getScreenComponent = routeName => {
84
88
  export const isValidRoute = routeName => {
85
89
  return routeName in screenLoaders;
86
90
  };
87
-
88
- /**
89
- * Configuration that BottomSheetRouter applies to the underlying BottomSheet
90
- * for a given route. Adding new options here is additive — never rename or
91
- * remove fields without bumping the consumer surface as a breaking change.
92
- */
93
-
94
- /**
95
- * Predicate matching FileManagementScreen's internal `isImageOnlyPicker`
96
- * derivation. When the consumer restricts to image MIME types (no videos,
97
- * no audio, no documents), FileManagement renders the flagship PhotoPickerView
98
- * which owns its own FlatList. The sheet must therefore stop scrolling
99
- * children. Kept in sync with `FileManagementScreen` — both check the same
100
- * disabled MIME type families.
101
- */
102
- const isFileManagementImageOnlyPicker = props => {
103
- if (!props.selectMode) return false;
104
- const disabled = props.disabledMimeTypes;
105
- if (!Array.isArray(disabled) || disabled.length === 0) return false;
106
- const has = predicate => disabled.some(mt => typeof mt === 'string' && predicate(mt));
107
- const blocksVideos = has(mt => mt === 'video/' || mt.startsWith('video/'));
108
- const blocksAudio = has(mt => mt === 'audio/' || mt.startsWith('audio/'));
109
- const blocksDocs = has(mt => mt === 'application/pdf' || mt === 'application/' || mt.startsWith('application/'));
110
- return blocksVideos && blocksAudio && blocksDocs;
111
- };
112
-
113
- /** Defaults shared across all routes — preserves the historical in-tree BS UX. */
114
- const DEFAULT_SHEET_CONFIG = {
115
- presentation: 'sheet',
116
- scrollable: true,
117
- manualActivation: true,
118
- dynamicBackdrop: true
119
- };
120
-
121
- /**
122
- * Returns the bottom-sheet configuration for a route. Defaults match the
123
- * pre-refactor in-tree `BottomSheet` (scrollable, manualActivation,
124
- * dynamicBackdrop). Routes opt out per-field as needed.
125
- */
126
- export const getSheetConfig = (routeName, screenProps) => {
127
- if (!routeName) return DEFAULT_SHEET_CONFIG;
128
- if (routeName === 'FileManagement' && isFileManagementImageOnlyPicker(screenProps)) {
129
- // The flagship photo picker renders in a responsive Bloom `<Dialog>`
130
- // (bottom-sheet on narrow, centered card on `md+`) rather than the
131
- // in-tree BottomSheet — it owns its own FlatList and reads better as a
132
- // centered panel on wide viewports. The Dialog surface, not this
133
- // config's `scrollable`, governs its scrolling.
134
- return {
135
- ...DEFAULT_SHEET_CONFIG,
136
- presentation: 'dialog'
137
- };
138
- }
139
- return DEFAULT_SHEET_CONFIG;
140
- };
141
91
  //# sourceMappingURL=routes.js.map
@@ -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","screenCache","Map","getScreenComponent","routeName","has","get","loader","component","set","error","__DEV__","console","undefined","isValidRoute","isFileManagementImageOnlyPicker","props","selectMode","disabled","disabledMimeTypes","Array","isArray","length","predicate","some","mt","blocksVideos","startsWith","blocksAudio","blocksDocs","DEFAULT_SHEET_CONFIG","presentation","scrollable","manualActivation","dynamicBackdrop","getSheetConfig","screenProps"],"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","AvatarCrop","Notifications","ConnectedApps","Preferences","AccountDialog","screenCache","Map","getScreenComponent","routeName","has","get","loader","component","set","error","__DEV__","console","undefined","isValidRoute"],"sourceRoot":"../../../../src","sources":["ui/navigation/routes.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ import { createStore } from 'zustand/vanilla';
4
+
5
+ /**
6
+ * Per-surface route history — the NAV-WITHIN axis.
7
+ *
8
+ * Bloom's surface stack owns DEPTH (a surface presented on top of another). This
9
+ * store owns the ORTHOGONAL axis: the route history INSIDE one SDK surface. Each
10
+ * SDK surface holds its own {@link SurfaceNavStack}; `navigate`/`replace`/`goBack`
11
+ * mutate it and the SAME Bloom surface re-renders its content from the new top
12
+ * frame. It is the per-surface reincarnation of the old global
13
+ * `bottomSheetStore`'s `history` + `currentStep`.
14
+ *
15
+ * `closing`/`closeResult` model a pending dismissal: the surface's `SurfaceScreen`
16
+ * watches them and calls the Bloom surface's `dismiss(result)` from an effect —
17
+ * so a dismiss requested BEFORE the surface has mounted still resolves once it
18
+ * does, with no controls-capture race and no render-phase side effect.
19
+ */
20
+
21
+ /** One frame in a surface's route history. */
22
+
23
+ function makeFrame(route, props) {
24
+ const resolved = props ?? {};
25
+ const step = typeof resolved.initialStep === 'number' ? resolved.initialStep : 0;
26
+ return {
27
+ route,
28
+ props: resolved,
29
+ step
30
+ };
31
+ }
32
+ export function createSurfaceNavStack(route, props) {
33
+ const store = createStore(() => ({
34
+ frames: [makeFrame(route, props)],
35
+ closing: false,
36
+ closeResult: undefined
37
+ }));
38
+ const getTop = () => {
39
+ const {
40
+ frames
41
+ } = store.getState();
42
+ return frames[frames.length - 1];
43
+ };
44
+ return {
45
+ store,
46
+ getTop,
47
+ navigate(nextRoute, nextProps) {
48
+ store.setState(state => ({
49
+ frames: [...state.frames, makeFrame(nextRoute, nextProps)]
50
+ }));
51
+ },
52
+ replace(nextRoute, nextProps) {
53
+ store.setState(state => ({
54
+ frames: [...state.frames.slice(0, -1), makeFrame(nextRoute, nextProps)]
55
+ }));
56
+ },
57
+ goBack() {
58
+ const {
59
+ frames
60
+ } = store.getState();
61
+ if (frames.length <= 1) return false;
62
+ store.setState({
63
+ frames: frames.slice(0, -1)
64
+ });
65
+ return true;
66
+ },
67
+ canGoBack() {
68
+ const {
69
+ frames
70
+ } = store.getState();
71
+ return frames.length > 1 || (frames[frames.length - 1]?.step ?? 0) > 0;
72
+ },
73
+ setStep(step) {
74
+ store.setState(state => {
75
+ const frames = state.frames.slice();
76
+ const index = frames.length - 1;
77
+ frames[index] = {
78
+ ...frames[index],
79
+ step
80
+ };
81
+ return {
82
+ frames
83
+ };
84
+ });
85
+ },
86
+ requestDismiss(result) {
87
+ if (store.getState().closing) return;
88
+ store.setState({
89
+ closing: true,
90
+ closeResult: result
91
+ });
92
+ }
93
+ };
94
+ }
95
+ //# sourceMappingURL=surfaceNavStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createStore","makeFrame","route","props","resolved","step","initialStep","createSurfaceNavStack","store","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":[]}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The SDK's typed surface registry — the contract layer the SDK stacks on top of
5
+ * Bloom's content-agnostic surface stack (`@oxyhq/bloom/surfaces`). One entry per
6
+ * route describing its `props` (what the presenter must pass) and its `result`
7
+ * (what awaiting `present()` resolves with). Hand-maintained, contract-first:
8
+ * adding a route here is the single edit that types it end to end.
9
+ *
10
+ * For P1 most routes keep permissive `Record<string, unknown>` props + a `void`
11
+ * result — the historical grab-bag `showBottomSheet`/`navigate` props are
12
+ * unchanged. Later phases tighten individual routes without changing this shape.
13
+ */
14
+
15
+ /** One registry entry: the props a route is presented with + its dismissal result. */
16
+
17
+ /**
18
+ * Compile-time guard: the registry keys must be EXACTLY the route names. If a new
19
+ * `RouteName` is added without a registry entry (or vice-versa) this alias
20
+ * resolves to `never` and the `satisfies` assertion below fails to type-check.
21
+ */
22
+
23
+ const _registryCoversRoutes = true;
24
+ void _registryCoversRoutes;
25
+
26
+ /** Typed props a route is presented with. */
27
+
28
+ /** What awaiting a route's `present()` resolves with when it is dismissed. */
29
+
30
+ /**
31
+ * How a surface renders — the SDK's presentation taxonomy. Each value maps to a
32
+ * concrete Bloom `Dialog` placement/chrome in `surfaces.ts`:
33
+ *
34
+ * - `'sheet'` → responsive `{ base: 'bottom', md: 'center' }` (the default:
35
+ * a bottom sheet on narrow viewports, a centered card on wide).
36
+ * - `'center'` → a plain centered modal at every width.
37
+ * - `'drawer'` → responsive `{ base: 'bottom', md: 'left' }` side drawer.
38
+ * - `'fullScreen'` → approximated with the shared `Dialog`: a full-height sheet /
39
+ * large centered card, flush (`contentPadding: 0`) content, a
40
+ * black canvas and programmatic-only dismiss (the flagship
41
+ * image picker). A real Bloom `'fullScreen'` placement is a
42
+ * follow-up if the approximation reads wrong on device.
43
+ */
44
+
45
+ /**
46
+ * Per-route surface configuration. Merges the historical `SheetRouteConfig`
47
+ * knobs with the new {@link SurfacePresentation}.
48
+ *
49
+ * NOTE: `scrollable` / `manualActivation` / `dynamicBackdrop` / `handleComponent`
50
+ * describe the in-tree bottom-sheet's pan + scroll behaviour. On Bloom's `Dialog`
51
+ * surface those concerns are now owned by the shared `DialogBottomSheet` (it opts
52
+ * pure custom children OUT of its internal ScrollView and manages the pan itself),
53
+ * so for P1 these fields are informational — reserved for a future Bloom
54
+ * bottom-placement passthrough. `presentation` (+ `scrollable` for the picker's
55
+ * flush layout) is what actually drives the surface today.
56
+ */
57
+
58
+ /** Defaults shared across all routes — the canonical responsive "sheet". */
59
+ const DEFAULT_SURFACE_CONFIG = {
60
+ presentation: 'sheet',
61
+ scrollable: true,
62
+ manualActivation: true,
63
+ dynamicBackdrop: true
64
+ };
65
+
66
+ /**
67
+ * Predicate matching `FileManagementScreen`'s internal `isImageOnlyPicker`
68
+ * derivation. When the consumer restricts to image MIME types (no videos, no
69
+ * audio, no documents), FileManagement renders the flagship `PhotoPickerView`,
70
+ * which owns its own FlatList and reads best as a full-bleed picker. Kept in sync
71
+ * with `FileManagementScreen` — both check the same disabled MIME type families.
72
+ */
73
+ const isFileManagementImageOnlyPicker = props => {
74
+ if (!props.selectMode) return false;
75
+ const disabled = props.disabledMimeTypes;
76
+ if (!Array.isArray(disabled) || disabled.length === 0) return false;
77
+ const has = predicate => disabled.some(mt => typeof mt === 'string' && predicate(mt));
78
+ const blocksVideos = has(mt => mt === 'video/' || mt.startsWith('video/'));
79
+ const blocksAudio = has(mt => mt === 'audio/' || mt.startsWith('audio/'));
80
+ const blocksDocs = has(mt => mt === 'application/pdf' || mt === 'application/' || mt.startsWith('application/'));
81
+ return blocksVideos && blocksAudio && blocksDocs;
82
+ };
83
+
84
+ /**
85
+ * Resolve the surface configuration for a route + props. Defaults to the
86
+ * responsive sheet; the image-only FileManagement picker upgrades to a full-bleed
87
+ * `'fullScreen'` surface that owns its own scrolling.
88
+ */
89
+ export const getSurfaceConfig = (route, props) => {
90
+ if (route === 'FileManagement' && isFileManagementImageOnlyPicker(props)) {
91
+ return {
92
+ ...DEFAULT_SURFACE_CONFIG,
93
+ presentation: 'fullScreen',
94
+ scrollable: false
95
+ };
96
+ }
97
+ return DEFAULT_SURFACE_CONFIG;
98
+ };
99
+
100
+ /** Convenience: just the presentation taxonomy for a route + props. */
101
+ export const getSurfacePresentation = (route, props) => getSurfaceConfig(route, props).presentation;
102
+ //# sourceMappingURL=surfaceRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_registryCoversRoutes","DEFAULT_SURFACE_CONFIG","presentation","scrollable","manualActivation","dynamicBackdrop","isFileManagementImageOnlyPicker","props","selectMode","disabled","disabledMimeTypes","Array","isArray","length","has","predicate","some","mt","blocksVideos","startsWith","blocksAudio","blocksDocs","getSurfaceConfig","route","getSurfacePresentation"],"sourceRoot":"../../../../src","sources":["ui/navigation/surfaceRegistry.ts"],"mappings":";;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AA+CA;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;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAiBA;AACA,MAAMC,sBAA0C,GAAG;EACjDC,YAAY,EAAE,OAAO;EACrBC,UAAU,EAAE,IAAI;EAChBC,gBAAgB,EAAE,IAAI;EACtBC,eAAe,EAAE;AACnB,CAAC;;AAED;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,OAAO,MAAMC,gBAAgB,GAAGA,CAC9BC,KAAgB,EAChBhB,KAA8B,KACP;EACvB,IAAIgB,KAAK,KAAK,gBAAgB,IAAIjB,+BAA+B,CAACC,KAAK,CAAC,EAAE;IACxE,OAAO;MAAE,GAAGN,sBAAsB;MAAEC,YAAY,EAAE,YAAY;MAAEC,UAAU,EAAE;IAAM,CAAC;EACrF;EACA,OAAOF,sBAAsB;AAC/B,CAAC;;AAED;AACA,OAAO,MAAMuB,sBAAsB,GAAGA,CACpCD,KAAgB,EAChBhB,KAA8B,KACNe,gBAAgB,CAACC,KAAK,EAAEhB,KAAK,CAAC,CAACL,YAAY","ignoreList":[]}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+
3
+ import { createElement } from 'react';
4
+ import { surfaces as bloomSurfaces } from '@oxyhq/bloom/surfaces';
5
+ import SurfaceScreen from "../components/SurfaceScreen.js";
6
+ import { getSurfaceConfig, getSurfacePresentation } from "./surfaceRegistry.js";
7
+ import { createSurfaceNavStack } from "./surfaceNavStack.js";
8
+
9
+ /**
10
+ * The SDK's typed surface API — a route registry layered on top of Bloom's
11
+ * content-agnostic surface stack (`@oxyhq/bloom/surfaces`).
12
+ *
13
+ * `present(route)` opens a NEW Bloom surface (the DEPTH axis) whose content is a
14
+ * {@link SurfaceScreen} driven by the route's own {@link SurfaceNavStack} (the
15
+ * NAV-WITHIN axis). Navigating within that surface mutates its nav stack and
16
+ * re-renders the SAME Bloom surface; presenting stacks another surface on top.
17
+ *
18
+ * Bloom coordinates z-order / backdrop / dismiss across every surface (SDK's and
19
+ * apps'), so nothing clashes.
20
+ */
21
+
22
+ /** Responsive "sheet": bottom sheet on narrow, centered card on wide. */
23
+ const SHEET_PLACEMENT = {
24
+ base: 'bottom',
25
+ md: 'center'
26
+ };
27
+
28
+ /** Full-bleed black canvas for the `'fullScreen'` approximation (image picker). */
29
+ const FULLSCREEN_SURFACE_STYLE = {
30
+ backgroundColor: '#000000',
31
+ overflow: 'hidden'
32
+ };
33
+
34
+ /** Map a route's presentation taxonomy onto concrete Bloom `Dialog` options. */
35
+ function bloomOptionsFor(config) {
36
+ switch (config.presentation) {
37
+ case 'center':
38
+ return {
39
+ placement: 'center'
40
+ };
41
+ case 'drawer':
42
+ return {
43
+ placement: {
44
+ base: 'bottom',
45
+ md: 'left'
46
+ }
47
+ };
48
+ case 'fullScreen':
49
+ // Approximate a full-screen surface with the shared `Dialog`: a tall
50
+ // sheet / large centered card, flush content, a black canvas and
51
+ // programmatic-only dismiss — matching the shipped image-picker Dialog.
52
+ return {
53
+ placement: SHEET_PLACEMENT,
54
+ contentPadding: 0,
55
+ maxWidth: 640,
56
+ maxHeightRatio: 0.9,
57
+ dismissOnBackdrop: false,
58
+ style: FULLSCREEN_SURFACE_STYLE,
59
+ panelStyle: FULLSCREEN_SURFACE_STYLE
60
+ };
61
+ default:
62
+ return {
63
+ placement: SHEET_PLACEMENT
64
+ };
65
+ }
66
+ }
67
+
68
+ /**
69
+ * A live handle to a presented SDK surface. Exposes DEPTH controls (`dismiss`,
70
+ * `result`) and NAV-WITHIN controls (`navigate`/`replace`/`goBack`/`setStep`) that
71
+ * drive this surface's own nav stack. Held by the `showBottomSheet` adapter (base
72
+ * surface) and by `OxyContext` (the AccountDialog surface).
73
+ */
74
+
75
+ /**
76
+ * The type-erased handle the `showBottomSheet` adapter needs from a tracked
77
+ * surface: what it hosts, and how to drive/dismiss it. Kept result-type-free so
78
+ * the (generic) `SurfaceInstance<K>` never has to be widened into a shared array.
79
+ */
80
+
81
+ /**
82
+ * Active SDK "route" surfaces (the `showBottomSheet` lineage), bottom → top.
83
+ * `present`/`presentRoute` register here; `presentDetached` (AccountDialog) does
84
+ * NOT, so the base-sheet navigation logic never treats the account modal as a
85
+ * navigable base. Entries self-remove when their surface is dismissed.
86
+ */
87
+ const activeRouteSurfaces = [];
88
+ function presentInternal(route, props, opts, track) {
89
+ const navStack = createSurfaceNavStack(route, props);
90
+ const config = getSurfaceConfig(route, props);
91
+ const bloomOpts = {
92
+ label: route,
93
+ ...bloomOptionsFor(config),
94
+ ...opts
95
+ };
96
+ const result = bloomSurfaces.present(surface => /*#__PURE__*/createElement(SurfaceScreen, {
97
+ navStack,
98
+ surface,
99
+ presentation: config.presentation
100
+ }), bloomOpts);
101
+ const instance = {
102
+ route,
103
+ presentation: config.presentation,
104
+ navigate: (nextRoute, nextProps) => navStack.navigate(nextRoute, nextProps),
105
+ replace: (nextRoute, nextProps) => navStack.replace(nextRoute, nextProps),
106
+ goBack: () => navStack.goBack(),
107
+ canGoBack: () => navStack.canGoBack(),
108
+ setStep: step => navStack.setStep(step),
109
+ dismiss: dismissResult => navStack.requestDismiss(dismissResult),
110
+ result
111
+ };
112
+ if (track) {
113
+ const tracked = {
114
+ route: instance.route,
115
+ presentation: instance.presentation,
116
+ navigate: instance.navigate,
117
+ goBack: instance.goBack,
118
+ dismiss: () => instance.dismiss()
119
+ };
120
+ activeRouteSurfaces.push(tracked);
121
+ result.finally(() => {
122
+ const index = activeRouteSurfaces.indexOf(tracked);
123
+ if (index >= 0) activeRouteSurfaces.splice(index, 1);
124
+ });
125
+ }
126
+ return instance;
127
+ }
128
+
129
+ /**
130
+ * Present a NEW route surface on top of the stack (the DEPTH axis). Resolves with
131
+ * the value the surface is dismissed with. Registered in the route-surface stack.
132
+ */
133
+ export function present(route, props, opts) {
134
+ return presentInternal(route, props ?? {}, opts, true);
135
+ }
136
+
137
+ /**
138
+ * Present a surface that is NOT part of the `showBottomSheet` base-navigation
139
+ * lineage (the AccountDialog modal). Otherwise identical to {@link present}.
140
+ */
141
+ export function presentDetached(route, props, opts) {
142
+ return presentInternal(route, props ?? {}, opts, false);
143
+ }
144
+
145
+ /**
146
+ * Untyped present for the adapter, the nav helpers, and the `SurfaceScreen`
147
+ * binding (where the route is a runtime value and its props are already erased).
148
+ */
149
+ export function presentRoute(route, props) {
150
+ return presentInternal(route, props ?? {}, undefined, true);
151
+ }
152
+
153
+ /** The top-most active route surface, or `undefined` when none are open. */
154
+ export function topRouteSurface() {
155
+ return activeRouteSurfaces[activeRouteSurfaces.length - 1];
156
+ }
157
+
158
+ /**
159
+ * Dismiss every active route surface (the whole `showBottomSheet` session). The
160
+ * AccountDialog is untracked, so it is untouched. Iterates a snapshot because
161
+ * `dismiss` mutates `activeRouteSurfaces` asynchronously as surfaces settle.
162
+ */
163
+ export function closeAllRouteSurfaces() {
164
+ for (const instance of [...activeRouteSurfaces].reverse()) instance.dismiss();
165
+ }
166
+
167
+ /**
168
+ * Drill in from a screen: navigate WITHIN the current surface when the target's
169
+ * presentation matches, else present the target as a NEW surface on top (so a
170
+ * sheet screen opening the full-bleed picker gets the right chrome).
171
+ */
172
+ export function navigateWithinOrPresent(currentPresentation, navStack, route, props) {
173
+ const nextProps = props ?? {};
174
+ if (getSurfacePresentation(route, nextProps) === currentPresentation) {
175
+ navStack.navigate(route, nextProps);
176
+ } else {
177
+ presentRoute(route, nextProps);
178
+ }
179
+ }
180
+
181
+ /** Replace variant of {@link navigateWithinOrPresent}. */
182
+ export function replaceWithinOrPresent(currentPresentation, navStack, route, props) {
183
+ const nextProps = props ?? {};
184
+ if (getSurfacePresentation(route, nextProps) === currentPresentation) {
185
+ navStack.replace(route, nextProps);
186
+ } else {
187
+ presentRoute(route, nextProps);
188
+ }
189
+ }
190
+
191
+ /**
192
+ * The SDK's imperative surface API (a module singleton). `present` is the typed
193
+ * route presenter; `dismissAll` unwinds the whole session. Not yet exported from
194
+ * the package root — the public `surfaces`/`useSurfaces` API lands in a later
195
+ * phase; for P1 the internal adapters (`showBottomSheet`, `openAccountDialog`)
196
+ * are the only public entry points.
197
+ */
198
+ export const surfaces = {
199
+ present: (route, props, opts) => present(route, props, opts).result,
200
+ dismissAll: closeAllRouteSurfaces
201
+ };
202
+
203
+ /** Hook form of {@link surfaces} (stable singleton). */
204
+ export function useSurfaces() {
205
+ return surfaces;
206
+ }
207
+ //# sourceMappingURL=surfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createElement","surfaces","bloomSurfaces","SurfaceScreen","getSurfaceConfig","getSurfacePresentation","createSurfaceNavStack","SHEET_PLACEMENT","base","md","FULLSCREEN_SURFACE_STYLE","backgroundColor","overflow","bloomOptionsFor","config","presentation","placement","contentPadding","maxWidth","maxHeightRatio","dismissOnBackdrop","style","panelStyle","activeRouteSurfaces","presentInternal","route","props","opts","track","navStack","bloomOpts","label","result","present","surface","instance","navigate","nextRoute","nextProps","replace","goBack","canGoBack","setStep","step","dismiss","dismissResult","requestDismiss","tracked","push","finally","index","indexOf","splice","presentDetached","presentRoute","undefined","topRouteSurface","length","closeAllRouteSurfaces","reverse","navigateWithinOrPresent","currentPresentation","replaceWithinOrPresent","dismissAll","useSurfaces"],"sourceRoot":"../../../../src","sources":["ui/navigation/surfaces.ts"],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,11 @@ import { toast } from '@oxyhq/bloom';
5
5
  import { useFileStore } from "../../../stores/fileStore.js";
6
6
  import { convertDocumentPickerAssetToFile, formatFileSize } from "../../../utils/fileManagement.js";
7
7
  import { createPendingUploadFile, candidateName, candidateSize, candidateType, candidateUri, getErrorMessage, loadDocumentPicker } from "../shared.js";
8
+ function revokePreviewUrl(preview) {
9
+ if (preview?.startsWith('blob:')) {
10
+ URL.revokeObjectURL(preview);
11
+ }
12
+ }
8
13
 
9
14
  /**
10
15
  * Optimistic-entry metadata. `uploading` flags the placeholder so no asset URL
@@ -310,9 +315,7 @@ export const useFileUploadState = ({
310
315
 
311
316
  // Cleanup preview URLs
312
317
  pendingFiles.forEach(pf => {
313
- if (pf.preview) {
314
- URL.revokeObjectURL(pf.preview);
315
- }
318
+ revokePreviewUrl(pf.preview);
316
319
  });
317
320
  setPendingFiles([]);
318
321
 
@@ -348,9 +351,7 @@ export const useFileUploadState = ({
348
351
  const handleCancelUpload = () => {
349
352
  // Cleanup preview URLs
350
353
  pendingFiles.forEach(pf => {
351
- if (pf.preview) {
352
- URL.revokeObjectURL(pf.preview);
353
- }
354
+ revokePreviewUrl(pf.preview);
354
355
  });
355
356
  setPendingFiles([]);
356
357
  setShowUploadPreview(false);
@@ -359,7 +360,7 @@ export const useFileUploadState = ({
359
360
  const file = pendingFiles.find(pf => pf.id === id);
360
361
  if (!file) return;
361
362
  if (file.preview) {
362
- URL.revokeObjectURL(file.preview);
363
+ revokePreviewUrl(file.preview);
363
364
  }
364
365
  const updated = pendingFiles.filter(pf => pf.id !== id);
365
366
  setPendingFiles(updated);