@oxyhq/services 13.0.3 → 13.1.1

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 (78) hide show
  1. package/lib/commonjs/index.js +18 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/components/ProfileButton.js +233 -0
  4. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -0
  5. package/lib/commonjs/ui/components/ProfileMenu.js +374 -0
  6. package/lib/commonjs/ui/components/ProfileMenu.js.map +1 -0
  7. package/lib/commonjs/ui/components/SettingsIcon.js.map +1 -1
  8. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  9. package/lib/commonjs/ui/context/OxyContext.js +64 -11
  10. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  11. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +28 -1
  12. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  13. package/lib/commonjs/ui/index.js +14 -0
  14. package/lib/commonjs/ui/index.js.map +1 -1
  15. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  16. package/lib/commonjs/ui/utils/activeAuthuser.js +47 -0
  17. package/lib/commonjs/ui/utils/activeAuthuser.js.map +1 -1
  18. package/lib/module/index.js +5 -0
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/ui/components/ProfileButton.js +228 -0
  21. package/lib/module/ui/components/ProfileButton.js.map +1 -0
  22. package/lib/module/ui/components/ProfileMenu.js +370 -0
  23. package/lib/module/ui/components/ProfileMenu.js.map +1 -0
  24. package/lib/module/ui/components/SettingsIcon.js.map +1 -1
  25. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  26. package/lib/module/ui/context/OxyContext.js +65 -12
  27. package/lib/module/ui/context/OxyContext.js.map +1 -1
  28. package/lib/module/ui/context/hooks/useAuthOperations.js +29 -2
  29. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  30. package/lib/module/ui/index.js +2 -0
  31. package/lib/module/ui/index.js.map +1 -1
  32. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  33. package/lib/module/ui/utils/activeAuthuser.js +45 -1
  34. package/lib/module/ui/utils/activeAuthuser.js.map +1 -1
  35. package/lib/typescript/commonjs/index.d.ts +4 -0
  36. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  37. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +46 -0
  38. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/ui/components/ProfileMenu.d.ts +39 -0
  40. package/lib/typescript/commonjs/ui/components/ProfileMenu.d.ts.map +1 -0
  41. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts +2 -1
  42. package/lib/typescript/commonjs/ui/components/SettingsIcon.d.ts.map +1 -1
  43. package/lib/typescript/commonjs/ui/components/payment/types.d.ts +3 -1
  44. package/lib/typescript/commonjs/ui/components/payment/types.d.ts.map +1 -1
  45. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  46. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  47. package/lib/typescript/commonjs/ui/index.d.ts +2 -0
  48. package/lib/typescript/commonjs/ui/index.d.ts.map +1 -1
  49. package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts +24 -0
  50. package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts.map +1 -1
  51. package/lib/typescript/module/index.d.ts +4 -0
  52. package/lib/typescript/module/index.d.ts.map +1 -1
  53. package/lib/typescript/module/ui/components/ProfileButton.d.ts +46 -0
  54. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -0
  55. package/lib/typescript/module/ui/components/ProfileMenu.d.ts +39 -0
  56. package/lib/typescript/module/ui/components/ProfileMenu.d.ts.map +1 -0
  57. package/lib/typescript/module/ui/components/SettingsIcon.d.ts +2 -1
  58. package/lib/typescript/module/ui/components/SettingsIcon.d.ts.map +1 -1
  59. package/lib/typescript/module/ui/components/payment/types.d.ts +3 -1
  60. package/lib/typescript/module/ui/components/payment/types.d.ts.map +1 -1
  61. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  62. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  63. package/lib/typescript/module/ui/index.d.ts +2 -0
  64. package/lib/typescript/module/ui/index.d.ts.map +1 -1
  65. package/lib/typescript/module/ui/utils/activeAuthuser.d.ts +24 -0
  66. package/lib/typescript/module/ui/utils/activeAuthuser.d.ts.map +1 -1
  67. package/package.json +5 -4
  68. package/src/index.ts +8 -0
  69. package/src/ui/components/ProfileButton.tsx +270 -0
  70. package/src/ui/components/ProfileMenu.tsx +416 -0
  71. package/src/ui/components/SettingsIcon.tsx +2 -2
  72. package/src/ui/components/fileManagement/FileViewer.tsx +1 -1
  73. package/src/ui/components/payment/types.ts +3 -1
  74. package/src/ui/context/OxyContext.tsx +65 -11
  75. package/src/ui/context/hooks/useAuthOperations.ts +35 -2
  76. package/src/ui/index.ts +2 -0
  77. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  78. package/src/ui/utils/activeAuthuser.ts +46 -0
