@oxyhq/services 13.0.3 → 13.1.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/index.js +18 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/ProfileButton.js +233 -0
- package/lib/commonjs/ui/components/ProfileButton.js.map +1 -0
- package/lib/commonjs/ui/components/ProfileMenu.js +374 -0
- package/lib/commonjs/ui/components/ProfileMenu.js.map +1 -0
- package/lib/commonjs/ui/context/OxyContext.js +99 -18
- package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js +28 -1
- package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/commonjs/ui/index.js +14 -0
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/utils/activeAuthuser.js +76 -8
- package/lib/commonjs/ui/utils/activeAuthuser.js.map +1 -1
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/ProfileButton.js +228 -0
- package/lib/module/ui/components/ProfileButton.js.map +1 -0
- package/lib/module/ui/components/ProfileMenu.js +370 -0
- package/lib/module/ui/components/ProfileMenu.js.map +1 -0
- package/lib/module/ui/context/OxyContext.js +100 -19
- package/lib/module/ui/context/OxyContext.js.map +1 -1
- package/lib/module/ui/context/hooks/useAuthOperations.js +29 -2
- package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
- package/lib/module/ui/index.js +2 -0
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/utils/activeAuthuser.js +74 -9
- package/lib/module/ui/utils/activeAuthuser.js.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +4 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +46 -0
- package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/ProfileMenu.d.ts +39 -0
- package/lib/typescript/commonjs/ui/components/ProfileMenu.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/index.d.ts +2 -0
- package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts +24 -0
- package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +4 -0
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ProfileButton.d.ts +46 -0
- package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/ProfileMenu.d.ts +39 -0
- package/lib/typescript/module/ui/components/ProfileMenu.d.ts.map +1 -0
- package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
- package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
- package/lib/typescript/module/ui/index.d.ts +2 -0
- package/lib/typescript/module/ui/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/utils/activeAuthuser.d.ts +24 -0
- package/lib/typescript/module/ui/utils/activeAuthuser.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +8 -0
- package/src/ui/components/ProfileButton.tsx +270 -0
- package/src/ui/components/ProfileMenu.tsx +416 -0
- package/src/ui/context/OxyContext.tsx +100 -18
- package/src/ui/context/hooks/useAuthOperations.ts +35 -2
- package/src/ui/index.ts +2 -0
- package/src/ui/utils/__tests__/activeAuthuser.test.ts +75 -0
- package/src/ui/utils/activeAuthuser.ts +74 -8
package/lib/commonjs/index.js
CHANGED
|
@@ -135,6 +135,18 @@ Object.defineProperty(exports, "PreferencesScreen", {
|
|
|
135
135
|
return _PreferencesScreen.default;
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
|
+
Object.defineProperty(exports, "ProfileButton", {
|
|
139
|
+
enumerable: true,
|
|
140
|
+
get: function () {
|
|
141
|
+
return _ProfileButton.default;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
Object.defineProperty(exports, "ProfileMenu", {
|
|
145
|
+
enumerable: true,
|
|
146
|
+
get: function () {
|
|
147
|
+
return _ProfileMenu.default;
|
|
148
|
+
}
|
|
149
|
+
});
|
|
138
150
|
Object.defineProperty(exports, "closeBottomSheet", {
|
|
139
151
|
enumerable: true,
|
|
140
152
|
get: function () {
|
|
@@ -644,6 +656,8 @@ var _LogoIcon = require("./ui/components/logo/LogoIcon.js");
|
|
|
644
656
|
var _LogoText = require("./ui/components/logo/LogoText.js");
|
|
645
657
|
var _AccountMenu = _interopRequireDefault(require("./ui/components/AccountMenu.js"));
|
|
646
658
|
var _AccountMenuButton = _interopRequireDefault(require("./ui/components/AccountMenuButton.js"));
|
|
659
|
+
var _ProfileButton = _interopRequireDefault(require("./ui/components/ProfileButton.js"));
|
|
660
|
+
var _ProfileMenu = _interopRequireDefault(require("./ui/components/ProfileMenu.js"));
|
|
647
661
|
var _AccountSwitcher = _interopRequireWildcard(require("./ui/components/AccountSwitcher.js"));
|
|
648
662
|
var _useDeviceAccounts = require("./ui/hooks/useDeviceAccounts.js");
|
|
649
663
|
var _ManageAccountScreen = _interopRequireDefault(require("./ui/screens/ManageAccountScreen.js"));
|
|
@@ -740,6 +754,10 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
740
754
|
|
|
741
755
|
// Unified account menu (device-only switcher — popover on web, sheet on native)
|
|
742
756
|
|
|
757
|
+
// Sidebar account button + its device-account switcher menu (Bluesky-style
|
|
758
|
+
// ProfileCard). `ProfileButton` owns its own open state + anchor measurement
|
|
759
|
+
// and opens `ProfileMenu` upward from a sidebar footer.
|
|
760
|
+
|
|
743
761
|
// Unified account switcher (device sign-ins + account graph). `AccountMenuButton`
|
|
744
762
|
// opens this; the `AccountSwitcherView` body also backs the `AccountSwitcher`
|
|
745
763
|
// bottom-sheet route.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_core","require","_reactNative","_OxyProvider","_interopRequireDefault","_OxyContext","_useAuth","_FontLoader","_authStore","_assetStore","_useSessionSocket","_useAssets","_useFileDownloadUrl","_useFollow","_useAccountQueries","_useServicesQueries","_useSecurityQueries","_usePaymentQueries","_useAccountMutations","_useServicesMutations","_mutationFactory","_mutationKeys","_queryKeys","_useMutationStatus","_useOnlineStatus","_errorHandlers","_crossApex","_useFileFiltering","_Avatar","_OxySignInButton","_OxyAuthPrompt","_OxyLogo","_FollowButton","_LogoIcon","_LogoText","_AccountMenu","_AccountMenuButton","_AccountSwitcher","_interopRequireWildcard","_useDeviceAccounts","_ManageAccountScreen","_NotificationsScreen","_PreferencesScreen","_ConnectedAppsScreen","_AccountSwitcherScreen","_CreateAccountScreen","_AccountMembersScreen","_AccountSettingsScreen","_bottomSheetManager","_SignInModal","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","setPlatformOS","Platform","OS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["_core","require","_reactNative","_OxyProvider","_interopRequireDefault","_OxyContext","_useAuth","_FontLoader","_authStore","_assetStore","_useSessionSocket","_useAssets","_useFileDownloadUrl","_useFollow","_useAccountQueries","_useServicesQueries","_useSecurityQueries","_usePaymentQueries","_useAccountMutations","_useServicesMutations","_mutationFactory","_mutationKeys","_queryKeys","_useMutationStatus","_useOnlineStatus","_errorHandlers","_crossApex","_useFileFiltering","_Avatar","_OxySignInButton","_OxyAuthPrompt","_OxyLogo","_FollowButton","_LogoIcon","_LogoText","_AccountMenu","_AccountMenuButton","_ProfileButton","_ProfileMenu","_AccountSwitcher","_interopRequireWildcard","_useDeviceAccounts","_ManageAccountScreen","_NotificationsScreen","_PreferencesScreen","_ConnectedAppsScreen","_AccountSwitcherScreen","_CreateAccountScreen","_AccountMembersScreen","_AccountSettingsScreen","_bottomSheetManager","_SignInModal","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","setPlatformOS","Platform","OS"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _vectorIcons = require("@expo/vector-icons");
|
|
10
|
+
var _avatar = require("@oxyhq/bloom/avatar");
|
|
11
|
+
var _typography = require("@oxyhq/bloom/typography");
|
|
12
|
+
var _theme = require("@oxyhq/bloom/theme");
|
|
13
|
+
var _core = require("@oxyhq/core");
|
|
14
|
+
var _useAuth = require("../hooks/useAuth.js");
|
|
15
|
+
var _useI18n = require("../hooks/useI18n.js");
|
|
16
|
+
var _ProfileMenu = _interopRequireDefault(require("./ProfileMenu.js"));
|
|
17
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
19
|
+
const isWeb = _reactNative.Platform.OS === 'web';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Fixed popover width used by {@link ProfileMenu} on web. `ProfileButton`
|
|
23
|
+
* mirrors this constant when computing the trigger-relative anchor so the
|
|
24
|
+
* left-edge clamp keeps the panel fully on-screen. Keep the two in sync.
|
|
25
|
+
*/
|
|
26
|
+
const MENU_WIDTH = 300;
|
|
27
|
+
|
|
28
|
+
/** Gutter, in px, kept between the popover and the viewport edges on web. */
|
|
29
|
+
const VIEWPORT_GUTTER = 8;
|
|
30
|
+
/**
|
|
31
|
+
* Self-contained sidebar account trigger, modeled on Bluesky's ProfileCard and
|
|
32
|
+
* the Oxy inbox's `MailboxDrawer` footer. Owns its own open state + anchor
|
|
33
|
+
* measurement, and renders {@link ProfileMenu} (the device-account switcher).
|
|
34
|
+
*
|
|
35
|
+
* Three auth states from {@link useAuth}:
|
|
36
|
+
* - **Undetermined** (`!isAuthResolved || isPrivateApiPending`): a neutral
|
|
37
|
+
* avatar-sized skeleton circle, no press.
|
|
38
|
+
* - **Signed in**: a pressable row — Bloom `Avatar` + display name + `@handle`
|
|
39
|
+
* + an `unfold-more-horizontal` chevron. Press opens the menu upward (web)
|
|
40
|
+
* against the measured trigger, or as a bottom sheet (native).
|
|
41
|
+
* - **Signed out**: a "Sign in" row that calls `useAuth().signIn()`.
|
|
42
|
+
*
|
|
43
|
+
* All display strings resolve through `@oxyhq/core`'s
|
|
44
|
+
* `getAccountDisplayName` / `getAccountFallbackHandle` — no hand-rolled name
|
|
45
|
+
* fallbacks. Avatars pass the bare file id as `source` + `variant="thumb"`, so
|
|
46
|
+
* the app's registered `ImageResolver` builds the thumbnail URL.
|
|
47
|
+
*/
|
|
48
|
+
const ProfileButton = ({
|
|
49
|
+
expanded = true,
|
|
50
|
+
avatarSize,
|
|
51
|
+
onNavigateManage,
|
|
52
|
+
onAddAccount,
|
|
53
|
+
onNavigateProfile,
|
|
54
|
+
onBeforeSessionChange,
|
|
55
|
+
className,
|
|
56
|
+
style
|
|
57
|
+
}) => {
|
|
58
|
+
const {
|
|
59
|
+
user,
|
|
60
|
+
isAuthenticated,
|
|
61
|
+
isAuthResolved,
|
|
62
|
+
isPrivateApiPending,
|
|
63
|
+
signIn
|
|
64
|
+
} = (0, _useAuth.useAuth)();
|
|
65
|
+
const {
|
|
66
|
+
colors
|
|
67
|
+
} = (0, _theme.useTheme)();
|
|
68
|
+
const {
|
|
69
|
+
t,
|
|
70
|
+
locale
|
|
71
|
+
} = (0, _useI18n.useI18n)();
|
|
72
|
+
const [menuOpen, setMenuOpen] = (0, _react.useState)(false);
|
|
73
|
+
const [anchor, setAnchor] = (0, _react.useState)(null);
|
|
74
|
+
|
|
75
|
+
// Trigger ref for the web anchor measurement. RN-Web exposes `measure()` on
|
|
76
|
+
// host views, so we anchor the popover to the button rect and open upward.
|
|
77
|
+
const triggerRef = (0, _react.useRef)(null);
|
|
78
|
+
const resolvedAvatarSize = avatarSize ?? (expanded ? 40 : 32);
|
|
79
|
+
const openMenu = (0, _react.useCallback)(() => {
|
|
80
|
+
if (!isWeb) {
|
|
81
|
+
setAnchor(null);
|
|
82
|
+
setMenuOpen(true);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const node = triggerRef.current;
|
|
86
|
+
if (!node || typeof node.measure !== 'function' || typeof window === 'undefined') {
|
|
87
|
+
setAnchor(null);
|
|
88
|
+
setMenuOpen(true);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
node.measure((_x, _y, _w, _h, pageX, pageY) => {
|
|
92
|
+
if (typeof pageX !== 'number' || typeof pageY !== 'number') {
|
|
93
|
+
setAnchor(null);
|
|
94
|
+
} else {
|
|
95
|
+
// Clamp the panel's left edge inside the viewport gutter.
|
|
96
|
+
const maxLeft = Math.max(VIEWPORT_GUTTER, window.innerWidth - MENU_WIDTH - VIEWPORT_GUTTER);
|
|
97
|
+
const left = Math.min(Math.max(VIEWPORT_GUTTER, pageX), maxLeft);
|
|
98
|
+
// Anchor the panel's BOTTOM edge just above the trigger top so
|
|
99
|
+
// the menu opens upward from this footer button.
|
|
100
|
+
const bottom = Math.max(VIEWPORT_GUTTER, window.innerHeight - pageY + VIEWPORT_GUTTER);
|
|
101
|
+
setAnchor({
|
|
102
|
+
left,
|
|
103
|
+
bottom
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
setMenuOpen(true);
|
|
107
|
+
});
|
|
108
|
+
}, []);
|
|
109
|
+
const handleClose = (0, _react.useCallback)(() => {
|
|
110
|
+
setMenuOpen(false);
|
|
111
|
+
}, []);
|
|
112
|
+
|
|
113
|
+
// ── Undetermined: skeleton circle, no interaction. ──────────────────────
|
|
114
|
+
if (!isAuthResolved || isPrivateApiPending) {
|
|
115
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
116
|
+
className: className,
|
|
117
|
+
style: style,
|
|
118
|
+
accessibilityElementsHidden: true,
|
|
119
|
+
importantForAccessibility: "no-hide-descendants",
|
|
120
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
121
|
+
className: "rounded-full bg-secondary",
|
|
122
|
+
style: {
|
|
123
|
+
width: resolvedAvatarSize,
|
|
124
|
+
height: resolvedAvatarSize
|
|
125
|
+
}
|
|
126
|
+
})
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// ── Signed out: "Sign in" row. ──────────────────────────────────────────
|
|
131
|
+
if (!isAuthenticated || !user) {
|
|
132
|
+
const signInLabel = t('common.actions.signIn') || 'Sign in';
|
|
133
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
|
|
134
|
+
className: `flex-row items-center gap-3 rounded-full px-2 py-2 ${className ?? ''}`,
|
|
135
|
+
style: style,
|
|
136
|
+
onPress: () => {
|
|
137
|
+
void signIn();
|
|
138
|
+
},
|
|
139
|
+
accessibilityRole: "button",
|
|
140
|
+
accessibilityLabel: signInLabel,
|
|
141
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
142
|
+
className: "items-center justify-center rounded-full bg-secondary",
|
|
143
|
+
style: {
|
|
144
|
+
width: resolvedAvatarSize,
|
|
145
|
+
height: resolvedAvatarSize
|
|
146
|
+
},
|
|
147
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.MaterialCommunityIcons, {
|
|
148
|
+
name: "login",
|
|
149
|
+
size: Math.round(resolvedAvatarSize * 0.5),
|
|
150
|
+
color: colors.icon
|
|
151
|
+
})
|
|
152
|
+
}), expanded ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
153
|
+
className: "flex-1 font-semibold text-foreground",
|
|
154
|
+
numberOfLines: 1,
|
|
155
|
+
children: signInLabel
|
|
156
|
+
}) : null]
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// ── Signed in: avatar + identity + chevron. ─────────────────────────────
|
|
161
|
+
const displayName = (0, _core.getAccountDisplayName)(user, locale);
|
|
162
|
+
const handle = (0, _core.getAccountFallbackHandle)(user);
|
|
163
|
+
const handleLine = handle ? `@${handle}` : null;
|
|
164
|
+
const avatarNode = /*#__PURE__*/(0, _jsxRuntime.jsx)(_avatar.Avatar, {
|
|
165
|
+
source: user.avatar ?? undefined,
|
|
166
|
+
variant: "thumb",
|
|
167
|
+
name: displayName,
|
|
168
|
+
size: resolvedAvatarSize
|
|
169
|
+
});
|
|
170
|
+
if (!expanded) {
|
|
171
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
172
|
+
className: className,
|
|
173
|
+
style: style,
|
|
174
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
175
|
+
ref: triggerRef,
|
|
176
|
+
className: "rounded-full",
|
|
177
|
+
onPress: openMenu,
|
|
178
|
+
accessibilityRole: "button",
|
|
179
|
+
accessibilityLabel: t('accountSwitcher.switchWhileSignedInAs', {
|
|
180
|
+
name: displayName
|
|
181
|
+
}) || `Switch account, signed in as ${displayName}`,
|
|
182
|
+
children: avatarNode
|
|
183
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProfileMenu.default, {
|
|
184
|
+
open: menuOpen,
|
|
185
|
+
onClose: handleClose,
|
|
186
|
+
anchor: anchor,
|
|
187
|
+
onNavigateManage: onNavigateManage,
|
|
188
|
+
onAddAccount: onAddAccount,
|
|
189
|
+
onNavigateProfile: onNavigateProfile,
|
|
190
|
+
onBeforeSessionChange: onBeforeSessionChange
|
|
191
|
+
})]
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
195
|
+
className: className,
|
|
196
|
+
style: style,
|
|
197
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
|
|
198
|
+
ref: triggerRef,
|
|
199
|
+
className: "flex-row items-center gap-3 rounded-full px-2 py-2",
|
|
200
|
+
onPress: openMenu,
|
|
201
|
+
accessibilityRole: "button",
|
|
202
|
+
accessibilityLabel: t('accountSwitcher.switchWhileSignedInAs', {
|
|
203
|
+
name: displayName
|
|
204
|
+
}) || `Switch account, signed in as ${displayName}`,
|
|
205
|
+
children: [avatarNode, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
206
|
+
className: "min-w-0 flex-1",
|
|
207
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
208
|
+
className: "font-bold text-foreground",
|
|
209
|
+
numberOfLines: 1,
|
|
210
|
+
children: displayName
|
|
211
|
+
}), handleLine ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
|
|
212
|
+
className: "text-xs text-muted-foreground",
|
|
213
|
+
numberOfLines: 1,
|
|
214
|
+
children: handleLine
|
|
215
|
+
}) : null]
|
|
216
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.MaterialCommunityIcons, {
|
|
217
|
+
name: "unfold-more-horizontal",
|
|
218
|
+
size: 18,
|
|
219
|
+
color: colors.textSecondary
|
|
220
|
+
})]
|
|
221
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProfileMenu.default, {
|
|
222
|
+
open: menuOpen,
|
|
223
|
+
onClose: handleClose,
|
|
224
|
+
anchor: anchor,
|
|
225
|
+
onNavigateManage: onNavigateManage,
|
|
226
|
+
onAddAccount: onAddAccount,
|
|
227
|
+
onNavigateProfile: onNavigateProfile,
|
|
228
|
+
onBeforeSessionChange: onBeforeSessionChange
|
|
229
|
+
})]
|
|
230
|
+
});
|
|
231
|
+
};
|
|
232
|
+
var _default = exports.default = ProfileButton;
|
|
233
|
+
//# sourceMappingURL=ProfileButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_vectorIcons","_avatar","_typography","_theme","_core","_useAuth","_useI18n","_ProfileMenu","_interopRequireDefault","_jsxRuntime","e","__esModule","default","isWeb","Platform","OS","MENU_WIDTH","VIEWPORT_GUTTER","ProfileButton","expanded","avatarSize","onNavigateManage","onAddAccount","onNavigateProfile","onBeforeSessionChange","className","style","user","isAuthenticated","isAuthResolved","isPrivateApiPending","signIn","useAuth","colors","useTheme","t","locale","useI18n","menuOpen","setMenuOpen","useState","anchor","setAnchor","triggerRef","useRef","resolvedAvatarSize","openMenu","useCallback","node","current","measure","window","_x","_y","_w","_h","pageX","pageY","maxLeft","Math","max","innerWidth","left","min","bottom","innerHeight","handleClose","jsx","View","accessibilityElementsHidden","importantForAccessibility","children","width","height","signInLabel","jsxs","Pressable","onPress","accessibilityRole","accessibilityLabel","MaterialCommunityIcons","name","size","round","color","icon","Text","numberOfLines","displayName","getAccountDisplayName","handle","getAccountFallbackHandle","handleLine","avatarNode","Avatar","source","avatar","undefined","variant","ref","open","onClose","textSecondary","_default","exports"],"sourceRoot":"../../../../src","sources":["ui/components/ProfileButton.tsx"],"mappings":"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","ignoreList":[]}
|