@oxy.so/services 11.17.0 → 12.2.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.
- package/lib/commonjs/assets/assets/one/floral.jpg.d.ts +1 -1
- package/lib/commonjs/ui/client.js +13 -0
- package/lib/commonjs/ui/client.js.map +1 -1
- package/lib/commonjs/ui/components/OxyAuthChooser.js +1 -6
- package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +6 -5
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js +2 -4
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
- package/lib/commonjs/ui/components/SafeAreaRoot.js +139 -0
- package/lib/commonjs/ui/components/SafeAreaRoot.js.map +1 -0
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js +17 -14
- package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js +10 -17
- package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
- package/lib/commonjs/ui/index.js +0 -37
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/navigation/accountDialogManager.js +5 -4
- package/lib/commonjs/ui/navigation/accountDialogManager.js.map +1 -1
- package/lib/commonjs/ui/navigation/surfaces.js +2 -2
- package/lib/commonjs/ui/one-video.js +3 -2
- package/lib/commonjs/ui/one-video.js.map +1 -1
- package/lib/commonjs/ui/screens/AvatarCropScreen.js +39 -25
- package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +4 -2
- package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/OxyOneScreen.js +3 -2
- package/lib/commonjs/ui/screens/OxyOneScreen.js.map +1 -1
- package/lib/commonjs/ui/utils/imageSize.js +31 -0
- package/lib/commonjs/ui/utils/imageSize.js.map +1 -0
- package/lib/commonjs/ui/utils/imageSize.native.js +31 -0
- package/lib/commonjs/ui/utils/imageSize.native.js.map +1 -0
- package/lib/module/assets/assets/one/floral.jpg.d.ts +1 -1
- package/lib/module/ui/client.js +3 -0
- package/lib/module/ui/client.js.map +1 -1
- package/lib/module/ui/components/OxyAuthChooser.js +1 -6
- package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +6 -5
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/ProfileButton.js +2 -4
- package/lib/module/ui/components/ProfileButton.js.map +1 -1
- package/lib/module/ui/components/SafeAreaRoot.js +135 -0
- package/lib/module/ui/components/SafeAreaRoot.js.map +1 -0
- package/lib/module/ui/components/fileManagement/FileViewer.js +18 -15
- package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
- package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js +11 -18
- package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
- package/lib/module/ui/index.js +5 -3
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/navigation/accountDialogManager.js +5 -4
- package/lib/module/ui/navigation/accountDialogManager.js.map +1 -1
- package/lib/module/ui/navigation/surfaces.js +2 -2
- package/lib/module/ui/one-video.js +4 -3
- package/lib/module/ui/one-video.js.map +1 -1
- package/lib/module/ui/screens/AvatarCropScreen.js +41 -25
- package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
- package/lib/module/ui/screens/EditProfileFieldScreen.js +5 -3
- package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
- package/lib/module/ui/screens/OxyOneScreen.js +4 -3
- package/lib/module/ui/screens/OxyOneScreen.js.map +1 -1
- package/lib/module/ui/utils/imageSize.js +26 -0
- package/lib/module/ui/utils/imageSize.js.map +1 -0
- package/lib/module/ui/utils/imageSize.native.js +26 -0
- package/lib/module/ui/utils/imageSize.native.js.map +1 -0
- package/lib/typescript/assets/one/floral.jpg.d.ts +1 -1
- package/lib/typescript/commonjs/ui/client.d.ts +3 -0
- package/lib/typescript/commonjs/ui/client.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +3 -2
- package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +0 -2
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/SafeAreaRoot.d.ts +28 -0
- package/lib/typescript/commonjs/ui/components/SafeAreaRoot.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts +5 -5
- package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/one-video.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/screens/OxyOneScreen.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/imageSize.d.ts +6 -0
- package/lib/typescript/commonjs/ui/utils/imageSize.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/utils/imageSize.native.d.ts +6 -0
- package/lib/typescript/commonjs/ui/utils/imageSize.native.d.ts.map +1 -0
- package/lib/typescript/module/ui/client.d.ts +3 -0
- package/lib/typescript/module/ui/client.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/OxyProvider.d.ts +3 -2
- package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ProfileButton.d.ts +0 -2
- package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/SafeAreaRoot.d.ts +28 -0
- package/lib/typescript/module/ui/components/SafeAreaRoot.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
- package/lib/typescript/module/ui/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts +5 -5
- package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts.map +1 -1
- package/lib/typescript/module/ui/one-video.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/screens/OxyOneScreen.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/imageSize.d.ts +6 -0
- package/lib/typescript/module/ui/utils/imageSize.d.ts.map +1 -0
- package/lib/typescript/module/ui/utils/imageSize.native.d.ts +6 -0
- package/lib/typescript/module/ui/utils/imageSize.native.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/assets/one/floral.jpg.d.ts +1 -1
- package/src/ui/client.ts +8 -0
- package/src/ui/components/OxyAuthChooser.tsx +1 -6
- package/src/ui/components/OxyProvider.tsx +7 -6
- package/src/ui/components/ProfileButton.tsx +2 -12
- package/src/ui/components/SafeAreaRoot.tsx +123 -0
- package/src/ui/components/__tests__/SafeAreaRoot.test.tsx +162 -0
- package/src/ui/components/fileManagement/FileViewer.tsx +18 -13
- package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +13 -24
- package/src/ui/index.ts +5 -4
- package/src/ui/navigation/accountDialogManager.ts +5 -5
- package/src/ui/navigation/surfaces.ts +2 -2
- package/src/ui/one-video.tsx +3 -2
- package/src/ui/screens/AvatarCropScreen.tsx +30 -25
- package/src/ui/screens/EditProfileFieldScreen.tsx +7 -2
- package/src/ui/screens/OxyOneScreen.tsx +4 -3
- package/src/ui/utils/__tests__/imageSize.test.ts +61 -0
- package/src/ui/utils/imageSize.native.ts +26 -0
- package/src/ui/utils/imageSize.ts +26 -0
|
@@ -41,21 +41,21 @@ export interface AccountDialogControls {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Optional consumer overrides for account-dialog actions. `ProfileButton` (and
|
|
44
|
-
* similar hosts) register these while mounted so
|
|
45
|
-
*
|
|
44
|
+
* similar hosts) register these while mounted so an app can route "Add account"
|
|
45
|
+
* and "Profile" to app-local navigation, and add its own menu entries. "Manage
|
|
46
|
+
* your Oxy account" is not overridable: it always opens the SDK's ManageAccount.
|
|
46
47
|
*/
|
|
47
48
|
export interface AccountDialogConsumerHooks {
|
|
48
|
-
onNavigateManage?: () => void;
|
|
49
49
|
onAddAccount?: () => void;
|
|
50
50
|
onNavigateProfile?: () => void;
|
|
51
51
|
menuItems?: readonly AccountDialogMenuItem[];
|
|
52
52
|
menuSections?: readonly AccountDialogMenuSection[];
|
|
53
53
|
}
|
|
54
54
|
export declare function registerAccountDialogControls(next: AccountDialogControls): () => void;
|
|
55
|
-
/** Register app-local
|
|
55
|
+
/** Register app-local add/profile handlers and menu entries for the account dialog. */
|
|
56
56
|
export declare function registerAccountDialogConsumerHooks(next: AccountDialogConsumerHooks | null): () => void;
|
|
57
57
|
export declare function getAccountDialogConsumerHooks(): AccountDialogConsumerHooks | null;
|
|
58
|
-
/** Subscribe to consumer-hook registration changes (menu items,
|
|
58
|
+
/** Subscribe to consumer-hook registration changes (menu items, add/profile overrides). */
|
|
59
59
|
export declare function subscribeToAccountDialogConsumerHooks(listener: () => void): () => void;
|
|
60
60
|
/** Open the account dialog on `view` (default `accounts`). No-op before mount. */
|
|
61
61
|
export declare function openAccountDialog(view?: AccountDialogView): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountDialogManager.d.ts","sourceRoot":"","sources":["../../../../../src/ui/navigation/accountDialogManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED
|
|
1
|
+
{"version":3,"file":"accountDialogManager.d.ts","sourceRoot":"","sources":["../../../../../src/ui/navigation/accountDialogManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,YAAY,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACpD;AAaD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAOrF;AAED,uFAAuF;AACvF,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,0BAA0B,GAAG,IAAI,GACtC,MAAM,IAAI,CASZ;AAED,wBAAgB,6BAA6B,IAAI,0BAA0B,GAAG,IAAI,CAEjF;AAED,2FAA2F;AAC3F,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKtF;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAEhE;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,sFAAsF;AACtF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIpE;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"one-video.d.ts","sourceRoot":"","sources":["../../../../src/ui/one-video.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"one-video.d.ts","sourceRoot":"","sources":["../../../../src/ui/one-video.tsx"],"names":[],"mappings":"AAUA,oFAAoF;AACpF,wBAAgB,WAAW,gCAiC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarCropScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/AvatarCropScreen.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AvatarCropScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/AvatarCropScreen.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsPD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0xBrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditProfileFieldScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/EditProfileFieldScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EditProfileFieldScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/EditProfileFieldScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAI9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAuB3D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,UAAU,GACV,KAAK,GACL,OAAO,GACP,SAAS,GACT,UAAU,GACV,UAAU,GACV,WAAW,GACX,OAAO,CAAC;AA4BZ,UAAU,2BAA4B,SAAQ,eAAe;IAC3D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;;AAyoBD,wBAAkD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyOneScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/OxyOneScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OxyOneScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/OxyOneScreen.tsx"],"names":[],"mappings":"AAiCA;sEACsE;AACtE,MAAM,CAAC,OAAO,UAAU,YAAY,gCA4LnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSize.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/imageSize.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAI5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSize.native.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/imageSize.native.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAUlE"}
|
|
@@ -30,6 +30,9 @@ export { default as OxyPayButton } from './components/OxyPayButton.js';
|
|
|
30
30
|
export type { OxyPayButtonProps } from './components/OxyPayButton.js';
|
|
31
31
|
export { useOxy, useOptionalOxy, OxyProviderMissingError } from './context/OxyContext.js';
|
|
32
32
|
export { useAuth } from './hooks/useAuth.js';
|
|
33
|
+
export { useAppAssertion, AppAssertionProviderMissingError, } from './appAssertion/AppAssertionContext.js';
|
|
34
|
+
export type { UseAppAssertionResult } from './appAssertion/AppAssertionContext.js';
|
|
35
|
+
export type { AppAssertionSnapshot, AppAssertionStatus } from './appAssertion/appAssertionManager.js';
|
|
33
36
|
export type { AuthState, AuthActions, SignInOutcome, UseAuthReturn } from './hooks/useAuth.js';
|
|
34
37
|
export { createDeferredProductAnalytics } from './analytics/productAnalytics.js';
|
|
35
38
|
export type { OxyProductEvent, ProductAnalytics } from './analytics/productAnalytics.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iCAA8B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA4B,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA4B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA4B,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAiC,CAAC;AACrE,YAAY,EACV,uBAAuB,EACvB,UAAU,EACV,YAAY,GACb,MAAM,oCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA4B,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA4B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA2B,CAAC;AACnE,8CAA8C;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,mDAAmD;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA2B,CAAC;AAGnE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,yBAAsB,CAAC;AAGvF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/ui/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyAuthChooser.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyAuthChooser.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6C/B,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;GAIG;AACH,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"OxyAuthChooser.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyAuthChooser.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6C/B,MAAM,WAAW,mBAAmB;IAClC,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;GAIG;AACH,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAqXjD,CAAC;AA8BF,eAAe,cAAc,CAAC"}
|
|
@@ -4,8 +4,9 @@ import type { OxyProviderProps } from '../types/navigation.js';
|
|
|
4
4
|
* OxyProvider - Universal provider for Expo apps (native + web)
|
|
5
5
|
*
|
|
6
6
|
* Provides authentication, session management, query client, and UI overlays.
|
|
7
|
-
* Wraps its own overlay stack in
|
|
8
|
-
*
|
|
7
|
+
* Wraps its own overlay stack in a safe-area root (`SafeAreaRoot`: the native
|
|
8
|
+
* SafeAreaProvider on a device, the window's metrics on web) and
|
|
9
|
+
* GestureHandlerRootView so the shared Bloom SURFACE STACK (`<SurfaceProvider>` / `<SurfaceHost>`) — which
|
|
9
10
|
* hosts every SDK surface (the ~35 bottom-sheet routes + the AccountDialog) — can
|
|
10
11
|
* safely render even when a consuming app has not mounted those providers yet.
|
|
11
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyProvider.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"OxyProvider.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/OxyProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAqB,CAAC;AAsC5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,QAAA,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAyNrC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -11,8 +11,6 @@ export interface ProfileButtonProps {
|
|
|
11
11
|
* Avatar diameter in px. Defaults to 40 when expanded, 32 when collapsed.
|
|
12
12
|
*/
|
|
13
13
|
avatarSize?: number;
|
|
14
|
-
/** Navigate to the "Manage account" surface (settings). */
|
|
15
|
-
onNavigateManage?: () => void;
|
|
16
14
|
/** Start the add-account / sign-in flow for an additional account. */
|
|
17
15
|
onAddAccount?: () => void;
|
|
18
16
|
/** Optional: navigate to the signed-in user's own profile. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBzD,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,uCAAoC,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"ProfileButton.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAkBzD,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,uCAAoC,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,6DAA6D;IAC7D,SAAS,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,wEAAwE;IACxE,YAAY,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACnD;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IACnC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,sEAAsE;AACtE,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAoI/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The safe-area root `OxyProvider` mounts around everything it renders.
|
|
3
|
+
*
|
|
4
|
+
* On iOS and Android it is react-native-safe-area-context's own
|
|
5
|
+
* `SafeAreaProvider`, which measures the native root view.
|
|
6
|
+
*
|
|
7
|
+
* On web it does NOT measure. From react-native-safe-area-context 5.9, the web
|
|
8
|
+
* provider measures its own element and reports
|
|
9
|
+
* `windowInsets.bottom - (innerHeight - rect.bottom)` as the bottom inset with
|
|
10
|
+
* no upper clamp (likewise `top - rect.top`). `OxyProvider` wraps the app's
|
|
11
|
+
* whole document, and on a page that scrolls that element is taller than the
|
|
12
|
+
* viewport, so everything below the fold became bottom inset: an 844px phone
|
|
13
|
+
* viewport with a 2690px page reported a ~1850px inset, and the mobile account
|
|
14
|
+
* dialog laid itself out empty. Web therefore gets the WINDOW's metrics — what
|
|
15
|
+
* every version before 5.9 reported for a root provider:
|
|
16
|
+
*
|
|
17
|
+
* - insets: CSS `env(safe-area-inset-*)`, read from one fixed, hidden probe
|
|
18
|
+
* after mount (zero during server rendering and hydration);
|
|
19
|
+
* - frame: the viewport (`useWindowDimensions`), never the document's height.
|
|
20
|
+
*
|
|
21
|
+
* Bloom raises its own web insets to the same `env()` values
|
|
22
|
+
* (`useCssSafeAreaInsets`), so nothing pads twice.
|
|
23
|
+
*/
|
|
24
|
+
import type { ReactNode } from 'react';
|
|
25
|
+
export declare function SafeAreaRoot({ children }: {
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
}): import("react").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=SafeAreaRoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafeAreaRoot.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/SafeAreaRoot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAcvC,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,+BAGlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileViewer.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/components/fileManagement/FileViewer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"FileViewer.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/components/fileManagement/FileViewer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjD,UAAU,eAAe;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,iFAAiF;IACjF,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CAClB;AA0BD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA2WhD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JustifiedPhotoGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/components/photogrid/JustifiedPhotoGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"JustifiedPhotoGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/components/photogrid/JustifiedPhotoGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAI9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAiCjD,6EAA6E;AAC7E,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,EAAE,CAMpF;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB;;;;OAIG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IACzD,wBAAwB,EAAE,CACxB,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,KACZ,KAAK,CAAC,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;;AA6KD,wBAA8C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iCAA8B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA4B,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA4B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA4B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAA6B,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gCAA6B,CAAC;AAE7F,YAAY,EAAE,oBAAoB,EAAE,MAAM,oCAAiC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA2B,CAAC;AACnE,8CAA8C;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,mDAAmD;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA2B,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA4B,CAAC;AAGtE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,yBAAsB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAoC,CAAC;AACrE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uCAAoC,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAiB,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAiB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,sBAAmB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AAM9E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAoB,CAAC;AAGlD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,0BAAuB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAAuB,CAAC;AAEpE,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mCAAgC,CAAC"}
|
|
@@ -41,21 +41,21 @@ export interface AccountDialogControls {
|
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Optional consumer overrides for account-dialog actions. `ProfileButton` (and
|
|
44
|
-
* similar hosts) register these while mounted so
|
|
45
|
-
*
|
|
44
|
+
* similar hosts) register these while mounted so an app can route "Add account"
|
|
45
|
+
* and "Profile" to app-local navigation, and add its own menu entries. "Manage
|
|
46
|
+
* your Oxy account" is not overridable: it always opens the SDK's ManageAccount.
|
|
46
47
|
*/
|
|
47
48
|
export interface AccountDialogConsumerHooks {
|
|
48
|
-
onNavigateManage?: () => void;
|
|
49
49
|
onAddAccount?: () => void;
|
|
50
50
|
onNavigateProfile?: () => void;
|
|
51
51
|
menuItems?: readonly AccountDialogMenuItem[];
|
|
52
52
|
menuSections?: readonly AccountDialogMenuSection[];
|
|
53
53
|
}
|
|
54
54
|
export declare function registerAccountDialogControls(next: AccountDialogControls): () => void;
|
|
55
|
-
/** Register app-local
|
|
55
|
+
/** Register app-local add/profile handlers and menu entries for the account dialog. */
|
|
56
56
|
export declare function registerAccountDialogConsumerHooks(next: AccountDialogConsumerHooks | null): () => void;
|
|
57
57
|
export declare function getAccountDialogConsumerHooks(): AccountDialogConsumerHooks | null;
|
|
58
|
-
/** Subscribe to consumer-hook registration changes (menu items,
|
|
58
|
+
/** Subscribe to consumer-hook registration changes (menu items, add/profile overrides). */
|
|
59
59
|
export declare function subscribeToAccountDialogConsumerHooks(listener: () => void): () => void;
|
|
60
60
|
/** Open the account dialog on `view` (default `accounts`). No-op before mount. */
|
|
61
61
|
export declare function openAccountDialog(view?: AccountDialogView): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountDialogManager.d.ts","sourceRoot":"","sources":["../../../../../src/ui/navigation/accountDialogManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED
|
|
1
|
+
{"version":3,"file":"accountDialogManager.d.ts","sourceRoot":"","sources":["../../../../../src/ui/navigation/accountDialogManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,mEAAmE;AACnE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,YAAY,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACpD;AAaD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAOrF;AAED,uFAAuF;AACvF,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,0BAA0B,GAAG,IAAI,GACtC,MAAM,IAAI,CASZ;AAED,wBAAgB,6BAA6B,IAAI,0BAA0B,GAAG,IAAI,CAEjF;AAED,2FAA2F;AAC3F,wBAAgB,qCAAqC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAKtF;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAEhE;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,sFAAsF;AACtF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIpE;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAKzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"one-video.d.ts","sourceRoot":"","sources":["../../../../src/ui/one-video.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"one-video.d.ts","sourceRoot":"","sources":["../../../../src/ui/one-video.tsx"],"names":[],"mappings":"AAUA,oFAAoF;AACpF,wBAAgB,WAAW,gCAiC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarCropScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/AvatarCropScreen.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AvatarCropScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/AvatarCropScreen.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAqB,CAAC;AAM3D,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsPD,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0xBrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditProfileFieldScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/EditProfileFieldScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EditProfileFieldScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/EditProfileFieldScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAI9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAqB,CAAC;AAuB3D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,UAAU,GACV,KAAK,GACL,OAAO,GACP,SAAS,GACT,UAAU,GACV,UAAU,GACV,WAAW,GACX,OAAO,CAAC;AA4BZ,UAAU,2BAA4B,SAAQ,eAAe;IAC3D,6BAA6B;IAC7B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;;AAyoBD,wBAAkD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OxyOneScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/OxyOneScreen.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OxyOneScreen.d.ts","sourceRoot":"","sources":["../../../../../src/ui/screens/OxyOneScreen.tsx"],"names":[],"mappings":"AAiCA;sEACsE;AACtE,MAAM,CAAC,OAAO,UAAU,YAAY,gCA4LnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSize.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/imageSize.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAI5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSize.native.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/imageSize.native.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAUlE"}
|
package/package.json
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const source:
|
|
1
|
+
declare const source: number;
|
|
2
2
|
export default source;
|
package/src/ui/client.ts
CHANGED
|
@@ -40,6 +40,14 @@ export { useOxy, useOptionalOxy, OxyProviderMissingError } from './context/OxyCo
|
|
|
40
40
|
|
|
41
41
|
// Hooks
|
|
42
42
|
export { useAuth } from './hooks/useAuth';
|
|
43
|
+
// This app's Oxy-signed assertion of which app it is (ADR 0045), for an SDK
|
|
44
|
+
// that attaches it to its own requests without pulling in the account screens.
|
|
45
|
+
export {
|
|
46
|
+
useAppAssertion,
|
|
47
|
+
AppAssertionProviderMissingError,
|
|
48
|
+
} from './appAssertion/AppAssertionContext';
|
|
49
|
+
export type { UseAppAssertionResult } from './appAssertion/AppAssertionContext';
|
|
50
|
+
export type { AppAssertionSnapshot, AppAssertionStatus } from './appAssertion/appAssertionManager';
|
|
43
51
|
export type { AuthState, AuthActions, SignInOutcome, UseAuthReturn } from './hooks/useAuth';
|
|
44
52
|
export { createDeferredProductAnalytics } from './analytics/productAnalytics';
|
|
45
53
|
export type { OxyProductEvent, ProductAnalytics } from './analytics/productAnalytics';
|
|
@@ -284,13 +284,8 @@ const OxyAuthChooser: React.FC<OxyAuthChooserProps> = ({ onComplete }) => {
|
|
|
284
284
|
);
|
|
285
285
|
|
|
286
286
|
const handleManage = useCallback(() => {
|
|
287
|
-
if (consumerHooks?.onNavigateManage) {
|
|
288
|
-
onComplete?.();
|
|
289
|
-
consumerHooks.onNavigateManage();
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
287
|
showBottomSheet?.('ManageAccount');
|
|
293
|
-
}, [
|
|
288
|
+
}, [showBottomSheet]);
|
|
294
289
|
|
|
295
290
|
const handleAdd = useCallback(() => {
|
|
296
291
|
if (consumerHooks?.onAddAccount) {
|
|
@@ -3,7 +3,6 @@ import { loadScreens } from '../navigation/routes';
|
|
|
3
3
|
import { useEffect, useRef, useState, useMemo, type FC } from 'react';
|
|
4
4
|
import { AppState, Platform, StyleSheet } from 'react-native';
|
|
5
5
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
6
|
-
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
|
7
6
|
import type { OxyProviderProps } from '../types/navigation';
|
|
8
7
|
import { OxyRuntimeProvider, type OxyRuntimeProviderProps } from '../context/OxyContext';
|
|
9
8
|
import { QueryClientProvider, focusManager, onlineManager } from '@tanstack/react-query';
|
|
@@ -19,6 +18,7 @@ import {
|
|
|
19
18
|
} from '../utils/storageHelpers';
|
|
20
19
|
import { isNetConnectivityOnline } from '../utils/netConnectivity';
|
|
21
20
|
import { KeyboardBoundary } from './KeyboardBoundary';
|
|
21
|
+
import { SafeAreaRoot } from './SafeAreaRoot';
|
|
22
22
|
import { ProductAnalyticsObserver } from '../analytics/productAnalytics';
|
|
23
23
|
import { LanguageBridge } from './LanguageBridge';
|
|
24
24
|
import { BloomLocaleBridge } from './BloomLocaleBridge';
|
|
@@ -45,8 +45,9 @@ const isWeb = Platform.OS === 'web';
|
|
|
45
45
|
* OxyProvider - Universal provider for Expo apps (native + web)
|
|
46
46
|
*
|
|
47
47
|
* Provides authentication, session management, query client, and UI overlays.
|
|
48
|
-
* Wraps its own overlay stack in
|
|
49
|
-
*
|
|
48
|
+
* Wraps its own overlay stack in a safe-area root (`SafeAreaRoot`: the native
|
|
49
|
+
* SafeAreaProvider on a device, the window's metrics on web) and
|
|
50
|
+
* GestureHandlerRootView so the shared Bloom SURFACE STACK (`<SurfaceProvider>` / `<SurfaceHost>`) — which
|
|
50
51
|
* hosts every SDK surface (the ~35 bottom-sheet routes + the AccountDialog) — can
|
|
51
52
|
* safely render even when a consuming app has not mounted those providers yet.
|
|
52
53
|
*
|
|
@@ -118,7 +119,7 @@ const OxyProvider: FC<OxyProviderProps> = ({
|
|
|
118
119
|
[onAskAlia, documentationUrl, aliaAvatar, oxyOneArtwork],
|
|
119
120
|
);
|
|
120
121
|
useEffect(() => {
|
|
121
|
-
//
|
|
122
|
+
// The root entry registers the screens itself; `ui` and `ui/client` warm their chunk here.
|
|
122
123
|
void loadScreens().catch(() => undefined);
|
|
123
124
|
}, []);
|
|
124
125
|
// Storage + persistence wiring.
|
|
@@ -302,9 +303,9 @@ const OxyProvider: FC<OxyProviderProps> = ({
|
|
|
302
303
|
|
|
303
304
|
return (
|
|
304
305
|
<GestureHandlerRootView style={bootStyles.providerRoot}>
|
|
305
|
-
<
|
|
306
|
+
<SafeAreaRoot>
|
|
306
307
|
<KeyboardBoundary>{coreContent}</KeyboardBoundary>
|
|
307
|
-
</
|
|
308
|
+
</SafeAreaRoot>
|
|
308
309
|
</GestureHandlerRootView>
|
|
309
310
|
);
|
|
310
311
|
};
|
|
@@ -33,8 +33,6 @@ export interface ProfileButtonProps {
|
|
|
33
33
|
* Avatar diameter in px. Defaults to 40 when expanded, 32 when collapsed.
|
|
34
34
|
*/
|
|
35
35
|
avatarSize?: number;
|
|
36
|
-
/** Navigate to the "Manage account" surface (settings). */
|
|
37
|
-
onNavigateManage?: () => void;
|
|
38
36
|
/** Start the add-account / sign-in flow for an additional account. */
|
|
39
37
|
onAddAccount?: () => void;
|
|
40
38
|
/** Optional: navigate to the signed-in user's own profile. */
|
|
@@ -63,7 +61,6 @@ export interface ProfileButtonProps {
|
|
|
63
61
|
const ProfileButton: React.FC<ProfileButtonProps> = ({
|
|
64
62
|
expanded = true,
|
|
65
63
|
avatarSize,
|
|
66
|
-
onNavigateManage,
|
|
67
64
|
onAddAccount,
|
|
68
65
|
onNavigateProfile,
|
|
69
66
|
menuItems,
|
|
@@ -83,23 +80,16 @@ const ProfileButton: React.FC<ProfileButtonProps> = ({
|
|
|
83
80
|
}, [openAccountDialog]);
|
|
84
81
|
|
|
85
82
|
useEffect(() => {
|
|
86
|
-
if (
|
|
87
|
-
!onNavigateManage &&
|
|
88
|
-
!onAddAccount &&
|
|
89
|
-
!onNavigateProfile &&
|
|
90
|
-
!menuItems?.length &&
|
|
91
|
-
!menuSections?.length
|
|
92
|
-
) {
|
|
83
|
+
if (!onAddAccount && !onNavigateProfile && !menuItems?.length && !menuSections?.length) {
|
|
93
84
|
return undefined;
|
|
94
85
|
}
|
|
95
86
|
return registerAccountDialogConsumerHooks({
|
|
96
|
-
onNavigateManage,
|
|
97
87
|
onAddAccount,
|
|
98
88
|
onNavigateProfile,
|
|
99
89
|
menuItems,
|
|
100
90
|
menuSections,
|
|
101
91
|
});
|
|
102
|
-
}, [
|
|
92
|
+
}, [onAddAccount, onNavigateProfile, menuItems, menuSections]);
|
|
103
93
|
|
|
104
94
|
const avatarUrl = useMemo(
|
|
105
95
|
() => (user?.avatar ? oxyServices.assets.publicUrl(user.avatar, 'thumb') : undefined),
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The safe-area root `OxyProvider` mounts around everything it renders.
|
|
3
|
+
*
|
|
4
|
+
* On iOS and Android it is react-native-safe-area-context's own
|
|
5
|
+
* `SafeAreaProvider`, which measures the native root view.
|
|
6
|
+
*
|
|
7
|
+
* On web it does NOT measure. From react-native-safe-area-context 5.9, the web
|
|
8
|
+
* provider measures its own element and reports
|
|
9
|
+
* `windowInsets.bottom - (innerHeight - rect.bottom)` as the bottom inset with
|
|
10
|
+
* no upper clamp (likewise `top - rect.top`). `OxyProvider` wraps the app's
|
|
11
|
+
* whole document, and on a page that scrolls that element is taller than the
|
|
12
|
+
* viewport, so everything below the fold became bottom inset: an 844px phone
|
|
13
|
+
* viewport with a 2690px page reported a ~1850px inset, and the mobile account
|
|
14
|
+
* dialog laid itself out empty. Web therefore gets the WINDOW's metrics — what
|
|
15
|
+
* every version before 5.9 reported for a root provider:
|
|
16
|
+
*
|
|
17
|
+
* - insets: CSS `env(safe-area-inset-*)`, read from one fixed, hidden probe
|
|
18
|
+
* after mount (zero during server rendering and hydration);
|
|
19
|
+
* - frame: the viewport (`useWindowDimensions`), never the document's height.
|
|
20
|
+
*
|
|
21
|
+
* Bloom raises its own web insets to the same `env()` values
|
|
22
|
+
* (`useCssSafeAreaInsets`), so nothing pads twice.
|
|
23
|
+
*/
|
|
24
|
+
import type { ReactNode } from 'react';
|
|
25
|
+
import { useMemo, useSyncExternalStore } from 'react';
|
|
26
|
+
import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
|
|
27
|
+
import {
|
|
28
|
+
type EdgeInsets,
|
|
29
|
+
SafeAreaFrameContext,
|
|
30
|
+
SafeAreaInsetsContext,
|
|
31
|
+
SafeAreaProvider,
|
|
32
|
+
} from 'react-native-safe-area-context';
|
|
33
|
+
|
|
34
|
+
const styles = StyleSheet.create({
|
|
35
|
+
fill: { flex: 1 },
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export function SafeAreaRoot({ children }: { children?: ReactNode }) {
|
|
39
|
+
if (Platform.OS === 'web') return <WindowSafeAreaProvider>{children}</WindowSafeAreaProvider>;
|
|
40
|
+
return <SafeAreaProvider>{children}</SafeAreaProvider>;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Web: window metrics, provided through the library's own contexts. */
|
|
44
|
+
function WindowSafeAreaProvider({ children }: { children?: ReactNode }) {
|
|
45
|
+
const insets = useSyncExternalStore(subscribeWindowInsets, readWindowInsets, readServerInsets);
|
|
46
|
+
const { width, height } = useWindowDimensions();
|
|
47
|
+
const frame = useMemo(() => ({ x: 0, y: 0, width, height }), [width, height]);
|
|
48
|
+
// The same flex-filling view `SafeAreaProvider` renders, so layout below is unchanged.
|
|
49
|
+
return (
|
|
50
|
+
<View style={styles.fill}>
|
|
51
|
+
<SafeAreaFrameContext.Provider value={frame}>
|
|
52
|
+
<SafeAreaInsetsContext.Provider value={insets}>{children}</SafeAreaInsetsContext.Provider>
|
|
53
|
+
</SafeAreaFrameContext.Provider>
|
|
54
|
+
</View>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const ZERO: EdgeInsets = Object.freeze({ top: 0, right: 0, bottom: 0, left: 0 });
|
|
59
|
+
|
|
60
|
+
let probe: HTMLElement | null = null;
|
|
61
|
+
let snapshot: EdgeInsets = ZERO;
|
|
62
|
+
const listeners = new Set<() => void>();
|
|
63
|
+
|
|
64
|
+
function readServerInsets(): EdgeInsets {
|
|
65
|
+
return ZERO;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function readWindowInsets(): EdgeInsets {
|
|
69
|
+
return snapshot;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function measure(): void {
|
|
73
|
+
if (!probe) return;
|
|
74
|
+
const style = getComputedStyle(probe);
|
|
75
|
+
const next = {
|
|
76
|
+
top: Number.parseFloat(style.paddingTop) || 0,
|
|
77
|
+
right: Number.parseFloat(style.paddingRight) || 0,
|
|
78
|
+
bottom: Number.parseFloat(style.paddingBottom) || 0,
|
|
79
|
+
left: Number.parseFloat(style.paddingLeft) || 0,
|
|
80
|
+
};
|
|
81
|
+
if (
|
|
82
|
+
next.top === snapshot.top &&
|
|
83
|
+
next.right === snapshot.right &&
|
|
84
|
+
next.bottom === snapshot.bottom &&
|
|
85
|
+
next.left === snapshot.left
|
|
86
|
+
) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
snapshot = next.top || next.right || next.bottom || next.left ? next : ZERO;
|
|
90
|
+
for (const listener of listeners) listener();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function subscribeWindowInsets(listener: () => void): () => void {
|
|
94
|
+
if (typeof document === 'undefined' || !document.body) return () => {};
|
|
95
|
+
listeners.add(listener);
|
|
96
|
+
if (!probe) {
|
|
97
|
+
probe = document.createElement('div');
|
|
98
|
+
probe.setAttribute('aria-hidden', 'true');
|
|
99
|
+
// Through the CSSOM, which CSP `style-src` does not block.
|
|
100
|
+
probe.style.position = 'fixed';
|
|
101
|
+
probe.style.visibility = 'hidden';
|
|
102
|
+
probe.style.pointerEvents = 'none';
|
|
103
|
+
probe.style.top = '0';
|
|
104
|
+
probe.style.left = '0';
|
|
105
|
+
probe.style.setProperty('padding-top', 'env(safe-area-inset-top, 0px)');
|
|
106
|
+
probe.style.setProperty('padding-right', 'env(safe-area-inset-right, 0px)');
|
|
107
|
+
probe.style.setProperty('padding-bottom', 'env(safe-area-inset-bottom, 0px)');
|
|
108
|
+
probe.style.setProperty('padding-left', 'env(safe-area-inset-left, 0px)');
|
|
109
|
+
document.body.appendChild(probe);
|
|
110
|
+
window.addEventListener('resize', measure);
|
|
111
|
+
window.addEventListener('orientationchange', measure);
|
|
112
|
+
}
|
|
113
|
+
measure();
|
|
114
|
+
return () => {
|
|
115
|
+
listeners.delete(listener);
|
|
116
|
+
if (listeners.size > 0 || !probe) return;
|
|
117
|
+
window.removeEventListener('resize', measure);
|
|
118
|
+
window.removeEventListener('orientationchange', measure);
|
|
119
|
+
probe.remove();
|
|
120
|
+
probe = null;
|
|
121
|
+
snapshot = ZERO;
|
|
122
|
+
};
|
|
123
|
+
}
|