@@ -0,0 +1,46 @@
1
+ import type React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export interface ProfileButtonProps {
4
+ /**
5
+ * Expanded row (avatar + name + handle + chevron) when `true` (default), or a
6
+ * bare avatar-only trigger when `false` (collapsed sidebar).
7
+ */
8
+ expanded?: boolean;
9
+ /**
10
+ * Avatar diameter in px. Defaults to 40 when expanded, 32 when collapsed.
11
+ */
12
+ avatarSize?: number;
13
+ /** Navigate to the "Manage account" surface (settings). */
14
+ onNavigateManage: () => void;
15
+ /** Start the add-account / sign-in flow for an additional account. */
16
+ onAddAccount: () => void;
17
+ /** Optional: navigate to the signed-in user's own profile. */
18
+ onNavigateProfile?: () => void;
19
+ /** Called before the active identity changes so apps can clear scoped state. */
20
+ onBeforeSessionChange?: () => void | Promise<void>;
21
+ /** Extra className applied to the outer trigger. */
22
+ className?: string;
23
+ /** Extra style applied to the outer trigger. */
24
+ style?: StyleProp<ViewStyle>;
25
+ }
26
+ /**
27
+ * Self-contained sidebar account trigger, modeled on Bluesky's ProfileCard and
28
+ * the Oxy inbox's `MailboxDrawer` footer. Owns its own open state + anchor
29
+ * measurement, and renders {@link ProfileMenu} (the device-account switcher).
30
+ *
31
+ * Three auth states from {@link useAuth}:
32
+ * - **Undetermined** (`!isAuthResolved || isPrivateApiPending`): a neutral
33
+ * avatar-sized skeleton circle, no press.
34
+ * - **Signed in**: a pressable row — Bloom `Avatar` + display name + `@handle`
35
+ * + an `unfold-more-horizontal` chevron. Press opens the menu upward (web)
36
+ * against the measured trigger, or as a bottom sheet (native).
37
+ * - **Signed out**: a "Sign in" row that calls `useAuth().signIn()`.
38
+ *
39
+ * All display strings resolve through `@oxyhq/core`'s
40
+ * `getAccountDisplayName` / `getAccountFallbackHandle` — no hand-rolled name
41
+ * fallbacks. Avatars pass the bare file id as `source` + `variant="thumb"`, so
42
+ * the app's registered `ImageResolver` builds the thumbnail URL.
43
+ */
44
+ declare const ProfileButton: React.FC<ProfileButtonProps>;
45
+ export default ProfileButton;
46
+ //# sourceMappingURL=ProfileButton.d.ts.map
@@ -0,0 +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,EAIH,KAAK,SAAS,EACd,KAAK,SAAS,EACjB,MAAM,cAAc,CAAC;AAsBtB,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,sEAAsE;IACtE,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAmM/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type React from 'react';
2
+ /**
3
+ * Web-only anchor. `ProfileButton` measures its trigger and anchors the panel's
4
+ * BOTTOM-LEFT corner so the menu opens UPWARD from the sidebar footer. Native
5
+ * ignores the anchor and docks the panel to the bottom as a sheet.
6
+ */
7
+ export interface ProfileMenuAnchor {
8
+ /** Distance from the viewport left, for the panel's LEFT edge. */
9
+ left: number;
10
+ /** Distance from the viewport bottom, for the panel's BOTTOM edge (opens upward). */
11
+ bottom: number;
12
+ }
13
+ export interface ProfileMenuProps {
14
+ open: boolean;
15
+ onClose: () => void;
16
+ /** Web-only trigger anchor. Native ignores this (bottom-sheet style). */
17
+ anchor?: ProfileMenuAnchor | null;
18
+ /** Navigate to the "Manage account" surface (settings). */
19
+ onNavigateManage: () => void;
20
+ /** Start the add-account / sign-in flow for an additional account. */
21
+ onAddAccount: () => void;
22
+ /** Optional: navigate to the signed-in user's own profile. */
23
+ onNavigateProfile?: () => void;
24
+ /** Called before the active identity changes so apps can clear scoped state. */
25
+ onBeforeSessionChange?: () => void | Promise<void>;
26
+ }
27
+ /**
28
+ * Clean device-account switcher, modeled on the inbox `AccountMenu` but written
29
+ * fresh with NativeWind classNames + Bloom primitives. Lists every account
30
+ * signed in on this device (from {@link useDeviceAccounts}); tapping a row
31
+ * switches, and each inactive row carries a sign-out icon. Below the list:
32
+ * Add account, Manage account, optional View profile, and Sign out of all.
33
+ *
34
+ * Renders as an upward-opening popover anchored to the trigger on web, and a
35
+ * bottom-sheet style modal on native.
36
+ */
37
+ declare const ProfileMenu: React.FC<ProfileMenuProps>;
38
+ export default ProfileMenu;
39
+ //# sourceMappingURL=ProfileMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProfileMenu.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/ProfileMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA2B/B;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,kEAAkE;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,2DAA2D;IAC3D,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,sEAAsE;IACtE,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED;;;;;;;;;GASG;AACH,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyT3C,CAAC;AAsCF,eAAe,WAAW,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
+ import { MaterialCommunityIcons } from '@expo/vector-icons';
2
3
  interface SettingsIconProps {
3
4
  /** MaterialCommunityIcons icon name */
4
- name: string;
5
+ name: React.ComponentProps<typeof MaterialCommunityIcons>['name'];
5
6
  /** Background color for the circle */
6
7
  color: string;
7
8
  /** Icon size (default 14, fits bloom's 20x20 container) */
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsIcon.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/SettingsIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,UAAU,iBAAiB;IACvB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAoBD,eAAO,MAAM,YAAY,+CAA8B,CAAC;AACxD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"SettingsIcon.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/SettingsIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,UAAU,iBAAiB;IACvB,uCAAuC;IACvC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;IAClE,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAoBD,eAAO,MAAM,YAAY,+CAA8B,CAAC;AACxD,eAAe,YAAY,CAAC"}
@@ -1,4 +1,6 @@
1
+ import type React from 'react';
1
2
  import type { Animated } from 'react-native';
3
+ import type { Ionicons } from '@expo/vector-icons';
2
4
  export type PaymentItem = {
3
5
  type: 'product' | 'subscription' | 'service' | 'fee' | string;
4
6
  name: string;
@@ -21,7 +23,7 @@ export interface CardDetails {
21
23
  export interface PaymentMethod {
22
24
  key: string;
23
25
  label: string;
24
- icon: string;
26
+ icon: React.ComponentProps<typeof Ionicons>['name'];
25
27
  description: string;
26
28
  }
27
29
  export interface PaymentStepAnimations {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/components/payment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC1B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/components/payment/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG;IACtB,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC;IACzB,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;IAC1B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OxyContext.d.ts","sourceRoot":"","sources":["../../../../../src/ui/context/OxyContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EASL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsBjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA0B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAgC,CAAC;AAOvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAsB,CAAC;AAatD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B;;;;;;;;;;;;;OAaG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,UAAU,CAAC,CAAC;IAC9E,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yBAAyB,EAAE,MAAM,CAAC;IAGlC,WAAW,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAG3C,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;;;;;;;;;;OAWG;IACH,kBAAkB,EAAE,CAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,KACvD,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC;;;OAGG;IACH,gBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGnE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,iBAAiB,EAAE,MAAM,OAAO,CAC9B,KAAK,CAAC;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CACH,CAAC;IACF,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;;;;;OASG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAU7B,0GAA0G;IAC1G,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB;;;;;;;;;;;;OAYG;IACH,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,aAAa,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACnE;AAED,QAAA,MAAM,UAAU,uCAA8C,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,oBAAoB,GAC5B;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAChB;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAMnD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CACrC;AAsPD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAyyDzD,CAAC;AAEF,eAAO,MAAM,kBAAkB,mCAAc,CAAC;AA+D9C,eAAO,MAAM,MAAM,QAAO,eAMzB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAuthOperations.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/context/hooks/useAuthOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAIvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC;;;;;;OAMG;IACH,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,kCAAkC;IAClC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,+BAA+B;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAwBD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,mRAkB/B,wBAAwB,KAAG,uBA8P7B,CAAC"}
1
+ {"version":3,"file":"useAuthOperations.d.ts","sourceRoot":"","sources":["../../../../../../src/ui/context/hooks/useAuthOperations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAIvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY/C,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,cAAc,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACnF,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC;;;;;;OAMG;IACH,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,uBAAuB;IACtC,uCAAuC;IACvC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,kCAAkC;IAClC,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,+BAA+B;IAC/B,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAwBD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,mRAkB/B,wBAAwB,KAAG,uBAyR7B,CAAC"}
@@ -23,6 +23,8 @@ export { FontLoader, setupFonts } from './components/FontLoader.js';
23
23
  export { default as OxyIcon } from './components/icon/OxyIcon.js';
24
24
  export { default as AccountMenu } from './components/AccountMenu.js';
25
25
  export { default as AccountMenuButton } from './components/AccountMenuButton.js';
26
+ export { default as ProfileButton } from './components/ProfileButton.js';
27
+ export { default as ProfileMenu } from './components/ProfileMenu.js';
26
28
  export { default as AccountSwitcher, AccountSwitcherView } from './components/AccountSwitcher.js';
27
29
  export { useOxy } from './context/OxyContext.js';
28
30
  export { useAuth } from './hooks/useAuth.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,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,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAAyB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA2B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,mCAAgC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,mBAAmB,EAAE,MAAM,iCAA8B,CAAC;AAG/F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AAG9E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,kCAA+B,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,oCAAiC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,kCAA+B,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mCAAgC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,oCAAiC,CAAC;AAGnF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAAuB,CAAC;AAGxD,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,0BAAuB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,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,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,wBAAqB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,8BAA2B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAAyB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA2B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,mCAAgC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,+BAA4B,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,6BAA0B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,mBAAmB,EAAE,MAAM,iCAA8B,CAAC;AAG/F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAoB,CAAC;AAChD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAoB,CAAC;AAG9E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,4BAAyB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,kCAA+B,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,oCAAiC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,kCAA+B,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,mCAAgC,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,oCAAiC,CAAC;AAGnF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAAuB,CAAC;AAGxD,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,0BAAuB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAAuB,CAAC"}
@@ -38,6 +38,30 @@ export declare function writeActiveAuthuser(authuser: number): void;
38
38
  * cleared slot.
39
39
  */
40
40
  export declare function clearActiveAuthuser(): void;
41
+ /**
42
+ * Mark this origin as DELIBERATELY signed out (durable `localStorage`, via the
43
+ * core {@link ssoSignedOutKey}). Called ONLY on EXPLICIT full sign-out so that
44
+ * the next cold boot does NOT silently re-mint a session from a still-live IdP
45
+ * session (`fedcm-silent` / per-apex `/auth/silent` iframe). Cleared by any
46
+ * deliberate sign-in (see {@link clearSignedOut}). No-ops on native / storage
47
+ * failure (best-effort).
48
+ */
49
+ export declare function markSignedOut(): void;
50
+ /**
51
+ * Clear the durable deliberately-signed-out flag. Called on ANY deliberate
52
+ * sign-in (password, FedCM, account switch, device claim) so a real sign-in
53
+ * fully re-enables automatic silent restore — there is no "stuck signed out"
54
+ * state. No-ops on native / storage failure.
55
+ */
56
+ export declare function clearSignedOut(): void;
57
+ /**
58
+ * Whether AUTOMATIC silent restore is suppressed for the current origin because
59
+ * the user deliberately signed out. Reads the durable flag through the core
60
+ * {@link silentRestoreSuppressed} predicate. Returns `false` off-web and on any
61
+ * storage failure (fail safe toward normal restore). Used to gate the
62
+ * `fedcm-silent` and `silent-iframe` cold-boot steps.
63
+ */
64
+ export declare function isSilentRestoreSuppressed(): boolean;
41
65
  /**
42
66
  * Clear all per-origin SSO bounce sessionStorage keys. Called ONLY on EXPLICIT
43
67
  * user sign-out (logout / logoutAll) — never on a cold-boot failure path — so a
@@ -1 +1 @@
1
- {"version":3,"file":"activeAuthuser.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/activeAuthuser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,QAAA,MAAM,mBAAmB,wBAAwB,CAAC;AAelD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAalD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ1D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAa1C;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"activeAuthuser.d.ts","sourceRoot":"","sources":["../../../../../src/ui/utils/activeAuthuser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH,QAAA,MAAM,mBAAmB,wBAAwB,CAAC;AAelD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAalD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQ1D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAOpC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAOrC;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAa1C;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxyhq/services",
3
- "version": "13.0.3",
3
+ "version": "13.1.1",
4
4
  "description": "OxyHQ Expo/React Native SDK — UI components, screens, and native features",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -106,10 +106,10 @@
106
106
  }
107
107
  },
108
108
  "dependencies": {
109
- "@oxyhq/contracts": "0.7.0"
109
+ "@oxyhq/contracts": "workspace:*"
110
110
  },
111
111
  "devDependencies": {
112
- "@oxyhq/core": "^5.1.1",
112
+ "@oxyhq/core": "workspace:^",
113
113
  "nativewind": "5.0.0-preview.3",
114
114
  "react-native-css": "^3.0.0",
115
115
  "@react-native-async-storage/async-storage": "^2.0.0",
@@ -153,7 +153,8 @@
153
153
  "peerDependencies": {
154
154
  "@expo/vector-icons": "^15.0.3",
155
155
  "@oxyhq/bloom": ">=0.16.0",
156
- "@oxyhq/core": "5.1.1",
156
+
157
+ "@oxyhq/core": "workspace:*",
157
158
  "@react-native-async-storage/async-storage": "^2.0.0",
158
159
  "@react-native-community/netinfo": "^11.4.1",
159
160
  "@tanstack/query-async-storage-persister": "^5.101",
package/src/index.ts CHANGED
@@ -211,6 +211,14 @@ export type { AccountMenuProps, AccountMenuAnchor } from './ui/components/Accoun
211
211
  export { default as AccountMenuButton } from './ui/components/AccountMenuButton';
212
212
  export type { AccountMenuButtonProps } from './ui/components/AccountMenuButton';
213
213
 
214
+ // Sidebar account button + its device-account switcher menu (Bluesky-style
215
+ // ProfileCard). `ProfileButton` owns its own open state + anchor measurement
216
+ // and opens `ProfileMenu` upward from a sidebar footer.
217
+ export { default as ProfileButton } from './ui/components/ProfileButton';
218
+ export type { ProfileButtonProps } from './ui/components/ProfileButton';
219
+ export { default as ProfileMenu } from './ui/components/ProfileMenu';
220
+ export type { ProfileMenuProps, ProfileMenuAnchor } from './ui/components/ProfileMenu';
221
+
214
222
  // Unified account switcher (device sign-ins + account graph). `AccountMenuButton`
215
223
  // opens this; the `AccountSwitcherView` body also backs the `AccountSwitcher`
216
224
  // bottom-sheet route.
@@ -0,0 +1,270 @@
1
+ import type React from 'react';
2
+ import { useCallback, useRef, useState } from 'react';
3
+ import {
4
+ View,
5
+ Pressable,
6
+ Platform,
7
+ type StyleProp,
8
+ type ViewStyle,
9
+ } from 'react-native';
10
+ import { MaterialCommunityIcons } from '@expo/vector-icons';
11
+ import { Avatar } from '@oxyhq/bloom/avatar';
12
+ import { Text } from '@oxyhq/bloom/typography';
13
+ import { useTheme } from '@oxyhq/bloom/theme';
14
+ import { getAccountDisplayName, getAccountFallbackHandle } from '@oxyhq/core';
15
+ import { useAuth } from '../hooks/useAuth';
16
+ import { useI18n } from '../hooks/useI18n';
17
+ import ProfileMenu, { type ProfileMenuAnchor } from './ProfileMenu';
18
+
19
+ const isWeb = 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
+ export interface ProfileButtonProps {
32
+ /**
33
+ * Expanded row (avatar + name + handle + chevron) when `true` (default), or a
34
+ * bare avatar-only trigger when `false` (collapsed sidebar).
35
+ */
36
+ expanded?: boolean;
37
+ /**
38
+ * Avatar diameter in px. Defaults to 40 when expanded, 32 when collapsed.
39
+ */
40
+ avatarSize?: number;
41
+ /** Navigate to the "Manage account" surface (settings). */
42
+ onNavigateManage: () => void;
43
+ /** Start the add-account / sign-in flow for an additional account. */
44
+ onAddAccount: () => void;
45
+ /** Optional: navigate to the signed-in user's own profile. */
46
+ onNavigateProfile?: () => void;
47
+ /** Called before the active identity changes so apps can clear scoped state. */
48
+ onBeforeSessionChange?: () => void | Promise<void>;
49
+ /** Extra className applied to the outer trigger. */
50
+ className?: string;
51
+ /** Extra style applied to the outer trigger. */
52
+ style?: StyleProp<ViewStyle>;
53
+ }
54
+
55
+ /**
56
+ * Self-contained sidebar account trigger, modeled on Bluesky's ProfileCard and
57
+ * the Oxy inbox's `MailboxDrawer` footer. Owns its own open state + anchor
58
+ * measurement, and renders {@link ProfileMenu} (the device-account switcher).
59
+ *
60
+ * Three auth states from {@link useAuth}:
61
+ * - **Undetermined** (`!isAuthResolved || isPrivateApiPending`): a neutral
62
+ * avatar-sized skeleton circle, no press.
63
+ * - **Signed in**: a pressable row — Bloom `Avatar` + display name + `@handle`
64
+ * + an `unfold-more-horizontal` chevron. Press opens the menu upward (web)
65
+ * against the measured trigger, or as a bottom sheet (native).
66
+ * - **Signed out**: a "Sign in" row that calls `useAuth().signIn()`.
67
+ *
68
+ * All display strings resolve through `@oxyhq/core`'s
69
+ * `getAccountDisplayName` / `getAccountFallbackHandle` — no hand-rolled name
70
+ * fallbacks. Avatars pass the bare file id as `source` + `variant="thumb"`, so
71
+ * the app's registered `ImageResolver` builds the thumbnail URL.
72
+ */
73
+ const ProfileButton: React.FC<ProfileButtonProps> = ({
74
+ expanded = true,
75
+ avatarSize,
76
+ onNavigateManage,
77
+ onAddAccount,
78
+ onNavigateProfile,
79
+ onBeforeSessionChange,
80
+ className,
81
+ style,
82
+ }) => {
83
+ const {
84
+ user,
85
+ isAuthenticated,
86
+ isAuthResolved,
87
+ isPrivateApiPending,
88
+ signIn,
89
+ } = useAuth();
90
+ const { colors } = useTheme();
91
+ const { t, locale } = useI18n();
92
+
93
+ const [menuOpen, setMenuOpen] = useState(false);
94
+ const [anchor, setAnchor] = useState<ProfileMenuAnchor | null>(null);
95
+
96
+ // Trigger ref for the web anchor measurement. RN-Web exposes `measure()` on
97
+ // host views, so we anchor the popover to the button rect and open upward.
98
+ const triggerRef = useRef<View | null>(null);
99
+
100
+ const resolvedAvatarSize = avatarSize ?? (expanded ? 40 : 32);
101
+
102
+ const openMenu = useCallback(() => {
103
+ if (!isWeb) {
104
+ setAnchor(null);
105
+ setMenuOpen(true);
106
+ return;
107
+ }
108
+ const node = triggerRef.current;
109
+ if (!node || typeof node.measure !== 'function' || typeof window === 'undefined') {
110
+ setAnchor(null);
111
+ setMenuOpen(true);
112
+ return;
113
+ }
114
+ node.measure((_x, _y, _w, _h, pageX, pageY) => {
115
+ if (typeof pageX !== 'number' || typeof pageY !== 'number') {
116
+ setAnchor(null);
117
+ } else {
118
+ // Clamp the panel's left edge inside the viewport gutter.
119
+ const maxLeft = Math.max(
120
+ VIEWPORT_GUTTER,
121
+ window.innerWidth - MENU_WIDTH - VIEWPORT_GUTTER,
122
+ );
123
+ const left = Math.min(Math.max(VIEWPORT_GUTTER, pageX), maxLeft);
124
+ // Anchor the panel's BOTTOM edge just above the trigger top so
125
+ // the menu opens upward from this footer button.
126
+ const bottom = Math.max(
127
+ VIEWPORT_GUTTER,
128
+ window.innerHeight - pageY + VIEWPORT_GUTTER,
129
+ );
130
+ setAnchor({ left, bottom });
131
+ }
132
+ setMenuOpen(true);
133
+ });
134
+ }, []);
135
+
136
+ const handleClose = useCallback(() => {
137
+ setMenuOpen(false);
138
+ }, []);
139
+
140
+ // ── Undetermined: skeleton circle, no interaction. ──────────────────────
141
+ if (!isAuthResolved || isPrivateApiPending) {
142
+ return (
143
+ <View
144
+ className={className}
145
+ style={style}
146
+ accessibilityElementsHidden
147
+ importantForAccessibility="no-hide-descendants"
148
+ >
149
+ <View
150
+ className="rounded-full bg-secondary"
151
+ style={{ width: resolvedAvatarSize, height: resolvedAvatarSize }}
152
+ />
153
+ </View>
154
+ );
155
+ }
156
+
157
+ // ── Signed out: "Sign in" row. ──────────────────────────────────────────
158
+ if (!isAuthenticated || !user) {
159
+ const signInLabel = t('common.actions.signIn') || 'Sign in';
160
+ return (
161
+ <Pressable
162
+ className={`flex-row items-center gap-3 rounded-full px-2 py-2 ${className ?? ''}`}
163
+ style={style}
164
+ onPress={() => { void signIn(); }}
165
+ accessibilityRole="button"
166
+ accessibilityLabel={signInLabel}
167
+ >
168
+ <View
169
+ className="items-center justify-center rounded-full bg-secondary"
170
+ style={{ width: resolvedAvatarSize, height: resolvedAvatarSize }}
171
+ >
172
+ <MaterialCommunityIcons
173
+ name="login"
174
+ size={Math.round(resolvedAvatarSize * 0.5)}
175
+ color={colors.icon}
176
+ />
177
+ </View>
178
+ {expanded ? (
179
+ <Text
180
+ className="flex-1 font-semibold text-foreground"
181
+ numberOfLines={1}
182
+ >
183
+ {signInLabel}
184
+ </Text>
185
+ ) : null}
186
+ </Pressable>
187
+ );
188
+ }
189
+
190
+ // ── Signed in: avatar + identity + chevron. ─────────────────────────────
191
+ const displayName = getAccountDisplayName(user, locale);
192
+ const handle = getAccountFallbackHandle(user);
193
+ const handleLine = handle ? `@${handle}` : null;
194
+
195
+ const avatarNode = (
196
+ <Avatar
197
+ source={user.avatar ?? undefined}
198
+ variant="thumb"
199
+ name={displayName}
200
+ size={resolvedAvatarSize}
201
+ />
202
+ );
203
+
204
+ if (!expanded) {
205
+ return (
206
+ <View className={className} style={style}>
207
+ <Pressable
208
+ ref={triggerRef}
209
+ className="rounded-full"
210
+ onPress={openMenu}
211
+ accessibilityRole="button"
212
+ accessibilityLabel={t('accountSwitcher.switchWhileSignedInAs', { name: displayName })
213
+ || `Switch account, signed in as ${displayName}`}
214
+ >
215
+ {avatarNode}
216
+ </Pressable>
217
+ <ProfileMenu
218
+ open={menuOpen}
219
+ onClose={handleClose}
220
+ anchor={anchor}
221
+ onNavigateManage={onNavigateManage}
222
+ onAddAccount={onAddAccount}
223
+ onNavigateProfile={onNavigateProfile}
224
+ onBeforeSessionChange={onBeforeSessionChange}
225
+ />
226
+ </View>
227
+ );
228
+ }
229
+
230
+ return (
231
+ <View className={className} style={style}>
232
+ <Pressable
233
+ ref={triggerRef}
234
+ className="flex-row items-center gap-3 rounded-full px-2 py-2"
235
+ onPress={openMenu}
236
+ accessibilityRole="button"
237
+ accessibilityLabel={t('accountSwitcher.switchWhileSignedInAs', { name: displayName })
238
+ || `Switch account, signed in as ${displayName}`}
239
+ >
240
+ {avatarNode}
241
+ <View className="min-w-0 flex-1">
242
+ <Text className="font-bold text-foreground" numberOfLines={1}>
243
+ {displayName}
244
+ </Text>
245
+ {handleLine ? (
246
+ <Text className="text-xs text-muted-foreground" numberOfLines={1}>
247
+ {handleLine}
248
+ </Text>
249
+ ) : null}
250
+ </View>
251
+ <MaterialCommunityIcons
252
+ name="unfold-more-horizontal"
253
+ size={18}
254
+ color={colors.textSecondary}
255
+ />
256
+ </Pressable>
257
+ <ProfileMenu
258
+ open={menuOpen}
259
+ onClose={handleClose}
260
+ anchor={anchor}
261
+ onNavigateManage={onNavigateManage}
262
+ onAddAccount={onAddAccount}
263
+ onNavigateProfile={onNavigateProfile}
264
+ onBeforeSessionChange={onBeforeSessionChange}
265
+ />
266
+ </View>
267
+ );
268
+ };
269
+
270
+ export default ProfileButton;